diff --git a/Cigarette.sln b/240510-常德GDX1-1相机-1280x800/Cigarette.sln similarity index 93% rename from Cigarette.sln rename to 240510-常德GDX1-1相机-1280x800/Cigarette.sln index c8e67802..22874c0d 100644 --- a/Cigarette.sln +++ b/240510-常德GDX1-1相机-1280x800/Cigarette.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 -VisualStudioVersion = 17.5.33414.496 +VisualStudioVersion = 17.3.32929.385 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Cigarette", "Cigarette\Cigarette.vcxproj", "{B12702AD-ABFB-343A-A199-8E24837244A3}" EndProject @@ -27,6 +27,6 @@ Global EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution Qt5Version = 5.15.2_msvc2019_64 - SolutionGuid = {38E3B488-98F0-4FA9-A972-B493DF1AC2B4} + SolutionGuid = {0AF1A30E-A12C-4014-ACD5-65A1E6D54D46} EndGlobalSection EndGlobal diff --git a/Cigarette/ASyncQueue.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/ASyncQueue.cpp similarity index 100% rename from Cigarette/ASyncQueue.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/ASyncQueue.cpp diff --git a/Cigarette/ASyncQueue.h b/240510-常德GDX1-1相机-1280x800/Cigarette/ASyncQueue.h similarity index 100% rename from Cigarette/ASyncQueue.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/ASyncQueue.h diff --git a/Cigarette/AlarmInfo.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/AlarmInfo.cpp similarity index 100% rename from Cigarette/AlarmInfo.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/AlarmInfo.cpp diff --git a/Cigarette/AlarmInfo.h b/240510-常德GDX1-1相机-1280x800/Cigarette/AlarmInfo.h similarity index 100% rename from Cigarette/AlarmInfo.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/AlarmInfo.h diff --git a/Cigarette/CaptureThread.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/CaptureThread.cpp similarity index 91% rename from Cigarette/CaptureThread.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/CaptureThread.cpp index d2c858a8..5ca76126 100644 --- a/Cigarette/CaptureThread.cpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/CaptureThread.cpp @@ -1,7 +1,9 @@ #include "CaptureThread.h" #include "common.h" +#include "exportData.h" -extern bool g_debug_mode; //ģʽģʽͣ״̬ܴ +extern bool g_debug_mode; //ģʽģʽֹͣ״̬ܴ +extern SyncQueue<_XMLExportDataInfo>* export_XMLData_Info_queue; //----------------------------------------------------------------------------- CaptureThread::CaptureThread( Device* pCurrDev, bool boTerminated, FunctionInterface* pFI_ ,int Num) : @@ -10,6 +12,15 @@ CaptureThread::CaptureThread( Device* pCurrDev, bool boTerminated, FunctionInter { p_unit_queue = new ASyncQueue(Unit_Queue_Size); } + +void CaptureThread::fpsTimeout(void) +{ + uint64_t delta = m_cntGrabbedImages - m_cntLastGrabbedImages; + m_cntLastGrabbedImages = m_cntGrabbedImages; + QString data = QString("%1").arg(delta); + emit updateStatistics(data.left(4), Local_Num); +} + CaptureThread::~CaptureThread() { delete p_unit_queue; @@ -52,10 +63,10 @@ void CaptureThread::process( void ) //߻ص CIwtCameraLostCallbackMV cam_lost_cb; cam_lost_cb.channel_ = Local_Num; - /*if (cam_lost_cb.registerComponent(pDev_->state) != true) + if (cam_lost_cb.registerComponent(pDev_->state) != true) { std::cout << "ERROR: Unable to register the camera's lost CallBack function!\n"; - }*/ //ε߻صֹ󱨾 + } //ͼɼѭ TDMR_ERROR result = DMR_NO_ERROR; while( ( result = static_cast< TDMR_ERROR >( pFI_->imageRequestSingle() ) ) == DMR_NO_ERROR ) {}; @@ -70,7 +81,7 @@ void CaptureThread::process( void ) mvIMPACT::acquire::Statistics statistics( pDev_ ); mvIMPACT::acquire::Request* pRequest = 0; mvIMPACT::acquire::Request* pPreviousRequest = nullptr; - const unsigned int timeout_ms = 200; + const unsigned int timeout_ms = 100; Ready = true; while( !boTerminated_ ) { @@ -100,7 +111,7 @@ void CaptureThread::process( void ) } cnt++; // display some statistics - if (cnt % 100 == 0) + if (cnt % 10 == 0) { QString data = QString::fromStdString(statistics.framesPerSecond.readS()); emit updateStatistics(data.left(4),Local_Num); diff --git a/Cigarette/CaptureThread.h b/240510-常德GDX1-1相机-1280x800/Cigarette/CaptureThread.h similarity index 98% rename from Cigarette/CaptureThread.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/CaptureThread.h index 264393b0..1c492a3a 100644 --- a/Cigarette/CaptureThread.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/CaptureThread.h @@ -108,9 +108,13 @@ signals: private slots: void process( void ); + void fpsTimeout(void); public: int Local_Num; + QTimer* m_Timer; + uint64_t m_cntGrabbedImages = 0; + uint64_t m_cntLastGrabbedImages = 0; SyncQueue > *p_image_queue; ASyncQueue *p_unit_queue; ASyncQueue *p_result_queue; diff --git a/Cigarette/CaptureThreadBasler.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/CaptureThreadBasler.cpp similarity index 93% rename from Cigarette/CaptureThreadBasler.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/CaptureThreadBasler.cpp index 1560b77f..cdd6de31 100644 --- a/Cigarette/CaptureThreadBasler.cpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/CaptureThreadBasler.cpp @@ -3,6 +3,8 @@ #include "PLCDevice.h" #include "common.h" #include +#include +extern SyncQueue<_XMLExportDataInfo>* export_XMLData_Info_queue; extern PLCDevice * m_PLCDevice; //----------------------------------------------------------------------------- CaptureThreadBasler::CaptureThreadBasler(Pylon::CBaslerUniversalInstantCamera* pCurrDev, bool boTerminated,int Num,int shoot) : @@ -24,9 +26,10 @@ void CaptureThreadBasler::process(void) bool last_result = false; try { - CSampleConfigurationEventHandler CfgEvent; - CfgEvent.channel_ = Local_Num; - pDev_->RegisterConfiguration(&CfgEvent, Pylon::RegistrationMode_Append, Pylon::Cleanup_Delete); + CSampleConfigurationEventHandler *CfgEvent=NULL; + CfgEvent = new CSampleConfigurationEventHandler; + CfgEvent->channel_ = Local_Num; + pDev_->RegisterConfiguration(CfgEvent, Pylon::RegistrationMode_Append, Pylon::Cleanup_None); CSampleImageEventHandler ImageEvent; ImageEvent.p_image_queue_ = p_image_queue; @@ -111,7 +114,7 @@ void CaptureThreadBasler::process(void) #endif #endif - const unsigned int timeout_ms = 200; + const unsigned int timeout_ms = 100; // This smart pointer will receive the grab result data. Pylon::CGrabResultPtr ptrGrabResult; @@ -140,9 +143,13 @@ void CaptureThreadBasler::process(void) #endif if (m_Timer) delete m_Timer; pDev_->StopGrabbing(); - pDev_->DeregisterConfiguration(&CfgEvent); + pDev_->Close(); + pDev_->GrabCameraEvents = false; + pDev_->DeregisterConfiguration(CfgEvent); pDev_->DeregisterImageEventHandler(&ImageEvent); +#ifndef USB_BASLER_NEW_FW pDev_->DeregisterCameraEventHandler(&BurstEvent, "EventFrameBurstStartData"); +#endif } catch(const Pylon::GenericException& e) { diff --git a/Cigarette/CaptureThreadBasler.h b/240510-常德GDX1-1相机-1280x800/Cigarette/CaptureThreadBasler.h similarity index 98% rename from Cigarette/CaptureThreadBasler.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/CaptureThreadBasler.h index dfdc7297..aa5129b8 100644 --- a/Cigarette/CaptureThreadBasler.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/CaptureThreadBasler.h @@ -129,12 +129,12 @@ private: QMutex lock_; }; //----------------------------------------------------------------------------- -class CSampleConfigurationEventHandler : public Pylon::CConfigurationEventHandler +class CSampleConfigurationEventHandler : public Pylon::CBaslerUniversalConfigurationEventHandler //CConfigurationEventHandler { public: int channel_; // This method is called from a different thread when the camera device removal has been detected. - void OnCameraDeviceRemoved(Pylon::CInstantCamera& camera) + void OnCameraDeviceRemoved( Pylon::CBaslerUniversalInstantCamera& camera ) { SingleCamInfo[channel_].OffLine = true; } diff --git a/Cigarette/CaptureThreadHIK.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/CaptureThreadHIK.cpp similarity index 76% rename from Cigarette/CaptureThreadHIK.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/CaptureThreadHIK.cpp index 04ff410b..329b52d9 100644 --- a/Cigarette/CaptureThreadHIK.cpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/CaptureThreadHIK.cpp @@ -3,8 +3,10 @@ #include "PLCDevice.h" #include "common.h" #include -extern bool g_debug_mode; //ģʽģʽͣ״̬ܴ +#include "exportData.h" +extern bool g_debug_mode; //ģʽģʽֹͣ״̬ܴ extern SingleCamInfoStruct SingleCamInfo[NumberOfSupportedCameras]; +extern SyncQueue<_XMLExportDataInfo>* export_XMLData_Info_queue; extern PLCDevice * m_PLCDevice; inline void LossCallBackfunction(unsigned int pData, void* pUser){ @@ -54,6 +56,7 @@ inline void RisingGpioEventfunction(MV_EVENT_OUT_INFO* pEventInfo, void* pUser){ bool temp; CaptureThreadHIKptr->p_shooted_queue->take(temp); } + #elif defined ONE_TIME_SHIFT if( CaptureThreadHIKptr->p_shooted_queue->count() > 0 @@ -87,25 +90,34 @@ inline void RisingGpioEventfunction(MV_EVENT_OUT_INFO* pEventInfo, void* pUser){ std::cout << "RisingGpioEventfunction error" << std::endl; } } + +#define CaptureThreadHIK_init(a)\ +void __stdcall LossCallBack##a(unsigned int pData, void* pUser){LossCallBackfunction(pData,pUser);}\ +void __stdcall FallingGpioEvent##a(MV_EVENT_OUT_INFO* pEventInfo, void* pUser){FallingGpioEventfunction(pEventInfo,pUser);}\ +void __stdcall RisingGpioEvent##a(MV_EVENT_OUT_INFO* pEventInfo, void* pUser){RisingGpioEventfunction(pEventInfo,pUser);} #if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>0) -void __stdcall LossCallBack1(unsigned int pData, void* pUser){LossCallBackfunction(pData,pUser);} -void __stdcall FallingGpioEvent1(MV_EVENT_OUT_INFO* pEventInfo, void* pUser){FallingGpioEventfunction(pEventInfo,pUser);} -void __stdcall RisingGpioEvent1(MV_EVENT_OUT_INFO* pEventInfo, void* pUser){RisingGpioEventfunction(pEventInfo,pUser);} +CaptureThreadHIK_init(1) #endif #if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>1) -void __stdcall LossCallBack2(unsigned int pData, void* pUser){LossCallBackfunction(pData,pUser);} -void __stdcall FallingGpioEvent2(MV_EVENT_OUT_INFO* pEventInfo, void* pUser){FallingGpioEventfunction(pEventInfo,pUser);} -void __stdcall RisingGpioEvent2(MV_EVENT_OUT_INFO* pEventInfo, void* pUser){RisingGpioEventfunction(pEventInfo,pUser);} +CaptureThreadHIK_init(2) #endif #if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>2) -void __stdcall LossCallBack3(unsigned int pData, void* pUser){LossCallBackfunction(pData,pUser);} -void __stdcall FallingGpioEvent3(MV_EVENT_OUT_INFO* pEventInfo, void* pUser){FallingGpioEventfunction(pEventInfo,pUser);} -void __stdcall RisingGpioEvent3(MV_EVENT_OUT_INFO* pEventInfo, void* pUser){RisingGpioEventfunction(pEventInfo,pUser);} +CaptureThreadHIK_init(3) #endif #if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>3) -void __stdcall LossCallBack4(unsigned int pData, void* pUser){LossCallBackfunction(pData,pUser);} -void __stdcall FallingGpioEvent4(MV_EVENT_OUT_INFO* pEventInfo, void* pUser){FallingGpioEventfunction(pEventInfo,pUser);} -void __stdcall RisingGpioEvent4(MV_EVENT_OUT_INFO* pEventInfo, void* pUser){RisingGpioEventfunction(pEventInfo,pUser);} +CaptureThreadHIK_init(4) +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>4) +CaptureThreadHIK_init(5) +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>5) +CaptureThreadHIK_init(6) +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>6) +CaptureThreadHIK_init(7) +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>7) +CaptureThreadHIK_init(8) #endif void(*LossCallBack[NumberOfSupportedCameras])(unsigned int pData, void* pUser) = { @@ -121,6 +133,18 @@ void(*LossCallBack[NumberOfSupportedCameras])(unsigned int pData, void* pUser) = #if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>3) ,LossCallBack4 #endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>4) + ,LossCallBack5 +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>5) + ,LossCallBack6 +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>6) + ,LossCallBack7 +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>7) + ,LossCallBack8 +#endif }; void(*FallingGpioEvent[NumberOfSupportedCameras])(MV_EVENT_OUT_INFO* pEventInfo, void* pUser) = { #if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>0) @@ -135,6 +159,18 @@ void(*FallingGpioEvent[NumberOfSupportedCameras])(MV_EVENT_OUT_INFO* pEventInfo, #if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>3) ,FallingGpioEvent4 #endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>4) + ,FallingGpioEvent5 +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>5) + ,FallingGpioEvent6 +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>6) + ,FallingGpioEvent7 +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>7) + ,FallingGpioEvent8 +#endif }; void(*RisingGpioEvent[NumberOfSupportedCameras])(MV_EVENT_OUT_INFO* pEventInfo, void* pUser) = { #if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>0) @@ -149,6 +185,18 @@ void(*RisingGpioEvent[NumberOfSupportedCameras])(MV_EVENT_OUT_INFO* pEventInfo, #if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>3) ,RisingGpioEvent4 #endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>4) + ,RisingGpioEvent5 +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>5) + ,RisingGpioEvent6 +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>6) + ,RisingGpioEvent7 +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>7) + ,RisingGpioEvent8 +#endif }; void CaptureThreadHIK::fpsTimeout(void) { @@ -185,7 +233,7 @@ void CaptureThreadHIK::process( void ) nRet = MV_CC_RegisterExceptionCallBack(CamHandle, LossCallBack[Local_Num], this); if (nRet) { std::cout << "can not register loss callback" << std::endl; nnRet = nRet; } -#ifndef IMM_FEED_BACK +//#ifdef IMM_FEED_BACK ///޷( Ӻһifndef // Ӻifdef) nRet = MV_CC_SetEnumValueByString(CamHandle, "EventSelector", "Line0FallingEdge"); if (nRet) { std::cout << "can not set EventSelector" << std::endl; nnRet = nRet; } @@ -203,7 +251,7 @@ void CaptureThreadHIK::process( void ) nRet = MV_CC_RegisterEventCallBackEx(CamHandle, "Line0RisingEdge", RisingGpioEvent[Local_Num], this); if (nRet) { std::cout << "can not register GPIO callback" << std::endl; nnRet = nRet; } -#endif +//#endif m_Timer = new QTimer(); connect(m_Timer, SIGNAL(timeout()), this, SLOT(fpsTimeout())); @@ -213,17 +261,18 @@ void CaptureThreadHIK::process( void ) MVCC_INTVALUE_EX stIntValue = { 0 }; nRet = MV_CC_GetIntValueEx(CamHandle, "PayloadSize", &stIntValue); if (nRet) { std::cout << "Get PayloadSize error" << std::endl; } - nDataSize = stIntValue.nCurValue; + nDataSize = stIntValue.nCurValue*3;/// MV_CC_StartGrabbing(CamHandle); Ready = true; while(!boTerminated_) { - nRet = MV_CC_GetOneFrameTimeout(CamHandle, g_pImage_buf, nDataSize, &stFrameInfo, 200); + //nRet = MV_CC_GetOneFrameTimeout(CamHandle, g_pImage_buf, nDataSize, &stFrameInfo, 200); + nRet = MV_CC_GetImageForBGR(CamHandle, g_pImage_buf, nDataSize, &stFrameInfo, 50); if (MV_OK == nRet) { m_cntGrabbedImages++; - cv::Mat openCVImage(stFrameInfo.nHeight, stFrameInfo.nWidth, CV_8UC1, g_pImage_buf); + cv::Mat openCVImage(stFrameInfo.nHeight, stFrameInfo.nWidth, CV_8UC3, g_pImage_buf); cv::Mat image_clone = openCVImage.clone(); if (!g_debug_mode) { diff --git a/Cigarette/CaptureThreadHIK.h b/240510-常德GDX1-1相机-1280x800/Cigarette/CaptureThreadHIK.h similarity index 100% rename from Cigarette/CaptureThreadHIK.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/CaptureThreadHIK.h diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette.qtvscr b/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette.qtvscr new file mode 100644 index 00000000..cadfe19a --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette.qtvscr @@ -0,0 +1,13309 @@ + + +
+ + + Qt Visual Studio Tools + + + Project Format Conversion + + + Report generated on 2024-05-10 17:00:49 + +
+
+ + Files + + + + + [Before] + [After] + + [Diff before/after] + + + [Diff before/current] + + + [Diff after/current] + + + + + + + [Before] + [After] + + [Diff before/after] + + + [Diff before/current] + + + [Diff after/current] + + + + + + + [Before] + [After] + + [Diff before/after] + + + [Diff before/current] + + + [Diff after/current] + + + +
+
+ + Changes + + + + + + + + + + + + + + + + + + + + + + + + ]]>]]> + + + + + ]]>]]> + + + + + + + + + + + + + ]]> + + + + + + + + + + $(QTDIR)]]> + + + + + + + + + + %(FullPath)]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + UNICODE;_UNICODE;$(Platform);WIN64;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;QT_NETWORK_LIB;%(PreprocessorDefinitions)]]> + + + + + + + + + + Moc'ing %(Identity)...]]> + + + + + + + + + + output]]> + + + + + + + + + + .;.\GeneratedFiles;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtNetwork]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + %(Filename)]]> + + + + + + + + + + .\GeneratedFiles\qrc_%(Filename).cpp]]> + + + + + + + + + + %(FullPath)]]> + + + + + + + + + + $(QTDIR)]]> + + + + + + + + + + default]]> + + + + + + + + + + true]]> + + + + + + + + + + Rcc'ing %(Identity)...]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + $(QTDIR)]]> + + + + + + + + + + %(FullPath)]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h]]> + + + + + + + + + + Uic'ing %(Identity)...]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]>]]> + + + + + ]]>]]> + + + + + + + + + + + + + ]]> + + + + + + + + + + $(QTDIR)]]> + + + + + + + + + + %(FullPath)]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB;%(PreprocessorDefinitions)]]> + + + + + + + + + + Moc'ing %(Identity)...]]> + + + + + + + + + + output]]> + + + + + + + + + + .;.\GeneratedFiles;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;G:\code_library\c\opencv\4.3\build-opencv-cpu\include;$(ProjectDir)MvIMPACT;$(ProjectDir)Pylon6.2\include;$(ProjectDir)Common;$(ProjectDir)modbus;$(ProjectDir)MVS3.2.1\Include;$(ProjectDir)PLC;$(QTDIR)\include\QtNetwork]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + $(QTDIR)]]> + + + + + + + + + + %(FullPath)]]> + + + + + + + + + + .\GeneratedFiles\qrc_%(Filename).cpp]]> + + + + + + + + + + %(Filename)]]> + + + + + + + + + + default]]> + + + + + + + + + + true]]> + + + + + + + + + + Rcc'ing %(Identity)...]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + $(QTDIR)]]> + + + + + + + + + + %(FullPath)]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h]]> + + + + + + + + + + Uic'ing %(Identity)...]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]>]]> + + + + + ]]>]]> + + + + + + + + + + + + + ]]> + + + + + + + + + + $(QTDIR)]]> + + + + + + + + + + %(FullPath)]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + UNICODE;_UNICODE;$(Platform);WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;QT_NETWORK_LIB;%(PreprocessorDefinitions)]]> + + + + + + + + + + Moc'ing %(Identity)...]]> + + + + + + + + + + output]]> + + + + + + + + + + .;.\GeneratedFiles;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtNetwork]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + $(QTDIR)]]> + + + + + + + + + + %(FullPath)]]> + + + + + + + + + + .\GeneratedFiles\qrc_%(Filename).cpp]]> + + + + + + + + + + %(Filename)]]> + + + + + + + + + + default]]> + + + + + + + + + + true]]> + + + + + + + + + + Rcc'ing %(Identity)...]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + $(QTDIR)]]> + + + + + + + + + + %(FullPath)]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h]]> + + + + + + + + + + Uic'ing %(Identity)...]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]>]]> + + + + + ]]>]]> + + + + + + + + + + + + + ]]> + + + + + + + + + + $(QTDIR)]]> + + + + + + + + + + %(FullPath)]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + Moc'ing %(Identity)...]]> + + + + + + + + + + output]]> + + + + + + + + + + .;.\GeneratedFiles;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(ProjectDir)MvIMPACT;$(ProjectDir)OpenCV455Simple\include;$(ProjectDir)Common;$(ProjectDir)Pylon6.2\include;$(ProjectDir)modbus;$(ProjectDir)MVS3.2.1\Include;$(ProjectDir)PLC;$(QTDIR)\include\QtNetwork]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + $(QTDIR)]]> + + + + + + + + + + %(FullPath)]]> + + + + + + + + + + .\GeneratedFiles\qrc_%(Filename).cpp]]> + + + + + + + + + + %(Filename)]]> + + + + + + + + + + default]]> + + + + + + + + + + true]]> + + + + + + + + + + Rcc'ing %(Identity)...]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + $(QTDIR)]]> + + + + + + + + + + %(FullPath)]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h]]> + + + + + + + + + + Uic'ing %(Identity)...]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + true]]> + + + + + + + + + + true]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + $(QTDIR)\bin\moc.exe]]>]]> + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB]]>]]> + + + + + + + Moc%27ing cigarette.h...]]> + + + + + ]]> + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing cigarette.h...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing cigarette.h...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing cigarette.h...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)OpenCV455Simple\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + $(QTDIR)\bin\moc.exe]]>]]> + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB]]>]]> + + + + + + + Moc%27ing %(Identity)...]]> + + + + + ]]> + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)OpenCV455Simple\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + $(QTDIR)\bin\moc.exe]]>]]> + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB]]>]]> + + + + + + + Moc%27ing %(Identity)...]]> + + + + + ]]> + + + + + + + ]]>]]> + + + + + ]]> + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%]]>]]> + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB;%]]>]]> + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + ]]> + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)OpenCV455Simple\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing alarmdialog.hpp...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing alarmdialog.hpp...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing alarmdialog.hpp...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing alarmdialog.hpp...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)OpenCV455Simple\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + $(QTDIR)\bin\moc.exe]]>]]> + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB]]>]]> + + + + + + + Moc%27ing CaptureThread.h...]]> + + + + + ]]> + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing CaptureThread.h...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing CaptureThread.h...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing CaptureThread.h...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)OpenCV455Simple\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + $(QTDIR)\bin\moc.exe]]>]]> + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB]]>]]> + + + + + + + Moc%27ing %(Identity)...]]> + + + + + ]]> + + + + + + + ]]>]]> + + + + + ]]> + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%]]>]]> + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB;%]]>]]> + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + ]]> + + + + + + + Moc%27ing %(Identity)...]]> + + + + + ]]> + + + + + + + .\GeneratedFiles\$]]>]]> + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB;%]]>]]> + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + ]]> + + + + + + + $(QTDIR)\bin\moc]]>]]> + + + + + ]]> + + + + + + + Moc%27ing ]]>]]> + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB;]]>]]> + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + ]]> + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o "]]>]]> + + + + + ]]> + + + + + + + $(QTDIR)\bin\moc.exe]]>]]> + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB]]>]]> + + + + + + + Moc%27ing %(Identity)...]]> + + + + + ]]> + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)OpenCV455Simple\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)OpenCV455Simple\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)OpenCV455Simple\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)OpenCV455Simple\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)OpenCV455Simple\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + $(QTDIR)\bin\moc.exe]]>]]> + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB]]>]]> + + + + + + + Moc%27ing plcsetup.hpp...]]> + + + + + ]]> + + + + + + + ]]>]]> + + + + + ]]> + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%]]>]]> + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB;%]]>]]> + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + ]]> + + + + + + + Moc%27ing plcsetup]]>]]> + + + + + ]]> + + + + + + + .\GeneratedFiles\$]]>]]> + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB;%]]>]]> + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + ]]> + + + + + + + $(QTDIR)\bin\moc]]>]]> + + + + + ]]> + + + + + + + Moc%27ing plcsetup.hpp...]]> + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB;%(PreprocessorDefinitions]]>]]> + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + ]]> + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o "]]>]]> + + + + + ]]> + + + + + + + $(QTDIR)\bin\moc.exe]]>]]> + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB;WIN32_LEAN_AND_MEAN]]>]]> + + + + + + + Moc%27ing plcsetup.hpp...]]> + + + + + ]]> + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)OpenCV455Simple\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing db_label.h...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing db_label.h...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing db_label.h...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing db_label.h...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)OpenCV455Simple\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing debugthread.h...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing debugthread.h...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing debugthread.h...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing debugthread.h...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)OpenCV455Simple\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing dialogin.hpp...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing dialogin.hpp...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing dialogin.hpp...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing dialogin.hpp...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)OpenCV455Simple\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -DWIN32_LEAN_AND_MEAN -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)OpenCV455Simple\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + $(QTDIR)\bin\moc.exe]]>]]> + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB]]>]]> + + + + + + + Moc%27ing %(Identity)...]]> + + + + + ]]> + + + + + + + ]]>]]> + + + + + ]]> + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%]]>]]> + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB;%]]>]]> + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + ]]> + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)OpenCV455Simple\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)OpenCV455Simple\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + $(QTDIR)\bin\moc.exe]]>]]> + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB]]>]]> + + + + + + + Moc%27ing %(Identity)...]]> + + + + + ]]> + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)OpenCV455Simple\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + $(QTDIR)\bin\moc.exe]]>]]> + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB]]>]]> + + + + + + + Moc%27ing dialogsetuppasswd.hpp...]]> + + + + + ]]> + + + + + + + ]]>]]> + + + + + ]]> + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%]]>]]> + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB;%]]>]]> + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + ]]> + + + + + + + Moc%27ing dialogsetuppasswd.hpp...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing dialogsetuppasswd.hpp...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing dialogsetuppasswd.hpp...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)OpenCV455Simple\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing dialogsetup.hpp...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing dialogsetup.hpp...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing dialogsetup.hpp...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath)]]> + + + + + + + + + + Moc%27ing dialogsetup.hpp...]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + "$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions)  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)OpenCV455Simple\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork"]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + %(FullPath);%(AdditionalInputs)]]> + + + + + + + + + + Rcc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\qrc_%(Filename).cpp;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\rcc.exe" -name "%(Filename)" -no-compress "%(FullPath)" -o .\GeneratedFiles\qrc_%(Filename).cpp]]> + + + + + + + + + + %(FullPath);%(AdditionalInputs)]]> + + + + + + + + + + Rcc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\qrc_%(Filename).cpp;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\rcc.exe" -name "%(Filename)" -no-compress "%(FullPath)" -o .\GeneratedFiles\qrc_%(Filename).cpp]]> + + + + + + + + + + %(FullPath);%(AdditionalInputs)]]> + + + + + + + + + + Rcc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\qrc_%(Filename).cpp;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\rcc.exe" -name "%(Filename)" -no-compress "%(FullPath)" -o .\GeneratedFiles\qrc_%(Filename).cpp]]> + + + + + + + + + + %(FullPath);%(AdditionalInputs)]]> + + + + + + + + + + Rcc%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\qrc_%(Filename).cpp;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\rcc.exe" -name "%(Filename)" -no-compress "%(FullPath)" -o .\GeneratedFiles\qrc_%(Filename).cpp]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + $(QTDIR)\bin\uic.exe;%(AdditionalInputs)]]> + + + + + + + + + + Uic%27ing %(Identity)...]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h;%(Outputs)]]> + + + + + + + + + + "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"]]> + + + + + + + + + + ]]> + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Debug]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Release]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Debug]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Release]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Debug]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Release]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Debug]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Release]]> + + + + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Debug]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Release]]> + + + + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Debug]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Release]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Debug]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Release]]> + + + + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Debug]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Release]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Debug]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Release]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Debug]]> + + + + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Release]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Debug]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Release]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Debug]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Release]]> + + + + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Debug]]> + + + + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Release]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Debug]]> + + + + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Release]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Debug]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Release]]> + + + + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Debug]]> + + + + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Release]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Debug]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Release]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Debug]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Release]]> + + + + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Debug]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Release]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Debug]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files\Release]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files]]> + + + + + + + + + + + + + ]]> + + + + + + + + + + Generated Files]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + + + + + + Generated Files]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + Generated Files]]> + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + true]]> + + + + + + + + + + + + + true]]> + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + Qt4VSv1.0]]> + + + + + QtVS_v304]]> + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + $(MSBuildProjectDirectory)\QtMsBuild]]> + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + ]]> + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + ]]> + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + 5.15.2_msvc2019_64]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + 5.15.2_msvc2019_64]]> + + + + + + + + + + ]]> + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + UNICODE;_UNICODE;WIN32;WIN64;]]>]]> + + + + + UNICODE;_UNICODE;WIN32;WIN64;]]>]]> + + + + + + + + + + UNICODE;_UNICODE;WIN32;WIN64;]]>]]> + + + + + UNICODE;_UNICODE;WIN32;WIN64;]]>]]> + + + + + + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;]]>]]> + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;]]>]]> + + + + + + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;]]>]]> + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;]]>]]> + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + .;.\GeneratedFiles]]>]]> + + + + + .;.\GeneratedFiles]]>]]> + + + + + + + + + + .;.\GeneratedFiles]]>]]> + + + + + .;.\GeneratedFiles]]>]]> + + + + + + + + + + .;.\GeneratedFiles]]>]]> + + + + + .;.\GeneratedFiles]]>]]> + + + + + + + + + + .;.\GeneratedFiles]]>]]> + + + + + .;.\GeneratedFiles]]>]]> + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + qtmaind.lib;Qt5Cored.lib;Qt5Widgetsd.lib;Qt5Guid.lib;Qt5Networkd.lib;%]]>]]> + + + + + %]]>]]> + + + + + + + + + + qtmaind.lib;Qt5Cored.lib;Qt5Widgetsd.lib;Qt5Guid.lib;opencv_world430d]]>]]> + + + + + opencv_world430d]]>]]> + + + + + + + + + + qtmain.lib;Qt5Core.lib;Qt5Widgets.lib;Qt5Gui.lib;Qt5Network.lib;%]]>]]> + + + + + %]]>]]> + + + + + + + + + + qtmain.lib;Qt5Core.lib;Qt5Widgets.lib;Qt5Gui.lib;opencv_world455]]>]]> + + + + + opencv_world455]]>]]> + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + $(QTDIR)\lib;%]]>]]> + + + + + %]]>]]> + + + + + + + + + + $(QTDIR)\lib;G:\code_library\c\opencv\4]]>]]> + + + + + G:\code_library\c\opencv\4]]>]]> + + + + + + + + + + $(QTDIR)\lib;%]]>]]> + + + + + %]]>]]> + + + + + + + + + + $(]]>]]> + + + + + $(]]>]]> + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + + + + core;network;gui;widgets]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + core;network;gui;widgets]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + core;network;gui;widgets]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + + + + core;network;gui;widgets]]> + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + ]]> + + + + + ]]> + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + C:\Qt\5.15.2\msvc2019_64]]> + + + + + + + + + + + + + C:\Qt\5.15.2\msvc2019_64]]> + + + + + + + +
+ + Dir and FileName]]> + + + + + + + + + + + + + + + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)]]> + + + + + + + + + + moc_%(Filename).cpp]]> + + + + + + + + + + + + + .\GeneratedFiles]]> + + + + + + + + + + qrc_%(Filename).cpp]]> + + + + + + + + + + + + + .\GeneratedFiles]]> + + + + + + + + + + ui_%(Filename).h]]> + + + + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)]]> + + + + + + + + + + moc_%(Filename).cpp]]> + + + + + + + + + + + + + .\GeneratedFiles]]> + + + + + + + + + + qrc_%(Filename).cpp]]> + + + + + + + + + + + + + .\GeneratedFiles]]> + + + + + + + + + + ui_%(Filename).h]]> + + + + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)]]> + + + + + + + + + + moc_%(Filename).cpp]]> + + + + + + + + + + + + + .\GeneratedFiles]]> + + + + + + + + + + qrc_%(Filename).cpp]]> + + + + + + + + + + + + + .\GeneratedFiles]]> + + + + + + + + + + ui_%(Filename).h]]> + + + + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)]]> + + + + + + + + + + moc_%(Filename).cpp]]> + + + + + + + + + + + + + .\GeneratedFiles]]> + + + + + + + + + + qrc_%(Filename).cpp]]> + + + + + + + + + + + + + .\GeneratedFiles]]> + + + + + + + + + + ui_%(Filename).h]]> + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + $(QTDIR)]]> + + + + + + + + + + %(FullPath)]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + UNICODE;_UNICODE;$(Platform);WIN64;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;QT_NETWORK_LIB;%(PreprocessorDefinitions)]]> + + + + + + + + + + + + + .;.\GeneratedFiles;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtNetwork]]> + + + + + + + + + + + + + .\GeneratedFiles\qrc_%(Filename).cpp]]> + + + + + + + + + + %(FullPath)]]> + + + + + + + + + + $(QTDIR)]]> + + + + + + + + + + + + + $(QTDIR)]]> + + + + + + + + + + %(FullPath)]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h]]> + + + + + + + + + + + + + $(QTDIR)]]> + + + + + + + + + + %(FullPath)]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB;%(PreprocessorDefinitions)]]> + + + + + + + + + + + + + .;.\GeneratedFiles;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;G:\code_library\c\opencv\4.3\build-opencv-cpu\include;$(ProjectDir)MvIMPACT;$(ProjectDir)Pylon6.2\include;$(ProjectDir)Common;$(ProjectDir)modbus;$(ProjectDir)MVS3.2.1\Include;$(ProjectDir)PLC;$(QTDIR)\include\QtNetwork]]> + + + + + + + + + + + + + $(QTDIR)]]> + + + + + + + + + + %(FullPath)]]> + + + + + + + + + + .\GeneratedFiles\qrc_%(Filename).cpp]]> + + + + + + + + + + + + + $(QTDIR)]]> + + + + + + + + + + %(FullPath)]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h]]> + + + + + + + + + + + + + $(QTDIR)]]> + + + + + + + + + + %(FullPath)]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + UNICODE;_UNICODE;$(Platform);WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;QT_NETWORK_LIB;%(PreprocessorDefinitions)]]> + + + + + + + + + + + + + .;.\GeneratedFiles;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtNetwork]]> + + + + + + + + + + + + + $(QTDIR)]]> + + + + + + + + + + %(FullPath)]]> + + + + + + + + + + .\GeneratedFiles\qrc_%(Filename).cpp]]> + + + + + + + + + + + + + $(QTDIR)]]> + + + + + + + + + + %(FullPath)]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h]]> + + + + + + + + + + + + + $(QTDIR)]]> + + + + + + + + + + %(FullPath)]]> + + + + + + + + + + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp]]> + + + + + + + + + + + + + .;.\GeneratedFiles;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(ProjectDir)MvIMPACT;$(ProjectDir)OpenCV455Simple\include;$(ProjectDir)Common;$(ProjectDir)Pylon6.2\include;$(ProjectDir)modbus;$(ProjectDir)MVS3.2.1\Include;$(ProjectDir)PLC;$(QTDIR)\include\QtNetwork]]> + + + + + + + + + + + + + $(QTDIR)]]> + + + + + + + + + + %(FullPath)]]> + + + + + + + + + + .\GeneratedFiles\qrc_%(Filename).cpp]]> + + + + + + + + + + + + + $(QTDIR)]]> + + + + + + + + + + %(FullPath)]]> + + + + + + + + + + .\GeneratedFiles\ui_%(Filename).h]]> + + + + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB;%(PreprocessorDefinitions)]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB;%(PreprocessorDefinitions)]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB;%(PreprocessorDefinitions)]]> + + + + + ]]> + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB;%(PreprocessorDefinitions)]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB;%(PreprocessorDefinitions)]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB;%(PreprocessorDefinitions)]]> + + + + + ]]> + + + + + + + ]]> + + + + + ]]> + + + + + + + ]]> + + + + + ]]> + + + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB;%(PreprocessorDefinitions)]]> + + + + + ]]> + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB;%(PreprocessorDefinitions)]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB;%(PreprocessorDefinitions)]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB;%(PreprocessorDefinitions)]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB;%(PreprocessorDefinitions)]]> + + + + + ]]> + + + + + + + ]]> + + + + + ]]> + + + + + + + ]]> + + + + + ]]> + + + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB;%(PreprocessorDefinitions)]]> + + + + + ]]> + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB;%(PreprocessorDefinitions)]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB;%(PreprocessorDefinitions)]]> + + + + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB;WIN32_LEAN_AND_MEAN;%(PreprocessorDefinitions)]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB;%(PreprocessorDefinitions)]]> + + + + + ]]> + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB;%(PreprocessorDefinitions)]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB;%(PreprocessorDefinitions)]]> + + + + + + + + + + ]]> + + + + + + + + + + + + + ]]> + + + + + ]]> + + + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB;%(PreprocessorDefinitions)]]> + + + + + ]]> + + + + + + + ]]> + + + + + + + + + + ]]> + + + + + + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB;%(PreprocessorDefinitions)]]> + + + + + + + + + + ]]> + + + + + + + +
+
+
+ +
+
+ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette.vcxproj b/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette.vcxproj new file mode 100644 index 00000000..4a4762d5 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette.vcxproj @@ -0,0 +1,388 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {B12702AD-ABFB-343A-A199-8E24837244A3} + QtVS_v304 + 10.0 + $(MSBuildProjectDirectory)\QtMsBuild + + + + Application + v143 + + + Application + v143 + + + Application + v143 + + + Application + v143 + + + + + core;network;gui;widgets + + + 5.15.2_msvc2019_64 + core;network;gui;widgets + + + core;network;gui;widgets + + + 5.14.2_msvc2017_64 + core;network;gui;widgets + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>14.0.25431.1 + + + $(SolutionDir)$(Platform)\$(Configuration)\ + + + $(SolutionDir)$(Platform)\$(Configuration)\ + + + $(SolutionDir)$(Platform)\$(Configuration)\ + + + $(SolutionDir)$(Platform)\$(Configuration)\ + $(IncludePath) + + + + UNICODE;_UNICODE;WIN32;WIN64;%(PreprocessorDefinitions) + .;.\GeneratedFiles;.\GeneratedFiles\$(ConfigurationName);%(AdditionalIncludeDirectories) + Disabled + ProgramDatabase + MultiThreadedDebugDLL + true + true + + + Windows + $(OutDir)\$(ProjectName).exe + %(AdditionalLibraryDirectories) + true + %(AdditionalDependencies) + + + Moc'ing %(Identity)... + output + .\GeneratedFiles\$(ConfigurationName) + moc_%(Filename).cpp + + + %(Filename) + default + true + Rcc'ing %(Identity)... + .\GeneratedFiles + qrc_%(Filename).cpp + + + Uic'ing %(Identity)... + .\GeneratedFiles + ui_%(Filename).h + + + + + UNICODE;_UNICODE;WIN32;WIN64;NOMINMAX;%(PreprocessorDefinitions) + .;.\GeneratedFiles;.\GeneratedFiles\$(ConfigurationName);G:\code_library\c\opencv\4.3\build-opencv-cpu\include;$(ProjectDir)MvIMPACT;$(ProjectDir)Pylon6.2\include;$(ProjectDir)Common;$(ProjectDir)modbus;$(ProjectDir)MVS3.2.1\Include;$(ProjectDir)PLC;%(AdditionalIncludeDirectories) + MaxSpeed + ProgramDatabase + MultiThreadedDebugDLL + true + true + stdcpp14 + + + Console + $(OutDir)\$(ProjectName).exe + G:\code_library\c\opencv\4.3\build-opencv-cpu\x64\vc15\lib;$(ProjectDir)Pylon6.2\lib\Win64;%(AdditionalLibraryDirectories) + false + opencv_world430d.lib;modbus.lib;mvDeviceManager.lib;MvCameraControl.lib;%(AdditionalDependencies) + + + Moc'ing %(Identity)... + output + .\GeneratedFiles\$(ConfigurationName) + moc_%(Filename).cpp + + + %(Filename) + default + true + Rcc'ing %(Identity)... + .\GeneratedFiles + qrc_%(Filename).cpp + + + Uic'ing %(Identity)... + .\GeneratedFiles + ui_%(Filename).h + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;%(PreprocessorDefinitions) + .;.\GeneratedFiles;.\GeneratedFiles\$(ConfigurationName);%(AdditionalIncludeDirectories) + + MultiThreadedDLL + true + true + + + Windows + $(OutDir)\$(ProjectName).exe + %(AdditionalLibraryDirectories) + false + %(AdditionalDependencies) + + + Moc'ing %(Identity)... + output + .\GeneratedFiles\$(ConfigurationName) + moc_%(Filename).cpp + + + %(Filename) + default + true + Rcc'ing %(Identity)... + .\GeneratedFiles + qrc_%(Filename).cpp + + + Uic'ing %(Identity)... + .\GeneratedFiles + ui_%(Filename).h + + + + + UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;NOMINMAX;WIN32_LEAN_AND_MEAN;%(PreprocessorDefinitions) + .;.\GeneratedFiles;.\GeneratedFiles\$(ConfigurationName);$(ProjectDir)MvIMPACT;$(ProjectDir)OpenCV455Simple\include;$(ProjectDir)Common;$(ProjectDir)Pylon6.2\include;$(ProjectDir)modbus;$(ProjectDir)MVS3.2.1\Include;$(ProjectDir)PLC;%(AdditionalIncludeDirectories) + ProgramDatabase + MultiThreaded + true + true + stdcpp14 + MaxSpeed + false + 4819;%(DisableSpecificWarnings) + + + Console + $(OutDir)\$(ProjectName).exe + $(ProjectDir)OpenCV455Simple\win64\vc15\lib;$(ProjectDir)Pylon6.2\lib\Win64;$(ProjectDir)MvIMPACT\lib\win64;$(ProjectDir)MVS3.2.1\lib\win64;$(ProjectDir)modbus;%(AdditionalLibraryDirectories) + false + opencv_world455.lib;modbus.lib;mvDeviceManager.lib;MvCameraControl.lib;%(AdditionalDependencies) + + + + + Moc'ing %(Identity)... + output + .\GeneratedFiles\$(ConfigurationName) + moc_%(Filename).cpp + + + %(Filename) + default + true + Rcc'ing %(Identity)... + .\GeneratedFiles + qrc_%(Filename).cpp + + + Uic'ing %(Identity)... + .\GeneratedFiles + ui_%(Filename).h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette.vcxproj.filters b/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette.vcxproj.filters new file mode 100644 index 00000000..131c9a9b --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette.vcxproj.filters @@ -0,0 +1,274 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;cxx;c;def + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h + + + {99349809-55BA-4b9d-BF79-8FDBB0286EB3} + ui + + + {D9D6E242-F8AF-46E4-B9FD-80ECBC20BA3E} + qrc;* + false + + + {71ED8ED8-ACB9-4CE9-BBE1-E00B30144E11} + moc;h;cpp + False + + + {21a337b6-7c4c-4375-86e6-fb668dce746e} + cpp;moc + False + + + {65773ffc-5f94-4329-b62b-afc0b9e58efa} + cpp;moc + False + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Form Files + + + Resource Files + + + Header Files + + + Form Files + + + Header Files + + + Form Files + + + Header Files + + + Form Files + + + Header Files + + + Header Files + + + Header Files + + + Form Files + + + Header Files + + + Header Files + + + Form Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Form Files + + + Header Files + + + Form Files + + + Header Files + + + Form Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + \ No newline at end of file diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette.vcxproj.user b/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette.vcxproj.user new file mode 100644 index 00000000..30906dd3 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette.vcxproj.user @@ -0,0 +1,24 @@ + + + + + C:\Qt\5.15.2\msvc2019_64 + PATH=$(QTDIR)\bin%3bD:\Qt\5.15.2\msvc2019_64\bin%3b$(PATH) + + + C:\Qt\5.15.2\msvc2019_64 + PATH=$(QTDIR)\bin%3bD:\Qt\5.15.2\msvc2019_64\bin%3b$(PATH) + + + 2024-05-13T03:23:03.4840094Z + + + 2024-05-13T03:23:03.5547738Z + + + 2024-05-13T03:23:03.6235433Z + + + 2024-05-13T03:23:03.7022786Z + + \ No newline at end of file diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette/Debug/qmake/qtvars_Win32_Debug.props b/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette/Debug/qmake/qtvars_Win32_Debug.props new file mode 100644 index 00000000..540847e0 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette/Debug/qmake/qtvars_Win32_Debug.props @@ -0,0 +1,60 @@ + + +_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WIN64;QT_WIDGETS_LIB;QT_GUI_LIB;QT_NETWORK_LIB;QT_CORE_LIB +C:\Users\FD\AppData\Local\Temp\lox24cle.zfe;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtWidgets;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtGui;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtANGLE;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtNetwork;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtCore;C:\Users\FD\AppData\Local\Temp\lox24cle.zfe;/include;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\win32-msvc + +MultiThreadedDebugDLL +-Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus +C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Widgetsd.lib;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Guid.lib;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Networkd.lib;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Cored.lib;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\qtmaind.lib;shell32.lib +"/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" + +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64 +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64 +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64 +C:/Qt/Qt5.14.2/Docs/Qt-5.14.2 +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/include +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/lib +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/bin +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/bin +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/tests +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/plugins +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/imports +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/qml +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/translations + +C:/Qt/Qt5.14.2/Examples/Qt-5.14.2 +C:/Qt/Qt5.14.2/Examples/Qt-5.14.2 +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64 +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64 +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/bin +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/lib +win32-msvc +win32-msvc +3.1 +5.14.2 +$(Qt_INCLUDEPATH_);.\GeneratedFiles\Debug;.\GeneratedFiles + 5.14.2_msvc2017_64 + core;network;gui;widgets + bin + bin + + + DEFINES=/Project/ItemDefinitionGroup/ClCompile/PreprocessorDefinitions;INCLUDEPATH=/Project/ItemDefinitionGroup/ClCompile/AdditionalIncludeDirectories;STDCPP=/Project/ItemDefinitionGroup/ClCompile/LanguageStandard;RUNTIME=/Project/ItemDefinitionGroup/ClCompile/RuntimeLibrary;CL_OPTIONS=/Project/ItemDefinitionGroup/ClCompile/AdditionalOptions;LIBS=/Project/ItemDefinitionGroup/Link/AdditionalDependencies;LINK_OPTIONS=/Project/ItemDefinitionGroup/Link/AdditionalOptions + + debug + 5.14.2 + 5 + 14 + 2 + + diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette/Debug/qmake/temp/.qmake.stash b/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette/Debug/qmake/temp/.qmake.stash new file mode 100644 index 00000000..d5712c4a --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette/Debug/qmake/temp/.qmake.stash @@ -0,0 +1,7 @@ +QMAKE_CXX.QT_COMPILER_STDCXX = 199711L +QMAKE_CXX.QMAKE_MSC_VER = 1939 +QMAKE_CXX.QMAKE_MSC_FULL_VER = 193933523 +QMAKE_CXX.COMPILER_MACROS = \ + QT_COMPILER_STDCXX \ + QMAKE_MSC_VER \ + QMAKE_MSC_FULL_VER diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette/Debug/qmake/temp/B12702AD-ABFB-343A-A199-8E24837244A3.Cigarette.designtime.idx b/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette/Debug/qmake/temp/B12702AD-ABFB-343A-A199-8E24837244A3.Cigarette.designtime.idx new file mode 100644 index 00000000..a46d43f3 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette/Debug/qmake/temp/B12702AD-ABFB-343A-A199-8E24837244A3.Cigarette.designtime.idx @@ -0,0 +1 @@ +C:\Users\FD\AppData\Local\Temp\dkldmqt5.kbq.designtime.props diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette/Debug/qmake/temp/moc_predefs.h.cbt b/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette/Debug/qmake/temp/moc_predefs.h.cbt new file mode 100644 index 00000000..693383cc --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette/Debug/qmake/temp/moc_predefs.h.cbt @@ -0,0 +1 @@ +This is a dummy file needed to create ./moc_predefs.h diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette/Debug/qmake/temp/props.txt b/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette/Debug/qmake/temp/props.txt new file mode 100644 index 00000000..62a0538e --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette/Debug/qmake/temp/props.txt @@ -0,0 +1,25 @@ +QT_SYSROOT: +QT_INSTALL_PREFIX:C:/Qt/Qt5.14.2/5.14.2/msvc2017_64 +QT_INSTALL_ARCHDATA:C:/Qt/Qt5.14.2/5.14.2/msvc2017_64 +QT_INSTALL_DATA:C:/Qt/Qt5.14.2/5.14.2/msvc2017_64 +QT_INSTALL_DOCS:C:/Qt/Qt5.14.2/Docs/Qt-5.14.2 +QT_INSTALL_HEADERS:C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/include +QT_INSTALL_LIBS:C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/lib +QT_INSTALL_LIBEXECS:C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/bin +QT_INSTALL_BINS:C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/bin +QT_INSTALL_TESTS:C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/tests +QT_INSTALL_PLUGINS:C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/plugins +QT_INSTALL_IMPORTS:C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/imports +QT_INSTALL_QML:C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/qml +QT_INSTALL_TRANSLATIONS:C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/translations +QT_INSTALL_CONFIGURATION: +QT_INSTALL_EXAMPLES:C:/Qt/Qt5.14.2/Examples/Qt-5.14.2 +QT_INSTALL_DEMOS:C:/Qt/Qt5.14.2/Examples/Qt-5.14.2 +QT_HOST_PREFIX:C:/Qt/Qt5.14.2/5.14.2/msvc2017_64 +QT_HOST_DATA:C:/Qt/Qt5.14.2/5.14.2/msvc2017_64 +QT_HOST_BINS:C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/bin +QT_HOST_LIBS:C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/lib +QMAKE_SPEC:win32-msvc +QMAKE_XSPEC:win32-msvc +QMAKE_VERSION:3.1 +QT_VERSION:5.14.2 diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette/Debug/qmake/temp/qtvars.log b/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette/Debug/qmake/temp/qtvars.log new file mode 100644 index 00000000..983a928c --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette/Debug/qmake/temp/qtvars.log @@ -0,0 +1 @@ +Info: creating stash file C:\Users\FD\AppData\Local\Temp\lox24cle.zfe\.qmake.stash diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette/Debug/qmake/temp/qtvars.pro b/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette/Debug/qmake/temp/qtvars.pro new file mode 100644 index 00000000..ebc19c8d --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette/Debug/qmake/temp/qtvars.pro @@ -0,0 +1,2 @@ +CONFIG += no_fixpath +QT += core network gui widgets diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette/Debug/qmake/temp/qtvars.vcxproj b/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette/Debug/qmake/temp/qtvars.vcxproj new file mode 100644 index 00000000..51ebfd46 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette/Debug/qmake/temp/qtvars.vcxproj @@ -0,0 +1,83 @@ + + + + + Debug + x64 + + + + + qtvars + Qt4VSv1.0 + + + + v142 + .\ + false + NotSet + Application + qtvars + + + + + + + + + .\ + qtvars + true + + + + C:\Users\FD\AppData\Local\Temp\lox24cle.zfe;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtWidgets;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtGui;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtANGLE;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtNetwork;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtCore;C:\Users\FD\AppData\Local\Temp\lox24cle.zfe;/include;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\win32-msvc;%(AdditionalIncludeDirectories) + -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus %(AdditionalOptions) + .\ + false + ProgramDatabase + Sync + .\ + Disabled + _WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WIN64;QT_WIDGETS_LIB;QT_GUI_LIB;QT_NETWORK_LIB;QT_CORE_LIB;%(PreprocessorDefinitions) + false + MultiThreadedDebugDLL + true + true + TurnOffAllWarnings + + + C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Widgetsd.lib;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Guid.lib;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Networkd.lib;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Cored.lib;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\qtmaind.lib;shell32.lib;%(AdditionalDependencies) + C:\openssl\lib;C:\Utils\my_sql\mysql-5.7.25-winx64\lib;C:\Utils\postgresql\pgsql\lib;%(AdditionalLibraryDirectories) + "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" %(AdditionalOptions) + true + true + true + $(OutDir)\qtvars.exe + true + Windows + true + + + Unsigned + None + 0 + + + _WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WIN64;QT_WIDGETS_LIB;QT_GUI_LIB;QT_NETWORK_LIB;QT_CORE_LIB;_DEBUG;%(PreprocessorDefinitions) + + + + + Document + C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\data\dummy.cpp;%(AdditionalInputs) + cl -BxC:\Qt\Qt5.14.2\5.14.2\msvc2017_64\bin\qmake.exe -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -Zi -MDd -W0 -E C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\data\dummy.cpp 2>NUL >moc_predefs.h + Generate moc_predefs.h + moc_predefs.h;%(Outputs) + + + + + \ No newline at end of file diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette/Debug/qmake/temp/qtvars.vcxproj.filters b/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette/Debug/qmake/temp/qtvars.vcxproj.filters new file mode 100644 index 00000000..a5e61b76 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette/Debug/qmake/temp/qtvars.vcxproj.filters @@ -0,0 +1,14 @@ + + + + + {71ED8ED8-ACB9-4CE9-BBE1-E00B30144E11} + cpp;c;cxx;moc;h;def;odl;idl;res; + + + + + Generated Files + + + \ No newline at end of file diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette/Debug/qmake/temp/qtvars_Win32_Debug.props b/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette/Debug/qmake/temp/qtvars_Win32_Debug.props new file mode 100644 index 00000000..540847e0 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/Cigarette/Debug/qmake/temp/qtvars_Win32_Debug.props @@ -0,0 +1,60 @@ + + +_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WIN64;QT_WIDGETS_LIB;QT_GUI_LIB;QT_NETWORK_LIB;QT_CORE_LIB +C:\Users\FD\AppData\Local\Temp\lox24cle.zfe;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtWidgets;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtGui;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtANGLE;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtNetwork;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtCore;C:\Users\FD\AppData\Local\Temp\lox24cle.zfe;/include;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\win32-msvc + +MultiThreadedDebugDLL +-Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus +C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Widgetsd.lib;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Guid.lib;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Networkd.lib;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Cored.lib;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\qtmaind.lib;shell32.lib +"/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" + +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64 +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64 +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64 +C:/Qt/Qt5.14.2/Docs/Qt-5.14.2 +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/include +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/lib +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/bin +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/bin +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/tests +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/plugins +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/imports +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/qml +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/translations + +C:/Qt/Qt5.14.2/Examples/Qt-5.14.2 +C:/Qt/Qt5.14.2/Examples/Qt-5.14.2 +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64 +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64 +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/bin +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/lib +win32-msvc +win32-msvc +3.1 +5.14.2 +$(Qt_INCLUDEPATH_);.\GeneratedFiles\Debug;.\GeneratedFiles + 5.14.2_msvc2017_64 + core;network;gui;widgets + bin + bin + + + DEFINES=/Project/ItemDefinitionGroup/ClCompile/PreprocessorDefinitions;INCLUDEPATH=/Project/ItemDefinitionGroup/ClCompile/AdditionalIncludeDirectories;STDCPP=/Project/ItemDefinitionGroup/ClCompile/LanguageStandard;RUNTIME=/Project/ItemDefinitionGroup/ClCompile/RuntimeLibrary;CL_OPTIONS=/Project/ItemDefinitionGroup/ClCompile/AdditionalOptions;LIBS=/Project/ItemDefinitionGroup/Link/AdditionalDependencies;LINK_OPTIONS=/Project/ItemDefinitionGroup/Link/AdditionalOptions + + debug + 5.14.2 + 5 + 14 + 2 + + diff --git a/Cigarette/Cleanthread.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/Cleanthread.cpp similarity index 83% rename from Cigarette/Cleanthread.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Cleanthread.cpp index 1002a516..b00aeb99 100644 --- a/Cigarette/Cleanthread.cpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/Cleanthread.cpp @@ -8,6 +8,8 @@ #include #include "common.h"/// extern SysConf g_sys_conf;/// +extern ConfPath g_conf_path; + CleanWorkThread::CleanWorkThread(QObject* parent) : QObject(parent) { } @@ -34,11 +36,20 @@ void CleanWorkThread::doWork() { qint64 spaceSize; qint64 dirSize; - QString iDriver = "D:/"; + QString dirPath = g_conf_path.save_pics_path; + //QString iDriver = "D:/"; + char drive[_MAX_DRIVE]; + char dir_1[_MAX_DIR]; + char fname[_MAX_FNAME]; + char ext[_MAX_EXT]; + + _splitpath(dirPath.toStdString().c_str(), drive, dir_1, fname, ext); + QString iDriver = drive + QString("/"); LPCWSTR strDriver = (LPCWSTR)iDriver.utf16(); ULARGE_INTEGER freeDiskSpaceAvailable, totalDiskSpace, totalFreeDiskSpace; qint64 gb = (1024 * 1024 * 1024); - QString dir("D:/image"); + //QString dir("D:/image"); + QString dir(g_conf_path.save_pics_path + "/ALL"); if (delSelection == 2) { @@ -47,16 +58,17 @@ void CleanWorkThread::doWork() else { qint64 delDays = g_sys_conf.save_days;/// + qint64 freeSize = g_sys_conf.freesize; CleanImageFile(dir, delDays--); //调用函数获取磁盘参数(单位为字节Byte),转化为GB,需要除以(1024*1024*1024) GetDiskFreeSpaceEx(strDriver, &freeDiskSpaceAvailable, &totalDiskSpace, &totalFreeDiskSpace); - spaceSize = ((qint64)totalFreeDiskSpace.QuadPart * 10) / (qint64)totalDiskSpace.QuadPart; + spaceSize = ((qint64)totalFreeDiskSpace.QuadPart * (100/freeSize)) / (qint64)totalDiskSpace.QuadPart; dirSize = DirFileSize(dir) / gb; - + //delDays = g_sys_conf.save_days; while ((spaceSize < 1) && (delDays > 1)) { //磁盘剩余空间小于百分之十 CleanImageFile(dir, delDays--); GetDiskFreeSpaceEx(strDriver, &freeDiskSpaceAvailable, &totalDiskSpace, &totalFreeDiskSpace); - spaceSize = ((qint64)totalFreeDiskSpace.QuadPart * 10) / (qint64)totalDiskSpace.QuadPart; + spaceSize = ((qint64)totalFreeDiskSpace.QuadPart * (100 / freeSize)) / (qint64)totalDiskSpace.QuadPart; } } emit workFinished(); @@ -91,8 +103,8 @@ void CleanWorkThread::CleanImageFile(const QString& path, const qint64& delDays) QRegExpValidator v(rx, 0); int pos = 0; int match; - match = v.validate(fileInfo.fileName(), pos); QString name = fileInfo.fileName(); + match = v.validate(name, pos); if (match == 2) { QDate delDate = QDate::currentDate(); diff --git a/Cigarette/Cleanthread.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Cleanthread.h similarity index 100% rename from Cigarette/Cleanthread.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Cleanthread.h diff --git a/Cigarette/Common/CommonGUIFunctions.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/Common/CommonGUIFunctions.cpp similarity index 100% rename from Cigarette/Common/CommonGUIFunctions.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Common/CommonGUIFunctions.cpp diff --git a/Cigarette/Common/CommonGUIFunctions.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Common/CommonGUIFunctions.h similarity index 100% rename from Cigarette/Common/CommonGUIFunctions.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Common/CommonGUIFunctions.h diff --git a/Cigarette/Common/Info.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Common/Info.h similarity index 100% rename from Cigarette/Common/Info.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Common/Info.h diff --git a/Cigarette/Common/ProxyResolverContext.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Common/ProxyResolverContext.h similarity index 100% rename from Cigarette/Common/ProxyResolverContext.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Common/ProxyResolverContext.h diff --git a/Cigarette/Common/aviexception.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Common/aviexception.h similarity index 100% rename from Cigarette/Common/aviexception.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Common/aviexception.h diff --git a/Cigarette/Common/avihelper.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/Common/avihelper.cpp similarity index 100% rename from Cigarette/Common/avihelper.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Common/avihelper.cpp diff --git a/Cigarette/Common/avihelper.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Common/avihelper.h similarity index 100% rename from Cigarette/Common/avihelper.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Common/avihelper.h diff --git a/Cigarette/Common/aviwrapper.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/Common/aviwrapper.cpp similarity index 100% rename from Cigarette/Common/aviwrapper.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Common/aviwrapper.cpp diff --git a/Cigarette/Common/aviwrapper.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Common/aviwrapper.h similarity index 100% rename from Cigarette/Common/aviwrapper.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Common/aviwrapper.h diff --git a/Cigarette/Common/exampleHelper.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Common/exampleHelper.h similarity index 100% rename from Cigarette/Common/exampleHelper.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Common/exampleHelper.h diff --git a/Cigarette/Common/exampleHelper_C.c b/240510-常德GDX1-1相机-1280x800/Cigarette/Common/exampleHelper_C.c similarity index 100% rename from Cigarette/Common/exampleHelper_C.c rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Common/exampleHelper_C.c diff --git a/Cigarette/Common/exampleHelper_C.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Common/exampleHelper_C.h similarity index 100% rename from Cigarette/Common/exampleHelper_C.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Common/exampleHelper_C.h diff --git a/Cigarette/Common/mvIcon.xpm b/240510-常德GDX1-1相机-1280x800/Cigarette/Common/mvIcon.xpm similarity index 100% rename from Cigarette/Common/mvIcon.xpm rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Common/mvIcon.xpm diff --git a/Cigarette/Common/qtIncludeEpilogue.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Common/qtIncludeEpilogue.h similarity index 100% rename from Cigarette/Common/qtIncludeEpilogue.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Common/qtIncludeEpilogue.h diff --git a/Cigarette/Common/qtIncludePrologue.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Common/qtIncludePrologue.h similarity index 100% rename from Cigarette/Common/qtIncludePrologue.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Common/qtIncludePrologue.h diff --git a/Cigarette/Common/win32/ProxyResolver.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/Common/win32/ProxyResolver.cpp similarity index 100% rename from Cigarette/Common/win32/ProxyResolver.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Common/win32/ProxyResolver.cpp diff --git a/Cigarette/Common/win32/ProxyResolver.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Common/win32/ProxyResolver.h similarity index 100% rename from Cigarette/Common/win32/ProxyResolver.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Common/win32/ProxyResolver.h diff --git a/Cigarette/Common/win32/ProxyResolverContext.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/Common/win32/ProxyResolverContext.cpp similarity index 100% rename from Cigarette/Common/win32/ProxyResolverContext.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Common/win32/ProxyResolverContext.cpp diff --git a/Cigarette/Common/wxAbstraction.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Common/wxAbstraction.h similarity index 100% rename from Cigarette/Common/wxAbstraction.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Common/wxAbstraction.h diff --git a/Cigarette/Common/wxIncludeEpilogue.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Common/wxIncludeEpilogue.h similarity index 100% rename from Cigarette/Common/wxIncludeEpilogue.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Common/wxIncludeEpilogue.h diff --git a/Cigarette/Common/wxIncludePrologue.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Common/wxIncludePrologue.h similarity index 100% rename from Cigarette/Common/wxIncludePrologue.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Common/wxIncludePrologue.h diff --git a/Cigarette/Common/wxIncluder.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Common/wxIncluder.h similarity index 100% rename from Cigarette/Common/wxIncluder.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Common/wxIncluder.h diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/CryptoToolLib.h b/240510-常德GDX1-1相机-1280x800/Cigarette/CryptoToolLib.h new file mode 100644 index 00000000..8bc2fa46 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/CryptoToolLib.h @@ -0,0 +1,13 @@ +#pragma once + +typedef enum _EncMethod { + Device = 0, + License = 1 +}EncMethod; + +extern "C" bool GenerateDeviceID(void); +extern "C" bool GenerateLicenseData(const char* flag, const char* suffix); +extern "C" bool VerifyLicense(void); +extern "C" bool AddParaForLicenseData(char* flag, char* suffix); +extern "C" bool DeleteParaForLicenseData(char* flag); +extern "C" bool AnalysisLicense(const char* flag); \ No newline at end of file diff --git a/Cigarette/CryptoToolLib.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/CryptoToolLib.lib similarity index 50% rename from Cigarette/CryptoToolLib.lib rename to 240510-常德GDX1-1相机-1280x800/Cigarette/CryptoToolLib.lib index 886afb48..399e550e 100644 Binary files a/Cigarette/CryptoToolLib.lib and b/240510-常德GDX1-1相机-1280x800/Cigarette/CryptoToolLib.lib differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/FtpManager.h b/240510-常德GDX1-1相机-1280x800/Cigarette/FtpManager.h new file mode 100644 index 00000000..6b3f58f7 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/FtpManager.h @@ -0,0 +1,75 @@ +#pragma once + +#include "exportData.h" +#include "QtCore\qfile.h" +#include "QtCore\qtextstream.h" +#include +#include +#include +#include +#include +#include + +class FtpManager +{ +private: + QUrl url; + QNetworkAccessManager manager; + +public: + FtpManager() { + /* ͨѶЭ */ + url.setScheme("ftp"); + /* û */ + url.setUserName("FTP2"); + /* */ + url.setPassword("123"); + /* Ҳ */ + url.setHost("192.168.1.170"); + /* ö˿ںţһΪ21 */ + url.setPort(666); + } + + void uploadSingleFile(QString filePath, QString remotePath) { + + // · + url.setPath(remotePath); + qDebug() << "uploadSingleFile path " << url.path(); + + // װرļ + QFile file(filePath); + bool isopen = false; + isopen = file.open(QIODevice::ReadOnly); + qDebug() << "Open file " << isopen; + if (isopen) { + // ȡļ + QByteArray data = file.readAll(); + file.close(); + + // ϴݣϴɹԶ˴ļ + manager.setNetworkAccessible(QNetworkAccessManager::Accessible); + QNetworkReply* reply = manager.put(QNetworkRequest(url), data); + + QEventLoop eventLoop; + //QObject::connect(reply, SIGNAL(finished()), &eventLoop, SLOT(quit())); + //// ȴ¼ѭȻ */ + //eventLoop.exec(); + + //QObject::connect(reply, &QNetworkReply::finished, [&]() { + // if (reply->error() == QNetworkReply::NoError) { + // // ȡӦ + // QByteArray responseData = reply->readAll(); + // // Ӧ + // qDebug() << "Received response:" << responseData; + // } + // else { + // // + // qDebug() << "Error occurred:" << reply->errorString(); + // } + + // // Դ + // reply->deleteLater(); + // }); + } + } +}; \ No newline at end of file diff --git a/Cigarette/GeneratedFiles/Release/moc_CaptureThread.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_CaptureThread.cpp similarity index 88% rename from Cigarette/GeneratedFiles/Release/moc_CaptureThread.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_CaptureThread.cpp index 016c846c..96d25101 100644 --- a/Cigarette/GeneratedFiles/Release/moc_CaptureThread.cpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_CaptureThread.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** Meta object code from reading C++ file 'CaptureThread.h' ** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.15.2) +** Created by: The Qt Meta Object Compiler version 67 (Qt 5.14.2) ** ** WARNING! All changes made in this file will be lost! *****************************************************************************/ @@ -13,7 +13,7 @@ #if !defined(Q_MOC_OUTPUT_REVISION) #error "The header file 'CaptureThread.h' doesn't include ." #elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.15.2. It" +#error "This file was generated using the moc from 5.14.2. It" #error "cannot be used with the include files from this version of Qt." #error "(The moc has changed too much.)" #endif @@ -22,8 +22,8 @@ QT_BEGIN_MOC_NAMESPACE QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED struct qt_meta_stringdata_CaptureThread_t { - QByteArrayData data[10]; - char stringdata0[81]; + QByteArrayData data[11]; + char stringdata0[92]; }; #define QT_MOC_LITERAL(idx, ofs, len) \ Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ @@ -41,12 +41,13 @@ QT_MOC_LITERAL(5, 34, 12), // "requestReady" QT_MOC_LITERAL(6, 47, 16), // "updateStatistics" QT_MOC_LITERAL(7, 64, 4), // "data" QT_MOC_LITERAL(8, 69, 3), // "Num" -QT_MOC_LITERAL(9, 73, 7) // "process" +QT_MOC_LITERAL(9, 73, 7), // "process" +QT_MOC_LITERAL(10, 81, 10) // "fpsTimeout" }, "CaptureThread\0error\0\0err\0finished\0" "requestReady\0updateStatistics\0data\0" - "Num\0process" + "Num\0process\0fpsTimeout" }; #undef QT_MOC_LITERAL @@ -56,7 +57,7 @@ static const uint qt_meta_data_CaptureThread[] = { 8, // revision 0, // classname 0, 0, // classinfo - 5, 14, // methods + 6, 14, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors @@ -64,13 +65,14 @@ static const uint qt_meta_data_CaptureThread[] = { 4, // signalCount // signals: name, argc, parameters, tag, flags - 1, 1, 39, 2, 0x06 /* Public */, - 4, 0, 42, 2, 0x06 /* Public */, - 5, 0, 43, 2, 0x06 /* Public */, - 6, 2, 44, 2, 0x06 /* Public */, + 1, 1, 44, 2, 0x06 /* Public */, + 4, 0, 47, 2, 0x06 /* Public */, + 5, 0, 48, 2, 0x06 /* Public */, + 6, 2, 49, 2, 0x06 /* Public */, // slots: name, argc, parameters, tag, flags - 9, 0, 49, 2, 0x08 /* Private */, + 9, 0, 54, 2, 0x08 /* Private */, + 10, 0, 55, 2, 0x08 /* Private */, // signals: parameters QMetaType::Void, QMetaType::QString, 3, @@ -79,6 +81,7 @@ static const uint qt_meta_data_CaptureThread[] = { QMetaType::Void, QMetaType::QString, QMetaType::Int, 7, 8, // slots: parameters + QMetaType::Void, QMetaType::Void, 0 // eod @@ -95,6 +98,7 @@ void CaptureThread::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _i case 2: _t->requestReady(); break; case 3: _t->updateStatistics((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2]))); break; case 4: _t->process(); break; + case 5: _t->fpsTimeout(); break; default: ; } } else if (_c == QMetaObject::IndexOfMethod) { @@ -159,13 +163,13 @@ int CaptureThread::qt_metacall(QMetaObject::Call _c, int _id, void **_a) if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { - if (_id < 5) + if (_id < 6) qt_static_metacall(this, _c, _id, _a); - _id -= 5; + _id -= 6; } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) { - if (_id < 5) + if (_id < 6) *reinterpret_cast(_a[0]) = -1; - _id -= 5; + _id -= 6; } return _id; } diff --git a/Cigarette/GeneratedFiles/Release/moc_CaptureThreadBasler.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_CaptureThreadBasler.cpp similarity index 98% rename from Cigarette/GeneratedFiles/Release/moc_CaptureThreadBasler.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_CaptureThreadBasler.cpp index 404a3452..eee4b159 100644 --- a/Cigarette/GeneratedFiles/Release/moc_CaptureThreadBasler.cpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_CaptureThreadBasler.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** Meta object code from reading C++ file 'CaptureThreadBasler.h' ** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.15.2) +** Created by: The Qt Meta Object Compiler version 67 (Qt 5.14.2) ** ** WARNING! All changes made in this file will be lost! *****************************************************************************/ @@ -13,7 +13,7 @@ #if !defined(Q_MOC_OUTPUT_REVISION) #error "The header file 'CaptureThreadBasler.h' doesn't include ." #elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.15.2. It" +#error "This file was generated using the moc from 5.14.2. It" #error "cannot be used with the include files from this version of Qt." #error "(The moc has changed too much.)" #endif diff --git a/Cigarette/GeneratedFiles/Release/moc_CaptureThreadHIK.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_CaptureThreadHIK.cpp similarity index 98% rename from Cigarette/GeneratedFiles/Release/moc_CaptureThreadHIK.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_CaptureThreadHIK.cpp index 0fa7ccf3..6de6beda 100644 --- a/Cigarette/GeneratedFiles/Release/moc_CaptureThreadHIK.cpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_CaptureThreadHIK.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** Meta object code from reading C++ file 'CaptureThreadHIK.h' ** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.15.2) +** Created by: The Qt Meta Object Compiler version 67 (Qt 5.14.2) ** ** WARNING! All changes made in this file will be lost! *****************************************************************************/ @@ -13,7 +13,7 @@ #if !defined(Q_MOC_OUTPUT_REVISION) #error "The header file 'CaptureThreadHIK.h' doesn't include ." #elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.15.2. It" +#error "This file was generated using the moc from 5.14.2. It" #error "cannot be used with the include files from this version of Qt." #error "(The moc has changed too much.)" #endif diff --git a/Cigarette/GeneratedFiles/Release/moc_Cleanthread.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_Cleanthread.cpp similarity index 97% rename from Cigarette/GeneratedFiles/Release/moc_Cleanthread.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_Cleanthread.cpp index 3661cbd9..12a51b2f 100644 --- a/Cigarette/GeneratedFiles/Release/moc_Cleanthread.cpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_Cleanthread.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** Meta object code from reading C++ file 'Cleanthread.h' ** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.15.2) +** Created by: The Qt Meta Object Compiler version 67 (Qt 5.14.2) ** ** WARNING! All changes made in this file will be lost! *****************************************************************************/ @@ -13,7 +13,7 @@ #if !defined(Q_MOC_OUTPUT_REVISION) #error "The header file 'Cleanthread.h' doesn't include ." #elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.15.2. It" +#error "This file was generated using the moc from 5.14.2. It" #error "cannot be used with the include files from this version of Qt." #error "(The moc has changed too much.)" #endif diff --git a/Cigarette/GeneratedFiles/Release/moc_Logthread.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_Logthread.cpp similarity index 97% rename from Cigarette/GeneratedFiles/Release/moc_Logthread.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_Logthread.cpp index fa3b7b13..0809f5b3 100644 --- a/Cigarette/GeneratedFiles/Release/moc_Logthread.cpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_Logthread.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** Meta object code from reading C++ file 'Logthread.h' ** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.15.2) +** Created by: The Qt Meta Object Compiler version 67 (Qt 5.14.2) ** ** WARNING! All changes made in this file will be lost! *****************************************************************************/ @@ -13,7 +13,7 @@ #if !defined(Q_MOC_OUTPUT_REVISION) #error "The header file 'Logthread.h' doesn't include ." #elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.15.2. It" +#error "This file was generated using the moc from 5.14.2. It" #error "cannot be used with the include files from this version of Qt." #error "(The moc has changed too much.)" #endif diff --git a/Cigarette/GeneratedFiles/Release/moc_alarmdialog.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_alarmdialog.cpp similarity index 96% rename from Cigarette/GeneratedFiles/Release/moc_alarmdialog.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_alarmdialog.cpp index 1f5655a3..085328f3 100644 --- a/Cigarette/GeneratedFiles/Release/moc_alarmdialog.cpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_alarmdialog.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** Meta object code from reading C++ file 'alarmdialog.hpp' ** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.15.2) +** Created by: The Qt Meta Object Compiler version 67 (Qt 5.14.2) ** ** WARNING! All changes made in this file will be lost! *****************************************************************************/ @@ -13,7 +13,7 @@ #if !defined(Q_MOC_OUTPUT_REVISION) #error "The header file 'alarmdialog.hpp' doesn't include ." #elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.15.2. It" +#error "This file was generated using the moc from 5.14.2. It" #error "cannot be used with the include files from this version of Qt." #error "(The moc has changed too much.)" #endif diff --git a/Cigarette/GeneratedFiles/Release/moc_camera_glue.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_camera_glue.cpp similarity index 92% rename from Cigarette/GeneratedFiles/Release/moc_camera_glue.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_camera_glue.cpp index c0629afc..40a28b1e 100644 --- a/Cigarette/GeneratedFiles/Release/moc_camera_glue.cpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_camera_glue.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** Meta object code from reading C++ file 'camera_glue.h' ** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.15.2) +** Created by: The Qt Meta Object Compiler version 67 (Qt 5.14.2) ** ** WARNING! All changes made in this file will be lost! *****************************************************************************/ @@ -13,7 +13,7 @@ #if !defined(Q_MOC_OUTPUT_REVISION) #error "The header file 'camera_glue.h' doesn't include ." #elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.15.2. It" +#error "This file was generated using the moc from 5.14.2. It" #error "cannot be used with the include files from this version of Qt." #error "(The moc has changed too much.)" #endif @@ -35,14 +35,14 @@ static const qt_meta_stringdata_camera_glue_t qt_meta_stringdata_camera_glue = { QT_MOC_LITERAL(0, 0, 11), // "camera_glue" QT_MOC_LITERAL(1, 12, 20), // "sendMsgToDialogSetup" QT_MOC_LITERAL(2, 33, 0), // "" -QT_MOC_LITERAL(3, 34, 8), // "int[][3]" +QT_MOC_LITERAL(3, 34, 8), // "int[][5]" QT_MOC_LITERAL(4, 43, 3), // "ptr" QT_MOC_LITERAL(5, 47, 21), // "recMsgFromDialogSetup" QT_MOC_LITERAL(6, 69, 27) // "on_pushButton_take_released" }, "camera_glue\0sendMsgToDialogSetup\0\0" - "int[][3]\0ptr\0recMsgFromDialogSetup\0" + "int[][5]\0ptr\0recMsgFromDialogSetup\0" "on_pushButton_take_released" }; #undef QT_MOC_LITERAL @@ -83,15 +83,15 @@ void camera_glue::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, auto *_t = static_cast(_o); Q_UNUSED(_t) switch (_id) { - case 0: _t->sendMsgToDialogSetup((*reinterpret_cast< int(*)[][3]>(_a[1]))); break; - case 1: _t->recMsgFromDialogSetup((*reinterpret_cast< int(*)[][3]>(_a[1]))); break; + case 0: _t->sendMsgToDialogSetup((*reinterpret_cast< int(*)[][5]>(_a[1]))); break; + case 1: _t->recMsgFromDialogSetup((*reinterpret_cast< int(*)[][5]>(_a[1]))); break; case 2: _t->on_pushButton_take_released(); break; default: ; } } else if (_c == QMetaObject::IndexOfMethod) { int *result = reinterpret_cast(_a[0]); { - using _t = void (camera_glue::*)(int [][3]); + using _t = void (camera_glue::*)(int [][5]); if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&camera_glue::sendMsgToDialogSetup)) { *result = 0; return; @@ -141,7 +141,7 @@ int camera_glue::qt_metacall(QMetaObject::Call _c, int _id, void **_a) } // SIGNAL 0 -void camera_glue::sendMsgToDialogSetup(int _t1[][3]) +void camera_glue::sendMsgToDialogSetup(int _t1[][5]) { void *_a[] = { nullptr, const_cast(reinterpret_cast(std::addressof(_t1))) }; QMetaObject::activate(this, &staticMetaObject, 0, _a); diff --git a/Cigarette/GeneratedFiles/Release/moc_change_shift.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_change_shift.cpp similarity index 92% rename from Cigarette/GeneratedFiles/Release/moc_change_shift.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_change_shift.cpp index 57af2271..f4bcd573 100644 --- a/Cigarette/GeneratedFiles/Release/moc_change_shift.cpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_change_shift.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** Meta object code from reading C++ file 'change_shift.h' ** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.15.2) +** Created by: The Qt Meta Object Compiler version 67 (Qt 5.14.2) ** ** WARNING! All changes made in this file will be lost! *****************************************************************************/ @@ -13,7 +13,7 @@ #if !defined(Q_MOC_OUTPUT_REVISION) #error "The header file 'change_shift.h' doesn't include ." #elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.15.2. It" +#error "This file was generated using the moc from 5.14.2. It" #error "cannot be used with the include files from this version of Qt." #error "(The moc has changed too much.)" #endif @@ -23,7 +23,7 @@ QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED struct qt_meta_stringdata_change_shift_t { QByteArrayData data[8]; - char stringdata0[98]; + char stringdata0[104]; }; #define QT_MOC_LITERAL(idx, ofs, len) \ Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ @@ -38,12 +38,12 @@ QT_MOC_LITERAL(2, 34, 0), // "" QT_MOC_LITERAL(3, 35, 5), // "timeA" QT_MOC_LITERAL(4, 41, 5), // "timeB" QT_MOC_LITERAL(5, 47, 5), // "timeC" -QT_MOC_LITERAL(6, 53, 22), // "on_pushButton_released" -QT_MOC_LITERAL(7, 76, 21) // "recMsgFromDialogSetup" +QT_MOC_LITERAL(6, 53, 28), // "on_pushButton_apply_released" +QT_MOC_LITERAL(7, 82, 21) // "recMsgFromDialogSetup" }, "change_shift\0sendMsgToDialogSetup\0\0" - "timeA\0timeB\0timeC\0on_pushButton_released\0" + "timeA\0timeB\0timeC\0on_pushButton_apply_released\0" "recMsgFromDialogSetup" }; #undef QT_MOC_LITERAL @@ -85,7 +85,7 @@ void change_shift::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id Q_UNUSED(_t) switch (_id) { case 0: _t->sendMsgToDialogSetup((*reinterpret_cast< QTime(*)>(_a[1])),(*reinterpret_cast< QTime(*)>(_a[2])),(*reinterpret_cast< QTime(*)>(_a[3]))); break; - case 1: _t->on_pushButton_released(); break; + case 1: _t->on_pushButton_apply_released(); break; case 2: _t->recMsgFromDialogSetup((*reinterpret_cast< QTime(*)>(_a[1])),(*reinterpret_cast< QTime(*)>(_a[2])),(*reinterpret_cast< QTime(*)>(_a[3]))); break; default: ; } diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_cigarette.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_cigarette.cpp new file mode 100644 index 00000000..48632a73 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_cigarette.cpp @@ -0,0 +1,355 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'cigarette.h' +** +** Created by: The Qt Meta Object Compiler version 67 (Qt 5.14.2) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include +#include "../../cigarette.h" +#include +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'cigarette.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 67 +#error "This file was generated using the moc from 5.14.2. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +struct qt_meta_stringdata_Cigarette_t { + QByteArrayData data[59]; + char stringdata0[835]; +}; +#define QT_MOC_LITERAL(idx, ofs, len) \ + Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ + qptrdiff(offsetof(qt_meta_stringdata_Cigarette_t, stringdata0) + ofs \ + - idx * sizeof(QByteArrayData)) \ + ) +static const qt_meta_stringdata_Cigarette_t qt_meta_stringdata_Cigarette = { + { +QT_MOC_LITERAL(0, 0, 9), // "Cigarette" +QT_MOC_LITERAL(1, 10, 13), // "sengMsgToClog" +QT_MOC_LITERAL(2, 24, 0), // "" +QT_MOC_LITERAL(3, 25, 19), // "sendMsgToExportData" +QT_MOC_LITERAL(4, 45, 21), // "on_btn_start_released" +QT_MOC_LITERAL(5, 67, 21), // "on_btn_pause_released" +QT_MOC_LITERAL(6, 89, 20), // "on_btn_lock_released" +QT_MOC_LITERAL(7, 110, 21), // "on_btn_setup_released" +QT_MOC_LITERAL(8, 132, 25), // "on_checkBox_debug_clicked" +QT_MOC_LITERAL(9, 158, 7), // "checked" +QT_MOC_LITERAL(10, 166, 26), // "on_checkBox_unkick_clicked" +QT_MOC_LITERAL(11, 193, 26), // "on_toolButton_plc_released" +QT_MOC_LITERAL(12, 220, 28), // "on_toolButton_alarm_released" +QT_MOC_LITERAL(13, 249, 28), // "on_pushButton_clear_released" +QT_MOC_LITERAL(14, 278, 12), // "enable_shift" +QT_MOC_LITERAL(15, 291, 14), // "sendLatestData" +QT_MOC_LITERAL(16, 306, 11), // "OnNotifyHub" +QT_MOC_LITERAL(17, 318, 3), // "Num" +QT_MOC_LITERAL(18, 322, 3), // "Cnt" +QT_MOC_LITERAL(19, 326, 7), // "cv::Mat" +QT_MOC_LITERAL(20, 334, 1), // "m" +QT_MOC_LITERAL(21, 336, 20), // "OnDisplayTimeCostHub" +QT_MOC_LITERAL(22, 357, 2), // "ms" +QT_MOC_LITERAL(23, 360, 23), // "OnDisplayCheckNumberHub" +QT_MOC_LITERAL(24, 384, 2), // "no" +QT_MOC_LITERAL(25, 387, 16), // "OnDisplayJdNoHub" +QT_MOC_LITERAL(26, 404, 5), // "jd_no" +QT_MOC_LITERAL(27, 410, 7), // "OnOKHub" +QT_MOC_LITERAL(28, 418, 7), // "OnNGHub" +QT_MOC_LITERAL(29, 426, 19), // "updateStatisticsHub" +QT_MOC_LITERAL(30, 446, 15), // "statisticalData" +QT_MOC_LITERAL(31, 462, 19), // "OnRotateReleasedHub" +QT_MOC_LITERAL(32, 482, 26), // "OnToolButtonCamReleasedHub" +QT_MOC_LITERAL(33, 509, 17), // "OpenCamTimeoutHub" +QT_MOC_LITERAL(34, 527, 12), // "OnDBClickHub" +QT_MOC_LITERAL(35, 540, 7), // "Num_Cnt" +QT_MOC_LITERAL(36, 548, 13), // "DrawRect_init" +QT_MOC_LITERAL(37, 562, 12), // "OnTPClickHub" +QT_MOC_LITERAL(38, 575, 14), // "OnDBClickNGHub" +QT_MOC_LITERAL(39, 590, 15), // "ReconnectCamHub" +QT_MOC_LITERAL(40, 606, 7), // "OnMouse" +QT_MOC_LITERAL(41, 614, 12), // "QMouseEvent*" +QT_MOC_LITERAL(42, 627, 5), // "event" +QT_MOC_LITERAL(43, 633, 5), // "OnKey" +QT_MOC_LITERAL(44, 639, 10), // "QKeyEvent*" +QT_MOC_LITERAL(45, 650, 13), // "handleTimeout" +QT_MOC_LITERAL(46, 664, 10), // "op_timeout" +QT_MOC_LITERAL(47, 675, 13), // "admin_timeout" +QT_MOC_LITERAL(48, 689, 15), // "EnableDebugMode" +QT_MOC_LITERAL(49, 705, 16), // "DisableDebugMode" +QT_MOC_LITERAL(50, 722, 13), // "OnCancelAlarm" +QT_MOC_LITERAL(51, 736, 28), // "on_pushButton_reset_released" +QT_MOC_LITERAL(52, 765, 4), // "OnOp" +QT_MOC_LITERAL(53, 770, 6), // "OnExit" +QT_MOC_LITERAL(54, 777, 9), // "OnRestart" +QT_MOC_LITERAL(55, 787, 7), // "OnAdmin" +QT_MOC_LITERAL(56, 795, 20), // "CleanThreadStartAuto" +QT_MOC_LITERAL(57, 816, 13), // "recMsgFromUdp" +QT_MOC_LITERAL(58, 830, 4) // "data" + + }, + "Cigarette\0sengMsgToClog\0\0sendMsgToExportData\0" + "on_btn_start_released\0on_btn_pause_released\0" + "on_btn_lock_released\0on_btn_setup_released\0" + "on_checkBox_debug_clicked\0checked\0" + "on_checkBox_unkick_clicked\0" + "on_toolButton_plc_released\0" + "on_toolButton_alarm_released\0" + "on_pushButton_clear_released\0enable_shift\0" + "sendLatestData\0OnNotifyHub\0Num\0Cnt\0" + "cv::Mat\0m\0OnDisplayTimeCostHub\0ms\0" + "OnDisplayCheckNumberHub\0no\0OnDisplayJdNoHub\0" + "jd_no\0OnOKHub\0OnNGHub\0updateStatisticsHub\0" + "statisticalData\0OnRotateReleasedHub\0" + "OnToolButtonCamReleasedHub\0OpenCamTimeoutHub\0" + "OnDBClickHub\0Num_Cnt\0DrawRect_init\0" + "OnTPClickHub\0OnDBClickNGHub\0ReconnectCamHub\0" + "OnMouse\0QMouseEvent*\0event\0OnKey\0" + "QKeyEvent*\0handleTimeout\0op_timeout\0" + "admin_timeout\0EnableDebugMode\0" + "DisableDebugMode\0OnCancelAlarm\0" + "on_pushButton_reset_released\0OnOp\0" + "OnExit\0OnRestart\0OnAdmin\0CleanThreadStartAuto\0" + "recMsgFromUdp\0data" +}; +#undef QT_MOC_LITERAL + +static const uint qt_meta_data_Cigarette[] = { + + // content: + 8, // revision + 0, // classname + 0, 0, // classinfo + 43, 14, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors + 0, // flags + 2, // signalCount + + // signals: name, argc, parameters, tag, flags + 1, 1, 229, 2, 0x06 /* Public */, + 3, 0, 232, 2, 0x06 /* Public */, + + // slots: name, argc, parameters, tag, flags + 4, 0, 233, 2, 0x08 /* Private */, + 5, 0, 234, 2, 0x08 /* Private */, + 6, 0, 235, 2, 0x08 /* Private */, + 7, 0, 236, 2, 0x08 /* Private */, + 8, 1, 237, 2, 0x08 /* Private */, + 10, 1, 240, 2, 0x08 /* Private */, + 11, 0, 243, 2, 0x08 /* Private */, + 12, 0, 244, 2, 0x08 /* Private */, + 13, 0, 245, 2, 0x08 /* Private */, + 14, 0, 246, 2, 0x08 /* Private */, + 15, 0, 247, 2, 0x08 /* Private */, + 16, 3, 248, 2, 0x08 /* Private */, + 21, 2, 255, 2, 0x08 /* Private */, + 23, 2, 260, 2, 0x08 /* Private */, + 25, 2, 265, 2, 0x08 /* Private */, + 27, 1, 270, 2, 0x08 /* Private */, + 28, 1, 273, 2, 0x08 /* Private */, + 29, 2, 276, 2, 0x08 /* Private */, + 31, 1, 281, 2, 0x08 /* Private */, + 32, 1, 284, 2, 0x08 /* Private */, + 33, 1, 287, 2, 0x08 /* Private */, + 34, 1, 290, 2, 0x08 /* Private */, + 36, 1, 293, 2, 0x08 /* Private */, + 37, 1, 296, 2, 0x08 /* Private */, + 38, 1, 299, 2, 0x08 /* Private */, + 39, 1, 302, 2, 0x08 /* Private */, + 40, 1, 305, 2, 0x08 /* Private */, + 43, 1, 308, 2, 0x08 /* Private */, + 45, 0, 311, 2, 0x08 /* Private */, + 46, 0, 312, 2, 0x08 /* Private */, + 47, 0, 313, 2, 0x08 /* Private */, + 48, 0, 314, 2, 0x08 /* Private */, + 49, 0, 315, 2, 0x08 /* Private */, + 50, 0, 316, 2, 0x08 /* Private */, + 51, 0, 317, 2, 0x08 /* Private */, + 52, 0, 318, 2, 0x08 /* Private */, + 53, 0, 319, 2, 0x08 /* Private */, + 54, 0, 320, 2, 0x08 /* Private */, + 55, 0, 321, 2, 0x08 /* Private */, + 56, 0, 322, 2, 0x0a /* Public */, + 57, 1, 323, 2, 0x0a /* Public */, + + // signals: parameters + QMetaType::Void, QMetaType::QString, 2, + QMetaType::Void, + + // slots: parameters + QMetaType::Void, + QMetaType::Void, + QMetaType::Void, + QMetaType::Void, + QMetaType::Void, QMetaType::Bool, 9, + QMetaType::Void, QMetaType::Bool, 9, + QMetaType::Void, + QMetaType::Void, + QMetaType::Void, + QMetaType::Void, + QMetaType::Void, + QMetaType::Void, QMetaType::Int, QMetaType::Int, 0x80000000 | 19, 17, 18, 20, + QMetaType::Void, QMetaType::Int, QMetaType::Int, 17, 22, + QMetaType::Void, QMetaType::Int, QMetaType::Long, 17, 24, + QMetaType::Void, QMetaType::Int, QMetaType::QString, 17, 26, + QMetaType::Void, QMetaType::Int, 17, + QMetaType::Void, QMetaType::Int, 17, + QMetaType::Void, QMetaType::QString, QMetaType::Int, 30, 17, + QMetaType::Void, QMetaType::Int, 17, + QMetaType::Void, QMetaType::Int, 17, + QMetaType::Void, QMetaType::Int, 17, + QMetaType::Void, QMetaType::Int, 35, + QMetaType::Void, QMetaType::Int, 35, + QMetaType::Void, QMetaType::Int, 35, + QMetaType::Void, QMetaType::Int, 17, + QMetaType::Void, QMetaType::Int, 17, + QMetaType::Void, 0x80000000 | 41, 42, + QMetaType::Void, 0x80000000 | 44, 42, + QMetaType::Void, + QMetaType::Void, + QMetaType::Void, + QMetaType::Void, + QMetaType::Void, + QMetaType::Void, + QMetaType::Void, + QMetaType::Void, + QMetaType::Void, + QMetaType::Void, + QMetaType::Void, + QMetaType::Void, + QMetaType::Void, QMetaType::QString, 58, + + 0 // eod +}; + +void Cigarette::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + if (_c == QMetaObject::InvokeMetaMethod) { + auto *_t = static_cast(_o); + Q_UNUSED(_t) + switch (_id) { + case 0: _t->sengMsgToClog((*reinterpret_cast< QString(*)>(_a[1]))); break; + case 1: _t->sendMsgToExportData(); break; + case 2: _t->on_btn_start_released(); break; + case 3: _t->on_btn_pause_released(); break; + case 4: _t->on_btn_lock_released(); break; + case 5: _t->on_btn_setup_released(); break; + case 6: _t->on_checkBox_debug_clicked((*reinterpret_cast< bool(*)>(_a[1]))); break; + case 7: _t->on_checkBox_unkick_clicked((*reinterpret_cast< bool(*)>(_a[1]))); break; + case 8: _t->on_toolButton_plc_released(); break; + case 9: _t->on_toolButton_alarm_released(); break; + case 10: _t->on_pushButton_clear_released(); break; + case 11: _t->enable_shift(); break; + case 12: _t->sendLatestData(); break; + case 13: _t->OnNotifyHub((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2])),(*reinterpret_cast< cv::Mat(*)>(_a[3]))); break; + case 14: _t->OnDisplayTimeCostHub((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2]))); break; + case 15: _t->OnDisplayCheckNumberHub((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< long(*)>(_a[2]))); break; + case 16: _t->OnDisplayJdNoHub((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< QString(*)>(_a[2]))); break; + case 17: _t->OnOKHub((*reinterpret_cast< int(*)>(_a[1]))); break; + case 18: _t->OnNGHub((*reinterpret_cast< int(*)>(_a[1]))); break; + case 19: _t->updateStatisticsHub((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2]))); break; + case 20: _t->OnRotateReleasedHub((*reinterpret_cast< int(*)>(_a[1]))); break; + case 21: _t->OnToolButtonCamReleasedHub((*reinterpret_cast< int(*)>(_a[1]))); break; + case 22: _t->OpenCamTimeoutHub((*reinterpret_cast< int(*)>(_a[1]))); break; + case 23: _t->OnDBClickHub((*reinterpret_cast< int(*)>(_a[1]))); break; + case 24: _t->DrawRect_init((*reinterpret_cast< int(*)>(_a[1]))); break; + case 25: _t->OnTPClickHub((*reinterpret_cast< int(*)>(_a[1]))); break; + case 26: _t->OnDBClickNGHub((*reinterpret_cast< int(*)>(_a[1]))); break; + case 27: _t->ReconnectCamHub((*reinterpret_cast< int(*)>(_a[1]))); break; + case 28: _t->OnMouse((*reinterpret_cast< QMouseEvent*(*)>(_a[1]))); break; + case 29: _t->OnKey((*reinterpret_cast< QKeyEvent*(*)>(_a[1]))); break; + case 30: _t->handleTimeout(); break; + case 31: _t->op_timeout(); break; + case 32: _t->admin_timeout(); break; + case 33: _t->EnableDebugMode(); break; + case 34: _t->DisableDebugMode(); break; + case 35: _t->OnCancelAlarm(); break; + case 36: _t->on_pushButton_reset_released(); break; + case 37: _t->OnOp(); break; + case 38: _t->OnExit(); break; + case 39: _t->OnRestart(); break; + case 40: _t->OnAdmin(); break; + case 41: _t->CleanThreadStartAuto(); break; + case 42: _t->recMsgFromUdp((*reinterpret_cast< QString(*)>(_a[1]))); break; + default: ; + } + } else if (_c == QMetaObject::IndexOfMethod) { + int *result = reinterpret_cast(_a[0]); + { + using _t = void (Cigarette::*)(QString ); + if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&Cigarette::sengMsgToClog)) { + *result = 0; + return; + } + } + { + using _t = void (Cigarette::*)(); + if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&Cigarette::sendMsgToExportData)) { + *result = 1; + return; + } + } + } +} + +QT_INIT_METAOBJECT const QMetaObject Cigarette::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_meta_stringdata_Cigarette.data, + qt_meta_data_Cigarette, + qt_static_metacall, + nullptr, + nullptr +} }; + + +const QMetaObject *Cigarette::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *Cigarette::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_meta_stringdata_Cigarette.stringdata0)) + return static_cast(this); + return QMainWindow::qt_metacast(_clname); +} + +int Cigarette::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QMainWindow::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 43) + qt_static_metacall(this, _c, _id, _a); + _id -= 43; + } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 43) + *reinterpret_cast(_a[0]) = -1; + _id -= 43; + } + return _id; +} + +// SIGNAL 0 +void Cigarette::sengMsgToClog(QString _t1) +{ + void *_a[] = { nullptr, const_cast(reinterpret_cast(std::addressof(_t1))) }; + QMetaObject::activate(this, &staticMetaObject, 0, _a); +} + +// SIGNAL 1 +void Cigarette::sendMsgToExportData() +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr); +} +QT_WARNING_POP +QT_END_MOC_NAMESPACE diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_db_label.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_db_label.cpp new file mode 100644 index 00000000..63da61d9 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_db_label.cpp @@ -0,0 +1,273 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'db_label.h' +** +** Created by: The Qt Meta Object Compiler version 67 (Qt 5.14.2) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include +#include "../../db_label.h" +#include +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'db_label.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 67 +#error "This file was generated using the moc from 5.14.2. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +struct qt_meta_stringdata_db_label_t { + QByteArrayData data[14]; + char stringdata0[219]; +}; +#define QT_MOC_LITERAL(idx, ofs, len) \ + Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ + qptrdiff(offsetof(qt_meta_stringdata_db_label_t, stringdata0) + ofs \ + - idx * sizeof(QByteArrayData)) \ + ) +static const qt_meta_stringdata_db_label_t qt_meta_stringdata_db_label = { + { +QT_MOC_LITERAL(0, 0, 8), // "db_label" +QT_MOC_LITERAL(1, 9, 11), // "QlabelClick" +QT_MOC_LITERAL(2, 21, 0), // "" +QT_MOC_LITERAL(3, 22, 17), // "QlabelDoubleClick" +QT_MOC_LITERAL(4, 40, 17), // "QlabelTripleClick" +QT_MOC_LITERAL(5, 58, 27), // "SignalmouseDoubleClickEvent" +QT_MOC_LITERAL(6, 86, 12), // "QMouseEvent*" +QT_MOC_LITERAL(7, 99, 5), // "event" +QT_MOC_LITERAL(8, 105, 21), // "SignalmousePressEvent" +QT_MOC_LITERAL(9, 127, 23), // "SignalmouseReleaseEvent" +QT_MOC_LITERAL(10, 151, 20), // "SignalmouseMoveEvent" +QT_MOC_LITERAL(11, 172, 21), // "SignalkeyReleaseEvent" +QT_MOC_LITERAL(12, 194, 10), // "QKeyEvent*" +QT_MOC_LITERAL(13, 205, 13) // "TimeOutNotify" + + }, + "db_label\0QlabelClick\0\0QlabelDoubleClick\0" + "QlabelTripleClick\0SignalmouseDoubleClickEvent\0" + "QMouseEvent*\0event\0SignalmousePressEvent\0" + "SignalmouseReleaseEvent\0SignalmouseMoveEvent\0" + "SignalkeyReleaseEvent\0QKeyEvent*\0" + "TimeOutNotify" +}; +#undef QT_MOC_LITERAL + +static const uint qt_meta_data_db_label[] = { + + // content: + 8, // revision + 0, // classname + 0, 0, // classinfo + 9, 14, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors + 0, // flags + 8, // signalCount + + // signals: name, argc, parameters, tag, flags + 1, 0, 59, 2, 0x06 /* Public */, + 3, 0, 60, 2, 0x06 /* Public */, + 4, 0, 61, 2, 0x06 /* Public */, + 5, 1, 62, 2, 0x06 /* Public */, + 8, 1, 65, 2, 0x06 /* Public */, + 9, 1, 68, 2, 0x06 /* Public */, + 10, 1, 71, 2, 0x06 /* Public */, + 11, 1, 74, 2, 0x06 /* Public */, + + // slots: name, argc, parameters, tag, flags + 13, 0, 77, 2, 0x08 /* Private */, + + // signals: parameters + QMetaType::Void, + QMetaType::Void, + QMetaType::Void, + QMetaType::Void, 0x80000000 | 6, 7, + QMetaType::Void, 0x80000000 | 6, 7, + QMetaType::Void, 0x80000000 | 6, 7, + QMetaType::Void, 0x80000000 | 6, 7, + QMetaType::Void, 0x80000000 | 12, 7, + + // slots: parameters + QMetaType::Void, + + 0 // eod +}; + +void db_label::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + if (_c == QMetaObject::InvokeMetaMethod) { + auto *_t = static_cast(_o); + Q_UNUSED(_t) + switch (_id) { + case 0: _t->QlabelClick(); break; + case 1: _t->QlabelDoubleClick(); break; + case 2: _t->QlabelTripleClick(); break; + case 3: _t->SignalmouseDoubleClickEvent((*reinterpret_cast< QMouseEvent*(*)>(_a[1]))); break; + case 4: _t->SignalmousePressEvent((*reinterpret_cast< QMouseEvent*(*)>(_a[1]))); break; + case 5: _t->SignalmouseReleaseEvent((*reinterpret_cast< QMouseEvent*(*)>(_a[1]))); break; + case 6: _t->SignalmouseMoveEvent((*reinterpret_cast< QMouseEvent*(*)>(_a[1]))); break; + case 7: _t->SignalkeyReleaseEvent((*reinterpret_cast< QKeyEvent*(*)>(_a[1]))); break; + case 8: _t->TimeOutNotify(); break; + default: ; + } + } else if (_c == QMetaObject::IndexOfMethod) { + int *result = reinterpret_cast(_a[0]); + { + using _t = void (db_label::*)(); + if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&db_label::QlabelClick)) { + *result = 0; + return; + } + } + { + using _t = void (db_label::*)(); + if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&db_label::QlabelDoubleClick)) { + *result = 1; + return; + } + } + { + using _t = void (db_label::*)(); + if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&db_label::QlabelTripleClick)) { + *result = 2; + return; + } + } + { + using _t = void (db_label::*)(QMouseEvent * ); + if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&db_label::SignalmouseDoubleClickEvent)) { + *result = 3; + return; + } + } + { + using _t = void (db_label::*)(QMouseEvent * ); + if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&db_label::SignalmousePressEvent)) { + *result = 4; + return; + } + } + { + using _t = void (db_label::*)(QMouseEvent * ); + if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&db_label::SignalmouseReleaseEvent)) { + *result = 5; + return; + } + } + { + using _t = void (db_label::*)(QMouseEvent * ); + if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&db_label::SignalmouseMoveEvent)) { + *result = 6; + return; + } + } + { + using _t = void (db_label::*)(QKeyEvent * ); + if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&db_label::SignalkeyReleaseEvent)) { + *result = 7; + return; + } + } + } +} + +QT_INIT_METAOBJECT const QMetaObject db_label::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_meta_stringdata_db_label.data, + qt_meta_data_db_label, + qt_static_metacall, + nullptr, + nullptr +} }; + + +const QMetaObject *db_label::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *db_label::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_meta_stringdata_db_label.stringdata0)) + return static_cast(this); + return QLabel::qt_metacast(_clname); +} + +int db_label::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QLabel::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 9) + qt_static_metacall(this, _c, _id, _a); + _id -= 9; + } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 9) + *reinterpret_cast(_a[0]) = -1; + _id -= 9; + } + return _id; +} + +// SIGNAL 0 +void db_label::QlabelClick() +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr); +} + +// SIGNAL 1 +void db_label::QlabelDoubleClick() +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr); +} + +// SIGNAL 2 +void db_label::QlabelTripleClick() +{ + QMetaObject::activate(this, &staticMetaObject, 2, nullptr); +} + +// SIGNAL 3 +void db_label::SignalmouseDoubleClickEvent(QMouseEvent * _t1) +{ + void *_a[] = { nullptr, const_cast(reinterpret_cast(std::addressof(_t1))) }; + QMetaObject::activate(this, &staticMetaObject, 3, _a); +} + +// SIGNAL 4 +void db_label::SignalmousePressEvent(QMouseEvent * _t1) +{ + void *_a[] = { nullptr, const_cast(reinterpret_cast(std::addressof(_t1))) }; + QMetaObject::activate(this, &staticMetaObject, 4, _a); +} + +// SIGNAL 5 +void db_label::SignalmouseReleaseEvent(QMouseEvent * _t1) +{ + void *_a[] = { nullptr, const_cast(reinterpret_cast(std::addressof(_t1))) }; + QMetaObject::activate(this, &staticMetaObject, 5, _a); +} + +// SIGNAL 6 +void db_label::SignalmouseMoveEvent(QMouseEvent * _t1) +{ + void *_a[] = { nullptr, const_cast(reinterpret_cast(std::addressof(_t1))) }; + QMetaObject::activate(this, &staticMetaObject, 6, _a); +} + +// SIGNAL 7 +void db_label::SignalkeyReleaseEvent(QKeyEvent * _t1) +{ + void *_a[] = { nullptr, const_cast(reinterpret_cast(std::addressof(_t1))) }; + QMetaObject::activate(this, &staticMetaObject, 7, _a); +} +QT_WARNING_POP +QT_END_MOC_NAMESPACE diff --git a/Cigarette/GeneratedFiles/Release/moc_debugthread.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_debugthread.cpp similarity index 97% rename from Cigarette/GeneratedFiles/Release/moc_debugthread.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_debugthread.cpp index fa81e2da..c8f3fbaf 100644 --- a/Cigarette/GeneratedFiles/Release/moc_debugthread.cpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_debugthread.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** Meta object code from reading C++ file 'debugthread.h' ** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.15.2) +** Created by: The Qt Meta Object Compiler version 67 (Qt 5.14.2) ** ** WARNING! All changes made in this file will be lost! *****************************************************************************/ @@ -13,7 +13,7 @@ #if !defined(Q_MOC_OUTPUT_REVISION) #error "The header file 'debugthread.h' doesn't include ." #elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.15.2. It" +#error "This file was generated using the moc from 5.14.2. It" #error "cannot be used with the include files from this version of Qt." #error "(The moc has changed too much.)" #endif diff --git a/Cigarette/GeneratedFiles/Release/moc_dialogin.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_dialogin.cpp similarity index 98% rename from Cigarette/GeneratedFiles/Release/moc_dialogin.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_dialogin.cpp index b2a37e28..9ab23d10 100644 --- a/Cigarette/GeneratedFiles/Release/moc_dialogin.cpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_dialogin.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** Meta object code from reading C++ file 'dialogin.hpp' ** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.15.2) +** Created by: The Qt Meta Object Compiler version 67 (Qt 5.14.2) ** ** WARNING! All changes made in this file will be lost! *****************************************************************************/ @@ -13,7 +13,7 @@ #if !defined(Q_MOC_OUTPUT_REVISION) #error "The header file 'dialogin.hpp' doesn't include ." #elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.15.2. It" +#error "This file was generated using the moc from 5.14.2. It" #error "cannot be used with the include files from this version of Qt." #error "(The moc has changed too much.)" #endif diff --git a/Cigarette/GeneratedFiles/Release/moc_dialogsetup.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_dialogsetup.cpp similarity index 57% rename from Cigarette/GeneratedFiles/Release/moc_dialogsetup.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_dialogsetup.cpp index d777ef47..8bf5c7d1 100644 --- a/Cigarette/GeneratedFiles/Release/moc_dialogsetup.cpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_dialogsetup.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** Meta object code from reading C++ file 'dialogsetup.hpp' ** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.15.2) +** Created by: The Qt Meta Object Compiler version 67 (Qt 5.14.2) ** ** WARNING! All changes made in this file will be lost! *****************************************************************************/ @@ -13,7 +13,7 @@ #if !defined(Q_MOC_OUTPUT_REVISION) #error "The header file 'dialogsetup.hpp' doesn't include ." #elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.15.2. It" +#error "This file was generated using the moc from 5.14.2. It" #error "cannot be used with the include files from this version of Qt." #error "(The moc has changed too much.)" #endif @@ -22,8 +22,8 @@ QT_BEGIN_MOC_NAMESPACE QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED struct qt_meta_stringdata_DialogSetup_t { - QByteArrayData data[29]; - char stringdata0[603]; + QByteArrayData data[38]; + char stringdata0[872]; }; #define QT_MOC_LITERAL(idx, ofs, len) \ Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ @@ -41,47 +41,63 @@ QT_MOC_LITERAL(5, 46, 5), // "timeB" QT_MOC_LITERAL(6, 52, 5), // "timeC" QT_MOC_LITERAL(7, 58, 15), // "sendMsgToOutput" QT_MOC_LITERAL(8, 74, 15), // "sendMsgToConfig" -QT_MOC_LITERAL(9, 90, 8), // "int[][3]" +QT_MOC_LITERAL(9, 90, 8), // "int[][5]" QT_MOC_LITERAL(10, 99, 3), // "ptr" QT_MOC_LITERAL(11, 103, 31), // "on_toolButton_keyboard_released" QT_MOC_LITERAL(12, 135, 27), // "on_pushButton_exit_released" QT_MOC_LITERAL(13, 163, 27), // "on_pushButton_save_released" QT_MOC_LITERAL(14, 191, 28), // "on_pushButton_close_released" -QT_MOC_LITERAL(15, 220, 30), // "on_pushButton_desktop_released" -QT_MOC_LITERAL(16, 251, 28), // "on_pushButton_image_released" -QT_MOC_LITERAL(17, 280, 27), // "on_pushButton_pswd_released" -QT_MOC_LITERAL(18, 308, 30), // "on_pushButton_pswd_op_released" -QT_MOC_LITERAL(19, 339, 27), // "on_pushButton_expo_released" -QT_MOC_LITERAL(20, 367, 29), // "on_pushButton_filter_released" -QT_MOC_LITERAL(21, 397, 29), // "on_pushButton_config_released" -QT_MOC_LITERAL(22, 427, 29), // "on_pushButton_change_released" -QT_MOC_LITERAL(23, 457, 32), // "on_pushButton_statistic_released" -QT_MOC_LITERAL(24, 490, 29), // "on_checkBox_auto_open_clicked" -QT_MOC_LITERAL(25, 520, 7), // "checked" -QT_MOC_LITERAL(26, 528, 29), // "on_checkBox_auto_work_clicked" -QT_MOC_LITERAL(27, 558, 22), // "recMsgFromDialogConfig" -QT_MOC_LITERAL(28, 581, 21) // "recMsgFromChangeShift" +QT_MOC_LITERAL(15, 220, 41), // "on_toolButton_choose_config_p..." +QT_MOC_LITERAL(16, 262, 40), // "on_toolButton_choose_model_pa..." +QT_MOC_LITERAL(17, 303, 38), // "on_toolButton_choose_path_jpg..." +QT_MOC_LITERAL(18, 342, 44), // "on_toolButton_choose_save_pic..." +QT_MOC_LITERAL(19, 387, 30), // "on_pushButton_desktop_released" +QT_MOC_LITERAL(20, 418, 28), // "on_pushButton_image_released" +QT_MOC_LITERAL(21, 447, 27), // "on_pushButton_pswd_released" +QT_MOC_LITERAL(22, 475, 30), // "on_pushButton_pswd_op_released" +QT_MOC_LITERAL(23, 506, 27), // "on_pushButton_expo_released" +QT_MOC_LITERAL(24, 534, 29), // "on_pushButton_filter_released" +QT_MOC_LITERAL(25, 564, 32), // "on_pushButton_clear_pic_released" +QT_MOC_LITERAL(26, 597, 29), // "on_pushButton_config_released" +QT_MOC_LITERAL(27, 627, 29), // "on_pushButton_change_released" +QT_MOC_LITERAL(28, 657, 32), // "on_pushButton_statistic_released" +QT_MOC_LITERAL(29, 690, 29), // "on_checkBox_auto_open_clicked" +QT_MOC_LITERAL(30, 720, 7), // "checked" +QT_MOC_LITERAL(31, 728, 29), // "on_checkBox_auto_work_clicked" +QT_MOC_LITERAL(32, 758, 22), // "recMsgFromDialogConfig" +QT_MOC_LITERAL(33, 781, 21), // "recMsgFromChangeShift" +QT_MOC_LITERAL(34, 803, 16), // "onComboBoxSelect" +QT_MOC_LITERAL(35, 820, 5), // "index" +QT_MOC_LITERAL(36, 826, 20), // "onComboBoxConfSelect" +QT_MOC_LITERAL(37, 847, 24) // "onComboBoxPicsPathSelect" }, "DialogSetup\0system_exit\0\0sendMsgToShift\0" "timeA\0timeB\0timeC\0sendMsgToOutput\0" - "sendMsgToConfig\0int[][3]\0ptr\0" + "sendMsgToConfig\0int[][5]\0ptr\0" "on_toolButton_keyboard_released\0" "on_pushButton_exit_released\0" "on_pushButton_save_released\0" "on_pushButton_close_released\0" + "on_toolButton_choose_config_path_released\0" + "on_toolButton_choose_model_path_released\0" + "on_toolButton_choose_path_jpg_released\0" + "on_toolButton_choose_save_pics_path_released\0" "on_pushButton_desktop_released\0" "on_pushButton_image_released\0" "on_pushButton_pswd_released\0" "on_pushButton_pswd_op_released\0" "on_pushButton_expo_released\0" "on_pushButton_filter_released\0" + "on_pushButton_clear_pic_released\0" "on_pushButton_config_released\0" "on_pushButton_change_released\0" "on_pushButton_statistic_released\0" "on_checkBox_auto_open_clicked\0checked\0" "on_checkBox_auto_work_clicked\0" - "recMsgFromDialogConfig\0recMsgFromChangeShift" + "recMsgFromDialogConfig\0recMsgFromChangeShift\0" + "onComboBoxSelect\0index\0onComboBoxConfSelect\0" + "onComboBoxPicsPathSelect" }; #undef QT_MOC_LITERAL @@ -91,7 +107,7 @@ static const uint qt_meta_data_DialogSetup[] = { 8, // revision 0, // classname 0, 0, // classinfo - 21, 14, // methods + 29, 14, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors @@ -99,29 +115,37 @@ static const uint qt_meta_data_DialogSetup[] = { 4, // signalCount // signals: name, argc, parameters, tag, flags - 1, 0, 119, 2, 0x06 /* Public */, - 3, 3, 120, 2, 0x06 /* Public */, - 7, 0, 127, 2, 0x06 /* Public */, - 8, 1, 128, 2, 0x06 /* Public */, + 1, 0, 159, 2, 0x06 /* Public */, + 3, 3, 160, 2, 0x06 /* Public */, + 7, 0, 167, 2, 0x06 /* Public */, + 8, 1, 168, 2, 0x06 /* Public */, // slots: name, argc, parameters, tag, flags - 11, 0, 131, 2, 0x08 /* Private */, - 12, 0, 132, 2, 0x08 /* Private */, - 13, 0, 133, 2, 0x08 /* Private */, - 14, 0, 134, 2, 0x08 /* Private */, - 15, 0, 135, 2, 0x08 /* Private */, - 16, 0, 136, 2, 0x08 /* Private */, - 17, 0, 137, 2, 0x08 /* Private */, - 18, 0, 138, 2, 0x08 /* Private */, - 19, 0, 139, 2, 0x08 /* Private */, - 20, 0, 140, 2, 0x08 /* Private */, - 21, 0, 141, 2, 0x08 /* Private */, - 22, 0, 142, 2, 0x08 /* Private */, - 23, 0, 143, 2, 0x08 /* Private */, - 24, 1, 144, 2, 0x08 /* Private */, - 26, 1, 147, 2, 0x08 /* Private */, - 27, 1, 150, 2, 0x08 /* Private */, - 28, 3, 153, 2, 0x08 /* Private */, + 11, 0, 171, 2, 0x08 /* Private */, + 12, 0, 172, 2, 0x08 /* Private */, + 13, 0, 173, 2, 0x08 /* Private */, + 14, 0, 174, 2, 0x08 /* Private */, + 15, 0, 175, 2, 0x08 /* Private */, + 16, 0, 176, 2, 0x08 /* Private */, + 17, 0, 177, 2, 0x08 /* Private */, + 18, 0, 178, 2, 0x08 /* Private */, + 19, 0, 179, 2, 0x08 /* Private */, + 20, 0, 180, 2, 0x08 /* Private */, + 21, 0, 181, 2, 0x08 /* Private */, + 22, 0, 182, 2, 0x08 /* Private */, + 23, 0, 183, 2, 0x08 /* Private */, + 24, 0, 184, 2, 0x08 /* Private */, + 25, 0, 185, 2, 0x08 /* Private */, + 26, 0, 186, 2, 0x08 /* Private */, + 27, 0, 187, 2, 0x08 /* Private */, + 28, 0, 188, 2, 0x08 /* Private */, + 29, 1, 189, 2, 0x08 /* Private */, + 31, 1, 192, 2, 0x08 /* Private */, + 32, 1, 195, 2, 0x08 /* Private */, + 33, 3, 198, 2, 0x08 /* Private */, + 34, 1, 205, 2, 0x08 /* Private */, + 36, 1, 208, 2, 0x08 /* Private */, + 37, 1, 211, 2, 0x08 /* Private */, // signals: parameters QMetaType::Void, @@ -143,10 +167,18 @@ static const uint qt_meta_data_DialogSetup[] = { QMetaType::Void, QMetaType::Void, QMetaType::Void, - QMetaType::Void, QMetaType::Bool, 25, - QMetaType::Void, QMetaType::Bool, 25, + QMetaType::Void, + QMetaType::Void, + QMetaType::Void, + QMetaType::Void, + QMetaType::Void, + QMetaType::Void, QMetaType::Bool, 30, + QMetaType::Void, QMetaType::Bool, 30, QMetaType::Void, 0x80000000 | 9, 10, QMetaType::Void, QMetaType::QTime, QMetaType::QTime, QMetaType::QTime, 4, 5, 6, + QMetaType::Void, QMetaType::Int, 35, + QMetaType::Void, QMetaType::Int, 35, + QMetaType::Void, QMetaType::Int, 35, 0 // eod }; @@ -160,24 +192,32 @@ void DialogSetup::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, case 0: _t->system_exit(); break; case 1: _t->sendMsgToShift((*reinterpret_cast< QTime(*)>(_a[1])),(*reinterpret_cast< QTime(*)>(_a[2])),(*reinterpret_cast< QTime(*)>(_a[3]))); break; case 2: _t->sendMsgToOutput(); break; - case 3: _t->sendMsgToConfig((*reinterpret_cast< int(*)[][3]>(_a[1]))); break; + case 3: _t->sendMsgToConfig((*reinterpret_cast< int(*)[][5]>(_a[1]))); break; case 4: _t->on_toolButton_keyboard_released(); break; case 5: _t->on_pushButton_exit_released(); break; case 6: _t->on_pushButton_save_released(); break; case 7: _t->on_pushButton_close_released(); break; - case 8: _t->on_pushButton_desktop_released(); break; - case 9: _t->on_pushButton_image_released(); break; - case 10: _t->on_pushButton_pswd_released(); break; - case 11: _t->on_pushButton_pswd_op_released(); break; - case 12: _t->on_pushButton_expo_released(); break; - case 13: _t->on_pushButton_filter_released(); break; - case 14: _t->on_pushButton_config_released(); break; - case 15: _t->on_pushButton_change_released(); break; - case 16: _t->on_pushButton_statistic_released(); break; - case 17: _t->on_checkBox_auto_open_clicked((*reinterpret_cast< bool(*)>(_a[1]))); break; - case 18: _t->on_checkBox_auto_work_clicked((*reinterpret_cast< bool(*)>(_a[1]))); break; - case 19: _t->recMsgFromDialogConfig((*reinterpret_cast< int(*)[][3]>(_a[1]))); break; - case 20: _t->recMsgFromChangeShift((*reinterpret_cast< QTime(*)>(_a[1])),(*reinterpret_cast< QTime(*)>(_a[2])),(*reinterpret_cast< QTime(*)>(_a[3]))); break; + case 8: _t->on_toolButton_choose_config_path_released(); break; + case 9: _t->on_toolButton_choose_model_path_released(); break; + case 10: _t->on_toolButton_choose_path_jpg_released(); break; + case 11: _t->on_toolButton_choose_save_pics_path_released(); break; + case 12: _t->on_pushButton_desktop_released(); break; + case 13: _t->on_pushButton_image_released(); break; + case 14: _t->on_pushButton_pswd_released(); break; + case 15: _t->on_pushButton_pswd_op_released(); break; + case 16: _t->on_pushButton_expo_released(); break; + case 17: _t->on_pushButton_filter_released(); break; + case 18: _t->on_pushButton_clear_pic_released(); break; + case 19: _t->on_pushButton_config_released(); break; + case 20: _t->on_pushButton_change_released(); break; + case 21: _t->on_pushButton_statistic_released(); break; + case 22: _t->on_checkBox_auto_open_clicked((*reinterpret_cast< bool(*)>(_a[1]))); break; + case 23: _t->on_checkBox_auto_work_clicked((*reinterpret_cast< bool(*)>(_a[1]))); break; + case 24: _t->recMsgFromDialogConfig((*reinterpret_cast< int(*)[][5]>(_a[1]))); break; + case 25: _t->recMsgFromChangeShift((*reinterpret_cast< QTime(*)>(_a[1])),(*reinterpret_cast< QTime(*)>(_a[2])),(*reinterpret_cast< QTime(*)>(_a[3]))); break; + case 26: _t->onComboBoxSelect((*reinterpret_cast< int(*)>(_a[1]))); break; + case 27: _t->onComboBoxConfSelect((*reinterpret_cast< int(*)>(_a[1]))); break; + case 28: _t->onComboBoxPicsPathSelect((*reinterpret_cast< int(*)>(_a[1]))); break; default: ; } } else if (_c == QMetaObject::IndexOfMethod) { @@ -204,7 +244,7 @@ void DialogSetup::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, } } { - using _t = void (DialogSetup::*)(int [][3]); + using _t = void (DialogSetup::*)(int [][5]); if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&DialogSetup::sendMsgToConfig)) { *result = 3; return; @@ -242,13 +282,13 @@ int DialogSetup::qt_metacall(QMetaObject::Call _c, int _id, void **_a) if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { - if (_id < 21) + if (_id < 29) qt_static_metacall(this, _c, _id, _a); - _id -= 21; + _id -= 29; } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) { - if (_id < 21) + if (_id < 29) *reinterpret_cast(_a[0]) = -1; - _id -= 21; + _id -= 29; } return _id; } @@ -273,7 +313,7 @@ void DialogSetup::sendMsgToOutput() } // SIGNAL 3 -void DialogSetup::sendMsgToConfig(int _t1[][3]) +void DialogSetup::sendMsgToConfig(int _t1[][5]) { void *_a[] = { nullptr, const_cast(reinterpret_cast(std::addressof(_t1))) }; QMetaObject::activate(this, &staticMetaObject, 3, _a); diff --git a/Cigarette/GeneratedFiles/Release/moc_dialogsetuppasswd.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_dialogsetuppasswd.cpp similarity index 98% rename from Cigarette/GeneratedFiles/Release/moc_dialogsetuppasswd.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_dialogsetuppasswd.cpp index eb698011..8e670eb7 100644 --- a/Cigarette/GeneratedFiles/Release/moc_dialogsetuppasswd.cpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_dialogsetuppasswd.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** Meta object code from reading C++ file 'dialogsetuppasswd.hpp' ** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.15.2) +** Created by: The Qt Meta Object Compiler version 67 (Qt 5.14.2) ** ** WARNING! All changes made in this file will be lost! *****************************************************************************/ @@ -13,7 +13,7 @@ #if !defined(Q_MOC_OUTPUT_REVISION) #error "The header file 'dialogsetuppasswd.hpp' doesn't include ." #elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.15.2. It" +#error "This file was generated using the moc from 5.14.2. It" #error "cannot be used with the include files from this version of Qt." #error "(The moc has changed too much.)" #endif diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_exportData.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_exportData.cpp new file mode 100644 index 00000000..1b90ac3f --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_exportData.cpp @@ -0,0 +1,124 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'exportData.h' +** +** Created by: The Qt Meta Object Compiler version 67 (Qt 5.14.2) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include +#include "../../exportData.h" +#include +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'exportData.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 67 +#error "This file was generated using the moc from 5.14.2. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +struct qt_meta_stringdata_ExportDataThread_t { + QByteArrayData data[5]; + char stringdata0[71]; +}; +#define QT_MOC_LITERAL(idx, ofs, len) \ + Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ + qptrdiff(offsetof(qt_meta_stringdata_ExportDataThread_t, stringdata0) + ofs \ + - idx * sizeof(QByteArrayData)) \ + ) +static const qt_meta_stringdata_ExportDataThread_t qt_meta_stringdata_ExportDataThread = { + { +QT_MOC_LITERAL(0, 0, 16), // "ExportDataThread" +QT_MOC_LITERAL(1, 17, 21), // "EDrecMsgFromCigarette" +QT_MOC_LITERAL(2, 39, 0), // "" +QT_MOC_LITERAL(3, 40, 21), // "GetDataFromSaveThread" +QT_MOC_LITERAL(4, 62, 8) // "filePath" + + }, + "ExportDataThread\0EDrecMsgFromCigarette\0" + "\0GetDataFromSaveThread\0filePath" +}; +#undef QT_MOC_LITERAL + +static const uint qt_meta_data_ExportDataThread[] = { + + // content: + 8, // revision + 0, // classname + 0, 0, // classinfo + 2, 14, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors + 0, // flags + 0, // signalCount + + // slots: name, argc, parameters, tag, flags + 1, 0, 24, 2, 0x0a /* Public */, + 3, 1, 25, 2, 0x0a /* Public */, + + // slots: parameters + QMetaType::Void, + QMetaType::Void, QMetaType::QString, 4, + + 0 // eod +}; + +void ExportDataThread::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + if (_c == QMetaObject::InvokeMetaMethod) { + auto *_t = static_cast(_o); + Q_UNUSED(_t) + switch (_id) { + case 0: _t->EDrecMsgFromCigarette(); break; + case 1: _t->GetDataFromSaveThread((*reinterpret_cast< QString(*)>(_a[1]))); break; + default: ; + } + } +} + +QT_INIT_METAOBJECT const QMetaObject ExportDataThread::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_meta_stringdata_ExportDataThread.data, + qt_meta_data_ExportDataThread, + qt_static_metacall, + nullptr, + nullptr +} }; + + +const QMetaObject *ExportDataThread::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *ExportDataThread::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_meta_stringdata_ExportDataThread.stringdata0)) + return static_cast(this); + return QThread::qt_metacast(_clname); +} + +int ExportDataThread::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QThread::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 2) + qt_static_metacall(this, _c, _id, _a); + _id -= 2; + } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 2) + *reinterpret_cast(_a[0]) = -1; + _id -= 2; + } + return _id; +} +QT_WARNING_POP +QT_END_MOC_NAMESPACE diff --git a/Cigarette/GeneratedFiles/Release/moc_output_statistic.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_output_statistic.cpp similarity index 96% rename from Cigarette/GeneratedFiles/Release/moc_output_statistic.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_output_statistic.cpp index 79f91a63..b33001f7 100644 --- a/Cigarette/GeneratedFiles/Release/moc_output_statistic.cpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_output_statistic.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** Meta object code from reading C++ file 'output_statistic.h' ** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.15.2) +** Created by: The Qt Meta Object Compiler version 67 (Qt 5.14.2) ** ** WARNING! All changes made in this file will be lost! *****************************************************************************/ @@ -13,7 +13,7 @@ #if !defined(Q_MOC_OUTPUT_REVISION) #error "The header file 'output_statistic.h' doesn't include ." #elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.15.2. It" +#error "This file was generated using the moc from 5.14.2. It" #error "cannot be used with the include files from this version of Qt." #error "(The moc has changed too much.)" #endif diff --git a/Cigarette/GeneratedFiles/Release/moc_plcsetup.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_plcsetup.cpp similarity index 97% rename from Cigarette/GeneratedFiles/Release/moc_plcsetup.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_plcsetup.cpp index a9a89b71..a321d6e7 100644 --- a/Cigarette/GeneratedFiles/Release/moc_plcsetup.cpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_plcsetup.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** Meta object code from reading C++ file 'plcsetup.hpp' ** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.15.2) +** Created by: The Qt Meta Object Compiler version 67 (Qt 5.14.2) ** ** WARNING! All changes made in this file will be lost! *****************************************************************************/ @@ -13,7 +13,7 @@ #if !defined(Q_MOC_OUTPUT_REVISION) #error "The header file 'plcsetup.hpp' doesn't include ." #elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.15.2. It" +#error "This file was generated using the moc from 5.14.2. It" #error "cannot be used with the include files from this version of Qt." #error "(The moc has changed too much.)" #endif diff --git a/Cigarette/GeneratedFiles/Release/moc_savethread.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_savethread.cpp similarity index 56% rename from Cigarette/GeneratedFiles/Release/moc_savethread.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_savethread.cpp index c7a8a63f..360c81ea 100644 --- a/Cigarette/GeneratedFiles/Release/moc_savethread.cpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_savethread.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** Meta object code from reading C++ file 'savethread.h' ** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.15.2) +** Created by: The Qt Meta Object Compiler version 67 (Qt 5.14.2) ** ** WARNING! All changes made in this file will be lost! *****************************************************************************/ @@ -13,7 +13,7 @@ #if !defined(Q_MOC_OUTPUT_REVISION) #error "The header file 'savethread.h' doesn't include ." #elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.15.2. It" +#error "This file was generated using the moc from 5.14.2. It" #error "cannot be used with the include files from this version of Qt." #error "(The moc has changed too much.)" #endif @@ -22,8 +22,8 @@ QT_BEGIN_MOC_NAMESPACE QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED struct qt_meta_stringdata_SaveThread_t { - QByteArrayData data[1]; - char stringdata0[11]; + QByteArrayData data[4]; + char stringdata0[38]; }; #define QT_MOC_LITERAL(idx, ofs, len) \ Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ @@ -32,10 +32,13 @@ struct qt_meta_stringdata_SaveThread_t { ) static const qt_meta_stringdata_SaveThread_t qt_meta_stringdata_SaveThread = { { -QT_MOC_LITERAL(0, 0, 10) // "SaveThread" +QT_MOC_LITERAL(0, 0, 10), // "SaveThread" +QT_MOC_LITERAL(1, 11, 16), // "sendDataToExport" +QT_MOC_LITERAL(2, 28, 0), // "" +QT_MOC_LITERAL(3, 29, 8) // "filePath" }, - "SaveThread" + "SaveThread\0sendDataToExport\0\0filePath" }; #undef QT_MOC_LITERAL @@ -45,22 +48,41 @@ static const uint qt_meta_data_SaveThread[] = { 8, // revision 0, // classname 0, 0, // classinfo - 0, 0, // methods + 1, 14, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors 0, // flags - 0, // signalCount + 1, // signalCount + + // signals: name, argc, parameters, tag, flags + 1, 1, 19, 2, 0x06 /* Public */, + + // signals: parameters + QMetaType::Void, QMetaType::QString, 3, 0 // eod }; void SaveThread::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) { - Q_UNUSED(_o); - Q_UNUSED(_id); - Q_UNUSED(_c); - Q_UNUSED(_a); + if (_c == QMetaObject::InvokeMetaMethod) { + auto *_t = static_cast(_o); + Q_UNUSED(_t) + switch (_id) { + case 0: _t->sendDataToExport((*reinterpret_cast< QString(*)>(_a[1]))); break; + default: ; + } + } else if (_c == QMetaObject::IndexOfMethod) { + int *result = reinterpret_cast(_a[0]); + { + using _t = void (SaveThread::*)(QString ); + if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&SaveThread::sendDataToExport)) { + *result = 0; + return; + } + } + } } QT_INIT_METAOBJECT const QMetaObject SaveThread::staticMetaObject = { { @@ -89,7 +111,25 @@ void *SaveThread::qt_metacast(const char *_clname) int SaveThread::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QThread::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 1) + qt_static_metacall(this, _c, _id, _a); + _id -= 1; + } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 1) + *reinterpret_cast(_a[0]) = -1; + _id -= 1; + } return _id; } + +// SIGNAL 0 +void SaveThread::sendDataToExport(QString _t1) +{ + void *_a[] = { nullptr, const_cast(reinterpret_cast(std::addressof(_t1))) }; + QMetaObject::activate(this, &staticMetaObject, 0, _a); +} QT_WARNING_POP QT_END_MOC_NAMESPACE diff --git a/Cigarette/GeneratedFiles/Release/moc_threadReceive.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_threadReceive.cpp similarity index 97% rename from Cigarette/GeneratedFiles/Release/moc_threadReceive.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_threadReceive.cpp index 145910d6..cd07a6b4 100644 --- a/Cigarette/GeneratedFiles/Release/moc_threadReceive.cpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_threadReceive.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** Meta object code from reading C++ file 'threadReceive.h' ** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.15.2) +** Created by: The Qt Meta Object Compiler version 67 (Qt 5.14.2) ** ** WARNING! All changes made in this file will be lost! *****************************************************************************/ @@ -13,7 +13,7 @@ #if !defined(Q_MOC_OUTPUT_REVISION) #error "The header file 'threadReceive.h' doesn't include ." #elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.15.2. It" +#error "This file was generated using the moc from 5.14.2. It" #error "cannot be used with the include files from this version of Qt." #error "(The moc has changed too much.)" #endif diff --git a/Cigarette/GeneratedFiles/Release/moc_workthread.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_workthread.cpp similarity index 98% rename from Cigarette/GeneratedFiles/Release/moc_workthread.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_workthread.cpp index 0d9c55f0..f1641ff4 100644 --- a/Cigarette/GeneratedFiles/Release/moc_workthread.cpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/Release/moc_workthread.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** Meta object code from reading C++ file 'workthread.h' ** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.15.2) +** Created by: The Qt Meta Object Compiler version 67 (Qt 5.14.2) ** ** WARNING! All changes made in this file will be lost! *****************************************************************************/ @@ -13,7 +13,7 @@ #if !defined(Q_MOC_OUTPUT_REVISION) #error "The header file 'workthread.h' doesn't include ." #elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.15.2. It" +#error "This file was generated using the moc from 5.14.2. It" #error "cannot be used with the include files from this version of Qt." #error "(The moc has changed too much.)" #endif diff --git a/Cigarette/GeneratedFiles/qrc_cigarette.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/qrc_cigarette.cpp similarity index 70% rename from Cigarette/GeneratedFiles/qrc_cigarette.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/qrc_cigarette.cpp index 03e732fa..7331b036 100644 --- a/Cigarette/GeneratedFiles/qrc_cigarette.cpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/qrc_cigarette.cpp @@ -1,13 +1,13 @@ /**************************************************************************** ** Resource object code ** -** Created by: The Resource Compiler for Qt version 5.15.2 +** Created by: The Resource Compiler for Qt version 5.14.2 ** ** WARNING! All changes made in this file will be lost! *****************************************************************************/ static const unsigned char qt_resource_data[] = { - // D:/????/??????/230526-????-2?????-1600x900-2/Cigarette/Resources/cam1_yes.png + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/cam1_yes.png 0x0,0x0,0x24,0xa3, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, @@ -597,7 +597,7 @@ static const unsigned char qt_resource_data[] = { 0x7f,0x11,0x4d,0xfe,0x2b,0x4,0xff,0xa,0xd0,0xb,0x6a,0xff,0x7f,0x0,0x76,0xda, 0xa3,0x6d,0xc9,0x88,0xe6,0xed,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42, 0x60,0x82, - // D:/????/??????/230526-????-2?????-1600x900-2/Cigarette/Resources/unlock.png + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/unlock.png 0x0,0x0,0x1f,0x8b, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, @@ -1105,7 +1105,7 @@ static const unsigned char qt_resource_data[] = { 0xaf,0x87,0x2b,0x2,0x28,0x28,0x2,0x28,0x28,0x2,0x28,0x28,0x2,0x28,0x28,0x2, 0x28,0xcc,0x34,0xfc,0xff,0x0,0x40,0xf,0x90,0x81,0x7e,0x5a,0x4c,0x2,0x0,0x0, 0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, - // D:/????/??????/230526-????-2?????-1600x900-2/Cigarette/Resources/cam1_no.png + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/cam1_no.png 0x0,0x0,0x25,0x6e, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, @@ -1707,7 +1707,7 @@ static const unsigned char qt_resource_data[] = { 0xaf,0xa,0x2,0x6b,0x1,0xf6,0xf8,0xe9,0xb8,0xf9,0xef,0xba,0x1e,0xf4,0x7b,0xdf, 0xe4,0xff,0x87,0xe0,0xe4,0xed,0xff,0xe,0x0,0x61,0xa1,0x87,0xf9,0xf9,0x59,0x53, 0xfb,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, - // D:/????/??????/230526-????-2?????-1600x900-2/Cigarette/Resources/pause.png + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/pause.png 0x0,0x0,0x57,0x5c, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, @@ -3108,7 +3108,7 @@ static const unsigned char qt_resource_data[] = { 0x56,0x14,0x60,0x65,0xac,0x28,0xc0,0xca,0x58,0x51,0x80,0x95,0xb1,0xa2,0x0,0x2b, 0xe3,0x7b,0x7b,0xfc,0xff,0x3,0x0,0xd3,0xa,0x30,0x4c,0xf9,0x35,0x1d,0x32,0x0, 0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, - // D:/????/??????/230526-????-2?????-1600x900-2/Cigarette/Resources/cam2_no.png + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/cam2_no.png 0x0,0x0,0x25,0xb9, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, @@ -3715,7 +3715,7 @@ static const unsigned char qt_resource_data[] = { 0xb0,0xc7,0x4f,0xc7,0xcd,0x7f,0xd7,0xf5,0xa0,0x7f,0xf2,0x4d,0xfe,0x7f,0x8,0x4e, 0xde,0xfe,0xef,0x0,0x7d,0x6,0x9d,0x3a,0xc2,0x0,0x4d,0x73,0x0,0x0,0x0,0x0, 0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, - // D:/????/??????/230526-????-2?????-1600x900-2/Cigarette/Resources/plc.png + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/plc.png 0x0,0x0,0x1d,0xda, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, @@ -4196,7 +4196,605 @@ static const unsigned char qt_resource_data[] = { 0x4d,0x79,0xfc,0xcd,0xd1,0x4f,0xf9,0xf5,0x18,0x80,0xc7,0x0,0x3c,0x6,0xe0,0xd3, 0x7d,0xfd,0x9f,0x1,0x0,0xc2,0x2f,0x26,0xbc,0x8d,0x57,0xc,0x7f,0x0,0x0,0x0, 0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, - // D:/????/??????/230526-????-2?????-1600x900-2/Cigarette/Resources/setup.png + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/cam8_yes.png + 0x0,0x0,0x25,0x28, + 0x89, + 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, + 0x0,0x0,0x48,0x0,0x0,0x0,0x48,0x8,0x6,0x0,0x0,0x0,0x55,0xed,0xb3,0x47, + 0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13, + 0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0xa,0x4d,0x69,0x43,0x43,0x50,0x50,0x68,0x6f, + 0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66,0x69, + 0x6c,0x65,0x0,0x0,0x78,0xda,0x9d,0x53,0x77,0x58,0x93,0xf7,0x16,0x3e,0xdf,0xf7, + 0x65,0xf,0x56,0x42,0xd8,0xf0,0xb1,0x97,0x6c,0x81,0x0,0x22,0x23,0xac,0x8,0xc8, + 0x10,0x59,0xa2,0x10,0x92,0x0,0x61,0x84,0x10,0x12,0x40,0xc5,0x85,0x88,0xa,0x56, + 0x14,0x15,0x11,0x9c,0x48,0x55,0xc4,0x82,0xd5,0xa,0x48,0x9d,0x88,0xe2,0xa0,0x28, + 0xb8,0x67,0x41,0x8a,0x88,0x5a,0x8b,0x55,0x5c,0x38,0xee,0x1f,0xdc,0xa7,0xb5,0x7d, + 0x7a,0xef,0xed,0xed,0xfb,0xd7,0xfb,0xbc,0xe7,0x9c,0xe7,0xfc,0xce,0x79,0xcf,0xf, + 0x80,0x11,0x12,0x26,0x91,0xe6,0xa2,0x6a,0x0,0x39,0x52,0x85,0x3c,0x3a,0xd8,0x1f, + 0x8f,0x4f,0x48,0xc4,0xc9,0xbd,0x80,0x2,0x15,0x48,0xe0,0x4,0x20,0x10,0xe6,0xcb, + 0xc2,0x67,0x5,0xc5,0x0,0x0,0xf0,0x3,0x79,0x78,0x7e,0x74,0xb0,0x3f,0xfc,0x1, + 0xaf,0x6f,0x0,0x2,0x0,0x70,0xd5,0x2e,0x24,0x12,0xc7,0xe1,0xff,0x83,0xba,0x50, + 0x26,0x57,0x0,0x20,0x91,0x0,0xe0,0x22,0x12,0xe7,0xb,0x1,0x90,0x52,0x0,0xc8, + 0x2e,0x54,0xc8,0x14,0x0,0xc8,0x18,0x0,0xb0,0x53,0xb3,0x64,0xa,0x0,0x94,0x0, + 0x0,0x6c,0x79,0x7c,0x42,0x22,0x0,0xaa,0xd,0x0,0xec,0xf4,0x49,0x3e,0x5,0x0, + 0xd8,0xa9,0x93,0xdc,0x17,0x0,0xd8,0xa2,0x1c,0xa9,0x8,0x0,0x8d,0x1,0x0,0x99, + 0x28,0x47,0x24,0x2,0x40,0xbb,0x0,0x60,0x55,0x81,0x52,0x2c,0x2,0xc0,0xc2,0x0, + 0xa0,0xac,0x40,0x22,0x2e,0x4,0xc0,0xae,0x1,0x80,0x59,0xb6,0x32,0x47,0x2,0x80, + 0xbd,0x5,0x0,0x76,0x8e,0x58,0x90,0xf,0x40,0x60,0x0,0x80,0x99,0x42,0x2c,0xcc, + 0x0,0x20,0x38,0x2,0x0,0x43,0x1e,0x13,0xcd,0x3,0x20,0x4c,0x3,0xa0,0x30,0xd2, + 0xbf,0xe0,0xa9,0x5f,0x70,0x85,0xb8,0x48,0x1,0x0,0xc0,0xcb,0x95,0xcd,0x97,0x4b, + 0xd2,0x33,0x14,0xb8,0x95,0xd0,0x1a,0x77,0xf2,0xf0,0xe0,0xe2,0x21,0xe2,0xc2,0x6c, + 0xb1,0x42,0x61,0x17,0x29,0x10,0x66,0x9,0xe4,0x22,0x9c,0x97,0x9b,0x23,0x13,0x48, + 0xe7,0x3,0x4c,0xce,0xc,0x0,0x0,0x1a,0xf9,0xd1,0xc1,0xfe,0x38,0x3f,0x90,0xe7, + 0xe6,0xe4,0xe1,0xe6,0x66,0xe7,0x6c,0xef,0xf4,0xc5,0xa2,0xfe,0x6b,0xf0,0x6f,0x22, + 0x3e,0x21,0xf1,0xdf,0xfe,0xbc,0x8c,0x2,0x4,0x0,0x10,0x4e,0xcf,0xef,0xda,0x5f, + 0xe5,0xe5,0xd6,0x3,0x70,0xc7,0x1,0xb0,0x75,0xbf,0x6b,0xa9,0x5b,0x0,0xda,0x56, + 0x0,0x68,0xdf,0xf9,0x5d,0x33,0xdb,0x9,0xa0,0x5a,0xa,0xd0,0x7a,0xf9,0x8b,0x79, + 0x38,0xfc,0x40,0x1e,0x9e,0xa1,0x50,0xc8,0x3c,0x1d,0x1c,0xa,0xb,0xb,0xed,0x25, + 0x62,0xa1,0xbd,0x30,0xe3,0x8b,0x3e,0xff,0x33,0xe1,0x6f,0xe0,0x8b,0x7e,0xf6,0xfc, + 0x40,0x1e,0xfe,0xdb,0x7a,0xf0,0x0,0x71,0x9a,0x40,0x99,0xad,0xc0,0xa3,0x83,0xfd, + 0x71,0x61,0x6e,0x76,0xae,0x52,0x8e,0xe7,0xcb,0x4,0x42,0x31,0x6e,0xf7,0xe7,0x23, + 0xfe,0xc7,0x85,0x7f,0xfd,0x8e,0x29,0xd1,0xe2,0x34,0xb1,0x5c,0x2c,0x15,0x8a,0xf1, + 0x58,0x89,0xb8,0x50,0x22,0x4d,0xc7,0x79,0xb9,0x52,0x91,0x44,0x21,0xc9,0x95,0xe2, + 0x12,0xe9,0x7f,0x32,0xf1,0x1f,0x96,0xfd,0x9,0x93,0x77,0xd,0x0,0xac,0x86,0x4f, + 0xc0,0x4e,0xb6,0x7,0xb5,0xcb,0x6c,0xc0,0x7e,0xee,0x1,0x2,0x8b,0xe,0x58,0xd2, + 0x76,0x0,0x40,0x7e,0xf3,0x2d,0x8c,0x1a,0xb,0x91,0x0,0x10,0x67,0x34,0x32,0x79, + 0xf7,0x0,0x0,0x93,0xbf,0xf9,0x8f,0x40,0x2b,0x1,0x0,0xcd,0x97,0xa4,0xe3,0x0, + 0x0,0xbc,0xe8,0x18,0x5c,0xa8,0x94,0x17,0x4c,0xc6,0x8,0x0,0x0,0x44,0xa0,0x81, + 0x2a,0xb0,0x41,0x7,0xc,0xc1,0x14,0xac,0xc0,0xe,0x9c,0xc1,0x1d,0xbc,0xc0,0x17, + 0x2,0x61,0x6,0x44,0x40,0xc,0x24,0xc0,0x3c,0x10,0x42,0x6,0xe4,0x80,0x1c,0xa, + 0xa1,0x18,0x96,0x41,0x19,0x54,0xc0,0x3a,0xd8,0x4,0xb5,0xb0,0x3,0x1a,0xa0,0x11, + 0x9a,0xe1,0x10,0xb4,0xc1,0x31,0x38,0xd,0xe7,0xe0,0x12,0x5c,0x81,0xeb,0x70,0x17, + 0x6,0x60,0x18,0x9e,0xc2,0x18,0xbc,0x86,0x9,0x4,0x41,0xc8,0x8,0x13,0x61,0x21, + 0x3a,0x88,0x11,0x62,0x8e,0xd8,0x22,0xce,0x8,0x17,0x99,0x8e,0x4,0x22,0x61,0x48, + 0x34,0x92,0x80,0xa4,0x20,0xe9,0x88,0x14,0x51,0x22,0xc5,0xc8,0x72,0xa4,0x2,0xa9, + 0x42,0x6a,0x91,0x5d,0x48,0x23,0xf2,0x2d,0x72,0x14,0x39,0x8d,0x5c,0x40,0xfa,0x90, + 0xdb,0xc8,0x20,0x32,0x8a,0xfc,0x8a,0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3,0xd4, + 0x2,0x75,0x40,0xb9,0xa8,0x1f,0x1a,0x8a,0xc6,0xa0,0x73,0xd1,0x74,0x34,0xf,0x5d, + 0x80,0x96,0xa2,0x6b,0xd1,0x1a,0xb4,0x1e,0x3d,0x80,0xb6,0xa2,0xa7,0xd1,0x4b,0xe8, + 0x75,0x74,0x0,0x7d,0x8a,0x8e,0x63,0x80,0xd1,0x31,0xe,0x66,0x8c,0xd9,0x61,0x5c, + 0x8c,0x87,0x45,0x60,0x89,0x58,0x1a,0x26,0xc7,0x16,0x63,0xe5,0x58,0x35,0x56,0x8f, + 0x35,0x63,0x1d,0x58,0x37,0x76,0x15,0x1b,0xc0,0x9e,0x61,0xef,0x8,0x24,0x2,0x8b, + 0x80,0x13,0xec,0x8,0x5e,0x84,0x10,0xc2,0x6c,0x82,0x90,0x90,0x47,0x58,0x4c,0x58, + 0x43,0xa8,0x25,0xec,0x23,0xb4,0x12,0xba,0x8,0x57,0x9,0x83,0x84,0x31,0xc2,0x27, + 0x22,0x93,0xa8,0x4f,0xb4,0x25,0x7a,0x12,0xf9,0xc4,0x78,0x62,0x3a,0xb1,0x90,0x58, + 0x46,0xac,0x26,0xee,0x21,0x1e,0x21,0x9e,0x25,0x5e,0x27,0xe,0x13,0x5f,0x93,0x48, + 0x24,0xe,0xc9,0x92,0xe4,0x4e,0xa,0x21,0x25,0x90,0x32,0x49,0xb,0x49,0x6b,0x48, + 0xdb,0x48,0x2d,0xa4,0x53,0xa4,0x3e,0xd2,0x10,0x69,0x9c,0x4c,0x26,0xeb,0x90,0x6d, + 0xc9,0xde,0xe4,0x8,0xb2,0x80,0xac,0x20,0x97,0x91,0xb7,0x90,0xf,0x90,0x4f,0x92, + 0xfb,0xc9,0xc3,0xe4,0xb7,0x14,0x3a,0xc5,0x88,0xe2,0x4c,0x9,0xa2,0x24,0x52,0xa4, + 0x94,0x12,0x4a,0x35,0x65,0x3f,0xe5,0x4,0xa5,0x9f,0x32,0x42,0x99,0xa0,0xaa,0x51, + 0xcd,0xa9,0x9e,0xd4,0x8,0xaa,0x88,0x3a,0x9f,0x5a,0x49,0x6d,0xa0,0x76,0x50,0x2f, + 0x53,0x87,0xa9,0x13,0x34,0x75,0x9a,0x25,0xcd,0x9b,0x16,0x43,0xcb,0xa4,0x2d,0xa3, + 0xd5,0xd0,0x9a,0x69,0x67,0x69,0xf7,0x68,0x2f,0xe9,0x74,0xba,0x9,0xdd,0x83,0x1e, + 0x45,0x97,0xd0,0x97,0xd2,0x6b,0xe8,0x7,0xe9,0xe7,0xe9,0x83,0xf4,0x77,0xc,0xd, + 0x86,0xd,0x83,0xc7,0x48,0x62,0x28,0x19,0x6b,0x19,0x7b,0x19,0xa7,0x18,0xb7,0x19, + 0x2f,0x99,0x4c,0xa6,0x5,0xd3,0x97,0x99,0xc8,0x54,0x30,0xd7,0x32,0x1b,0x99,0x67, + 0x98,0xf,0x98,0x6f,0x55,0x58,0x2a,0xf6,0x2a,0x7c,0x15,0x91,0xca,0x12,0x95,0x3a, + 0x95,0x56,0x95,0x7e,0x95,0xe7,0xaa,0x54,0x55,0x73,0x55,0x3f,0xd5,0x79,0xaa,0xb, + 0x54,0xab,0x55,0xf,0xab,0x5e,0x56,0x7d,0xa6,0x46,0x55,0xb3,0x50,0xe3,0xa9,0x9, + 0xd4,0x16,0xab,0xd5,0xa9,0x1d,0x55,0xbb,0xa9,0x36,0xae,0xce,0x52,0x77,0x52,0x8f, + 0x50,0xcf,0x51,0x5f,0xa3,0xbe,0x5f,0xfd,0x82,0xfa,0x63,0xd,0xb2,0x86,0x85,0x46, + 0xa0,0x86,0x48,0xa3,0x54,0x63,0xb7,0xc6,0x19,0x8d,0x21,0x16,0xc6,0x32,0x65,0xf1, + 0x58,0x42,0xd6,0x72,0x56,0x3,0xeb,0x2c,0x6b,0x98,0x4d,0x62,0x5b,0xb2,0xf9,0xec, + 0x4c,0x76,0x5,0xfb,0x1b,0x76,0x2f,0x7b,0x4c,0x53,0x43,0x73,0xaa,0x66,0xac,0x66, + 0x91,0x66,0x9d,0xe6,0x71,0xcd,0x1,0xe,0xc6,0xb1,0xe0,0xf0,0x39,0xd9,0x9c,0x4a, + 0xce,0x21,0xce,0xd,0xce,0x7b,0x2d,0x3,0x2d,0x3f,0x2d,0xb1,0xd6,0x6a,0xad,0x66, + 0xad,0x7e,0xad,0x37,0xda,0x7a,0xda,0xbe,0xda,0x62,0xed,0x72,0xed,0x16,0xed,0xeb, + 0xda,0xef,0x75,0x70,0x9d,0x40,0x9d,0x2c,0x9d,0xf5,0x3a,0x6d,0x3a,0xf7,0x75,0x9, + 0xba,0x36,0xba,0x51,0xba,0x85,0xba,0xdb,0x75,0xcf,0xea,0x3e,0xd3,0x63,0xeb,0x79, + 0xe9,0x9,0xf5,0xca,0xf5,0xe,0xe9,0xdd,0xd1,0x47,0xf5,0x6d,0xf4,0xa3,0xf5,0x17, + 0xea,0xef,0xd6,0xef,0xd1,0x1f,0x37,0x30,0x34,0x8,0x36,0x90,0x19,0x6c,0x31,0x38, + 0x63,0xf0,0xcc,0x90,0x63,0xe8,0x6b,0x98,0x69,0xb8,0xd1,0xf0,0x84,0xe1,0xa8,0x11, + 0xcb,0x68,0xba,0x91,0xc4,0x68,0xa3,0xd1,0x49,0xa3,0x27,0xb8,0x26,0xee,0x87,0x67, + 0xe3,0x35,0x78,0x17,0x3e,0x66,0xac,0x6f,0x1c,0x62,0xac,0x34,0xde,0x65,0xdc,0x6b, + 0x3c,0x61,0x62,0x69,0x32,0xdb,0xa4,0xc4,0xa4,0xc5,0xe4,0xbe,0x29,0xcd,0x94,0x6b, + 0x9a,0x66,0xba,0xd1,0xb4,0xd3,0x74,0xcc,0xcc,0xc8,0x2c,0xdc,0xac,0xd8,0xac,0xc9, + 0xec,0x8e,0x39,0xd5,0x9c,0x6b,0x9e,0x61,0xbe,0xd9,0xbc,0xdb,0xfc,0x8d,0x85,0xa5, + 0x45,0x9c,0xc5,0x4a,0x8b,0x36,0x8b,0xc7,0x96,0xda,0x96,0x7c,0xcb,0x5,0x96,0x4d, + 0x96,0xf7,0xac,0x98,0x56,0x3e,0x56,0x79,0x56,0xf5,0x56,0xd7,0xac,0x49,0xd6,0x5c, + 0xeb,0x2c,0xeb,0x6d,0xd6,0x57,0x6c,0x50,0x1b,0x57,0x9b,0xc,0x9b,0x3a,0x9b,0xcb, + 0xb6,0xa8,0xad,0x9b,0xad,0xc4,0x76,0x9b,0x6d,0xdf,0x14,0xe2,0x14,0x8f,0x29,0xd2, + 0x29,0xf5,0x53,0x6e,0xda,0x31,0xec,0xfc,0xec,0xa,0xec,0x9a,0xec,0x6,0xed,0x39, + 0xf6,0x61,0xf6,0x25,0xf6,0x6d,0xf6,0xcf,0x1d,0xcc,0x1c,0x12,0x1d,0xd6,0x3b,0x74, + 0x3b,0x7c,0x72,0x74,0x75,0xcc,0x76,0x6c,0x70,0xbc,0xeb,0xa4,0xe1,0x34,0xc3,0xa9, + 0xc4,0xa9,0xc3,0xe9,0x57,0x67,0x1b,0x67,0xa1,0x73,0x9d,0xf3,0x35,0x17,0xa6,0x4b, + 0x90,0xcb,0x12,0x97,0x76,0x97,0x17,0x53,0x6d,0xa7,0x8a,0xa7,0x6e,0x9f,0x7a,0xcb, + 0x95,0xe5,0x1a,0xee,0xba,0xd2,0xb5,0xd3,0xf5,0xa3,0x9b,0xbb,0x9b,0xdc,0xad,0xd9, + 0x6d,0xd4,0xdd,0xcc,0x3d,0xc5,0x7d,0xab,0xfb,0x4d,0x2e,0x9b,0x1b,0xc9,0x5d,0xc3, + 0x3d,0xef,0x41,0xf4,0xf0,0xf7,0x58,0xe2,0x71,0xcc,0xe3,0x9d,0xa7,0x9b,0xa7,0xc2, + 0xf3,0x90,0xe7,0x2f,0x5e,0x76,0x5e,0x59,0x5e,0xfb,0xbd,0x1e,0x4f,0xb3,0x9c,0x26, + 0x9e,0xd6,0x30,0x6d,0xc8,0xdb,0xc4,0x5b,0xe0,0xbd,0xcb,0x7b,0x60,0x3a,0x3e,0x3d, + 0x65,0xfa,0xce,0xe9,0x3,0x3e,0xc6,0x3e,0x2,0x9f,0x7a,0x9f,0x87,0xbe,0xa6,0xbe, + 0x22,0xdf,0x3d,0xbe,0x23,0x7e,0xd6,0x7e,0x99,0x7e,0x7,0xfc,0x9e,0xfb,0x3b,0xfa, + 0xcb,0xfd,0x8f,0xf8,0xbf,0xe1,0x79,0xf2,0x16,0xf1,0x4e,0x5,0x60,0x1,0xc1,0x1, + 0xe5,0x1,0xbd,0x81,0x1a,0x81,0xb3,0x3,0x6b,0x3,0x1f,0x4,0x99,0x4,0xa5,0x7, + 0x35,0x5,0x8d,0x5,0xbb,0x6,0x2f,0xc,0x3e,0x15,0x42,0xc,0x9,0xd,0x59,0x1f, + 0x72,0x93,0x6f,0xc0,0x17,0xf2,0x1b,0xf9,0x63,0x33,0xdc,0x67,0x2c,0x9a,0xd1,0x15, + 0xca,0x8,0x9d,0x15,0x5a,0x1b,0xfa,0x30,0xcc,0x26,0x4c,0x1e,0xd6,0x11,0x8e,0x86, + 0xcf,0x8,0xdf,0x10,0x7e,0x6f,0xa6,0xf9,0x4c,0xe9,0xcc,0xb6,0x8,0x88,0xe0,0x47, + 0x6c,0x88,0xb8,0x1f,0x69,0x19,0x99,0x17,0xf9,0x7d,0x14,0x29,0x2a,0x32,0xaa,0x2e, + 0xea,0x51,0xb4,0x53,0x74,0x71,0x74,0xf7,0x2c,0xd6,0xac,0xe4,0x59,0xfb,0x67,0xbd, + 0x8e,0xf1,0x8f,0xa9,0x8c,0xb9,0x3b,0xdb,0x6a,0xb6,0x72,0x76,0x67,0xac,0x6a,0x6c, + 0x52,0x6c,0x63,0xec,0x9b,0xb8,0x80,0xb8,0xaa,0xb8,0x81,0x78,0x87,0xf8,0x45,0xf1, + 0x97,0x12,0x74,0x13,0x24,0x9,0xed,0x89,0xe4,0xc4,0xd8,0xc4,0x3d,0x89,0xe3,0x73, + 0x2,0xe7,0x6c,0x9a,0x33,0x9c,0xe4,0x9a,0x54,0x96,0x74,0x63,0xae,0xe5,0xdc,0xa2, + 0xb9,0x17,0xe6,0xe9,0xce,0xcb,0x9e,0x77,0x3c,0x59,0x35,0x59,0x90,0x7c,0x38,0x85, + 0x98,0x12,0x97,0xb2,0x3f,0xe5,0x83,0x20,0x42,0x50,0x2f,0x18,0x4f,0xe5,0xa7,0x6e, + 0x4d,0x1d,0x13,0xf2,0x84,0x9b,0x85,0x4f,0x45,0xbe,0xa2,0x8d,0xa2,0x51,0xb1,0xb7, + 0xb8,0x4a,0x3c,0x92,0xe6,0x9d,0x56,0x95,0xf6,0x38,0xdd,0x3b,0x7d,0x43,0xfa,0x68, + 0x86,0x4f,0x46,0x75,0xc6,0x33,0x9,0x4f,0x52,0x2b,0x79,0x91,0x19,0x92,0xb9,0x23, + 0xf3,0x4d,0x56,0x44,0xd6,0xde,0xac,0xcf,0xd9,0x71,0xd9,0x2d,0x39,0x94,0x9c,0x94, + 0x9c,0xa3,0x52,0xd,0x69,0x96,0xb4,0x2b,0xd7,0x30,0xb7,0x28,0xb7,0x4f,0x66,0x2b, + 0x2b,0x93,0xd,0xe4,0x79,0xe6,0x6d,0xca,0x1b,0x93,0x87,0xca,0xf7,0xe4,0x23,0xf9, + 0x73,0xf3,0xdb,0x15,0x6c,0x85,0x4c,0xd1,0xa3,0xb4,0x52,0xae,0x50,0xe,0x16,0x4c, + 0x2f,0xa8,0x2b,0x78,0x5b,0x18,0x5b,0x78,0xb8,0x48,0xbd,0x48,0x5a,0xd4,0x33,0xdf, + 0x66,0xfe,0xea,0xf9,0x23,0xb,0x82,0x16,0x7c,0xbd,0x90,0xb0,0x50,0xb8,0xb0,0xb3, + 0xd8,0xb8,0x78,0x59,0xf1,0xe0,0x22,0xbf,0x45,0xbb,0x16,0x23,0x8b,0x53,0x17,0x77, + 0x2e,0x31,0x5d,0x52,0xba,0x64,0x78,0x69,0xf0,0xd2,0x7d,0xcb,0x68,0xcb,0xb2,0x96, + 0xfd,0x50,0xe2,0x58,0x52,0x55,0xf2,0x6a,0x79,0xdc,0xf2,0x8e,0x52,0x83,0xd2,0xa5, + 0xa5,0x43,0x2b,0x82,0x57,0x34,0x95,0xa9,0x94,0xc9,0xcb,0x6e,0xae,0xf4,0x5a,0xb9, + 0x63,0x15,0x61,0x95,0x64,0x55,0xef,0x6a,0x97,0xd5,0x5b,0x56,0x7f,0x2a,0x17,0x95, + 0x5f,0xac,0x70,0xac,0xa8,0xae,0xf8,0xb0,0x46,0xb8,0xe6,0xe2,0x57,0x4e,0x5f,0xd5, + 0x7c,0xf5,0x79,0x6d,0xda,0xda,0xde,0x4a,0xb7,0xca,0xed,0xeb,0x48,0xeb,0xa4,0xeb, + 0x6e,0xac,0xf7,0x59,0xbf,0xaf,0x4a,0xbd,0x6a,0x41,0xd5,0xd0,0x86,0xf0,0xd,0xad, + 0x1b,0xf1,0x8d,0xe5,0x1b,0x5f,0x6d,0x4a,0xde,0x74,0xa1,0x7a,0x6a,0xf5,0x8e,0xcd, + 0xb4,0xcd,0xca,0xcd,0x3,0x35,0x61,0x35,0xed,0x5b,0xcc,0xb6,0xac,0xdb,0xf2,0xa1, + 0x36,0xa3,0xf6,0x7a,0x9d,0x7f,0x5d,0xcb,0x56,0xfd,0xad,0xab,0xb7,0xbe,0xd9,0x26, + 0xda,0xd6,0xbf,0xdd,0x77,0x7b,0xf3,0xe,0x83,0x1d,0x15,0x3b,0xde,0xef,0x94,0xec, + 0xbc,0xb5,0x2b,0x78,0x57,0x6b,0xbd,0x45,0x7d,0xf5,0x6e,0xd2,0xee,0x82,0xdd,0x8f, + 0x1a,0x62,0x1b,0xba,0xbf,0xe6,0x7e,0xdd,0xb8,0x47,0x77,0x4f,0xc5,0x9e,0x8f,0x7b, + 0xa5,0x7b,0x7,0xf6,0x45,0xef,0xeb,0x6a,0x74,0x6f,0x6c,0xdc,0xaf,0xbf,0xbf,0xb2, + 0x9,0x6d,0x52,0x36,0x8d,0x1e,0x48,0x3a,0x70,0xe5,0x9b,0x80,0x6f,0xda,0x9b,0xed, + 0x9a,0x77,0xb5,0x70,0x5a,0x2a,0xe,0xc2,0x41,0xe5,0xc1,0x27,0xdf,0xa6,0x7c,0x7b, + 0xe3,0x50,0xe8,0xa1,0xce,0xc3,0xdc,0xc3,0xcd,0xdf,0x99,0x7f,0xb7,0xf5,0x8,0xeb, + 0x48,0x79,0x2b,0xd2,0x3a,0xbf,0x75,0xac,0x2d,0xa3,0x6d,0xa0,0x3d,0xa1,0xbd,0xef, + 0xe8,0x8c,0xa3,0x9d,0x1d,0x5e,0x1d,0x47,0xbe,0xb7,0xff,0x7e,0xef,0x31,0xe3,0x63, + 0x75,0xc7,0x35,0x8f,0x57,0x9e,0xa0,0x9d,0x28,0x3d,0xf1,0xf9,0xe4,0x82,0x93,0xe3, + 0xa7,0x64,0xa7,0x9e,0x9d,0x4e,0x3f,0x3d,0xd4,0x99,0xdc,0x79,0xf7,0x4c,0xfc,0x99, + 0x6b,0x5d,0x51,0x5d,0xbd,0x67,0x43,0xcf,0x9e,0x3f,0x17,0x74,0xee,0x4c,0xb7,0x5f, + 0xf7,0xc9,0xf3,0xde,0xe7,0x8f,0x5d,0xf0,0xbc,0x70,0xf4,0x22,0xf7,0x62,0xdb,0x25, + 0xb7,0x4b,0xad,0x3d,0xae,0x3d,0x47,0x7e,0x70,0xfd,0xe1,0x48,0xaf,0x5b,0x6f,0xeb, + 0x65,0xf7,0xcb,0xed,0x57,0x3c,0xae,0x74,0xf4,0x4d,0xeb,0x3b,0xd1,0xef,0xd3,0x7f, + 0xfa,0x6a,0xc0,0xd5,0x73,0xd7,0xf8,0xd7,0x2e,0x5d,0x9f,0x79,0xbd,0xef,0xc6,0xec, + 0x1b,0xb7,0x6e,0x26,0xdd,0x1c,0xb8,0x25,0xba,0xf5,0xf8,0x76,0xf6,0xed,0x17,0x77, + 0xa,0xee,0x4c,0xdc,0x5d,0x7a,0x8f,0x78,0xaf,0xfc,0xbe,0xda,0xfd,0xea,0x7,0xfa, + 0xf,0xea,0x7f,0xb4,0xfe,0xb1,0x65,0xc0,0x6d,0xe0,0xf8,0x60,0xc0,0x60,0xcf,0xc3, + 0x59,0xf,0xef,0xe,0x9,0x87,0x9e,0xfe,0x94,0xff,0xd3,0x87,0xe1,0xd2,0x47,0xcc, + 0x47,0xd5,0x23,0x46,0x23,0x8d,0x8f,0x9d,0x1f,0x1f,0x1b,0xd,0x1a,0xbd,0xf2,0x64, + 0xce,0x93,0xe1,0xa7,0xb2,0xa7,0x13,0xcf,0xca,0x7e,0x56,0xff,0x79,0xeb,0x73,0xab, + 0xe7,0xdf,0xfd,0xe2,0xfb,0x4b,0xcf,0x58,0xfc,0xd8,0xf0,0xb,0xf9,0x8b,0xcf,0xbf, + 0xae,0x79,0xa9,0xf3,0x72,0xef,0xab,0xa9,0xaf,0x3a,0xc7,0x23,0xc7,0x1f,0xbc,0xce, + 0x79,0x3d,0xf1,0xa6,0xfc,0xad,0xce,0xdb,0x7d,0xef,0xb8,0xef,0xba,0xdf,0xc7,0xbd, + 0x1f,0x99,0x28,0xfc,0x40,0xfe,0x50,0xf3,0xd1,0xfa,0x63,0xc7,0xa7,0xd0,0x4f,0xf7, + 0x3e,0xe7,0x7c,0xfe,0xfc,0x2f,0xf7,0x84,0xf3,0xfb,0x25,0xd2,0x9f,0x33,0x0,0x0, + 0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x25,0x0,0x0,0x80,0x83,0x0,0x0, + 0xf9,0xff,0x0,0x0,0x80,0xe9,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0, + 0x3a,0x98,0x0,0x0,0x17,0x6f,0x92,0x5f,0xc5,0x46,0x0,0x0,0x1a,0x55,0x49,0x44, + 0x41,0x54,0x78,0xda,0xec,0x9b,0x79,0x90,0x64,0x47,0x7d,0xe7,0x3f,0x99,0xf9,0xae, + 0xba,0xbb,0xab,0xbb,0xe7,0x3e,0xa5,0x41,0x42,0x48,0x48,0x33,0x18,0x90,0x80,0xd0, + 0x5a,0xc2,0x6,0xb,0x90,0x90,0x84,0xf1,0x5a,0xc6,0x38,0x90,0x42,0x5e,0x1,0xe6, + 0x90,0x64,0x1b,0x7b,0x57,0xcb,0xae,0x86,0x60,0xd7,0x1b,0x81,0x37,0x16,0x14,0xb1, + 0x1b,0x1,0xc6,0x1b,0x8,0x84,0x6c,0x81,0xc0,0xc8,0x12,0xe7,0x82,0xad,0x11,0x4, + 0x12,0xe7,0x6a,0x24,0x31,0xc2,0xe8,0x98,0x19,0x8d,0xe6,0xe8,0xa3,0xba,0xbb,0xaa, + 0xeb,0x7c,0x47,0x66,0xee,0x1f,0xef,0x55,0x4d,0x4d,0x4f,0xf7,0x68,0x66,0xd4,0x23, + 0x76,0x23,0x36,0x23,0x5e,0x55,0xbd,0x57,0x95,0xef,0x65,0x7e,0xf3,0x97,0xdf,0xdf, + 0xf7,0xf7,0xcb,0x2c,0x61,0xad,0xe5,0x4c,0x97,0x5f,0x3d,0xf9,0xe4,0x96,0x27,0xf7, + 0xec,0xb9,0x54,0x5b,0xdc,0x6d,0xe7,0x9c,0xf3,0xa3,0xb3,0xce,0xda,0xfa,0xab,0x72, + 0xb9,0xac,0xf9,0x35,0x95,0xb7,0x5c,0x71,0x85,0x68,0xd4,0xe7,0x2f,0xc,0xf2,0xf9, + 0x77,0x8f,0x8c,0x8c,0x5c,0x24,0x84,0x70,0xea,0xf5,0xfa,0x13,0xdd,0x4e,0xe7,0x4b, + 0x85,0x62,0xf1,0xc7,0xdf,0xfd,0xee,0xf7,0x6,0x6d,0x13,0x67,0x1a,0xa0,0x9f,0x3e, + 0xf2,0xc8,0xdb,0xe,0x1d,0x3c,0x74,0x9b,0x85,0x6d,0xb1,0x81,0x56,0xa7,0xd3,0xa8, + 0x8c,0x54,0xbe,0x74,0xc5,0x9b,0x7f,0xfb,0x3f,0x16,0xa,0x5,0xfb,0x52,0x83,0x73, + 0xf1,0xc5,0xaf,0x2d,0xf9,0xbe,0xff,0xd5,0xdf,0xbf,0xee,0xba,0x37,0xbd,0xee,0x92, + 0xd7,0x51,0x2e,0x97,0x11,0x42,0xd0,0x6c,0x36,0x79,0xec,0xb1,0xc7,0xb8,0xeb,0xae, + 0x2f,0xec,0x9e,0x9d,0x9d,0xbd,0xe2,0xd1,0x47,0x77,0x4f,0x9d,0x71,0x80,0x1e,0xfe, + 0xc1,0xf7,0xff,0xe0,0xd0,0xf3,0x7,0x3f,0x8e,0x50,0x67,0x3b,0x9e,0x87,0xb6,0xd0, + 0xed,0xf5,0xb0,0xd6,0xd4,0xcf,0x79,0xd9,0xb6,0x9b,0xd7,0xaf,0x5b,0xf7,0xc0,0xc6, + 0x4d,0x1b,0xe7,0x5f,0x2a,0x70,0xde,0xfa,0xd6,0xb7,0x16,0x95,0x92,0x8f,0xfc,0xc5, + 0x5f,0xfc,0xe5,0x5,0xdb,0xb6,0x6d,0xa3,0xd3,0xe9,0x60,0x8c,0x49,0x2d,0x45,0xa, + 0x2a,0xf9,0xa,0xb3,0x47,0x66,0xf9,0x4f,0xff,0xf5,0xe3,0xcf,0xef,0x7d,0x6e,0xdf, + 0xab,0x1e,0xfe,0xe1,0xc3,0xb5,0x33,0x6,0xd0,0x43,0xf,0xee,0x7a,0xdf,0xc1,0xe7, + 0xf,0xfe,0x67,0xcf,0xf5,0xaa,0xca,0xf5,0xb0,0x80,0x15,0x16,0x2c,0x18,0x6b,0x11, + 0x30,0x57,0x2c,0x15,0x76,0x55,0x2a,0x95,0x1f,0x79,0xae,0xf7,0xa3,0x7c,0x3e,0xb7, + 0x67,0xe3,0xc6,0xd,0xf3,0xa5,0x52,0xe9,0x8c,0x34,0xe8,0x4d,0x6f,0x7a,0x93,0x10, + 0x82,0x4f,0xdc,0x76,0xdb,0xbf,0xff,0xf3,0x73,0xcf,0x3d,0x97,0x66,0xb3,0x39,0xf8, + 0xce,0x62,0xc9,0x8b,0x3c,0x87,0xcd,0x61,0xee,0x52,0x77,0x71,0xc5,0xfc,0x15,0xfc, + 0xcf,0x9d,0x7f,0xfb,0x8f,0x93,0xf3,0x53,0xbf,0x7b,0x46,0x0,0xfa,0xa7,0x7f,0xfa, + 0xe7,0x5b,0xe,0x3c,0xf7,0xfc,0x27,0xf3,0xb9,0x3c,0xae,0xe7,0x62,0x1,0x63,0x4d, + 0x7f,0x56,0x23,0x11,0x24,0x3a,0x21,0x4e,0x62,0xb0,0x90,0xcb,0xe5,0xea,0x95,0x4a, + 0xf9,0x9b,0xa5,0x72,0xe9,0x7,0x95,0x4a,0xf9,0x7f,0xc7,0x71,0xb2,0x77,0xc3,0xfa, + 0x75,0x73,0xa3,0xa3,0xa3,0x66,0xa5,0xda,0x74,0xe9,0xa5,0x97,0xae,0x7f,0xe3,0x1b, + 0x2f,0x3f,0xf8,0xfe,0xf7,0x7f,0x80,0x66,0x73,0x81,0x7e,0xbf,0x2d,0x96,0x9c,0xc8, + 0x51,0xb7,0x75,0x6e,0x58,0xb8,0x81,0x49,0x3b,0xc9,0xf7,0x36,0x7e,0x8f,0x7,0xef, + 0xf9,0x67,0xbe,0x78,0xef,0xdd,0xdb,0x9d,0x95,0x6,0xe7,0xdb,0xdf,0xf9,0x5f,0x7f, + 0x7e,0xe8,0xe0,0xa1,0xbf,0xce,0xe5,0xf2,0xb8,0xbe,0x87,0x36,0x6,0x38,0x76,0x10, + 0xac,0x35,0x48,0xa5,0x8,0x1c,0x85,0xd1,0x86,0x30,0xc,0x47,0x8e,0x4c,0x4e,0xbe, + 0xeb,0xc8,0xe4,0xd4,0xbb,0x3c,0xcf,0x63,0x74,0xa4,0x72,0x5f,0x12,0x27,0xf7,0x3f, + 0xf5,0xf4,0x33,0x3f,0x8e,0xe3,0xe4,0xd0,0xa6,0x8d,0x1b,0x5b,0x9b,0x36,0x6d,0x78, + 0x51,0xa4,0x6e,0xad,0xb9,0xf2,0xe2,0x4b,0x2e,0xc1,0x58,0x83,0x63,0x1d,0x12,0x12, + 0x2c,0x16,0x7,0x7,0xf,0x8f,0xbf,0xea,0xfc,0x15,0xbf,0xd0,0xbf,0xe0,0x1b,0xe5, + 0x6f,0xb0,0x3a,0x59,0xcd,0xf6,0x8b,0x77,0xf0,0xe5,0xfb,0xee,0x7d,0xf7,0x8a,0x2, + 0x74,0xff,0x3,0x5f,0xff,0xf8,0xcc,0x4c,0xed,0xa3,0xb9,0x7c,0x9e,0xc0,0xf,0xd0, + 0x5a,0xf7,0x8d,0x6,0xac,0x40,0xf4,0xc7,0x4c,0xc,0x6c,0x1b,0x21,0x4,0xae,0xe7, + 0xe2,0x9,0xf,0x6b,0x2d,0x49,0xa2,0x99,0x9a,0x9e,0xb9,0xe6,0xc8,0xe4,0xe4,0x35, + 0xf9,0x7c,0x81,0x6a,0xb5,0xfa,0x40,0xad,0x56,0xfb,0x6a,0xa2,0xe3,0x9f,0x4c,0x4d, + 0x4e,0x1f,0x2c,0x97,0x4b,0x9d,0xf3,0xcf,0x7f,0xc5,0x29,0x83,0x15,0x4,0xc1,0x2b, + 0x57,0x4f,0xac,0x26,0x8c,0x7a,0x3c,0xa5,0x9f,0x62,0xab,0xda,0x8a,0x42,0x91,0x13, + 0x39,0xee,0x8b,0xee,0xe3,0x2b,0xe1,0x57,0xb8,0xa3,0x78,0x7,0x17,0x3a,0x17,0x32, + 0x1f,0xce,0xb3,0x6a,0x62,0x15,0x13,0x13,0xe3,0xe7,0xae,0x18,0x40,0x5f,0xf9,0xea, + 0x3f,0xdc,0xd9,0x58,0x58,0x78,0x4f,0x3e,0x97,0xc7,0xf3,0xbc,0xa3,0xe0,0xd0,0x37, + 0x20,0x9b,0xbe,0xd,0xc0,0x39,0xf6,0xdc,0x66,0x27,0x8e,0x52,0x38,0xae,0x83,0xb0, + 0xa0,0xb5,0x61,0x72,0x72,0xf2,0xaa,0xc3,0x47,0xe,0x5f,0xe5,0x28,0x87,0xea,0xe8, + 0xe8,0x8f,0x7d,0xdf,0xfb,0xec,0xa1,0x43,0x87,0xbf,0xab,0xb5,0x9e,0x9c,0x9d,0x9d, + 0x4d,0x76,0xec,0xd8,0x7e,0x52,0xd3,0x50,0x39,0xca,0xcb,0xb9,0x39,0x16,0x4c,0x93, + 0xeb,0x9a,0xd7,0x71,0x95,0x77,0x15,0x9f,0x28,0x7c,0x82,0x39,0x3b,0xc7,0x47,0x3b, + 0x1f,0xe5,0x6a,0xef,0x6a,0xde,0xe9,0xbd,0x93,0xa6,0x6d,0x62,0xad,0xc5,0x71,0x1c, + 0x5c,0xd7,0x75,0x57,0x4,0xa0,0xbf,0xbf,0xe7,0xcb,0x7f,0xd7,0xe9,0x74,0xfe,0xa0, + 0x58,0x28,0x22,0xa5,0x4c,0xc1,0x11,0x3,0x25,0x91,0x7e,0xec,0xbf,0x58,0x8e,0x4e, + 0x39,0x31,0xf4,0x7d,0x1f,0x42,0x71,0xf4,0x6b,0xa5,0x24,0xca,0xf1,0x0,0x81,0xb5, + 0x96,0xf9,0xf9,0xf9,0x8b,0x67,0x67,0x67,0x2f,0x7e,0xea,0xe9,0x67,0xa8,0x54,0x2a, + 0xf,0xaf,0x5d,0xb3,0xfa,0xd3,0x7,0xf,0x1e,0x7a,0x68,0xac,0x5a,0x3d,0xfc,0xfc, + 0xa1,0x43,0xfa,0x9c,0x97,0x6d,0x5b,0x96,0x50,0x7b,0xdd,0xee,0xe1,0xb9,0xe6,0x2c, + 0x2f,0x1f,0x3b,0x8f,0x5b,0x72,0xb7,0xb0,0xb3,0xbd,0x93,0xad,0x6a,0x2b,0xe,0xe, + 0xc2,0x8,0x6e,0xca,0xdd,0x84,0xc1,0x90,0xd8,0x4,0xdf,0xf1,0x69,0x36,0x9b,0x34, + 0x1a,0x8d,0x99,0x17,0xd,0xd0,0x17,0xef,0xfe,0xbb,0xfb,0xbb,0xdd,0xde,0x55,0xe5, + 0x52,0xaa,0x27,0x6,0x9d,0xe4,0xd8,0xce,0x1f,0x3,0xcc,0x90,0xe5,0x1c,0x3,0xce, + 0x71,0x80,0x1e,0x2d,0x52,0x8,0xa4,0xe7,0xe,0xc0,0x6a,0x36,0x5b,0xaf,0x5f,0x68, + 0x2c,0x5c,0xf2,0xcc,0xb3,0x7b,0xc9,0xe5,0x72,0x3f,0xa9,0x56,0xab,0x77,0x1f,0x2e, + 0x1c,0xfe,0x7a,0x1c,0xc7,0x7,0x36,0x6f,0xde,0x7c,0x9c,0x55,0xc5,0x71,0xf2,0xcd, + 0x3d,0x7b,0xf6,0xdc,0x7e,0xee,0x39,0xe7,0xf2,0xfe,0xe0,0xfd,0xf8,0xc2,0xe7,0xb6, + 0xf6,0x6d,0x58,0x6b,0xb9,0x29,0x77,0x13,0x3b,0xd4,0xe,0xe6,0x6d,0xaa,0x38,0x72, + 0xb9,0x1c,0x3f,0xfb,0xd9,0xcf,0x98,0x9f,0x9f,0x7f,0x40,0xed,0xdc,0xb9,0xf3,0xc5, + 0x58,0xce,0x37,0x3a,0x9d,0xce,0x15,0xf9,0x7c,0x5e,0x6a,0xa3,0x53,0x4f,0x95,0x79, + 0x7,0x81,0x44,0x88,0xa3,0x5d,0x17,0x42,0x80,0x54,0x20,0x54,0xfa,0x59,0x88,0x63, + 0xe0,0x59,0xe,0x1c,0x71,0xdc,0x35,0x81,0x10,0x2,0x25,0x25,0x52,0x49,0x21,0x84, + 0x10,0x71,0x92,0xac,0x6b,0x36,0x16,0x2e,0x3d,0x7c,0x64,0xf2,0xdd,0xf5,0x7a,0xe3, + 0x6d,0xb5,0xda,0xac,0x13,0x86,0x51,0xf7,0x97,0x4f,0xfe,0xcb,0x55,0x4f,0x3c,0xb1, + 0xe7,0xf,0xdb,0x9d,0xb6,0xf0,0x5c,0xf7,0xc9,0x9f,0xff,0xfc,0x67,0x6f,0xbd,0xe4, + 0x75,0xaf,0x5b,0x85,0x3,0xbf,0x21,0x7e,0x3,0x81,0xe0,0x69,0xf3,0x34,0x3b,0xf3, + 0x3b,0x29,0xcb,0x32,0x9,0x9,0xae,0xeb,0x62,0xad,0xe5,0xce,0x3b,0x3f,0xd7,0x69, + 0xb7,0x3b,0xef,0x3f,0x6d,0x37,0xff,0x3f,0x3e,0xfd,0x37,0xf7,0x4b,0x21,0xde,0x36, + 0x36,0x36,0x26,0xad,0x31,0x58,0x6b,0xb1,0xd6,0xa6,0xc2,0xcb,0xda,0x14,0x22,0x25, + 0x91,0x52,0x66,0x9f,0x15,0x42,0xa8,0x6c,0x9a,0x19,0xec,0xc0,0xed,0xdb,0x63,0x8d, + 0x4a,0x1c,0x6b,0x62,0xc7,0x81,0xb3,0xc8,0x2,0xfb,0x16,0x5,0xe9,0xf3,0x85,0x90, + 0x38,0x4a,0xd5,0xa4,0x94,0x93,0x52,0x88,0x35,0xca,0x51,0xe5,0x76,0xa7,0x3d,0xe5, + 0xfb,0xc1,0x17,0xef,0xb9,0xe7,0xee,0xc7,0x37,0x6d,0xdc,0xf8,0xf7,0x1f,0xfc,0xd0, + 0x87,0x48,0x7a,0x9,0x71,0x1c,0xd3,0xb0,0xd,0x2a,0xa2,0x82,0x46,0xe3,0x38,0xe, + 0xc5,0x62,0x91,0xbb,0xee,0xfa,0x2,0x5f,0xfa,0xd2,0x97,0xde,0xfa,0x93,0x9f,0xfc, + 0xf4,0x5b,0xf2,0x74,0xc0,0xf9,0xef,0x7f,0xf3,0xb7,0x9f,0x9d,0x9c,0x9b,0xbb,0xca, + 0xf1,0x3c,0xe9,0xc8,0xf4,0x16,0x42,0x8,0xa4,0x94,0x4,0x7e,0x40,0x3e,0x9f,0xc7, + 0xf7,0x7d,0x0,0x74,0xa2,0xd1,0x5a,0xa3,0x93,0x4,0xa3,0x35,0x60,0x10,0x42,0x20, + 0xa4,0x0,0x91,0xd6,0x5b,0xd2,0x4a,0x96,0x3,0x47,0x1c,0x7f,0x4d,0xca,0xf4,0xd9, + 0x4a,0x39,0x8,0x4,0x49,0xa2,0xc7,0x93,0x24,0xbe,0x40,0xb9,0x6a,0x3c,0x4a,0x62, + 0xaf,0xd9,0x6c,0x6e,0x3c,0x74,0xe8,0xd0,0x47,0xae,0xbb,0xee,0xf,0x2f,0x7c,0xe4, + 0x91,0x47,0xfe,0xe8,0x8e,0x4f,0xdd,0xc1,0x5c,0x63,0x8e,0x7c,0x31,0xcf,0xfa,0xd2, + 0x7a,0x72,0x85,0x1c,0xc5,0x62,0x91,0x6e,0xb7,0xcb,0x67,0x3e,0xfd,0x69,0xee,0xbd, + 0xf7,0xde,0xf,0x8e,0x8c,0x8c,0x7c,0xfb,0xb4,0x42,0x8d,0xfb,0xbf,0xfe,0xcd,0x2b, + 0x7f,0xf0,0xf3,0x47,0x3f,0xe7,0xf8,0xc1,0xf8,0x59,0xeb,0xd6,0x30,0xe2,0x7b,0x18, + 0x21,0x6,0x2e,0x3b,0x49,0xd2,0x91,0x91,0x4a,0xe2,0x3a,0xde,0x60,0x26,0x59,0x6b, + 0xb1,0x8,0x10,0x12,0x29,0x14,0x42,0xa,0x4,0x16,0x99,0x7d,0x77,0xac,0x25,0x89, + 0x13,0x58,0x8d,0x58,0xd6,0xe2,0x2c,0x16,0x89,0xc0,0x71,0x1c,0x3c,0xcf,0x25,0x8c, + 0x42,0x16,0x16,0x9a,0x44,0x51,0x44,0xaf,0xd7,0x43,0x29,0x35,0xf5,0xda,0xd7,0xbc, + 0x7a,0xed,0x47,0x3e,0xf2,0x67,0x9b,0x75,0x92,0xfc,0x87,0xf3,0x2f,0xb8,0xe0,0xf2, + 0xcd,0x9b,0x37,0x23,0x84,0x34,0x7,0xf,0x1e,0x74,0xf6,0xfc,0xe2,0x89,0x9f,0xb6, + 0x5a,0xed,0xdb,0x1e,0x7e,0xe4,0x91,0xa7,0xfb,0x77,0x3d,0x65,0x92,0x7e,0x62,0xcf, + 0x93,0x7f,0xda,0x6e,0x77,0xc7,0xc7,0xca,0x23,0x68,0x20,0x8a,0x63,0x5c,0xdf,0xc7, + 0x66,0x5c,0x73,0xf0,0xd0,0x41,0xa6,0xa6,0xa6,0x29,0x97,0xcb,0x6c,0xd8,0xb0,0x9e, + 0x4a,0x65,0x4,0x0,0x63,0xd2,0xef,0x2d,0x22,0x7d,0xb7,0x16,0x61,0xd,0xc6,0x1a, + 0xa4,0x0,0x21,0x25,0x88,0xbe,0x2d,0x59,0x8e,0x71,0x67,0x2f,0x58,0x44,0x36,0xbd, + 0xc0,0x71,0x14,0x8e,0xab,0xe8,0xf5,0x7a,0x34,0x16,0x16,0x88,0xe3,0x18,0x81,0x40, + 0x4a,0x45,0x2f,0xc,0x47,0x9f,0xf8,0xc5,0x9e,0xef,0x7c,0xf7,0xbb,0xdf,0x7b,0x33, + 0x70,0xe3,0xc9,0xdc,0xf9,0x94,0x1,0xa,0xa3,0xe8,0x75,0x5,0xdf,0x23,0x10,0x16, + 0x1d,0xf6,0x88,0x5c,0x17,0xc7,0xf3,0x53,0xe2,0xcd,0xa6,0x9a,0x90,0x62,0xc0,0x9, + 0x7d,0xbd,0x93,0x36,0x32,0x5,0xc1,0x66,0x6a,0xda,0x58,0xb,0xd6,0xa0,0x2d,0x88, + 0x8c,0x3f,0xa4,0x18,0x9a,0x7a,0x42,0x1e,0x15,0x49,0x62,0x31,0x24,0x8b,0xc9,0x1c, + 0x3c,0xc7,0x45,0x39,0x8a,0x5e,0x2f,0xa4,0xb1,0xd0,0x40,0x27,0x1a,0x10,0xc4,0x5a, + 0xf7,0x75,0x99,0x37,0x3b,0x37,0xf7,0xa6,0x53,0xe9,0xef,0x29,0x4d,0xb1,0x2f,0xdc, + 0x7d,0xcf,0xdd,0x33,0xb3,0xb3,0xef,0xe8,0x85,0x61,0x20,0xad,0x21,0x17,0xf8,0x94, + 0x8a,0x25,0x82,0x20,0xc0,0x75,0xdc,0xc,0x18,0x30,0x19,0x69,0x3b,0x8e,0x83,0xcd, + 0x2c,0x47,0x4a,0x79,0xb4,0x2b,0xfd,0x19,0x64,0x53,0xbb,0x33,0xc6,0x64,0xe4,0x9e, + 0x3a,0xb7,0x14,0x64,0x35,0xa8,0x23,0x86,0xc8,0x47,0x1c,0xa3,0xa1,0x6,0x32,0x1d, + 0xd7,0x75,0x70,0x1d,0x97,0x6e,0xaf,0x47,0xbd,0xde,0x40,0xeb,0x4,0xa5,0x14,0x51, + 0x9c,0x4e,0x79,0x0,0x6b,0xc,0x49,0x92,0x98,0xd,0x1b,0xd7,0x7f,0xf6,0x9d,0xef, + 0xb8,0xf6,0x7d,0x2b,0x6e,0x41,0x73,0x73,0xb3,0xef,0xca,0xe7,0x72,0xa9,0x26,0xc1, + 0xe2,0xb9,0x2e,0xc6,0x18,0xe2,0x38,0x46,0x39,0xa,0x69,0x24,0x42,0xa4,0x1c,0x0, + 0x60,0xb4,0x19,0xea,0x4b,0xd6,0x31,0x6b,0xc0,0x8a,0x2c,0xdc,0x48,0xa7,0x94,0x52, + 0x2a,0xad,0x93,0x45,0xfa,0x46,0x27,0x18,0xa3,0x31,0x46,0x23,0x85,0x40,0x48,0x99, + 0x59,0xd7,0xf1,0x5e,0xe,0x32,0xd5,0xeb,0x38,0x74,0x3a,0x1d,0x1a,0xb,0xcd,0x1, + 0x38,0x61,0x14,0x65,0x56,0x34,0x88,0x76,0x50,0x4a,0xc9,0xc9,0xc9,0xa9,0xf7,0x0, + 0x2b,0xb,0xd0,0x37,0xbe,0xf9,0xad,0x1b,0x53,0x33,0x76,0x48,0x94,0x2,0x6b,0x90, + 0x32,0x5,0xc4,0x18,0x83,0x8e,0x35,0xc2,0x4d,0x47,0x3c,0x35,0xe7,0xbe,0xd7,0x11, + 0x48,0x29,0x68,0x2c,0x34,0xe9,0xb4,0x3b,0xe4,0x73,0x1,0xe5,0x4a,0xf9,0x58,0xd8, + 0x6c,0x5f,0x16,0xa5,0x75,0x1c,0xc7,0xcd,0x66,0x96,0x45,0x6b,0x8d,0x49,0x92,0x54, + 0x2c,0x4a,0x89,0x54,0x4e,0xfa,0xdc,0x7e,0x8,0xa1,0x14,0xbe,0xe7,0xd2,0x6e,0xb5, + 0x69,0x34,0x9b,0x68,0xad,0x91,0x52,0x12,0x45,0x11,0x49,0x92,0x70,0x94,0xd5,0xec, + 0x60,0xfa,0x77,0xba,0xdd,0xe0,0x64,0xfb,0x7d,0xd2,0x0,0x1d,0x78,0xee,0xc0,0x7, + 0x1c,0xa5,0x48,0x92,0x18,0x61,0x4c,0xea,0x85,0xc4,0x51,0x3f,0xa3,0xb5,0x46,0x39, + 0x12,0x21,0x9c,0xa3,0x6e,0x5a,0xa,0x1c,0xd7,0x45,0x22,0x98,0x9d,0x9b,0xe7,0xe0, + 0xe4,0x24,0xab,0xc6,0xc6,0xa8,0x54,0xca,0x19,0x18,0x16,0x25,0x41,0x2a,0x45,0x14, + 0x1b,0x66,0x6a,0x33,0xec,0xdf,0xb7,0xf,0xdf,0xf3,0x58,0xb7,0x7e,0x1d,0x13,0xe3, + 0x13,0x4,0x41,0x1a,0xf4,0x1a,0x9b,0x4e,0xc3,0x44,0x27,0x10,0xa7,0x83,0xe3,0x79, + 0x3e,0xae,0xe7,0xd2,0x6e,0x77,0x58,0x68,0xb5,0x30,0xc6,0xa0,0x64,0x6a,0x39,0x89, + 0xd6,0xc,0x85,0xc7,0xc7,0xf3,0xd7,0x49,0x96,0x93,0xd6,0x41,0xb5,0xd9,0xd9,0x57, + 0xc6,0x71,0x4c,0xd8,0xeb,0xa1,0x8d,0x1e,0x8,0xc3,0xd4,0x7b,0xa4,0x23,0x63,0x33, + 0x73,0x10,0x22,0x1d,0xed,0x30,0xc,0x79,0x72,0xcf,0x93,0x3c,0xf6,0xf8,0xe3,0x60, + 0x34,0xe7,0x9f,0x73,0xe,0x67,0x6f,0xdd,0x2,0x42,0x62,0xad,0x45,0x9,0xf0,0x15, + 0x78,0x12,0xa4,0xb0,0x24,0x3a,0xa1,0xd5,0x6e,0xd1,0x6c,0x35,0x89,0xe3,0xf8,0x68, + 0xb7,0xb2,0xfb,0x39,0x8e,0x8b,0xef,0x7a,0xf8,0x7e,0x80,0xeb,0xba,0x18,0xab,0x69, + 0x2e,0x34,0x69,0xb6,0x5a,0x19,0x8f,0x8b,0xd4,0x72,0xb4,0x5e,0x22,0x84,0x19,0x2, + 0x48,0xa,0xbe,0x70,0xd7,0x17,0x77,0xad,0x98,0x5,0xdd,0xf3,0xe5,0x7b,0xff,0x5d, + 0x18,0x86,0x4e,0x3e,0x97,0xc7,0xd,0x1c,0x2,0xdf,0xc7,0xf5,0x3c,0x1c,0xc7,0x41, + 0x39,0x4e,0xe6,0x71,0xc4,0x51,0x4f,0x96,0x79,0x2c,0x63,0x2c,0xf5,0xf9,0x3a,0xed, + 0x4e,0x8b,0x35,0x6b,0xd6,0xb2,0x36,0x17,0x90,0xcf,0x5,0xc4,0x51,0x8c,0x0,0x8c, + 0x15,0x44,0x6,0x84,0x31,0x58,0x2b,0x98,0x18,0x1b,0xa7,0xf8,0xea,0x57,0x23,0x10, + 0x4,0x41,0x80,0x90,0x2,0x63,0x53,0x61,0xe9,0x28,0x7,0x29,0x5,0x71,0x14,0x21, + 0x95,0x83,0xe7,0x3a,0x74,0x7a,0x3d,0xea,0x8d,0x6,0x4a,0x29,0x10,0x82,0x38,0x4e, + 0x48,0x12,0x3d,0xb0,0xec,0xe3,0xc0,0xc9,0x4e,0x1d,0xe5,0xb0,0xd0,0x6c,0xbe,0x66, + 0xc5,0x0,0x3a,0x72,0xf8,0xc8,0xbb,0x1d,0xc7,0x45,0xba,0x2e,0xc2,0xf7,0x71,0xb, + 0x45,0x8a,0xb9,0x1c,0x4a,0x8,0x8c,0xd1,0x3,0x37,0xde,0x6f,0x54,0xff,0x73,0x2e, + 0x8,0x38,0xef,0xe5,0x2f,0x27,0x8c,0x43,0x72,0xb9,0x3c,0xb9,0x20,0x40,0x27,0x7a, + 0xd0,0x70,0x83,0xc0,0xf4,0x53,0x46,0x2,0x7c,0xdf,0x27,0x9f,0x2f,0x20,0x30,0x18, + 0x6d,0xd0,0x36,0x4d,0xb6,0x49,0x4,0xad,0x76,0x9b,0xf9,0xe6,0x2,0x7e,0x2e,0x8f, + 0x11,0xd0,0xad,0x37,0x90,0xd6,0x90,0x2b,0x14,0x30,0x5a,0x93,0x24,0x7a,0x90,0x5f, + 0xe6,0x5,0x14,0x94,0x92,0x92,0x28,0x8a,0xf3,0x2b,0x2,0xd0,0xb7,0xbe,0xfd,0x9d, + 0x77,0xf4,0x7a,0xbd,0x57,0xac,0x5d,0xbb,0x96,0x44,0x8,0xe6,0xda,0x5d,0x9a,0xb1, + 0x61,0x4c,0x48,0xaa,0x85,0x3c,0x81,0x9b,0x92,0xa6,0x36,0x99,0xc,0x14,0xa9,0x68, + 0xb3,0xda,0xa2,0x94,0x62,0xd5,0x9a,0x55,0x8b,0x5a,0x6b,0x1,0x77,0x20,0x16,0x8f, + 0x4a,0x1c,0x8b,0xc1,0xa2,0x75,0xc,0xd6,0x60,0x8c,0x45,0x49,0x49,0x18,0x45,0xd4, + 0x66,0xe7,0x38,0x3c,0x33,0x4b,0xd7,0x58,0x4a,0xa3,0x55,0x5c,0x25,0x89,0xdb,0x2d, + 0xf2,0x52,0x50,0x28,0x14,0x52,0x9d,0x63,0x52,0xce,0x11,0x62,0x9,0x88,0x8e,0xf9, + 0x68,0x41,0x8a,0x2c,0xd3,0xf9,0x22,0x1,0xfa,0xe5,0x2f,0xff,0x65,0x7c,0x61,0xa1, + 0xf9,0xda,0x52,0xb1,0xc4,0xea,0x55,0xab,0xa8,0x2d,0x2c,0xd0,0x9d,0xad,0x13,0x29, + 0xf,0x27,0x8c,0x31,0xc9,0x2,0x2a,0x89,0x89,0xba,0x5d,0xb4,0xb5,0x48,0x29,0x70, + 0x1d,0x7,0xd7,0xf5,0x8,0xfc,0x0,0xdf,0xf7,0x40,0x82,0x44,0xa6,0x1d,0x10,0xa9, + 0x87,0x72,0x54,0x1a,0x6a,0x58,0x63,0xb1,0xd6,0x60,0x6d,0xa6,0x9d,0x4c,0x92,0xa, + 0x48,0x63,0x0,0x41,0x2f,0x8c,0xa8,0xcd,0xcd,0x71,0xe0,0xd0,0x61,0x26,0x6b,0x35, + 0xf2,0xd5,0x71,0xe8,0x76,0x29,0xf8,0x1,0xb9,0x5c,0x1,0x17,0x43,0x18,0x86,0x68, + 0x63,0x8f,0x2,0x73,0x92,0xb2,0xce,0xac,0x4,0x40,0x93,0x53,0x53,0x3b,0x94,0x92, + 0xaf,0x1c,0x1d,0xad,0x20,0xa5,0x20,0xef,0x7b,0xac,0x1a,0x1b,0x25,0xf1,0x2,0x8c, + 0xd6,0x1c,0x38,0x7c,0x84,0xe9,0x83,0x7,0x9,0xdb,0x6d,0xfc,0x20,0xc0,0x73,0x9d, + 0x34,0xe,0xf2,0x3d,0x8a,0x85,0x22,0xe5,0x72,0x99,0x52,0xa9,0x48,0xa1,0x50,0xc0, + 0xf7,0xfd,0xcc,0xfd,0xc6,0x24,0x32,0xc1,0xcd,0xb8,0xb,0x1,0xda,0x68,0x8c,0x36, + 0x98,0xc4,0xc,0x72,0xd8,0xc6,0x18,0xe6,0x1b,0xb,0xcc,0xcc,0xd5,0xd1,0xda,0x50, + 0xa,0x2,0x5c,0x1,0x8e,0x31,0x84,0x61,0x17,0x29,0xa1,0x90,0xcb,0xa1,0xfb,0x42, + 0xd7,0x8a,0xa5,0xa7,0xd7,0x32,0x27,0x12,0xc1,0xbd,0x5f,0xf9,0x87,0xbf,0xfe,0xbd, + 0x77,0xbe,0xe3,0x23,0xa7,0xd,0x50,0xb7,0xd3,0xfd,0x6d,0x25,0xd5,0x45,0xae,0xeb, + 0x11,0x27,0x9,0xbe,0xeb,0x32,0x9a,0xb,0xd8,0xfb,0xdc,0x1,0xc2,0x24,0xa1,0xd7, + 0xed,0xa2,0x93,0x84,0x91,0xd1,0x51,0xca,0xa5,0x12,0x8e,0xa3,0x30,0xc6,0x10,0x45, + 0x11,0xf3,0xf3,0xf3,0xd4,0x6a,0x35,0x1c,0xc7,0xa1,0x5c,0x2e,0xb3,0x66,0xed,0x1a, + 0xaa,0xa3,0x55,0x7c,0xdf,0xc7,0x18,0x43,0x18,0x46,0xa8,0x2c,0x1d,0xa2,0x8d,0x4e, + 0xb9,0x29,0x53,0xd6,0x58,0x4b,0xbb,0xd3,0xa5,0xdd,0xed,0x20,0xb0,0x14,0xa,0x79, + 0xca,0xc5,0x22,0x42,0xa,0x7a,0x51,0x48,0x94,0xc4,0xa8,0x42,0xe,0xdf,0x73,0x97, + 0x99,0x2a,0x76,0x49,0x6b,0x1a,0xe6,0x4a,0xa5,0x14,0xdd,0x6e,0x77,0xe4,0x81,0xaf, + 0x7f,0xe3,0x37,0xaf,0xba,0xf2,0x6d,0xf,0x9d,0x16,0x40,0x71,0x12,0xbf,0xde,0x5a, + 0xd6,0xf7,0x6f,0x1b,0x27,0x9a,0xfd,0x7b,0xf7,0x72,0x60,0xff,0x73,0x54,0xaa,0x55, + 0x36,0x6d,0xde,0x4c,0xe9,0xdc,0x73,0x70,0xa4,0x4c,0x23,0xe9,0xa1,0x24,0x98,0x36, + 0x9a,0x5e,0xb7,0x47,0xab,0xd5,0x62,0xa6,0x36,0xc3,0x13,0x4f,0x3c,0xc1,0xd8,0x68, + 0x95,0xad,0x5b,0xb7,0x52,0x1d,0xab,0x62,0xb1,0x68,0x6d,0x6,0x61,0xc9,0xe0,0x7d, + 0x48,0xef,0x48,0x1,0x85,0x20,0x40,0x3a,0xe,0x9e,0xef,0xa3,0x8d,0x46,0xb5,0xdb, + 0x8c,0xb9,0x25,0x4a,0x85,0x7c,0xca,0x7b,0x8b,0xf9,0x65,0xe9,0x58,0xf6,0x68,0x5e, + 0xa0,0x1f,0xa9,0x48,0x49,0x94,0xc4,0x95,0x76,0xa7,0x33,0x72,0xda,0x16,0xa4,0xb5, + 0xb9,0xc0,0x58,0x83,0x52,0xa,0xad,0xd,0xb5,0xda,0xc,0x7b,0xf7,0xef,0x67,0xd3, + 0xa6,0x4d,0x6c,0xd9,0xb2,0x99,0x42,0xa1,0x90,0x86,0x1d,0xe2,0xa8,0x2a,0x4e,0x12, + 0x9d,0x25,0xc3,0x5c,0x72,0x41,0x40,0xa5,0x52,0x66,0xd5,0xaa,0x9,0xea,0xf5,0x3a, + 0x47,0x8e,0x1c,0xe1,0xd1,0xc7,0x76,0xb3,0x71,0xdd,0x7a,0xb6,0x9e,0x75,0x16,0xae, + 0xe7,0x66,0x1,0x61,0xda,0x87,0x44,0x27,0x3,0x3e,0xc2,0x18,0x7c,0xcf,0xc3,0x2b, + 0x78,0x78,0x9e,0x47,0x2f,0x8a,0xe8,0x76,0x63,0xc6,0x46,0x2a,0xf8,0xae,0x4b,0x9c, + 0x24,0x24,0x5a,0xa7,0xe1,0xc7,0x20,0xfa,0x17,0x4b,0x58,0x8f,0x5d,0x52,0x1e,0x4a, + 0x29,0x30,0x89,0xae,0x86,0xbd,0x70,0xec,0xb4,0x1,0xb2,0xc6,0x96,0xb1,0xa9,0xb0, + 0x8a,0xa2,0x88,0x66,0xb3,0xc5,0x45,0x17,0xbe,0x92,0x4d,0x9b,0x36,0x11,0x4,0x1e, + 0xdd,0x4e,0x48,0x14,0x45,0x20,0x52,0xd7,0xa9,0x94,0x22,0x17,0xf8,0x78,0xbe,0x87, + 0x10,0x82,0x5e,0xaf,0x47,0x1c,0x6b,0x5c,0xd7,0xc3,0xf7,0x7d,0xa,0x85,0x2,0xd3, + 0xd3,0xd3,0x1c,0x99,0x9c,0x64,0xae,0x5e,0xe7,0xbc,0xf3,0xce,0xa3,0x50,0x28,0x12, + 0x9b,0x34,0x3c,0x70,0x3d,0x8f,0xa8,0x17,0xa6,0x8a,0xd8,0x71,0xa8,0x14,0xa,0xf8, + 0x9e,0x47,0x18,0x86,0x28,0x29,0x28,0x17,0xf2,0x38,0x8e,0x22,0x49,0x34,0x5a,0x5b, + 0x1c,0x95,0x91,0xff,0xb2,0xd6,0x63,0x87,0x16,0xa,0x86,0xd7,0xc8,0xec,0x20,0x77, + 0x65,0x5f,0x40,0x58,0xbf,0x80,0x9b,0xb7,0x12,0x1,0x49,0x16,0xb,0xad,0x5f,0xbf, + 0x8e,0xca,0x48,0x85,0x85,0x46,0x93,0xa7,0x9f,0x7e,0x86,0x46,0x63,0x81,0x20,0xf0, + 0x29,0x16,0xb,0x83,0xb6,0xe4,0x82,0x0,0x8b,0xc0,0x73,0x7d,0x36,0x6e,0x5c,0x47, + 0xa5,0xec,0xd3,0xee,0x74,0xe9,0xf5,0x7a,0x94,0x8a,0x25,0x1c,0xe5,0xe0,0xba,0x3e, + 0xd3,0xd3,0x53,0x3c,0xfe,0xd8,0x63,0x14,0x47,0xab,0xa8,0x5c,0x1,0xc7,0x73,0x19, + 0x1b,0x29,0x51,0xf1,0x7c,0xa4,0x31,0xb8,0xca,0x41,0x62,0x89,0xe3,0x8,0x63,0x34, + 0x9e,0x92,0x8,0x29,0xb1,0x8,0xb4,0x89,0x69,0xb5,0x9a,0x74,0x3a,0x6d,0xaa,0x63, + 0x63,0x59,0x5a,0xc4,0x2e,0x49,0x41,0xe2,0x38,0xc8,0xec,0x20,0x2e,0x33,0xd6,0x62, + 0xb3,0xbe,0x9d,0xbe,0x50,0xcc,0xf8,0xc1,0x71,0x1c,0x82,0x5c,0xc0,0xd4,0xe4,0x14, + 0x7,0x9e,0x3f,0x48,0xad,0x36,0xb,0x40,0xd9,0x94,0x8,0x2,0x1f,0x6b,0x19,0x2c, + 0xf7,0xec,0xdf,0xf7,0x3c,0x7b,0xf7,0x1e,0x62,0xdb,0xd9,0xdb,0x38,0xe7,0xdc,0x2d, + 0x9c,0xf3,0xb2,0x2d,0x4,0x41,0x99,0x7a,0x63,0x1,0x37,0xd1,0x54,0xc7,0x46,0x41, + 0x58,0x8e,0x1c,0x3e,0xc2,0xe4,0xf4,0x34,0x95,0xb5,0xeb,0x59,0xbd,0x66,0x2d,0x22, + 0xe7,0x53,0x6f,0x36,0xc8,0x2b,0x81,0x14,0xe9,0xfd,0xfa,0xe9,0x98,0x34,0x50,0x95, + 0x18,0x2b,0x68,0x36,0x5b,0x1c,0x3a,0x74,0x10,0x63,0x2c,0xe3,0x13,0x13,0xa9,0x5, + 0xd9,0x25,0xf4,0xce,0x89,0x8c,0xc3,0xbe,0x0,0x6f,0x9d,0x2c,0x40,0xd6,0x5a,0xa4, + 0x4a,0xd3,0xd,0x8d,0xc6,0x2,0xfb,0xf6,0xed,0xa7,0xd5,0x6a,0xf,0x4d,0xeb,0x34, + 0xdd,0x20,0x84,0x44,0x6b,0x83,0x94,0x8a,0x4e,0xa7,0xcd,0x81,0x3,0xfb,0x98,0x9f, + 0x9f,0xe7,0x57,0x4f,0x3d,0xc5,0xcb,0x5e,0xb6,0x85,0xd7,0xbf,0xfe,0x35,0xac,0x5a, + 0x3d,0xc1,0x9c,0x99,0x23,0x8c,0x43,0xca,0xe5,0x32,0x56,0x48,0x66,0x6a,0xb3,0xd8, + 0x24,0x42,0xc7,0x31,0x5d,0x60,0x61,0xbe,0xc1,0xc6,0xf1,0x51,0x1c,0x5,0x49,0xac, + 0xb3,0x54,0x87,0xc8,0x4,0x68,0x9a,0xe3,0x8e,0x93,0x4,0xd7,0xf3,0xc9,0xe7,0x72, + 0xd9,0x75,0x73,0x22,0x6e,0x3e,0x6,0x84,0x3e,0xe0,0x22,0x95,0x17,0x39,0x63,0x4c, + 0xfe,0xb4,0x1,0x72,0x1c,0xe7,0xf9,0x28,0x8e,0x37,0xca,0x2c,0xa5,0x31,0x35,0x35, + 0x45,0xa7,0xd3,0x43,0x29,0x85,0x14,0x92,0x6e,0xd4,0xa3,0x17,0xa6,0x9c,0xe1,0xf9, + 0x1e,0xae,0x9b,0xed,0xdc,0x10,0x0,0x11,0xf5,0xfa,0x34,0x61,0xb7,0xc9,0x73,0xfb, + 0xf7,0x31,0x39,0x35,0xc9,0xef,0xbc,0xf9,0x8d,0x6c,0xde,0xbc,0x81,0x38,0x8e,0x89, + 0x13,0x4d,0x79,0x64,0x4,0x10,0x4c,0xcd,0xcc,0x70,0xf0,0x97,0x7b,0xa8,0x4e,0xac, + 0xa2,0x10,0x78,0xf8,0xae,0x87,0xa3,0xc4,0x20,0xa8,0x4d,0xe5,0xb6,0x40,0x6b,0x43, + 0x2f,0xc,0xf1,0x7d,0x9f,0x75,0xeb,0xd6,0xe1,0x3a,0xe,0xd6,0x98,0xe1,0xee,0x1f, + 0x9f,0xc7,0x3e,0x7e,0x69,0x12,0x21,0x4,0x9d,0x4e,0x97,0x4a,0xb9,0xbc,0x50,0x2e, + 0x97,0x8e,0x9c,0x36,0x40,0x85,0x42,0x61,0x97,0x69,0xb5,0xae,0x8d,0xe3,0xb8,0x98, + 0x24,0x31,0xad,0x56,0x6b,0xa0,0x75,0x44,0xa6,0x90,0xc3,0x28,0xa6,0xdd,0xe9,0x10, + 0xe4,0x2,0x1c,0xe5,0xa0,0xb5,0xa6,0x50,0x28,0x30,0x3a,0x5a,0xa5,0xb9,0xd0,0xa0, + 0x5c,0xf2,0xd0,0x3a,0xe6,0x91,0x87,0x1f,0xa6,0xd5,0x68,0x70,0xcd,0xb5,0x57,0xb2, + 0x69,0xf3,0x26,0xa2,0x24,0xa1,0x17,0x46,0xe4,0x73,0x39,0x2,0xa5,0xa8,0xcd,0x4c, + 0x13,0x3a,0x8a,0xb3,0x5f,0x71,0x1e,0x9e,0x9b,0x5a,0xa4,0x45,0x10,0xc7,0x11,0xd6, + 0xa6,0xb,0x87,0x49,0xa2,0x49,0x92,0x4,0xd7,0x71,0x51,0x4a,0xa6,0x92,0x40,0x9b, + 0x65,0xd2,0xd7,0x4b,0x2d,0x49,0xa6,0x25,0xa,0x23,0xa4,0x90,0xb5,0xf7,0xde,0x74, + 0xe3,0x5b,0x5e,0x70,0xc9,0xfa,0x44,0xb,0x87,0x8d,0x85,0x5,0xdd,0xed,0xf6,0x36, + 0x74,0x3a,0x9d,0xb3,0x8c,0xb1,0xd4,0x6a,0x35,0xb4,0x36,0x64,0x8b,0x18,0xa9,0x96, + 0x31,0x1a,0x1d,0x27,0x94,0x8a,0xc5,0x81,0x3a,0xe,0x82,0x80,0xea,0xd8,0x28,0x95, + 0xca,0x8,0x52,0x2a,0xc6,0xaa,0x15,0x1c,0x47,0xf1,0xdc,0x73,0x7,0x98,0x9a,0x9a, + 0x61,0xd3,0xe6,0x4d,0x8c,0x8e,0x54,0x88,0xc2,0x10,0x6b,0xc,0x9e,0xe7,0xa6,0xba, + 0xa9,0xd3,0x61,0x62,0x6c,0xc,0xd7,0x73,0x53,0xe2,0xb5,0x6,0x61,0x2d,0x8e,0x4, + 0x29,0x20,0x8a,0xc2,0x54,0x3b,0xd9,0x7e,0x88,0x62,0x97,0x0,0x45,0xc,0x2,0xe6, + 0xbe,0xe8,0xec,0xff,0x2a,0xcd,0x56,0x1a,0xac,0x35,0xd3,0x7f,0xf6,0xa7,0x37,0xaf, + 0x3a,0xa9,0x35,0xfd,0x13,0x1,0xb4,0x76,0xcd,0x9a,0x5f,0x4d,0x4e,0x4e,0x6d,0x5a, + 0x68,0x2c,0xbc,0xd1,0x62,0xa9,0xd7,0xeb,0x24,0x89,0x1e,0x4e,0x68,0x83,0x85,0x28, + 0x8e,0x50,0xca,0xc1,0xf,0x2,0x1c,0xa5,0x70,0x5d,0x87,0x4a,0xb9,0xc2,0xda,0xb5, + 0xeb,0xd8,0xbc,0x65,0xb,0xd5,0x89,0x55,0x4c,0x8c,0x8f,0xe3,0xfb,0x3e,0xb3,0xb3, + 0xf3,0xd4,0x66,0xe7,0x39,0xf7,0xdc,0x6d,0xf8,0x9e,0x97,0xa6,0x55,0xa5,0x83,0xb1, + 0x96,0xb9,0xf9,0x79,0x92,0x24,0xa1,0x52,0xae,0xe0,0x79,0x1e,0xae,0xb4,0xf8,0xe, + 0x38,0xc2,0x22,0xac,0x26,0x8e,0xc2,0x14,0x14,0x39,0x58,0xc0,0x7d,0x41,0x12,0x1e, + 0xe6,0x1e,0x63,0xc,0x8,0x6a,0xb7,0xde,0xf2,0xe1,0x93,0x2,0xe7,0x5,0x1,0x2, + 0x68,0xb5,0x5a,0xd4,0x1b,0x8d,0x3f,0x8a,0xe3,0x58,0xb6,0xdb,0x2d,0xc2,0x30,0x3a, + 0xa6,0xd,0x36,0x13,0x89,0xdd,0x4e,0x87,0xc0,0xf7,0xf1,0x7d,0x1f,0xa5,0x14,0xd6, + 0x5a,0xc2,0x30,0xc4,0x68,0x4d,0xa9,0x58,0x64,0xf5,0x9a,0x35,0x9c,0x75,0xd6,0x56, + 0xd6,0xad,0x5b,0x8d,0xb5,0x6,0x25,0x1d,0xc6,0xc6,0x46,0x8f,0xea,0x11,0xb,0x71, + 0x14,0x51,0x6f,0x34,0xa8,0x56,0xab,0x94,0x8b,0xb9,0xd4,0xb5,0x67,0xde,0x2c,0x4e, + 0x12,0xa2,0x38,0xcd,0x23,0xa5,0x2e,0x7a,0xa9,0x50,0xc2,0xb2,0xd4,0x15,0x21,0x44, + 0x9a,0x37,0x97,0xf2,0xc8,0xcd,0x1f,0xfe,0xe0,0x9a,0x53,0xc9,0xc3,0xbf,0x60,0x46, + 0xf1,0xfc,0xf3,0x5f,0xf1,0xfd,0xf1,0xf1,0xb1,0xff,0xa6,0xb5,0xa1,0x54,0x2a,0xa1, + 0xd4,0x51,0xcd,0x21,0x0,0x95,0x25,0xe9,0x2d,0x30,0x53,0xab,0xd1,0x6c,0xb6,0xc0, + 0x82,0x72,0x1c,0xa,0xc5,0x2,0x9e,0xe7,0xd2,0xed,0x76,0x68,0x35,0xd3,0x6d,0x25, + 0x6b,0xd6,0xae,0xe5,0xc2,0xb,0x2f,0x20,0x5f,0xc8,0x61,0x6,0xdb,0x4c,0xd2,0x0, + 0xb7,0x50,0x2c,0xd0,0xeb,0xf5,0x68,0xb5,0x9a,0xe8,0x24,0x1e,0xac,0x66,0x98,0x74, + 0xb5,0x34,0x3,0x53,0xa7,0x9,0x37,0x33,0xbc,0x74,0x6d,0x87,0xd6,0xf1,0xc5,0x31, + 0xdb,0x6d,0x84,0x10,0xf4,0xba,0x3d,0x94,0x54,0xb5,0xf,0x7f,0xe8,0x3,0xeb,0x4e, + 0x75,0x99,0xeb,0xa4,0x52,0xae,0xbf,0xf9,0xaf,0x2e,0xfd,0xcb,0x20,0xf0,0x28,0x14, + 0xa,0x28,0xa5,0x8e,0x66,0x10,0x65,0x1a,0x6c,0x2a,0x29,0x71,0x5d,0x97,0x28,0x8a, + 0x98,0x9e,0x9a,0xa6,0xde,0x68,0xa4,0xca,0xd8,0x49,0xb3,0x8f,0xf9,0x7c,0x1e,0x6b, + 0xd,0xad,0x76,0x8b,0x4e,0xa7,0x3b,0x48,0x6e,0x85,0xbd,0x10,0x25,0x25,0x9e,0x97, + 0x92,0x6e,0x10,0x4,0x8,0xa0,0xd3,0x4c,0x2d,0xd5,0x5a,0x99,0xed,0x19,0x92,0xb8, + 0x2a,0x55,0xeb,0xd3,0xb5,0x59,0xea,0xf5,0x3a,0x2a,0x73,0xff,0x96,0xa3,0x7c,0xd8, + 0x4f,0x1,0x1f,0xd,0x27,0x24,0x9d,0x76,0x7,0xa5,0x54,0xe7,0xe6,0xf,0x7f,0x60, + 0xe2,0x74,0x96,0xd9,0x4f,0x3a,0x27,0x7d,0xdd,0xef,0xff,0x6b,0xa1,0x94,0x43,0xa9, + 0x54,0x1a,0x24,0xc5,0xe4,0xd0,0xba,0xbc,0x92,0x12,0xd7,0x71,0x89,0xe2,0x98,0xe9, + 0xe9,0x19,0x66,0x66,0x66,0x88,0xe3,0x28,0xcb,0x25,0x3b,0x78,0x9e,0x87,0xe3,0x28, + 0xb4,0x4e,0xe8,0x76,0x7b,0x74,0xbb,0x3d,0x1a,0xb,0xcd,0x4c,0x84,0xba,0x48,0x91, + 0xae,0xad,0x2b,0xc7,0xa1,0xdd,0xed,0x10,0xc7,0x71,0x9a,0x40,0x33,0xa0,0x2d,0x2c, + 0xb4,0xbb,0x4c,0xce,0xcc,0x82,0x10,0x14,0xa,0xb9,0x2c,0x1d,0x6b,0x97,0xa1,0x9f, + 0x54,0x16,0xb4,0xdb,0x6d,0x94,0xe3,0x44,0xb7,0xde,0xf2,0xa1,0xc2,0xe9,0xee,0x60, + 0x39,0xa5,0x75,0xb1,0xf1,0x89,0xf1,0x7,0xa2,0x38,0xbe,0xaa,0xdd,0x6e,0x93,0x24, + 0x9d,0x41,0xda,0xa0,0x9f,0x7c,0xea,0x5b,0x57,0x9c,0x24,0xcc,0xcc,0xcc,0xd2,0xeb, + 0x85,0x8c,0x54,0xca,0x4,0x7e,0x80,0x54,0x12,0xcf,0xf5,0x30,0x5a,0x63,0x6c,0x1a, + 0xbe,0x84,0x61,0x48,0xac,0x35,0xae,0xe3,0x20,0xa5,0x1a,0x80,0x1d,0x46,0x71,0xea, + 0x2d,0xb3,0xad,0x2e,0xbd,0x5e,0xc2,0xd3,0xcf,0x3e,0x87,0x94,0x82,0xb5,0x6b,0x57, + 0x93,0xcb,0x17,0x89,0x92,0x7e,0x10,0x9d,0x1c,0x9f,0x35,0xcc,0xf8,0xcf,0x75,0xdc, + 0xe8,0xd6,0x5b,0x3e,0xe4,0xbf,0x98,0xfd,0x4f,0xa7,0xb4,0xbb,0xe3,0x6d,0x6f,0xf9, + 0x9d,0xb7,0x8f,0x8d,0x8f,0xed,0xae,0x56,0xd3,0xbc,0x4e,0xdf,0x8a,0x94,0x52,0x83, + 0x35,0x32,0xa5,0xd4,0x40,0xc0,0x35,0x1a,0xb,0x4c,0x4d,0xcd,0x30,0x3d,0x33,0x43, + 0xa3,0xd1,0x20,0xc,0x43,0x10,0x2,0xe5,0x48,0x1c,0x25,0x11,0xc2,0xa6,0x3b,0x3e, + 0x6c,0xda,0x12,0xad,0x75,0xb6,0x8,0xe9,0x60,0x84,0x48,0x93,0x61,0xd9,0xe6,0x86, + 0x94,0xec,0xb,0x78,0x5e,0x80,0xb5,0x82,0x24,0xd6,0xf4,0x7a,0xdd,0x34,0xf0,0xec, + 0x7b,0xd5,0x4c,0xd0,0x46,0x51,0x84,0xe7,0x79,0xb5,0x17,0xb,0xce,0x29,0x3,0x4, + 0xf0,0x8e,0xab,0xaf,0xda,0xb1,0x75,0xf3,0xe6,0x47,0xab,0xa3,0xa3,0xd9,0x66,0xa3, + 0x74,0x8d,0xaa,0x7f,0xf4,0xb7,0xc1,0xb8,0xae,0x8b,0x23,0x25,0x61,0x2f,0xa4,0xd1, + 0x58,0xa0,0x36,0x3b,0xc7,0xec,0xec,0x3c,0x73,0xf3,0x75,0xe6,0xeb,0xd,0x9a,0xed, + 0x36,0xed,0x76,0x1b,0xad,0x93,0x4c,0xf3,0xd8,0x6c,0xb1,0x4f,0x53,0x2e,0x97,0x70, + 0x5c,0x8f,0x28,0x31,0x44,0x89,0x41,0x28,0xc9,0xba,0xf5,0xeb,0xa9,0x54,0xc7,0xb0, + 0x8e,0x4b,0x27,0x8a,0x98,0x9d,0x9f,0x67,0x7a,0x7a,0x1a,0x61,0x8f,0x82,0xa3,0x8d, + 0x26,0x8a,0x23,0x8a,0x85,0xe2,0xe3,0x1f,0xfe,0xe0,0x9f,0x4c,0xb0,0x2,0xe5,0xb4, + 0xf6,0x7,0xbd,0xfd,0xea,0x2b,0x5f,0xb5,0xed,0xec,0xb3,0x76,0x8f,0x8f,0x57,0x71, + 0x5d,0x77,0xb0,0x6e,0x35,0xc,0x52,0x3f,0x29,0x95,0x12,0x70,0x9a,0x4f,0x6a,0xb5, + 0xda,0xcc,0xcf,0xd7,0x99,0x9b,0x9d,0x63,0x6e,0x6e,0x9e,0x46,0xa3,0x89,0xd6,0x6, + 0xc7,0x55,0x84,0x61,0xc4,0xfc,0x7c,0x1d,0xcf,0x73,0x19,0x1d,0x1d,0xc5,0xf7,0x7c, + 0xb4,0x36,0xc4,0x6,0x12,0x23,0xf0,0xb,0x25,0x8c,0xe3,0xa2,0x82,0x3c,0xa1,0x81, + 0xfa,0x42,0x93,0x38,0x8c,0x91,0x2a,0xdd,0xad,0x66,0x8c,0x26,0xc,0x43,0xca,0xe5, + 0xd2,0xcf,0xdf,0xf7,0xde,0x3f,0xbe,0x68,0xa5,0x36,0xa7,0xca,0xd3,0xad,0x78,0xf5, + 0x35,0x57,0xed,0xd8,0xb6,0x6d,0xdb,0xe3,0xab,0x57,0xaf,0xc2,0xf3,0xdc,0x6c,0x13, + 0x93,0x18,0x0,0x34,0x8,0x30,0xb3,0xd1,0x75,0x94,0x4a,0xe3,0x35,0xc7,0x41,0x66, + 0x81,0x6d,0x2e,0x97,0x23,0x8,0x72,0x24,0x71,0xc2,0xe4,0xe4,0x24,0xcf,0x1f,0x7c, + 0x9e,0x6a,0xb5,0x4a,0xa9,0x58,0xcc,0x76,0x82,0xa4,0xba,0x38,0x49,0x92,0x34,0xe5, + 0x22,0xc0,0xe0,0xa1,0xdc,0x22,0x23,0xd5,0x71,0x56,0xad,0x9e,0x48,0x65,0x80,0x31, + 0xf4,0xa2,0x88,0x72,0xb9,0xfc,0xe4,0x4d,0x7f,0x7c,0xe3,0xab,0x57,0x72,0x6b,0xb3, + 0x7c,0x31,0x95,0xaf,0x7e,0xfb,0x95,0x17,0x6d,0xdb,0x76,0xf6,0xf7,0x37,0x6e,0xd8, + 0xd0,0x2b,0x97,0xcb,0xe9,0x2,0x1e,0x4b,0x5b,0xd3,0x20,0x10,0xc8,0xb6,0xb5,0xb8, + 0xae,0xcb,0x9a,0x35,0xab,0x29,0x95,0x8a,0x4c,0x4e,0x4d,0xf1,0xd4,0xd3,0xcf,0x10, + 0xc7,0x9,0x5b,0xb7,0x6c,0x21,0x8,0x72,0xe9,0x7a,0x98,0x4c,0x83,0x55,0x9d,0xa4, + 0x2,0x11,0x6d,0x49,0xc2,0x88,0x20,0x8,0x58,0xb5,0x6a,0x82,0x62,0xb1,0x88,0xce, + 0x38,0xa7,0x90,0xcb,0x1d,0x79,0xef,0xbf,0xb9,0xf1,0x7c,0x56,0xb8,0xac,0xc8,0x5f, + 0x11,0x7e,0xf8,0xc3,0x87,0x3f,0x7e,0xe0,0xc0,0xc1,0x7f,0x5b,0x6f,0xd4,0x9d,0xf9, + 0xf9,0x3a,0xcd,0x56,0x2b,0xcd,0xd,0xd9,0x63,0xc3,0x24,0x9b,0x66,0x29,0x71,0x1d, + 0x87,0xb5,0x6b,0xd7,0xb0,0x69,0xc3,0x7a,0x62,0xad,0x79,0xf6,0xe0,0x61,0xea,0xad, + 0x16,0x6b,0x27,0xc6,0x58,0x3d,0x3a,0xa,0xd6,0xe,0x88,0xbf,0xd7,0xeb,0xa5,0xe2, + 0x13,0xd2,0x1d,0x1f,0x43,0x79,0x2a,0x6b,0x2c,0x71,0x12,0xe3,0x7b,0xde,0xd4,0x7, + 0xfe,0xe4,0x7d,0x6b,0x38,0x3,0x65,0x45,0xf6,0x49,0xbb,0xae,0xbb,0xf3,0x55,0xaf, + 0xda,0x7e,0xff,0x33,0xcf,0x3c,0xfb,0x99,0xc0,0xf,0x76,0x54,0xb3,0x2d,0x6f,0x9d, + 0x6e,0x87,0x28,0x8c,0x86,0x64,0x80,0x43,0xb1,0x54,0x64,0xbc,0x3a,0x4a,0xa9,0x5c, + 0xa6,0xd7,0xb,0xa9,0x2d,0x2c,0xd0,0x8a,0x63,0x54,0x2e,0x40,0x6,0x79,0x42,0x4, + 0x39,0x25,0x71,0x95,0x22,0x8c,0x62,0x7a,0xdd,0x5e,0xba,0x8e,0xef,0xa8,0x41,0x8a, + 0xd5,0x68,0x43,0xa2,0xd,0x71,0x92,0xe0,0xf9,0x5e,0xeb,0x4c,0x81,0xb3,0x62,0x16, + 0x4,0xf0,0xec,0xb3,0x7b,0x45,0xb1,0x58,0x2c,0xd6,0x6a,0xb5,0xdf,0x7a,0x76,0xef, + 0xbe,0xff,0x52,0xab,0xd5,0x5e,0x2e,0x20,0xdb,0xdd,0x2a,0x10,0xc8,0x6c,0x1f,0x50, + 0x9a,0x3a,0x35,0xda,0xa0,0x93,0x84,0x66,0xd8,0x63,0x72,0xa1,0x45,0x3b,0x31,0x94, + 0xb,0x5,0x2a,0x81,0xc7,0xaa,0x52,0x1,0x25,0x4,0xad,0x56,0x9b,0x4e,0xb7,0x8b, + 0xb5,0x86,0x30,0x8a,0x68,0xb7,0x3b,0x68,0x4,0xd2,0x51,0x8,0x6b,0x99,0x18,0x19, + 0x7d,0xf4,0x7d,0xef,0xbd,0xf1,0x55,0x9c,0xc1,0xb2,0xe2,0xff,0xf6,0xd9,0xbb,0x6f, + 0xbf,0x6c,0x36,0x9b,0x55,0xcf,0x73,0x2f,0x3e,0x7c,0xf8,0xc8,0x7b,0x6a,0xb5,0xd9, + 0xdf,0xb,0xc3,0x70,0xc0,0x4d,0xfd,0x40,0x16,0x3,0x42,0xa5,0x4,0xbb,0xd0,0xb, + 0x99,0xeb,0x74,0x89,0xe3,0x84,0x40,0x49,0x46,0x2,0x9f,0x24,0x8e,0xe9,0xf4,0x7a, + 0x24,0xc6,0x90,0xc4,0x9,0xdd,0x4e,0x1b,0xc7,0x75,0xf7,0x8d,0xaf,0x5e,0xf3,0xcb, + 0x55,0xab,0xc6,0xf7,0xaf,0x99,0x98,0xf8,0xc1,0xe5,0x97,0xbe,0xe1,0x1e,0xce,0x70, + 0x39,0x63,0xff,0x17,0xab,0xd7,0xeb,0xe2,0x99,0x67,0xf7,0x56,0xa,0x85,0xc2,0x86, + 0x56,0xab,0xb5,0xa3,0xd1,0x68,0xbc,0xa6,0xd3,0xe9,0x5e,0x12,0xc7,0xf1,0xb9,0x5a, + 0xeb,0x72,0x7f,0xd3,0x54,0xb6,0x33,0x23,0xa,0x93,0xa4,0xde,0xb,0xa3,0xba,0x14, + 0x76,0xda,0x73,0xdc,0x69,0x25,0xe5,0x21,0xcf,0xf3,0xe,0x79,0xbe,0x7f,0x44,0x2a, + 0x75,0xd8,0x51,0x72,0x7a,0xf7,0x63,0x4f,0xcc,0x55,0xaa,0xd5,0xce,0x59,0x67,0x6d, + 0x8d,0x7e,0xeb,0xd2,0x37,0xb4,0x78,0x9,0xca,0x19,0xff,0x4b,0x66,0xbb,0xdd,0x16, + 0xed,0x76,0xbb,0x32,0x35,0x35,0x7d,0xde,0xdc,0xdc,0xfc,0x1b,0xda,0xed,0xf6,0x8e, + 0x30,0x8a,0x36,0x68,0xad,0x47,0xde,0xf9,0xbb,0xd7,0x5e,0x4,0xf0,0x99,0xcf,0x7c, + 0xf6,0x3b,0x1b,0x36,0x6c,0x38,0x90,0x68,0x3d,0x23,0x4,0x47,0x3c,0xcf,0x3b,0x12, + 0x4,0xc1,0xa1,0x72,0xa9,0x34,0x59,0x28,0x14,0xe6,0xfc,0xc0,0xef,0x14,0xb,0x85, + 0x64,0x7c,0x7c,0xfc,0x25,0xff,0xb,0xa7,0x78,0x29,0xfe,0xd4,0xbb,0x4c,0x19,0x1, + 0xbe,0x6,0x7c,0x1e,0xb8,0xf3,0x45,0xdc,0x67,0x4b,0x76,0xec,0x6,0xea,0xff,0x57, + 0x7a,0xb1,0xd3,0x9d,0x85,0xc0,0x65,0xc0,0x1d,0x43,0xd7,0x2e,0x3,0x7e,0xf3,0x4, + 0x75,0x1e,0x2,0x76,0x2d,0xba,0xb6,0x3d,0x3,0x7a,0x74,0x11,0x68,0xef,0x59,0xa2, + 0xfe,0xe7,0x81,0xfd,0x67,0x12,0xa0,0xe1,0x7,0x3f,0xb7,0xcc,0xc8,0x8f,0x0,0x37, + 0x3,0x1f,0xcb,0xce,0xaf,0xcf,0x1a,0xb5,0xeb,0x4,0x40,0xd,0x52,0x4f,0xc0,0xce, + 0x65,0x7e,0xbb,0x3d,0x7b,0xdf,0xb5,0x4c,0xfd,0xfa,0xa2,0x76,0xee,0x1c,0xb2,0xaa, + 0x91,0xac,0xfe,0x43,0xa7,0xa,0xd0,0xa9,0x28,0xe9,0xeb,0x81,0x7d,0xc0,0x35,0xd9, + 0x48,0x7f,0x12,0x78,0x34,0x7b,0xf8,0xe2,0x8e,0x5c,0x3f,0x74,0xfe,0x9e,0x25,0x7e, + 0xf3,0x42,0xe5,0xf2,0x25,0x8e,0xdd,0xa7,0x61,0xa5,0xb7,0x66,0x75,0x6f,0x7d,0x29, + 0xa6,0xd8,0x27,0xb3,0x51,0xf9,0xd8,0x90,0xa5,0xec,0xcb,0xae,0xdf,0xb0,0x68,0xf4, + 0xf6,0x2f,0x2,0x6c,0x78,0x74,0x1f,0x5c,0xe2,0xbe,0xf5,0x65,0xac,0xe3,0x44,0x65, + 0x5f,0xf6,0x9c,0x91,0x45,0xf7,0xfd,0xc7,0xd3,0x4,0xf3,0x45,0x3,0x34,0x92,0x99, + 0xe8,0xb0,0x69,0xef,0xce,0x0,0xe9,0x3,0x31,0x32,0xc4,0x21,0x97,0xd,0xd5,0x1b, + 0x6,0x6e,0xd7,0xa2,0xef,0x77,0x2f,0x61,0xf6,0x97,0x2d,0xf3,0xfc,0xe1,0xf2,0xb1, + 0xac,0xde,0xed,0x43,0xe7,0x64,0xd7,0xb6,0xfc,0xba,0x48,0x7a,0xfb,0x50,0x7,0x47, + 0xb2,0x86,0xdc,0x37,0x64,0x9,0x97,0x2d,0xd3,0xc9,0x7,0x87,0xac,0x6f,0xd8,0x2, + 0x2f,0xcb,0x88,0xb3,0x7f,0xcf,0xdb,0x17,0xbd,0x2f,0xe6,0xbf,0xe1,0xd2,0xe7,0xbf, + 0xcf,0x2d,0x61,0x7d,0xbf,0x16,0x80,0x3e,0x95,0x35,0x7c,0x73,0x66,0x3d,0xd7,0x64, + 0xef,0x1f,0x1b,0x9a,0xef,0x23,0x19,0x50,0xf7,0x65,0xd6,0xb6,0x3d,0xe3,0xa0,0x5b, + 0x97,0xb0,0x92,0x6b,0x86,0x40,0xdf,0xb2,0x88,0xf0,0x2f,0x5f,0xe2,0xf9,0xf,0x2e, + 0x33,0x60,0x5b,0x86,0x6,0xa4,0xbe,0x92,0xd3,0xeb,0x54,0x1,0x7a,0x28,0x23,0xdf, + 0x5b,0x16,0x81,0xc6,0xd0,0x54,0x19,0x9e,0x8a,0xbb,0xb2,0xe9,0x56,0x5f,0xc6,0x35, + 0x6f,0x19,0xf2,0x5c,0xd7,0x9c,0x66,0xc7,0x86,0x5d,0xf9,0xed,0xd9,0xb3,0x87,0xc1, + 0xdd,0xf5,0x62,0x1,0x3a,0x59,0x2f,0xb6,0x25,0x33,0xe5,0x5d,0xc0,0xd6,0x2c,0xb5, + 0x73,0x43,0x6,0xd8,0x27,0x97,0xf8,0xed,0x30,0x58,0x4b,0x35,0xf2,0xe6,0xa1,0xeb, + 0x77,0x64,0xd6,0xf3,0xe0,0x10,0xcf,0x5c,0xb6,0xc4,0x31,0xb2,0x4,0x27,0x5d,0x3f, + 0x64,0x79,0x37,0x64,0xcf,0xbe,0x79,0x45,0xd5,0xda,0xf0,0x5f,0xa,0x4e,0x70,0xdc, + 0x62,0xd3,0x32,0xb2,0xcc,0x75,0xac,0xb5,0xf,0xda,0x13,0x97,0xdb,0xb3,0xdf,0x6d, + 0xcf,0xce,0xaf,0xcf,0xde,0x2f,0xcb,0xee,0x7b,0x7b,0x76,0xd8,0xec,0x5e,0x8b,0x8f, + 0xf9,0xa1,0x7b,0x90,0x7d,0x9e,0xb7,0xd6,0x5e,0x33,0xd4,0x86,0x6b,0xb2,0x7b,0x5d, + 0x3f,0x74,0x8d,0xec,0x19,0xfd,0x67,0x71,0x2a,0xc7,0xc9,0x4e,0xb1,0xca,0x12,0x62, + 0x6c,0xf1,0x79,0x5f,0xa5,0x5e,0x36,0x34,0xaa,0xd7,0x67,0x96,0xb2,0x7f,0xc8,0x3, + 0x7e,0x2e,0x3b,0xbf,0x73,0x88,0x60,0xfb,0x5c,0x76,0xfb,0x49,0x72,0xd0,0xf6,0x8c, + 0xf4,0x77,0x2e,0x6a,0x43,0xdf,0x61,0x6c,0x5e,0x89,0xe9,0x75,0x2a,0x1c,0xf4,0xdc, + 0x90,0xe9,0xf,0x3f,0xf8,0xea,0x21,0xf2,0xbd,0x73,0x68,0x8a,0xf5,0x89,0x7b,0xe7, + 0x22,0x2f,0xd5,0xe7,0xaa,0xcf,0xbf,0xc8,0x76,0xef,0xce,0x9e,0x77,0xc7,0x90,0xc2, + 0x5e,0xec,0x0,0x5e,0x52,0x80,0xee,0xcb,0xe6,0xf6,0xd7,0xb2,0xcf,0xfd,0x38,0x6a, + 0x3b,0x70,0xed,0xd0,0xef,0x36,0x2f,0xe1,0xad,0x16,0x37,0xf4,0x86,0x15,0x62,0x87, + 0xe5,0xee,0xd3,0x6f,0xd7,0xc7,0x4e,0x50,0xf7,0xf6,0xc,0xdc,0xfa,0x4a,0x91,0x74, + 0x3d,0x33,0xfb,0x4f,0x65,0x16,0xb2,0x3d,0x3,0xe2,0xda,0x21,0xb3,0x1e,0xf6,0x76, + 0x8b,0x35,0xd3,0x29,0x53,0xe3,0x12,0xc7,0x65,0x27,0x29,0x66,0x3f,0x99,0xb5,0xed, + 0xbe,0x65,0xbe,0xbf,0x2c,0xb3,0xec,0xed,0x2b,0xed,0xe6,0xeb,0x8b,0x84,0xde,0x52, + 0xe5,0x63,0x8b,0xa6,0xc1,0xe5,0x27,0xe9,0x21,0x97,0x8a,0xc5,0x96,0xa,0x75,0x38, + 0x41,0x10,0xdb,0xff,0xcd,0xf6,0x25,0xea,0xef,0xca,0xda,0xff,0xb5,0xa1,0xbe,0xec, + 0x5a,0x69,0x80,0xce,0x44,0x3e,0x68,0xd7,0x12,0x5c,0xb7,0x6b,0x99,0xc6,0xdf,0xb1, + 0x4c,0x24,0xbe,0x3b,0xb3,0x88,0x91,0x6c,0xda,0x7d,0x7e,0x99,0xfa,0x3b,0x86,0x6, + 0xe3,0xa4,0x23,0xfa,0x5f,0x67,0xc2,0xec,0xff,0x89,0x22,0xff,0x3f,0x4,0x27,0x2e, + 0xff,0x67,0x0,0xf0,0xcf,0xa9,0x38,0x5c,0x72,0xfa,0x36,0x0,0x0,0x0,0x0,0x49, + 0x45,0x4e,0x44,0xae,0x42,0x60,0x82, + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/setup.png 0x0,0x0,0x56,0x30, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, @@ -5578,7 +6176,7 @@ static const unsigned char qt_resource_data[] = { 0x1,0xee,0x1c,0x77,0x18,0xe0,0xce,0x71,0x87,0x1,0xee,0x1c,0x77,0x18,0xe0,0xce, 0x71,0x87,0x1,0xee,0x1c,0x7f,0x8d,0x8f,0xff,0x7f,0x0,0xc3,0xd4,0x5d,0x81,0xf3, 0xd7,0xda,0xf7,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, - // D:/????/??????/230526-????-2?????-1600x900-2/Cigarette/Resources/start.png + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/start.png 0x0,0x0,0x49,0x25, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, @@ -6752,7 +7350,7 @@ static const unsigned char qt_resource_data[] = { 0x98,0x6e,0xd3,0x0,0x98,0x6e,0xd3,0x0,0x98,0x6e,0xbf,0x63,0xed,0xff,0xd,0x0, 0xb6,0xfb,0xb9,0xa8,0x38,0x36,0xb7,0x97,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44, 0xae,0x42,0x60,0x82, - // D:/????/??????/230526-????-2?????-1600x900-2/Cigarette/Resources/lock.png + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/lock.png 0x0,0x0,0x1e,0xe2, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, @@ -7250,90 +7848,686 @@ static const unsigned char qt_resource_data[] = { 0x0,0x37,0x4e,0x0,0x6e,0x9c,0x0,0xdc,0x52,0xcd,0xfe,0x7f,0x0,0xd3,0x78,0xfb, 0x1e,0x64,0xfe,0x33,0xcd,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60, 0x82, - // D:/????/??????/230526-????-2?????-1600x900-2/Cigarette/Resources/exit.png - 0x0,0x0,0x2c,0x64, + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/cam6_yes.png + 0x0,0x0,0x25,0xa, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, - 0x0,0x0,0x80,0x0,0x0,0x0,0xa0,0x8,0x6,0x0,0x0,0x0,0xc4,0x92,0x64,0xfd, + 0x0,0x0,0x48,0x0,0x0,0x0,0x48,0x8,0x6,0x0,0x0,0x0,0x55,0xed,0xb3,0x47, 0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13, - 0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x6,0x85,0x69,0x54,0x58,0x74,0x58,0x4d,0x4c, - 0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x78,0x6d,0x70,0x0,0x0, - 0x0,0x0,0x0,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20,0x62,0x65,0x67, - 0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf,0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d, - 0x30,0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65,0x53,0x7a,0x4e,0x54,0x63, - 0x7a,0x6b,0x63,0x39,0x64,0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70,0x6d, - 0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f, - 0x62,0x65,0x3a,0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20,0x78,0x3a,0x78, - 0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20, - 0x43,0x6f,0x72,0x65,0x20,0x35,0x2e,0x36,0x2d,0x63,0x31,0x34,0x30,0x20,0x37,0x39, - 0x2e,0x31,0x36,0x30,0x34,0x35,0x31,0x2c,0x20,0x32,0x30,0x31,0x37,0x2f,0x30,0x35, - 0x2f,0x30,0x36,0x2d,0x30,0x31,0x3a,0x30,0x38,0x3a,0x32,0x31,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72,0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,0x39,0x39, - 0x39,0x2f,0x30,0x32,0x2f,0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e,0x74, - 0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x44,0x65, - 0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66,0x3a,0x61,0x62, - 0x6f,0x75,0x74,0x3d,0x22,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70, - 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62, - 0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x4d,0x4d,0x3d,0x22,0x68,0x74,0x74, - 0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d, - 0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3a,0x73,0x74,0x45,0x76,0x74,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78, - 0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54,0x79,0x70,0x65,0x2f,0x52,0x65,0x73, - 0x6f,0x75,0x72,0x63,0x65,0x45,0x76,0x65,0x6e,0x74,0x23,0x22,0x20,0x78,0x6d,0x6c, - 0x6e,0x73,0x3a,0x70,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x3d,0x22,0x68,0x74, - 0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f, - 0x6d,0x2f,0x70,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x2f,0x31,0x2e,0x30,0x2f, - 0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x64,0x63,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x70,0x75,0x72,0x6c,0x2e,0x6f,0x72,0x67,0x2f,0x64,0x63,0x2f,0x65, - 0x6c,0x65,0x6d,0x65,0x6e,0x74,0x73,0x2f,0x31,0x2e,0x31,0x2f,0x22,0x20,0x78,0x6d, - 0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54,0x6f,0x6f,0x6c,0x3d,0x22,0x41, - 0x64,0x6f,0x62,0x65,0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x43, - 0x43,0x20,0x28,0x4d,0x61,0x63,0x69,0x6e,0x74,0x6f,0x73,0x68,0x29,0x22,0x20,0x78, - 0x6d,0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x65,0x44,0x61,0x74,0x65,0x3d,0x22,0x32, - 0x30,0x32,0x30,0x2d,0x30,0x35,0x2d,0x32,0x35,0x54,0x32,0x30,0x3a,0x33,0x32,0x3a, - 0x30,0x32,0x2b,0x30,0x38,0x3a,0x30,0x30,0x22,0x20,0x78,0x6d,0x70,0x3a,0x4d,0x65, - 0x74,0x61,0x64,0x61,0x74,0x61,0x44,0x61,0x74,0x65,0x3d,0x22,0x32,0x30,0x32,0x30, - 0x2d,0x30,0x35,0x2d,0x32,0x35,0x54,0x32,0x30,0x3a,0x33,0x32,0x3a,0x30,0x32,0x2b, - 0x30,0x38,0x3a,0x30,0x30,0x22,0x20,0x78,0x6d,0x70,0x3a,0x4d,0x6f,0x64,0x69,0x66, - 0x79,0x44,0x61,0x74,0x65,0x3d,0x22,0x32,0x30,0x32,0x30,0x2d,0x30,0x35,0x2d,0x32, - 0x35,0x54,0x32,0x30,0x3a,0x33,0x32,0x3a,0x30,0x32,0x2b,0x30,0x38,0x3a,0x30,0x30, - 0x22,0x20,0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69,0x64,0x3a,0x39,0x61,0x61,0x34, - 0x66,0x33,0x64,0x34,0x2d,0x33,0x33,0x63,0x62,0x2d,0x34,0x62,0x63,0x63,0x2d,0x61, - 0x38,0x36,0x32,0x2d,0x32,0x38,0x38,0x64,0x64,0x31,0x66,0x31,0x30,0x30,0x37,0x63, - 0x22,0x20,0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a,0x64,0x6f,0x63,0x69,0x64,0x3a, - 0x70,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x3a,0x36,0x64,0x62,0x63,0x31,0x37, - 0x34,0x31,0x2d,0x63,0x65,0x33,0x30,0x2d,0x38,0x35,0x34,0x33,0x2d,0x38,0x32,0x39, - 0x34,0x2d,0x66,0x33,0x34,0x62,0x37,0x66,0x65,0x30,0x65,0x36,0x62,0x37,0x22,0x20, - 0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x4f,0x72,0x69,0x67,0x69,0x6e,0x61,0x6c,0x44,0x6f, - 0x63,0x75,0x6d,0x65,0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x65,0x66,0x64,0x39,0x61,0x38,0x39,0x66,0x2d,0x33,0x37,0x33,0x36,0x2d, - 0x34,0x66,0x63,0x31,0x2d,0x39,0x33,0x38,0x61,0x2d,0x65,0x63,0x62,0x37,0x65,0x64, - 0x30,0x30,0x34,0x32,0x38,0x36,0x22,0x20,0x70,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, - 0x70,0x3a,0x43,0x6f,0x6c,0x6f,0x72,0x4d,0x6f,0x64,0x65,0x3d,0x22,0x33,0x22,0x20, - 0x70,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x3a,0x49,0x43,0x43,0x50,0x72,0x6f, - 0x66,0x69,0x6c,0x65,0x3d,0x22,0x73,0x52,0x47,0x42,0x20,0x49,0x45,0x43,0x36,0x31, - 0x39,0x36,0x36,0x2d,0x32,0x2e,0x31,0x22,0x20,0x64,0x63,0x3a,0x66,0x6f,0x72,0x6d, - 0x61,0x74,0x3d,0x22,0x69,0x6d,0x61,0x67,0x65,0x2f,0x70,0x6e,0x67,0x22,0x3e,0x20, - 0x3c,0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x48,0x69,0x73,0x74,0x6f,0x72,0x79,0x3e,0x20, - 0x3c,0x72,0x64,0x66,0x3a,0x53,0x65,0x71,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x6c, - 0x69,0x20,0x73,0x74,0x45,0x76,0x74,0x3a,0x61,0x63,0x74,0x69,0x6f,0x6e,0x3d,0x22, - 0x63,0x72,0x65,0x61,0x74,0x65,0x64,0x22,0x20,0x73,0x74,0x45,0x76,0x74,0x3a,0x69, - 0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69, - 0x69,0x64,0x3a,0x65,0x66,0x64,0x39,0x61,0x38,0x39,0x66,0x2d,0x33,0x37,0x33,0x36, - 0x2d,0x34,0x66,0x63,0x31,0x2d,0x39,0x33,0x38,0x61,0x2d,0x65,0x63,0x62,0x37,0x65, - 0x64,0x30,0x30,0x34,0x32,0x38,0x36,0x22,0x20,0x73,0x74,0x45,0x76,0x74,0x3a,0x77, - 0x68,0x65,0x6e,0x3d,0x22,0x32,0x30,0x32,0x30,0x2d,0x30,0x35,0x2d,0x32,0x35,0x54, - 0x32,0x30,0x3a,0x33,0x32,0x3a,0x30,0x32,0x2b,0x30,0x38,0x3a,0x30,0x30,0x22,0x20, - 0x73,0x74,0x45,0x76,0x74,0x3a,0x73,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x41,0x67, - 0x65,0x6e,0x74,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65,0x20,0x50,0x68,0x6f,0x74,0x6f, - 0x73,0x68,0x6f,0x70,0x20,0x43,0x43,0x20,0x28,0x4d,0x61,0x63,0x69,0x6e,0x74,0x6f, - 0x73,0x68,0x29,0x22,0x2f,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x6c,0x69,0x20,0x73, + 0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0xa,0x4d,0x69,0x43,0x43,0x50,0x50,0x68,0x6f, + 0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66,0x69, + 0x6c,0x65,0x0,0x0,0x78,0xda,0x9d,0x53,0x77,0x58,0x93,0xf7,0x16,0x3e,0xdf,0xf7, + 0x65,0xf,0x56,0x42,0xd8,0xf0,0xb1,0x97,0x6c,0x81,0x0,0x22,0x23,0xac,0x8,0xc8, + 0x10,0x59,0xa2,0x10,0x92,0x0,0x61,0x84,0x10,0x12,0x40,0xc5,0x85,0x88,0xa,0x56, + 0x14,0x15,0x11,0x9c,0x48,0x55,0xc4,0x82,0xd5,0xa,0x48,0x9d,0x88,0xe2,0xa0,0x28, + 0xb8,0x67,0x41,0x8a,0x88,0x5a,0x8b,0x55,0x5c,0x38,0xee,0x1f,0xdc,0xa7,0xb5,0x7d, + 0x7a,0xef,0xed,0xed,0xfb,0xd7,0xfb,0xbc,0xe7,0x9c,0xe7,0xfc,0xce,0x79,0xcf,0xf, + 0x80,0x11,0x12,0x26,0x91,0xe6,0xa2,0x6a,0x0,0x39,0x52,0x85,0x3c,0x3a,0xd8,0x1f, + 0x8f,0x4f,0x48,0xc4,0xc9,0xbd,0x80,0x2,0x15,0x48,0xe0,0x4,0x20,0x10,0xe6,0xcb, + 0xc2,0x67,0x5,0xc5,0x0,0x0,0xf0,0x3,0x79,0x78,0x7e,0x74,0xb0,0x3f,0xfc,0x1, + 0xaf,0x6f,0x0,0x2,0x0,0x70,0xd5,0x2e,0x24,0x12,0xc7,0xe1,0xff,0x83,0xba,0x50, + 0x26,0x57,0x0,0x20,0x91,0x0,0xe0,0x22,0x12,0xe7,0xb,0x1,0x90,0x52,0x0,0xc8, + 0x2e,0x54,0xc8,0x14,0x0,0xc8,0x18,0x0,0xb0,0x53,0xb3,0x64,0xa,0x0,0x94,0x0, + 0x0,0x6c,0x79,0x7c,0x42,0x22,0x0,0xaa,0xd,0x0,0xec,0xf4,0x49,0x3e,0x5,0x0, + 0xd8,0xa9,0x93,0xdc,0x17,0x0,0xd8,0xa2,0x1c,0xa9,0x8,0x0,0x8d,0x1,0x0,0x99, + 0x28,0x47,0x24,0x2,0x40,0xbb,0x0,0x60,0x55,0x81,0x52,0x2c,0x2,0xc0,0xc2,0x0, + 0xa0,0xac,0x40,0x22,0x2e,0x4,0xc0,0xae,0x1,0x80,0x59,0xb6,0x32,0x47,0x2,0x80, + 0xbd,0x5,0x0,0x76,0x8e,0x58,0x90,0xf,0x40,0x60,0x0,0x80,0x99,0x42,0x2c,0xcc, + 0x0,0x20,0x38,0x2,0x0,0x43,0x1e,0x13,0xcd,0x3,0x20,0x4c,0x3,0xa0,0x30,0xd2, + 0xbf,0xe0,0xa9,0x5f,0x70,0x85,0xb8,0x48,0x1,0x0,0xc0,0xcb,0x95,0xcd,0x97,0x4b, + 0xd2,0x33,0x14,0xb8,0x95,0xd0,0x1a,0x77,0xf2,0xf0,0xe0,0xe2,0x21,0xe2,0xc2,0x6c, + 0xb1,0x42,0x61,0x17,0x29,0x10,0x66,0x9,0xe4,0x22,0x9c,0x97,0x9b,0x23,0x13,0x48, + 0xe7,0x3,0x4c,0xce,0xc,0x0,0x0,0x1a,0xf9,0xd1,0xc1,0xfe,0x38,0x3f,0x90,0xe7, + 0xe6,0xe4,0xe1,0xe6,0x66,0xe7,0x6c,0xef,0xf4,0xc5,0xa2,0xfe,0x6b,0xf0,0x6f,0x22, + 0x3e,0x21,0xf1,0xdf,0xfe,0xbc,0x8c,0x2,0x4,0x0,0x10,0x4e,0xcf,0xef,0xda,0x5f, + 0xe5,0xe5,0xd6,0x3,0x70,0xc7,0x1,0xb0,0x75,0xbf,0x6b,0xa9,0x5b,0x0,0xda,0x56, + 0x0,0x68,0xdf,0xf9,0x5d,0x33,0xdb,0x9,0xa0,0x5a,0xa,0xd0,0x7a,0xf9,0x8b,0x79, + 0x38,0xfc,0x40,0x1e,0x9e,0xa1,0x50,0xc8,0x3c,0x1d,0x1c,0xa,0xb,0xb,0xed,0x25, + 0x62,0xa1,0xbd,0x30,0xe3,0x8b,0x3e,0xff,0x33,0xe1,0x6f,0xe0,0x8b,0x7e,0xf6,0xfc, + 0x40,0x1e,0xfe,0xdb,0x7a,0xf0,0x0,0x71,0x9a,0x40,0x99,0xad,0xc0,0xa3,0x83,0xfd, + 0x71,0x61,0x6e,0x76,0xae,0x52,0x8e,0xe7,0xcb,0x4,0x42,0x31,0x6e,0xf7,0xe7,0x23, + 0xfe,0xc7,0x85,0x7f,0xfd,0x8e,0x29,0xd1,0xe2,0x34,0xb1,0x5c,0x2c,0x15,0x8a,0xf1, + 0x58,0x89,0xb8,0x50,0x22,0x4d,0xc7,0x79,0xb9,0x52,0x91,0x44,0x21,0xc9,0x95,0xe2, + 0x12,0xe9,0x7f,0x32,0xf1,0x1f,0x96,0xfd,0x9,0x93,0x77,0xd,0x0,0xac,0x86,0x4f, + 0xc0,0x4e,0xb6,0x7,0xb5,0xcb,0x6c,0xc0,0x7e,0xee,0x1,0x2,0x8b,0xe,0x58,0xd2, + 0x76,0x0,0x40,0x7e,0xf3,0x2d,0x8c,0x1a,0xb,0x91,0x0,0x10,0x67,0x34,0x32,0x79, + 0xf7,0x0,0x0,0x93,0xbf,0xf9,0x8f,0x40,0x2b,0x1,0x0,0xcd,0x97,0xa4,0xe3,0x0, + 0x0,0xbc,0xe8,0x18,0x5c,0xa8,0x94,0x17,0x4c,0xc6,0x8,0x0,0x0,0x44,0xa0,0x81, + 0x2a,0xb0,0x41,0x7,0xc,0xc1,0x14,0xac,0xc0,0xe,0x9c,0xc1,0x1d,0xbc,0xc0,0x17, + 0x2,0x61,0x6,0x44,0x40,0xc,0x24,0xc0,0x3c,0x10,0x42,0x6,0xe4,0x80,0x1c,0xa, + 0xa1,0x18,0x96,0x41,0x19,0x54,0xc0,0x3a,0xd8,0x4,0xb5,0xb0,0x3,0x1a,0xa0,0x11, + 0x9a,0xe1,0x10,0xb4,0xc1,0x31,0x38,0xd,0xe7,0xe0,0x12,0x5c,0x81,0xeb,0x70,0x17, + 0x6,0x60,0x18,0x9e,0xc2,0x18,0xbc,0x86,0x9,0x4,0x41,0xc8,0x8,0x13,0x61,0x21, + 0x3a,0x88,0x11,0x62,0x8e,0xd8,0x22,0xce,0x8,0x17,0x99,0x8e,0x4,0x22,0x61,0x48, + 0x34,0x92,0x80,0xa4,0x20,0xe9,0x88,0x14,0x51,0x22,0xc5,0xc8,0x72,0xa4,0x2,0xa9, + 0x42,0x6a,0x91,0x5d,0x48,0x23,0xf2,0x2d,0x72,0x14,0x39,0x8d,0x5c,0x40,0xfa,0x90, + 0xdb,0xc8,0x20,0x32,0x8a,0xfc,0x8a,0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3,0xd4, + 0x2,0x75,0x40,0xb9,0xa8,0x1f,0x1a,0x8a,0xc6,0xa0,0x73,0xd1,0x74,0x34,0xf,0x5d, + 0x80,0x96,0xa2,0x6b,0xd1,0x1a,0xb4,0x1e,0x3d,0x80,0xb6,0xa2,0xa7,0xd1,0x4b,0xe8, + 0x75,0x74,0x0,0x7d,0x8a,0x8e,0x63,0x80,0xd1,0x31,0xe,0x66,0x8c,0xd9,0x61,0x5c, + 0x8c,0x87,0x45,0x60,0x89,0x58,0x1a,0x26,0xc7,0x16,0x63,0xe5,0x58,0x35,0x56,0x8f, + 0x35,0x63,0x1d,0x58,0x37,0x76,0x15,0x1b,0xc0,0x9e,0x61,0xef,0x8,0x24,0x2,0x8b, + 0x80,0x13,0xec,0x8,0x5e,0x84,0x10,0xc2,0x6c,0x82,0x90,0x90,0x47,0x58,0x4c,0x58, + 0x43,0xa8,0x25,0xec,0x23,0xb4,0x12,0xba,0x8,0x57,0x9,0x83,0x84,0x31,0xc2,0x27, + 0x22,0x93,0xa8,0x4f,0xb4,0x25,0x7a,0x12,0xf9,0xc4,0x78,0x62,0x3a,0xb1,0x90,0x58, + 0x46,0xac,0x26,0xee,0x21,0x1e,0x21,0x9e,0x25,0x5e,0x27,0xe,0x13,0x5f,0x93,0x48, + 0x24,0xe,0xc9,0x92,0xe4,0x4e,0xa,0x21,0x25,0x90,0x32,0x49,0xb,0x49,0x6b,0x48, + 0xdb,0x48,0x2d,0xa4,0x53,0xa4,0x3e,0xd2,0x10,0x69,0x9c,0x4c,0x26,0xeb,0x90,0x6d, + 0xc9,0xde,0xe4,0x8,0xb2,0x80,0xac,0x20,0x97,0x91,0xb7,0x90,0xf,0x90,0x4f,0x92, + 0xfb,0xc9,0xc3,0xe4,0xb7,0x14,0x3a,0xc5,0x88,0xe2,0x4c,0x9,0xa2,0x24,0x52,0xa4, + 0x94,0x12,0x4a,0x35,0x65,0x3f,0xe5,0x4,0xa5,0x9f,0x32,0x42,0x99,0xa0,0xaa,0x51, + 0xcd,0xa9,0x9e,0xd4,0x8,0xaa,0x88,0x3a,0x9f,0x5a,0x49,0x6d,0xa0,0x76,0x50,0x2f, + 0x53,0x87,0xa9,0x13,0x34,0x75,0x9a,0x25,0xcd,0x9b,0x16,0x43,0xcb,0xa4,0x2d,0xa3, + 0xd5,0xd0,0x9a,0x69,0x67,0x69,0xf7,0x68,0x2f,0xe9,0x74,0xba,0x9,0xdd,0x83,0x1e, + 0x45,0x97,0xd0,0x97,0xd2,0x6b,0xe8,0x7,0xe9,0xe7,0xe9,0x83,0xf4,0x77,0xc,0xd, + 0x86,0xd,0x83,0xc7,0x48,0x62,0x28,0x19,0x6b,0x19,0x7b,0x19,0xa7,0x18,0xb7,0x19, + 0x2f,0x99,0x4c,0xa6,0x5,0xd3,0x97,0x99,0xc8,0x54,0x30,0xd7,0x32,0x1b,0x99,0x67, + 0x98,0xf,0x98,0x6f,0x55,0x58,0x2a,0xf6,0x2a,0x7c,0x15,0x91,0xca,0x12,0x95,0x3a, + 0x95,0x56,0x95,0x7e,0x95,0xe7,0xaa,0x54,0x55,0x73,0x55,0x3f,0xd5,0x79,0xaa,0xb, + 0x54,0xab,0x55,0xf,0xab,0x5e,0x56,0x7d,0xa6,0x46,0x55,0xb3,0x50,0xe3,0xa9,0x9, + 0xd4,0x16,0xab,0xd5,0xa9,0x1d,0x55,0xbb,0xa9,0x36,0xae,0xce,0x52,0x77,0x52,0x8f, + 0x50,0xcf,0x51,0x5f,0xa3,0xbe,0x5f,0xfd,0x82,0xfa,0x63,0xd,0xb2,0x86,0x85,0x46, + 0xa0,0x86,0x48,0xa3,0x54,0x63,0xb7,0xc6,0x19,0x8d,0x21,0x16,0xc6,0x32,0x65,0xf1, + 0x58,0x42,0xd6,0x72,0x56,0x3,0xeb,0x2c,0x6b,0x98,0x4d,0x62,0x5b,0xb2,0xf9,0xec, + 0x4c,0x76,0x5,0xfb,0x1b,0x76,0x2f,0x7b,0x4c,0x53,0x43,0x73,0xaa,0x66,0xac,0x66, + 0x91,0x66,0x9d,0xe6,0x71,0xcd,0x1,0xe,0xc6,0xb1,0xe0,0xf0,0x39,0xd9,0x9c,0x4a, + 0xce,0x21,0xce,0xd,0xce,0x7b,0x2d,0x3,0x2d,0x3f,0x2d,0xb1,0xd6,0x6a,0xad,0x66, + 0xad,0x7e,0xad,0x37,0xda,0x7a,0xda,0xbe,0xda,0x62,0xed,0x72,0xed,0x16,0xed,0xeb, + 0xda,0xef,0x75,0x70,0x9d,0x40,0x9d,0x2c,0x9d,0xf5,0x3a,0x6d,0x3a,0xf7,0x75,0x9, + 0xba,0x36,0xba,0x51,0xba,0x85,0xba,0xdb,0x75,0xcf,0xea,0x3e,0xd3,0x63,0xeb,0x79, + 0xe9,0x9,0xf5,0xca,0xf5,0xe,0xe9,0xdd,0xd1,0x47,0xf5,0x6d,0xf4,0xa3,0xf5,0x17, + 0xea,0xef,0xd6,0xef,0xd1,0x1f,0x37,0x30,0x34,0x8,0x36,0x90,0x19,0x6c,0x31,0x38, + 0x63,0xf0,0xcc,0x90,0x63,0xe8,0x6b,0x98,0x69,0xb8,0xd1,0xf0,0x84,0xe1,0xa8,0x11, + 0xcb,0x68,0xba,0x91,0xc4,0x68,0xa3,0xd1,0x49,0xa3,0x27,0xb8,0x26,0xee,0x87,0x67, + 0xe3,0x35,0x78,0x17,0x3e,0x66,0xac,0x6f,0x1c,0x62,0xac,0x34,0xde,0x65,0xdc,0x6b, + 0x3c,0x61,0x62,0x69,0x32,0xdb,0xa4,0xc4,0xa4,0xc5,0xe4,0xbe,0x29,0xcd,0x94,0x6b, + 0x9a,0x66,0xba,0xd1,0xb4,0xd3,0x74,0xcc,0xcc,0xc8,0x2c,0xdc,0xac,0xd8,0xac,0xc9, + 0xec,0x8e,0x39,0xd5,0x9c,0x6b,0x9e,0x61,0xbe,0xd9,0xbc,0xdb,0xfc,0x8d,0x85,0xa5, + 0x45,0x9c,0xc5,0x4a,0x8b,0x36,0x8b,0xc7,0x96,0xda,0x96,0x7c,0xcb,0x5,0x96,0x4d, + 0x96,0xf7,0xac,0x98,0x56,0x3e,0x56,0x79,0x56,0xf5,0x56,0xd7,0xac,0x49,0xd6,0x5c, + 0xeb,0x2c,0xeb,0x6d,0xd6,0x57,0x6c,0x50,0x1b,0x57,0x9b,0xc,0x9b,0x3a,0x9b,0xcb, + 0xb6,0xa8,0xad,0x9b,0xad,0xc4,0x76,0x9b,0x6d,0xdf,0x14,0xe2,0x14,0x8f,0x29,0xd2, + 0x29,0xf5,0x53,0x6e,0xda,0x31,0xec,0xfc,0xec,0xa,0xec,0x9a,0xec,0x6,0xed,0x39, + 0xf6,0x61,0xf6,0x25,0xf6,0x6d,0xf6,0xcf,0x1d,0xcc,0x1c,0x12,0x1d,0xd6,0x3b,0x74, + 0x3b,0x7c,0x72,0x74,0x75,0xcc,0x76,0x6c,0x70,0xbc,0xeb,0xa4,0xe1,0x34,0xc3,0xa9, + 0xc4,0xa9,0xc3,0xe9,0x57,0x67,0x1b,0x67,0xa1,0x73,0x9d,0xf3,0x35,0x17,0xa6,0x4b, + 0x90,0xcb,0x12,0x97,0x76,0x97,0x17,0x53,0x6d,0xa7,0x8a,0xa7,0x6e,0x9f,0x7a,0xcb, + 0x95,0xe5,0x1a,0xee,0xba,0xd2,0xb5,0xd3,0xf5,0xa3,0x9b,0xbb,0x9b,0xdc,0xad,0xd9, + 0x6d,0xd4,0xdd,0xcc,0x3d,0xc5,0x7d,0xab,0xfb,0x4d,0x2e,0x9b,0x1b,0xc9,0x5d,0xc3, + 0x3d,0xef,0x41,0xf4,0xf0,0xf7,0x58,0xe2,0x71,0xcc,0xe3,0x9d,0xa7,0x9b,0xa7,0xc2, + 0xf3,0x90,0xe7,0x2f,0x5e,0x76,0x5e,0x59,0x5e,0xfb,0xbd,0x1e,0x4f,0xb3,0x9c,0x26, + 0x9e,0xd6,0x30,0x6d,0xc8,0xdb,0xc4,0x5b,0xe0,0xbd,0xcb,0x7b,0x60,0x3a,0x3e,0x3d, + 0x65,0xfa,0xce,0xe9,0x3,0x3e,0xc6,0x3e,0x2,0x9f,0x7a,0x9f,0x87,0xbe,0xa6,0xbe, + 0x22,0xdf,0x3d,0xbe,0x23,0x7e,0xd6,0x7e,0x99,0x7e,0x7,0xfc,0x9e,0xfb,0x3b,0xfa, + 0xcb,0xfd,0x8f,0xf8,0xbf,0xe1,0x79,0xf2,0x16,0xf1,0x4e,0x5,0x60,0x1,0xc1,0x1, + 0xe5,0x1,0xbd,0x81,0x1a,0x81,0xb3,0x3,0x6b,0x3,0x1f,0x4,0x99,0x4,0xa5,0x7, + 0x35,0x5,0x8d,0x5,0xbb,0x6,0x2f,0xc,0x3e,0x15,0x42,0xc,0x9,0xd,0x59,0x1f, + 0x72,0x93,0x6f,0xc0,0x17,0xf2,0x1b,0xf9,0x63,0x33,0xdc,0x67,0x2c,0x9a,0xd1,0x15, + 0xca,0x8,0x9d,0x15,0x5a,0x1b,0xfa,0x30,0xcc,0x26,0x4c,0x1e,0xd6,0x11,0x8e,0x86, + 0xcf,0x8,0xdf,0x10,0x7e,0x6f,0xa6,0xf9,0x4c,0xe9,0xcc,0xb6,0x8,0x88,0xe0,0x47, + 0x6c,0x88,0xb8,0x1f,0x69,0x19,0x99,0x17,0xf9,0x7d,0x14,0x29,0x2a,0x32,0xaa,0x2e, + 0xea,0x51,0xb4,0x53,0x74,0x71,0x74,0xf7,0x2c,0xd6,0xac,0xe4,0x59,0xfb,0x67,0xbd, + 0x8e,0xf1,0x8f,0xa9,0x8c,0xb9,0x3b,0xdb,0x6a,0xb6,0x72,0x76,0x67,0xac,0x6a,0x6c, + 0x52,0x6c,0x63,0xec,0x9b,0xb8,0x80,0xb8,0xaa,0xb8,0x81,0x78,0x87,0xf8,0x45,0xf1, + 0x97,0x12,0x74,0x13,0x24,0x9,0xed,0x89,0xe4,0xc4,0xd8,0xc4,0x3d,0x89,0xe3,0x73, + 0x2,0xe7,0x6c,0x9a,0x33,0x9c,0xe4,0x9a,0x54,0x96,0x74,0x63,0xae,0xe5,0xdc,0xa2, + 0xb9,0x17,0xe6,0xe9,0xce,0xcb,0x9e,0x77,0x3c,0x59,0x35,0x59,0x90,0x7c,0x38,0x85, + 0x98,0x12,0x97,0xb2,0x3f,0xe5,0x83,0x20,0x42,0x50,0x2f,0x18,0x4f,0xe5,0xa7,0x6e, + 0x4d,0x1d,0x13,0xf2,0x84,0x9b,0x85,0x4f,0x45,0xbe,0xa2,0x8d,0xa2,0x51,0xb1,0xb7, + 0xb8,0x4a,0x3c,0x92,0xe6,0x9d,0x56,0x95,0xf6,0x38,0xdd,0x3b,0x7d,0x43,0xfa,0x68, + 0x86,0x4f,0x46,0x75,0xc6,0x33,0x9,0x4f,0x52,0x2b,0x79,0x91,0x19,0x92,0xb9,0x23, + 0xf3,0x4d,0x56,0x44,0xd6,0xde,0xac,0xcf,0xd9,0x71,0xd9,0x2d,0x39,0x94,0x9c,0x94, + 0x9c,0xa3,0x52,0xd,0x69,0x96,0xb4,0x2b,0xd7,0x30,0xb7,0x28,0xb7,0x4f,0x66,0x2b, + 0x2b,0x93,0xd,0xe4,0x79,0xe6,0x6d,0xca,0x1b,0x93,0x87,0xca,0xf7,0xe4,0x23,0xf9, + 0x73,0xf3,0xdb,0x15,0x6c,0x85,0x4c,0xd1,0xa3,0xb4,0x52,0xae,0x50,0xe,0x16,0x4c, + 0x2f,0xa8,0x2b,0x78,0x5b,0x18,0x5b,0x78,0xb8,0x48,0xbd,0x48,0x5a,0xd4,0x33,0xdf, + 0x66,0xfe,0xea,0xf9,0x23,0xb,0x82,0x16,0x7c,0xbd,0x90,0xb0,0x50,0xb8,0xb0,0xb3, + 0xd8,0xb8,0x78,0x59,0xf1,0xe0,0x22,0xbf,0x45,0xbb,0x16,0x23,0x8b,0x53,0x17,0x77, + 0x2e,0x31,0x5d,0x52,0xba,0x64,0x78,0x69,0xf0,0xd2,0x7d,0xcb,0x68,0xcb,0xb2,0x96, + 0xfd,0x50,0xe2,0x58,0x52,0x55,0xf2,0x6a,0x79,0xdc,0xf2,0x8e,0x52,0x83,0xd2,0xa5, + 0xa5,0x43,0x2b,0x82,0x57,0x34,0x95,0xa9,0x94,0xc9,0xcb,0x6e,0xae,0xf4,0x5a,0xb9, + 0x63,0x15,0x61,0x95,0x64,0x55,0xef,0x6a,0x97,0xd5,0x5b,0x56,0x7f,0x2a,0x17,0x95, + 0x5f,0xac,0x70,0xac,0xa8,0xae,0xf8,0xb0,0x46,0xb8,0xe6,0xe2,0x57,0x4e,0x5f,0xd5, + 0x7c,0xf5,0x79,0x6d,0xda,0xda,0xde,0x4a,0xb7,0xca,0xed,0xeb,0x48,0xeb,0xa4,0xeb, + 0x6e,0xac,0xf7,0x59,0xbf,0xaf,0x4a,0xbd,0x6a,0x41,0xd5,0xd0,0x86,0xf0,0xd,0xad, + 0x1b,0xf1,0x8d,0xe5,0x1b,0x5f,0x6d,0x4a,0xde,0x74,0xa1,0x7a,0x6a,0xf5,0x8e,0xcd, + 0xb4,0xcd,0xca,0xcd,0x3,0x35,0x61,0x35,0xed,0x5b,0xcc,0xb6,0xac,0xdb,0xf2,0xa1, + 0x36,0xa3,0xf6,0x7a,0x9d,0x7f,0x5d,0xcb,0x56,0xfd,0xad,0xab,0xb7,0xbe,0xd9,0x26, + 0xda,0xd6,0xbf,0xdd,0x77,0x7b,0xf3,0xe,0x83,0x1d,0x15,0x3b,0xde,0xef,0x94,0xec, + 0xbc,0xb5,0x2b,0x78,0x57,0x6b,0xbd,0x45,0x7d,0xf5,0x6e,0xd2,0xee,0x82,0xdd,0x8f, + 0x1a,0x62,0x1b,0xba,0xbf,0xe6,0x7e,0xdd,0xb8,0x47,0x77,0x4f,0xc5,0x9e,0x8f,0x7b, + 0xa5,0x7b,0x7,0xf6,0x45,0xef,0xeb,0x6a,0x74,0x6f,0x6c,0xdc,0xaf,0xbf,0xbf,0xb2, + 0x9,0x6d,0x52,0x36,0x8d,0x1e,0x48,0x3a,0x70,0xe5,0x9b,0x80,0x6f,0xda,0x9b,0xed, + 0x9a,0x77,0xb5,0x70,0x5a,0x2a,0xe,0xc2,0x41,0xe5,0xc1,0x27,0xdf,0xa6,0x7c,0x7b, + 0xe3,0x50,0xe8,0xa1,0xce,0xc3,0xdc,0xc3,0xcd,0xdf,0x99,0x7f,0xb7,0xf5,0x8,0xeb, + 0x48,0x79,0x2b,0xd2,0x3a,0xbf,0x75,0xac,0x2d,0xa3,0x6d,0xa0,0x3d,0xa1,0xbd,0xef, + 0xe8,0x8c,0xa3,0x9d,0x1d,0x5e,0x1d,0x47,0xbe,0xb7,0xff,0x7e,0xef,0x31,0xe3,0x63, + 0x75,0xc7,0x35,0x8f,0x57,0x9e,0xa0,0x9d,0x28,0x3d,0xf1,0xf9,0xe4,0x82,0x93,0xe3, + 0xa7,0x64,0xa7,0x9e,0x9d,0x4e,0x3f,0x3d,0xd4,0x99,0xdc,0x79,0xf7,0x4c,0xfc,0x99, + 0x6b,0x5d,0x51,0x5d,0xbd,0x67,0x43,0xcf,0x9e,0x3f,0x17,0x74,0xee,0x4c,0xb7,0x5f, + 0xf7,0xc9,0xf3,0xde,0xe7,0x8f,0x5d,0xf0,0xbc,0x70,0xf4,0x22,0xf7,0x62,0xdb,0x25, + 0xb7,0x4b,0xad,0x3d,0xae,0x3d,0x47,0x7e,0x70,0xfd,0xe1,0x48,0xaf,0x5b,0x6f,0xeb, + 0x65,0xf7,0xcb,0xed,0x57,0x3c,0xae,0x74,0xf4,0x4d,0xeb,0x3b,0xd1,0xef,0xd3,0x7f, + 0xfa,0x6a,0xc0,0xd5,0x73,0xd7,0xf8,0xd7,0x2e,0x5d,0x9f,0x79,0xbd,0xef,0xc6,0xec, + 0x1b,0xb7,0x6e,0x26,0xdd,0x1c,0xb8,0x25,0xba,0xf5,0xf8,0x76,0xf6,0xed,0x17,0x77, + 0xa,0xee,0x4c,0xdc,0x5d,0x7a,0x8f,0x78,0xaf,0xfc,0xbe,0xda,0xfd,0xea,0x7,0xfa, + 0xf,0xea,0x7f,0xb4,0xfe,0xb1,0x65,0xc0,0x6d,0xe0,0xf8,0x60,0xc0,0x60,0xcf,0xc3, + 0x59,0xf,0xef,0xe,0x9,0x87,0x9e,0xfe,0x94,0xff,0xd3,0x87,0xe1,0xd2,0x47,0xcc, + 0x47,0xd5,0x23,0x46,0x23,0x8d,0x8f,0x9d,0x1f,0x1f,0x1b,0xd,0x1a,0xbd,0xf2,0x64, + 0xce,0x93,0xe1,0xa7,0xb2,0xa7,0x13,0xcf,0xca,0x7e,0x56,0xff,0x79,0xeb,0x73,0xab, + 0xe7,0xdf,0xfd,0xe2,0xfb,0x4b,0xcf,0x58,0xfc,0xd8,0xf0,0xb,0xf9,0x8b,0xcf,0xbf, + 0xae,0x79,0xa9,0xf3,0x72,0xef,0xab,0xa9,0xaf,0x3a,0xc7,0x23,0xc7,0x1f,0xbc,0xce, + 0x79,0x3d,0xf1,0xa6,0xfc,0xad,0xce,0xdb,0x7d,0xef,0xb8,0xef,0xba,0xdf,0xc7,0xbd, + 0x1f,0x99,0x28,0xfc,0x40,0xfe,0x50,0xf3,0xd1,0xfa,0x63,0xc7,0xa7,0xd0,0x4f,0xf7, + 0x3e,0xe7,0x7c,0xfe,0xfc,0x2f,0xf7,0x84,0xf3,0xfb,0x25,0xd2,0x9f,0x33,0x0,0x0, + 0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x25,0x0,0x0,0x80,0x83,0x0,0x0, + 0xf9,0xff,0x0,0x0,0x80,0xe9,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0, + 0x3a,0x98,0x0,0x0,0x17,0x6f,0x92,0x5f,0xc5,0x46,0x0,0x0,0x1a,0x37,0x49,0x44, + 0x41,0x54,0x78,0xda,0xec,0x9b,0x7b,0xb0,0x65,0x55,0x7d,0xe7,0x3f,0x6b,0xad,0xfd, + 0x3a,0xef,0x7b,0xcf,0xbd,0xb7,0xdf,0x6f,0x5a,0x10,0x41,0xe8,0x36,0x2a,0xa8,0xc5, + 0xd8,0x98,0x68,0x50,0x41,0xc0,0x98,0x9,0x31,0xa6,0x80,0x22,0x83,0x1a,0x1f,0x40, + 0x12,0x93,0x19,0xc6,0x19,0x9a,0x32,0x93,0xa9,0x32,0x53,0x63,0xa8,0x9a,0xa9,0xd2, + 0x98,0x29,0x50,0x24,0x41,0xd1,0x88,0xe0,0x73,0x34,0xa1,0xd1,0x12,0x7c,0xe,0xd, + 0xd8,0x18,0x79,0x74,0x37,0xcd,0xed,0xee,0xfb,0xbe,0xe7,0xdc,0xf3,0xdc,0x8f,0xb5, + 0xd6,0xfc,0xb1,0xf7,0x39,0x7d,0xfa,0xf6,0xed,0xa6,0xbb,0xb9,0x8d,0x99,0xaa,0x59, + 0x55,0xfb,0xde,0x73,0xf6,0xde,0x6b,0xef,0xb5,0xbe,0xeb,0xf7,0xf8,0xfe,0x7e,0xeb, + 0x77,0x84,0xb5,0x96,0x33,0xdd,0x7e,0xf5,0xd4,0x53,0x9b,0x9e,0xda,0xb3,0xe7,0x12, + 0x6d,0x71,0xb7,0x9e,0x7d,0xf6,0x8f,0xb6,0x6c,0xd9,0xfc,0xab,0x72,0xb9,0xac,0xf9, + 0x35,0xb5,0xb7,0x5f,0x76,0x99,0xa8,0xd7,0xe6,0x2f,0x8,0xf2,0xf9,0xf7,0xd,0xd, + 0xd,0x5d,0x28,0x84,0x70,0x6a,0xb5,0xda,0x93,0x9d,0x76,0xfb,0x8b,0x85,0x62,0xf1, + 0xc7,0xdf,0xfd,0xee,0xf7,0xfa,0x63,0x13,0x67,0x1a,0xa0,0x9f,0x3e,0xfa,0xe8,0x3b, + 0xf,0x8e,0x1f,0xbc,0xd5,0xc2,0xd6,0xd8,0x40,0xb3,0xdd,0xae,0x57,0x86,0x2a,0x5f, + 0xbc,0xec,0x6d,0xbf,0xf5,0x9f,0xb,0x85,0x82,0x7d,0xb9,0xc1,0xb9,0xe8,0xa2,0xd7, + 0x97,0x7c,0xdf,0xff,0xca,0xef,0x5d,0x73,0xcd,0x5b,0xdf,0x70,0xf1,0x1b,0x28,0x97, + 0xcb,0x8,0x21,0x68,0x34,0x1a,0x3c,0xfe,0xf8,0xe3,0xdc,0x7d,0xf7,0xe7,0x77,0xcf, + 0xce,0xce,0x5e,0xf6,0xd8,0x63,0xbb,0x27,0xcf,0x38,0x40,0x8f,0xfc,0xe0,0xfb,0xbf, + 0x7f,0xf0,0x85,0xf1,0x4f,0x20,0xd4,0x59,0x8e,0xe7,0xa1,0x2d,0x74,0xba,0x5d,0xac, + 0x35,0xb5,0xb3,0x5f,0xb1,0xf5,0xa6,0xb5,0x6b,0xd6,0x3c,0xb8,0x7e,0xc3,0xfa,0xf9, + 0x97,0xb,0x9c,0x77,0xbc,0xe3,0x1d,0x45,0xa5,0xe4,0xa3,0x7f,0xfe,0xe7,0x7f,0x71, + 0xfe,0xd6,0xad,0x5b,0x69,0xb7,0xdb,0x18,0x63,0x52,0x49,0x91,0x82,0x4a,0xbe,0xc2, + 0xec,0xe1,0x59,0xfe,0xf2,0xbf,0x7d,0xe2,0x85,0xbd,0xcf,0xef,0x7b,0xcd,0x23,0x3f, + 0x7c,0x64,0xe6,0x8c,0x1,0xf4,0xf0,0x43,0xbb,0x3e,0x30,0xfe,0xc2,0xf8,0x7f,0xf1, + 0x5c,0xaf,0xaa,0x5c,0xf,0xb,0x58,0x61,0xc1,0x82,0xb1,0x16,0x1,0x73,0xc5,0x52, + 0x61,0x57,0xa5,0x52,0xf9,0x91,0xe7,0x7a,0x3f,0xca,0xe7,0x73,0x7b,0xd6,0xaf,0x5f, + 0x37,0x5f,0x2a,0x95,0xce,0xc8,0x80,0xde,0xfa,0xd6,0xb7,0xa,0x21,0xf8,0xe4,0xad, + 0xb7,0xfe,0xc7,0x3f,0x3b,0xe7,0x9c,0x73,0x68,0x34,0x1a,0xfd,0x6b,0x16,0x4b,0x5e, + 0xe4,0x39,0x64,0xe,0x71,0xb7,0xba,0x9b,0xcb,0xe6,0x2f,0xe3,0x7f,0xed,0xfc,0xbb, + 0xaf,0x4d,0xcc,0x4f,0xfe,0xce,0x19,0x1,0xe8,0x9f,0xfe,0xe9,0x9f,0x6f,0x3e,0xf0, + 0xfc,0xb,0x9f,0xca,0xe7,0xf2,0xb8,0x9e,0x8b,0x5,0x8c,0x35,0x3d,0xad,0x46,0x22, + 0x48,0x74,0x42,0x9c,0xc4,0x60,0x21,0x97,0xcb,0xd5,0x2a,0x95,0xf2,0x37,0x4b,0xe5, + 0xd2,0xf,0x2a,0x95,0xf2,0xff,0x89,0xe3,0x64,0xef,0xba,0xb5,0x6b,0xe6,0x86,0x87, + 0x87,0xcd,0x72,0x8d,0xe9,0x92,0x4b,0x2e,0x59,0xfb,0x96,0xb7,0x5c,0x3a,0xfe,0xc1, + 0xf,0x7e,0x88,0x46,0x63,0x81,0xde,0xbc,0x2d,0x96,0x9c,0xc8,0x51,0xb3,0x35,0xae, + 0x5f,0xb8,0x9e,0x9,0x3b,0xc1,0xf7,0xd6,0x7f,0x8f,0x87,0xee,0xfd,0x67,0xbe,0x70, + 0xdf,0x3d,0xdb,0x9c,0xe5,0x6,0xe7,0xdb,0xdf,0xf9,0xdf,0x7f,0x76,0x70,0xfc,0xe0, + 0x5f,0xe7,0x72,0x79,0x5c,0xdf,0x43,0x1b,0x3,0x1c,0xbd,0x8,0xd6,0x1a,0xa4,0x52, + 0x4,0x8e,0xc2,0x68,0x43,0x18,0x86,0x43,0x87,0x27,0x26,0xde,0x7b,0x78,0x62,0xf2, + 0xbd,0x9e,0xe7,0x31,0x3c,0x54,0xb9,0x3f,0x89,0x93,0x7,0x9e,0x7e,0xe6,0xd9,0x1f, + 0xc7,0x71,0x72,0x70,0xc3,0xfa,0xf5,0xcd,0xd,0x1b,0xd6,0xbd,0x24,0xa3,0x6e,0xad, + 0xb9,0xfc,0xa2,0x8b,0x2f,0xc6,0x58,0x83,0x63,0x1d,0x12,0x12,0x2c,0x16,0x7,0x7, + 0xf,0x8f,0xbf,0x6a,0xff,0x15,0xbf,0xd0,0xbf,0xe0,0x1b,0xe5,0x6f,0xb0,0x32,0x59, + 0xc9,0xb6,0x8b,0xb6,0xf3,0xa5,0xfb,0xef,0x7b,0xdf,0xb2,0x2,0xf4,0xc0,0x83,0x5f, + 0xff,0xc4,0xf4,0xf4,0xcc,0xc7,0x73,0xf9,0x3c,0x81,0x1f,0xa0,0xb5,0xee,0x9,0xd, + 0x58,0x81,0xe8,0xad,0x99,0xe8,0xcb,0x36,0x42,0x8,0x5c,0xcf,0xc5,0x13,0x1e,0xd6, + 0x5a,0x92,0x44,0x33,0x39,0x35,0x7d,0xd5,0xe1,0x89,0x89,0xab,0xf2,0xf9,0x2,0xd5, + 0x6a,0xf5,0xc1,0x99,0x99,0x99,0xaf,0x24,0x3a,0xfe,0xc9,0xe4,0xc4,0xd4,0x78,0xb9, + 0x5c,0x6a,0x9f,0x77,0xde,0xab,0x4e,0x19,0xac,0x20,0x8,0x5e,0xbd,0x72,0x6c,0x25, + 0x61,0xd4,0xe5,0x69,0xfd,0x34,0x9b,0xd5,0x66,0x14,0x8a,0x9c,0xc8,0x71,0x7f,0x74, + 0x3f,0x5f,0xe,0xbf,0xcc,0x1d,0xc5,0x3b,0xb8,0xc0,0xb9,0x80,0xf9,0x70,0x9e,0x15, + 0x63,0x2b,0x18,0x1b,0x1b,0x3d,0x67,0xd9,0x0,0xfa,0xf2,0x57,0xfe,0xf1,0xae,0xfa, + 0xc2,0xc2,0xb5,0xf9,0x5c,0x1e,0xcf,0xf3,0x8e,0x80,0x43,0x4f,0x80,0x6c,0xfa,0xaf, + 0xf,0xce,0xd1,0xdf,0x6d,0xf6,0xc5,0x51,0xa,0xc7,0x75,0x10,0x16,0xb4,0x36,0x4c, + 0x4c,0x4c,0x5c,0x71,0xe8,0xf0,0xa1,0x2b,0x1c,0xe5,0x50,0x1d,0x1e,0xfe,0xb1,0xef, + 0x7b,0x9f,0x3d,0x78,0xf0,0xd0,0x77,0xb5,0xd6,0x13,0xb3,0xb3,0xb3,0xc9,0xf6,0xed, + 0xdb,0x4e,0x4a,0xd,0x95,0xa3,0xbc,0x9c,0x9b,0x63,0xc1,0x34,0xb8,0xa6,0x71,0xd, + 0x57,0x78,0x57,0xf0,0xc9,0xc2,0x27,0x99,0xb3,0x73,0x7c,0xbc,0xfd,0x71,0xae,0xf4, + 0xae,0xe4,0x3d,0xde,0x7b,0x68,0xd8,0x6,0xd6,0x5a,0x1c,0xc7,0xc1,0x75,0x5d,0x77, + 0x59,0x0,0xfa,0x87,0x7b,0xbf,0xf4,0xf7,0xed,0x76,0xfb,0xf7,0x8b,0x85,0x22,0x52, + 0xca,0x14,0x1c,0xd1,0x67,0x12,0xe9,0xc7,0xde,0x1f,0xcb,0x11,0x95,0x13,0x3,0xd7, + 0x7b,0x10,0x8a,0x23,0x97,0x95,0x92,0x28,0xc7,0x3,0x4,0xd6,0x5a,0xe6,0xe7,0xe7, + 0x2f,0x9a,0x9d,0x9d,0xbd,0xe8,0xe9,0x67,0x9e,0xa5,0x52,0xa9,0x3c,0xb2,0x7a,0xd5, + 0xca,0x4f,0x8f,0x8f,0x1f,0x7c,0x78,0xa4,0x5a,0x3d,0xf4,0xc2,0xc1,0x83,0xfa,0xec, + 0x57,0x6c,0x3d,0xae,0x41,0xed,0x76,0x3a,0x87,0xe6,0x1a,0xb3,0xbc,0x72,0xe4,0x5c, + 0x6e,0xce,0xdd,0xcc,0xce,0xd6,0x4e,0x36,0xab,0xcd,0x38,0x38,0x8,0x23,0xb8,0x31, + 0x77,0x23,0x6,0x43,0x62,0x13,0x7c,0xc7,0xa7,0xd1,0x68,0x50,0xaf,0xd7,0xa7,0x5f, + 0x32,0x40,0x5f,0xb8,0xe7,0xef,0x1f,0xe8,0x74,0xba,0x57,0x94,0x4b,0x29,0x9f,0xe8, + 0x4f,0x92,0xa3,0x27,0x7f,0x14,0x30,0x3,0x92,0x73,0x14,0x38,0xc7,0x0,0x7a,0xa4, + 0x49,0x21,0x90,0x9e,0xdb,0x7,0xab,0xd1,0x68,0xbe,0x71,0xa1,0xbe,0x70,0xf1,0xb3, + 0xcf,0xed,0x25,0x97,0xcb,0xfd,0xa4,0x5a,0xad,0xde,0x73,0xa8,0x70,0xe8,0xeb,0x71, + 0x1c,0x1f,0xd8,0xb8,0x71,0xe3,0x31,0x52,0x15,0xc7,0xc9,0x37,0xf7,0xec,0xd9,0x73, + 0xdb,0x39,0x67,0x9f,0xc3,0x7,0x83,0xf,0xe2,0xb,0x9f,0x5b,0x5b,0xb7,0x62,0xad, + 0xe5,0xc6,0xdc,0x8d,0x6c,0x57,0xdb,0x99,0xb7,0x29,0xe3,0xc8,0xe5,0x72,0xfc,0xec, + 0x67,0x3f,0x63,0x7e,0x7e,0xfe,0x41,0xb5,0x73,0xe7,0xce,0x97,0x22,0x39,0xdf,0x68, + 0xb7,0xdb,0x97,0xe5,0xf3,0x79,0xa9,0x8d,0x4e,0x3d,0x55,0xe6,0x1d,0x4,0x12,0x21, + 0x8e,0x4c,0x5d,0x8,0x1,0x52,0x81,0x50,0xe9,0x67,0x21,0x8e,0x82,0xe7,0x78,0xe0, + 0x88,0x63,0xce,0x9,0x84,0x10,0x28,0x29,0x91,0x4a,0xa,0x21,0x84,0x88,0x93,0x64, + 0x4d,0xa3,0xbe,0x70,0xc9,0xa1,0xc3,0x13,0xef,0xab,0xd5,0xea,0xef,0x9c,0x99,0x99, + 0x75,0xc2,0x30,0xea,0xfc,0xf2,0xa9,0x7f,0xb9,0xe2,0xc9,0x27,0xf7,0xfc,0x41,0xab, + 0xdd,0x12,0x9e,0xeb,0x3e,0xf5,0xf3,0x9f,0xff,0xec,0x1d,0x17,0xbf,0xe1,0xd,0x2b, + 0x70,0xe0,0x37,0xc4,0x6f,0x20,0x10,0x3c,0x63,0x9e,0x61,0x67,0x7e,0x27,0x65,0x59, + 0x26,0x21,0xc1,0x75,0x5d,0xac,0xb5,0xdc,0x75,0xd7,0x9d,0xed,0x56,0xab,0xfd,0xc1, + 0xd3,0x76,0xf3,0xff,0xf3,0xd3,0x7f,0xfb,0x80,0x14,0xe2,0x9d,0x23,0x23,0x23,0xd2, + 0x1a,0x83,0xb5,0x16,0x6b,0x6d,0x4a,0xbc,0xac,0x4d,0x21,0x52,0x12,0x29,0x65,0xf6, + 0x59,0x21,0x84,0xca,0xd4,0xcc,0x60,0xfb,0x6e,0xdf,0x1e,0x2d,0x54,0xe2,0x68,0x11, + 0x3b,0x6,0x9c,0x45,0x12,0xd8,0x93,0x28,0x48,0xdf,0x2f,0x84,0xc4,0x51,0x6a,0x46, + 0x4a,0x39,0x21,0x85,0x58,0xa5,0x1c,0x55,0x6e,0xb5,0x5b,0x93,0xbe,0x1f,0x7c,0xe1, + 0xde,0x7b,0xef,0x79,0x62,0xc3,0xfa,0xf5,0xff,0xf0,0xe1,0x8f,0x7c,0x84,0xa4,0x9b, + 0x10,0xc7,0x31,0x75,0x5b,0xa7,0x22,0x2a,0x68,0x34,0x8e,0xe3,0x50,0x2c,0x16,0xb9, + 0xfb,0xee,0xcf,0xf3,0xc5,0x2f,0x7e,0xf1,0x1d,0x3f,0xf9,0xc9,0x4f,0xbf,0x25,0x4f, + 0x7,0x9c,0xff,0xf1,0xb7,0x7f,0xf7,0xd9,0x89,0xb9,0xb9,0x2b,0x1c,0xcf,0x93,0x8e, + 0x4c,0x1f,0x21,0x84,0x40,0x4a,0x49,0xe0,0x7,0xe4,0xf3,0x79,0x7c,0xdf,0x7,0x40, + 0x27,0x1a,0xad,0x35,0x3a,0x49,0x30,0x5a,0x3,0x6,0x21,0x4,0x42,0xa,0x10,0x69, + 0xbf,0x25,0xa5,0xe4,0x78,0xe0,0x88,0x63,0xcf,0x49,0x99,0xbe,0x5b,0x29,0x7,0x81, + 0x20,0x49,0xf4,0x68,0x92,0xc4,0xe7,0x2b,0x57,0x8d,0x46,0x49,0xec,0x35,0x1a,0x8d, + 0xf5,0x7,0xf,0x1e,0xfc,0xd8,0x35,0xd7,0xfc,0xc1,0x5,0x8f,0x3e,0xfa,0xe8,0x1f, + 0xde,0xf1,0x37,0x77,0x30,0x57,0x9f,0x23,0x5f,0xcc,0xb3,0xb6,0xb4,0x96,0x5c,0x21, + 0x47,0xb1,0x58,0xa4,0xd3,0xe9,0xf0,0x99,0x4f,0x7f,0x9a,0xfb,0xee,0xbb,0xef,0xc3, + 0x43,0x43,0x43,0xdf,0x3e,0xad,0x50,0xe3,0x81,0xaf,0x7f,0xf3,0xf2,0x1f,0xfc,0xfc, + 0xb1,0x3b,0x1d,0x3f,0x18,0xdd,0xb2,0x66,0x15,0x43,0xbe,0x87,0x11,0xa2,0xef,0xb2, + 0x93,0x24,0x5d,0x19,0xa9,0x24,0xae,0xe3,0xf5,0x35,0xc9,0x5a,0x8b,0x45,0x80,0x90, + 0x48,0xa1,0x10,0x52,0x20,0xb0,0xc8,0xec,0xda,0xd1,0x92,0x24,0x4e,0x20,0x35,0xe2, + 0xb8,0x12,0x67,0xb1,0x48,0x4,0x8e,0xe3,0xe0,0x79,0x2e,0x61,0x14,0xb2,0xb0,0xd0, + 0x20,0x8a,0x22,0xba,0xdd,0x2e,0x4a,0xa9,0xc9,0xd7,0xbf,0xee,0xb5,0xab,0x3f,0xf6, + 0xb1,0x3f,0xdd,0xa8,0x93,0xe4,0x3f,0x9d,0x77,0xfe,0xf9,0x97,0x6e,0xdc,0xb8,0x11, + 0x21,0xa4,0x19,0x1f,0x1f,0x77,0xf6,0xfc,0xe2,0xc9,0x9f,0x36,0x9b,0xad,0x5b,0x1f, + 0x79,0xf4,0xd1,0x67,0x7a,0x4f,0x3d,0x65,0x23,0xfd,0xe4,0x9e,0xa7,0xfe,0xa4,0xd5, + 0xea,0x8c,0x8e,0x94,0x87,0xd0,0x40,0x14,0xc7,0xb8,0xbe,0x8f,0xcd,0x6c,0xcd,0xf8, + 0xc1,0x71,0x26,0x27,0xa7,0x28,0x97,0xcb,0xac,0x5b,0xb7,0x96,0x4a,0x65,0x8,0x0, + 0x63,0xd2,0xeb,0x16,0x91,0xfe,0xb7,0x16,0x61,0xd,0xc6,0x1a,0xa4,0x0,0x21,0x25, + 0x88,0x9e,0x2c,0x59,0x8e,0x72,0x67,0x2f,0xda,0x44,0xa6,0x5e,0xe0,0x38,0xa,0xc7, + 0x55,0x74,0xbb,0x5d,0xea,0xb,0xb,0xc4,0x71,0x8c,0x40,0x20,0xa5,0xa2,0x1b,0x86, + 0xc3,0x4f,0xfe,0x62,0xcf,0x77,0xbe,0xfb,0xdd,0xef,0xbd,0xd,0xb8,0xe1,0x64,0x9e, + 0x7c,0xca,0x0,0x85,0x51,0xf4,0x86,0x82,0xef,0x11,0x8,0x8b,0xe,0xbb,0x44,0xae, + 0x8b,0xe3,0xf9,0xa9,0xe1,0xcd,0x54,0x4d,0x48,0xd1,0xb7,0x9,0x3d,0xbe,0x93,0xe, + 0x32,0x5,0xc1,0x66,0x6c,0xda,0x58,0xb,0xd6,0xa0,0x2d,0x88,0xcc,0x7e,0x48,0x31, + 0xa0,0x7a,0x42,0x1e,0x21,0x49,0x62,0x31,0x24,0x8b,0x8d,0x39,0x78,0x8e,0x8b,0x72, + 0x14,0xdd,0x6e,0x48,0x7d,0xa1,0x8e,0x4e,0x34,0x20,0x88,0xb5,0xee,0xf1,0x32,0x6f, + 0x76,0x6e,0xee,0xad,0xa7,0x32,0xdf,0x53,0x52,0xb1,0xcf,0xdf,0x73,0xef,0x3d,0xd3, + 0xb3,0xb3,0xef,0xee,0x86,0x61,0x20,0xad,0x21,0x17,0xf8,0x94,0x8a,0x25,0x82,0x20, + 0xc0,0x75,0xdc,0xc,0x18,0x30,0x99,0xd1,0x76,0x1c,0x7,0x9b,0x49,0x8e,0x94,0xf2, + 0xc8,0x54,0x7a,0x1a,0x64,0x53,0xb9,0x33,0xc6,0x64,0xc6,0x3d,0x75,0x6e,0x29,0xc8, + 0xaa,0xdf,0x47,0xc,0x18,0x1f,0x71,0x14,0x87,0xea,0xd3,0x74,0x5c,0xd7,0xc1,0x75, + 0x5c,0x3a,0xdd,0x2e,0xb5,0x5a,0x1d,0xad,0x13,0x94,0x52,0x44,0x71,0xaa,0xf2,0x0, + 0xd6,0x18,0x92,0x24,0x31,0xeb,0xd6,0xaf,0xfd,0xec,0x7b,0xde,0x7d,0xf5,0x7,0x96, + 0x5d,0x82,0xe6,0xe6,0x66,0xdf,0x9b,0xcf,0xe5,0x52,0x4e,0x82,0xc5,0x73,0x5d,0x8c, + 0x31,0xc4,0x71,0x8c,0x72,0x14,0xd2,0x48,0x84,0x48,0x6d,0x0,0x80,0xd1,0x66,0x60, + 0x2e,0xd9,0xc4,0xac,0x1,0x2b,0xb2,0x70,0x23,0x55,0x29,0xa5,0x54,0xda,0x27,0x8b, + 0xf4,0x8d,0x4e,0x30,0x46,0x63,0x8c,0x46,0xa,0x81,0x90,0x32,0x93,0xae,0x63,0xbd, + 0x1c,0x64,0xac,0xd7,0x71,0x68,0xb7,0xdb,0xd4,0x17,0x1a,0x7d,0x70,0xc2,0x28,0xca, + 0xa4,0xa8,0x1f,0xed,0xa0,0x94,0x92,0x13,0x13,0x93,0xd7,0x2,0xcb,0xb,0xd0,0x37, + 0xbe,0xf9,0xad,0x1b,0x52,0x31,0x76,0x48,0x94,0x2,0x6b,0x90,0x32,0x5,0xc4,0x18, + 0x83,0x8e,0x35,0xc2,0x4d,0x57,0x3c,0x15,0xe7,0x9e,0xd7,0x11,0x48,0x29,0xa8,0x2f, + 0x34,0x68,0xb7,0xda,0xe4,0x73,0x1,0xe5,0x4a,0xf9,0x68,0xd8,0x6c,0x8f,0x16,0xa5, + 0x7d,0x1c,0xc7,0xcd,0x34,0xcb,0xa2,0xb5,0xc6,0x24,0x49,0x4a,0x16,0xa5,0x44,0x2a, + 0x27,0x7d,0x6f,0x2f,0x84,0x50,0xa,0xdf,0x73,0x69,0x35,0x5b,0xd4,0x1b,0xd,0xb4, + 0xd6,0x48,0x29,0x89,0xa2,0x88,0x24,0x49,0x38,0x62,0xd5,0x6c,0x5f,0xfd,0xdb,0x9d, + 0x4e,0x70,0xb2,0xf3,0x3e,0x69,0x80,0xe,0x3c,0x7f,0xe0,0x43,0x8e,0x52,0x24,0x49, + 0x8c,0x30,0x26,0xf5,0x42,0xe2,0x88,0x9f,0xd1,0x5a,0xa3,0x1c,0x89,0x10,0xce,0x11, + 0x37,0x2d,0x5,0x8e,0xeb,0x22,0x11,0xcc,0xce,0xcd,0x33,0x3e,0x31,0xc1,0x8a,0x91, + 0x11,0x2a,0x95,0x72,0x6,0x86,0x45,0x49,0x90,0x4a,0x11,0xc5,0x86,0xe9,0x99,0x69, + 0xf6,0xef,0xdb,0x87,0xef,0x79,0xac,0x59,0xbb,0x86,0xb1,0xd1,0x31,0x82,0x20,0xd, + 0x7a,0x8d,0x4d,0xd5,0x30,0xd1,0x9,0xc4,0xe9,0xe2,0x78,0x9e,0x8f,0xeb,0xb9,0xb4, + 0x5a,0x6d,0x16,0x9a,0x4d,0x8c,0x31,0x28,0x99,0x4a,0x4e,0xa2,0x35,0x3,0xe1,0xf1, + 0xb1,0xf6,0xeb,0x24,0xdb,0x49,0xf3,0xa0,0x99,0xd9,0xd9,0x57,0xc7,0x71,0x4c,0xd8, + 0xed,0xa2,0x8d,0xee,0x13,0xc3,0xd4,0x7b,0xa4,0x2b,0x63,0x33,0x71,0x10,0x22,0x5d, + 0xed,0x30,0xc,0x79,0x6a,0xcf,0x53,0x3c,0xfe,0xc4,0x13,0x60,0x34,0xe7,0x9d,0x7d, + 0x36,0x67,0x6d,0xde,0x4,0x42,0x62,0xad,0x45,0x9,0xf0,0x15,0x78,0x12,0xa4,0xb0, + 0x24,0x3a,0xa1,0xd9,0x6a,0xd2,0x68,0x36,0x88,0xe3,0xf8,0xc8,0xb4,0xb2,0xe7,0x39, + 0x8e,0x8b,0xef,0x7a,0xf8,0x7e,0x80,0xeb,0xba,0x18,0xab,0x69,0x2c,0x34,0x68,0x34, + 0x9b,0x99,0x1d,0x17,0xa9,0xe4,0x68,0xbd,0x44,0x8,0x33,0x0,0x90,0x14,0x7c,0xfe, + 0xee,0x2f,0xec,0x5a,0x36,0x9,0xba,0xf7,0x4b,0xf7,0xfd,0x87,0x30,0xc,0x9d,0x7c, + 0x2e,0x8f,0x1b,0x38,0x4,0xbe,0x8f,0xeb,0x79,0x38,0x8e,0x83,0x72,0x9c,0xcc,0xe3, + 0x88,0x23,0x9e,0x2c,0xf3,0x58,0xc6,0x58,0x6a,0xf3,0x35,0x5a,0xed,0x26,0xab,0x56, + 0xad,0x66,0x75,0x2e,0x20,0x9f,0xb,0x88,0xa3,0x18,0x1,0x18,0x2b,0x88,0xc,0x8, + 0x63,0xb0,0x56,0x30,0x36,0x32,0x4a,0xf1,0xb5,0xaf,0x45,0x20,0x8,0x82,0x0,0x21, + 0x5,0xc6,0xa6,0xc4,0xd2,0x51,0xe,0x52,0xa,0xe2,0x28,0x42,0x2a,0x7,0xcf,0x75, + 0x68,0x77,0xbb,0xd4,0xea,0x75,0x94,0x52,0x20,0x4,0x71,0x9c,0x90,0x24,0xba,0x2f, + 0xd9,0xc7,0x80,0x93,0x7d,0x75,0x94,0xc3,0x42,0xa3,0xf1,0xba,0x65,0x3,0xe8,0xf0, + 0xa1,0xc3,0xef,0x73,0x1c,0x17,0xe9,0xba,0x8,0xdf,0xc7,0x2d,0x14,0x29,0xe6,0x72, + 0x28,0x21,0x30,0x46,0xf7,0xdd,0x78,0x6f,0x50,0xbd,0xcf,0xb9,0x20,0xe0,0xdc,0x57, + 0xbe,0x92,0x30,0xe,0xc9,0xe5,0xf2,0xe4,0x82,0x0,0x9d,0xe8,0xfe,0xc0,0xd,0x2, + 0xd3,0x4b,0x19,0x9,0xf0,0x7d,0x9f,0x7c,0xbe,0x80,0xc0,0x60,0xb4,0x41,0xdb,0x34, + 0xd9,0x26,0x11,0x34,0x5b,0x2d,0xe6,0x1b,0xb,0xf8,0xb9,0x3c,0x46,0x40,0xa7,0x56, + 0x47,0x5a,0x43,0xae,0x50,0xc0,0x68,0x4d,0x92,0xe8,0x7e,0x7e,0x99,0x17,0x61,0x50, + 0x4a,0x4a,0xa2,0x28,0xce,0x2f,0xb,0x40,0xdf,0xfa,0xf6,0x77,0xde,0xdd,0xed,0x76, + 0x5f,0xb5,0x7a,0xf5,0x6a,0x12,0x21,0x98,0x6b,0x75,0x68,0xc4,0x86,0x11,0x21,0xa9, + 0x16,0xf2,0x4,0x6e,0x6a,0x34,0xb5,0xc9,0x68,0xa0,0x48,0x49,0x9b,0xd5,0x16,0xa5, + 0x14,0x2b,0x56,0xad,0x58,0x34,0x5a,0xb,0xb8,0x7d,0xb2,0x78,0x84,0xe2,0x58,0xc, + 0x16,0xad,0x63,0xb0,0x6,0x63,0x2c,0x4a,0x4a,0xc2,0x28,0x62,0x66,0x76,0x8e,0x43, + 0xd3,0xb3,0x74,0x8c,0xa5,0x34,0x5c,0xc5,0x55,0x92,0xb8,0xd5,0x24,0x2f,0x5,0x85, + 0x42,0x21,0xe5,0x39,0x26,0xb5,0x39,0x42,0x2c,0x1,0xd1,0x51,0x1f,0x2d,0x48,0x91, + 0x65,0x3a,0x5f,0x22,0x40,0xbf,0xfc,0xe5,0xbf,0x8c,0x2e,0x2c,0x34,0x5e,0x5f,0x2a, + 0x96,0x58,0xb9,0x62,0x5,0x33,0xb,0xb,0x74,0x66,0x6b,0x44,0xca,0xc3,0x9,0x63, + 0x4c,0xb2,0x80,0x4a,0x62,0xa2,0x4e,0x7,0x6d,0x2d,0x52,0xa,0x5c,0xc7,0xc1,0x75, + 0x3d,0x2,0x3f,0xc0,0xf7,0x3d,0x90,0x20,0x91,0xe9,0x4,0x44,0xea,0xa1,0x1c,0x95, + 0x86,0x1a,0xd6,0x58,0xac,0x35,0x58,0x9b,0x71,0x27,0x93,0xa4,0x4,0xd2,0x18,0x40, + 0xd0,0xd,0x23,0x66,0xe6,0xe6,0x38,0x70,0xf0,0x10,0x13,0x33,0x33,0xe4,0xab,0xa3, + 0xd0,0xe9,0x50,0xf0,0x3,0x72,0xb9,0x2,0x2e,0x86,0x30,0xc,0xd1,0xc6,0x1e,0x1, + 0xe6,0x24,0x69,0x9d,0x59,0xe,0x80,0x26,0x26,0x27,0xb7,0x2b,0x25,0x5f,0x3d,0x3c, + 0x5c,0x41,0x4a,0x41,0xde,0xf7,0x58,0x31,0x32,0x4c,0xe2,0x5,0x18,0xad,0x39,0x70, + 0xe8,0x30,0x53,0xe3,0xe3,0x84,0xad,0x16,0x7e,0x10,0xe0,0xb9,0x4e,0x1a,0x7,0xf9, + 0x1e,0xc5,0x42,0x91,0x72,0xb9,0x4c,0xa9,0x54,0xa4,0x50,0x28,0xe0,0xfb,0x7e,0xe6, + 0x7e,0x63,0x12,0x99,0xe0,0x66,0xb6,0xb,0x1,0xda,0x68,0x8c,0x36,0x98,0xc4,0xf4, + 0x73,0xd8,0xc6,0x18,0xe6,0xeb,0xb,0x4c,0xcf,0xd5,0xd0,0xda,0x50,0xa,0x2,0x5c, + 0x1,0x8e,0x31,0x84,0x61,0x7,0x29,0xa1,0x90,0xcb,0xa1,0x7b,0x44,0xd7,0x8a,0xa5, + 0xd5,0xeb,0x38,0x5f,0x24,0x82,0xfb,0xbe,0xfc,0x8f,0x7f,0xfd,0xbb,0xef,0x79,0xf7, + 0xc7,0x4e,0x1b,0xa0,0x4e,0xbb,0xf3,0x5b,0x4a,0xaa,0xb,0x5d,0xd7,0x23,0x4e,0x12, + 0x7c,0xd7,0x65,0x38,0x17,0xb0,0xf7,0xf9,0x3,0x84,0x49,0x42,0xb7,0xd3,0x41,0x27, + 0x9,0x43,0xc3,0xc3,0x94,0x4b,0x25,0x1c,0x47,0x61,0x8c,0x21,0x8a,0x22,0xe6,0xe7, + 0xe7,0x99,0x99,0x99,0xc1,0x71,0x1c,0xca,0xe5,0x32,0xab,0x56,0xaf,0xa2,0x3a,0x5c, + 0xc5,0xf7,0x7d,0x8c,0x31,0x84,0x61,0x84,0xca,0xd2,0x21,0xda,0xe8,0xd4,0x36,0x65, + 0xcc,0x1a,0x6b,0x69,0xb5,0x3b,0xb4,0x3a,0x6d,0x4,0x96,0x42,0x21,0x4f,0xb9,0x58, + 0x44,0x48,0x41,0x37,0xa,0x89,0x92,0x18,0x55,0xc8,0xe1,0x7b,0xee,0x71,0x54,0xc5, + 0x2e,0x29,0x4d,0x83,0xb6,0x52,0x29,0x45,0xa7,0xd3,0x19,0x7a,0xf0,0xeb,0xdf,0x78, + 0xf3,0x15,0x97,0xbf,0xf3,0xe1,0xd3,0x2,0x28,0x4e,0xe2,0x37,0x5a,0xcb,0xda,0xde, + 0x63,0xe3,0x44,0xb3,0x7f,0xef,0x5e,0xe,0xec,0x7f,0x9e,0x4a,0xb5,0xca,0x86,0x8d, + 0x1b,0x29,0x9d,0x73,0x36,0x8e,0x94,0x69,0x24,0x3d,0x90,0x4,0xd3,0x46,0xd3,0xed, + 0x74,0x69,0x36,0x9b,0x4c,0xcf,0x4c,0xf3,0xe4,0x93,0x4f,0x32,0x32,0x5c,0x65,0xf3, + 0xe6,0xcd,0x54,0x47,0xaa,0x58,0x2c,0x5a,0x9b,0x7e,0x58,0xd2,0xff,0x3f,0xc0,0x77, + 0xa4,0x80,0x42,0x10,0x20,0x1d,0x7,0xcf,0xf7,0xd1,0x46,0xa3,0x5a,0x2d,0x46,0xdc, + 0x12,0xa5,0x42,0x3e,0xb5,0x7b,0x8b,0xed,0xcb,0xd2,0xb1,0xec,0x91,0xbc,0x40,0x2f, + 0x52,0x91,0x92,0x28,0x89,0x2b,0xad,0x76,0x7b,0xe8,0xb4,0x25,0x48,0x6b,0x73,0xbe, + 0xb1,0x6,0xa5,0x14,0x5a,0x1b,0x66,0x66,0xa6,0xd9,0xbb,0x7f,0x3f,0x1b,0x36,0x6c, + 0x60,0xd3,0xa6,0x8d,0x14,0xa,0x85,0x34,0xec,0x10,0x47,0x58,0x71,0x92,0xe8,0x2c, + 0x19,0xe6,0x92,0xb,0x2,0x2a,0x95,0x32,0x2b,0x56,0x8c,0x51,0xab,0xd5,0x38,0x7c, + 0xf8,0x30,0x8f,0x3d,0xbe,0x9b,0xf5,0x6b,0xd6,0xb2,0x79,0xcb,0x16,0x5c,0xcf,0xcd, + 0x2,0xc2,0x74,0xe,0x89,0x4e,0xfa,0xf6,0x8,0x63,0xf0,0x3d,0xf,0xaf,0xe0,0xe1, + 0x79,0x1e,0xdd,0x28,0xa2,0xd3,0x89,0x19,0x19,0xaa,0xe0,0xbb,0x2e,0x71,0x92,0x90, + 0x68,0x9d,0x86,0x1f,0xfd,0xe8,0x5f,0x2c,0x21,0x3d,0x76,0x49,0x7a,0x28,0xa5,0xc0, + 0x24,0xba,0x1a,0x76,0xc3,0x91,0xd3,0x6,0xc8,0x1a,0x5b,0xc6,0xa6,0xc4,0x2a,0x8a, + 0x22,0x1a,0x8d,0x26,0x17,0x5e,0xf0,0x6a,0x36,0x6c,0xd8,0x40,0x10,0x78,0x74,0xda, + 0x21,0x51,0x14,0x81,0x48,0x5d,0xa7,0x52,0x8a,0x5c,0xe0,0xe3,0xf9,0x1e,0x42,0x8, + 0xba,0xdd,0x2e,0x71,0xac,0x71,0x5d,0xf,0xdf,0xf7,0x29,0x14,0xa,0x4c,0x4d,0x4d, + 0x71,0x78,0x62,0x82,0xb9,0x5a,0x8d,0x73,0xcf,0x3d,0x97,0x42,0xa1,0x48,0x6c,0xd2, + 0xf0,0xc0,0xf5,0x3c,0xa2,0x6e,0x98,0x32,0x62,0xc7,0xa1,0x52,0x28,0xe0,0x7b,0x1e, + 0x61,0x18,0xa2,0xa4,0xa0,0x5c,0xc8,0xe3,0x38,0x8a,0x24,0xd1,0x68,0x6d,0x71,0x54, + 0x66,0xfc,0x8f,0x2b,0x3d,0x76,0x60,0xa3,0x60,0x70,0x8f,0xcc,0xf6,0x73,0x57,0xf6, + 0x45,0x88,0xf5,0x8b,0xb8,0x79,0x2b,0x11,0x90,0x64,0xb1,0xd0,0xda,0xb5,0x6b,0xa8, + 0xc,0x55,0x58,0xa8,0x37,0x78,0xe6,0x99,0x67,0xa9,0xd7,0x17,0x8,0x2,0x9f,0x62, + 0xb1,0xd0,0x1f,0x4b,0x2e,0x8,0xb0,0x8,0x3c,0xd7,0x67,0xfd,0xfa,0x35,0x54,0xca, + 0x3e,0xad,0x76,0x87,0x6e,0xb7,0x4b,0xa9,0x58,0xc2,0x51,0xe,0xae,0xeb,0x33,0x35, + 0x35,0xc9,0x13,0x8f,0x3f,0x4e,0x71,0xb8,0x8a,0xca,0x15,0x70,0x3c,0x97,0x91,0xa1, + 0x12,0x15,0xcf,0x47,0x1a,0x83,0xab,0x1c,0x24,0x96,0x38,0x8e,0x30,0x46,0xe3,0x29, + 0x89,0x90,0x12,0x8b,0x40,0x9b,0x98,0x66,0xb3,0x41,0xbb,0xdd,0xa2,0x3a,0x32,0x92, + 0xa5,0x45,0xec,0x92,0x26,0x48,0x1c,0x3,0x99,0xed,0xc7,0x65,0xc6,0x5a,0x6c,0x36, + 0xb7,0xd3,0x27,0x8a,0x99,0x7d,0x70,0x1c,0x87,0x20,0x17,0x30,0x39,0x31,0xc9,0x81, + 0x17,0xc6,0x99,0x99,0x99,0x5,0xa0,0x6c,0x4a,0x4,0x81,0x8f,0xb5,0xf4,0xb7,0x7b, + 0xf6,0xef,0x7b,0x81,0xbd,0x7b,0xf,0xb2,0xf5,0xac,0xad,0x9c,0x7d,0xce,0x26,0xce, + 0x7e,0xc5,0x26,0x82,0xa0,0x4c,0xad,0xbe,0x80,0x9b,0x68,0xaa,0x23,0xc3,0x20,0x2c, + 0x87,0xf,0x1d,0x66,0x62,0x6a,0x8a,0xca,0xea,0xb5,0xac,0x5c,0xb5,0x1a,0x91,0xf3, + 0xa9,0x35,0xea,0xe4,0x95,0x40,0x8a,0xf4,0x79,0xbd,0x74,0x4c,0x1a,0xa8,0x4a,0x8c, + 0x15,0x34,0x1a,0x4d,0xe,0x1e,0x1c,0xc7,0x18,0xcb,0xe8,0xd8,0x58,0x2a,0x41,0x76, + 0x9,0xbe,0x73,0x22,0xe1,0xb0,0x2f,0x62,0xb7,0x4e,0x16,0x20,0x6b,0x2d,0x52,0xa5, + 0xe9,0x86,0x7a,0x7d,0x81,0x7d,0xfb,0xf6,0xd3,0x6c,0xb6,0x6,0xd4,0x3a,0x4d,0x37, + 0x8,0x21,0xd1,0xda,0x20,0xa5,0xa2,0xdd,0x6e,0x71,0xe0,0xc0,0x3e,0xe6,0xe7,0xe7, + 0xf9,0xd5,0xd3,0x4f,0xf3,0x8a,0x57,0x6c,0xe2,0x8d,0x6f,0x7c,0x1d,0x2b,0x56,0x8e, + 0x31,0x67,0xe6,0x8,0xe3,0x90,0x72,0xb9,0x8c,0x15,0x92,0xe9,0x99,0x59,0x6c,0x12, + 0xa1,0xe3,0x98,0xe,0xb0,0x30,0x5f,0x67,0xfd,0xe8,0x30,0x8e,0x82,0x24,0xd6,0x59, + 0xaa,0x43,0x64,0x4,0x34,0xcd,0x71,0xc7,0x49,0x82,0xeb,0xf9,0xe4,0x73,0xb9,0xec, + 0xbc,0x39,0x91,0x6d,0x3e,0xa,0x84,0x1e,0xe0,0x22,0xa5,0x17,0x39,0x63,0x4c,0xfe, + 0xb4,0x1,0x72,0x1c,0xe7,0x85,0x28,0x8e,0xd7,0xcb,0x2c,0xa5,0x31,0x39,0x39,0x49, + 0xbb,0xdd,0x45,0x29,0x85,0x14,0x92,0x4e,0xd4,0xa5,0x1b,0xa6,0x36,0xc3,0xf3,0x3d, + 0x5c,0x37,0xab,0xdc,0x10,0x0,0x11,0xb5,0xda,0x14,0x61,0xa7,0xc1,0xf3,0xfb,0xf7, + 0x31,0x31,0x39,0xc1,0x6f,0xbf,0xed,0x2d,0x6c,0xdc,0xb8,0x8e,0x38,0x8e,0x89,0x13, + 0x4d,0x79,0x68,0x8,0x10,0x4c,0x4e,0x4f,0x33,0xfe,0xcb,0x3d,0x54,0xc7,0x56,0x50, + 0x8,0x3c,0x7c,0xd7,0xc3,0x51,0xa2,0x1f,0xd4,0xa6,0x74,0x5b,0xa0,0xb5,0xa1,0x1b, + 0x86,0xf8,0xbe,0xcf,0x9a,0x35,0x6b,0x70,0x1d,0x7,0x6b,0xcc,0xe0,0xf4,0x8f,0xcd, + 0x63,0x1f,0xbb,0x35,0x89,0x10,0x82,0x76,0xbb,0x43,0xa5,0x5c,0x5e,0x28,0x97,0x4b, + 0x87,0x4f,0x1b,0xa0,0x42,0xa1,0xb0,0xcb,0x34,0x9b,0x57,0xc7,0x71,0x5c,0x4c,0x92, + 0x98,0x66,0xb3,0xd9,0xe7,0x3a,0x22,0x63,0xc8,0x61,0x14,0xd3,0x6a,0xb7,0x9,0x72, + 0x1,0x8e,0x72,0xd0,0x5a,0x53,0x28,0x14,0x18,0x1e,0xae,0xd2,0x58,0xa8,0x53,0x2e, + 0x79,0x68,0x1d,0xf3,0xe8,0x23,0x8f,0xd0,0xac,0xd7,0xb9,0xea,0xea,0xcb,0xd9,0xb0, + 0x71,0x3,0x51,0x92,0xd0,0xd,0x23,0xf2,0xb9,0x1c,0x81,0x52,0xcc,0x4c,0x4f,0x11, + 0x3a,0x8a,0xb3,0x5e,0x75,0x2e,0x9e,0x9b,0x4a,0xa4,0x45,0x10,0xc7,0x11,0xd6,0xa6, + 0x1b,0x87,0x49,0xa2,0x49,0x92,0x4,0xd7,0x71,0x51,0x4a,0xa6,0x94,0x40,0x9b,0xe3, + 0xa4,0xaf,0x97,0xda,0x92,0x4c,0x5b,0x14,0x46,0x48,0x21,0x67,0xde,0x7f,0xe3,0xd, + 0x6f,0x7f,0xd1,0x2d,0xeb,0x13,0x6d,0x1c,0xd6,0x17,0x16,0x74,0xa7,0xd3,0x5d,0xd7, + 0x6e,0xb7,0xb7,0x18,0x63,0x99,0x99,0x99,0x41,0x6b,0x43,0xb6,0x89,0x91,0x72,0x19, + 0xa3,0xd1,0x71,0x42,0xa9,0x58,0xec,0xb3,0xe3,0x20,0x8,0xa8,0x8e,0xc,0x53,0xa9, + 0xc,0x21,0xa5,0x62,0xa4,0x5a,0xc1,0x71,0x14,0xcf,0x3f,0x7f,0x80,0xc9,0xc9,0x69, + 0x36,0x6c,0xdc,0xc0,0xf0,0x50,0x85,0x28,0xc,0xb1,0xc6,0xe0,0x79,0x6e,0xca,0x9b, + 0xda,0x6d,0xc6,0x46,0x46,0x70,0x3d,0x37,0x35,0xbc,0xd6,0x20,0xac,0xc5,0x91,0x20, + 0x5,0x44,0x51,0x98,0x72,0x27,0xdb,0xb,0x51,0xec,0x12,0xa0,0x88,0x7e,0xc0,0xdc, + 0x23,0x9d,0xbd,0xbb,0xd2,0x6c,0xa5,0xc1,0x5a,0x33,0xf5,0xa7,0x7f,0x72,0xd3,0x8a, + 0x93,0xda,0xd3,0x3f,0x11,0x40,0xab,0x57,0xad,0xfa,0xd5,0xc4,0xc4,0xe4,0x86,0x85, + 0xfa,0xc2,0x5b,0x2c,0x96,0x5a,0xad,0x46,0x92,0xe8,0xc1,0x84,0x36,0x58,0x88,0xe2, + 0x8,0xa5,0x1c,0xfc,0x20,0xc0,0x51,0xa,0xd7,0x75,0xa8,0x94,0x2b,0xac,0x5e,0xbd, + 0x86,0x8d,0x9b,0x36,0x51,0x1d,0x5b,0xc1,0xd8,0xe8,0x28,0xbe,0xef,0x33,0x3b,0x3b, + 0xcf,0xcc,0xec,0x3c,0xe7,0x9c,0xb3,0x15,0xdf,0xf3,0xd2,0xb4,0xaa,0x74,0x30,0xd6, + 0x32,0x37,0x3f,0x4f,0x92,0x24,0x54,0xca,0x15,0x3c,0xcf,0xc3,0x95,0x16,0xdf,0x1, + 0x47,0x58,0x84,0xd5,0xc4,0x51,0x98,0x82,0x22,0xfb,0x1b,0xb8,0x2f,0x6a,0x84,0x7, + 0x6d,0x8f,0x31,0x6,0x4,0x33,0xb7,0xdc,0xfc,0xd1,0x93,0x2,0xe7,0x45,0x1,0x2, + 0x68,0x36,0x9b,0xd4,0xea,0xf5,0x3f,0x8c,0xe3,0x58,0xb6,0x5a,0x4d,0xc2,0x30,0x3a, + 0x6a,0xc,0x36,0x23,0x89,0x9d,0x76,0x9b,0xc0,0xf7,0xf1,0x7d,0x1f,0xa5,0x14,0xd6, + 0x5a,0xc2,0x30,0xc4,0x68,0x4d,0xa9,0x58,0x64,0xe5,0xaa,0x55,0x6c,0xd9,0xb2,0x99, + 0x35,0x6b,0x56,0x62,0xad,0x41,0x49,0x87,0x91,0x91,0xe1,0x23,0x7c,0xc4,0x42,0x1c, + 0x45,0xd4,0xea,0x75,0xaa,0xd5,0x2a,0xe5,0x62,0x2e,0x75,0xed,0x99,0x37,0x8b,0x93, + 0x84,0x28,0x4e,0xf3,0x48,0xa9,0x8b,0x5e,0x2a,0x94,0xb0,0x2c,0x75,0x46,0x8,0x91, + 0xe6,0xcd,0xa5,0x3c,0x7c,0xd3,0x47,0x3f,0xbc,0xea,0x54,0xf2,0xf0,0x2f,0x9a,0x51, + 0x3c,0xef,0xbc,0x57,0x7d,0x7f,0x74,0x74,0xe4,0xbf,0x6b,0x6d,0x28,0x95,0x4a,0x28, + 0x75,0x84,0x73,0x8,0x40,0x65,0x49,0x7a,0xb,0x4c,0xcf,0xcc,0xd0,0x68,0x34,0xc1, + 0x82,0x72,0x1c,0xa,0xc5,0x2,0x9e,0xe7,0xd2,0xe9,0xb4,0x69,0x36,0xd2,0xb2,0x92, + 0x55,0xab,0x57,0x73,0xc1,0x5,0xe7,0x93,0x2f,0xe4,0x30,0xfd,0x32,0x93,0x34,0xc0, + 0x2d,0x14,0xb,0x74,0xbb,0x5d,0x9a,0xcd,0x6,0x3a,0x89,0xfb,0xbb,0x19,0x26,0xdd, + 0x2d,0xcd,0xc0,0xd4,0x69,0xc2,0xcd,0xc,0x6e,0x5d,0xdb,0x81,0x7d,0x7c,0x71,0x54, + 0xb9,0x8d,0x10,0x82,0x6e,0xa7,0x8b,0x92,0x6a,0xe6,0xa3,0x1f,0xf9,0xd0,0x9a,0x53, + 0xdd,0xe6,0x3a,0xa9,0x94,0xeb,0x9b,0xff,0xcd,0x25,0x7f,0x11,0x4,0x1e,0x85,0x42, + 0x1,0xa5,0xd4,0x91,0xc,0xa2,0x4c,0x83,0x4d,0x25,0x25,0xae,0xeb,0x12,0x45,0x11, + 0x53,0x93,0x53,0xd4,0xea,0xf5,0x94,0x19,0x3b,0x69,0xf6,0x31,0x9f,0xcf,0x63,0xad, + 0xa1,0xd9,0x6a,0xd2,0x6e,0x77,0xfa,0xc9,0xad,0xb0,0x1b,0xa2,0xa4,0xc4,0xf3,0x52, + 0xa3,0x1b,0x4,0x1,0x2,0x68,0x37,0x52,0x49,0xb5,0x56,0x66,0x35,0x43,0x12,0x57, + 0xa5,0x6c,0x7d,0x6a,0x66,0x96,0x5a,0xad,0x86,0xca,0xdc,0xbf,0xe5,0x88,0x3d,0xec, + 0xa5,0x80,0x8f,0x84,0x13,0x92,0x76,0xab,0x8d,0x52,0xaa,0x7d,0xd3,0x47,0x3f,0x34, + 0x76,0x3a,0xdb,0xec,0x27,0x9d,0x93,0xbe,0xe6,0xf7,0xfe,0xad,0x50,0xca,0xa1,0x54, + 0x2a,0xf5,0x93,0x62,0x72,0x60,0x5f,0x5e,0x49,0x89,0xeb,0xb8,0x44,0x71,0xcc,0xd4, + 0xd4,0x34,0xd3,0xd3,0xd3,0xc4,0x71,0x94,0xe5,0x92,0x1d,0x3c,0xcf,0xc3,0x71,0x14, + 0x5a,0x27,0x74,0x3a,0x5d,0x3a,0x9d,0x2e,0xf5,0x85,0x46,0x46,0x42,0x5d,0xa4,0x48, + 0xf7,0xd6,0x95,0xe3,0xd0,0xea,0xb4,0x89,0xe3,0x38,0x4d,0xa0,0x19,0xd0,0x16,0x16, + 0x5a,0x1d,0x26,0xa6,0x67,0x41,0x8,0xa,0x85,0x5c,0x96,0x8e,0xb5,0xc7,0x31,0x3f, + 0x29,0x2d,0x68,0xb5,0x5a,0x28,0xc7,0x89,0x6e,0xb9,0xf9,0x23,0x85,0xd3,0xad,0x60, + 0x39,0xa5,0x7d,0xb1,0xd1,0xb1,0xd1,0x7,0xa3,0x38,0xbe,0xa2,0xd5,0x6a,0x91,0x24, + 0xed,0x7e,0xda,0xa0,0x97,0x7c,0xea,0x49,0x57,0x9c,0x24,0x4c,0x4f,0xcf,0xd2,0xed, + 0x86,0xc,0x55,0xca,0x4,0x7e,0x80,0x54,0x12,0xcf,0xf5,0x30,0x5a,0x63,0x6c,0x1a, + 0xbe,0x84,0x61,0x48,0xac,0x35,0xae,0xe3,0x20,0xa5,0xea,0x83,0x1d,0x46,0x71,0xea, + 0x2d,0xb3,0x52,0x97,0x6e,0x37,0xe1,0x99,0xe7,0x9e,0x47,0x4a,0xc1,0xea,0xd5,0x2b, + 0xc9,0xe5,0x8b,0x44,0x49,0x2f,0x88,0x4e,0x8e,0xcd,0x1a,0x66,0xf6,0xcf,0x75,0xdc, + 0xe8,0x96,0x9b,0x3f,0xe2,0xbf,0x94,0xfa,0xa7,0x53,0xaa,0xee,0x78,0xe7,0xdb,0x7f, + 0xfb,0x5d,0x23,0xa3,0x23,0xbb,0xab,0xd5,0x34,0xaf,0xd3,0x93,0x22,0xa5,0x54,0x7f, + 0x8f,0x4c,0x29,0xd5,0x27,0x70,0xf5,0xfa,0x2,0x93,0x93,0xd3,0x4c,0x4d,0x4f,0x53, + 0xaf,0xd7,0x9,0xc3,0x10,0x84,0x40,0x39,0x12,0x47,0x49,0x84,0xb0,0x69,0xc5,0x87, + 0x4d,0x47,0xa2,0xb5,0xce,0x36,0x21,0x1d,0x8c,0x10,0x69,0x32,0x2c,0x2b,0x6e,0x48, + 0x8d,0x7d,0x1,0xcf,0xb,0xb0,0x56,0x90,0xc4,0x9a,0x6e,0xb7,0x93,0x6,0x9e,0x3d, + 0xaf,0x9a,0x11,0xda,0x28,0x8a,0xf0,0x3c,0x6f,0xe6,0xa5,0x82,0x73,0xca,0x0,0x1, + 0xbc,0xfb,0xca,0x2b,0xb6,0x6f,0xde,0xb8,0xf1,0xb1,0xea,0xf0,0x70,0x56,0x6c,0x94, + 0xee,0x51,0xf5,0x8e,0x5e,0x19,0x8c,0xeb,0xba,0x38,0x52,0x12,0x76,0x43,0xea,0xf5, + 0x5,0x66,0x66,0xe7,0x98,0x9d,0x9d,0x67,0x6e,0xbe,0xc6,0x7c,0xad,0x4e,0xa3,0xd5, + 0xa2,0xd5,0x6a,0xa1,0x75,0x92,0x71,0x1e,0x9b,0x6d,0xf6,0x69,0xca,0xe5,0x12,0x8e, + 0xeb,0x11,0x25,0x86,0x28,0x31,0x8,0x25,0x59,0xb3,0x76,0x2d,0x95,0xea,0x8,0xd6, + 0x71,0x69,0x47,0x11,0xb3,0xf3,0xf3,0x4c,0x4d,0x4d,0x21,0xec,0x11,0x70,0xb4,0xd1, + 0x44,0x71,0x44,0xb1,0x50,0x7c,0xe2,0xa3,0x1f,0xfe,0xe3,0x31,0x96,0xa1,0x9d,0x56, + 0x7d,0xd0,0xbb,0xae,0xbc,0xfc,0x35,0x5b,0xcf,0xda,0xb2,0x7b,0x74,0xb4,0x8a,0xeb, + 0xba,0xfd,0x7d,0xab,0x41,0x90,0x7a,0x49,0xa9,0xd4,0x0,0xa7,0xf9,0xa4,0x66,0xb3, + 0xc5,0xfc,0x7c,0x8d,0xb9,0xd9,0x39,0xe6,0xe6,0xe6,0xa9,0xd7,0x1b,0x68,0x6d,0x70, + 0x5c,0x45,0x18,0x46,0xcc,0xcf,0xd7,0xf0,0x3c,0x97,0xe1,0xe1,0x61,0x7c,0xcf,0x47, + 0x6b,0x43,0x6c,0x20,0x31,0x2,0xbf,0x50,0xc2,0x38,0x2e,0x2a,0xc8,0x13,0x1a,0xa8, + 0x2d,0x34,0x88,0xc3,0x18,0xa9,0xd2,0x6a,0x35,0x63,0x34,0x61,0x18,0x52,0x2e,0x97, + 0x7e,0xfe,0x81,0xf7,0xff,0xd1,0x85,0xcb,0x55,0x9c,0x2a,0x4f,0xb7,0xe3,0x95,0x57, + 0x5d,0xb1,0x7d,0xeb,0xd6,0xad,0x4f,0xac,0x5c,0xb9,0x2,0xcf,0x73,0xb3,0x22,0x26, + 0xd1,0x7,0xa8,0x1f,0x60,0x66,0xab,0xeb,0x28,0x95,0xc6,0x6b,0x8e,0x83,0xcc,0x2, + 0xdb,0x5c,0x2e,0x47,0x10,0xe4,0x48,0xe2,0x84,0x89,0x89,0x9,0x5e,0x18,0x7f,0x81, + 0x6a,0xb5,0x4a,0xa9,0x58,0xcc,0x2a,0x41,0x52,0x5e,0x9c,0x24,0x49,0x9a,0x72,0x11, + 0x60,0xf0,0x50,0x6e,0x91,0xa1,0xea,0x28,0x2b,0x56,0x8e,0xa5,0x34,0xc0,0x18,0xba, + 0x51,0x44,0xb9,0x5c,0x7e,0xea,0xc6,0x3f,0xba,0xe1,0xb5,0xcb,0x59,0xda,0x2c,0x5f, + 0x4a,0xe7,0x2b,0xdf,0x75,0xf9,0x85,0x5b,0xb7,0x9e,0xf5,0xfd,0xf5,0xeb,0xd6,0x75, + 0xcb,0xe5,0x72,0xba,0x81,0xc7,0xd2,0xd2,0xd4,0xf,0x4,0xb2,0xb2,0x16,0xd7,0x75, + 0x59,0xb5,0x6a,0x25,0xa5,0x52,0x91,0x89,0xc9,0x49,0x9e,0x7e,0xe6,0x59,0xe2,0x38, + 0x61,0xf3,0xa6,0x4d,0x4,0x41,0x2e,0xdd,0xf,0x93,0x69,0xb0,0xaa,0x93,0x94,0x20, + 0xa2,0x2d,0x49,0x18,0x11,0x4,0x1,0x2b,0x56,0x8c,0x51,0x2c,0x16,0xd1,0x99,0xcd, + 0x29,0xe4,0x72,0x87,0xdf,0xff,0xef,0x6e,0x38,0x8f,0x65,0x6e,0xcb,0xf2,0x53,0x84, + 0x1f,0xfe,0xf0,0x91,0x4f,0x1c,0x38,0x30,0xfe,0xef,0x6b,0xf5,0x9a,0x33,0x3f,0x5f, + 0xa3,0xd1,0x6c,0xa6,0xb9,0x21,0x7b,0x74,0x98,0x64,0xd3,0x2c,0x25,0xae,0xe3,0xb0, + 0x7a,0xf5,0x2a,0x36,0xac,0x5b,0x4b,0xac,0x35,0xcf,0x8d,0x1f,0xa2,0xd6,0x6c,0xb2, + 0x7a,0x6c,0x84,0x95,0xc3,0xc3,0x60,0x6d,0xdf,0xf0,0x77,0xbb,0xdd,0x94,0x7c,0x42, + 0x5a,0xf1,0x31,0x90,0xa7,0xb2,0xc6,0x12,0x27,0x31,0xbe,0xe7,0x4d,0x7e,0xe8,0x8f, + 0x3f,0xb0,0x8a,0x33,0xd0,0x96,0xa5,0x4e,0xda,0x75,0xdd,0x9d,0xaf,0x79,0xcd,0xb6, + 0x7,0x9e,0x7d,0xf6,0xb9,0xcf,0x4,0x7e,0xb0,0xbd,0x9a,0x95,0xbc,0xb5,0x3b,0x6d, + 0xa2,0x30,0x1a,0xa0,0x1,0xe,0xc5,0x52,0x91,0xd1,0xea,0x30,0xa5,0x72,0x99,0x6e, + 0x37,0x64,0x66,0x61,0x81,0x66,0x1c,0xa3,0x72,0x1,0x32,0xc8,0x13,0x22,0xc8,0x29, + 0x89,0xab,0x14,0x61,0x14,0xd3,0xed,0x74,0xd3,0x7d,0x7c,0x47,0xf5,0x53,0xac,0x46, + 0x1b,0x12,0x6d,0x88,0x93,0x4,0xcf,0xf7,0x9a,0x67,0xa,0x9c,0x65,0x93,0x20,0x80, + 0xe7,0x9e,0xdb,0x2b,0x8a,0xc5,0x62,0x71,0x66,0x66,0xe6,0x37,0x9f,0xdb,0xbb,0xef, + 0xbf,0xce,0xcc,0xcc,0xbc,0x52,0x40,0x56,0xdd,0x2a,0x10,0xc8,0xac,0xe,0x28,0x4d, + 0x9d,0x1a,0x6d,0xd0,0x49,0x42,0x23,0xec,0x32,0xb1,0xd0,0xa4,0x95,0x18,0xca,0x85, + 0x2,0x95,0xc0,0x63,0x45,0xa9,0x80,0x12,0x82,0x66,0xb3,0x45,0xbb,0xd3,0xc1,0x5a, + 0x43,0x18,0x45,0xb4,0x5a,0x6d,0x34,0x2,0xe9,0x28,0x84,0xb5,0x8c,0xd,0xd,0x3f, + 0xf6,0x81,0xf7,0xdf,0xf0,0x1a,0xce,0x60,0x5b,0xf6,0x5f,0xfb,0xec,0xdd,0xb7,0x5f, + 0x36,0x1a,0x8d,0xaa,0xe7,0xb9,0x17,0x1d,0x3a,0x74,0xf8,0xda,0x99,0x99,0xd9,0xdf, + 0xd,0xc3,0xb0,0x6f,0x9b,0x7a,0x81,0x2c,0x6,0x84,0x4a,0xd,0xec,0x42,0x37,0x64, + 0xae,0xdd,0x21,0x8e,0x13,0x2,0x25,0x19,0xa,0x7c,0x92,0x38,0xa6,0xdd,0xed,0x92, + 0x18,0x43,0x12,0x27,0x74,0xda,0x2d,0x1c,0xd7,0xdd,0x37,0xba,0x72,0xd5,0x2f,0x57, + 0xac,0x18,0xdd,0xbf,0x6a,0x6c,0xec,0x7,0x97,0x5e,0xf2,0xa6,0x7b,0x39,0xc3,0xed, + 0x8c,0xfd,0x5e,0xac,0x56,0xab,0x89,0x67,0x9f,0xdb,0x5b,0x29,0x14,0xa,0xeb,0x9a, + 0xcd,0xe6,0xf6,0x7a,0xbd,0xfe,0xba,0x76,0xbb,0x73,0x71,0x1c,0xc7,0xe7,0x68,0xad, + 0xcb,0xbd,0xa2,0xa9,0xac,0x32,0x23,0xa,0x93,0xa4,0xd6,0xd,0xa3,0x9a,0x14,0x76, + 0xca,0x73,0xdc,0x29,0x25,0xe5,0x41,0xcf,0xf3,0xe,0x7a,0xbe,0x7f,0x58,0x2a,0x75, + 0xc8,0x51,0x72,0x6a,0xf7,0xe3,0x4f,0xce,0x55,0xaa,0xd5,0xf6,0x96,0x2d,0x9b,0xa3, + 0xdf,0xbc,0xe4,0x4d,0x4d,0x5e,0x86,0x76,0xc6,0x7f,0x92,0xd9,0x6a,0xb5,0x44,0xab, + 0xd5,0xaa,0x4c,0x4e,0x4e,0x9d,0x3b,0x37,0x37,0xff,0xa6,0x56,0xab,0xb5,0x3d,0x8c, + 0xa2,0x75,0x5a,0xeb,0xa1,0xf7,0xfc,0xce,0xd5,0x17,0x2,0x7c,0xe6,0x33,0x9f,0xfd, + 0xce,0xba,0x75,0xeb,0xe,0x24,0x5a,0x4f,0xb,0xc1,0x61,0xcf,0xf3,0xe,0x7,0x41, + 0x70,0xb0,0x5c,0x2a,0x4d,0x14,0xa,0x85,0x39,0x3f,0xf0,0xdb,0xc5,0x42,0x21,0x19, + 0x1d,0x1d,0x7d,0xd9,0x7f,0xc2,0x29,0x5e,0x8e,0x1f,0xf5,0x1e,0xa7,0xd,0x1,0x5f, + 0x5,0x3e,0x7,0xdc,0xf5,0x12,0x9e,0xb3,0x29,0x3b,0x76,0x3,0xb5,0x7f,0x95,0x5e, + 0xec,0x74,0xb5,0x10,0xd8,0x1,0xdc,0x31,0x70,0x6e,0x7,0xf0,0xe6,0x13,0xf4,0x79, + 0x18,0xd8,0xb5,0xe8,0xdc,0xb6,0xc,0xe8,0xe1,0x45,0xa0,0x5d,0xbb,0x44,0xff,0xcf, + 0x1,0xfb,0x5f,0xe,0x80,0x7a,0x3,0xf8,0x5a,0xb6,0x72,0x8b,0x25,0xe3,0x26,0xe0, + 0xf6,0xec,0xfb,0x75,0xd9,0xa0,0x76,0x9d,0x0,0xa8,0x7e,0xea,0x9,0xd8,0x79,0x9c, + 0x7b,0xb7,0x65,0xff,0x77,0x1d,0xa7,0x7f,0x6d,0xd1,0xf8,0x76,0xe,0x48,0xd5,0x50, + 0xd6,0xff,0xe1,0x53,0x5,0xe8,0x74,0x99,0xf4,0x9d,0x3,0x13,0x5f,0x6a,0x22,0xd7, + 0xd,0x7c,0xbf,0x36,0x1b,0xe0,0xa9,0xb4,0x4b,0x97,0x38,0x76,0x9f,0xc6,0x38,0x6f, + 0xc9,0xfa,0xde,0xf2,0x72,0xaa,0xd8,0x75,0x99,0x2a,0x5c,0x7a,0x1c,0x9d,0xdf,0xb4, + 0x8,0xb8,0x6d,0x8b,0xee,0x7b,0x68,0xd1,0xfd,0x9f,0x1a,0xb8,0xbe,0xeb,0x14,0xc6, + 0xb1,0x2f,0x7b,0xcf,0xd0,0xa2,0xe7,0x7e,0xed,0x34,0xc1,0x5c,0x16,0x80,0x86,0xb2, + 0x9,0xdd,0x75,0x1c,0x5b,0x30,0x34,0x60,0x43,0x76,0xc,0xf4,0x19,0x4,0x6e,0xd7, + 0xa2,0xeb,0xbb,0x97,0x90,0xc4,0x1d,0xc7,0x79,0xf7,0x60,0xbb,0x3d,0xeb,0x77,0xdb, + 0xc0,0x77,0xb2,0x73,0x9b,0x96,0xcd,0x52,0xe,0x96,0xf3,0x9e,0xc4,0xf1,0x55,0x6b, + 0xed,0xbc,0xb5,0x76,0x68,0x89,0x6b,0xf,0xd9,0x13,0xb7,0xdb,0x16,0xdd,0xff,0xa9, + 0xec,0xfc,0x8e,0x81,0x73,0xb7,0x65,0xe7,0x1e,0x5a,0xe2,0x98,0x5f,0xe2,0x19,0x58, + 0x6b,0xf7,0x65,0x7d,0x6,0xcf,0xed,0x58,0xf4,0xec,0x1d,0x4b,0xbc,0xeb,0xa4,0x8e, + 0x53,0x91,0xa0,0x1d,0xc0,0x55,0xd9,0xe7,0xf9,0x1,0x95,0xb8,0x25,0x93,0x82,0x5b, + 0x6,0x24,0xec,0xfe,0xcc,0x20,0x6e,0xcb,0x6c,0xd0,0x2d,0x4b,0x48,0xc9,0x55,0x3, + 0x92,0xb7,0x69,0x91,0xab,0xbf,0x74,0x89,0xf7,0x3f,0x74,0x1c,0x7b,0xb7,0x69,0x60, + 0x7c,0xb5,0xe5,0x54,0xaf,0x53,0x35,0xd2,0xb7,0x65,0x3,0xb8,0x3a,0xcb,0x5c,0x5c, + 0x9a,0x1,0xf2,0x50,0xf6,0x7f,0x77,0x6,0xd8,0xd0,0x80,0x3b,0xae,0x64,0x7d,0x76, + 0x2d,0x61,0x97,0x36,0xd,0x78,0xae,0x3b,0x7,0xbc,0xd4,0xa9,0xb4,0x6b,0x17,0x8d, + 0xef,0xce,0x45,0xaa,0xb8,0xeb,0xe5,0x2,0x68,0x5b,0xb6,0x42,0xb7,0x67,0xd2,0xd1, + 0x7b,0xf9,0xd5,0xd9,0x80,0xae,0x5a,0x64,0xa4,0x77,0xf,0xd8,0x8d,0xa5,0x6,0x79, + 0xd3,0xc0,0xf9,0x3b,0x32,0xe9,0x79,0x68,0x60,0x72,0x3b,0x96,0x38,0x86,0x96,0xb0, + 0x49,0xd7,0xd,0x48,0xde,0xf5,0xd9,0xbb,0x6f,0xfa,0x75,0x10,0xc5,0xa1,0x1,0x83, + 0x3a,0xd8,0x7a,0x52,0xb1,0x31,0x9b,0xe0,0x8e,0x45,0x2a,0xd8,0x6b,0x3b,0xb3,0xe3, + 0xf6,0x1,0x1a,0x70,0xfd,0xc0,0xfd,0x8b,0x55,0xf0,0xb6,0xe3,0x78,0xc7,0xc5,0x20, + 0xf7,0xbc,0x56,0x8f,0x72,0x5c,0x9f,0x1,0x7f,0xd5,0xbf,0x16,0x26,0x3d,0xb4,0x4, + 0x4b,0xdd,0x31,0xb0,0xaa,0xd7,0xd,0xa8,0xd7,0xc3,0x3,0x1c,0x6a,0x7f,0x76,0xcf, + 0x9d,0x3,0x24,0xef,0xf6,0x1,0x60,0x5e,0xcc,0x6,0x6d,0x1b,0x0,0x7d,0x90,0x42, + 0xdc,0x3f,0xb0,0x60,0xbb,0x5e,0x4e,0x80,0x76,0x65,0x3,0xb9,0x69,0xd1,0x8b,0xaf, + 0x5b,0x82,0x7b,0x6c,0x1a,0x70,0xb9,0x3b,0x33,0xe0,0x6,0xfb,0xec,0xce,0xce,0xbd, + 0x94,0xb6,0x3b,0x3,0xf8,0x8e,0xe3,0xd8,0xae,0xab,0x5e,0x6e,0x80,0x7a,0x6a,0x70, + 0x67,0xb6,0x92,0xbb,0x32,0x20,0xae,0x3,0xfe,0x66,0x0,0x9c,0x8d,0x4b,0x78,0xab, + 0xc5,0x3,0xbd,0x7e,0x99,0xa4,0xff,0xfa,0x13,0x78,0xdb,0x6d,0x3,0x8b,0x74,0x3c, + 0x87,0x73,0xc7,0xc9,0x4,0xb7,0xa7,0xe2,0xc5,0xee,0x1a,0x60,0xcf,0x3b,0x32,0x80, + 0xae,0x5f,0x82,0xc6,0x3f,0x3c,0xa0,0x6,0xa7,0xbb,0x8a,0x76,0x89,0x63,0xc7,0x29, + 0x10,0xd9,0xfd,0x3,0xea,0xb6,0xf8,0xfa,0x8e,0x4c,0xb2,0xb7,0x9d,0x9,0x1b,0xb4, + 0xeb,0x45,0x26,0x7d,0xfb,0x22,0x35,0xb8,0xf4,0x24,0x3,0xdf,0xa5,0x62,0x31,0x96, + 0x8,0x49,0x38,0x41,0x10,0xdb,0xbb,0x67,0xdb,0x12,0xfd,0x7b,0x26,0xe2,0xab,0x3, + 0x36,0x6f,0xd7,0x99,0x0,0x68,0xb9,0xf3,0x41,0x8b,0x7,0xf9,0xfc,0x9,0x16,0xe1, + 0x8e,0xe3,0x4,0xc7,0xbb,0x33,0x89,0x18,0xca,0x24,0xfa,0x73,0xc7,0xe9,0xbf,0x7d, + 0x60,0x31,0x4e,0x3a,0xa2,0xff,0x75,0x26,0xcc,0xfe,0x9f,0x68,0xf2,0xff,0x43,0x70, + 0xe2,0xf6,0x7f,0x7,0x0,0xfc,0x50,0xa3,0xdb,0xb4,0x1f,0xa7,0x27,0x0,0x0,0x0, + 0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/exit.png + 0x0,0x0,0x2c,0x64, + 0x89, + 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, + 0x0,0x0,0x80,0x0,0x0,0x0,0xa0,0x8,0x6,0x0,0x0,0x0,0xc4,0x92,0x64,0xfd, + 0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13, + 0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x6,0x85,0x69,0x54,0x58,0x74,0x58,0x4d,0x4c, + 0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x78,0x6d,0x70,0x0,0x0, + 0x0,0x0,0x0,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20,0x62,0x65,0x67, + 0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf,0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d, + 0x30,0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65,0x53,0x7a,0x4e,0x54,0x63, + 0x7a,0x6b,0x63,0x39,0x64,0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70,0x6d, + 0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f, + 0x62,0x65,0x3a,0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20,0x78,0x3a,0x78, + 0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20, + 0x43,0x6f,0x72,0x65,0x20,0x35,0x2e,0x36,0x2d,0x63,0x31,0x34,0x30,0x20,0x37,0x39, + 0x2e,0x31,0x36,0x30,0x34,0x35,0x31,0x2c,0x20,0x32,0x30,0x31,0x37,0x2f,0x30,0x35, + 0x2f,0x30,0x36,0x2d,0x30,0x31,0x3a,0x30,0x38,0x3a,0x32,0x31,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72,0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,0x39,0x39, + 0x39,0x2f,0x30,0x32,0x2f,0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e,0x74, + 0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x44,0x65, + 0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66,0x3a,0x61,0x62, + 0x6f,0x75,0x74,0x3d,0x22,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70, + 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62, + 0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x4d,0x4d,0x3d,0x22,0x68,0x74,0x74, + 0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d, + 0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3a,0x73,0x74,0x45,0x76,0x74,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78, + 0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54,0x79,0x70,0x65,0x2f,0x52,0x65,0x73, + 0x6f,0x75,0x72,0x63,0x65,0x45,0x76,0x65,0x6e,0x74,0x23,0x22,0x20,0x78,0x6d,0x6c, + 0x6e,0x73,0x3a,0x70,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x3d,0x22,0x68,0x74, + 0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f, + 0x6d,0x2f,0x70,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x2f,0x31,0x2e,0x30,0x2f, + 0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x64,0x63,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x70,0x75,0x72,0x6c,0x2e,0x6f,0x72,0x67,0x2f,0x64,0x63,0x2f,0x65, + 0x6c,0x65,0x6d,0x65,0x6e,0x74,0x73,0x2f,0x31,0x2e,0x31,0x2f,0x22,0x20,0x78,0x6d, + 0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54,0x6f,0x6f,0x6c,0x3d,0x22,0x41, + 0x64,0x6f,0x62,0x65,0x20,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x43, + 0x43,0x20,0x28,0x4d,0x61,0x63,0x69,0x6e,0x74,0x6f,0x73,0x68,0x29,0x22,0x20,0x78, + 0x6d,0x70,0x3a,0x43,0x72,0x65,0x61,0x74,0x65,0x44,0x61,0x74,0x65,0x3d,0x22,0x32, + 0x30,0x32,0x30,0x2d,0x30,0x35,0x2d,0x32,0x35,0x54,0x32,0x30,0x3a,0x33,0x32,0x3a, + 0x30,0x32,0x2b,0x30,0x38,0x3a,0x30,0x30,0x22,0x20,0x78,0x6d,0x70,0x3a,0x4d,0x65, + 0x74,0x61,0x64,0x61,0x74,0x61,0x44,0x61,0x74,0x65,0x3d,0x22,0x32,0x30,0x32,0x30, + 0x2d,0x30,0x35,0x2d,0x32,0x35,0x54,0x32,0x30,0x3a,0x33,0x32,0x3a,0x30,0x32,0x2b, + 0x30,0x38,0x3a,0x30,0x30,0x22,0x20,0x78,0x6d,0x70,0x3a,0x4d,0x6f,0x64,0x69,0x66, + 0x79,0x44,0x61,0x74,0x65,0x3d,0x22,0x32,0x30,0x32,0x30,0x2d,0x30,0x35,0x2d,0x32, + 0x35,0x54,0x32,0x30,0x3a,0x33,0x32,0x3a,0x30,0x32,0x2b,0x30,0x38,0x3a,0x30,0x30, + 0x22,0x20,0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, + 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69,0x64,0x3a,0x39,0x61,0x61,0x34, + 0x66,0x33,0x64,0x34,0x2d,0x33,0x33,0x63,0x62,0x2d,0x34,0x62,0x63,0x63,0x2d,0x61, + 0x38,0x36,0x32,0x2d,0x32,0x38,0x38,0x64,0x64,0x31,0x66,0x31,0x30,0x30,0x37,0x63, + 0x22,0x20,0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, + 0x49,0x44,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a,0x64,0x6f,0x63,0x69,0x64,0x3a, + 0x70,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x3a,0x36,0x64,0x62,0x63,0x31,0x37, + 0x34,0x31,0x2d,0x63,0x65,0x33,0x30,0x2d,0x38,0x35,0x34,0x33,0x2d,0x38,0x32,0x39, + 0x34,0x2d,0x66,0x33,0x34,0x62,0x37,0x66,0x65,0x30,0x65,0x36,0x62,0x37,0x22,0x20, + 0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x4f,0x72,0x69,0x67,0x69,0x6e,0x61,0x6c,0x44,0x6f, + 0x63,0x75,0x6d,0x65,0x6e,0x74,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, + 0x64,0x3a,0x65,0x66,0x64,0x39,0x61,0x38,0x39,0x66,0x2d,0x33,0x37,0x33,0x36,0x2d, + 0x34,0x66,0x63,0x31,0x2d,0x39,0x33,0x38,0x61,0x2d,0x65,0x63,0x62,0x37,0x65,0x64, + 0x30,0x30,0x34,0x32,0x38,0x36,0x22,0x20,0x70,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f, + 0x70,0x3a,0x43,0x6f,0x6c,0x6f,0x72,0x4d,0x6f,0x64,0x65,0x3d,0x22,0x33,0x22,0x20, + 0x70,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x3a,0x49,0x43,0x43,0x50,0x72,0x6f, + 0x66,0x69,0x6c,0x65,0x3d,0x22,0x73,0x52,0x47,0x42,0x20,0x49,0x45,0x43,0x36,0x31, + 0x39,0x36,0x36,0x2d,0x32,0x2e,0x31,0x22,0x20,0x64,0x63,0x3a,0x66,0x6f,0x72,0x6d, + 0x61,0x74,0x3d,0x22,0x69,0x6d,0x61,0x67,0x65,0x2f,0x70,0x6e,0x67,0x22,0x3e,0x20, + 0x3c,0x78,0x6d,0x70,0x4d,0x4d,0x3a,0x48,0x69,0x73,0x74,0x6f,0x72,0x79,0x3e,0x20, + 0x3c,0x72,0x64,0x66,0x3a,0x53,0x65,0x71,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x6c, + 0x69,0x20,0x73,0x74,0x45,0x76,0x74,0x3a,0x61,0x63,0x74,0x69,0x6f,0x6e,0x3d,0x22, + 0x63,0x72,0x65,0x61,0x74,0x65,0x64,0x22,0x20,0x73,0x74,0x45,0x76,0x74,0x3a,0x69, + 0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69, + 0x69,0x64,0x3a,0x65,0x66,0x64,0x39,0x61,0x38,0x39,0x66,0x2d,0x33,0x37,0x33,0x36, + 0x2d,0x34,0x66,0x63,0x31,0x2d,0x39,0x33,0x38,0x61,0x2d,0x65,0x63,0x62,0x37,0x65, + 0x64,0x30,0x30,0x34,0x32,0x38,0x36,0x22,0x20,0x73,0x74,0x45,0x76,0x74,0x3a,0x77, + 0x68,0x65,0x6e,0x3d,0x22,0x32,0x30,0x32,0x30,0x2d,0x30,0x35,0x2d,0x32,0x35,0x54, + 0x32,0x30,0x3a,0x33,0x32,0x3a,0x30,0x32,0x2b,0x30,0x38,0x3a,0x30,0x30,0x22,0x20, + 0x73,0x74,0x45,0x76,0x74,0x3a,0x73,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x41,0x67, + 0x65,0x6e,0x74,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65,0x20,0x50,0x68,0x6f,0x74,0x6f, + 0x73,0x68,0x6f,0x70,0x20,0x43,0x43,0x20,0x28,0x4d,0x61,0x63,0x69,0x6e,0x74,0x6f, + 0x73,0x68,0x29,0x22,0x2f,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x6c,0x69,0x20,0x73, 0x74,0x45,0x76,0x74,0x3a,0x61,0x63,0x74,0x69,0x6f,0x6e,0x3d,0x22,0x73,0x61,0x76, 0x65,0x64,0x22,0x20,0x73,0x74,0x45,0x76,0x74,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e, 0x63,0x65,0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69,0x64,0x3a,0x39,0x61, @@ -7964,7 +9158,7 @@ static const unsigned char qt_resource_data[] = { 0x0,0x99,0x2d,0x43,0x80,0xcc,0x96,0x21,0x40,0x66,0xbb,0xa6,0xb6,0xff,0x7,0x18, 0xb3,0x1,0x20,0x5d,0x4b,0x48,0x18,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae, 0x42,0x60,0x82, - // D:/????/??????/230526-????-2?????-1600x900-2/Cigarette/Resources/alarm.png + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/alarm.png 0x0,0x0,0x26,0x7f, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, @@ -8583,7 +9777,7 @@ static const unsigned char qt_resource_data[] = { 0x17,0xf4,0x3a,0x54,0x49,0xe2,0x88,0xed,0xdb,0x27,0x49,0xd3,0x14,0x13,0x59,0x6a, 0x59,0xde,0x1e,0x1a,0x8c,0xf6,0xff,0xbf,0x1,0x0,0xf2,0x2,0x50,0xe0,0x45,0xc0, 0x32,0x49,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, - // D:/????/??????/230526-????-2?????-1600x900-2/Cigarette/Resources/cam4_yes.png + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/cam4_yes.png 0x0,0x0,0x24,0xe3, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, @@ -9177,7 +10371,7 @@ static const unsigned char qt_resource_data[] = { 0x9,0xb3,0xff,0x27,0x9a,0xfc,0xff,0x10,0x9c,0xb8,0xfd,0x9f,0x1,0x0,0x38,0xf3, 0x98,0x47,0x5e,0xf7,0xee,0xc3,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42, 0x60,0x82, - // D:/????/??????/230526-????-2?????-1600x900-2/Cigarette/Resources/rotate.png + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/rotate.png 0x0,0x0,0x3b,0xee, 0xff, 0xd8,0xff,0xe0,0x0,0x10,0x4a,0x46,0x49,0x46,0x0,0x1,0x1,0x1,0x0,0x48,0x0, @@ -10139,7 +11333,7 @@ static const unsigned char qt_resource_data[] = { 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3f,0xff,0xd9, - // D:/????/??????/230526-????-2?????-1600x900-2/Cigarette/Resources/cam2_yes.png + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/cam2_yes.png 0x0,0x0,0x24,0xe6, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, @@ -10733,7 +11927,7 @@ static const unsigned char qt_resource_data[] = { 0xce,0x7c,0xd0,0xbf,0x88,0x26,0xff,0x15,0x82,0x7f,0x5,0xe8,0x25,0xb5,0xff,0x3f, 0x0,0xb2,0xb2,0x99,0x2f,0xae,0x96,0x2b,0xa0,0x0,0x0,0x0,0x0,0x49,0x45,0x4e, 0x44,0xae,0x42,0x60,0x82, - // D:/????/??????/230526-????-2?????-1600x900-2/Cigarette/Resources/keyboard.png + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/keyboard.png 0x0,0x0,0x72,0x17, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, @@ -12562,8 +13756,608 @@ static const unsigned char qt_resource_data[] = { 0xfa,0xc7,0xc0,0x48,0xc4,0xfb,0x48,0xef,0x38,0xad,0x94,0xff,0x7c,0xbe,0xfe,0xff, 0x3f,0x0,0xfa,0xd3,0x67,0x31,0x16,0xd2,0x4f,0xee,0x0,0x0,0x0,0x0,0x49,0x45, 0x4e,0x44,0xae,0x42,0x60,0x82, - // D:/????/??????/230526-????-2?????-1600x900-2/Cigarette/Resources/cam1.png - 0x0,0x0,0x25,0xe, + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/cam8_no.png + 0x0,0x0,0x25,0x42, + 0x89, + 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, + 0x0,0x0,0x48,0x0,0x0,0x0,0x48,0x8,0x6,0x0,0x0,0x0,0x55,0xed,0xb3,0x47, + 0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13, + 0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0xa,0x4d,0x69,0x43,0x43,0x50,0x50,0x68,0x6f, + 0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66,0x69, + 0x6c,0x65,0x0,0x0,0x78,0xda,0x9d,0x53,0x77,0x58,0x93,0xf7,0x16,0x3e,0xdf,0xf7, + 0x65,0xf,0x56,0x42,0xd8,0xf0,0xb1,0x97,0x6c,0x81,0x0,0x22,0x23,0xac,0x8,0xc8, + 0x10,0x59,0xa2,0x10,0x92,0x0,0x61,0x84,0x10,0x12,0x40,0xc5,0x85,0x88,0xa,0x56, + 0x14,0x15,0x11,0x9c,0x48,0x55,0xc4,0x82,0xd5,0xa,0x48,0x9d,0x88,0xe2,0xa0,0x28, + 0xb8,0x67,0x41,0x8a,0x88,0x5a,0x8b,0x55,0x5c,0x38,0xee,0x1f,0xdc,0xa7,0xb5,0x7d, + 0x7a,0xef,0xed,0xed,0xfb,0xd7,0xfb,0xbc,0xe7,0x9c,0xe7,0xfc,0xce,0x79,0xcf,0xf, + 0x80,0x11,0x12,0x26,0x91,0xe6,0xa2,0x6a,0x0,0x39,0x52,0x85,0x3c,0x3a,0xd8,0x1f, + 0x8f,0x4f,0x48,0xc4,0xc9,0xbd,0x80,0x2,0x15,0x48,0xe0,0x4,0x20,0x10,0xe6,0xcb, + 0xc2,0x67,0x5,0xc5,0x0,0x0,0xf0,0x3,0x79,0x78,0x7e,0x74,0xb0,0x3f,0xfc,0x1, + 0xaf,0x6f,0x0,0x2,0x0,0x70,0xd5,0x2e,0x24,0x12,0xc7,0xe1,0xff,0x83,0xba,0x50, + 0x26,0x57,0x0,0x20,0x91,0x0,0xe0,0x22,0x12,0xe7,0xb,0x1,0x90,0x52,0x0,0xc8, + 0x2e,0x54,0xc8,0x14,0x0,0xc8,0x18,0x0,0xb0,0x53,0xb3,0x64,0xa,0x0,0x94,0x0, + 0x0,0x6c,0x79,0x7c,0x42,0x22,0x0,0xaa,0xd,0x0,0xec,0xf4,0x49,0x3e,0x5,0x0, + 0xd8,0xa9,0x93,0xdc,0x17,0x0,0xd8,0xa2,0x1c,0xa9,0x8,0x0,0x8d,0x1,0x0,0x99, + 0x28,0x47,0x24,0x2,0x40,0xbb,0x0,0x60,0x55,0x81,0x52,0x2c,0x2,0xc0,0xc2,0x0, + 0xa0,0xac,0x40,0x22,0x2e,0x4,0xc0,0xae,0x1,0x80,0x59,0xb6,0x32,0x47,0x2,0x80, + 0xbd,0x5,0x0,0x76,0x8e,0x58,0x90,0xf,0x40,0x60,0x0,0x80,0x99,0x42,0x2c,0xcc, + 0x0,0x20,0x38,0x2,0x0,0x43,0x1e,0x13,0xcd,0x3,0x20,0x4c,0x3,0xa0,0x30,0xd2, + 0xbf,0xe0,0xa9,0x5f,0x70,0x85,0xb8,0x48,0x1,0x0,0xc0,0xcb,0x95,0xcd,0x97,0x4b, + 0xd2,0x33,0x14,0xb8,0x95,0xd0,0x1a,0x77,0xf2,0xf0,0xe0,0xe2,0x21,0xe2,0xc2,0x6c, + 0xb1,0x42,0x61,0x17,0x29,0x10,0x66,0x9,0xe4,0x22,0x9c,0x97,0x9b,0x23,0x13,0x48, + 0xe7,0x3,0x4c,0xce,0xc,0x0,0x0,0x1a,0xf9,0xd1,0xc1,0xfe,0x38,0x3f,0x90,0xe7, + 0xe6,0xe4,0xe1,0xe6,0x66,0xe7,0x6c,0xef,0xf4,0xc5,0xa2,0xfe,0x6b,0xf0,0x6f,0x22, + 0x3e,0x21,0xf1,0xdf,0xfe,0xbc,0x8c,0x2,0x4,0x0,0x10,0x4e,0xcf,0xef,0xda,0x5f, + 0xe5,0xe5,0xd6,0x3,0x70,0xc7,0x1,0xb0,0x75,0xbf,0x6b,0xa9,0x5b,0x0,0xda,0x56, + 0x0,0x68,0xdf,0xf9,0x5d,0x33,0xdb,0x9,0xa0,0x5a,0xa,0xd0,0x7a,0xf9,0x8b,0x79, + 0x38,0xfc,0x40,0x1e,0x9e,0xa1,0x50,0xc8,0x3c,0x1d,0x1c,0xa,0xb,0xb,0xed,0x25, + 0x62,0xa1,0xbd,0x30,0xe3,0x8b,0x3e,0xff,0x33,0xe1,0x6f,0xe0,0x8b,0x7e,0xf6,0xfc, + 0x40,0x1e,0xfe,0xdb,0x7a,0xf0,0x0,0x71,0x9a,0x40,0x99,0xad,0xc0,0xa3,0x83,0xfd, + 0x71,0x61,0x6e,0x76,0xae,0x52,0x8e,0xe7,0xcb,0x4,0x42,0x31,0x6e,0xf7,0xe7,0x23, + 0xfe,0xc7,0x85,0x7f,0xfd,0x8e,0x29,0xd1,0xe2,0x34,0xb1,0x5c,0x2c,0x15,0x8a,0xf1, + 0x58,0x89,0xb8,0x50,0x22,0x4d,0xc7,0x79,0xb9,0x52,0x91,0x44,0x21,0xc9,0x95,0xe2, + 0x12,0xe9,0x7f,0x32,0xf1,0x1f,0x96,0xfd,0x9,0x93,0x77,0xd,0x0,0xac,0x86,0x4f, + 0xc0,0x4e,0xb6,0x7,0xb5,0xcb,0x6c,0xc0,0x7e,0xee,0x1,0x2,0x8b,0xe,0x58,0xd2, + 0x76,0x0,0x40,0x7e,0xf3,0x2d,0x8c,0x1a,0xb,0x91,0x0,0x10,0x67,0x34,0x32,0x79, + 0xf7,0x0,0x0,0x93,0xbf,0xf9,0x8f,0x40,0x2b,0x1,0x0,0xcd,0x97,0xa4,0xe3,0x0, + 0x0,0xbc,0xe8,0x18,0x5c,0xa8,0x94,0x17,0x4c,0xc6,0x8,0x0,0x0,0x44,0xa0,0x81, + 0x2a,0xb0,0x41,0x7,0xc,0xc1,0x14,0xac,0xc0,0xe,0x9c,0xc1,0x1d,0xbc,0xc0,0x17, + 0x2,0x61,0x6,0x44,0x40,0xc,0x24,0xc0,0x3c,0x10,0x42,0x6,0xe4,0x80,0x1c,0xa, + 0xa1,0x18,0x96,0x41,0x19,0x54,0xc0,0x3a,0xd8,0x4,0xb5,0xb0,0x3,0x1a,0xa0,0x11, + 0x9a,0xe1,0x10,0xb4,0xc1,0x31,0x38,0xd,0xe7,0xe0,0x12,0x5c,0x81,0xeb,0x70,0x17, + 0x6,0x60,0x18,0x9e,0xc2,0x18,0xbc,0x86,0x9,0x4,0x41,0xc8,0x8,0x13,0x61,0x21, + 0x3a,0x88,0x11,0x62,0x8e,0xd8,0x22,0xce,0x8,0x17,0x99,0x8e,0x4,0x22,0x61,0x48, + 0x34,0x92,0x80,0xa4,0x20,0xe9,0x88,0x14,0x51,0x22,0xc5,0xc8,0x72,0xa4,0x2,0xa9, + 0x42,0x6a,0x91,0x5d,0x48,0x23,0xf2,0x2d,0x72,0x14,0x39,0x8d,0x5c,0x40,0xfa,0x90, + 0xdb,0xc8,0x20,0x32,0x8a,0xfc,0x8a,0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3,0xd4, + 0x2,0x75,0x40,0xb9,0xa8,0x1f,0x1a,0x8a,0xc6,0xa0,0x73,0xd1,0x74,0x34,0xf,0x5d, + 0x80,0x96,0xa2,0x6b,0xd1,0x1a,0xb4,0x1e,0x3d,0x80,0xb6,0xa2,0xa7,0xd1,0x4b,0xe8, + 0x75,0x74,0x0,0x7d,0x8a,0x8e,0x63,0x80,0xd1,0x31,0xe,0x66,0x8c,0xd9,0x61,0x5c, + 0x8c,0x87,0x45,0x60,0x89,0x58,0x1a,0x26,0xc7,0x16,0x63,0xe5,0x58,0x35,0x56,0x8f, + 0x35,0x63,0x1d,0x58,0x37,0x76,0x15,0x1b,0xc0,0x9e,0x61,0xef,0x8,0x24,0x2,0x8b, + 0x80,0x13,0xec,0x8,0x5e,0x84,0x10,0xc2,0x6c,0x82,0x90,0x90,0x47,0x58,0x4c,0x58, + 0x43,0xa8,0x25,0xec,0x23,0xb4,0x12,0xba,0x8,0x57,0x9,0x83,0x84,0x31,0xc2,0x27, + 0x22,0x93,0xa8,0x4f,0xb4,0x25,0x7a,0x12,0xf9,0xc4,0x78,0x62,0x3a,0xb1,0x90,0x58, + 0x46,0xac,0x26,0xee,0x21,0x1e,0x21,0x9e,0x25,0x5e,0x27,0xe,0x13,0x5f,0x93,0x48, + 0x24,0xe,0xc9,0x92,0xe4,0x4e,0xa,0x21,0x25,0x90,0x32,0x49,0xb,0x49,0x6b,0x48, + 0xdb,0x48,0x2d,0xa4,0x53,0xa4,0x3e,0xd2,0x10,0x69,0x9c,0x4c,0x26,0xeb,0x90,0x6d, + 0xc9,0xde,0xe4,0x8,0xb2,0x80,0xac,0x20,0x97,0x91,0xb7,0x90,0xf,0x90,0x4f,0x92, + 0xfb,0xc9,0xc3,0xe4,0xb7,0x14,0x3a,0xc5,0x88,0xe2,0x4c,0x9,0xa2,0x24,0x52,0xa4, + 0x94,0x12,0x4a,0x35,0x65,0x3f,0xe5,0x4,0xa5,0x9f,0x32,0x42,0x99,0xa0,0xaa,0x51, + 0xcd,0xa9,0x9e,0xd4,0x8,0xaa,0x88,0x3a,0x9f,0x5a,0x49,0x6d,0xa0,0x76,0x50,0x2f, + 0x53,0x87,0xa9,0x13,0x34,0x75,0x9a,0x25,0xcd,0x9b,0x16,0x43,0xcb,0xa4,0x2d,0xa3, + 0xd5,0xd0,0x9a,0x69,0x67,0x69,0xf7,0x68,0x2f,0xe9,0x74,0xba,0x9,0xdd,0x83,0x1e, + 0x45,0x97,0xd0,0x97,0xd2,0x6b,0xe8,0x7,0xe9,0xe7,0xe9,0x83,0xf4,0x77,0xc,0xd, + 0x86,0xd,0x83,0xc7,0x48,0x62,0x28,0x19,0x6b,0x19,0x7b,0x19,0xa7,0x18,0xb7,0x19, + 0x2f,0x99,0x4c,0xa6,0x5,0xd3,0x97,0x99,0xc8,0x54,0x30,0xd7,0x32,0x1b,0x99,0x67, + 0x98,0xf,0x98,0x6f,0x55,0x58,0x2a,0xf6,0x2a,0x7c,0x15,0x91,0xca,0x12,0x95,0x3a, + 0x95,0x56,0x95,0x7e,0x95,0xe7,0xaa,0x54,0x55,0x73,0x55,0x3f,0xd5,0x79,0xaa,0xb, + 0x54,0xab,0x55,0xf,0xab,0x5e,0x56,0x7d,0xa6,0x46,0x55,0xb3,0x50,0xe3,0xa9,0x9, + 0xd4,0x16,0xab,0xd5,0xa9,0x1d,0x55,0xbb,0xa9,0x36,0xae,0xce,0x52,0x77,0x52,0x8f, + 0x50,0xcf,0x51,0x5f,0xa3,0xbe,0x5f,0xfd,0x82,0xfa,0x63,0xd,0xb2,0x86,0x85,0x46, + 0xa0,0x86,0x48,0xa3,0x54,0x63,0xb7,0xc6,0x19,0x8d,0x21,0x16,0xc6,0x32,0x65,0xf1, + 0x58,0x42,0xd6,0x72,0x56,0x3,0xeb,0x2c,0x6b,0x98,0x4d,0x62,0x5b,0xb2,0xf9,0xec, + 0x4c,0x76,0x5,0xfb,0x1b,0x76,0x2f,0x7b,0x4c,0x53,0x43,0x73,0xaa,0x66,0xac,0x66, + 0x91,0x66,0x9d,0xe6,0x71,0xcd,0x1,0xe,0xc6,0xb1,0xe0,0xf0,0x39,0xd9,0x9c,0x4a, + 0xce,0x21,0xce,0xd,0xce,0x7b,0x2d,0x3,0x2d,0x3f,0x2d,0xb1,0xd6,0x6a,0xad,0x66, + 0xad,0x7e,0xad,0x37,0xda,0x7a,0xda,0xbe,0xda,0x62,0xed,0x72,0xed,0x16,0xed,0xeb, + 0xda,0xef,0x75,0x70,0x9d,0x40,0x9d,0x2c,0x9d,0xf5,0x3a,0x6d,0x3a,0xf7,0x75,0x9, + 0xba,0x36,0xba,0x51,0xba,0x85,0xba,0xdb,0x75,0xcf,0xea,0x3e,0xd3,0x63,0xeb,0x79, + 0xe9,0x9,0xf5,0xca,0xf5,0xe,0xe9,0xdd,0xd1,0x47,0xf5,0x6d,0xf4,0xa3,0xf5,0x17, + 0xea,0xef,0xd6,0xef,0xd1,0x1f,0x37,0x30,0x34,0x8,0x36,0x90,0x19,0x6c,0x31,0x38, + 0x63,0xf0,0xcc,0x90,0x63,0xe8,0x6b,0x98,0x69,0xb8,0xd1,0xf0,0x84,0xe1,0xa8,0x11, + 0xcb,0x68,0xba,0x91,0xc4,0x68,0xa3,0xd1,0x49,0xa3,0x27,0xb8,0x26,0xee,0x87,0x67, + 0xe3,0x35,0x78,0x17,0x3e,0x66,0xac,0x6f,0x1c,0x62,0xac,0x34,0xde,0x65,0xdc,0x6b, + 0x3c,0x61,0x62,0x69,0x32,0xdb,0xa4,0xc4,0xa4,0xc5,0xe4,0xbe,0x29,0xcd,0x94,0x6b, + 0x9a,0x66,0xba,0xd1,0xb4,0xd3,0x74,0xcc,0xcc,0xc8,0x2c,0xdc,0xac,0xd8,0xac,0xc9, + 0xec,0x8e,0x39,0xd5,0x9c,0x6b,0x9e,0x61,0xbe,0xd9,0xbc,0xdb,0xfc,0x8d,0x85,0xa5, + 0x45,0x9c,0xc5,0x4a,0x8b,0x36,0x8b,0xc7,0x96,0xda,0x96,0x7c,0xcb,0x5,0x96,0x4d, + 0x96,0xf7,0xac,0x98,0x56,0x3e,0x56,0x79,0x56,0xf5,0x56,0xd7,0xac,0x49,0xd6,0x5c, + 0xeb,0x2c,0xeb,0x6d,0xd6,0x57,0x6c,0x50,0x1b,0x57,0x9b,0xc,0x9b,0x3a,0x9b,0xcb, + 0xb6,0xa8,0xad,0x9b,0xad,0xc4,0x76,0x9b,0x6d,0xdf,0x14,0xe2,0x14,0x8f,0x29,0xd2, + 0x29,0xf5,0x53,0x6e,0xda,0x31,0xec,0xfc,0xec,0xa,0xec,0x9a,0xec,0x6,0xed,0x39, + 0xf6,0x61,0xf6,0x25,0xf6,0x6d,0xf6,0xcf,0x1d,0xcc,0x1c,0x12,0x1d,0xd6,0x3b,0x74, + 0x3b,0x7c,0x72,0x74,0x75,0xcc,0x76,0x6c,0x70,0xbc,0xeb,0xa4,0xe1,0x34,0xc3,0xa9, + 0xc4,0xa9,0xc3,0xe9,0x57,0x67,0x1b,0x67,0xa1,0x73,0x9d,0xf3,0x35,0x17,0xa6,0x4b, + 0x90,0xcb,0x12,0x97,0x76,0x97,0x17,0x53,0x6d,0xa7,0x8a,0xa7,0x6e,0x9f,0x7a,0xcb, + 0x95,0xe5,0x1a,0xee,0xba,0xd2,0xb5,0xd3,0xf5,0xa3,0x9b,0xbb,0x9b,0xdc,0xad,0xd9, + 0x6d,0xd4,0xdd,0xcc,0x3d,0xc5,0x7d,0xab,0xfb,0x4d,0x2e,0x9b,0x1b,0xc9,0x5d,0xc3, + 0x3d,0xef,0x41,0xf4,0xf0,0xf7,0x58,0xe2,0x71,0xcc,0xe3,0x9d,0xa7,0x9b,0xa7,0xc2, + 0xf3,0x90,0xe7,0x2f,0x5e,0x76,0x5e,0x59,0x5e,0xfb,0xbd,0x1e,0x4f,0xb3,0x9c,0x26, + 0x9e,0xd6,0x30,0x6d,0xc8,0xdb,0xc4,0x5b,0xe0,0xbd,0xcb,0x7b,0x60,0x3a,0x3e,0x3d, + 0x65,0xfa,0xce,0xe9,0x3,0x3e,0xc6,0x3e,0x2,0x9f,0x7a,0x9f,0x87,0xbe,0xa6,0xbe, + 0x22,0xdf,0x3d,0xbe,0x23,0x7e,0xd6,0x7e,0x99,0x7e,0x7,0xfc,0x9e,0xfb,0x3b,0xfa, + 0xcb,0xfd,0x8f,0xf8,0xbf,0xe1,0x79,0xf2,0x16,0xf1,0x4e,0x5,0x60,0x1,0xc1,0x1, + 0xe5,0x1,0xbd,0x81,0x1a,0x81,0xb3,0x3,0x6b,0x3,0x1f,0x4,0x99,0x4,0xa5,0x7, + 0x35,0x5,0x8d,0x5,0xbb,0x6,0x2f,0xc,0x3e,0x15,0x42,0xc,0x9,0xd,0x59,0x1f, + 0x72,0x93,0x6f,0xc0,0x17,0xf2,0x1b,0xf9,0x63,0x33,0xdc,0x67,0x2c,0x9a,0xd1,0x15, + 0xca,0x8,0x9d,0x15,0x5a,0x1b,0xfa,0x30,0xcc,0x26,0x4c,0x1e,0xd6,0x11,0x8e,0x86, + 0xcf,0x8,0xdf,0x10,0x7e,0x6f,0xa6,0xf9,0x4c,0xe9,0xcc,0xb6,0x8,0x88,0xe0,0x47, + 0x6c,0x88,0xb8,0x1f,0x69,0x19,0x99,0x17,0xf9,0x7d,0x14,0x29,0x2a,0x32,0xaa,0x2e, + 0xea,0x51,0xb4,0x53,0x74,0x71,0x74,0xf7,0x2c,0xd6,0xac,0xe4,0x59,0xfb,0x67,0xbd, + 0x8e,0xf1,0x8f,0xa9,0x8c,0xb9,0x3b,0xdb,0x6a,0xb6,0x72,0x76,0x67,0xac,0x6a,0x6c, + 0x52,0x6c,0x63,0xec,0x9b,0xb8,0x80,0xb8,0xaa,0xb8,0x81,0x78,0x87,0xf8,0x45,0xf1, + 0x97,0x12,0x74,0x13,0x24,0x9,0xed,0x89,0xe4,0xc4,0xd8,0xc4,0x3d,0x89,0xe3,0x73, + 0x2,0xe7,0x6c,0x9a,0x33,0x9c,0xe4,0x9a,0x54,0x96,0x74,0x63,0xae,0xe5,0xdc,0xa2, + 0xb9,0x17,0xe6,0xe9,0xce,0xcb,0x9e,0x77,0x3c,0x59,0x35,0x59,0x90,0x7c,0x38,0x85, + 0x98,0x12,0x97,0xb2,0x3f,0xe5,0x83,0x20,0x42,0x50,0x2f,0x18,0x4f,0xe5,0xa7,0x6e, + 0x4d,0x1d,0x13,0xf2,0x84,0x9b,0x85,0x4f,0x45,0xbe,0xa2,0x8d,0xa2,0x51,0xb1,0xb7, + 0xb8,0x4a,0x3c,0x92,0xe6,0x9d,0x56,0x95,0xf6,0x38,0xdd,0x3b,0x7d,0x43,0xfa,0x68, + 0x86,0x4f,0x46,0x75,0xc6,0x33,0x9,0x4f,0x52,0x2b,0x79,0x91,0x19,0x92,0xb9,0x23, + 0xf3,0x4d,0x56,0x44,0xd6,0xde,0xac,0xcf,0xd9,0x71,0xd9,0x2d,0x39,0x94,0x9c,0x94, + 0x9c,0xa3,0x52,0xd,0x69,0x96,0xb4,0x2b,0xd7,0x30,0xb7,0x28,0xb7,0x4f,0x66,0x2b, + 0x2b,0x93,0xd,0xe4,0x79,0xe6,0x6d,0xca,0x1b,0x93,0x87,0xca,0xf7,0xe4,0x23,0xf9, + 0x73,0xf3,0xdb,0x15,0x6c,0x85,0x4c,0xd1,0xa3,0xb4,0x52,0xae,0x50,0xe,0x16,0x4c, + 0x2f,0xa8,0x2b,0x78,0x5b,0x18,0x5b,0x78,0xb8,0x48,0xbd,0x48,0x5a,0xd4,0x33,0xdf, + 0x66,0xfe,0xea,0xf9,0x23,0xb,0x82,0x16,0x7c,0xbd,0x90,0xb0,0x50,0xb8,0xb0,0xb3, + 0xd8,0xb8,0x78,0x59,0xf1,0xe0,0x22,0xbf,0x45,0xbb,0x16,0x23,0x8b,0x53,0x17,0x77, + 0x2e,0x31,0x5d,0x52,0xba,0x64,0x78,0x69,0xf0,0xd2,0x7d,0xcb,0x68,0xcb,0xb2,0x96, + 0xfd,0x50,0xe2,0x58,0x52,0x55,0xf2,0x6a,0x79,0xdc,0xf2,0x8e,0x52,0x83,0xd2,0xa5, + 0xa5,0x43,0x2b,0x82,0x57,0x34,0x95,0xa9,0x94,0xc9,0xcb,0x6e,0xae,0xf4,0x5a,0xb9, + 0x63,0x15,0x61,0x95,0x64,0x55,0xef,0x6a,0x97,0xd5,0x5b,0x56,0x7f,0x2a,0x17,0x95, + 0x5f,0xac,0x70,0xac,0xa8,0xae,0xf8,0xb0,0x46,0xb8,0xe6,0xe2,0x57,0x4e,0x5f,0xd5, + 0x7c,0xf5,0x79,0x6d,0xda,0xda,0xde,0x4a,0xb7,0xca,0xed,0xeb,0x48,0xeb,0xa4,0xeb, + 0x6e,0xac,0xf7,0x59,0xbf,0xaf,0x4a,0xbd,0x6a,0x41,0xd5,0xd0,0x86,0xf0,0xd,0xad, + 0x1b,0xf1,0x8d,0xe5,0x1b,0x5f,0x6d,0x4a,0xde,0x74,0xa1,0x7a,0x6a,0xf5,0x8e,0xcd, + 0xb4,0xcd,0xca,0xcd,0x3,0x35,0x61,0x35,0xed,0x5b,0xcc,0xb6,0xac,0xdb,0xf2,0xa1, + 0x36,0xa3,0xf6,0x7a,0x9d,0x7f,0x5d,0xcb,0x56,0xfd,0xad,0xab,0xb7,0xbe,0xd9,0x26, + 0xda,0xd6,0xbf,0xdd,0x77,0x7b,0xf3,0xe,0x83,0x1d,0x15,0x3b,0xde,0xef,0x94,0xec, + 0xbc,0xb5,0x2b,0x78,0x57,0x6b,0xbd,0x45,0x7d,0xf5,0x6e,0xd2,0xee,0x82,0xdd,0x8f, + 0x1a,0x62,0x1b,0xba,0xbf,0xe6,0x7e,0xdd,0xb8,0x47,0x77,0x4f,0xc5,0x9e,0x8f,0x7b, + 0xa5,0x7b,0x7,0xf6,0x45,0xef,0xeb,0x6a,0x74,0x6f,0x6c,0xdc,0xaf,0xbf,0xbf,0xb2, + 0x9,0x6d,0x52,0x36,0x8d,0x1e,0x48,0x3a,0x70,0xe5,0x9b,0x80,0x6f,0xda,0x9b,0xed, + 0x9a,0x77,0xb5,0x70,0x5a,0x2a,0xe,0xc2,0x41,0xe5,0xc1,0x27,0xdf,0xa6,0x7c,0x7b, + 0xe3,0x50,0xe8,0xa1,0xce,0xc3,0xdc,0xc3,0xcd,0xdf,0x99,0x7f,0xb7,0xf5,0x8,0xeb, + 0x48,0x79,0x2b,0xd2,0x3a,0xbf,0x75,0xac,0x2d,0xa3,0x6d,0xa0,0x3d,0xa1,0xbd,0xef, + 0xe8,0x8c,0xa3,0x9d,0x1d,0x5e,0x1d,0x47,0xbe,0xb7,0xff,0x7e,0xef,0x31,0xe3,0x63, + 0x75,0xc7,0x35,0x8f,0x57,0x9e,0xa0,0x9d,0x28,0x3d,0xf1,0xf9,0xe4,0x82,0x93,0xe3, + 0xa7,0x64,0xa7,0x9e,0x9d,0x4e,0x3f,0x3d,0xd4,0x99,0xdc,0x79,0xf7,0x4c,0xfc,0x99, + 0x6b,0x5d,0x51,0x5d,0xbd,0x67,0x43,0xcf,0x9e,0x3f,0x17,0x74,0xee,0x4c,0xb7,0x5f, + 0xf7,0xc9,0xf3,0xde,0xe7,0x8f,0x5d,0xf0,0xbc,0x70,0xf4,0x22,0xf7,0x62,0xdb,0x25, + 0xb7,0x4b,0xad,0x3d,0xae,0x3d,0x47,0x7e,0x70,0xfd,0xe1,0x48,0xaf,0x5b,0x6f,0xeb, + 0x65,0xf7,0xcb,0xed,0x57,0x3c,0xae,0x74,0xf4,0x4d,0xeb,0x3b,0xd1,0xef,0xd3,0x7f, + 0xfa,0x6a,0xc0,0xd5,0x73,0xd7,0xf8,0xd7,0x2e,0x5d,0x9f,0x79,0xbd,0xef,0xc6,0xec, + 0x1b,0xb7,0x6e,0x26,0xdd,0x1c,0xb8,0x25,0xba,0xf5,0xf8,0x76,0xf6,0xed,0x17,0x77, + 0xa,0xee,0x4c,0xdc,0x5d,0x7a,0x8f,0x78,0xaf,0xfc,0xbe,0xda,0xfd,0xea,0x7,0xfa, + 0xf,0xea,0x7f,0xb4,0xfe,0xb1,0x65,0xc0,0x6d,0xe0,0xf8,0x60,0xc0,0x60,0xcf,0xc3, + 0x59,0xf,0xef,0xe,0x9,0x87,0x9e,0xfe,0x94,0xff,0xd3,0x87,0xe1,0xd2,0x47,0xcc, + 0x47,0xd5,0x23,0x46,0x23,0x8d,0x8f,0x9d,0x1f,0x1f,0x1b,0xd,0x1a,0xbd,0xf2,0x64, + 0xce,0x93,0xe1,0xa7,0xb2,0xa7,0x13,0xcf,0xca,0x7e,0x56,0xff,0x79,0xeb,0x73,0xab, + 0xe7,0xdf,0xfd,0xe2,0xfb,0x4b,0xcf,0x58,0xfc,0xd8,0xf0,0xb,0xf9,0x8b,0xcf,0xbf, + 0xae,0x79,0xa9,0xf3,0x72,0xef,0xab,0xa9,0xaf,0x3a,0xc7,0x23,0xc7,0x1f,0xbc,0xce, + 0x79,0x3d,0xf1,0xa6,0xfc,0xad,0xce,0xdb,0x7d,0xef,0xb8,0xef,0xba,0xdf,0xc7,0xbd, + 0x1f,0x99,0x28,0xfc,0x40,0xfe,0x50,0xf3,0xd1,0xfa,0x63,0xc7,0xa7,0xd0,0x4f,0xf7, + 0x3e,0xe7,0x7c,0xfe,0xfc,0x2f,0xf7,0x84,0xf3,0xfb,0x25,0xd2,0x9f,0x33,0x0,0x0, + 0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x25,0x0,0x0,0x80,0x83,0x0,0x0, + 0xf9,0xff,0x0,0x0,0x80,0xe9,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0, + 0x3a,0x98,0x0,0x0,0x17,0x6f,0x92,0x5f,0xc5,0x46,0x0,0x0,0x1a,0x6f,0x49,0x44, + 0x41,0x54,0x78,0xda,0xec,0x9b,0x79,0x70,0x65,0x57,0x9d,0xdf,0x3f,0xe7,0x9c,0xbb, + 0xbd,0x5d,0x7a,0x5a,0x5a,0x52,0x6f,0x72,0x5b,0x6e,0xbb,0xdb,0x86,0xee,0xf6,0x8a, + 0xcd,0x66,0x83,0xf1,0xcc,0x60,0x8c,0xcd,0x90,0xc9,0x98,0xc,0x29,0x98,0x82,0xca, + 0x90,0x72,0x52,0x98,0x49,0x8a,0x65,0x6a,0x2,0x26,0xc0,0x50,0xc,0x84,0x6d,0x32, + 0x55,0x6,0x86,0xb1,0x1d,0x86,0x25,0x78,0xd8,0x6c,0x18,0xb6,0x18,0xb7,0xed,0xc1, + 0x2c,0x9,0xf1,0x2,0x36,0x71,0xb7,0x7b,0xd7,0xae,0x27,0xe9,0x49,0x7a,0xdb,0xdd, + 0xce,0xc9,0x1f,0xf7,0xea,0xe9,0xb5,0x5a,0xed,0xde,0x8d,0x2b,0x95,0xa3,0x7a,0xf5, + 0xde,0xdd,0xef,0xf9,0x9e,0xdf,0xef,0xfb,0xfb,0xfe,0x7e,0xe7,0x48,0x18,0x63,0x38, + 0xd7,0xed,0x99,0xa7,0x9f,0x1e,0x7e,0xfa,0xa9,0xa7,0x5e,0x1e,0x1b,0xec,0x91,0xad, + 0x5b,0x7f,0xbe,0x65,0xcb,0x79,0xcf,0x14,0x8b,0xc5,0x98,0xdf,0x61,0x1b,0x1c,0x1c, + 0xe8,0x2d,0x14,0xa,0xd7,0xf5,0xf4,0x94,0xaf,0xb4,0x2c,0x3b,0xbb,0xb0,0xb0,0xf0, + 0xdb,0xd9,0xd9,0xd9,0x7,0xa4,0x94,0xcf,0x1c,0x39,0x32,0xaa,0x97,0xcf,0x13,0xe7, + 0x1a,0xa0,0xff,0xf9,0xb3,0x9f,0xdd,0x38,0x36,0x3a,0xf6,0x17,0x6,0x46,0x42,0xd, + 0xb5,0x46,0x63,0xa1,0xd4,0x55,0xfa,0xef,0xbf,0x7f,0xc3,0xf5,0xef,0xcf,0xe5,0x72, + 0xe6,0xf9,0x6,0xe6,0xfc,0xf3,0xb7,0x58,0x42,0x88,0xf7,0xbc,0xf6,0xb5,0xaf,0xfd, + 0xf0,0xcd,0x37,0xdf,0x42,0x7f,0x7f,0x3f,0x52,0x4a,0x1a,0x8d,0x6,0x8f,0x3e,0xfa, + 0x28,0xf7,0xde,0x7b,0xef,0xd3,0x7,0xe,0xec,0xff,0x83,0xb1,0xb1,0xf1,0xc3,0xe7, + 0x1c,0xa0,0x47,0x1f,0x79,0xf8,0x4d,0x63,0x47,0x46,0x3f,0x84,0x50,0xe7,0x5b,0x8e, + 0x43,0x6c,0xa0,0xd9,0x6a,0x61,0x8c,0xae,0x6e,0xbd,0x60,0xe4,0x9d,0xeb,0x87,0x86, + 0xee,0xdf,0xb8,0x69,0xe3,0xfc,0xf3,0x8,0x8e,0xea,0x29,0x97,0x1f,0xf8,0xcb,0xff, + 0xfc,0xa1,0x57,0x5e,0x7e,0xe5,0x15,0x84,0xb5,0x3a,0x51,0x14,0x61,0x8c,0x41,0x4a, + 0x89,0x9b,0xcd,0xb2,0xe4,0xfb,0x7c,0xf2,0xaf,0x3e,0xc2,0xf7,0xee,0xff,0xee,0xc8, + 0xd8,0xf8,0xf8,0xbe,0x73,0x6,0xd0,0x43,0xf,0xee,0x7e,0xc7,0xe8,0x91,0xd1,0x8f, + 0x38,0xb6,0x53,0x56,0xb6,0x83,0x1,0x8c,0x30,0x60,0x40,0x1b,0x83,0x80,0xb9,0x7c, + 0x21,0xb7,0xbb,0x54,0x2a,0xfd,0xdc,0xb1,0x9d,0x9f,0x67,0xb3,0x99,0xa7,0x36,0x6e, + 0xdc,0x30,0x5f,0x28,0x14,0xce,0xd9,0x88,0x6d,0xdf,0xbe,0xed,0x8e,0x4f,0x7c,0xe6, + 0x33,0x1f,0xb8,0x54,0xda,0x2c,0x2d,0x2d,0x61,0x2e,0xdd,0x9,0xad,0x56,0x72,0xd0, + 0xb6,0x61,0x6e,0xe,0xe7,0xb1,0x27,0x89,0xaf,0xbe,0x92,0x77,0xdf,0xf1,0x81,0xa9, + 0x87,0x77,0x3f,0xb4,0x59,0xdd,0x71,0xc7,0x1d,0x67,0xfd,0x45,0x1e,0x78,0xe0,0x27, + 0xb7,0x1f,0x3c,0x78,0xf8,0x6f,0x5c,0x37,0x93,0xb1,0x1c,0x7,0x23,0x40,0xb3,0xec, + 0xd6,0x2,0x25,0x24,0xb1,0x8e,0x33,0xb5,0x7a,0x7d,0xdb,0xfc,0x5c,0xf5,0x35,0xf5, + 0x7a,0xe3,0xd,0x61,0x18,0x5e,0xb0,0xb8,0xb4,0xd4,0x57,0xab,0xd5,0xe4,0xc4,0xe4, + 0x94,0xef,0xd8,0x76,0x2b,0x93,0xc9,0x9c,0x35,0xb0,0xd6,0xad,0x5b,0xd7,0x7d,0xeb, + 0xad,0xb7,0x7e,0xff,0xd,0xb7,0xfe,0x31,0x4b,0xdf,0xba,0xf,0xf1,0xf9,0xbb,0xe0, + 0xe2,0x6d,0xb0,0x7e,0x30,0x39,0x21,0x8,0x90,0xff,0xe5,0xb3,0xe8,0x87,0x1e,0xc1, + 0xbb,0xe9,0xb5,0x6c,0xbc,0x70,0x6b,0xfe,0x27,0xff,0xe3,0xc7,0x7,0xcf,0xba,0x5, + 0xfd,0xe0,0x87,0x3f,0xfa,0x8f,0x63,0xa3,0x63,0x1f,0xcf,0x64,0xb2,0x78,0x9e,0x47, + 0xac,0x35,0xd0,0xf9,0xc,0x81,0x30,0x6,0x23,0x4,0x42,0x80,0x8e,0x35,0x51,0x14, + 0x11,0xeb,0x18,0x10,0x38,0x8e,0x43,0x77,0x57,0xe9,0xdb,0x7d,0x7d,0x7d,0xf7,0x5, + 0x61,0xf0,0x8b,0x30,0x8c,0xc6,0x36,0x6d,0xdc,0x58,0xdb,0xb4,0x69,0xc3,0x19,0x91, + 0xfa,0xc8,0xc8,0xc8,0x9f,0xdc,0x79,0xe7,0x9d,0xff,0x70,0xc1,0x85,0x5b,0xf1,0x5b, + 0x3e,0xf2,0x53,0x7f,0x3,0x4f,0xfe,0x6,0xfd,0x57,0x77,0xc0,0xf0,0x30,0xf2,0xa3, + 0x1f,0x87,0xdf,0x3c,0x8d,0x79,0xff,0xfb,0xe0,0x82,0x11,0x6c,0xe0,0x5d,0xef,0x7a, + 0xd7,0x93,0xd6,0xd9,0x4,0xe7,0xbe,0xfb,0xbf,0xfb,0xa1,0x99,0x99,0xca,0x5f,0x66, + 0xb2,0x59,0x3c,0xd7,0x23,0x8e,0xe3,0x65,0x4c,0xc0,0x8,0x4,0x0,0x6,0x23,0xd2, + 0xb,0xc,0x8,0x21,0xb0,0x1d,0x1b,0x47,0x38,0x18,0x63,0x88,0xa2,0x98,0xa9,0xe9, + 0x99,0x5b,0x26,0x26,0x27,0x6f,0xc9,0x66,0x73,0x94,0xcb,0xe5,0xfb,0x2b,0x95,0xca, + 0x37,0xa2,0x38,0xfc,0xe5,0xd4,0xe4,0xf4,0x68,0xb1,0x58,0x68,0x5c,0x7c,0xf1,0xf6, + 0xf8,0xd4,0xa3,0xd6,0xe0,0xab,0x7,0x7,0x7,0x9,0xfd,0x0,0x94,0x42,0xbf,0xf3, + 0xdf,0x21,0x3f,0xf9,0x19,0xe4,0xc7,0x3e,0x9,0xeb,0xd7,0xc3,0xb3,0xfb,0x30,0xff, + 0xe9,0xbd,0x98,0x8b,0x2e,0x84,0x66,0x13,0x27,0x9f,0x67,0xdb,0xb6,0x8b,0x4a,0x67, + 0xd,0xa0,0x7f,0xfc,0xc6,0x37,0xef,0x5e,0x58,0x5c,0x7c,0x4b,0x36,0x93,0xc5,0x71, + 0x9c,0x15,0x70,0x58,0x36,0x20,0x93,0x7c,0xb5,0xc1,0x39,0x7a,0xdb,0xa4,0x1b,0x96, + 0x52,0x58,0xb6,0x85,0x30,0x10,0xc7,0x9a,0xc9,0xc9,0xc9,0x9b,0xc6,0x27,0xc6,0x6f, + 0xb2,0x94,0x45,0xb9,0xbb,0xfb,0x17,0xae,0xeb,0x7c,0x61,0x6c,0x6c,0xfc,0xc7,0x71, + 0x1c,0x4f,0xce,0xce,0xce,0x46,0xbb,0x76,0xed,0xd4,0x27,0xf3,0x7e,0xb9,0x5c,0xb6, + 0xdf,0x71,0x92,0x41,0x20,0xc,0x21,0x9b,0x45,0xbf,0xe3,0xed,0xc8,0x3f,0x7f,0xf, + 0x3c,0xf4,0xcf,0x98,0xff,0xf0,0xef,0x31,0xbb,0x76,0xc0,0xdc,0x3c,0x8,0x81,0x31, + 0x50,0x2c,0x96,0xa2,0xb3,0x2,0xd0,0x57,0xbf,0xf6,0xf5,0xaf,0x34,0x1a,0x8d,0x37, + 0xe5,0x73,0x79,0xa4,0x94,0x9,0x38,0xa2,0xc3,0xa5,0xda,0x40,0x88,0x36,0x58,0x74, + 0xec,0x5b,0x31,0x28,0x93,0x5a,0x5b,0xb2,0xad,0x94,0x44,0x59,0xe,0x20,0x30,0xc6, + 0x30,0x3f,0x3f,0x7f,0xd5,0xec,0xec,0xec,0x55,0x7b,0xf6,0x3e,0x4b,0xa9,0x54,0x7a, + 0x74,0x70,0x60,0xdd,0x9d,0xa3,0xa3,0x63,0xf,0xf5,0x94,0xcb,0xe3,0x47,0xc6,0xc6, + 0xe2,0xad,0x17,0x8c,0x1c,0x97,0x2f,0x5a,0xad,0xd6,0x7c,0x14,0x45,0xd8,0xb6,0x8d, + 0x51,0xa,0xa2,0x8,0x71,0xef,0x37,0x41,0x2a,0xd8,0x71,0x9,0xe2,0x7b,0x3f,0xc0, + 0xbc,0xf8,0x12,0x18,0x1a,0x82,0x56,0xb,0x21,0xa0,0x5e,0xaf,0x4b,0x79,0xa6,0xe0, + 0xfc,0xc3,0x97,0xbf,0x72,0x5f,0xad,0x56,0x7b,0x53,0x3e,0x97,0x47,0x8,0xb1,0xd2, + 0x49,0x8e,0xee,0x7c,0x12,0xc6,0xcc,0x2a,0x70,0x38,0x1a,0x9c,0xd5,0x80,0x8a,0x95, + 0xe7,0xc8,0xd4,0x15,0x5d,0xcf,0xc3,0xb2,0x6c,0x96,0x96,0x6a,0xd7,0x3c,0xf3,0xcc, + 0xde,0xbb,0x7f,0xfe,0x8b,0x5f,0x1e,0xf8,0xc9,0xee,0x87,0x1e,0x99,0x9d,0x9d,0xbb, + 0x6d,0x7c,0x7c,0x7c,0xf8,0xd0,0xa1,0x43,0x6b,0xf6,0x69,0x72,0x72,0xea,0x9f,0x67, + 0x66,0xa6,0xb1,0x6c,0xb,0x2c,0xb,0xf1,0xc5,0x7b,0x10,0x3f,0x7a,0x0,0x73,0xfb, + 0x6d,0xe8,0xf,0xdf,0x1,0x9e,0x87,0xfc,0xe0,0x47,0x61,0x62,0x12,0x1c,0x9b,0x28, + 0x8a,0xd8,0xbb,0x77,0x4f,0x78,0x46,0x24,0xfd,0xd5,0xaf,0x7d,0xfd,0x7b,0xb5,0x5a, + 0xed,0x86,0x6c,0x36,0x6b,0x19,0x63,0x10,0x42,0x20,0x85,0x40,0x48,0x89,0x14,0xa, + 0x21,0x56,0xba,0x2e,0x84,0x0,0xa1,0x52,0x0,0x4c,0xb2,0xb7,0x6d,0x4d,0x6b,0x80, + 0xb3,0x1a,0xe2,0xe,0xd0,0xdb,0xb4,0x96,0x5e,0x67,0x40,0xa3,0x4d,0x4d,0x59,0x6a, + 0x29,0xe3,0x79,0x7b,0xba,0xba,0xba,0xbe,0xdc,0xd7,0xd7,0xf7,0xd3,0xc9,0x89,0xc9, + 0xab,0xab,0xb,0xb,0xdb,0x87,0xd6,0xf,0xfe,0xf8,0x2f,0xde,0xf7,0xde,0xb1,0x97, + 0xbd,0xec,0xa5,0xbf,0x79,0xdb,0x6d,0xb7,0xb1,0x74,0xd7,0x97,0x10,0xf7,0x7c,0x19, + 0xf3,0xee,0x3f,0xc7,0xbc,0xe2,0x1a,0x88,0x62,0x98,0xaf,0x22,0xef,0xf8,0x8,0xb4, + 0x5a,0x38,0x9f,0xfe,0x6b,0xe,0xce,0xcd,0xf2,0x67,0x6f,0x7f,0xfb,0xbb,0x4f,0x1b, + 0xa0,0xbf,0xbd,0xf3,0xf3,0xf7,0x49,0x21,0x6e,0xec,0xe9,0xe9,0x91,0x46,0x6b,0x8c, + 0x31,0x18,0x63,0xd0,0x5a,0xa7,0x96,0x22,0x90,0x4a,0x22,0xa5,0x4c,0x7f,0x2b,0x44, + 0xa,0x10,0x46,0x63,0x8c,0xee,0x24,0xa8,0x4e,0x8f,0x3b,0x6,0x88,0x35,0x2d,0xb2, + 0xe3,0x87,0x49,0x2d,0x33,0x19,0x24,0x89,0xa5,0x54,0x45,0x4a,0x39,0x29,0x85,0x18, + 0x50,0x96,0x2a,0xd6,0x1b,0xf5,0x29,0x21,0xe4,0x57,0x3f,0xf1,0xf1,0x8f,0x5d,0xfc, + 0xf1,0x4f,0x7f,0xea,0xc6,0xe1,0xd1,0x9,0xea,0xd5,0x5,0xb8,0xfe,0xba,0x15,0x1d, + 0xe4,0xba,0x70,0xf8,0x8,0xd6,0xc3,0x3f,0xc5,0x7e,0xe3,0xcd,0x7c,0xe0,0x13,0x1f, + 0x6f,0xdd,0xff,0x9d,0xef,0xf4,0x9d,0x16,0x40,0xff,0xf5,0xf3,0x7f,0xf7,0x85,0xa9, + 0x4a,0xe5,0xed,0x9b,0x6,0x7,0xe9,0x29,0x95,0x8,0xa3,0xa8,0x7d,0xcc,0x52,0x16, + 0x52,0xa,0xe2,0x58,0x13,0x46,0x21,0x46,0x1b,0x10,0x2,0x29,0x25,0x52,0x5a,0x48, + 0x25,0x53,0x1b,0x4a,0x40,0x15,0x1d,0x24,0x7e,0x22,0x20,0x56,0x5b,0xd7,0xb1,0xfb, + 0x4,0x46,0x9b,0x54,0x19,0x43,0x26,0x9b,0x21,0x8,0x43,0xe6,0x66,0x67,0xf1,0xfd, + 0x20,0xa,0xc3,0xf0,0xf3,0xf7,0x7d,0xe7,0x9b,0x37,0xbe,0xff,0xc3,0x1f,0xd9,0xbc, + 0x65,0x64,0x84,0x56,0xb5,0xda,0xe,0x26,0x42,0x8,0xdc,0x5c,0xe,0xad,0x14,0x9f, + 0xff,0xec,0x67,0xb9,0xfb,0xef,0xff,0xfe,0x9a,0xb1,0xf1,0xf1,0x9f,0x9d,0x32,0x40, + 0xf7,0x7d,0xf7,0x9f,0x5e,0xf7,0xc8,0xaf,0x1e,0xbb,0xcb,0x72,0xbd,0xde,0x2d,0x43, + 0x3,0x74,0xb9,0xe,0x5a,0x88,0x76,0xc8,0x8e,0xa2,0x88,0x30,0xc,0x91,0x4a,0x62, + 0x5b,0x4e,0xe2,0x66,0x82,0xc4,0xc2,0x10,0x20,0x52,0xf7,0x93,0x9,0x4c,0x32,0x3d, + 0x76,0xb4,0x25,0x89,0xe7,0x0,0x4b,0x1c,0xd7,0xe2,0xc,0x6,0x89,0xc0,0xb2,0x2c, + 0x1c,0xc7,0xc6,0xf,0x7c,0x16,0x17,0x97,0x8,0x82,0x80,0x56,0xab,0x85,0x52,0x6a, + 0xaa,0x51,0xaf,0xfd,0x9b,0x2f,0x7e,0xf1,0xb,0x6f,0x7e,0xf3,0x9b,0xff,0xf5,0x1f, + 0xdd,0x70,0xc3,0xd,0x14,0xa,0x5,0xa4,0x94,0xf8,0xbe,0xcf,0x53,0x4f,0x3d,0xc5, + 0x97,0xbe,0xf4,0xa5,0xda,0xaf,0x7e,0xf5,0xbf,0x5e,0x3d,0x3a,0x3a,0xf6,0xcb,0xd3, + 0xca,0xc5,0x3e,0xf2,0xb1,0x4f,0xfc,0x64,0x6c,0xb6,0x7a,0x5d,0xcf,0xe0,0x20,0xeb, + 0x7b,0xba,0x28,0x48,0x81,0xed,0xba,0x69,0x27,0x5,0x87,0xe,0x1d,0x64,0x6a,0x6a, + 0x9a,0x62,0xb1,0xc8,0x86,0xd,0xeb,0x29,0x95,0xba,0x0,0xd0,0xda,0xa4,0x6c,0x93, + 0x22,0x26,0x40,0x18,0xd,0x46,0x23,0x5,0x8,0x29,0x41,0x88,0x14,0xe,0x3,0x1d, + 0xdf,0x27,0x6,0x48,0xa4,0xee,0x5,0xb6,0x65,0x61,0xd9,0x16,0x81,0x1f,0xb0,0xb0, + 0xb8,0x48,0x18,0x86,0x8,0x4,0x41,0x18,0xe2,0x7,0x7e,0xd0,0xdd,0xd5,0xf5,0x50, + 0x6f,0x6f,0xf9,0xe6,0xb7,0xbf,0xed,0x4f,0x37,0xae,0x5b,0x37,0xf0,0xc6,0x81,0x81, + 0x81,0x2b,0x2d,0xcb,0xf2,0xe6,0xe7,0xe7,0xf7,0x8d,0x8e,0x1e,0xf9,0x8e,0xef,0x7, + 0x8f,0x8c,0x8f,0x4f,0xb4,0xda,0x1e,0x71,0xaa,0xee,0xe5,0x7,0xc1,0xd5,0x39,0xd7, + 0xc1,0x13,0x86,0xd8,0x6f,0x11,0xd8,0x36,0x96,0xe3,0x26,0x24,0x9c,0x9a,0xaa,0x90, + 0xa2,0xcd,0x9,0xcb,0x7a,0x47,0x90,0xb8,0x19,0x42,0xa4,0x1,0x4d,0xa3,0x8d,0x1, + 0xa3,0x89,0xd,0x88,0x94,0x3f,0xa4,0x48,0xc1,0x13,0x2,0x21,0xe4,0x8a,0x48,0x12, + 0x47,0xbf,0xc7,0xb1,0x64,0xe,0x8e,0x65,0xa3,0x2c,0x45,0xab,0xe5,0xb3,0xb0,0xb8, + 0x40,0x1c,0x25,0xea,0x3c,0x8c,0xe3,0x65,0x57,0x72,0x66,0xe7,0xe6,0x5e,0xb3,0x63, + 0xc7,0x8b,0x2e,0x7c,0xe2,0xc9,0xdf,0x3c,0xd1,0xdb,0xd3,0xf3,0xd1,0x13,0xf5,0xf7, + 0x94,0x0,0xfa,0x6f,0x5f,0xfe,0xda,0x97,0x4b,0xa5,0x12,0xae,0xef,0x23,0x83,0x16, + 0xa1,0x34,0x68,0x55,0x20,0x8a,0x42,0x6c,0xcb,0x46,0x48,0xc1,0xf0,0xf0,0x30,0x9b, + 0x36,0x6d,0xc2,0x18,0x83,0x65,0x59,0x9,0x27,0x0,0x52,0xa,0x40,0x27,0x8a,0x5a, + 0x80,0x14,0xa0,0xa4,0xc4,0x48,0x81,0xd6,0x1a,0xad,0x35,0x46,0xc7,0x98,0x65,0x70, + 0x24,0x29,0xc1,0x93,0x46,0x43,0xd1,0x8e,0x80,0xc7,0x46,0x35,0x83,0xed,0x58,0x58, + 0x96,0x45,0xb3,0xd5,0xa2,0x5a,0x5d,0x20,0x8e,0x23,0x94,0x52,0x4,0x61,0xe2,0xf2, + 0x89,0x54,0x90,0x68,0xa3,0xf5,0x9e,0xbd,0xcf,0xbe,0xa3,0xbf,0xaf,0xff,0x76,0xa0, + 0x75,0xa2,0x3e,0x9f,0x92,0xe,0x9a,0x9b,0x9b,0xfd,0x57,0xd9,0x4c,0xc6,0xcb,0x7a, + 0x1e,0xd9,0x4c,0x6,0xd7,0x71,0xd1,0x5a,0x13,0x86,0x21,0x1a,0x9d,0x10,0xb2,0x1, + 0xcb,0xb2,0x12,0x41,0xa6,0x4d,0x47,0x5f,0x52,0x9e,0x31,0x31,0xe8,0x24,0x8a,0x2d, + 0x5b,0x96,0x52,0xa,0xc7,0x71,0x70,0x1c,0x7,0x65,0xd9,0xa9,0x4b,0xc6,0x44,0x51, + 0x88,0x8e,0xa3,0x4,0x3c,0x63,0x12,0x70,0x44,0xa7,0xf9,0x24,0xe0,0x58,0x96,0x85, + 0x6d,0x59,0x34,0x1a,0x8d,0xa3,0xc0,0xf1,0x83,0x80,0x28,0x5,0x67,0xf9,0x12,0xa5, + 0x94,0x9c,0x9c,0x9c,0x7a,0x4b,0xad,0x5e,0xeb,0x3e,0x99,0x3e,0x9f,0x34,0x40,0xdf, + 0xfb,0xa7,0xef,0xbf,0x2d,0x31,0x63,0xb,0x4b,0xa9,0x34,0x2a,0x49,0x84,0x48,0x2c, + 0x20,0xe,0xe3,0xb6,0xa2,0x89,0xe3,0x98,0x38,0x4e,0xc3,0xb8,0x48,0xc2,0xfd,0xe2, + 0x52,0x8d,0xc9,0xc9,0x69,0x16,0x17,0x97,0x8e,0xf2,0x8f,0xb6,0x7e,0x4c,0xcf,0x15, + 0x42,0x60,0x59,0x36,0xb6,0x65,0x63,0x29,0xb,0x63,0x20,0x8e,0x22,0xa2,0x30,0x48, + 0x0,0xd3,0x2b,0xbc,0x24,0x0,0x4b,0x29,0x5c,0xc7,0xa6,0x51,0x6f,0xb0,0xb0,0xb8, + 0x48,0x1c,0x47,0x48,0x29,0x9,0x82,0x80,0x28,0x8d,0xae,0xcb,0x9a,0x49,0xa4,0xd1, + 0xb4,0xd9,0x6c,0x79,0x95,0xca,0xec,0xc5,0xa3,0x63,0xe3,0xe2,0xac,0xb9,0xd8,0xe1, + 0x43,0x87,0x6f,0xb3,0x94,0x22,0x8a,0x42,0x84,0xd6,0x49,0x14,0x12,0x2b,0x71,0x26, + 0x8e,0x63,0x94,0x25,0x11,0xc2,0x5a,0xe9,0x80,0x14,0x58,0xb6,0x8d,0x44,0x30,0x3b, + 0x37,0xcf,0xe8,0xe4,0x24,0xfd,0x3d,0x3d,0x94,0x4a,0xc5,0x94,0x90,0xd,0x4a,0x82, + 0x54,0x8a,0x20,0xd4,0xcc,0x54,0x66,0x38,0x78,0xe0,0x0,0xae,0xe3,0x30,0xb4,0x7e, + 0x88,0xbe,0xde,0xbe,0xa4,0x22,0x10,0xc7,0x68,0x93,0xb8,0x61,0x14,0x47,0x10,0x6a, + 0xa4,0x94,0x38,0x8e,0x8b,0xed,0xd8,0xd4,0xeb,0xd,0x16,0x6b,0x35,0xb4,0xd6,0x28, + 0x99,0x5a,0x4e,0x1c,0xd3,0x91,0x1e,0x1f,0xc3,0x5f,0xf3,0xf3,0xf3,0x2f,0x95,0x52, + 0xfc,0x74,0xc3,0xfa,0xa1,0xe6,0x59,0x1,0xa8,0x32,0x3b,0xfb,0xa2,0x42,0xa1,0x40, + 0x1c,0xc7,0x18,0x63,0x50,0x42,0xb5,0xc5,0xe1,0x32,0x31,0x9b,0x54,0xcf,0x24,0x8a, + 0x5a,0xd2,0xf2,0x5b,0xec,0xd9,0xb3,0x97,0x38,0x8e,0xf1,0x3c,0x8f,0x8b,0xb7,0x6e, + 0xa5,0x58,0x2c,0x80,0x90,0x9,0x47,0x49,0x70,0x15,0x8,0x9,0x91,0x30,0x44,0x71, + 0x44,0xad,0x5e,0x23,0x8,0x6c,0xc2,0x30,0x5c,0xe9,0x96,0x48,0xf8,0x43,0x4a,0xd5, + 0xc1,0xcb,0x6,0x6d,0x62,0x96,0x16,0x97,0xd2,0x2a,0x65,0x32,0x2c,0x41,0x1b,0x1c, + 0xd6,0x4,0x87,0x74,0xe0,0x66,0x66,0x66,0xae,0x1b,0x1c,0x1c,0xbc,0x13,0x38,0x73, + 0x80,0xbe,0xf6,0xf5,0x7b,0xdf,0xe7,0xfb,0xbe,0x95,0xcd,0x64,0xb1,0x3d,0xb,0xcf, + 0x75,0xb1,0x1d,0x7,0xcb,0xb2,0x50,0x96,0x95,0x46,0x1c,0xb1,0x12,0xc9,0xd2,0x88, + 0xa5,0xb5,0xa1,0x3a,0x5f,0xa5,0xde,0xa8,0x31,0x30,0x30,0xc8,0x60,0xc6,0x23,0x9b, + 0xf1,0x8,0x83,0x10,0x1,0x68,0x23,0x8,0x34,0x8,0xad,0x31,0x46,0xd0,0xd7,0xd3, + 0x4b,0xfe,0xf2,0xcb,0x11,0x8,0x3c,0xcf,0x43,0x48,0x81,0x36,0x3a,0x71,0xbb,0x54, + 0x80,0x86,0x41,0x80,0x54,0x16,0x8e,0x6d,0xd1,0x68,0xb5,0xa8,0x2e,0x2c,0xa0,0x94, + 0x2,0x21,0x8,0xc3,0x88,0x28,0x8a,0xdb,0x96,0x7d,0xc,0x38,0x66,0x45,0xcc,0x2e, + 0x2e,0x2d,0x5d,0x11,0x45,0x71,0x19,0x98,0x3a,0x63,0x80,0x26,0xc6,0x27,0xde,0x6c, + 0x59,0x36,0xd2,0xb6,0x11,0xae,0x8b,0x9d,0xcb,0x93,0xcf,0x64,0x50,0x42,0xa0,0x75, + 0x7c,0x94,0x5a,0x49,0xe4,0x60,0xf2,0x3b,0xe3,0x79,0x6c,0xbb,0xe8,0x22,0xfc,0xd0, + 0x27,0x93,0xc9,0x92,0xf1,0x3c,0xe2,0x28,0x6e,0xbf,0xb8,0x46,0xa0,0xe3,0x36,0xfd, + 0xe0,0xba,0x2e,0xd9,0x6c,0xe,0x81,0x46,0xc7,0x9a,0xd8,0x24,0xc5,0x36,0x89,0xa0, + 0x56,0xaf,0x33,0xbf,0xb4,0x88,0x9b,0xc9,0xa2,0x5,0x34,0xab,0xb,0x48,0xa3,0xc9, + 0xe4,0x72,0xe8,0x38,0x26,0x8a,0xe2,0x24,0xcd,0x39,0x26,0x81,0x39,0xb6,0x29,0x29, + 0x9,0x82,0x30,0x5b,0xab,0xd5,0x86,0x8e,0x1c,0x19,0xdd,0xb3,0x71,0xe3,0xf1,0x8b, + 0x71,0x27,0x4,0xe8,0xfb,0x3f,0xf8,0xe1,0x1f,0xb6,0x5a,0xad,0xed,0x83,0x83,0x83, + 0x44,0x42,0x30,0x57,0x6f,0xb2,0x14,0x6a,0x7a,0x84,0xa4,0x9c,0xcb,0xe2,0xd9,0x56, + 0x52,0xe2,0xd0,0xa6,0xed,0x5e,0xc6,0x18,0x4c,0x6c,0x50,0x4a,0xd1,0x3f,0xd0,0xbf, + 0xea,0x6d,0xd,0x60,0xa7,0xe4,0x6c,0x3a,0x24,0x8e,0x41,0x63,0x88,0xe3,0x10,0x8c, + 0x46,0x6b,0x83,0x92,0x12,0x3f,0x8,0xa8,0xcc,0xce,0x31,0x3e,0x33,0x4b,0x53,0x1b, + 0xa,0xdd,0x65,0x6c,0x25,0x9,0xeb,0x35,0xb2,0x52,0x90,0xcb,0xe5,0x12,0x9d,0xa3, + 0x13,0xce,0x11,0x62,0xd,0x88,0x8e,0xfa,0x69,0x40,0xa,0x62,0xad,0x69,0x36,0x9b, + 0x43,0xb5,0x5a,0x2d,0x3,0xd4,0x4e,0xb,0xa0,0xdf,0xfe,0xf6,0xff,0xf4,0x2e,0x2e, + 0x2e,0x5d,0x59,0xc8,0x17,0x58,0xd7,0xdf,0x4f,0x65,0x71,0x91,0xe6,0x6c,0x95,0x40, + 0x39,0x58,0x7e,0x88,0x8e,0x16,0x51,0x51,0x48,0xd0,0x6c,0x12,0x1b,0x83,0x94,0x2, + 0xdb,0xb2,0xb0,0x6d,0x7,0xcf,0xf5,0x70,0x5d,0x7,0x24,0x48,0x64,0xd2,0x1,0x1, + 0x96,0x65,0x63,0xa9,0x24,0xd5,0x48,0xf2,0x26,0x8d,0x31,0xa4,0x3a,0x28,0x4a,0x4, + 0xa4,0xd6,0x80,0xa0,0xe5,0x7,0x54,0xe6,0xe6,0x38,0x3c,0x36,0xce,0x64,0xa5,0x42, + 0xb6,0xdc,0xb,0xcd,0x26,0x39,0xd7,0x23,0x93,0xc9,0x61,0xa3,0xf1,0x7d,0x9f,0x58, + 0x9b,0x15,0x60,0x4e,0x32,0x31,0xd0,0x5a,0x13,0x46,0xe1,0x40,0x10,0x4,0x5d,0xa7, + 0xd,0xd0,0xe4,0xd4,0xd4,0x2e,0xa5,0xe4,0x8b,0xba,0xbb,0x4b,0x48,0x29,0xc8,0xba, + 0xe,0xfd,0x3d,0xdd,0x44,0x8e,0x87,0x8e,0x63,0xe,0x8f,0x4f,0x30,0x3d,0x3a,0x8a, + 0x5f,0xaf,0xe3,0x7a,0x1e,0x8e,0x9d,0x88,0x35,0xc7,0x75,0xc8,0xe7,0xf2,0x14,0x8b, + 0x45,0xa,0x85,0x3c,0xb9,0x5c,0xe,0xd7,0x75,0xd3,0xf0,0x1b,0x12,0xc9,0x8,0x3b, + 0xe5,0x2e,0x4,0xc4,0x3a,0x46,0xc7,0x1a,0x1d,0xe9,0x76,0xd,0x5b,0x6b,0xcd,0xfc, + 0xc2,0x22,0x33,0x73,0x55,0xe2,0x58,0x53,0xf0,0x3c,0x6c,0x1,0x96,0xd6,0xf8,0x7e, + 0x13,0x29,0x21,0x97,0xc9,0x10,0x2f,0x6b,0x4,0x23,0xd6,0x76,0xaf,0xe3,0x6c,0x48, + 0x4,0x7e,0xcb,0xef,0x5f,0xaa,0xd5,0x7a,0x80,0xd1,0xd3,0x2,0xa8,0xd9,0x68,0x5e, + 0xaf,0xa4,0xda,0x61,0xdb,0xe,0x61,0x14,0xe1,0xda,0x36,0xdd,0x19,0x8f,0xfd,0x87, + 0xe,0xe3,0x47,0x11,0xad,0x66,0x93,0x38,0x8a,0xe8,0xea,0xee,0xa6,0x58,0x28,0x60, + 0x59,0xa,0xad,0x35,0x41,0x10,0x30,0x3f,0x3f,0x4f,0xa5,0x52,0xc1,0xb2,0x2c,0x8a, + 0xc5,0x22,0x3,0x83,0x3,0x94,0xbb,0xcb,0xb8,0x6e,0x22,0x2e,0x7d,0x3f,0x40,0xa5, + 0xe5,0x90,0x58,0xc7,0x9,0x37,0x99,0xe5,0x3a,0x91,0xa1,0xde,0x68,0x52,0x6f,0x36, + 0x10,0x18,0x72,0xb9,0x2c,0xc5,0x7c,0x1e,0x21,0x5,0xad,0xc0,0x27,0x88,0x42,0x54, + 0x2e,0x83,0xeb,0xd8,0x29,0xa0,0xab,0x9b,0x59,0xd3,0x9a,0x3a,0xb9,0x52,0x29,0x45, + 0xb3,0xd9,0xec,0x9a,0x9f,0x9f,0xef,0x3a,0x6d,0x92,0xe,0xa3,0xf0,0x1a,0x63,0x58, + 0xbf,0x7c,0xdb,0x30,0x8a,0x39,0xb8,0x7f,0x3f,0x87,0xf,0x1e,0xa2,0x54,0x2e,0xb3, + 0x69,0xf3,0x66,0xa,0x17,0x6e,0xc5,0x92,0x32,0xc9,0xa4,0xc5,0x4a,0x19,0x30,0xd6, + 0x31,0xad,0x66,0x8b,0x5a,0xad,0xc6,0x4c,0x65,0x86,0x5f,0xff,0xfa,0xd7,0xf4,0x74, + 0x97,0x39,0xef,0xbc,0xf3,0x28,0xf7,0x94,0x31,0x18,0xe2,0x58,0xb7,0x55,0x72,0xfb, + 0xbb,0x43,0xef,0x48,0x1,0x39,0xcf,0x43,0x5a,0x16,0x8e,0xeb,0x12,0xeb,0x18,0x55, + 0xaf,0xd3,0x63,0x17,0x28,0xe4,0xb2,0x9,0xef,0xad,0xe6,0x97,0xb5,0x5a,0x87,0x5e, + 0x6b,0x67,0x2a,0x52,0x12,0x44,0x61,0xa9,0xde,0x68,0x9c,0x3e,0x40,0x71,0xac,0x2f, + 0xd1,0x46,0xa3,0x94,0x22,0x8e,0x35,0x95,0xca,0xc,0xfb,0xf,0x1e,0x64,0xd3,0xa6, + 0x4d,0xc,0xf,0x6f,0x26,0x97,0xcb,0x21,0xd3,0x2a,0xe2,0xf2,0x8,0x45,0x51,0x9c, + 0x16,0xc3,0x6c,0x32,0x9e,0x47,0xa9,0x54,0xa4,0xbf,0xbf,0x8f,0x6a,0xb5,0xca,0xc4, + 0xc4,0x4,0x8f,0x3d,0xf1,0x38,0x1b,0x87,0xd6,0x73,0xde,0x96,0x2d,0xd8,0x8e,0x9d, + 0xce,0x7f,0x27,0x7d,0x88,0xe2,0xa8,0xcd,0x47,0x68,0x8d,0xeb,0x38,0x38,0xb9,0x24, + 0x5,0x69,0x5,0x1,0xcd,0x66,0x48,0x4f,0x57,0x9,0xd7,0xb6,0x9,0xa3,0x88,0x28, + 0x8e,0x91,0x82,0x8e,0xec,0x5f,0xac,0x61,0x3d,0x66,0x75,0x61,0x29,0x71,0x31,0x29, + 0xd0,0x51,0x5c,0xf6,0x5b,0x7e,0xcf,0x69,0x3,0x64,0xb4,0x29,0x62,0x12,0x61,0x15, + 0x4,0x1,0x4b,0x4b,0x35,0x76,0xbc,0xf8,0x45,0x6c,0xda,0xb4,0x9,0xcf,0x73,0x68, + 0x36,0x7c,0x82,0x20,0x48,0x72,0x1c,0x29,0x51,0x4a,0x91,0xf1,0x5c,0x1c,0xd7,0x41, + 0x8,0x41,0xab,0xd5,0x22,0xc,0x63,0x6c,0xdb,0xc1,0x75,0x5d,0x72,0xb9,0x1c,0xd3, + 0xd3,0xd3,0x4c,0x4c,0x4e,0x32,0x57,0xad,0xb2,0x6d,0xdb,0x36,0x72,0xb9,0x3c,0xa1, + 0x8e,0x91,0x52,0x62,0x3b,0xe,0x41,0xcb,0x4f,0x14,0xb1,0x65,0x51,0xca,0xe5,0x70, + 0x1d,0x7,0xdf,0xf7,0x51,0x52,0x50,0xcc,0x65,0xb1,0x2c,0x45,0x14,0xc5,0xc4,0xb1, + 0xc1,0x52,0x29,0xf9,0x1f,0xd7,0x7a,0x4c,0xc7,0x44,0x41,0xc7,0xde,0x54,0xdc,0x46, + 0x51,0xc4,0xb1,0x75,0x82,0x53,0xa,0xf3,0x46,0x22,0x68,0xe7,0x34,0xeb,0xd7,0xf, + 0x51,0xea,0x2a,0xb1,0xb8,0xb0,0xc4,0xde,0xbd,0xcf,0xb2,0xb0,0xb0,0x88,0xe7,0xb9, + 0xe4,0xf3,0xb9,0xf6,0xbb,0x64,0x3c,0xf,0x83,0xc0,0xb1,0x5d,0x36,0x6e,0x1c,0xa2, + 0x54,0x74,0xa9,0x37,0x9a,0xb4,0x5a,0x2d,0xa,0xf9,0x2,0x96,0xb2,0xb0,0x6d,0x97, + 0xe9,0xe9,0x29,0x9e,0x7c,0xe2,0x9,0xf2,0xdd,0x65,0x54,0x26,0x87,0xe5,0xd8,0xf4, + 0x74,0x15,0x28,0x39,0x2e,0x52,0x6b,0x6c,0x65,0x21,0x31,0x84,0x61,0x80,0xd6,0x31, + 0x8e,0x92,0x8,0x29,0x31,0x8,0x62,0x1d,0x52,0xab,0x2d,0xd1,0x68,0xd4,0x29,0xf7, + 0xf4,0xa4,0x65,0x11,0xb3,0x26,0x5,0x89,0x63,0x20,0x33,0xed,0xbc,0x4c,0x1b,0x83, + 0xe9,0xa8,0x86,0x9e,0x9e,0x50,0x4c,0xf9,0xc1,0xb2,0x2c,0xbc,0x8c,0xc7,0xd4,0xe4, + 0x14,0x87,0x8f,0x8c,0x52,0xa9,0xcc,0x2,0x50,0xd4,0x5,0x3c,0xcf,0x4d,0x92,0xca, + 0x74,0xba,0xe7,0xe0,0x81,0x23,0xec,0xdf,0x3f,0xc6,0xc8,0xf9,0x23,0x6c,0xbd,0x70, + 0x98,0xad,0x17,0xc,0xe3,0x79,0x45,0xaa,0xb,0x8b,0xd8,0x51,0x4c,0xb9,0xa7,0x1b, + 0x84,0x61,0x62,0x7c,0x82,0xc9,0xe9,0x69,0x4a,0x83,0xeb,0x59,0x37,0x30,0x88,0xc8, + 0xb8,0x54,0x97,0x16,0xc8,0x2a,0x81,0x14,0xb4,0xd3,0x9a,0xc4,0x25,0x24,0x52,0x49, + 0xb4,0x11,0x2c,0x2d,0xd5,0x18,0x1b,0x1b,0x45,0x6b,0x43,0x6f,0x5f,0x5f,0x62,0x41, + 0x66,0xd,0xbd,0xf3,0x5c,0xc6,0x61,0x4e,0xc0,0x5b,0x27,0xb,0x90,0x31,0x26,0xa9, + 0x23,0xb,0xc9,0xc2,0xc2,0x22,0x7,0xe,0x1c,0xa4,0x56,0xab,0x77,0xb8,0x75,0x52, + 0x6e,0x10,0x42,0x12,0xc7,0x1a,0x29,0x15,0x8d,0x46,0x9d,0xc3,0x87,0xf,0x30,0x3f, + 0x3f,0xcf,0x33,0x7b,0xf6,0x70,0xc1,0x5,0xc3,0x5c,0x73,0xcd,0x15,0xf4,0xaf,0xeb, + 0x63,0x4e,0xcf,0xe1,0x87,0x3e,0xc5,0x62,0x11,0x23,0x24,0x33,0x95,0x59,0x4c,0x14, + 0x10,0x87,0x21,0x4d,0x60,0x71,0x7e,0x81,0x8d,0xbd,0xdd,0x58,0xa,0xa2,0x30,0x46, + 0xa4,0x15,0x3,0x91,0x4e,0xe6,0xc5,0x51,0x4c,0x18,0x45,0xd8,0x8e,0x4b,0x36,0x93, + 0x49,0xf7,0xeb,0xe7,0xe2,0xe6,0xa3,0x40,0x58,0x6,0x5c,0x24,0xf2,0x22,0xa3,0xb5, + 0xce,0x9e,0x36,0x40,0x96,0x65,0x1d,0x9,0xc2,0x70,0xa3,0x4c,0x4b,0x1a,0x53,0x53, + 0x53,0x34,0x1a,0x2d,0x94,0x52,0x48,0x21,0x69,0x6,0x2d,0x5a,0x7e,0xc2,0x19,0x8e, + 0xeb,0x60,0xdb,0xe9,0xca,0xd,0x1,0x10,0x50,0xad,0x4e,0xe3,0x37,0x97,0x38,0x74, + 0xf0,0x0,0x93,0x53,0x93,0xfc,0xde,0xd,0xaf,0x62,0xf3,0xe6,0xd,0x84,0x61,0x48, + 0x18,0xc5,0x14,0xbb,0xba,0x0,0xc1,0xd4,0xcc,0xc,0xa3,0xbf,0x7d,0x8a,0x72,0x5f, + 0x3f,0x39,0xcf,0xc1,0xb5,0x1d,0x2c,0x25,0xda,0x49,0x6d,0x22,0xb7,0x93,0x89,0x80, + 0x96,0xef,0xe3,0xba,0x2e,0x43,0x43,0x43,0xd8,0x96,0x85,0xd1,0xba,0xb3,0xfb,0xc7, + 0xd6,0xb1,0x8f,0x9d,0x9a,0x44,0x8,0x41,0xa3,0xd1,0xa4,0x54,0x2c,0x2e,0x16,0x8b, + 0x85,0x89,0xd3,0xae,0x7,0xe5,0x72,0xb9,0xdd,0x96,0x65,0xd5,0xb4,0xd6,0x44,0x51, + 0x48,0xad,0x56,0xc3,0xb2,0x54,0x5a,0x57,0x11,0x48,0x24,0x7e,0x10,0x52,0x6f,0x34, + 0x90,0x32,0x29,0x94,0x29,0x29,0xc9,0xe5,0x72,0x74,0x77,0x97,0x71,0x1d,0x45,0xb1, + 0xe0,0xe0,0x3a,0xf0,0xb3,0x47,0x1f,0xe5,0x1b,0xf7,0x7e,0x8b,0xfd,0xfb,0xe,0xd0, + 0xdd,0xdd,0x85,0xe7,0xb9,0x8,0x63,0xc8,0x66,0x32,0x78,0x4a,0xd1,0x9c,0xab,0xe0, + 0xcf,0xcf,0x32,0xd0,0xdd,0x85,0x63,0x5b,0x28,0x65,0x63,0xd9,0x4e,0x5a,0xa2,0x15, + 0x29,0xa9,0xc6,0x44,0x51,0x84,0x6d,0x25,0x11,0x52,0x2a,0xb9,0x52,0x4b,0x32,0xcf, + 0x65,0x3f,0xe6,0x28,0x2b,0xa,0xfc,0x0,0x29,0x64,0x65,0xeb,0xd6,0x91,0x2f,0x5c, + 0x7d,0xf5,0x55,0xf,0x3c,0x17,0x6,0xcf,0xb9,0xfc,0x65,0x61,0x71,0x31,0x6e,0x36, + 0x5b,0x1b,0x1a,0x8d,0xc6,0x16,0xad,0xd,0x95,0x4a,0x85,0x38,0xd6,0xa4,0x93,0x18, + 0x89,0x96,0xd1,0x31,0x71,0x18,0x51,0xc8,0xe7,0xdb,0xea,0xd8,0xf3,0x3c,0xca,0x3d, + 0xdd,0x94,0x4a,0x5d,0x48,0xa9,0xe8,0x29,0x97,0xb0,0x2c,0xc5,0xa1,0x43,0x87,0x99, + 0x9a,0x9a,0x61,0xd3,0xe6,0x4d,0x74,0x77,0x95,0x8,0x7c,0x1f,0xa3,0x35,0x8e,0x63, + 0x27,0xba,0xa9,0xd1,0xa0,0xaf,0xa7,0x7,0xdb,0xb1,0x13,0xe2,0x35,0x1a,0x91,0x96, + 0x45,0xa4,0x80,0x20,0xf0,0x13,0xed,0x64,0x96,0x53,0x14,0xb3,0x6,0x28,0xa2,0x9d, + 0x30,0x2f,0x8b,0xce,0xe5,0xb3,0xb4,0x31,0xe8,0x58,0x63,0x8c,0x9e,0xbe,0xe4,0x92, + 0xed,0xef,0xbb,0xe2,0xf2,0xcb,0xfe,0x71,0x60,0xdd,0xba,0xfa,0x69,0x3,0x34,0x38, + 0x30,0xf0,0xcc,0xe4,0xe4,0xd4,0xa6,0xc5,0x85,0xc5,0x57,0x19,0xc,0xd5,0x6a,0x95, + 0x28,0x5a,0x49,0x7c,0x85,0x49,0x84,0x5a,0x10,0x6,0x28,0x65,0x25,0xd3,0xc2,0x4a, + 0x61,0xdb,0x16,0xa5,0x62,0x89,0xc1,0xc1,0x21,0x36,0xf,0xf,0x53,0xee,0xeb,0xa7, + 0xaf,0xb7,0x17,0xd7,0x75,0x99,0x9d,0x9d,0xa7,0x32,0x3b,0xcf,0x85,0x17,0x8e,0xe0, + 0x3a,0xe,0x5a,0xc7,0x48,0x69,0xa1,0x8d,0x61,0x6e,0x7e,0x9e,0x28,0x8a,0x28,0x15, + 0x4b,0x38,0x8e,0x83,0x2d,0xd,0xae,0x5,0x96,0x30,0x8,0x13,0x13,0x6,0x7e,0x2, + 0x8a,0xec,0xa8,0x42,0x9e,0x80,0x84,0x3b,0xb9,0x47,0x6b,0xd,0x82,0xca,0xf6,0xed, + 0xdb,0xdf,0xfb,0xb2,0x97,0x5d,0x73,0x77,0xa1,0x50,0x88,0xce,0xb8,0xa2,0x58,0x2e, + 0x77,0x3f,0x3c,0x3d,0x33,0x13,0x35,0x1a,0xd,0xcb,0x71,0x6c,0x9a,0xcd,0x56,0xe2, + 0xd5,0xcb,0x53,0xcc,0x96,0x85,0x2,0x66,0x2b,0xb3,0x78,0xae,0x4b,0x57,0x57,0x29, + 0x15,0x96,0x31,0xad,0x96,0xf,0x40,0x77,0xa9,0xc4,0xba,0xfe,0x7e,0x46,0x46,0x46, + 0x98,0x9e,0x9e,0x62,0x6a,0x6a,0x86,0xd1,0x23,0xe3,0x9c,0x77,0xde,0x26,0x32,0x99, + 0xc,0x71,0x5c,0x27,0x9b,0xc9,0x52,0x2c,0x14,0x98,0xa9,0x54,0x18,0x1a,0x1a,0xa2, + 0x98,0xcf,0xe0,0xa8,0x84,0x83,0x96,0x45,0xe1,0x72,0x91,0x4d,0x20,0x8,0x8c,0x61, + 0x35,0x37,0x1f,0x1b,0x91,0x56,0x38,0x27,0xc,0x43,0x2c,0xa5,0x26,0xb6,0x6d,0xbb, + 0xe8,0xfd,0x2f,0x7f,0xd9,0x4b,0xef,0xf2,0x3c,0xef,0xa4,0xd2,0xda,0x13,0xd6,0xa4, + 0x2f,0xbe,0x78,0xfb,0xc3,0xbd,0xbd,0x3d,0x9f,0x8c,0x63,0x4d,0xa1,0x50,0x40,0xa9, + 0x15,0xcd,0x21,0x0,0x25,0x92,0x89,0x3a,0x3,0xcc,0x54,0x2a,0x2c,0x2d,0xd5,0xc0, + 0x80,0xb2,0x2c,0x72,0xf9,0x1c,0x9,0xa8,0xd,0x6a,0x4b,0x4b,0x18,0x63,0x18,0x18, + 0x1c,0xe4,0xc5,0x2f,0xbe,0x84,0x6c,0x2e,0x83,0x4e,0x67,0x3e,0x6c,0x3b,0x49,0x70, + 0x73,0xf9,0x1c,0xad,0x56,0x8b,0x5a,0x6d,0x89,0x38,0xa,0xdb,0xb3,0x19,0x1a,0x91, + 0x16,0xc2,0x92,0xef,0x30,0x48,0xca,0xbe,0x70,0xf4,0xdc,0xbe,0x48,0xff,0x3a,0x97, + 0xdb,0x8,0x21,0x68,0x35,0x5b,0x28,0xa9,0x2a,0x97,0x5c,0x7c,0xf1,0xbb,0x5f,0x73, + 0xfd,0xab,0xff,0xee,0x64,0xc1,0x39,0xe9,0xa2,0xfd,0x2b,0x5f,0xf1,0xf2,0xf7,0x78, + 0x9e,0x43,0x2e,0x97,0x43,0x29,0xb5,0x52,0x41,0x4c,0xb,0xf7,0x4a,0x4a,0x6c,0xdb, + 0x26,0x8,0x2,0xa6,0xa7,0xa6,0xa9,0x2e,0x2c,0x24,0xca,0xd8,0x4a,0xaa,0x8f,0xd9, + 0x6c,0x16,0x63,0x34,0xb5,0x7a,0x8d,0x46,0xa3,0xd9,0x2e,0x6e,0xf9,0x2d,0x1f,0x25, + 0x25,0x8e,0x63,0xa3,0x94,0x4c,0xaa,0x88,0x40,0x63,0xa9,0x86,0xef,0x7,0x18,0x23, + 0xd3,0x35,0x43,0x12,0x5b,0x25,0x6a,0x7d,0xba,0x32,0x4b,0xb5,0x5a,0x45,0xa5,0xe1, + 0xdf,0xb0,0xc2,0x87,0xcb,0x25,0xe0,0x95,0x74,0x42,0xd2,0xa8,0x37,0x50,0x4a,0x35, + 0x76,0xec,0x78,0xd1,0xbf,0xbd,0xe6,0x9a,0x97,0x7c,0xe5,0x54,0xe7,0x1,0x4f,0x7a, + 0x56,0xe3,0xd6,0x3f,0xfe,0x97,0x42,0x29,0x8b,0x42,0xa1,0xd0,0x2e,0x8a,0xad,0xcc, + 0x5b,0x89,0x4,0x24,0xcb,0x26,0x8,0x43,0xa6,0xa7,0x67,0x98,0x99,0x99,0x21,0xc, + 0x3,0xa4,0x94,0xe9,0x54,0xb0,0x83,0x65,0x29,0xe2,0x38,0xa2,0xd9,0x6c,0xd1,0x6c, + 0xb6,0x58,0x58,0x5c,0x4a,0x45,0xa8,0x8d,0x14,0x12,0xa5,0x92,0x12,0x6e,0xbd,0xd9, + 0x48,0xa7,0x92,0xc,0xb1,0x86,0xd8,0xc0,0x62,0xbd,0xc9,0xe4,0xcc,0x2c,0x8,0x41, + 0x2e,0x97,0x49,0xcb,0xb1,0xe6,0x38,0xf4,0x93,0xc8,0x82,0x7a,0xbd,0x8e,0xb2,0xac, + 0xe0,0xf2,0xcb,0x77,0xdd,0x7a,0xc5,0x15,0x97,0x7f,0xcb,0xf3,0x3c,0x7d,0xaa,0x0, + 0x9d,0xd2,0xc4,0x61,0x6f,0x5f,0xef,0xfd,0x41,0x18,0xde,0x54,0xaf,0xd7,0x89,0xa2, + 0x46,0xbb,0x6c,0xb0,0x5c,0xea,0x5c,0xb6,0xae,0x30,0x8a,0x98,0x99,0x99,0xa5,0xd5, + 0xf2,0xe9,0x2a,0x15,0xf1,0xdc,0x24,0x24,0x3b,0xb6,0x83,0x8e,0x63,0xb4,0x49,0xd2, + 0x17,0xdf,0xf7,0x9,0xe3,0x18,0xdb,0xb2,0x90,0x52,0xb5,0xc1,0xf6,0x83,0x30,0x89, + 0x96,0x29,0xd7,0xb5,0x5a,0x11,0x7b,0xf7,0x1d,0x42,0x4a,0xc1,0xe0,0xe0,0x3a,0x32, + 0xd9,0x3c,0x41,0xb4,0x9c,0x44,0x47,0xc7,0x56,0xd,0x8d,0xc1,0xf7,0x7d,0x6c,0xcb, + 0xe,0xae,0xba,0xea,0x8a,0x1b,0x77,0xee,0x78,0xf1,0x4f,0xb2,0xd9,0xec,0x29,0x83, + 0x73,0xca,0x13,0x87,0x37,0xfe,0xc1,0xef,0xbd,0xbe,0xa7,0xb7,0xe7,0xf1,0x72,0x39, + 0xa9,0xeb,0x2c,0x5b,0x91,0x4a,0xe7,0xc9,0x84,0x48,0x26,0x1,0x97,0x5,0xdc,0xc2, + 0xc2,0x22,0x53,0x53,0x33,0x4c,0xcf,0xcc,0xb0,0xb0,0xb0,0x80,0xef,0xfb,0x20,0x4, + 0xca,0x92,0x58,0x4a,0x22,0x84,0x41,0xc7,0x71,0xd2,0x39,0x99,0xa4,0x16,0x61,0x18, + 0xa2,0x2c,0xb,0x2d,0x44,0x52,0xc,0x4b,0x17,0x37,0xe8,0x38,0xa6,0x90,0xcf,0xe1, + 0x38,0x1e,0xc6,0x8,0xa2,0x30,0xa6,0xd5,0x6a,0xae,0xac,0x10,0x49,0xc1,0x5d,0xae, + 0x47,0x39,0x8e,0x53,0xb9,0xfa,0x25,0x57,0xdd,0xb8,0x6b,0xe7,0x8e,0x7,0x4e,0x17, + 0x9c,0xd3,0x9a,0x9b,0xff,0xc3,0x9b,0x6f,0xda,0x75,0xdf,0x77,0xbe,0xfb,0xbf,0xa3, + 0x30,0xda,0x55,0x99,0x9d,0x4d,0x27,0xea,0x54,0x7b,0xe4,0xda,0xb,0xa9,0xa4,0x44, + 0xc7,0x31,0x7e,0x2b,0xc9,0xf8,0xeb,0x8d,0x6,0x9e,0xeb,0xe1,0xb8,0x4e,0xba,0x4, + 0x26,0x21,0xf9,0xee,0xee,0x2e,0x84,0xc8,0x80,0x31,0xe9,0x64,0x5f,0x4c,0xb1,0x58, + 0xc0,0xb2,0x1d,0x82,0x48,0x23,0x30,0x8,0x25,0x19,0x5a,0xbf,0x1e,0xc7,0x73,0x31, + 0x96,0x4d,0xc3,0xf,0x98,0x9b,0x9f,0xa7,0xd5,0x6a,0xb2,0x7e,0x70,0xa8,0x3d,0x97, + 0x1f,0xeb,0x98,0x20,0xc,0xc8,0xe7,0xf2,0x4f,0xee,0xda,0xb5,0xe3,0xf6,0xab,0xae, + 0xbc,0xe2,0xc1,0x33,0x5d,0x41,0x77,0x5a,0x4b,0xf0,0x5e,0x7f,0xf3,0xeb,0x2e,0x1d, + 0x39,0x7f,0xcb,0xe3,0xbd,0xbd,0x65,0x6c,0xdb,0x4e,0xe6,0xad,0x52,0xc2,0x5e,0xb6, + 0xa4,0xe5,0xa2,0x54,0x42,0xc0,0x49,0x3d,0xa9,0x56,0xab,0x33,0x3f,0x5f,0x65,0x6e, + 0x76,0x8e,0xb9,0xb9,0x79,0x16,0x16,0x96,0x88,0x63,0x8d,0x65,0x2b,0x7c,0x3f,0x60, + 0x7e,0xbe,0x8a,0xe3,0xd8,0x74,0x77,0x77,0xe3,0x3a,0x6e,0xb2,0xc6,0x48,0x43,0xa4, + 0x5,0x6e,0xae,0x80,0xb6,0x6c,0x94,0x97,0xc5,0xd7,0x50,0x5d,0x5c,0x22,0xf4,0x43, + 0xa4,0x12,0x90,0xce,0xae,0xf8,0xbe,0x4f,0xb1,0x58,0xf8,0xd5,0x65,0x97,0xed,0xfa, + 0xb3,0xb3,0x1,0xce,0x69,0x3,0x4,0x70,0xf3,0x2d,0x37,0xed,0x1a,0x19,0x19,0x79, + 0x72,0xdd,0xba,0x7e,0x1c,0xc7,0x4e,0x52,0xf,0x29,0xda,0x0,0xb5,0x13,0xcc,0xd4, + 0xf4,0x2d,0xa5,0x92,0x7c,0xcd,0xb2,0x90,0x69,0x62,0x9b,0xc9,0x64,0xf0,0xbc,0xc, + 0x51,0x18,0x31,0x39,0x39,0xc9,0x91,0xd1,0x23,0x94,0xcb,0x65,0xa,0xf9,0x7c,0xba, + 0x12,0x24,0xd1,0xc5,0x51,0x14,0x25,0x25,0x17,0x1,0x1a,0x7,0x65,0xe7,0xe9,0x2a, + 0xf7,0xd2,0xbf,0xae,0x2f,0x91,0x1,0x5a,0xd3,0xa,0x2,0x8a,0xc5,0xe2,0xd3,0x97, + 0x5d,0x7a,0xe9,0x6d,0x57,0x5c,0x7e,0xd9,0xcf,0xcf,0xd6,0xea,0xdd,0x33,0x5a,0xc4, + 0x79,0xf3,0xeb,0x5f,0xb7,0x63,0x64,0xe4,0xfc,0x87,0x37,0x6e,0xd8,0xd0,0x2a,0x16, + 0x8b,0xc9,0x4,0x1e,0x6b,0x5b,0x53,0x3b,0x11,0x48,0x97,0xb5,0xd8,0xb6,0xcd,0xc0, + 0xc0,0x3a,0xa,0x85,0x3c,0x93,0x53,0x53,0xec,0xd9,0xfb,0x2c,0x61,0x18,0x71,0xde, + 0xf0,0x30,0x9e,0x97,0x49,0xe6,0xc3,0x64,0x22,0x14,0xe3,0x28,0x99,0x68,0x24,0x36, + 0x44,0x7e,0x80,0xe7,0x79,0xf4,0xf7,0xf7,0x91,0xcf,0xe7,0x89,0x53,0xce,0xc9,0x65, + 0x32,0x13,0x2f,0xb9,0xea,0xca,0x3f,0xb9,0xec,0xd2,0x5d,0xbf,0x38,0x9b,0x6b,0xbf, + 0xcf,0xca,0x4a,0xfb,0x9f,0xfe,0xf4,0xd1,0xf,0x1d,0x3e,0x3c,0xfa,0xde,0xea,0x42, + 0xd5,0x9a,0x9f,0xaf,0xb2,0x54,0xab,0x25,0xb5,0xa1,0xa3,0x17,0xd8,0x27,0x7a,0x45, + 0x1b,0x6c,0xcb,0x62,0x70,0x70,0x80,0x4d,0x1b,0xd6,0x13,0xc6,0x31,0xfb,0x46,0xc7, + 0xa9,0xd6,0x6a,0xc,0xf6,0xf5,0xb0,0xae,0xbb,0x1b,0x8c,0x69,0x13,0x7f,0xab,0xd5, + 0x4a,0xc4,0x67,0xba,0xe2,0x43,0x77,0xd4,0xa9,0x8c,0x36,0x84,0x51,0x88,0xeb,0x38, + 0x53,0xd7,0x5d,0xfb,0xca,0x57,0x6c,0xdf,0xbe,0x6d,0xf,0x67,0xb9,0x9d,0x95,0x75, + 0xd2,0xb6,0x6d,0xdf,0x71,0xe9,0xa5,0x3b,0xef,0x7b,0xf6,0xd9,0x7d,0x9f,0xf3,0x5c, + 0x6f,0x57,0x39,0x5d,0xf2,0xd6,0x68,0x36,0x8,0xfc,0xa0,0x43,0x6,0x58,0xe4,0xb, + 0x79,0x7a,0xcb,0xdd,0x14,0x8a,0x45,0x5a,0x2d,0x9f,0xca,0xe2,0x22,0xb5,0x30,0x44, + 0x65,0x3c,0xa4,0x97,0xc5,0x47,0x90,0x51,0x12,0x5b,0x29,0xfc,0x20,0xa4,0xd5,0x6c, + 0x25,0x6b,0x1,0x2c,0xd5,0x2e,0xb1,0xea,0x58,0x13,0xc5,0x9a,0x30,0x8a,0x70,0x5c, + 0xa7,0x76,0xfd,0xf5,0xaf,0x7a,0xc5,0xe0,0xc0,0xba,0xbd,0x9c,0x83,0x76,0xd6,0xfe, + 0x57,0x63,0xdf,0xbe,0xfd,0x22,0x9f,0xcf,0xe7,0x2b,0x95,0xca,0xab,0xf7,0xed,0x3f, + 0xf0,0xd1,0x4a,0xa5,0x72,0x91,0x80,0x74,0x75,0xab,0x40,0x90,0xc8,0x1,0xcb,0x4a, + 0x4a,0xa7,0x3a,0xd6,0xc4,0x51,0xc4,0x92,0xdf,0x62,0x72,0xb1,0x46,0x3d,0xd2,0x14, + 0x73,0x39,0x4a,0x9e,0x43,0x7f,0x21,0x87,0x12,0x82,0x5a,0xad,0x4e,0xa3,0xd9,0xc4, + 0x18,0x8d,0x1f,0x4,0xd4,0xeb,0xd,0x62,0x4,0xd2,0x52,0x8,0x63,0xe8,0xeb,0xea, + 0x7e,0xec,0xba,0xeb,0x5e,0xfe,0xa6,0xfe,0xbe,0xbe,0x3d,0xdd,0xdd,0xdd,0xe6,0x5, + 0xd,0xd0,0x72,0xdb,0x7f,0xe0,0xa0,0x5c,0x5a,0x5a,0x2a,0x3b,0x8e,0x7d,0xd5,0xf8, + 0xf8,0xc4,0x5b,0x2a,0x95,0xd9,0x3f,0xf2,0x7d,0xbf,0xcd,0x4d,0x4a,0x25,0xab,0x42, + 0xd0,0x20,0x54,0x42,0xb0,0x8b,0x2d,0x9f,0xb9,0x46,0x93,0x30,0x8c,0xf0,0x94,0xa4, + 0xcb,0x73,0x89,0xc2,0x90,0x46,0xab,0x45,0xa4,0x35,0x51,0x18,0xd1,0x6c,0xd4,0xb1, + 0x6c,0xfb,0x40,0xef,0xba,0x81,0xdf,0xf6,0xf7,0xf7,0x1e,0x1c,0xe8,0xeb,0x7b,0x64, + 0xd3,0xfa,0xa1,0x1f,0x9d,0xbf,0xe5,0xbc,0x39,0xce,0x61,0x3b,0x67,0xff,0x2f,0x56, + 0xad,0x56,0xc5,0xb3,0xfb,0xf6,0x97,0x72,0xb9,0xdc,0x86,0x5a,0xad,0xb6,0x6b,0x61, + 0x61,0xe1,0x8a,0x46,0xa3,0xf9,0x92,0x30,0xc,0x2f,0x8c,0xe3,0xb8,0x98,0x66,0x3, + 0xcb,0x2b,0x33,0x2,0x3f,0x8a,0xaa,0x2d,0x3f,0xa8,0x4a,0x61,0xa6,0x1d,0xcb,0x9e, + 0x56,0x52,0x8e,0x39,0x8e,0x33,0xe6,0xb8,0xee,0x84,0x54,0x6a,0xdc,0x52,0x72,0xfa, + 0xf1,0x27,0x7e,0x3d,0x57,0x2a,0x97,0x1b,0x5b,0xb6,0x9c,0x17,0x9c,0xbf,0x79,0x73, + 0x63,0x78,0xd3,0x6,0xcd,0x39,0x6e,0xe7,0xfc,0x5f,0x32,0xeb,0xf5,0xba,0xa8,0xd7, + 0xeb,0xa5,0xa9,0xa9,0xe9,0x6d,0x73,0x73,0xf3,0x2f,0xad,0xd7,0xeb,0xbb,0xfc,0x20, + 0xd8,0x10,0xc7,0x71,0xd7,0xbf,0x78,0xe3,0x1b,0x76,0x0,0x7c,0xee,0x73,0x5f,0xf8, + 0xe1,0x86,0xd,0x1b,0xe,0x47,0x71,0x3c,0x23,0x4,0x13,0x8e,0xe3,0x4c,0x78,0x9e, + 0x37,0x56,0x2c,0x14,0x26,0x73,0xb9,0xdc,0x9c,0xeb,0xb9,0x8d,0x7c,0x2e,0x17,0xf5, + 0xf6,0xf6,0x3e,0xef,0xff,0xc2,0x79,0xae,0x0,0xfa,0x0,0x70,0x2d,0x70,0xf,0x70, + 0xf7,0x19,0xdc,0x67,0x38,0xfd,0x54,0x81,0xc7,0xf9,0x1d,0x34,0xeb,0x1c,0xde,0x7b, + 0x19,0xa0,0x4e,0xd0,0x9e,0xab,0x3d,0x4,0xec,0x5e,0xe3,0x1e,0x77,0xa5,0x20,0xff, + 0x69,0x7,0x68,0x6f,0x59,0xe3,0xfa,0x43,0x67,0x38,0x18,0x67,0xc,0xd0,0xea,0x17, + 0xbb,0x7,0x38,0x78,0x82,0x6b,0x3a,0x8f,0xdf,0x71,0x82,0x73,0xef,0x58,0x3,0xa0, + 0x83,0x6b,0xdc,0x67,0xf8,0x38,0xf7,0xda,0x7d,0x2e,0x0,0x3a,0x59,0x25,0xfd,0x56, + 0xe0,0x40,0xfa,0x62,0xcb,0x9f,0x3,0xe9,0xfe,0x53,0x76,0xeb,0x55,0x9f,0xeb,0x4e, + 0xf3,0xdd,0x77,0x9f,0xe1,0xf5,0x67,0xd5,0x82,0x3e,0x95,0x7e,0x5f,0x97,0xbe,0xd8, + 0xb5,0xc0,0x83,0xa9,0xf9,0xef,0x4e,0x47,0xf8,0xad,0x1d,0x16,0x36,0xdc,0x71,0x5d, + 0xf5,0x34,0xde,0xcb,0xa4,0xf7,0xed,0xea,0x18,0xa0,0x6b,0x81,0x9d,0xc0,0x1b,0x5e, + 0x88,0x1c,0xd4,0x95,0xbe,0xf0,0xee,0x8e,0xd1,0x5b,0x6,0x6a,0x78,0xd,0x57,0x1b, + 0x3e,0x1,0x37,0x75,0xb6,0x9d,0xc7,0xb1,0x8e,0xdd,0x1d,0x16,0x7a,0x70,0xd5,0xf3, + 0x9f,0xbf,0xb6,0x5c,0xc3,0x39,0xc1,0xc7,0x18,0x63,0xe,0x18,0x63,0xba,0xd2,0xed, + 0xae,0x74,0xdb,0x18,0x63,0x86,0x57,0x9d,0xdb,0x65,0x56,0xda,0xb5,0xab,0xee,0xf1, + 0x5c,0xed,0x3,0x6b,0x3c,0xf7,0xc0,0x1a,0xc7,0xae,0x4d,0xf7,0x3d,0x78,0x9c,0xed, + 0xb3,0xfa,0x91,0xa7,0xe0,0xef,0xc3,0xc0,0xb7,0xd2,0x68,0xf4,0x60,0xba,0x7d,0xf7, + 0x1a,0xd6,0x73,0xcb,0xaa,0xc8,0xf5,0xd6,0xd3,0xe4,0xa0,0x9d,0x1d,0x96,0xb8,0x13, + 0xb8,0xfd,0x85,0x1c,0xe6,0xef,0x49,0x5d,0xe3,0xda,0xe,0x17,0xa9,0xae,0xa,0xe3, + 0xed,0x2a,0xc8,0x2a,0x77,0xba,0xf6,0x34,0x35,0xcc,0x5b,0x56,0x81,0x7e,0x4b,0xfa, + 0xcc,0xe5,0x1,0x79,0x5e,0x74,0xd1,0xc9,0x58,0xd0,0x70,0x7,0x49,0xdf,0x9d,0x8e, + 0xf8,0xdd,0x29,0x2f,0x3d,0xb8,0x8a,0x6f,0x86,0x57,0x59,0xd0,0x72,0xd8,0x7d,0x70, + 0xd,0xd0,0xae,0xed,0x20,0xde,0xb5,0x38,0xef,0xad,0xab,0x2c,0x78,0x99,0xf4,0x87, + 0x3b,0x6,0xe8,0x5,0x61,0x41,0xb7,0xa4,0x2f,0xdc,0x29,0xd6,0x76,0xa7,0x2f,0x78, + 0x7b,0x3a,0xd2,0x1f,0x5c,0x15,0xed,0xaa,0xe9,0x35,0xf7,0xa4,0xbf,0x3b,0x81,0x38, + 0x99,0x52,0xe8,0x3b,0xd3,0xeb,0xf,0xa6,0x80,0xec,0x5e,0x15,0xd5,0x9e,0xb7,0x76, + 0x32,0x16,0x54,0x5a,0x43,0xac,0x1,0x3c,0xb1,0x6,0x90,0xcb,0x6e,0xd0,0x29,0xd8, + 0xde,0x5,0xec,0x3a,0x5,0xe,0xda,0xd9,0x21,0x4,0x3f,0xd8,0xb1,0xff,0x83,0xe9, + 0xbd,0x36,0x1f,0xe7,0xf9,0xbf,0x33,0x80,0x16,0x8e,0x13,0x9e,0x6f,0x5e,0x75,0xbc, + 0xb3,0x23,0x67,0x62,0xfe,0xcb,0x79,0xd7,0xdd,0xc7,0x51,0xea,0xb7,0xbc,0xd0,0x38, + 0xe8,0xdb,0x1d,0x6e,0xf2,0x58,0xea,0x46,0x8f,0xad,0x61,0x2d,0xdf,0x4e,0x2d,0xe5, + 0xd3,0x67,0xf8,0x4e,0x7,0x53,0x31,0xf8,0xae,0xe3,0x68,0xa8,0x9d,0xe9,0x39,0xc7, + 0x4b,0x73,0xbe,0xb5,0xc6,0x60,0x9e,0x53,0xe,0x3a,0x98,0xba,0xc1,0xa7,0x56,0x71, + 0xc9,0xe3,0x29,0x27,0x75,0x5a,0xcb,0xc9,0x8c,0xaa,0x39,0xc9,0x67,0xae,0x45,0xdc, + 0x9f,0x5a,0x45,0xfe,0xab,0x8f,0x5f,0xdb,0xc1,0x99,0xbb,0x9f,0x2f,0x80,0x96,0x3b, + 0x7e,0x3a,0x39,0xcf,0xf0,0x71,0x92,0xd2,0xd5,0xe7,0xbc,0xf5,0x39,0xb4,0xd0,0x72, + 0xbb,0xab,0xc3,0x7a,0x3e,0xb3,0xc6,0xa0,0xec,0xec,0x8,0x0,0x8f,0x3f,0x9f,0x16, + 0xc4,0x19,0x0,0xb3,0x79,0x8d,0x63,0x1f,0x3c,0x8e,0x20,0x3c,0x74,0x1c,0x3e,0xda, + 0xdd,0x41,0xf6,0x6b,0x71,0x5c,0x35,0x75,0xc9,0x1d,0x1d,0xfb,0x3e,0xf3,0x42,0x2f, + 0x98,0xfd,0x3f,0xd3,0xe4,0xff,0x87,0xe0,0xb9,0xdb,0xff,0x1d,0x0,0xd0,0xa5,0xbd, + 0xae,0xce,0x52,0x5a,0x92,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60, + 0x82, + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/cam1.png + 0x0,0x0,0x25,0xe, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, 0x0,0x0,0x48,0x0,0x0,0x0,0x48,0x8,0x6,0x0,0x0,0x0,0x55,0xed,0xb3,0x47, @@ -13158,7 +14952,7 @@ static const unsigned char qt_resource_data[] = { 0x15,0xb6,0x0,0xb3,0xb0,0x3,0xc0,0x85,0x7b,0x9d,0x4a,0xec,0x56,0x30,0x23,0x9f, 0xd4,0xff,0x5c,0xed,0x93,0x32,0xfe,0xdf,0x0,0x54,0xa5,0x5f,0xcf,0x23,0x70,0xf1, 0x5f,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, - // D:/????/??????/230526-????-2?????-1600x900-2/Cigarette/Resources/cam2.png + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/cam2.png 0x0,0x0,0x25,0x60, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, @@ -13759,7 +15553,7 @@ static const unsigned char qt_resource_data[] = { 0x77,0xd9,0xe7,0xcf,0x21,0x61,0x56,0x18,0x3,0x66,0x61,0x17,0x80,0xb,0x77,0x3b, 0x94,0xb8,0xa3,0x8c,0xe2,0xff,0x3f,0x80,0xff,0x3b,0x0,0x75,0x26,0x15,0x55,0x32, 0xac,0x4f,0x22,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, - // D:/????/??????/230526-????-2?????-1600x900-2/Cigarette/Resources/cam3.png + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/cam3.png 0x0,0x0,0x25,0x5c, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, @@ -14360,7 +16154,7 @@ static const unsigned char qt_resource_data[] = { 0xfe,0x17,0xb5,0x60,0xb6,0x1d,0x23,0x77,0x63,0xe9,0xad,0x18,0xbc,0xe7,0xb1,0x27, 0x80,0xfe,0xff,0x0,0xfe,0xef,0x0,0x2a,0x0,0x89,0x4b,0x4a,0xf9,0xc1,0x3e,0x0, 0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, - // D:/????/??????/230526-????-2?????-1600x900-2/Cigarette/Resources/cam4.png + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/cam4.png 0x0,0x0,0x25,0x52, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, @@ -14961,11 +16755,11 @@ static const unsigned char qt_resource_data[] = { 0xaf,0x43,0x89,0xbb,0xca,0x28,0xfe,0xff,0x6,0xfc,0xdf,0x1,0x0,0xd,0x9b,0xa5, 0x9c,0xa3,0x74,0x1,0x2,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60, 0x82, - // D:/????/??????/230526-????-2?????-1600x900-2/Cigarette/Resources/logo.png - 0x0,0x0,0x22,0x1b, + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/cam5_no.png + 0x0,0x0,0x25,0x33, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, - 0x0,0x0,0xb6,0x0,0x0,0x0,0xa2,0x8,0x6,0x0,0x0,0x0,0xec,0xb7,0x37,0x89, + 0x0,0x0,0x48,0x0,0x0,0x0,0x48,0x8,0x6,0x0,0x0,0x0,0x55,0xed,0xb3,0x47, 0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13, 0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0xa,0x4d,0x69,0x43,0x43,0x50,0x50,0x68,0x6f, 0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66,0x69, @@ -15135,989 +16929,5611 @@ static const unsigned char qt_resource_data[] = { 0x3e,0xe7,0x7c,0xfe,0xfc,0x2f,0xf7,0x84,0xf3,0xfb,0x25,0xd2,0x9f,0x33,0x0,0x0, 0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x25,0x0,0x0,0x80,0x83,0x0,0x0, 0xf9,0xff,0x0,0x0,0x80,0xe9,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0, - 0x3a,0x98,0x0,0x0,0x17,0x6f,0x92,0x5f,0xc5,0x46,0x0,0x0,0x17,0x48,0x49,0x44, - 0x41,0x54,0x78,0xda,0xec,0x9d,0x79,0x54,0x53,0xd7,0xda,0xc6,0xf,0x48,0x49,0x0, - 0x3,0x88,0x40,0x5,0x27,0x54,0x54,0x4,0x14,0xc5,0xaa,0xd8,0xd6,0x56,0x5a,0x6c, - 0x1d,0x6e,0x69,0x15,0x97,0x5e,0x51,0x7a,0x97,0xb4,0xb8,0xbc,0xd6,0x5b,0x7b,0xd5, - 0x4f,0xfa,0xd9,0x5b,0x5a,0x5d,0xb,0x3f,0xa9,0x5c,0xc5,0xda,0x6a,0xc5,0x8a,0xd6, - 0xb1,0x58,0x5a,0x87,0x6a,0xb1,0x80,0x62,0x91,0x41,0x91,0x29,0x18,0xe6,0x21,0x10, - 0xc6,0x24,0x24,0x90,0x79,0x26,0xdf,0x1f,0x77,0xd9,0xab,0x10,0x49,0x72,0x72,0x86, - 0xbd,0x4f,0xce,0xb3,0x56,0xd7,0x42,0x4a,0xce,0x39,0x7b,0xef,0xdf,0x79,0xf2,0xee, - 0xe9,0xdd,0xe,0x46,0xa3,0x11,0xa1,0x45,0x8b,0x6a,0x72,0xa4,0xab,0x80,0x16,0xd, - 0x36,0x2d,0x5a,0x90,0xc8,0xc9,0xda,0xf,0x38,0x38,0x38,0xd0,0xb5,0x86,0xb1,0xd2, - 0x32,0xd2,0xb7,0x8f,0xf5,0xf1,0xf6,0x9,0xc,0x9c,0x1e,0x36,0x6a,0xd4,0x28,0x27, - 0xc4,0x88,0x20,0x8e,0x8e,0xe,0xa3,0x6,0x7,0x8d,0x6,0x99,0x5c,0x26,0xe6,0xf3, - 0xf9,0x1d,0x22,0x61,0x9f,0xe0,0x1f,0x7f,0x8b,0x3f,0x6a,0x8f,0xf5,0x83,0x26,0x5c, - 0x76,0xb0,0xf6,0x43,0x34,0xd8,0xd6,0x69,0xc6,0x8c,0x19,0xbe,0xaf,0xbf,0xf9,0xe6, - 0x9c,0x99,0xc1,0x41,0x81,0xb3,0x82,0x83,0xc3,0x7c,0x7c,0x7d,0x27,0xfa,0xf9,0xfa, - 0x4e,0x73,0x65,0xba,0x78,0x38,0x39,0x39,0x31,0x5e,0x70,0x72,0x62,0x20,0x8,0x82, - 0xb8,0x38,0x33,0xdc,0x46,0xba,0x8e,0x4e,0xaf,0xd7,0x68,0xf5,0x3a,0x8d,0x4e,0xaf, - 0x57,0x2b,0xd5,0x6a,0x69,0xbf,0x64,0xa0,0x87,0xcf,0x17,0xb6,0xb5,0xb4,0x34,0xd7, - 0x70,0xaa,0xab,0x39,0xd5,0x55,0xec,0x96,0x7b,0x79,0x79,0xf5,0x34,0xd8,0x34,0xd8, - 0x98,0x6b,0x5b,0xe2,0xee,0xe5,0xb3,0x66,0x87,0xce,0x9c,0x3b,0x67,0xce,0xcb,0xd3, - 0x27,0x5,0x2c,0x7c,0xd1,0x63,0x4c,0x0,0xd1,0xcf,0x30,0xa0,0x52,0x8,0x1e,0xb7, - 0x34,0xde,0x63,0x57,0xb1,0x8b,0x1f,0x16,0x16,0x57,0x5c,0x38,0x79,0xea,0x3e,0xd, - 0x36,0xd,0xb6,0xd5,0x8a,0x5e,0xb3,0x3a,0xfc,0xdd,0xd5,0xab,0x97,0x4f,0x9d,0x36, - 0x35,0x64,0xe9,0xe2,0x57,0x62,0x41,0x7a,0x36,0xb5,0x56,0xab,0xa8,0xe7,0xb6,0x94, - 0x54,0x54,0x54,0xe4,0xb3,0xcb,0x2b,0xd8,0x5f,0xff,0xfb,0xf0,0x2d,0x7b,0x1,0x1b, - 0x31,0x1a,0x8d,0x56,0xfd,0x47,0xeb,0x3f,0x2a,0xe1,0xb0,0xaf,0xe9,0xd,0x6,0x9d, - 0x11,0x32,0xb1,0x5b,0x9b,0xee,0xee,0x3b,0x7c,0x28,0xe,0x36,0xb0,0xad,0xe6,0x94, - 0x6,0xdb,0x72,0xa5,0x1c,0x3d,0x92,0x50,0x59,0x5f,0x9b,0xdb,0x37,0xd0,0xdf,0xad, - 0xd4,0xa8,0xe5,0x46,0x48,0xa5,0xd2,0xa8,0xe5,0x5d,0x42,0x7e,0x53,0xfa,0xb9,0x1f, - 0x12,0x19,0x4c,0xa6,0x13,0xd,0xb6,0x9d,0x82,0x5d,0x50,0x59,0x96,0x69,0xa4,0xb0, - 0xea,0x78,0xdc,0xe2,0xa4,0x43,0x7,0x63,0x69,0xb0,0xed,0x40,0x4b,0xdf,0x7c,0x33, - 0x28,0xfb,0xee,0x9d,0xf4,0x4e,0x41,0x6f,0x93,0x5c,0xa5,0x94,0x18,0x29,0x2e,0xb9, - 0x4a,0x25,0xa9,0x6c,0xa8,0xcd,0xdd,0xbb,0xff,0xcb,0x75,0x34,0xd8,0x14,0x55,0x5d, - 0x3b,0xb7,0xd8,0x68,0xc7,0xea,0x57,0xc8,0xf9,0xe9,0x99,0x17,0x13,0x69,0xb0,0x29, - 0xa0,0x71,0xfe,0x7e,0xee,0xa5,0x35,0xd5,0x37,0x45,0x52,0x49,0x37,0x8c,0x9d,0x42, - 0xac,0xa5,0xd4,0xa8,0xe5,0x65,0x9c,0xea,0xec,0x65,0x6f,0xbd,0x15,0x42,0x83,0xd, - 0xa1,0x18,0x4c,0xa6,0x53,0xd6,0x9d,0xdb,0xa9,0x46,0x5a,0x23,0xc6,0xe0,0xf1,0x1f, - 0x6d,0x8d,0xa4,0xc1,0x86,0x44,0xab,0xde,0x8b,0xe,0x6b,0xed,0xee,0xa8,0xa2,0xd1, - 0x35,0x2f,0xbe,0x58,0xc4,0x4b,0x3f,0x77,0x36,0x91,0x6,0x1b,0x70,0x5d,0xfa,0xf5, - 0x5a,0x32,0x8d,0xab,0xf5,0xea,0x1d,0x10,0x73,0xf7,0xec,0xff,0x22,0x86,0x6,0x1b, - 0x30,0x5,0xcf,0xe,0xf5,0xab,0xac,0xab,0xcd,0x15,0x49,0x25,0x7c,0x1a,0x53,0x94, - 0x9d,0x4b,0x99,0x94,0x7f,0xe2,0xec,0xe9,0x5d,0x34,0xd8,0x80,0xe8,0xf4,0x4f,0x97, - 0xf7,0xd2,0x58,0x62,0x27,0x4e,0x6b,0x73,0x1,0xd,0x36,0xc9,0x1d,0xc4,0xd3,0x97, - 0x2f,0xee,0x95,0xab,0x54,0x12,0x1a,0x47,0xec,0x47,0x4e,0xe6,0xce,0x9b,0x37,0x91, - 0x6,0x9b,0x60,0x45,0x6f,0x58,0x17,0xde,0x2e,0xe4,0x73,0x68,0xc,0xf1,0xd5,0xf9, - 0xdb,0xbf,0xee,0xa3,0xc1,0x26,0x48,0xcb,0x56,0xad,0x8,0xe9,0x10,0xf2,0xeb,0x68, - 0xec,0x88,0x51,0xca,0xd7,0x69,0x9,0x34,0xd8,0x4,0xa8,0x5f,0x2e,0xa3,0x3b,0x88, - 0x4,0x4a,0xa1,0x56,0x49,0x8e,0x65,0x7c,0xbf,0x3,0x4,0xb0,0x29,0xb9,0xe7,0x71, - 0x53,0xfc,0xe6,0x25,0xbd,0xa2,0x3e,0x2e,0xcb,0xc5,0xd5,0xb,0xa1,0x45,0x98,0x5c, - 0x19,0x4c,0xf7,0xf5,0xab,0xd7,0xec,0xda,0x93,0xf4,0x79,0xc,0xe9,0xf,0x43,0x35, - 0xc7,0x4e,0xf9,0xee,0x9b,0x4,0xaa,0x4f,0x89,0xf7,0x88,0x84,0xdc,0x66,0x5e,0x7b, - 0xf9,0x93,0x32,0xab,0x74,0x5a,0xa0,0x96,0xd0,0xea,0xd,0x6,0xdd,0xbe,0xc3,0x5f, - 0xc5,0x91,0xe9,0xd8,0x94,0x2,0xfb,0xe3,0x3d,0xbb,0x57,0x51,0x19,0xea,0x5e,0x89, - 0x98,0x7b,0xbd,0x28,0xff,0x98,0x89,0x86,0x7,0x4e,0x5d,0x7d,0x82,0xa6,0x65,0x2b, - 0x97,0x87,0xd0,0x60,0xdb,0xa8,0x84,0x8f,0xb7,0x47,0x51,0xd,0x64,0x41,0xbf,0x98, - 0x97,0x53,0x70,0x2f,0x63,0xa4,0x72,0x37,0xb4,0x73,0x1f,0x82,0xfa,0xfc,0xed,0xfc, - 0x1e,0x4e,0xf0,0x9c,0xd9,0x7e,0x34,0xd8,0x28,0xb5,0x32,0xfa,0x9d,0xb0,0x2e,0xa1, - 0xa0,0x89,0x32,0x40,0x4b,0x7,0x78,0xe7,0x6f,0xfc,0x62,0x76,0xf8,0x2c,0xeb,0xc6, - 0xf5,0x54,0xe1,0x40,0x7f,0x37,0xc8,0x65,0xc9,0xfa,0xed,0x66,0x2a,0xd,0x36,0x9a, - 0x8e,0x62,0xc2,0x7,0x4b,0xa8,0x10,0x7e,0x88,0xa5,0x12,0x7e,0xe6,0xd5,0x5f,0xe, - 0x5a,0x5a,0xee,0xd4,0xe3,0xdf,0x6c,0x85,0xa1,0x5c,0x7a,0x83,0x41,0x97,0x74,0x30, - 0x39,0x96,0x6,0xdb,0x4a,0x15,0x56,0x96,0x67,0xc1,0xe,0x75,0x5d,0x47,0x5b,0xb1, - 0xb5,0xe5,0x66,0x37,0xd6,0xdf,0x85,0xa5,0x7c,0x45,0x15,0x65,0x59,0x34,0xd8,0x56, - 0x28,0xfb,0xfe,0x1f,0xe9,0xb0,0xc2,0x2c,0x51,0xc8,0x45,0x65,0x9c,0xea,0x6c,0x54, - 0x6b,0x5e,0xae,0xc0,0xb7,0xe6,0x25,0xe5,0x9b,0xa3,0x9,0x34,0xd8,0x96,0xc,0xeb, - 0x1d,0x39,0x92,0x20,0x86,0x74,0x85,0x9e,0xde,0x60,0xd0,0xd9,0x52,0xf6,0xd6,0xee, - 0x4e,0xe8,0xd6,0x90,0x97,0xd5,0x3c,0xce,0xa6,0xc1,0x36,0xa3,0x7d,0xa9,0x29,0x71, - 0x30,0x2,0xad,0xd2,0xa8,0xe5,0x39,0x85,0x5,0x19,0xb6,0x94,0x3d,0xf9,0xe8,0xe1, - 0xcd,0xb0,0x7e,0x4b,0x1d,0x48,0x3b,0xbc,0x99,0x28,0xb0,0x81,0xcf,0x29,0x31,0x54, - 0x73,0xe7,0x87,0x4f,0x8c,0xdb,0x10,0xbb,0xb,0xb6,0xe7,0x56,0xeb,0xb4,0xa,0x17, - 0x6,0x73,0xb4,0xad,0xd7,0x79,0x6d,0xc9,0xab,0xcb,0x61,0x9d,0x99,0x5c,0x14,0x11, - 0x11,0x89,0x20,0xc8,0x19,0x7a,0xe6,0xd1,0x54,0x67,0xb1,0xa,0xae,0xce,0xa2,0x52, - 0xa3,0x96,0x97,0x72,0xd8,0x37,0xb1,0x2a,0xbf,0x4a,0xab,0x81,0x36,0x51,0x8f,0x40, - 0xd2,0xcf,0xa3,0xd7,0x8a,0x98,0x8a,0xab,0x8f,0x1e,0x49,0x98,0x3d,0x7d,0x66,0x24, - 0x4c,0xcf,0x5c,0x5e,0xcb,0xb9,0xb5,0x30,0x34,0xec,0x2f,0x58,0x5d,0x6f,0x40,0x26, - 0x13,0xc1,0xea,0xd8,0x2c,0x17,0x57,0xaf,0xb4,0x53,0x27,0xb7,0xd3,0x8e,0xfd,0x94, - 0xb6,0xed,0xda,0xb9,0x1c,0xaa,0x95,0x6e,0x2a,0x95,0x24,0xf3,0xe6,0xf5,0x83,0x28, - 0xdb,0xc4,0x68,0x1c,0xa1,0xb2,0x61,0x1e,0xb7,0x3f,0xfb,0xf3,0x95,0x24,0xda,0xb1, - 0x9f,0x52,0xec,0xc6,0x8d,0x1f,0xc2,0xe4,0x4e,0xd9,0xf7,0xf3,0x4f,0xad,0xff,0xcb, - 0xbb,0x9f,0xa2,0x81,0xda,0xd4,0xcf,0xcf,0x80,0x3d,0x68,0xd0,0xc3,0xea,0xda,0x1e, - 0x1e,0x1e,0x84,0xac,0xb8,0x84,0x2,0xec,0xb4,0xef,0x4f,0x6e,0x7f,0x65,0x5e,0x78, - 0xc,0xc,0xcf,0xaa,0xd6,0x6a,0x14,0x19,0x99,0x97,0x3e,0x5b,0xfb,0xd6,0xca,0xdd, - 0xb6,0x40,0x3d,0x92,0x6,0x8d,0xc6,0x41,0x58,0xc1,0xf6,0xf4,0xf0,0xf4,0xa1,0xc1, - 0x46,0x10,0x64,0xf2,0x94,0x29,0x5e,0xd1,0x2b,0x56,0x42,0xe3,0xd6,0xb7,0xb,0xb, - 0xbe,0xff,0xe0,0xaf,0x1b,0xf,0x60,0x1,0xb5,0x83,0x89,0x64,0xe4,0x45,0x9c,0xaa, - 0x5c,0x97,0x17,0x9c,0x5d,0x61,0x5,0x9b,0xc9,0x18,0xf9,0xe4,0x6,0xbb,0x89,0xb1, - 0x6f,0xdd,0xcf,0x3f,0x1,0xcb,0x18,0xf5,0xf9,0x9f,0xaf,0xec,0x43,0xd9,0x6,0xcf, - 0xc8,0x9a,0xbf,0x85,0x6e,0xa2,0xa6,0xae,0x26,0x1b,0x6f,0x46,0x81,0x8f,0xb1,0xd7, - 0xc7,0x6d,0x5a,0xbc,0x74,0x41,0x44,0x2c,0xc,0x4e,0x54,0x5e,0x5f,0x7b,0x3b,0x2e, - 0x66,0xdd,0x17,0x78,0x85,0x1f,0x4f,0x64,0x18,0x1c,0x84,0x36,0xbe,0x26,0x52,0x40, - 0x83,0xfd,0xcf,0xc4,0xff,0x49,0x74,0x65,0x30,0xdd,0x41,0xaf,0xc4,0x9a,0xd6,0xe6, - 0xfb,0xaf,0x86,0x85,0xaf,0xc5,0xe2,0x5a,0xe,0x66,0xce,0x42,0x81,0xb9,0xe3,0xf8, - 0x9f,0xfe,0xc1,0xa0,0xc1,0xae,0xc1,0xde,0x14,0xbf,0x79,0x49,0xd8,0xf4,0xa0,0x28, - 0xd0,0x1b,0x4a,0xa6,0x52,0x8a,0x43,0xa7,0x4d,0x7f,0xd,0x6d,0x8,0x62,0xd,0xd4, - 0x8,0x82,0x20,0x4e,0x8e,0xa3,0x9c,0x60,0x6,0x5b,0xa7,0xd5,0xa9,0xed,0x1a,0xec, - 0x8f,0x76,0x7e,0xb2,0x8b,0xe9,0xec,0xec,0x6,0x7a,0x43,0xb9,0xbb,0xba,0x8d,0x25, - 0xa,0x6a,0x4,0x41,0x90,0x51,0x8e,0x8e,0x50,0x83,0x2d,0x95,0x4a,0xc5,0x76,0xb, - 0xf6,0xb2,0x15,0xcb,0x43,0xa6,0x4d,0x98,0x14,0xe,0x7a,0x23,0xb5,0xf4,0x74,0x56, - 0xd0,0xd1,0xac,0x75,0x52,0x6b,0xd4,0x4a,0xbb,0x5,0xfb,0xd3,0x7d,0x5f,0x24,0xfa, - 0x78,0x78,0x4e,0x4,0xb9,0x81,0xba,0x45,0xc2,0xe6,0x40,0xff,0x89,0xf3,0x9,0x77, - 0x3c,0xa5,0x42,0xc,0x33,0xd8,0x9d,0x3c,0x1e,0xd7,0x2e,0xc1,0x66,0xb1,0x58,0x8c, - 0xf0,0xe0,0x90,0xb7,0x41,0x6f,0xa0,0xf1,0xde,0xbe,0xd3,0xc9,0xb8,0xaf,0x5c,0xa5, - 0x84,0x1a,0x6c,0x6e,0xb,0xb7,0xcd,0x2e,0xc1,0x4e,0xfb,0xfe,0xe4,0x2e,0x4f,0x37, - 0x96,0x2f,0xc8,0x8d,0x53,0x5e,0xcb,0xb9,0x6d,0xcb,0xe7,0xd1,0xc6,0xd7,0x64,0xbe, - 0x50,0x58,0x48,0x2c,0x93,0xf6,0x3c,0x28,0x2a,0xaa,0x21,0xe2,0x5e,0x40,0x9d,0xcc, - 0xcb,0x62,0xb1,0x18,0xa5,0xd5,0xec,0xfc,0xa0,0x80,0x29,0x8b,0x41,0x6e,0x20,0x7, - 0x1b,0x2a,0xc1,0xd2,0x19,0x46,0x6b,0xaf,0x1,0x83,0xaa,0x9a,0x1a,0xf2,0xe6,0xcd, - 0x8,0x5a,0x86,0xa2,0xce,0xe0,0x76,0xec,0xdd,0x5f,0xfe,0x6b,0x1d,0xe8,0x50,0xd7, - 0xb4,0xb6,0xdc,0x27,0xfb,0x25,0x51,0x6a,0xd4,0x52,0x18,0xc1,0x7e,0xf0,0xf0,0xe1, - 0x6d,0xa2,0xee,0x5,0x14,0xd8,0x73,0xe6,0xce,0x9d,0xf,0x7a,0xe3,0x14,0x14,0x17, - 0x5d,0x27,0x3d,0x14,0x6a,0xac,0xbd,0xd,0x1b,0xd4,0x3a,0x83,0x5e,0x73,0xef,0xee, - 0x9d,0x62,0xc2,0x6e,0x8,0xca,0x5a,0x91,0x5,0x8b,0x23,0x2,0x80,0x5f,0xe7,0x50, - 0xcb,0xc9,0xc6,0xa0,0xbe,0x2d,0x5e,0x17,0x32,0x92,0x78,0xbd,0x3d,0x50,0xa5,0x47, - 0x3e,0xfb,0xd3,0x8f,0x49,0x44,0x31,0xa,0xd4,0x5a,0x91,0x25,0x91,0x4b,0xc3,0x40, - 0x77,0x9d,0x8a,0xaa,0xca,0x7b,0x64,0x75,0x1a,0x87,0xaa,0xe4,0x51,0xe9,0x75,0x58, - 0xdc,0x5a,0x2c,0x97,0xf6,0xa4,0x7d,0x75,0xe8,0xc,0xa1,0x37,0x5,0xc5,0xb1,0xb3, - 0xb,0xee,0x1,0x9d,0x23,0x44,0x24,0x93,0x74,0x83,0xe2,0xd6,0x4f,0xd4,0x21,0xe8, - 0x5,0xde,0xb5,0xe5,0x2a,0x95,0x24,0xf9,0x70,0xea,0x66,0x22,0x19,0x5,0xca,0xb1, - 0x83,0xa7,0xcf,0x78,0x19,0x64,0xd7,0x69,0xea,0x68,0x2f,0x5,0xed,0x99,0x72,0xee, - 0xe5,0x9f,0x7,0xdd,0xad,0xeb,0xdb,0x5b,0x8b,0x3f,0xdb,0xb9,0xfb,0xc,0xe1,0x37, - 0x6,0xc5,0xb1,0x55,0x1a,0x70,0x77,0x5f,0x6b,0xf5,0xd8,0x2c,0xdc,0xc1,0xda,0xb1, - 0x11,0x4,0x41,0x8a,0x2a,0xcb,0xb2,0x24,0xa,0xb9,0x8,0x3c,0xa7,0x56,0x4a,0x8a, - 0xca,0x1e,0x65,0xb1,0x58,0x2c,0x6,0xd1,0x8c,0x2,0xe3,0xd8,0xa9,0xc7,0xbf,0xd9, - 0x8a,0x20,0xe0,0xe,0xcd,0x72,0x7b,0xbb,0xd9,0x38,0x99,0x8a,0xcd,0x85,0x7e,0x65, - 0xde,0x4b,0x6b,0x7,0x64,0xd2,0x1e,0xd0,0xea,0x4c,0x24,0x91,0x74,0xbc,0xf2,0xd2, - 0x82,0xb5,0x32,0x99,0x4c,0x43,0xc6,0xfd,0x81,0x0,0xfb,0xd5,0xd7,0x96,0x2c,0x67, - 0x3a,0x33,0x80,0x5d,0xc9,0x57,0x8a,0xd3,0xf8,0xab,0x3,0x46,0xb3,0x5d,0x93,0xc7, - 0xf9,0x87,0xd6,0xb7,0xb6,0x94,0x80,0x52,0x5f,0xdd,0x7d,0xc2,0xe6,0x6d,0x5b,0xb6, - 0x6c,0x24,0xf3,0x19,0x48,0x7,0x7b,0x9c,0xbf,0x9f,0xbb,0xaf,0xd7,0xd8,0x0,0x90, - 0xe3,0xc4,0xd6,0x96,0xd6,0x66,0xd0,0x63,0xd9,0x59,0xd3,0x2,0x81,0xe9,0xa3,0x9c, - 0xbd,0x78,0xe1,0xc0,0xad,0x1b,0xbf,0xb2,0x49,0x7d,0x8,0xb2,0x63,0xec,0xf8,0x6d, - 0x5b,0x23,0x41,0xee,0xd5,0x37,0x77,0xf2,0xca,0xb1,0xc,0x3d,0xb0,0x8e,0xb1,0x87, - 0x8a,0xd3,0xda,0x5c,0x20,0x57,0x29,0x49,0x39,0xa8,0xb5,0xb2,0xbe,0x36,0x77,0x6e, - 0x78,0xf8,0x44,0xb2,0x19,0x5,0x22,0xc6,0x9e,0x30,0x69,0xa2,0x1f,0xc8,0x4e,0xd8, - 0xdb,0x27,0xe4,0x22,0x10,0x29,0x74,0x6a,0xe0,0x6b,0x9c,0x96,0xa6,0x7c,0xc2,0x47, - 0x3f,0x3a,0xda,0x4a,0x36,0xae,0x5b,0xff,0x7e,0x55,0x45,0x45,0x7,0x10,0x15,0x41, - 0xb6,0x63,0x9f,0xcd,0xca,0x4c,0x2,0xd9,0xb1,0xb1,0xee,0x2c,0xe2,0xed,0xd8,0xcf, - 0xb8,0x77,0x53,0x63,0x1,0x5e,0xa9,0x96,0xf5,0x6,0x83,0xae,0x6f,0x60,0xa0,0xbb, - 0xae,0xa5,0xb9,0x78,0xef,0xfe,0x2f,0xd7,0x81,0xc4,0x28,0x10,0x69,0x84,0xb3,0xb, - 0xf2,0xd3,0x69,0xb0,0xf1,0x53,0xfa,0xe5,0xb,0x89,0xa,0x35,0xf6,0x67,0xc8,0x2b, - 0xd4,0x2a,0x9,0xa8,0xe6,0xb,0x4,0xd8,0xf,0xaa,0x2b,0xaf,0x1,0x3b,0xdb,0x28, - 0xb5,0x7d,0xb6,0x91,0x6c,0xb0,0x9f,0x56,0x59,0x35,0x3b,0xbb,0xa5,0x83,0x57,0xc5, - 0x17,0xf7,0xf1,0x94,0x1a,0xb5,0xdc,0x1a,0x77,0x16,0x4b,0x25,0xfc,0x2e,0x1,0xbf, - 0x29,0xe7,0xfe,0x1f,0x19,0xeb,0x37,0x6d,0x24,0x74,0x5,0x26,0x94,0xf9,0xb1,0x5d, - 0x5c,0x5c,0x80,0x4d,0xaf,0x20,0x83,0x7c,0xb7,0xca,0x50,0xbd,0x34,0x27,0x6c,0xc5, - 0x93,0x9f,0x73,0x4a,0xa,0x33,0xa6,0x4e,0xe,0x8,0x1b,0xeb,0xe1,0x31,0xc1,0xd3, - 0x75,0xf4,0xb0,0x8d,0x1d,0x3a,0x83,0x5e,0x23,0x94,0x4a,0x3a,0xda,0xba,0x3a,0xd8, - 0xad,0x5c,0x6e,0x4d,0x5c,0xf4,0x9a,0x2f,0xa0,0x2a,0x2c,0xd9,0x8e,0xdd,0xdc,0xd1, - 0x5e,0xe,0xaa,0x63,0x57,0x36,0xd6,0xe6,0xe2,0xe9,0xd8,0x78,0x9c,0x3b,0x8e,0x56, - 0x33,0x66,0xce,0xf0,0x5d,0xb0,0x68,0x51,0x40,0x70,0x68,0xa8,0x1f,0x83,0xc9,0x74, - 0x82,0x99,0x51,0x20,0x1c,0xdb,0xd9,0x19,0xdc,0x3c,0x74,0x6a,0x8d,0x46,0x81,0xe7, - 0xf5,0x3,0xa7,0x7,0x86,0x80,0x52,0xd6,0xc6,0x86,0x46,0x1,0x95,0xbe,0x9d,0x48, - 0x1f,0xee,0xf3,0x64,0xb9,0x3,0xbb,0xbf,0x91,0xd7,0xde,0x51,0x8f,0xe7,0xf5,0xa7, - 0x4e,0x9e,0x1c,0x86,0xd0,0xa2,0x26,0xd8,0x20,0x27,0x80,0x31,0xc,0x1a,0x70,0x4d, - 0xc7,0xe5,0xed,0x39,0x66,0x22,0x8d,0x20,0xe0,0x60,0xa3,0x1d,0x2a,0x73,0x74,0x70, - 0x1c,0x5,0x2c,0xd8,0x6,0x6c,0xf3,0xe4,0xd,0x5d,0x1b,0xe2,0xc5,0xf2,0xf0,0xcb, - 0x7f,0xf4,0xe0,0x22,0x8d,0x21,0xed,0xd8,0x44,0x83,0x8d,0xb9,0x63,0xf3,0x7,0xc4, - 0x6d,0xcf,0x74,0xda,0xa6,0x4c,0x5d,0x48,0x63,0x48,0x41,0xb0,0x81,0x16,0xe,0xa9, - 0x26,0xc6,0x8d,0x19,0x3b,0xe5,0xe9,0x7f,0xfb,0x8f,0xf5,0x9,0xcc,0xca,0xf9,0x2d, - 0x95,0xae,0x6c,0x1a,0x6c,0xe2,0x44,0xd0,0x1c,0xca,0xa2,0xb9,0xe1,0xab,0xe8,0xca, - 0xa6,0x18,0xd8,0x3a,0x83,0x5e,0x3,0x6a,0xe5,0x38,0x3b,0x33,0x18,0x78,0x5c,0x97, - 0xdb,0xd3,0xf5,0xcc,0x92,0xce,0x9,0x3e,0x2f,0x6,0x9d,0xce,0xbc,0xbc,0x97,0xc6, - 0x91,0x42,0x60,0x6b,0xf5,0x7a,0x35,0xa8,0x95,0x33,0x6a,0x14,0x3e,0x1d,0xdb,0xa9, - 0xfe,0x13,0xe6,0xe,0xfd,0xdd,0x5b,0x4b,0x23,0xe3,0x68,0x1c,0x29,0x4,0xf6,0xe0, - 0x20,0x31,0x19,0xee,0xd1,0x68,0x8c,0x97,0x17,0x61,0x63,0xec,0x13,0x7c,0x5f,0xc, - 0x3a,0x7d,0xf9,0x22,0xe9,0xae,0x3d,0x6f,0xfe,0xfc,0xf1,0x34,0xd8,0x66,0xc4,0x60, - 0x30,0xcc,0x8e,0x78,0xe8,0xf4,0xe0,0x86,0x22,0xee,0xa3,0x47,0xe3,0x76,0x26,0x61, - 0x7d,0x67,0xfb,0xb0,0xad,0x5c,0x8b,0x5e,0x5a,0x40,0xea,0x39,0xe9,0x46,0xa3,0xd1, - 0x58,0x51,0x56,0xd6,0x19,0x11,0x11,0x31,0x89,0x6,0x7b,0x4,0x6d,0xd8,0xb0,0xe1, - 0x75,0x73,0x7f,0xa3,0x24,0x70,0xf9,0xa3,0xb5,0xf2,0xf5,0xf6,0x9,0xc0,0xeb,0xda, - 0xb3,0x26,0x6,0xc,0xdb,0xca,0x15,0x34,0x75,0x1a,0x10,0x79,0xb,0xd7,0xff,0x2d, - 0x2e,0x92,0x6,0x1b,0x79,0xfe,0x6e,0xeb,0xe5,0xcb,0x57,0xbc,0x61,0x1e,0x6c,0x70, - 0x13,0x2c,0xba,0x32,0x99,0x1e,0x78,0x5e,0xbf,0x5d,0xc8,0x1f,0x96,0x52,0xb7,0xad, - 0xb7,0x9b,0x43,0x76,0xb9,0xdf,0x5a,0xb6,0x6c,0x93,0x5d,0x83,0x6d,0x6e,0x86,0x51, - 0x20,0xe0,0x9b,0x3d,0xd0,0x5e,0x2e,0x7,0x37,0x43,0xbf,0x87,0xdb,0x68,0x5c,0x4f, - 0x91,0xd,0xf0,0x1d,0x17,0x2a,0x92,0x48,0xfe,0x4c,0x9d,0x30,0xca,0xd1,0xd1,0x69, - 0xf2,0x8b,0x7e,0x21,0xec,0x96,0xc6,0xbb,0x64,0x96,0x3b,0x78,0xda,0xf4,0xa8,0xf3, - 0x57,0xb3,0xf6,0xd9,0x1d,0xd8,0x96,0x4e,0x99,0x5f,0xbc,0x74,0xe9,0xa6,0xb9,0xbf, - 0x51,0xa8,0x94,0xc0,0x3a,0x36,0xf3,0x5,0xfc,0xf,0x77,0x1a,0x90,0xf,0xcf,0x9, - 0x12,0x12,0x30,0x6d,0x9,0x19,0xe5,0x7d,0xfa,0xc,0xc9,0x95,0x6f,0x44,0x25,0x24, - 0x1d,0x48,0x8e,0x85,0x96,0x6c,0x14,0x6b,0x5d,0x2d,0xd2,0x82,0x5,0xb,0xa6,0x58, - 0x72,0xff,0xab,0x79,0xbf,0xa7,0x81,0xbc,0x35,0xec,0x6a,0xee,0xed,0x34,0x22,0x3a, - 0x6d,0x78,0xee,0x8e,0x47,0xfb,0x1c,0x82,0x81,0x7e,0x1e,0xa4,0x8c,0x62,0xdb,0x79, - 0x74,0x78,0x4a,0x8f,0x1e,0x3d,0xb2,0x68,0x77,0xb7,0x5c,0x26,0x97,0x80,0xfc,0xe2, - 0xfb,0x78,0x7b,0x4f,0xc0,0xfb,0x1e,0xdd,0xe2,0xbe,0x61,0x79,0x4b,0x7c,0x3c,0xbd, - 0x2,0x4e,0x5f,0x3c,0x4f,0xea,0xf0,0x9f,0x17,0xcb,0xdd,0xaf,0xa1,0xad,0xf5,0x61, - 0xf0,0xec,0x50,0x3f,0x4,0x36,0x61,0xe5,0xd8,0x68,0xef,0x1f,0x1d,0xb3,0x26,0x1c, - 0x64,0xc7,0xee,0xea,0x13,0x36,0x11,0xd1,0xe,0x5,0xc5,0x45,0xd7,0xf0,0xde,0x4c, - 0x8c,0xe6,0x9b,0xc3,0x68,0x34,0x1a,0x3b,0x84,0xfc,0x3a,0xbb,0x76,0x6c,0x34,0x92, - 0x4a,0xa5,0x4a,0x90,0x5f,0x7c,0x2f,0x96,0x3b,0x21,0x6e,0xd5,0xd4,0xdc,0x64,0x32, - 0x9b,0x6b,0x9,0xbb,0xf2,0x1a,0xd9,0x75,0xe0,0xe7,0xe5,0x1d,0x98,0xff,0xb0,0x4, - 0xae,0xe5,0xb5,0x64,0x3b,0xb6,0xb7,0x8f,0x8f,0x5b,0xbf,0x42,0xc6,0x7,0xd9,0xb5, - 0xb,0xd9,0xe5,0x59,0x44,0xb4,0x85,0x4a,0x6b,0x3a,0xe3,0xec,0x89,0x1f,0xce,0xec, - 0x22,0xd3,0xb1,0x9f,0xe8,0x41,0xd,0xfb,0x1a,0x24,0x8c,0x92,0xef,0xd8,0x7d,0x42, - 0xa1,0xa2,0x57,0x2c,0x6a,0x1,0xf9,0xe5,0x9f,0xe4,0x37,0x9e,0x90,0xbd,0x89,0xf7, - 0xab,0x2a,0xae,0x98,0xfa,0xfd,0x1b,0xaf,0x2f,0x5d,0x7,0x42,0x3d,0xbc,0x14,0x14, - 0xba,0xca,0x96,0x23,0x37,0x80,0x7e,0x1b,0x9e,0xf7,0x66,0xdb,0xf2,0xc,0x97,0x6e, - 0x5c,0x4b,0x6,0x3d,0x33,0x7f,0x56,0xde,0x6d,0x42,0xd6,0x4c,0x37,0x77,0xf2,0x4c, - 0xee,0xda,0xbf,0x7a,0xe7,0x77,0x5c,0x47,0x67,0xa,0x2b,0xcb,0xb3,0x2c,0xad,0x8b, - 0x63,0x67,0x89,0xdd,0x5d,0x4f,0xaa,0x63,0xdb,0x2,0x77,0x53,0x53,0x63,0x3d,0xe8, - 0x6,0x10,0x1e,0x32,0x3b,0x8a,0x88,0xfb,0xfc,0x51,0x54,0xf8,0xb3,0xa9,0xdf,0xbf, - 0xb6,0x20,0x2,0x57,0xd7,0x1e,0x3b,0x66,0x8c,0xbf,0xa5,0x7f,0xbb,0x29,0x66,0xdd, - 0xde,0x84,0x8f,0xfe,0x1e,0x5,0x74,0x83,0x61,0xe5,0xd8,0xb6,0xa4,0x9,0x5b,0xb0, - 0x38,0x22,0x40,0x24,0x95,0x74,0x83,0xee,0xda,0xc9,0x47,0xf,0x6f,0x26,0xa2,0x4d, - 0xd8,0x8d,0xd,0x77,0x4d,0x9e,0x5a,0x56,0x5f,0x93,0x8d,0xd7,0x3d,0x5,0x3,0xfd, - 0x3c,0xab,0x52,0x9c,0x69,0x54,0x92,0xbd,0xc9,0xfb,0xd7,0x81,0xea,0xd8,0x84,0x80, - 0x6d,0x9,0xdc,0xec,0xe6,0xc6,0xbb,0xa0,0x83,0xfd,0xa0,0x9a,0xb8,0x11,0xa,0x53, - 0xf7,0x57,0x69,0x34,0x72,0xdc,0x3a,0xae,0x56,0xa4,0x3c,0xfb,0xef,0x50,0xa8,0xa0, - 0x69,0xd9,0x8a,0xe5,0x21,0x34,0xd8,0x23,0x28,0x2d,0xfd,0xbb,0xed,0x30,0x9c,0x57, - 0x98,0x94,0x72,0x80,0x90,0x69,0xe6,0xca,0x86,0xba,0x5c,0x53,0xf7,0x6f,0xeb,0xed, - 0xe1,0x10,0xf5,0x22,0x59,0xa2,0x36,0x7e,0xf,0xe7,0xe5,0xc8,0xd7,0x3,0x69,0xb0, - 0x9f,0x17,0xb7,0x25,0xc4,0x2f,0x81,0x1,0xec,0xfc,0x52,0xe2,0xd2,0x25,0x10,0x99, - 0xe5,0xd4,0x96,0x3a,0xb9,0xf3,0xb0,0xf8,0x1c,0x25,0xc0,0x7e,0x9e,0xe2,0xe3,0x3f, - 0x78,0xdb,0x96,0x71,0x6e,0xe,0xb7,0xa5,0x0,0x6,0xb8,0xf7,0xa5,0xa6,0xc4,0x11, - 0xe3,0xda,0xb5,0x26,0x5d,0xbb,0xb5,0xbb,0xb3,0xa,0xcb,0xfb,0xf4,0xe,0x88,0xb8, - 0x36,0xe7,0x39,0xe4,0x36,0xe7,0x82,0x4,0x36,0xa6,0xe3,0xd8,0x9d,0x9d,0x1d,0x5c, - 0x5b,0x46,0x4d,0x2a,0x1f,0x57,0x13,0x9e,0x89,0x1f,0x8d,0xa2,0xdf,0x79,0xe7,0x7d, - 0x22,0xee,0x33,0x6f,0x66,0xf0,0x32,0x53,0xbf,0xf7,0x1d,0x92,0xc2,0xc1,0x56,0xbd, - 0xe8,0xe1,0x15,0x60,0xeb,0x35,0xe6,0x6,0x4c,0x8b,0x4a,0x4a,0xde,0xf,0xce,0x6a, - 0x40,0x2c,0x1d,0x9b,0xc9,0x64,0x3a,0x45,0xbf,0x13,0x1d,0xfa,0xbc,0xb7,0xda,0xc3, - 0xc3,0x83,0x39,0xd2,0xe7,0xd7,0xc6,0x6e,0x58,0x88,0x47,0x92,0x72,0x3c,0x74,0xfe, - 0xfa,0xcf,0x84,0xac,0x57,0x2e,0xe3,0x3c,0xce,0x36,0xe9,0x90,0x4d,0xf5,0x98,0x38, - 0xe4,0xf9,0xab,0x3f,0xed,0xc3,0xaa,0x4e,0x54,0x5a,0x8d,0xfc,0xc0,0x91,0xd4,0xcd, - 0x20,0x38,0x36,0x2e,0x69,0x84,0xc7,0x78,0x79,0xb9,0x9a,0x2a,0xf8,0xff,0x1d,0x4c, - 0x31,0xbb,0x33,0xa3,0xac,0xbe,0x26,0x1b,0x6,0xb0,0x7b,0xc5,0x22,0x2e,0x81,0xe6, - 0x33,0x4c,0x52,0xa5,0x42,0x84,0xc5,0xb5,0x4b,0x39,0xec,0x9b,0x58,0xd6,0x4b,0x5b, - 0x4f,0x17,0x67,0xdb,0xce,0x1d,0xcb,0x29,0x9,0xf6,0x48,0x9d,0x11,0xa6,0x99,0xdc, - 0xcb,0xa9,0x27,0x8e,0x6f,0x95,0xab,0xe0,0x70,0xed,0x86,0x2e,0xde,0x43,0x22,0xc0, - 0x6e,0xed,0xea,0xac,0x32,0x75,0xff,0x4b,0x37,0xae,0x25,0xdb,0x7a,0xed,0x7e,0x99, - 0x14,0xf3,0x75,0x3a,0x22,0x99,0xa4,0x3b,0xfe,0xa3,0xad,0x91,0x94,0x4,0x7b,0x34, - 0x8b,0xc5,0x44,0xdb,0x89,0xe4,0x9,0x7a,0xeb,0x8c,0x90,0x88,0x4c,0xd7,0x66,0x37, - 0xd5,0xdb,0xbc,0x85,0x4c,0x22,0x97,0xe1,0x72,0x5c,0x75,0x59,0xed,0xe3,0x6c,0xac, - 0xd6,0x71,0x1b,0x41,0x3b,0x83,0x6,0x2d,0x8,0x77,0x4a,0x8b,0xcf,0xc1,0x2,0xb6, - 0x4a,0x8b,0xdf,0xa4,0xc9,0xb3,0x13,0x28,0xc3,0x57,0xfe,0x49,0x55,0xa,0xd1,0xce, - 0xcf,0xf7,0xbe,0x8b,0x3a,0x7e,0xaf,0xe1,0xe0,0x1a,0xf6,0x35,0x74,0xb6,0x3f,0x9c, - 0x31,0x2b,0xc8,0x97,0xc,0xb0,0x9,0x5f,0xdd,0x67,0x49,0x38,0x72,0xfd,0xea,0xd5, - 0x4c,0x90,0x53,0x9f,0x3d,0xd3,0x61,0x7e,0xc1,0xd9,0xad,0x8d,0xdf,0x8b,0xfb,0xce, - 0x72,0x9e,0xa0,0x67,0xd8,0x8e,0x76,0x16,0xd3,0xd5,0x2b,0x28,0x78,0x56,0x10,0xda, - 0x6b,0x4e,0x18,0x37,0x2e,0x8,0xcf,0x67,0x9e,0x31,0x7e,0xd2,0xc2,0x33,0x97,0x2e, - 0x1c,0x87,0x7e,0x54,0xc4,0xd2,0x38,0xfb,0xc3,0x2d,0x9,0x66,0xe3,0xaf,0x9c,0xa2, - 0x82,0xc,0x23,0x44,0xaa,0xe3,0x71,0x8b,0xc9,0x8,0x47,0xa,0xab,0x2b,0x50,0xad, - 0x15,0xbf,0x5f,0x5e,0x9a,0x49,0x44,0xbd,0xe8,0xd,0x6,0x9d,0x5d,0x38,0x36,0x82, - 0x20,0xc8,0xa9,0x93,0xe9,0x66,0x63,0xc3,0xdb,0xb7,0xb3,0xaf,0x23,0x10,0x69,0xfa, - 0xf8,0x49,0xb,0x32,0xaf,0x5f,0x3d,0x48,0xf4,0x7d,0xc7,0x7a,0x78,0xfa,0xa3,0x7a, - 0xde,0x0,0xe2,0xf2,0x72,0x4b,0x15,0x72,0x51,0xda,0xc9,0x13,0xdb,0x29,0xef,0xd8, - 0x96,0xc6,0xda,0xf9,0x8f,0x1e,0x5c,0x34,0x42,0xa6,0xec,0xc2,0x3f,0xd2,0x89,0x74, - 0xec,0xde,0x1,0xb1,0xd5,0xc3,0x8e,0x25,0x35,0x6c,0x52,0xce,0xd6,0x4c,0x39,0x7e, - 0x2c,0x81,0xb2,0xc3,0x7d,0xd6,0x80,0x9d,0xb8,0xff,0x8b,0x18,0xd8,0xc0,0x96,0x28, - 0xe4,0xa2,0x4b,0xd7,0x7f,0x49,0x26,0xa,0x6c,0x91,0x4c,0x6a,0xf5,0x21,0xab,0x7a, - 0x83,0x41,0x47,0x46,0xdd,0xf0,0xf8,0xbd,0x75,0x71,0xf1,0xf1,0x4b,0xa0,0x5,0x1b, - 0xcb,0x21,0xb2,0xeb,0x77,0x72,0x8e,0x19,0x21,0x14,0x1e,0xce,0xdd,0x26,0xe4,0x73, - 0x6c,0xad,0xcf,0xb2,0x6,0x72,0x27,0xc0,0x3a,0x4,0xbd,0x75,0x44,0x80,0xed,0x88, - 0x87,0xab,0x8c,0xf4,0xff,0x87,0x1e,0x30,0x64,0x76,0xca,0x37,0xe3,0xcc,0x79,0x4, - 0x42,0xbd,0x32,0x6f,0x7e,0xcc,0xa5,0x6b,0xd8,0x3a,0x77,0xbf,0x6c,0x78,0xd6,0x28, - 0x6b,0x35,0x7f,0x46,0x30,0xa9,0x19,0x5d,0xc7,0x7a,0x78,0x4e,0x2c,0x28,0x7b,0x98, - 0x9,0x55,0x8c,0x6d,0xee,0x6d,0xad,0x7e,0xcc,0x39,0xc1,0x44,0x71,0xea,0xeb,0xb1, - 0xef,0xd3,0x77,0x18,0x21,0x55,0x51,0x55,0x5,0x66,0x3b,0xdc,0xaf,0xde,0xcb,0x4b, - 0xb3,0xc5,0xb1,0xfb,0xe5,0xe0,0x64,0x3,0x28,0x6b,0xa8,0xcd,0x86,0xca,0xb1,0x47, - 0xd2,0xbd,0x7b,0xf9,0x5,0x6a,0xb5,0xda,0xea,0x23,0xe6,0x76,0x6f,0xff,0xf8,0xdb, - 0xaa,0x96,0x86,0x3c,0x18,0x9d,0x3b,0x34,0x70,0x46,0x64,0xc1,0x23,0x6c,0x1c,0x4a, - 0xab,0xd5,0xd8,0x74,0xfa,0x83,0xa7,0xdb,0x68,0x60,0xe,0x8b,0x9d,0x1b,0x38,0x33, - 0xea,0x6a,0x4e,0x76,0x1a,0x25,0x1c,0xdb,0xd3,0xd3,0x93,0x89,0xf6,0x39,0xd7,0xc7, - 0x6d,0x5a,0x6c,0x84,0x58,0x58,0xe4,0xe2,0x3b,0x7e,0xf1,0x87,0x5d,0x68,0x1d,0x1b, - 0xc4,0x3a,0xe9,0x97,0x49,0xf9,0x50,0x38,0xb6,0xb9,0xf8,0x79,0x60,0x60,0x0,0xb5, - 0xe3,0x64,0x9e,0xbf,0x50,0x52,0x5c,0xcb,0xfe,0x19,0x81,0x54,0x3e,0x9e,0x5e,0x1, - 0x6d,0xdd,0x5d,0x36,0xcd,0x50,0x6a,0x35,0x1a,0x54,0xb3,0xb1,0xad,0x5d,0xd8,0x6e, - 0x4c,0xc0,0x4a,0x8f,0x38,0xec,0x5b,0x78,0x5d,0x1b,0xaa,0xe3,0xf0,0xde,0x98,0x1f, - 0xf1,0xd7,0x46,0x5e,0x5b,0x29,0x8c,0x60,0xbb,0xbb,0xb9,0x79,0x4d,0xf6,0xf3,0xf, - 0x31,0x1a,0x8d,0xc6,0xb3,0xbf,0x5c,0x41,0x95,0x74,0x46,0xaf,0xd3,0x5b,0x1d,0xc6, - 0x35,0x77,0x77,0x96,0x4f,0xf1,0x1f,0xf,0xdc,0x99,0xed,0xed,0xfc,0x9e,0x9a,0x84, - 0xd8,0xf7,0x77,0x43,0x3,0xf6,0x48,0xae,0x3d,0xf4,0x6b,0xd3,0xda,0xaf,0x54,0x8d, - 0x5a,0xad,0x4f,0x3d,0xfc,0xef,0xcf,0x60,0x59,0x47,0xf2,0x3c,0xad,0x7e,0x7b,0xe5, - 0x8e,0x5b,0xf9,0x77,0x4e,0x58,0xfb,0x39,0x27,0x27,0x27,0xab,0x3a,0xde,0x77,0x1e, - 0x16,0x9f,0x9b,0xe6,0x37,0x3e,0x1c,0xb4,0xf2,0xcb,0x54,0x4a,0xf1,0xe1,0xb4,0x23, - 0x89,0xed,0x5c,0x2e,0x7e,0x49,0xff,0xc9,0x9a,0xa0,0xb1,0xa5,0x77,0x9f,0x7c,0x38, - 0x75,0xb3,0xa9,0xd5,0x6e,0xf0,0x8d,0x98,0x58,0x97,0x13,0x30,0xfd,0xc7,0xb,0x89, - 0x96,0xae,0x2e,0xcc,0x2e,0x2e,0x48,0x7,0xb1,0xcc,0x4a,0x8d,0x5a,0x9e,0x7a,0xfc, - 0xd8,0x56,0xbc,0xc7,0xb1,0x81,0x2,0xdb,0x1a,0xb8,0x4b,0x6b,0x39,0x37,0x61,0x7, - 0x5b,0x22,0x97,0x89,0x72,0xa,0xee,0x65,0x58,0x5a,0xe6,0xb3,0xbf,0x5c,0x49,0x1a, - 0xbe,0x74,0x55,0x39,0x6c,0x27,0xcd,0xd9,0x2b,0x97,0x93,0x40,0x2d,0x73,0xce,0x83, - 0xa2,0xc,0xbc,0xcd,0x97,0x94,0xf5,0xd8,0x58,0xc1,0xed,0xed,0xe3,0xe3,0x56,0x50, - 0xfe,0x28,0xd3,0x48,0x1,0x71,0xda,0x5a,0xa,0x2c,0x29,0x73,0x4e,0x49,0xe1,0xb0, - 0x15,0x8f,0x75,0xed,0xad,0xcf,0xac,0x2a,0x2c,0x6d,0xac,0x5,0xf6,0x85,0x67,0x37, - 0xd5,0xdf,0xf5,0xf6,0xf1,0x71,0x23,0x2,0x6c,0x68,0xcf,0x52,0xef,0x13,0xa,0x15, - 0x67,0x33,0x32,0xbe,0x13,0xcb,0x65,0x3d,0x8,0xe4,0x9a,0xe6,0x3f,0x21,0x3c,0x2d, - 0xe3,0x94,0xd9,0xd5,0x6f,0xae,0xae,0xae,0xee,0x43,0x7f,0x27,0x14,0x8b,0x3b,0x9e, - 0xfc,0xcc,0xe1,0xb5,0x16,0x2c,0x98,0x3e,0xb,0xc8,0x73,0xd9,0x75,0x6,0xbd,0xe6, - 0xd0,0xa1,0x43,0x5f,0xf4,0x9,0x85,0xa,0x42,0x6e,0x88,0xa7,0x63,0x13,0x11,0x92, - 0xec,0xf9,0x32,0x29,0xa6,0x3,0xa2,0xad,0x64,0xcf,0x5d,0x20,0xd4,0x27,0x30,0xbb, - 0x86,0xc2,0x54,0x26,0xd6,0x9c,0x8a,0x7,0x19,0x8,0x82,0x20,0x6d,0xfc,0x1e,0xe, - 0xb0,0x65,0xe3,0xf7,0xd6,0x45,0xc7,0xac,0x9,0xb7,0x96,0x19,0x60,0x43,0x11,0x5b, - 0xc1,0xb7,0xf4,0x1a,0x29,0xc7,0xbf,0x49,0xa0,0x42,0x48,0x62,0xae,0x9c,0x5d,0x7d, - 0x82,0xa6,0xa1,0x9f,0xd1,0xea,0x75,0x6a,0x9e,0x90,0xf,0xf4,0x8b,0x9d,0x76,0x3a, - 0x7d,0x3b,0x5a,0x1e,0xa0,0x5,0x1b,0x2b,0xb8,0x13,0x3f,0xff,0x57,0xc,0xd5,0xc1, - 0x26,0x6b,0xb9,0x29,0x5a,0x69,0x75,0x3a,0xf5,0xbe,0xaf,0xe,0xc6,0x61,0xc0,0x1, - 0x9c,0x60,0x63,0x5,0xf7,0x8d,0xc2,0xfc,0x63,0x54,0x5,0x3b,0xeb,0xb7,0x9b,0xa9, - 0xb0,0x81,0x7d,0x3a,0xeb,0xc7,0xbd,0x18,0x85,0xac,0xf0,0x82,0x8d,0x15,0xdc,0xe9, - 0x17,0xcf,0x25,0x4a,0x95,0xa,0x11,0xd5,0xc0,0x6e,0xed,0x36,0x9d,0x5b,0x4,0x44, - 0x49,0x15,0x72,0xd1,0x9e,0xcf,0x3f,0x8b,0xc1,0xaa,0xdd,0xa1,0x7,0x1b,0x33,0xb8, - 0x4d,0x4c,0x64,0xc0,0xe,0xb6,0x12,0x45,0xfe,0x6a,0xb2,0x94,0x72,0xfc,0xeb,0x4, - 0x2c,0xdb,0x9b,0xf2,0x60,0x5b,0x3,0xf7,0xa6,0xf8,0xcd,0x4b,0x7a,0xc5,0x7d,0x5c, - 0x2a,0x80,0x5d,0xd9,0x68,0x3a,0x57,0x36,0x68,0xea,0x10,0xf4,0xd4,0x45,0xc7,0xac, - 0xe,0xc7,0xda,0xc4,0x28,0x1,0x36,0x56,0xae,0x8d,0x20,0x8,0x12,0xb7,0xe5,0xc3, - 0x25,0xbd,0xfd,0x22,0x28,0xe0,0x1e,0x69,0xef,0x22,0x5e,0xd9,0x9a,0xb0,0x54,0xbf, - 0x52,0xce,0x5f,0xbf,0xf9,0xfd,0xc5,0x58,0xb4,0x33,0xf0,0x33,0x8f,0x58,0x83,0x3d, - 0x38,0x38,0xd8,0x6f,0xed,0xb5,0xbc,0x7d,0xbc,0xdd,0x6e,0xdd,0xcd,0x3b,0x1,0x3a, - 0x1c,0x59,0xb9,0xa6,0x4f,0x25,0x3,0xfd,0xc5,0x14,0x4b,0x25,0xfc,0x9c,0xc2,0x82, - 0xc,0x6,0x8a,0x9d,0x51,0x76,0x5,0xf6,0x48,0x95,0xb8,0x21,0x36,0x16,0xf5,0x4a, - 0xb5,0xac,0xdf,0x7f,0x4b,0x5,0x15,0x8e,0xe6,0x9e,0x4e,0x93,0x9b,0x10,0x4a,0xd8, - 0x95,0xd7,0x40,0x1f,0x9,0xc9,0xfc,0xed,0xc6,0x41,0x3c,0xda,0xdb,0xae,0xc0,0xb6, - 0xf5,0xda,0x3b,0xff,0xf7,0xd3,0x77,0xdb,0x7b,0xba,0x39,0x72,0x95,0x12,0xa8,0x6c, - 0xae,0x22,0xf9,0xf0,0x30,0xe4,0x1,0x49,0xb9,0x3f,0x2c,0x55,0xaf,0xb8,0x8f,0x1b, - 0xbf,0x75,0x4b,0x24,0x5e,0xed,0x4d,0x29,0xb0,0xf1,0x84,0xfa,0xd9,0xce,0x58,0x3d, - 0x70,0x9d,0xb1,0x7e,0xb9,0xec,0xcf,0x6d,0x52,0x45,0x95,0x65,0x59,0x20,0x43,0xdd, - 0xdc,0xdd,0x59,0xbe,0x72,0xcd,0x7b,0x61,0x78,0xb7,0x3b,0xe5,0xc1,0xc6,0xe3,0x5e, - 0x29,0x87,0xf,0x27,0x8,0xc4,0x62,0x1e,0x68,0xd0,0x80,0x1c,0x7a,0x74,0x9,0x5, - 0x4d,0x29,0x69,0x47,0x12,0x88,0x6e,0x77,0xca,0xce,0x3c,0x8e,0x4,0xb7,0x2d,0x2f, - 0x40,0xc2,0x8e,0xed,0x51,0xbc,0x3e,0x1,0xf4,0xb,0xa8,0x88,0x10,0x4f,0xc8,0xaf, - 0x4b,0xd8,0xb1,0x3d,0x8a,0x8c,0x6f,0x6a,0x4a,0x83,0xfd,0x9c,0xde,0x32,0x26,0xee, - 0x1e,0xb3,0x6e,0xdd,0xc2,0xfb,0xc5,0xc5,0x99,0x34,0xbe,0xcf,0x4a,0xa2,0x90,0x8b, - 0xd8,0xd,0x75,0x77,0x3f,0xde,0xbd,0x73,0x95,0xad,0x6d,0x6a,0x8b,0xa1,0x51,0x3a, - 0xc6,0x36,0xf1,0xf5,0x84,0x79,0x3c,0x9e,0xcf,0x2e,0xbf,0x48,0xe3,0xfc,0xdf,0x90, - 0xc8,0x96,0x11,0xf,0xb,0x3b,0x85,0x96,0xb6,0x35,0xf5,0x67,0x1e,0x6d,0x9d,0xc5, - 0xb3,0x44,0xa9,0x47,0x8f,0x6e,0x6d,0xeb,0xea,0xe4,0xc0,0x34,0x8d,0x8d,0xd5,0x98, - 0x74,0x5b,0x77,0x17,0xe7,0xf4,0xa5,0xb,0x7b,0xd1,0xec,0x74,0xc1,0xab,0xfd,0xec, - 0x62,0xe6,0x91,0x48,0xc0,0x6f,0xdd,0xcf,0x3f,0x61,0x4f,0x60,0x5f,0xfa,0xd5,0xb6, - 0xc3,0x9a,0xf0,0x6a,0x33,0xca,0x80,0xd,0x12,0xdc,0xde,0x3e,0x3e,0x6e,0xc7,0x7f, - 0xc8,0xd8,0xd5,0xd0,0xce,0x7d,0xa8,0xa2,0x90,0x83,0xeb,0xd,0x6,0x9d,0x58,0x2a, - 0xe1,0x73,0x9a,0x1b,0xb,0x52,0xbf,0x3d,0xb6,0x75,0x9c,0x9f,0x9f,0x3b,0xa8,0x6d, - 0x45,0x29,0xb0,0xad,0x1d,0x29,0xc1,0x13,0xee,0x3f,0x87,0x8,0x4f,0x1c,0x4b,0x28, - 0xac,0xae,0xcc,0xd2,0xea,0x75,0x6a,0x98,0xa1,0x56,0x68,0xd4,0x92,0x3b,0x65,0xf, - 0xce,0xc1,0x62,0x40,0x68,0xc0,0x76,0xb0,0xb6,0xcd,0xad,0xcc,0x2,0x8c,0x49,0xc5, - 0x3d,0xe7,0x39,0x1c,0x2c,0xfd,0x5b,0x73,0x9f,0x43,0x35,0x8b,0xf9,0xe9,0x9e,0x77, - 0xdf,0x5b,0x1b,0x13,0x3b,0x77,0x56,0x68,0x94,0x93,0xd3,0x28,0x86,0x8b,0x33,0xc3, - 0xd,0x1,0x50,0x86,0xc1,0x41,0xbd,0x42,0xad,0x92,0x4a,0xa4,0x52,0xc1,0x1f,0x85, - 0xf7,0xaf,0xe4,0xe7,0xe6,0xdd,0xcb,0x48,0x3f,0x95,0x8f,0x57,0xbb,0x8c,0x54,0xdf, - 0x23,0x7d,0xc6,0x4c,0xa2,0x25,0x54,0xf,0x8,0xac,0x63,0xa3,0x19,0xab,0xc6,0x3b, - 0x34,0x31,0xd9,0xd9,0x4c,0x3f,0xbe,0xb5,0xb2,0xb5,0x11,0xb8,0xd9,0x4c,0x91,0x4c, - 0xd2,0x9d,0x5d,0x5c,0x90,0x8e,0x67,0x7b,0xa0,0xa9,0x63,0x6b,0xdb,0x83,0x92,0x8e, - 0x8d,0x87,0xa3,0x38,0xe0,0x58,0x88,0xe0,0xd0,0x50,0xbf,0x2d,0xdb,0xfe,0x1e,0x13, - 0xb1,0x28,0x22,0xca,0xdd,0x9d,0xe5,0xeb,0xe2,0xea,0xea,0xee,0xea,0xe2,0xe2,0xee, - 0xe6,0xe2,0xe2,0xc1,0x74,0x66,0xb8,0x8e,0x72,0x74,0x74,0xc2,0xca,0x89,0x11,0x4, - 0x41,0x74,0x7a,0x9d,0x6,0x41,0x1c,0x10,0xb5,0x56,0xa3,0xe8,0xea,0xed,0x69,0xa8, - 0xa9,0xa9,0x29,0xce,0xcb,0xcd,0xcd,0x3b,0xf5,0xed,0x89,0x3c,0xa2,0xeb,0xd5,0x9a, - 0xfa,0x7d,0x72,0x1d,0xb,0xff,0xd6,0xea,0xe7,0xa4,0x2c,0xd8,0xd6,0x86,0x31,0x44, - 0xa8,0x8e,0xc7,0x2d,0x76,0x1f,0xcd,0xf2,0x61,0xb9,0xb8,0x7a,0xb9,0x3a,0x33,0xdc, - 0xad,0x85,0x5c,0xad,0xd3,0x2a,0xd4,0x5a,0xad,0x42,0xae,0x56,0x8a,0xfb,0x6,0x6, - 0x3a,0xe7,0x5,0xce,0x5c,0x66,0xf,0x86,0x41,0x83,0x6d,0x61,0x43,0x38,0x0,0x52, - 0x8,0x16,0x8b,0xc5,0x98,0x38,0x69,0x92,0x97,0xa7,0x97,0x97,0x1b,0x82,0x20,0x88, - 0xb3,0xb3,0xf3,0x9f,0xa0,0x6b,0xb5,0x5a,0xbd,0x52,0x21,0xd7,0x68,0x35,0x5a,0x3d, - 0xe2,0x80,0x20,0xa,0xb9,0x42,0xd3,0xde,0xd6,0x26,0xb6,0x47,0xb3,0xa0,0xc1,0x86, - 0xc,0x6c,0x18,0x5,0xb,0xd8,0x4e,0x74,0x53,0x8d,0xdc,0x78,0xf4,0x4b,0x0,0xa7, - 0x68,0xb0,0xcd,0x38,0x12,0xd5,0x21,0x1f,0x5a,0x5e,0x73,0x65,0x74,0x70,0x70,0x70, - 0x30,0x92,0x35,0x3c,0x66,0x85,0x1c,0x69,0x78,0x2d,0xef,0xf1,0xe3,0xb9,0x3e,0x9c, - 0xe8,0xf2,0x8f,0xb4,0x62,0x92,0x76,0x6c,0xa,0xc0,0xfd,0xc4,0xa1,0xac,0x69,0x50, - 0x58,0x5d,0xdc,0xd2,0x32,0x1a,0x8d,0x46,0x23,0xda,0x9,0x30,0x1a,0x6c,0xc8,0x1a, - 0x1b,0xab,0xaf,0x72,0x98,0xca,0x85,0xe6,0xa5,0xa7,0x43,0x11,0xfa,0x45,0x1,0xfe, - 0x19,0x60,0xe,0xbd,0x28,0xef,0xd8,0x68,0x3b,0x3b,0x96,0xae,0x71,0x20,0x3,0x3c, - 0xac,0xbf,0x15,0x6c,0x75,0x66,0x10,0xc3,0x31,0xbb,0x8,0x45,0xac,0x6d,0xb8,0xa1, - 0xd,0x35,0xf4,0xdf,0x54,0xe8,0x60,0x99,0x82,0x11,0x8d,0x9,0x80,0xda,0xc7,0xb0, - 0xab,0x50,0xc4,0x92,0x46,0xb0,0xf4,0x6f,0x9e,0x88,0x8c,0x30,0xc1,0x68,0x34,0x1a, - 0xe7,0xcf,0x9f,0x3f,0xde,0xda,0xb2,0x5b,0xf2,0xdc,0x96,0x96,0x9,0x6d,0xf9,0x69, - 0xb0,0x71,0x84,0xfb,0x79,0xd,0x82,0xa6,0xa1,0x3e,0xda,0xfe,0x8f,0xe8,0xa1,0xbf, - 0xb,0xe,0x9,0x19,0x87,0x77,0x39,0xca,0xca,0xca,0x3a,0x23,0x22,0x22,0x26,0xe1, - 0xe1,0xaa,0xe6,0xc0,0x87,0x61,0x24,0xc8,0x6e,0x3b,0x8f,0xe,0x26,0x64,0xed,0x35, - 0x98,0x4c,0xa6,0x53,0xe4,0xd2,0xc8,0x88,0xa1,0xbf,0xf7,0xf3,0xf3,0xf7,0x26,0xa2, - 0x63,0xb9,0x65,0xcb,0x96,0x28,0x3c,0xeb,0x7,0x8b,0x6f,0x28,0x32,0x7b,0xd0,0xc0, - 0xaf,0xc7,0x6,0x59,0x9f,0x7c,0xf2,0xcf,0x77,0xf0,0xde,0xb6,0x46,0xe6,0xd6,0x38, - 0x18,0x19,0xa5,0xf4,0x7a,0x6c,0xa2,0xe4,0xee,0xee,0xce,0x94,0x48,0x24,0x2a,0xbc, - 0x47,0x13,0x6c,0x1,0x14,0xf6,0xa5,0x0,0xf4,0xea,0x3e,0xf2,0x2a,0x9e,0x90,0x61, - 0x32,0x2a,0xd,0xc7,0xe1,0xd,0x36,0x3d,0x41,0x3,0xf0,0x8,0xd,0x2d,0xba,0xf3, - 0x48,0x8b,0xd6,0x33,0xa2,0x97,0xad,0xe2,0xe4,0xbe,0x78,0x6c,0xa1,0xb2,0x74,0x2, - 0x85,0xfe,0x36,0xa0,0xc1,0x6,0x6,0x76,0x3a,0xa4,0xc1,0xb8,0x5e,0xe8,0x21,0x3c, - 0x5a,0x54,0xd4,0xff,0xf,0x0,0x4a,0x2e,0xd8,0xdb,0x9e,0x96,0xe8,0xcd,0x0,0x0, - 0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, - // D:/????/??????/230526-????-2?????-1600x900-2/Cigarette/Resources/cam3_no.png - 0x0,0x0,0x25,0xbd, - 0x89, - 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, - 0x0,0x0,0x48,0x0,0x0,0x0,0x48,0x8,0x6,0x0,0x0,0x0,0x55,0xed,0xb3,0x47, - 0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13, - 0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0xa,0x4d,0x69,0x43,0x43,0x50,0x50,0x68,0x6f, - 0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66,0x69, - 0x6c,0x65,0x0,0x0,0x78,0xda,0x9d,0x53,0x77,0x58,0x93,0xf7,0x16,0x3e,0xdf,0xf7, - 0x65,0xf,0x56,0x42,0xd8,0xf0,0xb1,0x97,0x6c,0x81,0x0,0x22,0x23,0xac,0x8,0xc8, - 0x10,0x59,0xa2,0x10,0x92,0x0,0x61,0x84,0x10,0x12,0x40,0xc5,0x85,0x88,0xa,0x56, - 0x14,0x15,0x11,0x9c,0x48,0x55,0xc4,0x82,0xd5,0xa,0x48,0x9d,0x88,0xe2,0xa0,0x28, - 0xb8,0x67,0x41,0x8a,0x88,0x5a,0x8b,0x55,0x5c,0x38,0xee,0x1f,0xdc,0xa7,0xb5,0x7d, - 0x7a,0xef,0xed,0xed,0xfb,0xd7,0xfb,0xbc,0xe7,0x9c,0xe7,0xfc,0xce,0x79,0xcf,0xf, - 0x80,0x11,0x12,0x26,0x91,0xe6,0xa2,0x6a,0x0,0x39,0x52,0x85,0x3c,0x3a,0xd8,0x1f, - 0x8f,0x4f,0x48,0xc4,0xc9,0xbd,0x80,0x2,0x15,0x48,0xe0,0x4,0x20,0x10,0xe6,0xcb, - 0xc2,0x67,0x5,0xc5,0x0,0x0,0xf0,0x3,0x79,0x78,0x7e,0x74,0xb0,0x3f,0xfc,0x1, - 0xaf,0x6f,0x0,0x2,0x0,0x70,0xd5,0x2e,0x24,0x12,0xc7,0xe1,0xff,0x83,0xba,0x50, - 0x26,0x57,0x0,0x20,0x91,0x0,0xe0,0x22,0x12,0xe7,0xb,0x1,0x90,0x52,0x0,0xc8, - 0x2e,0x54,0xc8,0x14,0x0,0xc8,0x18,0x0,0xb0,0x53,0xb3,0x64,0xa,0x0,0x94,0x0, - 0x0,0x6c,0x79,0x7c,0x42,0x22,0x0,0xaa,0xd,0x0,0xec,0xf4,0x49,0x3e,0x5,0x0, - 0xd8,0xa9,0x93,0xdc,0x17,0x0,0xd8,0xa2,0x1c,0xa9,0x8,0x0,0x8d,0x1,0x0,0x99, - 0x28,0x47,0x24,0x2,0x40,0xbb,0x0,0x60,0x55,0x81,0x52,0x2c,0x2,0xc0,0xc2,0x0, - 0xa0,0xac,0x40,0x22,0x2e,0x4,0xc0,0xae,0x1,0x80,0x59,0xb6,0x32,0x47,0x2,0x80, - 0xbd,0x5,0x0,0x76,0x8e,0x58,0x90,0xf,0x40,0x60,0x0,0x80,0x99,0x42,0x2c,0xcc, - 0x0,0x20,0x38,0x2,0x0,0x43,0x1e,0x13,0xcd,0x3,0x20,0x4c,0x3,0xa0,0x30,0xd2, - 0xbf,0xe0,0xa9,0x5f,0x70,0x85,0xb8,0x48,0x1,0x0,0xc0,0xcb,0x95,0xcd,0x97,0x4b, - 0xd2,0x33,0x14,0xb8,0x95,0xd0,0x1a,0x77,0xf2,0xf0,0xe0,0xe2,0x21,0xe2,0xc2,0x6c, - 0xb1,0x42,0x61,0x17,0x29,0x10,0x66,0x9,0xe4,0x22,0x9c,0x97,0x9b,0x23,0x13,0x48, - 0xe7,0x3,0x4c,0xce,0xc,0x0,0x0,0x1a,0xf9,0xd1,0xc1,0xfe,0x38,0x3f,0x90,0xe7, - 0xe6,0xe4,0xe1,0xe6,0x66,0xe7,0x6c,0xef,0xf4,0xc5,0xa2,0xfe,0x6b,0xf0,0x6f,0x22, - 0x3e,0x21,0xf1,0xdf,0xfe,0xbc,0x8c,0x2,0x4,0x0,0x10,0x4e,0xcf,0xef,0xda,0x5f, - 0xe5,0xe5,0xd6,0x3,0x70,0xc7,0x1,0xb0,0x75,0xbf,0x6b,0xa9,0x5b,0x0,0xda,0x56, - 0x0,0x68,0xdf,0xf9,0x5d,0x33,0xdb,0x9,0xa0,0x5a,0xa,0xd0,0x7a,0xf9,0x8b,0x79, - 0x38,0xfc,0x40,0x1e,0x9e,0xa1,0x50,0xc8,0x3c,0x1d,0x1c,0xa,0xb,0xb,0xed,0x25, - 0x62,0xa1,0xbd,0x30,0xe3,0x8b,0x3e,0xff,0x33,0xe1,0x6f,0xe0,0x8b,0x7e,0xf6,0xfc, - 0x40,0x1e,0xfe,0xdb,0x7a,0xf0,0x0,0x71,0x9a,0x40,0x99,0xad,0xc0,0xa3,0x83,0xfd, - 0x71,0x61,0x6e,0x76,0xae,0x52,0x8e,0xe7,0xcb,0x4,0x42,0x31,0x6e,0xf7,0xe7,0x23, - 0xfe,0xc7,0x85,0x7f,0xfd,0x8e,0x29,0xd1,0xe2,0x34,0xb1,0x5c,0x2c,0x15,0x8a,0xf1, - 0x58,0x89,0xb8,0x50,0x22,0x4d,0xc7,0x79,0xb9,0x52,0x91,0x44,0x21,0xc9,0x95,0xe2, - 0x12,0xe9,0x7f,0x32,0xf1,0x1f,0x96,0xfd,0x9,0x93,0x77,0xd,0x0,0xac,0x86,0x4f, - 0xc0,0x4e,0xb6,0x7,0xb5,0xcb,0x6c,0xc0,0x7e,0xee,0x1,0x2,0x8b,0xe,0x58,0xd2, - 0x76,0x0,0x40,0x7e,0xf3,0x2d,0x8c,0x1a,0xb,0x91,0x0,0x10,0x67,0x34,0x32,0x79, - 0xf7,0x0,0x0,0x93,0xbf,0xf9,0x8f,0x40,0x2b,0x1,0x0,0xcd,0x97,0xa4,0xe3,0x0, - 0x0,0xbc,0xe8,0x18,0x5c,0xa8,0x94,0x17,0x4c,0xc6,0x8,0x0,0x0,0x44,0xa0,0x81, - 0x2a,0xb0,0x41,0x7,0xc,0xc1,0x14,0xac,0xc0,0xe,0x9c,0xc1,0x1d,0xbc,0xc0,0x17, - 0x2,0x61,0x6,0x44,0x40,0xc,0x24,0xc0,0x3c,0x10,0x42,0x6,0xe4,0x80,0x1c,0xa, - 0xa1,0x18,0x96,0x41,0x19,0x54,0xc0,0x3a,0xd8,0x4,0xb5,0xb0,0x3,0x1a,0xa0,0x11, - 0x9a,0xe1,0x10,0xb4,0xc1,0x31,0x38,0xd,0xe7,0xe0,0x12,0x5c,0x81,0xeb,0x70,0x17, - 0x6,0x60,0x18,0x9e,0xc2,0x18,0xbc,0x86,0x9,0x4,0x41,0xc8,0x8,0x13,0x61,0x21, - 0x3a,0x88,0x11,0x62,0x8e,0xd8,0x22,0xce,0x8,0x17,0x99,0x8e,0x4,0x22,0x61,0x48, - 0x34,0x92,0x80,0xa4,0x20,0xe9,0x88,0x14,0x51,0x22,0xc5,0xc8,0x72,0xa4,0x2,0xa9, - 0x42,0x6a,0x91,0x5d,0x48,0x23,0xf2,0x2d,0x72,0x14,0x39,0x8d,0x5c,0x40,0xfa,0x90, - 0xdb,0xc8,0x20,0x32,0x8a,0xfc,0x8a,0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3,0xd4, - 0x2,0x75,0x40,0xb9,0xa8,0x1f,0x1a,0x8a,0xc6,0xa0,0x73,0xd1,0x74,0x34,0xf,0x5d, - 0x80,0x96,0xa2,0x6b,0xd1,0x1a,0xb4,0x1e,0x3d,0x80,0xb6,0xa2,0xa7,0xd1,0x4b,0xe8, - 0x75,0x74,0x0,0x7d,0x8a,0x8e,0x63,0x80,0xd1,0x31,0xe,0x66,0x8c,0xd9,0x61,0x5c, - 0x8c,0x87,0x45,0x60,0x89,0x58,0x1a,0x26,0xc7,0x16,0x63,0xe5,0x58,0x35,0x56,0x8f, - 0x35,0x63,0x1d,0x58,0x37,0x76,0x15,0x1b,0xc0,0x9e,0x61,0xef,0x8,0x24,0x2,0x8b, - 0x80,0x13,0xec,0x8,0x5e,0x84,0x10,0xc2,0x6c,0x82,0x90,0x90,0x47,0x58,0x4c,0x58, - 0x43,0xa8,0x25,0xec,0x23,0xb4,0x12,0xba,0x8,0x57,0x9,0x83,0x84,0x31,0xc2,0x27, - 0x22,0x93,0xa8,0x4f,0xb4,0x25,0x7a,0x12,0xf9,0xc4,0x78,0x62,0x3a,0xb1,0x90,0x58, - 0x46,0xac,0x26,0xee,0x21,0x1e,0x21,0x9e,0x25,0x5e,0x27,0xe,0x13,0x5f,0x93,0x48, - 0x24,0xe,0xc9,0x92,0xe4,0x4e,0xa,0x21,0x25,0x90,0x32,0x49,0xb,0x49,0x6b,0x48, - 0xdb,0x48,0x2d,0xa4,0x53,0xa4,0x3e,0xd2,0x10,0x69,0x9c,0x4c,0x26,0xeb,0x90,0x6d, - 0xc9,0xde,0xe4,0x8,0xb2,0x80,0xac,0x20,0x97,0x91,0xb7,0x90,0xf,0x90,0x4f,0x92, - 0xfb,0xc9,0xc3,0xe4,0xb7,0x14,0x3a,0xc5,0x88,0xe2,0x4c,0x9,0xa2,0x24,0x52,0xa4, - 0x94,0x12,0x4a,0x35,0x65,0x3f,0xe5,0x4,0xa5,0x9f,0x32,0x42,0x99,0xa0,0xaa,0x51, - 0xcd,0xa9,0x9e,0xd4,0x8,0xaa,0x88,0x3a,0x9f,0x5a,0x49,0x6d,0xa0,0x76,0x50,0x2f, - 0x53,0x87,0xa9,0x13,0x34,0x75,0x9a,0x25,0xcd,0x9b,0x16,0x43,0xcb,0xa4,0x2d,0xa3, - 0xd5,0xd0,0x9a,0x69,0x67,0x69,0xf7,0x68,0x2f,0xe9,0x74,0xba,0x9,0xdd,0x83,0x1e, - 0x45,0x97,0xd0,0x97,0xd2,0x6b,0xe8,0x7,0xe9,0xe7,0xe9,0x83,0xf4,0x77,0xc,0xd, - 0x86,0xd,0x83,0xc7,0x48,0x62,0x28,0x19,0x6b,0x19,0x7b,0x19,0xa7,0x18,0xb7,0x19, - 0x2f,0x99,0x4c,0xa6,0x5,0xd3,0x97,0x99,0xc8,0x54,0x30,0xd7,0x32,0x1b,0x99,0x67, - 0x98,0xf,0x98,0x6f,0x55,0x58,0x2a,0xf6,0x2a,0x7c,0x15,0x91,0xca,0x12,0x95,0x3a, - 0x95,0x56,0x95,0x7e,0x95,0xe7,0xaa,0x54,0x55,0x73,0x55,0x3f,0xd5,0x79,0xaa,0xb, - 0x54,0xab,0x55,0xf,0xab,0x5e,0x56,0x7d,0xa6,0x46,0x55,0xb3,0x50,0xe3,0xa9,0x9, - 0xd4,0x16,0xab,0xd5,0xa9,0x1d,0x55,0xbb,0xa9,0x36,0xae,0xce,0x52,0x77,0x52,0x8f, - 0x50,0xcf,0x51,0x5f,0xa3,0xbe,0x5f,0xfd,0x82,0xfa,0x63,0xd,0xb2,0x86,0x85,0x46, - 0xa0,0x86,0x48,0xa3,0x54,0x63,0xb7,0xc6,0x19,0x8d,0x21,0x16,0xc6,0x32,0x65,0xf1, - 0x58,0x42,0xd6,0x72,0x56,0x3,0xeb,0x2c,0x6b,0x98,0x4d,0x62,0x5b,0xb2,0xf9,0xec, - 0x4c,0x76,0x5,0xfb,0x1b,0x76,0x2f,0x7b,0x4c,0x53,0x43,0x73,0xaa,0x66,0xac,0x66, - 0x91,0x66,0x9d,0xe6,0x71,0xcd,0x1,0xe,0xc6,0xb1,0xe0,0xf0,0x39,0xd9,0x9c,0x4a, - 0xce,0x21,0xce,0xd,0xce,0x7b,0x2d,0x3,0x2d,0x3f,0x2d,0xb1,0xd6,0x6a,0xad,0x66, - 0xad,0x7e,0xad,0x37,0xda,0x7a,0xda,0xbe,0xda,0x62,0xed,0x72,0xed,0x16,0xed,0xeb, - 0xda,0xef,0x75,0x70,0x9d,0x40,0x9d,0x2c,0x9d,0xf5,0x3a,0x6d,0x3a,0xf7,0x75,0x9, - 0xba,0x36,0xba,0x51,0xba,0x85,0xba,0xdb,0x75,0xcf,0xea,0x3e,0xd3,0x63,0xeb,0x79, - 0xe9,0x9,0xf5,0xca,0xf5,0xe,0xe9,0xdd,0xd1,0x47,0xf5,0x6d,0xf4,0xa3,0xf5,0x17, - 0xea,0xef,0xd6,0xef,0xd1,0x1f,0x37,0x30,0x34,0x8,0x36,0x90,0x19,0x6c,0x31,0x38, - 0x63,0xf0,0xcc,0x90,0x63,0xe8,0x6b,0x98,0x69,0xb8,0xd1,0xf0,0x84,0xe1,0xa8,0x11, - 0xcb,0x68,0xba,0x91,0xc4,0x68,0xa3,0xd1,0x49,0xa3,0x27,0xb8,0x26,0xee,0x87,0x67, - 0xe3,0x35,0x78,0x17,0x3e,0x66,0xac,0x6f,0x1c,0x62,0xac,0x34,0xde,0x65,0xdc,0x6b, - 0x3c,0x61,0x62,0x69,0x32,0xdb,0xa4,0xc4,0xa4,0xc5,0xe4,0xbe,0x29,0xcd,0x94,0x6b, - 0x9a,0x66,0xba,0xd1,0xb4,0xd3,0x74,0xcc,0xcc,0xc8,0x2c,0xdc,0xac,0xd8,0xac,0xc9, - 0xec,0x8e,0x39,0xd5,0x9c,0x6b,0x9e,0x61,0xbe,0xd9,0xbc,0xdb,0xfc,0x8d,0x85,0xa5, - 0x45,0x9c,0xc5,0x4a,0x8b,0x36,0x8b,0xc7,0x96,0xda,0x96,0x7c,0xcb,0x5,0x96,0x4d, - 0x96,0xf7,0xac,0x98,0x56,0x3e,0x56,0x79,0x56,0xf5,0x56,0xd7,0xac,0x49,0xd6,0x5c, - 0xeb,0x2c,0xeb,0x6d,0xd6,0x57,0x6c,0x50,0x1b,0x57,0x9b,0xc,0x9b,0x3a,0x9b,0xcb, - 0xb6,0xa8,0xad,0x9b,0xad,0xc4,0x76,0x9b,0x6d,0xdf,0x14,0xe2,0x14,0x8f,0x29,0xd2, - 0x29,0xf5,0x53,0x6e,0xda,0x31,0xec,0xfc,0xec,0xa,0xec,0x9a,0xec,0x6,0xed,0x39, - 0xf6,0x61,0xf6,0x25,0xf6,0x6d,0xf6,0xcf,0x1d,0xcc,0x1c,0x12,0x1d,0xd6,0x3b,0x74, - 0x3b,0x7c,0x72,0x74,0x75,0xcc,0x76,0x6c,0x70,0xbc,0xeb,0xa4,0xe1,0x34,0xc3,0xa9, - 0xc4,0xa9,0xc3,0xe9,0x57,0x67,0x1b,0x67,0xa1,0x73,0x9d,0xf3,0x35,0x17,0xa6,0x4b, - 0x90,0xcb,0x12,0x97,0x76,0x97,0x17,0x53,0x6d,0xa7,0x8a,0xa7,0x6e,0x9f,0x7a,0xcb, - 0x95,0xe5,0x1a,0xee,0xba,0xd2,0xb5,0xd3,0xf5,0xa3,0x9b,0xbb,0x9b,0xdc,0xad,0xd9, - 0x6d,0xd4,0xdd,0xcc,0x3d,0xc5,0x7d,0xab,0xfb,0x4d,0x2e,0x9b,0x1b,0xc9,0x5d,0xc3, - 0x3d,0xef,0x41,0xf4,0xf0,0xf7,0x58,0xe2,0x71,0xcc,0xe3,0x9d,0xa7,0x9b,0xa7,0xc2, - 0xf3,0x90,0xe7,0x2f,0x5e,0x76,0x5e,0x59,0x5e,0xfb,0xbd,0x1e,0x4f,0xb3,0x9c,0x26, - 0x9e,0xd6,0x30,0x6d,0xc8,0xdb,0xc4,0x5b,0xe0,0xbd,0xcb,0x7b,0x60,0x3a,0x3e,0x3d, - 0x65,0xfa,0xce,0xe9,0x3,0x3e,0xc6,0x3e,0x2,0x9f,0x7a,0x9f,0x87,0xbe,0xa6,0xbe, - 0x22,0xdf,0x3d,0xbe,0x23,0x7e,0xd6,0x7e,0x99,0x7e,0x7,0xfc,0x9e,0xfb,0x3b,0xfa, - 0xcb,0xfd,0x8f,0xf8,0xbf,0xe1,0x79,0xf2,0x16,0xf1,0x4e,0x5,0x60,0x1,0xc1,0x1, - 0xe5,0x1,0xbd,0x81,0x1a,0x81,0xb3,0x3,0x6b,0x3,0x1f,0x4,0x99,0x4,0xa5,0x7, - 0x35,0x5,0x8d,0x5,0xbb,0x6,0x2f,0xc,0x3e,0x15,0x42,0xc,0x9,0xd,0x59,0x1f, - 0x72,0x93,0x6f,0xc0,0x17,0xf2,0x1b,0xf9,0x63,0x33,0xdc,0x67,0x2c,0x9a,0xd1,0x15, - 0xca,0x8,0x9d,0x15,0x5a,0x1b,0xfa,0x30,0xcc,0x26,0x4c,0x1e,0xd6,0x11,0x8e,0x86, - 0xcf,0x8,0xdf,0x10,0x7e,0x6f,0xa6,0xf9,0x4c,0xe9,0xcc,0xb6,0x8,0x88,0xe0,0x47, - 0x6c,0x88,0xb8,0x1f,0x69,0x19,0x99,0x17,0xf9,0x7d,0x14,0x29,0x2a,0x32,0xaa,0x2e, - 0xea,0x51,0xb4,0x53,0x74,0x71,0x74,0xf7,0x2c,0xd6,0xac,0xe4,0x59,0xfb,0x67,0xbd, - 0x8e,0xf1,0x8f,0xa9,0x8c,0xb9,0x3b,0xdb,0x6a,0xb6,0x72,0x76,0x67,0xac,0x6a,0x6c, - 0x52,0x6c,0x63,0xec,0x9b,0xb8,0x80,0xb8,0xaa,0xb8,0x81,0x78,0x87,0xf8,0x45,0xf1, - 0x97,0x12,0x74,0x13,0x24,0x9,0xed,0x89,0xe4,0xc4,0xd8,0xc4,0x3d,0x89,0xe3,0x73, - 0x2,0xe7,0x6c,0x9a,0x33,0x9c,0xe4,0x9a,0x54,0x96,0x74,0x63,0xae,0xe5,0xdc,0xa2, - 0xb9,0x17,0xe6,0xe9,0xce,0xcb,0x9e,0x77,0x3c,0x59,0x35,0x59,0x90,0x7c,0x38,0x85, - 0x98,0x12,0x97,0xb2,0x3f,0xe5,0x83,0x20,0x42,0x50,0x2f,0x18,0x4f,0xe5,0xa7,0x6e, - 0x4d,0x1d,0x13,0xf2,0x84,0x9b,0x85,0x4f,0x45,0xbe,0xa2,0x8d,0xa2,0x51,0xb1,0xb7, - 0xb8,0x4a,0x3c,0x92,0xe6,0x9d,0x56,0x95,0xf6,0x38,0xdd,0x3b,0x7d,0x43,0xfa,0x68, - 0x86,0x4f,0x46,0x75,0xc6,0x33,0x9,0x4f,0x52,0x2b,0x79,0x91,0x19,0x92,0xb9,0x23, - 0xf3,0x4d,0x56,0x44,0xd6,0xde,0xac,0xcf,0xd9,0x71,0xd9,0x2d,0x39,0x94,0x9c,0x94, - 0x9c,0xa3,0x52,0xd,0x69,0x96,0xb4,0x2b,0xd7,0x30,0xb7,0x28,0xb7,0x4f,0x66,0x2b, - 0x2b,0x93,0xd,0xe4,0x79,0xe6,0x6d,0xca,0x1b,0x93,0x87,0xca,0xf7,0xe4,0x23,0xf9, - 0x73,0xf3,0xdb,0x15,0x6c,0x85,0x4c,0xd1,0xa3,0xb4,0x52,0xae,0x50,0xe,0x16,0x4c, - 0x2f,0xa8,0x2b,0x78,0x5b,0x18,0x5b,0x78,0xb8,0x48,0xbd,0x48,0x5a,0xd4,0x33,0xdf, - 0x66,0xfe,0xea,0xf9,0x23,0xb,0x82,0x16,0x7c,0xbd,0x90,0xb0,0x50,0xb8,0xb0,0xb3, - 0xd8,0xb8,0x78,0x59,0xf1,0xe0,0x22,0xbf,0x45,0xbb,0x16,0x23,0x8b,0x53,0x17,0x77, - 0x2e,0x31,0x5d,0x52,0xba,0x64,0x78,0x69,0xf0,0xd2,0x7d,0xcb,0x68,0xcb,0xb2,0x96, - 0xfd,0x50,0xe2,0x58,0x52,0x55,0xf2,0x6a,0x79,0xdc,0xf2,0x8e,0x52,0x83,0xd2,0xa5, - 0xa5,0x43,0x2b,0x82,0x57,0x34,0x95,0xa9,0x94,0xc9,0xcb,0x6e,0xae,0xf4,0x5a,0xb9, - 0x63,0x15,0x61,0x95,0x64,0x55,0xef,0x6a,0x97,0xd5,0x5b,0x56,0x7f,0x2a,0x17,0x95, - 0x5f,0xac,0x70,0xac,0xa8,0xae,0xf8,0xb0,0x46,0xb8,0xe6,0xe2,0x57,0x4e,0x5f,0xd5, - 0x7c,0xf5,0x79,0x6d,0xda,0xda,0xde,0x4a,0xb7,0xca,0xed,0xeb,0x48,0xeb,0xa4,0xeb, - 0x6e,0xac,0xf7,0x59,0xbf,0xaf,0x4a,0xbd,0x6a,0x41,0xd5,0xd0,0x86,0xf0,0xd,0xad, - 0x1b,0xf1,0x8d,0xe5,0x1b,0x5f,0x6d,0x4a,0xde,0x74,0xa1,0x7a,0x6a,0xf5,0x8e,0xcd, - 0xb4,0xcd,0xca,0xcd,0x3,0x35,0x61,0x35,0xed,0x5b,0xcc,0xb6,0xac,0xdb,0xf2,0xa1, - 0x36,0xa3,0xf6,0x7a,0x9d,0x7f,0x5d,0xcb,0x56,0xfd,0xad,0xab,0xb7,0xbe,0xd9,0x26, - 0xda,0xd6,0xbf,0xdd,0x77,0x7b,0xf3,0xe,0x83,0x1d,0x15,0x3b,0xde,0xef,0x94,0xec, - 0xbc,0xb5,0x2b,0x78,0x57,0x6b,0xbd,0x45,0x7d,0xf5,0x6e,0xd2,0xee,0x82,0xdd,0x8f, - 0x1a,0x62,0x1b,0xba,0xbf,0xe6,0x7e,0xdd,0xb8,0x47,0x77,0x4f,0xc5,0x9e,0x8f,0x7b, - 0xa5,0x7b,0x7,0xf6,0x45,0xef,0xeb,0x6a,0x74,0x6f,0x6c,0xdc,0xaf,0xbf,0xbf,0xb2, - 0x9,0x6d,0x52,0x36,0x8d,0x1e,0x48,0x3a,0x70,0xe5,0x9b,0x80,0x6f,0xda,0x9b,0xed, - 0x9a,0x77,0xb5,0x70,0x5a,0x2a,0xe,0xc2,0x41,0xe5,0xc1,0x27,0xdf,0xa6,0x7c,0x7b, - 0xe3,0x50,0xe8,0xa1,0xce,0xc3,0xdc,0xc3,0xcd,0xdf,0x99,0x7f,0xb7,0xf5,0x8,0xeb, - 0x48,0x79,0x2b,0xd2,0x3a,0xbf,0x75,0xac,0x2d,0xa3,0x6d,0xa0,0x3d,0xa1,0xbd,0xef, - 0xe8,0x8c,0xa3,0x9d,0x1d,0x5e,0x1d,0x47,0xbe,0xb7,0xff,0x7e,0xef,0x31,0xe3,0x63, - 0x75,0xc7,0x35,0x8f,0x57,0x9e,0xa0,0x9d,0x28,0x3d,0xf1,0xf9,0xe4,0x82,0x93,0xe3, - 0xa7,0x64,0xa7,0x9e,0x9d,0x4e,0x3f,0x3d,0xd4,0x99,0xdc,0x79,0xf7,0x4c,0xfc,0x99, - 0x6b,0x5d,0x51,0x5d,0xbd,0x67,0x43,0xcf,0x9e,0x3f,0x17,0x74,0xee,0x4c,0xb7,0x5f, - 0xf7,0xc9,0xf3,0xde,0xe7,0x8f,0x5d,0xf0,0xbc,0x70,0xf4,0x22,0xf7,0x62,0xdb,0x25, - 0xb7,0x4b,0xad,0x3d,0xae,0x3d,0x47,0x7e,0x70,0xfd,0xe1,0x48,0xaf,0x5b,0x6f,0xeb, - 0x65,0xf7,0xcb,0xed,0x57,0x3c,0xae,0x74,0xf4,0x4d,0xeb,0x3b,0xd1,0xef,0xd3,0x7f, - 0xfa,0x6a,0xc0,0xd5,0x73,0xd7,0xf8,0xd7,0x2e,0x5d,0x9f,0x79,0xbd,0xef,0xc6,0xec, - 0x1b,0xb7,0x6e,0x26,0xdd,0x1c,0xb8,0x25,0xba,0xf5,0xf8,0x76,0xf6,0xed,0x17,0x77, - 0xa,0xee,0x4c,0xdc,0x5d,0x7a,0x8f,0x78,0xaf,0xfc,0xbe,0xda,0xfd,0xea,0x7,0xfa, - 0xf,0xea,0x7f,0xb4,0xfe,0xb1,0x65,0xc0,0x6d,0xe0,0xf8,0x60,0xc0,0x60,0xcf,0xc3, - 0x59,0xf,0xef,0xe,0x9,0x87,0x9e,0xfe,0x94,0xff,0xd3,0x87,0xe1,0xd2,0x47,0xcc, - 0x47,0xd5,0x23,0x46,0x23,0x8d,0x8f,0x9d,0x1f,0x1f,0x1b,0xd,0x1a,0xbd,0xf2,0x64, - 0xce,0x93,0xe1,0xa7,0xb2,0xa7,0x13,0xcf,0xca,0x7e,0x56,0xff,0x79,0xeb,0x73,0xab, - 0xe7,0xdf,0xfd,0xe2,0xfb,0x4b,0xcf,0x58,0xfc,0xd8,0xf0,0xb,0xf9,0x8b,0xcf,0xbf, - 0xae,0x79,0xa9,0xf3,0x72,0xef,0xab,0xa9,0xaf,0x3a,0xc7,0x23,0xc7,0x1f,0xbc,0xce, - 0x79,0x3d,0xf1,0xa6,0xfc,0xad,0xce,0xdb,0x7d,0xef,0xb8,0xef,0xba,0xdf,0xc7,0xbd, - 0x1f,0x99,0x28,0xfc,0x40,0xfe,0x50,0xf3,0xd1,0xfa,0x63,0xc7,0xa7,0xd0,0x4f,0xf7, - 0x3e,0xe7,0x7c,0xfe,0xfc,0x2f,0xf7,0x84,0xf3,0xfb,0x25,0xd2,0x9f,0x33,0x0,0x0, - 0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x25,0x0,0x0,0x80,0x83,0x0,0x0, - 0xf9,0xff,0x0,0x0,0x80,0xe9,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0, - 0x3a,0x98,0x0,0x0,0x17,0x6f,0x92,0x5f,0xc5,0x46,0x0,0x0,0x1a,0xea,0x49,0x44, - 0x41,0x54,0x78,0xda,0xec,0x9b,0x79,0x90,0x64,0x47,0x9d,0xdf,0x3f,0x99,0xf9,0xae, - 0xaa,0xea,0xaa,0xea,0x7b,0xba,0x7b,0xae,0x9e,0x51,0x6b,0xa4,0x19,0x9,0x46,0xa3, - 0x13,0x89,0x43,0x23,0x10,0x5a,0x2f,0x42,0x48,0x2c,0x5e,0xaf,0xf0,0xe2,0x40,0xe, - 0x8,0x2f,0xe,0xd9,0x81,0x58,0x3b,0x38,0x36,0xd6,0x68,0x30,0xb0,0x4,0x6,0x73, - 0xad,0x1d,0x21,0x60,0x59,0x9,0xb3,0x1c,0x46,0xb,0x42,0x12,0x2c,0x97,0x85,0xae, - 0x45,0x1c,0x36,0xd6,0x1,0x12,0xd6,0x48,0x9a,0xb3,0xef,0xae,0xee,0xaa,0xee,0xae, - 0xeb,0x5d,0x99,0xfe,0xe3,0xbd,0xaa,0xae,0xe9,0xe9,0x39,0x35,0x23,0x8,0x87,0xb3, - 0xa3,0xa2,0xde,0x7b,0x95,0xfd,0xea,0xe5,0x37,0x7f,0xbf,0x6f,0x7e,0x7f,0xbf,0x5f, - 0x96,0x30,0xc6,0x70,0xb6,0xdb,0xb3,0xcf,0x3c,0x33,0xfa,0xcc,0xd3,0x4f,0xbf,0x3a, - 0x36,0xd8,0x63,0xdb,0xb6,0xfd,0x7c,0xeb,0xd6,0x2d,0xcf,0x16,0xa,0x85,0x98,0xdf, - 0x61,0x1b,0x1e,0x1e,0xea,0xcf,0xe7,0xf3,0xd7,0xf4,0xf5,0xf5,0x5e,0x6e,0x59,0x76, - 0x76,0x71,0x71,0xf1,0xb7,0xf3,0xf3,0xf3,0xf,0x48,0x29,0x9f,0x3d,0x7c,0x78,0x5c, - 0xb7,0xfa,0x89,0xb3,0xd,0xd0,0xff,0xfc,0xd9,0xcf,0xae,0x9f,0x18,0x9f,0xf8,0xb, - 0x3,0x63,0xa1,0x86,0x6a,0xbd,0xbe,0x58,0xec,0x2e,0xfe,0xf7,0x7f,0x72,0xdd,0xb5, - 0x1f,0xcc,0xe5,0x72,0xe6,0xa5,0x6,0xe6,0x9c,0x73,0xb6,0x5a,0x42,0x88,0xf7,0xbd, - 0xe1,0xd,0x6f,0xf8,0xc8,0x8d,0x37,0xde,0xc4,0xe0,0xe0,0x20,0x52,0x4a,0xea,0xf5, - 0x3a,0x8f,0x3d,0xf6,0x18,0x77,0xdf,0x7d,0xf7,0x33,0xfb,0xf7,0xef,0xfb,0xc3,0x89, - 0x89,0xc9,0x43,0x67,0x1d,0xa0,0xc7,0x1e,0x7d,0xe4,0xad,0x13,0x87,0xc7,0x3f,0x8c, - 0x50,0xe7,0x58,0x8e,0x43,0x6c,0xa0,0xd1,0x6c,0x62,0x8c,0xae,0x6c,0x3b,0x77,0xec, - 0xdd,0xeb,0x47,0x46,0xee,0xdf,0xb8,0x69,0x63,0xf9,0x25,0x4,0x47,0xf5,0xf5,0xf6, - 0x3e,0xf0,0x97,0xff,0xf1,0xc3,0x57,0x5f,0x7a,0xf9,0x65,0x84,0xd5,0x1a,0x51,0x14, - 0x61,0x8c,0x41,0x4a,0x89,0x9b,0xcd,0xb2,0xec,0xfb,0x7c,0xea,0xaf,0x3e,0xca,0xf7, - 0xee,0xff,0xee,0xd8,0xc4,0xe4,0xe4,0xb,0x67,0xd,0xa0,0x87,0x1f,0x7c,0xe8,0x5d, - 0xe3,0x87,0xc7,0x3f,0xea,0xd8,0x4e,0xaf,0xb2,0x1d,0xc,0x60,0x84,0x1,0x3,0xda, - 0x18,0x4,0x2c,0x74,0xe5,0x73,0xf,0x15,0x8b,0xc5,0x9f,0x3b,0xb6,0xf3,0xf3,0x6c, - 0x36,0xf3,0xf4,0xc6,0x8d,0x1b,0xca,0xf9,0x7c,0xfe,0xac,0xcd,0xd8,0x8e,0x1d,0xdb, - 0xf7,0x7c,0xf2,0xb3,0x9f,0xbd,0xfd,0x62,0x69,0xb3,0xbc,0xbc,0x8c,0xb9,0xf8,0x22, - 0x68,0x36,0x93,0xf,0x6d,0x1b,0x16,0x16,0x70,0x1e,0x7f,0x8a,0xf8,0xca,0xcb,0x79, - 0xef,0x9e,0xdb,0x67,0x1e,0x79,0xe8,0xe1,0xcd,0x6a,0xcf,0x9e,0x3d,0x67,0xfc,0x41, - 0x1e,0x78,0xe0,0x27,0xb7,0x1d,0x38,0x70,0xe8,0xaf,0x5d,0x37,0x93,0xb1,0x1c,0x7, - 0x23,0x40,0xd3,0x72,0x6b,0x81,0x12,0x92,0x58,0xc7,0x99,0x6a,0xad,0xb6,0xbd,0xbc, - 0x50,0x79,0x7d,0xad,0x56,0x7f,0x73,0x18,0x86,0xe7,0x2e,0x2d,0x2f,0xf,0x54,0xab, - 0x55,0x39,0x35,0x3d,0xe3,0x3b,0xb6,0xdd,0xcc,0x64,0x32,0x67,0xc,0xac,0x75,0xeb, - 0xd6,0xf5,0xdc,0x7c,0xf3,0xcd,0xdf,0x7f,0xf3,0xcd,0x7f,0xc2,0xf2,0x3d,0xf7,0x21, - 0xbe,0x70,0x27,0x5c,0xb0,0x1d,0xd6,0xf,0x27,0x1d,0x82,0x0,0xf9,0x9f,0x3f,0x87, - 0x7e,0xf8,0x51,0xbc,0x1b,0xde,0xc0,0xc6,0xf3,0xb6,0x75,0xfd,0xe4,0x7f,0xfc,0xf8, - 0xc0,0x19,0xb7,0xa0,0x1f,0xfc,0xf0,0x47,0xff,0x7e,0x62,0x7c,0xe2,0x13,0x99,0x4c, - 0x16,0xcf,0xf3,0x88,0xb5,0x6,0x3a,0xbf,0x43,0x20,0x8c,0xc1,0x8,0x81,0x10,0xa0, - 0x63,0x4d,0x14,0x45,0xc4,0x3a,0x6,0x4,0x8e,0xe3,0xd0,0xd3,0x5d,0xfc,0xce,0xc0, - 0xc0,0xc0,0x7d,0x41,0x18,0xfc,0x22,0xc,0xa3,0x89,0x4d,0x1b,0x37,0x56,0x37,0x6d, - 0xda,0xf0,0xa2,0x48,0x7d,0x6c,0x6c,0xec,0x4f,0xef,0xb8,0xe3,0x8e,0xbf,0x3b,0xf7, - 0xbc,0x6d,0xf8,0x4d,0x1f,0xf9,0xe9,0xbf,0x86,0xa7,0x7e,0x83,0xfe,0xab,0x3d,0x30, - 0x3a,0x8a,0xfc,0xd8,0x27,0xe0,0x37,0xcf,0x60,0x3e,0xf8,0x1,0x38,0x77,0xc,0x1b, - 0x78,0xcf,0x7b,0xde,0xf3,0x94,0x75,0x26,0xc1,0xb9,0xef,0xfe,0xef,0x7e,0x78,0x6e, - 0xae,0xf4,0x97,0x99,0x6c,0x16,0xcf,0xf5,0x88,0xe3,0xb8,0x85,0x9,0x18,0x81,0x0, - 0xc0,0x60,0x44,0xfa,0xf,0x6,0x84,0x10,0xd8,0x8e,0x8d,0x23,0x1c,0x8c,0x31,0x44, - 0x51,0xcc,0xcc,0xec,0xdc,0x4d,0x53,0xd3,0xd3,0x37,0x65,0xb3,0x39,0x7a,0x7b,0x7b, - 0xef,0x2f,0x95,0x4a,0xdf,0x8a,0xe2,0xf0,0x97,0x33,0xd3,0xb3,0xe3,0x85,0x42,0xbe, - 0x7e,0xc1,0x5,0x3b,0xe2,0x53,0x5f,0xb5,0x86,0x5f,0x37,0x3c,0x3c,0x4c,0xe8,0x7, - 0xa0,0x14,0xfa,0xdd,0xff,0x6,0xf9,0xa9,0xcf,0x22,0x3f,0xfe,0x29,0x58,0xbf,0x1e, - 0x9e,0x7f,0x1,0xf3,0x1f,0xde,0x8f,0x39,0xff,0x3c,0x68,0x34,0x70,0xba,0xba,0xd8, - 0xbe,0xfd,0xfc,0xe2,0x19,0x3,0xe8,0xef,0xbf,0xf5,0xed,0xbb,0x16,0x97,0x96,0xde, - 0x9e,0xcd,0x64,0x71,0x1c,0x67,0x5,0x1c,0x5a,0x6,0x64,0x92,0xb7,0x36,0x38,0x47, - 0x9e,0x9b,0xf4,0xc4,0x52,0xa,0xcb,0xb6,0x10,0x6,0xe2,0x58,0x33,0x3d,0x3d,0x7d, - 0xc3,0xe4,0xd4,0xe4,0xd,0x96,0xb2,0xe8,0xed,0xe9,0xf9,0x85,0xeb,0x3a,0x5f,0x9c, - 0x98,0x98,0xfc,0x71,0x1c,0xc7,0xd3,0xf3,0xf3,0xf3,0xd1,0xae,0x5d,0x17,0xe9,0x93, - 0x79,0xbe,0x5c,0x2e,0x3b,0xe8,0x38,0xc9,0x24,0x10,0x86,0x90,0xcd,0xa2,0xdf,0xf5, - 0x4e,0xe4,0x9f,0xbf,0xf,0x1e,0xfe,0x47,0xcc,0xbf,0xfb,0xb7,0x98,0x5d,0x3b,0x61, - 0xa1,0xc,0x42,0x60,0xc,0x14,0xa,0xc5,0xe8,0x8c,0x0,0xf4,0xf5,0x6f,0x7c,0xf3, - 0x6b,0xf5,0x7a,0xfd,0xad,0x5d,0xb9,0x2e,0xa4,0x94,0x9,0x38,0xa2,0xc3,0xa5,0xda, - 0x40,0x88,0x36,0x58,0x74,0x5c,0x5b,0x31,0x28,0x93,0x5a,0x5b,0x72,0xae,0x94,0x44, - 0x59,0xe,0x20,0x30,0xc6,0x50,0x2e,0x97,0xaf,0x98,0x9f,0x9f,0xbf,0x62,0xef,0x73, - 0xcf,0x53,0x2c,0x16,0x1f,0x1b,0x1e,0x5a,0x77,0xc7,0xf8,0xf8,0xc4,0xc3,0x7d,0xbd, - 0xbd,0x93,0x87,0x27,0x26,0xe2,0x6d,0xe7,0x8e,0x1d,0x93,0x2f,0x9a,0xcd,0x66,0x39, - 0x8a,0x22,0x6c,0xdb,0xc6,0x28,0x5,0x51,0x84,0xb8,0xfb,0xdb,0x20,0x15,0xec,0xbc, - 0x10,0xf1,0xbd,0x1f,0x60,0x5e,0x7e,0x21,0x8c,0x8c,0x40,0xb3,0x89,0x10,0x50,0xab, - 0xd5,0xa4,0x7c,0xb1,0xe0,0xfc,0xdd,0x57,0xbf,0x76,0x5f,0xb5,0x5a,0x7d,0x6b,0x57, - 0xae,0xb,0x21,0xc4,0xca,0x20,0x39,0x72,0xf0,0xc9,0x32,0x66,0x56,0x81,0xc3,0x91, - 0xe0,0xac,0x6,0x54,0xac,0x7c,0x8f,0x4c,0x5d,0xd1,0xf5,0x3c,0x2c,0xcb,0x66,0x79, - 0xb9,0x7a,0xd5,0xb3,0xcf,0x3e,0x77,0xd7,0xcf,0x7f,0xf1,0xcb,0xfd,0x3f,0x79,0xe8, - 0xe1,0x47,0xe7,0xe7,0x17,0x6e,0x9d,0x9c,0x9c,0x1c,0x3d,0x78,0xf0,0xe0,0x9a,0x63, - 0x9a,0x9e,0x9e,0xf9,0xc7,0xb9,0xb9,0x59,0x2c,0xdb,0x2,0xcb,0x42,0x7c,0xe9,0xcb, - 0x88,0x1f,0x3d,0x80,0xb9,0xed,0x56,0xf4,0x47,0xf6,0x80,0xe7,0x21,0x3f,0xf4,0x31, - 0x98,0x9a,0x6,0xc7,0x26,0x8a,0x22,0x9e,0x7b,0x6e,0x6f,0xf8,0xa2,0x48,0xfa,0xeb, - 0xdf,0xf8,0xe6,0xf7,0xaa,0xd5,0xea,0x75,0xd9,0x6c,0xd6,0x32,0xc6,0x20,0x84,0x40, - 0xa,0x81,0x90,0x12,0x29,0x14,0x42,0xac,0xc,0x5d,0x8,0x1,0x42,0xa5,0x0,0x98, - 0xe4,0x6a,0xdb,0x9a,0xd6,0x0,0x67,0x35,0xc4,0x1d,0xa0,0xb7,0x69,0x2d,0xfd,0x3f, - 0x3,0x1a,0x6d,0xaa,0xca,0x52,0xcb,0x19,0xcf,0xdb,0xdb,0xdd,0xdd,0xfd,0xd5,0x81, - 0x81,0x81,0x9f,0x4e,0x4f,0x4d,0x5f,0x59,0x59,0x5c,0xdc,0x31,0xb2,0x7e,0xf8,0xc7, - 0x7f,0xf1,0x81,0xf7,0x4f,0xbc,0xea,0x55,0xaf,0xfc,0xcd,0x3b,0x6e,0xbd,0x95,0xe5, - 0x3b,0xbf,0x82,0xf8,0xf2,0x57,0x31,0xef,0xfd,0x73,0xcc,0x6b,0xae,0x82,0x28,0x86, - 0x72,0x5,0xb9,0xe7,0xa3,0xd0,0x6c,0xe2,0x7c,0xe6,0x3f,0x71,0x60,0x61,0x9e,0x3f, - 0x7b,0xe7,0x3b,0xdf,0x7b,0xda,0x0,0xfd,0xd7,0x3b,0xbe,0x70,0x9f,0x14,0xe2,0xfa, - 0xbe,0xbe,0x3e,0x69,0xb4,0xc6,0x18,0x83,0x31,0x6,0xad,0x75,0x6a,0x29,0x2,0xa9, - 0x24,0x52,0xca,0xf4,0x58,0x21,0x52,0x80,0x30,0x1a,0x63,0x74,0x27,0x41,0x75,0x7a, - 0xdc,0x51,0x40,0xac,0x69,0x91,0x1d,0x7,0x26,0xb5,0xcc,0x64,0x92,0x24,0x96,0x52, - 0x25,0x29,0xe5,0xb4,0x14,0x62,0x48,0x59,0xaa,0x50,0xab,0xd7,0x66,0x84,0x90,0x5f, - 0xff,0xe4,0x27,0x3e,0x7e,0xc1,0x27,0x3e,0xf3,0xe9,0xeb,0x47,0xc7,0xa7,0xa8,0x55, - 0x16,0xe1,0xda,0x6b,0x56,0x74,0x90,0xeb,0xc2,0xa1,0xc3,0x58,0x8f,0xfc,0x14,0xfb, - 0x2d,0x37,0x72,0xfb,0x27,0x3f,0xd1,0xbc,0xff,0xde,0x7b,0x7,0x4e,0xb,0xa0,0xff, - 0xf2,0x85,0xbf,0xf9,0xe2,0x4c,0xa9,0xf4,0xce,0x4d,0xc3,0xc3,0xf4,0x15,0x8b,0x84, - 0x51,0xd4,0xfe,0xcc,0x52,0x16,0x52,0xa,0xe2,0x58,0x13,0x46,0x21,0x46,0x1b,0x10, - 0x2,0x29,0x25,0x52,0x5a,0x48,0x25,0x53,0x1b,0x4a,0x40,0x15,0x1d,0x24,0x7e,0x22, - 0x20,0x56,0x5b,0xd7,0xd1,0xd7,0x4,0x46,0x9b,0x54,0x19,0x43,0x26,0x9b,0x21,0x8, - 0x43,0x16,0xe6,0xe7,0xf1,0xfd,0x20,0xa,0xc3,0xf0,0xb,0xf7,0xdd,0xfb,0xed,0xeb, - 0x3f,0xf8,0x91,0x8f,0x6e,0xde,0x3a,0x36,0x46,0xb3,0x52,0x69,0x2f,0x26,0x42,0x8, - 0xdc,0x5c,0xe,0xad,0x14,0x5f,0xf8,0xdc,0xe7,0xb8,0xeb,0x6f,0xff,0xf6,0xaa,0x89, - 0xc9,0xc9,0x9f,0x9d,0x32,0x40,0xf7,0x7d,0xf7,0x1f,0xde,0xf8,0xe8,0xaf,0x1e,0xbf, - 0xd3,0x72,0xbd,0xfe,0xad,0x23,0x43,0x74,0xbb,0xe,0x5a,0x88,0xf6,0x92,0x1d,0x45, - 0x11,0x61,0x18,0x22,0x95,0xc4,0xb6,0x9c,0xc4,0xcd,0x4,0x89,0x85,0x21,0x40,0xa4, - 0xee,0x27,0x13,0x98,0x64,0xfa,0xd9,0x91,0x96,0x24,0x8e,0x3,0x96,0x38,0xa6,0xc5, - 0x19,0xc,0x12,0x81,0x65,0x59,0x38,0x8e,0x8d,0x1f,0xf8,0x2c,0x2d,0x2d,0x13,0x4, - 0x1,0xcd,0x66,0x13,0xa5,0xd4,0x4c,0xbd,0x56,0xfd,0x57,0x5f,0xfa,0xd2,0x17,0xdf, - 0xf6,0xb6,0xb7,0xfd,0x8b,0x3f,0xbe,0xee,0xba,0xeb,0xc8,0xe7,0xf3,0x48,0x29,0xf1, - 0x7d,0x9f,0xa7,0x9f,0x7e,0x9a,0xaf,0x7c,0xe5,0x2b,0xd5,0x5f,0xfd,0xea,0x7f,0xbd, - 0x6e,0x7c,0x7c,0xe2,0x97,0xa7,0x15,0x8b,0x7d,0xf4,0xe3,0x9f,0xfc,0xc9,0xc4,0x7c, - 0xe5,0x9a,0xbe,0xe1,0x61,0xd6,0xf7,0x75,0x93,0x97,0x2,0xdb,0x75,0xd3,0x41,0xa, - 0xe,0x1e,0x3c,0xc0,0xcc,0xcc,0x2c,0x85,0x42,0x81,0xd,0x1b,0xd6,0x53,0x2c,0x76, - 0x3,0xa0,0xb5,0x49,0xd9,0x26,0x45,0x4c,0x80,0x30,0x1a,0x8c,0x46,0xa,0x10,0x52, - 0x82,0x10,0x29,0x1c,0x6,0x3a,0xde,0x4f,0xc,0x90,0x48,0xdd,0xb,0x6c,0xcb,0xc2, - 0xb2,0x2d,0x2,0x3f,0x60,0x71,0x69,0x89,0x30,0xc,0x11,0x8,0x82,0x30,0xc4,0xf, - 0xfc,0xa0,0xa7,0xbb,0xfb,0xe1,0xfe,0xfe,0xde,0x1b,0xdf,0xf9,0x8e,0x7f,0xb9,0x71, - 0xdd,0xba,0xa1,0xb7,0xc,0xd,0xd,0x5d,0x6e,0x59,0x96,0x57,0x2e,0x97,0x5f,0x18, - 0x1f,0x3f,0x7c,0xaf,0xef,0x7,0x8f,0x4e,0x4e,0x4e,0x35,0xdb,0x1e,0x71,0xaa,0xee, - 0xe5,0x7,0xc1,0x95,0x39,0xd7,0xc1,0x13,0x86,0xd8,0x6f,0x12,0xd8,0x36,0x96,0xe3, - 0x26,0x24,0x9c,0x9a,0xaa,0x90,0xa2,0xcd,0x9,0x2d,0xbd,0x23,0x48,0xdc,0xc,0x21, - 0xd2,0x5,0x4d,0xa3,0x8d,0x1,0xa3,0x89,0xd,0x88,0x94,0x3f,0xa4,0x48,0xc1,0x13, - 0x2,0x21,0xe4,0x8a,0x48,0x12,0x47,0x3e,0xc7,0xd1,0x64,0xe,0x8e,0x65,0xa3,0x2c, - 0x45,0xb3,0xe9,0xb3,0xb8,0xb4,0x48,0x1c,0x25,0xea,0x3c,0x8c,0xe3,0x96,0x2b,0x39, - 0xf3,0xb,0xb,0xaf,0xdf,0xb9,0xf3,0x65,0xe7,0x3d,0xf9,0xd4,0x6f,0x9e,0xec,0xef, - 0xeb,0xfb,0xd8,0x89,0xc6,0x7b,0x4a,0x0,0xfd,0xb7,0xaf,0x7e,0xe3,0xab,0xc5,0x62, - 0x11,0xd7,0xf7,0x91,0x41,0x93,0x50,0x1a,0xb4,0xca,0x13,0x45,0x21,0xb6,0x65,0x23, - 0xa4,0x60,0x74,0x74,0x94,0x4d,0x9b,0x36,0x61,0x8c,0xc1,0xb2,0xac,0x84,0x13,0x0, - 0x29,0x5,0xa0,0x13,0x45,0x2d,0x40,0xa,0x50,0x52,0x62,0xa4,0x40,0x6b,0x8d,0xd6, - 0x1a,0xa3,0x63,0x4c,0xb,0x1c,0x49,0x4a,0xf0,0xa4,0xab,0xa1,0x68,0xaf,0x80,0x47, - 0xaf,0x6a,0x6,0xdb,0xb1,0xb0,0x2c,0x8b,0x46,0xb3,0x49,0xa5,0xb2,0x48,0x1c,0x47, - 0x28,0xa5,0x8,0xc2,0xc4,0xe5,0x13,0xa9,0x20,0xd1,0x46,0xeb,0xbd,0xcf,0x3d,0xff, - 0xae,0xc1,0x81,0xc1,0xdb,0x80,0xe6,0x89,0xc6,0x7c,0x4a,0x3a,0x68,0x61,0x61,0xfe, - 0x9f,0x67,0x33,0x19,0x2f,0xeb,0x79,0x64,0x33,0x19,0x5c,0xc7,0x45,0x6b,0x4d,0x18, - 0x86,0x68,0x74,0x42,0xc8,0x6,0x2c,0xcb,0x4a,0x4,0x99,0x36,0x1d,0x63,0x49,0x79, - 0xc6,0xc4,0xa0,0x93,0x55,0xac,0x65,0x59,0x4a,0x29,0x1c,0xc7,0xc1,0x71,0x1c,0x94, - 0x65,0xa7,0x2e,0x19,0x13,0x45,0x21,0x3a,0x8e,0x12,0xf0,0x8c,0x49,0xc0,0x11,0x9d, - 0xe6,0x93,0x80,0x63,0x59,0x16,0xb6,0x65,0x51,0xaf,0xd7,0x8f,0x0,0xc7,0xf,0x2, - 0xa2,0x14,0x9c,0xd6,0xbf,0x28,0xa5,0xe4,0xf4,0xf4,0xcc,0xdb,0xab,0xb5,0x6a,0xcf, - 0xc9,0x8c,0xf9,0xa4,0x1,0xfa,0xde,0x3f,0x7c,0xff,0x1d,0x89,0x19,0x5b,0x58,0x4a, - 0xa5,0xab,0x92,0x44,0x88,0xc4,0x2,0xe2,0x30,0x6e,0x2b,0x9a,0x38,0x8e,0x89,0xe3, - 0x74,0x19,0x17,0xc9,0x72,0xbf,0xb4,0x5c,0x65,0x7a,0x7a,0x96,0xa5,0xa5,0xe5,0x23, - 0xfc,0xa3,0xad,0x1f,0xd3,0xbe,0x42,0x8,0x2c,0xcb,0xc6,0xb6,0x6c,0x2c,0x65,0x61, - 0xc,0xc4,0x51,0x44,0x14,0x6,0x9,0x60,0x7a,0x85,0x97,0x4,0x60,0x29,0x85,0xeb, - 0xd8,0xd4,0x6b,0x75,0x16,0x97,0x96,0x88,0xe3,0x8,0x29,0x25,0x41,0x10,0x10,0xa5, - 0xab,0x6b,0x4b,0x33,0x89,0x74,0x35,0x6d,0x34,0x9a,0x5e,0xa9,0x34,0x7f,0xc1,0xf8, - 0xc4,0xa4,0x38,0x63,0x2e,0x76,0xe8,0xe0,0xa1,0x5b,0x2d,0xa5,0x88,0xa2,0x10,0xa1, - 0x75,0xb2,0xa,0x89,0x95,0x75,0x26,0x8e,0x63,0x94,0x25,0x11,0xc2,0x5a,0x19,0x80, - 0x14,0x58,0xb6,0x8d,0x44,0x30,0xbf,0x50,0x66,0x7c,0x7a,0x9a,0xc1,0xbe,0x3e,0x8a, - 0xc5,0x42,0x4a,0xc8,0x6,0x25,0x41,0x2a,0x45,0x10,0x6a,0xe6,0x4a,0x73,0x1c,0xd8, - 0xbf,0x1f,0xd7,0x71,0x18,0x59,0x3f,0xc2,0x40,0xff,0x40,0x92,0x11,0x88,0x63,0xb4, - 0x49,0xdc,0x30,0x8a,0x23,0x8,0x35,0x52,0x4a,0x1c,0xc7,0xc5,0x76,0x6c,0x6a,0xb5, - 0x3a,0x4b,0xd5,0x2a,0x5a,0x6b,0x94,0x4c,0x2d,0x27,0x8e,0xe9,0x8,0x8f,0x8f,0xe2, - 0xaf,0x72,0xb9,0xfc,0x4a,0x29,0xc5,0x4f,0x37,0xac,0x1f,0x69,0x9c,0x11,0x80,0x4a, - 0xf3,0xf3,0x2f,0xcb,0xe7,0xf3,0xc4,0x71,0x8c,0x31,0x6,0x25,0x54,0x5b,0x1c,0xb6, - 0x88,0xd9,0xa4,0x7a,0x26,0x51,0xd4,0x92,0xa6,0xdf,0x64,0xef,0xde,0xe7,0x88,0xe3, - 0x18,0xcf,0xf3,0xb8,0x60,0xdb,0x36,0xa,0x85,0x3c,0x8,0x99,0x70,0x94,0x4,0x57, - 0x81,0x90,0x10,0x9,0x43,0x14,0x47,0x54,0x6b,0x55,0x82,0xc0,0x26,0xc,0xc3,0x95, - 0x61,0x89,0x84,0x3f,0xa4,0x54,0x1d,0xbc,0x6c,0xd0,0x26,0x66,0x79,0x69,0x39,0xcd, - 0x52,0x26,0xd3,0x12,0xb4,0xc1,0x61,0x4d,0x70,0x48,0x27,0x6e,0x6e,0x6e,0xee,0x9a, - 0xe1,0xe1,0xe1,0x3b,0x80,0x17,0xf,0xd0,0x37,0xbe,0x79,0xf7,0x7,0x7c,0xdf,0xb7, - 0xb2,0x99,0x2c,0xb6,0x67,0xe1,0xb9,0x2e,0xb6,0xe3,0x60,0x59,0x16,0xca,0xb2,0xd2, - 0x15,0x47,0xac,0xac,0x64,0xe9,0x8a,0xa5,0xb5,0xa1,0x52,0xae,0x50,0xab,0x57,0x19, - 0x1a,0x1a,0x66,0x38,0xe3,0x91,0xcd,0x78,0x84,0x41,0x88,0x0,0xb4,0x11,0x4,0x1a, - 0x84,0xd6,0x18,0x23,0x18,0xe8,0xeb,0xa7,0xeb,0xd2,0x4b,0x11,0x8,0x3c,0xcf,0x43, - 0x48,0x81,0x36,0x3a,0x71,0xbb,0x54,0x80,0x86,0x41,0x80,0x54,0x16,0x8e,0x6d,0x51, - 0x6f,0x36,0xa9,0x2c,0x2e,0xa2,0x94,0x2,0x21,0x8,0xc3,0x88,0x28,0x8a,0xdb,0x96, - 0x7d,0x14,0x38,0x66,0x45,0xcc,0x2e,0x2d,0x2f,0x5f,0x16,0x45,0x71,0x2f,0x30,0xf3, - 0xa2,0x1,0x9a,0x9a,0x9c,0x7a,0x9b,0x65,0xd9,0x48,0xdb,0x46,0xb8,0x2e,0x76,0xae, - 0x8b,0xae,0x4c,0x6,0x25,0x4,0x5a,0xc7,0x47,0xa8,0x95,0x44,0xe,0x26,0xc7,0x19, - 0xcf,0x63,0xfb,0xf9,0xe7,0xe3,0x87,0x3e,0x99,0x4c,0x96,0x8c,0xe7,0x11,0x47,0x71, - 0xfb,0xc1,0x35,0x2,0x1d,0xb7,0xe9,0x7,0xd7,0x75,0xc9,0x66,0x73,0x8,0x34,0x3a, - 0xd6,0xc4,0x26,0x49,0xb6,0x49,0x4,0xd5,0x5a,0x8d,0xf2,0xf2,0x12,0x6e,0x26,0x8b, - 0x16,0xd0,0xa8,0x2c,0x22,0x8d,0x26,0x93,0xcb,0xa1,0xe3,0x98,0x28,0x8a,0x93,0x30, - 0xe7,0xa8,0x0,0xe6,0xe8,0xa6,0xa4,0x24,0x8,0xc2,0x6c,0xb5,0x5a,0x1d,0x39,0x7c, - 0x78,0x7c,0xef,0xc6,0x8d,0xc7,0x4e,0xc6,0x9d,0x10,0xa0,0xef,0xff,0xe0,0x87,0x7f, - 0xd4,0x6c,0x36,0x77,0xc,0xf,0xf,0x13,0x9,0xc1,0x42,0xad,0xc1,0x72,0xa8,0xe9, - 0x13,0x92,0xde,0x5c,0x16,0xcf,0xb6,0x92,0x14,0x87,0x36,0x6d,0xf7,0x32,0xc6,0x60, - 0x62,0x83,0x52,0x8a,0xc1,0xa1,0xc1,0x55,0x4f,0x6b,0x0,0x3b,0x25,0x67,0xd3,0x21, - 0x71,0xc,0x1a,0x43,0x1c,0x87,0x60,0x34,0x5a,0x1b,0x94,0x94,0xf8,0x41,0x40,0x69, - 0x7e,0x81,0xc9,0xb9,0x79,0x1a,0xda,0x90,0xef,0xe9,0xc5,0x56,0x92,0xb0,0x56,0x25, - 0x2b,0x5,0xb9,0x5c,0x2e,0xd1,0x39,0x3a,0xe1,0x1c,0x21,0xd6,0x80,0xe8,0x88,0x43, - 0x3,0x52,0x10,0x6b,0x4d,0xa3,0xd1,0x18,0xa9,0x56,0xab,0x19,0xa0,0x7a,0x5a,0x0, - 0xfd,0xf6,0xb7,0xff,0xa7,0x7f,0x69,0x69,0xf9,0xf2,0x7c,0x57,0x9e,0x75,0x83,0x83, - 0x94,0x96,0x96,0x68,0xcc,0x57,0x8,0x94,0x83,0xe5,0x87,0xe8,0x68,0x9,0x15,0x85, - 0x4,0x8d,0x6,0xb1,0x31,0x48,0x29,0xb0,0x2d,0xb,0xdb,0x76,0xf0,0x5c,0xf,0xd7, - 0x75,0x40,0x82,0x44,0x26,0x3,0x10,0x60,0x59,0x36,0x96,0x4a,0x42,0x8d,0x24,0x6e, - 0xd2,0x18,0x43,0xaa,0x83,0xa2,0x44,0x40,0x6a,0xd,0x8,0x9a,0x7e,0x40,0x69,0x61, - 0x81,0x43,0x13,0x93,0x4c,0x97,0x4a,0x64,0x7b,0xfb,0xa1,0xd1,0x20,0xe7,0x7a,0x64, - 0x32,0x39,0x6c,0x34,0xbe,0xef,0x13,0x6b,0xb3,0x2,0xcc,0x49,0x6,0x6,0x5a,0x6b, - 0xc2,0x28,0x1c,0xa,0x82,0xa0,0xfb,0xb4,0x1,0x9a,0x9e,0x99,0xd9,0xa5,0x94,0x7c, - 0x59,0x4f,0x4f,0x11,0x29,0x5,0x59,0xd7,0x61,0xb0,0xaf,0x87,0xc8,0xf1,0xd0,0x71, - 0xcc,0xa1,0xc9,0x29,0x66,0xc7,0xc7,0xf1,0x6b,0x35,0x5c,0xcf,0xc3,0xb1,0x13,0xb1, - 0xe6,0xb8,0xe,0x5d,0xb9,0x2e,0xa,0x85,0x2,0xf9,0x7c,0x17,0xb9,0x5c,0xe,0xd7, - 0x75,0xd3,0xe5,0x37,0x24,0x92,0x11,0x76,0xca,0x5d,0x8,0x88,0x75,0x8c,0x8e,0x35, - 0x3a,0xd2,0xed,0x1c,0xb6,0xd6,0x9a,0xf2,0xe2,0x12,0x73,0xb,0x15,0xe2,0x58,0x93, - 0xf7,0x3c,0x6c,0x1,0x96,0xd6,0xf8,0x7e,0x3,0x29,0x21,0x97,0xc9,0x10,0xb7,0x34, - 0x82,0x11,0x6b,0xbb,0xd7,0x31,0x4e,0x24,0x2,0xbf,0xe9,0xf,0x2e,0x57,0xab,0x7d, - 0xc0,0xf8,0x69,0x1,0xd4,0xa8,0x37,0xae,0x55,0x52,0xed,0xb4,0x6d,0x87,0x30,0x8a, - 0x70,0x6d,0x9b,0x9e,0x8c,0xc7,0xbe,0x83,0x87,0xf0,0xa3,0x88,0x66,0xa3,0x41,0x1c, - 0x45,0x74,0xf7,0xf4,0x50,0xc8,0xe7,0xb1,0x2c,0x85,0xd6,0x9a,0x20,0x8,0x28,0x97, - 0xcb,0x94,0x4a,0x25,0x2c,0xcb,0xa2,0x50,0x28,0x30,0x34,0x3c,0x44,0x6f,0x4f,0x2f, - 0xae,0x9b,0x88,0x4b,0xdf,0xf,0x50,0x69,0x3a,0x24,0xd6,0x71,0xc2,0x4d,0xa6,0x95, - 0x27,0x32,0xd4,0xea,0xd,0x6a,0x8d,0x3a,0x2,0x43,0x2e,0x97,0xa5,0xd0,0xd5,0x85, - 0x90,0x82,0x66,0xe0,0x13,0x44,0x21,0x2a,0x97,0xc1,0x75,0xec,0x14,0xd0,0xd5,0xcd, - 0xac,0x69,0x4d,0x9d,0x5c,0xa9,0x94,0xa2,0xd1,0x68,0x74,0x97,0xcb,0xe5,0xee,0xd3, - 0x26,0xe9,0x30,0xa,0xaf,0x32,0x86,0xf5,0xad,0xdb,0x86,0x51,0xcc,0x81,0x7d,0xfb, - 0x38,0x74,0xe0,0x20,0xc5,0xde,0x5e,0x36,0x6d,0xde,0x4c,0xfe,0xbc,0x6d,0x58,0x52, - 0x26,0x91,0xb4,0x58,0x49,0x3,0xc6,0x3a,0xa6,0xd9,0x68,0x52,0xad,0x56,0x99,0x2b, - 0xcd,0xf1,0xeb,0x5f,0xff,0x9a,0xbe,0x9e,0x5e,0xb6,0x6c,0xd9,0x42,0x6f,0x5f,0x2f, - 0x6,0x43,0x1c,0xeb,0xb6,0x4a,0x6e,0xbf,0x77,0xe8,0x1d,0x29,0x20,0xe7,0x79,0x48, - 0xcb,0xc2,0x71,0x5d,0x62,0x1d,0xa3,0x6a,0x35,0xfa,0xec,0x3c,0xf9,0x5c,0x36,0xe1, - 0xbd,0xd5,0xfc,0xb2,0x56,0xeb,0xd0,0x6b,0xed,0x48,0x45,0x4a,0x82,0x28,0x2c,0xd6, - 0xea,0xf5,0xd3,0x7,0x28,0x8e,0xf5,0x85,0xda,0x68,0x94,0x52,0xc4,0xb1,0xa6,0x54, - 0x9a,0x63,0xdf,0x81,0x3,0x6c,0xda,0xb4,0x89,0xd1,0xd1,0xcd,0xe4,0x72,0x39,0x64, - 0x9a,0x45,0x6c,0xcd,0x50,0x14,0xc5,0x69,0x32,0xcc,0x26,0xe3,0x79,0x14,0x8b,0x5, - 0x6,0x7,0x7,0xa8,0x54,0x2a,0x4c,0x4d,0x4d,0xf1,0xf8,0x93,0x4f,0xb0,0x71,0x64, - 0x3d,0x5b,0xb6,0x6e,0xc5,0x76,0xec,0xb4,0xfe,0x9d,0x8c,0x21,0x8a,0xa3,0x36,0x1f, - 0xa1,0x35,0xae,0xe3,0xe0,0xe4,0x92,0x10,0xa4,0x19,0x4,0x34,0x1a,0x21,0x7d,0xdd, - 0x45,0x5c,0xdb,0x26,0x8c,0x22,0xa2,0x38,0x46,0xa,0x3a,0xa2,0x7f,0xb1,0x86,0xf5, - 0x98,0xd5,0x89,0xa5,0xc4,0xc5,0xa4,0x40,0x47,0x71,0xaf,0xdf,0xf4,0xfb,0x4e,0x1b, - 0x20,0xa3,0x4d,0x1,0x93,0x8,0xab,0x20,0x8,0x58,0x5e,0xae,0xb2,0xf3,0xe5,0x2f, - 0x63,0xd3,0xa6,0x4d,0x78,0x9e,0x43,0xa3,0xee,0x13,0x4,0x41,0x12,0xe3,0x48,0x89, - 0x52,0x8a,0x8c,0xe7,0xe2,0xb8,0xe,0x42,0x8,0x9a,0xcd,0x26,0x61,0x18,0x63,0xdb, - 0xe,0xae,0xeb,0x92,0xcb,0xe5,0x98,0x9d,0x9d,0x65,0x6a,0x7a,0x9a,0x85,0x4a,0x85, - 0xed,0xdb,0xb7,0x93,0xcb,0x75,0x11,0xea,0x18,0x29,0x25,0xb6,0xe3,0x10,0x34,0xfd, - 0x44,0x11,0x5b,0x16,0xc5,0x5c,0xe,0xd7,0x71,0xf0,0x7d,0x1f,0x25,0x5,0x85,0x5c, - 0x16,0xcb,0x52,0x44,0x51,0x4c,0x1c,0x1b,0x2c,0x95,0x92,0xff,0x31,0xad,0xc7,0x74, - 0x14,0xa,0x3a,0xae,0xa6,0xe2,0x36,0x8a,0x22,0x8e,0xce,0x13,0x9c,0xd2,0x32,0x6f, - 0x24,0x82,0x76,0x4c,0xb3,0x7e,0xfd,0x8,0xc5,0xee,0x22,0x4b,0x8b,0xcb,0x3c,0xf7, - 0xdc,0xf3,0x2c,0x2e,0x2e,0xe1,0x79,0x2e,0x5d,0x5d,0xb9,0xf6,0xb3,0x64,0x3c,0xf, - 0x83,0xc0,0xb1,0x5d,0x36,0x6e,0x1c,0xa1,0x58,0x70,0xa9,0xd5,0x1b,0x34,0x9b,0x4d, - 0xf2,0x5d,0x79,0x2c,0x65,0x61,0xdb,0x2e,0xb3,0xb3,0x33,0x3c,0xf5,0xe4,0x93,0x74, - 0xf5,0xf4,0xa2,0x32,0x39,0x2c,0xc7,0xa6,0xaf,0x3b,0x4f,0xd1,0x71,0x91,0x5a,0x63, - 0x2b,0xb,0x89,0x21,0xc,0x3,0xb4,0x8e,0x71,0x94,0x44,0x48,0x89,0x41,0x10,0xeb, - 0x90,0x6a,0x75,0x99,0x7a,0xbd,0x46,0x6f,0x5f,0x5f,0x9a,0x16,0x31,0x6b,0x52,0x90, - 0x38,0xa,0x32,0xd3,0x8e,0xcb,0xb4,0x31,0x98,0x8e,0x6c,0xe8,0xe9,0x9,0xc5,0x94, - 0x1f,0x2c,0xcb,0xc2,0xcb,0x78,0xcc,0x4c,0xcf,0x70,0xe8,0xf0,0x38,0xa5,0xd2,0x3c, - 0x0,0x5,0x9d,0xc7,0xf3,0xdc,0x24,0xa8,0x4c,0xcb,0x3d,0x7,0xf6,0x1f,0x66,0xdf, - 0xbe,0x9,0xc6,0xce,0x19,0x63,0xdb,0x79,0xa3,0x6c,0x3b,0x77,0x14,0xcf,0x2b,0x50, - 0x59,0x5c,0xc2,0x8e,0x62,0x7a,0xfb,0x7a,0x40,0x18,0xa6,0x26,0xa7,0x98,0x9e,0x9d, - 0xa5,0x38,0xbc,0x9e,0x75,0x43,0xc3,0x88,0x8c,0x4b,0x65,0x79,0x91,0xac,0x12,0x48, - 0x41,0x3b,0xac,0x49,0x5c,0x42,0x22,0x95,0x44,0x1b,0xc1,0xf2,0x72,0x95,0x89,0x89, - 0x71,0xb4,0x36,0xf4,0xf,0xc,0x24,0x16,0x64,0xd6,0xd0,0x3b,0xc7,0x33,0xe,0x73, - 0x2,0xde,0x3a,0x59,0x80,0x8c,0x31,0x49,0x1e,0x59,0x48,0x16,0x17,0x97,0xd8,0xbf, - 0xff,0x0,0xd5,0x6a,0xad,0xc3,0xad,0x93,0x74,0x83,0x10,0x92,0x38,0xd6,0x48,0xa9, - 0xa8,0xd7,0x6b,0x1c,0x3a,0xb4,0x9f,0x72,0xb9,0xcc,0xb3,0x7b,0xf7,0x72,0xee,0xb9, - 0xa3,0x5c,0x75,0xd5,0x65,0xc,0xae,0x1b,0x60,0x41,0x2f,0xe0,0x87,0x3e,0x85,0x42, - 0x1,0x23,0x24,0x73,0xa5,0x79,0x4c,0x14,0x10,0x87,0x21,0xd,0x60,0xa9,0xbc,0xc8, - 0xc6,0xfe,0x1e,0x2c,0x5,0x51,0x18,0x23,0xd2,0x8c,0x81,0x48,0x8b,0x79,0x71,0x14, - 0x13,0x46,0x11,0xb6,0xe3,0x92,0xcd,0x64,0xd2,0xeb,0xfa,0x78,0xdc,0x7c,0x4,0x8, - 0x2d,0xc0,0x45,0x22,0x2f,0x32,0x5a,0xeb,0xec,0x69,0x3,0x64,0x59,0xd6,0xe1,0x20, - 0xc,0x37,0xca,0x34,0xa5,0x31,0x33,0x33,0x43,0xbd,0xde,0x44,0x29,0x85,0x14,0x92, - 0x46,0xd0,0xa4,0xe9,0x27,0x9c,0xe1,0xb8,0xe,0xb6,0x9d,0xee,0xdc,0x10,0x0,0x1, - 0x95,0xca,0x2c,0x7e,0x63,0x99,0x83,0x7,0xf6,0x33,0x3d,0x33,0xcd,0x1f,0x5c,0xf7, - 0x5a,0x36,0x6f,0xde,0x40,0x18,0x86,0x84,0x51,0x4c,0xa1,0xbb,0x1b,0x10,0xcc,0xcc, - 0xcd,0x31,0xfe,0xdb,0xa7,0xe9,0x1d,0x18,0x24,0xe7,0x39,0xb8,0xb6,0x83,0xa5,0x44, - 0x3b,0xa8,0x4d,0xe4,0x76,0x52,0x8,0x68,0xfa,0x3e,0xae,0xeb,0x32,0x32,0x32,0x82, - 0x6d,0x59,0x18,0xad,0x3b,0x87,0x7f,0x74,0x1e,0xfb,0xe8,0xd2,0x24,0x42,0x8,0xea, - 0xf5,0x6,0xc5,0x42,0x61,0xa9,0x50,0xc8,0x4f,0x9d,0x76,0x3e,0x28,0x97,0xcb,0x3d, - 0x64,0x59,0x56,0x55,0x6b,0x4d,0x14,0x85,0x54,0xab,0x55,0x2c,0x4b,0xa5,0x79,0x15, - 0x81,0x44,0xe2,0x7,0x21,0xb5,0x7a,0x1d,0x29,0x93,0x44,0x99,0x92,0x92,0x5c,0x2e, - 0x47,0x4f,0x4f,0x2f,0xae,0xa3,0x28,0xe4,0x1d,0x5c,0x7,0x7e,0xf6,0xd8,0x63,0x7c, - 0xeb,0xee,0x7b,0xd8,0xf7,0xc2,0x7e,0x7a,0x7a,0xba,0xf1,0x3c,0x17,0x61,0xc,0xd9, - 0x4c,0x6,0x4f,0x29,0x1a,0xb,0x25,0xfc,0xf2,0x3c,0x43,0x3d,0xdd,0x38,0xb6,0x85, - 0x52,0x36,0x96,0xed,0xa4,0x29,0x5a,0x91,0x92,0x6a,0x4c,0x14,0x45,0xd8,0x56,0xb2, - 0x42,0x4a,0x25,0x57,0x72,0x49,0xe6,0x78,0xf6,0x63,0x8e,0xb0,0xa2,0xc0,0xf,0x90, - 0x42,0x96,0xb6,0x6d,0x1b,0xfb,0xe2,0x95,0x57,0x5e,0xf1,0xc0,0xf1,0x30,0x38,0xee, - 0xf6,0x97,0xc5,0xa5,0xa5,0xb8,0xd1,0x68,0x6e,0xa8,0xd7,0xeb,0x5b,0xb5,0x36,0x94, - 0x4a,0x25,0xe2,0x58,0x93,0x16,0x31,0x12,0x2d,0xa3,0x63,0xe2,0x30,0x22,0xdf,0xd5, - 0xd5,0x56,0xc7,0x9e,0xe7,0xd1,0xdb,0xd7,0x43,0xb1,0xd8,0x8d,0x94,0x8a,0xbe,0xde, - 0x22,0x96,0xa5,0x38,0x78,0xf0,0x10,0x33,0x33,0x73,0x6c,0xda,0xbc,0x89,0x9e,0xee, - 0x22,0x81,0xef,0x63,0xb4,0xc6,0x71,0xec,0x44,0x37,0xd5,0xeb,0xc,0xf4,0xf5,0x61, - 0x3b,0x76,0x42,0xbc,0x46,0x23,0xd2,0xb4,0x88,0x14,0x10,0x4,0x7e,0xa2,0x9d,0x4c, - 0x2b,0x44,0x31,0x6b,0x80,0x22,0xda,0x1,0x73,0x4b,0x74,0xb6,0x7a,0x69,0x63,0xd0, - 0xb1,0xc6,0x18,0x3d,0x7b,0xe1,0x85,0x3b,0x3e,0x70,0xd9,0xa5,0x97,0xfc,0xfd,0xd0, - 0xba,0x75,0xb5,0xd3,0x6,0x68,0x78,0x68,0xe8,0xd9,0xe9,0xe9,0x99,0x4d,0x4b,0x8b, - 0x4b,0xaf,0x35,0x18,0x2a,0x95,0xa,0x51,0xb4,0x12,0xf8,0xa,0x93,0x8,0xb5,0x20, - 0xc,0x50,0xca,0x4a,0xca,0xc2,0x4a,0x61,0xdb,0x16,0xc5,0x42,0x91,0xe1,0xe1,0x11, - 0x36,0x8f,0x8e,0xd2,0x3b,0x30,0xc8,0x40,0x7f,0x3f,0xae,0xeb,0x32,0x3f,0x5f,0xa6, - 0x34,0x5f,0xe6,0xbc,0xf3,0xc6,0x70,0x1d,0x7,0xad,0x63,0xa4,0xb4,0xd0,0xc6,0xb0, - 0x50,0x2e,0x13,0x45,0x11,0xc5,0x42,0x11,0xc7,0x71,0xb0,0xa5,0xc1,0xb5,0xc0,0x12, - 0x6,0x61,0x62,0xc2,0xc0,0x4f,0x40,0x91,0x1d,0x59,0xc8,0x13,0x90,0x70,0x27,0xf7, - 0x68,0xad,0x41,0x50,0xda,0xb1,0x63,0xc7,0xfb,0x5f,0xf5,0xaa,0xab,0xee,0xca,0xe7, - 0xf3,0xd1,0x8b,0xce,0x28,0xf6,0xf6,0xf6,0x3c,0x32,0x3b,0x37,0x17,0xd5,0xeb,0x75, - 0xcb,0x71,0x6c,0x1a,0x8d,0x66,0xe2,0xd5,0xad,0x12,0xb3,0x65,0xa1,0x80,0xf9,0xd2, - 0x3c,0x9e,0xeb,0xd2,0xdd,0x5d,0x4c,0x85,0x65,0x4c,0xb3,0xe9,0x3,0xd0,0x53,0x2c, - 0xb2,0x6e,0x70,0x90,0xb1,0xb1,0x31,0x66,0x67,0x67,0x98,0x99,0x99,0x63,0xfc,0xf0, - 0x24,0x5b,0xb6,0x6c,0x22,0x93,0xc9,0x10,0xc7,0x35,0xb2,0x99,0x2c,0x85,0x7c,0x9e, - 0xb9,0x52,0x89,0x91,0x91,0x11,0xa,0x5d,0x19,0x1c,0x95,0x70,0x50,0x4b,0x14,0xb6, - 0x92,0x6c,0x2,0x41,0x60,0xc,0xab,0xb9,0xf9,0xe8,0x15,0x69,0x85,0x73,0xc2,0x30, - 0xc4,0x52,0x6a,0x6a,0xfb,0xf6,0xf3,0x3f,0xf8,0xea,0x57,0xbd,0xf2,0x4e,0xcf,0xf3, - 0x4e,0x2a,0xac,0x3d,0x61,0x4e,0xfa,0x82,0xb,0x76,0x3c,0xd2,0xdf,0xdf,0xf7,0xa9, - 0x38,0xd6,0xe4,0xf3,0x79,0x94,0x5a,0xd1,0x1c,0x2,0x50,0x22,0x29,0xd4,0x19,0x60, - 0xae,0x54,0x62,0x79,0xb9,0xa,0x6,0x94,0x65,0x91,0xeb,0xca,0x91,0x80,0x5a,0xa7, - 0xba,0xbc,0x8c,0x31,0x86,0xa1,0xe1,0x61,0x5e,0xfe,0xf2,0xb,0xc9,0xe6,0x32,0xe8, - 0xb4,0xf2,0x61,0xdb,0x49,0x80,0x9b,0xeb,0xca,0xd1,0x6c,0x36,0xa9,0x56,0x97,0x89, - 0xa3,0xb0,0x5d,0xcd,0xd0,0x88,0x34,0x11,0x96,0xbc,0x87,0x41,0x92,0xf6,0x85,0x23, - 0x6b,0xfb,0x22,0xfd,0xeb,0xdc,0x6e,0x23,0x84,0xa0,0xd9,0x68,0xa2,0xa4,0x2a,0x5d, - 0x78,0xc1,0x5,0xef,0x7d,0xfd,0xb5,0xaf,0xfb,0x9b,0x93,0x5,0xe7,0xa4,0x93,0xf6, - 0x57,0xbf,0xe6,0xd5,0xef,0xf3,0x3c,0x87,0x5c,0x2e,0x87,0x52,0x6a,0x25,0x83,0x98, - 0x26,0xee,0x95,0x94,0xd8,0xb6,0x4d,0x10,0x4,0xcc,0xce,0xcc,0x52,0x59,0x5c,0x4c, - 0x94,0xb1,0x95,0x64,0x1f,0xb3,0xd9,0x2c,0xc6,0x68,0xaa,0xb5,0x2a,0xf5,0x7a,0xa3, - 0x9d,0xdc,0xf2,0x9b,0x3e,0x4a,0x4a,0x1c,0xc7,0x46,0x29,0x99,0x64,0x11,0x81,0xfa, - 0x72,0x15,0xdf,0xf,0x30,0x46,0xa6,0x7b,0x86,0x24,0xb6,0x4a,0xd4,0xfa,0x6c,0x69, - 0x9e,0x4a,0xa5,0x82,0x4a,0x97,0x7f,0xc3,0xa,0x1f,0xb6,0x52,0xc0,0x2b,0xe1,0x84, - 0xa4,0x5e,0xab,0xa3,0x94,0xaa,0xef,0xdc,0xf9,0xb2,0x7f,0x7d,0xd5,0x55,0xaf,0xf8, - 0xda,0xa9,0xd6,0x1,0x4f,0xba,0xaa,0x71,0xf3,0x9f,0xfc,0x33,0xa1,0x94,0x45,0x3e, - 0x9f,0x6f,0x27,0xc5,0x56,0xea,0x56,0x22,0x1,0xc9,0xb2,0x9,0xc2,0x90,0xd9,0xd9, - 0x39,0xe6,0xe6,0xe6,0x8,0xc3,0x0,0x29,0x65,0x5a,0xa,0x76,0xb0,0x2c,0x45,0x1c, - 0x47,0x34,0x1a,0x4d,0x1a,0x8d,0x26,0x8b,0x4b,0xcb,0xa9,0x8,0xb5,0x91,0x42,0xa2, - 0x54,0x92,0xc2,0xad,0x35,0xea,0x69,0x29,0xc9,0x10,0x6b,0x88,0xd,0x2c,0xd5,0x1a, - 0x4c,0xcf,0xcd,0x83,0x10,0xe4,0x72,0x99,0x34,0x1d,0x6b,0x8e,0x41,0x3f,0x89,0x2c, - 0xa8,0xd5,0x6a,0x28,0xcb,0xa,0x2e,0xbd,0x74,0xd7,0xcd,0x97,0x5d,0x76,0xe9,0x3d, - 0x9e,0xe7,0xe9,0x53,0x5,0xe8,0x94,0xa,0x87,0xfd,0x3,0xfd,0xf7,0x7,0x61,0x78, - 0x43,0xad,0x56,0x23,0x8a,0xea,0xed,0xb4,0x41,0x2b,0xd5,0xd9,0xb2,0xae,0x30,0x8a, - 0x98,0x9b,0x9b,0xa7,0xd9,0xf4,0xe9,0x2e,0x16,0xf0,0xdc,0x64,0x49,0x76,0x6c,0x7, - 0x1d,0xc7,0x68,0x93,0x84,0x2f,0xbe,0xef,0x13,0xc6,0x31,0xb6,0x65,0x21,0xa5,0x6a, - 0x83,0xed,0x7,0x61,0xb2,0x5a,0xa6,0x5c,0xd7,0x6c,0x46,0x3c,0xf7,0xc2,0x41,0xa4, - 0x14,0xc,0xf,0xaf,0x23,0x93,0xed,0x22,0x88,0x5a,0x41,0x74,0x74,0x74,0xd6,0xd0, - 0x18,0x7c,0xdf,0xc7,0xb6,0xec,0xe0,0x8a,0x2b,0x2e,0xbb,0xfe,0xa2,0x9d,0x2f,0xff, - 0x49,0x36,0x9b,0x3d,0x65,0x70,0x4e,0xb9,0x70,0x78,0xfd,0x1f,0xfe,0xc1,0x9b,0xfa, - 0xfa,0xfb,0x9e,0xe8,0xed,0x4d,0xf2,0x3a,0x2d,0x2b,0x52,0x69,0x9d,0x4c,0x88,0xa4, - 0x8,0xd8,0x12,0x70,0x8b,0x8b,0x4b,0xcc,0xcc,0xcc,0x31,0x3b,0x37,0xc7,0xe2,0xe2, - 0x22,0xbe,0xef,0x83,0x10,0x28,0x4b,0x62,0x29,0x89,0x10,0x6,0x1d,0xc7,0xc9,0xe0, - 0x64,0x12,0x5a,0x84,0x61,0x88,0xb2,0x2c,0xb4,0x10,0x49,0x32,0x2c,0xdd,0xdc,0xa0, - 0xe3,0x98,0x7c,0x57,0xe,0xc7,0xf1,0x30,0x46,0x10,0x85,0x31,0xcd,0x66,0x63,0x65, - 0x87,0x48,0xa,0x6e,0x2b,0x1f,0xe5,0x38,0x4e,0xe9,0xca,0x57,0x5c,0x71,0xfd,0xae, - 0x8b,0x76,0x3e,0x70,0xba,0xe0,0x9c,0x56,0x6d,0xfe,0x8f,0x6e,0xbc,0x61,0xd7,0x7d, - 0xf7,0x7e,0xf7,0x7f,0x47,0x61,0xb4,0xab,0x34,0x3f,0x9f,0x16,0xea,0x54,0x7b,0xe6, - 0xda,0x1b,0xa9,0xa4,0x44,0xc7,0x31,0x7e,0x33,0x89,0xf8,0x6b,0xf5,0x3a,0x9e,0xeb, - 0xe1,0xb8,0x4e,0xba,0x5,0x26,0x21,0xf9,0x9e,0x9e,0x6e,0x84,0xc8,0x80,0x31,0x69, - 0xb1,0x2f,0xa6,0x50,0xc8,0x63,0xd9,0xe,0x41,0xa4,0x11,0x18,0x84,0x92,0x8c,0xac, - 0x5f,0x8f,0xe3,0xb9,0x18,0xcb,0xa6,0xee,0x7,0x2c,0x94,0xcb,0x34,0x9b,0xd,0xd6, - 0xf,0x8f,0xb4,0x6b,0xf9,0xb1,0x8e,0x9,0xc2,0x80,0xae,0x5c,0xd7,0x53,0xbb,0x76, - 0xed,0xbc,0xed,0x8a,0xcb,0x2f,0x7b,0xf0,0xc5,0xee,0xa0,0x3b,0xad,0x2d,0x78,0x6f, - 0xba,0xf1,0x8d,0x17,0x8f,0x9d,0xb3,0xf5,0x89,0xfe,0xfe,0x5e,0x6c,0xdb,0x4e,0xea, - 0x56,0x29,0x61,0xb7,0x2c,0xa9,0x95,0x94,0x4a,0x8,0x38,0xc9,0x27,0x55,0xab,0x35, - 0xca,0xe5,0xa,0xb,0xf3,0xb,0x2c,0x2c,0x94,0x59,0x5c,0x5c,0x26,0x8e,0x35,0x96, - 0xad,0xf0,0xfd,0x80,0x72,0xb9,0x82,0xe3,0xd8,0xf4,0xf4,0xf4,0xe0,0x3a,0x6e,0xb2, - 0xc7,0x48,0x43,0xa4,0x5,0x6e,0x2e,0x8f,0xb6,0x6c,0x94,0x97,0xc5,0xd7,0x50,0x59, - 0x5a,0x26,0xf4,0x43,0xa4,0x12,0x90,0x56,0x57,0x7c,0xdf,0xa7,0x50,0xc8,0xff,0xea, - 0x92,0x4b,0x76,0xfd,0xd9,0x99,0x0,0xe7,0xb4,0x1,0x2,0xb8,0xf1,0xa6,0x1b,0x76, - 0x8d,0x8d,0x8d,0x3d,0xb5,0x6e,0xdd,0x20,0x8e,0x63,0x27,0xa1,0x87,0x14,0x6d,0x80, - 0xda,0x1,0x66,0x6a,0xfa,0x96,0x52,0x49,0xbc,0x66,0x59,0xc8,0x34,0xb0,0xcd,0x64, - 0x32,0x78,0x5e,0x86,0x28,0x8c,0x98,0x9e,0x9e,0xe6,0xf0,0xf8,0x61,0x7a,0x7b,0x7b, - 0xc9,0x77,0x75,0xa5,0x3b,0x41,0x12,0x5d,0x1c,0x45,0x51,0x92,0x72,0x11,0xa0,0x71, - 0x50,0x76,0x17,0xdd,0xbd,0xfd,0xc,0xae,0x1b,0x48,0x64,0x80,0xd6,0x34,0x83,0x80, - 0x42,0xa1,0xf0,0xcc,0x25,0x17,0x5f,0x7c,0xeb,0x65,0x97,0x5e,0xf2,0xf3,0x33,0xb5, - 0x7b,0xf7,0x45,0x6d,0xe2,0xbc,0xf1,0x4d,0x6f,0xdc,0x39,0x36,0x76,0xce,0x23,0x1b, - 0x37,0x6c,0x68,0x16,0xa,0x85,0xa4,0x80,0xc7,0xda,0xd6,0xd4,0xe,0x4,0xd2,0x6d, - 0x2d,0xb6,0x6d,0x33,0x34,0xb4,0x8e,0x7c,0xbe,0x8b,0xe9,0x99,0x19,0xf6,0x3e,0xf7, - 0x3c,0x61,0x18,0xb1,0x65,0x74,0x14,0xcf,0xcb,0x24,0xf5,0x30,0x99,0x8,0xc5,0x38, - 0x4a,0xa,0x8d,0xc4,0x86,0xc8,0xf,0xf0,0x3c,0x8f,0xc1,0xc1,0x1,0xba,0xba,0xba, - 0x88,0x53,0xce,0xc9,0x65,0x32,0x53,0xaf,0xb8,0xe2,0xf2,0x3f,0xbd,0xe4,0xe2,0x5d, - 0xbf,0x38,0x93,0x7b,0xbf,0xcf,0xc8,0x4e,0xfb,0x9f,0xfe,0xf4,0xb1,0xf,0x1f,0x3a, - 0x34,0xfe,0xfe,0xca,0x62,0xc5,0x2a,0x97,0x2b,0x2c,0x57,0xab,0x49,0x6e,0xe8,0xc8, - 0xd,0xf6,0x89,0x5e,0xd1,0x6,0xdb,0xb2,0x18,0x1e,0x1e,0x62,0xd3,0x86,0xf5,0x84, - 0x71,0xcc,0xb,0xe3,0x93,0x54,0xaa,0x55,0x86,0x7,0xfa,0x58,0xd7,0xd3,0x3,0xc6, - 0xb4,0x89,0xbf,0xd9,0x6c,0x26,0xe2,0x33,0xdd,0xf1,0xa1,0x3b,0xf2,0x54,0x46,0x1b, - 0xc2,0x28,0xc4,0x75,0x9c,0x99,0x6b,0x76,0x5f,0xfd,0x9a,0x1d,0x3b,0xb6,0xef,0xe5, - 0xc,0xb7,0x33,0xb2,0x4f,0xda,0xb6,0xed,0x3d,0x17,0x5f,0x7c,0xd1,0x7d,0xcf,0x3f, - 0xff,0xc2,0xe7,0x3d,0xd7,0xdb,0xd5,0x9b,0x6e,0x79,0xab,0x37,0xea,0x4,0x7e,0xd0, - 0x21,0x3,0x2c,0xba,0xf2,0x5d,0xf4,0xf7,0xf6,0x90,0x2f,0x14,0x68,0x36,0x7d,0x4a, - 0x4b,0x4b,0x54,0xc3,0x10,0x95,0xf1,0x90,0x5e,0x16,0x1f,0x41,0x46,0x49,0x6c,0xa5, - 0xf0,0x83,0x90,0x66,0xa3,0x99,0xec,0x5,0xb0,0x54,0x3b,0xc5,0xaa,0x63,0x4d,0x14, - 0x6b,0xc2,0x28,0xc2,0x71,0x9d,0xea,0xb5,0xd7,0xbe,0xf6,0x35,0xc3,0x43,0xeb,0x9e, - 0xe3,0x2c,0xb4,0x33,0xf6,0x5b,0x8d,0x17,0x5e,0xd8,0x27,0xba,0xba,0xba,0xba,0x4a, - 0xa5,0xd2,0xeb,0x5e,0xd8,0xb7,0xff,0x63,0xa5,0x52,0xe9,0x7c,0x1,0xe9,0xee,0x56, - 0x81,0x20,0x91,0x3,0x96,0x95,0xa4,0x4e,0x75,0xac,0x89,0xa3,0x88,0x65,0xbf,0xc9, - 0xf4,0x52,0x95,0x5a,0xa4,0x29,0xe4,0x72,0x14,0x3d,0x87,0xc1,0x7c,0xe,0x25,0x4, - 0xd5,0x6a,0x8d,0x7a,0xa3,0x81,0x31,0x1a,0x3f,0x8,0xa8,0xd5,0xea,0xc4,0x8,0xa4, - 0xa5,0x10,0xc6,0x30,0xd0,0xdd,0xf3,0xf8,0x35,0xd7,0xbc,0xfa,0xad,0x83,0x3,0x3, - 0x7b,0x7b,0x7a,0x7a,0xcc,0xef,0x35,0x40,0xad,0xb6,0x6f,0xff,0x1,0xb9,0xbc,0xbc, - 0xdc,0xeb,0x38,0xf6,0x15,0x93,0x93,0x53,0x6f,0x2f,0x95,0xe6,0xff,0xd8,0xf7,0xfd, - 0x36,0x37,0x29,0x95,0xec,0xa,0x41,0x83,0x50,0x9,0xc1,0x2e,0x35,0x7d,0x16,0xea, - 0xd,0xc2,0x30,0xc2,0x53,0x92,0x6e,0xcf,0x25,0xa,0x43,0xea,0xcd,0x26,0x91,0xd6, - 0x44,0x61,0x44,0xa3,0x5e,0xc3,0xb2,0xed,0xfd,0xfd,0xeb,0x86,0x7e,0x3b,0x38,0xd8, - 0x7f,0x60,0x68,0x60,0xe0,0xd1,0x4d,0xeb,0x47,0x7e,0x74,0xce,0xd6,0x2d,0xb,0x9c, - 0xc5,0x76,0xd6,0x7e,0x2f,0x56,0xa9,0x54,0xc4,0xf3,0x2f,0xec,0x2b,0xe6,0x72,0xb9, - 0xd,0xd5,0x6a,0x75,0xd7,0xe2,0xe2,0xe2,0x65,0xf5,0x7a,0xe3,0x15,0x61,0x18,0x9e, - 0x17,0xc7,0x71,0x21,0x8d,0x6,0x5a,0x3b,0x33,0x2,0x3f,0x8a,0x2a,0x4d,0x3f,0xa8, - 0x48,0x61,0x66,0x1d,0xcb,0x9e,0x55,0x52,0x4e,0x38,0x8e,0x33,0xe1,0xb8,0xee,0x94, - 0x54,0x6a,0xd2,0x52,0x72,0xf6,0x89,0x27,0x7f,0xbd,0x50,0xec,0xed,0xad,0x6f,0xdd, - 0xba,0x25,0x38,0x67,0xf3,0xe6,0xfa,0xe8,0xa6,0xd,0x9a,0xb3,0xdc,0xce,0xfa,0x4f, - 0x32,0x6b,0xb5,0x9a,0xa8,0xd5,0x6a,0xc5,0x99,0x99,0xd9,0xed,0xb,0xb,0xe5,0x57, - 0xd6,0x6a,0xb5,0x5d,0x7e,0x10,0x6c,0x88,0xe3,0xb8,0xfb,0x9f,0xbe,0xe5,0xcd,0x3b, - 0x1,0x3e,0xff,0xf9,0x2f,0xfe,0x70,0xc3,0x86,0xd,0x87,0xa2,0x38,0x9e,0x13,0x82, - 0x29,0xc7,0x71,0xa6,0x3c,0xcf,0x9b,0x28,0xe4,0xf3,0xd3,0xb9,0x5c,0x6e,0xc1,0xf5, - 0xdc,0x7a,0x57,0x2e,0x17,0xf5,0xf7,0xf7,0xbf,0xe4,0x3f,0xe1,0x14,0x2f,0xc5,0x8f, - 0x7a,0x8f,0xd1,0x46,0x81,0x3b,0xd3,0xe3,0x6b,0x5e,0xe4,0xbd,0x76,0xa7,0xef,0x4f, - 0x0,0x95,0xff,0x57,0x0,0x6a,0x85,0x98,0x7,0x80,0x2d,0x1d,0x3,0xbd,0xfa,0x4, - 0xff,0xf3,0xa1,0x35,0xae,0xed,0x4f,0x1,0xdf,0x92,0xde,0xf,0xe0,0x16,0x60,0xf3, - 0x1a,0x7d,0xbf,0xdc,0xd1,0xe7,0x8c,0x2e,0xf3,0xdd,0xe9,0x97,0x16,0xd3,0xf3,0x87, - 0x81,0x87,0xd6,0xe8,0x77,0x13,0xb0,0x33,0x1d,0xc8,0x28,0xf0,0xf6,0xe3,0xf4,0x65, - 0xd5,0xc3,0x5e,0xd,0xec,0x39,0xd,0x80,0xe,0xa4,0xdf,0xd5,0x79,0xaf,0xb7,0x77, - 0x58,0x56,0x67,0x7b,0xf8,0x54,0x0,0x6a,0x7,0x98,0x27,0x78,0x8d,0x1a,0x63,0xca, - 0xe6,0xe8,0x76,0xe7,0x1a,0x7d,0x1f,0x4c,0xfb,0x62,0x8c,0xd9,0x9d,0xf6,0xbb,0xe5, - 0x18,0xf7,0x35,0x69,0xff,0xd6,0xf9,0xed,0xe9,0xb5,0xdb,0x8f,0x71,0x5f,0x73,0x8c, - 0xfb,0xac,0xf5,0x59,0xeb,0xda,0xee,0x63,0x9c,0x9f,0xd4,0xeb,0x64,0x43,0x8d,0x3b, - 0x53,0xb,0xda,0x93,0x46,0xc,0xd7,0x74,0x98,0xf1,0xe8,0x1a,0xdc,0xf2,0x44,0x7a, - 0x7c,0xd1,0x1a,0x56,0xf2,0x60,0xc7,0xab,0xd5,0xa7,0x75,0x7e,0xcb,0x29,0x58,0xf4, - 0xed,0xa9,0x6b,0x3d,0xd8,0xf1,0x3d,0xf,0x2,0x8f,0xa7,0x9f,0xbd,0xa4,0x4a,0x7a, - 0x77,0x3a,0xc8,0x96,0x79,0x3f,0x94,0xbe,0x76,0xa7,0x80,0x54,0x3a,0x1e,0xb2,0x75, - 0xbe,0x3b,0x75,0xb5,0x96,0x7b,0xae,0x76,0x81,0xd1,0x13,0x10,0xf8,0xee,0x35,0x5c, - 0xbc,0xb3,0x1d,0xec,0x70,0xdb,0xdd,0x1d,0xcf,0xd5,0x72,0xa3,0xdd,0x67,0x86,0x25, - 0x4f,0xc1,0xdc,0x56,0xbd,0xf6,0xa7,0x26,0x7b,0x51,0x87,0x2b,0x1d,0xaf,0xad,0x76, - 0x9b,0x4f,0x1f,0xc7,0xc5,0x8e,0xd7,0x56,0x3f,0xc7,0x2d,0xc7,0xf8,0xec,0x25,0x75, - 0xb1,0xce,0x99,0xbd,0x29,0x35,0xe5,0x51,0xe0,0xae,0xd4,0x9d,0xe,0xa4,0xee,0x77, - 0x57,0xda,0xef,0x3b,0xe9,0xf9,0x81,0x8e,0xcf,0x1e,0x5e,0x83,0xcc,0x5b,0xf7,0xbc, - 0x67,0x95,0x85,0xec,0x61,0x65,0xc3,0x4f,0xeb,0x75,0x2c,0x92,0xbf,0xb1,0xe3,0xf8, - 0xb6,0xe,0x4b,0xe6,0x77,0x61,0x41,0x9d,0x33,0x5c,0x4e,0xad,0x67,0xad,0xd9,0xdc, - 0x7d,0xc,0x12,0x6e,0xbd,0x2e,0x5a,0xc3,0x32,0xee,0x39,0xd,0x92,0xee,0x5e,0xe3, - 0x3e,0x8f,0xa7,0xd7,0x5b,0xfd,0xbb,0x5f,0x8c,0x5,0x9d,0x6a,0x34,0xff,0x21,0xe0, - 0x5e,0xe0,0xdd,0x29,0xa1,0x3e,0x98,0x6a,0x8f,0x96,0x38,0xdb,0xdc,0x41,0xca,0xdd, - 0x1d,0xe2,0x6d,0x75,0x7b,0x77,0xc7,0xf1,0x13,0x1d,0x16,0xb5,0xfb,0x14,0x38,0x68, - 0xf5,0x7d,0xe8,0xe0,0xc5,0x4e,0x92,0xae,0xfc,0xae,0x38,0xa8,0x35,0x23,0xb7,0x9d, - 0x22,0x7,0x5d,0xd4,0x61,0x81,0x2d,0xb,0x6b,0xc9,0x88,0xc7,0x4f,0x81,0x83,0xba, - 0x3b,0xee,0xd1,0xe2,0xc3,0xd1,0xf4,0x7e,0x17,0x75,0x5c,0xe3,0x6c,0x73,0xd0,0x28, - 0xf0,0xe9,0xd4,0xbf,0x59,0x63,0xe6,0x8b,0xe9,0x2c,0x3d,0x94,0xbe,0xb7,0x8e,0x9f, - 0xe8,0xe8,0xf7,0x50,0xba,0xea,0xd0,0x11,0x5e,0x7c,0x66,0x95,0xd0,0xeb,0x49,0xb9, - 0xeb,0x64,0x39,0xa8,0x25,0x3d,0xee,0xea,0x58,0x1d,0xf,0xa4,0x12,0xe4,0x89,0x55, - 0x72,0xe3,0xac,0xa7,0x5c,0x6f,0x4b,0xcd,0xf6,0xa2,0xe,0x73,0x6f,0x91,0xec,0x93, - 0xe9,0x83,0x5c,0x93,0x82,0xd3,0x3a,0x6e,0xd,0xf6,0x3d,0xe9,0xf9,0x5d,0xab,0x0, - 0xf9,0xec,0x8b,0x7c,0xf6,0x87,0x8f,0xa3,0xac,0x6f,0x3a,0x8e,0x7b,0x9f,0x71,0x80, - 0xe,0xa4,0xb3,0xdd,0x9d,0x72,0xce,0x3d,0xa9,0x18,0x6b,0xcd,0xd0,0x77,0x56,0x59, - 0x5b,0xe5,0x18,0x96,0x46,0x47,0x60,0x7a,0xcd,0x19,0x8,0x2a,0x3f,0x3,0xec,0x3a, - 0x46,0xd8,0xf0,0xee,0x55,0x20,0xae,0x6e,0xb7,0xa4,0x13,0xde,0x7d,0x26,0x39,0xe8, - 0xf6,0xe,0x9f,0x2f,0xa7,0x61,0x46,0xf7,0x1a,0x2b,0xd3,0xed,0x27,0x11,0x1a,0x9c, - 0x28,0xd4,0x38,0x15,0x1d,0xb4,0xfa,0xbb,0x6e,0xe9,0x78,0xc6,0xee,0x35,0xfa,0xdc, - 0x74,0x2a,0x7c,0xf4,0xfb,0x16,0xcd,0xdf,0x9e,0xf2,0xcf,0x43,0x6b,0x70,0x4e,0x2b, - 0xac,0x59,0x6b,0x67,0x66,0x39,0xb5,0x86,0x5d,0xa9,0x75,0xb7,0x5c,0xbb,0x93,0xe7, - 0xd6,0xe2,0xd1,0x9e,0x13,0x59,0xb2,0xf5,0x3b,0x4,0x67,0xf4,0x38,0x21,0xc7,0x43, - 0x6b,0x70,0x4b,0xf7,0x71,0x44,0xe0,0x13,0x1d,0x4b,0xfa,0x7b,0x52,0xb9,0xf1,0x99, - 0x35,0x24,0x4a,0x27,0x18,0x4f,0x9e,0x8c,0x9b,0xff,0xae,0x2d,0xe8,0xf7,0xbe,0xc9, - 0xff,0xf,0xc1,0xf1,0xdb,0xff,0x1d,0x0,0x7e,0xed,0x8b,0x71,0x18,0x17,0x76,0x30, - 0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, - // D:/????/??????/230526-????-2?????-1600x900-2/Cigarette/Resources/cam3_yes.png + 0x3a,0x98,0x0,0x0,0x17,0x6f,0x92,0x5f,0xc5,0x46,0x0,0x0,0x1a,0x60,0x49,0x44, + 0x41,0x54,0x78,0xda,0xec,0x9c,0x79,0x90,0x64,0x57,0x95,0xde,0x7f,0xf7,0xde,0xb7, + 0xe5,0x5e,0x95,0xb5,0x74,0x55,0xf5,0xaa,0x56,0xa9,0xa5,0x6e,0x9,0xba,0x5b,0x2b, + 0x12,0x9b,0x1a,0x84,0xc6,0x83,0x10,0x12,0x83,0xc7,0x23,0x3c,0x38,0xc4,0x4,0x84, + 0x7,0x87,0xec,0x0,0x8d,0x1d,0x2c,0x13,0x63,0x68,0x19,0x18,0x82,0x1,0x23,0x60, + 0xec,0x8,0x1,0xc3,0x48,0x98,0x61,0x31,0x1a,0x36,0x9,0x86,0xcd,0x62,0x5a,0xd2, + 0x20,0x16,0x1b,0x23,0x9,0x24,0xac,0x6e,0xf5,0x5e,0x7b,0x65,0x55,0x65,0x55,0xe5, + 0xf6,0xb6,0x7b,0xfd,0xc7,0x7b,0x95,0x95,0x5d,0x5d,0xbd,0x77,0x83,0x1c,0xe1,0x5b, + 0x91,0x91,0x2f,0x5f,0xe6,0x7b,0xf9,0xee,0xf7,0xce,0xf9,0xce,0x77,0xce,0xb9,0x59, + 0xc2,0x18,0xc3,0x85,0x1e,0xcf,0x3d,0xfb,0xec,0xa6,0x67,0x9f,0x79,0xe6,0xe5,0xb1, + 0xc1,0x1e,0xde,0xb2,0xe5,0xa7,0x9b,0x37,0x5f,0xf4,0x5c,0xb1,0x58,0x8c,0xf9,0x1d, + 0x8e,0xc1,0xc1,0x81,0xde,0x42,0xa1,0xb0,0xab,0xa7,0xa7,0x7c,0xad,0x65,0xd9,0xd9, + 0xf9,0xf9,0xf9,0xdf,0xcc,0xcc,0xcc,0x3c,0x22,0xa5,0x7c,0xee,0xe8,0xd1,0x11,0xbd, + 0xf4,0x39,0x71,0xa1,0x1,0xfa,0x9f,0x3f,0xf9,0xc9,0x2d,0xa3,0x23,0xa3,0x7f,0x6e, + 0x60,0x38,0xd4,0x50,0x6b,0x34,0xe6,0x4b,0x5d,0xa5,0xff,0xfe,0xcf,0x6e,0xbe,0xe9, + 0x7d,0xb9,0x5c,0xce,0xfc,0xb6,0x81,0xb9,0xf8,0xe2,0xcd,0x96,0x10,0xe2,0xdd,0xaf, + 0x7d,0xed,0x6b,0x3f,0x78,0xdb,0x6d,0xb7,0xd3,0xdf,0xdf,0x8f,0x94,0x92,0x46,0xa3, + 0xc1,0x13,0x4f,0x3c,0xc1,0x83,0xf,0x3e,0xf8,0xec,0xc1,0x83,0x7,0x7e,0x7f,0x74, + 0x74,0xec,0xc8,0x5,0x7,0xe8,0x89,0xc7,0x1f,0x7b,0xd3,0xe8,0xd1,0x91,0xf,0x20, + 0xd4,0xc5,0x96,0xe3,0x10,0x1b,0x68,0xb6,0x5a,0x18,0xa3,0xab,0x5b,0x2e,0x19,0x7e, + 0xc7,0xda,0xa1,0xa1,0x87,0xd7,0x6f,0x58,0x3f,0xf7,0x5b,0x4,0x47,0xf5,0x94,0xcb, + 0x8f,0xfc,0xc5,0x7f,0xfa,0xc0,0x2b,0xaf,0xbe,0xf6,0x1a,0xc2,0x5a,0x9d,0x28,0x8a, + 0x30,0xc6,0x20,0xa5,0xc4,0xcd,0x66,0x59,0xf4,0x7d,0x3e,0xfe,0x97,0x1f,0xe2,0x3b, + 0xf,0x7f,0x7b,0x78,0x74,0x6c,0x6c,0xff,0x5,0x3,0xe8,0xd1,0x7f,0xdc,0xf3,0xf6, + 0x91,0xa3,0x23,0x1f,0x72,0x6c,0xa7,0xac,0x6c,0x7,0x3,0x18,0x61,0xc0,0x80,0x36, + 0x6,0x1,0xb3,0xf9,0x42,0x6e,0x4f,0xa9,0x54,0xfa,0xa9,0x63,0x3b,0x3f,0xcd,0x66, + 0x33,0xcf,0xac,0x5f,0xbf,0x6e,0xae,0x50,0x28,0x5c,0xb0,0x3b,0xb6,0x6d,0xdb,0xd6, + 0xdd,0x1f,0xfb,0xe4,0x27,0xdf,0x7f,0xa5,0xb4,0x59,0x5c,0x5c,0xc4,0x5c,0xb9,0x3, + 0x5a,0xad,0xe4,0x4d,0xdb,0x86,0xd9,0x59,0x9c,0x5f,0x3e,0x4d,0x7c,0xfd,0xb5,0xbc, + 0x6b,0xf7,0xfb,0x27,0x1f,0xdb,0xf3,0xe8,0x46,0xb5,0x7b,0xf7,0xee,0xf3,0x7e,0x21, + 0x8f,0x3c,0xf2,0xa3,0x77,0x1e,0x3a,0x74,0xe4,0xaf,0x5d,0x37,0x93,0xb1,0x1c,0x7, + 0x23,0x40,0xb3,0xe4,0xd6,0x2,0x25,0x24,0xb1,0x8e,0x33,0xb5,0x7a,0x7d,0xeb,0xdc, + 0x6c,0xf5,0x35,0xf5,0x7a,0xe3,0xd,0x61,0x18,0x5e,0xb2,0xb0,0xb8,0xd8,0x57,0xab, + 0xd5,0xe4,0xf8,0xc4,0xa4,0xef,0xd8,0x76,0x2b,0x93,0xc9,0x9c,0x37,0xb0,0xd6,0xac, + 0x59,0xd3,0x7d,0xc7,0x1d,0x77,0x7c,0xf7,0xd,0x77,0xfc,0x11,0x8b,0xdf,0x78,0x8, + 0xf1,0x99,0xfb,0xe1,0xf2,0xad,0xb0,0x76,0x30,0xf9,0x40,0x10,0x20,0xff,0xf3,0xa7, + 0xd0,0x8f,0x3e,0x8e,0x77,0xeb,0x6b,0x59,0x7f,0xe9,0x96,0xfc,0x8f,0xfe,0xc7,0xf, + 0xf,0x9d,0x77,0xb,0xfa,0xde,0xf7,0x7f,0xf0,0x1f,0x46,0x47,0x46,0x3f,0x9a,0xc9, + 0x64,0xf1,0x3c,0x8f,0x58,0x6b,0xa0,0xf3,0x3b,0x4,0xc2,0x18,0x8c,0x10,0x8,0x1, + 0x3a,0xd6,0x44,0x51,0x44,0xac,0x63,0x40,0xe0,0x38,0xe,0xdd,0x5d,0xa5,0x6f,0xf6, + 0xf5,0xf5,0x3d,0x14,0x84,0xc1,0xcf,0xc2,0x30,0x1a,0xdd,0xb0,0x7e,0x7d,0x6d,0xc3, + 0x86,0x75,0xe7,0x44,0xea,0xc3,0xc3,0xc3,0x7f,0x7c,0xdf,0x7d,0xf7,0xfd,0xdd,0x25, + 0x97,0x6e,0xc1,0x6f,0xf9,0xc8,0x7b,0xff,0x1a,0x9e,0xfe,0x35,0xfa,0x2f,0x77,0xc3, + 0xa6,0x4d,0xc8,0xf,0x7f,0x14,0x7e,0xfd,0x2c,0xe6,0x7d,0xef,0x85,0x4b,0x86,0xb1, + 0x81,0xbb,0xef,0xbe,0xfb,0x69,0xeb,0x7c,0x82,0xf3,0xd0,0xc3,0xdf,0xfe,0xc0,0xf4, + 0x74,0xe5,0x2f,0x32,0xd9,0x2c,0x9e,0xeb,0x11,0xc7,0xf1,0x12,0x26,0x60,0x4,0x2, + 0x0,0x83,0x11,0xe9,0x1,0x6,0x84,0x10,0xd8,0x8e,0x8d,0x23,0x1c,0x8c,0x31,0x44, + 0x51,0xcc,0xe4,0xd4,0xf4,0xed,0xe3,0x13,0x13,0xb7,0x67,0xb3,0x39,0xca,0xe5,0xf2, + 0xc3,0x95,0x4a,0xe5,0x6b,0x51,0x1c,0xfe,0x7c,0x72,0x62,0x6a,0xa4,0x58,0x2c,0x34, + 0x2e,0xbf,0x7c,0x5b,0x7c,0xe6,0x51,0x6b,0xf0,0xd5,0x83,0x83,0x83,0x84,0x7e,0x0, + 0x4a,0xa1,0xdf,0xf1,0x6f,0x91,0x1f,0xff,0x24,0xf2,0x23,0x1f,0x87,0xb5,0x6b,0xe1, + 0xf9,0xfd,0x98,0xff,0xf8,0x1e,0xcc,0x65,0x97,0x42,0xb3,0x89,0x93,0xcf,0xb3,0x75, + 0xeb,0x65,0xa5,0xf3,0x6,0xd0,0xdf,0x7f,0xed,0xeb,0xf,0xcc,0x2f,0x2c,0xdc,0x99, + 0xcd,0x64,0x71,0x1c,0x67,0x19,0x1c,0x96,0xc,0xc8,0x24,0x4f,0x6d,0x70,0x8e,0x7d, + 0x6d,0xd2,0x17,0x96,0x52,0x58,0xb6,0x85,0x30,0x10,0xc7,0x9a,0x89,0x89,0x89,0x5b, + 0xc7,0xc6,0xc7,0x6e,0xb5,0x94,0x45,0xb9,0xbb,0xfb,0x67,0xae,0xeb,0x7c,0x76,0x74, + 0x74,0xec,0x87,0x71,0x1c,0x4f,0xcc,0xcc,0xcc,0x44,0x3b,0x77,0xee,0xd0,0xa7,0x73, + 0x7d,0xb9,0x5c,0xb6,0xdf,0x71,0x92,0x9b,0x40,0x18,0x42,0x36,0x8b,0x7e,0xfb,0xdb, + 0x90,0x7f,0xf6,0x6e,0x78,0xf4,0x9f,0x30,0xff,0xfe,0xdf,0x61,0x76,0x6e,0x87,0xd9, + 0x39,0x10,0x2,0x63,0xa0,0x58,0x2c,0x45,0xe7,0x5,0xa0,0x2f,0x7f,0xe5,0xab,0x5f, + 0x6a,0x34,0x1a,0x6f,0xca,0xe7,0xf2,0x48,0x29,0x13,0x70,0x44,0x87,0x4b,0xb5,0x81, + 0x10,0x6d,0xb0,0xe8,0xd8,0xb7,0x6c,0x50,0x26,0xb5,0xb6,0xe4,0xb5,0x52,0x12,0x65, + 0x39,0x80,0xc0,0x18,0xc3,0xdc,0xdc,0xdc,0x75,0x33,0x33,0x33,0xd7,0xed,0xdd,0xf7, + 0x3c,0xa5,0x52,0xe9,0x89,0xc1,0x81,0x35,0xf7,0x8d,0x8c,0x8c,0x3e,0xda,0x53,0x2e, + 0x8f,0x1d,0x1d,0x1d,0x8d,0xb7,0x5c,0x32,0x7c,0x42,0xbe,0x68,0xb5,0x5a,0x73,0x51, + 0x14,0x61,0xdb,0x36,0x46,0x29,0x88,0x22,0xc4,0x83,0x5f,0x7,0xa9,0x60,0xfb,0x15, + 0x88,0xef,0x7c,0xf,0xf3,0xe2,0x2b,0x60,0x68,0x8,0x5a,0x2d,0x84,0x80,0x7a,0xbd, + 0x2e,0xe5,0xb9,0x82,0xf3,0x77,0x5f,0xfc,0xd2,0x43,0xb5,0x5a,0xed,0x4d,0xf9,0x5c, + 0x1e,0x21,0xc4,0xf2,0x24,0x39,0x76,0xf2,0x49,0x18,0x33,0x2b,0xc0,0xe1,0x58,0x70, + 0x56,0x2,0x2a,0x96,0xbf,0x47,0xa6,0xae,0xe8,0x7a,0x1e,0x96,0x65,0xb3,0xb8,0x58, + 0xbb,0xe1,0xb9,0xe7,0xf6,0x3d,0xf0,0xd3,0x9f,0xfd,0xfc,0xe0,0x8f,0xf6,0x3c,0xfa, + 0xf8,0xcc,0xcc,0xec,0x5d,0x63,0x63,0x63,0x9b,0xe,0x1f,0x3e,0xbc,0xea,0x9c,0x26, + 0x26,0x26,0xff,0x69,0x7a,0x7a,0xa,0xcb,0xb6,0xc0,0xb2,0x10,0x9f,0xfb,0x3c,0xe2, + 0x7,0x8f,0x60,0xde,0x79,0x17,0xfa,0x83,0xbb,0xc1,0xf3,0x90,0xf7,0x7c,0x18,0xc6, + 0x27,0xc0,0xb1,0x89,0xa2,0x88,0x7d,0xfb,0xf6,0x86,0xe7,0x44,0xd2,0x5f,0xfe,0xca, + 0x57,0xbf,0x53,0xab,0xd5,0x6e,0xce,0x66,0xb3,0x96,0x31,0x6,0x21,0x4,0x52,0x8, + 0x84,0x94,0x48,0xa1,0x10,0x62,0x79,0xea,0x42,0x8,0x10,0x2a,0x5,0xc0,0x24,0x7b, + 0xdb,0xd6,0xb4,0xa,0x38,0x2b,0x21,0xee,0x0,0xbd,0x4d,0x6b,0xe9,0x71,0x6,0x34, + 0xda,0xd4,0x94,0xa5,0x16,0x33,0x9e,0xb7,0xb7,0xab,0xab,0xeb,0x8b,0x7d,0x7d,0x7d, + 0x3f,0x9e,0x18,0x9f,0xb8,0xbe,0x3a,0x3f,0xbf,0x6d,0x68,0xed,0xe0,0xf,0xff,0xfc, + 0xbd,0xef,0x19,0x7d,0xd9,0xcb,0x5e,0xfa,0xeb,0xb7,0xde,0x75,0x17,0x8b,0xf7,0x7f, + 0x1,0xf1,0xf9,0x2f,0x62,0xde,0xf5,0x67,0x98,0x57,0xdc,0x0,0x51,0xc,0x73,0x55, + 0xe4,0xee,0xf,0x41,0xab,0x85,0xf3,0x89,0xbf,0xe2,0xd0,0xec,0xc,0x7f,0xfa,0xb6, + 0xb7,0xbd,0xeb,0xac,0x1,0xfa,0xaf,0xf7,0x7d,0xe6,0x21,0x29,0xc4,0x2d,0x3d,0x3d, + 0x3d,0xd2,0x68,0x8d,0x31,0x6,0x63,0xc,0x5a,0xeb,0xd4,0x52,0x4,0x52,0x49,0xa4, + 0x94,0xe9,0xb6,0x42,0xa4,0x0,0x61,0x34,0xc6,0xe8,0x4e,0x82,0xea,0xf4,0xb8,0xe3, + 0x80,0x58,0xd5,0x22,0x3b,0x36,0x4c,0x6a,0x99,0xc9,0x4d,0x92,0x58,0x4a,0x55,0xa4, + 0x94,0x13,0x52,0x88,0x1,0x65,0xa9,0x62,0xbd,0x51,0x9f,0x14,0x42,0x7e,0xf9,0x63, + 0x1f,0xfd,0xc8,0xe5,0x1f,0xfd,0xc4,0xbd,0xb7,0x6c,0x1a,0x19,0xa7,0x5e,0x9d,0x87, + 0x9b,0x76,0x2d,0xeb,0x20,0xd7,0x85,0x23,0x47,0xb1,0x1e,0xfb,0x31,0xf6,0x1b,0x6f, + 0xe3,0xfd,0x1f,0xfb,0x68,0xeb,0xe1,0x6f,0x7d,0xab,0xef,0xac,0x0,0xfa,0x2f,0x9f, + 0xf9,0x9b,0xcf,0x4e,0x56,0x2a,0x6f,0xdb,0x30,0x38,0x48,0x4f,0xa9,0x44,0x18,0x45, + 0xed,0xf7,0x2c,0x65,0x21,0xa5,0x20,0x8e,0x35,0x61,0x14,0x62,0xb4,0x1,0x21,0x90, + 0x52,0x22,0xa5,0x85,0x54,0x32,0xb5,0xa1,0x4,0x54,0xd1,0x41,0xe2,0xa7,0x2,0x62, + 0xa5,0x75,0x1d,0xbf,0x4f,0x60,0xb4,0x49,0x95,0x31,0x64,0xb2,0x19,0x82,0x30,0x64, + 0x76,0x66,0x6,0xdf,0xf,0xa2,0x30,0xc,0x3f,0xf3,0xd0,0xb7,0xbe,0x7e,0xcb,0xfb, + 0x3e,0xf8,0xa1,0x8d,0x9b,0x87,0x87,0x69,0x55,0xab,0xed,0x60,0x22,0x84,0xc0,0xcd, + 0xe5,0xd0,0x4a,0xf1,0x99,0x4f,0x7d,0x8a,0x7,0xfe,0xf6,0x6f,0x6f,0x18,0x1d,0x1b, + 0xfb,0xc9,0x19,0x3,0xf4,0xd0,0xb7,0xff,0xe1,0x75,0x8f,0xff,0xe2,0x97,0xf7,0x5b, + 0xae,0xd7,0xbb,0x79,0x68,0x80,0x2e,0xd7,0x41,0xb,0xd1,0xe,0xd9,0x51,0x14,0x11, + 0x86,0x21,0x52,0x49,0x6c,0xcb,0x49,0xdc,0x4c,0x90,0x58,0x18,0x2,0x44,0xea,0x7e, + 0x32,0x81,0x49,0xa6,0xef,0x1d,0x6b,0x49,0xe2,0x24,0x60,0x89,0x13,0x5a,0x9c,0xc1, + 0x20,0x11,0x58,0x96,0x85,0xe3,0xd8,0xf8,0x81,0xcf,0xc2,0xc2,0x22,0x41,0x10,0xd0, + 0x6a,0xb5,0x50,0x4a,0x4d,0x36,0xea,0xb5,0x7f,0xfd,0xb9,0xcf,0x7d,0xf6,0xcd,0x6f, + 0x7e,0xf3,0xbf,0xfa,0xc3,0x9b,0x6f,0xbe,0x99,0x42,0xa1,0x80,0x94,0x12,0xdf,0xf7, + 0x79,0xe6,0x99,0x67,0xf8,0xc2,0x17,0xbe,0x50,0xfb,0xc5,0x2f,0xfe,0xd7,0xab,0x47, + 0x46,0x46,0x7f,0x7e,0x56,0xb9,0xd8,0x87,0x3e,0xf2,0xb1,0x1f,0x8d,0xce,0x54,0x77, + 0xf5,0xc,0xe,0xb2,0xb6,0xa7,0x8b,0x82,0x14,0xd8,0xae,0x9b,0x4e,0x52,0x70,0xf8, + 0xf0,0x21,0x26,0x27,0xa7,0x28,0x16,0x8b,0xac,0x5b,0xb7,0x96,0x52,0xa9,0xb,0x0, + 0xad,0x4d,0xca,0x36,0x29,0x62,0x2,0x84,0xd1,0x60,0x34,0x52,0x80,0x90,0x12,0x84, + 0x48,0xe1,0x30,0xd0,0xf1,0x7c,0x6a,0x80,0x44,0xea,0x5e,0x60,0x5b,0x16,0x96,0x6d, + 0x11,0xf8,0x1,0xf3,0xb,0xb,0x84,0x61,0x88,0x40,0x10,0x84,0x21,0x7e,0xe0,0x7, + 0xdd,0x5d,0x5d,0x8f,0xf6,0xf6,0x96,0x6f,0x7b,0xdb,0x5b,0xff,0x64,0xfd,0x9a,0x35, + 0x3,0x6f,0x1c,0x18,0x18,0xb8,0xd6,0xb2,0x2c,0x6f,0x6e,0x6e,0x6e,0xff,0xc8,0xc8, + 0xd1,0x6f,0xf9,0x7e,0xf0,0xf8,0xd8,0xd8,0x78,0xab,0xed,0x11,0x67,0xea,0x5e,0x7e, + 0x10,0x5c,0x9f,0x73,0x1d,0x3c,0x61,0x88,0xfd,0x16,0x81,0x6d,0x63,0x39,0x6e,0x42, + 0xc2,0xa9,0xa9,0xa,0x29,0xda,0x9c,0xb0,0xa4,0x77,0x4,0x89,0x9b,0x21,0x44,0x1a, + 0xd0,0x34,0xda,0x18,0x30,0x9a,0xd8,0x80,0x48,0xf9,0x43,0x8a,0x14,0x3c,0x21,0x10, + 0x42,0x2e,0x8b,0x24,0x71,0xec,0x75,0x1c,0x4f,0xe6,0xe0,0x58,0x36,0xca,0x52,0xb4, + 0x5a,0x3e,0xf3,0xb,0xf3,0xc4,0x51,0xa2,0xce,0xc3,0x38,0x5e,0x72,0x25,0x67,0x66, + 0x76,0xf6,0x35,0xdb,0xb7,0xbf,0xe8,0xd2,0xa7,0x9e,0xfe,0xf5,0x53,0xbd,0x3d,0x3d, + 0x1f,0x3e,0xd5,0x7c,0xcf,0x8,0xa0,0xff,0xf6,0xc5,0xaf,0x7c,0xb1,0x54,0x2a,0xe1, + 0xfa,0x3e,0x32,0x68,0x11,0x4a,0x83,0x56,0x5,0xa2,0x28,0xc4,0xb6,0x6c,0x84,0x14, + 0x6c,0xda,0xb4,0x89,0xd,0x1b,0x36,0x60,0x8c,0xc1,0xb2,0xac,0x84,0x13,0x0,0x29, + 0x5,0xa0,0x13,0x45,0x2d,0x40,0xa,0x50,0x52,0x62,0xa4,0x40,0x6b,0x8d,0xd6,0x1a, + 0xa3,0x63,0xcc,0x12,0x38,0x92,0x94,0xe0,0x49,0xa3,0xa1,0x68,0x47,0xc0,0xe3,0xa3, + 0x9a,0xc1,0x76,0x2c,0x2c,0xcb,0xa2,0xd9,0x6a,0x51,0xad,0xce,0x13,0xc7,0x11,0x4a, + 0x29,0x82,0x30,0x71,0xf9,0x44,0x2a,0x48,0xb4,0xd1,0x7a,0xef,0xbe,0xe7,0xdf,0xde, + 0xdf,0xd7,0xff,0x4e,0xa0,0x75,0xaa,0x39,0x9f,0x91,0xe,0x9a,0x9d,0x9d,0xf9,0x97, + 0xd9,0x4c,0xc6,0xcb,0x7a,0x1e,0xd9,0x4c,0x6,0xd7,0x71,0xd1,0x5a,0x13,0x86,0x21, + 0x1a,0x9d,0x10,0xb2,0x1,0xcb,0xb2,0x12,0x41,0xa6,0x4d,0xc7,0x5c,0x52,0x9e,0x31, + 0x31,0xe8,0x24,0x8a,0x2d,0x59,0x96,0x52,0xa,0xc7,0x71,0x70,0x1c,0x7,0x65,0xd9, + 0xa9,0x4b,0xc6,0x44,0x51,0x88,0x8e,0xa3,0x4,0x3c,0x63,0x12,0x70,0x44,0xa7,0xf9, + 0x24,0xe0,0x58,0x96,0x85,0x6d,0x59,0x34,0x1a,0x8d,0x63,0xc0,0xf1,0x83,0x80,0x28, + 0x5,0x67,0xe9,0x10,0xa5,0x94,0x9c,0x98,0x98,0xbc,0xb3,0x56,0xaf,0x75,0x9f,0xce, + 0x9c,0x4f,0x1b,0xa0,0xef,0xfc,0xc3,0x77,0xdf,0x9a,0x98,0xb1,0x85,0xa5,0x54,0x1a, + 0x95,0x24,0x42,0x24,0x16,0x10,0x87,0x71,0x5b,0xd1,0xc4,0x71,0x4c,0x1c,0xa7,0x61, + 0x5c,0x24,0xe1,0x7e,0x61,0xb1,0xc6,0xc4,0xc4,0x14,0xb,0xb,0x8b,0xc7,0xf8,0x47, + 0x5b,0x3f,0xa6,0x9f,0x15,0x42,0x60,0x59,0x36,0xb6,0x65,0x63,0x29,0xb,0x63,0x20, + 0x8e,0x22,0xa2,0x30,0x48,0x0,0xd3,0xcb,0xbc,0x24,0x0,0x4b,0x29,0x5c,0xc7,0xa6, + 0x51,0x6f,0x30,0xbf,0xb0,0x40,0x1c,0x47,0x48,0x29,0x9,0x82,0x80,0x28,0x8d,0xae, + 0x4b,0x9a,0x49,0xa4,0xd1,0xb4,0xd9,0x6c,0x79,0x95,0xca,0xcc,0xe5,0x23,0xa3,0x63, + 0xe2,0xbc,0xb9,0xd8,0x91,0xc3,0x47,0xee,0xb2,0x94,0x22,0x8a,0x42,0x84,0xd6,0x49, + 0x14,0x12,0xcb,0x71,0x26,0x8e,0x63,0x94,0x25,0x11,0xc2,0x5a,0x9e,0x80,0x14,0x58, + 0xb6,0x8d,0x44,0x30,0x33,0x3b,0xc7,0xc8,0xc4,0x4,0xfd,0x3d,0x3d,0x94,0x4a,0xc5, + 0x94,0x90,0xd,0x4a,0x82,0x54,0x8a,0x20,0xd4,0x4c,0x57,0xa6,0x39,0x74,0xf0,0x20, + 0xae,0xe3,0x30,0xb4,0x76,0x88,0xbe,0xde,0xbe,0xa4,0x22,0x10,0xc7,0x68,0x93,0xb8, + 0x61,0x14,0x47,0x10,0x6a,0xa4,0x94,0x38,0x8e,0x8b,0xed,0xd8,0xd4,0xeb,0xd,0x16, + 0x6a,0x35,0xb4,0xd6,0x28,0x99,0x5a,0x4e,0x1c,0xd3,0x91,0x1e,0x1f,0xc7,0x5f,0x73, + 0x73,0x73,0x2f,0x95,0x52,0xfc,0x78,0xdd,0xda,0xa1,0xe6,0x79,0x1,0xa8,0x32,0x33, + 0xf3,0xa2,0x42,0xa1,0x40,0x1c,0xc7,0x18,0x63,0x50,0x42,0xb5,0xc5,0xe1,0x12,0x31, + 0x9b,0x54,0xcf,0x24,0x8a,0x5a,0xd2,0xf2,0x5b,0xec,0xdd,0xbb,0x8f,0x38,0x8e,0xf1, + 0x3c,0x8f,0xcb,0xb7,0x6c,0xa1,0x58,0x2c,0x80,0x90,0x9,0x47,0x49,0x70,0x15,0x8, + 0x9,0x91,0x30,0x44,0x71,0x44,0xad,0x5e,0x23,0x8,0x6c,0xc2,0x30,0x5c,0x9e,0x96, + 0x48,0xf8,0x43,0x4a,0xd5,0xc1,0xcb,0x6,0x6d,0x62,0x16,0x17,0x16,0xd3,0x2a,0x65, + 0x72,0x5b,0x82,0x36,0x38,0xac,0xa,0xe,0xe9,0x8d,0x9b,0x9e,0x9e,0xde,0x35,0x38, + 0x38,0x78,0x1f,0x70,0xee,0x0,0x7d,0xe5,0xab,0xf,0xbe,0xd7,0xf7,0x7d,0x2b,0x9b, + 0xc9,0x62,0x7b,0x16,0x9e,0xeb,0x62,0x3b,0xe,0x96,0x65,0xa1,0x2c,0x2b,0x8d,0x38, + 0x62,0x39,0x92,0xa5,0x11,0x4b,0x6b,0x43,0x75,0xae,0x4a,0xbd,0x51,0x63,0x60,0x60, + 0x90,0xc1,0x8c,0x47,0x36,0xe3,0x11,0x6,0x21,0x2,0xd0,0x46,0x10,0x68,0x10,0x5a, + 0x63,0x8c,0xa0,0xaf,0xa7,0x97,0xfc,0xd5,0x57,0x23,0x10,0x78,0x9e,0x87,0x90,0x2, + 0x6d,0x74,0xe2,0x76,0xa9,0x0,0xd,0x83,0x0,0xa9,0x2c,0x1c,0xdb,0xa2,0xd1,0x6a, + 0x51,0x9d,0x9f,0x47,0x29,0x5,0x42,0x10,0x86,0x11,0x51,0x14,0xb7,0x2d,0xfb,0x38, + 0x70,0xcc,0xb2,0x98,0x5d,0x58,0x5c,0xbc,0x26,0x8a,0xe2,0x32,0x30,0x79,0xce,0x0, + 0x8d,0x8f,0x8d,0xbf,0xd9,0xb2,0x6c,0xa4,0x6d,0x23,0x5c,0x17,0x3b,0x97,0x27,0x9f, + 0xc9,0xa0,0x84,0x40,0xeb,0xf8,0x18,0xb5,0x92,0xc8,0xc1,0x64,0x3b,0xe3,0x79,0x6c, + 0xbd,0xec,0x32,0xfc,0xd0,0x27,0x93,0xc9,0x92,0xf1,0x3c,0xe2,0x28,0x6e,0x5f,0xb8, + 0x46,0xa0,0xe3,0x36,0xfd,0xe0,0xba,0x2e,0xd9,0x6c,0xe,0x81,0x46,0xc7,0x9a,0xd8, + 0x24,0xc5,0x36,0x89,0xa0,0x56,0xaf,0x33,0xb7,0xb8,0x80,0x9b,0xc9,0xa2,0x5,0x34, + 0xab,0xf3,0x48,0xa3,0xc9,0xe4,0x72,0xe8,0x38,0x26,0x8a,0xe2,0x24,0xcd,0x39,0x2e, + 0x81,0x39,0x7e,0x28,0x29,0x9,0x82,0x30,0x5b,0xab,0xd5,0x86,0x8e,0x1e,0x1d,0xd9, + 0xbb,0x7e,0xfd,0x89,0x8b,0x71,0xa7,0x4,0xe8,0xbb,0xdf,0xfb,0xfe,0x1f,0xb4,0x5a, + 0xad,0x6d,0x83,0x83,0x83,0x44,0x42,0x30,0x5b,0x6f,0xb2,0x18,0x6a,0x7a,0x84,0xa4, + 0x9c,0xcb,0xe2,0xd9,0x56,0x52,0xe2,0xd0,0xa6,0xed,0x5e,0xc6,0x18,0x4c,0x6c,0x50, + 0x4a,0xd1,0x3f,0xd0,0xbf,0xe2,0x6a,0xd,0x60,0xa7,0xe4,0x6c,0x3a,0x24,0x8e,0x41, + 0x63,0x88,0xe3,0x10,0x8c,0x46,0x6b,0x83,0x92,0x12,0x3f,0x8,0xa8,0xcc,0xcc,0x32, + 0x36,0x3d,0x43,0x53,0x1b,0xa,0xdd,0x65,0x6c,0x25,0x9,0xeb,0x35,0xb2,0x52,0x90, + 0xcb,0xe5,0x12,0x9d,0xa3,0x13,0xce,0x11,0x62,0x15,0x88,0x8e,0xd9,0x34,0x20,0x5, + 0xb1,0xd6,0x34,0x9b,0xcd,0xa1,0x5a,0xad,0x96,0x1,0x6a,0x67,0x5,0xd0,0x6f,0x7e, + 0xf3,0x7f,0x7a,0x17,0x16,0x16,0xaf,0x2d,0xe4,0xb,0xac,0xe9,0xef,0xa7,0xb2,0xb0, + 0x40,0x73,0xa6,0x4a,0xa0,0x1c,0x2c,0x3f,0x44,0x47,0xb,0xa8,0x28,0x24,0x68,0x36, + 0x89,0x8d,0x41,0x4a,0x81,0x6d,0x59,0xd8,0xb6,0x83,0xe7,0x7a,0xb8,0xae,0x3,0x12, + 0x24,0x32,0x99,0x80,0x0,0xcb,0xb2,0xb1,0x54,0x92,0x6a,0x24,0x79,0x93,0xc6,0x18, + 0x52,0x1d,0x14,0x25,0x2,0x52,0x6b,0x40,0xd0,0xf2,0x3,0x2a,0xb3,0xb3,0x1c,0x19, + 0x1d,0x63,0xa2,0x52,0x21,0x5b,0xee,0x85,0x66,0x93,0x9c,0xeb,0x91,0xc9,0xe4,0xb0, + 0xd1,0xf8,0xbe,0x4f,0xac,0xcd,0x32,0x30,0xa7,0x99,0x18,0x68,0xad,0x9,0xa3,0x70, + 0x20,0x8,0x82,0xae,0xb3,0x6,0x68,0x62,0x72,0x72,0xa7,0x52,0xf2,0x45,0xdd,0xdd, + 0x25,0xa4,0x14,0x64,0x5d,0x87,0xfe,0x9e,0x6e,0x22,0xc7,0x43,0xc7,0x31,0x47,0xc6, + 0xc6,0x99,0x1a,0x19,0xc1,0xaf,0xd7,0x71,0x3d,0xf,0xc7,0x4e,0xc4,0x9a,0xe3,0x3a, + 0xe4,0x73,0x79,0x8a,0xc5,0x22,0x85,0x42,0x9e,0x5c,0x2e,0x87,0xeb,0xba,0x69,0xf8, + 0xd,0x89,0x64,0x84,0x9d,0x72,0x17,0x2,0x62,0x1d,0xa3,0x63,0x8d,0x8e,0x74,0xbb, + 0x86,0xad,0xb5,0x66,0x6e,0x7e,0x81,0xe9,0xd9,0x2a,0x71,0xac,0x29,0x78,0x1e,0xb6, + 0x0,0x4b,0x6b,0x7c,0xbf,0x89,0x94,0x90,0xcb,0x64,0x88,0x97,0x34,0x82,0x11,0xab, + 0xbb,0xd7,0x9,0x5e,0x48,0x4,0x7e,0xcb,0xef,0x5f,0xac,0xd5,0x7a,0x80,0x91,0xb3, + 0x2,0xa8,0xd9,0x68,0xde,0xa4,0xa4,0xda,0x6e,0xdb,0xe,0x61,0x14,0xe1,0xda,0x36, + 0xdd,0x19,0x8f,0x3,0x87,0x8f,0xe0,0x47,0x11,0xad,0x66,0x93,0x38,0x8a,0xe8,0xea, + 0xee,0xa6,0x58,0x28,0x60,0x59,0xa,0xad,0x35,0x41,0x10,0x30,0x37,0x37,0x47,0xa5, + 0x52,0xc1,0xb2,0x2c,0x8a,0xc5,0x22,0x3,0x83,0x3,0x94,0xbb,0xcb,0xb8,0x6e,0x22, + 0x2e,0x7d,0x3f,0x40,0xa5,0xe5,0x90,0x58,0xc7,0x9,0x37,0x99,0xa5,0x3a,0x91,0xa1, + 0xde,0x68,0x52,0x6f,0x36,0x10,0x18,0x72,0xb9,0x2c,0xc5,0x7c,0x1e,0x21,0x5,0xad, + 0xc0,0x27,0x88,0x42,0x54,0x2e,0x83,0xeb,0xd8,0x29,0xa0,0x2b,0x87,0x59,0xd5,0x9a, + 0x3a,0xb9,0x52,0x29,0x45,0xb3,0xd9,0xec,0x9a,0x9b,0x9b,0xeb,0x3a,0x6b,0x92,0xe, + 0xa3,0xf0,0x6,0x63,0x58,0xbb,0x74,0xda,0x30,0x8a,0x39,0x74,0xe0,0x0,0x47,0xe, + 0x1d,0xa6,0x54,0x2e,0xb3,0x61,0xe3,0x46,0xa,0x97,0x6e,0xc1,0x92,0x32,0xc9,0xa4, + 0xc5,0x72,0x19,0x30,0xd6,0x31,0xad,0x66,0x8b,0x5a,0xad,0xc6,0x74,0x65,0x9a,0x5f, + 0xfd,0xea,0x57,0xf4,0x74,0x97,0xb9,0xe8,0xa2,0x8b,0x28,0xf7,0x94,0x31,0x18,0xe2, + 0x58,0xb7,0x55,0x72,0xfb,0xb9,0x43,0xef,0x48,0x1,0x39,0xcf,0x43,0x5a,0x16,0x8e, + 0xeb,0x12,0xeb,0x18,0x55,0xaf,0xd3,0x63,0x17,0x28,0xe4,0xb2,0x9,0xef,0xad,0xe4, + 0x97,0xd5,0x46,0x87,0x5e,0x6b,0x67,0x2a,0x52,0x12,0x44,0x61,0xa9,0xde,0x68,0x9c, + 0x3d,0x40,0x71,0xac,0xaf,0xd0,0x46,0xa3,0x94,0x22,0x8e,0x35,0x95,0xca,0x34,0x7, + 0xe,0x1d,0x62,0xc3,0x86,0xd,0x6c,0xda,0xb4,0x91,0x5c,0x2e,0x87,0x4c,0xab,0x88, + 0x4b,0x77,0x28,0x8a,0xe2,0xb4,0x18,0x66,0x93,0xf1,0x3c,0x4a,0xa5,0x22,0xfd,0xfd, + 0x7d,0x54,0xab,0x55,0xc6,0xc7,0xc7,0xf9,0xe5,0x53,0x4f,0xb2,0x7e,0x68,0x2d,0x17, + 0x6d,0xde,0x8c,0xed,0xd8,0x69,0xff,0x3b,0x99,0x43,0x14,0x47,0x6d,0x3e,0x42,0x6b, + 0x5c,0xc7,0xc1,0xc9,0x25,0x29,0x48,0x2b,0x8,0x68,0x36,0x43,0x7a,0xba,0x4a,0xb8, + 0xb6,0x4d,0x18,0x45,0x44,0x71,0x8c,0x14,0x74,0x64,0xff,0x62,0x15,0xeb,0x31,0x2b, + 0xb,0x4b,0x89,0x8b,0x49,0x81,0x8e,0xe2,0xb2,0xdf,0xf2,0x7b,0xce,0x1a,0x20,0xa3, + 0x4d,0x11,0x93,0x8,0xab,0x20,0x8,0x58,0x5c,0xac,0xb1,0xfd,0xc5,0x2f,0x62,0xc3, + 0x86,0xd,0x78,0x9e,0x43,0xb3,0xe1,0x13,0x4,0x41,0x92,0xe3,0x48,0x89,0x52,0x8a, + 0x8c,0xe7,0xe2,0xb8,0xe,0x42,0x8,0x5a,0xad,0x16,0x61,0x18,0x63,0xdb,0xe,0xae, + 0xeb,0x92,0xcb,0xe5,0x98,0x9a,0x9a,0x62,0x7c,0x62,0x82,0xd9,0x6a,0x95,0xad,0x5b, + 0xb7,0x92,0xcb,0xe5,0x9,0x75,0x8c,0x94,0x12,0xdb,0x71,0x8,0x5a,0x7e,0xa2,0x88, + 0x2d,0x8b,0x52,0x2e,0x87,0xeb,0x38,0xf8,0xbe,0x8f,0x92,0x82,0x62,0x2e,0x8b,0x65, + 0x29,0xa2,0x28,0x26,0x8e,0xd,0x96,0x4a,0xc9,0xff,0x84,0xd6,0x63,0x3a,0x1a,0x5, + 0x1d,0x7b,0x53,0x71,0x1b,0x45,0x11,0xc7,0xd7,0x9,0xce,0x28,0xcc,0x1b,0x89,0xa0, + 0x9d,0xd3,0xac,0x5d,0x3b,0x44,0xa9,0xab,0xc4,0xc2,0xfc,0x22,0xfb,0xf6,0x3d,0xcf, + 0xfc,0xfc,0x2,0x9e,0xe7,0x92,0xcf,0xe7,0xda,0xd7,0x92,0xf1,0x3c,0xc,0x2,0xc7, + 0x76,0x59,0xbf,0x7e,0x88,0x52,0xd1,0xa5,0xde,0x68,0xd2,0x6a,0xb5,0x28,0xe4,0xb, + 0x58,0xca,0xc2,0xb6,0x5d,0xa6,0xa6,0x26,0x79,0xfa,0xa9,0xa7,0xc8,0x77,0x97,0x51, + 0x99,0x1c,0x96,0x63,0xd3,0xd3,0x55,0xa0,0xe4,0xb8,0x48,0xad,0xb1,0x95,0x85,0xc4, + 0x10,0x86,0x1,0x5a,0xc7,0x38,0x4a,0x22,0xa4,0xc4,0x20,0x88,0x75,0x48,0xad,0xb6, + 0x48,0xa3,0x51,0xa7,0xdc,0xd3,0x93,0x96,0x45,0xcc,0xaa,0x14,0x24,0x8e,0x83,0xcc, + 0xb4,0xf3,0x32,0x6d,0xc,0xa6,0xa3,0x1a,0x7a,0x76,0x42,0x31,0xe5,0x7,0xcb,0xb2, + 0xf0,0x32,0x1e,0x93,0x13,0x93,0x1c,0x39,0x3a,0x42,0xa5,0x32,0x3,0x40,0x51,0x17, + 0xf0,0x3c,0x37,0x49,0x2a,0xd3,0x76,0xcf,0xa1,0x83,0x47,0x39,0x70,0x60,0x94,0xe1, + 0x8b,0x87,0xd9,0x72,0xe9,0x26,0xb6,0x5c,0xb2,0x9,0xcf,0x2b,0x52,0x9d,0x5f,0xc0, + 0x8e,0x62,0xca,0x3d,0xdd,0x20,0xc,0xe3,0x63,0xe3,0x4c,0x4c,0x4d,0x51,0x1a,0x5c, + 0xcb,0x9a,0x81,0x41,0x44,0xc6,0xa5,0xba,0x38,0x4f,0x56,0x9,0xa4,0xa0,0x9d,0xd6, + 0x24,0x2e,0x21,0x91,0x4a,0xa2,0x8d,0x60,0x71,0xb1,0xc6,0xe8,0xe8,0x8,0x5a,0x1b, + 0x7a,0xfb,0xfa,0x12,0xb,0x32,0xab,0xe8,0x9d,0x93,0x19,0x87,0x39,0x5,0x6f,0x9d, + 0x2e,0x40,0xc6,0x98,0xa4,0x8e,0x2c,0x24,0xf3,0xf3,0xb,0x1c,0x3c,0x78,0x88,0x5a, + 0xad,0xde,0xe1,0xd6,0x49,0xb9,0x41,0x8,0x49,0x1c,0x6b,0xa4,0x54,0x34,0x1a,0x75, + 0x8e,0x1c,0x39,0xc8,0xdc,0xdc,0x1c,0xcf,0xed,0xdd,0xcb,0x25,0x97,0x6c,0xe2,0x86, + 0x1b,0xae,0xa1,0x7f,0x4d,0x1f,0xb3,0x7a,0x16,0x3f,0xf4,0x29,0x16,0x8b,0x18,0x21, + 0x99,0xae,0xcc,0x60,0xa2,0x80,0x38,0xc,0x69,0x2,0xb,0x73,0xf3,0xac,0xef,0xed, + 0xc6,0x52,0x10,0x85,0x31,0x22,0xad,0x18,0x88,0xb4,0x99,0x17,0x47,0x31,0x61,0x14, + 0x61,0x3b,0x2e,0xd9,0x4c,0x26,0xdd,0xaf,0x4f,0xc6,0xcd,0xc7,0x80,0xb0,0x4,0xb8, + 0x48,0xe4,0x45,0x46,0x6b,0x9d,0x3d,0x6b,0x80,0x2c,0xcb,0x3a,0x1a,0x84,0xe1,0x7a, + 0x99,0x96,0x34,0x26,0x27,0x27,0x69,0x34,0x5a,0x28,0xa5,0x90,0x42,0xd2,0xc,0x5a, + 0xb4,0xfc,0x84,0x33,0x1c,0xd7,0xc1,0xb6,0xd3,0x95,0x1b,0x2,0x20,0xa0,0x5a,0x9d, + 0xc2,0x6f,0x2e,0x72,0xf8,0xd0,0x41,0x26,0x26,0x27,0xf8,0xbd,0x9b,0x5f,0xc5,0xc6, + 0x8d,0xeb,0x8,0xc3,0x90,0x30,0x8a,0x29,0x76,0x75,0x1,0x82,0xc9,0xe9,0x69,0x46, + 0x7e,0xf3,0xc,0xe5,0xbe,0x7e,0x72,0x9e,0x83,0x6b,0x3b,0x58,0x4a,0xb4,0x93,0xda, + 0x44,0x6e,0x27,0x8d,0x80,0x96,0xef,0xe3,0xba,0x2e,0x43,0x43,0x43,0xd8,0x96,0x85, + 0xd1,0xba,0x73,0xfa,0xc7,0xd7,0xb1,0x8f,0x6f,0x4d,0x22,0x84,0xa0,0xd1,0x68,0x52, + 0x2a,0x16,0x17,0x8a,0xc5,0xc2,0xf8,0x59,0xd7,0x83,0x72,0xb9,0xdc,0x1e,0xcb,0xb2, + 0x6a,0x5a,0x6b,0xa2,0x28,0xa4,0x56,0xab,0x61,0x59,0x2a,0xad,0xab,0x8,0x24,0x12, + 0x3f,0x8,0xa9,0x37,0x1a,0x48,0x99,0x14,0xca,0x94,0x94,0xe4,0x72,0x39,0xba,0xbb, + 0xcb,0xb8,0x8e,0xa2,0x58,0x70,0x70,0x1d,0xf8,0xc9,0x13,0x4f,0xf0,0xb5,0x7,0xbf, + 0xc1,0x81,0xfd,0x7,0xe9,0xee,0xee,0xc2,0xf3,0x5c,0x84,0x31,0x64,0x33,0x19,0x3c, + 0xa5,0x68,0xce,0x56,0xf0,0xe7,0x66,0x18,0xe8,0xee,0xc2,0xb1,0x2d,0x94,0xb2,0xb1, + 0x6c,0x27,0x2d,0xd1,0x8a,0x94,0x54,0x63,0xa2,0x28,0xc2,0xb6,0x92,0x8,0x29,0x95, + 0x5c,0xae,0x25,0x99,0x93,0xd9,0x8f,0x39,0xc6,0x8a,0x2,0x3f,0x40,0xa,0x59,0xd9, + 0xb2,0x65,0xf8,0xb3,0xd7,0x5f,0x7f,0xdd,0x23,0x27,0xc3,0xe0,0xa4,0xcb,0x5f,0xe6, + 0x17,0x16,0xe2,0x66,0xb3,0xb5,0xae,0xd1,0x68,0x6c,0xd6,0xda,0x50,0xa9,0x54,0x88, + 0x63,0x4d,0xda,0xc4,0x48,0xb4,0x8c,0x8e,0x89,0xc3,0x88,0x42,0x3e,0xdf,0x56,0xc7, + 0x9e,0xe7,0x51,0xee,0xe9,0xa6,0x54,0xea,0x42,0x4a,0x45,0x4f,0xb9,0x84,0x65,0x29, + 0xe,0x1f,0x3e,0xc2,0xe4,0xe4,0x34,0x1b,0x36,0x6e,0xa0,0xbb,0xab,0x44,0xe0,0xfb, + 0x18,0xad,0x71,0x1c,0x3b,0xd1,0x4d,0x8d,0x6,0x7d,0x3d,0x3d,0xd8,0x8e,0x9d,0x10, + 0xaf,0xd1,0x88,0xb4,0x2c,0x22,0x5,0x4,0x81,0x9f,0x68,0x27,0xb3,0x94,0xa2,0x98, + 0x55,0x40,0x11,0xed,0x84,0x79,0x49,0x74,0x2e,0x7d,0x4a,0x1b,0x83,0x8e,0x35,0xc6, + 0xe8,0xa9,0x2b,0xae,0xd8,0xf6,0xde,0x6b,0xae,0xbe,0xea,0xef,0x7,0xd6,0xac,0xa9, + 0x9f,0x35,0x40,0x83,0x3,0x3,0xcf,0x4d,0x4c,0x4c,0x6e,0x58,0x98,0x5f,0x78,0x95, + 0xc1,0x50,0xad,0x56,0x89,0xa2,0xe5,0xc4,0x57,0x98,0x44,0xa8,0x5,0x61,0x80,0x52, + 0x56,0xd2,0x16,0x56,0xa,0xdb,0xb6,0x28,0x15,0x4b,0xc,0xe,0xe,0xb1,0x71,0xd3, + 0x26,0xca,0x7d,0xfd,0xf4,0xf5,0xf6,0xe2,0xba,0x2e,0x33,0x33,0x73,0x54,0x66,0xe6, + 0xb8,0xf4,0xd2,0x61,0x5c,0xc7,0x41,0xeb,0x18,0x29,0x2d,0xb4,0x31,0xcc,0xce,0xcd, + 0x11,0x45,0x11,0xa5,0x62,0x9,0xc7,0x71,0xb0,0xa5,0xc1,0xb5,0xc0,0x12,0x6,0x61, + 0x62,0xc2,0xc0,0x4f,0x40,0x91,0x1d,0x55,0xc8,0x53,0x90,0x70,0x27,0xf7,0x68,0xad, + 0x41,0x50,0xd9,0xb6,0x6d,0xdb,0x7b,0x5e,0xf6,0xb2,0x1b,0x1e,0x28,0x14,0xa,0xd1, + 0x39,0x57,0x14,0xcb,0xe5,0xee,0xc7,0xa6,0xa6,0xa7,0xa3,0x46,0xa3,0x61,0x39,0x8e, + 0x4d,0xb3,0xd9,0x4a,0xbc,0x7a,0xa9,0xc5,0x6c,0x59,0x28,0x60,0xa6,0x32,0x83,0xe7, + 0xba,0x74,0x75,0x95,0x52,0x61,0x19,0xd3,0x6a,0xf9,0x0,0x74,0x97,0x4a,0xac,0xe9, + 0xef,0x67,0x78,0x78,0x98,0xa9,0xa9,0x49,0x26,0x27,0xa7,0x19,0x39,0x3a,0xc6,0x45, + 0x17,0x6d,0x20,0x93,0xc9,0x10,0xc7,0x75,0xb2,0x99,0x2c,0xc5,0x42,0x81,0xe9,0x4a, + 0x85,0xa1,0xa1,0x21,0x8a,0xf9,0xc,0x8e,0x4a,0x38,0x68,0x49,0x14,0x2e,0x15,0xd9, + 0x4,0x82,0xc0,0x18,0x56,0x72,0xf3,0xf1,0x11,0x69,0x99,0x73,0xc2,0x30,0xc4,0x52, + 0x6a,0x7c,0xeb,0xd6,0xcb,0xde,0xf7,0xf2,0x97,0xbd,0xf4,0x7e,0xcf,0xf3,0x4e,0x2b, + 0xad,0x3d,0x65,0x4d,0xfa,0xf2,0xcb,0xb7,0x3d,0xd6,0xdb,0xdb,0xf3,0xf1,0x38,0xd6, + 0x14,0xa,0x5,0x94,0x5a,0xd6,0x1c,0x2,0x50,0x22,0x69,0xd4,0x19,0x60,0xba,0x52, + 0x61,0x71,0xb1,0x6,0x6,0x94,0x65,0x91,0xcb,0xe7,0x48,0x40,0x6d,0x50,0x5b,0x5c, + 0xc4,0x18,0xc3,0xc0,0xe0,0x20,0x2f,0x7e,0xf1,0x15,0x64,0x73,0x19,0x74,0xda,0xf9, + 0xb0,0xed,0x24,0xc1,0xcd,0xe5,0x73,0xb4,0x5a,0x2d,0x6a,0xb5,0x45,0xe2,0x28,0x6c, + 0x77,0x33,0x34,0x22,0x2d,0x84,0x25,0xcf,0x61,0x90,0x94,0x7d,0xe1,0xd8,0xde,0xbe, + 0x48,0xff,0x3a,0x97,0xdb,0x8,0x21,0x68,0x35,0x5b,0x28,0xa9,0x2a,0x57,0x5c,0x7e, + 0xf9,0xbb,0x5e,0x73,0xd3,0xab,0xff,0xe6,0x74,0xc1,0x39,0xed,0xa2,0xfd,0x2b,0x5f, + 0xf1,0xf2,0x77,0x7b,0x9e,0x43,0x2e,0x97,0x43,0x29,0xb5,0x5c,0x41,0x4c,0xb,0xf7, + 0x4a,0x4a,0x6c,0xdb,0x26,0x8,0x2,0xa6,0x26,0xa7,0xa8,0xce,0xcf,0x27,0xca,0xd8, + 0x4a,0xaa,0x8f,0xd9,0x6c,0x16,0x63,0x34,0xb5,0x7a,0x8d,0x46,0xa3,0xd9,0x2e,0x6e, + 0xf9,0x2d,0x1f,0x25,0x25,0x8e,0x63,0xa3,0x94,0x4c,0xaa,0x88,0x40,0x63,0xb1,0x86, + 0xef,0x7,0x18,0x23,0xd3,0x35,0x43,0x12,0x5b,0x25,0x6a,0x7d,0xaa,0x32,0x43,0xb5, + 0x5a,0x45,0xa5,0xe1,0xdf,0xb0,0xcc,0x87,0x4b,0x25,0xe0,0xe5,0x74,0x42,0xd2,0xa8, + 0x37,0x50,0x4a,0x35,0xb6,0x6f,0x7f,0xd1,0xbf,0xb9,0xe1,0x86,0x97,0x7c,0xe9,0x4c, + 0xfb,0x80,0xa7,0xdd,0xd5,0xb8,0xe3,0x8f,0xfe,0x85,0x50,0xca,0xa2,0x50,0x28,0xb4, + 0x8b,0x62,0xcb,0x7d,0x2b,0x91,0x80,0x64,0xd9,0x4,0x61,0xc8,0xd4,0xd4,0x34,0xd3, + 0xd3,0xd3,0x84,0x61,0x80,0x94,0x32,0x6d,0x5,0x3b,0x58,0x96,0x22,0x8e,0x23,0x9a, + 0xcd,0x16,0xcd,0x66,0x8b,0xf9,0x85,0xc5,0x54,0x84,0xda,0x48,0x21,0x51,0x2a,0x29, + 0xe1,0xd6,0x9b,0x8d,0xb4,0x95,0x64,0x88,0x35,0xc4,0x6,0x16,0xea,0x4d,0x26,0xa6, + 0x67,0x40,0x8,0x72,0xb9,0x4c,0x5a,0x8e,0x35,0x27,0xa0,0x9f,0x44,0x16,0xd4,0xeb, + 0x75,0x94,0x65,0x5,0x57,0x5f,0xbd,0xf3,0x8e,0x6b,0xae,0xb9,0xfa,0x1b,0x9e,0xe7, + 0xe9,0x33,0x5,0xe8,0x8c,0x1a,0x87,0xbd,0x7d,0xbd,0xf,0x7,0x61,0x78,0x6b,0xbd, + 0x5e,0x27,0x8a,0x1a,0xed,0xb2,0xc1,0x52,0xa9,0x73,0xc9,0xba,0xc2,0x28,0x62,0x7a, + 0x7a,0x86,0x56,0xcb,0xa7,0xab,0x54,0xc4,0x73,0x93,0x90,0xec,0xd8,0xe,0x3a,0x8e, + 0xd1,0x26,0x49,0x5f,0x7c,0xdf,0x27,0x8c,0x63,0x6c,0xcb,0x42,0x4a,0xd5,0x6,0xdb, + 0xf,0xc2,0x24,0x5a,0xa6,0x5c,0xd7,0x6a,0x45,0xec,0xdb,0x7f,0x18,0x29,0x5,0x83, + 0x83,0x6b,0xc8,0x64,0xf3,0x4,0xd1,0x52,0x12,0x1d,0x1d,0x5f,0x35,0x34,0x6,0xdf, + 0xf7,0xb1,0x2d,0x3b,0xb8,0xee,0xba,0x6b,0x6e,0xd9,0xb1,0xfd,0xc5,0x3f,0xca,0x66, + 0xb3,0x67,0xc,0xce,0x19,0x37,0xe,0x6f,0xf9,0xfd,0xdf,0x7b,0x7d,0x4f,0x6f,0xcf, + 0x93,0xe5,0x72,0x52,0xd7,0x59,0xb2,0x22,0x95,0xf6,0xc9,0x84,0x48,0x9a,0x80,0x4b, + 0x2,0x6e,0x7e,0x7e,0x81,0xc9,0xc9,0x69,0xa6,0xa6,0xa7,0x99,0x9f,0x9f,0xc7,0xf7, + 0x7d,0x10,0x2,0x65,0x49,0x2c,0x25,0x11,0xc2,0xa0,0xe3,0x38,0x99,0x9c,0x4c,0x52, + 0x8b,0x30,0xc,0x51,0x96,0x85,0x16,0x22,0x29,0x86,0xa5,0x8b,0x1b,0x74,0x1c,0x53, + 0xc8,0xe7,0x70,0x1c,0xf,0x63,0x4,0x51,0x18,0xd3,0x6a,0x35,0x97,0x57,0x88,0xa4, + 0xe0,0x2e,0xd5,0xa3,0x1c,0xc7,0xa9,0x5c,0xff,0x92,0xeb,0x6e,0xd9,0xb9,0x63,0xfb, + 0x23,0x67,0xb,0xce,0x59,0xf5,0xe6,0xff,0xe0,0xb6,0x5b,0x77,0x3e,0xf4,0xad,0x6f, + 0xff,0xef,0x28,0x8c,0x76,0x56,0x66,0x66,0xd2,0x46,0x9d,0x6a,0xdf,0xb9,0xf6,0x42, + 0x2a,0x29,0xd1,0x71,0x8c,0xdf,0x4a,0x32,0xfe,0x7a,0xa3,0x81,0xe7,0x7a,0x38,0xae, + 0x93,0x2e,0x81,0x49,0x48,0xbe,0xbb,0xbb,0xb,0x21,0x32,0x60,0x4c,0xda,0xec,0x8b, + 0x29,0x16,0xb,0x58,0xb6,0x43,0x10,0x69,0x4,0x6,0xa1,0x24,0x43,0x6b,0xd7,0xe2, + 0x78,0x2e,0xc6,0xb2,0x69,0xf8,0x1,0xb3,0x73,0x73,0xb4,0x5a,0x4d,0xd6,0xe,0xe, + 0xb5,0x7b,0xf9,0xb1,0x8e,0x9,0xc2,0x80,0x7c,0x2e,0xff,0xf4,0xce,0x9d,0xdb,0xdf, + 0x79,0xdd,0xb5,0xd7,0xfc,0xe3,0xb9,0xae,0xa0,0x3b,0xab,0x25,0x78,0xaf,0xbf,0xed, + 0x75,0x57,0xe,0x5f,0xbc,0xf9,0xc9,0xde,0xde,0x32,0xb6,0x6d,0x27,0x7d,0xab,0x94, + 0xb0,0x97,0x2c,0x69,0xa9,0x28,0x95,0x10,0x70,0x52,0x4f,0xaa,0xd5,0xea,0xcc,0xcd, + 0x55,0x99,0x9d,0x99,0x65,0x76,0x76,0x8e,0xf9,0xf9,0x45,0xe2,0x58,0x63,0xd9,0xa, + 0xdf,0xf,0x98,0x9b,0xab,0xe2,0x38,0x36,0xdd,0xdd,0xdd,0xb8,0x8e,0x9b,0xac,0x31, + 0xd2,0x10,0x69,0x81,0x9b,0x2b,0xa0,0x2d,0x1b,0xe5,0x65,0xf1,0x35,0x54,0x17,0x16, + 0x9,0xfd,0x10,0xa9,0x4,0xa4,0xdd,0x15,0xdf,0xf7,0x29,0x16,0xb,0xbf,0xb8,0xea, + 0xaa,0x9d,0x7f,0x7a,0x3e,0xc0,0x39,0x6b,0x80,0x0,0x6e,0xbb,0xfd,0xd6,0x9d,0xc3, + 0xc3,0xc3,0x4f,0xaf,0x59,0xd3,0x8f,0xe3,0xd8,0x49,0xea,0x21,0x45,0x1b,0xa0,0x76, + 0x82,0x99,0x9a,0xbe,0xa5,0x54,0x92,0xaf,0x59,0x16,0x32,0x4d,0x6c,0x33,0x99,0xc, + 0x9e,0x97,0x21,0xa,0x23,0x26,0x26,0x26,0x38,0x3a,0x72,0x94,0x72,0xb9,0x4c,0x21, + 0x9f,0x4f,0x57,0x82,0x24,0xba,0x38,0x8a,0xa2,0xa4,0xe4,0x22,0x40,0xe3,0xa0,0xec, + 0x3c,0x5d,0xe5,0x5e,0xfa,0xd7,0xf4,0x25,0x32,0x40,0x6b,0x5a,0x41,0x40,0xb1,0x58, + 0x7c,0xf6,0xaa,0x2b,0xaf,0xbc,0xeb,0x9a,0xab,0xaf,0xfa,0xe9,0xf9,0x5a,0xbd,0x7b, + 0x4e,0x8b,0x38,0x6f,0x7b,0xfd,0xeb,0xb6,0xf,0xf,0x5f,0xfc,0xd8,0xfa,0x75,0xeb, + 0x5a,0xc5,0x62,0x31,0x69,0xe0,0xb1,0xba,0x35,0xb5,0x13,0x81,0x74,0x59,0x8b,0x6d, + 0xdb,0xc,0xc,0xac,0xa1,0x50,0xc8,0x33,0x31,0x39,0xc9,0xde,0x7d,0xcf,0x13,0x86, + 0x11,0x17,0x6d,0xda,0x84,0xe7,0x65,0x92,0x7e,0x98,0x4c,0x84,0x62,0x1c,0x25,0x8d, + 0x46,0x62,0x43,0xe4,0x7,0x78,0x9e,0x47,0x7f,0x7f,0x1f,0xf9,0x7c,0x9e,0x38,0xe5, + 0x9c,0x5c,0x26,0x33,0xfe,0x92,0xeb,0xae,0xfd,0xe3,0xab,0xae,0xdc,0xf9,0xb3,0xf3, + 0xb9,0xf6,0xfb,0xbc,0xac,0xb4,0xff,0xf1,0x8f,0x9f,0xf8,0xc0,0x91,0x23,0x23,0xef, + 0xa9,0xce,0x57,0xad,0xb9,0xb9,0x2a,0x8b,0xb5,0x5a,0x52,0x1b,0x3a,0x76,0x81,0x7d, + 0xa2,0x57,0xb4,0xc1,0xb6,0x2c,0x6,0x7,0x7,0xd8,0xb0,0x6e,0x2d,0x61,0x1c,0xb3, + 0x7f,0x64,0x8c,0x6a,0xad,0xc6,0x60,0x5f,0xf,0x6b,0xba,0xbb,0xc1,0x98,0x36,0xf1, + 0xb7,0x5a,0xad,0x44,0x7c,0xa6,0x2b,0x3e,0x74,0x47,0x9d,0xca,0x68,0x43,0x18,0x85, + 0xb8,0x8e,0x33,0xb9,0xeb,0xc6,0x57,0xbe,0x62,0xdb,0xb6,0xad,0x7b,0x39,0xcf,0xe3, + 0xbc,0xac,0x93,0xb6,0x6d,0x7b,0xf7,0x95,0x57,0xee,0x78,0xe8,0xf9,0xe7,0xf7,0x7f, + 0xda,0x73,0xbd,0x9d,0xe5,0x74,0xc9,0x5b,0xa3,0xd9,0x20,0xf0,0x83,0xe,0x19,0x60, + 0x91,0x2f,0xe4,0xe9,0x2d,0x77,0x53,0x28,0x16,0x69,0xb5,0x7c,0x2a,0xb,0xb,0xd4, + 0xc2,0x10,0x95,0xf1,0x90,0x5e,0x16,0x1f,0x41,0x46,0x49,0x6c,0xa5,0xf0,0x83,0x90, + 0x56,0xb3,0x95,0xac,0x5,0xb0,0x54,0xbb,0xc4,0xaa,0x63,0x4d,0x14,0x6b,0xc2,0x28, + 0xc2,0x71,0x9d,0xda,0x4d,0x37,0xbd,0xea,0x15,0x83,0x3,0x6b,0xf6,0x71,0x1,0xc6, + 0x79,0xfb,0xad,0xc6,0xfe,0xfd,0x7,0x44,0x3e,0x9f,0xcf,0x57,0x2a,0x95,0x57,0xef, + 0x3f,0x70,0xf0,0xc3,0x95,0x4a,0xe5,0x32,0x1,0xe9,0xea,0x56,0x81,0x20,0x91,0x3, + 0x96,0x95,0x94,0x4e,0x75,0xac,0x89,0xa3,0x88,0x45,0xbf,0xc5,0xc4,0x42,0x8d,0x7a, + 0xa4,0x29,0xe6,0x72,0x94,0x3c,0x87,0xfe,0x42,0xe,0x25,0x4,0xb5,0x5a,0x9d,0x46, + 0xb3,0x89,0x31,0x1a,0x3f,0x8,0xa8,0xd7,0x1b,0xc4,0x8,0xa4,0xa5,0x10,0xc6,0xd0, + 0xd7,0xd5,0xfd,0xcb,0x5d,0xbb,0x5e,0xfe,0xa6,0xfe,0xbe,0xbe,0xbd,0xdd,0xdd,0xdd, + 0xe6,0x5,0xd,0xd0,0xd2,0x38,0x70,0xf0,0x90,0x5c,0x5c,0x5c,0x2c,0x3b,0x8e,0x7d, + 0xdd,0xd8,0xd8,0xf8,0x9d,0x95,0xca,0xcc,0x1f,0xfa,0xbe,0xdf,0xe6,0x26,0xa5,0x92, + 0x55,0x21,0x68,0x10,0x2a,0x21,0xd8,0x85,0x96,0xcf,0x6c,0xa3,0x49,0x18,0x46,0x78, + 0x4a,0xd2,0xe5,0xb9,0x44,0x61,0x48,0xa3,0xd5,0x22,0xd2,0x9a,0x28,0x8c,0x68,0x36, + 0xea,0x58,0xb6,0x7d,0xb0,0x77,0xcd,0xc0,0x6f,0xfa,0xfb,0x7b,0xf,0xd,0xf4,0xf5, + 0x3d,0xbe,0x61,0xed,0xd0,0xf,0x2e,0xde,0x7c,0xd1,0x2c,0x17,0x70,0x5c,0xb0,0xdf, + 0x8b,0x55,0xab,0x55,0xf1,0xfc,0xfe,0x3,0xa5,0x5c,0x2e,0xb7,0xae,0x56,0xab,0xed, + 0x9c,0x9f,0x9f,0xbf,0xa6,0xd1,0x68,0xbe,0x24,0xc,0xc3,0x4b,0xe3,0x38,0x2e,0xa6, + 0xd9,0xc0,0xd2,0xca,0x8c,0xc0,0x8f,0xa2,0x6a,0xcb,0xf,0xaa,0x52,0x98,0x29,0xc7, + 0xb2,0xa7,0x94,0x94,0xa3,0x8e,0xe3,0x8c,0x3a,0xae,0x3b,0x2e,0x95,0x1a,0xb3,0x94, + 0x9c,0x7a,0xf2,0xa9,0x5f,0xcd,0x96,0xca,0xe5,0xc6,0xe6,0xcd,0x17,0x5,0x17,0x6f, + 0xdc,0xd8,0xd8,0xb4,0x61,0x9d,0xe6,0x2,0x8f,0xb,0xfe,0x93,0xcc,0x7a,0xbd,0x2e, + 0xea,0xf5,0x7a,0x69,0x72,0x72,0x6a,0xeb,0xec,0xec,0xdc,0x4b,0xeb,0xf5,0xfa,0x4e, + 0x3f,0x8,0xd6,0xc5,0x71,0xdc,0xf5,0xcf,0xdf,0xf8,0x86,0xed,0x0,0x9f,0xfe,0xf4, + 0x67,0xbf,0xbf,0x6e,0xdd,0xba,0x23,0x51,0x1c,0x4f,0xb,0xc1,0xb8,0xe3,0x38,0xe3, + 0x9e,0xe7,0x8d,0x16,0xb,0x85,0x89,0x5c,0x2e,0x37,0xeb,0x7a,0x6e,0x23,0x9f,0xcb, + 0x45,0xbd,0xbd,0xbd,0xbf,0xf5,0x9f,0x70,0x5e,0x28,0x80,0xde,0xf,0xdc,0x8,0x7c, + 0x1e,0x78,0xe0,0x1c,0xce,0xb3,0x29,0x7d,0x54,0x81,0x27,0xf9,0x1d,0xc,0xeb,0x2, + 0x9e,0x7b,0x9,0xa0,0x4e,0xd0,0x4e,0x36,0x1e,0x5,0xf6,0xac,0x72,0x8e,0xfb,0x53, + 0x90,0xff,0xa4,0x3,0xb4,0x3b,0x57,0x39,0xfe,0xf0,0x39,0xde,0x8c,0x73,0x6,0xe8, + 0xc6,0x13,0xec,0xdf,0x73,0x92,0x63,0xe,0x75,0x6c,0xef,0x3e,0xc5,0xf9,0x77,0xaf, + 0x72,0xae,0x43,0xab,0x9c,0x67,0xd3,0x9,0xce,0xb5,0xe7,0x77,0x9,0xd0,0xe,0xe0, + 0x44,0xb9,0x8d,0x38,0x53,0xb7,0x5e,0x5,0xf8,0xb3,0xc9,0x9b,0xf6,0x0,0xbb,0xce, + 0xe1,0xf8,0xf3,0xa,0xd0,0x92,0xf5,0x3c,0xb0,0xc2,0x6d,0x3a,0xc7,0x5b,0x3a,0x4c, + 0x7f,0x53,0xfa,0x7c,0x6f,0xca,0x1f,0x67,0x3a,0x4c,0xa,0x40,0x57,0xc7,0xb9,0x6f, + 0x4c,0x6f,0xd4,0x1b,0x5e,0x88,0x1c,0xb4,0x3d,0x7d,0xfe,0xfc,0x29,0x5c,0x8a,0x15, + 0x0,0x9d,0x8e,0xab,0xee,0x38,0x81,0x75,0xec,0x49,0x81,0x59,0x72,0xb1,0x3d,0xa7, + 0xf9,0xdd,0xbf,0x53,0xb,0xda,0x1,0xbc,0x32,0x25,0xc4,0x3d,0x2b,0xb8,0xe1,0x81, + 0xf4,0xd1,0x5,0x2c,0xfd,0xb3,0x80,0xbb,0x3b,0x26,0xb5,0x14,0x2e,0x4f,0xc7,0x1d, + 0x76,0x75,0x58,0xce,0x12,0x60,0xf7,0x9c,0x82,0xb,0x2f,0xc8,0x38,0x9d,0x6c,0xbe, + 0x6b,0x85,0xcb,0xec,0x4e,0x23,0xcb,0xc1,0x8e,0x9,0x74,0x8e,0xdb,0x57,0x44,0xae, + 0xb7,0xac,0xc2,0x41,0x9d,0x8f,0x5d,0x27,0xe1,0xbd,0x4d,0x1d,0xdb,0xef,0xfc,0x5d, + 0x84,0xf9,0xd3,0x1,0x68,0xc9,0x5,0x9e,0x4c,0x27,0xd3,0xdd,0x11,0x45,0xee,0xed, + 0xe0,0x89,0x76,0x15,0x64,0x95,0x30,0xbd,0xe3,0x2c,0xae,0xed,0xce,0x15,0xa0,0xdf, + 0xbb,0x2,0xec,0x27,0x5f,0x28,0x0,0xed,0x49,0xef,0xf4,0xce,0x74,0xbb,0x9a,0x9a, + 0xfb,0x12,0x89,0xde,0xbe,0x82,0x7b,0x6e,0x5f,0xe1,0x76,0x2b,0xdd,0xea,0xc6,0x15, + 0x8f,0x1d,0x27,0xb0,0xda,0xb7,0xac,0x22,0x25,0xee,0xed,0xb0,0xaa,0xea,0xb,0x89, + 0x83,0x4e,0x4,0xdc,0x8d,0xc0,0xc6,0x8e,0x7d,0xf7,0x76,0x5c,0x7c,0x57,0x4a,0xea, + 0xd5,0x15,0x40,0x9c,0xe,0x7,0xbd,0x23,0x3d,0xfe,0x50,0xa,0xc8,0x9e,0x15,0x51, + 0xed,0x5,0xe5,0x62,0x6f,0x1,0xbe,0xb1,0x4a,0x64,0x5a,0x7a,0x3d,0xdf,0xe1,0x6, + 0xb7,0xa7,0x80,0x74,0xa,0xb6,0xbb,0x53,0xeb,0x3b,0x5d,0xe,0xda,0xd1,0xe1,0xc2, + 0xf7,0x74,0xec,0xbf,0x27,0x3d,0xd7,0xd2,0xd,0x79,0xea,0x85,0x2,0xd0,0xf6,0x74, + 0xe2,0x77,0xae,0x98,0xc4,0xed,0x27,0x50,0xd2,0xf7,0x9c,0xa3,0xf9,0x2f,0xe5,0x5d, + 0xf,0xac,0x88,0x92,0x2b,0x83,0xc0,0xb,0x86,0x83,0x3e,0x99,0x5e,0xf4,0xee,0xd4, + 0x92,0xee,0x4f,0xdd,0xa4,0xb,0xf8,0x66,0xc7,0x85,0x7e,0x33,0xb5,0x94,0x4f,0x9c, + 0xe3,0x35,0x1d,0x4a,0xc5,0xe0,0xdd,0x27,0x90,0x1b,0x3b,0xd2,0xcf,0x1c,0x3a,0xc1, + 0xf1,0xdf,0x38,0x9f,0x52,0xc0,0x3a,0xcd,0xb,0xde,0x95,0xf2,0xcb,0xed,0x1d,0x77, + 0x79,0xf7,0xa,0x17,0x38,0xdd,0xbb,0x6a,0x4e,0xf3,0x3b,0x57,0x23,0xee,0x7b,0x57, + 0x90,0xff,0xca,0xf7,0x6f,0x4c,0xaf,0xb1,0xeb,0x7c,0x89,0xca,0xd3,0x25,0xe9,0x27, + 0x4f,0xa2,0x57,0xce,0x54,0x51,0xef,0x5e,0xe5,0x33,0x6f,0x39,0x85,0xc4,0xa0,0x43, + 0x2e,0x1c,0x4a,0xad,0x7a,0xe5,0x4d,0xe9,0xcc,0x17,0x9f,0xfc,0x6d,0x5a,0x10,0xe7, + 0x0,0xcc,0xc6,0x55,0xde,0xbb,0xe7,0x4,0x82,0xf0,0xf0,0x9,0xf8,0x68,0x4f,0x7, + 0xd9,0xaf,0xc6,0x71,0xd5,0xd4,0x25,0xb7,0xaf,0xa0,0x85,0xf3,0x32,0xc4,0x6f,0xe3, + 0xbf,0xe0,0xfd,0xbf,0x3c,0xe4,0xff,0x87,0xe0,0xe4,0xe3,0xff,0xe,0x0,0xc6,0xf6, + 0xcd,0xac,0xf4,0xeb,0xe7,0x15,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42, + 0x60,0x82, + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/cam5.png + 0x0,0x0,0x22,0xd5, + 0x89, + 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, + 0x0,0x0,0x48,0x0,0x0,0x0,0x48,0x8,0x6,0x0,0x0,0x0,0x55,0xed,0xb3,0x47, + 0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8e,0x7c,0xfb,0x51,0x93, + 0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x87,0xf,0x0,0x0,0x8c,0xf, + 0x0,0x0,0xfd,0x52,0x0,0x0,0x81,0x40,0x0,0x0,0x7d,0x79,0x0,0x0,0xe9,0x8b, + 0x0,0x0,0x3c,0xe5,0x0,0x0,0x19,0xcc,0x73,0x3c,0x85,0x77,0x0,0x0,0xa,0x39, + 0x69,0x43,0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x49,0x43, + 0x43,0x20,0x70,0x72,0x6f,0x66,0x69,0x6c,0x65,0x0,0x0,0x48,0xc7,0x9d,0x96,0x77, + 0x54,0x54,0xd7,0x16,0x87,0xcf,0xbd,0x77,0x7a,0xa1,0xcd,0x30,0xd2,0x19,0x7a,0x93, + 0x2e,0x30,0x80,0xf4,0x2e,0x20,0x1d,0x4,0x51,0x18,0x66,0x6,0x18,0xca,0x0,0xc3, + 0xc,0x4d,0x6c,0x88,0xa8,0x40,0x44,0x11,0x11,0x1,0x45,0x90,0xa0,0x80,0x1,0xa3, + 0xa1,0x48,0xac,0x88,0x62,0x21,0x28,0xa8,0x60,0xf,0x48,0x10,0x50,0x62,0x30,0x8a, + 0xa8,0xa8,0x64,0x46,0xd6,0x4a,0x7c,0x79,0x79,0xef,0xe5,0xe5,0xf7,0xc7,0xbd,0xdf, + 0xda,0x67,0xef,0x73,0xf7,0xd9,0x7b,0x9f,0xb5,0x2e,0x0,0x24,0x4f,0x1f,0x2e,0x2f, + 0x5,0x96,0x2,0x20,0x99,0x27,0xe0,0x7,0x7a,0x38,0xd3,0x57,0x85,0x47,0xd0,0xb1, + 0xfd,0x0,0x6,0x78,0x80,0x1,0xa6,0x0,0x30,0x59,0xe9,0xa9,0xbe,0x41,0xee,0xc1, + 0x40,0x24,0x2f,0x37,0x17,0x7a,0xba,0xc8,0x9,0xfc,0x8b,0xde,0xc,0x1,0x48,0xfc, + 0xbe,0x65,0xe8,0xe9,0x4f,0xa7,0x83,0xff,0x4f,0xd2,0xac,0x54,0xbe,0x0,0x0,0xc8, + 0x5f,0xc4,0xe6,0x6c,0x4e,0x3a,0x4b,0xc4,0xf9,0x22,0x4e,0xca,0x14,0xa4,0x8a,0xed, + 0x33,0x22,0xa6,0xc6,0x24,0x8a,0x19,0x46,0x89,0x99,0x2f,0x4a,0x50,0xc4,0x72,0x62, + 0x8e,0x5b,0xe4,0xa5,0x9f,0x7d,0x16,0xd9,0x51,0xcc,0xec,0x64,0x1e,0x5b,0xc4,0xe2, + 0x9c,0x53,0xd9,0xc9,0x6c,0x31,0xf7,0x88,0x78,0x7b,0x86,0x90,0x23,0x62,0xc4,0x47, + 0xc4,0x5,0x19,0x5c,0x4e,0xa6,0x88,0x6f,0x8b,0x58,0x33,0x49,0x98,0xcc,0x15,0xf1, + 0x5b,0x71,0x6c,0x32,0x87,0x99,0xe,0x0,0x8a,0x24,0xb6,0xb,0x38,0xac,0x78,0x11, + 0x9b,0x88,0x98,0xc4,0xf,0xe,0x74,0x11,0xf1,0x72,0x0,0x70,0xa4,0xb8,0x2f,0x38, + 0xe6,0xb,0x16,0x70,0xb2,0x4,0xe2,0x43,0xb9,0xa4,0xa4,0x66,0xf3,0xb9,0x71,0xf1, + 0x2,0xba,0x2e,0x4b,0x8f,0x6e,0x6a,0x6d,0xcd,0xa0,0x7b,0x72,0x32,0x93,0x38,0x2, + 0x81,0xa1,0x3f,0x93,0x95,0xc8,0xe4,0xb3,0xe9,0x2e,0x29,0xc9,0xa9,0x4c,0x5e,0x36, + 0x0,0x8b,0x67,0xfe,0x2c,0x19,0x71,0x6d,0xe9,0xa2,0x22,0x5b,0x9a,0x5a,0x5b,0x5a, + 0x1a,0x9a,0x19,0x99,0x7e,0x51,0xa8,0xff,0xba,0xf8,0x37,0x25,0xee,0xed,0x22,0xbd, + 0xa,0xf8,0xdc,0x33,0x88,0xd6,0xf7,0x87,0xed,0xaf,0xfc,0x52,0xea,0x0,0x60,0xcc, + 0x8a,0x6a,0xb3,0xeb,0xf,0x5b,0xcc,0x7e,0x0,0x3a,0xb6,0x2,0x20,0x77,0xff,0xf, + 0x9b,0xe6,0x21,0x0,0x24,0x45,0x7d,0x6b,0xbf,0xf1,0xc5,0x79,0x68,0xe2,0x79,0x89, + 0x17,0x8,0x52,0x6d,0x8c,0x8d,0x33,0x33,0x33,0x8d,0xb8,0x1c,0x96,0x91,0xb8,0xa0, + 0xbf,0xeb,0x7f,0x3a,0xfc,0xd,0x7d,0xf1,0x3d,0x23,0xf1,0x76,0xbf,0x97,0x87,0xee, + 0xca,0x89,0x65,0xa,0x93,0x4,0x74,0x71,0xdd,0x58,0x29,0x49,0x29,0x42,0x3e,0x3d, + 0x3d,0x95,0xc9,0xe2,0xd0,0xd,0xff,0x3c,0xc4,0xff,0x38,0xf0,0xaf,0xf3,0x58,0x1a, + 0xc8,0x89,0xe5,0xf0,0x39,0x3c,0x51,0x44,0xa8,0x68,0xca,0xb8,0xbc,0x38,0x51,0xbb, + 0x79,0x6c,0xae,0x80,0x9b,0xc2,0xa3,0x73,0x79,0xff,0xa9,0x89,0xff,0x30,0xec,0x4f, + 0x5a,0x9c,0x6b,0x91,0x28,0xf5,0x9f,0x0,0x35,0xca,0x8,0x48,0xdd,0xa0,0x2,0xe4, + 0xe7,0x3e,0x80,0xa2,0x10,0x1,0x12,0x79,0x50,0xdc,0xf5,0xdf,0xfb,0xe6,0x83,0xf, + 0x5,0xe2,0x9b,0x17,0xa6,0x3a,0xb1,0x38,0xf7,0x9f,0x5,0xfd,0xfb,0xae,0x70,0x89, + 0xf8,0x91,0xce,0x8d,0xfb,0x1c,0xe7,0x12,0x18,0x4c,0x67,0x9,0xf9,0x19,0x8b,0x6b, + 0xe2,0x6b,0x9,0xd0,0x80,0x0,0x24,0x1,0x15,0xc8,0x3,0x15,0xa0,0x1,0x74,0x81, + 0x21,0x30,0x3,0x56,0xc0,0x16,0x38,0x2,0x37,0xb0,0x2,0xf8,0x81,0x60,0x10,0xe, + 0xd6,0x2,0x16,0x88,0x7,0xc9,0x80,0xf,0x32,0x41,0x2e,0xd8,0xc,0xa,0x40,0x11, + 0xd8,0x5,0xf6,0x82,0x4a,0x50,0x3,0xea,0x41,0x23,0x68,0x1,0x27,0x40,0x7,0x38, + 0xd,0x2e,0x80,0xcb,0xe0,0x3a,0xb8,0x9,0xee,0x80,0x7,0x60,0x4,0x8c,0x83,0xe7, + 0x60,0x6,0xbc,0x1,0xf3,0x10,0x4,0x61,0x21,0x32,0x44,0x81,0xe4,0x21,0x55,0x48, + 0xb,0x32,0x80,0xcc,0x20,0x6,0x64,0xf,0xb9,0x41,0x3e,0x50,0x20,0x14,0xe,0x45, + 0x43,0x71,0x10,0xf,0x12,0x42,0xb9,0xd0,0x16,0xa8,0x8,0x2a,0x85,0x2a,0xa1,0x5a, + 0xa8,0x11,0xfa,0x16,0x3a,0x5,0x5d,0x80,0xae,0x42,0x3,0xd0,0x3d,0x68,0x14,0x9a, + 0x82,0x7e,0x85,0xde,0xc3,0x8,0x4c,0x82,0xa9,0xb0,0x32,0xac,0xd,0x1b,0xc3,0xc, + 0xd8,0x9,0xf6,0x86,0x83,0xe1,0x35,0x70,0x1c,0x9c,0x6,0xe7,0xc0,0xf9,0xf0,0x4e, + 0xb8,0x2,0xae,0x83,0x8f,0xc1,0xed,0xf0,0x5,0xf8,0x3a,0x7c,0x7,0x1e,0x81,0x9f, + 0xc3,0xb3,0x8,0x40,0x88,0x8,0xd,0x51,0x43,0xc,0x11,0x6,0xe2,0x82,0xf8,0x21, + 0x11,0x48,0x2c,0xc2,0x47,0x36,0x20,0x85,0x48,0x39,0x52,0x87,0xb4,0x20,0x5d,0x48, + 0x2f,0x72,0xb,0x19,0x41,0xa6,0x91,0x77,0x28,0xc,0x8a,0x82,0xa2,0xa3,0xc,0x51, + 0xb6,0x28,0x4f,0x54,0x8,0x8a,0x85,0x4a,0x43,0x6d,0x40,0x15,0xa3,0x2a,0x51,0x47, + 0x51,0xed,0xa8,0x1e,0xd4,0x2d,0xd4,0x28,0x6a,0x6,0xf5,0x9,0x4d,0x46,0x2b,0xa1, + 0xd,0xd0,0x36,0x68,0x2f,0xf4,0x2a,0x74,0x1c,0x3a,0x13,0x5d,0x80,0x2e,0x47,0x37, + 0xa0,0xdb,0xd0,0x97,0xd0,0x77,0xd0,0xe3,0xe8,0x37,0x18,0xc,0x86,0x86,0xd1,0xc1, + 0x58,0x61,0x3c,0x31,0xe1,0x98,0x4,0xcc,0x3a,0x4c,0x31,0xe6,0x0,0xa6,0x15,0x73, + 0x1e,0x33,0x80,0x19,0xc3,0xcc,0x62,0xb1,0x58,0x79,0xac,0x1,0xd6,0xe,0xeb,0x87, + 0x65,0x62,0x5,0xd8,0x2,0xec,0x7e,0xec,0x31,0xec,0x39,0xec,0x20,0x76,0x1c,0xfb, + 0x16,0x47,0xc4,0xa9,0xe2,0xcc,0x70,0xee,0xb8,0x8,0x1c,0xf,0x97,0x87,0x2b,0xc7, + 0x35,0xe1,0xce,0xe2,0x6,0x71,0x13,0xb8,0x79,0xbc,0x14,0x5e,0xb,0x6f,0x83,0xf7, + 0xc3,0xb3,0xf1,0xd9,0xf8,0x12,0x7c,0x3d,0xbe,0xb,0x7f,0x3,0x3f,0x8e,0x9f,0x27, + 0x48,0x13,0x74,0x8,0x76,0x84,0x60,0x42,0x2,0x61,0x33,0xa1,0x82,0xd0,0x42,0xb8, + 0x44,0x78,0x48,0x78,0x45,0x24,0x12,0xd5,0x89,0xd6,0xc4,0x0,0x22,0x97,0xb8,0x89, + 0x58,0x41,0x3c,0x4e,0xbc,0x42,0x1c,0x25,0xbe,0x23,0xc9,0x90,0xf4,0x49,0x2e,0xa4, + 0x48,0x92,0x90,0xb4,0x93,0x74,0x84,0x74,0x9e,0x74,0x8f,0xf4,0x8a,0x4c,0x26,0x6b, + 0x93,0x1d,0xc9,0x11,0x64,0x1,0x79,0x27,0xb9,0x91,0x7c,0x91,0xfc,0x98,0xfc,0x56, + 0x82,0x22,0x61,0x24,0xe1,0x25,0xc1,0x96,0xd8,0x28,0x51,0x25,0xd1,0x2e,0x31,0x28, + 0xf1,0x42,0x12,0x2f,0xa9,0x25,0xe9,0x24,0xb9,0x56,0x32,0x47,0xb2,0x5c,0xf2,0xa4, + 0xe4,0xd,0xc9,0x69,0x29,0xbc,0x94,0xb6,0x94,0x8b,0x14,0x53,0x6a,0x83,0x54,0x95, + 0xd4,0x29,0xa9,0x61,0xa9,0x59,0x69,0x8a,0xb4,0xa9,0xb4,0x9f,0x74,0xb2,0x74,0xb1, + 0x74,0x93,0xf4,0x55,0xe9,0x49,0x19,0xac,0x8c,0xb6,0x8c,0x9b,0xc,0x5b,0x26,0x5f, + 0xe6,0xb0,0xcc,0x45,0x99,0x31,0xa,0x42,0xd1,0xa0,0xb8,0x50,0x58,0x94,0x2d,0x94, + 0x7a,0xca,0x25,0xca,0x38,0x15,0x43,0xd5,0xa1,0x7a,0x51,0x13,0xa8,0x45,0xd4,0x6f, + 0xa8,0xfd,0xd4,0x19,0x59,0x19,0xd9,0x65,0xb2,0xa1,0xb2,0x59,0xb2,0x55,0xb2,0x67, + 0x64,0x47,0x68,0x8,0x4d,0x9b,0xe6,0x45,0x4b,0xa2,0x95,0xd0,0x4e,0xd0,0x86,0x68, + 0xef,0x97,0x28,0x2f,0x71,0x5a,0xc2,0x59,0xb2,0x63,0x49,0xcb,0x92,0xc1,0x25,0x73, + 0x72,0x8a,0x72,0x8e,0x72,0x1c,0xb9,0x42,0xb9,0x56,0xb9,0x3b,0x72,0xef,0xe5,0xe9, + 0xf2,0x6e,0xf2,0x89,0xf2,0xbb,0xe5,0x3b,0xe4,0x1f,0x29,0xa0,0x14,0xf4,0x15,0x2, + 0x14,0x32,0x15,0xe,0x2a,0x5c,0x52,0x98,0x56,0xa4,0x2a,0xda,0x2a,0xb2,0x14,0xb, + 0x15,0x4f,0x28,0xde,0x57,0x82,0x95,0xf4,0x95,0x2,0x95,0xd6,0x29,0x1d,0x56,0xea, + 0x53,0x9a,0x55,0x56,0x51,0xf6,0x50,0x4e,0x55,0xde,0xaf,0x7c,0x51,0x79,0x5a,0x85, + 0xa6,0xe2,0xa8,0x92,0xa0,0x52,0xa6,0x72,0x56,0x65,0x4a,0x95,0xa2,0x6a,0xaf,0xca, + 0x55,0x2d,0x53,0x3d,0xa7,0xfa,0x8c,0x2e,0x4b,0x77,0xa2,0x27,0xd1,0x2b,0xe8,0x3d, + 0xf4,0x19,0x35,0x25,0x35,0x4f,0x35,0xa1,0x5a,0xad,0x5a,0xbf,0xda,0xbc,0xba,0x8e, + 0x7a,0x88,0x7a,0x9e,0x7a,0xab,0xfa,0x23,0xd,0x82,0x6,0x43,0x23,0x56,0xa3,0x4c, + 0xa3,0x5b,0x63,0x46,0x53,0x55,0xd3,0x57,0x33,0x57,0xb3,0x59,0xf3,0xbe,0x16,0x5e, + 0x8b,0xa1,0x15,0xaf,0xb5,0x4f,0xab,0x57,0x6b,0x4e,0x5b,0x47,0x3b,0x4c,0x7b,0x9b, + 0x76,0x87,0xf6,0xa4,0x8e,0x9c,0x8e,0x97,0x4e,0x8e,0x4e,0xb3,0xce,0x43,0x5d,0xb2, + 0xae,0x83,0x6e,0x9a,0x6e,0x9d,0xee,0x6d,0x3d,0x8c,0x1e,0x43,0x2f,0x51,0xef,0x80, + 0xde,0x4d,0x7d,0x58,0xdf,0x42,0x3f,0x5e,0xbf,0x4a,0xff,0x86,0x1,0x6c,0x60,0x69, + 0xc0,0x35,0x38,0x60,0x30,0xb0,0x14,0xbd,0xd4,0x7a,0x29,0x6f,0x69,0xdd,0xd2,0x61, + 0x43,0x92,0xa1,0x93,0x61,0x86,0x61,0xb3,0xe1,0xa8,0x11,0xcd,0xc8,0xc7,0x28,0xcf, + 0xa8,0xc3,0xe8,0x85,0xb1,0xa6,0x71,0x84,0xf1,0x6e,0xe3,0x5e,0xe3,0x4f,0x26,0x16, + 0x26,0x49,0x26,0xf5,0x26,0xf,0x4c,0x65,0x4c,0x57,0x98,0xe6,0x99,0x76,0x99,0xfe, + 0x6a,0xa6,0x6f,0xc6,0x32,0xab,0x32,0xbb,0x6d,0x4e,0x36,0x77,0x37,0xdf,0x68,0xde, + 0x69,0xfe,0x72,0x99,0xc1,0x32,0xce,0xb2,0x83,0xcb,0xee,0x5a,0x50,0x2c,0x7c,0x2d, + 0xb6,0x59,0x74,0x5b,0x7c,0xb4,0xb4,0xb2,0xe4,0x5b,0xb6,0x58,0x4e,0x59,0x69,0x5a, + 0x45,0x5b,0x55,0x5b,0xd,0x33,0xa8,0xc,0x7f,0x46,0x31,0xe3,0x8a,0x35,0xda,0xda, + 0xd9,0x7a,0xa3,0xf5,0x69,0xeb,0x77,0x36,0x96,0x36,0x2,0x9b,0x13,0x36,0xbf,0xd8, + 0x1a,0xda,0x26,0xda,0x36,0xd9,0x4e,0x2e,0xd7,0x59,0xce,0x59,0x5e,0xbf,0x7c,0xcc, + 0x4e,0xdd,0x8e,0x69,0x57,0x6b,0x37,0x62,0x4f,0xb7,0x8f,0xb6,0x3f,0x64,0x3f,0xe2, + 0xa0,0xe6,0xc0,0x74,0xa8,0x73,0x78,0xe2,0xa8,0xe1,0xc8,0x76,0x6c,0x70,0x9c,0x70, + 0xd2,0x73,0x4a,0x70,0x3a,0xe6,0xf4,0xc2,0xd9,0xc4,0x99,0xef,0xdc,0xe6,0x3c,0xe7, + 0x62,0xe3,0xb2,0xde,0xe5,0xbc,0x2b,0xe2,0xea,0xe1,0x5a,0xe8,0xda,0xef,0x26,0xe3, + 0x16,0xe2,0x56,0xe9,0xf6,0xd8,0x5d,0xdd,0x3d,0xce,0xbd,0xd9,0x7d,0xc6,0xc3,0xc2, + 0x63,0x9d,0xc7,0x79,0x4f,0xb4,0xa7,0xb7,0xe7,0x6e,0xcf,0x61,0x2f,0x65,0x2f,0x96, + 0x57,0xa3,0xd7,0xcc,0xa,0xab,0x15,0xeb,0x57,0xf4,0x78,0x93,0xbc,0x83,0xbc,0x2b, + 0xbd,0x9f,0xf8,0xe8,0xfb,0xf0,0x7d,0xba,0x7c,0x61,0xdf,0x15,0xbe,0x7b,0x7c,0x1f, + 0xae,0xd4,0x5a,0xc9,0x5b,0xd9,0xe1,0x7,0xfc,0xbc,0xfc,0xf6,0xf8,0x3d,0xf2,0xd7, + 0xf1,0x4f,0xf3,0xff,0x3e,0x0,0x13,0xe0,0x1f,0x50,0x15,0xf0,0x34,0xd0,0x34,0x30, + 0x37,0xb0,0x37,0x88,0x12,0x14,0x15,0xd4,0x14,0xf4,0x26,0xd8,0x39,0xb8,0x24,0xf8, + 0x41,0x88,0x6e,0x88,0x30,0xa4,0x3b,0x54,0x32,0x34,0x32,0xb4,0x31,0x74,0x2e,0xcc, + 0x35,0xac,0x34,0x6c,0x64,0x95,0xf1,0xaa,0xf5,0xab,0xae,0x87,0x2b,0x84,0x73,0xc3, + 0x3b,0x23,0xb0,0x11,0xa1,0x11,0xd,0x11,0xb3,0xab,0xdd,0x56,0xef,0x5d,0x3d,0x1e, + 0x69,0x11,0x59,0x10,0x39,0xb4,0x46,0x67,0x4d,0xd6,0x9a,0xab,0x6b,0x15,0xd6,0x26, + 0xad,0x3d,0x13,0x25,0x19,0xc5,0x8c,0x3a,0x19,0x8d,0x8e,0xe,0x8b,0x6e,0x8a,0xfe, + 0xc0,0xf4,0x63,0xd6,0x31,0x67,0x63,0xbc,0x62,0xaa,0x63,0x66,0x58,0x2e,0xac,0x7d, + 0xac,0xe7,0x6c,0x47,0x76,0x19,0x7b,0x8a,0x63,0xc7,0x29,0xe5,0x4c,0xc4,0xda,0xc5, + 0x96,0xc6,0x4e,0xc6,0xd9,0xc5,0xed,0x89,0x9b,0x8a,0x77,0x88,0x2f,0x8f,0x9f,0xe6, + 0xba,0x70,0x2b,0xb9,0x2f,0x13,0x3c,0x13,0x6a,0x12,0xe6,0x12,0xfd,0x12,0x8f,0x24, + 0x2e,0x24,0x85,0x25,0xb5,0x26,0xe3,0x92,0xa3,0x93,0x4f,0xf1,0x64,0x78,0x89,0xbc, + 0x9e,0x14,0x95,0x94,0xac,0x94,0x81,0x54,0x83,0xd4,0x82,0xd4,0x91,0x34,0x9b,0xb4, + 0xbd,0x69,0x33,0x7c,0x6f,0x7e,0x43,0x3a,0x94,0xbe,0x26,0xbd,0x53,0x40,0x15,0xfd, + 0x4c,0xf5,0x9,0x75,0x85,0x5b,0x85,0xa3,0x19,0xf6,0x19,0x55,0x19,0x6f,0x33,0x43, + 0x33,0x4f,0x66,0x49,0x67,0xf1,0xb2,0xfa,0xb2,0xf5,0xb3,0x77,0x64,0x4f,0xe4,0xb8, + 0xe7,0x7c,0xbd,0xe,0xb5,0x8e,0xb5,0xae,0x3b,0x57,0x2d,0x77,0x73,0xee,0xe8,0x7a, + 0xa7,0xf5,0xb5,0x1b,0xa0,0xd,0x31,0x1b,0xba,0x37,0x6a,0x6c,0xcc,0xdf,0x38,0xbe, + 0xc9,0x63,0xd3,0xd1,0xcd,0x84,0xcd,0x89,0x9b,0x7f,0xc8,0x33,0xc9,0x2b,0xcd,0x7b, + 0xbd,0x25,0x6c,0x4b,0x57,0xbe,0x72,0xfe,0xa6,0xfc,0xb1,0xad,0x1e,0x5b,0x9b,0xb, + 0x24,0xa,0xf8,0x5,0xc3,0xdb,0x6c,0xb7,0xd5,0x6c,0x47,0x6d,0xe7,0x6e,0xef,0xdf, + 0x61,0xbe,0x63,0xff,0x8e,0x4f,0x85,0xec,0xc2,0x6b,0x45,0x26,0x45,0xe5,0x45,0x1f, + 0x8a,0x59,0xc5,0xd7,0xbe,0x32,0xfd,0xaa,0xe2,0xab,0x85,0x9d,0xb1,0x3b,0xfb,0x4b, + 0x2c,0x4b,0xe,0xee,0xc2,0xec,0xe2,0xed,0x1a,0xda,0xed,0xb0,0xfb,0x68,0xa9,0x74, + 0x69,0x4e,0xe9,0xd8,0x1e,0xdf,0x3d,0xed,0x65,0xf4,0xb2,0xc2,0xb2,0xd7,0x7b,0xa3, + 0xf6,0x5e,0x2d,0x5f,0x56,0x5e,0xb3,0x8f,0xb0,0x4f,0xb8,0x6f,0xa4,0xc2,0xa7,0xa2, + 0x73,0xbf,0xe6,0xfe,0x5d,0xfb,0x3f,0x54,0xc6,0x57,0xde,0xa9,0x72,0xae,0x6a,0xad, + 0x56,0xaa,0xde,0x51,0x3d,0x77,0x80,0x7d,0x60,0xf0,0xa0,0xe3,0xc1,0x96,0x1a,0xe5, + 0x9a,0xa2,0x9a,0xf7,0x87,0xb8,0x87,0xee,0xd6,0x7a,0xd4,0xb6,0xd7,0x69,0xd7,0x95, + 0x1f,0xc6,0x1c,0xce,0x38,0xfc,0xb4,0x3e,0xb4,0xbe,0xf7,0x6b,0xc6,0xd7,0x8d,0xd, + 0xa,0xd,0x45,0xd,0x1f,0x8f,0xf0,0x8e,0x8c,0x1c,0xd,0x3c,0xda,0xd3,0x68,0xd5, + 0xd8,0xd8,0xa4,0xd4,0x54,0xd2,0xc,0x37,0xb,0x9b,0xa7,0x8e,0x45,0x1e,0xbb,0xf9, + 0x8d,0xeb,0x37,0x9d,0x2d,0x86,0x2d,0xb5,0xad,0xb4,0xd6,0xa2,0xe3,0xe0,0xb8,0xf0, + 0xf8,0xb3,0x6f,0xa3,0xbf,0x1d,0x3a,0xe1,0x7d,0xa2,0xfb,0x24,0xe3,0x64,0xcb,0x77, + 0x5a,0xdf,0x55,0xb7,0x51,0xda,0xa,0xdb,0xa1,0xf6,0xec,0xf6,0x99,0x8e,0xf8,0x8e, + 0x91,0xce,0xf0,0xce,0x81,0x53,0x2b,0x4e,0x75,0x77,0xd9,0x76,0xb5,0x7d,0x6f,0xf4, + 0xfd,0x91,0xd3,0x6a,0xa7,0xab,0xce,0xc8,0x9e,0x29,0x39,0x4b,0x38,0x9b,0x7f,0x76, + 0xe1,0x5c,0xce,0xb9,0xd9,0xf3,0xa9,0xe7,0xa7,0x2f,0xc4,0x5d,0x18,0xeb,0x8e,0xea, + 0x7e,0x70,0x71,0xd5,0xc5,0xdb,0x3d,0x1,0x3d,0xfd,0x97,0xbc,0x2f,0x5d,0xb9,0xec, + 0x7e,0xf9,0x62,0xaf,0x53,0xef,0xb9,0x2b,0x76,0x57,0x4e,0x5f,0xb5,0xb9,0x7a,0xea, + 0x1a,0xe3,0x5a,0xc7,0x75,0xcb,0xeb,0xed,0x7d,0x16,0x7d,0x6d,0x3f,0x58,0xfc,0xd0, + 0xd6,0x6f,0xd9,0xdf,0x7e,0xc3,0xea,0x46,0xe7,0x4d,0xeb,0x9b,0x5d,0x3,0xcb,0x7, + 0xce,0xe,0x3a,0xc,0x5e,0xb8,0xe5,0x7a,0xeb,0xf2,0x6d,0xaf,0xdb,0xd7,0xef,0xac, + 0xbc,0x33,0x30,0x14,0x32,0x74,0x77,0x38,0x72,0x78,0xe4,0x2e,0xfb,0xee,0xe4,0xbd, + 0xa4,0x7b,0x2f,0xef,0x67,0xdc,0x9f,0x7f,0xb0,0xe9,0x21,0xfa,0x61,0xe1,0x23,0xa9, + 0x47,0xe5,0x8f,0x95,0x1e,0xd7,0xfd,0xa8,0xf7,0x63,0xeb,0x88,0xe5,0xc8,0x99,0x51, + 0xd7,0xd1,0xbe,0x27,0x41,0x4f,0x1e,0x8c,0xb1,0xc6,0x9e,0xff,0x94,0xfe,0xd3,0x87, + 0xf1,0xfc,0xa7,0xe4,0xa7,0xe5,0x13,0xaa,0x13,0x8d,0x93,0x66,0x93,0xa7,0xa7,0xdc, + 0xa7,0x6e,0x3e,0x5b,0xfd,0x6c,0xfc,0x79,0xea,0xf3,0xf9,0xe9,0x82,0x9f,0xa5,0x7f, + 0xae,0x7e,0xa1,0xfb,0xe2,0xbb,0x5f,0x1c,0x7f,0xe9,0x9b,0x59,0x35,0x33,0xfe,0x92, + 0xff,0x72,0xe1,0xd7,0xe2,0x57,0xf2,0xaf,0x8e,0xbc,0x5e,0xf6,0xba,0x7b,0xd6,0x7f, + 0xf6,0xf1,0x9b,0xe4,0x37,0xf3,0x73,0x85,0x6f,0xe5,0xdf,0x1e,0x7d,0xc7,0x78,0xd7, + 0xfb,0x3e,0xec,0xfd,0xc4,0x7c,0xe6,0x7,0xec,0x87,0x8a,0x8f,0x7a,0x1f,0xbb,0x3e, + 0x79,0x7f,0x7a,0xb8,0x90,0xbc,0xb0,0xf0,0x1b,0xf7,0x84,0xf3,0xfb,0xe2,0xe6,0x1d, + 0xc2,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0x12,0x74,0x0,0x0,0x12, + 0x74,0x1,0xde,0x66,0x1f,0x78,0x0,0x0,0x18,0x6,0x49,0x44,0x41,0x54,0x78,0x5e, + 0xd5,0x9b,0x5b,0x74,0x5c,0xd5,0x79,0xc7,0x3f,0x69,0x24,0x8d,0x24,0xeb,0x2e,0x59, + 0xb6,0x7c,0xc3,0x36,0xc6,0x4e,0xc2,0x35,0x80,0x9d,0xc4,0xac,0x24,0x10,0x6a,0x28, + 0x74,0x25,0x25,0xd,0xa5,0xab,0x7d,0xe9,0x9b,0x93,0xb7,0x3e,0x75,0xad,0xe4,0xad, + 0x6f,0x59,0x49,0x5f,0xc8,0x5b,0x42,0x5e,0xda,0xbe,0xa5,0x40,0x13,0xc2,0x5a,0x26, + 0x69,0x20,0x69,0x48,0x4a,0xbb,0x30,0x36,0x60,0xc0,0x37,0xf9,0x7e,0xd5,0xc5,0xba, + 0xdf,0xa5,0x91,0xa6,0xff,0xdf,0xb7,0xcf,0x96,0x8e,0xc7,0xa3,0xd1,0xd8,0xc8,0x81, + 0xfe,0xe5,0x3d,0x73,0xce,0xde,0xe7,0xec,0xb3,0xf7,0x7f,0x7f,0xd7,0x7d,0xc6,0x15, + 0x79,0xc1,0x6e,0x33,0x46,0x47,0x46,0xec,0xf4,0xa9,0x53,0x36,0xbf,0xb0,0x60,0xdb, + 0xb6,0x6f,0xb7,0xb6,0xb6,0x36,0xab,0xa8,0xa8,0x48,0x5a,0x3f,0xdd,0xb8,0xed,0x4, + 0x5d,0x3c,0x7f,0xde,0x8e,0x7d,0xf8,0x91,0x4d,0xcf,0xce,0x5a,0x6e,0xc1,0x6c,0x6a, + 0x66,0xc6,0xee,0xd8,0xba,0xc5,0x1e,0xf9,0xd2,0x17,0xff,0x5f,0x90,0x54,0x99,0x7c, + 0xaf,0x3a,0xe0,0xfd,0xcc,0xa9,0x6e,0x3b,0x7c,0xf0,0xa0,0x8d,0x8c,0x8e,0x49,0x7a, + 0xf2,0xb6,0xa0,0xba,0x5,0x49,0xd1,0xf9,0x73,0xe7,0xed,0xec,0xd9,0x73,0x36,0x3d, + 0x3d,0x9d,0x5c,0xfd,0xe9,0xc5,0x6d,0x91,0xa0,0x85,0xf9,0x79,0x3b,0x79,0xe2,0xa4, + 0xbd,0xf7,0xee,0x7b,0x96,0xa9,0xcc,0x58,0xa6,0xba,0xc6,0x78,0x48,0xbe,0x42,0x9f, + 0xfa,0x7,0x51,0x55,0x99,0x8c,0x75,0xae,0x5b,0x6b,0x6b,0x3b,0x3a,0xac,0xa9,0xa9, + 0x51,0xa5,0xc9,0xea,0xeb,0xeb,0x3f,0x75,0x52,0xb5,0xea,0x4,0xe5,0x72,0xf3,0x76, + 0xfc,0xf8,0x31,0x3b,0xf8,0xf6,0x21,0xab,0xaf,0xab,0xb7,0xea,0x9a,0x6a,0x27,0x67, + 0x21,0x2f,0xfd,0x72,0x54,0x48,0x6c,0x2b,0x2c,0x37,0x9f,0xb3,0xb9,0xdc,0x9c,0x13, + 0xd6,0xd0,0xd0,0x60,0x5d,0x5d,0xeb,0xad,0xa3,0xa3,0xdd,0x5a,0x5b,0x5b,0x74,0x4f, + 0x8d,0xad,0x11,0x59,0x95,0x95,0xb7,0x4d,0xc0,0xcb,0xc6,0xaa,0x12,0x94,0xcb,0xe5, + 0xec,0x3,0xd9,0x9b,0xc3,0x87,0xe,0x5b,0x9d,0xc8,0xa9,0xad,0xad,0x75,0xc3,0xec, + 0x2c,0x2c,0xa2,0x82,0x87,0x4a,0x9a,0xf4,0x2d,0x61,0x59,0x98,0x5f,0xf0,0xfb,0xe6, + 0x17,0xe6,0xbd,0xad,0x46,0xe4,0x6c,0xde,0xb4,0xd1,0x36,0xa9,0xd4,0xd6,0x66,0x2d, + 0xab,0x3e,0x1a,0xd6,0xac,0xb1,0x8c,0x24,0xee,0x93,0xc0,0xaa,0x11,0x34,0xa7,0x49, + 0x1e,0x3a,0x74,0xc8,0x3e,0xfa,0xe8,0x98,0xc8,0xa9,0xb3,0xda,0xac,0xc8,0x91,0xaa, + 0x39,0xd0,0x9a,0xbc,0x8,0xf1,0x13,0xc8,0xe1,0x3b,0x9c,0xfb,0xe3,0x75,0x80,0x6a, + 0x71,0x8c,0x4,0x42,0xd8,0x82,0x8,0xab,0xaf,0x5f,0x63,0x9b,0x37,0x6f,0xb2,0xae, + 0xf5,0xeb,0xad,0xb5,0xad,0xc5,0xaf,0x87,0xf4,0xea,0xea,0x6a,0x3a,0xf8,0x93,0x60, + 0x55,0x8,0x9a,0x9b,0x9b,0xb3,0x37,0xff,0xf0,0x47,0x3b,0x27,0x8f,0x55,0x5f,0x5b, + 0xef,0x52,0x80,0x31,0x2e,0x8a,0xc0,0xd2,0x92,0x50,0xc5,0xf3,0x78,0xc0,0x70,0x2a, + 0x91,0x32,0x13,0xc1,0x92,0x2e,0xa9,0x22,0xea,0x59,0x95,0xa9,0xb2,0xd,0x5d,0x5d, + 0xb6,0x75,0xeb,0x66,0xeb,0xec,0xec,0xb4,0xaa,0xaa,0x2a,0x27,0x15,0xc9,0xba,0x9d, + 0x76,0xeb,0x63,0x13,0x34,0x33,0x33,0x6b,0xbf,0xfb,0xaf,0xdf,0xdb,0xe5,0xcb,0x97, + 0xa5,0xa,0xd,0x6e,0x37,0xbc,0xcb,0xd4,0xc4,0xfd,0x30,0x7e,0xf8,0xd3,0x92,0x47, + 0x26,0x75,0xf1,0x52,0xc9,0x56,0x72,0xb4,0x54,0x17,0xaf,0xa1,0xcf,0x79,0x97,0xac, + 0x5,0xab,0xcc,0x54,0xda,0x7a,0x49,0xd5,0x9d,0xdb,0xb7,0x59,0x7b,0x7b,0xbb,0x24, + 0xb6,0xd6,0xdb,0x21,0x6a,0xb5,0xc9,0xfa,0x58,0x4,0x4d,0x4d,0x4e,0xd9,0xeb,0xbf, + 0xfd,0xad,0xf5,0xf4,0xf4,0x5a,0x53,0x63,0x53,0x18,0xdc,0x75,0xe3,0x4b,0x4d,0xb4, + 0x10,0x49,0x43,0xbc,0xe2,0x6,0x72,0x8a,0xf5,0x93,0x7c,0x30,0x64,0x88,0xca,0xab, + 0x64,0xaa,0x32,0xa,0x3c,0x5b,0xa5,0x8a,0x9b,0x6d,0xd3,0xc6,0xd,0x2e,0xbd,0xab, + 0x69,0xaf,0x6e,0x99,0xa0,0xb1,0xf1,0x71,0x7b,0xf3,0xcd,0x3f,0xd8,0xd5,0xab,0x3d, + 0x6e,0x73,0xe8,0x6,0x82,0x2a,0x59,0x45,0x49,0x51,0x65,0x5,0xa2,0xcf,0x95,0x61, + 0xea,0x81,0x3c,0x6,0xce,0x64,0xa9,0x53,0xad,0x3f,0x99,0x8f,0x38,0x84,0x1b,0xc9, + 0x49,0x6a,0x52,0x75,0xe1,0x80,0xcf,0x48,0x2a,0x9f,0x78,0x46,0x3c,0x66,0xb3,0xc2, + 0x85,0x8d,0x22,0x6a,0xed,0xda,0xb5,0xd6,0xd7,0xdb,0x67,0x3,0x83,0x83,0xb6,0x79, + 0xcb,0x26,0xf,0x27,0x6e,0xc5,0x76,0xdd,0x12,0x41,0x7d,0x7d,0x7d,0xf6,0xc6,0xef, + 0x7e,0x6f,0xc3,0xc3,0xc3,0x2e,0xe2,0xac,0x24,0xdd,0x50,0xdc,0xf6,0x78,0x97,0x22, + 0x4b,0xaa,0x10,0x5c,0x35,0xc7,0x10,0x16,0x8,0xd2,0xd,0xba,0x24,0xda,0xa8,0xa5, + 0xc7,0xfb,0xd4,0x8b,0x10,0x91,0xae,0x2b,0x68,0x16,0x82,0x44,0x39,0x5d,0xfa,0xae, + 0xa8,0xa8,0xb4,0xac,0xa4,0xc8,0xed,0xa0,0x9c,0x44,0x85,0xec,0xd9,0xcc,0xec,0x8c, + 0xad,0x5b,0xb7,0xce,0xee,0xbd,0xf7,0x1e,0x85,0x1e,0x75,0xe1,0xb6,0x32,0x71,0xd3, + 0x81,0x6,0x1e,0xe6,0xcd,0xb7,0xfe,0xd7,0x8e,0x9e,0x3e,0x6d,0x55,0x1a,0x44,0x55, + 0x12,0xab,0xb8,0xf4,0xe8,0x18,0xef,0x45,0xc0,0x97,0xcd,0x66,0xbd,0x7e,0x5e,0x5e, + 0x9,0x6f,0xe6,0xf6,0xc3,0xbd,0xda,0x82,0x5f,0xcb,0xc0,0x99,0xa4,0x1f,0xfb,0x9f, + 0x90,0x9a,0x34,0x87,0xc5,0xea,0x96,0x1a,0x40,0xa8,0xab,0x54,0x5f,0x3c,0x3b,0x23, + 0x43,0x4e,0xd,0x76,0x71,0x62,0x62,0xdc,0x67,0x37,0x33,0x37,0x6b,0x83,0x92,0xa2, + 0xf7,0xdf,0x3f,0x62,0x47,0x8f,0x1e,0x4b,0xc8,0x2c,0x1f,0x37,0x4d,0xd0,0x89,0xee, + 0x53,0x76,0xf8,0xe8,0x71,0xcb,0x55,0x4a,0x5c,0x35,0xa0,0x79,0x79,0x30,0x87,0x9e, + 0x1b,0x6,0x37,0x63,0xa3,0x4a,0x2d,0xa6,0xa6,0xa7,0x74,0xc6,0xa0,0x15,0x49,0x4b, + 0x92,0xb8,0x60,0x7e,0x81,0xe0,0x30,0x27,0xcf,0xb4,0x20,0xcf,0x14,0x66,0x1a,0x54, + 0xcf,0xf,0x17,0xe1,0x87,0x8b,0x75,0xf4,0xca,0xdf,0xd2,0x79,0x2c,0x4b,0x75,0x20, + 0x28,0x2e,0x64,0x65,0xb3,0xa,0x34,0x15,0x3b,0xe1,0x5d,0xc7,0x34,0x16,0x38,0x61, + 0x91,0x3e,0xf8,0xe0,0x43,0xbb,0x76,0xed,0xda,0x4d,0x91,0x74,0x53,0x4,0xe1,0x76, + 0x7f,0xff,0xe6,0x1f,0xa5,0x5a,0xa3,0x56,0x45,0x9c,0xa3,0xba,0x59,0xd,0x22,0x4e, + 0x92,0xc7,0x5e,0xba,0x7c,0xc9,0x8e,0x7c,0xf0,0x81,0x9d,0x39,0x73,0xd6,0x26,0x26, + 0xc7,0xc5,0x61,0x95,0xaf,0x6c,0x65,0x25,0x5,0x35,0x93,0x97,0xd3,0x75,0x31,0x2f, + 0x43,0x22,0xf3,0x1e,0x24,0xa,0x48,0x93,0xda,0xb,0x66,0x5e,0x6,0x82,0x9a,0x71, + 0x47,0x95,0x8c,0x76,0x55,0x75,0xc6,0xf3,0xbc,0xe1,0xe1,0x11,0x5f,0x30,0x1e,0xc8, + 0xb3,0xc7,0x27,0x26,0xec,0xbf,0x25,0xfd,0xb9,0x18,0x9f,0x95,0x81,0xb2,0x9,0x62, + 0x32,0x7d,0xfd,0xfd,0xd6,0xa7,0x15,0x58,0xa3,0x15,0xaa,0x55,0xa0,0x32,0x3f,0x33, + 0x6d,0xb3,0x4c,0x50,0x3,0x70,0x55,0x81,0x27,0xbe,0x51,0x1f,0xd6,0x93,0x6,0x95, + 0x30,0x78,0xc5,0x2c,0x1a,0x24,0x39,0x18,0x12,0xc5,0x25,0xac,0x38,0xb6,0x88,0x68, + 0x9b,0x15,0x26,0xaa,0x8e,0xf6,0xc,0x40,0x96,0x93,0xef,0x27,0xe1,0x2b,0xc2,0x4f, + 0x53,0x75,0x1c,0xd6,0x54,0x55,0x7b,0x7c,0x34,0x3d,0x3d,0x63,0x43,0x23,0xc3,0x2e, + 0x41,0xb4,0xcc,0xa1,0xe2,0x2a,0xf4,0x4b,0xac,0x36,0x22,0xdb,0x19,0x9f,0xb1,0x12, + 0xca,0x36,0xd2,0xac,0xf4,0xaf,0x7e,0xf3,0x86,0x75,0x9f,0x3e,0x63,0x93,0x53,0x53, + 0x56,0xa9,0x89,0xd5,0x29,0x15,0x68,0x6c,0x68,0xc,0xd1,0xad,0x6,0x17,0x88,0x9, + 0x64,0xd2,0x2d,0x83,0xcd,0x2b,0x8b,0xe7,0x1,0x4b,0x79,0x95,0xae,0x9,0xff,0x2, + 0x79,0xfa,0xe3,0xfa,0x60,0xdc,0x55,0x4f,0x9b,0x93,0x9c,0x59,0xbc,0x27,0x70,0xc4, + 0x7,0x34,0x27,0xc3,0xf5,0x3a,0xc0,0x41,0x5e,0x1e,0xaa,0xca,0xc7,0x30,0x95,0x48, + 0xce,0xbc,0x2,0x4c,0xd4,0x7b,0x76,0x4e,0x6a,0x9d,0x98,0x1,0xc8,0x67,0x1e,0xf7, + 0x3f,0x70,0xaf,0x7d,0xf9,0x91,0x47,0x7c,0x7c,0x2b,0xa1,0x6c,0x9,0x82,0x94,0x53, + 0xa7,0x4e,0xc9,0x8,0x67,0x15,0x2d,0xcb,0x10,0xcb,0x1b,0x64,0x6b,0xb2,0x3e,0x31, + 0x6,0xa0,0x29,0x3a,0x19,0x8c,0x9f,0x7,0xe3,0x52,0xfd,0x5c,0x8,0x73,0xe1,0x98, + 0x76,0x89,0xb7,0x13,0xa8,0xe2,0x6d,0x21,0x1a,0xc6,0xeb,0x78,0xc,0xa3,0x49,0x2, + 0x52,0x8d,0x9c,0x92,0xd9,0x5,0x22,0x69,0xbf,0x1e,0x29,0xd4,0x1d,0x81,0xa7,0xe4, + 0x23,0x90,0xe3,0xcf,0x53,0x99,0x9c,0x9c,0xbc,0x8e,0x9c,0x19,0xf6,0xa0,0x12,0x72, + 0xe2,0x2d,0xd4,0x1f,0x3b,0x76,0x22,0xa8,0x5e,0x19,0x28,0x8b,0x20,0xc4,0xf3,0xec, + 0xd9,0xb3,0xfe,0x90,0x1a,0xd,0x4,0x35,0x61,0x75,0x29,0xac,0x36,0x13,0x98,0x9f, + 0x93,0x8,0xab,0x9d,0xe2,0x5e,0x4b,0xea,0xe2,0x50,0x3b,0xee,0x7e,0x74,0x6c,0x5c, + 0x1,0x65,0x9f,0x1b,0xf0,0xc5,0xd1,0xa,0x7e,0xf,0x1f,0x0,0xc9,0x51,0xa9,0x12, + 0x49,0x48,0x3,0xe9,0x5,0x6d,0x78,0xc0,0x9c,0xbc,0x91,0x13,0xe6,0xa4,0x43,0x6b, + 0xe8,0x81,0xb1,0x64,0x15,0xff,0x4c,0x4e,0x4c,0xda,0xc8,0xe8,0xa8,0x93,0xc3,0xb8, + 0x66,0x21,0x47,0xf7,0x1,0xae,0x43,0x52,0xe9,0x9b,0xb6,0x9,0x5d,0x3b,0x38,0x34, + 0xe4,0xe3,0x5e,0x9,0x65,0x11,0x34,0x23,0x9d,0x7e,0xff,0xbd,0x23,0x3e,0x18,0x6, + 0x59,0xa1,0x8e,0x3d,0x20,0xc,0x73,0xf4,0xe1,0x6,0x1d,0x8f,0xc6,0x2f,0x99,0x80, + 0x54,0x8e,0xe0,0x8d,0xc9,0xe,0xc,0xe,0x59,0xb7,0xf4,0xff,0x6a,0xff,0xb5,0xd0, + 0xc6,0x60,0x75,0x20,0x7b,0xaa,0x9,0x66,0x9c,0x8,0x6c,0xdc,0xc1,0x83,0x7,0xe5, + 0x92,0xdf,0xb7,0xfe,0x6b,0xfd,0x7e,0xd,0xea,0x5b,0x23,0x49,0xad,0x22,0xc8,0xd3, + 0x39,0xb9,0xd9,0xac,0x6c,0xdf,0x9c,0x8,0xa3,0x9d,0xfe,0x99,0xf0,0xa8,0x2,0x57, + 0x26,0x8c,0x9d,0x9b,0x9d,0x9d,0x93,0xb7,0x54,0xc,0xe4,0x4f,0xa,0xe4,0xa4,0x41, + 0x6d,0xaf,0x82,0xc8,0x72,0x36,0xec,0xca,0x22,0x8,0xb6,0x2f,0x5c,0xbc,0xe8,0xaa, + 0x34,0xa3,0x4e,0xd9,0x9a,0x40,0xe4,0x63,0x61,0xa0,0x90,0xc1,0x24,0x19,0x8e,0x4e, + 0x7d,0xa5,0x10,0xe3,0xa3,0x1f,0x1d,0xb5,0xf7,0x8f,0x1c,0x91,0xce,0xcc,0xdb,0xdd, + 0x3b,0x77,0xda,0x9d,0xdb,0xb6,0xc2,0x9c,0xdf,0x97,0xd1,0x75,0x59,0x11,0x54,0xa3, + 0x51,0x54,0xca,0xe8,0x33,0xf9,0x71,0xc5,0x2f,0x63,0xe3,0x63,0xfe,0xac,0xc5,0x69, + 0x25,0xfd,0x21,0x59,0xd9,0xea,0x1a,0xb9,0xf1,0x90,0xd1,0x2f,0x68,0x41,0x70,0xe3, + 0x44,0xf5,0x3c,0x1b,0x42,0x5c,0x72,0xb4,0x58,0x81,0x9a,0x1b,0xc9,0x1,0x8c,0xf5, + 0xe2,0x85,0xb,0x8b,0x12,0x56,0xa,0x2b,0x12,0xc4,0x40,0xcf,0x9e,0xf,0xdb,0xa3, + 0x4,0x7d,0x19,0xd,0xb4,0x41,0x81,0x60,0x53,0x63,0xa3,0x1b,0x68,0xdf,0x9,0x5c, + 0x13,0xf6,0x7e,0x18,0x34,0x13,0xa9,0x14,0x1,0x7c,0xa3,0xe,0xc3,0x43,0xc3,0x52, + 0xad,0xab,0x7e,0x7f,0xbd,0x92,0x4a,0xa,0xb3,0x61,0x2,0xc4,0x42,0xb3,0xb,0x2a, + 0x39,0x6c,0x4c,0x85,0xad,0x6d,0xef,0xb0,0x87,0x1f,0x7e,0xd8,0xee,0xbf,0xff,0x1, + 0xa5,0xa,0x9d,0x3e,0x11,0x32,0x79,0x97,0x14,0xc8,0x91,0xb4,0x60,0x87,0xb0,0x23, + 0x75,0x7a,0x1e,0x94,0xc,0x8f,0x8c,0xf8,0x44,0xb9,0xce,0xd,0xb2,0x4b,0x4e,0xc0, + 0xd,0xe4,0x24,0xa7,0xa8,0xee,0xd5,0xde,0x5e,0xb7,0x51,0x2b,0x61,0x45,0x2f,0x46, + 0x14,0xfa,0xe2,0x4b,0x2f,0x2b,0xe7,0xea,0xb5,0xe6,0xd6,0x56,0xcb,0xd6,0xd7,0x79, + 0xd6,0xde,0x20,0x23,0x9d,0xd1,0xc0,0x31,0xa6,0x74,0x90,0x16,0xe7,0x78,0x8c,0xda, + 0xb1,0xc2,0x33,0x73,0x33,0xbe,0x81,0xc6,0xc6,0x17,0xc4,0x85,0xcd,0x31,0xdd,0x43, + 0xcc,0x93,0x20,0x48,0x1d,0x21,0x0,0xd1,0xb0,0x4c,0xbe,0x6c,0xd8,0xbc,0x93,0xc3, + 0x2a,0x56,0xd8,0x24,0xae,0x7b,0x6c,0xd4,0xb2,0xea,0x47,0x9c,0xda,0x94,0x8c,0xb1, + 0x7b,0x52,0xf5,0x49,0x84,0xce,0x3e,0x52,0x30,0xe6,0xa1,0xaf,0x30,0xa9,0x82,0xa9, + 0x25,0xa7,0x78,0xb3,0x59,0x99,0x8a,0x6f,0x3e,0xf3,0x97,0xb6,0x65,0xf3,0x26,0x27, + 0x7c,0x39,0x94,0x24,0x88,0xa6,0x63,0xc7,0x4f,0xd8,0x2b,0xaf,0xfc,0x52,0x19,0x73, + 0xbb,0xe5,0xf4,0xe4,0x21,0x65,0xf0,0xd5,0xb2,0x9,0xed,0xad,0x2d,0xd6,0x86,0xe4, + 0x24,0xf9,0x16,0x9b,0xf2,0x8c,0x80,0xd5,0xe6,0xbe,0xfc,0xbc,0xdc,0xb7,0x26,0x40, + 0xb6,0x7d,0xfd,0x38,0xc3,0x89,0x5f,0xcd,0x75,0x3a,0x8,0x74,0xea,0x7a,0x95,0xe0, + 0x9,0x71,0xfb,0x92,0x14,0xf5,0x4b,0xaa,0x70,0x6d,0x60,0xd0,0xae,0xf4,0xf,0xd8, + 0x94,0xea,0x1a,0x5b,0xdb,0x64,0xb7,0x2a,0x6d,0x6e,0x62,0xcc,0xea,0x25,0x61,0x9d, + 0x4a,0x42,0xdd,0x5b,0xb9,0x5a,0x85,0x9e,0xc0,0x75,0xd2,0x73,0xdd,0x61,0x38,0x21, + 0x1c,0x78,0xea,0xc9,0x27,0x7c,0xcb,0x84,0x64,0x7b,0x39,0x94,0x54,0x31,0x8c,0x5f, + 0x7f,0x5f,0xbf,0xab,0xd2,0xba,0xce,0x4e,0xcf,0xaf,0xa6,0xa6,0x66,0x6c,0x42,0x93, + 0x1f,0x99,0x99,0xb3,0x6b,0x23,0xa3,0x76,0x55,0xed,0xbc,0xa1,0x38,0x7b,0xee,0x9c, + 0x9d,0x97,0x5e,0xb3,0x2f,0xd4,0x2f,0x43,0x4c,0xd4,0xea,0xde,0x2c,0xb1,0x57,0xd8, + 0x17,0x52,0xd,0x32,0x7d,0x54,0x91,0x74,0x80,0xa4,0x32,0x5b,0x43,0x48,0x40,0xb4, + 0x9d,0x64,0xff,0x4e,0x4e,0xf0,0x2e,0xd3,0xca,0xa9,0xfa,0xaf,0xd,0xda,0xf9,0x4b, + 0x57,0xec,0xa2,0xfa,0x9d,0xd4,0xf9,0x98,0xc2,0x8d,0x19,0x79,0xcc,0x6c,0xdd,0x1a, + 0xab,0x96,0x2d,0xc2,0xce,0xe1,0x31,0xfd,0xde,0x25,0x7e,0x56,0x4,0xcf,0x98,0xa2, + 0x2f,0xf5,0x59,0xa,0x25,0x25,0xe8,0x8c,0x5c,0x7b,0xb7,0x72,0xaf,0x6b,0xf2,0x2e, + 0x8d,0x8d,0x4d,0x36,0xae,0xe,0xfb,0x47,0xc7,0x2d,0x57,0x53,0xeb,0x62,0x3d,0xd2, + 0x7b,0xd5,0xfa,0x2e,0x5d,0xb2,0x19,0x91,0xc1,0xde,0x71,0x8d,0x26,0x4a,0x4c,0x52, + 0xa3,0xc9,0xa3,0x86,0xd8,0xa7,0xc6,0xc6,0x6,0xcf,0x8b,0x20,0x17,0x49,0xe3,0x69, + 0xe4,0x4b,0xc4,0x2d,0x48,0x1b,0x93,0x82,0x48,0x57,0x29,0x12,0x5b,0x57,0x3f,0x82, + 0xc7,0xbc,0xd,0xc,0x8d,0x58,0xf,0x64,0xcb,0x8,0x4f,0x4f,0x4d,0x5a,0xb5,0xfa, + 0xac,0xd1,0x62,0xe1,0xfe,0xea,0xb4,0xb4,0x6d,0x5a,0x79,0x52,0x8b,0xb4,0x84,0x80, + 0x70,0x9a,0x54,0x5e,0xd7,0xb6,0x24,0x57,0xec,0x65,0xed,0xd9,0xb3,0xdb,0xee,0xba, + 0xeb,0x4e,0xdf,0xa9,0x5c,0xe,0x25,0x9,0x7a,0xfb,0xed,0x83,0xee,0xe,0x61,0x9a, + 0x9c,0xa,0x4c,0xa8,0xe3,0x33,0xe7,0x2f,0xd8,0x8c,0xc,0xe3,0xb4,0xea,0x47,0xe5, + 0xe1,0xa2,0xd1,0x66,0xb0,0xac,0xc,0x9e,0xc4,0x8d,0xba,0x26,0xe,0x61,0x10,0xb5, + 0xbe,0x6b,0xbd,0xb5,0x49,0x3d,0x20,0xca,0xb7,0x3a,0xf4,0x54,0x4f,0x39,0x12,0x9b, + 0x4,0x39,0xc,0xc5,0xdf,0x7e,0xe8,0x7b,0x7c,0x62,0xca,0x6,0x94,0x12,0x8c,0x8f, + 0x4f,0xa8,0xe,0x8f,0x27,0x4b,0x24,0x62,0xa6,0xe5,0xc2,0xb1,0x1f,0x4d,0x6b,0xea, + 0xac,0xb3,0xad,0x4d,0xf7,0x86,0xbe,0xd2,0x58,0xa4,0xa1,0x48,0x7d,0x54,0x43,0x24, + 0xef,0xb3,0x9f,0xd9,0x65,0x77,0xde,0xb9,0xdd,0x76,0xee,0xbc,0xcb,0xeb,0x8a,0xa1, + 0x24,0x41,0xbf,0x79,0xfd,0xd,0x19,0x59,0x49,0x8c,0xc8,0x60,0xf2,0x78,0x88,0x13, + 0xc7,0x8f,0xdb,0xb9,0x73,0xe7,0xad,0x59,0x83,0xdb,0x72,0xc7,0x1d,0x52,0xbf,0x35, + 0xbe,0xe5,0xc1,0xc3,0x89,0x8d,0xa2,0x9c,0x33,0xe9,0xe9,0xa9,0x69,0x5f,0x7d,0x62, + 0x1a,0xa2,0xdc,0x76,0x11,0xb4,0x6d,0xdb,0x36,0x6b,0x6b,0x6f,0x73,0x32,0x98,0x0, + 0xb7,0x70,0x1c,0xe2,0xa8,0x40,0x10,0x24,0x8f,0x4b,0xbd,0x71,0xdf,0x4,0xa0,0x95, + 0x2e,0x95,0x59,0xef,0x73,0x42,0xd2,0x5a,0x2b,0x15,0x6d,0x94,0xfd,0xf3,0x97,0x91, + 0x89,0x3a,0x82,0x25,0xf9,0x48,0x10,0x4f,0xc3,0x90,0x2,0x92,0x3a,0x92,0x6c,0xde, + 0xf0,0x6e,0xd3,0x1c,0x3e,0xff,0xc0,0xfd,0xa1,0xb2,0x8,0x4a,0x12,0xf4,0xca,0x2f, + 0x5f,0x95,0x9b,0x97,0xdd,0xd0,0x1f,0x3,0xe9,0xeb,0xef,0xb3,0x83,0xef,0x1c,0xb2, + 0x2d,0x5b,0xb6,0xd8,0xd6,0xad,0x77,0xb8,0xea,0x40,0x4a,0x20,0x26,0x3c,0x1b,0x6f, + 0xb2,0xb4,0x19,0x16,0x74,0x9d,0x50,0x81,0xcd,0xb5,0xab,0x57,0xaf,0xba,0x71,0xdc, + 0xbc,0x61,0xa3,0xbf,0xa3,0x27,0xc8,0xb,0x17,0x41,0x50,0x78,0x4f,0xc6,0x68,0xb8, + 0x7,0x42,0x49,0x84,0x6b,0x14,0xf7,0x90,0x82,0xf0,0xea,0x1a,0x49,0xae,0xc5,0x76, + 0x89,0x20,0xb6,0x4d,0x66,0x66,0x15,0x35,0xfb,0xa3,0x79,0x72,0xcc,0xd2,0x92,0xe9, + 0x24,0x5f,0x7e,0xe0,0xd7,0x24,0x2c,0x25,0xf5,0xd8,0x44,0xec,0x2a,0x6f,0x4d,0x1e, + 0xd9,0xfb,0xa5,0x50,0x59,0x4,0x25,0x8d,0x74,0x4e,0xab,0xe7,0xfd,0x8b,0x0,0xd4, + 0x66,0x4c,0xe9,0xc2,0xfd,0xf7,0xdd,0xeb,0x65,0x5d,0x67,0x87,0x8b,0xfd,0x9c,0x44, + 0xde,0xbd,0x88,0x6,0xcc,0xec,0x48,0x60,0x5b,0x5a,0x9a,0xfd,0x5,0x20,0x9b,0xe9, + 0x44,0xc1,0xbc,0xbe,0x61,0x47,0x6f,0xc7,0x8e,0x1d,0x3e,0xa8,0xab,0x3d,0x3d,0x76, + 0xe8,0xf0,0x61,0x1b,0x91,0x91,0xcf,0x29,0x6,0x9a,0xd2,0xbd,0x39,0xf5,0xc5,0xb, + 0x43,0xfa,0x80,0x20,0x54,0xba,0xb9,0xb9,0xd9,0xfb,0x42,0x15,0x33,0x62,0xa2,0x49, + 0x52,0x53,0xaf,0xfe,0x83,0xc4,0xf1,0x76,0x36,0x48,0x2e,0x8,0xdf,0xc9,0xec,0x17, + 0xc1,0xb9,0x88,0x51,0x8c,0x95,0x6e,0xe6,0x7e,0xe6,0x84,0xd4,0xb2,0x78,0xa5,0x50, + 0x52,0x82,0x5e,0x7e,0xf9,0xe7,0xde,0x27,0x6,0x94,0x8e,0x10,0xff,0x66,0xd,0x78, + 0x74,0x64,0xcc,0x2e,0xc9,0x38,0x33,0x41,0x5e,0xee,0x35,0x48,0xcd,0xe2,0x58,0x8, + 0xe0,0xd0,0xf4,0x9a,0xea,0xac,0x56,0x67,0x83,0xdb,0x1c,0xec,0x16,0x36,0x89,0xc4, + 0x11,0x29,0xe8,0xbf,0x36,0x60,0x7d,0x7d,0xbd,0x8c,0xd4,0x1a,0xa4,0x76,0x19,0x79, + 0xa4,0x2a,0x49,0x53,0x7b,0x4b,0xa3,0x35,0x8b,0xd0,0x79,0xb9,0x76,0x77,0xf3,0x55, + 0x5a,0x3f,0x4d,0xc4,0xc9,0x17,0x69,0x78,0x40,0xfa,0xc6,0x7e,0x90,0x94,0x4e,0x4e, + 0x4e,0x48,0x5d,0xdb,0x25,0x45,0x4b,0x44,0x39,0x22,0x11,0x7e,0x75,0x22,0x39,0x9, + 0xa8,0x8b,0x53,0x6e,0x69,0x69,0xb1,0xd,0x1b,0xba,0xec,0xf1,0xc7,0x1e,0xf5,0xf3, + 0x62,0x28,0x29,0x41,0xe,0x75,0xc6,0x8a,0x46,0x63,0xdb,0xdb,0xd3,0x6b,0x27,0x4e, + 0x9e,0x94,0x4b,0xbf,0xe8,0x51,0xec,0xa4,0x26,0xcf,0x4,0x10,0x79,0xf6,0x61,0xa6, + 0x94,0x27,0x1d,0x3f,0x7e,0xd2,0x7e,0xf1,0xca,0xaf,0xec,0xb5,0xd7,0xde,0xb4,0xa3, + 0xc7,0xba,0xdd,0x95,0xb7,0xb4,0x34,0x39,0x9,0xd5,0x52,0x99,0xb6,0xf6,0x56,0xeb, + 0x5c,0xd7,0xe9,0x6,0xb6,0xa7,0xaf,0xcf,0xc6,0x25,0x81,0xd9,0xb6,0xe,0xab,0x58, + 0xd3,0x64,0xc3,0x18,0x77,0x26,0xa6,0x79,0xb1,0xc2,0x9e,0x8d,0x6b,0xc,0x18,0xf3, + 0x68,0xd4,0x91,0xe4,0xcb,0x97,0x2f,0xd9,0x80,0xe2,0x23,0xce,0x13,0xd,0xf,0xc4, + 0xa4,0xc8,0xf1,0x15,0x5b,0xe,0xf1,0xda,0xe5,0xe5,0xc3,0xb1,0x22,0x41,0xb0,0xed, + 0x9b,0xef,0x8a,0x53,0x90,0x18,0x62,0x9e,0x11,0xad,0x9e,0xc3,0x9f,0x1f,0xb6,0x1b, + 0xc2,0x76,0x5,0xae,0x3c,0xe3,0x2b,0x7b,0xe1,0xc2,0x59,0xd9,0xab,0x83,0xf6,0xea, + 0xab,0xff,0x69,0xbf,0x54,0xe9,0x57,0xa0,0x87,0xda,0x65,0x6b,0x6b,0x5c,0xbc,0xdd, + 0xb3,0x6d,0xdc,0xe8,0x1e,0x30,0x9f,0x9b,0xf5,0xad,0x5b,0x62,0xac,0x7e,0xb9,0x76, + 0xc9,0x8a,0x9e,0x27,0x9b,0x82,0xd4,0xe8,0x5a,0x27,0x1,0xe9,0xd1,0x5c,0xf0,0x76, + 0x2c,0x6,0xc1,0x6a,0xab,0x22,0x7b,0xda,0xaf,0x93,0x9e,0x14,0x96,0x78,0x4b,0xfd, + 0x25,0x84,0x40,0x2a,0x36,0x6f,0xa5,0x38,0xa8,0x24,0x41,0x1e,0x61,0x26,0x3,0xc4, + 0xf0,0xf6,0x2a,0x7f,0x99,0x9c,0x9c,0xf6,0xa0,0x8e,0xa4,0x11,0xc9,0x9a,0x96,0xb8, + 0x47,0x9b,0x51,0xab,0xc9,0x2f,0xad,0xe8,0xac,0xd4,0xa0,0xcf,0xfa,0x7b,0x2f,0xd9, + 0xeb,0xbf,0xf9,0x9d,0xfd,0xc7,0xcf,0x5f,0xb5,0xb3,0x67,0xce,0xb9,0x24,0x79,0x1e, + 0x25,0xb5,0x68,0x92,0x88,0xf3,0x3a,0x26,0x27,0x6f,0x75,0xe9,0xd8,0x47,0x36,0x74, + 0xf5,0x8a,0xd5,0xca,0x5b,0xd2,0x37,0x4,0xf0,0x52,0x20,0xbc,0xd,0x51,0x87,0x2a, + 0x78,0x2d,0x9e,0x87,0xda,0x6e,0xd8,0x10,0x5e,0xed,0x84,0x1d,0x48,0x1f,0xae,0xc0, + 0x41,0x42,0x80,0x7f,0x6,0xa0,0x66,0xe1,0x2f,0x39,0x57,0x5f,0x93,0xf2,0xb0,0xfc, + 0x40,0x62,0x9d,0x24,0xb9,0x14,0x4a,0x12,0xc4,0xaf,0x2d,0xfc,0xf5,0x89,0x6,0xc1, + 0x36,0x7,0x2e,0x1b,0x77,0x1f,0x56,0x55,0x45,0x7f,0x33,0x32,0xd2,0x13,0xf2,0x38, + 0xe2,0xc5,0x25,0x89,0xf4,0x0,0xef,0xd6,0x4a,0xcc,0x53,0x93,0x51,0x7c,0x44,0xb4, + 0x6c,0xf6,0x3f,0x6f,0xbd,0x65,0x2f,0xbf,0xf8,0x73,0x3b,0x73,0xfa,0xac,0x4b,0x12, + 0xb6,0x4b,0x6,0xd0,0x37,0xde,0x6a,0x45,0xc2,0xd4,0xe0,0x35,0x9b,0x19,0x1a,0xb0, + 0xf5,0x6a,0x23,0xe0,0xcc,0x64,0xaa,0xad,0x4a,0x44,0x41,0x8c,0x5b,0x12,0x7d,0xc7, + 0xf7,0xf6,0x24,0xae,0x90,0x8c,0x64,0x2f,0x92,0xb3,0x48,0x52,0x44,0xa4,0x63,0x49, + 0x7a,0x22,0x66,0x25,0x35,0x44,0xf1,0xf,0x3e,0xf8,0x80,0xdd,0xfd,0xb9,0xcf,0x26, + 0xb5,0xc5,0x91,0xf9,0x27,0x21,0x39,0x2e,0x82,0xa,0x9f,0xfc,0x88,0x6c,0xd,0x46, + 0x93,0x37,0x2,0x31,0xac,0xf,0x6b,0xc5,0x9b,0xa,0x5,0x79,0xa,0x5,0x1a,0x1b, + 0x1a,0x16,0xa3,0x63,0x32,0x7b,0xec,0x4c,0x73,0x73,0x8b,0x88,0xcb,0x58,0x7b,0x5b, + 0xb3,0x13,0x7b,0x5e,0x1,0x66,0x6f,0x6f,0xbf,0xe2,0xa7,0x2d,0xd6,0x2a,0x63,0x3f, + 0x2b,0x69,0x40,0x2,0x6a,0x64,0x9b,0x3c,0x6e,0xd2,0xb3,0xd6,0xca,0xe8,0xe2,0xfe, + 0x3d,0x91,0x95,0xd4,0x42,0x22,0xb6,0x1a,0x77,0x3e,0x3b,0x1b,0xd2,0xa,0x2,0x47, + 0xdf,0x91,0x5c,0x12,0x9d,0x4,0x90,0x12,0x54,0xe,0x79,0x71,0x52,0xb8,0x36,0x34, + 0xfa,0x7d,0x38,0x1c,0xc6,0xf2,0x35,0x19,0xe6,0x5d,0x3b,0x77,0x7a,0xda,0x53,0xa, + 0x25,0x9,0x62,0x95,0x31,0xbc,0x18,0x66,0x1e,0x43,0x2c,0xc3,0x2a,0x46,0x30,0x78, + 0x9e,0x3e,0x2b,0xaf,0x43,0x16,0x4e,0xba,0xc1,0xa6,0x1a,0xb9,0x55,0x73,0x53,0xb3, + 0x75,0x75,0x6d,0x50,0x30,0xb6,0xd5,0xda,0xd6,0x76,0xba,0x2a,0xa1,0x1a,0x3,0x3, + 0x43,0x4a,0x3e,0x87,0x6c,0xd7,0xae,0x1d,0xbe,0x8a,0xec,0x6,0xf0,0xc6,0x83,0xc1, + 0xb3,0xef,0x84,0x84,0x70,0x2f,0x92,0x5b,0x5d,0x99,0xb7,0xac,0x2,0xf8,0xaa,0xa, + 0x4d,0x38,0x2f,0xdb,0x23,0x82,0x9c,0x14,0xb8,0x8b,0xb3,0x5e,0xe,0x5,0xed,0xdc, + 0xe7,0xce,0x46,0x63,0x7b,0xec,0xd1,0xaf,0xda,0xdd,0x77,0x7f,0xce,0xcd,0xc1,0x4a, + 0x28,0x79,0x5,0x83,0xec,0x54,0xbc,0x53,0x9b,0xfc,0x38,0x80,0x95,0x46,0x7a,0x90, + 0x12,0x2f,0x7a,0x0,0x51,0x2e,0xe4,0xc,0xc8,0x75,0x8f,0xcb,0xbb,0xb8,0x3d,0x4a, + 0xec,0x6,0xee,0x78,0x4e,0x1e,0xaa,0x55,0xf1,0xcc,0xae,0xcf,0x7c,0xc6,0x9e,0x78, + 0x72,0x9f,0x3d,0xf5,0xf4,0x3e,0x91,0xd5,0x6a,0x97,0x2e,0x5e,0x71,0x89,0xc3,0xce, + 0xe1,0x9d,0xf8,0xb1,0x15,0xe9,0x4a,0xbf,0xa4,0x14,0xa9,0xcd,0x54,0x48,0xb2,0x12, + 0xaf,0x5,0x79,0x64,0xeb,0x8c,0x1,0x69,0xaa,0x96,0x38,0x31,0x8e,0x1b,0x48,0x48, + 0xfe,0x96,0x10,0xce,0x18,0xb,0xc4,0x13,0x64,0x3e,0xf6,0xd5,0xaf,0xb8,0x5a,0x51, + 0x57,0xe,0x56,0xa4,0x10,0x4f,0xb1,0x63,0xc7,0x76,0x17,0xed,0x46,0x4d,0x80,0xc9, + 0xc4,0x91,0xf1,0x8,0xf6,0x84,0xb0,0x3d,0xd4,0x30,0x39,0x5c,0x30,0x27,0x18,0xed, + 0x35,0x8a,0x8f,0x20,0x75,0x4a,0x89,0xe6,0xf8,0x18,0x2f,0xf0,0xf2,0xca,0xc9,0xba, + 0xec,0xbe,0xfb,0xee,0xb1,0x7a,0xe5,0x52,0x4c,0x9c,0x7b,0x91,0x38,0x12,0x5c,0xae, + 0x27,0x5e,0x1a,0x1f,0x1f,0x93,0xb7,0xe2,0x7d,0x5b,0x78,0xa,0x5e,0xd,0xc9,0xd, + 0x13,0x45,0x92,0xc2,0xb6,0x6f,0x0,0x4f,0x8e,0xe3,0x9,0x7f,0xe1,0x74,0x89,0x1c, + 0x52,0x1e,0x5e,0x30,0x3c,0xfa,0xd5,0x47,0x5d,0x72,0xca,0x25,0x7,0xac,0x48,0x10, + 0x13,0xb8,0x43,0xa9,0x5,0x1e,0xa,0xe3,0x1b,0xa5,0xc3,0xb,0x12,0xa4,0x82,0x61, + 0x46,0x97,0x89,0xb6,0xf9,0xc1,0x0,0xf1,0x11,0xf5,0x48,0x88,0xbf,0x5,0xc1,0x95, + 0xcb,0x66,0xb0,0x9d,0x1a,0xe2,0xa6,0xb0,0xb9,0xc5,0x5e,0x37,0xf7,0x42,0x22,0xc4, + 0x63,0xbb,0x18,0xfa,0xa4,0x48,0xc6,0xfd,0xe6,0xf3,0xc,0x4f,0xb,0xa0,0x36,0xf6, + 0xae,0xb9,0xb6,0x4f,0x92,0x8a,0xaa,0x73,0xcc,0x18,0x22,0x3d,0x2e,0x3b,0x22,0x9c, + 0x12,0xc1,0x18,0xd8,0xcc,0x67,0x6c,0x4f,0x3c,0xf1,0x67,0x52,0xeb,0xe5,0x93,0xd2, + 0xe5,0xb0,0x22,0x41,0x0,0xc9,0xd9,0xb3,0x7b,0xb7,0x26,0x51,0xe5,0xc7,0x3e,0x30, + 0xd,0x24,0xea,0x30,0xe7,0x4e,0x92,0xbc,0xb,0x49,0x60,0x5f,0x5f,0xbf,0xe2,0x9e, + 0x7e,0x45,0xdf,0xb3,0x7e,0x4d,0x8c,0x93,0x30,0x8e,0xe4,0x5c,0x53,0x5a,0x51,0xa, + 0xbf,0x7e,0x75,0xbb,0xa0,0xfb,0x88,0x86,0xe9,0x1f,0xc9,0x9b,0x90,0xc4,0x79,0xe4, + 0xae,0x49,0x4b,0x70,0x4d,0x59,0x85,0x8d,0x2a,0xbb,0xef,0x51,0x2c,0xa5,0x87,0x69, + 0xa1,0xea,0xb4,0x38,0x6c,0xc7,0x2e,0x91,0x91,0x86,0xcb,0x8e,0xae,0x23,0xb1,0x65, + 0xb3,0xff,0x1b,0x5f,0x7f,0xda,0x76,0x28,0x6b,0x67,0x9c,0x37,0x8b,0xb2,0x8,0x62, + 0x92,0x5d,0xa,0xc9,0xb7,0x6e,0xdb,0x6a,0xad,0xca,0xe2,0x31,0xb6,0x11,0x69,0x89, + 0xe2,0x18,0x32,0x8,0xe4,0x8,0xc,0x2f,0x5f,0xe9,0x71,0x69,0xc2,0xad,0xd2,0x87, + 0x27,0x9e,0x6a,0x47,0xa5,0x18,0xab,0xdb,0x28,0xd9,0x16,0xda,0xf0,0x76,0x80,0x7e, + 0x8,0x1d,0xdc,0x5b,0xf2,0xa7,0xf3,0xe9,0xe9,0x9c,0x75,0x9f,0x3e,0x6f,0x43,0x32, + 0xe2,0x2d,0xcd,0xd,0xd6,0xd0,0xd8,0xe4,0xa4,0xf1,0xbc,0x45,0xa4,0xb8,0x62,0xf1, + 0x50,0x55,0x9e,0xf7,0xec,0x5f,0x3d,0xa3,0xc4,0x7a,0xab,0xf7,0x73,0x2b,0x28,0x8b, + 0x20,0x40,0xdc,0xb1,0xfb,0xa1,0xcf,0xdb,0xc6,0x4d,0x1b,0xfd,0x97,0xf2,0x61,0x5f, + 0x27,0xa6,0x0,0xe1,0x3d,0x59,0x24,0x9,0xd5,0xc2,0x7d,0x13,0x79,0xe3,0xd6,0x79, + 0x9d,0x43,0xa8,0x0,0x21,0x30,0x43,0x8e,0x85,0xda,0x54,0xc8,0x3b,0xf9,0x2f,0x3e, + 0x98,0x9c,0x46,0x12,0x93,0x47,0xa4,0x68,0x41,0xd7,0xcd,0x23,0x21,0x9a,0x17,0xcf, + 0xe1,0x3a,0xb6,0x56,0x6a,0x6a,0x70,0x18,0xb2,0x45,0x4a,0xa4,0xa7,0xa7,0xa7,0xbc, + 0x2d,0x4e,0x9d,0xe7,0x23,0x91,0xa8,0x3a,0x6a,0xfd,0x2d,0x91,0x43,0xb6,0x7e,0xab, + 0xe4,0x80,0xb2,0x9,0x2,0x3c,0xf4,0x4b,0x5f,0xd8,0x6d,0x9f,0xdd,0xb5,0xcb,0xda, + 0x64,0xbc,0xd1,0x6d,0x6c,0x4b,0x90,0x80,0x50,0x18,0xc,0xdf,0xb4,0xb1,0x4f,0x84, + 0x9d,0x81,0x28,0xf6,0x95,0x71,0xf1,0x83,0x43,0xc3,0x36,0xa4,0x54,0x65,0x4c,0xe2, + 0x8f,0xa,0xa0,0x72,0x21,0xe6,0xc9,0xfb,0xc4,0xb0,0x4f,0xfc,0x6e,0x9a,0x20,0x91, + 0xb7,0x1d,0x94,0xa,0x91,0xb9,0x41,0x69,0x49,0x73,0x5b,0xbb,0xe5,0xa5,0x8e,0x93, + 0xba,0x6e,0x40,0xd2,0xc4,0xef,0x94,0xf8,0x2d,0x23,0xe0,0xb9,0xc4,0x52,0x84,0x1c, + 0x9d,0x8a,0xb0,0xbf,0xf1,0xf5,0xbf,0xf8,0xd8,0xe4,0x80,0x9b,0x22,0x8,0xb4,0x2a, + 0x3d,0xd8,0xbd,0xe7,0x61,0xbb,0x47,0xde,0xa0,0xa3,0xa3,0xcd,0x89,0x60,0x9,0xb, + 0x49,0x2,0x18,0xf1,0x60,0x80,0xb1,0x3d,0x32,0xd2,0xe3,0x13,0x52,0x93,0x61,0x1b, + 0x14,0x59,0x83,0x83,0x43,0x22,0x4e,0xde,0x8a,0xc0,0x4d,0x16,0x18,0xa3,0x4c,0x1b, + 0xd7,0xe3,0x39,0xf1,0x3a,0xb4,0xcd,0xc9,0x6,0xe5,0x16,0x2a,0x2c,0xbb,0xa6,0xd1, + 0x16,0x44,0x4e,0xa6,0xb6,0xde,0x66,0x54,0x37,0x2c,0xfb,0x35,0x37,0x33,0xe7,0x39, + 0x9b,0x1e,0x28,0xc9,0x99,0x77,0x9,0xed,0xea,0x5a,0x67,0xfb,0xf6,0x3d,0x6e,0x9b, + 0x44,0xe8,0x6a,0xe0,0xa6,0x9,0x2,0xa4,0xa,0x5f,0xdc,0xfb,0x5,0xb9,0xcc,0xbb, + 0x3d,0x97,0x61,0x52,0xe1,0x47,0x4c,0x41,0x7a,0x20,0x28,0x16,0x16,0x98,0x6f,0x2, + 0x48,0x5c,0x39,0xea,0x87,0x41,0x66,0xf2,0xfe,0x73,0xe1,0xda,0x3a,0xa9,0x4b,0xce, + 0x7a,0x7a,0x7a,0xec,0xe2,0xa5,0x8b,0xae,0xbe,0x44,0xe5,0xf4,0x3,0xf1,0xf4,0x40, + 0xc,0x43,0xe1,0x5c,0xd1,0x91,0x65,0xaa,0x1b,0xac,0x45,0xd9,0x3f,0xbf,0xd4,0xa7, + 0x12,0xb5,0x62,0x43,0x8d,0x3d,0xa7,0xc7,0xbf,0xf6,0x35,0xff,0xd9,0xf0,0x6a,0xe1, + 0x96,0x8,0x2,0xfc,0x16,0xf0,0x2b,0x5f,0x7e,0xc4,0xee,0xbb,0xf7,0x1e,0xf,0x3, + 0xc8,0xce,0xa3,0xd1,0x2c,0x26,0x4d,0x80,0xa3,0x40,0x5c,0x50,0xc1,0xf5,0xeb,0xd7, + 0xf9,0xa6,0x7e,0x8f,0x92,0xe0,0x93,0xdd,0xa7,0x64,0x7f,0x72,0xb6,0x4d,0x6,0x15, + 0xd2,0x30,0x4c,0xdc,0x8f,0x8d,0xf1,0x98,0x88,0xe,0x64,0x99,0x73,0x92,0x34,0xc2, + 0x81,0xce,0xce,0xb5,0xfe,0xb,0x7d,0xb6,0x4c,0x50,0xcd,0x16,0x3d,0xff,0xe9,0x3f, + 0x7f,0xc2,0xd6,0x8b,0xa4,0xd5,0x44,0xc9,0xd,0xb3,0x72,0x80,0x61,0x3d,0x71,0xe2, + 0x84,0x1d,0x39,0xa2,0x6c,0x7c,0x78,0xc8,0xd5,0x64,0x8c,0xbd,0xe4,0x68,0x7c,0x23, + 0x34,0x43,0x4e,0x79,0xef,0x85,0x14,0xf1,0x5f,0xf,0xb6,0xc8,0xe0,0xe3,0xc5,0x4e, + 0x5f,0xba,0x62,0xc3,0xba,0xa7,0x6b,0x6d,0xbb,0xad,0x93,0x7a,0x61,0x8f,0xa2,0xe1, + 0xc7,0x1b,0x79,0xf0,0x29,0xa0,0x46,0x8b,0x9b,0xb9,0xba,0x86,0xbe,0xd8,0xb2,0xe0, + 0x85,0xe4,0x73,0x7f,0xfd,0x2d,0xdf,0x0,0x5b,0x6d,0x7c,0x6c,0x82,0x0,0x3f,0x16, + 0x20,0xd3,0x7f,0xf7,0xdd,0x77,0xed,0xc2,0x85,0x4b,0xbe,0x5,0xcb,0xc4,0x26,0x15, + 0xcf,0xe0,0xe2,0x51,0x1,0x40,0x9c,0xd3,0x20,0x89,0xe9,0x68,0x6b,0xb5,0x46,0xad, + 0xf8,0xac,0xc,0xf8,0xb5,0xd1,0x51,0xeb,0x91,0x3d,0xc9,0x4b,0x3d,0xd7,0x77,0xac, + 0xb5,0x26,0xa5,0x35,0x75,0x3a,0xae,0x11,0x41,0xb8,0x7b,0xfa,0x25,0xb6,0xe2,0x5, + 0x24,0xe2,0x8e,0x21,0x26,0xe1,0xf4,0x88,0x5a,0x6a,0xc7,0xb6,0xee,0xdf,0xfd,0xed, + 0xdf,0xb8,0x4,0xa7,0xa5,0x75,0xb5,0xb0,0x2a,0x4,0x1,0x48,0x40,0x6a,0x6,0x6, + 0x6,0xec,0xbd,0xf7,0x3f,0xb0,0x2b,0x57,0xae,0xb8,0x5a,0xc4,0xfd,0x1c,0x36,0x47, + 0x90,0x8a,0x2a,0xb9,0x78,0x8c,0x77,0x78,0xf,0x96,0xb3,0xb1,0x99,0x69,0x11,0x34, + 0x6e,0x13,0xf2,0x56,0x4d,0x92,0x84,0x66,0x45,0xec,0x9d,0x8d,0x8a,0xd8,0x75,0xf, + 0x46,0x9d,0xdf,0x25,0xe1,0x29,0x21,0x9d,0x17,0x99,0xbc,0x3f,0xad,0x64,0xcb,0x45, + 0xc3,0xde,0x2a,0x43,0x4c,0x10,0x78,0xbb,0xc8,0x1,0xab,0x46,0x50,0x4,0x24,0xf1, + 0x46,0x82,0xbd,0xe7,0xb3,0xe7,0xce,0xfb,0x2b,0x22,0x8f,0x7f,0x4,0x54,0x6,0x92, + 0xfc,0x91,0x12,0xaa,0xa,0x79,0x20,0x88,0x1d,0x95,0x24,0xd,0x2a,0x5,0xc1,0x6, + 0xf1,0x2a,0xbb,0xa5,0x36,0xeb,0x5b,0xad,0x93,0x92,0xc2,0x9c,0xda,0x31,0xe2,0x53, + 0x93,0x13,0x1e,0xc5,0x6f,0xba,0x63,0xab,0x6d,0x90,0xa7,0xda,0xb2,0x71,0x83,0x6d, + 0x56,0xf1,0xf4,0xe4,0x36,0x91,0x3,0x56,0x9d,0xa0,0x8,0xba,0x45,0x3d,0x50,0x85, + 0x91,0xd1,0x11,0xcf,0xf6,0x71,0xed,0xbc,0x92,0xf6,0x37,0x9,0x7a,0x2a,0xf3,0x82, + 0x30,0x24,0x2a,0xa7,0xeb,0xb9,0xb6,0x46,0x2e,0xbf,0x5e,0x46,0x9a,0xad,0x16,0xe2, + 0x2e,0xa,0x24,0x70,0x4e,0x7a,0x42,0x42,0x8b,0x97,0x63,0x37,0x30,0x3a,0x85,0xdb, + 0x89,0xdb,0x46,0x50,0x4,0xdd,0xe3,0xa2,0x49,0x30,0x79,0x67,0x4f,0xba,0xc0,0x4b, + 0x41,0x48,0xfa,0xb7,0x7f,0xfd,0x17,0x97,0xaa,0x67,0x9e,0xf9,0xa6,0xff,0x57,0x2, + 0x8e,0x6b,0xb2,0xd5,0xbe,0xf5,0x41,0x62,0xcc,0xdb,0x12,0x42,0x1,0x3c,0x9e,0x13, + 0x59,0x42,0x52,0x5e,0x7a,0xe9,0x25,0xff,0x7e,0xfc,0xf1,0xc7,0x3d,0x8e,0x5a,0x2d, + 0xdc,0x76,0x82,0x4a,0xa1,0xa3,0xa3,0xc3,0x9,0xfb,0xd9,0xcf,0x7e,0x66,0xcf,0x3e, + 0xfb,0xac,0xd7,0xc5,0x89,0x96,0x42,0xbc,0x36,0x82,0x3e,0xe8,0xb,0xa4,0xfb,0x3a, + 0x73,0xe6,0x8c,0x1d,0x3e,0x7c,0xd8,0x8f,0xb,0x51,0xd8,0xc7,0x72,0x28,0x41,0xd0, + 0x29,0x7b,0xed,0x47,0xff,0x6c,0xbf,0x38,0x9a,0x9c,0x16,0xe0,0x73,0xcf,0xfc,0xa3, + 0xfd,0xc3,0x53,0x3b,0x92,0xb3,0x25,0x30,0xd8,0xf4,0xa,0x16,0x9e,0xa7,0xb1,0x67, + 0xcf,0x1e,0xff,0x3f,0x66,0x71,0x52,0xe9,0x89,0x96,0x2,0x5b,0xbf,0x85,0xcf,0x88, + 0xf7,0x75,0x77,0x77,0xdb,0xf6,0xed,0xdb,0xfd,0xf8,0x7b,0xdf,0xfb,0x9e,0xfd,0xf0, + 0x87,0x3f,0xf4,0xe3,0x34,0x68,0xe7,0xba,0xb2,0x0,0x41,0xc5,0xd1,0x9d,0x7f,0x7e, + 0x6f,0x8,0x5d,0x8a,0x95,0xbd,0xcf,0x77,0x27,0xd7,0x2d,0x61,0x70,0x70,0x30,0x2f, + 0x35,0xc9,0xef,0xde,0xbd,0xdb,0xcf,0x7f,0xf0,0x83,0x1f,0xf8,0xf9,0x8b,0x2f,0xbe, + 0xe8,0xe7,0x85,0xe0,0xba,0x74,0x7b,0xbc,0x3f,0xd6,0x15,0x96,0xd8,0xc6,0x75,0x69, + 0xa4,0xef,0x4b,0xb7,0x7d,0xf7,0xbb,0xdf,0xf5,0xba,0xe7,0x9e,0x7b,0xce,0xef,0x8f, + 0xe3,0x89,0xe3,0x2b,0x7,0x2b,0xff,0x50,0xd8,0xb1,0xd7,0xf6,0xee,0x4d,0xe,0x13, + 0xdc,0x93,0x7c,0xa7,0x11,0xc5,0x19,0x3b,0x0,0x58,0xd9,0x42,0xb0,0xa2,0xd4,0x3f, + 0xf4,0xd0,0x43,0x49,0x4d,0x50,0x85,0x58,0x1f,0x51,0x68,0x4b,0x4a,0xf5,0x95,0x46, + 0x94,0x98,0xf4,0xbd,0x48,0xc,0x12,0x5a,0x8e,0xfa,0xde,0x80,0x84,0xa8,0x22,0x38, + 0x90,0xdf,0x5f,0x42,0x5a,0x8a,0x21,0xae,0x32,0x2b,0x5,0xf6,0xed,0xdb,0x77,0xc3, + 0xaa,0x46,0xa9,0x59,0xa9,0x94,0x23,0x25,0xa5,0xfa,0xa2,0x2d,0x4a,0x10,0xdf,0x20, + 0x8e,0xef,0x66,0x24,0xa8,0xac,0x5c,0xec,0x9e,0x9d,0x37,0xda,0x9a,0x34,0xbe,0xf3, + 0x9d,0xef,0xb8,0x3d,0x41,0xe7,0x1,0x2b,0xc5,0x79,0x94,0xa8,0x27,0x9f,0x7c,0x72, + 0x71,0x65,0xbf,0xff,0xfd,0xef,0xbb,0xcd,0xe1,0x3b,0x22,0xd6,0x51,0x22,0xb8,0x87, + 0x3e,0x62,0xe1,0xbc,0x10,0xdc,0x87,0x3d,0xfa,0xf1,0x8f,0x7f,0x9c,0xd4,0x4,0xfb, + 0x44,0x79,0xfb,0xed,0xb7,0x93,0x9a,0x8f,0x87,0xe5,0x9,0x3a,0x75,0xd2,0x3e,0x4c, + 0xe,0x3f,0x3c,0xf9,0x9a,0xbd,0xf6,0x5a,0x28,0xa7,0x4e,0x25,0x95,0x29,0x40,0x4, + 0xc6,0x16,0x55,0x1,0x1c,0x53,0xa2,0xf8,0xa7,0x8f,0x51,0x1d,0xc4,0x3d,0x5e,0xb, + 0xa2,0xa,0x44,0xd5,0x2c,0x17,0x51,0xd,0xe9,0x3f,0x8d,0xe5,0x9c,0xc2,0x2d,0x21, + 0x91,0xa4,0x1b,0xd1,0xfd,0x7c,0x5e,0x66,0xe7,0x6,0xe3,0x4c,0xd9,0xbb,0xff,0x80, + 0x4c,0xf8,0xf5,0x40,0xec,0xd3,0x2a,0x15,0x55,0x2,0x71,0x8e,0x2a,0x91,0x46,0xa1, + 0x7a,0x7c,0xfb,0xdb,0xdf,0x5e,0xbc,0x87,0x52,0x78,0x4f,0xa9,0xb6,0x1d,0x3b,0x76, + 0x2c,0xb6,0xb5,0xb7,0xb7,0x7b,0x5f,0xe0,0xf6,0xab,0x98,0x2c,0xf3,0xde,0x58,0x92, + 0x2a,0xf0,0xd6,0xb,0x4f,0xdb,0xdf,0xff,0xe8,0x7a,0x51,0x62,0xd5,0x8,0x6,0xf9, + 0xa6,0xa4,0xd,0x76,0xe1,0x8a,0xbe,0xf1,0xc6,0x1b,0x37,0xac,0xfa,0x4f,0x7f,0xfa, + 0x53,0x2f,0x37,0xb,0x54,0x37,0x2d,0x8d,0x80,0x7e,0x6e,0xc9,0x20,0x17,0x43,0x42, + 0x54,0x59,0xe8,0x3e,0xb0,0x7f,0x49,0x92,0xf6,0x3e,0xbf,0x28,0x45,0xaf,0xbf,0xfe, + 0xfa,0x75,0xab,0x93,0x76,0xa9,0xd1,0xc5,0x9e,0x3e,0x7d,0x3a,0xb9,0x3a,0xef,0x75, + 0xb4,0xc5,0x12,0x57,0x3a,0x5d,0xe8,0xa7,0xb0,0xc4,0xb6,0xb4,0x4,0xa5,0xa5,0x87, + 0x12,0xfb,0xe2,0xfa,0x78,0xfc,0xc2,0xb,0x2f,0xf8,0xb5,0xb7,0x22,0x41,0x37,0x45, + 0xd0,0xf5,0xb1,0xd1,0x7e,0xf9,0xb9,0x80,0xf4,0xe0,0x97,0x2b,0x85,0x62,0x8e,0x2a, + 0xc4,0xfb,0x22,0xa1,0x91,0x54,0xa,0x6d,0x85,0x25,0xb6,0x45,0x82,0xe2,0xf5,0xf4, + 0x95,0x6e,0xe3,0x59,0x7c,0xc7,0x7b,0xe8,0x1f,0xfc,0x9,0x8,0x5a,0x72,0xfd,0x69, + 0x82,0x18,0x68,0x94,0xa,0xec,0x10,0x3,0x8c,0xf6,0x88,0x7a,0xce,0xe3,0x20,0xe3, + 0xa0,0xa9,0x2b,0x9c,0x0,0x93,0xe2,0x9c,0x92,0x96,0x12,0x50,0xd8,0x86,0x44,0x46, + 0x62,0xe8,0xab,0xd8,0x7d,0x51,0xba,0xde,0x79,0xe7,0x1d,0x3f,0x5f,0x55,0x82,0xba, + 0xf,0x3c,0x9f,0x3f,0xd0,0x9d,0x36,0xc5,0xdd,0xf9,0x3,0xfb,0xf7,0x26,0xe4,0xa8, + 0xc8,0x50,0xa7,0x11,0x1f,0xe,0x59,0x20,0x4e,0xbe,0x70,0xa2,0x18,0x50,0x6,0x4e, + 0xfd,0xc7,0x21,0x8,0xc4,0xbe,0x20,0xab,0xb0,0xd,0x52,0x38,0xa7,0x3d,0xe2,0x56, + 0x8,0x5a,0xde,0x48,0x9f,0xfc,0x77,0x7b,0xfa,0xae,0xbb,0xc2,0x66,0x97,0x97,0xbb, + 0xec,0xe9,0x17,0xde,0x4a,0x1a,0xf7,0xdb,0x81,0x9f,0x3c,0x95,0x1c,0x7,0x44,0xa3, + 0x1b,0xf3,0x20,0x10,0xd,0x76,0x1a,0xc4,0x2e,0xbf,0xfe,0xf5,0xaf,0x6f,0xa8,0x2f, + 0x6,0x42,0x83,0x58,0x8a,0x81,0xf8,0x87,0x9c,0xaa,0x58,0x5f,0x31,0xee,0x7a,0xf0, + 0xc1,0x7,0xfd,0xbb,0x18,0x88,0xaf,0xe2,0x75,0xcb,0x61,0x79,0x82,0x76,0x16,0x4b, + 0x26,0xe4,0xd8,0xf6,0x3f,0x6f,0xdd,0xf9,0x9f,0xd8,0xf5,0xf4,0x2c,0x81,0xc1,0x32, + 0x21,0x8,0x4b,0x93,0x15,0x41,0x7b,0xb1,0xfa,0x42,0x90,0x7c,0x16,0x96,0x72,0x81, + 0x7,0x8b,0x5e,0x6c,0xff,0x7e,0x19,0x85,0x2,0x30,0x3e,0x3c,0x1f,0x63,0x24,0xb8, + 0x5d,0x6e,0x1,0x1c,0x89,0x24,0x2d,0xf,0xa9,0x99,0x56,0xc9,0xcb,0x4a,0x48,0xab, + 0x45,0xa1,0x8a,0x14,0x43,0xb4,0x11,0xc5,0x54,0xc,0xbb,0x52,0x58,0x62,0x5b,0x61, + 0xdf,0xe9,0xfb,0xf0,0x58,0xd1,0x36,0x61,0xff,0xd2,0x88,0x6a,0x97,0x2e,0xd8,0xca, + 0x52,0xf8,0xc4,0xf6,0x83,0x58,0xb5,0x28,0x15,0xc5,0xb6,0x3b,0x4a,0x6d,0x69,0x14, + 0xb6,0x1,0xd4,0x5,0xa0,0xc2,0x48,0x86,0x42,0xf,0xef,0xb7,0xf0,0x3a,0x54,0x2a, + 0x2d,0x31,0x3c,0x37,0x9d,0x38,0x17,0xe2,0x13,0xdd,0x30,0x8b,0x3,0x2d,0x24,0x2, + 0x14,0x4e,0xc,0x94,0x6a,0xbb,0x5d,0xf8,0x44,0x9,0xfa,0xf4,0xc3,0xec,0xff,0x0, + 0x7,0x47,0xda,0xf2,0xbe,0x3,0xb7,0x47,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44, + 0xae,0x42,0x60,0x82, + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/cam6_no.png + 0x0,0x0,0x25,0x27, + 0x89, + 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, + 0x0,0x0,0x48,0x0,0x0,0x0,0x48,0x8,0x6,0x0,0x0,0x0,0x55,0xed,0xb3,0x47, + 0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13, + 0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0xa,0x4d,0x69,0x43,0x43,0x50,0x50,0x68,0x6f, + 0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66,0x69, + 0x6c,0x65,0x0,0x0,0x78,0xda,0x9d,0x53,0x77,0x58,0x93,0xf7,0x16,0x3e,0xdf,0xf7, + 0x65,0xf,0x56,0x42,0xd8,0xf0,0xb1,0x97,0x6c,0x81,0x0,0x22,0x23,0xac,0x8,0xc8, + 0x10,0x59,0xa2,0x10,0x92,0x0,0x61,0x84,0x10,0x12,0x40,0xc5,0x85,0x88,0xa,0x56, + 0x14,0x15,0x11,0x9c,0x48,0x55,0xc4,0x82,0xd5,0xa,0x48,0x9d,0x88,0xe2,0xa0,0x28, + 0xb8,0x67,0x41,0x8a,0x88,0x5a,0x8b,0x55,0x5c,0x38,0xee,0x1f,0xdc,0xa7,0xb5,0x7d, + 0x7a,0xef,0xed,0xed,0xfb,0xd7,0xfb,0xbc,0xe7,0x9c,0xe7,0xfc,0xce,0x79,0xcf,0xf, + 0x80,0x11,0x12,0x26,0x91,0xe6,0xa2,0x6a,0x0,0x39,0x52,0x85,0x3c,0x3a,0xd8,0x1f, + 0x8f,0x4f,0x48,0xc4,0xc9,0xbd,0x80,0x2,0x15,0x48,0xe0,0x4,0x20,0x10,0xe6,0xcb, + 0xc2,0x67,0x5,0xc5,0x0,0x0,0xf0,0x3,0x79,0x78,0x7e,0x74,0xb0,0x3f,0xfc,0x1, + 0xaf,0x6f,0x0,0x2,0x0,0x70,0xd5,0x2e,0x24,0x12,0xc7,0xe1,0xff,0x83,0xba,0x50, + 0x26,0x57,0x0,0x20,0x91,0x0,0xe0,0x22,0x12,0xe7,0xb,0x1,0x90,0x52,0x0,0xc8, + 0x2e,0x54,0xc8,0x14,0x0,0xc8,0x18,0x0,0xb0,0x53,0xb3,0x64,0xa,0x0,0x94,0x0, + 0x0,0x6c,0x79,0x7c,0x42,0x22,0x0,0xaa,0xd,0x0,0xec,0xf4,0x49,0x3e,0x5,0x0, + 0xd8,0xa9,0x93,0xdc,0x17,0x0,0xd8,0xa2,0x1c,0xa9,0x8,0x0,0x8d,0x1,0x0,0x99, + 0x28,0x47,0x24,0x2,0x40,0xbb,0x0,0x60,0x55,0x81,0x52,0x2c,0x2,0xc0,0xc2,0x0, + 0xa0,0xac,0x40,0x22,0x2e,0x4,0xc0,0xae,0x1,0x80,0x59,0xb6,0x32,0x47,0x2,0x80, + 0xbd,0x5,0x0,0x76,0x8e,0x58,0x90,0xf,0x40,0x60,0x0,0x80,0x99,0x42,0x2c,0xcc, + 0x0,0x20,0x38,0x2,0x0,0x43,0x1e,0x13,0xcd,0x3,0x20,0x4c,0x3,0xa0,0x30,0xd2, + 0xbf,0xe0,0xa9,0x5f,0x70,0x85,0xb8,0x48,0x1,0x0,0xc0,0xcb,0x95,0xcd,0x97,0x4b, + 0xd2,0x33,0x14,0xb8,0x95,0xd0,0x1a,0x77,0xf2,0xf0,0xe0,0xe2,0x21,0xe2,0xc2,0x6c, + 0xb1,0x42,0x61,0x17,0x29,0x10,0x66,0x9,0xe4,0x22,0x9c,0x97,0x9b,0x23,0x13,0x48, + 0xe7,0x3,0x4c,0xce,0xc,0x0,0x0,0x1a,0xf9,0xd1,0xc1,0xfe,0x38,0x3f,0x90,0xe7, + 0xe6,0xe4,0xe1,0xe6,0x66,0xe7,0x6c,0xef,0xf4,0xc5,0xa2,0xfe,0x6b,0xf0,0x6f,0x22, + 0x3e,0x21,0xf1,0xdf,0xfe,0xbc,0x8c,0x2,0x4,0x0,0x10,0x4e,0xcf,0xef,0xda,0x5f, + 0xe5,0xe5,0xd6,0x3,0x70,0xc7,0x1,0xb0,0x75,0xbf,0x6b,0xa9,0x5b,0x0,0xda,0x56, + 0x0,0x68,0xdf,0xf9,0x5d,0x33,0xdb,0x9,0xa0,0x5a,0xa,0xd0,0x7a,0xf9,0x8b,0x79, + 0x38,0xfc,0x40,0x1e,0x9e,0xa1,0x50,0xc8,0x3c,0x1d,0x1c,0xa,0xb,0xb,0xed,0x25, + 0x62,0xa1,0xbd,0x30,0xe3,0x8b,0x3e,0xff,0x33,0xe1,0x6f,0xe0,0x8b,0x7e,0xf6,0xfc, + 0x40,0x1e,0xfe,0xdb,0x7a,0xf0,0x0,0x71,0x9a,0x40,0x99,0xad,0xc0,0xa3,0x83,0xfd, + 0x71,0x61,0x6e,0x76,0xae,0x52,0x8e,0xe7,0xcb,0x4,0x42,0x31,0x6e,0xf7,0xe7,0x23, + 0xfe,0xc7,0x85,0x7f,0xfd,0x8e,0x29,0xd1,0xe2,0x34,0xb1,0x5c,0x2c,0x15,0x8a,0xf1, + 0x58,0x89,0xb8,0x50,0x22,0x4d,0xc7,0x79,0xb9,0x52,0x91,0x44,0x21,0xc9,0x95,0xe2, + 0x12,0xe9,0x7f,0x32,0xf1,0x1f,0x96,0xfd,0x9,0x93,0x77,0xd,0x0,0xac,0x86,0x4f, + 0xc0,0x4e,0xb6,0x7,0xb5,0xcb,0x6c,0xc0,0x7e,0xee,0x1,0x2,0x8b,0xe,0x58,0xd2, + 0x76,0x0,0x40,0x7e,0xf3,0x2d,0x8c,0x1a,0xb,0x91,0x0,0x10,0x67,0x34,0x32,0x79, + 0xf7,0x0,0x0,0x93,0xbf,0xf9,0x8f,0x40,0x2b,0x1,0x0,0xcd,0x97,0xa4,0xe3,0x0, + 0x0,0xbc,0xe8,0x18,0x5c,0xa8,0x94,0x17,0x4c,0xc6,0x8,0x0,0x0,0x44,0xa0,0x81, + 0x2a,0xb0,0x41,0x7,0xc,0xc1,0x14,0xac,0xc0,0xe,0x9c,0xc1,0x1d,0xbc,0xc0,0x17, + 0x2,0x61,0x6,0x44,0x40,0xc,0x24,0xc0,0x3c,0x10,0x42,0x6,0xe4,0x80,0x1c,0xa, + 0xa1,0x18,0x96,0x41,0x19,0x54,0xc0,0x3a,0xd8,0x4,0xb5,0xb0,0x3,0x1a,0xa0,0x11, + 0x9a,0xe1,0x10,0xb4,0xc1,0x31,0x38,0xd,0xe7,0xe0,0x12,0x5c,0x81,0xeb,0x70,0x17, + 0x6,0x60,0x18,0x9e,0xc2,0x18,0xbc,0x86,0x9,0x4,0x41,0xc8,0x8,0x13,0x61,0x21, + 0x3a,0x88,0x11,0x62,0x8e,0xd8,0x22,0xce,0x8,0x17,0x99,0x8e,0x4,0x22,0x61,0x48, + 0x34,0x92,0x80,0xa4,0x20,0xe9,0x88,0x14,0x51,0x22,0xc5,0xc8,0x72,0xa4,0x2,0xa9, + 0x42,0x6a,0x91,0x5d,0x48,0x23,0xf2,0x2d,0x72,0x14,0x39,0x8d,0x5c,0x40,0xfa,0x90, + 0xdb,0xc8,0x20,0x32,0x8a,0xfc,0x8a,0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3,0xd4, + 0x2,0x75,0x40,0xb9,0xa8,0x1f,0x1a,0x8a,0xc6,0xa0,0x73,0xd1,0x74,0x34,0xf,0x5d, + 0x80,0x96,0xa2,0x6b,0xd1,0x1a,0xb4,0x1e,0x3d,0x80,0xb6,0xa2,0xa7,0xd1,0x4b,0xe8, + 0x75,0x74,0x0,0x7d,0x8a,0x8e,0x63,0x80,0xd1,0x31,0xe,0x66,0x8c,0xd9,0x61,0x5c, + 0x8c,0x87,0x45,0x60,0x89,0x58,0x1a,0x26,0xc7,0x16,0x63,0xe5,0x58,0x35,0x56,0x8f, + 0x35,0x63,0x1d,0x58,0x37,0x76,0x15,0x1b,0xc0,0x9e,0x61,0xef,0x8,0x24,0x2,0x8b, + 0x80,0x13,0xec,0x8,0x5e,0x84,0x10,0xc2,0x6c,0x82,0x90,0x90,0x47,0x58,0x4c,0x58, + 0x43,0xa8,0x25,0xec,0x23,0xb4,0x12,0xba,0x8,0x57,0x9,0x83,0x84,0x31,0xc2,0x27, + 0x22,0x93,0xa8,0x4f,0xb4,0x25,0x7a,0x12,0xf9,0xc4,0x78,0x62,0x3a,0xb1,0x90,0x58, + 0x46,0xac,0x26,0xee,0x21,0x1e,0x21,0x9e,0x25,0x5e,0x27,0xe,0x13,0x5f,0x93,0x48, + 0x24,0xe,0xc9,0x92,0xe4,0x4e,0xa,0x21,0x25,0x90,0x32,0x49,0xb,0x49,0x6b,0x48, + 0xdb,0x48,0x2d,0xa4,0x53,0xa4,0x3e,0xd2,0x10,0x69,0x9c,0x4c,0x26,0xeb,0x90,0x6d, + 0xc9,0xde,0xe4,0x8,0xb2,0x80,0xac,0x20,0x97,0x91,0xb7,0x90,0xf,0x90,0x4f,0x92, + 0xfb,0xc9,0xc3,0xe4,0xb7,0x14,0x3a,0xc5,0x88,0xe2,0x4c,0x9,0xa2,0x24,0x52,0xa4, + 0x94,0x12,0x4a,0x35,0x65,0x3f,0xe5,0x4,0xa5,0x9f,0x32,0x42,0x99,0xa0,0xaa,0x51, + 0xcd,0xa9,0x9e,0xd4,0x8,0xaa,0x88,0x3a,0x9f,0x5a,0x49,0x6d,0xa0,0x76,0x50,0x2f, + 0x53,0x87,0xa9,0x13,0x34,0x75,0x9a,0x25,0xcd,0x9b,0x16,0x43,0xcb,0xa4,0x2d,0xa3, + 0xd5,0xd0,0x9a,0x69,0x67,0x69,0xf7,0x68,0x2f,0xe9,0x74,0xba,0x9,0xdd,0x83,0x1e, + 0x45,0x97,0xd0,0x97,0xd2,0x6b,0xe8,0x7,0xe9,0xe7,0xe9,0x83,0xf4,0x77,0xc,0xd, + 0x86,0xd,0x83,0xc7,0x48,0x62,0x28,0x19,0x6b,0x19,0x7b,0x19,0xa7,0x18,0xb7,0x19, + 0x2f,0x99,0x4c,0xa6,0x5,0xd3,0x97,0x99,0xc8,0x54,0x30,0xd7,0x32,0x1b,0x99,0x67, + 0x98,0xf,0x98,0x6f,0x55,0x58,0x2a,0xf6,0x2a,0x7c,0x15,0x91,0xca,0x12,0x95,0x3a, + 0x95,0x56,0x95,0x7e,0x95,0xe7,0xaa,0x54,0x55,0x73,0x55,0x3f,0xd5,0x79,0xaa,0xb, + 0x54,0xab,0x55,0xf,0xab,0x5e,0x56,0x7d,0xa6,0x46,0x55,0xb3,0x50,0xe3,0xa9,0x9, + 0xd4,0x16,0xab,0xd5,0xa9,0x1d,0x55,0xbb,0xa9,0x36,0xae,0xce,0x52,0x77,0x52,0x8f, + 0x50,0xcf,0x51,0x5f,0xa3,0xbe,0x5f,0xfd,0x82,0xfa,0x63,0xd,0xb2,0x86,0x85,0x46, + 0xa0,0x86,0x48,0xa3,0x54,0x63,0xb7,0xc6,0x19,0x8d,0x21,0x16,0xc6,0x32,0x65,0xf1, + 0x58,0x42,0xd6,0x72,0x56,0x3,0xeb,0x2c,0x6b,0x98,0x4d,0x62,0x5b,0xb2,0xf9,0xec, + 0x4c,0x76,0x5,0xfb,0x1b,0x76,0x2f,0x7b,0x4c,0x53,0x43,0x73,0xaa,0x66,0xac,0x66, + 0x91,0x66,0x9d,0xe6,0x71,0xcd,0x1,0xe,0xc6,0xb1,0xe0,0xf0,0x39,0xd9,0x9c,0x4a, + 0xce,0x21,0xce,0xd,0xce,0x7b,0x2d,0x3,0x2d,0x3f,0x2d,0xb1,0xd6,0x6a,0xad,0x66, + 0xad,0x7e,0xad,0x37,0xda,0x7a,0xda,0xbe,0xda,0x62,0xed,0x72,0xed,0x16,0xed,0xeb, + 0xda,0xef,0x75,0x70,0x9d,0x40,0x9d,0x2c,0x9d,0xf5,0x3a,0x6d,0x3a,0xf7,0x75,0x9, + 0xba,0x36,0xba,0x51,0xba,0x85,0xba,0xdb,0x75,0xcf,0xea,0x3e,0xd3,0x63,0xeb,0x79, + 0xe9,0x9,0xf5,0xca,0xf5,0xe,0xe9,0xdd,0xd1,0x47,0xf5,0x6d,0xf4,0xa3,0xf5,0x17, + 0xea,0xef,0xd6,0xef,0xd1,0x1f,0x37,0x30,0x34,0x8,0x36,0x90,0x19,0x6c,0x31,0x38, + 0x63,0xf0,0xcc,0x90,0x63,0xe8,0x6b,0x98,0x69,0xb8,0xd1,0xf0,0x84,0xe1,0xa8,0x11, + 0xcb,0x68,0xba,0x91,0xc4,0x68,0xa3,0xd1,0x49,0xa3,0x27,0xb8,0x26,0xee,0x87,0x67, + 0xe3,0x35,0x78,0x17,0x3e,0x66,0xac,0x6f,0x1c,0x62,0xac,0x34,0xde,0x65,0xdc,0x6b, + 0x3c,0x61,0x62,0x69,0x32,0xdb,0xa4,0xc4,0xa4,0xc5,0xe4,0xbe,0x29,0xcd,0x94,0x6b, + 0x9a,0x66,0xba,0xd1,0xb4,0xd3,0x74,0xcc,0xcc,0xc8,0x2c,0xdc,0xac,0xd8,0xac,0xc9, + 0xec,0x8e,0x39,0xd5,0x9c,0x6b,0x9e,0x61,0xbe,0xd9,0xbc,0xdb,0xfc,0x8d,0x85,0xa5, + 0x45,0x9c,0xc5,0x4a,0x8b,0x36,0x8b,0xc7,0x96,0xda,0x96,0x7c,0xcb,0x5,0x96,0x4d, + 0x96,0xf7,0xac,0x98,0x56,0x3e,0x56,0x79,0x56,0xf5,0x56,0xd7,0xac,0x49,0xd6,0x5c, + 0xeb,0x2c,0xeb,0x6d,0xd6,0x57,0x6c,0x50,0x1b,0x57,0x9b,0xc,0x9b,0x3a,0x9b,0xcb, + 0xb6,0xa8,0xad,0x9b,0xad,0xc4,0x76,0x9b,0x6d,0xdf,0x14,0xe2,0x14,0x8f,0x29,0xd2, + 0x29,0xf5,0x53,0x6e,0xda,0x31,0xec,0xfc,0xec,0xa,0xec,0x9a,0xec,0x6,0xed,0x39, + 0xf6,0x61,0xf6,0x25,0xf6,0x6d,0xf6,0xcf,0x1d,0xcc,0x1c,0x12,0x1d,0xd6,0x3b,0x74, + 0x3b,0x7c,0x72,0x74,0x75,0xcc,0x76,0x6c,0x70,0xbc,0xeb,0xa4,0xe1,0x34,0xc3,0xa9, + 0xc4,0xa9,0xc3,0xe9,0x57,0x67,0x1b,0x67,0xa1,0x73,0x9d,0xf3,0x35,0x17,0xa6,0x4b, + 0x90,0xcb,0x12,0x97,0x76,0x97,0x17,0x53,0x6d,0xa7,0x8a,0xa7,0x6e,0x9f,0x7a,0xcb, + 0x95,0xe5,0x1a,0xee,0xba,0xd2,0xb5,0xd3,0xf5,0xa3,0x9b,0xbb,0x9b,0xdc,0xad,0xd9, + 0x6d,0xd4,0xdd,0xcc,0x3d,0xc5,0x7d,0xab,0xfb,0x4d,0x2e,0x9b,0x1b,0xc9,0x5d,0xc3, + 0x3d,0xef,0x41,0xf4,0xf0,0xf7,0x58,0xe2,0x71,0xcc,0xe3,0x9d,0xa7,0x9b,0xa7,0xc2, + 0xf3,0x90,0xe7,0x2f,0x5e,0x76,0x5e,0x59,0x5e,0xfb,0xbd,0x1e,0x4f,0xb3,0x9c,0x26, + 0x9e,0xd6,0x30,0x6d,0xc8,0xdb,0xc4,0x5b,0xe0,0xbd,0xcb,0x7b,0x60,0x3a,0x3e,0x3d, + 0x65,0xfa,0xce,0xe9,0x3,0x3e,0xc6,0x3e,0x2,0x9f,0x7a,0x9f,0x87,0xbe,0xa6,0xbe, + 0x22,0xdf,0x3d,0xbe,0x23,0x7e,0xd6,0x7e,0x99,0x7e,0x7,0xfc,0x9e,0xfb,0x3b,0xfa, + 0xcb,0xfd,0x8f,0xf8,0xbf,0xe1,0x79,0xf2,0x16,0xf1,0x4e,0x5,0x60,0x1,0xc1,0x1, + 0xe5,0x1,0xbd,0x81,0x1a,0x81,0xb3,0x3,0x6b,0x3,0x1f,0x4,0x99,0x4,0xa5,0x7, + 0x35,0x5,0x8d,0x5,0xbb,0x6,0x2f,0xc,0x3e,0x15,0x42,0xc,0x9,0xd,0x59,0x1f, + 0x72,0x93,0x6f,0xc0,0x17,0xf2,0x1b,0xf9,0x63,0x33,0xdc,0x67,0x2c,0x9a,0xd1,0x15, + 0xca,0x8,0x9d,0x15,0x5a,0x1b,0xfa,0x30,0xcc,0x26,0x4c,0x1e,0xd6,0x11,0x8e,0x86, + 0xcf,0x8,0xdf,0x10,0x7e,0x6f,0xa6,0xf9,0x4c,0xe9,0xcc,0xb6,0x8,0x88,0xe0,0x47, + 0x6c,0x88,0xb8,0x1f,0x69,0x19,0x99,0x17,0xf9,0x7d,0x14,0x29,0x2a,0x32,0xaa,0x2e, + 0xea,0x51,0xb4,0x53,0x74,0x71,0x74,0xf7,0x2c,0xd6,0xac,0xe4,0x59,0xfb,0x67,0xbd, + 0x8e,0xf1,0x8f,0xa9,0x8c,0xb9,0x3b,0xdb,0x6a,0xb6,0x72,0x76,0x67,0xac,0x6a,0x6c, + 0x52,0x6c,0x63,0xec,0x9b,0xb8,0x80,0xb8,0xaa,0xb8,0x81,0x78,0x87,0xf8,0x45,0xf1, + 0x97,0x12,0x74,0x13,0x24,0x9,0xed,0x89,0xe4,0xc4,0xd8,0xc4,0x3d,0x89,0xe3,0x73, + 0x2,0xe7,0x6c,0x9a,0x33,0x9c,0xe4,0x9a,0x54,0x96,0x74,0x63,0xae,0xe5,0xdc,0xa2, + 0xb9,0x17,0xe6,0xe9,0xce,0xcb,0x9e,0x77,0x3c,0x59,0x35,0x59,0x90,0x7c,0x38,0x85, + 0x98,0x12,0x97,0xb2,0x3f,0xe5,0x83,0x20,0x42,0x50,0x2f,0x18,0x4f,0xe5,0xa7,0x6e, + 0x4d,0x1d,0x13,0xf2,0x84,0x9b,0x85,0x4f,0x45,0xbe,0xa2,0x8d,0xa2,0x51,0xb1,0xb7, + 0xb8,0x4a,0x3c,0x92,0xe6,0x9d,0x56,0x95,0xf6,0x38,0xdd,0x3b,0x7d,0x43,0xfa,0x68, + 0x86,0x4f,0x46,0x75,0xc6,0x33,0x9,0x4f,0x52,0x2b,0x79,0x91,0x19,0x92,0xb9,0x23, + 0xf3,0x4d,0x56,0x44,0xd6,0xde,0xac,0xcf,0xd9,0x71,0xd9,0x2d,0x39,0x94,0x9c,0x94, + 0x9c,0xa3,0x52,0xd,0x69,0x96,0xb4,0x2b,0xd7,0x30,0xb7,0x28,0xb7,0x4f,0x66,0x2b, + 0x2b,0x93,0xd,0xe4,0x79,0xe6,0x6d,0xca,0x1b,0x93,0x87,0xca,0xf7,0xe4,0x23,0xf9, + 0x73,0xf3,0xdb,0x15,0x6c,0x85,0x4c,0xd1,0xa3,0xb4,0x52,0xae,0x50,0xe,0x16,0x4c, + 0x2f,0xa8,0x2b,0x78,0x5b,0x18,0x5b,0x78,0xb8,0x48,0xbd,0x48,0x5a,0xd4,0x33,0xdf, + 0x66,0xfe,0xea,0xf9,0x23,0xb,0x82,0x16,0x7c,0xbd,0x90,0xb0,0x50,0xb8,0xb0,0xb3, + 0xd8,0xb8,0x78,0x59,0xf1,0xe0,0x22,0xbf,0x45,0xbb,0x16,0x23,0x8b,0x53,0x17,0x77, + 0x2e,0x31,0x5d,0x52,0xba,0x64,0x78,0x69,0xf0,0xd2,0x7d,0xcb,0x68,0xcb,0xb2,0x96, + 0xfd,0x50,0xe2,0x58,0x52,0x55,0xf2,0x6a,0x79,0xdc,0xf2,0x8e,0x52,0x83,0xd2,0xa5, + 0xa5,0x43,0x2b,0x82,0x57,0x34,0x95,0xa9,0x94,0xc9,0xcb,0x6e,0xae,0xf4,0x5a,0xb9, + 0x63,0x15,0x61,0x95,0x64,0x55,0xef,0x6a,0x97,0xd5,0x5b,0x56,0x7f,0x2a,0x17,0x95, + 0x5f,0xac,0x70,0xac,0xa8,0xae,0xf8,0xb0,0x46,0xb8,0xe6,0xe2,0x57,0x4e,0x5f,0xd5, + 0x7c,0xf5,0x79,0x6d,0xda,0xda,0xde,0x4a,0xb7,0xca,0xed,0xeb,0x48,0xeb,0xa4,0xeb, + 0x6e,0xac,0xf7,0x59,0xbf,0xaf,0x4a,0xbd,0x6a,0x41,0xd5,0xd0,0x86,0xf0,0xd,0xad, + 0x1b,0xf1,0x8d,0xe5,0x1b,0x5f,0x6d,0x4a,0xde,0x74,0xa1,0x7a,0x6a,0xf5,0x8e,0xcd, + 0xb4,0xcd,0xca,0xcd,0x3,0x35,0x61,0x35,0xed,0x5b,0xcc,0xb6,0xac,0xdb,0xf2,0xa1, + 0x36,0xa3,0xf6,0x7a,0x9d,0x7f,0x5d,0xcb,0x56,0xfd,0xad,0xab,0xb7,0xbe,0xd9,0x26, + 0xda,0xd6,0xbf,0xdd,0x77,0x7b,0xf3,0xe,0x83,0x1d,0x15,0x3b,0xde,0xef,0x94,0xec, + 0xbc,0xb5,0x2b,0x78,0x57,0x6b,0xbd,0x45,0x7d,0xf5,0x6e,0xd2,0xee,0x82,0xdd,0x8f, + 0x1a,0x62,0x1b,0xba,0xbf,0xe6,0x7e,0xdd,0xb8,0x47,0x77,0x4f,0xc5,0x9e,0x8f,0x7b, + 0xa5,0x7b,0x7,0xf6,0x45,0xef,0xeb,0x6a,0x74,0x6f,0x6c,0xdc,0xaf,0xbf,0xbf,0xb2, + 0x9,0x6d,0x52,0x36,0x8d,0x1e,0x48,0x3a,0x70,0xe5,0x9b,0x80,0x6f,0xda,0x9b,0xed, + 0x9a,0x77,0xb5,0x70,0x5a,0x2a,0xe,0xc2,0x41,0xe5,0xc1,0x27,0xdf,0xa6,0x7c,0x7b, + 0xe3,0x50,0xe8,0xa1,0xce,0xc3,0xdc,0xc3,0xcd,0xdf,0x99,0x7f,0xb7,0xf5,0x8,0xeb, + 0x48,0x79,0x2b,0xd2,0x3a,0xbf,0x75,0xac,0x2d,0xa3,0x6d,0xa0,0x3d,0xa1,0xbd,0xef, + 0xe8,0x8c,0xa3,0x9d,0x1d,0x5e,0x1d,0x47,0xbe,0xb7,0xff,0x7e,0xef,0x31,0xe3,0x63, + 0x75,0xc7,0x35,0x8f,0x57,0x9e,0xa0,0x9d,0x28,0x3d,0xf1,0xf9,0xe4,0x82,0x93,0xe3, + 0xa7,0x64,0xa7,0x9e,0x9d,0x4e,0x3f,0x3d,0xd4,0x99,0xdc,0x79,0xf7,0x4c,0xfc,0x99, + 0x6b,0x5d,0x51,0x5d,0xbd,0x67,0x43,0xcf,0x9e,0x3f,0x17,0x74,0xee,0x4c,0xb7,0x5f, + 0xf7,0xc9,0xf3,0xde,0xe7,0x8f,0x5d,0xf0,0xbc,0x70,0xf4,0x22,0xf7,0x62,0xdb,0x25, + 0xb7,0x4b,0xad,0x3d,0xae,0x3d,0x47,0x7e,0x70,0xfd,0xe1,0x48,0xaf,0x5b,0x6f,0xeb, + 0x65,0xf7,0xcb,0xed,0x57,0x3c,0xae,0x74,0xf4,0x4d,0xeb,0x3b,0xd1,0xef,0xd3,0x7f, + 0xfa,0x6a,0xc0,0xd5,0x73,0xd7,0xf8,0xd7,0x2e,0x5d,0x9f,0x79,0xbd,0xef,0xc6,0xec, + 0x1b,0xb7,0x6e,0x26,0xdd,0x1c,0xb8,0x25,0xba,0xf5,0xf8,0x76,0xf6,0xed,0x17,0x77, + 0xa,0xee,0x4c,0xdc,0x5d,0x7a,0x8f,0x78,0xaf,0xfc,0xbe,0xda,0xfd,0xea,0x7,0xfa, + 0xf,0xea,0x7f,0xb4,0xfe,0xb1,0x65,0xc0,0x6d,0xe0,0xf8,0x60,0xc0,0x60,0xcf,0xc3, + 0x59,0xf,0xef,0xe,0x9,0x87,0x9e,0xfe,0x94,0xff,0xd3,0x87,0xe1,0xd2,0x47,0xcc, + 0x47,0xd5,0x23,0x46,0x23,0x8d,0x8f,0x9d,0x1f,0x1f,0x1b,0xd,0x1a,0xbd,0xf2,0x64, + 0xce,0x93,0xe1,0xa7,0xb2,0xa7,0x13,0xcf,0xca,0x7e,0x56,0xff,0x79,0xeb,0x73,0xab, + 0xe7,0xdf,0xfd,0xe2,0xfb,0x4b,0xcf,0x58,0xfc,0xd8,0xf0,0xb,0xf9,0x8b,0xcf,0xbf, + 0xae,0x79,0xa9,0xf3,0x72,0xef,0xab,0xa9,0xaf,0x3a,0xc7,0x23,0xc7,0x1f,0xbc,0xce, + 0x79,0x3d,0xf1,0xa6,0xfc,0xad,0xce,0xdb,0x7d,0xef,0xb8,0xef,0xba,0xdf,0xc7,0xbd, + 0x1f,0x99,0x28,0xfc,0x40,0xfe,0x50,0xf3,0xd1,0xfa,0x63,0xc7,0xa7,0xd0,0x4f,0xf7, + 0x3e,0xe7,0x7c,0xfe,0xfc,0x2f,0xf7,0x84,0xf3,0xfb,0x25,0xd2,0x9f,0x33,0x0,0x0, + 0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x25,0x0,0x0,0x80,0x83,0x0,0x0, + 0xf9,0xff,0x0,0x0,0x80,0xe9,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0, + 0x3a,0x98,0x0,0x0,0x17,0x6f,0x92,0x5f,0xc5,0x46,0x0,0x0,0x1a,0x54,0x49,0x44, + 0x41,0x54,0x78,0xda,0xec,0x9b,0x79,0x90,0x5d,0x57,0x9d,0xdf,0x3f,0xe7,0x9c,0xbb, + 0xbd,0xbd,0xfb,0xf5,0xa2,0xee,0xd6,0x6a,0xb9,0x2d,0x5b,0xb2,0x41,0x92,0x57,0x6c, + 0x36,0x1b,0x8c,0x27,0x83,0x31,0x36,0x43,0x26,0x63,0x32,0xa4,0xf0,0x14,0x54,0x86, + 0x94,0x93,0xc2,0x9e,0xa4,0x58,0xa6,0x26,0x20,0x87,0x61,0x28,0x6,0x82,0x31,0x93, + 0x54,0x19,0x18,0xc6,0x26,0xc,0x4b,0xf0,0x80,0x7,0x1b,0x86,0x2d,0x6,0xd9,0x1e, + 0xcc,0x92,0x10,0x6c,0x83,0x4d,0x2c,0xd9,0x52,0x4b,0xea,0xbd,0x5f,0x77,0xbf,0xee, + 0x7e,0xdb,0xdd,0xce,0xc9,0x1f,0xf7,0xf6,0xeb,0x27,0xa9,0x65,0x49,0x2d,0x89,0x71, + 0xa5,0x72,0xba,0x5e,0xbd,0x77,0xef,0xbb,0xf7,0xf6,0x3d,0xdf,0xfb,0xfb,0x7d,0x7f, + 0xdf,0xdf,0xef,0x77,0x9e,0x30,0xc6,0x70,0xae,0xc7,0x73,0xcf,0x3e,0xbb,0xe5,0xd9, + 0x67,0x9e,0x79,0x75,0x6c,0xb0,0x87,0xb7,0x6d,0xfb,0xe9,0xd6,0xad,0xe7,0x3d,0x57, + 0x2c,0x16,0x63,0xfe,0x9,0xc7,0xe0,0xe0,0x40,0x6f,0xa1,0x50,0xb8,0xae,0xa7,0xa7, + 0x7c,0xa5,0x65,0xd9,0xd9,0x85,0x85,0x85,0xdf,0xcc,0xce,0xce,0x3e,0x22,0xa5,0x7c, + 0xee,0xc8,0x91,0x51,0xbd,0x7c,0x9c,0x38,0xd7,0x0,0xfd,0xcf,0x9f,0xfc,0xe4,0xc6, + 0xb1,0xd1,0xb1,0x3f,0x35,0x30,0x1c,0x6a,0xa8,0x35,0x1a,0xb,0xa5,0xae,0xd2,0x7f, + 0xff,0x67,0x37,0x5c,0xff,0xc1,0x5c,0x2e,0x67,0x7e,0xdb,0xc0,0x9c,0x7f,0xfe,0x56, + 0x4b,0x8,0xf1,0xbe,0x37,0xbe,0xf1,0x8d,0x7f,0x7e,0xf3,0xcd,0xb7,0xd0,0xdf,0xdf, + 0x8f,0x94,0x92,0x46,0xa3,0xc1,0x13,0x4f,0x3c,0xc1,0x3,0xf,0x3c,0xf0,0xec,0xc1, + 0x83,0x7,0x7e,0x77,0x6c,0x6c,0xfc,0xf0,0x39,0x7,0xe8,0x89,0xc7,0x1f,0x7b,0xdb, + 0xd8,0x91,0xd1,0xf,0x23,0xd4,0xf9,0x96,0xe3,0x10,0x1b,0x68,0xb6,0x5a,0x18,0xa3, + 0xab,0xdb,0x2e,0x18,0x7e,0xcf,0xfa,0xa1,0xa1,0x87,0x37,0x6e,0xda,0x38,0xff,0x5b, + 0x4,0x47,0xf5,0x94,0xcb,0x8f,0xfc,0xd9,0x7f,0xfa,0xf0,0x6b,0x2f,0xbf,0xf2,0xa, + 0xc2,0x5a,0x9d,0x28,0x8a,0x30,0xc6,0x20,0xa5,0xc4,0xcd,0x66,0x59,0xf2,0x7d,0x3e, + 0xf9,0x17,0x1f,0xe1,0xdb,0xf,0x7f,0x6b,0x78,0x6c,0x7c,0xfc,0x85,0x73,0x6,0xd0, + 0xa3,0x3f,0xda,0xfb,0xee,0xd1,0x23,0xa3,0x1f,0x71,0x6c,0xa7,0xac,0x6c,0x7,0x3, + 0x18,0x61,0xc0,0x80,0x36,0x6,0x1,0x73,0xf9,0x42,0x6e,0x6f,0xa9,0x54,0xfa,0xa9, + 0x63,0x3b,0x3f,0xcd,0x66,0x33,0xcf,0x6c,0xdc,0xb8,0x61,0xbe,0x50,0x28,0x9c,0xb3, + 0x27,0xb6,0x63,0xc7,0xf6,0x3d,0x9f,0xb8,0xe7,0x9e,0xf,0x5d,0x2a,0x6d,0x96,0x96, + 0x96,0x30,0x97,0xee,0x82,0x56,0x2b,0xf9,0xd2,0xb6,0x61,0x6e,0xe,0xe7,0x97,0x4f, + 0x13,0x5f,0x7d,0x25,0xef,0xdd,0xf3,0xa1,0xa9,0xc7,0xf6,0x3e,0xba,0x59,0xed,0xd9, + 0xb3,0xe7,0xac,0xdf,0xc8,0x23,0x8f,0xfc,0xf0,0x8e,0x91,0x91,0xc3,0x7f,0xe5,0xba, + 0x99,0x8c,0xe5,0x38,0x18,0x1,0x9a,0x65,0xb7,0x16,0x28,0x21,0x89,0x75,0x9c,0xa9, + 0xd5,0xeb,0xdb,0xe7,0xe7,0xaa,0x6f,0xa8,0xd7,0x1b,0x6f,0x9,0xc3,0xf0,0x82,0xc5, + 0xa5,0xa5,0xbe,0x5a,0xad,0x26,0x27,0x26,0xa7,0x7c,0xc7,0xb6,0x5b,0x99,0x4c,0xe6, + 0xac,0x81,0xb5,0x6e,0xdd,0xba,0xee,0x5b,0x6f,0xbd,0xf5,0x3b,0x6f,0xb9,0xf5,0xf, + 0x58,0x7a,0xf0,0x21,0xc4,0x67,0xef,0x83,0x8b,0xb7,0xc3,0xfa,0xc1,0xe4,0x80,0x20, + 0x40,0xfe,0xe7,0x4f,0xa3,0x1f,0x7d,0x1c,0xef,0xa6,0x37,0xb2,0xf1,0xc2,0x6d,0xf9, + 0x1f,0xfe,0x8f,0x1f,0x8c,0x9c,0x75,0xb,0xfa,0xee,0xf7,0xbe,0xff,0x1f,0xc6,0x46, + 0xc7,0x3e,0x9e,0xc9,0x64,0xf1,0x3c,0x8f,0x58,0x6b,0xa0,0xf3,0x7f,0x8,0x84,0x31, + 0x18,0x21,0x10,0x2,0x74,0xac,0x89,0xa2,0x88,0x58,0xc7,0x80,0xc0,0x71,0x1c,0xba, + 0xbb,0x4a,0x7f,0xdf,0xd7,0xd7,0xf7,0x50,0x10,0x6,0x3f,0xb,0xc3,0x68,0x6c,0xd3, + 0xc6,0x8d,0xb5,0x4d,0x9b,0x36,0x9c,0x11,0xa9,0xf,0xf,0xf,0xff,0xe1,0xbd,0xf7, + 0xde,0xfb,0xb7,0x17,0x5c,0xb8,0xd,0xbf,0xe5,0x23,0xef,0xfe,0x2b,0x78,0xfa,0xd7, + 0xe8,0xbf,0xd8,0x3,0x5b,0xb6,0x20,0x3f,0xfa,0x71,0xf8,0xf5,0xb3,0x98,0xf,0x7e, + 0x0,0x2e,0x18,0xc6,0x6,0xee,0xbc,0xf3,0xce,0xa7,0xad,0xb3,0x9,0xce,0x43,0xf, + 0x7f,0xeb,0xc3,0x33,0x33,0x95,0x3f,0xcb,0x64,0xb3,0x78,0xae,0x47,0x1c,0xc7,0xcb, + 0x98,0x80,0x11,0x8,0x0,0xc,0x46,0xa4,0x27,0x18,0x10,0x42,0x60,0x3b,0x36,0x8e, + 0x70,0x30,0xc6,0x10,0x45,0x31,0x53,0xd3,0x33,0xb7,0x4c,0x4c,0x4e,0xde,0x92,0xcd, + 0xe6,0x28,0x97,0xcb,0xf,0x57,0x2a,0x95,0xaf,0x47,0x71,0xf8,0xf3,0xa9,0xc9,0xe9, + 0xd1,0x62,0xb1,0xd0,0xb8,0xf8,0xe2,0x1d,0xf1,0xe9,0x47,0xad,0xc1,0xd7,0xf,0xe, + 0xe,0x12,0xfa,0x1,0x28,0x85,0x7e,0xcf,0xbf,0x45,0x7e,0xf2,0x1e,0xe4,0xc7,0x3e, + 0x9,0xeb,0xd7,0xc3,0xf3,0x2f,0x60,0xfe,0xe3,0xfb,0x31,0x17,0x5d,0x8,0xcd,0x26, + 0x4e,0x3e,0xcf,0xf6,0xed,0x17,0x95,0xce,0x1a,0x40,0x7f,0xf7,0xf5,0x6f,0xdc,0xbf, + 0xb0,0xb8,0xf8,0x8e,0x6c,0x26,0x8b,0xe3,0x38,0x2b,0xe0,0xb0,0x6c,0x40,0x26,0x79, + 0x6b,0x83,0x73,0xf4,0xb6,0x49,0x37,0x2c,0xa5,0xb0,0x6c,0xb,0x61,0x20,0x8e,0x35, + 0x93,0x93,0x93,0x37,0x8d,0x4f,0x8c,0xdf,0x64,0x29,0x8b,0x72,0x77,0xf7,0xcf,0x5c, + 0xd7,0xf9,0xdc,0xd8,0xd8,0xf8,0xf,0xe2,0x38,0x9e,0x9c,0x9d,0x9d,0x8d,0x76,0xef, + 0xde,0xa5,0x4f,0xe5,0xfe,0x72,0xb9,0x6c,0xbf,0xe3,0x24,0xf,0x81,0x30,0x84,0x6c, + 0x16,0xfd,0xee,0x77,0x21,0xff,0xe4,0x7d,0xf0,0xe8,0x3f,0x62,0xfe,0xfd,0xbf,0xc3, + 0xec,0xde,0x9,0x73,0xf3,0x20,0x4,0xc6,0x40,0xb1,0x58,0x8a,0xce,0xa,0x40,0x5f, + 0xf9,0xea,0xd7,0xbe,0xdc,0x68,0x34,0xde,0x96,0xcf,0xe5,0x91,0x52,0x26,0xe0,0x88, + 0xe,0x97,0x6a,0x3,0x21,0xda,0x60,0xd1,0xb1,0x6f,0xc5,0xa0,0x4c,0x6a,0x6d,0xc9, + 0xb6,0x52,0x12,0x65,0x39,0x80,0xc0,0x18,0xc3,0xfc,0xfc,0xfc,0x55,0xb3,0xb3,0xb3, + 0x57,0xed,0xdb,0xff,0x3c,0xa5,0x52,0xe9,0x89,0xc1,0x81,0x75,0xf7,0x8e,0x8e,0x8e, + 0x3d,0xda,0x53,0x2e,0x8f,0x1f,0x19,0x1b,0x8b,0xb7,0x5d,0x30,0x7c,0x42,0xbe,0x68, + 0xb5,0x5a,0xf3,0x51,0x14,0x61,0xdb,0x36,0x46,0x29,0x88,0x22,0xc4,0x3,0xdf,0x0, + 0xa9,0x60,0xe7,0x25,0x88,0x6f,0x7f,0x17,0xf3,0xf2,0x4b,0x60,0x68,0x8,0x5a,0x2d, + 0x84,0x80,0x7a,0xbd,0x2e,0xe5,0x99,0x82,0xf3,0xb7,0x5f,0xfa,0xf2,0x43,0xb5,0x5a, + 0xed,0x6d,0xf9,0x5c,0x1e,0x21,0xc4,0xca,0x24,0x39,0x7a,0xf2,0x49,0x18,0x33,0xc7, + 0x80,0xc3,0xd1,0xe0,0x1c,0xb,0xa8,0x58,0xf9,0x3f,0x32,0x75,0x45,0xd7,0xf3,0xb0, + 0x2c,0x9b,0xa5,0xa5,0xda,0x35,0xcf,0x3d,0xb7,0xff,0xfe,0x9f,0xfe,0xec,0xe7,0x7, + 0x7f,0xb8,0xf7,0xd1,0xc7,0x67,0x67,0xe7,0x6e,0x1f,0x1f,0x1f,0xdf,0x72,0xe8,0xd0, + 0xa1,0x55,0xe7,0x34,0x39,0x39,0xf5,0x8f,0x33,0x33,0xd3,0x58,0xb6,0x5,0x96,0x85, + 0xf8,0xfc,0x17,0x10,0xdf,0x7f,0x4,0x73,0xc7,0xed,0xe8,0x3f,0xdf,0x3,0x9e,0x87, + 0xbc,0xeb,0xa3,0x30,0x31,0x9,0x8e,0x4d,0x14,0x45,0xec,0xdf,0xbf,0x2f,0x3c,0x23, + 0x92,0xfe,0xca,0x57,0xbf,0xf6,0xed,0x5a,0xad,0x76,0x43,0x36,0x9b,0xb5,0x8c,0x31, + 0x8,0x21,0x90,0x42,0x20,0xa4,0x44,0xa,0x85,0x10,0x2b,0x53,0x17,0x42,0x80,0x50, + 0x29,0x0,0x26,0xd9,0xdb,0xb6,0xa6,0x55,0xc0,0x39,0x16,0xe2,0xe,0xd0,0xdb,0xb4, + 0x96,0x9e,0x67,0x40,0xa3,0x4d,0x4d,0x59,0x6a,0x29,0xe3,0x79,0xfb,0xba,0xba,0xba, + 0xbe,0xd4,0xd7,0xd7,0xf7,0xe3,0xc9,0x89,0xc9,0xab,0xab,0xb,0xb,0x3b,0x86,0xd6, + 0xf,0xfe,0xe0,0x4f,0x3f,0xf0,0xfe,0xb1,0x57,0xbd,0xea,0x95,0xbf,0x7e,0xe7,0xed, + 0xb7,0xb3,0x74,0xdf,0x17,0x11,0x5f,0xf8,0x12,0xe6,0xbd,0x7f,0x82,0x79,0xcd,0x35, + 0x10,0xc5,0x30,0x5f,0x45,0xee,0xf9,0x8,0xb4,0x5a,0x38,0x9f,0xfa,0x4b,0x46,0xe6, + 0x66,0xf9,0xe3,0x77,0xbd,0xeb,0xbd,0x6b,0x6,0xe8,0xbf,0xde,0xfb,0xd9,0x87,0xa4, + 0x10,0x37,0xf6,0xf4,0xf4,0x48,0xa3,0x35,0xc6,0x18,0x8c,0x31,0x68,0xad,0x53,0x4b, + 0x11,0x48,0x25,0x91,0x52,0xa6,0x9f,0x15,0x22,0x5,0x8,0xa3,0x31,0x46,0x77,0x12, + 0x54,0xa7,0xc7,0x1d,0x7,0xc4,0xaa,0x16,0xd9,0xf1,0xc1,0xa4,0x96,0x99,0x3c,0x24, + 0x89,0xa5,0x54,0x45,0x4a,0x39,0x29,0x85,0x18,0x50,0x96,0x2a,0xd6,0x1b,0xf5,0x29, + 0x21,0xe4,0x57,0x3e,0xf1,0xf1,0x8f,0x5d,0xfc,0xf1,0x4f,0xdd,0x7d,0xe3,0x96,0xd1, + 0x9,0xea,0xd5,0x5,0xb8,0xfe,0xba,0x15,0x1d,0xe4,0xba,0x70,0xf8,0x8,0xd6,0x63, + 0x3f,0xc6,0x7e,0xeb,0xcd,0x7c,0xe8,0x13,0x1f,0x6f,0x3d,0xfc,0xcd,0x6f,0xf6,0xad, + 0x9,0xa0,0xff,0xf2,0xd9,0xbf,0xfe,0xdc,0x54,0xa5,0xf2,0xae,0x4d,0x83,0x83,0xf4, + 0x94,0x4a,0x84,0x51,0xd4,0xfe,0xce,0x52,0x16,0x52,0xa,0xe2,0x58,0x13,0x46,0x21, + 0x46,0x1b,0x10,0x2,0x29,0x25,0x52,0x5a,0x48,0x25,0x53,0x1b,0x4a,0x40,0x15,0x1d, + 0x24,0x7e,0x32,0x20,0x8e,0xb5,0xae,0xe3,0xf7,0x9,0x8c,0x36,0xa9,0x32,0x86,0x4c, + 0x36,0x43,0x10,0x86,0xcc,0xcd,0xce,0xe2,0xfb,0x41,0x14,0x86,0xe1,0x67,0x1f,0xfa, + 0xe6,0x37,0x6e,0xfc,0xe0,0x9f,0x7f,0x64,0xf3,0xd6,0xe1,0x61,0x5a,0xd5,0x6a,0x3b, + 0x98,0x8,0x21,0x70,0x73,0x39,0xb4,0x52,0x7c,0xf6,0xd3,0x9f,0xe6,0xfe,0xbf,0xf9, + 0x9b,0x6b,0xc6,0xc6,0xc7,0x7f,0x72,0xda,0x0,0x3d,0xf4,0xad,0x7f,0x78,0xd3,0xe3, + 0xbf,0xf8,0xe5,0x7d,0x96,0xeb,0xf5,0x6e,0x1d,0x1a,0xa0,0xcb,0x75,0xd0,0x42,0xb4, + 0x43,0x76,0x14,0x45,0x84,0x61,0x88,0x54,0x12,0xdb,0x72,0x12,0x37,0x13,0x24,0x16, + 0x86,0x0,0x91,0xba,0x9f,0x4c,0x60,0x92,0xe9,0x77,0x47,0x5b,0x92,0x78,0x11,0xb0, + 0xc4,0x9,0x2d,0xce,0x60,0x90,0x8,0x2c,0xcb,0xc2,0x71,0x6c,0xfc,0xc0,0x67,0x71, + 0x71,0x89,0x20,0x8,0x68,0xb5,0x5a,0x28,0xa5,0xa6,0x1a,0xf5,0xda,0xbf,0xfe,0xfc, + 0xe7,0x3f,0xf7,0xf6,0xb7,0xbf,0xfd,0x5f,0xfd,0xfe,0xd,0x37,0xdc,0x40,0xa1,0x50, + 0x40,0x4a,0x89,0xef,0xfb,0x3c,0xf3,0xcc,0x33,0x7c,0xf1,0x8b,0x5f,0xac,0xfd,0xe2, + 0x17,0xff,0xeb,0xf5,0xa3,0xa3,0x63,0x3f,0x5f,0x53,0x2e,0xf6,0x91,0x8f,0x7d,0xe2, + 0x87,0x63,0xb3,0xd5,0xeb,0x7a,0x6,0x7,0x59,0xdf,0xd3,0x45,0x41,0xa,0x6c,0xd7, + 0x4d,0x27,0x29,0x38,0x74,0x68,0x84,0xa9,0xa9,0x69,0x8a,0xc5,0x22,0x1b,0x36,0xac, + 0xa7,0x54,0xea,0x2,0x40,0x6b,0x93,0xb2,0x4d,0x8a,0x98,0x0,0x61,0x34,0x18,0x8d, + 0x14,0x20,0xa4,0x4,0x21,0x52,0x38,0xc,0x74,0xbc,0x9f,0x1c,0x20,0x91,0xba,0x17, + 0xd8,0x96,0x85,0x65,0x5b,0x4,0x7e,0xc0,0xc2,0xe2,0x22,0x61,0x18,0x22,0x10,0x4, + 0x61,0x88,0x1f,0xf8,0x41,0x77,0x57,0xd7,0xa3,0xbd,0xbd,0xe5,0x9b,0xdf,0xf5,0xce, + 0x3f,0xda,0xb8,0x6e,0xdd,0xc0,0x5b,0x7,0x6,0x6,0xae,0xb4,0x2c,0xcb,0x9b,0x9f, + 0x9f,0x7f,0x61,0x74,0xf4,0xc8,0x37,0x7d,0x3f,0x78,0x7c,0x7c,0x7c,0xa2,0xd5,0xf6, + 0x88,0xd3,0x75,0x2f,0x3f,0x8,0xae,0xce,0xb9,0xe,0x9e,0x30,0xc4,0x7e,0x8b,0xc0, + 0xb6,0xb1,0x1c,0x37,0x21,0xe1,0xd4,0x54,0x85,0x14,0x6d,0x4e,0x58,0xd6,0x3b,0x82, + 0xc4,0xcd,0x10,0x22,0xd,0x68,0x1a,0x6d,0xc,0x18,0x4d,0x6c,0x40,0xa4,0xfc,0x21, + 0x45,0xa,0x9e,0x10,0x8,0x21,0x57,0x44,0x92,0x38,0xfa,0x3e,0x8e,0x27,0x73,0x70, + 0x2c,0x1b,0x65,0x29,0x5a,0x2d,0x9f,0x85,0xc5,0x5,0xe2,0x28,0x51,0xe7,0x61,0x1c, + 0x2f,0xbb,0x92,0x33,0x3b,0x37,0xf7,0x86,0x9d,0x3b,0x5f,0x76,0xe1,0x53,0x4f,0xff, + 0xfa,0xa9,0xde,0x9e,0x9e,0x8f,0x9e,0x6c,0xbe,0xa7,0x5,0xd0,0x7f,0xfb,0xd2,0x57, + 0xbf,0x54,0x2a,0x95,0x70,0x7d,0x1f,0x19,0xb4,0x8,0xa5,0x41,0xab,0x2,0x51,0x14, + 0x62,0x5b,0x36,0x42,0xa,0xb6,0x6c,0xd9,0xc2,0xa6,0x4d,0x9b,0x30,0xc6,0x60,0x59, + 0x56,0xc2,0x9,0x80,0x94,0x2,0xd0,0x89,0xa2,0x16,0x20,0x5,0x28,0x29,0x31,0x52, + 0xa0,0xb5,0x46,0x6b,0x8d,0xd1,0x31,0x66,0x19,0x1c,0x49,0x4a,0xf0,0xa4,0xd1,0x50, + 0xb4,0x23,0xe0,0xf1,0x51,0xcd,0x60,0x3b,0x16,0x96,0x65,0xd1,0x6c,0xb5,0xa8,0x56, + 0x17,0x88,0xe3,0x8,0xa5,0x14,0x41,0x98,0xb8,0x7c,0x22,0x15,0x24,0xda,0x68,0xbd, + 0x6f,0xff,0xf3,0xef,0xee,0xef,0xeb,0xbf,0x3,0x68,0x9d,0x6c,0xce,0xa7,0xa5,0x83, + 0xe6,0xe6,0x66,0xff,0x65,0x36,0x93,0xf1,0xb2,0x9e,0x47,0x36,0x93,0xc1,0x75,0x5c, + 0xb4,0xd6,0x84,0x61,0x88,0x46,0x27,0x84,0x6c,0xc0,0xb2,0xac,0x44,0x90,0x69,0xd3, + 0x31,0x97,0x94,0x67,0x4c,0xc,0x3a,0x89,0x62,0xcb,0x96,0xa5,0x94,0xc2,0x71,0x1c, + 0x1c,0xc7,0x41,0x59,0x76,0xea,0x92,0x31,0x51,0x14,0xa2,0xe3,0x28,0x1,0xcf,0x98, + 0x4,0x1c,0xd1,0x69,0x3e,0x9,0x38,0x96,0x65,0x61,0x5b,0x16,0x8d,0x46,0xe3,0x28, + 0x70,0xfc,0x20,0x20,0x4a,0xc1,0x59,0x3e,0x45,0x29,0x25,0x27,0x27,0xa7,0xde,0x51, + 0xab,0xd7,0xba,0x4f,0x65,0xce,0xa7,0xc,0xd0,0xb7,0xff,0xe1,0x3b,0xef,0x4c,0xcc, + 0xd8,0xc2,0x52,0x2a,0x8d,0x4a,0x12,0x21,0x12,0xb,0x88,0xc3,0xb8,0xad,0x68,0xe2, + 0x38,0x26,0x8e,0xd3,0x30,0x2e,0x92,0x70,0xbf,0xb8,0x54,0x63,0x72,0x72,0x9a,0xc5, + 0xc5,0xa5,0xa3,0xfc,0xa3,0xad,0x1f,0xd3,0x63,0x85,0x10,0x58,0x96,0x8d,0x6d,0xd9, + 0x58,0xca,0xc2,0x18,0x88,0xa3,0x88,0x28,0xc,0x12,0xc0,0xf4,0xa,0x2f,0x9,0xc0, + 0x52,0xa,0xd7,0xb1,0x69,0xd4,0x1b,0x2c,0x2c,0x2e,0x12,0xc7,0x11,0x52,0x4a,0x82, + 0x20,0x20,0x4a,0xa3,0xeb,0xb2,0x66,0x12,0x69,0x34,0x6d,0x36,0x5b,0x5e,0xa5,0x32, + 0x7b,0xf1,0xe8,0xd8,0xb8,0x38,0x6b,0x2e,0x76,0xf8,0xd0,0xe1,0xdb,0x2d,0xa5,0x88, + 0xa2,0x10,0xa1,0x75,0x12,0x85,0xc4,0x4a,0x9c,0x89,0xe3,0x18,0x65,0x49,0x84,0xb0, + 0x56,0x26,0x20,0x5,0x96,0x6d,0x23,0x11,0xcc,0xce,0xcd,0x33,0x3a,0x39,0x49,0x7f, + 0x4f,0xf,0xa5,0x52,0x31,0x25,0x64,0x83,0x92,0x20,0x95,0x22,0x8,0x35,0x33,0x95, + 0x19,0x46,0xe,0x1e,0xc4,0x75,0x1c,0x86,0xd6,0xf,0xd1,0xd7,0xdb,0x97,0x54,0x4, + 0xe2,0x18,0x6d,0x12,0x37,0x8c,0xe2,0x8,0x42,0x8d,0x94,0x12,0xc7,0x71,0xb1,0x1d, + 0x9b,0x7a,0xbd,0xc1,0x62,0xad,0x86,0xd6,0x1a,0x25,0x53,0xcb,0x89,0x63,0x3a,0xd2, + 0xe3,0xe3,0xf8,0x6b,0x7e,0x7e,0xfe,0x95,0x52,0x8a,0x1f,0x6f,0x58,0x3f,0xd4,0x3c, + 0x2b,0x0,0x55,0x66,0x67,0x5f,0x56,0x28,0x14,0x88,0xe3,0x18,0x63,0xc,0x4a,0xa8, + 0xb6,0x38,0x5c,0x26,0x66,0x93,0xea,0x99,0x44,0x51,0x4b,0x5a,0x7e,0x8b,0x7d,0xfb, + 0xf6,0x13,0xc7,0x31,0x9e,0xe7,0x71,0xf1,0xb6,0x6d,0x14,0x8b,0x5,0x10,0x32,0xe1, + 0x28,0x9,0xae,0x2,0x21,0x21,0x12,0x86,0x28,0x8e,0xa8,0xd5,0x6b,0x4,0x81,0x4d, + 0x18,0x86,0x2b,0xd3,0x12,0x9,0x7f,0x48,0xa9,0x3a,0x78,0xd9,0xa0,0x4d,0xcc,0xd2, + 0xe2,0x52,0x5a,0xa5,0x4c,0x1e,0x4b,0xd0,0x6,0x87,0x55,0xc1,0x21,0x7d,0x70,0x33, + 0x33,0x33,0xd7,0xd,0xe,0xe,0xde,0xb,0x9c,0x39,0x40,0x5f,0xfd,0xda,0x3,0x1f, + 0xf0,0x7d,0xdf,0xca,0x66,0xb2,0xd8,0x9e,0x85,0xe7,0xba,0xd8,0x8e,0x83,0x65,0x59, + 0x28,0xcb,0x4a,0x23,0x8e,0x58,0x89,0x64,0x69,0xc4,0xd2,0xda,0x50,0x9d,0xaf,0x52, + 0x6f,0xd4,0x18,0x18,0x18,0x64,0x30,0xe3,0x91,0xcd,0x78,0x84,0x41,0x88,0x0,0xb4, + 0x11,0x4,0x1a,0x84,0xd6,0x18,0x23,0xe8,0xeb,0xe9,0x25,0x7f,0xf9,0xe5,0x8,0x4, + 0x9e,0xe7,0x21,0xa4,0x40,0x1b,0x9d,0xb8,0x5d,0x2a,0x40,0xc3,0x20,0x40,0x2a,0xb, + 0xc7,0xb6,0x68,0xb4,0x5a,0x54,0x17,0x16,0x50,0x4a,0x81,0x10,0x84,0x61,0x44,0x14, + 0xc5,0x6d,0xcb,0x3e,0xe,0x1c,0xb3,0x22,0x66,0x17,0x97,0x96,0xae,0x88,0xa2,0xb8, + 0xc,0x4c,0x9d,0x31,0x40,0x13,0xe3,0x13,0x6f,0xb7,0x2c,0x1b,0x69,0xdb,0x8,0xd7, + 0xc5,0xce,0xe5,0xc9,0x67,0x32,0x28,0x21,0xd0,0x3a,0x3e,0x4a,0xad,0x24,0x72,0x30, + 0xf9,0x9c,0xf1,0x3c,0xb6,0x5f,0x74,0x11,0x7e,0xe8,0x93,0xc9,0x64,0xc9,0x78,0x1e, + 0x71,0x14,0xb7,0x6f,0x5c,0x23,0xd0,0x71,0x9b,0x7e,0x70,0x5d,0x97,0x6c,0x36,0x87, + 0x40,0xa3,0x63,0x4d,0x6c,0x92,0x62,0x9b,0x44,0x50,0xab,0xd7,0x99,0x5f,0x5a,0xc4, + 0xcd,0x64,0xd1,0x2,0x9a,0xd5,0x5,0xa4,0xd1,0x64,0x72,0x39,0x74,0x1c,0x13,0x45, + 0x71,0x92,0xe6,0x1c,0x97,0xc0,0x1c,0x3f,0x94,0x94,0x4,0x41,0x98,0xad,0xd5,0x6a, + 0x43,0x47,0x8e,0x8c,0xee,0xdb,0xb8,0xf1,0xc4,0xc5,0xb8,0x93,0x2,0xf4,0x9d,0xef, + 0x7e,0xef,0xf7,0x5a,0xad,0xd6,0x8e,0xc1,0xc1,0x41,0x22,0x21,0x98,0xab,0x37,0x59, + 0xa,0x35,0x3d,0x42,0x52,0xce,0x65,0xf1,0x6c,0x2b,0x29,0x71,0x68,0xd3,0x76,0x2f, + 0x63,0xc,0x26,0x36,0x28,0xa5,0xe8,0x1f,0xe8,0x3f,0xe6,0x6e,0xd,0x60,0xa7,0xe4, + 0x6c,0x3a,0x24,0x8e,0x41,0x63,0x88,0xe3,0x10,0x8c,0x46,0x6b,0x83,0x92,0x12,0x3f, + 0x8,0xa8,0xcc,0xce,0x31,0x3e,0x33,0x4b,0x53,0x1b,0xa,0xdd,0x65,0x6c,0x25,0x9, + 0xeb,0x35,0xb2,0x52,0x90,0xcb,0xe5,0x12,0x9d,0xa3,0x13,0xce,0x11,0x62,0x15,0x88, + 0x8e,0xfa,0x68,0x40,0xa,0x62,0xad,0x69,0x36,0x9b,0x43,0xb5,0x5a,0x2d,0x3,0xd4, + 0xd6,0x4,0xd0,0x6f,0x7e,0xf3,0x7f,0x7a,0x17,0x17,0x97,0xae,0x2c,0xe4,0xb,0xac, + 0xeb,0xef,0xa7,0xb2,0xb8,0x48,0x73,0xb6,0x4a,0xa0,0x1c,0x2c,0x3f,0x44,0x47,0x8b, + 0xa8,0x28,0x24,0x68,0x36,0x89,0x8d,0x41,0x4a,0x81,0x6d,0x59,0xd8,0xb6,0x83,0xe7, + 0x7a,0xb8,0xae,0x3,0x12,0x24,0x32,0x99,0x80,0x0,0xcb,0xb2,0xb1,0x54,0x92,0x6a, + 0x24,0x79,0x93,0xc6,0x18,0x52,0x1d,0x14,0x25,0x2,0x52,0x6b,0x40,0xd0,0xf2,0x3, + 0x2a,0x73,0x73,0x1c,0x1e,0x1b,0x67,0xb2,0x52,0x21,0x5b,0xee,0x85,0x66,0x93,0x9c, + 0xeb,0x91,0xc9,0xe4,0xb0,0xd1,0xf8,0xbe,0x4f,0xac,0xcd,0xa,0x30,0xa7,0x98,0x18, + 0x68,0xad,0x9,0xa3,0x70,0x20,0x8,0x82,0xae,0x35,0x3,0x34,0x39,0x35,0xb5,0x5b, + 0x29,0xf9,0xb2,0xee,0xee,0x12,0x52,0xa,0xb2,0xae,0x43,0x7f,0x4f,0x37,0x91,0xe3, + 0xa1,0xe3,0x98,0xc3,0xe3,0x13,0x4c,0x8f,0x8e,0xe2,0xd7,0xeb,0xb8,0x9e,0x87,0x63, + 0x27,0x62,0xcd,0x71,0x1d,0xf2,0xb9,0x3c,0xc5,0x62,0x91,0x42,0x21,0x4f,0x2e,0x97, + 0xc3,0x75,0xdd,0x34,0xfc,0x86,0x44,0x32,0xc2,0x4e,0xb9,0xb,0x1,0xb1,0x8e,0xd1, + 0xb1,0x46,0x47,0xba,0x5d,0xc3,0xd6,0x5a,0x33,0xbf,0xb0,0xc8,0xcc,0x5c,0x95,0x38, + 0xd6,0x14,0x3c,0xf,0x5b,0x80,0xa5,0x35,0xbe,0xdf,0x44,0x4a,0xc8,0x65,0x32,0xc4, + 0xcb,0x1a,0xc1,0x88,0xd5,0xdd,0xeb,0x4,0x1b,0x12,0x81,0xdf,0xf2,0xfb,0x97,0x6a, + 0xb5,0x1e,0x60,0x74,0x4d,0x0,0x35,0x1b,0xcd,0xeb,0x95,0x54,0x3b,0x6d,0xdb,0x21, + 0x8c,0x22,0x5c,0xdb,0xa6,0x3b,0xe3,0x71,0xe0,0xd0,0x61,0xfc,0x28,0xa2,0xd5,0x6c, + 0x12,0x47,0x11,0x5d,0xdd,0xdd,0x14,0xb,0x5,0x2c,0x4b,0xa1,0xb5,0x26,0x8,0x2, + 0xe6,0xe7,0xe7,0xa9,0x54,0x2a,0x58,0x96,0x45,0xb1,0x58,0x64,0x60,0x70,0x80,0x72, + 0x77,0x19,0xd7,0x4d,0xc4,0xa5,0xef,0x7,0xa8,0xb4,0x1c,0x12,0xeb,0x38,0xe1,0x26, + 0xb3,0x5c,0x27,0x32,0xd4,0x1b,0x4d,0xea,0xcd,0x6,0x2,0x43,0x2e,0x97,0xa5,0x98, + 0xcf,0x23,0xa4,0xa0,0x15,0xf8,0x4,0x51,0x88,0xca,0x65,0x70,0x1d,0x3b,0x5,0xf4, + 0xd8,0x61,0x56,0xb5,0xa6,0x4e,0xae,0x54,0x4a,0xd1,0x6c,0x36,0xbb,0xe6,0xe7,0xe7, + 0xbb,0xd6,0x4c,0xd2,0x61,0x14,0x5e,0x63,0xc,0xeb,0x97,0x2f,0x1b,0x46,0x31,0x23, + 0x7,0xe,0x70,0x78,0xe4,0x10,0xa5,0x72,0x99,0x4d,0x9b,0x37,0x53,0xb8,0x70,0x1b, + 0x96,0x94,0x49,0x26,0x2d,0x56,0xca,0x80,0xb1,0x8e,0x69,0x35,0x5b,0xd4,0x6a,0x35, + 0x66,0x2a,0x33,0xfc,0xea,0x57,0xbf,0xa2,0xa7,0xbb,0xcc,0x79,0xe7,0x9d,0x47,0xb9, + 0xa7,0x8c,0xc1,0x10,0xc7,0xba,0xad,0x92,0xdb,0xef,0x1d,0x7a,0x47,0xa,0xc8,0x79, + 0x1e,0xd2,0xb2,0x70,0x5c,0x97,0x58,0xc7,0xa8,0x7a,0x9d,0x1e,0xbb,0x40,0x21,0x97, + 0x4d,0x78,0xef,0x58,0x7e,0x59,0x6d,0x74,0xe8,0xb5,0x76,0xa6,0x22,0x25,0x41,0x14, + 0x96,0xea,0x8d,0xc6,0xda,0x1,0x8a,0x63,0x7d,0x89,0x36,0x1a,0xa5,0x14,0x71,0xac, + 0xa9,0x54,0x66,0x38,0x30,0x32,0xc2,0xa6,0x4d,0x9b,0xd8,0xb2,0x65,0x33,0xb9,0x5c, + 0xe,0x99,0x56,0x11,0x97,0x9f,0x50,0x14,0xc5,0x69,0x31,0xcc,0x26,0xe3,0x79,0x94, + 0x4a,0x45,0xfa,0xfb,0xfb,0xa8,0x56,0xab,0x4c,0x4c,0x4c,0xf0,0xcb,0xa7,0x9e,0x64, + 0xe3,0xd0,0x7a,0xce,0xdb,0xba,0x15,0xdb,0xb1,0xd3,0xfe,0x77,0x32,0x87,0x28,0x8e, + 0xda,0x7c,0x84,0xd6,0xb8,0x8e,0x83,0x93,0x4b,0x52,0x90,0x56,0x10,0xd0,0x6c,0x86, + 0xf4,0x74,0x95,0x70,0x6d,0x9b,0x30,0x8a,0x88,0xe2,0x18,0x29,0xe8,0xc8,0xfe,0xc5, + 0x2a,0xd6,0x63,0x8e,0x2d,0x2c,0x25,0x2e,0x26,0x5,0x3a,0x8a,0xcb,0x7e,0xcb,0xef, + 0x59,0x33,0x40,0x46,0x9b,0x22,0x26,0x11,0x56,0x41,0x10,0xb0,0xb4,0x54,0x63,0xe7, + 0xcb,0x5f,0xc6,0xa6,0x4d,0x9b,0xf0,0x3c,0x87,0x66,0xc3,0x27,0x8,0x82,0x24,0xc7, + 0x91,0x12,0xa5,0x14,0x19,0xcf,0xc5,0x71,0x1d,0x84,0x10,0xb4,0x5a,0x2d,0xc2,0x30, + 0xc6,0xb6,0x1d,0x5c,0xd7,0x25,0x97,0xcb,0x31,0x3d,0x3d,0xcd,0xc4,0xe4,0x24,0x73, + 0xd5,0x2a,0xdb,0xb7,0x6f,0x27,0x97,0xcb,0x13,0xea,0x18,0x29,0x25,0xb6,0xe3,0x10, + 0xb4,0xfc,0x44,0x11,0x5b,0x16,0xa5,0x5c,0xe,0xd7,0x71,0xf0,0x7d,0x1f,0x25,0x5, + 0xc5,0x5c,0x16,0xcb,0x52,0x44,0x51,0x4c,0x1c,0x1b,0x2c,0x95,0x92,0xff,0x9,0xad, + 0xc7,0x74,0x34,0xa,0x3a,0xf6,0xa6,0xe2,0x36,0x8a,0x22,0x8e,0xaf,0x13,0x9c,0x56, + 0x98,0x37,0x12,0x41,0x3b,0xa7,0x59,0xbf,0x7e,0x88,0x52,0x57,0x89,0xc5,0x85,0x25, + 0xf6,0xef,0x7f,0x9e,0x85,0x85,0x45,0x3c,0xcf,0x25,0x9f,0xcf,0xb5,0xef,0x25,0xe3, + 0x79,0x18,0x4,0x8e,0xed,0xb2,0x71,0xe3,0x10,0xa5,0xa2,0x4b,0xbd,0xd1,0xa4,0xd5, + 0x6a,0x51,0xc8,0x17,0xb0,0x94,0x85,0x6d,0xbb,0x4c,0x4f,0x4f,0xf1,0xf4,0x53,0x4f, + 0x91,0xef,0x2e,0xa3,0x32,0x39,0x2c,0xc7,0xa6,0xa7,0xab,0x40,0xc9,0x71,0x91,0x5a, + 0x63,0x2b,0xb,0x89,0x21,0xc,0x3,0xb4,0x8e,0x71,0x94,0x44,0x48,0x89,0x41,0x10, + 0xeb,0x90,0x5a,0x6d,0x89,0x46,0xa3,0x4e,0xb9,0xa7,0x27,0x2d,0x8b,0x98,0x55,0x29, + 0x48,0x1c,0x7,0x99,0x69,0xe7,0x65,0xda,0x18,0x4c,0x47,0x35,0x74,0x6d,0x42,0x31, + 0xe5,0x7,0xcb,0xb2,0xf0,0x32,0x1e,0x53,0x93,0x53,0x1c,0x3e,0x32,0x4a,0xa5,0x32, + 0xb,0x40,0x51,0x17,0xf0,0x3c,0x37,0x49,0x2a,0xd3,0x76,0xcf,0xc8,0xc1,0x23,0x1c, + 0x38,0x30,0xc6,0xf0,0xf9,0xc3,0x6c,0xbb,0x70,0xb,0xdb,0x2e,0xd8,0x82,0xe7,0x15, + 0xa9,0x2e,0x2c,0x62,0x47,0x31,0xe5,0x9e,0x6e,0x10,0x86,0x89,0xf1,0x9,0x26,0xa7, + 0xa7,0x29,0xd,0xae,0x67,0xdd,0xc0,0x20,0x22,0xe3,0x52,0x5d,0x5a,0x20,0xab,0x4, + 0x52,0xd0,0x4e,0x6b,0x12,0x97,0x90,0x48,0x25,0xd1,0x46,0xb0,0xb4,0x54,0x63,0x6c, + 0x6c,0x14,0xad,0xd,0xbd,0x7d,0x7d,0x89,0x5,0x99,0x55,0xf4,0xce,0x8b,0x19,0x87, + 0x39,0x9,0x6f,0x9d,0x2a,0x40,0xc6,0x98,0xa4,0x8e,0x2c,0x24,0xb,0xb,0x8b,0x1c, + 0x3c,0x38,0x42,0xad,0x56,0xef,0x70,0xeb,0xa4,0xdc,0x20,0x84,0x24,0x8e,0x35,0x52, + 0x2a,0x1a,0x8d,0x3a,0x87,0xf,0x1f,0x64,0x7e,0x7e,0x9e,0xe7,0xf6,0xed,0xe3,0x82, + 0xb,0xb6,0x70,0xcd,0x35,0x57,0xd0,0xbf,0xae,0x8f,0x39,0x3d,0x87,0x1f,0xfa,0x14, + 0x8b,0x45,0x8c,0x90,0xcc,0x54,0x66,0x31,0x51,0x40,0x1c,0x86,0x34,0x81,0xc5,0xf9, + 0x5,0x36,0xf6,0x76,0x63,0x29,0x88,0xc2,0x18,0x91,0x56,0xc,0x44,0xda,0xcc,0x8b, + 0xa3,0x98,0x30,0x8a,0xb0,0x1d,0x97,0x6c,0x26,0x93,0xee,0xd7,0x2f,0xc6,0xcd,0x47, + 0x81,0xb0,0xc,0xb8,0x48,0xe4,0x45,0x46,0x6b,0x9d,0x5d,0x33,0x40,0x96,0x65,0x1d, + 0x9,0xc2,0x70,0xa3,0x4c,0x4b,0x1a,0x53,0x53,0x53,0x34,0x1a,0x2d,0x94,0x52,0x48, + 0x21,0x69,0x6,0x2d,0x5a,0x7e,0xc2,0x19,0x8e,0xeb,0x60,0xdb,0xe9,0xca,0xd,0x1, + 0x10,0x50,0xad,0x4e,0xe3,0x37,0x97,0x38,0x34,0x72,0x90,0xc9,0xa9,0x49,0x7e,0xe7, + 0x86,0xd7,0xb1,0x79,0xf3,0x6,0xc2,0x30,0x24,0x8c,0x62,0x8a,0x5d,0x5d,0x80,0x60, + 0x6a,0x66,0x86,0xd1,0xdf,0x3c,0x43,0xb9,0xaf,0x9f,0x9c,0xe7,0xe0,0xda,0xe,0x96, + 0x12,0xed,0xa4,0x36,0x91,0xdb,0x49,0x23,0xa0,0xe5,0xfb,0xb8,0xae,0xcb,0xd0,0xd0, + 0x10,0xb6,0x65,0x61,0xb4,0xee,0x9c,0xfe,0xf1,0x75,0xec,0xe3,0x5b,0x93,0x8,0x21, + 0x68,0x34,0x9a,0x94,0x8a,0xc5,0xc5,0x62,0xb1,0x30,0xb1,0xe6,0x7a,0x50,0x2e,0x97, + 0xdb,0x6b,0x59,0x56,0x4d,0x6b,0x4d,0x14,0x85,0xd4,0x6a,0x35,0x2c,0x4b,0xa5,0x75, + 0x15,0x81,0x44,0xe2,0x7,0x21,0xf5,0x46,0x3,0x29,0x93,0x42,0x99,0x92,0x92,0x5c, + 0x2e,0x47,0x77,0x77,0x19,0xd7,0x51,0x14,0xb,0xe,0xae,0x3,0x3f,0x79,0xe2,0x9, + 0xbe,0xfe,0xc0,0x83,0x1c,0x78,0xe1,0x20,0xdd,0xdd,0x5d,0x78,0x9e,0x8b,0x30,0x86, + 0x6c,0x26,0x83,0xa7,0x14,0xcd,0xb9,0xa,0xfe,0xfc,0x2c,0x3,0xdd,0x5d,0x38,0xb6, + 0x85,0x52,0x36,0x96,0xed,0xa4,0x25,0x5a,0x91,0x92,0x6a,0x4c,0x14,0x45,0xd8,0x56, + 0x12,0x21,0xa5,0x92,0x2b,0xb5,0x24,0xf3,0x62,0xf6,0x63,0x8e,0xb2,0xa2,0xc0,0xf, + 0x90,0x42,0x56,0xb6,0x6d,0x1b,0xfe,0xdc,0xd5,0x57,0x5f,0xf5,0xc8,0x8b,0x61,0xf0, + 0xa2,0xcb,0x5f,0x16,0x16,0x17,0xe3,0x66,0xb3,0xb5,0xa1,0xd1,0x68,0x6c,0xd5,0xda, + 0x50,0xa9,0x54,0x88,0x63,0x4d,0xda,0xc4,0x48,0xb4,0x8c,0x8e,0x89,0xc3,0x88,0x42, + 0x3e,0xdf,0x56,0xc7,0x9e,0xe7,0x51,0xee,0xe9,0xa6,0x54,0xea,0x42,0x4a,0x45,0x4f, + 0xb9,0x84,0x65,0x29,0xe,0x1d,0x3a,0xcc,0xd4,0xd4,0xc,0x9b,0x36,0x6f,0xa2,0xbb, + 0xab,0x44,0xe0,0xfb,0x18,0xad,0x71,0x1c,0x3b,0xd1,0x4d,0x8d,0x6,0x7d,0x3d,0x3d, + 0xd8,0x8e,0x9d,0x10,0xaf,0xd1,0x88,0xb4,0x2c,0x22,0x5,0x4,0x81,0x9f,0x68,0x27, + 0xb3,0x9c,0xa2,0x98,0x55,0x40,0x11,0xed,0x84,0x79,0x59,0x74,0x2e,0x1f,0xa5,0x8d, + 0x41,0xc7,0x1a,0x63,0xf4,0xf4,0x25,0x97,0xec,0xf8,0xc0,0x15,0x97,0x5f,0xf6,0x77, + 0x3,0xeb,0xd6,0xd5,0xd7,0xc,0xd0,0xe0,0xc0,0xc0,0x73,0x93,0x93,0x53,0x9b,0x16, + 0x17,0x16,0x5f,0x67,0x30,0x54,0xab,0x55,0xa2,0x68,0x25,0xf1,0x15,0x26,0x11,0x6a, + 0x41,0x18,0xa0,0x94,0x95,0xb4,0x85,0x95,0xc2,0xb6,0x2d,0x4a,0xc5,0x12,0x83,0x83, + 0x43,0x6c,0xde,0xb2,0x85,0x72,0x5f,0x3f,0x7d,0xbd,0xbd,0xb8,0xae,0xcb,0xec,0xec, + 0x3c,0x95,0xd9,0x79,0x2e,0xbc,0x70,0x18,0xd7,0x71,0xd0,0x3a,0x46,0x4a,0xb,0x6d, + 0xc,0x73,0xf3,0xf3,0x44,0x51,0x44,0xa9,0x58,0xc2,0x71,0x1c,0x6c,0x69,0x70,0x2d, + 0xb0,0x84,0x41,0x98,0x98,0x30,0xf0,0x13,0x50,0x64,0x47,0x15,0xf2,0x24,0x24,0xdc, + 0xc9,0x3d,0x5a,0x6b,0x10,0x54,0x76,0xec,0xd8,0xf1,0xfe,0x57,0xbd,0xea,0x9a,0xfb, + 0xb,0x85,0x42,0x74,0xc6,0x15,0xc5,0x72,0xb9,0xfb,0xb1,0xe9,0x99,0x99,0xa8,0xd1, + 0x68,0x58,0x8e,0x63,0xd3,0x6c,0xb6,0x12,0xaf,0x5e,0x6e,0x31,0x5b,0x16,0xa,0x98, + 0xad,0xcc,0xe2,0xb9,0x2e,0x5d,0x5d,0xa5,0x54,0x58,0xc6,0xb4,0x5a,0x3e,0x0,0xdd, + 0xa5,0x12,0xeb,0xfa,0xfb,0x19,0x1e,0x1e,0x66,0x7a,0x7a,0x8a,0xa9,0xa9,0x19,0x46, + 0x8f,0x8c,0x73,0xde,0x79,0x9b,0xc8,0x64,0x32,0xc4,0x71,0x9d,0x6c,0x26,0x4b,0xb1, + 0x50,0x60,0xa6,0x52,0x61,0x68,0x68,0x88,0x62,0x3e,0x83,0xa3,0x12,0xe,0x5a,0x16, + 0x85,0xcb,0x45,0x36,0x81,0x20,0x30,0x86,0x63,0xb9,0xf9,0xf8,0x88,0xb4,0xc2,0x39, + 0x61,0x18,0x62,0x29,0x35,0xb1,0x7d,0xfb,0x45,0x1f,0x7c,0xf5,0xab,0x5e,0x79,0x9f, + 0xe7,0x79,0xa7,0x94,0xd6,0x9e,0xb4,0x26,0x7d,0xf1,0xc5,0x3b,0x1e,0xeb,0xed,0xed, + 0xf9,0x64,0x1c,0x6b,0xa,0x85,0x2,0x4a,0xad,0x68,0xe,0x1,0x28,0x91,0x34,0xea, + 0xc,0x30,0x53,0xa9,0xb0,0xb4,0x54,0x3,0x3,0xca,0xb2,0xc8,0xe5,0x73,0x24,0xa0, + 0x36,0xa8,0x2d,0x2d,0x61,0x8c,0x61,0x60,0x70,0x90,0x97,0xbf,0xfc,0x12,0xb2,0xb9, + 0xc,0x3a,0xed,0x7c,0xd8,0x76,0x92,0xe0,0xe6,0xf2,0x39,0x5a,0xad,0x16,0xb5,0xda, + 0x12,0x71,0x14,0xb6,0xbb,0x19,0x1a,0x91,0x16,0xc2,0x92,0xf7,0x30,0x48,0xca,0xbe, + 0x70,0x74,0x6f,0x5f,0xa4,0x7f,0x9d,0xcb,0x6d,0x84,0x10,0xb4,0x9a,0x2d,0x94,0x54, + 0x95,0x4b,0x2e,0xbe,0xf8,0xbd,0x6f,0xb8,0xfe,0xf5,0x7f,0x7d,0xaa,0xe0,0x9c,0x72, + 0xd1,0xfe,0xb5,0xaf,0x79,0xf5,0xfb,0x3c,0xcf,0x21,0x97,0xcb,0xa1,0x94,0x5a,0xa9, + 0x20,0xa6,0x85,0x7b,0x25,0x25,0xb6,0x6d,0x13,0x4,0x1,0xd3,0x53,0xd3,0x54,0x17, + 0x16,0x12,0x65,0x6c,0x25,0xd5,0xc7,0x6c,0x36,0x8b,0x31,0x9a,0x5a,0xbd,0x46,0xa3, + 0xd1,0x6c,0x17,0xb7,0xfc,0x96,0x8f,0x92,0x12,0xc7,0xb1,0x51,0x4a,0x26,0x55,0x44, + 0xa0,0xb1,0x54,0xc3,0xf7,0x3,0x8c,0x91,0xe9,0x9a,0x21,0x89,0xad,0x12,0xb5,0x3e, + 0x5d,0x99,0xa5,0x5a,0xad,0xa2,0xd2,0xf0,0x6f,0x58,0xe1,0xc3,0xe5,0x12,0xf0,0x4a, + 0x3a,0x21,0x69,0xd4,0x1b,0x28,0xa5,0x1a,0x3b,0x77,0xbe,0xec,0xdf,0x5c,0x73,0xcd, + 0x2b,0xbe,0x7c,0xba,0x7d,0xc0,0x53,0xee,0x6a,0xdc,0xfa,0x7,0xff,0x42,0x28,0x65, + 0x51,0x28,0x14,0xda,0x45,0xb1,0x95,0xbe,0x95,0x48,0x40,0xb2,0x6c,0x82,0x30,0x64, + 0x7a,0x7a,0x86,0x99,0x99,0x19,0xc2,0x30,0x40,0x4a,0x99,0xb6,0x82,0x1d,0x2c,0x4b, + 0x11,0xc7,0x11,0xcd,0x66,0x8b,0x66,0xb3,0xc5,0xc2,0xe2,0x52,0x2a,0x42,0x6d,0xa4, + 0x90,0x28,0x95,0x94,0x70,0xeb,0xcd,0x46,0xda,0x4a,0x32,0xc4,0x1a,0x62,0x3,0x8b, + 0xf5,0x26,0x93,0x33,0xb3,0x20,0x4,0xb9,0x5c,0x26,0x2d,0xc7,0x9a,0x13,0xd0,0x4f, + 0x22,0xb,0xea,0xf5,0x3a,0xca,0xb2,0x82,0xcb,0x2f,0xdf,0x7d,0xeb,0x15,0x57,0x5c, + 0xfe,0xa0,0xe7,0x79,0xfa,0x74,0x1,0x3a,0xad,0xc6,0x61,0x6f,0x5f,0xef,0xc3,0x41, + 0x18,0xde,0x54,0xaf,0xd7,0x89,0xa2,0x46,0xbb,0x6c,0xb0,0x5c,0xea,0x5c,0xb6,0xae, + 0x30,0x8a,0x98,0x99,0x99,0xa5,0xd5,0xf2,0xe9,0x2a,0x15,0xf1,0xdc,0x24,0x24,0x3b, + 0xb6,0x83,0x8e,0x63,0xb4,0x49,0xd2,0x17,0xdf,0xf7,0x9,0xe3,0x18,0xdb,0xb2,0x90, + 0x52,0xb5,0xc1,0xf6,0x83,0x30,0x89,0x96,0x29,0xd7,0xb5,0x5a,0x11,0xfb,0x5f,0x38, + 0x84,0x94,0x82,0xc1,0xc1,0x75,0x64,0xb2,0x79,0x82,0x68,0x39,0x89,0x8e,0x8e,0xaf, + 0x1a,0x1a,0x83,0xef,0xfb,0xd8,0x96,0x1d,0x5c,0x75,0xd5,0x15,0x37,0xee,0xda,0xf9, + 0xf2,0x1f,0x66,0xb3,0xd9,0xd3,0x6,0xe7,0xb4,0x1b,0x87,0x37,0xfe,0xee,0xef,0xbc, + 0xb9,0xa7,0xb7,0xe7,0xc9,0x72,0x39,0xa9,0xeb,0x2c,0x5b,0x91,0x4a,0xfb,0x64,0x42, + 0x24,0x4d,0xc0,0x65,0x1,0xb7,0xb0,0xb0,0xc8,0xd4,0xd4,0xc,0xd3,0x33,0x33,0x2c, + 0x2c,0x2c,0xe0,0xfb,0x3e,0x8,0x81,0xb2,0x24,0x96,0x92,0x8,0x61,0xd0,0x71,0x9c, + 0x4c,0x4e,0x26,0xa9,0x45,0x18,0x86,0x28,0xcb,0x42,0xb,0x91,0x14,0xc3,0xd2,0xc5, + 0xd,0x3a,0x8e,0x29,0xe4,0x73,0x38,0x8e,0x87,0x31,0x82,0x28,0x8c,0x69,0xb5,0x9a, + 0x2b,0x2b,0x44,0x52,0x70,0x97,0xeb,0x51,0x8e,0xe3,0x54,0xae,0x7e,0xc5,0x55,0x37, + 0xee,0xde,0xb5,0xf3,0x91,0xb5,0x82,0xb3,0xa6,0xde,0xfc,0xef,0xdd,0x7c,0xd3,0xee, + 0x87,0xbe,0xf9,0xad,0xff,0x1d,0x85,0xd1,0xee,0xca,0xec,0x6c,0xda,0xa8,0x53,0xed, + 0x27,0xd7,0x5e,0x48,0x25,0x25,0x3a,0x8e,0xf1,0x5b,0x49,0xc6,0x5f,0x6f,0x34,0xf0, + 0x5c,0xf,0xc7,0x75,0xd2,0x25,0x30,0x9,0xc9,0x77,0x77,0x77,0x21,0x44,0x6,0x8c, + 0x49,0x9b,0x7d,0x31,0xc5,0x62,0x1,0xcb,0x76,0x8,0x22,0x8d,0xc0,0x20,0x94,0x64, + 0x68,0xfd,0x7a,0x1c,0xcf,0xc5,0x58,0x36,0xd,0x3f,0x60,0x6e,0x7e,0x9e,0x56,0xab, + 0xc9,0xfa,0xc1,0xa1,0x76,0x2f,0x3f,0xd6,0x31,0x41,0x18,0x90,0xcf,0xe5,0x9f,0xde, + 0xbd,0x7b,0xe7,0x1d,0x57,0x5d,0x79,0xc5,0x8f,0xce,0x74,0x5,0xdd,0x9a,0x96,0xe0, + 0xbd,0xf9,0xe6,0x37,0x5d,0x3a,0x7c,0xfe,0xd6,0x27,0x7b,0x7b,0xcb,0xd8,0xb6,0x9d, + 0xf4,0xad,0x52,0xc2,0x5e,0xb6,0xa4,0xe5,0xa2,0x54,0x42,0xc0,0x49,0x3d,0xa9,0x56, + 0xab,0x33,0x3f,0x5f,0x65,0x6e,0x76,0x8e,0xb9,0xb9,0x79,0x16,0x16,0x96,0x88,0x63, + 0x8d,0x65,0x2b,0x7c,0x3f,0x60,0x7e,0xbe,0x8a,0xe3,0xd8,0x74,0x77,0x77,0xe3,0x3a, + 0x6e,0xb2,0xc6,0x48,0x43,0xa4,0x5,0x6e,0xae,0x80,0xb6,0x6c,0x94,0x97,0xc5,0xd7, + 0x50,0x5d,0x5c,0x22,0xf4,0x43,0xa4,0x12,0x90,0x76,0x57,0x7c,0xdf,0xa7,0x58,0x2c, + 0xfc,0xe2,0xb2,0xcb,0x76,0xff,0xf1,0xd9,0x0,0x67,0xcd,0x0,0x1,0xdc,0x7c,0xcb, + 0x4d,0xbb,0x87,0x87,0x87,0x9f,0x5e,0xb7,0xae,0x1f,0xc7,0xb1,0x93,0xd4,0x43,0x8a, + 0x36,0x40,0xed,0x4,0x33,0x35,0x7d,0x4b,0xa9,0x24,0x5f,0xb3,0x2c,0x64,0x9a,0xd8, + 0x66,0x32,0x19,0x3c,0x2f,0x43,0x14,0x46,0x4c,0x4e,0x4e,0x72,0x64,0xf4,0x8,0xe5, + 0x72,0x99,0x42,0x3e,0x9f,0xae,0x4,0x49,0x74,0x71,0x14,0x45,0x49,0xc9,0x45,0x80, + 0xc6,0x41,0xd9,0x79,0xba,0xca,0xbd,0xf4,0xaf,0xeb,0x4b,0x64,0x80,0xd6,0xb4,0x82, + 0x80,0x62,0xb1,0xf8,0xec,0x65,0x97,0x5e,0x7a,0xfb,0x15,0x97,0x5f,0xf6,0xd3,0xb3, + 0xb5,0x7a,0xf7,0x8c,0x16,0x71,0xde,0xfc,0xe6,0x37,0xed,0x1c,0x1e,0x3e,0xff,0xb1, + 0x8d,0x1b,0x36,0xb4,0x8a,0xc5,0x62,0xd2,0xc0,0x63,0x75,0x6b,0x6a,0x27,0x2,0xe9, + 0xb2,0x16,0xdb,0xb6,0x19,0x18,0x58,0x47,0xa1,0x90,0x67,0x72,0x6a,0x8a,0x7d,0xfb, + 0x9f,0x27,0xc,0x23,0xce,0xdb,0xb2,0x5,0xcf,0xcb,0x24,0xfd,0x30,0x99,0x8,0xc5, + 0x38,0x4a,0x1a,0x8d,0xc4,0x86,0xc8,0xf,0xf0,0x3c,0x8f,0xfe,0xfe,0x3e,0xf2,0xf9, + 0x3c,0x71,0xca,0x39,0xb9,0x4c,0x66,0xe2,0x15,0x57,0x5d,0xf9,0x87,0x97,0x5d,0xba, + 0xfb,0x67,0x67,0x73,0xed,0xf7,0x59,0x59,0x69,0xff,0xe3,0x1f,0x3f,0xf1,0xe1,0xc3, + 0x87,0x47,0xdf,0x5f,0x5d,0xa8,0x5a,0xf3,0xf3,0x55,0x96,0x6a,0xb5,0xa4,0x36,0x74, + 0xf4,0x2,0xfb,0x44,0xaf,0x68,0x83,0x6d,0x59,0xc,0xe,0xe,0xb0,0x69,0xc3,0x7a, + 0xc2,0x38,0xe6,0x85,0xd1,0x71,0xaa,0xb5,0x1a,0x83,0x7d,0x3d,0xac,0xeb,0xee,0x6, + 0x63,0xda,0xc4,0xdf,0x6a,0xb5,0x12,0xf1,0x99,0xae,0xf8,0xd0,0x1d,0x75,0x2a,0xa3, + 0xd,0x61,0x14,0xe2,0x3a,0xce,0xd4,0x75,0xd7,0xbe,0xf6,0x35,0x3b,0x76,0x6c,0xdf, + 0xc7,0x59,0x1e,0x67,0x65,0x9d,0xb4,0x6d,0xdb,0x7b,0x2e,0xbd,0x74,0xd7,0x43,0xcf, + 0x3f,0xff,0xc2,0x67,0x3c,0xd7,0xdb,0x5d,0x4e,0x97,0xbc,0x35,0x9a,0xd,0x2,0x3f, + 0xe8,0x90,0x1,0x16,0xf9,0x42,0x9e,0xde,0x72,0x37,0x85,0x62,0x91,0x56,0xcb,0xa7, + 0xb2,0xb8,0x48,0x2d,0xc,0x51,0x19,0xf,0xe9,0x65,0xf1,0x11,0x64,0x94,0xc4,0x56, + 0xa,0x3f,0x8,0x69,0x35,0x5b,0xc9,0x5a,0x0,0x4b,0xb5,0x4b,0xac,0x3a,0xd6,0x44, + 0xb1,0x26,0x8c,0x22,0x1c,0xd7,0xa9,0x5d,0x7f,0xfd,0xeb,0x5e,0x33,0x38,0xb0,0x6e, + 0x3f,0xe7,0x60,0x9c,0xb5,0xdf,0x6a,0xbc,0xf0,0xc2,0x1,0x91,0xcf,0xe7,0xf3,0x95, + 0x4a,0xe5,0xf5,0x2f,0x1c,0x38,0xf8,0xd1,0x4a,0xa5,0x72,0x91,0x80,0x74,0x75,0xab, + 0x40,0x90,0xc8,0x1,0xcb,0x4a,0x4a,0xa7,0x3a,0xd6,0xc4,0x51,0xc4,0x92,0xdf,0x62, + 0x72,0xb1,0x46,0x3d,0xd2,0x14,0x73,0x39,0x4a,0x9e,0x43,0x7f,0x21,0x87,0x12,0x82, + 0x5a,0xad,0x4e,0xa3,0xd9,0xc4,0x18,0x8d,0x1f,0x4,0xd4,0xeb,0xd,0x62,0x4,0xd2, + 0x52,0x8,0x63,0xe8,0xeb,0xea,0xfe,0xe5,0x75,0xd7,0xbd,0xfa,0x6d,0xfd,0x7d,0x7d, + 0xfb,0xba,0xbb,0xbb,0xcd,0x4b,0x1a,0xa0,0xe5,0x71,0xe0,0xe0,0x88,0x5c,0x5a,0x5a, + 0x2a,0x3b,0x8e,0x7d,0xd5,0xf8,0xf8,0xc4,0x3b,0x2a,0x95,0xd9,0xdf,0xf7,0x7d,0xbf, + 0xcd,0x4d,0x4a,0x25,0xab,0x42,0xd0,0x20,0x54,0x42,0xb0,0x8b,0x2d,0x9f,0xb9,0x46, + 0x93,0x30,0x8c,0xf0,0x94,0xa4,0xcb,0x73,0x89,0xc2,0x90,0x46,0xab,0x45,0xa4,0x35, + 0x51,0x18,0xd1,0x6c,0xd4,0xb1,0x6c,0xfb,0x60,0xef,0xba,0x81,0xdf,0xf4,0xf7,0xf7, + 0x8e,0xc,0xf4,0xf5,0x3d,0xbe,0x69,0xfd,0xd0,0xf7,0xcf,0xdf,0x7a,0xde,0x1c,0xe7, + 0x70,0x9c,0xb3,0xdf,0x8b,0x55,0xab,0x55,0xf1,0xfc,0xb,0x7,0x4a,0xb9,0x5c,0x6e, + 0x43,0xad,0x56,0xdb,0xbd,0xb0,0xb0,0x70,0x45,0xa3,0xd1,0x7c,0x45,0x18,0x86,0x17, + 0xc6,0x71,0x5c,0x4c,0xb3,0x81,0xe5,0x95,0x19,0x81,0x1f,0x45,0xd5,0x96,0x1f,0x54, + 0xa5,0x30,0xd3,0x8e,0x65,0x4f,0x2b,0x29,0xc7,0x1c,0xc7,0x19,0x73,0x5c,0x77,0x42, + 0x2a,0x35,0x6e,0x29,0x39,0xfd,0xe4,0x53,0xbf,0x9a,0x2b,0x95,0xcb,0x8d,0xad,0x5b, + 0xcf,0xb,0xce,0xdf,0xbc,0xb9,0xb1,0x65,0xd3,0x6,0xcd,0x39,0x1e,0xe7,0xfc,0x27, + 0x99,0xf5,0x7a,0x5d,0xd4,0xeb,0xf5,0xd2,0xd4,0xd4,0xf4,0xf6,0xb9,0xb9,0xf9,0x57, + 0xd6,0xeb,0xf5,0xdd,0x7e,0x10,0x6c,0x88,0xe3,0xb8,0xeb,0x9f,0xbf,0xf5,0x2d,0x3b, + 0x1,0x3e,0xf3,0x99,0xcf,0x7d,0x6f,0xc3,0x86,0xd,0x87,0xa3,0x38,0x9e,0x11,0x82, + 0x9,0xc7,0x71,0x26,0x3c,0xcf,0x1b,0x2b,0x16,0xa,0x93,0xb9,0x5c,0x6e,0xce,0xf5, + 0xdc,0x46,0x3e,0x97,0x8b,0x7a,0x7b,0x7b,0x7f,0xeb,0x3f,0xe1,0x3c,0x57,0x0,0x7d, + 0x8,0xb8,0x16,0xf8,0x2,0x70,0xff,0x19,0x5c,0x67,0x4b,0xfa,0xaa,0x2,0x4f,0xf2, + 0x4f,0x30,0xac,0x73,0x78,0xed,0x65,0x80,0x3a,0x41,0x7b,0xb1,0xf1,0x28,0xb0,0x77, + 0x95,0x6b,0xdc,0x97,0x82,0xfc,0x47,0x1d,0xa0,0xbd,0x63,0x95,0xf3,0xf,0x9d,0xe1, + 0xc3,0x38,0x6b,0x0,0x75,0xde,0xe0,0x5d,0x27,0x39,0x76,0xa4,0xe3,0xf3,0x9e,0x93, + 0x1c,0xbb,0x67,0x15,0x80,0x46,0x56,0xb9,0xce,0x96,0x13,0x5c,0x6b,0xef,0xb9,0x0, + 0x68,0x2d,0x4a,0xfa,0xbe,0xf4,0x6,0xbb,0xd6,0xea,0xd6,0xc7,0xbc,0xae,0x5b,0xe3, + 0x75,0xf6,0x9e,0xe1,0xf9,0xe7,0xc4,0x82,0x6e,0x4b,0xcd,0x7e,0x64,0x15,0xeb,0xb9, + 0xad,0xc3,0xb2,0xb6,0xa4,0xef,0x77,0xa7,0xfc,0x71,0xba,0xc3,0xa4,0x0,0x74,0x1d, + 0xf3,0x7f,0x77,0x1,0x6f,0x79,0xa9,0x72,0x50,0x57,0x3a,0x61,0x52,0x3e,0xa8,0x9e, + 0xc4,0xd,0x5f,0x8c,0x9b,0x3a,0xc7,0xae,0x13,0x58,0xc7,0xde,0x14,0x98,0x65,0x17, + 0xdb,0xbb,0x8a,0xb,0x9e,0xfb,0xb1,0x5c,0xc3,0x39,0x85,0xd7,0x83,0x26,0x19,0xf, + 0x9e,0xe4,0xb8,0x2e,0xb3,0x32,0xae,0xed,0xd8,0x7f,0xb2,0xf1,0xa1,0x55,0xae,0x75, + 0x70,0x95,0xef,0xae,0x4d,0xf7,0xfd,0xe8,0x4,0xdb,0x67,0xf5,0x75,0xaa,0x1c,0x74, + 0x2d,0x70,0x4b,0xfa,0xf9,0x96,0xd4,0x5,0xe6,0x4f,0x10,0x99,0x6e,0x39,0x26,0x72, + 0xdd,0xb6,0x46,0xe,0xda,0xd5,0x61,0x89,0xbb,0x80,0x3b,0x5e,0xca,0x61,0x7e,0x19, + 0x88,0x27,0x81,0x7b,0x80,0xcd,0xe9,0xd,0xef,0x59,0x25,0x9a,0xdd,0x7c,0xc,0xb0, + 0xd7,0xae,0x51,0xc3,0xbc,0xe3,0x18,0xd0,0x6f,0x49,0xdd,0x7a,0xa4,0xe3,0x5e,0xce, + 0xf9,0x38,0x15,0xb,0xda,0xd5,0xc1,0x1b,0xd7,0xa5,0xa1,0xf4,0xae,0xe,0xb2,0xbc, + 0xed,0x18,0xee,0xe9,0xb4,0xa0,0xe5,0xb0,0xfb,0xa3,0x55,0x40,0xbb,0xb6,0x83,0x78, + 0x57,0xe3,0xbb,0xdb,0x8e,0xe1,0xa4,0x65,0xd2,0x5f,0xb6,0xaa,0xea,0x4b,0xc5,0x82, + 0xba,0x3a,0x6e,0xb2,0xba,0xca,0x4d,0x77,0x12,0xf2,0xdd,0x1d,0x37,0xdf,0x95,0xa, + 0xc5,0xea,0x31,0x40,0x9c,0x4a,0x29,0xf4,0x3d,0xe9,0xf9,0x23,0xe9,0xf5,0xf7,0x1e, + 0x13,0xd5,0x7e,0x6b,0xe3,0x4c,0x2a,0x8a,0x5d,0xab,0x70,0xcf,0xb2,0x1b,0x74,0xa, + 0xb6,0x3b,0x81,0xdd,0xa7,0xc1,0x41,0xbb,0x4e,0xe0,0xba,0x77,0xa5,0xd7,0xda,0x9c, + 0x6e,0x3f,0xf5,0x52,0xb1,0xa0,0x27,0x3b,0x5c,0x63,0x57,0xc7,0xf6,0x6d,0x27,0xe0, + 0x82,0xbb,0x80,0xd2,0x99,0x14,0x2,0xd2,0x6b,0x3e,0x79,0x8c,0x82,0x3e,0x36,0x8, + 0xbc,0x64,0x38,0xa8,0xa,0x7c,0xaa,0xc3,0x3d,0xee,0x4e,0xd5,0xf4,0xdd,0x1d,0x16, + 0x2,0xf0,0xf7,0xa9,0xa5,0x7c,0xea,0xc,0xef,0x69,0x24,0xe5,0xb7,0x3b,0x4f,0x10, + 0x4d,0x77,0xa5,0xc7,0x8c,0x9c,0xe0,0xfc,0x7,0x57,0xd1,0x5a,0xe7,0x3c,0x8a,0xdd, + 0x99,0x2,0x75,0x47,0x47,0xb8,0x1d,0x49,0xf7,0xef,0x5d,0xc5,0xda,0x4e,0xa6,0x92, + 0x4f,0x5,0xa4,0x17,0x13,0xaa,0xf7,0x9f,0xe0,0xfb,0x65,0x39,0xd2,0x75,0xb6,0x44, + 0xe5,0xe9,0x28,0xe9,0xbb,0x4e,0x21,0x39,0x3d,0x15,0x45,0xbd,0x67,0x95,0x63,0x6e, + 0x7b,0x91,0x8,0xda,0x99,0x3,0x2e,0x5b,0xcf,0x3d,0xab,0x3c,0x94,0x5d,0x1d,0x1, + 0xe0,0xc9,0xdf,0xb6,0x5,0xb1,0x46,0x60,0x36,0x9f,0x0,0xe8,0xd5,0x4,0xe1,0xa1, + 0x13,0xb8,0xf7,0xde,0x63,0x5c,0xf9,0xae,0x63,0xa2,0x69,0x35,0x75,0xc9,0x9d,0x1d, + 0xfb,0xee,0x79,0xa9,0x17,0xcc,0xfe,0x9f,0x19,0xf2,0xff,0x43,0xf0,0xe2,0xe3,0xff, + 0xe,0x0,0xac,0xa,0xad,0x6,0x32,0x6f,0x68,0x81,0x0,0x0,0x0,0x0,0x49,0x45, + 0x4e,0x44,0xae,0x42,0x60,0x82, + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/cam7_yes.png + 0x0,0x0,0x24,0xe0, + 0x89, + 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, + 0x0,0x0,0x48,0x0,0x0,0x0,0x48,0x8,0x6,0x0,0x0,0x0,0x55,0xed,0xb3,0x47, + 0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13, + 0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0xa,0x4d,0x69,0x43,0x43,0x50,0x50,0x68,0x6f, + 0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66,0x69, + 0x6c,0x65,0x0,0x0,0x78,0xda,0x9d,0x53,0x77,0x58,0x93,0xf7,0x16,0x3e,0xdf,0xf7, + 0x65,0xf,0x56,0x42,0xd8,0xf0,0xb1,0x97,0x6c,0x81,0x0,0x22,0x23,0xac,0x8,0xc8, + 0x10,0x59,0xa2,0x10,0x92,0x0,0x61,0x84,0x10,0x12,0x40,0xc5,0x85,0x88,0xa,0x56, + 0x14,0x15,0x11,0x9c,0x48,0x55,0xc4,0x82,0xd5,0xa,0x48,0x9d,0x88,0xe2,0xa0,0x28, + 0xb8,0x67,0x41,0x8a,0x88,0x5a,0x8b,0x55,0x5c,0x38,0xee,0x1f,0xdc,0xa7,0xb5,0x7d, + 0x7a,0xef,0xed,0xed,0xfb,0xd7,0xfb,0xbc,0xe7,0x9c,0xe7,0xfc,0xce,0x79,0xcf,0xf, + 0x80,0x11,0x12,0x26,0x91,0xe6,0xa2,0x6a,0x0,0x39,0x52,0x85,0x3c,0x3a,0xd8,0x1f, + 0x8f,0x4f,0x48,0xc4,0xc9,0xbd,0x80,0x2,0x15,0x48,0xe0,0x4,0x20,0x10,0xe6,0xcb, + 0xc2,0x67,0x5,0xc5,0x0,0x0,0xf0,0x3,0x79,0x78,0x7e,0x74,0xb0,0x3f,0xfc,0x1, + 0xaf,0x6f,0x0,0x2,0x0,0x70,0xd5,0x2e,0x24,0x12,0xc7,0xe1,0xff,0x83,0xba,0x50, + 0x26,0x57,0x0,0x20,0x91,0x0,0xe0,0x22,0x12,0xe7,0xb,0x1,0x90,0x52,0x0,0xc8, + 0x2e,0x54,0xc8,0x14,0x0,0xc8,0x18,0x0,0xb0,0x53,0xb3,0x64,0xa,0x0,0x94,0x0, + 0x0,0x6c,0x79,0x7c,0x42,0x22,0x0,0xaa,0xd,0x0,0xec,0xf4,0x49,0x3e,0x5,0x0, + 0xd8,0xa9,0x93,0xdc,0x17,0x0,0xd8,0xa2,0x1c,0xa9,0x8,0x0,0x8d,0x1,0x0,0x99, + 0x28,0x47,0x24,0x2,0x40,0xbb,0x0,0x60,0x55,0x81,0x52,0x2c,0x2,0xc0,0xc2,0x0, + 0xa0,0xac,0x40,0x22,0x2e,0x4,0xc0,0xae,0x1,0x80,0x59,0xb6,0x32,0x47,0x2,0x80, + 0xbd,0x5,0x0,0x76,0x8e,0x58,0x90,0xf,0x40,0x60,0x0,0x80,0x99,0x42,0x2c,0xcc, + 0x0,0x20,0x38,0x2,0x0,0x43,0x1e,0x13,0xcd,0x3,0x20,0x4c,0x3,0xa0,0x30,0xd2, + 0xbf,0xe0,0xa9,0x5f,0x70,0x85,0xb8,0x48,0x1,0x0,0xc0,0xcb,0x95,0xcd,0x97,0x4b, + 0xd2,0x33,0x14,0xb8,0x95,0xd0,0x1a,0x77,0xf2,0xf0,0xe0,0xe2,0x21,0xe2,0xc2,0x6c, + 0xb1,0x42,0x61,0x17,0x29,0x10,0x66,0x9,0xe4,0x22,0x9c,0x97,0x9b,0x23,0x13,0x48, + 0xe7,0x3,0x4c,0xce,0xc,0x0,0x0,0x1a,0xf9,0xd1,0xc1,0xfe,0x38,0x3f,0x90,0xe7, + 0xe6,0xe4,0xe1,0xe6,0x66,0xe7,0x6c,0xef,0xf4,0xc5,0xa2,0xfe,0x6b,0xf0,0x6f,0x22, + 0x3e,0x21,0xf1,0xdf,0xfe,0xbc,0x8c,0x2,0x4,0x0,0x10,0x4e,0xcf,0xef,0xda,0x5f, + 0xe5,0xe5,0xd6,0x3,0x70,0xc7,0x1,0xb0,0x75,0xbf,0x6b,0xa9,0x5b,0x0,0xda,0x56, + 0x0,0x68,0xdf,0xf9,0x5d,0x33,0xdb,0x9,0xa0,0x5a,0xa,0xd0,0x7a,0xf9,0x8b,0x79, + 0x38,0xfc,0x40,0x1e,0x9e,0xa1,0x50,0xc8,0x3c,0x1d,0x1c,0xa,0xb,0xb,0xed,0x25, + 0x62,0xa1,0xbd,0x30,0xe3,0x8b,0x3e,0xff,0x33,0xe1,0x6f,0xe0,0x8b,0x7e,0xf6,0xfc, + 0x40,0x1e,0xfe,0xdb,0x7a,0xf0,0x0,0x71,0x9a,0x40,0x99,0xad,0xc0,0xa3,0x83,0xfd, + 0x71,0x61,0x6e,0x76,0xae,0x52,0x8e,0xe7,0xcb,0x4,0x42,0x31,0x6e,0xf7,0xe7,0x23, + 0xfe,0xc7,0x85,0x7f,0xfd,0x8e,0x29,0xd1,0xe2,0x34,0xb1,0x5c,0x2c,0x15,0x8a,0xf1, + 0x58,0x89,0xb8,0x50,0x22,0x4d,0xc7,0x79,0xb9,0x52,0x91,0x44,0x21,0xc9,0x95,0xe2, + 0x12,0xe9,0x7f,0x32,0xf1,0x1f,0x96,0xfd,0x9,0x93,0x77,0xd,0x0,0xac,0x86,0x4f, + 0xc0,0x4e,0xb6,0x7,0xb5,0xcb,0x6c,0xc0,0x7e,0xee,0x1,0x2,0x8b,0xe,0x58,0xd2, + 0x76,0x0,0x40,0x7e,0xf3,0x2d,0x8c,0x1a,0xb,0x91,0x0,0x10,0x67,0x34,0x32,0x79, + 0xf7,0x0,0x0,0x93,0xbf,0xf9,0x8f,0x40,0x2b,0x1,0x0,0xcd,0x97,0xa4,0xe3,0x0, + 0x0,0xbc,0xe8,0x18,0x5c,0xa8,0x94,0x17,0x4c,0xc6,0x8,0x0,0x0,0x44,0xa0,0x81, + 0x2a,0xb0,0x41,0x7,0xc,0xc1,0x14,0xac,0xc0,0xe,0x9c,0xc1,0x1d,0xbc,0xc0,0x17, + 0x2,0x61,0x6,0x44,0x40,0xc,0x24,0xc0,0x3c,0x10,0x42,0x6,0xe4,0x80,0x1c,0xa, + 0xa1,0x18,0x96,0x41,0x19,0x54,0xc0,0x3a,0xd8,0x4,0xb5,0xb0,0x3,0x1a,0xa0,0x11, + 0x9a,0xe1,0x10,0xb4,0xc1,0x31,0x38,0xd,0xe7,0xe0,0x12,0x5c,0x81,0xeb,0x70,0x17, + 0x6,0x60,0x18,0x9e,0xc2,0x18,0xbc,0x86,0x9,0x4,0x41,0xc8,0x8,0x13,0x61,0x21, + 0x3a,0x88,0x11,0x62,0x8e,0xd8,0x22,0xce,0x8,0x17,0x99,0x8e,0x4,0x22,0x61,0x48, + 0x34,0x92,0x80,0xa4,0x20,0xe9,0x88,0x14,0x51,0x22,0xc5,0xc8,0x72,0xa4,0x2,0xa9, + 0x42,0x6a,0x91,0x5d,0x48,0x23,0xf2,0x2d,0x72,0x14,0x39,0x8d,0x5c,0x40,0xfa,0x90, + 0xdb,0xc8,0x20,0x32,0x8a,0xfc,0x8a,0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3,0xd4, + 0x2,0x75,0x40,0xb9,0xa8,0x1f,0x1a,0x8a,0xc6,0xa0,0x73,0xd1,0x74,0x34,0xf,0x5d, + 0x80,0x96,0xa2,0x6b,0xd1,0x1a,0xb4,0x1e,0x3d,0x80,0xb6,0xa2,0xa7,0xd1,0x4b,0xe8, + 0x75,0x74,0x0,0x7d,0x8a,0x8e,0x63,0x80,0xd1,0x31,0xe,0x66,0x8c,0xd9,0x61,0x5c, + 0x8c,0x87,0x45,0x60,0x89,0x58,0x1a,0x26,0xc7,0x16,0x63,0xe5,0x58,0x35,0x56,0x8f, + 0x35,0x63,0x1d,0x58,0x37,0x76,0x15,0x1b,0xc0,0x9e,0x61,0xef,0x8,0x24,0x2,0x8b, + 0x80,0x13,0xec,0x8,0x5e,0x84,0x10,0xc2,0x6c,0x82,0x90,0x90,0x47,0x58,0x4c,0x58, + 0x43,0xa8,0x25,0xec,0x23,0xb4,0x12,0xba,0x8,0x57,0x9,0x83,0x84,0x31,0xc2,0x27, + 0x22,0x93,0xa8,0x4f,0xb4,0x25,0x7a,0x12,0xf9,0xc4,0x78,0x62,0x3a,0xb1,0x90,0x58, + 0x46,0xac,0x26,0xee,0x21,0x1e,0x21,0x9e,0x25,0x5e,0x27,0xe,0x13,0x5f,0x93,0x48, + 0x24,0xe,0xc9,0x92,0xe4,0x4e,0xa,0x21,0x25,0x90,0x32,0x49,0xb,0x49,0x6b,0x48, + 0xdb,0x48,0x2d,0xa4,0x53,0xa4,0x3e,0xd2,0x10,0x69,0x9c,0x4c,0x26,0xeb,0x90,0x6d, + 0xc9,0xde,0xe4,0x8,0xb2,0x80,0xac,0x20,0x97,0x91,0xb7,0x90,0xf,0x90,0x4f,0x92, + 0xfb,0xc9,0xc3,0xe4,0xb7,0x14,0x3a,0xc5,0x88,0xe2,0x4c,0x9,0xa2,0x24,0x52,0xa4, + 0x94,0x12,0x4a,0x35,0x65,0x3f,0xe5,0x4,0xa5,0x9f,0x32,0x42,0x99,0xa0,0xaa,0x51, + 0xcd,0xa9,0x9e,0xd4,0x8,0xaa,0x88,0x3a,0x9f,0x5a,0x49,0x6d,0xa0,0x76,0x50,0x2f, + 0x53,0x87,0xa9,0x13,0x34,0x75,0x9a,0x25,0xcd,0x9b,0x16,0x43,0xcb,0xa4,0x2d,0xa3, + 0xd5,0xd0,0x9a,0x69,0x67,0x69,0xf7,0x68,0x2f,0xe9,0x74,0xba,0x9,0xdd,0x83,0x1e, + 0x45,0x97,0xd0,0x97,0xd2,0x6b,0xe8,0x7,0xe9,0xe7,0xe9,0x83,0xf4,0x77,0xc,0xd, + 0x86,0xd,0x83,0xc7,0x48,0x62,0x28,0x19,0x6b,0x19,0x7b,0x19,0xa7,0x18,0xb7,0x19, + 0x2f,0x99,0x4c,0xa6,0x5,0xd3,0x97,0x99,0xc8,0x54,0x30,0xd7,0x32,0x1b,0x99,0x67, + 0x98,0xf,0x98,0x6f,0x55,0x58,0x2a,0xf6,0x2a,0x7c,0x15,0x91,0xca,0x12,0x95,0x3a, + 0x95,0x56,0x95,0x7e,0x95,0xe7,0xaa,0x54,0x55,0x73,0x55,0x3f,0xd5,0x79,0xaa,0xb, + 0x54,0xab,0x55,0xf,0xab,0x5e,0x56,0x7d,0xa6,0x46,0x55,0xb3,0x50,0xe3,0xa9,0x9, + 0xd4,0x16,0xab,0xd5,0xa9,0x1d,0x55,0xbb,0xa9,0x36,0xae,0xce,0x52,0x77,0x52,0x8f, + 0x50,0xcf,0x51,0x5f,0xa3,0xbe,0x5f,0xfd,0x82,0xfa,0x63,0xd,0xb2,0x86,0x85,0x46, + 0xa0,0x86,0x48,0xa3,0x54,0x63,0xb7,0xc6,0x19,0x8d,0x21,0x16,0xc6,0x32,0x65,0xf1, + 0x58,0x42,0xd6,0x72,0x56,0x3,0xeb,0x2c,0x6b,0x98,0x4d,0x62,0x5b,0xb2,0xf9,0xec, + 0x4c,0x76,0x5,0xfb,0x1b,0x76,0x2f,0x7b,0x4c,0x53,0x43,0x73,0xaa,0x66,0xac,0x66, + 0x91,0x66,0x9d,0xe6,0x71,0xcd,0x1,0xe,0xc6,0xb1,0xe0,0xf0,0x39,0xd9,0x9c,0x4a, + 0xce,0x21,0xce,0xd,0xce,0x7b,0x2d,0x3,0x2d,0x3f,0x2d,0xb1,0xd6,0x6a,0xad,0x66, + 0xad,0x7e,0xad,0x37,0xda,0x7a,0xda,0xbe,0xda,0x62,0xed,0x72,0xed,0x16,0xed,0xeb, + 0xda,0xef,0x75,0x70,0x9d,0x40,0x9d,0x2c,0x9d,0xf5,0x3a,0x6d,0x3a,0xf7,0x75,0x9, + 0xba,0x36,0xba,0x51,0xba,0x85,0xba,0xdb,0x75,0xcf,0xea,0x3e,0xd3,0x63,0xeb,0x79, + 0xe9,0x9,0xf5,0xca,0xf5,0xe,0xe9,0xdd,0xd1,0x47,0xf5,0x6d,0xf4,0xa3,0xf5,0x17, + 0xea,0xef,0xd6,0xef,0xd1,0x1f,0x37,0x30,0x34,0x8,0x36,0x90,0x19,0x6c,0x31,0x38, + 0x63,0xf0,0xcc,0x90,0x63,0xe8,0x6b,0x98,0x69,0xb8,0xd1,0xf0,0x84,0xe1,0xa8,0x11, + 0xcb,0x68,0xba,0x91,0xc4,0x68,0xa3,0xd1,0x49,0xa3,0x27,0xb8,0x26,0xee,0x87,0x67, + 0xe3,0x35,0x78,0x17,0x3e,0x66,0xac,0x6f,0x1c,0x62,0xac,0x34,0xde,0x65,0xdc,0x6b, + 0x3c,0x61,0x62,0x69,0x32,0xdb,0xa4,0xc4,0xa4,0xc5,0xe4,0xbe,0x29,0xcd,0x94,0x6b, + 0x9a,0x66,0xba,0xd1,0xb4,0xd3,0x74,0xcc,0xcc,0xc8,0x2c,0xdc,0xac,0xd8,0xac,0xc9, + 0xec,0x8e,0x39,0xd5,0x9c,0x6b,0x9e,0x61,0xbe,0xd9,0xbc,0xdb,0xfc,0x8d,0x85,0xa5, + 0x45,0x9c,0xc5,0x4a,0x8b,0x36,0x8b,0xc7,0x96,0xda,0x96,0x7c,0xcb,0x5,0x96,0x4d, + 0x96,0xf7,0xac,0x98,0x56,0x3e,0x56,0x79,0x56,0xf5,0x56,0xd7,0xac,0x49,0xd6,0x5c, + 0xeb,0x2c,0xeb,0x6d,0xd6,0x57,0x6c,0x50,0x1b,0x57,0x9b,0xc,0x9b,0x3a,0x9b,0xcb, + 0xb6,0xa8,0xad,0x9b,0xad,0xc4,0x76,0x9b,0x6d,0xdf,0x14,0xe2,0x14,0x8f,0x29,0xd2, + 0x29,0xf5,0x53,0x6e,0xda,0x31,0xec,0xfc,0xec,0xa,0xec,0x9a,0xec,0x6,0xed,0x39, + 0xf6,0x61,0xf6,0x25,0xf6,0x6d,0xf6,0xcf,0x1d,0xcc,0x1c,0x12,0x1d,0xd6,0x3b,0x74, + 0x3b,0x7c,0x72,0x74,0x75,0xcc,0x76,0x6c,0x70,0xbc,0xeb,0xa4,0xe1,0x34,0xc3,0xa9, + 0xc4,0xa9,0xc3,0xe9,0x57,0x67,0x1b,0x67,0xa1,0x73,0x9d,0xf3,0x35,0x17,0xa6,0x4b, + 0x90,0xcb,0x12,0x97,0x76,0x97,0x17,0x53,0x6d,0xa7,0x8a,0xa7,0x6e,0x9f,0x7a,0xcb, + 0x95,0xe5,0x1a,0xee,0xba,0xd2,0xb5,0xd3,0xf5,0xa3,0x9b,0xbb,0x9b,0xdc,0xad,0xd9, + 0x6d,0xd4,0xdd,0xcc,0x3d,0xc5,0x7d,0xab,0xfb,0x4d,0x2e,0x9b,0x1b,0xc9,0x5d,0xc3, + 0x3d,0xef,0x41,0xf4,0xf0,0xf7,0x58,0xe2,0x71,0xcc,0xe3,0x9d,0xa7,0x9b,0xa7,0xc2, + 0xf3,0x90,0xe7,0x2f,0x5e,0x76,0x5e,0x59,0x5e,0xfb,0xbd,0x1e,0x4f,0xb3,0x9c,0x26, + 0x9e,0xd6,0x30,0x6d,0xc8,0xdb,0xc4,0x5b,0xe0,0xbd,0xcb,0x7b,0x60,0x3a,0x3e,0x3d, + 0x65,0xfa,0xce,0xe9,0x3,0x3e,0xc6,0x3e,0x2,0x9f,0x7a,0x9f,0x87,0xbe,0xa6,0xbe, + 0x22,0xdf,0x3d,0xbe,0x23,0x7e,0xd6,0x7e,0x99,0x7e,0x7,0xfc,0x9e,0xfb,0x3b,0xfa, + 0xcb,0xfd,0x8f,0xf8,0xbf,0xe1,0x79,0xf2,0x16,0xf1,0x4e,0x5,0x60,0x1,0xc1,0x1, + 0xe5,0x1,0xbd,0x81,0x1a,0x81,0xb3,0x3,0x6b,0x3,0x1f,0x4,0x99,0x4,0xa5,0x7, + 0x35,0x5,0x8d,0x5,0xbb,0x6,0x2f,0xc,0x3e,0x15,0x42,0xc,0x9,0xd,0x59,0x1f, + 0x72,0x93,0x6f,0xc0,0x17,0xf2,0x1b,0xf9,0x63,0x33,0xdc,0x67,0x2c,0x9a,0xd1,0x15, + 0xca,0x8,0x9d,0x15,0x5a,0x1b,0xfa,0x30,0xcc,0x26,0x4c,0x1e,0xd6,0x11,0x8e,0x86, + 0xcf,0x8,0xdf,0x10,0x7e,0x6f,0xa6,0xf9,0x4c,0xe9,0xcc,0xb6,0x8,0x88,0xe0,0x47, + 0x6c,0x88,0xb8,0x1f,0x69,0x19,0x99,0x17,0xf9,0x7d,0x14,0x29,0x2a,0x32,0xaa,0x2e, + 0xea,0x51,0xb4,0x53,0x74,0x71,0x74,0xf7,0x2c,0xd6,0xac,0xe4,0x59,0xfb,0x67,0xbd, + 0x8e,0xf1,0x8f,0xa9,0x8c,0xb9,0x3b,0xdb,0x6a,0xb6,0x72,0x76,0x67,0xac,0x6a,0x6c, + 0x52,0x6c,0x63,0xec,0x9b,0xb8,0x80,0xb8,0xaa,0xb8,0x81,0x78,0x87,0xf8,0x45,0xf1, + 0x97,0x12,0x74,0x13,0x24,0x9,0xed,0x89,0xe4,0xc4,0xd8,0xc4,0x3d,0x89,0xe3,0x73, + 0x2,0xe7,0x6c,0x9a,0x33,0x9c,0xe4,0x9a,0x54,0x96,0x74,0x63,0xae,0xe5,0xdc,0xa2, + 0xb9,0x17,0xe6,0xe9,0xce,0xcb,0x9e,0x77,0x3c,0x59,0x35,0x59,0x90,0x7c,0x38,0x85, + 0x98,0x12,0x97,0xb2,0x3f,0xe5,0x83,0x20,0x42,0x50,0x2f,0x18,0x4f,0xe5,0xa7,0x6e, + 0x4d,0x1d,0x13,0xf2,0x84,0x9b,0x85,0x4f,0x45,0xbe,0xa2,0x8d,0xa2,0x51,0xb1,0xb7, + 0xb8,0x4a,0x3c,0x92,0xe6,0x9d,0x56,0x95,0xf6,0x38,0xdd,0x3b,0x7d,0x43,0xfa,0x68, + 0x86,0x4f,0x46,0x75,0xc6,0x33,0x9,0x4f,0x52,0x2b,0x79,0x91,0x19,0x92,0xb9,0x23, + 0xf3,0x4d,0x56,0x44,0xd6,0xde,0xac,0xcf,0xd9,0x71,0xd9,0x2d,0x39,0x94,0x9c,0x94, + 0x9c,0xa3,0x52,0xd,0x69,0x96,0xb4,0x2b,0xd7,0x30,0xb7,0x28,0xb7,0x4f,0x66,0x2b, + 0x2b,0x93,0xd,0xe4,0x79,0xe6,0x6d,0xca,0x1b,0x93,0x87,0xca,0xf7,0xe4,0x23,0xf9, + 0x73,0xf3,0xdb,0x15,0x6c,0x85,0x4c,0xd1,0xa3,0xb4,0x52,0xae,0x50,0xe,0x16,0x4c, + 0x2f,0xa8,0x2b,0x78,0x5b,0x18,0x5b,0x78,0xb8,0x48,0xbd,0x48,0x5a,0xd4,0x33,0xdf, + 0x66,0xfe,0xea,0xf9,0x23,0xb,0x82,0x16,0x7c,0xbd,0x90,0xb0,0x50,0xb8,0xb0,0xb3, + 0xd8,0xb8,0x78,0x59,0xf1,0xe0,0x22,0xbf,0x45,0xbb,0x16,0x23,0x8b,0x53,0x17,0x77, + 0x2e,0x31,0x5d,0x52,0xba,0x64,0x78,0x69,0xf0,0xd2,0x7d,0xcb,0x68,0xcb,0xb2,0x96, + 0xfd,0x50,0xe2,0x58,0x52,0x55,0xf2,0x6a,0x79,0xdc,0xf2,0x8e,0x52,0x83,0xd2,0xa5, + 0xa5,0x43,0x2b,0x82,0x57,0x34,0x95,0xa9,0x94,0xc9,0xcb,0x6e,0xae,0xf4,0x5a,0xb9, + 0x63,0x15,0x61,0x95,0x64,0x55,0xef,0x6a,0x97,0xd5,0x5b,0x56,0x7f,0x2a,0x17,0x95, + 0x5f,0xac,0x70,0xac,0xa8,0xae,0xf8,0xb0,0x46,0xb8,0xe6,0xe2,0x57,0x4e,0x5f,0xd5, + 0x7c,0xf5,0x79,0x6d,0xda,0xda,0xde,0x4a,0xb7,0xca,0xed,0xeb,0x48,0xeb,0xa4,0xeb, + 0x6e,0xac,0xf7,0x59,0xbf,0xaf,0x4a,0xbd,0x6a,0x41,0xd5,0xd0,0x86,0xf0,0xd,0xad, + 0x1b,0xf1,0x8d,0xe5,0x1b,0x5f,0x6d,0x4a,0xde,0x74,0xa1,0x7a,0x6a,0xf5,0x8e,0xcd, + 0xb4,0xcd,0xca,0xcd,0x3,0x35,0x61,0x35,0xed,0x5b,0xcc,0xb6,0xac,0xdb,0xf2,0xa1, + 0x36,0xa3,0xf6,0x7a,0x9d,0x7f,0x5d,0xcb,0x56,0xfd,0xad,0xab,0xb7,0xbe,0xd9,0x26, + 0xda,0xd6,0xbf,0xdd,0x77,0x7b,0xf3,0xe,0x83,0x1d,0x15,0x3b,0xde,0xef,0x94,0xec, + 0xbc,0xb5,0x2b,0x78,0x57,0x6b,0xbd,0x45,0x7d,0xf5,0x6e,0xd2,0xee,0x82,0xdd,0x8f, + 0x1a,0x62,0x1b,0xba,0xbf,0xe6,0x7e,0xdd,0xb8,0x47,0x77,0x4f,0xc5,0x9e,0x8f,0x7b, + 0xa5,0x7b,0x7,0xf6,0x45,0xef,0xeb,0x6a,0x74,0x6f,0x6c,0xdc,0xaf,0xbf,0xbf,0xb2, + 0x9,0x6d,0x52,0x36,0x8d,0x1e,0x48,0x3a,0x70,0xe5,0x9b,0x80,0x6f,0xda,0x9b,0xed, + 0x9a,0x77,0xb5,0x70,0x5a,0x2a,0xe,0xc2,0x41,0xe5,0xc1,0x27,0xdf,0xa6,0x7c,0x7b, + 0xe3,0x50,0xe8,0xa1,0xce,0xc3,0xdc,0xc3,0xcd,0xdf,0x99,0x7f,0xb7,0xf5,0x8,0xeb, + 0x48,0x79,0x2b,0xd2,0x3a,0xbf,0x75,0xac,0x2d,0xa3,0x6d,0xa0,0x3d,0xa1,0xbd,0xef, + 0xe8,0x8c,0xa3,0x9d,0x1d,0x5e,0x1d,0x47,0xbe,0xb7,0xff,0x7e,0xef,0x31,0xe3,0x63, + 0x75,0xc7,0x35,0x8f,0x57,0x9e,0xa0,0x9d,0x28,0x3d,0xf1,0xf9,0xe4,0x82,0x93,0xe3, + 0xa7,0x64,0xa7,0x9e,0x9d,0x4e,0x3f,0x3d,0xd4,0x99,0xdc,0x79,0xf7,0x4c,0xfc,0x99, + 0x6b,0x5d,0x51,0x5d,0xbd,0x67,0x43,0xcf,0x9e,0x3f,0x17,0x74,0xee,0x4c,0xb7,0x5f, + 0xf7,0xc9,0xf3,0xde,0xe7,0x8f,0x5d,0xf0,0xbc,0x70,0xf4,0x22,0xf7,0x62,0xdb,0x25, + 0xb7,0x4b,0xad,0x3d,0xae,0x3d,0x47,0x7e,0x70,0xfd,0xe1,0x48,0xaf,0x5b,0x6f,0xeb, + 0x65,0xf7,0xcb,0xed,0x57,0x3c,0xae,0x74,0xf4,0x4d,0xeb,0x3b,0xd1,0xef,0xd3,0x7f, + 0xfa,0x6a,0xc0,0xd5,0x73,0xd7,0xf8,0xd7,0x2e,0x5d,0x9f,0x79,0xbd,0xef,0xc6,0xec, + 0x1b,0xb7,0x6e,0x26,0xdd,0x1c,0xb8,0x25,0xba,0xf5,0xf8,0x76,0xf6,0xed,0x17,0x77, + 0xa,0xee,0x4c,0xdc,0x5d,0x7a,0x8f,0x78,0xaf,0xfc,0xbe,0xda,0xfd,0xea,0x7,0xfa, + 0xf,0xea,0x7f,0xb4,0xfe,0xb1,0x65,0xc0,0x6d,0xe0,0xf8,0x60,0xc0,0x60,0xcf,0xc3, + 0x59,0xf,0xef,0xe,0x9,0x87,0x9e,0xfe,0x94,0xff,0xd3,0x87,0xe1,0xd2,0x47,0xcc, + 0x47,0xd5,0x23,0x46,0x23,0x8d,0x8f,0x9d,0x1f,0x1f,0x1b,0xd,0x1a,0xbd,0xf2,0x64, + 0xce,0x93,0xe1,0xa7,0xb2,0xa7,0x13,0xcf,0xca,0x7e,0x56,0xff,0x79,0xeb,0x73,0xab, + 0xe7,0xdf,0xfd,0xe2,0xfb,0x4b,0xcf,0x58,0xfc,0xd8,0xf0,0xb,0xf9,0x8b,0xcf,0xbf, + 0xae,0x79,0xa9,0xf3,0x72,0xef,0xab,0xa9,0xaf,0x3a,0xc7,0x23,0xc7,0x1f,0xbc,0xce, + 0x79,0x3d,0xf1,0xa6,0xfc,0xad,0xce,0xdb,0x7d,0xef,0xb8,0xef,0xba,0xdf,0xc7,0xbd, + 0x1f,0x99,0x28,0xfc,0x40,0xfe,0x50,0xf3,0xd1,0xfa,0x63,0xc7,0xa7,0xd0,0x4f,0xf7, + 0x3e,0xe7,0x7c,0xfe,0xfc,0x2f,0xf7,0x84,0xf3,0xfb,0x25,0xd2,0x9f,0x33,0x0,0x0, + 0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x25,0x0,0x0,0x80,0x83,0x0,0x0, + 0xf9,0xff,0x0,0x0,0x80,0xe9,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0, + 0x3a,0x98,0x0,0x0,0x17,0x6f,0x92,0x5f,0xc5,0x46,0x0,0x0,0x1a,0xd,0x49,0x44, + 0x41,0x54,0x78,0xda,0xec,0x9c,0x7b,0xb0,0x65,0x55,0x7d,0xe7,0x3f,0x6b,0xad,0xfd, + 0x3a,0xef,0xfb,0xec,0xf7,0x13,0x5a,0x10,0x41,0xe8,0x36,0x2a,0xa8,0xc5,0xd8,0x98, + 0x68,0x50,0x41,0xd0,0x98,0x9,0x31,0xa6,0x80,0x22,0x83,0x1a,0x1f,0x40,0x12,0x93, + 0x19,0x26,0x33,0x34,0x65,0x26,0x53,0x65,0xa6,0xc6,0xa1,0x6a,0xa6,0x4a,0x63,0xa6, + 0x44,0x91,0x4,0x45,0x13,0x2,0x3e,0x47,0x13,0x5a,0x2d,0xc1,0xe7,0xd0,0x80,0x8d, + 0x91,0x47,0x77,0xd3,0xdc,0xee,0xbe,0x8f,0x73,0xef,0x3d,0xe7,0x9e,0xe7,0x7e,0xac, + 0xb5,0xe6,0x8f,0xbd,0xcf,0xe9,0xd3,0xb7,0xef,0xed,0xe7,0x6d,0x9d,0xa9,0x9a,0x55, + 0xb5,0xfb,0x9e,0xbd,0xf7,0x59,0x7b,0xaf,0xf5,0x5d,0xbf,0xc7,0xf7,0xf7,0xfb,0xad, + 0xd3,0xc2,0x5a,0xcb,0xb9,0x6e,0xbf,0x78,0xe6,0x99,0x2d,0xcf,0xec,0xdd,0x7b,0xa5, + 0xb6,0xb8,0xdb,0x2e,0xb8,0xe0,0x7,0xe7,0x9d,0xb7,0xf5,0x17,0xe5,0x72,0x59,0xf3, + 0x2b,0x6a,0x6f,0xbd,0xfa,0x6a,0x51,0xaf,0xcd,0x5f,0x1a,0xe4,0xf3,0xef,0x1d,0x1a, + 0x1a,0xba,0x4c,0x8,0xe1,0xd4,0x6a,0xb5,0xa7,0x3b,0xed,0xf6,0x17,0xa,0xc5,0xe2, + 0xf,0xbf,0xf5,0xad,0x6f,0xf7,0xc7,0x26,0xce,0x35,0x40,0x3f,0x7e,0xfc,0xf1,0xb7, + 0x1f,0x9a,0x38,0x74,0xa7,0x85,0x6d,0xb1,0x81,0x66,0xbb,0x5d,0xaf,0xc,0x55,0xbe, + 0x70,0xf5,0x5b,0x7e,0xe3,0x3f,0x16,0xa,0x5,0xfb,0xcb,0x6,0xe7,0xf2,0xcb,0x5f, + 0x5b,0xf2,0x7d,0xff,0xcb,0xbf,0x73,0xc3,0xd,0x6f,0x7e,0xdd,0x15,0xaf,0xa3,0x5c, + 0x2e,0x23,0x84,0xa0,0xd1,0x68,0xf0,0xe4,0x93,0x4f,0x72,0xdf,0x7d,0x9f,0xdb,0x33, + 0x3b,0x3b,0x7b,0xf5,0x13,0x4f,0xec,0x99,0x3a,0xe7,0x0,0x3d,0xf6,0xbd,0xef,0xfe, + 0xee,0xa1,0x97,0x26,0x3e,0x86,0x50,0xe7,0x3b,0x9e,0x87,0xb6,0xd0,0xe9,0x76,0xb1, + 0xd6,0xd4,0x2e,0x78,0xd9,0xb6,0xdb,0xd6,0xaf,0x5b,0xf7,0xc8,0xc6,0x4d,0x1b,0xe7, + 0x7f,0x59,0xe0,0xbc,0xed,0x6d,0x6f,0x2b,0x2a,0x25,0x1f,0xff,0xd3,0x3f,0xfd,0xb3, + 0x4b,0xb6,0x6d,0xdb,0x46,0xbb,0xdd,0xc6,0x18,0x93,0x4a,0x8a,0x14,0x54,0xf2,0x15, + 0x66,0x8f,0xcc,0xf2,0x17,0xff,0xe5,0x63,0x2f,0xed,0x7b,0x71,0xff,0xab,0x1e,0xfb, + 0xfe,0x63,0xd5,0x73,0x6,0xd0,0x77,0x1e,0xdd,0xfd,0xfe,0x89,0x97,0x26,0xfe,0x93, + 0xe7,0x7a,0x23,0xca,0xf5,0xb0,0x80,0x15,0x16,0x2c,0x18,0x6b,0x11,0x30,0x57,0x2c, + 0x15,0x76,0x57,0x2a,0x95,0x1f,0x78,0xae,0xf7,0x83,0x7c,0x3e,0xb7,0x77,0xe3,0xc6, + 0xd,0xf3,0xa5,0x52,0xe9,0x9c,0xc,0xe8,0xcd,0x6f,0x7e,0xb3,0x10,0x82,0x8f,0xdf, + 0x79,0xe7,0xbf,0xff,0x93,0xb,0x2f,0xbc,0x90,0x46,0xa3,0xd1,0xbf,0x67,0xb1,0xe4, + 0x45,0x9e,0xc3,0xe6,0x30,0xf7,0xa9,0xfb,0xb8,0x7a,0xfe,0x6a,0xfe,0xe7,0xae,0xbf, + 0xf9,0xc7,0xc9,0xf9,0xa9,0xdf,0x3a,0x27,0x0,0xfd,0xd3,0x3f,0xfd,0xf3,0xed,0x7, + 0x5f,0x7c,0xe9,0x13,0xf9,0x5c,0x1e,0xd7,0x73,0xb1,0x80,0xb1,0xa6,0xa7,0xd5,0x48, + 0x4,0x89,0x4e,0x88,0x93,0x18,0x2c,0xe4,0x72,0xb9,0x5a,0xa5,0x52,0xfe,0x5a,0xa9, + 0x5c,0xfa,0x5e,0xa5,0x52,0xfe,0xdf,0x71,0x9c,0xec,0xdb,0xb0,0x7e,0xdd,0xdc,0xf0, + 0xf0,0xb0,0x59,0xa9,0x31,0x5d,0x79,0xe5,0x95,0xeb,0xdf,0xf4,0xa6,0xab,0x26,0x3e, + 0xf0,0x81,0xf,0xd2,0x68,0x2c,0xd0,0x9b,0xb7,0xc5,0x92,0x13,0x39,0x6a,0xb6,0xc6, + 0xcd,0xb,0x37,0x33,0x69,0x27,0xf9,0xf6,0xc6,0x6f,0xf3,0xe8,0x3,0xff,0xcc,0xe7, + 0x1f,0xbc,0x7f,0xbb,0xb3,0xd2,0xe0,0x7c,0xe3,0x9b,0xff,0xeb,0x4f,0xe,0x4d,0x1c, + 0xfa,0xab,0x5c,0x2e,0x8f,0xeb,0x7b,0x68,0x63,0x80,0x63,0x17,0xc1,0x5a,0x83,0x54, + 0x8a,0xc0,0x51,0x18,0x6d,0x8,0xc3,0x70,0xe8,0xc8,0xe4,0xe4,0x7b,0x8e,0x4c,0x4e, + 0xbd,0xc7,0xf3,0x3c,0x86,0x87,0x2a,0xf,0x25,0x71,0xf2,0xf0,0xb3,0xcf,0x3d,0xff, + 0xc3,0x38,0x4e,0xe,0x6d,0xda,0xb8,0xb1,0xb9,0x69,0xd3,0x86,0xb3,0x32,0xea,0xd6, + 0x9a,0x6b,0x2e,0xbf,0xe2,0xa,0x8c,0x35,0x38,0xd6,0x21,0x21,0xc1,0x62,0x71,0x70, + 0xf0,0xf0,0xf8,0xcb,0xf6,0x5f,0xf2,0x33,0xfd,0x33,0xbe,0x5a,0xfe,0x2a,0xab,0x93, + 0xd5,0x6c,0xbf,0x7c,0x7,0x5f,0x7c,0xe8,0xc1,0xf7,0xae,0x28,0x40,0xf,0x3f,0xf2, + 0x95,0x8f,0xcd,0xcc,0x54,0xff,0x3c,0x97,0xcf,0x13,0xf8,0x1,0x5a,0xeb,0x9e,0xd0, + 0x80,0x15,0x88,0xde,0x9a,0x89,0xbe,0x6c,0x23,0x84,0xc0,0xf5,0x5c,0x3c,0xe1,0x61, + 0xad,0x25,0x49,0x34,0x53,0xd3,0x33,0xd7,0x1f,0x99,0x9c,0xbc,0x3e,0x9f,0x2f,0x30, + 0x32,0x32,0xf2,0x48,0xb5,0x5a,0xfd,0x72,0xa2,0xe3,0x1f,0x4d,0x4d,0x4e,0x4f,0x94, + 0xcb,0xa5,0xf6,0xc5,0x17,0xbf,0xe2,0xb4,0xc1,0xa,0x82,0xe0,0x95,0xab,0xc7,0x57, + 0x13,0x46,0x5d,0x9e,0xd5,0xcf,0xb2,0x55,0x6d,0x45,0xa1,0xc8,0x89,0x1c,0xf,0x45, + 0xf,0xf1,0xa5,0xf0,0x4b,0xdc,0x53,0xbc,0x87,0x4b,0x9d,0x4b,0x99,0xf,0xe7,0x59, + 0x35,0xbe,0x8a,0xf1,0xf1,0xb1,0xb,0x57,0xc,0xa0,0x2f,0x7d,0xf9,0xef,0xef,0xad, + 0x2f,0x2c,0xdc,0x98,0xcf,0xe5,0xf1,0x3c,0xef,0x28,0x38,0xf4,0x4,0xc8,0xa6,0x7f, + 0xfa,0xe0,0x1c,0x7b,0x6e,0xb3,0x13,0x47,0x29,0x1c,0xd7,0x41,0x58,0xd0,0xda,0x30, + 0x39,0x39,0x79,0xed,0xe1,0x23,0x87,0xaf,0x75,0x94,0xc3,0xc8,0xf0,0xf0,0xf,0x7d, + 0xdf,0xfb,0xf4,0xa1,0x43,0x87,0xbf,0xa5,0xb5,0x9e,0x9c,0x9d,0x9d,0x4d,0x76,0xec, + 0xd8,0x7e,0x4a,0x6a,0xa8,0x1c,0xe5,0xe5,0xdc,0x1c,0xb,0xa6,0xc1,0xd,0x8d,0x1b, + 0xb8,0xd6,0xbb,0x96,0x8f,0x17,0x3e,0xce,0x9c,0x9d,0xe3,0xcf,0xdb,0x7f,0xce,0x75, + 0xde,0x75,0xbc,0xdb,0x7b,0x37,0xd,0xdb,0xc0,0x5a,0x8b,0xe3,0x38,0xb8,0xae,0xeb, + 0xae,0x8,0x40,0x7f,0xf7,0xc0,0x17,0xff,0xb6,0xdd,0x6e,0xff,0x6e,0xb1,0x50,0x44, + 0x4a,0x99,0x82,0x23,0xfa,0x4c,0x22,0xfd,0xd8,0xfb,0xc7,0x72,0x54,0xe5,0xc4,0xc0, + 0xfd,0x1e,0x84,0xe2,0xe8,0x6d,0xa5,0x24,0xca,0xf1,0x0,0x81,0xb5,0x96,0xf9,0xf9, + 0xf9,0xcb,0x67,0x67,0x67,0x2f,0x7f,0xf6,0xb9,0xe7,0xa9,0x54,0x2a,0x8f,0xad,0x5d, + 0xb3,0xfa,0x93,0x13,0x13,0x87,0xbe,0x33,0x3a,0x32,0x72,0xf8,0xa5,0x43,0x87,0xf4, + 0x5,0x2f,0xdb,0xb6,0xac,0x41,0xed,0x76,0x3a,0x87,0xe7,0x1a,0xb3,0xbc,0x7c,0xf4, + 0x22,0x6e,0xcf,0xdd,0xce,0xae,0xd6,0x2e,0xb6,0xaa,0xad,0x38,0x38,0x8,0x23,0xb8, + 0x35,0x77,0x2b,0x6,0x43,0x62,0x13,0x7c,0xc7,0xa7,0xd1,0x68,0x50,0xaf,0xd7,0x67, + 0xce,0x1a,0xa0,0xcf,0xdf,0xff,0xb7,0xf,0x77,0x3a,0xdd,0x6b,0xcb,0xa5,0x94,0x4f, + 0xf4,0x27,0xc9,0xb1,0x93,0x3f,0x6,0x98,0x1,0xc9,0x39,0x6,0x9c,0xe3,0x0,0x3d, + 0xda,0xa4,0x10,0x48,0xcf,0xed,0x83,0xd5,0x68,0x34,0x5f,0xbf,0x50,0x5f,0xb8,0xe2, + 0xf9,0x17,0xf6,0x91,0xcb,0xe5,0x7e,0x34,0x32,0x32,0x72,0xff,0xe1,0xc2,0xe1,0xaf, + 0xc4,0x71,0x7c,0x70,0xf3,0xe6,0xcd,0xc7,0x49,0x55,0x1c,0x27,0x5f,0xdb,0xbb,0x77, + 0xef,0x5d,0x17,0x5e,0x70,0x21,0x1f,0x8,0x3e,0x80,0x2f,0x7c,0xee,0x6c,0xdd,0x89, + 0xb5,0x96,0x5b,0x73,0xb7,0xb2,0x43,0xed,0x60,0xde,0xa6,0x8c,0x23,0x97,0xcb,0xf1, + 0x93,0x9f,0xfc,0x84,0xf9,0xf9,0xf9,0x47,0xd4,0xae,0x5d,0xbb,0xce,0x46,0x72,0xbe, + 0xda,0x6e,0xb7,0xaf,0xce,0xe7,0xf3,0x52,0x1b,0x9d,0x7a,0xaa,0xcc,0x3b,0x8,0x24, + 0x42,0x1c,0x9d,0xba,0x10,0x2,0xa4,0x2,0xa1,0xd2,0xcf,0x42,0x1c,0x3,0xcf,0x72, + 0xe0,0x88,0xe3,0xae,0x9,0x84,0x10,0x28,0x29,0x91,0x4a,0xa,0x21,0x84,0x88,0x93, + 0x64,0x5d,0xa3,0xbe,0x70,0xe5,0xe1,0x23,0x93,0xef,0xad,0xd5,0xea,0x6f,0xaf,0x56, + 0x67,0x9d,0x30,0x8c,0x3a,0x3f,0x7f,0xe6,0x5f,0xae,0x7d,0xfa,0xe9,0xbd,0xbf,0xd7, + 0x6a,0xb7,0x84,0xe7,0xba,0xcf,0xfc,0xf4,0xa7,0x3f,0x79,0xdb,0x15,0xaf,0x7b,0xdd, + 0x2a,0x1c,0xf8,0x35,0xf1,0x6b,0x8,0x4,0xcf,0x99,0xe7,0xd8,0x95,0xdf,0x45,0x59, + 0x96,0x49,0x48,0x70,0x5d,0x17,0x6b,0x2d,0xf7,0xde,0xfb,0x99,0x76,0xab,0xd5,0xfe, + 0xc0,0x19,0xbb,0xf9,0xff,0xf1,0xc9,0xbf,0x7e,0x58,0xa,0xf1,0xf6,0xd1,0xd1,0x51, + 0x69,0x8d,0xc1,0x5a,0x8b,0xb5,0x36,0x25,0x5e,0xd6,0xa6,0x10,0x29,0x89,0x94,0x32, + 0xfb,0xac,0x10,0x42,0x65,0x6a,0x66,0xb0,0x7d,0xb7,0x6f,0x8f,0x15,0x2a,0x71,0xac, + 0x88,0x1d,0x7,0xce,0x22,0x9,0xec,0x49,0x14,0xa4,0xef,0x17,0x42,0xe2,0x28,0x55, + 0x95,0x52,0x4e,0x4a,0x21,0xd6,0x28,0x47,0x95,0x5b,0xed,0xd6,0x94,0xef,0x7,0x9f, + 0x7f,0xe0,0x81,0xfb,0x9f,0xda,0xb4,0x71,0xe3,0xdf,0x7d,0xe8,0xc3,0x1f,0x26,0xe9, + 0x26,0xc4,0x71,0x4c,0xdd,0xd6,0xa9,0x88,0xa,0x1a,0x8d,0xe3,0x38,0x14,0x8b,0x45, + 0xee,0xbb,0xef,0x73,0x7c,0xe1,0xb,0x5f,0x78,0xdb,0x8f,0x7e,0xf4,0xe3,0xaf,0xcb, + 0x33,0x1,0xe7,0xbf,0xff,0xf5,0xdf,0x7c,0x7a,0x72,0x6e,0xee,0x5a,0xc7,0xf3,0xa4, + 0x23,0xd3,0x47,0x8,0x21,0x90,0x52,0x12,0xf8,0x1,0xf9,0x7c,0x1e,0xdf,0xf7,0x1, + 0xd0,0x89,0x46,0x6b,0x8d,0x4e,0x12,0x8c,0xd6,0x80,0x41,0x8,0x81,0x90,0x2,0x44, + 0xda,0x6f,0x49,0x29,0x59,0xe,0x1c,0x71,0xfc,0x35,0x29,0xd3,0x77,0x2b,0xe5,0x20, + 0x10,0x24,0x89,0x1e,0x4b,0x92,0xf8,0x12,0xe5,0xaa,0xb1,0x28,0x89,0xbd,0x46,0xa3, + 0xb1,0xf1,0xd0,0xa1,0x43,0x1f,0xbd,0xe1,0x86,0xdf,0xbb,0xf4,0xf1,0xc7,0x1f,0xff, + 0xfd,0x7b,0xfe,0xdb,0x3d,0xcc,0xd5,0xe7,0xc8,0x17,0xf3,0xac,0x2f,0xad,0x27,0x57, + 0xc8,0x51,0x2c,0x16,0xe9,0x74,0x3a,0x7c,0xea,0x93,0x9f,0xe4,0xc1,0x7,0x1f,0xfc, + 0xd0,0xd0,0xd0,0xd0,0x37,0xce,0x28,0xd4,0x78,0xf8,0x2b,0x5f,0xbb,0xe6,0x7b,0x3f, + 0x7d,0xe2,0x33,0x8e,0x1f,0x8c,0x9d,0xb7,0x6e,0xd,0x43,0xbe,0x87,0x11,0xa2,0xef, + 0xb2,0x93,0x24,0x5d,0x19,0xa9,0x24,0xae,0xe3,0xf5,0x35,0xc9,0x5a,0x8b,0x45,0x80, + 0x90,0x48,0xa1,0x10,0x52,0x20,0xb0,0xc8,0xec,0xde,0xb1,0x92,0x24,0x4e,0x20,0x35, + 0x62,0x59,0x89,0xb3,0x58,0x24,0x2,0xc7,0x71,0xf0,0x3c,0x97,0x30,0xa,0x59,0x58, + 0x68,0x10,0x45,0x11,0xdd,0x6e,0x17,0xa5,0xd4,0xd4,0x6b,0x5f,0xf3,0xea,0xb5,0x1f, + 0xfd,0xe8,0x1f,0x6f,0xd6,0x49,0xf2,0x1f,0x2e,0xbe,0xe4,0x92,0xab,0x36,0x6f,0xde, + 0x8c,0x10,0xd2,0x4c,0x4c,0x4c,0x38,0x7b,0x7f,0xf6,0xf4,0x8f,0x9b,0xcd,0xd6,0x9d, + 0x8f,0x3d,0xfe,0xf8,0x73,0xbd,0xa7,0x9e,0xb6,0x91,0x7e,0x7a,0xef,0x33,0x7f,0xd4, + 0x6a,0x75,0xc6,0x46,0xcb,0x43,0x68,0x20,0x8a,0x63,0x5c,0xdf,0xc7,0x66,0xb6,0x66, + 0xe2,0xd0,0x4,0x53,0x53,0xd3,0x94,0xcb,0x65,0x36,0x6c,0x58,0x4f,0xa5,0x32,0x4, + 0x80,0x31,0xe9,0x7d,0x8b,0x48,0xff,0x5a,0x8b,0xb0,0x6,0x63,0xd,0x52,0x80,0x90, + 0x12,0x44,0x4f,0x96,0x2c,0xc7,0xb8,0xb3,0x93,0x36,0x91,0xa9,0x17,0x38,0x8e,0xc2, + 0x71,0x15,0xdd,0x6e,0x97,0xfa,0xc2,0x2,0x71,0x1c,0x23,0x10,0x48,0xa9,0xe8,0x86, + 0xe1,0xf0,0xd3,0x3f,0xdb,0xfb,0xcd,0x6f,0x7d,0xeb,0xdb,0x6f,0x1,0x6e,0x39,0x95, + 0x27,0x9f,0x36,0x40,0x61,0x14,0xbd,0xae,0xe0,0x7b,0x4,0xc2,0xa2,0xc3,0x2e,0x91, + 0xeb,0xe2,0x78,0x7e,0x6a,0x78,0x33,0x55,0x13,0x52,0xf4,0x6d,0x42,0x8f,0xef,0xa4, + 0x83,0x4c,0x41,0xb0,0x19,0x9b,0x36,0xd6,0x82,0x35,0x68,0xb,0x22,0xb3,0x1f,0x52, + 0xc,0xa8,0x9e,0x90,0x47,0x49,0x92,0x58,0xc,0xc9,0x62,0x63,0xe,0x9e,0xe3,0xa2, + 0x1c,0x45,0xb7,0x1b,0x52,0x5f,0xa8,0xa3,0x13,0xd,0x8,0x62,0xad,0x7b,0xbc,0xcc, + 0x9b,0x9d,0x9b,0x7b,0xf3,0xe9,0xcc,0xf7,0xb4,0x54,0xec,0x73,0xf7,0x3f,0x70,0xff, + 0xcc,0xec,0xec,0xbb,0xba,0x61,0x18,0x48,0x6b,0xc8,0x5,0x3e,0xa5,0x62,0x89,0x20, + 0x8,0x70,0x1d,0x37,0x3,0x6,0x4c,0x66,0xb4,0x1d,0xc7,0xc1,0x66,0x92,0x23,0xa5, + 0x3c,0x3a,0x95,0x9e,0x6,0xd9,0x54,0xee,0x8c,0x31,0x99,0x71,0x4f,0x9d,0x5b,0xa, + 0xb2,0xea,0xf7,0x11,0x3,0xc6,0x47,0x1c,0xc3,0xa1,0xfa,0x34,0x1d,0xd7,0x75,0x70, + 0x1d,0x97,0x4e,0xb7,0x4b,0xad,0x56,0x47,0xeb,0x4,0xa5,0x14,0x51,0x9c,0xaa,0x3c, + 0x80,0x35,0x86,0x24,0x49,0xcc,0x86,0x8d,0xeb,0x3f,0xfd,0xee,0x77,0xbd,0xf3,0xfd, + 0x2b,0x2e,0x41,0x73,0x73,0xb3,0xef,0xc9,0xe7,0x72,0x29,0x27,0xc1,0xe2,0xb9,0x2e, + 0xc6,0x18,0xe2,0x38,0x46,0x39,0xa,0x69,0x24,0x42,0xa4,0x36,0x0,0xc0,0x68,0x33, + 0x30,0x97,0x6c,0x62,0xd6,0x80,0x15,0x59,0xb8,0x91,0xaa,0x94,0x52,0x2a,0xed,0x93, + 0x45,0xfa,0x46,0x27,0x18,0xa3,0x31,0x46,0x23,0x85,0x40,0x48,0x99,0x49,0xd7,0xf1, + 0x5e,0xe,0x32,0xd6,0xeb,0x38,0xb4,0xdb,0x6d,0xea,0xb,0x8d,0x3e,0x38,0x61,0x14, + 0x65,0x52,0xd4,0x8f,0x76,0x50,0x4a,0xc9,0xc9,0xc9,0xa9,0x1b,0x81,0x95,0x5,0xe8, + 0xab,0x5f,0xfb,0xfa,0x2d,0xa9,0x18,0x3b,0x24,0x4a,0x81,0x35,0x48,0x99,0x2,0x62, + 0x8c,0x41,0xc7,0x1a,0xe1,0xa6,0x2b,0x9e,0x8a,0x73,0xcf,0xeb,0x8,0xa4,0x14,0xd4, + 0x17,0x1a,0xb4,0x5b,0x6d,0xf2,0xb9,0x80,0x72,0xa5,0x7c,0x2c,0x6c,0xb6,0x47,0x8b, + 0xd2,0x3e,0x8e,0xe3,0x66,0x9a,0x65,0xd1,0x5a,0x63,0x92,0x24,0x25,0x8b,0x52,0x22, + 0x95,0x93,0xbe,0xb7,0x17,0x42,0x28,0x85,0xef,0xb9,0xb4,0x9a,0x2d,0xea,0x8d,0x6, + 0x5a,0x6b,0xa4,0x94,0x44,0x51,0x44,0x92,0x24,0x1c,0xb5,0x6a,0xb6,0xaf,0xfe,0xed, + 0x4e,0x27,0x38,0xd5,0x79,0x9f,0x32,0x40,0x7,0x5f,0x3c,0xf8,0x41,0x47,0x29,0x92, + 0x24,0x46,0x18,0x93,0x7a,0x21,0x71,0xd4,0xcf,0x68,0xad,0x51,0x8e,0x44,0x8,0xe7, + 0xa8,0x9b,0x96,0x2,0xc7,0x75,0x91,0x8,0x66,0xe7,0xe6,0x99,0x98,0x9c,0x64,0xd5, + 0xe8,0x28,0x95,0x4a,0x39,0x3,0xc3,0xa2,0x24,0x48,0xa5,0x88,0x62,0xc3,0x4c,0x75, + 0x86,0x3,0xfb,0xf7,0xe3,0x7b,0x1e,0xeb,0xd6,0xaf,0x63,0x7c,0x6c,0x9c,0x20,0x48, + 0x83,0x5e,0x63,0x53,0x35,0x4c,0x74,0x2,0x71,0xba,0x38,0x9e,0xe7,0xe3,0x7a,0x2e, + 0xad,0x56,0x9b,0x85,0x66,0x13,0x63,0xc,0x4a,0xa6,0x92,0x93,0x68,0xcd,0x40,0x78, + 0x7c,0xbc,0xfd,0x3a,0xc5,0x76,0xca,0x3c,0xa8,0x3a,0x3b,0xfb,0xca,0x38,0x8e,0x9, + 0xbb,0x5d,0xb4,0xd1,0x7d,0x62,0x98,0x7a,0x8f,0x74,0x65,0x6c,0x26,0xe,0x42,0xa4, + 0xab,0x1d,0x86,0x21,0xcf,0xec,0x7d,0x86,0x27,0x9f,0x7a,0xa,0x8c,0xe6,0xe2,0xb, + 0x2e,0xe0,0xfc,0xad,0x5b,0x40,0x48,0xac,0xb5,0x28,0x1,0xbe,0x2,0x4f,0x82,0x14, + 0x96,0x44,0x27,0x34,0x5b,0x4d,0x1a,0xcd,0x6,0x71,0x1c,0x1f,0x9d,0x56,0xf6,0x3c, + 0xc7,0x71,0xf1,0x5d,0xf,0xdf,0xf,0x70,0x5d,0x17,0x63,0x35,0x8d,0x85,0x6,0x8d, + 0x66,0x33,0xb3,0xe3,0x22,0x95,0x1c,0xad,0x97,0x8,0x61,0x6,0x0,0x92,0x82,0xcf, + 0xdd,0xf7,0xf9,0xdd,0x2b,0x26,0x41,0xf,0x7c,0xf1,0xc1,0x7f,0x17,0x86,0xa1,0x93, + 0xcf,0xe5,0x71,0x3,0x87,0xc0,0xf7,0x71,0x3d,0xf,0xc7,0x71,0x50,0x8e,0x93,0x79, + 0x1c,0x71,0xd4,0x93,0x65,0x1e,0xcb,0x18,0x4b,0x6d,0xbe,0x46,0xab,0xdd,0x64,0xcd, + 0x9a,0xb5,0xac,0xcd,0x5,0xe4,0x73,0x1,0x71,0x14,0x23,0x0,0x63,0x5,0x91,0x1, + 0x61,0xc,0xd6,0xa,0xc6,0x47,0xc7,0x28,0xbe,0xfa,0xd5,0x8,0x4,0x41,0x10,0x20, + 0xa4,0xc0,0xd8,0x94,0x58,0x3a,0xca,0x41,0x4a,0x41,0x1c,0x45,0x48,0xe5,0xe0,0xb9, + 0xe,0xed,0x6e,0x97,0x5a,0xbd,0x8e,0x52,0xa,0x84,0x20,0x8e,0x13,0x92,0x44,0xf7, + 0x25,0xfb,0x38,0x70,0xb2,0x53,0x47,0x39,0x2c,0x34,0x1a,0xaf,0x59,0x31,0x80,0x8e, + 0x1c,0x3e,0xf2,0x5e,0xc7,0x71,0x91,0xae,0x8b,0xf0,0x7d,0xdc,0x42,0x91,0x62,0x2e, + 0x87,0x12,0x2,0x63,0x74,0xdf,0x8d,0xf7,0x6,0xd5,0xfb,0x9c,0xb,0x2,0x2e,0x7a, + 0xf9,0xcb,0x9,0xe3,0x90,0x5c,0x2e,0x4f,0x2e,0x8,0xd0,0x89,0xee,0xf,0xdc,0x20, + 0x30,0xbd,0x94,0x91,0x0,0xdf,0xf7,0xc9,0xe7,0xb,0x8,0xc,0x46,0x1b,0xb4,0x4d, + 0x93,0x6d,0x12,0x41,0xb3,0xd5,0x62,0xbe,0xb1,0x80,0x9f,0xcb,0x63,0x4,0x74,0x6a, + 0x75,0xa4,0x35,0xe4,0xa,0x5,0x8c,0xd6,0x24,0x89,0xee,0xe7,0x97,0x39,0x9,0x83, + 0x52,0x52,0x12,0x45,0x71,0x7e,0x45,0x0,0xfa,0xfa,0x37,0xbe,0xf9,0xae,0x6e,0xb7, + 0xfb,0x8a,0xb5,0x6b,0xd7,0x92,0x8,0xc1,0x5c,0xab,0x43,0x23,0x36,0x8c,0xa,0xc9, + 0x48,0x21,0x4f,0xe0,0xa6,0x46,0x53,0x9b,0x8c,0x6,0x8a,0x94,0xb4,0x59,0x6d,0x51, + 0x4a,0xb1,0x6a,0xcd,0xaa,0x45,0xa3,0xb5,0x80,0xdb,0x27,0x8b,0x47,0x29,0x8e,0xc5, + 0x60,0xd1,0x3a,0x6,0x6b,0x30,0xc6,0xa2,0xa4,0x24,0x8c,0x22,0xaa,0xb3,0x73,0x1c, + 0x9e,0x99,0xa5,0x63,0x2c,0xa5,0xe1,0x11,0x5c,0x25,0x89,0x5b,0x4d,0xf2,0x52,0x50, + 0x28,0x14,0x52,0x9e,0x63,0x52,0x9b,0x23,0xc4,0x12,0x10,0x1d,0xf3,0xd1,0x82,0x14, + 0x59,0xa6,0xf3,0x2c,0x1,0xfa,0xf9,0xcf,0xff,0x65,0x6c,0x61,0xa1,0xf1,0xda,0x52, + 0xb1,0xc4,0xea,0x55,0xab,0xa8,0x2e,0x2c,0xd0,0x99,0xad,0x11,0x29,0xf,0x27,0x8c, + 0x31,0xc9,0x2,0x2a,0x89,0x89,0x3a,0x1d,0xb4,0xb5,0x48,0x29,0x70,0x1d,0x7,0xd7, + 0xf5,0x8,0xfc,0x0,0xdf,0xf7,0x40,0x82,0x44,0xa6,0x13,0x10,0xa9,0x87,0x72,0x54, + 0x1a,0x6a,0x58,0x63,0xb1,0xd6,0x60,0x6d,0xc6,0x9d,0x4c,0x92,0x12,0x48,0x63,0x0, + 0x41,0x37,0x8c,0xa8,0xce,0xcd,0x71,0xf0,0xd0,0x61,0x26,0xab,0x55,0xf2,0x23,0x63, + 0xd0,0xe9,0x50,0xf0,0x3,0x72,0xb9,0x2,0x2e,0x86,0x30,0xc,0xd1,0xc6,0x1e,0x5, + 0xe6,0x14,0x69,0x9d,0x59,0x9,0x80,0x26,0xa7,0xa6,0x76,0x28,0x25,0x5f,0x39,0x3c, + 0x5c,0x41,0x4a,0x41,0xde,0xf7,0x58,0x35,0x3a,0x4c,0xe2,0x5,0x18,0xad,0x39,0x78, + 0xf8,0x8,0xd3,0x13,0x13,0x84,0xad,0x16,0x7e,0x10,0xe0,0xb9,0x4e,0x1a,0x7,0xf9, + 0x1e,0xc5,0x42,0x91,0x72,0xb9,0x4c,0xa9,0x54,0xa4,0x50,0x28,0xe0,0xfb,0x7e,0xe6, + 0x7e,0x63,0x12,0x99,0xe0,0x66,0xb6,0xb,0x1,0xda,0x68,0x8c,0x36,0x98,0xc4,0xf4, + 0x73,0xd8,0xc6,0x18,0xe6,0xeb,0xb,0xcc,0xcc,0xd5,0xd0,0xda,0x50,0xa,0x2,0x5c, + 0x1,0x8e,0x31,0x84,0x61,0x7,0x29,0xa1,0x90,0xcb,0xa1,0x7b,0x44,0xd7,0x8a,0xa5, + 0xd5,0x6b,0x99,0x13,0x89,0xe0,0xc1,0x2f,0xfd,0xfd,0x5f,0xfd,0xf6,0xbb,0xdf,0xf5, + 0xd1,0x33,0x6,0xa8,0xd3,0xee,0xfc,0x86,0x92,0xea,0x32,0xd7,0xf5,0x88,0x93,0x4, + 0xdf,0x75,0x19,0xce,0x5,0xec,0x7b,0xf1,0x20,0x61,0x92,0xd0,0xed,0x74,0xd0,0x49, + 0xc2,0xd0,0xf0,0x30,0xe5,0x52,0x9,0xc7,0x51,0x18,0x63,0x88,0xa2,0x88,0xf9,0xf9, + 0x79,0xaa,0xd5,0x2a,0x8e,0xe3,0x50,0x2e,0x97,0x59,0xb3,0x76,0xd,0x23,0xc3,0x23, + 0xf8,0xbe,0x8f,0x31,0x86,0x30,0x8c,0x50,0x59,0x3a,0x44,0x1b,0x9d,0xda,0xa6,0x8c, + 0x59,0x63,0x2d,0xad,0x76,0x87,0x56,0xa7,0x8d,0xc0,0x52,0x28,0xe4,0x29,0x17,0x8b, + 0x8,0x29,0xe8,0x46,0x21,0x51,0x12,0xa3,0xa,0x39,0x7c,0xcf,0x5d,0x46,0x55,0xec, + 0x92,0xd2,0x34,0x68,0x2b,0x95,0x52,0x74,0x3a,0x9d,0xa1,0x47,0xbe,0xf2,0xd5,0x37, + 0x5e,0x7b,0xcd,0xdb,0xbf,0x73,0x46,0x0,0xc5,0x49,0xfc,0x7a,0x6b,0x59,0xdf,0x7b, + 0x6c,0x9c,0x68,0xe,0xec,0xdb,0xc7,0xc1,0x3,0x2f,0x52,0x19,0x19,0x61,0xd3,0xe6, + 0xcd,0x94,0x2e,0xbc,0x0,0x47,0xca,0x34,0x92,0x1e,0x48,0x82,0x69,0xa3,0xe9,0x76, + 0xba,0x34,0x9b,0x4d,0x66,0xaa,0x33,0x3c,0xfd,0xf4,0xd3,0x8c,0xe,0x8f,0xb0,0x75, + 0xeb,0x56,0x46,0x46,0x47,0xb0,0x58,0xb4,0x36,0xfd,0xb0,0xa4,0xff,0x77,0x80,0xef, + 0x48,0x1,0x85,0x20,0x40,0x3a,0xe,0x9e,0xef,0xa3,0x8d,0x46,0xb5,0x5a,0x8c,0xba, + 0x25,0x4a,0x85,0x7c,0x6a,0xf7,0x16,0xdb,0x97,0xa5,0x63,0xd9,0xa3,0x79,0x81,0x5e, + 0xa4,0x22,0x25,0x51,0x12,0x57,0x5a,0xed,0xf6,0xd0,0x19,0x4b,0x90,0xd6,0xe6,0x12, + 0x63,0xd,0x4a,0x29,0xb4,0x36,0x54,0xab,0x33,0xec,0x3b,0x70,0x80,0x4d,0x9b,0x36, + 0xb1,0x65,0xcb,0x66,0xa,0x85,0x42,0x1a,0x76,0x88,0xa3,0xac,0x38,0x49,0x74,0x96, + 0xc,0x73,0xc9,0x5,0x1,0x95,0x4a,0x99,0x55,0xab,0xc6,0xa9,0xd5,0x6a,0x1c,0x39, + 0x72,0x84,0x27,0x9e,0xdc,0xc3,0xc6,0x75,0xeb,0xd9,0x7a,0xde,0x79,0xb8,0x9e,0x9b, + 0x5,0x84,0xe9,0x1c,0x12,0x9d,0xf4,0xed,0x11,0xc6,0xe0,0x7b,0x1e,0x5e,0xc1,0xc3, + 0xf3,0x3c,0xba,0x51,0x44,0xa7,0x13,0x33,0x3a,0x54,0xc1,0x77,0x5d,0xe2,0x24,0x21, + 0xd1,0x3a,0xd,0x3f,0xfa,0xd1,0xbf,0x58,0x42,0x7a,0xec,0x92,0xf4,0x50,0x4a,0x81, + 0x49,0xf4,0x48,0xd8,0xd,0x47,0xcf,0x18,0x20,0x6b,0x6c,0x19,0x9b,0x12,0xab,0x28, + 0x8a,0x68,0x34,0x9a,0x5c,0x76,0xe9,0x2b,0xd9,0xb4,0x69,0x13,0x41,0xe0,0xd1,0x69, + 0x87,0x44,0x51,0x4,0x22,0x75,0x9d,0x4a,0x29,0x72,0x81,0x8f,0xe7,0x7b,0x8,0x21, + 0xe8,0x76,0xbb,0xc4,0xb1,0xc6,0x75,0x3d,0x7c,0xdf,0xa7,0x50,0x28,0x30,0x3d,0x3d, + 0xcd,0x91,0xc9,0x49,0xe6,0x6a,0x35,0x2e,0xba,0xe8,0x22,0xa,0x85,0x22,0xb1,0x49, + 0xc3,0x3,0xd7,0xf3,0x88,0xba,0x61,0xca,0x88,0x1d,0x87,0x4a,0xa1,0x80,0xef,0x79, + 0x84,0x61,0x88,0x92,0x82,0x72,0x21,0x8f,0xe3,0x28,0x92,0x44,0xa3,0xb5,0xc5,0x51, + 0x99,0xf1,0x5f,0x56,0x7a,0xec,0x40,0xa1,0x60,0xb0,0x46,0x66,0xfb,0xb9,0x2b,0x7b, + 0x12,0x62,0x7d,0x12,0x37,0x6f,0x25,0x2,0x92,0x2c,0x16,0x5a,0xbf,0x7e,0x1d,0x95, + 0xa1,0xa,0xb,0xf5,0x6,0xcf,0x3d,0xf7,0x3c,0xf5,0xfa,0x2,0x41,0xe0,0x53,0x2c, + 0x16,0xfa,0x63,0xc9,0x5,0x1,0x16,0x81,0xe7,0xfa,0x6c,0xdc,0xb8,0x8e,0x4a,0xd9, + 0xa7,0xd5,0xee,0xd0,0xed,0x76,0x29,0x15,0x4b,0x38,0xca,0xc1,0x75,0x7d,0xa6,0xa7, + 0xa7,0x78,0xea,0xc9,0x27,0x29,0xe,0x8f,0xa0,0x72,0x5,0x1c,0xcf,0x65,0x74,0xa8, + 0x44,0xc5,0xf3,0x91,0xc6,0xe0,0x2a,0x7,0x89,0x25,0x8e,0x23,0x8c,0xd1,0x78,0x4a, + 0x22,0xa4,0xc4,0x22,0xd0,0x26,0xa6,0xd9,0x6c,0xd0,0x6e,0xb7,0x18,0x19,0x1d,0xcd, + 0xd2,0x22,0x76,0x49,0x13,0x24,0x8e,0x83,0xcc,0xf6,0xe3,0x32,0x63,0x2d,0x36,0x9b, + 0xdb,0x99,0x13,0xc5,0xcc,0x3e,0x38,0x8e,0x43,0x90,0xb,0x98,0x9a,0x9c,0xe2,0xe0, + 0x4b,0x13,0x54,0xab,0xb3,0x0,0x94,0x4d,0x89,0x20,0xf0,0xb1,0x96,0x7e,0xb9,0xe7, + 0xc0,0xfe,0x97,0xd8,0xb7,0xef,0x10,0xdb,0xce,0xdf,0xc6,0x5,0x17,0x6e,0xe1,0x82, + 0x97,0x6d,0x21,0x8,0xca,0xd4,0xea,0xb,0xb8,0x89,0x66,0x64,0x74,0x18,0x84,0xe5, + 0xc8,0xe1,0x23,0x4c,0x4e,0x4f,0x53,0x59,0xbb,0x9e,0xd5,0x6b,0xd6,0x22,0x72,0x3e, + 0xb5,0x46,0x9d,0xbc,0x12,0x48,0x91,0x3e,0xaf,0x97,0x8e,0x49,0x3,0x55,0x89,0xb1, + 0x82,0x46,0xa3,0xc9,0xa1,0x43,0x13,0x18,0x63,0x19,0x1b,0x1f,0x4f,0x25,0xc8,0x2e, + 0xc1,0x77,0x4e,0x24,0x1c,0xf6,0x24,0x76,0xeb,0x54,0x1,0xb2,0xd6,0x22,0x55,0x9a, + 0x6e,0xa8,0xd7,0x17,0xd8,0xbf,0xff,0x0,0xcd,0x66,0x6b,0x40,0xad,0xd3,0x74,0x83, + 0x10,0x12,0xad,0xd,0x52,0x2a,0xda,0xed,0x16,0x7,0xf,0xee,0x67,0x7e,0x7e,0x9e, + 0x5f,0x3c,0xfb,0x2c,0x2f,0x7b,0xd9,0x16,0x5e,0xff,0xfa,0xd7,0xb0,0x6a,0xf5,0x38, + 0x73,0x66,0x8e,0x30,0xe,0x29,0x97,0xcb,0x58,0x21,0x99,0xa9,0xce,0x62,0x93,0x8, + 0x1d,0xc7,0x74,0x80,0x85,0xf9,0x3a,0x1b,0xc7,0x86,0x71,0x14,0x24,0xb1,0xce,0x52, + 0x1d,0x22,0x23,0xa0,0x69,0x8e,0x3b,0x4e,0x12,0x5c,0xcf,0x27,0x9f,0xcb,0x65,0xd7, + 0xcd,0x89,0x6c,0xf3,0x31,0x20,0xf4,0x0,0x17,0x29,0xbd,0xc8,0x19,0x63,0xf2,0x67, + 0xc,0x90,0xe3,0x38,0x2f,0x45,0x71,0xbc,0x51,0x66,0x29,0x8d,0xa9,0xa9,0x29,0xda, + 0xed,0x2e,0x4a,0x29,0xa4,0x90,0x74,0xa2,0x2e,0xdd,0x30,0xb5,0x19,0x9e,0xef,0xe1, + 0xba,0xd9,0xce,0xd,0x1,0x10,0x51,0xab,0x4d,0x13,0x76,0x1a,0xbc,0x78,0x60,0x3f, + 0x93,0x53,0x93,0xfc,0xe6,0x5b,0xde,0xc4,0xe6,0xcd,0x1b,0x88,0xe3,0x98,0x38,0xd1, + 0x94,0x87,0x86,0x0,0xc1,0xd4,0xcc,0xc,0x13,0x3f,0xdf,0xcb,0xc8,0xf8,0x2a,0xa, + 0x81,0x87,0xef,0x7a,0x38,0x4a,0xf4,0x83,0xda,0x94,0x6e,0xb,0xb4,0x36,0x74,0xc3, + 0x10,0xdf,0xf7,0x59,0xb7,0x6e,0x1d,0xae,0xe3,0x60,0x8d,0x19,0x9c,0xfe,0xf1,0x79, + 0xec,0xe3,0x4b,0x93,0x8,0x21,0x68,0xb7,0x3b,0x54,0xca,0xe5,0x85,0x72,0xb9,0x74, + 0xe4,0x8c,0x1,0x2a,0x14,0xa,0xbb,0x4d,0xb3,0xf9,0xce,0x38,0x8e,0x8b,0x49,0x12, + 0xd3,0x6c,0x36,0xfb,0x5c,0x47,0x64,0xc,0x39,0x8c,0x62,0x5a,0xed,0x36,0x41,0x2e, + 0xc0,0x51,0xe,0x5a,0x6b,0xa,0x85,0x2,0xc3,0xc3,0x23,0x34,0x16,0xea,0x94,0x4b, + 0x1e,0x5a,0xc7,0x3c,0xfe,0xd8,0x63,0x34,0xeb,0x75,0xae,0x7f,0xe7,0x35,0x6c,0xda, + 0xbc,0x89,0x28,0x49,0xe8,0x86,0x11,0xf9,0x5c,0x8e,0x40,0x29,0xaa,0x33,0xd3,0x84, + 0x8e,0xe2,0xfc,0x57,0x5c,0x84,0xe7,0xa6,0x12,0x69,0x11,0xc4,0x71,0x84,0xb5,0x69, + 0xe1,0x30,0x49,0x34,0x49,0x92,0xe0,0x3a,0x2e,0x4a,0xc9,0x94,0x12,0x68,0xb3,0x4c, + 0xfa,0x7a,0xa9,0x92,0x64,0xda,0xa2,0x30,0x42,0xa,0x59,0x7d,0xdf,0xad,0xb7,0xbc, + 0xf5,0xa4,0x25,0xeb,0x13,0x15,0xe,0xeb,0xb,0xb,0xba,0xd3,0xe9,0x6e,0x68,0xb7, + 0xdb,0xe7,0x19,0x63,0xa9,0x56,0xab,0x68,0x6d,0xc8,0x8a,0x18,0x29,0x97,0x31,0x1a, + 0x1d,0x27,0x94,0x8a,0xc5,0x3e,0x3b,0xe,0x82,0x80,0x91,0xd1,0x61,0x2a,0x95,0x21, + 0xa4,0x54,0x8c,0x8e,0x54,0x70,0x1c,0xc5,0x8b,0x2f,0x1e,0x64,0x6a,0x6a,0x86,0x4d, + 0x9b,0x37,0x31,0x3c,0x54,0x21,0xa,0x43,0xac,0x31,0x78,0x9e,0x9b,0xf2,0xa6,0x76, + 0x9b,0xf1,0xd1,0x51,0x5c,0xcf,0x4d,0xd,0xaf,0x35,0x8,0x6b,0x71,0x24,0x48,0x1, + 0x51,0x14,0xa6,0xdc,0xc9,0xf6,0x42,0x14,0xbb,0x4,0x28,0xa2,0x1f,0x30,0xf7,0x48, + 0x67,0xef,0x5b,0x69,0xb6,0xd2,0x60,0xad,0x99,0xfe,0xe3,0x3f,0xba,0x6d,0xd5,0x29, + 0xd5,0xf4,0x4f,0x4,0xd0,0xda,0x35,0x6b,0x7e,0x31,0x39,0x39,0xb5,0x69,0xa1,0xbe, + 0xf0,0x26,0x8b,0xa5,0x56,0xab,0x91,0x24,0x7a,0x30,0xa1,0xd,0x16,0xa2,0x38,0x42, + 0x29,0x7,0x3f,0x8,0x70,0x94,0xc2,0x75,0x1d,0x2a,0xe5,0xa,0x6b,0xd7,0xae,0x63, + 0xf3,0x96,0x2d,0x8c,0x8c,0xaf,0x62,0x7c,0x6c,0xc,0xdf,0xf7,0x99,0x9d,0x9d,0xa7, + 0x3a,0x3b,0xcf,0x85,0x17,0x6e,0xc3,0xf7,0xbc,0x34,0xad,0x2a,0x1d,0x8c,0xb5,0xcc, + 0xcd,0xcf,0x93,0x24,0x9,0x95,0x72,0x5,0xcf,0xf3,0x70,0xa5,0xc5,0x77,0xc0,0x11, + 0x16,0x61,0x35,0x71,0x14,0xa6,0xa0,0xc8,0x7e,0x1,0xf7,0xa4,0x46,0x78,0xd0,0xf6, + 0x18,0x63,0x40,0x50,0xbd,0xe3,0xf6,0x8f,0x9c,0x12,0x38,0x27,0x5,0x8,0xa0,0xd9, + 0x6c,0x52,0xab,0xd7,0x7f,0x3f,0x8e,0x63,0xd9,0x6a,0x35,0x9,0xc3,0xe8,0x98,0x31, + 0xd8,0x8c,0x24,0x76,0xda,0x6d,0x2,0xdf,0xc7,0xf7,0x7d,0x94,0x52,0x58,0x6b,0x9, + 0xc3,0x10,0xa3,0x35,0xa5,0x62,0x91,0xd5,0x6b,0xd6,0x70,0xde,0x79,0x5b,0x59,0xb7, + 0x6e,0x35,0xd6,0x1a,0x94,0x74,0x18,0x1d,0x1d,0x3e,0xca,0x47,0x2c,0xc4,0x51,0x44, + 0xad,0x5e,0x67,0x64,0x64,0x84,0x72,0x31,0x97,0xba,0xf6,0xcc,0x9b,0xc5,0x49,0x42, + 0x14,0xa7,0x79,0xa4,0xd4,0x45,0x2f,0x15,0x4a,0x58,0x96,0xba,0x22,0x84,0x48,0xf3, + 0xe6,0x52,0x1e,0xb9,0xed,0x23,0x1f,0x5a,0x73,0x3a,0x79,0xf8,0x93,0x66,0x14,0x2f, + 0xbe,0xf8,0x15,0xdf,0x1d,0x1b,0x1b,0xfd,0xaf,0x5a,0x1b,0x4a,0xa5,0x12,0x4a,0x1d, + 0xe5,0x1c,0x2,0x50,0x59,0x92,0xde,0x2,0x33,0xd5,0x2a,0x8d,0x46,0x13,0x2c,0x28, + 0xc7,0xa1,0x50,0x2c,0xe0,0x79,0x2e,0x9d,0x4e,0x9b,0x66,0x23,0xdd,0x56,0xb2,0x66, + 0xed,0x5a,0x2e,0xbd,0xf4,0x12,0xf2,0x85,0x1c,0xa6,0xbf,0xcd,0x24,0xd,0x70,0xb, + 0xc5,0x2,0xdd,0x6e,0x97,0x66,0xb3,0x81,0x4e,0xe2,0x7e,0x35,0xc3,0xa4,0xd5,0xd2, + 0xc,0x4c,0x9d,0x26,0xdc,0xcc,0x60,0xe9,0xda,0xe,0xd4,0xf1,0xc5,0x31,0xdb,0x6d, + 0x84,0x10,0x74,0x3b,0x5d,0x94,0x54,0xd5,0x8f,0x7c,0xf8,0x83,0xeb,0x4e,0xb7,0xcc, + 0x75,0x4a,0x29,0xd7,0x37,0xfe,0xab,0x2b,0xff,0x2c,0x8,0x3c,0xa,0x85,0x2,0x4a, + 0xa9,0xa3,0x19,0x44,0x99,0x6,0x9b,0x4a,0x4a,0x5c,0xd7,0x25,0x8a,0x22,0xa6,0xa7, + 0xa6,0xa9,0xd5,0xeb,0x29,0x33,0x76,0xd2,0xec,0x63,0x3e,0x9f,0xc7,0x5a,0x43,0xb3, + 0xd5,0xa4,0xdd,0xee,0xf4,0x93,0x5b,0x61,0x37,0x44,0x49,0x89,0xe7,0xa5,0x46,0x37, + 0x8,0x2,0x4,0xd0,0x6e,0xa4,0x92,0x6a,0xad,0xcc,0xf6,0xc,0x49,0x5c,0x95,0xb2, + 0xf5,0xe9,0xea,0x2c,0xb5,0x5a,0xd,0x95,0xb9,0x7f,0xcb,0x51,0x7b,0xd8,0x4b,0x1, + 0x1f,0xd,0x27,0x24,0xed,0x56,0x1b,0xa5,0x54,0xfb,0xb6,0x8f,0x7c,0x70,0xfc,0x4c, + 0xca,0xec,0xa7,0x9c,0x93,0xbe,0xe1,0x77,0xfe,0xb5,0x50,0xca,0xa1,0x54,0x2a,0xf5, + 0x93,0x62,0x72,0xa0,0x2e,0xaf,0xa4,0xc4,0x75,0x5c,0xa2,0x38,0x66,0x7a,0x7a,0x86, + 0x99,0x99,0x19,0xe2,0x38,0xca,0x72,0xc9,0xe,0x9e,0xe7,0xe1,0x38,0xa,0xad,0x13, + 0x3a,0x9d,0x2e,0x9d,0x4e,0x97,0xfa,0x42,0x23,0x23,0xa1,0x2e,0x52,0xa4,0xb5,0x75, + 0xe5,0x38,0xb4,0x3a,0x6d,0xe2,0x38,0x4e,0x13,0x68,0x6,0xb4,0x85,0x85,0x56,0x87, + 0xc9,0x99,0x59,0x10,0x82,0x42,0x21,0x97,0xa5,0x63,0xed,0x32,0xe6,0x27,0xa5,0x5, + 0xad,0x56,0xb,0xe5,0x38,0xd1,0x1d,0xb7,0x7f,0xb8,0x70,0xa6,0x3b,0x58,0x4e,0xab, + 0x2e,0x36,0x36,0x3e,0xf6,0x48,0x14,0xc7,0xd7,0xb6,0x5a,0x2d,0x92,0xa4,0xdd,0x4f, + 0x1b,0xf4,0x92,0x4f,0x3d,0xe9,0x8a,0x93,0x84,0x99,0x99,0x59,0xba,0xdd,0x90,0xa1, + 0x4a,0x99,0xc0,0xf,0x90,0x4a,0xe2,0xb9,0x1e,0x46,0x6b,0x8c,0x4d,0xc3,0x97,0x30, + 0xc,0x89,0xb5,0xc6,0x75,0x1c,0xa4,0x54,0x7d,0xb0,0xc3,0x28,0x4e,0xbd,0x65,0xb6, + 0xd5,0xa5,0xdb,0x4d,0x78,0xee,0x85,0x17,0x91,0x52,0xb0,0x76,0xed,0x6a,0x72,0xf9, + 0x22,0x51,0xd2,0xb,0xa2,0x93,0xe3,0xb3,0x86,0x99,0xfd,0x73,0x1d,0x37,0xba,0xe3, + 0xf6,0xf,0xfb,0x67,0xb3,0xff,0xe9,0xb4,0x76,0x77,0xbc,0xfd,0xad,0xbf,0xf9,0x8e, + 0xd1,0xb1,0xd1,0x3d,0x23,0x23,0x69,0x5e,0xa7,0x27,0x45,0x4a,0xa9,0x7e,0x8d,0x4c, + 0x29,0xd5,0x27,0x70,0xf5,0xfa,0x2,0x53,0x53,0x33,0x4c,0xcf,0xcc,0x50,0xaf,0xd7, + 0x9,0xc3,0x10,0x84,0x40,0x39,0x12,0x47,0x49,0x84,0xb0,0xe9,0x8e,0xf,0x9b,0x8e, + 0x44,0x6b,0x9d,0x15,0x21,0x1d,0x8c,0x10,0x69,0x32,0x2c,0xdb,0xdc,0x90,0x1a,0xfb, + 0x2,0x9e,0x17,0x60,0xad,0x20,0x89,0x35,0xdd,0x6e,0x27,0xd,0x3c,0x7b,0x5e,0x35, + 0x23,0xb4,0x51,0x14,0xe1,0x79,0x5e,0xf5,0x6c,0xc1,0x39,0x6d,0x80,0x0,0xde,0x75, + 0xdd,0xb5,0x3b,0xb6,0x6e,0xde,0xfc,0xc4,0xc8,0xf0,0x70,0xb6,0xd9,0x28,0xad,0x51, + 0xf5,0x8e,0xde,0x36,0x18,0xd7,0x75,0x71,0xa4,0x24,0xec,0x86,0xd4,0xeb,0xb,0x54, + 0x67,0xe7,0x98,0x9d,0x9d,0x67,0x6e,0xbe,0xc6,0x7c,0xad,0x4e,0xa3,0xd5,0xa2,0xd5, + 0x6a,0xa1,0x75,0x92,0x71,0x1e,0x9b,0x15,0xfb,0x34,0xe5,0x72,0x9,0xc7,0xf5,0x88, + 0x12,0x43,0x94,0x18,0x84,0x92,0xac,0x5b,0xbf,0x9e,0xca,0xc8,0x28,0xd6,0x71,0x69, + 0x47,0x11,0xb3,0xf3,0xf3,0x4c,0x4f,0x4f,0x23,0xec,0x51,0x70,0xb4,0xd1,0x44,0x71, + 0x44,0xb1,0x50,0x7c,0xea,0x23,0x1f,0xfa,0xc3,0x71,0x56,0xa0,0x9d,0xd1,0xfe,0xa0, + 0x77,0x5c,0x77,0xcd,0xab,0xb6,0x9d,0x7f,0xde,0x9e,0xb1,0xb1,0x11,0x5c,0xd7,0xed, + 0xd7,0xad,0x6,0x41,0xea,0x25,0xa5,0x52,0x3,0x9c,0xe6,0x93,0x9a,0xcd,0x16,0xf3, + 0xf3,0x35,0xe6,0x66,0xe7,0x98,0x9b,0x9b,0xa7,0x5e,0x6f,0xa0,0xb5,0xc1,0x71,0x15, + 0x61,0x18,0x31,0x3f,0x5f,0xc3,0xf3,0x5c,0x86,0x87,0x87,0xf1,0x3d,0x1f,0xad,0xd, + 0xb1,0x81,0xc4,0x8,0xfc,0x42,0x9,0xe3,0xb8,0xa8,0x20,0x4f,0x68,0xa0,0xb6,0xd0, + 0x20,0xe,0x63,0xa4,0x4a,0x77,0xab,0x19,0xa3,0x9,0xc3,0x90,0x72,0xb9,0xf4,0xd3, + 0xf7,0xbf,0xef,0xf,0x2e,0x5b,0xa9,0xcd,0xa9,0xf2,0x4c,0x3b,0x5e,0x77,0xfd,0xb5, + 0x3b,0xb6,0x6d,0xdb,0xf6,0xd4,0xea,0xd5,0xab,0xf0,0x3c,0x37,0xdb,0xc4,0x24,0xfa, + 0x0,0xf5,0x3,0xcc,0x6c,0x75,0x1d,0xa5,0xd2,0x78,0xcd,0x71,0x90,0x59,0x60,0x9b, + 0xcb,0xe5,0x8,0x82,0x1c,0x49,0x9c,0x30,0x39,0x39,0xc9,0x4b,0x13,0x2f,0x31,0x32, + 0x32,0x42,0xa9,0x58,0xcc,0x76,0x82,0xa4,0xbc,0x38,0x49,0x92,0x34,0xe5,0x22,0xc0, + 0xe0,0xa1,0xdc,0x22,0x43,0x23,0x63,0xac,0x5a,0x3d,0x9e,0xd2,0x0,0x63,0xe8,0x46, + 0x11,0xe5,0x72,0xf9,0x99,0x5b,0xff,0xe0,0x96,0x57,0xaf,0xe4,0xd6,0x66,0x79,0x36, + 0x9d,0xaf,0x7b,0xc7,0x35,0x97,0x6d,0xdb,0x76,0xfe,0x77,0x37,0x6e,0xd8,0xd0,0x2d, + 0x97,0xcb,0x69,0x1,0x8f,0xa5,0xa5,0xa9,0x1f,0x8,0x64,0xdb,0x5a,0x5c,0xd7,0x65, + 0xcd,0x9a,0xd5,0x94,0x4a,0x45,0x26,0xa7,0xa6,0x78,0xf6,0xb9,0xe7,0x89,0xe3,0x84, + 0xad,0x5b,0xb6,0x10,0x4,0xb9,0xb4,0x1e,0x26,0xd3,0x60,0x55,0x27,0x29,0x41,0x44, + 0x5b,0x92,0x30,0x22,0x8,0x2,0x56,0xad,0x1a,0xa7,0x58,0x2c,0xa2,0x33,0x9b,0x53, + 0xc8,0xe5,0x8e,0xbc,0xef,0xdf,0xdc,0x72,0x31,0x2b,0xdc,0x56,0xe4,0xa7,0x8,0xdf, + 0xff,0xfe,0x63,0x1f,0x3b,0x78,0x70,0xe2,0xdf,0xd6,0xea,0x35,0x67,0x7e,0xbe,0x46, + 0xa3,0xd9,0x4c,0x73,0x43,0xf6,0xd8,0x30,0xc9,0xa6,0x59,0x4a,0x5c,0xc7,0x61,0xed, + 0xda,0x35,0x6c,0xda,0xb0,0x9e,0x58,0x6b,0x5e,0x98,0x38,0x4c,0xad,0xd9,0x64,0xed, + 0xf8,0x28,0xab,0x87,0x87,0xc1,0xda,0xbe,0xe1,0xef,0x76,0xbb,0x29,0xf9,0x84,0x74, + 0xc7,0xc7,0x40,0x9e,0xca,0x1a,0x4b,0x9c,0xc4,0xf8,0x9e,0x37,0xf5,0xc1,0x3f,0x7c, + 0xff,0x1a,0xce,0x41,0x5b,0x91,0x7d,0xd2,0xae,0xeb,0xee,0x7a,0xd5,0xab,0xb6,0x3f, + 0xfc,0xfc,0xf3,0x2f,0x7c,0x2a,0xf0,0x83,0x1d,0x23,0xd9,0x96,0xb7,0x76,0xa7,0x4d, + 0x14,0x46,0x3,0x34,0xc0,0xa1,0x58,0x2a,0x32,0x36,0x32,0x4c,0xa9,0x5c,0xa6,0xdb, + 0xd,0xa9,0x2e,0x2c,0xd0,0x8c,0x63,0x54,0x2e,0x40,0x6,0x79,0x42,0x4,0x39,0x25, + 0x71,0x95,0x22,0x8c,0x62,0xba,0x9d,0x6e,0x5a,0xc7,0x77,0x54,0x3f,0xc5,0x6a,0xb4, + 0x21,0xd1,0x86,0x38,0x49,0xf0,0x7c,0xaf,0x79,0xae,0xc0,0x59,0x31,0x9,0x2,0x78, + 0xe1,0x85,0x7d,0xa2,0x58,0x2c,0x16,0xab,0xd5,0xea,0xaf,0xbf,0xb0,0x6f,0xff,0x7f, + 0xae,0x56,0xab,0x2f,0x17,0x90,0xed,0x6e,0x15,0x8,0x64,0xb6,0xf,0x28,0x4d,0x9d, + 0x1a,0x6d,0xd0,0x49,0x42,0x23,0xec,0x32,0xb9,0xd0,0xa4,0x95,0x18,0xca,0x85,0x2, + 0x95,0xc0,0x63,0x55,0xa9,0x80,0x12,0x82,0x66,0xb3,0x45,0xbb,0xd3,0xc1,0x5a,0x43, + 0x18,0x45,0xb4,0x5a,0x6d,0x34,0x2,0xe9,0x28,0x84,0xb5,0x8c,0xf,0xd,0x3f,0xf1, + 0xfe,0xf7,0xdd,0xf2,0x2a,0xce,0x61,0x5b,0xf1,0x5f,0xfb,0xec,0xdb,0x7f,0x40,0x36, + 0x1a,0x8d,0x11,0xcf,0x73,0x2f,0x3f,0x7c,0xf8,0xc8,0x8d,0xd5,0xea,0xec,0x6f,0x87, + 0x61,0xd8,0xb7,0x4d,0xbd,0x40,0x16,0x3,0x42,0xa5,0x6,0x76,0xa1,0x1b,0x32,0xd7, + 0xee,0x10,0xc7,0x9,0x81,0x92,0xc,0x5,0x3e,0x49,0x1c,0xd3,0xee,0x76,0x49,0x8c, + 0x21,0x89,0x13,0x3a,0xed,0x16,0x8e,0xeb,0xee,0x1f,0x5b,0xbd,0xe6,0xe7,0xab,0x56, + 0x8d,0x1d,0x58,0x33,0x3e,0xfe,0xbd,0xab,0xae,0x7c,0xc3,0x3,0x9c,0xe3,0x76,0xce, + 0x7e,0x2f,0x56,0xab,0xd5,0xc4,0xf3,0x2f,0xec,0xab,0x14,0xa,0x85,0xd,0xcd,0x66, + 0x73,0x47,0xbd,0x5e,0x7f,0x4d,0xbb,0xdd,0xb9,0x22,0x8e,0xe3,0xb,0xb5,0xd6,0xe5, + 0xde,0xa6,0xa9,0x6c,0x67,0x46,0x14,0x26,0x49,0xad,0x1b,0x46,0x35,0x29,0xec,0xb4, + 0xe7,0xb8,0xd3,0x4a,0xca,0x43,0x9e,0xe7,0x1d,0xf2,0x7c,0xff,0x88,0x54,0xea,0xb0, + 0xa3,0xe4,0xf4,0x9e,0x27,0x9f,0x9e,0xab,0x8c,0x8c,0xb4,0xcf,0x3b,0x6f,0x6b,0xf4, + 0xeb,0x57,0xbe,0xa1,0xc9,0x2f,0xa1,0x9d,0xf3,0x9f,0x64,0xb6,0x5a,0x2d,0xd1,0x6a, + 0xb5,0x2a,0x53,0x53,0xd3,0x17,0xcd,0xcd,0xcd,0xbf,0xa1,0xd5,0x6a,0xed,0x8,0xa3, + 0x68,0x83,0xd6,0x7a,0xe8,0xdd,0xbf,0xf5,0xce,0xcb,0x0,0x3e,0xf5,0xa9,0x4f,0x7f, + 0x73,0xc3,0x86,0xd,0x7,0x13,0xad,0x67,0x84,0xe0,0x88,0xe7,0x79,0x47,0x82,0x20, + 0x38,0x54,0x2e,0x95,0x26,0xb,0x85,0xc2,0x9c,0x1f,0xf8,0xed,0x62,0xa1,0x90,0x8c, + 0x8d,0x8d,0xfd,0xd2,0x7f,0xc2,0x29,0x7e,0x19,0x3f,0xea,0x5d,0xa6,0xd,0x1,0xff, + 0x0,0x7c,0x16,0xb8,0xf7,0x2c,0x9e,0xb3,0x25,0x3b,0xf6,0x0,0xb5,0xff,0x2b,0xbd, + 0xd8,0x99,0x6a,0x21,0xb0,0x13,0xb8,0x67,0xe0,0xda,0x4e,0xe0,0x8d,0x27,0xe8,0xf3, + 0x1d,0x60,0xf7,0xa2,0x6b,0xdb,0x33,0xa0,0x87,0x17,0x81,0x76,0xe3,0x12,0xfd,0x3f, + 0xb,0x1c,0x38,0x17,0x0,0xd,0x65,0x3,0x59,0xae,0xd,0xae,0xde,0x10,0x70,0x1b, + 0x70,0x77,0x76,0x7e,0x53,0x36,0xa8,0xdd,0x27,0x0,0xaa,0x9f,0x7a,0x2,0x76,0x2d, + 0xf3,0xdd,0xde,0xfb,0x77,0x2f,0xd3,0xbf,0xb6,0x8,0xa0,0x5d,0x3,0xe3,0xea,0x8d, + 0xff,0x3b,0xe7,0xa,0xa0,0xed,0xc0,0xa3,0x27,0xb8,0x7f,0xd5,0xc0,0xc0,0xb7,0x67, + 0xa0,0xf4,0x0,0xba,0x71,0x91,0x94,0x9c,0x4a,0xbb,0x6a,0x89,0x6b,0x8f,0x9e,0x81, + 0x94,0xde,0x91,0x8d,0x6b,0xe7,0x19,0xf6,0x3f,0x65,0x80,0x76,0x2f,0x53,0xa6,0xbc, + 0x2b,0x3,0x63,0xcf,0xa2,0xd5,0x3b,0xb0,0x8,0xdc,0xda,0x9,0x26,0xfa,0x89,0x81, + 0xfb,0xbb,0x4f,0x63,0xec,0xfb,0xb3,0xf7,0xc,0x2d,0x7a,0xee,0x3f,0x2e,0x1a,0xcf, + 0xaf,0xcc,0x6,0x6d,0x1,0x6e,0xcf,0x56,0xa9,0x96,0x1,0x31,0x34,0x60,0x43,0x76, + 0xe,0xa8,0xdc,0x20,0x70,0xbb,0x17,0xdd,0xdf,0xb3,0x84,0xd8,0xef,0x5c,0x46,0xcd, + 0x7,0xdb,0xdd,0x59,0xbf,0xbb,0x6,0xce,0xc9,0xae,0x6d,0x59,0x31,0x4b,0x39,0xb8, + 0x9d,0xf7,0x34,0x8f,0xcf,0x58,0x6b,0x9f,0x18,0x38,0x7f,0xd4,0x9e,0xb8,0xdd,0xb5, + 0xa8,0xff,0x27,0xb2,0xeb,0x3b,0x7,0xae,0xdd,0x95,0x5d,0x7b,0x74,0x89,0x63,0x7e, + 0x89,0x67,0x60,0xad,0xdd,0x9f,0xf5,0x19,0xbc,0xb6,0x73,0xd1,0xb3,0x77,0x2e,0xf1, + 0xae,0x53,0x3a,0x9c,0xb3,0x90,0x9e,0x9b,0x80,0x9b,0x17,0xe9,0xfb,0x50,0xa6,0x32, + 0xf,0x65,0x6,0x71,0x7b,0x66,0x83,0xee,0x58,0x42,0x4a,0xae,0x1f,0x50,0xc1,0x2d, + 0x8b,0x5c,0xfd,0xa9,0xda,0xa0,0xed,0x3,0xd2,0xb2,0x33,0x93,0xe4,0x15,0x53,0xaf, + 0xb3,0x51,0xb1,0xdb,0xb2,0x9,0xdf,0xbb,0xc8,0x93,0xf5,0x54,0xa1,0xe7,0x8e,0xdf, + 0x98,0xd,0x7a,0xf7,0x9,0x26,0xf6,0xc6,0xc,0xac,0x33,0x99,0xd8,0x8d,0x8b,0xec, + 0xe1,0xd0,0x22,0x70,0x77,0x9f,0x2d,0x40,0x67,0x9a,0xf,0xba,0xe9,0x4,0x9e,0x69, + 0xcb,0x22,0xb0,0x76,0x2f,0x3,0x70,0xef,0xfa,0x3d,0x19,0xd0,0x8f,0xe,0xd8,0x99, + 0x9d,0x4b,0x1c,0x43,0x4b,0xd8,0xa4,0x9b,0x6,0x16,0xe9,0xe6,0xec,0xdd,0xb7,0xfd, + 0xaa,0x25,0xe8,0xa6,0x6c,0x70,0xf7,0x2e,0xa1,0x2,0x3d,0xe3,0xba,0xf8,0x3f,0x2c, + 0xd9,0x95,0x1d,0x77,0xf,0xd0,0x80,0x9b,0x7,0xbe,0xbf,0x58,0x5,0xef,0x5a,0x6, + 0xf8,0xc5,0x20,0xf7,0xbc,0x56,0x8f,0x6b,0xdd,0x9c,0x1,0x7f,0xfd,0xaf,0x12,0xa0, + 0xeb,0x32,0x1b,0x53,0x5b,0x86,0xa5,0xee,0x1c,0x0,0xef,0xa6,0x6c,0xc0,0x7,0x32, + 0xb5,0x3,0xf8,0xcc,0x80,0x7a,0x7e,0x66,0x80,0xe4,0xdd,0x3d,0x0,0xcc,0xc9,0x6c, + 0xd0,0xf6,0x1,0xd0,0x7,0xc7,0xf1,0x50,0xf6,0x77,0xf3,0x4a,0xa8,0xd7,0x99,0x0, + 0x34,0x94,0xad,0xce,0x1d,0x4b,0xdc,0xbb,0x77,0x60,0xa5,0xef,0x1e,0x90,0x9c,0xcf, + 0x2e,0x1a,0xec,0x9e,0xec,0xda,0xd9,0xb4,0x3d,0xd9,0xfb,0xee,0x59,0x86,0xe1,0x5f, + 0xbf,0x52,0x0,0x9d,0xae,0xd,0xda,0x79,0x12,0xe3,0xb7,0x79,0x9,0x6f,0xb5,0xf8, + 0xbb,0x37,0xaf,0xd0,0xe0,0x6f,0x5e,0x26,0x38,0xdd,0x39,0x10,0x56,0x2c,0xd7,0xee, + 0x5a,0xc2,0xa6,0xad,0x8,0x40,0xb5,0x81,0x18,0xe7,0x44,0x1,0x65,0x4f,0xd,0xce, + 0x14,0x8,0xbb,0xc4,0xb1,0xf3,0x14,0x25,0xfc,0x13,0xd9,0x22,0x3d,0xb4,0xcc,0xfd, + 0x9d,0xd9,0x1c,0xb6,0x9f,0xb,0x15,0xdb,0x7d,0x92,0x49,0xdf,0xbd,0x48,0xd,0xae, + 0x3a,0x45,0x4e,0x75,0x2a,0xb1,0xd8,0x27,0x4e,0x10,0x27,0xe,0x7e,0x67,0xfb,0x12, + 0xfd,0x77,0x67,0x8b,0xfb,0xf,0x3,0xb,0xbd,0xfb,0x5c,0x0,0xb4,0xd2,0xf9,0xa0, + 0xc5,0x83,0x7c,0xf1,0x4,0x8b,0x70,0xcf,0x32,0x91,0xf8,0x9e,0x4c,0x22,0x86,0x32, + 0xb5,0xfb,0xec,0x32,0xfd,0x77,0xc,0x2c,0xc6,0x29,0x47,0xf4,0xbf,0xca,0x84,0xd9, + 0xff,0x13,0x4d,0xfe,0x7f,0x8,0x4e,0xdc,0xfe,0xcf,0x0,0x14,0xf4,0x98,0x18,0x55, + 0x55,0x63,0xfe,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/cam6.png + 0x0,0x0,0x23,0xa, + 0x89, + 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, + 0x0,0x0,0x48,0x0,0x0,0x0,0x48,0x8,0x6,0x0,0x0,0x0,0x55,0xed,0xb3,0x47, + 0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8e,0x7c,0xfb,0x51,0x93, + 0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x87,0xf,0x0,0x0,0x8c,0xf, + 0x0,0x0,0xfd,0x52,0x0,0x0,0x81,0x40,0x0,0x0,0x7d,0x79,0x0,0x0,0xe9,0x8b, + 0x0,0x0,0x3c,0xe5,0x0,0x0,0x19,0xcc,0x73,0x3c,0x85,0x77,0x0,0x0,0xa,0x39, + 0x69,0x43,0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x49,0x43, + 0x43,0x20,0x70,0x72,0x6f,0x66,0x69,0x6c,0x65,0x0,0x0,0x48,0xc7,0x9d,0x96,0x77, + 0x54,0x54,0xd7,0x16,0x87,0xcf,0xbd,0x77,0x7a,0xa1,0xcd,0x30,0xd2,0x19,0x7a,0x93, + 0x2e,0x30,0x80,0xf4,0x2e,0x20,0x1d,0x4,0x51,0x18,0x66,0x6,0x18,0xca,0x0,0xc3, + 0xc,0x4d,0x6c,0x88,0xa8,0x40,0x44,0x11,0x11,0x1,0x45,0x90,0xa0,0x80,0x1,0xa3, + 0xa1,0x48,0xac,0x88,0x62,0x21,0x28,0xa8,0x60,0xf,0x48,0x10,0x50,0x62,0x30,0x8a, + 0xa8,0xa8,0x64,0x46,0xd6,0x4a,0x7c,0x79,0x79,0xef,0xe5,0xe5,0xf7,0xc7,0xbd,0xdf, + 0xda,0x67,0xef,0x73,0xf7,0xd9,0x7b,0x9f,0xb5,0x2e,0x0,0x24,0x4f,0x1f,0x2e,0x2f, + 0x5,0x96,0x2,0x20,0x99,0x27,0xe0,0x7,0x7a,0x38,0xd3,0x57,0x85,0x47,0xd0,0xb1, + 0xfd,0x0,0x6,0x78,0x80,0x1,0xa6,0x0,0x30,0x59,0xe9,0xa9,0xbe,0x41,0xee,0xc1, + 0x40,0x24,0x2f,0x37,0x17,0x7a,0xba,0xc8,0x9,0xfc,0x8b,0xde,0xc,0x1,0x48,0xfc, + 0xbe,0x65,0xe8,0xe9,0x4f,0xa7,0x83,0xff,0x4f,0xd2,0xac,0x54,0xbe,0x0,0x0,0xc8, + 0x5f,0xc4,0xe6,0x6c,0x4e,0x3a,0x4b,0xc4,0xf9,0x22,0x4e,0xca,0x14,0xa4,0x8a,0xed, + 0x33,0x22,0xa6,0xc6,0x24,0x8a,0x19,0x46,0x89,0x99,0x2f,0x4a,0x50,0xc4,0x72,0x62, + 0x8e,0x5b,0xe4,0xa5,0x9f,0x7d,0x16,0xd9,0x51,0xcc,0xec,0x64,0x1e,0x5b,0xc4,0xe2, + 0x9c,0x53,0xd9,0xc9,0x6c,0x31,0xf7,0x88,0x78,0x7b,0x86,0x90,0x23,0x62,0xc4,0x47, + 0xc4,0x5,0x19,0x5c,0x4e,0xa6,0x88,0x6f,0x8b,0x58,0x33,0x49,0x98,0xcc,0x15,0xf1, + 0x5b,0x71,0x6c,0x32,0x87,0x99,0xe,0x0,0x8a,0x24,0xb6,0xb,0x38,0xac,0x78,0x11, + 0x9b,0x88,0x98,0xc4,0xf,0xe,0x74,0x11,0xf1,0x72,0x0,0x70,0xa4,0xb8,0x2f,0x38, + 0xe6,0xb,0x16,0x70,0xb2,0x4,0xe2,0x43,0xb9,0xa4,0xa4,0x66,0xf3,0xb9,0x71,0xf1, + 0x2,0xba,0x2e,0x4b,0x8f,0x6e,0x6a,0x6d,0xcd,0xa0,0x7b,0x72,0x32,0x93,0x38,0x2, + 0x81,0xa1,0x3f,0x93,0x95,0xc8,0xe4,0xb3,0xe9,0x2e,0x29,0xc9,0xa9,0x4c,0x5e,0x36, + 0x0,0x8b,0x67,0xfe,0x2c,0x19,0x71,0x6d,0xe9,0xa2,0x22,0x5b,0x9a,0x5a,0x5b,0x5a, + 0x1a,0x9a,0x19,0x99,0x7e,0x51,0xa8,0xff,0xba,0xf8,0x37,0x25,0xee,0xed,0x22,0xbd, + 0xa,0xf8,0xdc,0x33,0x88,0xd6,0xf7,0x87,0xed,0xaf,0xfc,0x52,0xea,0x0,0x60,0xcc, + 0x8a,0x6a,0xb3,0xeb,0xf,0x5b,0xcc,0x7e,0x0,0x3a,0xb6,0x2,0x20,0x77,0xff,0xf, + 0x9b,0xe6,0x21,0x0,0x24,0x45,0x7d,0x6b,0xbf,0xf1,0xc5,0x79,0x68,0xe2,0x79,0x89, + 0x17,0x8,0x52,0x6d,0x8c,0x8d,0x33,0x33,0x33,0x8d,0xb8,0x1c,0x96,0x91,0xb8,0xa0, + 0xbf,0xeb,0x7f,0x3a,0xfc,0xd,0x7d,0xf1,0x3d,0x23,0xf1,0x76,0xbf,0x97,0x87,0xee, + 0xca,0x89,0x65,0xa,0x93,0x4,0x74,0x71,0xdd,0x58,0x29,0x49,0x29,0x42,0x3e,0x3d, + 0x3d,0x95,0xc9,0xe2,0xd0,0xd,0xff,0x3c,0xc4,0xff,0x38,0xf0,0xaf,0xf3,0x58,0x1a, + 0xc8,0x89,0xe5,0xf0,0x39,0x3c,0x51,0x44,0xa8,0x68,0xca,0xb8,0xbc,0x38,0x51,0xbb, + 0x79,0x6c,0xae,0x80,0x9b,0xc2,0xa3,0x73,0x79,0xff,0xa9,0x89,0xff,0x30,0xec,0x4f, + 0x5a,0x9c,0x6b,0x91,0x28,0xf5,0x9f,0x0,0x35,0xca,0x8,0x48,0xdd,0xa0,0x2,0xe4, + 0xe7,0x3e,0x80,0xa2,0x10,0x1,0x12,0x79,0x50,0xdc,0xf5,0xdf,0xfb,0xe6,0x83,0xf, + 0x5,0xe2,0x9b,0x17,0xa6,0x3a,0xb1,0x38,0xf7,0x9f,0x5,0xfd,0xfb,0xae,0x70,0x89, + 0xf8,0x91,0xce,0x8d,0xfb,0x1c,0xe7,0x12,0x18,0x4c,0x67,0x9,0xf9,0x19,0x8b,0x6b, + 0xe2,0x6b,0x9,0xd0,0x80,0x0,0x24,0x1,0x15,0xc8,0x3,0x15,0xa0,0x1,0x74,0x81, + 0x21,0x30,0x3,0x56,0xc0,0x16,0x38,0x2,0x37,0xb0,0x2,0xf8,0x81,0x60,0x10,0xe, + 0xd6,0x2,0x16,0x88,0x7,0xc9,0x80,0xf,0x32,0x41,0x2e,0xd8,0xc,0xa,0x40,0x11, + 0xd8,0x5,0xf6,0x82,0x4a,0x50,0x3,0xea,0x41,0x23,0x68,0x1,0x27,0x40,0x7,0x38, + 0xd,0x2e,0x80,0xcb,0xe0,0x3a,0xb8,0x9,0xee,0x80,0x7,0x60,0x4,0x8c,0x83,0xe7, + 0x60,0x6,0xbc,0x1,0xf3,0x10,0x4,0x61,0x21,0x32,0x44,0x81,0xe4,0x21,0x55,0x48, + 0xb,0x32,0x80,0xcc,0x20,0x6,0x64,0xf,0xb9,0x41,0x3e,0x50,0x20,0x14,0xe,0x45, + 0x43,0x71,0x10,0xf,0x12,0x42,0xb9,0xd0,0x16,0xa8,0x8,0x2a,0x85,0x2a,0xa1,0x5a, + 0xa8,0x11,0xfa,0x16,0x3a,0x5,0x5d,0x80,0xae,0x42,0x3,0xd0,0x3d,0x68,0x14,0x9a, + 0x82,0x7e,0x85,0xde,0xc3,0x8,0x4c,0x82,0xa9,0xb0,0x32,0xac,0xd,0x1b,0xc3,0xc, + 0xd8,0x9,0xf6,0x86,0x83,0xe1,0x35,0x70,0x1c,0x9c,0x6,0xe7,0xc0,0xf9,0xf0,0x4e, + 0xb8,0x2,0xae,0x83,0x8f,0xc1,0xed,0xf0,0x5,0xf8,0x3a,0x7c,0x7,0x1e,0x81,0x9f, + 0xc3,0xb3,0x8,0x40,0x88,0x8,0xd,0x51,0x43,0xc,0x11,0x6,0xe2,0x82,0xf8,0x21, + 0x11,0x48,0x2c,0xc2,0x47,0x36,0x20,0x85,0x48,0x39,0x52,0x87,0xb4,0x20,0x5d,0x48, + 0x2f,0x72,0xb,0x19,0x41,0xa6,0x91,0x77,0x28,0xc,0x8a,0x82,0xa2,0xa3,0xc,0x51, + 0xb6,0x28,0x4f,0x54,0x8,0x8a,0x85,0x4a,0x43,0x6d,0x40,0x15,0xa3,0x2a,0x51,0x47, + 0x51,0xed,0xa8,0x1e,0xd4,0x2d,0xd4,0x28,0x6a,0x6,0xf5,0x9,0x4d,0x46,0x2b,0xa1, + 0xd,0xd0,0x36,0x68,0x2f,0xf4,0x2a,0x74,0x1c,0x3a,0x13,0x5d,0x80,0x2e,0x47,0x37, + 0xa0,0xdb,0xd0,0x97,0xd0,0x77,0xd0,0xe3,0xe8,0x37,0x18,0xc,0x86,0x86,0xd1,0xc1, + 0x58,0x61,0x3c,0x31,0xe1,0x98,0x4,0xcc,0x3a,0x4c,0x31,0xe6,0x0,0xa6,0x15,0x73, + 0x1e,0x33,0x80,0x19,0xc3,0xcc,0x62,0xb1,0x58,0x79,0xac,0x1,0xd6,0xe,0xeb,0x87, + 0x65,0x62,0x5,0xd8,0x2,0xec,0x7e,0xec,0x31,0xec,0x39,0xec,0x20,0x76,0x1c,0xfb, + 0x16,0x47,0xc4,0xa9,0xe2,0xcc,0x70,0xee,0xb8,0x8,0x1c,0xf,0x97,0x87,0x2b,0xc7, + 0x35,0xe1,0xce,0xe2,0x6,0x71,0x13,0xb8,0x79,0xbc,0x14,0x5e,0xb,0x6f,0x83,0xf7, + 0xc3,0xb3,0xf1,0xd9,0xf8,0x12,0x7c,0x3d,0xbe,0xb,0x7f,0x3,0x3f,0x8e,0x9f,0x27, + 0x48,0x13,0x74,0x8,0x76,0x84,0x60,0x42,0x2,0x61,0x33,0xa1,0x82,0xd0,0x42,0xb8, + 0x44,0x78,0x48,0x78,0x45,0x24,0x12,0xd5,0x89,0xd6,0xc4,0x0,0x22,0x97,0xb8,0x89, + 0x58,0x41,0x3c,0x4e,0xbc,0x42,0x1c,0x25,0xbe,0x23,0xc9,0x90,0xf4,0x49,0x2e,0xa4, + 0x48,0x92,0x90,0xb4,0x93,0x74,0x84,0x74,0x9e,0x74,0x8f,0xf4,0x8a,0x4c,0x26,0x6b, + 0x93,0x1d,0xc9,0x11,0x64,0x1,0x79,0x27,0xb9,0x91,0x7c,0x91,0xfc,0x98,0xfc,0x56, + 0x82,0x22,0x61,0x24,0xe1,0x25,0xc1,0x96,0xd8,0x28,0x51,0x25,0xd1,0x2e,0x31,0x28, + 0xf1,0x42,0x12,0x2f,0xa9,0x25,0xe9,0x24,0xb9,0x56,0x32,0x47,0xb2,0x5c,0xf2,0xa4, + 0xe4,0xd,0xc9,0x69,0x29,0xbc,0x94,0xb6,0x94,0x8b,0x14,0x53,0x6a,0x83,0x54,0x95, + 0xd4,0x29,0xa9,0x61,0xa9,0x59,0x69,0x8a,0xb4,0xa9,0xb4,0x9f,0x74,0xb2,0x74,0xb1, + 0x74,0x93,0xf4,0x55,0xe9,0x49,0x19,0xac,0x8c,0xb6,0x8c,0x9b,0xc,0x5b,0x26,0x5f, + 0xe6,0xb0,0xcc,0x45,0x99,0x31,0xa,0x42,0xd1,0xa0,0xb8,0x50,0x58,0x94,0x2d,0x94, + 0x7a,0xca,0x25,0xca,0x38,0x15,0x43,0xd5,0xa1,0x7a,0x51,0x13,0xa8,0x45,0xd4,0x6f, + 0xa8,0xfd,0xd4,0x19,0x59,0x19,0xd9,0x65,0xb2,0xa1,0xb2,0x59,0xb2,0x55,0xb2,0x67, + 0x64,0x47,0x68,0x8,0x4d,0x9b,0xe6,0x45,0x4b,0xa2,0x95,0xd0,0x4e,0xd0,0x86,0x68, + 0xef,0x97,0x28,0x2f,0x71,0x5a,0xc2,0x59,0xb2,0x63,0x49,0xcb,0x92,0xc1,0x25,0x73, + 0x72,0x8a,0x72,0x8e,0x72,0x1c,0xb9,0x42,0xb9,0x56,0xb9,0x3b,0x72,0xef,0xe5,0xe9, + 0xf2,0x6e,0xf2,0x89,0xf2,0xbb,0xe5,0x3b,0xe4,0x1f,0x29,0xa0,0x14,0xf4,0x15,0x2, + 0x14,0x32,0x15,0xe,0x2a,0x5c,0x52,0x98,0x56,0xa4,0x2a,0xda,0x2a,0xb2,0x14,0xb, + 0x15,0x4f,0x28,0xde,0x57,0x82,0x95,0xf4,0x95,0x2,0x95,0xd6,0x29,0x1d,0x56,0xea, + 0x53,0x9a,0x55,0x56,0x51,0xf6,0x50,0x4e,0x55,0xde,0xaf,0x7c,0x51,0x79,0x5a,0x85, + 0xa6,0xe2,0xa8,0x92,0xa0,0x52,0xa6,0x72,0x56,0x65,0x4a,0x95,0xa2,0x6a,0xaf,0xca, + 0x55,0x2d,0x53,0x3d,0xa7,0xfa,0x8c,0x2e,0x4b,0x77,0xa2,0x27,0xd1,0x2b,0xe8,0x3d, + 0xf4,0x19,0x35,0x25,0x35,0x4f,0x35,0xa1,0x5a,0xad,0x5a,0xbf,0xda,0xbc,0xba,0x8e, + 0x7a,0x88,0x7a,0x9e,0x7a,0xab,0xfa,0x23,0xd,0x82,0x6,0x43,0x23,0x56,0xa3,0x4c, + 0xa3,0x5b,0x63,0x46,0x53,0x55,0xd3,0x57,0x33,0x57,0xb3,0x59,0xf3,0xbe,0x16,0x5e, + 0x8b,0xa1,0x15,0xaf,0xb5,0x4f,0xab,0x57,0x6b,0x4e,0x5b,0x47,0x3b,0x4c,0x7b,0x9b, + 0x76,0x87,0xf6,0xa4,0x8e,0x9c,0x8e,0x97,0x4e,0x8e,0x4e,0xb3,0xce,0x43,0x5d,0xb2, + 0xae,0x83,0x6e,0x9a,0x6e,0x9d,0xee,0x6d,0x3d,0x8c,0x1e,0x43,0x2f,0x51,0xef,0x80, + 0xde,0x4d,0x7d,0x58,0xdf,0x42,0x3f,0x5e,0xbf,0x4a,0xff,0x86,0x1,0x6c,0x60,0x69, + 0xc0,0x35,0x38,0x60,0x30,0xb0,0x14,0xbd,0xd4,0x7a,0x29,0x6f,0x69,0xdd,0xd2,0x61, + 0x43,0x92,0xa1,0x93,0x61,0x86,0x61,0xb3,0xe1,0xa8,0x11,0xcd,0xc8,0xc7,0x28,0xcf, + 0xa8,0xc3,0xe8,0x85,0xb1,0xa6,0x71,0x84,0xf1,0x6e,0xe3,0x5e,0xe3,0x4f,0x26,0x16, + 0x26,0x49,0x26,0xf5,0x26,0xf,0x4c,0x65,0x4c,0x57,0x98,0xe6,0x99,0x76,0x99,0xfe, + 0x6a,0xa6,0x6f,0xc6,0x32,0xab,0x32,0xbb,0x6d,0x4e,0x36,0x77,0x37,0xdf,0x68,0xde, + 0x69,0xfe,0x72,0x99,0xc1,0x32,0xce,0xb2,0x83,0xcb,0xee,0x5a,0x50,0x2c,0x7c,0x2d, + 0xb6,0x59,0x74,0x5b,0x7c,0xb4,0xb4,0xb2,0xe4,0x5b,0xb6,0x58,0x4e,0x59,0x69,0x5a, + 0x45,0x5b,0x55,0x5b,0xd,0x33,0xa8,0xc,0x7f,0x46,0x31,0xe3,0x8a,0x35,0xda,0xda, + 0xd9,0x7a,0xa3,0xf5,0x69,0xeb,0x77,0x36,0x96,0x36,0x2,0x9b,0x13,0x36,0xbf,0xd8, + 0x1a,0xda,0x26,0xda,0x36,0xd9,0x4e,0x2e,0xd7,0x59,0xce,0x59,0x5e,0xbf,0x7c,0xcc, + 0x4e,0xdd,0x8e,0x69,0x57,0x6b,0x37,0x62,0x4f,0xb7,0x8f,0xb6,0x3f,0x64,0x3f,0xe2, + 0xa0,0xe6,0xc0,0x74,0xa8,0x73,0x78,0xe2,0xa8,0xe1,0xc8,0x76,0x6c,0x70,0x9c,0x70, + 0xd2,0x73,0x4a,0x70,0x3a,0xe6,0xf4,0xc2,0xd9,0xc4,0x99,0xef,0xdc,0xe6,0x3c,0xe7, + 0x62,0xe3,0xb2,0xde,0xe5,0xbc,0x2b,0xe2,0xea,0xe1,0x5a,0xe8,0xda,0xef,0x26,0xe3, + 0x16,0xe2,0x56,0xe9,0xf6,0xd8,0x5d,0xdd,0x3d,0xce,0xbd,0xd9,0x7d,0xc6,0xc3,0xc2, + 0x63,0x9d,0xc7,0x79,0x4f,0xb4,0xa7,0xb7,0xe7,0x6e,0xcf,0x61,0x2f,0x65,0x2f,0x96, + 0x57,0xa3,0xd7,0xcc,0xa,0xab,0x15,0xeb,0x57,0xf4,0x78,0x93,0xbc,0x83,0xbc,0x2b, + 0xbd,0x9f,0xf8,0xe8,0xfb,0xf0,0x7d,0xba,0x7c,0x61,0xdf,0x15,0xbe,0x7b,0x7c,0x1f, + 0xae,0xd4,0x5a,0xc9,0x5b,0xd9,0xe1,0x7,0xfc,0xbc,0xfc,0xf6,0xf8,0x3d,0xf2,0xd7, + 0xf1,0x4f,0xf3,0xff,0x3e,0x0,0x13,0xe0,0x1f,0x50,0x15,0xf0,0x34,0xd0,0x34,0x30, + 0x37,0xb0,0x37,0x88,0x12,0x14,0x15,0xd4,0x14,0xf4,0x26,0xd8,0x39,0xb8,0x24,0xf8, + 0x41,0x88,0x6e,0x88,0x30,0xa4,0x3b,0x54,0x32,0x34,0x32,0xb4,0x31,0x74,0x2e,0xcc, + 0x35,0xac,0x34,0x6c,0x64,0x95,0xf1,0xaa,0xf5,0xab,0xae,0x87,0x2b,0x84,0x73,0xc3, + 0x3b,0x23,0xb0,0x11,0xa1,0x11,0xd,0x11,0xb3,0xab,0xdd,0x56,0xef,0x5d,0x3d,0x1e, + 0x69,0x11,0x59,0x10,0x39,0xb4,0x46,0x67,0x4d,0xd6,0x9a,0xab,0x6b,0x15,0xd6,0x26, + 0xad,0x3d,0x13,0x25,0x19,0xc5,0x8c,0x3a,0x19,0x8d,0x8e,0xe,0x8b,0x6e,0x8a,0xfe, + 0xc0,0xf4,0x63,0xd6,0x31,0x67,0x63,0xbc,0x62,0xaa,0x63,0x66,0x58,0x2e,0xac,0x7d, + 0xac,0xe7,0x6c,0x47,0x76,0x19,0x7b,0x8a,0x63,0xc7,0x29,0xe5,0x4c,0xc4,0xda,0xc5, + 0x96,0xc6,0x4e,0xc6,0xd9,0xc5,0xed,0x89,0x9b,0x8a,0x77,0x88,0x2f,0x8f,0x9f,0xe6, + 0xba,0x70,0x2b,0xb9,0x2f,0x13,0x3c,0x13,0x6a,0x12,0xe6,0x12,0xfd,0x12,0x8f,0x24, + 0x2e,0x24,0x85,0x25,0xb5,0x26,0xe3,0x92,0xa3,0x93,0x4f,0xf1,0x64,0x78,0x89,0xbc, + 0x9e,0x14,0x95,0x94,0xac,0x94,0x81,0x54,0x83,0xd4,0x82,0xd4,0x91,0x34,0x9b,0xb4, + 0xbd,0x69,0x33,0x7c,0x6f,0x7e,0x43,0x3a,0x94,0xbe,0x26,0xbd,0x53,0x40,0x15,0xfd, + 0x4c,0xf5,0x9,0x75,0x85,0x5b,0x85,0xa3,0x19,0xf6,0x19,0x55,0x19,0x6f,0x33,0x43, + 0x33,0x4f,0x66,0x49,0x67,0xf1,0xb2,0xfa,0xb2,0xf5,0xb3,0x77,0x64,0x4f,0xe4,0xb8, + 0xe7,0x7c,0xbd,0xe,0xb5,0x8e,0xb5,0xae,0x3b,0x57,0x2d,0x77,0x73,0xee,0xe8,0x7a, + 0xa7,0xf5,0xb5,0x1b,0xa0,0xd,0x31,0x1b,0xba,0x37,0x6a,0x6c,0xcc,0xdf,0x38,0xbe, + 0xc9,0x63,0xd3,0xd1,0xcd,0x84,0xcd,0x89,0x9b,0x7f,0xc8,0x33,0xc9,0x2b,0xcd,0x7b, + 0xbd,0x25,0x6c,0x4b,0x57,0xbe,0x72,0xfe,0xa6,0xfc,0xb1,0xad,0x1e,0x5b,0x9b,0xb, + 0x24,0xa,0xf8,0x5,0xc3,0xdb,0x6c,0xb7,0xd5,0x6c,0x47,0x6d,0xe7,0x6e,0xef,0xdf, + 0x61,0xbe,0x63,0xff,0x8e,0x4f,0x85,0xec,0xc2,0x6b,0x45,0x26,0x45,0xe5,0x45,0x1f, + 0x8a,0x59,0xc5,0xd7,0xbe,0x32,0xfd,0xaa,0xe2,0xab,0x85,0x9d,0xb1,0x3b,0xfb,0x4b, + 0x2c,0x4b,0xe,0xee,0xc2,0xec,0xe2,0xed,0x1a,0xda,0xed,0xb0,0xfb,0x68,0xa9,0x74, + 0x69,0x4e,0xe9,0xd8,0x1e,0xdf,0x3d,0xed,0x65,0xf4,0xb2,0xc2,0xb2,0xd7,0x7b,0xa3, + 0xf6,0x5e,0x2d,0x5f,0x56,0x5e,0xb3,0x8f,0xb0,0x4f,0xb8,0x6f,0xa4,0xc2,0xa7,0xa2, + 0x73,0xbf,0xe6,0xfe,0x5d,0xfb,0x3f,0x54,0xc6,0x57,0xde,0xa9,0x72,0xae,0x6a,0xad, + 0x56,0xaa,0xde,0x51,0x3d,0x77,0x80,0x7d,0x60,0xf0,0xa0,0xe3,0xc1,0x96,0x1a,0xe5, + 0x9a,0xa2,0x9a,0xf7,0x87,0xb8,0x87,0xee,0xd6,0x7a,0xd4,0xb6,0xd7,0x69,0xd7,0x95, + 0x1f,0xc6,0x1c,0xce,0x38,0xfc,0xb4,0x3e,0xb4,0xbe,0xf7,0x6b,0xc6,0xd7,0x8d,0xd, + 0xa,0xd,0x45,0xd,0x1f,0x8f,0xf0,0x8e,0x8c,0x1c,0xd,0x3c,0xda,0xd3,0x68,0xd5, + 0xd8,0xd8,0xa4,0xd4,0x54,0xd2,0xc,0x37,0xb,0x9b,0xa7,0x8e,0x45,0x1e,0xbb,0xf9, + 0x8d,0xeb,0x37,0x9d,0x2d,0x86,0x2d,0xb5,0xad,0xb4,0xd6,0xa2,0xe3,0xe0,0xb8,0xf0, + 0xf8,0xb3,0x6f,0xa3,0xbf,0x1d,0x3a,0xe1,0x7d,0xa2,0xfb,0x24,0xe3,0x64,0xcb,0x77, + 0x5a,0xdf,0x55,0xb7,0x51,0xda,0xa,0xdb,0xa1,0xf6,0xec,0xf6,0x99,0x8e,0xf8,0x8e, + 0x91,0xce,0xf0,0xce,0x81,0x53,0x2b,0x4e,0x75,0x77,0xd9,0x76,0xb5,0x7d,0x6f,0xf4, + 0xfd,0x91,0xd3,0x6a,0xa7,0xab,0xce,0xc8,0x9e,0x29,0x39,0x4b,0x38,0x9b,0x7f,0x76, + 0xe1,0x5c,0xce,0xb9,0xd9,0xf3,0xa9,0xe7,0xa7,0x2f,0xc4,0x5d,0x18,0xeb,0x8e,0xea, + 0x7e,0x70,0x71,0xd5,0xc5,0xdb,0x3d,0x1,0x3d,0xfd,0x97,0xbc,0x2f,0x5d,0xb9,0xec, + 0x7e,0xf9,0x62,0xaf,0x53,0xef,0xb9,0x2b,0x76,0x57,0x4e,0x5f,0xb5,0xb9,0x7a,0xea, + 0x1a,0xe3,0x5a,0xc7,0x75,0xcb,0xeb,0xed,0x7d,0x16,0x7d,0x6d,0x3f,0x58,0xfc,0xd0, + 0xd6,0x6f,0xd9,0xdf,0x7e,0xc3,0xea,0x46,0xe7,0x4d,0xeb,0x9b,0x5d,0x3,0xcb,0x7, + 0xce,0xe,0x3a,0xc,0x5e,0xb8,0xe5,0x7a,0xeb,0xf2,0x6d,0xaf,0xdb,0xd7,0xef,0xac, + 0xbc,0x33,0x30,0x14,0x32,0x74,0x77,0x38,0x72,0x78,0xe4,0x2e,0xfb,0xee,0xe4,0xbd, + 0xa4,0x7b,0x2f,0xef,0x67,0xdc,0x9f,0x7f,0xb0,0xe9,0x21,0xfa,0x61,0xe1,0x23,0xa9, + 0x47,0xe5,0x8f,0x95,0x1e,0xd7,0xfd,0xa8,0xf7,0x63,0xeb,0x88,0xe5,0xc8,0x99,0x51, + 0xd7,0xd1,0xbe,0x27,0x41,0x4f,0x1e,0x8c,0xb1,0xc6,0x9e,0xff,0x94,0xfe,0xd3,0x87, + 0xf1,0xfc,0xa7,0xe4,0xa7,0xe5,0x13,0xaa,0x13,0x8d,0x93,0x66,0x93,0xa7,0xa7,0xdc, + 0xa7,0x6e,0x3e,0x5b,0xfd,0x6c,0xfc,0x79,0xea,0xf3,0xf9,0xe9,0x82,0x9f,0xa5,0x7f, + 0xae,0x7e,0xa1,0xfb,0xe2,0xbb,0x5f,0x1c,0x7f,0xe9,0x9b,0x59,0x35,0x33,0xfe,0x92, + 0xff,0x72,0xe1,0xd7,0xe2,0x57,0xf2,0xaf,0x8e,0xbc,0x5e,0xf6,0xba,0x7b,0xd6,0x7f, + 0xf6,0xf1,0x9b,0xe4,0x37,0xf3,0x73,0x85,0x6f,0xe5,0xdf,0x1e,0x7d,0xc7,0x78,0xd7, + 0xfb,0x3e,0xec,0xfd,0xc4,0x7c,0xe6,0x7,0xec,0x87,0x8a,0x8f,0x7a,0x1f,0xbb,0x3e, + 0x79,0x7f,0x7a,0xb8,0x90,0xbc,0xb0,0xf0,0x1b,0xf7,0x84,0xf3,0xfb,0xe2,0xe6,0x1d, + 0xc2,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0x12,0x74,0x0,0x0,0x12, + 0x74,0x1,0xde,0x66,0x1f,0x78,0x0,0x0,0x18,0x3b,0x49,0x44,0x41,0x54,0x78,0x5e, + 0xd5,0x9b,0x49,0x74,0x5c,0x57,0x99,0xc7,0x3f,0xa9,0x24,0x95,0x2c,0x6b,0x96,0x2c, + 0x5b,0x9e,0x62,0x3b,0x8e,0x1d,0xc8,0x48,0x12,0x1b,0x90,0xf,0x10,0x48,0x3b,0x69, + 0x87,0x3,0x1d,0x9a,0x74,0xfa,0x74,0x6f,0x58,0x61,0xb3,0x83,0xd,0x1c,0x38,0xa7, + 0x17,0xbd,0xe3,0xc0,0xca,0xd9,0x41,0xd8,0x34,0xbd,0x83,0x24,0xd,0x21,0x7,0x87, + 0x34,0x9,0x74,0x2,0xb8,0xfb,0xc4,0xb1,0x93,0x38,0xc4,0x93,0x3c,0x5b,0xb6,0x35, + 0x58,0xf3,0x2c,0x95,0x54,0xfd,0xff,0x7d,0xf7,0x5d,0xa9,0x5c,0x2e,0x95,0x64,0x47, + 0xee,0xa4,0xff,0xf2,0xad,0x7a,0xef,0xbe,0xf7,0xee,0xf0,0xbf,0xdf,0x78,0x5f,0xb9, + 0x24,0x2b,0xd8,0x6d,0xc6,0xd0,0xe0,0xa0,0x9d,0x39,0x7d,0xda,0x66,0x66,0x67,0x6d, + 0xf3,0x96,0x2d,0xd6,0xd8,0xd8,0x68,0x25,0x25,0x25,0xc9,0xd5,0x8f,0x37,0x6e,0x3b, + 0x41,0x97,0x2e,0x5c,0xb0,0xe3,0x7f,0xfd,0xc0,0x26,0xa6,0xa6,0x2c,0x33,0x6b,0x36, + 0x3e,0x39,0x69,0x77,0x6c,0xda,0x68,0xbb,0x3e,0xfb,0x99,0xff,0x17,0x24,0x95,0x26, + 0xdf,0xcb,0xe,0x78,0x3f,0x7b,0xba,0xdd,0x8e,0x1c,0x3a,0x64,0x83,0x43,0xc3,0x92, + 0x9e,0xac,0xcd,0xaa,0x6e,0x56,0x52,0x74,0xe1,0xfc,0x5,0x3b,0x77,0xee,0xbc,0x4d, + 0x4c,0x4c,0x24,0x77,0x7f,0x7c,0x71,0x5b,0x24,0x68,0x76,0x66,0xc6,0x4e,0x9d,0x3c, + 0x65,0xef,0xbe,0xf3,0xae,0xa5,0x4a,0x53,0x96,0x2a,0xaf,0x30,0x3a,0xc9,0x96,0xe8, + 0x53,0xff,0x20,0xaa,0x2c,0x95,0xb2,0x96,0xd5,0xab,0x6c,0x55,0x73,0xb3,0xd5,0xd6, + 0xd6,0xa8,0xd4,0x5a,0x55,0x55,0xd5,0xc7,0x4e,0xaa,0x96,0x9d,0xa0,0x4c,0x66,0xc6, + 0x4e,0x9c,0x38,0x6e,0x87,0xde,0x3a,0x6c,0x55,0x2b,0xaa,0xac,0xbc,0xa2,0xdc,0xc9, + 0x99,0xcd,0x4a,0xbf,0x1c,0x25,0x12,0xdb,0x12,0xcb,0xcc,0x64,0x6c,0x3a,0x33,0xed, + 0x84,0x55,0x57,0x57,0x5b,0x6b,0xeb,0x1a,0x6b,0x6e,0x6e,0xb2,0x86,0x86,0x7a,0x3d, + 0x53,0x61,0x2b,0x45,0x56,0x69,0xe9,0x6d,0x13,0xf0,0x25,0x63,0x59,0x9,0xca,0x64, + 0x32,0xf6,0xbe,0xec,0xcd,0x91,0xc3,0x47,0x6c,0x85,0xc8,0xa9,0xac,0xac,0x74,0xc3, + 0xec,0x2c,0xcc,0xa1,0x84,0x4e,0x25,0x4d,0xfa,0x96,0xb0,0xcc,0xce,0xcc,0xfa,0x73, + 0x33,0xb3,0x33,0x7e,0xad,0x42,0xe4,0x6c,0x58,0xbf,0xce,0xd6,0xab,0x54,0x56,0xa6, + 0x2d,0xad,0x36,0xaa,0x57,0xae,0xb4,0x94,0x24,0xee,0xa3,0xc0,0xb2,0x11,0x34,0xad, + 0x49,0x1e,0x3e,0x7c,0xd8,0x3e,0xf8,0xe0,0xb8,0xc8,0x59,0x61,0x95,0x69,0x91,0x23, + 0x55,0x73,0xa0,0x35,0x59,0x11,0xe2,0x27,0x90,0xc3,0x77,0x38,0xf7,0xee,0x75,0x80, + 0x6a,0x71,0x8c,0x4,0x42,0xd8,0xac,0x8,0xab,0xaa,0x5a,0x69,0x1b,0x36,0xac,0xb7, + 0xd6,0x35,0x6b,0xac,0xa1,0xb1,0xde,0xef,0x87,0xf4,0xf2,0xf2,0x72,0x1a,0xf8,0x3f, + 0xc1,0xb2,0x10,0x34,0x3d,0x3d,0x6d,0x6f,0xfe,0xe9,0xcf,0x76,0x5e,0x1e,0xab,0xaa, + 0xb2,0xca,0xa5,0x0,0x63,0x5c,0x10,0x81,0xa5,0x79,0xa1,0x8a,0xe7,0xf1,0x80,0xe1, + 0x94,0x22,0x65,0x26,0x82,0x25,0x5d,0x52,0x45,0xd4,0xb3,0x2c,0x55,0x66,0x6b,0x5b, + 0x5b,0x6d,0xd3,0xa6,0xd,0xd6,0xd2,0xd2,0x62,0x65,0x65,0x65,0x4e,0x2a,0x92,0x75, + 0x3b,0xed,0xd6,0x87,0x26,0x68,0x72,0x72,0xca,0xfe,0xf8,0x5f,0x6f,0xd8,0xe5,0xcb, + 0x97,0xa5,0xa,0xd5,0x6e,0x37,0xbc,0xc9,0x9c,0x89,0xfb,0x61,0xfc,0xf0,0xde,0x92, + 0x2e,0x93,0xba,0x78,0xab,0x64,0x2b,0x39,0x9a,0xaf,0x8b,0xf7,0xd0,0xe6,0x8c,0x4b, + 0xd6,0xac,0x95,0xa6,0x4a,0x6d,0x8d,0xa4,0xea,0xce,0x2d,0x9b,0xad,0xa9,0xa9,0x49, + 0x12,0x5b,0xe9,0xd7,0x21,0x6a,0xb9,0xc9,0xfa,0x50,0x4,0x8d,0x8f,0x8d,0xdb,0x6b, + 0x7f,0xf8,0x83,0x75,0x76,0x76,0x59,0x6d,0x4d,0x6d,0x18,0xdc,0x75,0xe3,0xcb,0x99, + 0x68,0x3e,0x92,0xb,0xf1,0x8e,0x1b,0xc8,0x29,0xd4,0x4e,0xf2,0xc1,0x90,0x21,0x2a, + 0xab,0x92,0x2a,0x4b,0x29,0xf0,0x6c,0x90,0x2a,0x6e,0xb0,0xf5,0xeb,0xd6,0xba,0xf4, + 0x2e,0xa7,0xbd,0xba,0x65,0x82,0x86,0x47,0x46,0xec,0xcd,0x37,0xff,0x64,0x57,0xaf, + 0x76,0xba,0xcd,0xa1,0x19,0x8,0x2a,0x65,0x15,0x25,0x45,0xa5,0x25,0x88,0x3e,0x77, + 0x86,0xa9,0x7,0xf2,0x18,0x38,0x93,0xa5,0x4e,0xb5,0xde,0x33,0x1f,0x71,0x8,0x37, + 0x92,0x93,0xd4,0xe4,0xd4,0x85,0x3,0x3e,0x23,0xa9,0x7c,0xe2,0x19,0xf1,0x98,0x75, + 0xa,0x17,0xd6,0x89,0xa8,0x55,0xab,0x56,0x59,0x77,0x57,0xb7,0xf5,0xf6,0xf5,0xd9, + 0x86,0x8d,0xeb,0x3d,0x9c,0xb8,0x15,0xdb,0x75,0x4b,0x4,0x75,0x77,0x77,0xdb,0xeb, + 0x7f,0x7c,0xc3,0x6,0x6,0x6,0x5c,0xc4,0x59,0x49,0x9a,0xa1,0xb8,0xed,0xf1,0x26, + 0x45,0x96,0x54,0x21,0xb8,0x6a,0x8e,0x21,0x2c,0x10,0xa4,0x7,0x74,0x4b,0xb4,0x51, + 0xf3,0xdd,0xfb,0xd4,0xb,0x10,0x91,0x5b,0x97,0x77,0x59,0x8,0x12,0xe5,0x74,0xe9, + 0xbb,0xa4,0xa4,0xd4,0xd2,0x92,0x22,0xb7,0x83,0x72,0x12,0x25,0xb2,0x67,0x93,0x53, + 0x93,0xb6,0x7a,0xf5,0x6a,0xbb,0xef,0xbe,0x7b,0x15,0x7a,0xac,0x8,0x8f,0x2d,0x11, + 0x37,0x1d,0x68,0xe0,0x61,0xde,0x3c,0xf8,0x3f,0x76,0xec,0xcc,0x19,0x2b,0xd3,0x20, + 0xca,0x92,0x58,0xc5,0xa5,0x47,0xc7,0x78,0x2f,0x2,0xbe,0x74,0x3a,0xed,0xf5,0x33, + 0xf2,0x4a,0x78,0x33,0xb7,0x1f,0xee,0xd5,0x66,0xfd,0x5e,0x6,0xce,0x24,0xfd,0xd8, + 0xff,0x84,0x9c,0x49,0x73,0x58,0xa8,0x6e,0xfe,0x2,0x8,0x75,0xa5,0x6a,0x8b,0xbe, + 0x53,0x32,0xe4,0xd4,0x60,0x17,0x47,0x47,0x47,0x7c,0x76,0x93,0xd3,0x53,0xd6,0x27, + 0x29,0x7a,0xef,0xbd,0xa3,0x76,0xec,0xd8,0xf1,0x84,0xcc,0xa5,0xe3,0xa6,0x9,0x3a, + 0xd9,0x7e,0xda,0x8e,0x1c,0x3b,0x61,0x99,0x52,0x89,0xab,0x6,0x34,0x23,0xf,0xe6, + 0x50,0xbf,0x61,0x70,0x93,0x36,0xa4,0xd4,0x62,0x7c,0x62,0x5c,0x67,0xc,0x5a,0x91, + 0xb4,0x24,0x89,0x1b,0x66,0x66,0x9,0xe,0x33,0xf2,0x4c,0xb3,0xf2,0x4c,0x61,0xa6, + 0x41,0xf5,0xfc,0x70,0xe,0x7e,0x38,0x57,0x47,0xab,0xfc,0xcd,0x9f,0xc7,0x32,0x5f, + 0x7,0x82,0xe2,0x42,0x56,0x3a,0xad,0x40,0x53,0xb1,0x13,0xde,0x75,0x58,0x63,0x81, + 0x13,0x16,0xe9,0xfd,0xf7,0xff,0x6a,0xd7,0xae,0x5d,0xbb,0x29,0x92,0x6e,0x8a,0x20, + 0xdc,0xee,0x1b,0x6f,0xfe,0x59,0xaa,0x35,0x64,0x65,0xc4,0x39,0xaa,0x9b,0xd2,0x20, + 0xe2,0x24,0xe9,0xb6,0xe3,0x72,0x87,0x1d,0x7d,0xff,0x7d,0x3b,0x7b,0xf6,0x9c,0x8d, + 0x8e,0x8d,0x88,0xc3,0x32,0x5f,0xd9,0xd2,0x52,0xa,0x6a,0x26,0x2f,0xa7,0xfb,0x62, + 0x5e,0x86,0x44,0x66,0x3d,0x48,0x14,0x90,0x26,0x5d,0xcf,0x9b,0xf9,0x12,0x10,0xd4, + 0x8c,0x27,0xca,0x64,0xb4,0xcb,0xca,0x53,0x9e,0xe7,0xd,0xc,0xc,0xfa,0x82,0xd1, + 0x21,0x7d,0x8f,0x8c,0x8e,0xda,0x5f,0x24,0xfd,0x99,0x18,0x9f,0x2d,0x1,0x4b,0x26, + 0x88,0xc9,0x74,0xf7,0xf4,0x58,0xb7,0x56,0x60,0xa5,0x56,0xa8,0x52,0x81,0xca,0xcc, + 0xe4,0x84,0x4d,0x31,0x41,0xd,0xc0,0x55,0x5,0x9e,0xf8,0x46,0x7d,0x58,0x4f,0x2e, + 0xa8,0x84,0xc1,0x2b,0x66,0xd1,0x20,0xc9,0xc1,0x90,0x28,0x6e,0x61,0xc5,0xb1,0x45, + 0x44,0xdb,0xac,0x30,0x51,0x75,0xb4,0x67,0x0,0xb2,0x9c,0x7c,0x3f,0x9,0x5f,0x11, + 0x7e,0x9a,0x53,0xc7,0x61,0x45,0x59,0xb9,0xc7,0x47,0x13,0x13,0x93,0xd6,0x3f,0x38, + 0xe0,0x12,0xc4,0x95,0x69,0x54,0x5c,0x85,0x76,0x89,0xd5,0x6,0x65,0x3b,0x63,0x1f, + 0x8b,0x61,0xc9,0x46,0x9a,0x95,0xfe,0xdd,0xef,0x5f,0xb7,0xf6,0x33,0x67,0x6d,0x6c, + 0x7c,0xdc,0x4a,0x35,0xb1,0x15,0x4a,0x5,0x6a,0xaa,0x6b,0x42,0x74,0xab,0xc1,0x5, + 0x62,0x2,0x99,0x34,0xcb,0x60,0xb3,0xca,0xe2,0xe9,0x60,0x3e,0xaf,0xd2,0x3d,0xe1, + 0x5f,0x20,0x4f,0x7f,0xdc,0x1f,0x8c,0xbb,0xea,0xb9,0xe6,0x24,0xa7,0xe6,0x9e,0x9, + 0x1c,0xf1,0x1,0xcd,0xc9,0x70,0xbd,0xe,0x70,0x90,0x95,0x87,0x2a,0xf3,0x31,0x8c, + 0x27,0x92,0x33,0xa3,0x0,0x13,0xf5,0x9e,0x9a,0x96,0x5a,0x27,0x66,0x0,0xf2,0x99, + 0xc7,0x3,0xf,0xde,0x67,0x9f,0xdb,0xb5,0xcb,0xc7,0xb7,0x18,0x96,0x2c,0x41,0x90, + 0x72,0xfa,0xf4,0x69,0x19,0xe1,0xb4,0xa2,0x65,0x19,0x62,0x79,0x83,0x74,0x45,0xda, + 0x27,0xc6,0x0,0x34,0x45,0x27,0x83,0xf1,0xd3,0x31,0x2e,0xd5,0xcf,0x85,0x30,0x17, + 0x8e,0xb9,0x2e,0xf1,0x76,0x2,0x55,0xfc,0x5a,0x88,0x86,0xf1,0x3a,0x1e,0xc3,0x68, + 0x92,0x80,0x54,0x23,0xa3,0x64,0x76,0x96,0x48,0xda,0xef,0x47,0xa,0xf5,0x44,0xe0, + 0x29,0xf9,0x8,0xe4,0x78,0x7f,0x2a,0x63,0x63,0x63,0xd7,0x91,0x33,0xc9,0x1e,0x54, + 0x42,0x4e,0x7c,0x84,0xfa,0xe3,0xc7,0x4f,0x6,0xd5,0x5b,0x2,0x96,0x44,0x10,0xe2, + 0x79,0xee,0xdc,0x39,0xef,0xa4,0x42,0x3,0x41,0x4d,0x58,0x5d,0xa,0xab,0xcd,0x4, + 0x66,0xa6,0x25,0xc2,0xba,0x4e,0x71,0xaf,0x25,0x75,0x71,0xe8,0x3a,0xee,0x7e,0x68, + 0x78,0x44,0x1,0x65,0xb7,0x1b,0xf0,0xb9,0xd1,0xa,0xfe,0xc,0x1f,0x0,0xc9,0x51, + 0x29,0x13,0x49,0x48,0x3,0xe9,0x5,0xd7,0xf0,0x80,0x19,0x79,0x23,0x27,0xcc,0x49, + 0x87,0xd6,0xd0,0x2,0x63,0x49,0x2b,0xfe,0x19,0x1b,0x1d,0xb3,0xc1,0xa1,0x21,0x27, + 0x87,0x71,0x4d,0x41,0x8e,0x9e,0x3,0xdc,0x87,0xa4,0xd2,0x36,0xd7,0x46,0x75,0x6f, + 0x5f,0x7f,0xbf,0x8f,0x7b,0x31,0x2c,0x89,0xa0,0x49,0xe9,0xf4,0x7b,0xef,0x1e,0xf5, + 0xc1,0x30,0xc8,0x12,0x35,0xec,0x1,0x61,0x98,0xa3,0xf,0x37,0xe8,0x78,0x34,0x7e, + 0xc9,0x4,0xa4,0x72,0x4,0x6f,0x4c,0xb6,0xb7,0xaf,0xdf,0xda,0xa5,0xff,0x57,0x7b, + 0xae,0x85,0x6b,0xc,0x56,0x7,0xb2,0xa7,0x9a,0x60,0xca,0x89,0xc0,0xc6,0x1d,0x3a, + 0x74,0x48,0x2e,0xf9,0x3d,0xeb,0xb9,0xd6,0xe3,0xf7,0xa0,0xbe,0x15,0x92,0xd4,0x32, + 0x82,0x3c,0x9d,0x93,0x9b,0x4d,0xc9,0xf6,0x4d,0x8b,0x30,0xae,0xd3,0x3e,0x13,0x1e, + 0x52,0xe0,0xca,0x84,0xb1,0x73,0x53,0x53,0xd3,0xf2,0x96,0x8a,0x81,0xbc,0xa7,0x40, + 0x4e,0x2e,0xa8,0xed,0x52,0x10,0xb9,0x94,0xd,0xbb,0x25,0x11,0x4,0xdb,0x17,0x2f, + 0x5d,0x72,0x55,0x9a,0x54,0xa3,0x6c,0x4d,0x20,0xf2,0xb1,0x30,0x50,0xc8,0x60,0x92, + 0xc,0x47,0xa7,0xbe,0x52,0x88,0xf1,0xb1,0xf,0x8e,0xd9,0x7b,0x47,0x8f,0x4a,0x67, + 0x66,0xec,0x9e,0x6d,0xdb,0xec,0xce,0xcd,0x9b,0x60,0xce,0x9f,0x4b,0xe9,0xbe,0xb4, + 0x8,0xaa,0xd0,0x28,0x4a,0x65,0xf4,0x99,0xfc,0x88,0xe2,0x97,0xe1,0x91,0x61,0xef, + 0x6b,0x6e,0x5a,0x49,0x7b,0x48,0x56,0xba,0xbc,0x42,0x6e,0x3c,0x64,0xf4,0xb3,0x5a, + 0x10,0xdc,0x38,0x51,0x3d,0x7d,0x43,0x88,0x4b,0x8e,0x16,0x2b,0x50,0x73,0x23,0x39, + 0x80,0xb1,0x5e,0xba,0x78,0x71,0x4e,0xc2,0x8a,0x61,0x51,0x82,0x18,0xe8,0xb9,0xb, + 0x61,0x7b,0x94,0xa0,0x2f,0xa5,0x81,0x56,0x2b,0x10,0xac,0xad,0xa9,0x71,0x3,0xed, + 0x3b,0x81,0x2b,0xc3,0xde,0xf,0x83,0x66,0x22,0xa5,0x22,0x80,0x6f,0xd4,0x61,0xa0, + 0x7f,0x40,0xaa,0x75,0xd5,0x9f,0xaf,0x52,0x52,0x49,0x61,0x36,0x4c,0x80,0x58,0x68, + 0x6a,0x56,0x25,0x83,0x8d,0x29,0xb1,0x55,0x4d,0xcd,0xf6,0xc8,0x23,0x8f,0xd8,0x3, + 0xf,0x3c,0xa8,0x54,0xa1,0xc5,0x27,0x42,0x26,0xef,0x92,0x2,0x39,0x92,0x16,0xec, + 0x10,0x76,0x64,0x85,0xfa,0x83,0x92,0x81,0xc1,0x41,0x9f,0x28,0xf7,0xb9,0x41,0x76, + 0xc9,0x9,0xb8,0x81,0x9c,0xe4,0x14,0xd5,0xbd,0xda,0xd5,0xe5,0x36,0x6a,0x31,0x2c, + 0xea,0xc5,0x88,0x42,0x9f,0x7f,0xe1,0x45,0xe5,0x5c,0x5d,0x56,0xd7,0xd0,0x60,0xe9, + 0xaa,0x15,0x9e,0xb5,0x57,0xcb,0x48,0xa7,0x34,0x70,0x8c,0x29,0xd,0xe4,0x8a,0x73, + 0x3c,0x46,0xed,0x58,0xe1,0xc9,0xe9,0x49,0xdf,0x40,0x63,0xe3,0xb,0xe2,0xc2,0xe6, + 0x98,0x9e,0x21,0xe6,0x49,0x10,0xa4,0x8e,0x10,0x80,0x68,0x58,0x26,0x5f,0x36,0x6c, + 0xc6,0xc9,0x61,0x15,0x4b,0x6c,0xc,0xd7,0x3d,0x3c,0x64,0x69,0xb5,0x23,0x4e,0x6d, + 0x5c,0xc6,0xd8,0x3d,0xa9,0xda,0x24,0x42,0x67,0x1f,0x29,0x18,0xf3,0xd0,0x56,0x98, + 0x54,0xde,0xd4,0x92,0x53,0xbc,0xd9,0x94,0x4c,0xc5,0xd7,0x9e,0xfa,0x3b,0xdb,0xb8, + 0x61,0xbd,0x13,0xbe,0x10,0x8a,0x12,0xc4,0xa5,0xe3,0x27,0x4e,0xda,0x4b,0x2f,0xfd, + 0x46,0x19,0x73,0x93,0x65,0xd4,0x73,0xbf,0x32,0xf8,0x72,0xd9,0x84,0xa6,0x86,0x7a, + 0x6b,0x44,0x72,0x92,0x7c,0x8b,0x4d,0x79,0x46,0xc0,0x6a,0xf3,0x5c,0x76,0x46,0xee, + 0x5b,0x13,0x20,0xdb,0xbe,0x7e,0x9c,0xe1,0xc4,0xef,0xe6,0x3e,0x1d,0x4,0x3a,0x75, + 0xbf,0x4a,0xf0,0x84,0xb8,0x7d,0x49,0x8a,0xda,0x25,0x55,0xb8,0xd6,0xdb,0x67,0x57, + 0x7a,0x7a,0x6d,0x5c,0x75,0x35,0xd,0x8d,0xb2,0x5b,0xa5,0x36,0x3d,0x3a,0x6c,0x55, + 0x92,0xb0,0x16,0x25,0xa1,0xee,0xad,0x5c,0xad,0x42,0x4b,0xe0,0x3a,0xe9,0xb9,0xee, + 0x30,0x9c,0x10,0xe,0xec,0x79,0xe2,0x71,0xdf,0x32,0x21,0xd9,0x5e,0x8,0x45,0x55, + 0xc,0xe3,0xd7,0xd3,0xdd,0xe3,0xaa,0xb4,0xba,0xa5,0xc5,0xf3,0xab,0xf1,0xf1,0x49, + 0x1b,0xd5,0xe4,0x7,0x27,0xa7,0xed,0xda,0xe0,0x90,0x5d,0xd5,0x75,0xde,0x50,0x9c, + 0x3b,0x7f,0xde,0x2e,0x48,0xaf,0xd9,0x17,0xea,0x91,0x21,0x26,0x6a,0x75,0x6f,0x96, + 0xd8,0x2b,0xec,0xb,0xa9,0x6,0x99,0x3e,0xaa,0x48,0x3a,0x40,0x52,0x99,0xae,0x20, + 0x24,0x20,0xda,0x4e,0xb2,0x7f,0x27,0x27,0x78,0x97,0x9,0xe5,0x54,0x3d,0xd7,0xfa, + 0xec,0x42,0xc7,0x15,0xbb,0xa4,0x76,0xc7,0x74,0x3e,0xac,0x70,0x63,0x52,0x1e,0x33, + 0xbd,0x62,0xa5,0x95,0xcb,0x16,0x61,0xe7,0xf0,0x98,0xfe,0xec,0x3c,0x3f,0x8b,0x82, + 0x3e,0xc6,0x69,0x4b,0x6d,0x16,0x43,0x51,0x9,0x3a,0x2b,0xd7,0xde,0xae,0xdc,0xeb, + 0x9a,0xbc,0x4b,0x4d,0x4d,0xad,0x8d,0xa8,0xc1,0x9e,0xa1,0x11,0xcb,0x54,0x54,0xba, + 0x58,0xf,0x76,0x5d,0xb5,0xee,0x8e,0xe,0x9b,0x14,0x19,0xec,0x1d,0x57,0x68,0xa2, + 0xc4,0x24,0x15,0x9a,0x3c,0x6a,0x88,0x7d,0xaa,0xa9,0xa9,0xf6,0xbc,0x8,0x72,0x91, + 0x34,0x7a,0x23,0x5f,0x22,0x6e,0x41,0xda,0x98,0x14,0x44,0xba,0x4a,0x91,0xd8,0xba, + 0xfa,0x11,0x3c,0x66,0xad,0xb7,0x7f,0xd0,0x3a,0x21,0x5b,0x46,0x78,0x62,0x7c,0xcc, + 0xca,0xd5,0x66,0x85,0x16,0xb,0xf7,0xb7,0x42,0x4b,0xdb,0xa8,0x95,0x27,0xb5,0xc8, + 0x95,0x10,0x10,0x4e,0x93,0xca,0xeb,0xae,0xcd,0xcb,0x15,0x7b,0x59,0x3b,0x77,0xee, + 0xb0,0xbb,0xee,0xba,0xd3,0x77,0x2a,0x17,0x42,0x51,0x82,0xde,0x7a,0xeb,0x90,0xbb, + 0x43,0x98,0x26,0xa7,0x2,0xa3,0x6a,0xf8,0xec,0x85,0x8b,0x36,0x29,0xc3,0x38,0xa1, + 0xfa,0x21,0x79,0xb8,0x68,0xb4,0x19,0x2c,0x2b,0x83,0x27,0x71,0xa3,0xae,0x89,0x43, + 0x18,0x44,0xad,0x69,0x5d,0x63,0x8d,0x52,0xf,0x88,0xf2,0xad,0xe,0xf5,0xea,0x29, + 0x47,0x62,0x93,0x20,0x87,0xa1,0xf8,0xdb,0xf,0x7d,0x8f,0x8c,0x8e,0x5b,0xaf,0x52, + 0x82,0x91,0x91,0x51,0xd5,0xe1,0xf1,0x64,0x89,0x44,0xcc,0x84,0x5c,0x38,0xf6,0xa3, + 0x76,0xe5,0xa,0x6b,0x69,0x6c,0xd4,0xb3,0xa1,0xad,0x5c,0xcc,0xd1,0x50,0xa0,0x3e, + 0xaa,0x21,0x92,0xf7,0x89,0xbb,0xb7,0xdb,0x9d,0x77,0x6e,0xb1,0x6d,0xdb,0xee,0xf2, + 0xba,0x42,0x28,0x4a,0xd0,0xef,0x5f,0x7b,0x5d,0x46,0x56,0x12,0x23,0x32,0x98,0x3c, + 0x1e,0xe2,0xe4,0x89,0x13,0x76,0xfe,0xfc,0x5,0xab,0xd3,0xe0,0x36,0xde,0x71,0x87, + 0xd4,0x6f,0xa5,0x6f,0x79,0xd0,0x39,0xb1,0x51,0x94,0x73,0x26,0x3d,0x31,0x3e,0xe1, + 0xab,0x4f,0x4c,0x43,0x94,0xdb,0x24,0x82,0x36,0x6f,0xde,0x6c,0x8d,0x4d,0x8d,0x4e, + 0x6,0x13,0xe0,0x11,0x8e,0x43,0x1c,0x15,0x8,0x82,0xe4,0x11,0xa9,0x37,0xee,0x9b, + 0x0,0xb4,0xd4,0xa5,0x32,0xed,0x6d,0x8e,0x4a,0x5a,0x2b,0xa5,0xa2,0x35,0xb2,0x7f, + 0xfe,0x32,0x32,0x51,0x47,0x30,0x2f,0x1f,0x9,0xe2,0x69,0x18,0x52,0x40,0x52,0x47, + 0x92,0xcd,0x1b,0xde,0xcd,0x9a,0xc3,0xa7,0x1e,0x7c,0x20,0x54,0x16,0x40,0x51,0x82, + 0x5e,0xfa,0xcd,0xcb,0x72,0xf3,0xb2,0x1b,0xfa,0x63,0x20,0xdd,0x3d,0xdd,0x76,0xe8, + 0xed,0xc3,0xb6,0x71,0xe3,0x46,0xdb,0xb4,0xe9,0xe,0x57,0x1d,0x48,0x9,0xc4,0x84, + 0xbe,0xf1,0x26,0xf3,0x9b,0x61,0x41,0xd7,0x9,0x15,0xd8,0x5c,0xbb,0x7a,0xf5,0xaa, + 0x1b,0xc7,0xd,0x6b,0xd7,0xf9,0x3b,0x7a,0x82,0xbc,0x70,0x13,0x4,0x85,0xf7,0x64, + 0x8c,0x86,0x67,0x20,0x94,0x44,0xb8,0x42,0x71,0xf,0x29,0x8,0xaf,0xae,0x91,0xe4, + 0x4a,0x6c,0x97,0x8,0x62,0xdb,0x64,0x72,0x4a,0x51,0xb3,0x77,0x4d,0xcf,0x31,0x4b, + 0x4b,0xa6,0x93,0x7c,0xf9,0x81,0xdf,0x93,0xb0,0x94,0xd4,0x63,0x13,0xb1,0xab,0xbc, + 0x35,0xd9,0xd5,0xf6,0xd9,0x50,0x59,0x0,0x45,0x8d,0x74,0x46,0xab,0xe7,0xed,0x8b, + 0x0,0xd4,0x66,0x58,0xe9,0xc2,0x3,0xf7,0xdf,0xe7,0x65,0x75,0x4b,0xb3,0x8b,0xfd, + 0xb4,0x44,0xde,0xbd,0x88,0x6,0xcc,0xec,0x48,0x60,0xeb,0xeb,0xeb,0xfc,0x5,0x20, + 0x9b,0xe9,0x44,0xc1,0xbc,0xbe,0x61,0x47,0x6f,0xeb,0xd6,0xad,0x3e,0xa8,0xab,0x9d, + 0x9d,0x76,0xf8,0xc8,0x11,0x1b,0x94,0x91,0xcf,0x28,0x6,0x1a,0xd7,0xb3,0x19,0xb5, + 0xc5,0xb,0x43,0xda,0x80,0x20,0x54,0xba,0xae,0xae,0xce,0xdb,0x42,0x15,0x53,0x62, + 0xa2,0x56,0x52,0x53,0xa5,0xf6,0x83,0xc4,0xf1,0x76,0x36,0x48,0x2e,0x8,0xdf,0xc9, + 0xec,0xe7,0xc0,0xb9,0x88,0x51,0x8c,0x95,0x7b,0x99,0xe7,0x99,0x13,0x52,0xcb,0xe2, + 0x15,0x43,0x51,0x9,0x7a,0xf1,0xc5,0x5f,0x79,0x9b,0x18,0x50,0x1a,0x42,0xfc,0xeb, + 0x34,0xe0,0xa1,0xc1,0x61,0xeb,0x90,0x71,0x66,0x82,0xbc,0xdc,0xab,0x96,0x9a,0xc5, + 0xb1,0x10,0xc0,0xa1,0xe9,0x15,0xe5,0x69,0xad,0xce,0x5a,0xb7,0x39,0xd8,0x2d,0x6c, + 0x12,0x89,0x23,0x52,0xd0,0x73,0xad,0xd7,0xba,0xbb,0xbb,0x18,0xa9,0x55,0x4b,0xed, + 0x52,0xf2,0x48,0x65,0x92,0xa6,0xa6,0xfa,0x1a,0xab,0x13,0xa1,0x33,0x72,0xed,0xee, + 0xe6,0xcb,0xb4,0x7e,0x9a,0x88,0x93,0x2f,0xd2,0xf0,0x80,0xb4,0x8d,0xfd,0x20,0x29, + 0x1d,0x1b,0x1b,0x95,0xba,0x36,0x49,0x8a,0xe6,0x89,0x72,0x44,0x22,0xfc,0xee,0x44, + 0x72,0x12,0x50,0x17,0xa7,0x5c,0x5f,0x5f,0x6f,0x6b,0xd7,0xb6,0xda,0x63,0x5f,0x7c, + 0xd4,0xcf,0xb,0xa1,0xa8,0x4,0x39,0xd4,0x18,0x2b,0x1a,0x8d,0x6d,0x57,0x67,0x97, + 0x9d,0x3c,0x75,0x4a,0x2e,0xfd,0x92,0x47,0xb1,0x63,0x9a,0x3c,0x13,0x40,0xe4,0xd9, + 0x87,0x19,0x57,0x9e,0x74,0xe2,0xc4,0x29,0xfb,0xf5,0x4b,0xbf,0xb3,0x57,0x5e,0x79, + 0xd3,0x8e,0x1d,0x6f,0x77,0x57,0x5e,0x5f,0x5f,0xeb,0x24,0x94,0x4b,0x65,0x1a,0x9b, + 0x1a,0xac,0x65,0x75,0x8b,0x1b,0xd8,0xce,0xee,0x6e,0x1b,0x91,0x4,0xa6,0x1b,0x9b, + 0xad,0x64,0x65,0xad,0xd,0x60,0xdc,0x99,0x98,0xe6,0xc5,0xa,0x7b,0x36,0xae,0x31, + 0x60,0xcc,0xa3,0x51,0x47,0x92,0x2f,0x5f,0xee,0xb0,0x5e,0xc5,0x47,0x9c,0x27,0x1a, + 0x1e,0x88,0xc9,0x21,0xc7,0x57,0x6c,0x21,0xc4,0x7b,0x17,0x96,0xf,0xc7,0xa2,0x4, + 0xc1,0xb6,0x6f,0xbe,0x2b,0x4e,0x41,0x62,0x88,0x79,0x6,0xb5,0x7a,0xe,0xef,0x3f, + 0x6c,0x37,0x84,0xed,0xa,0x5c,0x79,0xca,0x57,0xf6,0xe2,0xc5,0x73,0xb2,0x57,0x87, + 0xec,0xe5,0x97,0xff,0xd3,0x7e,0xa3,0xd2,0xa3,0x40,0xf,0xb5,0x4b,0x57,0x56,0xb8, + 0x78,0xbb,0x67,0x5b,0xb7,0xce,0x3d,0x60,0x36,0x33,0xe5,0x5b,0xb7,0xc4,0x58,0x3d, + 0x72,0xed,0x92,0x15,0xf5,0x27,0x9b,0x82,0xd4,0xe8,0x5e,0x27,0x1,0xe9,0xd1,0x5c, + 0xf0,0x76,0x2c,0x6,0xc1,0x6a,0x83,0x22,0x7b,0xae,0x5f,0x27,0x3d,0x39,0x98,0xe7, + 0x2d,0xe7,0x2f,0x21,0x4,0x52,0xb1,0x79,0x8b,0xc5,0x41,0x45,0x9,0xf2,0x8,0x33, + 0x19,0x20,0x86,0xb7,0x4b,0xf9,0xcb,0xd8,0xd8,0x84,0x7,0x75,0x24,0x8d,0x48,0xd6, + 0x84,0xc4,0x3d,0xda,0x8c,0x4a,0x4d,0x7e,0x7e,0x45,0xa7,0xa4,0x6,0xdd,0xd6,0xd3, + 0xd5,0x61,0xaf,0xfd,0xfe,0x8f,0xf6,0x1f,0xbf,0x7a,0xd9,0xce,0x9d,0x3d,0xef,0x92, + 0xe4,0x79,0x94,0xd4,0xa2,0x56,0x22,0xce,0xeb,0x98,0x8c,0xbc,0x55,0xc7,0xf1,0xf, + 0xac,0xff,0xea,0x15,0xab,0x94,0xb7,0xa4,0x6d,0x8,0xe0,0xa5,0x40,0x78,0x1b,0xa2, + 0x6,0x55,0xf0,0x5a,0xf4,0x87,0xda,0xae,0x5d,0x1b,0x5e,0xed,0x84,0x1d,0x48,0x1f, + 0xae,0xc0,0x41,0x42,0x80,0x7f,0x6,0xa0,0x66,0xe1,0x2f,0x39,0x57,0x5b,0x63,0xf2, + 0xb0,0xfc,0x40,0x62,0xb5,0x24,0xb9,0x18,0x8a,0x12,0xc4,0xaf,0x2d,0xfc,0xf5,0x89, + 0x6,0xc1,0x36,0x7,0x2e,0x1b,0x77,0x1f,0x56,0x55,0x45,0x7f,0x93,0x32,0xd2,0xa3, + 0xf2,0x38,0xe2,0xc5,0x25,0x89,0xf4,0x0,0xef,0xd6,0x40,0xcc,0x53,0x91,0x52,0x7c, + 0x44,0xb4,0x6c,0xf6,0xdf,0x7,0xf,0xda,0x8b,0xcf,0xff,0xca,0xce,0x9e,0x39,0xe7, + 0x92,0x84,0xed,0x92,0x1,0xf4,0x8d,0xb7,0x4a,0x91,0x30,0xde,0x77,0xcd,0x26,0xfb, + 0x7b,0x6d,0x8d,0xae,0x11,0x70,0xa6,0x52,0xe5,0x56,0x26,0xa2,0x20,0xc6,0x2d,0x89, + 0xbe,0xe3,0x7b,0x7b,0x12,0x57,0x48,0x46,0xb2,0xe7,0xc8,0x99,0x23,0x29,0x22,0xd2, + 0x31,0x2f,0x3d,0x11,0x53,0x92,0x1a,0xa2,0xf8,0x87,0x1e,0x7a,0xd0,0xee,0xf9,0xe4, + 0x27,0x92,0xda,0xc2,0x48,0xfd,0xab,0x90,0x1c,0x17,0x40,0x89,0x4f,0x7e,0x50,0xb6, + 0x6,0xa3,0xc9,0x1b,0x81,0x18,0xd6,0x87,0xb5,0xe2,0x4d,0x85,0x82,0x3c,0x85,0x2, + 0x35,0xd5,0xd5,0x73,0xd1,0x31,0x99,0x3d,0x76,0xa6,0xae,0xae,0x5e,0xc4,0xa5,0xac, + 0xa9,0xb1,0xce,0x89,0xbd,0xa0,0x0,0xb3,0xab,0xab,0x47,0xf1,0xd3,0x46,0x6b,0x90, + 0xb1,0x9f,0x92,0x34,0x20,0x1,0x15,0xb2,0x4d,0x1e,0x37,0xa9,0xaf,0x55,0x32,0xba, + 0xb8,0x7f,0x4f,0x64,0x25,0xb5,0x90,0x88,0xad,0xc6,0x9d,0x4f,0x4d,0x85,0xb4,0x82, + 0xc0,0xd1,0x77,0x24,0xe7,0x45,0x27,0x1,0xa4,0x4,0x95,0x43,0x5e,0x9c,0x14,0xee, + 0xd,0x17,0xfd,0x39,0x1c,0xe,0x63,0xf9,0x92,0xc,0xf3,0xf6,0x6d,0xdb,0x3c,0xed, + 0x29,0x86,0xa2,0x4,0xb1,0xca,0x18,0x5e,0xc,0x33,0xdd,0x10,0xcb,0xb0,0x8a,0x11, + 0xc,0x9e,0xde,0xa7,0xe4,0x75,0xc8,0xc2,0x49,0x37,0xd8,0x54,0x23,0xb7,0xaa,0xab, + 0xad,0xb3,0xd6,0xd6,0xb5,0xa,0xc6,0x36,0x59,0xe3,0xaa,0x16,0x57,0x25,0x54,0xa3, + 0xb7,0xb7,0x5f,0xc9,0x67,0xbf,0x6d,0xdf,0xbe,0xd5,0x57,0x91,0xdd,0x0,0xde,0x78, + 0x30,0x78,0xf6,0x9d,0x90,0x10,0x9e,0x45,0x72,0xcb,0x4b,0xb3,0x96,0x56,0x0,0x5f, + 0x56,0xa2,0x9,0x67,0x65,0x7b,0x44,0x90,0x93,0x2,0x77,0x71,0xd6,0xb,0x21,0xef, + 0x3a,0xcf,0xb9,0xb3,0xd1,0xd8,0xbe,0xf8,0xe8,0x17,0xec,0x9e,0x7b,0x3e,0xe9,0xe6, + 0x60,0x31,0x14,0xbd,0x83,0x41,0xb6,0x28,0xde,0xa9,0x4c,0x7e,0x1c,0xc0,0x4a,0x23, + 0x3d,0x48,0x89,0x17,0x75,0x40,0x94,0xb,0x39,0xbd,0x72,0xdd,0x23,0xf2,0x2e,0x6e, + 0x8f,0x12,0xbb,0x81,0x3b,0x9e,0x96,0x87,0x6a,0x50,0x3c,0xb3,0xfd,0xee,0xbb,0xed, + 0xf1,0x27,0x76,0xdb,0x9e,0x27,0x77,0x8b,0xac,0x6,0xeb,0xb8,0x74,0xc5,0x25,0xe, + 0x3b,0x87,0x77,0xe2,0xc7,0x56,0xa4,0x2b,0x3d,0x92,0x52,0xa4,0x36,0x55,0x22,0xc9, + 0x4a,0xbc,0x16,0xe4,0x91,0xad,0x33,0x6,0xa4,0xa9,0x5c,0xe2,0xc4,0x38,0x6e,0x20, + 0x21,0xf9,0x9b,0x47,0x38,0x63,0x2c,0x10,0x4f,0x90,0xf9,0xc5,0x2f,0x7c,0xde,0xd5, + 0x8a,0xba,0xa5,0x60,0x51,0xa,0xf1,0x14,0x5b,0xb7,0x6e,0x71,0xd1,0xae,0xd1,0x4, + 0x98,0x4c,0x1c,0x19,0x5d,0xb0,0x27,0x84,0xed,0xa1,0x86,0xc9,0xe1,0x82,0x39,0xc1, + 0x68,0xaf,0x54,0x7c,0x4,0xa9,0xe3,0x4a,0x34,0x47,0x86,0x79,0x81,0x97,0x55,0x4e, + 0xd6,0x6a,0xf7,0xdf,0x7f,0xaf,0x55,0x29,0x97,0x62,0xe2,0x3c,0x8b,0xc4,0x91,0xe0, + 0x72,0x3f,0xf1,0xd2,0xc8,0xc8,0xb0,0xbc,0x15,0xef,0xdb,0x42,0x2f,0x78,0x35,0x24, + 0x37,0x4c,0x14,0x49,0xa,0xdb,0xbe,0x1,0xf4,0x1c,0xc7,0x13,0xfe,0xc2,0xe9,0x3c, + 0x39,0xa4,0x3c,0xbc,0x60,0x78,0xf4,0xb,0x8f,0xba,0xe4,0x2c,0x95,0x1c,0xb0,0x28, + 0x41,0x4c,0xe0,0xe,0xa5,0x16,0x78,0x28,0x8c,0x6f,0x94,0xe,0x2f,0x48,0x90,0xa, + 0x86,0x19,0x5d,0x26,0xda,0xe6,0x7,0x3,0xc4,0x47,0xd4,0x23,0x21,0xfe,0x16,0x4, + 0x57,0x2e,0x9b,0xc1,0x76,0x6a,0x88,0x9b,0xc2,0xe6,0x16,0x7b,0xdd,0x3c,0xb,0x89, + 0x10,0x8f,0xed,0x62,0xe8,0x63,0x22,0x19,0xf7,0x9b,0xcd,0x32,0x3c,0x2d,0x80,0xae, + 0xb1,0x77,0xcd,0xbd,0xdd,0x92,0x54,0x54,0x9d,0x63,0xc6,0x10,0xe9,0x71,0xd9,0x11, + 0xe1,0x94,0x8,0xc6,0xc0,0x66,0x3e,0x63,0x7b,0xfc,0xf1,0xbf,0x91,0x5a,0x2f,0x9c, + 0x94,0x2e,0x84,0x45,0x9,0x2,0x48,0xce,0xce,0x1d,0x3b,0x34,0x89,0x32,0x3f,0xf6, + 0x81,0x69,0x20,0x51,0x87,0x39,0x77,0x92,0xe4,0x5d,0x48,0x2,0xbb,0xbb,0x7b,0x14, + 0xf7,0xf4,0x28,0xfa,0x9e,0xf2,0x7b,0x62,0x9c,0x84,0x71,0x24,0xe7,0x1a,0xd7,0x8a, + 0x52,0xf8,0xf5,0xab,0xdb,0x5,0x3d,0x47,0x34,0x4c,0xfb,0x48,0xde,0xa8,0x24,0xce, + 0x23,0x77,0x4d,0x5a,0x82,0x6b,0xca,0x2a,0x6c,0x48,0xd9,0x7d,0xa7,0x62,0x29,0x75, + 0xa6,0x85,0x5a,0xa1,0xc5,0x61,0x3b,0x76,0x9e,0x8c,0x5c,0xb8,0xec,0xe8,0x3e,0x12, + 0x5b,0x36,0xfb,0xbf,0xfa,0x95,0x27,0x6d,0xab,0xb2,0x76,0xc6,0x79,0xb3,0x58,0x12, + 0x41,0x4c,0xb2,0x55,0x21,0xf9,0xa6,0xcd,0x9b,0xac,0x41,0x59,0x3c,0xc6,0x36,0x22, + 0x57,0xa2,0x38,0x86,0xc,0x2,0x39,0x2,0xc3,0xcb,0x57,0x3a,0x5d,0x9a,0x70,0xab, + 0xb4,0xe1,0x89,0xa7,0xae,0xa3,0x52,0x8c,0xd5,0x6d,0x94,0x6c,0xb,0xd7,0xf0,0x76, + 0x80,0x76,0x8,0x1d,0xdc,0x5b,0xf2,0xa7,0xf3,0x89,0x89,0x8c,0xb5,0x9f,0xb9,0x60, + 0xfd,0x32,0xe2,0xf5,0x75,0xd5,0x56,0x5d,0x53,0xeb,0xa4,0xd1,0xdf,0x1c,0x72,0xb8, + 0x62,0xf1,0x50,0x55,0xfa,0x7b,0xfa,0xef,0x9f,0x52,0x62,0xbd,0xc9,0xdb,0xb9,0x15, + 0x2c,0x89,0x20,0x40,0xdc,0xb1,0xe3,0xe1,0x4f,0xd9,0xba,0xf5,0xeb,0xfc,0x97,0xf2, + 0x61,0x5f,0x27,0xa6,0x0,0xe1,0x3d,0x59,0x24,0x9,0xd5,0xc2,0x7d,0x13,0x79,0xe3, + 0xd6,0x79,0x9d,0x43,0xa8,0x0,0x21,0x30,0x43,0x8e,0x85,0xda,0x94,0xc8,0x3b,0xf9, + 0x2f,0x3e,0x98,0x9c,0x46,0x12,0x93,0x47,0xa4,0x68,0x56,0xf7,0xcd,0x20,0x21,0x9a, + 0x17,0xfd,0x70,0x1f,0x5b,0x2b,0x15,0x15,0x38,0xc,0xd9,0x22,0x25,0xd2,0x13,0x13, + 0xe3,0x7e,0x2d,0x4e,0x9d,0xfe,0x91,0x48,0x54,0x1d,0xb5,0xfe,0xba,0xc8,0x21,0x5b, + 0xbf,0x55,0x72,0xc0,0x92,0x9,0x2,0x74,0xfa,0xd9,0x4f,0xef,0xb0,0x4f,0x6c,0xdf, + 0x6e,0x8d,0x32,0xde,0xe8,0x36,0xb6,0x25,0x48,0x40,0x28,0xc,0x86,0x6f,0xae,0xb1, + 0x4f,0x84,0x9d,0x81,0x28,0xf6,0x95,0x71,0xf1,0x7d,0xfd,0x3,0xd6,0xaf,0x54,0x65, + 0x58,0xe2,0x8f,0xa,0xa0,0x72,0x21,0xe6,0xc9,0xfa,0xc4,0xb0,0x4f,0xfc,0x6e,0x9a, + 0x20,0x91,0xb7,0x1d,0x94,0x12,0x91,0xb9,0x56,0x69,0x49,0x5d,0x63,0x93,0x65,0xa5, + 0x8e,0x63,0xba,0xaf,0x57,0xd2,0xc4,0xef,0x94,0xf8,0x2d,0x23,0xa0,0x5f,0x62,0x29, + 0x42,0x8e,0x16,0x45,0xd8,0x5f,0xfd,0xca,0x97,0x3f,0x34,0x39,0xe0,0xa6,0x8,0x2, + 0xd,0x4a,0xf,0x76,0xec,0x7c,0xc4,0xee,0x95,0x37,0x68,0x6e,0x6e,0x74,0x22,0x58, + 0xc2,0x7c,0x92,0x0,0x46,0x3c,0x18,0x60,0x6c,0x8f,0x8c,0xf4,0xc8,0xa8,0xd4,0x64, + 0xc0,0xfa,0x44,0x56,0x5f,0x5f,0xbf,0x88,0x93,0xb7,0x22,0x70,0x93,0x5,0xc6,0x28, + 0x73,0x8d,0xfb,0xf1,0x9c,0x78,0x1d,0xae,0x4d,0xcb,0x6,0x65,0x66,0x4b,0x2c,0xbd, + 0xb2,0xc6,0x66,0x45,0x4e,0xaa,0xb2,0xca,0x26,0x55,0x37,0x20,0xfb,0x35,0x3d,0x39, + 0xed,0x39,0x9b,0x3a,0x94,0xe4,0xcc,0xb8,0x84,0xb6,0xb6,0xae,0xb6,0xdd,0xbb,0x1f, + 0xb3,0xf5,0x22,0x74,0x39,0x70,0xd3,0x4,0x1,0x52,0x85,0xcf,0xb4,0x7d,0x5a,0x2e, + 0xf3,0x1e,0xcf,0x65,0x98,0x54,0xf8,0x11,0x53,0x90,0x1e,0x8,0x8a,0x85,0x5,0xe6, + 0x9b,0x0,0x12,0x57,0x8e,0xfa,0x61,0x90,0x99,0xbc,0xff,0x5c,0xb8,0x72,0x85,0xd4, + 0x25,0x63,0x9d,0x9d,0x9d,0x76,0xa9,0xe3,0x92,0xab,0x2f,0x51,0x39,0xed,0x40,0x3c, + 0x2d,0x10,0xc3,0x50,0x38,0x57,0x74,0x64,0xa9,0xf2,0x6a,0xab,0x57,0xf6,0xcf,0x2f, + 0xf5,0xa9,0x44,0xad,0xd8,0x50,0x63,0xcf,0xe9,0xb1,0x2f,0x7d,0xc9,0x7f,0x36,0xbc, + 0x5c,0xb8,0x25,0x82,0x0,0xbf,0x5,0xfc,0xfc,0xe7,0x76,0xd9,0xfd,0xf7,0xdd,0xeb, + 0x61,0x0,0xd9,0x79,0x34,0x9a,0x85,0xa4,0x9,0x70,0x14,0x88,0xb,0x2a,0xb8,0x66, + 0xcd,0x6a,0xdf,0xd4,0xef,0x54,0x12,0x7c,0xaa,0xfd,0xb4,0xec,0x4f,0xc6,0x36,0xcb, + 0xa0,0x42,0x1a,0x86,0x89,0xe7,0xb1,0x31,0x1e,0x13,0xd1,0x80,0x2c,0x73,0x46,0x92, + 0x46,0x38,0xd0,0xd2,0xb2,0xca,0x7f,0xa1,0xcf,0x96,0x9,0xaa,0x59,0xaf,0xfe,0x9f, + 0xfc,0xdb,0xc7,0x6d,0x8d,0x48,0x5a,0x4e,0x14,0xdd,0x30,0x5b,0xa,0x30,0xac,0x27, + 0x4f,0x9e,0xb4,0xa3,0x47,0x95,0x8d,0xf,0xf4,0xbb,0x9a,0xc,0xb3,0x97,0x1c,0x8d, + 0x6f,0x84,0x66,0xc8,0x29,0xef,0xbd,0x90,0x22,0xfe,0xeb,0xc1,0x46,0x19,0x7c,0xbc, + 0xd8,0x99,0x8e,0x2b,0x36,0xa0,0x67,0x5a,0x57,0x35,0xd9,0x6a,0xa9,0x17,0xf6,0x28, + 0x1a,0x7e,0xbc,0x91,0x7,0x9f,0x2,0x6a,0x34,0xb7,0x99,0xab,0x7b,0x68,0x8b,0x2d, + 0xb,0x5e,0x48,0x3e,0xf3,0xf,0x5f,0xf7,0xd,0xb0,0xe5,0xc6,0x87,0x26,0x8,0xf0, + 0x63,0x1,0x32,0xfd,0x77,0xde,0x79,0xc7,0x2e,0x5e,0xec,0xf0,0x2d,0x58,0x26,0x36, + 0xa6,0x78,0x6,0x17,0x8f,0xa,0x0,0xe2,0x9c,0x6a,0x49,0x4c,0x73,0x63,0x83,0xd5, + 0x68,0xc5,0xa7,0x64,0xc0,0xaf,0xd,0xd,0x59,0xa7,0xec,0x49,0x56,0xea,0xb9,0xa6, + 0x79,0x95,0xd5,0x2a,0xad,0x59,0xa1,0xe3,0xa,0x11,0x84,0xbb,0xa7,0x5d,0x62,0x2b, + 0x5e,0x40,0x22,0xee,0x18,0x62,0x12,0x4e,0x8f,0xa8,0xa5,0x76,0x6c,0xeb,0xfe,0xf3, + 0x3f,0xfd,0xa3,0x4b,0x70,0xae,0xb4,0x2e,0x17,0x96,0x85,0x20,0x0,0x9,0x48,0x4d, + 0x6f,0x6f,0xaf,0xbd,0xfb,0xde,0xfb,0x76,0xe5,0xca,0x15,0x57,0x8b,0xb8,0x9f,0xc3, + 0xe6,0x8,0x52,0x51,0x26,0x17,0x8f,0xf1,0xe,0xef,0xc1,0x32,0x36,0x3c,0x39,0x21, + 0x82,0x46,0x6c,0x54,0xde,0xaa,0x56,0x92,0x50,0xa7,0x88,0xbd,0xa5,0x46,0x11,0xbb, + 0x9e,0xc1,0xa8,0xf3,0xbb,0x24,0x3c,0x25,0xa4,0xf3,0x22,0x93,0xf7,0xa7,0xa5,0x6c, + 0xb9,0x68,0xd8,0x9b,0x64,0x88,0x9,0x2,0x6f,0x17,0x39,0x60,0xd9,0x8,0x8a,0x80, + 0x24,0xde,0x48,0xb0,0xf7,0x7c,0xee,0xfc,0x5,0x7f,0x45,0xe4,0xf1,0x8f,0x80,0xca, + 0x40,0x92,0x77,0x29,0xa1,0x2a,0x91,0x7,0x82,0xd8,0x21,0x49,0x52,0x9f,0x52,0x10, + 0x6c,0x10,0xaf,0xb2,0xeb,0x2b,0xd3,0xbe,0xd5,0x3a,0x26,0x29,0xcc,0xe8,0x3a,0x46, + 0x7c,0x7c,0x6c,0xd4,0xa3,0xf8,0xf5,0x77,0x6c,0xb2,0xb5,0xf2,0x54,0x1b,0xd7,0xad, + 0xb5,0xd,0x2a,0x9e,0x9e,0xdc,0x26,0x72,0xc0,0xb2,0x13,0x14,0x41,0xb3,0xa8,0x7, + 0xaa,0x30,0x38,0x34,0xe8,0xd9,0x3e,0xae,0x9d,0x57,0xd2,0xfe,0x26,0x41,0xbd,0x32, + 0x2f,0x8,0x43,0xa2,0x32,0xba,0x9f,0x7b,0x2b,0xe4,0xf2,0xab,0x64,0xa4,0xd9,0x6a, + 0x21,0xee,0xa2,0x40,0x2,0xe7,0xa4,0x27,0x24,0xb4,0x78,0x39,0x76,0x3,0xa3,0x53, + 0xb8,0x9d,0xb8,0x6d,0x4,0x45,0xd0,0x3c,0x2e,0x9a,0x4,0x93,0x77,0xf6,0xa4,0xb, + 0xbc,0x14,0x84,0xa4,0x7f,0xff,0xf9,0xbf,0xb9,0x54,0x3d,0xf5,0xd4,0xd7,0xfc,0xbf, + 0x12,0x70,0x5c,0x91,0x2e,0xf7,0xad,0xf,0x12,0x63,0xde,0x96,0x10,0xa,0xe0,0xf1, + 0x9c,0xc8,0x22,0x92,0xf2,0xc2,0xb,0x2f,0xf8,0xf7,0x63,0x8f,0x3d,0xe6,0x71,0xd4, + 0x72,0xe1,0xb6,0x13,0x54,0xc,0xcd,0xcd,0xcd,0x4e,0xd8,0x2f,0x7e,0xf1,0xb,0x7b, + 0xfa,0xe9,0xa7,0xbd,0x2e,0x4e,0xb4,0x18,0xe2,0xbd,0x11,0xb4,0x41,0x5b,0x20,0xb7, + 0xad,0xb3,0x67,0xcf,0xda,0x91,0x23,0x47,0xfc,0x38,0x1f,0xf9,0x6d,0x2c,0x8,0x8, + 0x5a,0xc,0xed,0xed,0x7,0xb2,0xfb,0xf7,0xb6,0x65,0xdb,0xda,0x62,0xd9,0x9b,0xdd, + 0x7f,0xa0,0x3d,0xb9,0x7a,0x3d,0xfa,0xfa,0xfa,0x92,0xa3,0x80,0xfc,0xf3,0x5c,0xec, + 0xd8,0xb1,0x23,0x2b,0xa9,0xc9,0x3e,0xff,0xfc,0xf3,0x7e,0xce,0xbd,0x9c,0x2f,0x56, + 0xa,0xf5,0x11,0xaf,0x9d,0x39,0x73,0x26,0xa9,0xcd,0x66,0xbf,0xff,0xfd,0xef,0x5f, + 0xf7,0x5c,0x2c,0x5b,0xb7,0x6e,0x4d,0xee,0x58,0x1c,0x8b,0x4,0x8a,0xa7,0xed,0x95, + 0x7d,0xbb,0xec,0xae,0xbb,0x9e,0xb4,0xef,0x3c,0x77,0xd0,0xe,0x1e,0x8c,0xe5,0x39, + 0xfb,0xe5,0xa9,0xe4,0x96,0x1c,0xc4,0x95,0xdc,0xb9,0x73,0xa7,0x9f,0xff,0xf8,0xc7, + 0x3f,0xf6,0xf3,0xa5,0x48,0x45,0x3e,0x90,0x84,0xfc,0xb2,0x14,0x14,0x52,0x2f,0xa4, + 0x85,0xe7,0x7f,0xf8,0xc3,0x1f,0xfa,0xf9,0xcd,0xa8,0x60,0xd1,0x1f,0xa,0x9f,0x7e, + 0xf6,0x1b,0xf6,0xa4,0x88,0x71,0xb4,0xed,0xb5,0xfd,0xff,0xf2,0x94,0x6d,0xe3,0xf8, + 0xd4,0xaf,0xed,0xd7,0x5e,0x79,0x3d,0xa2,0x38,0x63,0x7,0x0,0x84,0xe5,0x3,0xd2, + 0xa8,0x7f,0xf8,0xe1,0x87,0x93,0x9a,0xa0,0xa,0xb1,0x3e,0x22,0xdf,0x96,0x14,0x6b, + 0x2b,0x17,0xd4,0x81,0xdc,0x67,0xb7,0x6c,0xd9,0xe2,0x24,0xdd,0xca,0x42,0x2d,0xac, + 0x62,0xed,0xfb,0xb3,0x6d,0xee,0x6b,0x54,0xda,0xf6,0x67,0xb,0x2b,0xd4,0xf5,0x40, + 0x55,0x10,0xe1,0x1f,0xfd,0xe8,0x47,0x7e,0xbe,0x7b,0xf7,0x6e,0x3f,0xcf,0x55,0x89, + 0xa8,0x56,0x8b,0x95,0x62,0x6a,0x14,0xaf,0x15,0x6b,0x8b,0x6b,0x51,0xc5,0xf8,0x6, + 0x71,0x7c,0x5c,0x5b,0x2a,0x16,0x54,0xb1,0xd3,0xbf,0xfd,0xa5,0x5,0xd9,0x69,0xb3, + 0xfd,0x3f,0xff,0xb6,0x6d,0xf5,0xe3,0xc2,0xf8,0xd6,0xb7,0xbe,0xe5,0x6a,0xf5,0x83, + 0x1f,0xfc,0xc0,0xcf,0x59,0x29,0xce,0xa3,0x44,0x3d,0xf1,0xc4,0x13,0x73,0x2b,0x8b, + 0x98,0xe7,0x8a,0x3b,0x88,0x75,0xb9,0x6a,0xc4,0x33,0xb4,0x11,0xb,0xe7,0xf9,0xe0, + 0x39,0x5e,0x45,0xfd,0xe4,0x27,0x3f,0x49,0x6a,0xcc,0xcf,0x29,0x6f,0xbd,0xf5,0x56, + 0x52,0xf3,0xe1,0xb0,0x0,0x41,0xa7,0xed,0xb7,0xbf,0x8c,0xaa,0xf5,0x8c,0x7d,0x79, + 0xab,0x6c,0xd1,0xb3,0xfb,0x6c,0xd7,0xae,0x5d,0xb6,0x6b,0xdf,0x3e,0x7b,0xf6,0x95, + 0xd3,0xe1,0x5a,0x2,0x88,0xe0,0x3f,0xf4,0xa2,0x2a,0x80,0x63,0x4a,0x14,0xff,0xdc, + 0x63,0x54,0x7,0x71,0x8f,0xf7,0x82,0xa8,0x2,0x51,0x35,0x97,0x8a,0xa8,0x86,0xb4, + 0x9f,0x8b,0x9b,0xb1,0x31,0x8b,0x22,0x91,0xa4,0x3c,0x1c,0xc8,0xee,0x9d,0x53,0x2f, + 0x79,0xad,0x78,0x9c,0x53,0xda,0xf6,0x5f,0xaf,0x74,0x88,0x7d,0xae,0x4a,0x45,0x95, + 0x40,0x9c,0xa3,0x4a,0xe4,0x22,0x5f,0x3d,0xf6,0xed,0xdb,0x37,0xf7,0xc,0x25,0xff, + 0x99,0x62,0xd7,0xf0,0x4a,0xf1,0x5a,0x53,0x53,0x93,0xb7,0x5,0x6e,0xab,0x8a,0xcd, + 0x1,0xaf,0x85,0x81,0x3e,0x70,0xc0,0xe,0xec,0xdf,0x2b,0x85,0x4b,0xaa,0xbf,0xf3, + 0xd,0x7b,0x36,0x47,0x90,0x58,0x35,0x82,0x41,0xbe,0x29,0xb9,0x6,0x3b,0x7f,0x45, + 0x5f,0x7f,0xfd,0xf5,0x1b,0x56,0xfd,0x67,0x3f,0xfb,0x99,0x97,0x9b,0x5,0xaa,0x9b, + 0x2b,0x8d,0x80,0x76,0x6e,0xc9,0x20,0x17,0xc0,0xe2,0x4,0xd9,0x5e,0x3b,0xf0,0x97, + 0x9f,0xda,0xb7,0xf7,0xec,0xb1,0x3d,0xdf,0xfe,0xa9,0xfd,0x7c,0xff,0x1c,0x45,0x76, + 0xac,0x3d,0x1c,0x31,0x61,0x6,0xc4,0xa4,0x51,0x97,0x78,0xc,0x18,0x3c,0xe7,0xb9, + 0x93,0x78,0xee,0xb9,0xe7,0x92,0xa3,0x80,0xef,0x7d,0xef,0x7b,0xfe,0x1d,0x6d,0x18, + 0x58,0x8a,0xd,0x2,0xf9,0xa4,0x7e,0xf3,0x9b,0xdf,0xf4,0xef,0x68,0xf3,0x0,0x63, + 0xba,0x65,0x24,0x92,0x94,0x87,0x5c,0x15,0xcb,0xf3,0x60,0x7,0xf6,0xde,0xa0,0x66, + 0xf9,0xea,0x52,0xa8,0xe4,0x8b,0x39,0xaa,0x10,0x9f,0xa3,0xe,0xcf,0x47,0x89,0xf7, + 0x73,0x2d,0xbf,0xc4,0x6b,0x51,0xc5,0xe2,0xfd,0xb4,0x95,0x7b,0x8d,0xbe,0xf8,0x8e, + 0xcf,0xd0,0x3e,0xb8,0x15,0x15,0x5b,0xd0,0xcd,0x1f,0xd8,0x1b,0xed,0xcd,0x5e,0xd1, + 0x35,0x8f,0xf6,0xfd,0x6d,0x73,0x4,0xed,0x4d,0x2e,0x30,0xd0,0x67,0x9e,0x79,0xc6, + 0x3b,0xc7,0xe,0x31,0xc0,0x68,0x8f,0xa8,0xe7,0x3c,0xe,0x32,0xe,0x9a,0xba,0xfc, + 0x9,0x14,0xb3,0x33,0xf9,0xd7,0x88,0x98,0x23,0x31,0xb4,0x55,0xe8,0xb9,0x68,0x9b, + 0xde,0x7e,0xfb,0x6d,0x3f,0x5f,0x56,0x82,0xa,0x49,0x4a,0x56,0x29,0xc7,0x9c,0x64, + 0xe5,0x11,0x17,0x3b,0x8f,0x31,0x50,0x9c,0x7c,0xfe,0x44,0x31,0xa0,0xc,0x9c,0xfa, + 0xf,0x43,0x10,0x88,0x6d,0x41,0x56,0xfe,0x35,0x48,0xe1,0x3c,0x37,0xad,0xb8,0x15, + 0x82,0x16,0xb6,0x41,0x7b,0xbe,0x6b,0xd1,0xdc,0x1c,0xfc,0xce,0x5d,0x61,0xd3,0x4b, + 0x29,0x47,0xb4,0x1e,0x6d,0xfb,0xbf,0x6b,0x7b,0x92,0x63,0x10,0x6d,0x4e,0xae,0xbe, + 0x47,0x83,0x9d,0xb,0x62,0x97,0x57,0x5f,0x7d,0xf5,0x86,0xfa,0x42,0x20,0x34,0x88, + 0xa5,0x10,0x88,0x7f,0xda,0xdb,0xdb,0xb,0xb6,0x15,0x6d,0xd0,0x43,0xf,0x3d,0xe4, + 0xdf,0x85,0x80,0x6d,0xcb,0xb5,0x55,0x5,0x91,0x10,0xb5,0x0,0xda,0x3d,0x49,0xe5, + 0xb6,0xf9,0xd2,0x26,0xd5,0xba,0x31,0xae,0x8e,0x62,0xfe,0xda,0x6b,0xaf,0xcd,0xad, + 0xf6,0x62,0x2b,0x55,0x4c,0x82,0x8a,0x95,0x28,0x25,0x11,0xb9,0xcf,0x71,0x1c,0x25, + 0x85,0xc2,0x78,0x22,0x62,0xfd,0x42,0x52,0x57,0x8,0x8b,0x10,0x14,0xd1,0xae,0x8c, + 0x9e,0x92,0x9c,0x2e,0x80,0xdc,0x8e,0x8a,0x75,0x1a,0x11,0x6d,0x44,0x21,0x82,0x20, + 0x3c,0xbf,0x2c,0x34,0xa1,0xdc,0xe7,0xe4,0x21,0xe7,0x6c,0x13,0xf6,0x2f,0x17,0x51, + 0xed,0x72,0xb,0xb6,0xb2,0x18,0x3e,0xb2,0xfd,0x20,0xd4,0x26,0x7f,0xf,0x27,0xb7, + 0x8e,0x74,0x21,0x57,0x75,0x8a,0x5d,0x3,0xa8,0xb,0x40,0x85,0x51,0x77,0x49,0x8e, + 0xb7,0x9b,0x7f,0x1f,0x2a,0x95,0xab,0xb2,0xf4,0x9b,0x9b,0x38,0xe7,0xe3,0x23,0xdd, + 0x30,0x8b,0x3,0xcd,0x27,0x2,0x14,0xb2,0x2b,0xc5,0xae,0xdd,0x2e,0x7c,0xa4,0x4, + 0x7d,0xfc,0x61,0xf6,0xbf,0x41,0x70,0xe8,0xa8,0x41,0x4a,0x36,0xf6,0x0,0x0,0x0, + 0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/cam7_no.png + 0x0,0x0,0x25,0x9, + 0x89, + 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, + 0x0,0x0,0x48,0x0,0x0,0x0,0x48,0x8,0x6,0x0,0x0,0x0,0x55,0xed,0xb3,0x47, + 0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13, + 0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0xa,0x4d,0x69,0x43,0x43,0x50,0x50,0x68,0x6f, + 0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66,0x69, + 0x6c,0x65,0x0,0x0,0x78,0xda,0x9d,0x53,0x77,0x58,0x93,0xf7,0x16,0x3e,0xdf,0xf7, + 0x65,0xf,0x56,0x42,0xd8,0xf0,0xb1,0x97,0x6c,0x81,0x0,0x22,0x23,0xac,0x8,0xc8, + 0x10,0x59,0xa2,0x10,0x92,0x0,0x61,0x84,0x10,0x12,0x40,0xc5,0x85,0x88,0xa,0x56, + 0x14,0x15,0x11,0x9c,0x48,0x55,0xc4,0x82,0xd5,0xa,0x48,0x9d,0x88,0xe2,0xa0,0x28, + 0xb8,0x67,0x41,0x8a,0x88,0x5a,0x8b,0x55,0x5c,0x38,0xee,0x1f,0xdc,0xa7,0xb5,0x7d, + 0x7a,0xef,0xed,0xed,0xfb,0xd7,0xfb,0xbc,0xe7,0x9c,0xe7,0xfc,0xce,0x79,0xcf,0xf, + 0x80,0x11,0x12,0x26,0x91,0xe6,0xa2,0x6a,0x0,0x39,0x52,0x85,0x3c,0x3a,0xd8,0x1f, + 0x8f,0x4f,0x48,0xc4,0xc9,0xbd,0x80,0x2,0x15,0x48,0xe0,0x4,0x20,0x10,0xe6,0xcb, + 0xc2,0x67,0x5,0xc5,0x0,0x0,0xf0,0x3,0x79,0x78,0x7e,0x74,0xb0,0x3f,0xfc,0x1, + 0xaf,0x6f,0x0,0x2,0x0,0x70,0xd5,0x2e,0x24,0x12,0xc7,0xe1,0xff,0x83,0xba,0x50, + 0x26,0x57,0x0,0x20,0x91,0x0,0xe0,0x22,0x12,0xe7,0xb,0x1,0x90,0x52,0x0,0xc8, + 0x2e,0x54,0xc8,0x14,0x0,0xc8,0x18,0x0,0xb0,0x53,0xb3,0x64,0xa,0x0,0x94,0x0, + 0x0,0x6c,0x79,0x7c,0x42,0x22,0x0,0xaa,0xd,0x0,0xec,0xf4,0x49,0x3e,0x5,0x0, + 0xd8,0xa9,0x93,0xdc,0x17,0x0,0xd8,0xa2,0x1c,0xa9,0x8,0x0,0x8d,0x1,0x0,0x99, + 0x28,0x47,0x24,0x2,0x40,0xbb,0x0,0x60,0x55,0x81,0x52,0x2c,0x2,0xc0,0xc2,0x0, + 0xa0,0xac,0x40,0x22,0x2e,0x4,0xc0,0xae,0x1,0x80,0x59,0xb6,0x32,0x47,0x2,0x80, + 0xbd,0x5,0x0,0x76,0x8e,0x58,0x90,0xf,0x40,0x60,0x0,0x80,0x99,0x42,0x2c,0xcc, + 0x0,0x20,0x38,0x2,0x0,0x43,0x1e,0x13,0xcd,0x3,0x20,0x4c,0x3,0xa0,0x30,0xd2, + 0xbf,0xe0,0xa9,0x5f,0x70,0x85,0xb8,0x48,0x1,0x0,0xc0,0xcb,0x95,0xcd,0x97,0x4b, + 0xd2,0x33,0x14,0xb8,0x95,0xd0,0x1a,0x77,0xf2,0xf0,0xe0,0xe2,0x21,0xe2,0xc2,0x6c, + 0xb1,0x42,0x61,0x17,0x29,0x10,0x66,0x9,0xe4,0x22,0x9c,0x97,0x9b,0x23,0x13,0x48, + 0xe7,0x3,0x4c,0xce,0xc,0x0,0x0,0x1a,0xf9,0xd1,0xc1,0xfe,0x38,0x3f,0x90,0xe7, + 0xe6,0xe4,0xe1,0xe6,0x66,0xe7,0x6c,0xef,0xf4,0xc5,0xa2,0xfe,0x6b,0xf0,0x6f,0x22, + 0x3e,0x21,0xf1,0xdf,0xfe,0xbc,0x8c,0x2,0x4,0x0,0x10,0x4e,0xcf,0xef,0xda,0x5f, + 0xe5,0xe5,0xd6,0x3,0x70,0xc7,0x1,0xb0,0x75,0xbf,0x6b,0xa9,0x5b,0x0,0xda,0x56, + 0x0,0x68,0xdf,0xf9,0x5d,0x33,0xdb,0x9,0xa0,0x5a,0xa,0xd0,0x7a,0xf9,0x8b,0x79, + 0x38,0xfc,0x40,0x1e,0x9e,0xa1,0x50,0xc8,0x3c,0x1d,0x1c,0xa,0xb,0xb,0xed,0x25, + 0x62,0xa1,0xbd,0x30,0xe3,0x8b,0x3e,0xff,0x33,0xe1,0x6f,0xe0,0x8b,0x7e,0xf6,0xfc, + 0x40,0x1e,0xfe,0xdb,0x7a,0xf0,0x0,0x71,0x9a,0x40,0x99,0xad,0xc0,0xa3,0x83,0xfd, + 0x71,0x61,0x6e,0x76,0xae,0x52,0x8e,0xe7,0xcb,0x4,0x42,0x31,0x6e,0xf7,0xe7,0x23, + 0xfe,0xc7,0x85,0x7f,0xfd,0x8e,0x29,0xd1,0xe2,0x34,0xb1,0x5c,0x2c,0x15,0x8a,0xf1, + 0x58,0x89,0xb8,0x50,0x22,0x4d,0xc7,0x79,0xb9,0x52,0x91,0x44,0x21,0xc9,0x95,0xe2, + 0x12,0xe9,0x7f,0x32,0xf1,0x1f,0x96,0xfd,0x9,0x93,0x77,0xd,0x0,0xac,0x86,0x4f, + 0xc0,0x4e,0xb6,0x7,0xb5,0xcb,0x6c,0xc0,0x7e,0xee,0x1,0x2,0x8b,0xe,0x58,0xd2, + 0x76,0x0,0x40,0x7e,0xf3,0x2d,0x8c,0x1a,0xb,0x91,0x0,0x10,0x67,0x34,0x32,0x79, + 0xf7,0x0,0x0,0x93,0xbf,0xf9,0x8f,0x40,0x2b,0x1,0x0,0xcd,0x97,0xa4,0xe3,0x0, + 0x0,0xbc,0xe8,0x18,0x5c,0xa8,0x94,0x17,0x4c,0xc6,0x8,0x0,0x0,0x44,0xa0,0x81, + 0x2a,0xb0,0x41,0x7,0xc,0xc1,0x14,0xac,0xc0,0xe,0x9c,0xc1,0x1d,0xbc,0xc0,0x17, + 0x2,0x61,0x6,0x44,0x40,0xc,0x24,0xc0,0x3c,0x10,0x42,0x6,0xe4,0x80,0x1c,0xa, + 0xa1,0x18,0x96,0x41,0x19,0x54,0xc0,0x3a,0xd8,0x4,0xb5,0xb0,0x3,0x1a,0xa0,0x11, + 0x9a,0xe1,0x10,0xb4,0xc1,0x31,0x38,0xd,0xe7,0xe0,0x12,0x5c,0x81,0xeb,0x70,0x17, + 0x6,0x60,0x18,0x9e,0xc2,0x18,0xbc,0x86,0x9,0x4,0x41,0xc8,0x8,0x13,0x61,0x21, + 0x3a,0x88,0x11,0x62,0x8e,0xd8,0x22,0xce,0x8,0x17,0x99,0x8e,0x4,0x22,0x61,0x48, + 0x34,0x92,0x80,0xa4,0x20,0xe9,0x88,0x14,0x51,0x22,0xc5,0xc8,0x72,0xa4,0x2,0xa9, + 0x42,0x6a,0x91,0x5d,0x48,0x23,0xf2,0x2d,0x72,0x14,0x39,0x8d,0x5c,0x40,0xfa,0x90, + 0xdb,0xc8,0x20,0x32,0x8a,0xfc,0x8a,0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3,0xd4, + 0x2,0x75,0x40,0xb9,0xa8,0x1f,0x1a,0x8a,0xc6,0xa0,0x73,0xd1,0x74,0x34,0xf,0x5d, + 0x80,0x96,0xa2,0x6b,0xd1,0x1a,0xb4,0x1e,0x3d,0x80,0xb6,0xa2,0xa7,0xd1,0x4b,0xe8, + 0x75,0x74,0x0,0x7d,0x8a,0x8e,0x63,0x80,0xd1,0x31,0xe,0x66,0x8c,0xd9,0x61,0x5c, + 0x8c,0x87,0x45,0x60,0x89,0x58,0x1a,0x26,0xc7,0x16,0x63,0xe5,0x58,0x35,0x56,0x8f, + 0x35,0x63,0x1d,0x58,0x37,0x76,0x15,0x1b,0xc0,0x9e,0x61,0xef,0x8,0x24,0x2,0x8b, + 0x80,0x13,0xec,0x8,0x5e,0x84,0x10,0xc2,0x6c,0x82,0x90,0x90,0x47,0x58,0x4c,0x58, + 0x43,0xa8,0x25,0xec,0x23,0xb4,0x12,0xba,0x8,0x57,0x9,0x83,0x84,0x31,0xc2,0x27, + 0x22,0x93,0xa8,0x4f,0xb4,0x25,0x7a,0x12,0xf9,0xc4,0x78,0x62,0x3a,0xb1,0x90,0x58, + 0x46,0xac,0x26,0xee,0x21,0x1e,0x21,0x9e,0x25,0x5e,0x27,0xe,0x13,0x5f,0x93,0x48, + 0x24,0xe,0xc9,0x92,0xe4,0x4e,0xa,0x21,0x25,0x90,0x32,0x49,0xb,0x49,0x6b,0x48, + 0xdb,0x48,0x2d,0xa4,0x53,0xa4,0x3e,0xd2,0x10,0x69,0x9c,0x4c,0x26,0xeb,0x90,0x6d, + 0xc9,0xde,0xe4,0x8,0xb2,0x80,0xac,0x20,0x97,0x91,0xb7,0x90,0xf,0x90,0x4f,0x92, + 0xfb,0xc9,0xc3,0xe4,0xb7,0x14,0x3a,0xc5,0x88,0xe2,0x4c,0x9,0xa2,0x24,0x52,0xa4, + 0x94,0x12,0x4a,0x35,0x65,0x3f,0xe5,0x4,0xa5,0x9f,0x32,0x42,0x99,0xa0,0xaa,0x51, + 0xcd,0xa9,0x9e,0xd4,0x8,0xaa,0x88,0x3a,0x9f,0x5a,0x49,0x6d,0xa0,0x76,0x50,0x2f, + 0x53,0x87,0xa9,0x13,0x34,0x75,0x9a,0x25,0xcd,0x9b,0x16,0x43,0xcb,0xa4,0x2d,0xa3, + 0xd5,0xd0,0x9a,0x69,0x67,0x69,0xf7,0x68,0x2f,0xe9,0x74,0xba,0x9,0xdd,0x83,0x1e, + 0x45,0x97,0xd0,0x97,0xd2,0x6b,0xe8,0x7,0xe9,0xe7,0xe9,0x83,0xf4,0x77,0xc,0xd, + 0x86,0xd,0x83,0xc7,0x48,0x62,0x28,0x19,0x6b,0x19,0x7b,0x19,0xa7,0x18,0xb7,0x19, + 0x2f,0x99,0x4c,0xa6,0x5,0xd3,0x97,0x99,0xc8,0x54,0x30,0xd7,0x32,0x1b,0x99,0x67, + 0x98,0xf,0x98,0x6f,0x55,0x58,0x2a,0xf6,0x2a,0x7c,0x15,0x91,0xca,0x12,0x95,0x3a, + 0x95,0x56,0x95,0x7e,0x95,0xe7,0xaa,0x54,0x55,0x73,0x55,0x3f,0xd5,0x79,0xaa,0xb, + 0x54,0xab,0x55,0xf,0xab,0x5e,0x56,0x7d,0xa6,0x46,0x55,0xb3,0x50,0xe3,0xa9,0x9, + 0xd4,0x16,0xab,0xd5,0xa9,0x1d,0x55,0xbb,0xa9,0x36,0xae,0xce,0x52,0x77,0x52,0x8f, + 0x50,0xcf,0x51,0x5f,0xa3,0xbe,0x5f,0xfd,0x82,0xfa,0x63,0xd,0xb2,0x86,0x85,0x46, + 0xa0,0x86,0x48,0xa3,0x54,0x63,0xb7,0xc6,0x19,0x8d,0x21,0x16,0xc6,0x32,0x65,0xf1, + 0x58,0x42,0xd6,0x72,0x56,0x3,0xeb,0x2c,0x6b,0x98,0x4d,0x62,0x5b,0xb2,0xf9,0xec, + 0x4c,0x76,0x5,0xfb,0x1b,0x76,0x2f,0x7b,0x4c,0x53,0x43,0x73,0xaa,0x66,0xac,0x66, + 0x91,0x66,0x9d,0xe6,0x71,0xcd,0x1,0xe,0xc6,0xb1,0xe0,0xf0,0x39,0xd9,0x9c,0x4a, + 0xce,0x21,0xce,0xd,0xce,0x7b,0x2d,0x3,0x2d,0x3f,0x2d,0xb1,0xd6,0x6a,0xad,0x66, + 0xad,0x7e,0xad,0x37,0xda,0x7a,0xda,0xbe,0xda,0x62,0xed,0x72,0xed,0x16,0xed,0xeb, + 0xda,0xef,0x75,0x70,0x9d,0x40,0x9d,0x2c,0x9d,0xf5,0x3a,0x6d,0x3a,0xf7,0x75,0x9, + 0xba,0x36,0xba,0x51,0xba,0x85,0xba,0xdb,0x75,0xcf,0xea,0x3e,0xd3,0x63,0xeb,0x79, + 0xe9,0x9,0xf5,0xca,0xf5,0xe,0xe9,0xdd,0xd1,0x47,0xf5,0x6d,0xf4,0xa3,0xf5,0x17, + 0xea,0xef,0xd6,0xef,0xd1,0x1f,0x37,0x30,0x34,0x8,0x36,0x90,0x19,0x6c,0x31,0x38, + 0x63,0xf0,0xcc,0x90,0x63,0xe8,0x6b,0x98,0x69,0xb8,0xd1,0xf0,0x84,0xe1,0xa8,0x11, + 0xcb,0x68,0xba,0x91,0xc4,0x68,0xa3,0xd1,0x49,0xa3,0x27,0xb8,0x26,0xee,0x87,0x67, + 0xe3,0x35,0x78,0x17,0x3e,0x66,0xac,0x6f,0x1c,0x62,0xac,0x34,0xde,0x65,0xdc,0x6b, + 0x3c,0x61,0x62,0x69,0x32,0xdb,0xa4,0xc4,0xa4,0xc5,0xe4,0xbe,0x29,0xcd,0x94,0x6b, + 0x9a,0x66,0xba,0xd1,0xb4,0xd3,0x74,0xcc,0xcc,0xc8,0x2c,0xdc,0xac,0xd8,0xac,0xc9, + 0xec,0x8e,0x39,0xd5,0x9c,0x6b,0x9e,0x61,0xbe,0xd9,0xbc,0xdb,0xfc,0x8d,0x85,0xa5, + 0x45,0x9c,0xc5,0x4a,0x8b,0x36,0x8b,0xc7,0x96,0xda,0x96,0x7c,0xcb,0x5,0x96,0x4d, + 0x96,0xf7,0xac,0x98,0x56,0x3e,0x56,0x79,0x56,0xf5,0x56,0xd7,0xac,0x49,0xd6,0x5c, + 0xeb,0x2c,0xeb,0x6d,0xd6,0x57,0x6c,0x50,0x1b,0x57,0x9b,0xc,0x9b,0x3a,0x9b,0xcb, + 0xb6,0xa8,0xad,0x9b,0xad,0xc4,0x76,0x9b,0x6d,0xdf,0x14,0xe2,0x14,0x8f,0x29,0xd2, + 0x29,0xf5,0x53,0x6e,0xda,0x31,0xec,0xfc,0xec,0xa,0xec,0x9a,0xec,0x6,0xed,0x39, + 0xf6,0x61,0xf6,0x25,0xf6,0x6d,0xf6,0xcf,0x1d,0xcc,0x1c,0x12,0x1d,0xd6,0x3b,0x74, + 0x3b,0x7c,0x72,0x74,0x75,0xcc,0x76,0x6c,0x70,0xbc,0xeb,0xa4,0xe1,0x34,0xc3,0xa9, + 0xc4,0xa9,0xc3,0xe9,0x57,0x67,0x1b,0x67,0xa1,0x73,0x9d,0xf3,0x35,0x17,0xa6,0x4b, + 0x90,0xcb,0x12,0x97,0x76,0x97,0x17,0x53,0x6d,0xa7,0x8a,0xa7,0x6e,0x9f,0x7a,0xcb, + 0x95,0xe5,0x1a,0xee,0xba,0xd2,0xb5,0xd3,0xf5,0xa3,0x9b,0xbb,0x9b,0xdc,0xad,0xd9, + 0x6d,0xd4,0xdd,0xcc,0x3d,0xc5,0x7d,0xab,0xfb,0x4d,0x2e,0x9b,0x1b,0xc9,0x5d,0xc3, + 0x3d,0xef,0x41,0xf4,0xf0,0xf7,0x58,0xe2,0x71,0xcc,0xe3,0x9d,0xa7,0x9b,0xa7,0xc2, + 0xf3,0x90,0xe7,0x2f,0x5e,0x76,0x5e,0x59,0x5e,0xfb,0xbd,0x1e,0x4f,0xb3,0x9c,0x26, + 0x9e,0xd6,0x30,0x6d,0xc8,0xdb,0xc4,0x5b,0xe0,0xbd,0xcb,0x7b,0x60,0x3a,0x3e,0x3d, + 0x65,0xfa,0xce,0xe9,0x3,0x3e,0xc6,0x3e,0x2,0x9f,0x7a,0x9f,0x87,0xbe,0xa6,0xbe, + 0x22,0xdf,0x3d,0xbe,0x23,0x7e,0xd6,0x7e,0x99,0x7e,0x7,0xfc,0x9e,0xfb,0x3b,0xfa, + 0xcb,0xfd,0x8f,0xf8,0xbf,0xe1,0x79,0xf2,0x16,0xf1,0x4e,0x5,0x60,0x1,0xc1,0x1, + 0xe5,0x1,0xbd,0x81,0x1a,0x81,0xb3,0x3,0x6b,0x3,0x1f,0x4,0x99,0x4,0xa5,0x7, + 0x35,0x5,0x8d,0x5,0xbb,0x6,0x2f,0xc,0x3e,0x15,0x42,0xc,0x9,0xd,0x59,0x1f, + 0x72,0x93,0x6f,0xc0,0x17,0xf2,0x1b,0xf9,0x63,0x33,0xdc,0x67,0x2c,0x9a,0xd1,0x15, + 0xca,0x8,0x9d,0x15,0x5a,0x1b,0xfa,0x30,0xcc,0x26,0x4c,0x1e,0xd6,0x11,0x8e,0x86, + 0xcf,0x8,0xdf,0x10,0x7e,0x6f,0xa6,0xf9,0x4c,0xe9,0xcc,0xb6,0x8,0x88,0xe0,0x47, + 0x6c,0x88,0xb8,0x1f,0x69,0x19,0x99,0x17,0xf9,0x7d,0x14,0x29,0x2a,0x32,0xaa,0x2e, + 0xea,0x51,0xb4,0x53,0x74,0x71,0x74,0xf7,0x2c,0xd6,0xac,0xe4,0x59,0xfb,0x67,0xbd, + 0x8e,0xf1,0x8f,0xa9,0x8c,0xb9,0x3b,0xdb,0x6a,0xb6,0x72,0x76,0x67,0xac,0x6a,0x6c, + 0x52,0x6c,0x63,0xec,0x9b,0xb8,0x80,0xb8,0xaa,0xb8,0x81,0x78,0x87,0xf8,0x45,0xf1, + 0x97,0x12,0x74,0x13,0x24,0x9,0xed,0x89,0xe4,0xc4,0xd8,0xc4,0x3d,0x89,0xe3,0x73, + 0x2,0xe7,0x6c,0x9a,0x33,0x9c,0xe4,0x9a,0x54,0x96,0x74,0x63,0xae,0xe5,0xdc,0xa2, + 0xb9,0x17,0xe6,0xe9,0xce,0xcb,0x9e,0x77,0x3c,0x59,0x35,0x59,0x90,0x7c,0x38,0x85, + 0x98,0x12,0x97,0xb2,0x3f,0xe5,0x83,0x20,0x42,0x50,0x2f,0x18,0x4f,0xe5,0xa7,0x6e, + 0x4d,0x1d,0x13,0xf2,0x84,0x9b,0x85,0x4f,0x45,0xbe,0xa2,0x8d,0xa2,0x51,0xb1,0xb7, + 0xb8,0x4a,0x3c,0x92,0xe6,0x9d,0x56,0x95,0xf6,0x38,0xdd,0x3b,0x7d,0x43,0xfa,0x68, + 0x86,0x4f,0x46,0x75,0xc6,0x33,0x9,0x4f,0x52,0x2b,0x79,0x91,0x19,0x92,0xb9,0x23, + 0xf3,0x4d,0x56,0x44,0xd6,0xde,0xac,0xcf,0xd9,0x71,0xd9,0x2d,0x39,0x94,0x9c,0x94, + 0x9c,0xa3,0x52,0xd,0x69,0x96,0xb4,0x2b,0xd7,0x30,0xb7,0x28,0xb7,0x4f,0x66,0x2b, + 0x2b,0x93,0xd,0xe4,0x79,0xe6,0x6d,0xca,0x1b,0x93,0x87,0xca,0xf7,0xe4,0x23,0xf9, + 0x73,0xf3,0xdb,0x15,0x6c,0x85,0x4c,0xd1,0xa3,0xb4,0x52,0xae,0x50,0xe,0x16,0x4c, + 0x2f,0xa8,0x2b,0x78,0x5b,0x18,0x5b,0x78,0xb8,0x48,0xbd,0x48,0x5a,0xd4,0x33,0xdf, + 0x66,0xfe,0xea,0xf9,0x23,0xb,0x82,0x16,0x7c,0xbd,0x90,0xb0,0x50,0xb8,0xb0,0xb3, + 0xd8,0xb8,0x78,0x59,0xf1,0xe0,0x22,0xbf,0x45,0xbb,0x16,0x23,0x8b,0x53,0x17,0x77, + 0x2e,0x31,0x5d,0x52,0xba,0x64,0x78,0x69,0xf0,0xd2,0x7d,0xcb,0x68,0xcb,0xb2,0x96, + 0xfd,0x50,0xe2,0x58,0x52,0x55,0xf2,0x6a,0x79,0xdc,0xf2,0x8e,0x52,0x83,0xd2,0xa5, + 0xa5,0x43,0x2b,0x82,0x57,0x34,0x95,0xa9,0x94,0xc9,0xcb,0x6e,0xae,0xf4,0x5a,0xb9, + 0x63,0x15,0x61,0x95,0x64,0x55,0xef,0x6a,0x97,0xd5,0x5b,0x56,0x7f,0x2a,0x17,0x95, + 0x5f,0xac,0x70,0xac,0xa8,0xae,0xf8,0xb0,0x46,0xb8,0xe6,0xe2,0x57,0x4e,0x5f,0xd5, + 0x7c,0xf5,0x79,0x6d,0xda,0xda,0xde,0x4a,0xb7,0xca,0xed,0xeb,0x48,0xeb,0xa4,0xeb, + 0x6e,0xac,0xf7,0x59,0xbf,0xaf,0x4a,0xbd,0x6a,0x41,0xd5,0xd0,0x86,0xf0,0xd,0xad, + 0x1b,0xf1,0x8d,0xe5,0x1b,0x5f,0x6d,0x4a,0xde,0x74,0xa1,0x7a,0x6a,0xf5,0x8e,0xcd, + 0xb4,0xcd,0xca,0xcd,0x3,0x35,0x61,0x35,0xed,0x5b,0xcc,0xb6,0xac,0xdb,0xf2,0xa1, + 0x36,0xa3,0xf6,0x7a,0x9d,0x7f,0x5d,0xcb,0x56,0xfd,0xad,0xab,0xb7,0xbe,0xd9,0x26, + 0xda,0xd6,0xbf,0xdd,0x77,0x7b,0xf3,0xe,0x83,0x1d,0x15,0x3b,0xde,0xef,0x94,0xec, + 0xbc,0xb5,0x2b,0x78,0x57,0x6b,0xbd,0x45,0x7d,0xf5,0x6e,0xd2,0xee,0x82,0xdd,0x8f, + 0x1a,0x62,0x1b,0xba,0xbf,0xe6,0x7e,0xdd,0xb8,0x47,0x77,0x4f,0xc5,0x9e,0x8f,0x7b, + 0xa5,0x7b,0x7,0xf6,0x45,0xef,0xeb,0x6a,0x74,0x6f,0x6c,0xdc,0xaf,0xbf,0xbf,0xb2, + 0x9,0x6d,0x52,0x36,0x8d,0x1e,0x48,0x3a,0x70,0xe5,0x9b,0x80,0x6f,0xda,0x9b,0xed, + 0x9a,0x77,0xb5,0x70,0x5a,0x2a,0xe,0xc2,0x41,0xe5,0xc1,0x27,0xdf,0xa6,0x7c,0x7b, + 0xe3,0x50,0xe8,0xa1,0xce,0xc3,0xdc,0xc3,0xcd,0xdf,0x99,0x7f,0xb7,0xf5,0x8,0xeb, + 0x48,0x79,0x2b,0xd2,0x3a,0xbf,0x75,0xac,0x2d,0xa3,0x6d,0xa0,0x3d,0xa1,0xbd,0xef, + 0xe8,0x8c,0xa3,0x9d,0x1d,0x5e,0x1d,0x47,0xbe,0xb7,0xff,0x7e,0xef,0x31,0xe3,0x63, + 0x75,0xc7,0x35,0x8f,0x57,0x9e,0xa0,0x9d,0x28,0x3d,0xf1,0xf9,0xe4,0x82,0x93,0xe3, + 0xa7,0x64,0xa7,0x9e,0x9d,0x4e,0x3f,0x3d,0xd4,0x99,0xdc,0x79,0xf7,0x4c,0xfc,0x99, + 0x6b,0x5d,0x51,0x5d,0xbd,0x67,0x43,0xcf,0x9e,0x3f,0x17,0x74,0xee,0x4c,0xb7,0x5f, + 0xf7,0xc9,0xf3,0xde,0xe7,0x8f,0x5d,0xf0,0xbc,0x70,0xf4,0x22,0xf7,0x62,0xdb,0x25, + 0xb7,0x4b,0xad,0x3d,0xae,0x3d,0x47,0x7e,0x70,0xfd,0xe1,0x48,0xaf,0x5b,0x6f,0xeb, + 0x65,0xf7,0xcb,0xed,0x57,0x3c,0xae,0x74,0xf4,0x4d,0xeb,0x3b,0xd1,0xef,0xd3,0x7f, + 0xfa,0x6a,0xc0,0xd5,0x73,0xd7,0xf8,0xd7,0x2e,0x5d,0x9f,0x79,0xbd,0xef,0xc6,0xec, + 0x1b,0xb7,0x6e,0x26,0xdd,0x1c,0xb8,0x25,0xba,0xf5,0xf8,0x76,0xf6,0xed,0x17,0x77, + 0xa,0xee,0x4c,0xdc,0x5d,0x7a,0x8f,0x78,0xaf,0xfc,0xbe,0xda,0xfd,0xea,0x7,0xfa, + 0xf,0xea,0x7f,0xb4,0xfe,0xb1,0x65,0xc0,0x6d,0xe0,0xf8,0x60,0xc0,0x60,0xcf,0xc3, + 0x59,0xf,0xef,0xe,0x9,0x87,0x9e,0xfe,0x94,0xff,0xd3,0x87,0xe1,0xd2,0x47,0xcc, + 0x47,0xd5,0x23,0x46,0x23,0x8d,0x8f,0x9d,0x1f,0x1f,0x1b,0xd,0x1a,0xbd,0xf2,0x64, + 0xce,0x93,0xe1,0xa7,0xb2,0xa7,0x13,0xcf,0xca,0x7e,0x56,0xff,0x79,0xeb,0x73,0xab, + 0xe7,0xdf,0xfd,0xe2,0xfb,0x4b,0xcf,0x58,0xfc,0xd8,0xf0,0xb,0xf9,0x8b,0xcf,0xbf, + 0xae,0x79,0xa9,0xf3,0x72,0xef,0xab,0xa9,0xaf,0x3a,0xc7,0x23,0xc7,0x1f,0xbc,0xce, + 0x79,0x3d,0xf1,0xa6,0xfc,0xad,0xce,0xdb,0x7d,0xef,0xb8,0xef,0xba,0xdf,0xc7,0xbd, + 0x1f,0x99,0x28,0xfc,0x40,0xfe,0x50,0xf3,0xd1,0xfa,0x63,0xc7,0xa7,0xd0,0x4f,0xf7, + 0x3e,0xe7,0x7c,0xfe,0xfc,0x2f,0xf7,0x84,0xf3,0xfb,0x25,0xd2,0x9f,0x33,0x0,0x0, + 0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x25,0x0,0x0,0x80,0x83,0x0,0x0, + 0xf9,0xff,0x0,0x0,0x80,0xe9,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0, + 0x3a,0x98,0x0,0x0,0x17,0x6f,0x92,0x5f,0xc5,0x46,0x0,0x0,0x1a,0x36,0x49,0x44, + 0x41,0x54,0x78,0xda,0xec,0x9b,0x79,0x90,0x64,0x57,0x95,0xde,0x7f,0xf7,0xde,0xb7, + 0xe5,0x5e,0x95,0xb5,0x74,0x55,0xf5,0x56,0x6a,0x95,0x5a,0xea,0x96,0xa0,0xd5,0x5a, + 0x91,0xd8,0x24,0x10,0x1a,0xf,0x42,0x48,0xc,0x1e,0x8f,0xf0,0xe0,0x80,0x9,0x8, + 0xf,0xe,0xd9,0x1,0x1a,0x3b,0x58,0x26,0xc6,0xd0,0x18,0x18,0x2,0x83,0x1,0x31, + 0xe3,0x8,0x1,0xc3,0x48,0x98,0x61,0x31,0x1a,0x16,0x49,0x30,0x6c,0x16,0x68,0x19, + 0xc4,0x62,0x63,0x24,0x81,0x84,0xd5,0x52,0xef,0xb5,0x57,0x56,0x55,0x56,0x55,0x6e, + 0x6f,0xbb,0xd7,0x7f,0xbc,0x57,0x59,0xd9,0xd5,0xd5,0x5b,0x75,0x37,0xc8,0x8e,0xb9, + 0x15,0x15,0x99,0xf9,0xf2,0xe5,0xcb,0xf7,0xbe,0x77,0xce,0x77,0xbf,0xf3,0x9d,0x9b, + 0xc2,0x18,0xc3,0xb9,0x1e,0xcf,0x3c,0xfd,0xf4,0xf0,0xd3,0x4f,0x3d,0xf5,0xd2,0xd8, + 0x60,0x8f,0x6c,0xdf,0xfe,0xd3,0x6d,0xdb,0xce,0x7b,0xa6,0x58,0x2c,0xc6,0xfc,0xe, + 0xc7,0xe0,0xe0,0x40,0x6f,0xa1,0x50,0xb8,0xbe,0xa7,0xa7,0x7c,0x95,0x65,0xd9,0xd9, + 0x85,0x85,0x85,0xdf,0xcc,0xce,0xce,0x3e,0x28,0xa5,0x7c,0xe6,0xc8,0x91,0x51,0xbd, + 0xbc,0x9f,0x38,0xd7,0x0,0xfd,0xcf,0x9f,0xfc,0xe4,0xa6,0xb1,0xd1,0xb1,0x3f,0x37, + 0x30,0x12,0x6a,0xa8,0x35,0x1a,0xb,0xa5,0xae,0xd2,0x7f,0xff,0x67,0x37,0xde,0xf0, + 0xde,0x5c,0x2e,0x67,0x7e,0xdb,0xc0,0x9c,0x7f,0xfe,0x36,0x4b,0x8,0xf1,0xae,0x57, + 0xbf,0xfa,0xd5,0x1f,0xbc,0xe5,0x96,0x5b,0xe9,0xef,0xef,0x47,0x4a,0x49,0xa3,0xd1, + 0xe0,0xb1,0xc7,0x1e,0xe3,0xde,0x7b,0xef,0x7d,0xfa,0xc0,0x81,0xfd,0xbf,0x3f,0x36, + 0x36,0x7e,0xf8,0x9c,0x3,0xf4,0xd8,0xa3,0x8f,0xbc,0x61,0xec,0xc8,0xe8,0x7,0x10, + 0xea,0x7c,0xcb,0x71,0x88,0xd,0x34,0x5b,0x2d,0x8c,0xd1,0xd5,0xed,0x17,0x8c,0xbc, + 0x7d,0xe3,0xd0,0xd0,0x3,0x9b,0xb7,0x6c,0x9e,0xff,0x2d,0x82,0xa3,0x7a,0xca,0xe5, + 0x7,0xff,0xe2,0x3f,0x7d,0xe0,0xe5,0x57,0x5c,0x75,0x25,0x61,0xad,0x4e,0x14,0x45, + 0x18,0x63,0x90,0x52,0xe2,0x66,0xb3,0x2c,0xf9,0x3e,0x1f,0xff,0xcb,0xf,0xf1,0xed, + 0x7,0xbe,0x35,0x32,0x36,0x3e,0xbe,0xef,0x9c,0x1,0xf4,0xf0,0x8f,0x1e,0x7a,0xdb, + 0xe8,0x91,0xd1,0xf,0x39,0xb6,0x53,0x56,0xb6,0x83,0x1,0x8c,0x30,0x60,0x40,0x1b, + 0x83,0x80,0xb9,0x7c,0x21,0xf7,0x50,0xa9,0x54,0xfa,0xa9,0x63,0x3b,0x3f,0xcd,0x66, + 0x33,0x4f,0x6d,0xde,0xbc,0x69,0xbe,0x50,0x28,0x9c,0xb3,0x3b,0xb6,0x73,0xe7,0x8e, + 0x3d,0x1f,0xbb,0xf3,0xce,0xf7,0x5d,0x26,0x6d,0x96,0x96,0x96,0x30,0x97,0x5d,0xa, + 0xad,0x56,0xf2,0xa6,0x6d,0xc3,0xdc,0x1c,0xce,0x2f,0x9f,0x24,0xbe,0xe6,0x2a,0xde, + 0xb9,0xe7,0x7d,0x53,0x8f,0x3c,0xf4,0xf0,0x56,0xb5,0x67,0xcf,0x9e,0xb3,0x7e,0x22, + 0xf,0x3e,0xf8,0xc3,0x77,0x1c,0x3c,0x78,0xf8,0xaf,0x5c,0x37,0x93,0xb1,0x1c,0x7, + 0x23,0x40,0xb3,0x9c,0xd6,0x2,0x25,0x24,0xb1,0x8e,0x33,0xb5,0x7a,0x7d,0xc7,0xfc, + 0x5c,0xf5,0x55,0xf5,0x7a,0xe3,0x75,0x61,0x18,0x5e,0xb0,0xb8,0xb4,0xd4,0x57,0xab, + 0xd5,0xe4,0xc4,0xe4,0x94,0xef,0xd8,0x76,0x2b,0x93,0xc9,0x9c,0x35,0xb0,0x36,0x6c, + 0xd8,0xd0,0x7d,0xdb,0x6d,0xb7,0x7d,0xe7,0x75,0xb7,0xfd,0x11,0x4b,0xdf,0xb8,0x1f, + 0xf1,0x99,0xbb,0xe1,0xe2,0x1d,0xb0,0x71,0x30,0xd9,0x21,0x8,0x90,0xff,0xe5,0x53, + 0xe8,0x87,0x1f,0xc5,0xbb,0xf9,0xd5,0x6c,0xbe,0x70,0x7b,0xfe,0x87,0xff,0xe3,0x7, + 0x7,0xcf,0x7a,0x4,0x7d,0xf7,0x7b,0xdf,0xff,0xf,0x63,0xa3,0x63,0x1f,0xcd,0x64, + 0xb2,0x78,0x9e,0x47,0xac,0x35,0xd0,0xf9,0x1d,0x2,0x61,0xc,0x46,0x8,0x84,0x0, + 0x1d,0x6b,0xa2,0x28,0x22,0xd6,0x31,0x20,0x70,0x1c,0x87,0xee,0xae,0xd2,0x37,0xfb, + 0xfa,0xfa,0xee,0xf,0xc2,0xe0,0x67,0x61,0x18,0x8d,0x6d,0xd9,0xbc,0xb9,0xb6,0x65, + 0xcb,0xa6,0x33,0x22,0xf5,0x91,0x91,0x91,0x3f,0xbe,0xeb,0xae,0xbb,0xfe,0xee,0x82, + 0xb,0xb7,0xe3,0xb7,0x7c,0xe4,0x27,0xfe,0xa,0x9e,0xfc,0x35,0xfa,0x2f,0xf7,0xc0, + 0xf0,0x30,0xf2,0xc3,0x1f,0x85,0x5f,0x3f,0x8d,0x79,0xef,0x7b,0xe0,0x82,0x11,0x6c, + 0xe0,0x8e,0x3b,0xee,0x78,0xd2,0x3a,0x9b,0xe0,0xdc,0xff,0xc0,0xb7,0x3e,0x30,0x33, + 0x53,0xf9,0x8b,0x4c,0x36,0x8b,0xe7,0x7a,0xc4,0x71,0xbc,0x8c,0x9,0x18,0x81,0x0, + 0xc0,0x60,0x44,0xfa,0x1,0x3,0x42,0x8,0x6c,0xc7,0xc6,0x11,0xe,0xc6,0x18,0xa2, + 0x28,0x66,0x6a,0x7a,0xe6,0xd6,0x89,0xc9,0xc9,0x5b,0xb3,0xd9,0x1c,0xe5,0x72,0xf9, + 0x81,0x4a,0xa5,0xf2,0xb5,0x28,0xe,0x7f,0x3e,0x35,0x39,0x3d,0x5a,0x2c,0x16,0x1a, + 0x17,0x5f,0xbc,0x33,0x3e,0xfd,0x59,0x6b,0xf0,0x95,0x83,0x83,0x83,0x84,0x7e,0x0, + 0x4a,0xa1,0xdf,0xfe,0x6f,0x91,0x1f,0xbf,0x13,0xf9,0x91,0x8f,0xc3,0xc6,0x8d,0xf0, + 0xdc,0x3e,0xcc,0x7f,0x7c,0x37,0xe6,0xa2,0xb,0xa1,0xd9,0xc4,0xc9,0xe7,0xd9,0xb1, + 0xe3,0xa2,0xd2,0x59,0x3,0xe8,0xef,0xbf,0xf6,0xf5,0x7b,0x16,0x16,0x17,0xdf,0x94, + 0xcd,0x64,0x71,0x1c,0x67,0x5,0x1c,0x96,0x3,0xc8,0x24,0xf,0x6d,0x70,0x8e,0x7e, + 0x6d,0xd2,0x17,0x96,0x52,0x58,0xb6,0x85,0x30,0x10,0xc7,0x9a,0xc9,0xc9,0xc9,0x9b, + 0xc7,0x27,0xc6,0x6f,0xb6,0x94,0x45,0xb9,0xbb,0xfb,0x67,0xae,0xeb,0x7c,0x76,0x6c, + 0x6c,0xfc,0x7,0x71,0x1c,0x4f,0xce,0xce,0xce,0x46,0xbb,0x77,0x5f,0xaa,0x4f,0xe5, + 0xfc,0x72,0xb9,0x6c,0xbf,0xe3,0x24,0x37,0x81,0x30,0x84,0x6c,0x16,0xfd,0xb6,0xb7, + 0x22,0xff,0xec,0x5d,0xf0,0xf0,0x3f,0x62,0xfe,0xfd,0xbf,0xc3,0xec,0xde,0x5,0x73, + 0xf3,0x20,0x4,0xc6,0x40,0xb1,0x58,0x8a,0xce,0xa,0x40,0x5f,0xfe,0xca,0x57,0xbf, + 0xd4,0x68,0x34,0xde,0x90,0xcf,0xe5,0x91,0x52,0x26,0xe0,0x88,0x8e,0x94,0x6a,0x3, + 0x21,0xda,0x60,0xd1,0xb1,0x6d,0x25,0xa0,0x4c,0x1a,0x6d,0xc9,0x6b,0xa5,0x24,0xca, + 0x72,0x0,0x81,0x31,0x86,0xf9,0xf9,0xf9,0xab,0x67,0x67,0x67,0xaf,0xde,0xfb,0xec, + 0x73,0x94,0x4a,0xa5,0xc7,0x6,0x7,0x36,0xdc,0x35,0x3a,0x3a,0xf6,0x70,0x4f,0xb9, + 0x3c,0x7e,0x64,0x6c,0x2c,0xde,0x7e,0xc1,0xc8,0x71,0xf9,0xa2,0xd5,0x6a,0xcd,0x47, + 0x51,0x84,0x6d,0xdb,0x18,0xa5,0x20,0x8a,0x10,0xf7,0x7e,0x1d,0xa4,0x82,0x5d,0x97, + 0x20,0xbe,0xfd,0x5d,0xcc,0xb,0x2f,0x81,0xa1,0x21,0x68,0xb5,0x10,0x2,0xea,0xf5, + 0xba,0x94,0x67,0xa,0xce,0xdf,0x7d,0xf1,0x4b,0xf7,0xd7,0x6a,0xb5,0x37,0xe4,0x73, + 0x79,0x84,0x10,0x2b,0x17,0xc9,0xd1,0x17,0x9f,0x4c,0x63,0x66,0x15,0x38,0x1c,0xd, + 0xce,0x6a,0x40,0xc5,0xca,0xf7,0xc8,0x34,0x15,0x5d,0xcf,0xc3,0xb2,0x6c,0x96,0x96, + 0x6a,0xd7,0x3e,0xf3,0xcc,0xb3,0xf7,0xfc,0xf4,0x67,0x3f,0x3f,0xf0,0xc3,0x87,0x1e, + 0x7e,0x74,0x76,0x76,0xee,0xf6,0xf1,0xf1,0xf1,0xe1,0x43,0x87,0xe,0xad,0x79,0x4d, + 0x93,0x93,0x53,0xff,0x38,0x33,0x33,0x8d,0x65,0x5b,0x60,0x59,0x88,0xcf,0x7d,0x1e, + 0xf1,0xfd,0x7,0x31,0xef,0xb8,0x1d,0xfd,0xc1,0x3d,0xe0,0x79,0xc8,0xf7,0x7f,0x18, + 0x26,0x26,0xc1,0xb1,0x89,0xa2,0x88,0x67,0x9f,0xdd,0x1b,0x9e,0x11,0x49,0x7f,0xf9, + 0x2b,0x5f,0xfd,0x76,0xad,0x56,0xbb,0x31,0x9b,0xcd,0x5a,0xc6,0x18,0x84,0x10,0x48, + 0x21,0x10,0x52,0x22,0x85,0x42,0x88,0x95,0x4b,0x17,0x42,0x80,0x50,0x29,0x0,0x26, + 0xd9,0xda,0x8e,0xa6,0x35,0xc0,0x59,0xd,0x71,0x7,0xe8,0x6d,0x5a,0x4b,0x3f,0x67, + 0x40,0xa3,0x4d,0x4d,0x59,0x6a,0x29,0xe3,0x79,0x7b,0xbb,0xba,0xba,0xbe,0xd8,0xd7, + 0xd7,0xf7,0xe3,0xc9,0x89,0xc9,0x6b,0xaa,0xb,0xb,0x3b,0x87,0x36,0xe,0xfe,0xe0, + 0xcf,0xdf,0xf3,0xee,0xb1,0x97,0xbc,0xe4,0xc5,0xbf,0x7e,0xcb,0xed,0xb7,0xb3,0x74, + 0xf7,0x17,0x10,0x9f,0xff,0x22,0xe6,0x9d,0x7f,0x86,0x79,0xd9,0xb5,0x10,0xc5,0x30, + 0x5f,0x45,0xee,0xf9,0x10,0xb4,0x5a,0x38,0x9f,0xfc,0xcf,0x1c,0x9c,0x9b,0xe5,0x4f, + 0xdf,0xfa,0xd6,0x77,0xae,0x1b,0xa0,0xff,0x7a,0xd7,0x67,0xee,0x97,0x42,0xdc,0xd4, + 0xd3,0xd3,0x23,0x8d,0xd6,0x18,0x63,0x30,0xc6,0xa0,0xb5,0x4e,0x23,0x45,0x20,0x95, + 0x44,0x4a,0x99,0x3e,0x57,0x88,0x14,0x20,0x8c,0xc6,0x18,0xdd,0x49,0x50,0x9d,0x19, + 0x77,0xc,0x10,0x6b,0x46,0x64,0xc7,0x13,0x93,0x46,0x66,0x72,0x93,0x24,0x96,0x52, + 0x15,0x29,0xe5,0xa4,0x14,0x62,0x40,0x59,0xaa,0x58,0x6f,0xd4,0xa7,0x84,0x90,0x5f, + 0xfe,0xd8,0x47,0x3f,0x72,0xf1,0x47,0x3f,0xf9,0x89,0x9b,0x86,0x47,0x27,0xa8,0x57, + 0x17,0xe0,0x86,0xeb,0x57,0x74,0x90,0xeb,0xc2,0xe1,0x23,0x58,0x8f,0xfc,0x18,0xfb, + 0xf5,0xb7,0xf0,0xbe,0x8f,0x7d,0xb4,0xf5,0xc0,0x7d,0xf7,0xf5,0xad,0xb,0xa0,0xbf, + 0xfe,0xcc,0xdf,0x7c,0x76,0xaa,0x52,0x79,0xeb,0x96,0xc1,0x41,0x7a,0x4a,0x25,0xc2, + 0x28,0x6a,0xbf,0x67,0x29,0xb,0x29,0x5,0x71,0xac,0x9,0xa3,0x10,0xa3,0xd,0x8, + 0x81,0x94,0x12,0x29,0x2d,0xa4,0x92,0x69,0xc,0x25,0xa0,0x8a,0xe,0x12,0x3f,0x19, + 0x10,0xab,0xa3,0xeb,0xd8,0x6d,0x2,0xa3,0x4d,0xaa,0x8c,0x21,0x93,0xcd,0x10,0x84, + 0x21,0x73,0xb3,0xb3,0xf8,0x7e,0x10,0x85,0x61,0xf8,0x99,0xfb,0xef,0xfb,0xfa,0x4d, + 0xef,0xfd,0xe0,0x87,0xb6,0x6e,0x1b,0x19,0xa1,0x55,0xad,0xb6,0x27,0x13,0x21,0x4, + 0x6e,0x2e,0x87,0x56,0x8a,0xcf,0x7c,0xea,0x53,0xdc,0xf3,0xb7,0x7f,0x7b,0xed,0xd8, + 0xf8,0xf8,0x4f,0x4e,0x1b,0xa0,0xfb,0xbf,0xf5,0xf,0xaf,0x79,0xf4,0x17,0xbf,0xbc, + 0xdb,0x72,0xbd,0xde,0x6d,0x43,0x3,0x74,0xb9,0xe,0x5a,0x88,0xf6,0x94,0x1d,0x45, + 0x11,0x61,0x18,0x22,0x95,0xc4,0xb6,0x9c,0x24,0xcd,0x4,0x49,0x84,0x21,0x40,0xa4, + 0xe9,0x27,0x13,0x98,0x64,0xfa,0xde,0xd1,0x91,0x24,0x4e,0x0,0x96,0x38,0x6e,0xc4, + 0x19,0xc,0x12,0x81,0x65,0x59,0x38,0x8e,0x8d,0x1f,0xf8,0x2c,0x2e,0x2e,0x11,0x4, + 0x1,0xad,0x56,0xb,0xa5,0xd4,0x54,0xa3,0x5e,0xfb,0xd7,0x9f,0xfb,0xdc,0x67,0xdf, + 0xf8,0xc6,0x37,0xfe,0xab,0x3f,0xbc,0xf1,0xc6,0x1b,0x29,0x14,0xa,0x48,0x29,0xf1, + 0x7d,0x9f,0xa7,0x9e,0x7a,0x8a,0x2f,0x7c,0xe1,0xb,0xb5,0x5f,0xfc,0xe2,0x7f,0xbd, + 0x72,0x74,0x74,0xec,0xe7,0xeb,0xaa,0xc5,0x3e,0xf4,0x91,0x8f,0xfd,0x70,0x6c,0xb6, + 0x7a,0x7d,0xcf,0xe0,0x20,0x1b,0x7b,0xba,0x28,0x48,0x81,0xed,0xba,0xe9,0x45,0xa, + 0xe,0x1d,0x3a,0xc8,0xd4,0xd4,0x34,0xc5,0x62,0x91,0x4d,0x9b,0x36,0x52,0x2a,0x75, + 0x1,0xa0,0xb5,0x49,0xd9,0x26,0x45,0x4c,0x80,0x30,0x1a,0x8c,0x46,0xa,0x10,0x52, + 0x82,0x10,0x29,0x1c,0x6,0x3a,0x1e,0x4f,0xe,0x90,0x48,0xd3,0xb,0x6c,0xcb,0xc2, + 0xb2,0x2d,0x2,0x3f,0x60,0x61,0x71,0x91,0x30,0xc,0x11,0x8,0x82,0x30,0xc4,0xf, + 0xfc,0xa0,0xbb,0xab,0xeb,0xe1,0xde,0xde,0xf2,0x2d,0x6f,0x7d,0xcb,0x9f,0x6c,0xde, + 0xb0,0x61,0xe0,0xf5,0x3,0x3,0x3,0x57,0x59,0x96,0xe5,0xcd,0xcf,0xcf,0xef,0x1b, + 0x1d,0x3d,0x72,0x9f,0xef,0x7,0x8f,0x8e,0x8f,0x4f,0xb4,0xda,0x19,0x71,0xba,0xe9, + 0xe5,0x7,0xc1,0x35,0x39,0xd7,0xc1,0x13,0x86,0xd8,0x6f,0x11,0xd8,0x36,0x96,0xe3, + 0x26,0x24,0x9c,0x86,0xaa,0x90,0xa2,0xcd,0x9,0xcb,0x7a,0x47,0x90,0xa4,0x19,0x42, + 0xa4,0x13,0x9a,0x46,0x1b,0x3,0x46,0x13,0x1b,0x10,0x29,0x7f,0x48,0x91,0x82,0x27, + 0x4,0x42,0xc8,0x15,0x91,0x24,0x8e,0x3e,0x8f,0x63,0xc9,0x1c,0x1c,0xcb,0x46,0x59, + 0x8a,0x56,0xcb,0x67,0x61,0x71,0x81,0x38,0x4a,0xd4,0x79,0x18,0xc7,0xcb,0xa9,0xe4, + 0xcc,0xce,0xcd,0xbd,0x6a,0xd7,0xae,0x17,0x5c,0xf8,0xc4,0x93,0xbf,0x7e,0xa2,0xb7, + 0xa7,0xe7,0xc3,0x27,0xbb,0xde,0xd3,0x2,0xe8,0xbf,0x7d,0xf1,0x2b,0x5f,0x2c,0x95, + 0x4a,0xb8,0xbe,0x8f,0xc,0x5a,0x84,0xd2,0xa0,0x55,0x81,0x28,0xa,0xb1,0x2d,0x1b, + 0x21,0x5,0xc3,0xc3,0xc3,0x6c,0xd9,0xb2,0x5,0x63,0xc,0x96,0x65,0x25,0x9c,0x0, + 0x48,0x29,0x0,0x9d,0x28,0x6a,0x1,0x52,0x80,0x92,0x12,0x23,0x5,0x5a,0x6b,0xb4, + 0xd6,0x18,0x1d,0x63,0x96,0xc1,0x91,0xa4,0x4,0x4f,0x3a,0x1b,0x8a,0xf6,0xc,0x78, + 0xec,0xac,0x66,0xb0,0x1d,0xb,0xcb,0xb2,0x68,0xb6,0x5a,0x54,0xab,0xb,0xc4,0x71, + 0x84,0x52,0x8a,0x20,0x4c,0x52,0x3e,0x91,0xa,0x12,0x6d,0xb4,0xde,0xfb,0xec,0x73, + 0x6f,0xeb,0xef,0xeb,0x7f,0x7,0xd0,0x3a,0xd9,0x35,0x9f,0x96,0xe,0x9a,0x9b,0x9b, + 0xfd,0x97,0xd9,0x4c,0xc6,0xcb,0x7a,0x1e,0xd9,0x4c,0x6,0xd7,0x71,0xd1,0x5a,0x13, + 0x86,0x21,0x1a,0x9d,0x10,0xb2,0x1,0xcb,0xb2,0x12,0x41,0xa6,0x4d,0xc7,0xb5,0xa4, + 0x3c,0x63,0x62,0xd0,0xc9,0x2c,0xb6,0x1c,0x59,0x4a,0x29,0x1c,0xc7,0xc1,0x71,0x1c, + 0x94,0x65,0xa7,0x29,0x19,0x13,0x45,0x21,0x3a,0x8e,0x12,0xf0,0x8c,0x49,0xc0,0x11, + 0x9d,0xe1,0x93,0x80,0x63,0x59,0x16,0xb6,0x65,0xd1,0x68,0x34,0x8e,0x2,0xc7,0xf, + 0x2,0xa2,0x14,0x9c,0xe5,0x8f,0x28,0xa5,0xe4,0xe4,0xe4,0xd4,0x9b,0x6a,0xf5,0x5a, + 0xf7,0xa9,0x5c,0xf3,0x29,0x3,0xf4,0xed,0x7f,0xf8,0xce,0x5b,0x92,0x30,0xb6,0xb0, + 0x94,0x4a,0x67,0x25,0x89,0x10,0x49,0x4,0xc4,0x61,0xdc,0x56,0x34,0x71,0x1c,0x13, + 0xc7,0xe9,0x34,0x2e,0x92,0xe9,0x7e,0x71,0xa9,0xc6,0xe4,0xe4,0x34,0x8b,0x8b,0x4b, + 0x47,0xe5,0x47,0x5b,0x3f,0xa6,0xfb,0xa,0x21,0xb0,0x2c,0x1b,0xdb,0xb2,0xb1,0x94, + 0x85,0x31,0x10,0x47,0x11,0x51,0x18,0x24,0x80,0xe9,0x15,0x5e,0x12,0x80,0xa5,0x14, + 0xae,0x63,0xd3,0xa8,0x37,0x58,0x58,0x5c,0x24,0x8e,0x23,0xa4,0x94,0x4,0x41,0x40, + 0x94,0xce,0xae,0xcb,0x9a,0x49,0xa4,0xb3,0x69,0xb3,0xd9,0xf2,0x2a,0x95,0xd9,0x8b, + 0x47,0xc7,0xc6,0xc5,0x59,0x4b,0xb1,0xc3,0x87,0xe,0xdf,0x6e,0x29,0x45,0x14,0x85, + 0x8,0xad,0x93,0x59,0x48,0xac,0xcc,0x33,0x71,0x1c,0xa3,0x2c,0x89,0x10,0xd6,0xca, + 0x5,0x48,0x81,0x65,0xdb,0x48,0x4,0xb3,0x73,0xf3,0x8c,0x4e,0x4e,0xd2,0xdf,0xd3, + 0x43,0xa9,0x54,0x4c,0x9,0xd9,0xa0,0x24,0x48,0xa5,0x8,0x42,0xcd,0x4c,0x65,0x86, + 0x83,0x7,0xe,0xe0,0x3a,0xe,0x43,0x1b,0x87,0xe8,0xeb,0xed,0x4b,0x1c,0x81,0x38, + 0x46,0x9b,0x24,0xd,0xa3,0x38,0x82,0x50,0x23,0xa5,0xc4,0x71,0x5c,0x6c,0xc7,0xa6, + 0x5e,0x6f,0xb0,0x58,0xab,0xa1,0xb5,0x46,0xc9,0x34,0x72,0xe2,0x98,0x8e,0xf2,0xf8, + 0x18,0xfe,0x9a,0x9f,0x9f,0x7f,0xb1,0x94,0xe2,0xc7,0x9b,0x36,0xe,0x35,0xcf,0xa, + 0x40,0x95,0xd9,0xd9,0x17,0x14,0xa,0x5,0xe2,0x38,0xc6,0x18,0x83,0x12,0xaa,0x2d, + 0xe,0x97,0x89,0xd9,0xa4,0x7a,0x26,0x51,0xd4,0x92,0x96,0xdf,0x62,0xef,0xde,0x67, + 0x89,0xe3,0x18,0xcf,0xf3,0xb8,0x78,0xfb,0x76,0x8a,0xc5,0x2,0x8,0x99,0x70,0x94, + 0x4,0x57,0x81,0x90,0x10,0x9,0x43,0x14,0x47,0xd4,0xea,0x35,0x82,0xc0,0x26,0xc, + 0xc3,0x95,0xcb,0x12,0x9,0x7f,0x48,0xa9,0x3a,0x78,0xd9,0xa0,0x4d,0xcc,0xd2,0xe2, + 0x52,0xea,0x52,0x26,0xb7,0x25,0x68,0x83,0xc3,0x9a,0xe0,0x90,0xde,0xb8,0x99,0x99, + 0x99,0xeb,0x7,0x7,0x7,0xef,0x2,0xce,0x1c,0xa0,0xaf,0x7c,0xf5,0xde,0xf7,0xf8, + 0xbe,0x6f,0x65,0x33,0x59,0x6c,0xcf,0xc2,0x73,0x5d,0x6c,0xc7,0xc1,0xb2,0x2c,0x94, + 0x65,0xa5,0x33,0x8e,0x58,0x99,0xc9,0xd2,0x19,0x4b,0x6b,0x43,0x75,0xbe,0x4a,0xbd, + 0x51,0x63,0x60,0x60,0x90,0xc1,0x8c,0x47,0x36,0xe3,0x11,0x6,0x21,0x2,0xd0,0x46, + 0x10,0x68,0x10,0x5a,0x63,0x8c,0xa0,0xaf,0xa7,0x97,0xfc,0x15,0x57,0x20,0x10,0x78, + 0x9e,0x87,0x90,0x2,0x6d,0x74,0x92,0x76,0xa9,0x0,0xd,0x83,0x0,0xa9,0x2c,0x1c, + 0xdb,0xa2,0xd1,0x6a,0x51,0x5d,0x58,0x40,0x29,0x5,0x42,0x10,0x86,0x11,0x51,0x14, + 0xb7,0x23,0xfb,0x18,0x70,0xcc,0x8a,0x98,0x5d,0x5c,0x5a,0xba,0x32,0x8a,0xe2,0x32, + 0x30,0x75,0xc6,0x0,0x4d,0x8c,0x4f,0xbc,0xd1,0xb2,0x6c,0xa4,0x6d,0x23,0x5c,0x17, + 0x3b,0x97,0x27,0x9f,0xc9,0xa0,0x84,0x40,0xeb,0xf8,0x28,0xb5,0x92,0xc8,0xc1,0xe4, + 0x79,0xc6,0xf3,0xd8,0x71,0xd1,0x45,0xf8,0xa1,0x4f,0x26,0x93,0x25,0xe3,0x79,0xc4, + 0x51,0xdc,0x3e,0x71,0x8d,0x40,0xc7,0x6d,0xfa,0xc1,0x75,0x5d,0xb2,0xd9,0x1c,0x2, + 0x8d,0x8e,0x35,0xb1,0x49,0xcc,0x36,0x89,0xa0,0x56,0xaf,0x33,0xbf,0xb4,0x88,0x9b, + 0xc9,0xa2,0x5,0x34,0xab,0xb,0x48,0xa3,0xc9,0xe4,0x72,0xe8,0x38,0x26,0x8a,0xe2, + 0xa4,0xcc,0x39,0xa6,0x80,0x39,0x76,0x28,0x29,0x9,0x82,0x30,0x5b,0xab,0xd5,0x86, + 0x8e,0x1c,0x19,0xdd,0xbb,0x79,0xf3,0xf1,0xcd,0xb8,0x93,0x2,0xf4,0x9d,0xef,0x7e, + 0xef,0xf,0x5a,0xad,0xd6,0xce,0xc1,0xc1,0x41,0x22,0x21,0x98,0xab,0x37,0x59,0xa, + 0x35,0x3d,0x42,0x52,0xce,0x65,0xf1,0x6c,0x2b,0xb1,0x38,0xb4,0x69,0xa7,0x97,0x31, + 0x6,0x13,0x1b,0x94,0x52,0xf4,0xf,0xf4,0xaf,0x3a,0x5b,0x3,0xd8,0x29,0x39,0x9b, + 0xe,0x89,0x63,0xd0,0x18,0xe2,0x38,0x4,0xa3,0xd1,0xda,0xa0,0xa4,0xc4,0xf,0x2, + 0x2a,0xb3,0x73,0x8c,0xcf,0xcc,0xd2,0xd4,0x86,0x42,0x77,0x19,0x5b,0x49,0xc2,0x7a, + 0x8d,0xac,0x14,0xe4,0x72,0xb9,0x44,0xe7,0xe8,0x84,0x73,0x84,0x58,0x3,0xa2,0xa3, + 0x9e,0x1a,0x90,0x82,0x58,0x6b,0x9a,0xcd,0xe6,0x50,0xad,0x56,0xcb,0x0,0xb5,0x75, + 0x1,0xf4,0x9b,0xdf,0xfc,0x9f,0xde,0xc5,0xc5,0xa5,0xab,0xa,0xf9,0x2,0x1b,0xfa, + 0xfb,0xa9,0x2c,0x2e,0xd2,0x9c,0xad,0x12,0x28,0x7,0xcb,0xf,0xd1,0xd1,0x22,0x2a, + 0xa,0x9,0x9a,0x4d,0x62,0x63,0x90,0x52,0x60,0x5b,0x16,0xb6,0xed,0xe0,0xb9,0x1e, + 0xae,0xeb,0x80,0x4,0x89,0x4c,0x2e,0x40,0x80,0x65,0xd9,0x58,0x2a,0x29,0x35,0x92, + 0xba,0x49,0x63,0xc,0xa9,0xe,0x8a,0x12,0x1,0xa9,0x35,0x20,0x68,0xf9,0x1,0x95, + 0xb9,0x39,0xe,0x8f,0x8d,0x33,0x59,0xa9,0x90,0x2d,0xf7,0x42,0xb3,0x49,0xce,0xf5, + 0xc8,0x64,0x72,0xd8,0x68,0x7c,0xdf,0x27,0xd6,0x66,0x5,0x98,0x53,0x2c,0xc,0xb4, + 0xd6,0x84,0x51,0x38,0x10,0x4,0x41,0xd7,0xba,0x1,0x9a,0x9c,0x9a,0xda,0xad,0x94, + 0x7c,0x41,0x77,0x77,0x9,0x29,0x5,0x59,0xd7,0xa1,0xbf,0xa7,0x9b,0xc8,0xf1,0xd0, + 0x71,0xcc,0xe1,0xf1,0x9,0xa6,0x47,0x47,0xf1,0xeb,0x75,0x5c,0xcf,0xc3,0xb1,0x13, + 0xb1,0xe6,0xb8,0xe,0xf9,0x5c,0x9e,0x62,0xb1,0x48,0xa1,0x90,0x27,0x97,0xcb,0xe1, + 0xba,0x6e,0x3a,0xfd,0x86,0x44,0x32,0xc2,0x4e,0xb9,0xb,0x1,0xb1,0x8e,0xd1,0xb1, + 0x46,0x47,0xba,0xed,0x61,0x6b,0xad,0x99,0x5f,0x58,0x64,0x66,0xae,0x4a,0x1c,0x6b, + 0xa,0x9e,0x87,0x2d,0xc0,0xd2,0x1a,0xdf,0x6f,0x22,0x25,0xe4,0x32,0x19,0xe2,0x65, + 0x8d,0x60,0xc4,0xda,0xe9,0x75,0x9c,0x17,0x12,0x81,0xdf,0xf2,0xfb,0x97,0x6a,0xb5, + 0x1e,0x60,0x74,0x5d,0x0,0x35,0x1b,0xcd,0x1b,0x94,0x54,0xbb,0x6c,0xdb,0x21,0x8c, + 0x22,0x5c,0xdb,0xa6,0x3b,0xe3,0xb1,0xff,0xd0,0x61,0xfc,0x28,0xa2,0xd5,0x6c,0x12, + 0x47,0x11,0x5d,0xdd,0xdd,0x14,0xb,0x5,0x2c,0x4b,0xa1,0xb5,0x26,0x8,0x2,0xe6, + 0xe7,0xe7,0xa9,0x54,0x2a,0x58,0x96,0x45,0xb1,0x58,0x64,0x60,0x70,0x80,0x72,0x77, + 0x19,0xd7,0x4d,0xc4,0xa5,0xef,0x7,0xa8,0xd4,0xe,0x89,0x75,0x9c,0x70,0x93,0x59, + 0xf6,0x89,0xc,0xf5,0x46,0x93,0x7a,0xb3,0x81,0xc0,0x90,0xcb,0x65,0x29,0xe6,0xf3, + 0x8,0x29,0x68,0x5,0x3e,0x41,0x14,0xa2,0x72,0x19,0x5c,0xc7,0x4e,0x1,0x5d,0x3d, + 0xcc,0x9a,0xd1,0xd4,0xc9,0x95,0x4a,0x29,0x9a,0xcd,0x66,0xd7,0xfc,0xfc,0x7c,0xd7, + 0xba,0x49,0x3a,0x8c,0xc2,0x6b,0x8d,0x61,0xe3,0xf2,0x61,0xc3,0x28,0xe6,0xe0,0xfe, + 0xfd,0x1c,0x3e,0x78,0x88,0x52,0xb9,0xcc,0x96,0xad,0x5b,0x29,0x5c,0xb8,0x1d,0x4b, + 0xca,0xa4,0x92,0x16,0x2b,0x36,0x60,0xac,0x63,0x5a,0xcd,0x16,0xb5,0x5a,0x8d,0x99, + 0xca,0xc,0xbf,0xfa,0xd5,0xaf,0xe8,0xe9,0x2e,0x73,0xde,0x79,0xe7,0x51,0xee,0x29, + 0x63,0x30,0xc4,0xb1,0x6e,0xab,0xe4,0xf6,0x63,0x87,0xde,0x91,0x2,0x72,0x9e,0x87, + 0xb4,0x2c,0x1c,0xd7,0x25,0xd6,0x31,0xaa,0x5e,0xa7,0xc7,0x2e,0x50,0xc8,0x65,0x13, + 0xde,0x5b,0xcd,0x2f,0x6b,0x8d,0xe,0xbd,0xd6,0xae,0x54,0xa4,0x24,0x88,0xc2,0x52, + 0xbd,0xd1,0x58,0x3f,0x40,0x71,0xac,0x2f,0xd1,0x46,0xa3,0x94,0x22,0x8e,0x35,0x95, + 0xca,0xc,0xfb,0xf,0x1e,0x64,0xcb,0x96,0x2d,0xc,0xf,0x6f,0x25,0x97,0xcb,0x21, + 0x53,0x17,0x71,0xf9,0xe,0x45,0x51,0x9c,0x9a,0x61,0x36,0x19,0xcf,0xa3,0x54,0x2a, + 0xd2,0xdf,0xdf,0x47,0xb5,0x5a,0x65,0x62,0x62,0x82,0x5f,0x3e,0xf1,0x38,0x9b,0x87, + 0x36,0x72,0xde,0xb6,0x6d,0xd8,0x8e,0x9d,0xf6,0xbf,0x93,0x6b,0x88,0xe2,0xa8,0xcd, + 0x47,0x68,0x8d,0xeb,0x38,0x38,0xb9,0xa4,0x4,0x69,0x5,0x1,0xcd,0x66,0x48,0x4f, + 0x57,0x9,0xd7,0xb6,0x9,0xa3,0x88,0x28,0x8e,0x91,0x82,0x8e,0xea,0x5f,0xac,0x11, + 0x3d,0x66,0xb5,0xb1,0x94,0xa4,0x98,0x14,0xe8,0x28,0x2e,0xfb,0x2d,0xbf,0x67,0xdd, + 0x0,0x19,0x6d,0x8a,0x98,0x44,0x58,0x5,0x41,0xc0,0xd2,0x52,0x8d,0x5d,0x2f,0x7c, + 0x1,0x5b,0xb6,0x6c,0xc1,0xf3,0x1c,0x9a,0xd,0x9f,0x20,0x8,0x92,0x1a,0x47,0x4a, + 0x94,0x52,0x64,0x3c,0x17,0xc7,0x75,0x10,0x42,0xd0,0x6a,0xb5,0x8,0xc3,0x18,0xdb, + 0x76,0x70,0x5d,0x97,0x5c,0x2e,0xc7,0xf4,0xf4,0x34,0x13,0x93,0x93,0xcc,0x55,0xab, + 0xec,0xd8,0xb1,0x83,0x5c,0x2e,0x4f,0xa8,0x63,0xa4,0x94,0xd8,0x8e,0x43,0xd0,0xf2, + 0x13,0x45,0x6c,0x59,0x94,0x72,0x39,0x5c,0xc7,0xc1,0xf7,0x7d,0x94,0x14,0x14,0x73, + 0x59,0x2c,0x4b,0x11,0x45,0x31,0x71,0x6c,0xb0,0x54,0x4a,0xfe,0xc7,0x8d,0x1e,0xd3, + 0xd1,0x28,0xe8,0xd8,0x9a,0x8a,0xdb,0x28,0x8a,0x38,0xd6,0x27,0x38,0xad,0x69,0xde, + 0x48,0x4,0xed,0x9a,0x66,0xe3,0xc6,0x21,0x4a,0x5d,0x25,0x16,0x17,0x96,0x78,0xf6, + 0xd9,0xe7,0x58,0x58,0x58,0xc4,0xf3,0x5c,0xf2,0xf9,0x5c,0xfb,0x5c,0x32,0x9e,0x87, + 0x41,0xe0,0xd8,0x2e,0x9b,0x37,0xf,0x51,0x2a,0xba,0xd4,0x1b,0x4d,0x5a,0xad,0x16, + 0x85,0x7c,0x1,0x4b,0x59,0xd8,0xb6,0xcb,0xf4,0xf4,0x14,0x4f,0x3e,0xf1,0x4,0xf9, + 0xee,0x32,0x2a,0x93,0xc3,0x72,0x6c,0x7a,0xba,0xa,0x94,0x1c,0x17,0xa9,0x35,0xb6, + 0xb2,0x90,0x18,0xc2,0x30,0x40,0xeb,0x18,0x47,0x49,0x84,0x94,0x18,0x4,0xb1,0xe, + 0xa9,0xd5,0x96,0x68,0x34,0xea,0x94,0x7b,0x7a,0x52,0x5b,0xc4,0xac,0x49,0x41,0xe2, + 0x18,0xc8,0x4c,0xbb,0x2e,0xd3,0xc6,0x60,0x3a,0xdc,0xd0,0xf5,0x9,0xc5,0x94,0x1f, + 0x2c,0xcb,0xc2,0xcb,0x78,0x4c,0x4d,0x4e,0x71,0xf8,0xc8,0x28,0x95,0xca,0x2c,0x0, + 0x45,0x5d,0xc0,0xf3,0xdc,0xa4,0xa8,0x4c,0xdb,0x3d,0x7,0xf,0x1c,0x61,0xff,0xfe, + 0x31,0x46,0xce,0x1f,0x61,0xfb,0x85,0xc3,0x6c,0xbf,0x60,0x18,0xcf,0x2b,0x52,0x5d, + 0x58,0xc4,0x8e,0x62,0xca,0x3d,0xdd,0x20,0xc,0x13,0xe3,0x13,0x4c,0x4e,0x4f,0x53, + 0x1a,0xdc,0xc8,0x86,0x81,0x41,0x44,0xc6,0xa5,0xba,0xb4,0x40,0x56,0x9,0xa4,0xa0, + 0x5d,0xd6,0x24,0x29,0x21,0x91,0x4a,0xa2,0x8d,0x60,0x69,0xa9,0xc6,0xd8,0xd8,0x28, + 0x5a,0x1b,0x7a,0xfb,0xfa,0x92,0x8,0x32,0x6b,0xe8,0x9d,0x13,0x5,0x87,0x39,0x9, + 0x6f,0x9d,0x2a,0x40,0xc6,0x98,0xc4,0x47,0x16,0x92,0x85,0x85,0x45,0xe,0x1c,0x38, + 0x48,0xad,0x56,0xef,0x48,0xeb,0xc4,0x6e,0x10,0x42,0x12,0xc7,0x1a,0x29,0x15,0x8d, + 0x46,0x9d,0xc3,0x87,0xf,0x30,0x3f,0x3f,0xcf,0x33,0x7b,0xf7,0x72,0xc1,0x5,0xc3, + 0x5c,0x7b,0xed,0x95,0xf4,0x6f,0xe8,0x63,0x4e,0xcf,0xe1,0x87,0x3e,0xc5,0x62,0x11, + 0x23,0x24,0x33,0x95,0x59,0x4c,0x14,0x10,0x87,0x21,0x4d,0x60,0x71,0x7e,0x81,0xcd, + 0xbd,0xdd,0x58,0xa,0xa2,0x30,0x46,0xa4,0x8e,0x81,0x48,0x9b,0x79,0x71,0x14,0x13, + 0x46,0x11,0xb6,0xe3,0x92,0xcd,0x64,0xd2,0xed,0xfa,0x44,0xdc,0x7c,0x14,0x8,0xcb, + 0x80,0x8b,0x44,0x5e,0x64,0xb4,0xd6,0xd9,0x75,0x3,0x64,0x59,0xd6,0x91,0x20,0xc, + 0x37,0xcb,0xd4,0xd2,0x98,0x9a,0x9a,0xa2,0xd1,0x68,0xa1,0x94,0x42,0xa,0x49,0x33, + 0x68,0xd1,0xf2,0x13,0xce,0x70,0x5c,0x7,0xdb,0x4e,0x57,0x6e,0x8,0x80,0x80,0x6a, + 0x75,0x1a,0xbf,0xb9,0xc4,0xa1,0x83,0x7,0x98,0x9c,0x9a,0xe4,0xf7,0x6e,0x7c,0x5, + 0x5b,0xb7,0x6e,0x22,0xc,0x43,0xc2,0x28,0xa6,0xd8,0xd5,0x5,0x8,0xa6,0x66,0x66, + 0x18,0xfd,0xcd,0x53,0x94,0xfb,0xfa,0xc9,0x79,0xe,0xae,0xed,0x60,0x29,0xd1,0x2e, + 0x6a,0x13,0xb9,0x9d,0x34,0x2,0x5a,0xbe,0x8f,0xeb,0xba,0xc,0xd,0xd,0x61,0x5b, + 0x16,0x46,0xeb,0xce,0xcb,0x3f,0xd6,0xc7,0x3e,0xb6,0x35,0x89,0x10,0x82,0x46,0xa3, + 0x49,0xa9,0x58,0x5c,0x2c,0x16,0xb,0x13,0xeb,0xf6,0x83,0x72,0xb9,0xdc,0x43,0x96, + 0x65,0xd5,0xb4,0xd6,0x44,0x51,0x48,0xad,0x56,0xc3,0xb2,0x54,0xea,0xab,0x8,0x24, + 0x12,0x3f,0x8,0xa9,0x37,0x1a,0x48,0x99,0x18,0x65,0x4a,0x4a,0x72,0xb9,0x1c,0xdd, + 0xdd,0x65,0x5c,0x47,0x51,0x2c,0x38,0xb8,0xe,0xfc,0xe4,0xb1,0xc7,0xf8,0xda,0xbd, + 0xdf,0x60,0xff,0xbe,0x3,0x74,0x77,0x77,0xe1,0x79,0x2e,0xc2,0x18,0xb2,0x99,0xc, + 0x9e,0x52,0x34,0xe7,0x2a,0xf8,0xf3,0xb3,0xc,0x74,0x77,0xe1,0xd8,0x16,0x4a,0xd9, + 0x58,0xb6,0x93,0x5a,0xb4,0x22,0x25,0xd5,0x98,0x28,0x8a,0xb0,0xad,0x64,0x86,0x94, + 0x4a,0xae,0x78,0x49,0xe6,0x44,0xf1,0x63,0x8e,0x8a,0xa2,0xc0,0xf,0x90,0x42,0x56, + 0xb6,0x6f,0x1f,0xf9,0xec,0x35,0xd7,0x5c,0xfd,0xe0,0x89,0x30,0x38,0xe1,0xf2,0x97, + 0x85,0xc5,0xc5,0xb8,0xd9,0x6c,0x6d,0x6a,0x34,0x1a,0xdb,0xb4,0x36,0x54,0x2a,0x15, + 0xe2,0x58,0x93,0x36,0x31,0x12,0x2d,0xa3,0x63,0xe2,0x30,0xa2,0x90,0xcf,0xb7,0xd5, + 0xb1,0xe7,0x79,0x94,0x7b,0xba,0x29,0x95,0xba,0x90,0x52,0xd1,0x53,0x2e,0x61,0x59, + 0x8a,0x43,0x87,0xe,0x33,0x35,0x35,0xc3,0x96,0xad,0x5b,0xe8,0xee,0x2a,0x11,0xf8, + 0x3e,0x46,0x6b,0x1c,0xc7,0x4e,0x74,0x53,0xa3,0x41,0x5f,0x4f,0xf,0xb6,0x63,0x27, + 0xc4,0x6b,0x34,0x22,0xb5,0x45,0xa4,0x80,0x20,0xf0,0x13,0xed,0x64,0x96,0x4b,0x14, + 0xb3,0x6,0x28,0xa2,0x5d,0x30,0x2f,0x8b,0xce,0xe5,0xbd,0xb4,0x31,0xe8,0x58,0x63, + 0x8c,0x9e,0xbe,0xe4,0x92,0x9d,0xef,0xb9,0xf2,0x8a,0xcb,0xff,0x7e,0x60,0xc3,0x86, + 0xfa,0xba,0x1,0x1a,0x1c,0x18,0x78,0x66,0x72,0x72,0x6a,0xcb,0xe2,0xc2,0xe2,0x2b, + 0xc,0x86,0x6a,0xb5,0x4a,0x14,0xad,0x14,0xbe,0xc2,0x24,0x42,0x2d,0x8,0x3,0x94, + 0xb2,0x92,0xb6,0xb0,0x52,0xd8,0xb6,0x45,0xa9,0x58,0x62,0x70,0x70,0x88,0xad,0xc3, + 0xc3,0x94,0xfb,0xfa,0xe9,0xeb,0xed,0xc5,0x75,0x5d,0x66,0x67,0xe7,0xa9,0xcc,0xce, + 0x73,0xe1,0x85,0x23,0xb8,0x8e,0x83,0xd6,0x31,0x52,0x5a,0x68,0x63,0x98,0x9b,0x9f, + 0x27,0x8a,0x22,0x4a,0xc5,0x12,0x8e,0xe3,0x60,0x4b,0x83,0x6b,0x81,0x25,0xc,0xc2, + 0xc4,0x84,0x81,0x9f,0x80,0x22,0x3b,0x5c,0xc8,0x93,0x90,0x70,0x27,0xf7,0x68,0xad, + 0x41,0x50,0xd9,0xb9,0x73,0xe7,0xbb,0x5f,0xf2,0x92,0x6b,0xef,0x29,0x14,0xa,0xd1, + 0x19,0x3b,0x8a,0xe5,0x72,0xf7,0x23,0xd3,0x33,0x33,0x51,0xa3,0xd1,0xb0,0x1c,0xc7, + 0xa6,0xd9,0x6c,0x25,0x59,0xbd,0xdc,0x62,0xb6,0x2c,0x14,0x30,0x5b,0x99,0xc5,0x73, + 0x5d,0xba,0xba,0x4a,0xa9,0xb0,0x8c,0x69,0xb5,0x7c,0x0,0xba,0x4b,0x25,0x36,0xf4, + 0xf7,0x33,0x32,0x32,0xc2,0xf4,0xf4,0x14,0x53,0x53,0x33,0x8c,0x1e,0x19,0xe7,0xbc, + 0xf3,0xb6,0x90,0xc9,0x64,0x88,0xe3,0x3a,0xd9,0x4c,0x96,0x62,0xa1,0xc0,0x4c,0xa5, + 0xc2,0xd0,0xd0,0x10,0xc5,0x7c,0x6,0x47,0x25,0x1c,0xb4,0x2c,0xa,0x97,0x4d,0x36, + 0x81,0x20,0x30,0x86,0xd5,0xdc,0x7c,0xec,0x8c,0xb4,0xc2,0x39,0x61,0x18,0x62,0x29, + 0x35,0xb1,0x63,0xc7,0x45,0xef,0x7d,0xe9,0x4b,0x5e,0x7c,0xb7,0xe7,0x79,0xa7,0x54, + 0xd6,0x9e,0xd4,0x93,0xbe,0xf8,0xe2,0x9d,0x8f,0xf4,0xf6,0xf6,0x7c,0x3c,0x8e,0x35, + 0x85,0x42,0x1,0xa5,0x56,0x34,0x87,0x0,0x94,0x48,0x1a,0x75,0x6,0x98,0xa9,0x54, + 0x58,0x5a,0xaa,0x81,0x1,0x65,0x59,0xe4,0xf2,0x39,0x12,0x50,0x1b,0xd4,0x96,0x96, + 0x30,0xc6,0x30,0x30,0x38,0xc8,0xb,0x5f,0x78,0x9,0xd9,0x5c,0x6,0x9d,0x76,0x3e, + 0x6c,0x3b,0x29,0x70,0x73,0xf9,0x1c,0xad,0x56,0x8b,0x5a,0x6d,0x89,0x38,0xa,0xdb, + 0xdd,0xc,0x8d,0x48,0x8d,0xb0,0xe4,0x31,0xc,0x12,0xdb,0x17,0x8e,0xee,0xed,0x8b, + 0xf4,0xaf,0x73,0xb9,0x8d,0x10,0x82,0x56,0xb3,0x85,0x92,0xaa,0x72,0xc9,0xc5,0x17, + 0xbf,0xf3,0x55,0x37,0xbc,0xf2,0x6f,0x4e,0x15,0x9c,0x53,0x36,0xed,0x5f,0xfe,0xb2, + 0x97,0xbe,0xcb,0xf3,0x1c,0x72,0xb9,0x1c,0x4a,0xa9,0x15,0x7,0x31,0x35,0xee,0x95, + 0x94,0xd8,0xb6,0x4d,0x10,0x4,0x4c,0x4f,0x4d,0x53,0x5d,0x58,0x48,0x94,0xb1,0x95, + 0xb8,0x8f,0xd9,0x6c,0x16,0x63,0x34,0xb5,0x7a,0x8d,0x46,0xa3,0xd9,0x36,0xb7,0xfc, + 0x96,0x8f,0x92,0x12,0xc7,0xb1,0x51,0x4a,0x26,0x2e,0x22,0xd0,0x58,0xaa,0xe1,0xfb, + 0x1,0xc6,0xc8,0x74,0xcd,0x90,0xc4,0x56,0x89,0x5a,0x9f,0xae,0xcc,0x52,0xad,0x56, + 0x51,0xe9,0xf4,0x6f,0x58,0xe1,0xc3,0x65,0xb,0x78,0xa5,0x9c,0x90,0x34,0xea,0xd, + 0x94,0x52,0x8d,0x5d,0xbb,0x5e,0xf0,0x6f,0xae,0xbd,0xf6,0x45,0x5f,0x3a,0xdd,0x3e, + 0xe0,0x29,0x77,0x35,0x6e,0xfb,0xa3,0x7f,0x21,0x94,0xb2,0x28,0x14,0xa,0x6d,0x53, + 0x6c,0xa5,0x6f,0x25,0x12,0x90,0x2c,0x9b,0x20,0xc,0x99,0x9e,0x9e,0x61,0x66,0x66, + 0x86,0x30,0xc,0x90,0x52,0xa6,0xad,0x60,0x7,0xcb,0x52,0xc4,0x71,0x44,0xb3,0xd9, + 0xa2,0xd9,0x6c,0xb1,0xb0,0xb8,0x94,0x8a,0x50,0x1b,0x29,0x24,0x4a,0x25,0x16,0x6e, + 0xbd,0xd9,0x48,0x5b,0x49,0x86,0x58,0x43,0x6c,0x60,0xb1,0xde,0x64,0x72,0x66,0x16, + 0x84,0x20,0x97,0xcb,0xa4,0x76,0xac,0x39,0xe,0xfd,0x24,0xb2,0xa0,0x5e,0xaf,0xa3, + 0x2c,0x2b,0xb8,0xe2,0x8a,0xdd,0xb7,0x5d,0x79,0xe5,0x15,0xdf,0xf0,0x3c,0x4f,0x9f, + 0x2e,0x40,0xa7,0xd5,0x38,0xec,0xed,0xeb,0x7d,0x20,0x8,0xc3,0x9b,0xeb,0xf5,0x3a, + 0x51,0xd4,0x68,0xdb,0x6,0xcb,0x56,0xe7,0x72,0x74,0x85,0x51,0xc4,0xcc,0xcc,0x2c, + 0xad,0x96,0x4f,0x57,0xa9,0x88,0xe7,0x26,0x53,0xb2,0x63,0x3b,0xe8,0x38,0x46,0x9b, + 0xa4,0x7c,0xf1,0x7d,0x9f,0x30,0x8e,0xb1,0x2d,0xb,0x29,0x55,0x1b,0x6c,0x3f,0x8, + 0x93,0xd9,0x32,0xe5,0xba,0x56,0x2b,0xe2,0xd9,0x7d,0x87,0x90,0x52,0x30,0x38,0xb8, + 0x81,0x4c,0x36,0x4f,0x10,0x2d,0x17,0xd1,0xd1,0xb1,0xae,0xa1,0x31,0xf8,0xbe,0x8f, + 0x6d,0xd9,0xc1,0xd5,0x57,0x5f,0x79,0xd3,0xa5,0xbb,0x5e,0xf8,0xc3,0x6c,0x36,0x7b, + 0xda,0xe0,0x9c,0x76,0xe3,0xf0,0xa6,0xdf,0xff,0xbd,0xd7,0xf6,0xf4,0xf6,0x3c,0x5e, + 0x2e,0x27,0xbe,0xce,0x72,0x14,0xa9,0xb4,0x4f,0x26,0x44,0xd2,0x4,0x5c,0x16,0x70, + 0xb,0xb,0x8b,0x4c,0x4d,0xcd,0x30,0x3d,0x33,0xc3,0xc2,0xc2,0x2,0xbe,0xef,0x83, + 0x10,0x28,0x4b,0x62,0x29,0x89,0x10,0x6,0x1d,0xc7,0xc9,0xc5,0xc9,0xa4,0xb4,0x8, + 0xc3,0x10,0x65,0x59,0x68,0x21,0x12,0x33,0x2c,0x5d,0xdc,0xa0,0xe3,0x98,0x42,0x3e, + 0x87,0xe3,0x78,0x18,0x23,0x88,0xc2,0x98,0x56,0xab,0xb9,0xb2,0x42,0x24,0x5,0x77, + 0xd9,0x8f,0x72,0x1c,0xa7,0x72,0xcd,0x8b,0xae,0xbe,0x69,0xf7,0xa5,0xbb,0x1e,0x5c, + 0x2f,0x38,0xeb,0xea,0xcd,0xff,0xc1,0x2d,0x37,0xef,0xbe,0xff,0xbe,0x6f,0xfd,0xef, + 0x28,0x8c,0x76,0x57,0x66,0x67,0xd3,0x46,0x9d,0x6a,0xdf,0xb9,0xf6,0x42,0x2a,0x29, + 0xd1,0x71,0x8c,0xdf,0x4a,0x2a,0xfe,0x7a,0xa3,0x81,0xe7,0x7a,0x38,0xae,0x93,0x2e, + 0x81,0x49,0x48,0xbe,0xbb,0xbb,0xb,0x21,0x32,0x60,0x4c,0xda,0xec,0x8b,0x29,0x16, + 0xb,0x58,0xb6,0x43,0x10,0x69,0x4,0x6,0xa1,0x24,0x43,0x1b,0x37,0xe2,0x78,0x2e, + 0xc6,0xb2,0x69,0xf8,0x1,0x73,0xf3,0xf3,0xb4,0x5a,0x4d,0x36,0xe,0xe,0xb5,0x7b, + 0xf9,0xb1,0x8e,0x9,0xc2,0x80,0x7c,0x2e,0xff,0xe4,0xee,0xdd,0xbb,0xde,0x71,0xf5, + 0x55,0x57,0xfe,0xe8,0x4c,0x57,0xd0,0xad,0x6b,0x9,0xde,0x6b,0x6f,0x79,0xcd,0x65, + 0x23,0xe7,0x6f,0x7b,0xbc,0xb7,0xb7,0x8c,0x6d,0xdb,0x49,0xdf,0x2a,0x25,0xec,0xe5, + 0x48,0x5a,0x36,0xa5,0x12,0x2,0x4e,0xfc,0xa4,0x5a,0xad,0xce,0xfc,0x7c,0x95,0xb9, + 0xd9,0x39,0xe6,0xe6,0xe6,0x59,0x58,0x58,0x22,0x8e,0x35,0x96,0xad,0xf0,0xfd,0x80, + 0xf9,0xf9,0x2a,0x8e,0x63,0xd3,0xdd,0xdd,0x8d,0xeb,0xb8,0xc9,0x1a,0x23,0xd,0x91, + 0x16,0xb8,0xb9,0x2,0xda,0xb2,0x51,0x5e,0x16,0x5f,0x43,0x75,0x71,0x89,0xd0,0xf, + 0x91,0x4a,0x40,0xda,0x5d,0xf1,0x7d,0x9f,0x62,0xb1,0xf0,0x8b,0xcb,0x2f,0xdf,0xfd, + 0xa7,0x67,0x3,0x9c,0x75,0x3,0x4,0x70,0xcb,0xad,0x37,0xef,0x1e,0x19,0x19,0x79, + 0x72,0xc3,0x86,0x7e,0x1c,0xc7,0x4e,0x4a,0xf,0x29,0xda,0x0,0xb5,0xb,0xcc,0x34, + 0xf4,0x2d,0xa5,0x92,0x7a,0xcd,0xb2,0x90,0x69,0x61,0x9b,0xc9,0x64,0xf0,0xbc,0xc, + 0x51,0x18,0x31,0x39,0x39,0xc9,0x91,0xd1,0x23,0x94,0xcb,0x65,0xa,0xf9,0x7c,0xba, + 0x12,0x24,0xd1,0xc5,0x51,0x14,0x25,0x96,0x8b,0x0,0x8d,0x83,0xb2,0xf3,0x74,0x95, + 0x7b,0xe9,0xdf,0xd0,0x97,0xc8,0x0,0xad,0x69,0x5,0x1,0xc5,0x62,0xf1,0xe9,0xcb, + 0x2f,0xbb,0xec,0xf6,0x2b,0xaf,0xb8,0xfc,0xa7,0x67,0x6b,0xf5,0xee,0x19,0x2d,0xe2, + 0xbc,0xe5,0xb5,0xaf,0xd9,0x35,0x32,0x72,0xfe,0x23,0x9b,0x37,0x6d,0x6a,0x15,0x8b, + 0xc5,0xa4,0x81,0xc7,0xda,0xd1,0xd4,0x2e,0x4,0xd2,0x65,0x2d,0xb6,0x6d,0x33,0x30, + 0xb0,0x81,0x42,0x21,0xcf,0xe4,0xd4,0x14,0x7b,0x9f,0x7d,0x8e,0x30,0x8c,0x38,0x6f, + 0x78,0x18,0xcf,0xcb,0x24,0xfd,0x30,0x99,0x8,0xc5,0x38,0x4a,0x1a,0x8d,0xc4,0x86, + 0xc8,0xf,0xf0,0x3c,0x8f,0xfe,0xfe,0x3e,0xf2,0xf9,0x3c,0x71,0xca,0x39,0xb9,0x4c, + 0x66,0xe2,0x45,0x57,0x5f,0xf5,0xc7,0x97,0x5f,0xb6,0xfb,0x67,0x67,0x73,0xed,0xf7, + 0x59,0x59,0x69,0xff,0xe3,0x1f,0x3f,0xf6,0x81,0xc3,0x87,0x47,0xdf,0x5d,0x5d,0xa8, + 0x5a,0xf3,0xf3,0x55,0x96,0x6a,0xb5,0xc4,0x1b,0x3a,0x7a,0x81,0x7d,0xa2,0x57,0xb4, + 0xc1,0xb6,0x2c,0x6,0x7,0x7,0xd8,0xb2,0x69,0x23,0x61,0x1c,0xb3,0x6f,0x74,0x9c, + 0x6a,0xad,0xc6,0x60,0x5f,0xf,0x1b,0xba,0xbb,0xc1,0x98,0x36,0xf1,0xb7,0x5a,0xad, + 0x44,0x7c,0xa6,0x2b,0x3e,0x74,0x87,0x4f,0x65,0xb4,0x21,0x8c,0x42,0x5c,0xc7,0x99, + 0xba,0xfe,0xba,0x97,0xbf,0x6c,0xe7,0xce,0x1d,0x7b,0x39,0xcb,0xe3,0xac,0xac,0x93, + 0xb6,0x6d,0x7b,0xcf,0x65,0x97,0x5d,0x7a,0xff,0x73,0xcf,0xed,0xfb,0xb4,0xe7,0x7a, + 0xbb,0xcb,0xe9,0x92,0xb7,0x46,0xb3,0x41,0xe0,0x7,0x1d,0x32,0xc0,0x22,0x5f,0xc8, + 0xd3,0x5b,0xee,0xa6,0x50,0x2c,0xd2,0x6a,0xf9,0x54,0x16,0x17,0xa9,0x85,0x21,0x2a, + 0xe3,0x21,0xbd,0x2c,0x3e,0x82,0x8c,0x92,0xd8,0x4a,0xe1,0x7,0x21,0xad,0x66,0x2b, + 0x59,0xb,0x60,0xa9,0xb6,0xc5,0xaa,0x63,0x4d,0x14,0x6b,0xc2,0x28,0xc2,0x71,0x9d, + 0xda,0xd,0x37,0xbc,0xe2,0x65,0x83,0x3,0x1b,0x9e,0xe5,0x1c,0x8c,0xb3,0xf6,0x5b, + 0x8d,0x7d,0xfb,0xf6,0x8b,0x7c,0x3e,0x9f,0xaf,0x54,0x2a,0xaf,0xdc,0xb7,0xff,0xc0, + 0x87,0x2b,0x95,0xca,0x45,0x2,0xd2,0xd5,0xad,0x2,0x41,0x22,0x7,0x2c,0x2b,0xb1, + 0x4e,0x75,0xac,0x89,0xa3,0x88,0x25,0xbf,0xc5,0xe4,0x62,0x8d,0x7a,0xa4,0x29,0xe6, + 0x72,0x94,0x3c,0x87,0xfe,0x42,0xe,0x25,0x4,0xb5,0x5a,0x9d,0x46,0xb3,0x89,0x31, + 0x1a,0x3f,0x8,0xa8,0xd7,0x1b,0xc4,0x8,0xa4,0xa5,0x10,0xc6,0xd0,0xd7,0xd5,0xfd, + 0xcb,0xeb,0xaf,0x7f,0xe9,0x1b,0xfa,0xfb,0xfa,0xf6,0x76,0x77,0x77,0x9b,0xe7,0x35, + 0x40,0xcb,0x63,0xff,0x81,0x83,0x72,0x69,0x69,0xa9,0xec,0x38,0xf6,0xd5,0xe3,0xe3, + 0x13,0x6f,0xaa,0x54,0x66,0xff,0xd0,0xf7,0xfd,0x36,0x37,0x29,0x95,0xac,0xa,0x41, + 0x83,0x50,0x9,0xc1,0x2e,0xb6,0x7c,0xe6,0x1a,0x4d,0xc2,0x30,0xc2,0x53,0x92,0x2e, + 0xcf,0x25,0xa,0x43,0x1a,0xad,0x16,0x91,0xd6,0x44,0x61,0x44,0xb3,0x51,0xc7,0xb2, + 0xed,0x3,0xbd,0x1b,0x6,0x7e,0xd3,0xdf,0xdf,0x7b,0x70,0xa0,0xaf,0xef,0xd1,0x2d, + 0x1b,0x87,0xbe,0x7f,0xfe,0xb6,0xf3,0xe6,0x38,0x87,0xe3,0x9c,0xfd,0x5e,0xac,0x5a, + 0xad,0x8a,0xe7,0xf6,0xed,0x2f,0xe5,0x72,0xb9,0x4d,0xb5,0x5a,0x6d,0xf7,0xc2,0xc2, + 0xc2,0x95,0x8d,0x46,0xf3,0x45,0x61,0x18,0x5e,0x18,0xc7,0x71,0x31,0xad,0x6,0x96, + 0x57,0x66,0x4,0x7e,0x14,0x55,0x5b,0x7e,0x50,0x95,0xc2,0x4c,0x3b,0x96,0x3d,0xad, + 0xa4,0x1c,0x73,0x1c,0x67,0xcc,0x71,0xdd,0x9,0xa9,0xd4,0xb8,0xa5,0xe4,0xf4,0xe3, + 0x4f,0xfc,0x6a,0xae,0x54,0x2e,0x37,0xb6,0x6d,0x3b,0x2f,0x38,0x7f,0xeb,0xd6,0xc6, + 0xf0,0x96,0x4d,0x9a,0x73,0x3c,0xce,0xf9,0x4f,0x32,0xeb,0xf5,0xba,0xa8,0xd7,0xeb, + 0xa5,0xa9,0xa9,0xe9,0x1d,0x73,0x73,0xf3,0x2f,0xae,0xd7,0xeb,0xbb,0xfd,0x20,0xd8, + 0x14,0xc7,0x71,0xd7,0x3f,0x7f,0xfd,0xeb,0x76,0x1,0x7c,0xfa,0xd3,0x9f,0xfd,0xde, + 0xa6,0x4d,0x9b,0xe,0x47,0x71,0x3c,0x23,0x4,0x13,0x8e,0xe3,0x4c,0x78,0x9e,0x37, + 0x56,0x2c,0x14,0x26,0x73,0xb9,0xdc,0x9c,0xeb,0xb9,0x8d,0x7c,0x2e,0x17,0xf5,0xf6, + 0xf6,0xfe,0xd6,0x7f,0xc2,0x79,0xae,0x0,0x7a,0x1f,0x70,0x1d,0xf0,0x79,0xe0,0x9e, + 0x33,0x38,0xce,0x70,0xfa,0x5f,0x5,0x1e,0xe7,0x77,0x30,0xac,0x73,0x78,0xec,0x65, + 0x80,0x3a,0x41,0x3b,0xd1,0x78,0x18,0x78,0x68,0x8d,0x63,0xdc,0x9d,0x82,0xfc,0x27, + 0x1d,0xa0,0xbd,0x69,0x8d,0xcf,0x1f,0x3a,0xc3,0x9b,0xb1,0x6e,0x80,0xba,0x80,0x4b, + 0x4f,0x44,0x37,0x27,0xb8,0xbb,0x7,0x3b,0x9e,0xef,0x39,0xc9,0xf7,0xec,0x59,0x3, + 0xa0,0x83,0x6b,0x1c,0x67,0xf8,0x38,0xc7,0x7a,0xe8,0x77,0x5,0xd0,0xa5,0xc0,0x89, + 0xea,0x9a,0x87,0x80,0xeb,0x4f,0x27,0xad,0xd7,0x88,0x92,0xf5,0xd4,0x4d,0xcb,0xdf, + 0xbb,0xde,0xcf,0x9f,0x35,0x80,0x1e,0x3f,0xe,0x0,0x6f,0x7,0x6e,0xed,0x88,0x9e, + 0x37,0x77,0x84,0xfe,0x70,0xfa,0xf8,0x89,0x34,0xc2,0x4e,0x77,0x98,0x14,0x80,0xae, + 0x8e,0x63,0x5f,0x97,0xde,0xac,0xd7,0x3d,0xdf,0x38,0xa8,0xba,0x46,0xe8,0xf,0xa7, + 0x27,0x5c,0x5,0xde,0x7f,0x1c,0x72,0x3d,0x11,0x37,0xad,0x8e,0xd0,0xb5,0xa2,0xe3, + 0xa1,0x14,0x98,0xe5,0x14,0x7b,0x68,0x8d,0xf3,0x38,0xf7,0x63,0xd9,0xc3,0x39,0xcd, + 0xff,0xbb,0x4d,0x32,0xde,0xb7,0xc6,0x7b,0x5d,0x66,0x65,0x5c,0xd7,0xb1,0xfd,0x64, + 0x63,0xad,0x63,0x1d,0x58,0xe3,0xbd,0xeb,0xd2,0x6d,0x3f,0x3a,0xce,0xeb,0xb3,0xfa, + 0xbf,0x9e,0x6a,0x7e,0x38,0xbd,0xb3,0xc7,0x8b,0x9e,0x5b,0x57,0xcd,0x5c,0x6f,0x5e, + 0xb3,0xbb,0xb7,0xf2,0x7f,0xfd,0x9,0xb8,0x6f,0xb8,0xe3,0xf9,0x3b,0xfe,0x5f,0x99, + 0xe6,0xdf,0x9e,0x3e,0x7e,0xf2,0x78,0x2e,0xc8,0xaa,0x74,0xba,0x6e,0x9d,0x1a,0xe6, + 0x4d,0xab,0x40,0xbf,0x35,0xbd,0x29,0x7,0x3b,0xb8,0xf1,0x9c,0x8f,0xf5,0x44,0xd0, + 0x72,0x44,0xdc,0x79,0x9c,0xe8,0xea,0x8c,0xa0,0xe5,0x69,0xf7,0x47,0x6b,0x80,0x76, + 0x5d,0x7,0xf1,0xae,0x25,0x2d,0xde,0xbc,0x8a,0x93,0x96,0x49,0x7f,0xb8,0x83,0x1b, + 0x9f,0x77,0x11,0xf4,0xe6,0xf4,0xe4,0xef,0x39,0xce,0x9,0x7e,0xa2,0xe3,0xe4,0xbb, + 0x52,0xa1,0x58,0x5d,0x5,0xc4,0x8f,0x4e,0x31,0x4a,0xbb,0xd2,0x68,0x19,0xee,0x20, + 0xe8,0xae,0xdf,0x76,0x8a,0x9d,0x6e,0x4,0x2d,0xa7,0xcf,0x7d,0xc7,0xe1,0x9e,0xe5, + 0x34,0xe8,0x14,0x6c,0x77,0x0,0xbb,0x4f,0x83,0x83,0x2e,0xed,0x10,0x82,0x9d,0x1c, + 0xf7,0xfe,0xf4,0x58,0x5b,0xd3,0xd7,0x4f,0x3c,0xdf,0x22,0xa8,0xab,0x23,0x7d,0xbe, + 0x79,0x82,0xfd,0xde,0xf,0x94,0xce,0xc4,0x8,0x48,0xf9,0xe5,0xf1,0x55,0xa,0x7a, + 0xf5,0x24,0xf0,0xbc,0xe3,0xa0,0xeb,0x56,0xf1,0xc1,0xea,0xf1,0xcd,0x34,0x52,0x3e, + 0x79,0x86,0xe7,0x74,0x30,0x15,0x83,0x77,0x1c,0xe7,0x1c,0x2e,0x4d,0xf7,0x39,0x78, + 0x9c,0xcf,0x7f,0x63,0xd,0xad,0xf5,0x5b,0x8b,0xa0,0x87,0x56,0x15,0xa0,0x6b,0xa9, + 0xee,0x53,0x51,0xc9,0xa7,0x2,0xd2,0x5a,0xdf,0xff,0x89,0x55,0xe4,0xbf,0xfa,0xfd, + 0xeb,0xd2,0x8,0xeb,0x3a,0x5b,0xa2,0xf2,0x74,0x0,0xba,0x67,0x1d,0xc5,0xe0,0xf0, + 0x71,0x8a,0xd2,0xb5,0x74,0xd5,0xf1,0xb4,0xd0,0xf2,0xb8,0xbb,0x23,0x7a,0xee,0x5c, + 0xe3,0xa6,0x74,0xd6,0x8c,0x8f,0xff,0x2e,0x22,0x68,0x3d,0xc0,0x6c,0x3d,0xe,0x47, + 0xad,0x25,0x8,0xf,0x9d,0xa4,0xcc,0xb9,0xa3,0xe3,0xf3,0xd5,0x55,0xfb,0xbc,0xe, + 0xd8,0xd5,0xb1,0xed,0xce,0xe7,0xbb,0x61,0xf6,0xff,0xcd,0x90,0xff,0x4,0xc1,0x89, + 0xc7,0xff,0x1d,0x0,0xf9,0x67,0xa5,0x23,0x8d,0x2,0x6a,0x6f,0x0,0x0,0x0,0x0, + 0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/cam5_yes.png + 0x0,0x0,0x25,0x0, + 0x89, + 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, + 0x0,0x0,0x48,0x0,0x0,0x0,0x48,0x8,0x6,0x0,0x0,0x0,0x55,0xed,0xb3,0x47, + 0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13, + 0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0xa,0x4d,0x69,0x43,0x43,0x50,0x50,0x68,0x6f, + 0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66,0x69, + 0x6c,0x65,0x0,0x0,0x78,0xda,0x9d,0x53,0x77,0x58,0x93,0xf7,0x16,0x3e,0xdf,0xf7, + 0x65,0xf,0x56,0x42,0xd8,0xf0,0xb1,0x97,0x6c,0x81,0x0,0x22,0x23,0xac,0x8,0xc8, + 0x10,0x59,0xa2,0x10,0x92,0x0,0x61,0x84,0x10,0x12,0x40,0xc5,0x85,0x88,0xa,0x56, + 0x14,0x15,0x11,0x9c,0x48,0x55,0xc4,0x82,0xd5,0xa,0x48,0x9d,0x88,0xe2,0xa0,0x28, + 0xb8,0x67,0x41,0x8a,0x88,0x5a,0x8b,0x55,0x5c,0x38,0xee,0x1f,0xdc,0xa7,0xb5,0x7d, + 0x7a,0xef,0xed,0xed,0xfb,0xd7,0xfb,0xbc,0xe7,0x9c,0xe7,0xfc,0xce,0x79,0xcf,0xf, + 0x80,0x11,0x12,0x26,0x91,0xe6,0xa2,0x6a,0x0,0x39,0x52,0x85,0x3c,0x3a,0xd8,0x1f, + 0x8f,0x4f,0x48,0xc4,0xc9,0xbd,0x80,0x2,0x15,0x48,0xe0,0x4,0x20,0x10,0xe6,0xcb, + 0xc2,0x67,0x5,0xc5,0x0,0x0,0xf0,0x3,0x79,0x78,0x7e,0x74,0xb0,0x3f,0xfc,0x1, + 0xaf,0x6f,0x0,0x2,0x0,0x70,0xd5,0x2e,0x24,0x12,0xc7,0xe1,0xff,0x83,0xba,0x50, + 0x26,0x57,0x0,0x20,0x91,0x0,0xe0,0x22,0x12,0xe7,0xb,0x1,0x90,0x52,0x0,0xc8, + 0x2e,0x54,0xc8,0x14,0x0,0xc8,0x18,0x0,0xb0,0x53,0xb3,0x64,0xa,0x0,0x94,0x0, + 0x0,0x6c,0x79,0x7c,0x42,0x22,0x0,0xaa,0xd,0x0,0xec,0xf4,0x49,0x3e,0x5,0x0, + 0xd8,0xa9,0x93,0xdc,0x17,0x0,0xd8,0xa2,0x1c,0xa9,0x8,0x0,0x8d,0x1,0x0,0x99, + 0x28,0x47,0x24,0x2,0x40,0xbb,0x0,0x60,0x55,0x81,0x52,0x2c,0x2,0xc0,0xc2,0x0, + 0xa0,0xac,0x40,0x22,0x2e,0x4,0xc0,0xae,0x1,0x80,0x59,0xb6,0x32,0x47,0x2,0x80, + 0xbd,0x5,0x0,0x76,0x8e,0x58,0x90,0xf,0x40,0x60,0x0,0x80,0x99,0x42,0x2c,0xcc, + 0x0,0x20,0x38,0x2,0x0,0x43,0x1e,0x13,0xcd,0x3,0x20,0x4c,0x3,0xa0,0x30,0xd2, + 0xbf,0xe0,0xa9,0x5f,0x70,0x85,0xb8,0x48,0x1,0x0,0xc0,0xcb,0x95,0xcd,0x97,0x4b, + 0xd2,0x33,0x14,0xb8,0x95,0xd0,0x1a,0x77,0xf2,0xf0,0xe0,0xe2,0x21,0xe2,0xc2,0x6c, + 0xb1,0x42,0x61,0x17,0x29,0x10,0x66,0x9,0xe4,0x22,0x9c,0x97,0x9b,0x23,0x13,0x48, + 0xe7,0x3,0x4c,0xce,0xc,0x0,0x0,0x1a,0xf9,0xd1,0xc1,0xfe,0x38,0x3f,0x90,0xe7, + 0xe6,0xe4,0xe1,0xe6,0x66,0xe7,0x6c,0xef,0xf4,0xc5,0xa2,0xfe,0x6b,0xf0,0x6f,0x22, + 0x3e,0x21,0xf1,0xdf,0xfe,0xbc,0x8c,0x2,0x4,0x0,0x10,0x4e,0xcf,0xef,0xda,0x5f, + 0xe5,0xe5,0xd6,0x3,0x70,0xc7,0x1,0xb0,0x75,0xbf,0x6b,0xa9,0x5b,0x0,0xda,0x56, + 0x0,0x68,0xdf,0xf9,0x5d,0x33,0xdb,0x9,0xa0,0x5a,0xa,0xd0,0x7a,0xf9,0x8b,0x79, + 0x38,0xfc,0x40,0x1e,0x9e,0xa1,0x50,0xc8,0x3c,0x1d,0x1c,0xa,0xb,0xb,0xed,0x25, + 0x62,0xa1,0xbd,0x30,0xe3,0x8b,0x3e,0xff,0x33,0xe1,0x6f,0xe0,0x8b,0x7e,0xf6,0xfc, + 0x40,0x1e,0xfe,0xdb,0x7a,0xf0,0x0,0x71,0x9a,0x40,0x99,0xad,0xc0,0xa3,0x83,0xfd, + 0x71,0x61,0x6e,0x76,0xae,0x52,0x8e,0xe7,0xcb,0x4,0x42,0x31,0x6e,0xf7,0xe7,0x23, + 0xfe,0xc7,0x85,0x7f,0xfd,0x8e,0x29,0xd1,0xe2,0x34,0xb1,0x5c,0x2c,0x15,0x8a,0xf1, + 0x58,0x89,0xb8,0x50,0x22,0x4d,0xc7,0x79,0xb9,0x52,0x91,0x44,0x21,0xc9,0x95,0xe2, + 0x12,0xe9,0x7f,0x32,0xf1,0x1f,0x96,0xfd,0x9,0x93,0x77,0xd,0x0,0xac,0x86,0x4f, + 0xc0,0x4e,0xb6,0x7,0xb5,0xcb,0x6c,0xc0,0x7e,0xee,0x1,0x2,0x8b,0xe,0x58,0xd2, + 0x76,0x0,0x40,0x7e,0xf3,0x2d,0x8c,0x1a,0xb,0x91,0x0,0x10,0x67,0x34,0x32,0x79, + 0xf7,0x0,0x0,0x93,0xbf,0xf9,0x8f,0x40,0x2b,0x1,0x0,0xcd,0x97,0xa4,0xe3,0x0, + 0x0,0xbc,0xe8,0x18,0x5c,0xa8,0x94,0x17,0x4c,0xc6,0x8,0x0,0x0,0x44,0xa0,0x81, + 0x2a,0xb0,0x41,0x7,0xc,0xc1,0x14,0xac,0xc0,0xe,0x9c,0xc1,0x1d,0xbc,0xc0,0x17, + 0x2,0x61,0x6,0x44,0x40,0xc,0x24,0xc0,0x3c,0x10,0x42,0x6,0xe4,0x80,0x1c,0xa, + 0xa1,0x18,0x96,0x41,0x19,0x54,0xc0,0x3a,0xd8,0x4,0xb5,0xb0,0x3,0x1a,0xa0,0x11, + 0x9a,0xe1,0x10,0xb4,0xc1,0x31,0x38,0xd,0xe7,0xe0,0x12,0x5c,0x81,0xeb,0x70,0x17, + 0x6,0x60,0x18,0x9e,0xc2,0x18,0xbc,0x86,0x9,0x4,0x41,0xc8,0x8,0x13,0x61,0x21, + 0x3a,0x88,0x11,0x62,0x8e,0xd8,0x22,0xce,0x8,0x17,0x99,0x8e,0x4,0x22,0x61,0x48, + 0x34,0x92,0x80,0xa4,0x20,0xe9,0x88,0x14,0x51,0x22,0xc5,0xc8,0x72,0xa4,0x2,0xa9, + 0x42,0x6a,0x91,0x5d,0x48,0x23,0xf2,0x2d,0x72,0x14,0x39,0x8d,0x5c,0x40,0xfa,0x90, + 0xdb,0xc8,0x20,0x32,0x8a,0xfc,0x8a,0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3,0xd4, + 0x2,0x75,0x40,0xb9,0xa8,0x1f,0x1a,0x8a,0xc6,0xa0,0x73,0xd1,0x74,0x34,0xf,0x5d, + 0x80,0x96,0xa2,0x6b,0xd1,0x1a,0xb4,0x1e,0x3d,0x80,0xb6,0xa2,0xa7,0xd1,0x4b,0xe8, + 0x75,0x74,0x0,0x7d,0x8a,0x8e,0x63,0x80,0xd1,0x31,0xe,0x66,0x8c,0xd9,0x61,0x5c, + 0x8c,0x87,0x45,0x60,0x89,0x58,0x1a,0x26,0xc7,0x16,0x63,0xe5,0x58,0x35,0x56,0x8f, + 0x35,0x63,0x1d,0x58,0x37,0x76,0x15,0x1b,0xc0,0x9e,0x61,0xef,0x8,0x24,0x2,0x8b, + 0x80,0x13,0xec,0x8,0x5e,0x84,0x10,0xc2,0x6c,0x82,0x90,0x90,0x47,0x58,0x4c,0x58, + 0x43,0xa8,0x25,0xec,0x23,0xb4,0x12,0xba,0x8,0x57,0x9,0x83,0x84,0x31,0xc2,0x27, + 0x22,0x93,0xa8,0x4f,0xb4,0x25,0x7a,0x12,0xf9,0xc4,0x78,0x62,0x3a,0xb1,0x90,0x58, + 0x46,0xac,0x26,0xee,0x21,0x1e,0x21,0x9e,0x25,0x5e,0x27,0xe,0x13,0x5f,0x93,0x48, + 0x24,0xe,0xc9,0x92,0xe4,0x4e,0xa,0x21,0x25,0x90,0x32,0x49,0xb,0x49,0x6b,0x48, + 0xdb,0x48,0x2d,0xa4,0x53,0xa4,0x3e,0xd2,0x10,0x69,0x9c,0x4c,0x26,0xeb,0x90,0x6d, + 0xc9,0xde,0xe4,0x8,0xb2,0x80,0xac,0x20,0x97,0x91,0xb7,0x90,0xf,0x90,0x4f,0x92, + 0xfb,0xc9,0xc3,0xe4,0xb7,0x14,0x3a,0xc5,0x88,0xe2,0x4c,0x9,0xa2,0x24,0x52,0xa4, + 0x94,0x12,0x4a,0x35,0x65,0x3f,0xe5,0x4,0xa5,0x9f,0x32,0x42,0x99,0xa0,0xaa,0x51, + 0xcd,0xa9,0x9e,0xd4,0x8,0xaa,0x88,0x3a,0x9f,0x5a,0x49,0x6d,0xa0,0x76,0x50,0x2f, + 0x53,0x87,0xa9,0x13,0x34,0x75,0x9a,0x25,0xcd,0x9b,0x16,0x43,0xcb,0xa4,0x2d,0xa3, + 0xd5,0xd0,0x9a,0x69,0x67,0x69,0xf7,0x68,0x2f,0xe9,0x74,0xba,0x9,0xdd,0x83,0x1e, + 0x45,0x97,0xd0,0x97,0xd2,0x6b,0xe8,0x7,0xe9,0xe7,0xe9,0x83,0xf4,0x77,0xc,0xd, + 0x86,0xd,0x83,0xc7,0x48,0x62,0x28,0x19,0x6b,0x19,0x7b,0x19,0xa7,0x18,0xb7,0x19, + 0x2f,0x99,0x4c,0xa6,0x5,0xd3,0x97,0x99,0xc8,0x54,0x30,0xd7,0x32,0x1b,0x99,0x67, + 0x98,0xf,0x98,0x6f,0x55,0x58,0x2a,0xf6,0x2a,0x7c,0x15,0x91,0xca,0x12,0x95,0x3a, + 0x95,0x56,0x95,0x7e,0x95,0xe7,0xaa,0x54,0x55,0x73,0x55,0x3f,0xd5,0x79,0xaa,0xb, + 0x54,0xab,0x55,0xf,0xab,0x5e,0x56,0x7d,0xa6,0x46,0x55,0xb3,0x50,0xe3,0xa9,0x9, + 0xd4,0x16,0xab,0xd5,0xa9,0x1d,0x55,0xbb,0xa9,0x36,0xae,0xce,0x52,0x77,0x52,0x8f, + 0x50,0xcf,0x51,0x5f,0xa3,0xbe,0x5f,0xfd,0x82,0xfa,0x63,0xd,0xb2,0x86,0x85,0x46, + 0xa0,0x86,0x48,0xa3,0x54,0x63,0xb7,0xc6,0x19,0x8d,0x21,0x16,0xc6,0x32,0x65,0xf1, + 0x58,0x42,0xd6,0x72,0x56,0x3,0xeb,0x2c,0x6b,0x98,0x4d,0x62,0x5b,0xb2,0xf9,0xec, + 0x4c,0x76,0x5,0xfb,0x1b,0x76,0x2f,0x7b,0x4c,0x53,0x43,0x73,0xaa,0x66,0xac,0x66, + 0x91,0x66,0x9d,0xe6,0x71,0xcd,0x1,0xe,0xc6,0xb1,0xe0,0xf0,0x39,0xd9,0x9c,0x4a, + 0xce,0x21,0xce,0xd,0xce,0x7b,0x2d,0x3,0x2d,0x3f,0x2d,0xb1,0xd6,0x6a,0xad,0x66, + 0xad,0x7e,0xad,0x37,0xda,0x7a,0xda,0xbe,0xda,0x62,0xed,0x72,0xed,0x16,0xed,0xeb, + 0xda,0xef,0x75,0x70,0x9d,0x40,0x9d,0x2c,0x9d,0xf5,0x3a,0x6d,0x3a,0xf7,0x75,0x9, + 0xba,0x36,0xba,0x51,0xba,0x85,0xba,0xdb,0x75,0xcf,0xea,0x3e,0xd3,0x63,0xeb,0x79, + 0xe9,0x9,0xf5,0xca,0xf5,0xe,0xe9,0xdd,0xd1,0x47,0xf5,0x6d,0xf4,0xa3,0xf5,0x17, + 0xea,0xef,0xd6,0xef,0xd1,0x1f,0x37,0x30,0x34,0x8,0x36,0x90,0x19,0x6c,0x31,0x38, + 0x63,0xf0,0xcc,0x90,0x63,0xe8,0x6b,0x98,0x69,0xb8,0xd1,0xf0,0x84,0xe1,0xa8,0x11, + 0xcb,0x68,0xba,0x91,0xc4,0x68,0xa3,0xd1,0x49,0xa3,0x27,0xb8,0x26,0xee,0x87,0x67, + 0xe3,0x35,0x78,0x17,0x3e,0x66,0xac,0x6f,0x1c,0x62,0xac,0x34,0xde,0x65,0xdc,0x6b, + 0x3c,0x61,0x62,0x69,0x32,0xdb,0xa4,0xc4,0xa4,0xc5,0xe4,0xbe,0x29,0xcd,0x94,0x6b, + 0x9a,0x66,0xba,0xd1,0xb4,0xd3,0x74,0xcc,0xcc,0xc8,0x2c,0xdc,0xac,0xd8,0xac,0xc9, + 0xec,0x8e,0x39,0xd5,0x9c,0x6b,0x9e,0x61,0xbe,0xd9,0xbc,0xdb,0xfc,0x8d,0x85,0xa5, + 0x45,0x9c,0xc5,0x4a,0x8b,0x36,0x8b,0xc7,0x96,0xda,0x96,0x7c,0xcb,0x5,0x96,0x4d, + 0x96,0xf7,0xac,0x98,0x56,0x3e,0x56,0x79,0x56,0xf5,0x56,0xd7,0xac,0x49,0xd6,0x5c, + 0xeb,0x2c,0xeb,0x6d,0xd6,0x57,0x6c,0x50,0x1b,0x57,0x9b,0xc,0x9b,0x3a,0x9b,0xcb, + 0xb6,0xa8,0xad,0x9b,0xad,0xc4,0x76,0x9b,0x6d,0xdf,0x14,0xe2,0x14,0x8f,0x29,0xd2, + 0x29,0xf5,0x53,0x6e,0xda,0x31,0xec,0xfc,0xec,0xa,0xec,0x9a,0xec,0x6,0xed,0x39, + 0xf6,0x61,0xf6,0x25,0xf6,0x6d,0xf6,0xcf,0x1d,0xcc,0x1c,0x12,0x1d,0xd6,0x3b,0x74, + 0x3b,0x7c,0x72,0x74,0x75,0xcc,0x76,0x6c,0x70,0xbc,0xeb,0xa4,0xe1,0x34,0xc3,0xa9, + 0xc4,0xa9,0xc3,0xe9,0x57,0x67,0x1b,0x67,0xa1,0x73,0x9d,0xf3,0x35,0x17,0xa6,0x4b, + 0x90,0xcb,0x12,0x97,0x76,0x97,0x17,0x53,0x6d,0xa7,0x8a,0xa7,0x6e,0x9f,0x7a,0xcb, + 0x95,0xe5,0x1a,0xee,0xba,0xd2,0xb5,0xd3,0xf5,0xa3,0x9b,0xbb,0x9b,0xdc,0xad,0xd9, + 0x6d,0xd4,0xdd,0xcc,0x3d,0xc5,0x7d,0xab,0xfb,0x4d,0x2e,0x9b,0x1b,0xc9,0x5d,0xc3, + 0x3d,0xef,0x41,0xf4,0xf0,0xf7,0x58,0xe2,0x71,0xcc,0xe3,0x9d,0xa7,0x9b,0xa7,0xc2, + 0xf3,0x90,0xe7,0x2f,0x5e,0x76,0x5e,0x59,0x5e,0xfb,0xbd,0x1e,0x4f,0xb3,0x9c,0x26, + 0x9e,0xd6,0x30,0x6d,0xc8,0xdb,0xc4,0x5b,0xe0,0xbd,0xcb,0x7b,0x60,0x3a,0x3e,0x3d, + 0x65,0xfa,0xce,0xe9,0x3,0x3e,0xc6,0x3e,0x2,0x9f,0x7a,0x9f,0x87,0xbe,0xa6,0xbe, + 0x22,0xdf,0x3d,0xbe,0x23,0x7e,0xd6,0x7e,0x99,0x7e,0x7,0xfc,0x9e,0xfb,0x3b,0xfa, + 0xcb,0xfd,0x8f,0xf8,0xbf,0xe1,0x79,0xf2,0x16,0xf1,0x4e,0x5,0x60,0x1,0xc1,0x1, + 0xe5,0x1,0xbd,0x81,0x1a,0x81,0xb3,0x3,0x6b,0x3,0x1f,0x4,0x99,0x4,0xa5,0x7, + 0x35,0x5,0x8d,0x5,0xbb,0x6,0x2f,0xc,0x3e,0x15,0x42,0xc,0x9,0xd,0x59,0x1f, + 0x72,0x93,0x6f,0xc0,0x17,0xf2,0x1b,0xf9,0x63,0x33,0xdc,0x67,0x2c,0x9a,0xd1,0x15, + 0xca,0x8,0x9d,0x15,0x5a,0x1b,0xfa,0x30,0xcc,0x26,0x4c,0x1e,0xd6,0x11,0x8e,0x86, + 0xcf,0x8,0xdf,0x10,0x7e,0x6f,0xa6,0xf9,0x4c,0xe9,0xcc,0xb6,0x8,0x88,0xe0,0x47, + 0x6c,0x88,0xb8,0x1f,0x69,0x19,0x99,0x17,0xf9,0x7d,0x14,0x29,0x2a,0x32,0xaa,0x2e, + 0xea,0x51,0xb4,0x53,0x74,0x71,0x74,0xf7,0x2c,0xd6,0xac,0xe4,0x59,0xfb,0x67,0xbd, + 0x8e,0xf1,0x8f,0xa9,0x8c,0xb9,0x3b,0xdb,0x6a,0xb6,0x72,0x76,0x67,0xac,0x6a,0x6c, + 0x52,0x6c,0x63,0xec,0x9b,0xb8,0x80,0xb8,0xaa,0xb8,0x81,0x78,0x87,0xf8,0x45,0xf1, + 0x97,0x12,0x74,0x13,0x24,0x9,0xed,0x89,0xe4,0xc4,0xd8,0xc4,0x3d,0x89,0xe3,0x73, + 0x2,0xe7,0x6c,0x9a,0x33,0x9c,0xe4,0x9a,0x54,0x96,0x74,0x63,0xae,0xe5,0xdc,0xa2, + 0xb9,0x17,0xe6,0xe9,0xce,0xcb,0x9e,0x77,0x3c,0x59,0x35,0x59,0x90,0x7c,0x38,0x85, + 0x98,0x12,0x97,0xb2,0x3f,0xe5,0x83,0x20,0x42,0x50,0x2f,0x18,0x4f,0xe5,0xa7,0x6e, + 0x4d,0x1d,0x13,0xf2,0x84,0x9b,0x85,0x4f,0x45,0xbe,0xa2,0x8d,0xa2,0x51,0xb1,0xb7, + 0xb8,0x4a,0x3c,0x92,0xe6,0x9d,0x56,0x95,0xf6,0x38,0xdd,0x3b,0x7d,0x43,0xfa,0x68, + 0x86,0x4f,0x46,0x75,0xc6,0x33,0x9,0x4f,0x52,0x2b,0x79,0x91,0x19,0x92,0xb9,0x23, + 0xf3,0x4d,0x56,0x44,0xd6,0xde,0xac,0xcf,0xd9,0x71,0xd9,0x2d,0x39,0x94,0x9c,0x94, + 0x9c,0xa3,0x52,0xd,0x69,0x96,0xb4,0x2b,0xd7,0x30,0xb7,0x28,0xb7,0x4f,0x66,0x2b, + 0x2b,0x93,0xd,0xe4,0x79,0xe6,0x6d,0xca,0x1b,0x93,0x87,0xca,0xf7,0xe4,0x23,0xf9, + 0x73,0xf3,0xdb,0x15,0x6c,0x85,0x4c,0xd1,0xa3,0xb4,0x52,0xae,0x50,0xe,0x16,0x4c, + 0x2f,0xa8,0x2b,0x78,0x5b,0x18,0x5b,0x78,0xb8,0x48,0xbd,0x48,0x5a,0xd4,0x33,0xdf, + 0x66,0xfe,0xea,0xf9,0x23,0xb,0x82,0x16,0x7c,0xbd,0x90,0xb0,0x50,0xb8,0xb0,0xb3, + 0xd8,0xb8,0x78,0x59,0xf1,0xe0,0x22,0xbf,0x45,0xbb,0x16,0x23,0x8b,0x53,0x17,0x77, + 0x2e,0x31,0x5d,0x52,0xba,0x64,0x78,0x69,0xf0,0xd2,0x7d,0xcb,0x68,0xcb,0xb2,0x96, + 0xfd,0x50,0xe2,0x58,0x52,0x55,0xf2,0x6a,0x79,0xdc,0xf2,0x8e,0x52,0x83,0xd2,0xa5, + 0xa5,0x43,0x2b,0x82,0x57,0x34,0x95,0xa9,0x94,0xc9,0xcb,0x6e,0xae,0xf4,0x5a,0xb9, + 0x63,0x15,0x61,0x95,0x64,0x55,0xef,0x6a,0x97,0xd5,0x5b,0x56,0x7f,0x2a,0x17,0x95, + 0x5f,0xac,0x70,0xac,0xa8,0xae,0xf8,0xb0,0x46,0xb8,0xe6,0xe2,0x57,0x4e,0x5f,0xd5, + 0x7c,0xf5,0x79,0x6d,0xda,0xda,0xde,0x4a,0xb7,0xca,0xed,0xeb,0x48,0xeb,0xa4,0xeb, + 0x6e,0xac,0xf7,0x59,0xbf,0xaf,0x4a,0xbd,0x6a,0x41,0xd5,0xd0,0x86,0xf0,0xd,0xad, + 0x1b,0xf1,0x8d,0xe5,0x1b,0x5f,0x6d,0x4a,0xde,0x74,0xa1,0x7a,0x6a,0xf5,0x8e,0xcd, + 0xb4,0xcd,0xca,0xcd,0x3,0x35,0x61,0x35,0xed,0x5b,0xcc,0xb6,0xac,0xdb,0xf2,0xa1, + 0x36,0xa3,0xf6,0x7a,0x9d,0x7f,0x5d,0xcb,0x56,0xfd,0xad,0xab,0xb7,0xbe,0xd9,0x26, + 0xda,0xd6,0xbf,0xdd,0x77,0x7b,0xf3,0xe,0x83,0x1d,0x15,0x3b,0xde,0xef,0x94,0xec, + 0xbc,0xb5,0x2b,0x78,0x57,0x6b,0xbd,0x45,0x7d,0xf5,0x6e,0xd2,0xee,0x82,0xdd,0x8f, + 0x1a,0x62,0x1b,0xba,0xbf,0xe6,0x7e,0xdd,0xb8,0x47,0x77,0x4f,0xc5,0x9e,0x8f,0x7b, + 0xa5,0x7b,0x7,0xf6,0x45,0xef,0xeb,0x6a,0x74,0x6f,0x6c,0xdc,0xaf,0xbf,0xbf,0xb2, + 0x9,0x6d,0x52,0x36,0x8d,0x1e,0x48,0x3a,0x70,0xe5,0x9b,0x80,0x6f,0xda,0x9b,0xed, + 0x9a,0x77,0xb5,0x70,0x5a,0x2a,0xe,0xc2,0x41,0xe5,0xc1,0x27,0xdf,0xa6,0x7c,0x7b, + 0xe3,0x50,0xe8,0xa1,0xce,0xc3,0xdc,0xc3,0xcd,0xdf,0x99,0x7f,0xb7,0xf5,0x8,0xeb, + 0x48,0x79,0x2b,0xd2,0x3a,0xbf,0x75,0xac,0x2d,0xa3,0x6d,0xa0,0x3d,0xa1,0xbd,0xef, + 0xe8,0x8c,0xa3,0x9d,0x1d,0x5e,0x1d,0x47,0xbe,0xb7,0xff,0x7e,0xef,0x31,0xe3,0x63, + 0x75,0xc7,0x35,0x8f,0x57,0x9e,0xa0,0x9d,0x28,0x3d,0xf1,0xf9,0xe4,0x82,0x93,0xe3, + 0xa7,0x64,0xa7,0x9e,0x9d,0x4e,0x3f,0x3d,0xd4,0x99,0xdc,0x79,0xf7,0x4c,0xfc,0x99, + 0x6b,0x5d,0x51,0x5d,0xbd,0x67,0x43,0xcf,0x9e,0x3f,0x17,0x74,0xee,0x4c,0xb7,0x5f, + 0xf7,0xc9,0xf3,0xde,0xe7,0x8f,0x5d,0xf0,0xbc,0x70,0xf4,0x22,0xf7,0x62,0xdb,0x25, + 0xb7,0x4b,0xad,0x3d,0xae,0x3d,0x47,0x7e,0x70,0xfd,0xe1,0x48,0xaf,0x5b,0x6f,0xeb, + 0x65,0xf7,0xcb,0xed,0x57,0x3c,0xae,0x74,0xf4,0x4d,0xeb,0x3b,0xd1,0xef,0xd3,0x7f, + 0xfa,0x6a,0xc0,0xd5,0x73,0xd7,0xf8,0xd7,0x2e,0x5d,0x9f,0x79,0xbd,0xef,0xc6,0xec, + 0x1b,0xb7,0x6e,0x26,0xdd,0x1c,0xb8,0x25,0xba,0xf5,0xf8,0x76,0xf6,0xed,0x17,0x77, + 0xa,0xee,0x4c,0xdc,0x5d,0x7a,0x8f,0x78,0xaf,0xfc,0xbe,0xda,0xfd,0xea,0x7,0xfa, + 0xf,0xea,0x7f,0xb4,0xfe,0xb1,0x65,0xc0,0x6d,0xe0,0xf8,0x60,0xc0,0x60,0xcf,0xc3, + 0x59,0xf,0xef,0xe,0x9,0x87,0x9e,0xfe,0x94,0xff,0xd3,0x87,0xe1,0xd2,0x47,0xcc, + 0x47,0xd5,0x23,0x46,0x23,0x8d,0x8f,0x9d,0x1f,0x1f,0x1b,0xd,0x1a,0xbd,0xf2,0x64, + 0xce,0x93,0xe1,0xa7,0xb2,0xa7,0x13,0xcf,0xca,0x7e,0x56,0xff,0x79,0xeb,0x73,0xab, + 0xe7,0xdf,0xfd,0xe2,0xfb,0x4b,0xcf,0x58,0xfc,0xd8,0xf0,0xb,0xf9,0x8b,0xcf,0xbf, + 0xae,0x79,0xa9,0xf3,0x72,0xef,0xab,0xa9,0xaf,0x3a,0xc7,0x23,0xc7,0x1f,0xbc,0xce, + 0x79,0x3d,0xf1,0xa6,0xfc,0xad,0xce,0xdb,0x7d,0xef,0xb8,0xef,0xba,0xdf,0xc7,0xbd, + 0x1f,0x99,0x28,0xfc,0x40,0xfe,0x50,0xf3,0xd1,0xfa,0x63,0xc7,0xa7,0xd0,0x4f,0xf7, + 0x3e,0xe7,0x7c,0xfe,0xfc,0x2f,0xf7,0x84,0xf3,0xfb,0x25,0xd2,0x9f,0x33,0x0,0x0, + 0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x25,0x0,0x0,0x80,0x83,0x0,0x0, + 0xf9,0xff,0x0,0x0,0x80,0xe9,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0, + 0x3a,0x98,0x0,0x0,0x17,0x6f,0x92,0x5f,0xc5,0x46,0x0,0x0,0x1a,0x2d,0x49,0x44, + 0x41,0x54,0x78,0xda,0xec,0x9b,0x7b,0xb0,0x65,0x55,0x7d,0xe7,0x3f,0x6b,0xad,0xfd, + 0x3a,0xef,0x7b,0xcf,0xbd,0xb7,0xdf,0x4f,0x68,0x41,0x4,0xa1,0xdb,0xa8,0xa0,0x16, + 0x63,0x63,0xa2,0x41,0x5,0x41,0x63,0x26,0xc4,0x98,0x42,0x8a,0xc,0x6a,0x7c,0x80, + 0x49,0x4c,0x66,0x18,0x67,0x68,0xca,0x4c,0xa6,0xca,0xa4,0x82,0x54,0xcd,0x54,0x69, + 0xcc,0x14,0x28,0x92,0xa0,0x68,0x42,0xc0,0xe7,0x68,0x42,0xa3,0x25,0xf8,0x1c,0x1a, + 0xb0,0x31,0xf2,0xe8,0x6e,0x9a,0x7e,0xdc,0xc7,0xb9,0xf7,0x9e,0x73,0xcf,0x73,0x3f, + 0xd6,0x5a,0xf3,0xc7,0xde,0xe7,0xf4,0xe9,0xdb,0xb7,0x9b,0xee,0xe6,0x36,0x66,0xaa, + 0x66,0x55,0xdd,0x7b,0xce,0xd9,0xfb,0xec,0xbd,0xd7,0xfa,0xae,0xef,0xef,0xf7,0xfb, + 0xfe,0x7e,0x6b,0x1d,0x61,0xad,0xe5,0x4c,0xb7,0x5f,0x3e,0xf9,0xe4,0xa6,0x27,0x77, + 0xef,0xbe,0x54,0x5b,0xdc,0x2d,0xe7,0x9c,0xf3,0xc3,0xb3,0xce,0xda,0xfc,0xcb,0x72, + 0xb9,0xac,0xf9,0x15,0xb5,0xb7,0x5e,0x7e,0xb9,0x68,0xd4,0xe7,0x2f,0xc,0xf2,0xf9, + 0xf7,0x8e,0x8c,0x8c,0x5c,0x24,0x84,0x70,0xea,0xf5,0xfa,0x13,0xdd,0x4e,0xe7,0x4b, + 0x85,0x62,0xf1,0x47,0xdf,0xf9,0xce,0x77,0x7,0x7d,0x13,0x67,0x1a,0xa0,0x9f,0x3c, + 0xf2,0xc8,0xdb,0xf,0x1e,0x38,0x78,0xb3,0x85,0x2d,0xb1,0x81,0x56,0xa7,0xd3,0xa8, + 0x8c,0x54,0xbe,0x74,0xf9,0x5b,0x7e,0xe3,0xbf,0x16,0xa,0x5,0xfb,0x52,0x83,0x73, + 0xf1,0xc5,0xaf,0x2d,0xf9,0xbe,0xff,0xd5,0xdf,0xb9,0xe6,0x9a,0x37,0xbf,0xee,0x92, + 0xd7,0x51,0x2e,0x97,0x11,0x42,0xd0,0x6c,0x36,0x79,0xec,0xb1,0xc7,0xb8,0xeb,0xae, + 0x2f,0xec,0x9a,0x9d,0x9d,0xbd,0xfc,0xd1,0x47,0x77,0x4d,0x9d,0x71,0x80,0x1e,0xfe, + 0xfe,0xf7,0x7e,0xf7,0xe0,0xf3,0x7,0x3e,0x89,0x50,0x67,0x3b,0x9e,0x87,0xb6,0xd0, + 0xed,0xf5,0xb0,0xd6,0xd4,0xcf,0x79,0xd9,0x96,0x1b,0xd7,0xae,0x59,0xf3,0xc0,0xfa, + 0xd,0xeb,0xe7,0x5f,0x2a,0x70,0xde,0xf6,0xb6,0xb7,0x15,0x95,0x92,0x8f,0xfc,0xe9, + 0x9f,0xfe,0xd9,0x5,0x5b,0xb6,0x6c,0xa1,0xd3,0xe9,0x60,0x8c,0x49,0x99,0x22,0x5, + 0x95,0x7c,0x85,0xd9,0xc3,0xb3,0xfc,0xf9,0x5f,0x7d,0xf2,0xf9,0x3d,0xcf,0xed,0x7d, + 0xd5,0xc3,0x3f,0x78,0xb8,0x76,0xc6,0x0,0x7a,0xe8,0xc1,0x9d,0x1f,0x38,0xf0,0xfc, + 0x81,0xff,0xe6,0xb9,0x5e,0x55,0xb9,0x1e,0x16,0xb0,0xc2,0x82,0x5,0x63,0x2d,0x2, + 0xe6,0x8a,0xa5,0xc2,0xce,0x4a,0xa5,0xf2,0x43,0xcf,0xf5,0x7e,0x98,0xcf,0xe7,0x76, + 0xaf,0x5f,0xbf,0x6e,0xbe,0x54,0x2a,0x9d,0x91,0xe,0xbd,0xf9,0xcd,0x6f,0x16,0x42, + 0xf0,0xa9,0x9b,0x6f,0xfe,0xcf,0x7f,0x72,0xee,0xb9,0xe7,0xd2,0x6c,0x36,0x7,0xe7, + 0x2c,0x96,0xbc,0xc8,0x73,0xc8,0x1c,0xe2,0x2e,0x75,0x17,0x97,0xcf,0x5f,0xce,0xff, + 0xda,0xf1,0xb7,0xff,0x34,0x39,0x3f,0xf5,0x5b,0x67,0x4,0xa0,0x7f,0xfe,0xe7,0x7f, + 0xb9,0x69,0xff,0x73,0xcf,0xdf,0x96,0xcf,0xe5,0x71,0x3d,0x17,0xb,0x18,0x6b,0xfa, + 0x56,0x8d,0x44,0x90,0xe8,0x84,0x38,0x89,0xc1,0x42,0x2e,0x97,0xab,0x57,0x2a,0xe5, + 0x6f,0x94,0xca,0xa5,0xef,0x57,0x2a,0xe5,0xff,0x13,0xc7,0xc9,0x9e,0x75,0x6b,0xd7, + 0xcc,0x8d,0x8e,0x8e,0x9a,0xe5,0xea,0xd3,0xa5,0x97,0x5e,0xba,0xf6,0x4d,0x6f,0xba, + 0xec,0xc0,0x7,0x3f,0xf8,0x21,0x9a,0xcd,0x5,0xfa,0xe3,0xb6,0x58,0x72,0x22,0x47, + 0xdd,0xd6,0xb9,0x6e,0xe1,0x3a,0x26,0xed,0x24,0xdf,0x5d,0xff,0x5d,0x1e,0xbc,0xe7, + 0x5f,0xf8,0xe2,0xbd,0x77,0x6f,0x75,0x96,0x1b,0x9c,0x6f,0x7d,0xfb,0x7f,0xff,0xc9, + 0xc1,0x3,0x7,0xff,0x32,0x97,0xcb,0xe3,0xfa,0x1e,0xda,0x18,0xe0,0xe8,0x49,0xb0, + 0xd6,0x20,0x95,0x22,0x70,0x14,0x46,0x1b,0xc2,0x30,0x1c,0x39,0x3c,0x39,0xf9,0x9e, + 0xc3,0x93,0x53,0xef,0xf1,0x3c,0x8f,0xd1,0x91,0xca,0x7d,0x49,0x9c,0xdc,0xff,0xd4, + 0xd3,0xcf,0xfc,0x28,0x8e,0x93,0x83,0x1b,0xd6,0xaf,0x6f,0x6d,0xd8,0xb0,0xee,0x45, + 0x39,0x75,0x6b,0xcd,0x15,0x17,0x5f,0x72,0x9,0xc6,0x1a,0x1c,0xeb,0x90,0x90,0x60, + 0xb1,0x38,0x38,0x78,0x78,0xfc,0x45,0xe7,0x2f,0xf8,0xb9,0xfe,0x39,0x5f,0x2f,0x7f, + 0x9d,0x95,0xc9,0x4a,0xb6,0x5e,0xbc,0x8d,0x2f,0xdf,0x77,0xef,0x7b,0x97,0x15,0xa0, + 0xfb,0x1f,0xf8,0xda,0x27,0x67,0x66,0x6a,0x9f,0xc8,0xe5,0xf3,0x4,0x7e,0x80,0xd6, + 0xba,0x4f,0x1a,0xb0,0x2,0xd1,0x9f,0x33,0x31,0xe0,0x36,0x42,0x8,0x5c,0xcf,0xc5, + 0x13,0x1e,0xd6,0x5a,0x92,0x44,0x33,0x35,0x3d,0x73,0xf5,0xe1,0xc9,0xc9,0xab,0xf3, + 0xf9,0x2,0xd5,0x6a,0xf5,0x81,0x5a,0xad,0xf6,0xd5,0x44,0xc7,0x3f,0x9e,0x9a,0x9c, + 0x3e,0x50,0x2e,0x97,0x3a,0xe7,0x9f,0xff,0x8a,0x53,0x6,0x2b,0x8,0x82,0x57,0xae, + 0x9c,0x58,0x49,0x18,0xf5,0x78,0x4a,0x3f,0xc5,0x66,0xb5,0x19,0x85,0x22,0x27,0x72, + 0xdc,0x17,0xdd,0xc7,0x57,0xc2,0xaf,0x70,0x7b,0xf1,0x76,0x2e,0x74,0x2e,0x64,0x3e, + 0x9c,0x67,0xc5,0xc4,0xa,0x26,0x26,0xc6,0xcf,0x5d,0x36,0x80,0xbe,0xf2,0xd5,0x7f, + 0xb8,0xb3,0xb1,0xb0,0x70,0x6d,0x3e,0x97,0xc7,0xf3,0xbc,0x23,0xe0,0xd0,0x27,0x90, + 0x4d,0x5f,0x6,0xe0,0x1c,0xfd,0xd9,0x66,0x1f,0x1c,0xa5,0x70,0x5c,0x7,0x61,0x41, + 0x6b,0xc3,0xe4,0xe4,0xe4,0x95,0x87,0xe,0x1f,0xba,0xd2,0x51,0xe,0xd5,0xd1,0xd1, + 0x1f,0xf9,0xbe,0xf7,0xb9,0x83,0x7,0xf,0x7d,0x47,0x6b,0x3d,0x39,0x3b,0x3b,0x9b, + 0x6c,0xdb,0xb6,0xf5,0xa4,0xcc,0x50,0x39,0xca,0xcb,0xb9,0x39,0x16,0x4c,0x93,0x6b, + 0x9a,0xd7,0x70,0xa5,0x77,0x25,0x9f,0x2a,0x7c,0x8a,0x39,0x3b,0xc7,0x27,0x3a,0x9f, + 0xe0,0x2a,0xef,0x2a,0xde,0xed,0xbd,0x9b,0xa6,0x6d,0x62,0xad,0xc5,0x71,0x1c,0x5c, + 0xd7,0x75,0x97,0x5,0xa0,0xbf,0xbf,0xe7,0xcb,0x7f,0xd7,0xe9,0x74,0x7e,0xb7,0x58, + 0x28,0x22,0xa5,0x4c,0xc1,0x11,0x3,0x25,0x91,0xbe,0xed,0xff,0xb3,0x1c,0x31,0x39, + 0x31,0x74,0xbe,0xf,0xa1,0x38,0x72,0x5a,0x29,0x89,0x72,0x3c,0x40,0x60,0xad,0x65, + 0x7e,0x7e,0xfe,0xe2,0xd9,0xd9,0xd9,0x8b,0x9f,0x7a,0xfa,0x19,0x2a,0x95,0xca,0xc3, + 0xab,0x57,0xad,0xfc,0xcc,0x81,0x3,0x7,0x1f,0x1a,0xab,0x56,0xf,0x3d,0x7f,0xf0, + 0xa0,0x3e,0xe7,0x65,0x5b,0x8e,0xeb,0x50,0x7b,0xdd,0xee,0xa1,0xb9,0xe6,0x2c,0x2f, + 0x1f,0x3b,0x8f,0x9b,0x72,0x37,0xb1,0xa3,0xbd,0x83,0xcd,0x6a,0x33,0xe,0xe,0xc2, + 0x8,0x6e,0xc8,0xdd,0x80,0xc1,0x90,0xd8,0x4,0xdf,0xf1,0x69,0x36,0x9b,0x34,0x1a, + 0x8d,0x99,0x17,0xd,0xd0,0x17,0xef,0xfe,0xbb,0xfb,0xbb,0xdd,0xde,0x95,0xe5,0x52, + 0xaa,0x27,0x6,0x83,0xe4,0xe8,0xc1,0x1f,0x5,0xcc,0x10,0x73,0x8e,0x2,0xe7,0x18, + 0x40,0x8f,0x34,0x29,0x4,0xd2,0x73,0x7,0x60,0x35,0x9b,0xad,0xd7,0x2f,0x34,0x16, + 0x2e,0x79,0xe6,0xd9,0x3d,0xe4,0x72,0xb9,0x1f,0x57,0xab,0xd5,0xbb,0xf,0x15,0xe, + 0x7d,0x2d,0x8e,0xe3,0xfd,0x1b,0x37,0x6e,0x3c,0x86,0x55,0x71,0x9c,0x7c,0x63,0xf7, + 0xee,0xdd,0xb7,0x9c,0x7b,0xce,0xb9,0x7c,0x30,0xf8,0x20,0xbe,0xf0,0xb9,0xb9,0x7d, + 0x33,0xd6,0x5a,0x6e,0xc8,0xdd,0xc0,0x36,0xb5,0x8d,0x79,0x9b,0x2a,0x8e,0x5c,0x2e, + 0xc7,0x4f,0x7f,0xfa,0x53,0xe6,0xe7,0xe7,0x1f,0x50,0x3b,0x76,0xec,0x78,0x31,0xcc, + 0xf9,0x7a,0xa7,0xd3,0xb9,0x3c,0x9f,0xcf,0x4b,0x6d,0x74,0x1a,0xa9,0xb2,0xe8,0x20, + 0x90,0x8,0x71,0x64,0xe8,0x42,0x8,0x90,0xa,0x84,0x4a,0xdf,0xb,0x71,0x14,0x3c, + 0xc7,0x3,0x47,0x1c,0x73,0x4c,0x20,0x84,0x40,0x49,0x89,0x54,0x52,0x8,0x21,0x44, + 0x9c,0x24,0x6b,0x9a,0x8d,0x85,0x4b,0xf,0x1d,0x9e,0x7c,0x6f,0xbd,0xde,0x78,0x7b, + 0xad,0x36,0xeb,0x84,0x61,0xd4,0xfd,0xc5,0x93,0xff,0x7a,0xe5,0x13,0x4f,0xec,0xfe, + 0xbd,0x76,0xa7,0x2d,0x3c,0xd7,0x7d,0xf2,0x67,0x3f,0xfb,0xe9,0xdb,0x2e,0x79,0xdd, + 0xeb,0x56,0xe0,0xc0,0xaf,0x89,0x5f,0x43,0x20,0x78,0xda,0x3c,0xcd,0x8e,0xfc,0xe, + 0xca,0xb2,0x4c,0x42,0x82,0xeb,0xba,0x58,0x6b,0xb9,0xf3,0xce,0x3b,0x3a,0xed,0x76, + 0xe7,0x83,0xa7,0x1d,0xe6,0xff,0xe7,0x67,0xfe,0xe6,0x7e,0x29,0xc4,0xdb,0xc7,0xc6, + 0xc6,0xa4,0x35,0x6,0x6b,0x2d,0xd6,0xda,0x54,0x78,0x59,0x9b,0x42,0xa4,0x24,0x52, + 0xca,0xec,0xbd,0x42,0x8,0x95,0x99,0x99,0xc1,0xe,0xc2,0xbe,0x3d,0x9a,0x54,0xe2, + 0x68,0x8a,0x1d,0x3,0xce,0x22,0x6,0xf6,0x19,0x5,0xe9,0xf3,0x85,0x90,0x38,0x4a, + 0xd5,0xa4,0x94,0x93,0x52,0x88,0x55,0xca,0x51,0xe5,0x76,0xa7,0x3d,0xe5,0xfb,0xc1, + 0x17,0xef,0xb9,0xe7,0xee,0xc7,0x37,0xac,0x5f,0xff,0xf7,0x1f,0xfe,0xc8,0x47,0x48, + 0x7a,0x9,0x71,0x1c,0xd3,0xb0,0xd,0x2a,0xa2,0x82,0x46,0xe3,0x38,0xe,0xc5,0x62, + 0x91,0xbb,0xee,0xfa,0x2,0x5f,0xfa,0xd2,0x97,0xde,0xf6,0xe3,0x1f,0xff,0xe4,0x9b, + 0xf2,0x74,0xc0,0xf9,0x1f,0x7f,0xf3,0xb7,0x9f,0x9b,0x9c,0x9b,0xbb,0xd2,0xf1,0x3c, + 0xe9,0xc8,0xf4,0x16,0x42,0x8,0xa4,0x94,0x4,0x7e,0x40,0x3e,0x9f,0xc7,0xf7,0x7d, + 0x0,0x74,0xa2,0xd1,0x5a,0xa3,0x93,0x4,0xa3,0x35,0x60,0x10,0x42,0x20,0xa4,0x0, + 0x91,0x5e,0xb7,0x24,0x4b,0x8e,0x7,0x8e,0x38,0xf6,0x98,0x94,0xe9,0xb3,0x95,0x72, + 0x10,0x8,0x92,0x44,0x8f,0x27,0x49,0x7c,0x81,0x72,0xd5,0x78,0x94,0xc4,0x5e,0xb3, + 0xd9,0x5c,0x7f,0xf0,0xe0,0xc1,0x8f,0x5f,0x73,0xcd,0xef,0x5d,0xf8,0xc8,0x23,0x8f, + 0xfc,0xfe,0xed,0x9f,0xbe,0x9d,0xb9,0xc6,0x1c,0xf9,0x62,0x9e,0xb5,0xa5,0xb5,0xe4, + 0xa,0x39,0x8a,0xc5,0x22,0xdd,0x6e,0x97,0xcf,0x7e,0xe6,0x33,0xdc,0x7b,0xef,0xbd, + 0x1f,0x1e,0x19,0x19,0xf9,0xd6,0x69,0xa5,0x1a,0xf7,0x7f,0xed,0x1b,0x57,0x7c,0xff, + 0x67,0x8f,0xde,0xe1,0xf8,0xc1,0xf8,0x59,0x6b,0x56,0x31,0xe2,0x7b,0x18,0x21,0x6, + 0x21,0x3b,0x49,0xd2,0x99,0x91,0x4a,0xe2,0x3a,0xde,0xc0,0x92,0xac,0xb5,0x58,0x4, + 0x8,0x89,0x14,0xa,0x21,0x5,0x2,0x8b,0xcc,0xce,0x1d,0xcd,0x24,0x71,0x2,0xd6, + 0x88,0xe3,0x32,0xce,0x62,0x91,0x8,0x1c,0xc7,0xc1,0xf3,0x5c,0xc2,0x28,0x64,0x61, + 0xa1,0x49,0x14,0x45,0xf4,0x7a,0x3d,0x94,0x52,0x53,0xaf,0x7d,0xcd,0xab,0x57,0x7f, + 0xfc,0xe3,0x7f,0xbc,0x51,0x27,0xc9,0x7f,0x39,0xff,0x82,0xb,0x2e,0xdb,0xb8,0x71, + 0x23,0x42,0x48,0x73,0xe0,0xc0,0x1,0x67,0xf7,0xcf,0x9f,0xf8,0x49,0xab,0xd5,0xbe, + 0xf9,0xe1,0x47,0x1e,0x79,0xba,0x7f,0xd7,0x53,0x76,0xd2,0x4f,0xec,0x7e,0xf2,0x8f, + 0xda,0xed,0xee,0xf8,0x58,0x79,0x4,0xd,0x44,0x71,0x8c,0xeb,0xfb,0xd8,0xcc,0xd7, + 0x1c,0x38,0x78,0x80,0xa9,0xa9,0x69,0xca,0xe5,0x32,0xeb,0xd6,0xad,0xa5,0x52,0x19, + 0x1,0xc0,0x98,0xf4,0xbc,0x45,0xa4,0xaf,0xd6,0x22,0xac,0xc1,0x58,0x83,0x14,0x20, + 0xa4,0x4,0xd1,0xe7,0x92,0xe5,0xa8,0x70,0xf6,0x82,0x4d,0x64,0xe6,0x5,0x8e,0xa3, + 0x70,0x5c,0x45,0xaf,0xd7,0xa3,0xb1,0xb0,0x40,0x1c,0xc7,0x8,0x4,0x52,0x2a,0x7a, + 0x61,0x38,0xfa,0xc4,0xcf,0x77,0x7f,0xfb,0x3b,0xdf,0xf9,0xee,0x5b,0x80,0xeb,0x4f, + 0xe6,0xce,0xa7,0xc,0x50,0x18,0x45,0xaf,0x2b,0xf8,0x1e,0x81,0xb0,0xe8,0xb0,0x47, + 0xe4,0xba,0x38,0x9e,0x9f,0x3a,0xde,0xcc,0xd4,0x84,0x14,0x3,0x9f,0xd0,0xd7,0x3b, + 0x69,0x27,0x53,0x10,0x6c,0xa6,0xa6,0x8d,0xb5,0x60,0xd,0xda,0x82,0xc8,0xfc,0x87, + 0x14,0x43,0xa6,0x27,0xe4,0x11,0x91,0x24,0x16,0x43,0xb2,0xd8,0x99,0x83,0xe7,0xb8, + 0x28,0x47,0xd1,0xeb,0x85,0x34,0x16,0x1a,0xe8,0x44,0x3,0x82,0x58,0xeb,0xbe,0x2e, + 0xf3,0x66,0xe7,0xe6,0xde,0x7c,0x2a,0xe3,0x3d,0x25,0x13,0xfb,0xc2,0xdd,0xf7,0xdc, + 0x3d,0x33,0x3b,0xfb,0xae,0x5e,0x18,0x6,0xd2,0x1a,0x72,0x81,0x4f,0xa9,0x58,0x22, + 0x8,0x2,0x5c,0xc7,0xcd,0x80,0x1,0x93,0x39,0x6d,0xc7,0x71,0xb0,0x19,0x73,0xa4, + 0x94,0x47,0x86,0xd2,0xb7,0x20,0x9b,0xf2,0xce,0x18,0x93,0x39,0xf7,0x34,0xb8,0xa5, + 0x20,0xab,0xc1,0x35,0x62,0xc8,0xf9,0x88,0xa3,0x34,0xd4,0x40,0xa6,0xe3,0xba,0xe, + 0xae,0xe3,0xd2,0xed,0xf5,0xa8,0xd7,0x1b,0x68,0x9d,0xa0,0x94,0x22,0x8a,0x53,0x93, + 0x7,0xb0,0xc6,0x90,0x24,0x89,0x59,0xb7,0x7e,0xed,0xe7,0xde,0xfd,0xae,0x77,0x7e, + 0x60,0xd9,0x19,0x34,0x37,0x37,0xfb,0x9e,0x7c,0x2e,0x97,0x6a,0x12,0x2c,0x9e,0xeb, + 0x62,0x8c,0x21,0x8e,0x63,0x94,0xa3,0x90,0x46,0x22,0x44,0xea,0x3,0x0,0x8c,0x36, + 0x43,0x63,0xc9,0x6,0x66,0xd,0x58,0x91,0xa5,0x1b,0xa9,0x49,0x29,0xa5,0xd2,0x6b, + 0xb2,0x4c,0xdf,0xe8,0x4,0x63,0x34,0xc6,0x68,0xa4,0x10,0x8,0x29,0x33,0x76,0x1d, + 0x1b,0xe5,0x20,0x53,0xbd,0x8e,0x43,0xa7,0xd3,0xa1,0xb1,0xd0,0x1c,0x80,0x13,0x46, + 0x51,0xc6,0xa2,0x41,0xb6,0x83,0x52,0x4a,0x4e,0x4e,0x4e,0x5d,0xb,0x2c,0x2f,0x40, + 0x5f,0xff,0xc6,0x37,0xaf,0x4f,0x69,0xec,0x90,0x28,0x5,0xd6,0x20,0x65,0xa,0x88, + 0x31,0x6,0x1d,0x6b,0x84,0x9b,0xce,0x78,0x4a,0xe7,0x7e,0xd4,0x11,0x48,0x29,0x68, + 0x2c,0x34,0xe9,0xb4,0x3b,0xe4,0x73,0x1,0xe5,0x4a,0xf9,0x68,0xd8,0x6c,0x5f,0x16, + 0xa5,0xd7,0x38,0x8e,0x9b,0x59,0x96,0x45,0x6b,0x8d,0x49,0x92,0x54,0x2c,0x4a,0x89, + 0x54,0x4e,0xfa,0xdc,0x7e,0xa,0xa1,0x14,0xbe,0xe7,0xd2,0x6e,0xb5,0x69,0x34,0x9b, + 0x68,0xad,0x91,0x52,0x12,0x45,0x11,0x49,0x92,0x70,0xc4,0xab,0xd9,0x81,0xf9,0x77, + 0xba,0xdd,0xe0,0x64,0xc7,0x7d,0xd2,0x0,0xed,0x7f,0x6e,0xff,0x87,0x1c,0xa5,0x48, + 0x92,0x18,0x61,0x4c,0x1a,0x85,0xc4,0x91,0x38,0xa3,0xb5,0x46,0x39,0x12,0x21,0x9c, + 0x23,0x61,0x5a,0xa,0x1c,0xd7,0x45,0x22,0x98,0x9d,0x9b,0xe7,0xc0,0xe4,0x24,0x2b, + 0xc6,0xc6,0xa8,0x54,0xca,0x19,0x18,0x16,0x25,0x41,0x2a,0x45,0x14,0x1b,0x66,0x6a, + 0x33,0xec,0xdb,0xbb,0x17,0xdf,0xf3,0x58,0xb3,0x76,0xd,0x13,0xe3,0x13,0x4,0x41, + 0x9a,0xf4,0x1a,0x9b,0x9a,0x61,0xa2,0x13,0x88,0xd3,0xc9,0xf1,0x3c,0x1f,0xd7,0x73, + 0x69,0xb7,0x3b,0x2c,0xb4,0x5a,0x18,0x63,0x50,0x32,0x65,0x4e,0xa2,0x35,0x43,0xe9, + 0xf1,0xb1,0xfe,0xeb,0x24,0xdb,0x49,0xeb,0xa0,0xda,0xec,0xec,0x2b,0xe3,0x38,0x26, + 0xec,0xf5,0xd0,0x46,0xf,0x84,0x61,0x1a,0x3d,0xd2,0x99,0xb1,0x19,0x1d,0x84,0x48, + 0x67,0x3b,0xc,0x43,0x9e,0xdc,0xfd,0x24,0x8f,0x3d,0xfe,0x38,0x18,0xcd,0xf9,0xe7, + 0x9c,0xc3,0xd9,0x9b,0x37,0x81,0x90,0x58,0x6b,0x51,0x2,0x7c,0x5,0x9e,0x4,0x29, + 0x2c,0x89,0x4e,0x68,0xb5,0x5b,0x34,0x5b,0x4d,0xe2,0x38,0x3e,0x32,0xac,0xec,0x7e, + 0x8e,0xe3,0xe2,0xbb,0x1e,0xbe,0x1f,0xe0,0xba,0x2e,0xc6,0x6a,0x9a,0xb,0x4d,0x9a, + 0xad,0x56,0xe6,0xc7,0x45,0xca,0x1c,0xad,0x97,0x48,0x61,0x86,0x0,0x92,0x82,0x2f, + 0xdc,0xf5,0xc5,0x9d,0xcb,0xc6,0xa0,0x7b,0xbe,0x7c,0xef,0x7f,0xa,0xc3,0xd0,0xc9, + 0xe7,0xf2,0xb8,0x81,0x43,0xe0,0xfb,0xb8,0x9e,0x87,0xe3,0x38,0x28,0xc7,0xc9,0x22, + 0x8e,0x38,0x12,0xc9,0xb2,0x88,0x65,0x8c,0xa5,0x3e,0x5f,0xa7,0xdd,0x69,0xb1,0x6a, + 0xd5,0x6a,0x56,0xe7,0x2,0xf2,0xb9,0x80,0x38,0x8a,0x11,0x80,0xb1,0x82,0xc8,0x80, + 0x30,0x6,0x6b,0x5,0x13,0x63,0xe3,0x14,0x5f,0xfd,0x6a,0x4,0x82,0x20,0x8,0x10, + 0x52,0x60,0x6c,0x2a,0x2c,0x1d,0xe5,0x20,0xa5,0x20,0x8e,0x22,0xa4,0x72,0xf0,0x5c, + 0x87,0x4e,0xaf,0x47,0xbd,0xd1,0x40,0x29,0x5,0x42,0x10,0xc7,0x9,0x49,0xa2,0x7, + 0xcc,0x3e,0x6,0x9c,0xec,0xa3,0xa3,0x1c,0x16,0x9a,0xcd,0xd7,0x2c,0x1b,0x40,0x87, + 0xf,0x1d,0x7e,0xaf,0xe3,0xb8,0x48,0xd7,0x45,0xf8,0x3e,0x6e,0xa1,0x48,0x31,0x97, + 0x43,0x9,0x81,0x31,0x7a,0x10,0xc6,0xfb,0x9d,0xea,0xbf,0xcf,0x5,0x1,0xe7,0xbd, + 0xfc,0xe5,0x84,0x71,0x48,0x2e,0x97,0x27,0x17,0x4,0xe8,0x44,0xf,0x3a,0x6e,0x10, + 0x98,0x7e,0xc9,0x48,0x80,0xef,0xfb,0xe4,0xf3,0x5,0x4,0x6,0xa3,0xd,0xda,0xa6, + 0xc5,0x36,0x89,0xa0,0xd5,0x6e,0x33,0xdf,0x5c,0xc0,0xcf,0xe5,0x31,0x2,0xba,0xf5, + 0x6,0xd2,0x1a,0x72,0x85,0x2,0x46,0x6b,0x92,0x44,0xf,0xea,0xcb,0xbc,0x80,0x82, + 0x52,0x52,0x12,0x45,0x71,0x7e,0x59,0x0,0xfa,0xe6,0xb7,0xbe,0xfd,0xae,0x5e,0xaf, + 0xf7,0x8a,0xd5,0xab,0x57,0x93,0x8,0xc1,0x5c,0xbb,0x4b,0x33,0x36,0x8c,0x9,0x49, + 0xb5,0x90,0x27,0x70,0x53,0xa7,0xa9,0x4d,0x26,0x3,0x45,0x2a,0xda,0xac,0xb6,0x28, + 0xa5,0x58,0xb1,0x6a,0xc5,0xa2,0xde,0x5a,0xc0,0x1d,0x88,0xc5,0x23,0x12,0xc7,0x62, + 0xb0,0x68,0x1d,0x83,0x35,0x18,0x63,0x51,0x52,0x12,0x46,0x11,0xb5,0xd9,0x39,0xe, + 0xcd,0xcc,0xd2,0x35,0x96,0xd2,0x68,0x15,0x57,0x49,0xe2,0x76,0x8b,0xbc,0x14,0x14, + 0xa,0x85,0x54,0xe7,0x98,0xd4,0xe7,0x8,0xb1,0x4,0x44,0x47,0xbd,0xb5,0x20,0x45, + 0x56,0xe9,0x7c,0x91,0x0,0xfd,0xe2,0x17,0xff,0x3a,0xbe,0xb0,0xd0,0x7c,0x6d,0xa9, + 0x58,0x62,0xe5,0x8a,0x15,0xd4,0x16,0x16,0xe8,0xce,0xd6,0x89,0x94,0x87,0x13,0xc6, + 0x98,0x64,0x1,0x95,0xc4,0x44,0xdd,0x2e,0xda,0x5a,0xa4,0x14,0xb8,0x8e,0x83,0xeb, + 0x7a,0x4,0x7e,0x80,0xef,0x7b,0x20,0x41,0x22,0xd3,0x1,0x88,0x34,0x42,0x39,0x2a, + 0x4d,0x35,0xac,0xb1,0x58,0x6b,0xb0,0x36,0xd3,0x4e,0x26,0x49,0x5,0xa4,0x31,0x80, + 0xa0,0x17,0x46,0xd4,0xe6,0xe6,0xd8,0x7f,0xf0,0x10,0x93,0xb5,0x1a,0xf9,0xea,0x38, + 0x74,0xbb,0x14,0xfc,0x80,0x5c,0xae,0x80,0x8b,0x21,0xc,0x43,0xb4,0xb1,0x47,0x80, + 0x39,0x49,0x59,0x67,0x96,0x3,0xa0,0xc9,0xa9,0xa9,0x6d,0x4a,0xc9,0x57,0x8e,0x8e, + 0x56,0x90,0x52,0x90,0xf7,0x3d,0x56,0x8c,0x8d,0x92,0x78,0x1,0x46,0x6b,0xf6,0x1f, + 0x3a,0xcc,0xf4,0x81,0x3,0x84,0xed,0x36,0x7e,0x10,0xe0,0xb9,0x4e,0x9a,0x7,0xf9, + 0x1e,0xc5,0x42,0x91,0x72,0xb9,0x4c,0xa9,0x54,0xa4,0x50,0x28,0xe0,0xfb,0x7e,0x16, + 0x7e,0x63,0x12,0x99,0xe0,0x66,0xbe,0xb,0x1,0xda,0x68,0x8c,0x36,0x98,0xc4,0xc, + 0x6a,0xd8,0xc6,0x18,0xe6,0x1b,0xb,0xcc,0xcc,0xd5,0xd1,0xda,0x50,0xa,0x2,0x5c, + 0x1,0x8e,0x31,0x84,0x61,0x17,0x29,0xa1,0x90,0xcb,0xa1,0xfb,0x42,0xd7,0x8a,0xa5, + 0xcd,0xeb,0x38,0x1f,0x24,0x82,0x7b,0xbf,0xf2,0xf,0x7f,0xf9,0xdb,0xef,0x7e,0xd7, + 0xc7,0x4f,0x1b,0xa0,0x6e,0xa7,0xfb,0x1b,0x4a,0xaa,0x8b,0x5c,0xd7,0x23,0x4e,0x12, + 0x7c,0xd7,0x65,0x34,0x17,0xb0,0xe7,0xb9,0xfd,0x84,0x49,0x42,0xaf,0xdb,0x45,0x27, + 0x9,0x23,0xa3,0xa3,0x94,0x4b,0x25,0x1c,0x47,0x61,0x8c,0x21,0x8a,0x22,0xe6,0xe7, + 0xe7,0xa9,0xd5,0x6a,0x38,0x8e,0x43,0xb9,0x5c,0x66,0xd5,0xea,0x55,0x54,0x47,0xab, + 0xf8,0xbe,0x8f,0x31,0x86,0x30,0x8c,0x50,0x59,0x39,0x44,0x1b,0x9d,0xfa,0xa6,0x4c, + 0x59,0x63,0x2d,0xed,0x4e,0x97,0x76,0xb7,0x83,0xc0,0x52,0x28,0xe4,0x29,0x17,0x8b, + 0x8,0x29,0xe8,0x45,0x21,0x51,0x12,0xa3,0xa,0x39,0x7c,0xcf,0x3d,0x8e,0xa9,0xd8, + 0x25,0xd9,0x34,0xec,0x2b,0x95,0x52,0x74,0xbb,0xdd,0x91,0x7,0xbe,0xf6,0xf5,0x37, + 0x5e,0x79,0xc5,0xdb,0x1f,0x3a,0x2d,0x80,0xe2,0x24,0x7e,0xbd,0xb5,0xac,0xed,0xdf, + 0x36,0x4e,0x34,0xfb,0xf6,0xec,0x61,0xff,0xbe,0xe7,0xa8,0x54,0xab,0x6c,0xd8,0xb8, + 0x91,0xd2,0xb9,0xe7,0xe0,0x48,0x99,0x66,0xd2,0x43,0x45,0x30,0x6d,0x34,0xbd,0x6e, + 0x8f,0x56,0xab,0xc5,0x4c,0x6d,0x86,0x27,0x9e,0x78,0x82,0xb1,0xd1,0x2a,0x9b,0x37, + 0x6f,0xa6,0x3a,0x56,0xc5,0x62,0xd1,0xda,0xc,0xd2,0x92,0xc1,0xeb,0x90,0xde,0x91, + 0x2,0xa,0x41,0x80,0x74,0x1c,0x3c,0xdf,0x47,0x1b,0x8d,0x6a,0xb7,0x19,0x73,0x4b, + 0x94,0xa,0xf9,0xd4,0xef,0x2d,0xf6,0x2f,0x4b,0xe7,0xb2,0x47,0xea,0x2,0xfd,0x4c, + 0x45,0x4a,0xa2,0x24,0xae,0xb4,0x3b,0x9d,0x91,0xd3,0x66,0x90,0xd6,0xe6,0x2,0x63, + 0xd,0x4a,0x29,0xb4,0x36,0xd4,0x6a,0x33,0xec,0xd9,0xb7,0x8f,0xd,0x1b,0x36,0xb0, + 0x69,0xd3,0x46,0xa,0x85,0x42,0x9a,0x76,0x88,0x23,0xaa,0x38,0x49,0x74,0x56,0xc, + 0x73,0xc9,0x5,0x1,0x95,0x4a,0x99,0x15,0x2b,0x26,0xa8,0xd7,0xeb,0x1c,0x3e,0x7c, + 0x98,0x47,0x1f,0xdb,0xc5,0xfa,0x35,0x6b,0xd9,0x7c,0xd6,0x59,0xb8,0x9e,0x9b,0x25, + 0x84,0xe9,0x18,0x12,0x9d,0xc,0xfc,0x11,0xc6,0xe0,0x7b,0x1e,0x5e,0xc1,0xc3,0xf3, + 0x3c,0x7a,0x51,0x44,0xb7,0x1b,0x33,0x36,0x52,0xc1,0x77,0x5d,0xe2,0x24,0x21,0xd1, + 0x3a,0x4d,0x3f,0x6,0xd9,0xbf,0x58,0x82,0x3d,0x76,0x49,0x79,0x28,0xa5,0xc0,0x24, + 0xba,0x1a,0xf6,0xc2,0xb1,0xd3,0x6,0xc8,0x1a,0x5b,0xc6,0xa6,0xc2,0x2a,0x8a,0x22, + 0x9a,0xcd,0x16,0x17,0x5d,0xf8,0x4a,0x36,0x6c,0xd8,0x40,0x10,0x78,0x74,0x3b,0x21, + 0x51,0x14,0x81,0x48,0x43,0xa7,0x52,0x8a,0x5c,0xe0,0xe3,0xf9,0x1e,0x42,0x8,0x7a, + 0xbd,0x1e,0x71,0xac,0x71,0x5d,0xf,0xdf,0xf7,0x29,0x14,0xa,0x4c,0x4f,0x4f,0x73, + 0x78,0x72,0x92,0xb9,0x7a,0x9d,0xf3,0xce,0x3b,0x8f,0x42,0xa1,0x48,0x6c,0xd2,0xf4, + 0xc0,0xf5,0x3c,0xa2,0x5e,0x98,0x2a,0x62,0xc7,0xa1,0x52,0x28,0xe0,0x7b,0x1e,0x61, + 0x18,0xa2,0xa4,0xa0,0x5c,0xc8,0xe3,0x38,0x8a,0x24,0xd1,0x68,0x6d,0x71,0x54,0xe6, + 0xfc,0x8f,0xcb,0x1e,0x3b,0xb4,0x50,0x30,0xbc,0x46,0x66,0x7,0xb5,0x2b,0xfb,0x2, + 0xc2,0xfa,0x5,0xc2,0xbc,0x95,0x8,0x48,0xb2,0x5c,0x68,0xed,0xda,0x35,0x54,0x46, + 0x2a,0x2c,0x34,0x9a,0x3c,0xfd,0xf4,0x33,0x34,0x1a,0xb,0x4,0x81,0x4f,0xb1,0x58, + 0x18,0xf4,0x25,0x17,0x4,0x58,0x4,0x9e,0xeb,0xb3,0x7e,0xfd,0x1a,0x2a,0x65,0x9f, + 0x76,0xa7,0x4b,0xaf,0xd7,0xa3,0x54,0x2c,0xe1,0x28,0x7,0xd7,0xf5,0x99,0x9e,0x9e, + 0xe2,0xf1,0xc7,0x1e,0xa3,0x38,0x5a,0x45,0xe5,0xa,0x38,0x9e,0xcb,0xd8,0x48,0x89, + 0x8a,0xe7,0x23,0x8d,0xc1,0x55,0xe,0x12,0x4b,0x1c,0x47,0x18,0xa3,0xf1,0x94,0x44, + 0x48,0x89,0x45,0xa0,0x4d,0x4c,0xab,0xd5,0xa4,0xd3,0x69,0x53,0x1d,0x1b,0xcb,0xca, + 0x22,0x76,0x49,0x17,0x24,0x8e,0x81,0xcc,0xe,0xf2,0x32,0x63,0x2d,0x36,0x1b,0xdb, + 0xe9,0xb,0xc5,0xcc,0x3f,0x38,0x8e,0x43,0x90,0xb,0x98,0x9a,0x9c,0x62,0xff,0xf3, + 0x7,0xa8,0xd5,0x66,0x1,0x28,0x9b,0x12,0x41,0xe0,0x63,0x2d,0x83,0xe5,0x9e,0x7d, + 0x7b,0x9f,0x67,0xcf,0x9e,0x83,0x6c,0x39,0x7b,0xb,0xe7,0x9c,0xbb,0x89,0x73,0x5e, + 0xb6,0x89,0x20,0x28,0x53,0x6f,0x2c,0xe0,0x26,0x9a,0xea,0xd8,0x28,0x8,0xcb,0xe1, + 0x43,0x87,0x99,0x9c,0x9e,0xa6,0xb2,0x7a,0x2d,0x2b,0x57,0xad,0x46,0xe4,0x7c,0xea, + 0xcd,0x6,0x79,0x25,0x90,0x22,0xbd,0x5f,0xbf,0x1c,0x93,0x26,0xaa,0x12,0x63,0x5, + 0xcd,0x66,0x8b,0x83,0x7,0xf,0x60,0x8c,0x65,0x7c,0x62,0x22,0x65,0x90,0x5d,0x42, + 0xef,0x9c,0x88,0x1c,0xf6,0x5,0xfc,0xd6,0xc9,0x2,0x64,0xad,0x45,0xaa,0xb4,0xdc, + 0xd0,0x68,0x2c,0xb0,0x77,0xef,0x3e,0x5a,0xad,0xf6,0x90,0x59,0xa7,0xe5,0x6,0x21, + 0x24,0x5a,0x1b,0xa4,0x54,0x74,0x3a,0x6d,0xf6,0xef,0xdf,0xcb,0xfc,0xfc,0x3c,0xbf, + 0x7c,0xea,0x29,0x5e,0xf6,0xb2,0x4d,0xbc,0xfe,0xf5,0xaf,0x61,0xc5,0xca,0x9,0xe6, + 0xcc,0x1c,0x61,0x1c,0x52,0x2e,0x97,0xb1,0x42,0x32,0x53,0x9b,0xc5,0x26,0x11,0x3a, + 0x8e,0xe9,0x2,0xb,0xf3,0xd,0xd6,0x8f,0x8f,0xe2,0x28,0x48,0x62,0x9d,0x95,0x3a, + 0x44,0x26,0x40,0xd3,0x1a,0x77,0x9c,0x24,0xb8,0x9e,0x4f,0x3e,0x97,0xcb,0x8e,0x9b, + 0x13,0xf9,0xe6,0xa3,0x40,0xe8,0x3,0x2e,0x52,0x79,0x91,0x33,0xc6,0xe4,0x4f,0x1b, + 0x20,0xc7,0x71,0x9e,0x8f,0xe2,0x78,0xbd,0xcc,0x4a,0x1a,0x53,0x53,0x53,0x74,0x3a, + 0x3d,0x94,0x52,0x48,0x21,0xe9,0x46,0x3d,0x7a,0x61,0xea,0x33,0x3c,0xdf,0xc3,0x75, + 0xb3,0x9d,0x1b,0x2,0x20,0xa2,0x5e,0x9f,0x26,0xec,0x36,0x79,0x6e,0xdf,0x5e,0x26, + 0xa7,0x26,0xf9,0xcd,0xb7,0xbc,0x89,0x8d,0x1b,0xd7,0x11,0xc7,0x31,0x71,0xa2,0x29, + 0x8f,0x8c,0x0,0x82,0xa9,0x99,0x19,0xe,0xfc,0x62,0x37,0xd5,0x89,0x15,0x14,0x2, + 0xf,0xdf,0xf5,0x70,0x94,0x18,0x24,0xb5,0xa9,0xdc,0x16,0x68,0x6d,0xe8,0x85,0x21, + 0xbe,0xef,0xb3,0x66,0xcd,0x1a,0x5c,0xc7,0xc1,0x1a,0x33,0x3c,0xfc,0x63,0xeb,0xd8, + 0xc7,0x2e,0x4d,0x22,0x84,0xa0,0xd3,0xe9,0x52,0x29,0x97,0x17,0xca,0xe5,0xd2,0xe1, + 0xd3,0x6,0xa8,0x50,0x28,0xec,0x34,0xad,0xd6,0x3b,0xe3,0x38,0x2e,0x26,0x49,0x4c, + 0xab,0xd5,0x1a,0x68,0x1d,0x91,0x29,0xe4,0x30,0x8a,0x69,0x77,0x3a,0x4,0xb9,0x0, + 0x47,0x39,0x68,0xad,0x29,0x14,0xa,0x8c,0x8e,0x56,0x69,0x2e,0x34,0x28,0x97,0x3c, + 0xb4,0x8e,0x79,0xe4,0xe1,0x87,0x69,0x35,0x1a,0x5c,0xfd,0xce,0x2b,0xd8,0xb0,0x71, + 0x3,0x51,0x92,0xd0,0xb,0x23,0xf2,0xb9,0x1c,0x81,0x52,0xd4,0x66,0xa6,0x9,0x1d, + 0xc5,0xd9,0xaf,0x38,0xf,0xcf,0x4d,0x19,0x69,0x11,0xc4,0x71,0x84,0xb5,0xe9,0xc2, + 0x61,0x92,0x68,0x92,0x24,0xc1,0x75,0x5c,0x94,0x92,0xa9,0x24,0xd0,0xe6,0x38,0xe5, + 0xeb,0xa5,0x96,0x24,0xd3,0x16,0x85,0x11,0x52,0xc8,0xda,0xfb,0x6f,0xb8,0xfe,0xad, + 0x2f,0xb8,0x64,0x7d,0xa2,0x85,0xc3,0xc6,0xc2,0x82,0xee,0x76,0x7b,0xeb,0x3a,0x9d, + 0xce,0x59,0xc6,0x58,0x6a,0xb5,0x1a,0x5a,0x1b,0xb2,0x45,0x8c,0x54,0xcb,0x18,0x8d, + 0x8e,0x13,0x4a,0xc5,0xe2,0x40,0x1d,0x7,0x41,0x40,0x75,0x6c,0x94,0x4a,0x65,0x4, + 0x29,0x15,0x63,0xd5,0xa,0x8e,0xa3,0x78,0xee,0xb9,0xfd,0x4c,0x4d,0xcd,0xb0,0x61, + 0xe3,0x6,0x46,0x47,0x2a,0x44,0x61,0x88,0x35,0x6,0xcf,0x73,0x53,0xdd,0xd4,0xe9, + 0x30,0x31,0x36,0x86,0xeb,0xb9,0xa9,0xe3,0xb5,0x6,0x61,0x2d,0x8e,0x4,0x29,0x20, + 0x8a,0xc2,0x54,0x3b,0xd9,0x7e,0x8a,0x62,0x97,0x0,0x45,0xc,0x12,0xe6,0xbe,0xe8, + 0xec,0x7f,0x2b,0xad,0x56,0x1a,0xac,0x35,0xd3,0x7f,0xfc,0x47,0x37,0xae,0x38,0xa9, + 0x35,0xfd,0x13,0x1,0xb4,0x7a,0xd5,0xaa,0x5f,0x4e,0x4e,0x4e,0x6d,0x58,0x68,0x2c, + 0xbc,0xc9,0x62,0xa9,0xd7,0xeb,0x24,0x89,0x1e,0x2e,0x68,0x83,0x85,0x28,0x8e,0x50, + 0xca,0xc1,0xf,0x2,0x1c,0xa5,0x70,0x5d,0x87,0x4a,0xb9,0xc2,0xea,0xd5,0x6b,0xd8, + 0xb8,0x69,0x13,0xd5,0x89,0x15,0x4c,0x8c,0x8f,0xe3,0xfb,0x3e,0xb3,0xb3,0xf3,0xd4, + 0x66,0xe7,0x39,0xf7,0xdc,0x2d,0xf8,0x9e,0x97,0x96,0x55,0xa5,0x83,0xb1,0x96,0xb9, + 0xf9,0x79,0x92,0x24,0xa1,0x52,0xae,0xe0,0x79,0x1e,0xae,0xb4,0xf8,0xe,0x38,0xc2, + 0x22,0xac,0x26,0x8e,0xc2,0x14,0x14,0x39,0x58,0xc0,0x7d,0x41,0x27,0x3c,0xec,0x7b, + 0x8c,0x31,0x20,0xa8,0x7d,0xec,0xa6,0x8f,0x9e,0x14,0x38,0x2f,0x8,0x10,0x40,0xab, + 0xd5,0xa2,0xde,0x68,0xfc,0x7e,0x1c,0xc7,0xb2,0xdd,0x6e,0x11,0x86,0xd1,0x51,0x7d, + 0xb0,0x99,0x48,0xec,0x76,0x3a,0x4,0xbe,0x8f,0xef,0xfb,0x28,0xa5,0xb0,0xd6,0x12, + 0x86,0x21,0x46,0x6b,0x4a,0xc5,0x22,0x2b,0x57,0xad,0xe2,0xac,0xb3,0x36,0xb3,0x66, + 0xcd,0x4a,0xac,0x35,0x28,0xe9,0x30,0x36,0x36,0x7a,0x44,0x8f,0x58,0x88,0xa3,0x88, + 0x7a,0xa3,0x41,0xb5,0x5a,0xa5,0x5c,0xcc,0xa5,0xa1,0x3d,0x8b,0x66,0x71,0x92,0x10, + 0xc5,0x69,0x1d,0x29,0xd,0xd1,0x4b,0xa5,0x12,0x96,0xa5,0x8e,0x8,0x21,0xd2,0xba, + 0xb9,0x94,0x87,0x6f,0xfc,0xe8,0x87,0x57,0x9d,0x4a,0x1d,0xfe,0x5,0x2b,0x8a,0xe7, + 0x9f,0xff,0x8a,0xef,0x8d,0x8f,0x8f,0xfd,0xb5,0xd6,0x86,0x52,0xa9,0x84,0x52,0x47, + 0x34,0x87,0x0,0x54,0x56,0xa4,0xb7,0xc0,0x4c,0xad,0x46,0xb3,0xd9,0x2,0xb,0xca, + 0x71,0x28,0x14,0xb,0x78,0x9e,0x4b,0xb7,0xdb,0xa1,0xd5,0x4c,0xb7,0x95,0xac,0x5a, + 0xbd,0x9a,0xb,0x2f,0xbc,0x80,0x7c,0x21,0x87,0x19,0x6c,0x33,0x49,0x13,0xdc,0x42, + 0xb1,0x40,0xaf,0xd7,0xa3,0xd5,0x6a,0xa2,0x93,0x78,0xb0,0x9a,0x61,0xd2,0xd5,0xd2, + 0xc,0x4c,0x9d,0x16,0xdc,0xcc,0xf0,0xd2,0xb5,0x1d,0x5a,0xc7,0x17,0x47,0x6d,0xb7, + 0x11,0x42,0xd0,0xeb,0xf6,0x50,0x52,0xd5,0x3e,0xfa,0x91,0xf,0xad,0x39,0xd5,0x65, + 0xae,0x93,0x2a,0xb9,0xbe,0xf1,0xdf,0x5d,0xfa,0x67,0x41,0xe0,0x51,0x28,0x14,0x50, + 0x4a,0x1d,0xa9,0x20,0xca,0x34,0xd9,0x54,0x52,0xe2,0xba,0x2e,0x51,0x14,0x31,0x3d, + 0x35,0x4d,0xbd,0xd1,0x48,0x95,0xb1,0x93,0x56,0x1f,0xf3,0xf9,0x3c,0xd6,0x1a,0x5a, + 0xed,0x16,0x9d,0x4e,0x77,0x50,0xdc,0xa,0x7b,0x21,0x4a,0x4a,0x3c,0x2f,0x75,0xba, + 0x41,0x10,0x20,0x80,0x4e,0x33,0x65,0xaa,0xb5,0x32,0xdb,0x33,0x24,0x71,0x55,0xaa, + 0xd6,0xa7,0x6b,0xb3,0xd4,0xeb,0x75,0x54,0x16,0xfe,0x2d,0x47,0xfc,0x61,0xbf,0x4, + 0x7c,0x24,0x9d,0x90,0x74,0xda,0x1d,0x94,0x52,0x9d,0x1b,0x3f,0xfa,0xa1,0x89,0xd3, + 0x59,0x66,0x3f,0xe9,0x9a,0xf4,0x35,0xbf,0xf3,0xef,0x85,0x52,0xe,0xa5,0x52,0x69, + 0x50,0x14,0x93,0x43,0xeb,0xf2,0x4a,0x4a,0x5c,0xc7,0x25,0x8a,0x63,0xa6,0xa7,0x67, + 0x98,0x99,0x99,0x21,0x8e,0xa3,0xac,0x96,0xec,0xe0,0x79,0x1e,0x8e,0xa3,0xd0,0x3a, + 0xa1,0xdb,0xed,0xd1,0xed,0xf6,0x68,0x2c,0x34,0x33,0x11,0xea,0x22,0x45,0xba,0xb6, + 0xae,0x1c,0x87,0x76,0xb7,0x43,0x1c,0xc7,0x69,0x1,0xcd,0x80,0xb6,0xb0,0xd0,0xee, + 0x32,0x39,0x33,0xb,0x42,0x50,0x28,0xe4,0xb2,0x72,0xac,0x3d,0x8e,0xfb,0x49,0x65, + 0x41,0xbb,0xdd,0x46,0x39,0x4e,0xf4,0xb1,0x9b,0x3e,0x52,0x38,0xdd,0x1d,0x2c,0xa7, + 0xb4,0x2e,0x36,0x3e,0x31,0xfe,0x40,0x14,0xc7,0x57,0xb6,0xdb,0x6d,0x92,0xa4,0x33, + 0x28,0x1b,0xf4,0x8b,0x4f,0x7d,0x76,0xc5,0x49,0xc2,0xcc,0xcc,0x2c,0xbd,0x5e,0xc8, + 0x48,0xa5,0x4c,0xe0,0x7,0x48,0x25,0xf1,0x5c,0xf,0xa3,0x35,0xc6,0xa6,0xe9,0x4b, + 0x18,0x86,0xc4,0x5a,0xe3,0x3a,0xe,0x52,0xaa,0x1,0xd8,0x61,0x14,0xa7,0xd1,0x32, + 0xdb,0xea,0xd2,0xeb,0x25,0x3c,0xfd,0xec,0x73,0x48,0x29,0x58,0xbd,0x7a,0x25,0xb9, + 0x7c,0x91,0x28,0xe9,0x27,0xd1,0xc9,0xb1,0x55,0xc3,0xcc,0xff,0xb9,0x8e,0x1b,0x7d, + 0xec,0xa6,0x8f,0xf8,0x2f,0x66,0xff,0xd3,0x29,0xed,0xee,0x78,0xfb,0x5b,0x7f,0xf3, + 0x1d,0x63,0xe3,0x63,0xbb,0xaa,0xd5,0xb4,0xae,0xd3,0x67,0x91,0x52,0x6a,0xb0,0x46, + 0xa6,0x94,0x1a,0x8,0xb8,0x46,0x63,0x81,0xa9,0xa9,0x19,0xa6,0x67,0x66,0x68,0x34, + 0x1a,0x84,0x61,0x8,0x42,0xa0,0x1c,0x89,0xa3,0x24,0x42,0xd8,0x74,0xc7,0x87,0x4d, + 0x7b,0xa2,0xb5,0xce,0x16,0x21,0x1d,0x8c,0x10,0x69,0x31,0x2c,0xdb,0xdc,0x90,0x3a, + 0xfb,0x2,0x9e,0x17,0x60,0xad,0x20,0x89,0x35,0xbd,0x5e,0x37,0x4d,0x3c,0xfb,0x51, + 0x35,0x13,0xb4,0x51,0x14,0xe1,0x79,0x5e,0xed,0xc5,0x82,0x73,0xca,0x0,0x1,0xbc, + 0xeb,0xaa,0x2b,0xb7,0x6d,0xde,0xb8,0xf1,0xd1,0xea,0xe8,0x68,0xb6,0xd9,0x28,0x5d, + 0xa3,0xea,0xff,0xf5,0xb7,0xc1,0xb8,0xae,0x8b,0x23,0x25,0x61,0x2f,0xa4,0xd1,0x58, + 0xa0,0x36,0x3b,0xc7,0xec,0xec,0x3c,0x73,0xf3,0x75,0xe6,0xeb,0xd,0x9a,0xed,0x36, + 0xed,0x76,0x1b,0xad,0x93,0x4c,0xf3,0xd8,0x6c,0xb1,0x4f,0x53,0x2e,0x97,0x70,0x5c, + 0x8f,0x28,0x31,0x44,0x89,0x41,0x28,0xc9,0x9a,0xb5,0x6b,0xa9,0x54,0xc7,0xb0,0x8e, + 0x4b,0x27,0x8a,0x98,0x9d,0x9f,0x67,0x7a,0x7a,0x1a,0x61,0x8f,0x80,0xa3,0x8d,0x26, + 0x8a,0x23,0x8a,0x85,0xe2,0xe3,0x1f,0xfd,0xf0,0x1f,0x4e,0xb0,0xc,0xed,0xb4,0xf6, + 0x7,0xbd,0xe3,0xaa,0x2b,0x5e,0xb5,0xe5,0xec,0xb3,0x76,0x8d,0x8f,0x57,0x71,0x5d, + 0x77,0xb0,0x6e,0x35,0xc,0x52,0xbf,0x28,0x95,0x3a,0xe0,0xb4,0x9e,0xd4,0x6a,0xb5, + 0x99,0x9f,0xaf,0x33,0x37,0x3b,0xc7,0xdc,0xdc,0x3c,0x8d,0x46,0x13,0xad,0xd,0x8e, + 0xab,0x8,0xc3,0x88,0xf9,0xf9,0x3a,0x9e,0xe7,0x32,0x3a,0x3a,0x8a,0xef,0xf9,0x68, + 0x6d,0x88,0xd,0x24,0x46,0xe0,0x17,0x4a,0x18,0xc7,0x45,0x5,0x79,0x42,0x3,0xf5, + 0x85,0x26,0x71,0x18,0x23,0x55,0xba,0x5b,0xcd,0x18,0x4d,0x18,0x86,0x94,0xcb,0xa5, + 0x9f,0x7d,0xe0,0xfd,0x7f,0x70,0xd1,0x72,0x6d,0x4e,0x95,0xa7,0x7b,0xe1,0x55,0x57, + 0x5f,0xb9,0x6d,0xcb,0x96,0x2d,0x8f,0xaf,0x5c,0xb9,0x2,0xcf,0x73,0xb3,0x4d,0x4c, + 0x62,0x0,0xd0,0x20,0xc1,0xcc,0x66,0xd7,0x51,0x2a,0xcd,0xd7,0x1c,0x7,0x99,0x25, + 0xb6,0xb9,0x5c,0x8e,0x20,0xc8,0x91,0xc4,0x9,0x93,0x93,0x93,0x3c,0x7f,0xe0,0x79, + 0xaa,0xd5,0x2a,0xa5,0x62,0x31,0xdb,0x9,0x92,0xea,0xe2,0x24,0x49,0xd2,0x92,0x8b, + 0x0,0x83,0x87,0x72,0x8b,0x8c,0x54,0xc7,0x59,0xb1,0x72,0x22,0x95,0x1,0xc6,0xd0, + 0x8b,0x22,0xca,0xe5,0xf2,0x93,0x37,0xfc,0xc1,0xf5,0xaf,0x5e,0xce,0xad,0xcd,0xf2, + 0xc5,0x5c,0x7c,0xd5,0x3b,0xae,0xb8,0x68,0xcb,0x96,0xb3,0xbf,0xb7,0x7e,0xdd,0xba, + 0x5e,0xb9,0x5c,0x4e,0x17,0xf0,0x58,0x9a,0x4d,0x83,0x44,0x20,0xdb,0xd6,0xe2,0xba, + 0x2e,0xab,0x56,0xad,0xa4,0x54,0x2a,0x32,0x39,0x35,0xc5,0x53,0x4f,0x3f,0x43,0x1c, + 0x27,0x6c,0xde,0xb4,0x89,0x20,0xc8,0xa5,0xeb,0x61,0x32,0x4d,0x56,0x75,0x92,0xa, + 0x44,0xb4,0x25,0x9,0x23,0x82,0x20,0x60,0xc5,0x8a,0x9,0x8a,0xc5,0x22,0x3a,0xf3, + 0x39,0x85,0x5c,0xee,0xf0,0xfb,0xff,0xc3,0xf5,0xe7,0xb3,0xcc,0x6d,0x59,0x7e,0x8a, + 0xf0,0x83,0x1f,0x3c,0xfc,0xc9,0xfd,0xfb,0xf,0xfc,0xc7,0x7a,0xa3,0xee,0xcc,0xcf, + 0xd7,0x69,0xb6,0x5a,0x69,0x6d,0xc8,0x1e,0x9d,0x26,0xd9,0xb4,0x4a,0x89,0xeb,0x38, + 0xac,0x5e,0xbd,0x8a,0xd,0xeb,0xd6,0x12,0x6b,0xcd,0xb3,0x7,0xe,0x51,0x6f,0xb5, + 0x58,0x3d,0x31,0xc6,0xca,0xd1,0x51,0xb0,0x76,0xe0,0xf8,0x7b,0xbd,0x5e,0x2a,0x3e, + 0x21,0xdd,0xf1,0x31,0x54,0xa7,0xb2,0xc6,0x12,0x27,0x31,0xbe,0xe7,0x4d,0x7d,0xe8, + 0xf,0x3f,0xb0,0x8a,0x33,0xd0,0x96,0x65,0x9f,0xb4,0xeb,0xba,0x3b,0x5e,0xf5,0xaa, + 0xad,0xf7,0x3f,0xf3,0xcc,0xb3,0x9f,0xd,0xfc,0x60,0x5b,0x35,0xdb,0xf2,0xd6,0xe9, + 0x76,0x88,0xc2,0x68,0x48,0x6,0x38,0x14,0x4b,0x45,0xc6,0xab,0xa3,0x94,0xca,0x65, + 0x7a,0xbd,0x90,0xda,0xc2,0x2,0xad,0x38,0x46,0xe5,0x2,0x64,0x90,0x27,0x44,0x90, + 0x53,0x12,0x57,0x29,0xc2,0x28,0xa6,0xd7,0xed,0xa5,0xeb,0xf8,0x8e,0x1a,0x94,0x58, + 0x8d,0x36,0x24,0xda,0x10,0x27,0x9,0x9e,0xef,0xb5,0xce,0x14,0x38,0xcb,0xc6,0x20, + 0x80,0x67,0x9f,0xdd,0x23,0x8a,0xc5,0x62,0xb1,0x56,0xab,0xfd,0xfa,0xb3,0x7b,0xf6, + 0xfe,0xf7,0x5a,0xad,0xf6,0x72,0x1,0xd9,0xee,0x56,0x81,0x40,0x66,0xfb,0x80,0xd2, + 0xd2,0xa9,0xd1,0x6,0x9d,0x24,0x34,0xc3,0x1e,0x93,0xb,0x2d,0xda,0x89,0xa1,0x5c, + 0x28,0x50,0x9,0x3c,0x56,0x94,0xa,0x28,0x21,0x68,0xb5,0xda,0x74,0xba,0x5d,0xac, + 0x35,0x84,0x51,0x44,0xbb,0xdd,0x41,0x23,0x90,0x8e,0x42,0x58,0xcb,0xc4,0xc8,0xe8, + 0xa3,0x1f,0x78,0xff,0xf5,0xaf,0xe2,0xc,0xb6,0x65,0xff,0xb5,0xcf,0x9e,0xbd,0xfb, + 0x64,0xb3,0xd9,0xac,0x7a,0x9e,0x7b,0xf1,0xa1,0x43,0x87,0xaf,0xad,0xd5,0x66,0x7f, + 0x3b,0xc,0xc3,0x81,0x6f,0xea,0x27,0xb2,0x18,0x10,0x2a,0x75,0xb0,0xb,0xbd,0x90, + 0xb9,0x4e,0x97,0x38,0x4e,0x8,0x94,0x64,0x24,0xf0,0x49,0xe2,0x98,0x4e,0xaf,0x47, + 0x62,0xc,0x49,0x9c,0xd0,0xed,0xb4,0x71,0x5c,0x77,0xef,0xf8,0xca,0x55,0xbf,0x58, + 0xb1,0x62,0x7c,0xdf,0xaa,0x89,0x89,0xef,0x5f,0x76,0xe9,0x1b,0xee,0xe1,0xc,0xb7, + 0x33,0xf6,0x7b,0xb1,0x7a,0xbd,0x2e,0x9e,0x79,0x76,0x4f,0xa5,0x50,0x28,0xac,0x6b, + 0xb5,0x5a,0xdb,0x1a,0x8d,0xc6,0x6b,0x3a,0x9d,0xee,0x25,0x71,0x1c,0x9f,0xab,0xb5, + 0x2e,0xf7,0x37,0x4d,0x65,0x3b,0x33,0xa2,0x30,0x49,0xea,0xbd,0x30,0xaa,0x4b,0x61, + 0xa7,0x3d,0xc7,0x9d,0x56,0x52,0x1e,0xf4,0x3c,0xef,0xa0,0xe7,0xfb,0x87,0xa5,0x52, + 0x87,0x1c,0x25,0xa7,0x77,0x3d,0xf6,0xc4,0x5c,0xa5,0x5a,0xed,0x9c,0x75,0xd6,0xe6, + 0xe8,0xd7,0x2f,0x7d,0x43,0x8b,0x97,0xa0,0x9d,0xf1,0x9f,0x64,0xb6,0xdb,0x6d,0xd1, + 0x6e,0xb7,0x2b,0x53,0x53,0xd3,0xe7,0xcd,0xcd,0xcd,0xbf,0xa1,0xdd,0x6e,0x6f,0xb, + 0xa3,0x68,0x9d,0xd6,0x7a,0xe4,0xdd,0xbf,0xf5,0xce,0x8b,0x0,0x3e,0xfb,0xd9,0xcf, + 0x7d,0x7b,0xdd,0xba,0x75,0xfb,0x13,0xad,0x67,0x84,0xe0,0xb0,0xe7,0x79,0x87,0x83, + 0x20,0x38,0x58,0x2e,0x95,0x26,0xb,0x85,0xc2,0x9c,0x1f,0xf8,0x9d,0x62,0xa1,0x90, + 0x8c,0x8f,0x8f,0xbf,0xe4,0x3f,0xe1,0x14,0x2f,0xc5,0x8f,0x7a,0x8f,0xd3,0x46,0x80, + 0x7f,0x4,0x3e,0xf,0xdc,0xf9,0x22,0xee,0xb3,0x29,0xfb,0xdb,0x5,0xd4,0xff,0x4d, + 0x46,0xb1,0xd3,0xb5,0x42,0x60,0x3b,0x70,0xfb,0xd0,0xb1,0xed,0xc0,0x1b,0x4f,0x70, + 0xcd,0x43,0xc0,0xce,0x45,0xc7,0xb6,0x66,0x40,0x8f,0x2e,0x2,0xed,0xda,0x25,0xae, + 0xff,0x3c,0xb0,0xef,0x4c,0x2,0xb4,0x7d,0x89,0x63,0xfb,0x16,0x3d,0x74,0x4,0xb8, + 0x11,0xb8,0x35,0xfb,0xfc,0xbe,0xec,0xfc,0xce,0x13,0x0,0x35,0x28,0x3d,0x1,0x3b, + 0x8e,0xf3,0xdd,0xad,0xd9,0xeb,0xce,0xe3,0x5c,0x5f,0x5f,0x4,0xd0,0x8e,0x21,0x56, + 0x8d,0x64,0xd7,0x3f,0x74,0x26,0x1,0xda,0xa,0x3c,0xb8,0xc4,0xf1,0x1d,0x43,0x60, + 0xf4,0xbf,0xf7,0xbe,0xa1,0x63,0xd7,0x2e,0x62,0xc9,0xc9,0xb4,0xcb,0x96,0x38,0xf6, + 0xe0,0x69,0xb0,0xf4,0x63,0x19,0xa0,0xdb,0x4f,0xf3,0xfa,0x53,0x2,0x68,0x7b,0x36, + 0x1b,0xa3,0x27,0xe1,0x13,0xf6,0x2d,0x2,0xac,0x7e,0x82,0x81,0xde,0x36,0x74,0x7e, + 0xe7,0x29,0xf4,0x67,0x6f,0xf6,0x9c,0x91,0x45,0xf7,0xfd,0xa7,0x8c,0x39,0x2f,0xb9, + 0xf,0xba,0xe8,0x5,0x6,0xb0,0x35,0xeb,0xec,0x1b,0x17,0x99,0xe3,0xc8,0x22,0xe0, + 0x76,0x2e,0x3a,0xbf,0x6b,0x9,0xda,0x6f,0x3f,0x8e,0x53,0x1f,0x6e,0xb7,0x66,0xd7, + 0xdd,0x32,0xf4,0xb9,0x6f,0xf2,0x9b,0x7e,0x15,0x0,0x6d,0x7,0xee,0x3,0x6e,0x2, + 0x2a,0x4b,0x38,0xcc,0xdb,0x16,0xd,0x6c,0xfb,0x22,0xd6,0xf4,0x4d,0xf1,0xd6,0xa1, + 0x1,0x6f,0xcf,0x1c,0x67,0xff,0x3e,0xb7,0x2c,0x7a,0x5d,0xcc,0xcc,0xe1,0xd6,0x8f, + 0x7c,0x77,0x2c,0xc1,0xbe,0x97,0x1c,0xa0,0x91,0xec,0xa1,0x37,0xd,0xd1,0xb7,0xef, + 0x4,0x2f,0xcb,0x4c,0xe4,0x63,0xd9,0xf7,0x6e,0xcb,0x80,0x7c,0x28,0x63,0xd5,0xb5, + 0xd9,0xb9,0xc5,0x2c,0xb9,0x7a,0x88,0x79,0x9b,0x16,0x85,0xfa,0x93,0xf5,0x41,0x5b, + 0x87,0xc0,0xe8,0xbb,0x80,0x65,0x33,0xaf,0x53,0x29,0x77,0x6c,0xca,0x66,0xe8,0x32, + 0x60,0x5b,0xf6,0x77,0x59,0xd6,0xc1,0x1b,0x87,0x4c,0x65,0x67,0x6,0x52,0x9f,0x5d, + 0x95,0xac,0xd3,0x3b,0x97,0xf0,0x4b,0x9b,0x86,0x22,0xd7,0x1d,0x43,0x51,0xea,0x54, + 0xda,0x70,0x28,0xbf,0x25,0xbb,0xcf,0xb0,0x29,0xee,0x7c,0xa9,0x0,0xea,0x33,0x65, + 0xe7,0xa2,0x87,0xdf,0x99,0x45,0xac,0xc5,0x60,0xee,0x1a,0x62,0xde,0x52,0x9d,0xbc, + 0x71,0xe8,0xf8,0xed,0xd9,0x7d,0x1e,0x1c,0x1a,0xdc,0xf6,0x25,0xfe,0x46,0x96,0x60, + 0xf5,0xfb,0x86,0x98,0x77,0x5d,0xf6,0xec,0x1b,0xff,0x2d,0x9,0xc5,0x61,0x87,0xf8, + 0xe0,0x90,0xdf,0x99,0x5f,0x42,0xa,0xf4,0x7d,0x50,0x5f,0x6,0x5c,0x37,0xf4,0xfd, + 0xc5,0x26,0x78,0x32,0x3e,0xe8,0xc6,0xa1,0xa8,0xd5,0xd7,0x5a,0xd7,0x65,0xc0,0x5f, + 0xfd,0x52,0x3,0xf4,0xbe,0x6c,0xc6,0x3e,0x7d,0x82,0x90,0xde,0x57,0xa9,0xdb,0x87, + 0x66,0xf5,0x7d,0x43,0xe6,0xf5,0xd0,0x90,0x53,0xdd,0x97,0x7d,0xe7,0x8e,0x21,0x91, + 0x77,0xeb,0x10,0x30,0x2f,0xe4,0x83,0xb6,0xe,0x81,0x3e,0x2c,0x21,0xee,0xcb,0x5e, + 0x37,0x2e,0x87,0x79,0x9d,0xaa,0x93,0xbe,0x25,0x1b,0x54,0x7d,0xa8,0x93,0x57,0xf, + 0x75,0xea,0xce,0x21,0xd0,0x6e,0x1d,0x62,0xce,0xe7,0x17,0x75,0x76,0x57,0x76,0xec, + 0xc5,0xb4,0x5d,0xd9,0xf3,0x6e,0x3f,0x8e,0xef,0xba,0x7a,0xb9,0x0,0x3a,0x59,0x1f, + 0x74,0x67,0x36,0xeb,0x8f,0x66,0x51,0xea,0x8e,0x6c,0x46,0xfb,0xd1,0x8b,0xa1,0x99, + 0x5b,0x1c,0xad,0x16,0x77,0xf4,0xba,0x65,0xea,0xfc,0x75,0xc7,0x49,0x4e,0xb7,0xf, + 0xa5,0x15,0xc7,0x6b,0xb7,0x2c,0xe1,0xd3,0x5e,0x14,0x40,0xf5,0x8c,0xf6,0x77,0xe, + 0x45,0xa0,0x4f,0x67,0xd1,0xac,0xbe,0x44,0x42,0xd9,0x67,0xd8,0xe9,0x2,0x61,0x97, + 0xf8,0xdb,0x7e,0x92,0x4c,0xbf,0x2d,0x9b,0xa4,0xfb,0x8e,0x73,0x7e,0x7b,0xc6,0xec, + 0xad,0xcb,0x69,0x62,0xc3,0x7e,0xe2,0xd6,0x13,0x7c,0xe7,0xd6,0x25,0x22,0xdf,0xc9, + 0x48,0x88,0x93,0xc9,0xc5,0x6e,0x3b,0x81,0x82,0x1f,0xfe,0xce,0xd6,0x25,0xae,0xdf, + 0x99,0xf5,0xff,0x1f,0x87,0xc6,0xb2,0x73,0xb9,0x1,0x3a,0x13,0xf5,0xa0,0xc5,0x9d, + 0x7c,0x2e,0x3b,0xb6,0x54,0xe7,0x6f,0x3f,0x4e,0x26,0xbe,0x2b,0x63,0xc4,0x48,0x66, + 0x76,0x9f,0x3f,0xce,0xf5,0xdb,0x86,0x26,0xe3,0xa4,0x33,0xfa,0x5f,0x65,0xc1,0xec, + 0xff,0x89,0x26,0xff,0x3f,0x4,0x27,0x6e,0xff,0x77,0x0,0x44,0x6f,0xc3,0xab,0xe5, + 0xd3,0xdb,0xe,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/cam7.png + 0x0,0x0,0x22,0xb5, + 0x89, + 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, + 0x0,0x0,0x48,0x0,0x0,0x0,0x48,0x8,0x6,0x0,0x0,0x0,0x55,0xed,0xb3,0x47, + 0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8e,0x7c,0xfb,0x51,0x93, + 0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x87,0xf,0x0,0x0,0x8c,0xf, + 0x0,0x0,0xfd,0x52,0x0,0x0,0x81,0x40,0x0,0x0,0x7d,0x79,0x0,0x0,0xe9,0x8b, + 0x0,0x0,0x3c,0xe5,0x0,0x0,0x19,0xcc,0x73,0x3c,0x85,0x77,0x0,0x0,0xa,0x39, + 0x69,0x43,0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x49,0x43, + 0x43,0x20,0x70,0x72,0x6f,0x66,0x69,0x6c,0x65,0x0,0x0,0x48,0xc7,0x9d,0x96,0x77, + 0x54,0x54,0xd7,0x16,0x87,0xcf,0xbd,0x77,0x7a,0xa1,0xcd,0x30,0xd2,0x19,0x7a,0x93, + 0x2e,0x30,0x80,0xf4,0x2e,0x20,0x1d,0x4,0x51,0x18,0x66,0x6,0x18,0xca,0x0,0xc3, + 0xc,0x4d,0x6c,0x88,0xa8,0x40,0x44,0x11,0x11,0x1,0x45,0x90,0xa0,0x80,0x1,0xa3, + 0xa1,0x48,0xac,0x88,0x62,0x21,0x28,0xa8,0x60,0xf,0x48,0x10,0x50,0x62,0x30,0x8a, + 0xa8,0xa8,0x64,0x46,0xd6,0x4a,0x7c,0x79,0x79,0xef,0xe5,0xe5,0xf7,0xc7,0xbd,0xdf, + 0xda,0x67,0xef,0x73,0xf7,0xd9,0x7b,0x9f,0xb5,0x2e,0x0,0x24,0x4f,0x1f,0x2e,0x2f, + 0x5,0x96,0x2,0x20,0x99,0x27,0xe0,0x7,0x7a,0x38,0xd3,0x57,0x85,0x47,0xd0,0xb1, + 0xfd,0x0,0x6,0x78,0x80,0x1,0xa6,0x0,0x30,0x59,0xe9,0xa9,0xbe,0x41,0xee,0xc1, + 0x40,0x24,0x2f,0x37,0x17,0x7a,0xba,0xc8,0x9,0xfc,0x8b,0xde,0xc,0x1,0x48,0xfc, + 0xbe,0x65,0xe8,0xe9,0x4f,0xa7,0x83,0xff,0x4f,0xd2,0xac,0x54,0xbe,0x0,0x0,0xc8, + 0x5f,0xc4,0xe6,0x6c,0x4e,0x3a,0x4b,0xc4,0xf9,0x22,0x4e,0xca,0x14,0xa4,0x8a,0xed, + 0x33,0x22,0xa6,0xc6,0x24,0x8a,0x19,0x46,0x89,0x99,0x2f,0x4a,0x50,0xc4,0x72,0x62, + 0x8e,0x5b,0xe4,0xa5,0x9f,0x7d,0x16,0xd9,0x51,0xcc,0xec,0x64,0x1e,0x5b,0xc4,0xe2, + 0x9c,0x53,0xd9,0xc9,0x6c,0x31,0xf7,0x88,0x78,0x7b,0x86,0x90,0x23,0x62,0xc4,0x47, + 0xc4,0x5,0x19,0x5c,0x4e,0xa6,0x88,0x6f,0x8b,0x58,0x33,0x49,0x98,0xcc,0x15,0xf1, + 0x5b,0x71,0x6c,0x32,0x87,0x99,0xe,0x0,0x8a,0x24,0xb6,0xb,0x38,0xac,0x78,0x11, + 0x9b,0x88,0x98,0xc4,0xf,0xe,0x74,0x11,0xf1,0x72,0x0,0x70,0xa4,0xb8,0x2f,0x38, + 0xe6,0xb,0x16,0x70,0xb2,0x4,0xe2,0x43,0xb9,0xa4,0xa4,0x66,0xf3,0xb9,0x71,0xf1, + 0x2,0xba,0x2e,0x4b,0x8f,0x6e,0x6a,0x6d,0xcd,0xa0,0x7b,0x72,0x32,0x93,0x38,0x2, + 0x81,0xa1,0x3f,0x93,0x95,0xc8,0xe4,0xb3,0xe9,0x2e,0x29,0xc9,0xa9,0x4c,0x5e,0x36, + 0x0,0x8b,0x67,0xfe,0x2c,0x19,0x71,0x6d,0xe9,0xa2,0x22,0x5b,0x9a,0x5a,0x5b,0x5a, + 0x1a,0x9a,0x19,0x99,0x7e,0x51,0xa8,0xff,0xba,0xf8,0x37,0x25,0xee,0xed,0x22,0xbd, + 0xa,0xf8,0xdc,0x33,0x88,0xd6,0xf7,0x87,0xed,0xaf,0xfc,0x52,0xea,0x0,0x60,0xcc, + 0x8a,0x6a,0xb3,0xeb,0xf,0x5b,0xcc,0x7e,0x0,0x3a,0xb6,0x2,0x20,0x77,0xff,0xf, + 0x9b,0xe6,0x21,0x0,0x24,0x45,0x7d,0x6b,0xbf,0xf1,0xc5,0x79,0x68,0xe2,0x79,0x89, + 0x17,0x8,0x52,0x6d,0x8c,0x8d,0x33,0x33,0x33,0x8d,0xb8,0x1c,0x96,0x91,0xb8,0xa0, + 0xbf,0xeb,0x7f,0x3a,0xfc,0xd,0x7d,0xf1,0x3d,0x23,0xf1,0x76,0xbf,0x97,0x87,0xee, + 0xca,0x89,0x65,0xa,0x93,0x4,0x74,0x71,0xdd,0x58,0x29,0x49,0x29,0x42,0x3e,0x3d, + 0x3d,0x95,0xc9,0xe2,0xd0,0xd,0xff,0x3c,0xc4,0xff,0x38,0xf0,0xaf,0xf3,0x58,0x1a, + 0xc8,0x89,0xe5,0xf0,0x39,0x3c,0x51,0x44,0xa8,0x68,0xca,0xb8,0xbc,0x38,0x51,0xbb, + 0x79,0x6c,0xae,0x80,0x9b,0xc2,0xa3,0x73,0x79,0xff,0xa9,0x89,0xff,0x30,0xec,0x4f, + 0x5a,0x9c,0x6b,0x91,0x28,0xf5,0x9f,0x0,0x35,0xca,0x8,0x48,0xdd,0xa0,0x2,0xe4, + 0xe7,0x3e,0x80,0xa2,0x10,0x1,0x12,0x79,0x50,0xdc,0xf5,0xdf,0xfb,0xe6,0x83,0xf, + 0x5,0xe2,0x9b,0x17,0xa6,0x3a,0xb1,0x38,0xf7,0x9f,0x5,0xfd,0xfb,0xae,0x70,0x89, + 0xf8,0x91,0xce,0x8d,0xfb,0x1c,0xe7,0x12,0x18,0x4c,0x67,0x9,0xf9,0x19,0x8b,0x6b, + 0xe2,0x6b,0x9,0xd0,0x80,0x0,0x24,0x1,0x15,0xc8,0x3,0x15,0xa0,0x1,0x74,0x81, + 0x21,0x30,0x3,0x56,0xc0,0x16,0x38,0x2,0x37,0xb0,0x2,0xf8,0x81,0x60,0x10,0xe, + 0xd6,0x2,0x16,0x88,0x7,0xc9,0x80,0xf,0x32,0x41,0x2e,0xd8,0xc,0xa,0x40,0x11, + 0xd8,0x5,0xf6,0x82,0x4a,0x50,0x3,0xea,0x41,0x23,0x68,0x1,0x27,0x40,0x7,0x38, + 0xd,0x2e,0x80,0xcb,0xe0,0x3a,0xb8,0x9,0xee,0x80,0x7,0x60,0x4,0x8c,0x83,0xe7, + 0x60,0x6,0xbc,0x1,0xf3,0x10,0x4,0x61,0x21,0x32,0x44,0x81,0xe4,0x21,0x55,0x48, + 0xb,0x32,0x80,0xcc,0x20,0x6,0x64,0xf,0xb9,0x41,0x3e,0x50,0x20,0x14,0xe,0x45, + 0x43,0x71,0x10,0xf,0x12,0x42,0xb9,0xd0,0x16,0xa8,0x8,0x2a,0x85,0x2a,0xa1,0x5a, + 0xa8,0x11,0xfa,0x16,0x3a,0x5,0x5d,0x80,0xae,0x42,0x3,0xd0,0x3d,0x68,0x14,0x9a, + 0x82,0x7e,0x85,0xde,0xc3,0x8,0x4c,0x82,0xa9,0xb0,0x32,0xac,0xd,0x1b,0xc3,0xc, + 0xd8,0x9,0xf6,0x86,0x83,0xe1,0x35,0x70,0x1c,0x9c,0x6,0xe7,0xc0,0xf9,0xf0,0x4e, + 0xb8,0x2,0xae,0x83,0x8f,0xc1,0xed,0xf0,0x5,0xf8,0x3a,0x7c,0x7,0x1e,0x81,0x9f, + 0xc3,0xb3,0x8,0x40,0x88,0x8,0xd,0x51,0x43,0xc,0x11,0x6,0xe2,0x82,0xf8,0x21, + 0x11,0x48,0x2c,0xc2,0x47,0x36,0x20,0x85,0x48,0x39,0x52,0x87,0xb4,0x20,0x5d,0x48, + 0x2f,0x72,0xb,0x19,0x41,0xa6,0x91,0x77,0x28,0xc,0x8a,0x82,0xa2,0xa3,0xc,0x51, + 0xb6,0x28,0x4f,0x54,0x8,0x8a,0x85,0x4a,0x43,0x6d,0x40,0x15,0xa3,0x2a,0x51,0x47, + 0x51,0xed,0xa8,0x1e,0xd4,0x2d,0xd4,0x28,0x6a,0x6,0xf5,0x9,0x4d,0x46,0x2b,0xa1, + 0xd,0xd0,0x36,0x68,0x2f,0xf4,0x2a,0x74,0x1c,0x3a,0x13,0x5d,0x80,0x2e,0x47,0x37, + 0xa0,0xdb,0xd0,0x97,0xd0,0x77,0xd0,0xe3,0xe8,0x37,0x18,0xc,0x86,0x86,0xd1,0xc1, + 0x58,0x61,0x3c,0x31,0xe1,0x98,0x4,0xcc,0x3a,0x4c,0x31,0xe6,0x0,0xa6,0x15,0x73, + 0x1e,0x33,0x80,0x19,0xc3,0xcc,0x62,0xb1,0x58,0x79,0xac,0x1,0xd6,0xe,0xeb,0x87, + 0x65,0x62,0x5,0xd8,0x2,0xec,0x7e,0xec,0x31,0xec,0x39,0xec,0x20,0x76,0x1c,0xfb, + 0x16,0x47,0xc4,0xa9,0xe2,0xcc,0x70,0xee,0xb8,0x8,0x1c,0xf,0x97,0x87,0x2b,0xc7, + 0x35,0xe1,0xce,0xe2,0x6,0x71,0x13,0xb8,0x79,0xbc,0x14,0x5e,0xb,0x6f,0x83,0xf7, + 0xc3,0xb3,0xf1,0xd9,0xf8,0x12,0x7c,0x3d,0xbe,0xb,0x7f,0x3,0x3f,0x8e,0x9f,0x27, + 0x48,0x13,0x74,0x8,0x76,0x84,0x60,0x42,0x2,0x61,0x33,0xa1,0x82,0xd0,0x42,0xb8, + 0x44,0x78,0x48,0x78,0x45,0x24,0x12,0xd5,0x89,0xd6,0xc4,0x0,0x22,0x97,0xb8,0x89, + 0x58,0x41,0x3c,0x4e,0xbc,0x42,0x1c,0x25,0xbe,0x23,0xc9,0x90,0xf4,0x49,0x2e,0xa4, + 0x48,0x92,0x90,0xb4,0x93,0x74,0x84,0x74,0x9e,0x74,0x8f,0xf4,0x8a,0x4c,0x26,0x6b, + 0x93,0x1d,0xc9,0x11,0x64,0x1,0x79,0x27,0xb9,0x91,0x7c,0x91,0xfc,0x98,0xfc,0x56, + 0x82,0x22,0x61,0x24,0xe1,0x25,0xc1,0x96,0xd8,0x28,0x51,0x25,0xd1,0x2e,0x31,0x28, + 0xf1,0x42,0x12,0x2f,0xa9,0x25,0xe9,0x24,0xb9,0x56,0x32,0x47,0xb2,0x5c,0xf2,0xa4, + 0xe4,0xd,0xc9,0x69,0x29,0xbc,0x94,0xb6,0x94,0x8b,0x14,0x53,0x6a,0x83,0x54,0x95, + 0xd4,0x29,0xa9,0x61,0xa9,0x59,0x69,0x8a,0xb4,0xa9,0xb4,0x9f,0x74,0xb2,0x74,0xb1, + 0x74,0x93,0xf4,0x55,0xe9,0x49,0x19,0xac,0x8c,0xb6,0x8c,0x9b,0xc,0x5b,0x26,0x5f, + 0xe6,0xb0,0xcc,0x45,0x99,0x31,0xa,0x42,0xd1,0xa0,0xb8,0x50,0x58,0x94,0x2d,0x94, + 0x7a,0xca,0x25,0xca,0x38,0x15,0x43,0xd5,0xa1,0x7a,0x51,0x13,0xa8,0x45,0xd4,0x6f, + 0xa8,0xfd,0xd4,0x19,0x59,0x19,0xd9,0x65,0xb2,0xa1,0xb2,0x59,0xb2,0x55,0xb2,0x67, + 0x64,0x47,0x68,0x8,0x4d,0x9b,0xe6,0x45,0x4b,0xa2,0x95,0xd0,0x4e,0xd0,0x86,0x68, + 0xef,0x97,0x28,0x2f,0x71,0x5a,0xc2,0x59,0xb2,0x63,0x49,0xcb,0x92,0xc1,0x25,0x73, + 0x72,0x8a,0x72,0x8e,0x72,0x1c,0xb9,0x42,0xb9,0x56,0xb9,0x3b,0x72,0xef,0xe5,0xe9, + 0xf2,0x6e,0xf2,0x89,0xf2,0xbb,0xe5,0x3b,0xe4,0x1f,0x29,0xa0,0x14,0xf4,0x15,0x2, + 0x14,0x32,0x15,0xe,0x2a,0x5c,0x52,0x98,0x56,0xa4,0x2a,0xda,0x2a,0xb2,0x14,0xb, + 0x15,0x4f,0x28,0xde,0x57,0x82,0x95,0xf4,0x95,0x2,0x95,0xd6,0x29,0x1d,0x56,0xea, + 0x53,0x9a,0x55,0x56,0x51,0xf6,0x50,0x4e,0x55,0xde,0xaf,0x7c,0x51,0x79,0x5a,0x85, + 0xa6,0xe2,0xa8,0x92,0xa0,0x52,0xa6,0x72,0x56,0x65,0x4a,0x95,0xa2,0x6a,0xaf,0xca, + 0x55,0x2d,0x53,0x3d,0xa7,0xfa,0x8c,0x2e,0x4b,0x77,0xa2,0x27,0xd1,0x2b,0xe8,0x3d, + 0xf4,0x19,0x35,0x25,0x35,0x4f,0x35,0xa1,0x5a,0xad,0x5a,0xbf,0xda,0xbc,0xba,0x8e, + 0x7a,0x88,0x7a,0x9e,0x7a,0xab,0xfa,0x23,0xd,0x82,0x6,0x43,0x23,0x56,0xa3,0x4c, + 0xa3,0x5b,0x63,0x46,0x53,0x55,0xd3,0x57,0x33,0x57,0xb3,0x59,0xf3,0xbe,0x16,0x5e, + 0x8b,0xa1,0x15,0xaf,0xb5,0x4f,0xab,0x57,0x6b,0x4e,0x5b,0x47,0x3b,0x4c,0x7b,0x9b, + 0x76,0x87,0xf6,0xa4,0x8e,0x9c,0x8e,0x97,0x4e,0x8e,0x4e,0xb3,0xce,0x43,0x5d,0xb2, + 0xae,0x83,0x6e,0x9a,0x6e,0x9d,0xee,0x6d,0x3d,0x8c,0x1e,0x43,0x2f,0x51,0xef,0x80, + 0xde,0x4d,0x7d,0x58,0xdf,0x42,0x3f,0x5e,0xbf,0x4a,0xff,0x86,0x1,0x6c,0x60,0x69, + 0xc0,0x35,0x38,0x60,0x30,0xb0,0x14,0xbd,0xd4,0x7a,0x29,0x6f,0x69,0xdd,0xd2,0x61, + 0x43,0x92,0xa1,0x93,0x61,0x86,0x61,0xb3,0xe1,0xa8,0x11,0xcd,0xc8,0xc7,0x28,0xcf, + 0xa8,0xc3,0xe8,0x85,0xb1,0xa6,0x71,0x84,0xf1,0x6e,0xe3,0x5e,0xe3,0x4f,0x26,0x16, + 0x26,0x49,0x26,0xf5,0x26,0xf,0x4c,0x65,0x4c,0x57,0x98,0xe6,0x99,0x76,0x99,0xfe, + 0x6a,0xa6,0x6f,0xc6,0x32,0xab,0x32,0xbb,0x6d,0x4e,0x36,0x77,0x37,0xdf,0x68,0xde, + 0x69,0xfe,0x72,0x99,0xc1,0x32,0xce,0xb2,0x83,0xcb,0xee,0x5a,0x50,0x2c,0x7c,0x2d, + 0xb6,0x59,0x74,0x5b,0x7c,0xb4,0xb4,0xb2,0xe4,0x5b,0xb6,0x58,0x4e,0x59,0x69,0x5a, + 0x45,0x5b,0x55,0x5b,0xd,0x33,0xa8,0xc,0x7f,0x46,0x31,0xe3,0x8a,0x35,0xda,0xda, + 0xd9,0x7a,0xa3,0xf5,0x69,0xeb,0x77,0x36,0x96,0x36,0x2,0x9b,0x13,0x36,0xbf,0xd8, + 0x1a,0xda,0x26,0xda,0x36,0xd9,0x4e,0x2e,0xd7,0x59,0xce,0x59,0x5e,0xbf,0x7c,0xcc, + 0x4e,0xdd,0x8e,0x69,0x57,0x6b,0x37,0x62,0x4f,0xb7,0x8f,0xb6,0x3f,0x64,0x3f,0xe2, + 0xa0,0xe6,0xc0,0x74,0xa8,0x73,0x78,0xe2,0xa8,0xe1,0xc8,0x76,0x6c,0x70,0x9c,0x70, + 0xd2,0x73,0x4a,0x70,0x3a,0xe6,0xf4,0xc2,0xd9,0xc4,0x99,0xef,0xdc,0xe6,0x3c,0xe7, + 0x62,0xe3,0xb2,0xde,0xe5,0xbc,0x2b,0xe2,0xea,0xe1,0x5a,0xe8,0xda,0xef,0x26,0xe3, + 0x16,0xe2,0x56,0xe9,0xf6,0xd8,0x5d,0xdd,0x3d,0xce,0xbd,0xd9,0x7d,0xc6,0xc3,0xc2, + 0x63,0x9d,0xc7,0x79,0x4f,0xb4,0xa7,0xb7,0xe7,0x6e,0xcf,0x61,0x2f,0x65,0x2f,0x96, + 0x57,0xa3,0xd7,0xcc,0xa,0xab,0x15,0xeb,0x57,0xf4,0x78,0x93,0xbc,0x83,0xbc,0x2b, + 0xbd,0x9f,0xf8,0xe8,0xfb,0xf0,0x7d,0xba,0x7c,0x61,0xdf,0x15,0xbe,0x7b,0x7c,0x1f, + 0xae,0xd4,0x5a,0xc9,0x5b,0xd9,0xe1,0x7,0xfc,0xbc,0xfc,0xf6,0xf8,0x3d,0xf2,0xd7, + 0xf1,0x4f,0xf3,0xff,0x3e,0x0,0x13,0xe0,0x1f,0x50,0x15,0xf0,0x34,0xd0,0x34,0x30, + 0x37,0xb0,0x37,0x88,0x12,0x14,0x15,0xd4,0x14,0xf4,0x26,0xd8,0x39,0xb8,0x24,0xf8, + 0x41,0x88,0x6e,0x88,0x30,0xa4,0x3b,0x54,0x32,0x34,0x32,0xb4,0x31,0x74,0x2e,0xcc, + 0x35,0xac,0x34,0x6c,0x64,0x95,0xf1,0xaa,0xf5,0xab,0xae,0x87,0x2b,0x84,0x73,0xc3, + 0x3b,0x23,0xb0,0x11,0xa1,0x11,0xd,0x11,0xb3,0xab,0xdd,0x56,0xef,0x5d,0x3d,0x1e, + 0x69,0x11,0x59,0x10,0x39,0xb4,0x46,0x67,0x4d,0xd6,0x9a,0xab,0x6b,0x15,0xd6,0x26, + 0xad,0x3d,0x13,0x25,0x19,0xc5,0x8c,0x3a,0x19,0x8d,0x8e,0xe,0x8b,0x6e,0x8a,0xfe, + 0xc0,0xf4,0x63,0xd6,0x31,0x67,0x63,0xbc,0x62,0xaa,0x63,0x66,0x58,0x2e,0xac,0x7d, + 0xac,0xe7,0x6c,0x47,0x76,0x19,0x7b,0x8a,0x63,0xc7,0x29,0xe5,0x4c,0xc4,0xda,0xc5, + 0x96,0xc6,0x4e,0xc6,0xd9,0xc5,0xed,0x89,0x9b,0x8a,0x77,0x88,0x2f,0x8f,0x9f,0xe6, + 0xba,0x70,0x2b,0xb9,0x2f,0x13,0x3c,0x13,0x6a,0x12,0xe6,0x12,0xfd,0x12,0x8f,0x24, + 0x2e,0x24,0x85,0x25,0xb5,0x26,0xe3,0x92,0xa3,0x93,0x4f,0xf1,0x64,0x78,0x89,0xbc, + 0x9e,0x14,0x95,0x94,0xac,0x94,0x81,0x54,0x83,0xd4,0x82,0xd4,0x91,0x34,0x9b,0xb4, + 0xbd,0x69,0x33,0x7c,0x6f,0x7e,0x43,0x3a,0x94,0xbe,0x26,0xbd,0x53,0x40,0x15,0xfd, + 0x4c,0xf5,0x9,0x75,0x85,0x5b,0x85,0xa3,0x19,0xf6,0x19,0x55,0x19,0x6f,0x33,0x43, + 0x33,0x4f,0x66,0x49,0x67,0xf1,0xb2,0xfa,0xb2,0xf5,0xb3,0x77,0x64,0x4f,0xe4,0xb8, + 0xe7,0x7c,0xbd,0xe,0xb5,0x8e,0xb5,0xae,0x3b,0x57,0x2d,0x77,0x73,0xee,0xe8,0x7a, + 0xa7,0xf5,0xb5,0x1b,0xa0,0xd,0x31,0x1b,0xba,0x37,0x6a,0x6c,0xcc,0xdf,0x38,0xbe, + 0xc9,0x63,0xd3,0xd1,0xcd,0x84,0xcd,0x89,0x9b,0x7f,0xc8,0x33,0xc9,0x2b,0xcd,0x7b, + 0xbd,0x25,0x6c,0x4b,0x57,0xbe,0x72,0xfe,0xa6,0xfc,0xb1,0xad,0x1e,0x5b,0x9b,0xb, + 0x24,0xa,0xf8,0x5,0xc3,0xdb,0x6c,0xb7,0xd5,0x6c,0x47,0x6d,0xe7,0x6e,0xef,0xdf, + 0x61,0xbe,0x63,0xff,0x8e,0x4f,0x85,0xec,0xc2,0x6b,0x45,0x26,0x45,0xe5,0x45,0x1f, + 0x8a,0x59,0xc5,0xd7,0xbe,0x32,0xfd,0xaa,0xe2,0xab,0x85,0x9d,0xb1,0x3b,0xfb,0x4b, + 0x2c,0x4b,0xe,0xee,0xc2,0xec,0xe2,0xed,0x1a,0xda,0xed,0xb0,0xfb,0x68,0xa9,0x74, + 0x69,0x4e,0xe9,0xd8,0x1e,0xdf,0x3d,0xed,0x65,0xf4,0xb2,0xc2,0xb2,0xd7,0x7b,0xa3, + 0xf6,0x5e,0x2d,0x5f,0x56,0x5e,0xb3,0x8f,0xb0,0x4f,0xb8,0x6f,0xa4,0xc2,0xa7,0xa2, + 0x73,0xbf,0xe6,0xfe,0x5d,0xfb,0x3f,0x54,0xc6,0x57,0xde,0xa9,0x72,0xae,0x6a,0xad, + 0x56,0xaa,0xde,0x51,0x3d,0x77,0x80,0x7d,0x60,0xf0,0xa0,0xe3,0xc1,0x96,0x1a,0xe5, + 0x9a,0xa2,0x9a,0xf7,0x87,0xb8,0x87,0xee,0xd6,0x7a,0xd4,0xb6,0xd7,0x69,0xd7,0x95, + 0x1f,0xc6,0x1c,0xce,0x38,0xfc,0xb4,0x3e,0xb4,0xbe,0xf7,0x6b,0xc6,0xd7,0x8d,0xd, + 0xa,0xd,0x45,0xd,0x1f,0x8f,0xf0,0x8e,0x8c,0x1c,0xd,0x3c,0xda,0xd3,0x68,0xd5, + 0xd8,0xd8,0xa4,0xd4,0x54,0xd2,0xc,0x37,0xb,0x9b,0xa7,0x8e,0x45,0x1e,0xbb,0xf9, + 0x8d,0xeb,0x37,0x9d,0x2d,0x86,0x2d,0xb5,0xad,0xb4,0xd6,0xa2,0xe3,0xe0,0xb8,0xf0, + 0xf8,0xb3,0x6f,0xa3,0xbf,0x1d,0x3a,0xe1,0x7d,0xa2,0xfb,0x24,0xe3,0x64,0xcb,0x77, + 0x5a,0xdf,0x55,0xb7,0x51,0xda,0xa,0xdb,0xa1,0xf6,0xec,0xf6,0x99,0x8e,0xf8,0x8e, + 0x91,0xce,0xf0,0xce,0x81,0x53,0x2b,0x4e,0x75,0x77,0xd9,0x76,0xb5,0x7d,0x6f,0xf4, + 0xfd,0x91,0xd3,0x6a,0xa7,0xab,0xce,0xc8,0x9e,0x29,0x39,0x4b,0x38,0x9b,0x7f,0x76, + 0xe1,0x5c,0xce,0xb9,0xd9,0xf3,0xa9,0xe7,0xa7,0x2f,0xc4,0x5d,0x18,0xeb,0x8e,0xea, + 0x7e,0x70,0x71,0xd5,0xc5,0xdb,0x3d,0x1,0x3d,0xfd,0x97,0xbc,0x2f,0x5d,0xb9,0xec, + 0x7e,0xf9,0x62,0xaf,0x53,0xef,0xb9,0x2b,0x76,0x57,0x4e,0x5f,0xb5,0xb9,0x7a,0xea, + 0x1a,0xe3,0x5a,0xc7,0x75,0xcb,0xeb,0xed,0x7d,0x16,0x7d,0x6d,0x3f,0x58,0xfc,0xd0, + 0xd6,0x6f,0xd9,0xdf,0x7e,0xc3,0xea,0x46,0xe7,0x4d,0xeb,0x9b,0x5d,0x3,0xcb,0x7, + 0xce,0xe,0x3a,0xc,0x5e,0xb8,0xe5,0x7a,0xeb,0xf2,0x6d,0xaf,0xdb,0xd7,0xef,0xac, + 0xbc,0x33,0x30,0x14,0x32,0x74,0x77,0x38,0x72,0x78,0xe4,0x2e,0xfb,0xee,0xe4,0xbd, + 0xa4,0x7b,0x2f,0xef,0x67,0xdc,0x9f,0x7f,0xb0,0xe9,0x21,0xfa,0x61,0xe1,0x23,0xa9, + 0x47,0xe5,0x8f,0x95,0x1e,0xd7,0xfd,0xa8,0xf7,0x63,0xeb,0x88,0xe5,0xc8,0x99,0x51, + 0xd7,0xd1,0xbe,0x27,0x41,0x4f,0x1e,0x8c,0xb1,0xc6,0x9e,0xff,0x94,0xfe,0xd3,0x87, + 0xf1,0xfc,0xa7,0xe4,0xa7,0xe5,0x13,0xaa,0x13,0x8d,0x93,0x66,0x93,0xa7,0xa7,0xdc, + 0xa7,0x6e,0x3e,0x5b,0xfd,0x6c,0xfc,0x79,0xea,0xf3,0xf9,0xe9,0x82,0x9f,0xa5,0x7f, + 0xae,0x7e,0xa1,0xfb,0xe2,0xbb,0x5f,0x1c,0x7f,0xe9,0x9b,0x59,0x35,0x33,0xfe,0x92, + 0xff,0x72,0xe1,0xd7,0xe2,0x57,0xf2,0xaf,0x8e,0xbc,0x5e,0xf6,0xba,0x7b,0xd6,0x7f, + 0xf6,0xf1,0x9b,0xe4,0x37,0xf3,0x73,0x85,0x6f,0xe5,0xdf,0x1e,0x7d,0xc7,0x78,0xd7, + 0xfb,0x3e,0xec,0xfd,0xc4,0x7c,0xe6,0x7,0xec,0x87,0x8a,0x8f,0x7a,0x1f,0xbb,0x3e, + 0x79,0x7f,0x7a,0xb8,0x90,0xbc,0xb0,0xf0,0x1b,0xf7,0x84,0xf3,0xfb,0xe2,0xe6,0x1d, + 0xc2,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0x12,0x74,0x0,0x0,0x12, + 0x74,0x1,0xde,0x66,0x1f,0x78,0x0,0x0,0x17,0xe6,0x49,0x44,0x41,0x54,0x78,0x5e, + 0xd5,0x9b,0x59,0x70,0x5c,0x57,0x99,0xc7,0x3f,0xa9,0x25,0xb5,0x24,0x6b,0x97,0x2c, + 0x5b,0xde,0x62,0x3b,0xc6,0x6,0xb2,0x92,0xc4,0x6,0x9c,0x2,0x12,0x32,0x4e,0x6, + 0x28,0x98,0x30,0x64,0xa9,0x99,0x77,0x9c,0xc7,0xe1,0x65,0x52,0x50,0x35,0xf,0xf3, + 0x30,0x55,0x14,0xf0,0x12,0xde,0x20,0xbc,0xcc,0xcc,0x1b,0x93,0x64,0x20,0xa4,0x8a, + 0x10,0x92,0xc0,0x10,0x98,0xcc,0x54,0x1c,0x3b,0x89,0x43,0xbc,0xc9,0xbb,0x65,0x5b, + 0x8b,0xb5,0xaf,0x2d,0xb5,0xd4,0xf3,0xff,0x7d,0xe7,0x1e,0xa9,0xdd,0x6e,0xb5,0xda, + 0x8e,0x4c,0x32,0x7f,0xf9,0x74,0xdf,0x7b,0xcf,0xbd,0x67,0xf9,0x9f,0x6f,0x3d,0xb7, + 0x5d,0x91,0x13,0xec,0x26,0x63,0x6c,0x74,0xd4,0x4e,0x9d,0x3c,0x69,0xf3,0xb,0xb, + 0xb6,0x6d,0xfb,0x76,0x6b,0x6b,0x6b,0xb3,0x8a,0x8a,0x8a,0xa4,0xf6,0xe3,0x8d,0x9b, + 0x4e,0xd0,0x85,0x73,0xe7,0xec,0xe8,0x9f,0x3f,0xb0,0x99,0xd9,0x59,0xcb,0x2e,0x98, + 0x4d,0x67,0x32,0x76,0xcb,0xd6,0x2d,0x76,0xff,0xe7,0x3f,0xf7,0xff,0x82,0xa4,0xca, + 0xe4,0x7b,0xd5,0x1,0xef,0xa7,0x4f,0x76,0xdb,0xa1,0x3,0x7,0x6c,0x74,0x6c,0x5c, + 0xd2,0x93,0xb3,0x5,0x5d,0x5b,0x90,0x14,0x9d,0x3b,0x7b,0xce,0xce,0x9c,0x39,0x6b, + 0x33,0x33,0x33,0xc9,0xdd,0x1f,0x5f,0xdc,0x14,0x9,0x5a,0x98,0x9f,0xb7,0x13,0xc7, + 0x4f,0xd8,0xbb,0xef,0xbc,0x6b,0xa9,0xca,0x94,0xa5,0xaa,0x6b,0x8c,0x4e,0x72,0x15, + 0xfa,0xd4,0x3f,0x88,0xaa,0x4a,0xa5,0xac,0x73,0xdd,0x5a,0x5b,0xdb,0xd1,0x61,0x4d, + 0x4d,0x8d,0x2a,0x4d,0x56,0x5f,0x5f,0xff,0xb1,0x93,0xaa,0x55,0x27,0x28,0x9b,0x9d, + 0xb7,0x63,0xc7,0x8e,0xda,0x81,0xb7,0xe,0x5a,0x7d,0x5d,0xbd,0x55,0xd7,0x54,0x3b, + 0x39,0xb,0x39,0xe9,0x97,0xa3,0x42,0x62,0x5b,0x61,0xd9,0xf9,0xac,0xcd,0x65,0xe7, + 0x9c,0xb0,0x86,0x86,0x6,0xeb,0xea,0x5a,0x6f,0x1d,0x1d,0xed,0xd6,0xda,0xda,0xa2, + 0x67,0x6a,0x6c,0x8d,0xc8,0xaa,0xac,0xbc,0x69,0x2,0x5e,0x36,0x56,0x95,0xa0,0x6c, + 0x36,0x6b,0xef,0xcb,0xde,0x1c,0x3a,0x78,0xc8,0xea,0x44,0x4e,0x6d,0x6d,0xad,0x1b, + 0x66,0x67,0x61,0x11,0x15,0x74,0x2a,0x69,0xd2,0xb7,0x84,0x65,0x61,0x7e,0xc1,0x9f, + 0x9b,0x5f,0x98,0xf7,0xba,0x1a,0x91,0xb3,0x79,0xd3,0x46,0xdb,0xa4,0x52,0x5b,0x9b, + 0xb6,0xb4,0xda,0x68,0x58,0xb3,0xc6,0x52,0x92,0xb8,0x8f,0x2,0xab,0x46,0xd0,0x9c, + 0x26,0x79,0xf0,0xe0,0x41,0xfb,0xe0,0x83,0xa3,0x22,0xa7,0xce,0x6a,0xd3,0x22,0x47, + 0xaa,0xe6,0x40,0x6b,0x72,0x22,0xc4,0x4f,0x20,0x87,0xef,0x70,0xee,0xdd,0xeb,0x0, + 0xd5,0xe2,0x18,0x9,0x84,0xb0,0x5,0x11,0x56,0x5f,0xbf,0xc6,0x36,0x6f,0xde,0x64, + 0x5d,0xeb,0xd7,0x5b,0x6b,0x5b,0x8b,0xdf,0xf,0xe9,0xd5,0xd5,0xd5,0x34,0xf0,0x17, + 0xc1,0xaa,0x10,0x34,0x37,0x37,0x67,0x6f,0xfc,0xf1,0x4f,0x76,0x56,0x1e,0xab,0xbe, + 0xb6,0xde,0xa5,0x0,0x63,0x5c,0x14,0x81,0xa5,0x25,0xa1,0x8a,0xe7,0xf1,0x80,0xe1, + 0x54,0x22,0x65,0x26,0x82,0x25,0x5d,0x52,0x45,0xd4,0xb3,0x2a,0x55,0x65,0x1b,0xba, + 0xba,0x6c,0xeb,0xd6,0xcd,0xd6,0xd9,0xd9,0x69,0x55,0x55,0x55,0x4e,0x2a,0x92,0x75, + 0x33,0xed,0xd6,0x87,0x26,0x28,0x93,0x99,0xb5,0xdf,0xff,0xd7,0x1f,0xec,0xe2,0xc5, + 0x8b,0x52,0x85,0x6,0xb7,0x1b,0xde,0x64,0xde,0xc4,0xfd,0x30,0x7e,0x78,0x6f,0x49, + 0x97,0xc9,0xb5,0x78,0xab,0x64,0x2b,0x39,0x5a,0xba,0x16,0xef,0xa1,0xcd,0x79,0x97, + 0xac,0x5,0xab,0x4c,0x55,0xda,0x7a,0x49,0xd5,0xad,0xdb,0xb7,0x59,0x7b,0x7b,0xbb, + 0x24,0xb6,0xd6,0xeb,0x21,0x6a,0xb5,0xc9,0xfa,0x50,0x4,0x4d,0x4f,0x4d,0xdb,0x6b, + 0xbf,0xfb,0x9d,0xf5,0xf6,0xf6,0x59,0x53,0x63,0x53,0x18,0xdc,0x55,0xe3,0xcb,0x9b, + 0x68,0x21,0x92,0x8a,0x78,0xc7,0x35,0xe4,0x14,0x6b,0x27,0xf9,0x60,0xc8,0x10,0x95, + 0x53,0x49,0x55,0xa5,0x14,0x78,0xb6,0x4a,0x15,0x37,0xdb,0xa6,0x8d,0x1b,0x5c,0x7a, + 0x57,0xd3,0x5e,0xdd,0x30,0x41,0xe3,0x13,0x13,0xf6,0xc6,0x1b,0x7f,0xb4,0xcb,0x97, + 0x7b,0xdd,0xe6,0xd0,0xc,0x4,0x55,0xb2,0x8a,0x92,0xa2,0xca,0xa,0x44,0x9f,0x3b, + 0xc3,0xd4,0x3,0x79,0xc,0x9c,0xc9,0x72,0x4d,0x57,0xbd,0x67,0x3e,0xe2,0x10,0xae, + 0x25,0x27,0xb9,0x92,0x77,0x2d,0x1c,0xf0,0x19,0x49,0xe5,0x13,0xcf,0x88,0xc7,0x6c, + 0x56,0xb8,0xb0,0x51,0x44,0xad,0x5d,0xbb,0xd6,0xfa,0xfb,0xfa,0x6d,0x70,0x68,0xc8, + 0x36,0x6f,0xd9,0xe4,0xe1,0xc4,0x8d,0xd8,0xae,0x1b,0x22,0xa8,0xbf,0xbf,0xdf,0x5e, + 0xff,0xfd,0x1f,0x6c,0x64,0x64,0xc4,0x45,0x9c,0x95,0xa4,0x19,0x8a,0xdb,0x1e,0x6f, + 0x52,0x64,0x49,0x15,0x82,0xab,0xe6,0x18,0xc2,0x2,0x41,0x7a,0x40,0xb7,0x44,0x1b, + 0xb5,0xd4,0xbd,0x4f,0xbd,0x8,0x11,0xf9,0xd7,0xa,0xaa,0x85,0x20,0x51,0x4e,0x97, + 0xbe,0x2b,0x2a,0x2a,0x2d,0x2d,0x29,0x72,0x3b,0x28,0x27,0x51,0x21,0x7b,0x96,0x99, + 0xcd,0xd8,0xba,0x75,0xeb,0xec,0x8e,0x3b,0x6e,0x57,0xe8,0x51,0x17,0x1e,0x2b,0x13, + 0xd7,0x1d,0x68,0xe0,0x61,0xde,0x78,0xf3,0x7f,0xed,0xc8,0xa9,0x53,0x56,0xa5,0x41, + 0x54,0x25,0xb1,0x8a,0x4b,0x8f,0x8e,0xf1,0x5e,0x4,0x7c,0xe9,0x74,0xda,0xaf,0xcf, + 0xcb,0x2b,0xe1,0xcd,0xdc,0x7e,0xb8,0x57,0x5b,0xf0,0x7b,0x19,0x38,0x93,0xf4,0x63, + 0xff,0x13,0xf2,0x26,0xcd,0x61,0xb1,0x6b,0x4b,0x15,0x20,0x5c,0xab,0x54,0x5b,0xf4, + 0x9d,0x92,0x21,0xe7,0xa,0x76,0x71,0x72,0x72,0xc2,0x67,0x97,0x99,0x9b,0xb5,0x21, + 0x49,0xd1,0x7b,0xef,0x1d,0xb6,0x23,0x47,0x8e,0x26,0x64,0x96,0x8f,0xeb,0x26,0xe8, + 0x78,0xf7,0x49,0x3b,0x74,0xe4,0x98,0x65,0x2b,0x25,0xae,0x1a,0xd0,0xbc,0x3c,0x98, + 0x43,0xfd,0x86,0xc1,0x65,0x6c,0x4c,0xa9,0xc5,0xf4,0xcc,0xb4,0xce,0x18,0xb4,0x22, + 0x69,0x49,0x12,0x37,0xcc,0x2f,0x10,0x1c,0x66,0xe5,0x99,0x16,0xe4,0x99,0xc2,0x4c, + 0x83,0xea,0xf9,0xe1,0x22,0xfc,0x70,0xf1,0x1a,0xad,0xf2,0xb7,0x74,0x1e,0xcb,0xd2, + 0x35,0x10,0x14,0x17,0xb2,0xd2,0x69,0x5,0x9a,0x8a,0x9d,0xf0,0xae,0xe3,0x1a,0xb, + 0x9c,0xb0,0x48,0xef,0xbf,0xff,0x67,0xbb,0x72,0xe5,0xca,0x75,0x91,0x74,0x5d,0x4, + 0xe1,0x76,0xff,0xf0,0xc6,0x9f,0xa4,0x5a,0x63,0x56,0x45,0x9c,0xa3,0x6b,0xb3,0x1a, + 0x44,0x9c,0x24,0xdd,0xf6,0x5c,0xec,0xb1,0xc3,0xef,0xbf,0x6f,0xa7,0x4f,0x9f,0xb1, + 0xc9,0xa9,0x9,0x71,0x58,0xe5,0x2b,0x5b,0x59,0x49,0x41,0xcd,0xe4,0xe5,0x74,0x5f, + 0xcc,0xcb,0x90,0xc8,0x9c,0x7,0x89,0x2,0xd2,0xa4,0xfa,0x82,0x99,0x97,0x81,0xa0, + 0x66,0x3c,0x51,0x25,0xa3,0x5d,0x55,0x9d,0xf2,0x3c,0x6f,0x64,0x64,0xd4,0x17,0x8c, + 0xe,0xe9,0x7b,0x62,0x72,0xd2,0xfe,0x5b,0xd2,0x9f,0x8d,0xf1,0x59,0x19,0x28,0x9b, + 0x20,0x26,0xd3,0x3f,0x30,0x60,0xfd,0x5a,0x81,0x35,0x5a,0xa1,0x5a,0x5,0x2a,0xf3, + 0x99,0x19,0x9b,0x65,0x82,0x1a,0x80,0xab,0xa,0x3c,0xf1,0x8d,0xfa,0xb0,0x9e,0x54, + 0xa8,0x84,0xc1,0x2b,0x66,0xd1,0x20,0xc9,0xc1,0x90,0x28,0x6e,0x61,0xc5,0xb1,0x45, + 0x44,0xdb,0xac,0x30,0x51,0x75,0xb4,0x67,0x0,0xb2,0x9c,0x7c,0x3f,0x9,0x5f,0x11, + 0x7e,0x9a,0x77,0x8d,0xc3,0x9a,0xaa,0x6a,0x8f,0x8f,0x66,0x66,0x32,0x36,0x3c,0x3a, + 0xe2,0x12,0x44,0xcd,0x1c,0x2a,0xae,0x42,0xbb,0xc4,0x6a,0xa3,0xb2,0x9d,0xb1,0x8f, + 0x95,0x50,0xb6,0x91,0x66,0xa5,0x7f,0xf3,0xea,0xeb,0xd6,0x7d,0xea,0xb4,0x4d,0x4d, + 0x4f,0x5b,0xa5,0x26,0x56,0xa7,0x54,0xa0,0xb1,0xa1,0x31,0x44,0xb7,0x1a,0x5c,0x20, + 0x26,0x90,0x49,0xb3,0xc,0x36,0xa7,0x2c,0x9e,0xe,0x96,0xf2,0x2a,0xdd,0x13,0xfe, + 0x5,0xf2,0xf4,0xc7,0xfd,0xc1,0xb8,0xeb,0x3a,0x75,0x4e,0x72,0x6a,0xf1,0x99,0xc0, + 0x11,0x1f,0xd0,0x9c,0xc,0xd7,0xaf,0x1,0xe,0x72,0xf2,0x50,0x55,0x3e,0x86,0xe9, + 0x44,0x72,0xe6,0x15,0x60,0xa2,0xde,0xb3,0x73,0x52,0xeb,0xc4,0xc,0x40,0x3e,0xf3, + 0xb8,0xeb,0xee,0x3b,0xec,0xb,0xf7,0xdf,0xef,0xe3,0x5b,0x9,0x65,0x4b,0x10,0xa4, + 0x9c,0x3c,0x79,0x52,0x46,0x38,0xad,0x68,0x59,0x86,0x58,0xde,0x20,0x5d,0x93,0xf6, + 0x89,0x31,0x0,0x4d,0xd1,0xc9,0x60,0xfc,0x74,0x8c,0x4b,0xf5,0x73,0x21,0xcc,0x85, + 0x63,0xea,0x25,0xde,0x4e,0xa0,0x8a,0xd7,0x85,0x68,0x18,0xaf,0xe3,0x31,0x8c,0x26, + 0x9,0x48,0x35,0xb2,0x4a,0x66,0x17,0x88,0xa4,0xfd,0x7e,0xa4,0x50,0x4f,0x4,0x9e, + 0x92,0x8f,0x40,0x8e,0xf7,0xa7,0x32,0x35,0x35,0x75,0x15,0x39,0x19,0xf6,0xa0,0x12, + 0x72,0xe2,0x23,0x5c,0x3f,0x7a,0xf4,0x78,0x50,0xbd,0x32,0x50,0x16,0x41,0x88,0xe7, + 0x99,0x33,0x67,0xbc,0x93,0x1a,0xd,0x4,0x35,0x61,0x75,0x29,0xac,0x36,0x13,0x98, + 0x9f,0x93,0x8,0xab,0x9e,0xe2,0x5e,0x4b,0xea,0xe2,0x50,0x3d,0xee,0x7e,0x6c,0x7c, + 0x42,0x1,0x65,0xbf,0x1b,0xf0,0xc5,0xd1,0xa,0xfe,0xc,0x1f,0x0,0xc9,0x51,0xa9, + 0x12,0x49,0x48,0x3,0xe9,0x5,0x75,0x78,0xc0,0xac,0xbc,0x91,0x13,0xe6,0xa4,0x43, + 0x6b,0x68,0x81,0xb1,0xa4,0x15,0xff,0x4c,0x4d,0x4e,0xd9,0xe8,0xd8,0x98,0x93,0xc3, + 0xb8,0x66,0x21,0x47,0xcf,0x1,0xee,0x43,0x52,0x69,0x9b,0xba,0x49,0xdd,0x3b,0x34, + 0x3c,0xec,0xe3,0x5e,0x9,0x65,0x11,0x94,0x91,0x4e,0xbf,0xf7,0xee,0x61,0x1f,0xc, + 0x83,0xac,0x50,0xc3,0x1e,0x10,0x86,0x39,0xfa,0x70,0x83,0x8e,0x47,0xe3,0x97,0x4c, + 0x40,0x2a,0x47,0xf0,0xc6,0x64,0x7,0x87,0x86,0xad,0x5b,0xfa,0x7f,0x79,0xe0,0x4a, + 0xa8,0x63,0xb0,0x3a,0x90,0x3d,0xd5,0x4,0x53,0x4e,0x4,0x36,0xee,0xc0,0x81,0x3, + 0x72,0xc9,0xef,0xd9,0xc0,0x95,0x1,0xbf,0x7,0xf5,0xad,0x91,0xa4,0x56,0x11,0xe4, + 0xe9,0x9c,0xdc,0x6c,0x56,0xb6,0x6f,0x4e,0x84,0x51,0x4f,0xfb,0x4c,0x78,0x4c,0x81, + 0x2b,0x13,0xc6,0xce,0xcd,0xce,0xce,0xc9,0x5b,0x2a,0x6,0xf2,0x9e,0x2,0x39,0xf9, + 0xe0,0x6a,0x9f,0x82,0xc8,0x72,0x36,0xec,0xca,0x22,0x8,0xb6,0xcf,0x5f,0xb8,0xe0, + 0xaa,0x94,0x51,0xa3,0x6c,0x4d,0x20,0xf2,0xb1,0x30,0x50,0xc8,0x60,0x92,0xc,0x47, + 0xa7,0xbe,0x52,0x88,0xf1,0x91,0xf,0x8e,0xd8,0x7b,0x87,0xf,0x4b,0x67,0xe6,0xed, + 0xb6,0x9d,0x3b,0xed,0xd6,0x6d,0x5b,0x61,0xce,0x9f,0x4b,0xe9,0xbe,0xb4,0x8,0xaa, + 0xd1,0x28,0x2a,0x65,0xf4,0x99,0xfc,0x84,0xe2,0x97,0xf1,0x89,0x71,0xef,0x6b,0x71, + 0x5a,0x49,0x7b,0x48,0x56,0xba,0xba,0x46,0x6e,0x3c,0x64,0xf4,0xb,0x5a,0x10,0xdc, + 0x38,0x51,0x3d,0x7d,0x43,0x88,0x4b,0x8e,0x16,0x2b,0x50,0x73,0x2d,0x39,0x80,0xb1, + 0x5e,0x38,0x7f,0x7e,0x51,0xc2,0x4a,0x61,0x45,0x82,0x18,0xe8,0x99,0x73,0x61,0x7b, + 0x94,0xa0,0x2f,0xa5,0x81,0x36,0x28,0x10,0x6c,0x6a,0x6c,0x74,0x3,0xed,0x3b,0x81, + 0x6b,0xc2,0xde,0xf,0x83,0x66,0x22,0x95,0x22,0x80,0x6f,0xd4,0x61,0x64,0x78,0x44, + 0xaa,0x75,0xd9,0x9f,0xaf,0x57,0x52,0x49,0x61,0x36,0x4c,0x80,0x58,0x68,0x76,0x41, + 0x25,0x8b,0x8d,0xa9,0xb0,0xb5,0xed,0x1d,0x76,0xdf,0x7d,0xf7,0xd9,0x5d,0x77,0xdd, + 0xad,0x54,0xa1,0xd3,0x27,0x42,0x26,0xef,0x92,0x2,0x39,0x92,0x16,0xec,0x10,0x76, + 0xa4,0x4e,0xfd,0x41,0xc9,0xc8,0xe8,0xa8,0x4f,0x94,0xfb,0xdc,0x20,0xbb,0xe4,0x4, + 0x5c,0x43,0x4e,0x72,0x8a,0xea,0x5e,0xee,0xeb,0x73,0x1b,0xb5,0x12,0x56,0xf4,0x62, + 0x44,0xa1,0xcf,0x3d,0xff,0x82,0x72,0xae,0x3e,0x6b,0x6e,0x6d,0xb5,0x74,0x7d,0x9d, + 0x67,0xed,0xd,0x32,0xd2,0x29,0xd,0x1c,0x63,0x4a,0x3,0xf9,0xe2,0x1c,0x8f,0x51, + 0x3b,0x56,0x38,0x33,0x97,0xf1,0xd,0x34,0x36,0xbe,0x20,0x2e,0x6c,0x8e,0xe9,0x19, + 0x62,0x9e,0x4,0x41,0xea,0x8,0x1,0x88,0x86,0x65,0xf2,0x65,0xc3,0xe6,0x9d,0x1c, + 0x56,0xb1,0xc2,0xa6,0x70,0xdd,0xe3,0x63,0x96,0x56,0x3b,0xe2,0xd4,0xa6,0x65,0x8c, + 0xdd,0x93,0xaa,0x4d,0x22,0x74,0xf6,0x91,0x82,0x31,0xf,0x6d,0x85,0x49,0x15,0x4c, + 0x2d,0x39,0xc5,0x9b,0xcd,0xca,0x54,0x7c,0xf3,0xd1,0xbf,0xb1,0x2d,0x9b,0x37,0x39, + 0xe1,0xcb,0xa1,0x24,0x41,0x54,0x1d,0x3d,0x76,0xdc,0x5e,0x7c,0xf1,0x57,0xca,0x98, + 0xdb,0x2d,0xab,0x9e,0x87,0x95,0xc1,0x57,0xcb,0x26,0xb4,0xb7,0xb6,0x58,0x1b,0x92, + 0x93,0xe4,0x5b,0x6c,0xca,0x33,0x2,0x56,0x9b,0xe7,0x72,0xf3,0x72,0xdf,0x9a,0x0, + 0xd9,0xf6,0xd5,0xe3,0xc,0x27,0x7e,0x37,0xf7,0xe9,0x20,0xd0,0xa9,0xfb,0x55,0x82, + 0x27,0xc4,0xed,0x4b,0x52,0xd4,0x2e,0xa9,0xc2,0x95,0xc1,0x21,0xbb,0x34,0x30,0x68, + 0xd3,0xba,0xd6,0xd8,0xda,0x26,0xbb,0x55,0x69,0x73,0x93,0xe3,0x56,0x2f,0x9,0xeb, + 0x54,0x12,0xea,0xde,0xca,0xd5,0x2a,0xb4,0x4,0xae,0x92,0x9e,0xab,0xe,0xc3,0x9, + 0xe1,0xc0,0x57,0x1e,0x79,0xd8,0xb7,0x4c,0x48,0xb6,0x97,0x43,0x49,0x15,0xc3,0xf8, + 0xd,0xf4,0xf,0xb8,0x2a,0xad,0xeb,0xec,0xf4,0xfc,0x6a,0x7a,0x3a,0x63,0x93,0x9a, + 0xfc,0x68,0x66,0xce,0xae,0x8c,0x8e,0xd9,0x65,0xd5,0xf3,0x86,0xe2,0xcc,0xd9,0xb3, + 0x76,0x4e,0x7a,0xcd,0xbe,0xd0,0x80,0xc,0x31,0x51,0xab,0x7b,0xb3,0xc4,0x5e,0x61, + 0x5f,0x48,0x35,0xc8,0xf4,0x51,0x45,0xd2,0x1,0x92,0xca,0x74,0xd,0x21,0x1,0xd1, + 0x76,0x92,0xfd,0x3b,0x39,0xc1,0xbb,0xcc,0x28,0xa7,0x1a,0xb8,0x32,0x64,0xe7,0x7a, + 0x2e,0xd9,0x5,0xb5,0x3b,0xa5,0xf3,0x71,0x85,0x1b,0x19,0x79,0xcc,0x74,0xdd,0x1a, + 0xab,0x96,0x2d,0xc2,0xce,0xe1,0x31,0xfd,0xd9,0x25,0x7e,0x56,0x4,0x7d,0x4c,0xd3, + 0x96,0xda,0x2c,0x85,0x92,0x12,0x74,0x5a,0xae,0xbd,0x5b,0xb9,0xd7,0x15,0x79,0x97, + 0xc6,0xc6,0x26,0x9b,0x50,0x83,0x3,0x63,0x13,0x96,0xad,0xa9,0x75,0xb1,0x1e,0xed, + 0xbb,0x6c,0xfd,0x3d,0x3d,0x96,0x11,0x19,0xec,0x1d,0xd7,0x68,0xa2,0xc4,0x24,0x35, + 0x9a,0x3c,0x6a,0x88,0x7d,0x6a,0x6c,0x6c,0xf0,0xbc,0x8,0x72,0x91,0x34,0x7a,0x23, + 0x5f,0x22,0x6e,0x41,0xda,0x98,0x14,0x44,0xba,0x4a,0x91,0xd8,0xba,0xfa,0x11,0x3c, + 0xe6,0x6c,0x70,0x78,0xd4,0x7a,0x21,0x5b,0x46,0x78,0x66,0x7a,0xca,0xaa,0xd5,0x66, + 0x8d,0x16,0xb,0xf7,0x57,0xa7,0xa5,0x6d,0xd3,0xca,0x93,0x5a,0xe4,0x4b,0x8,0x8, + 0xa7,0xc9,0xc5,0xab,0xea,0x96,0xe4,0x8a,0xbd,0xac,0x3d,0x7b,0x76,0xdb,0x27,0x3e, + 0x71,0xab,0xef,0x54,0x2e,0x87,0x92,0x4,0xbd,0xf5,0xd6,0x1,0x77,0x87,0x30,0x4d, + 0x4e,0x5,0x26,0xd5,0xf0,0xe9,0x73,0xe7,0x2d,0x23,0xc3,0x38,0xa3,0xeb,0x63,0xf2, + 0x70,0xd1,0x68,0x33,0x58,0x56,0x6,0x4f,0xe2,0x46,0x5d,0x13,0x87,0x30,0x88,0x5a, + 0xdf,0xb5,0xde,0xda,0xa4,0x1e,0x10,0xe5,0x5b,0x1d,0xea,0xd5,0x53,0x8e,0xc4,0x26, + 0x41,0xe,0x43,0xf1,0xb7,0x1f,0xfa,0x9e,0x98,0x9c,0xb6,0x41,0xa5,0x4,0x13,0x13, + 0x93,0xba,0x86,0xc7,0x93,0x25,0x12,0x31,0x33,0x72,0xe1,0xd8,0x8f,0xa6,0x35,0x75, + 0xd6,0xd9,0xd6,0xa6,0x67,0x43,0x5b,0xf9,0x58,0xa4,0xa1,0xc8,0xf5,0xa8,0x86,0x48, + 0xde,0xa7,0x3e,0xb9,0xcb,0x6e,0xbd,0x75,0xbb,0xed,0xdc,0xf9,0x9,0xbf,0x56,0xc, + 0x25,0x9,0x7a,0xf5,0xb5,0xd7,0x65,0x64,0x25,0x31,0x22,0x83,0xc9,0xe3,0x21,0x8e, + 0x1f,0x3b,0x66,0x67,0xcf,0x9e,0xb3,0x66,0xd,0x6e,0xcb,0x2d,0xb7,0x48,0xfd,0xd6, + 0xf8,0x96,0x7,0x9d,0x13,0x1b,0x45,0x39,0x67,0xd2,0x33,0xd3,0x33,0xbe,0xfa,0xc4, + 0x34,0x44,0xb9,0xed,0x22,0x68,0xdb,0xb6,0x6d,0xd6,0xd6,0xde,0xe6,0x64,0x30,0x1, + 0x1e,0xe1,0x38,0xc4,0x51,0x81,0x20,0x48,0x9e,0x90,0x7a,0xe3,0xbe,0x9,0x40,0x2b, + 0x5d,0x2a,0xd3,0xde,0xe6,0xa4,0xa4,0xb5,0x56,0x2a,0xda,0x28,0xfb,0xe7,0x2f,0x23, + 0x13,0x75,0x4,0x4b,0xf2,0x91,0x20,0x9e,0x86,0x21,0x5,0x24,0xd7,0x48,0xb2,0x79, + 0xc3,0xbb,0x4d,0x73,0xf8,0xcc,0xdd,0x77,0x85,0x8b,0x45,0x50,0x92,0xa0,0x17,0x7f, + 0xf5,0x92,0xdc,0xbc,0xec,0x86,0xfe,0x18,0x48,0xff,0x40,0xbf,0x1d,0x78,0xfb,0xa0, + 0x6d,0xd9,0xb2,0xc5,0xb6,0x6e,0xbd,0xc5,0x55,0x7,0x52,0x2,0x31,0xa1,0x6f,0xbc, + 0xc9,0xd2,0x66,0x58,0xd0,0x75,0x42,0x5,0x36,0xd7,0x2e,0x5f,0xbe,0xec,0xc6,0x71, + 0xf3,0x86,0x8d,0xfe,0x8e,0x9e,0x20,0x2f,0xdc,0x4,0x41,0xe1,0x3d,0x19,0xa3,0xe1, + 0x19,0x8,0x25,0x11,0xae,0x51,0xdc,0x43,0xa,0xc2,0xab,0x6b,0x24,0xb9,0x16,0xdb, + 0x25,0x82,0xd8,0x36,0xc9,0xcc,0x2a,0x6a,0xf6,0xae,0xe9,0x39,0x66,0x69,0xc9,0x74, + 0x92,0x2f,0x3f,0xf0,0x7b,0x12,0x96,0x92,0xeb,0xd8,0x44,0xec,0x2a,0x6f,0x4d,0xee, + 0xdf,0xfb,0xf9,0x70,0xb1,0x8,0x4a,0x1a,0xe9,0xac,0x56,0xcf,0xdb,0x17,0x1,0xa8, + 0xcd,0xb8,0xd2,0x85,0xbb,0xee,0xbc,0xc3,0xcb,0xba,0xce,0xe,0x17,0xfb,0x39,0x89, + 0xbc,0x7b,0x11,0xd,0x98,0xd9,0x91,0xc0,0xb6,0xb4,0x34,0xfb,0xb,0x40,0x36,0xd3, + 0x89,0x82,0x79,0x7d,0xc3,0x8e,0xde,0x8e,0x1d,0x3b,0x7c,0x50,0x97,0x7b,0x7b,0xed, + 0xe0,0xa1,0x43,0x36,0x2a,0x23,0x9f,0x55,0xc,0x34,0xad,0x67,0xb3,0x6a,0x8b,0x17, + 0x86,0xb4,0x1,0x41,0xa8,0x74,0x73,0x73,0xb3,0xb7,0x85,0x2a,0xa6,0xc4,0x44,0x93, + 0xa4,0xa6,0x5e,0xed,0x7,0x89,0xe3,0xed,0x6c,0x90,0x5c,0x10,0xbe,0x93,0xd9,0x2f, + 0x82,0x73,0x11,0xa3,0x18,0x2b,0xbf,0x9a,0xe7,0x99,0x13,0x52,0xcb,0xe2,0x95,0x42, + 0x49,0x9,0x7a,0xe1,0x85,0x5f,0x78,0x9b,0x18,0x50,0x1a,0x42,0xfc,0x9b,0x35,0xe0, + 0xb1,0xd1,0x71,0xeb,0x91,0x71,0x66,0x82,0xbc,0xdc,0x6b,0x90,0x9a,0xc5,0xb1,0x10, + 0xc0,0xa1,0xe9,0x35,0xd5,0x69,0xad,0xce,0x6,0xb7,0x39,0xd8,0x2d,0x6c,0x12,0x89, + 0x23,0x52,0x30,0x70,0x65,0xd0,0xfa,0xfb,0xfb,0x18,0xa9,0x35,0x48,0xed,0x52,0xf2, + 0x48,0x55,0x92,0xa6,0xf6,0x96,0x46,0x6b,0x16,0xa1,0xf3,0x72,0xed,0xee,0xe6,0xab, + 0xb4,0x7e,0x9a,0x88,0x93,0x2f,0xd2,0xf0,0x80,0xb4,0x8d,0xfd,0x20,0x29,0x9d,0x9a, + 0x9a,0x94,0xba,0xb6,0x4b,0x8a,0x96,0x88,0x72,0x44,0x22,0xfc,0xee,0x44,0x72,0x12, + 0x70,0x2d,0x4e,0xb9,0xa5,0xa5,0xc5,0x36,0x6c,0xe8,0xb2,0x87,0x1e,0x7c,0xc0,0xcf, + 0x8b,0xa1,0xa4,0x4,0x39,0xd4,0x18,0x2b,0x1a,0x8d,0x6d,0x5f,0x6f,0x9f,0x1d,0x3f, + 0x71,0x42,0x2e,0xfd,0x82,0x47,0xb1,0x53,0x9a,0x3c,0x13,0x40,0xe4,0xd9,0x87,0x99, + 0x56,0x9e,0x74,0xec,0xd8,0x9,0xfb,0xe5,0x8b,0xbf,0xb1,0x97,0x5f,0x7e,0xc3,0x8e, + 0x1c,0xed,0x76,0x57,0xde,0xd2,0xd2,0xe4,0x24,0x54,0x4b,0x65,0xda,0xda,0x5b,0xad, + 0x73,0x5d,0xa7,0x1b,0xd8,0xde,0xfe,0x7e,0x9b,0x90,0x4,0xa6,0xdb,0x3a,0xac,0x62, + 0x4d,0x93,0x8d,0x60,0xdc,0x99,0x98,0xe6,0xc5,0xa,0x7b,0x36,0xae,0x31,0x60,0xcc, + 0xa3,0x51,0x47,0x92,0x2f,0x5e,0xec,0xb1,0x41,0xc5,0x47,0x9c,0x27,0x1a,0x1e,0x88, + 0xc9,0x23,0xc7,0x57,0x6c,0x39,0xc4,0x7b,0x97,0x97,0xf,0xc7,0x8a,0x4,0xc1,0xb6, + 0x6f,0xbe,0x2b,0x4e,0x41,0x62,0x88,0x79,0x46,0xb5,0x7a,0xe,0xef,0x3f,0x6c,0x37, + 0x84,0xed,0xa,0x5c,0x79,0xca,0x57,0xf6,0xfc,0xf9,0x33,0xb2,0x57,0x7,0xec,0xa5, + 0x97,0x7e,0x6b,0xbf,0x52,0x19,0x50,0xa0,0x87,0xda,0xa5,0x6b,0x6b,0x5c,0xbc,0xdd, + 0xb3,0x6d,0xdc,0xe8,0x1e,0x30,0x97,0x9d,0xf5,0xad,0x5b,0x62,0xac,0x1,0xb9,0x76, + 0xc9,0x8a,0xfa,0x93,0x4d,0x41,0x6a,0x74,0xaf,0x93,0x80,0xf4,0x68,0x2e,0x78,0x3b, + 0x16,0x83,0x60,0xb5,0x55,0x91,0x3d,0xf5,0x57,0x49,0x4f,0x1e,0x96,0x78,0xcb,0xfb, + 0x4b,0x8,0x81,0x54,0x6c,0xde,0x4a,0x71,0x50,0x49,0x82,0x3c,0xc2,0x4c,0x6,0x88, + 0xe1,0xed,0x53,0xfe,0x32,0x35,0x35,0xe3,0x41,0x1d,0x49,0x23,0x92,0x35,0x23,0x71, + 0x8f,0x36,0xa3,0x56,0x93,0x5f,0x5a,0xd1,0x59,0xa9,0x41,0xbf,0xd,0xf4,0xf5,0xd8, + 0x6b,0xaf,0xfe,0xde,0xfe,0xf3,0x17,0x2f,0xd9,0x99,0xd3,0x67,0x5d,0x92,0x3c,0x8f, + 0x92,0x5a,0x34,0x49,0xc4,0x79,0x1d,0x93,0x95,0xb7,0xea,0x39,0xfa,0x81,0xd,0x5f, + 0xbe,0x64,0xb5,0xf2,0x96,0xb4,0xd,0x1,0xbc,0x14,0x8,0x6f,0x43,0xd4,0xa0,0xa, + 0x5e,0x8b,0xfe,0x50,0xdb,0xd,0x1b,0xc2,0xab,0x9d,0xb0,0x3,0xe9,0xc3,0x15,0x38, + 0x48,0x8,0xf0,0xcf,0x0,0xd4,0x2c,0xfc,0x25,0xe7,0x6a,0x6b,0x4a,0x1e,0x96,0x1f, + 0x48,0xac,0x93,0x24,0x97,0x42,0x49,0x82,0xf8,0xb5,0x85,0xbf,0x3e,0xd1,0x20,0xd8, + 0xe6,0xc0,0x65,0xe3,0xee,0xc3,0xaa,0xaa,0xe8,0x2f,0x23,0x23,0x3d,0x29,0x8f,0x23, + 0x5e,0x5c,0x92,0x48,0xf,0xf0,0x6e,0xad,0xc4,0x3c,0x35,0x29,0xc5,0x47,0x44,0xcb, + 0x66,0xff,0xf3,0xe6,0x9b,0xf6,0xc2,0x73,0xbf,0xb0,0xd3,0xa7,0xce,0xb8,0x24,0x61, + 0xbb,0x64,0x0,0x7d,0xe3,0xad,0x56,0x24,0x4c,0xf,0x5d,0xb1,0xcc,0xf0,0xa0,0xad, + 0x57,0x1d,0x1,0x67,0x2a,0x55,0x6d,0x55,0x22,0xa,0x62,0xdc,0x92,0xe8,0x3b,0xbe, + 0xb7,0x27,0x71,0x85,0x64,0x24,0x7b,0x91,0x9c,0x45,0x92,0x22,0x22,0x1d,0x4b,0xd2, + 0x13,0x31,0x2b,0xa9,0x21,0x8a,0xbf,0xe7,0x9e,0xbb,0xed,0xb6,0x4f,0x7f,0x2a,0xb9, + 0x5a,0x1c,0xa9,0x7f,0x16,0x92,0xe3,0x22,0xa8,0xf0,0xc9,0x8f,0xca,0xd6,0x60,0x34, + 0x79,0x23,0x10,0xc3,0xfa,0xb0,0x56,0xbc,0xa9,0x50,0x90,0xa7,0x50,0xa0,0xb1,0xa1, + 0x61,0x31,0x3a,0x26,0xb3,0xc7,0xce,0x34,0x37,0xb7,0x88,0xb8,0x94,0xb5,0xb7,0x35, + 0x3b,0xb1,0xe7,0x14,0x60,0xf6,0xf5,0xd,0x28,0x7e,0xda,0x62,0xad,0x32,0xf6,0xb3, + 0x92,0x6,0x24,0xa0,0x46,0xb6,0xc9,0xe3,0x26,0xf5,0xb5,0x56,0x46,0x17,0xf7,0xef, + 0x89,0xac,0xa4,0x16,0x12,0xb1,0xd5,0xb8,0xf3,0xd9,0xd9,0x90,0x56,0x10,0x38,0xfa, + 0x8e,0xe4,0x92,0xe8,0x24,0x80,0x94,0xa0,0x72,0xc8,0x8b,0x93,0xc2,0xbd,0xa1,0xd2, + 0x9f,0xc3,0xe1,0x30,0x96,0x2f,0xcb,0x30,0xef,0xda,0xb9,0xd3,0xd3,0x9e,0x52,0x28, + 0x49,0x10,0xab,0x8c,0xe1,0xc5,0x30,0xd3,0xd,0xb1,0xc,0xab,0x18,0xc1,0xe0,0xe9, + 0x7d,0x56,0x5e,0x87,0x2c,0x9c,0x74,0x83,0x4d,0x35,0x72,0xab,0xe6,0xa6,0x66,0xeb, + 0xea,0xda,0xa0,0x60,0x6c,0xab,0xb5,0xad,0xed,0x74,0x55,0x42,0x35,0x6,0x7,0x87, + 0x95,0x7c,0xe,0xdb,0xae,0x5d,0x3b,0x7c,0x15,0xd9,0xd,0xe0,0x8d,0x7,0x83,0x67, + 0xdf,0x9,0x9,0xe1,0x59,0x24,0xb7,0xba,0x32,0x67,0x69,0x5,0xf0,0x55,0x15,0x9a, + 0x70,0x4e,0xb6,0x47,0x4,0x39,0x29,0x70,0x17,0x67,0xbd,0x1c,0xa,0xea,0x79,0xce, + 0x9d,0x8d,0xc6,0xf6,0xe0,0x3,0x5f,0xb2,0xdb,0x6e,0xfb,0xb4,0x9b,0x83,0x95,0x50, + 0xf2,0xe,0x6,0xd9,0xa9,0x78,0xa7,0x36,0xf9,0x71,0x0,0x2b,0x8d,0xf4,0x20,0x25, + 0x5e,0xd4,0x1,0x51,0x2e,0xe4,0xc,0xca,0x75,0x4f,0xc8,0xbb,0xb8,0x3d,0x4a,0xec, + 0x6,0xee,0x78,0x4e,0x1e,0xaa,0x55,0xf1,0xcc,0xae,0x4f,0x7e,0xd2,0x1e,0x7e,0x64, + 0x9f,0x7d,0xe5,0xab,0xfb,0x44,0x56,0xab,0xf5,0x5c,0xb8,0xe4,0x12,0x87,0x9d,0xc3, + 0x3b,0xf1,0x63,0x2b,0xd2,0x95,0x1,0x49,0x29,0x52,0x9b,0xaa,0x90,0x64,0x25,0x5e, + 0xb,0xf2,0xc8,0xd6,0x19,0x3,0xd2,0x54,0x2d,0x71,0x62,0x1c,0xd7,0x90,0x90,0xfc, + 0x2d,0x21,0x9c,0x31,0x16,0x88,0x27,0xc8,0x7c,0xf0,0x4b,0x5f,0x74,0xb5,0xe2,0x5a, + 0x39,0x58,0x91,0x42,0x3c,0xc5,0x8e,0x1d,0xdb,0x5d,0xb4,0x1b,0x35,0x1,0x26,0x13, + 0x47,0x46,0x17,0xec,0x9,0x61,0x7b,0xb8,0xc2,0xe4,0x70,0xc1,0x9c,0x60,0xb4,0xd7, + 0x28,0x3e,0x82,0xd4,0x69,0x25,0x9a,0x13,0xe3,0xbc,0xc0,0xcb,0x29,0x27,0xeb,0xb2, + 0x3b,0xef,0xbc,0xdd,0xea,0x95,0x4b,0x31,0x71,0x9e,0x45,0xe2,0x48,0x70,0xb9,0x9f, + 0x78,0x69,0x62,0x62,0x5c,0xde,0x8a,0xf7,0x6d,0xa1,0x17,0xbc,0x1a,0x92,0x1b,0x26, + 0x8a,0x24,0x85,0x6d,0xdf,0x0,0x7a,0x8e,0xe3,0x9,0x7f,0xe1,0x74,0x89,0x1c,0x52, + 0x1e,0x5e,0x30,0x3c,0xf0,0xa5,0x7,0x5c,0x72,0xca,0x25,0x7,0xac,0x48,0x10,0x13, + 0xb8,0x45,0xa9,0x5,0x1e,0xa,0xe3,0x1b,0xa5,0xc3,0xb,0x12,0xa4,0x82,0x61,0x46, + 0x97,0x89,0xb6,0xf9,0xc1,0x0,0xf1,0x11,0xd7,0x91,0x10,0x7f,0xb,0x82,0x2b,0x97, + 0xcd,0x60,0x3b,0x35,0xc4,0x4d,0x61,0x73,0x8b,0xbd,0x6e,0x9e,0x85,0x44,0x88,0xc7, + 0x76,0x31,0xf4,0x29,0x91,0x8c,0xfb,0xcd,0xe5,0x18,0x9e,0x16,0x40,0x75,0xec,0x5d, + 0x73,0x6f,0xbf,0x24,0x15,0x55,0xe7,0x98,0x31,0x44,0x7a,0x5c,0x76,0x44,0x38,0x25, + 0x82,0x31,0xb0,0x99,0xcf,0xd8,0x1e,0x7e,0xf8,0xaf,0xa4,0xd6,0xcb,0x27,0xa5,0xcb, + 0x61,0x45,0x82,0x0,0x92,0xb3,0x67,0xf7,0x6e,0x4d,0xa2,0xca,0x8f,0x7d,0x60,0x1a, + 0x48,0xd4,0x61,0xce,0x9d,0x24,0x79,0x17,0x92,0xc0,0xfe,0xfe,0x1,0xc5,0x3d,0x3, + 0x8a,0xbe,0x67,0xfd,0x9e,0x18,0x27,0x61,0x1c,0xc9,0xb9,0xa6,0xb5,0xa2,0x14,0x7e, + 0xfd,0xea,0x76,0x41,0xcf,0x11,0xd,0xd3,0x3e,0x92,0x37,0x29,0x89,0xf3,0xc8,0x5d, + 0x93,0x96,0xe0,0x9a,0xb2,0xa,0x1b,0x53,0x76,0xdf,0xab,0x58,0x4a,0x9d,0x69,0xa1, + 0xea,0xb4,0x38,0x6c,0xc7,0x2e,0x91,0x91,0xf,0x97,0x1d,0xdd,0x47,0x62,0xcb,0x66, + 0xff,0x37,0xbe,0xfe,0x55,0xdb,0xa1,0xac,0x9d,0x71,0x5e,0x2f,0xca,0x22,0x88,0x49, + 0x76,0x29,0x24,0xdf,0xba,0x6d,0xab,0xb5,0x2a,0x8b,0xc7,0xd8,0x46,0xe4,0x4b,0x14, + 0xc7,0x90,0x41,0x20,0x47,0x60,0x78,0xf1,0x52,0xaf,0x4b,0x13,0x6e,0x95,0x36,0x3c, + 0xf1,0x54,0x3d,0x2a,0xc5,0x58,0xdd,0x46,0xc9,0xb6,0x50,0x87,0xb7,0x3,0xb4,0x43, + 0xe8,0xe0,0xde,0x92,0x3f,0x9d,0xcf,0xcc,0x64,0xad,0xfb,0xd4,0x39,0x1b,0x96,0x11, + 0x6f,0x69,0x6e,0xb0,0x86,0xc6,0x26,0x27,0x8d,0xfe,0x16,0x91,0xc7,0x15,0x8b,0x87, + 0xaa,0xd2,0xdf,0x63,0x7f,0xfb,0xa8,0x12,0xeb,0xad,0xde,0xce,0x8d,0xa0,0x2c,0x82, + 0x0,0x71,0xc7,0xee,0x7b,0x3f,0x63,0x1b,0x37,0x6d,0xf4,0x5f,0xca,0x87,0x7d,0x9d, + 0x98,0x2,0x84,0xf7,0x64,0x91,0x24,0x54,0xb,0xf7,0x4d,0xe4,0x8d,0x5b,0xe7,0x75, + 0xe,0xa1,0x2,0x84,0xc0,0xc,0x39,0x16,0x6a,0x53,0x21,0xef,0xe4,0xbf,0xf8,0x60, + 0x72,0x1a,0x49,0x4c,0x1e,0x91,0xa2,0x5,0xdd,0x37,0x8f,0x84,0x68,0x5e,0xf4,0xc3, + 0x7d,0x6c,0xad,0xd4,0xd4,0xe0,0x30,0x64,0x8b,0x94,0x48,0xcf,0xcc,0x4c,0x7b,0x5d, + 0x9c,0x3a,0xfd,0x23,0x91,0xa8,0x3a,0x6a,0xfd,0x2d,0x91,0x43,0xb6,0x7e,0xa3,0xe4, + 0x80,0xb2,0x9,0x2,0x74,0xfa,0xf9,0xcf,0xee,0xb6,0x4f,0xed,0xda,0x65,0x6d,0x32, + 0xde,0xe8,0x36,0xb6,0x25,0x48,0x40,0x28,0xc,0x86,0x6f,0xea,0xd8,0x27,0xc2,0xce, + 0x40,0x14,0xfb,0xca,0xb8,0xf8,0xa1,0xe1,0x11,0x1b,0x56,0xaa,0x32,0x2e,0xf1,0x47, + 0x5,0x50,0xb9,0x10,0xf3,0xe4,0x7c,0x62,0xd8,0x27,0x7e,0x37,0x4d,0x90,0xc8,0xdb, + 0xe,0x4a,0x85,0xc8,0xdc,0xa0,0xb4,0xa4,0xb9,0xad,0xdd,0x72,0x52,0xc7,0x29,0xdd, + 0x37,0x28,0x69,0xe2,0x77,0x4a,0xfc,0x96,0x11,0xd0,0x2f,0xb1,0x14,0x21,0x47,0xa7, + 0x22,0xec,0x6f,0x7c,0xfd,0x6b,0x1f,0x9a,0x1c,0x70,0x5d,0x4,0x81,0x56,0xa5,0x7, + 0xbb,0xf7,0xdc,0x67,0xb7,0xcb,0x1b,0x74,0x74,0xb4,0x39,0x11,0x2c,0x61,0x21,0x49, + 0x0,0x23,0x1e,0xc,0x30,0xb6,0x47,0x46,0x7a,0x62,0x52,0x6a,0x32,0x62,0x43,0x22, + 0x6b,0x68,0x68,0x58,0xc4,0xc9,0x5b,0x11,0xb8,0xc9,0x2,0x63,0x94,0xa9,0xe3,0x7e, + 0x3c,0x27,0x5e,0x87,0xba,0x39,0xd9,0xa0,0xec,0x42,0x85,0xa5,0xd7,0x34,0xda,0x82, + 0xc8,0x49,0xd5,0xd6,0x5b,0x46,0xd7,0x46,0x64,0xbf,0xe6,0x32,0x73,0x9e,0xb3,0xa9, + 0x43,0x49,0xce,0xbc,0x4b,0x68,0x57,0xd7,0x3a,0xdb,0xb7,0xef,0x21,0xdb,0x24,0x42, + 0x57,0x3,0xd7,0x4d,0x10,0x20,0x55,0xf8,0xdc,0xde,0xcf,0xca,0x65,0xde,0xe6,0xb9, + 0xc,0x93,0xa,0x3f,0x62,0xa,0xd2,0x3,0x41,0xb1,0xb0,0xc0,0x7c,0x13,0x40,0xe2, + 0xca,0x51,0x3f,0xc,0x32,0x93,0xf7,0x9f,0xb,0xd7,0xd6,0x49,0x5d,0xb2,0xd6,0xdb, + 0xdb,0x6b,0x17,0x7a,0x2e,0xb8,0xfa,0x12,0x95,0xd3,0xe,0xc4,0xd3,0x2,0x31,0xc, + 0x85,0x73,0x45,0x47,0x96,0xaa,0x6e,0xb0,0x16,0x65,0xff,0xfc,0x52,0x9f,0x8b,0xa8, + 0x15,0x1b,0x6a,0xec,0x39,0x3d,0xf4,0xe5,0x2f,0xfb,0xcf,0x86,0x57,0xb,0x37,0x44, + 0x10,0xe0,0xb7,0x80,0x5f,0xfc,0xc2,0xfd,0x76,0xe7,0x1d,0xb7,0x7b,0x18,0x40,0x76, + 0x1e,0x8d,0x66,0x31,0x69,0x2,0x1c,0x5,0xe2,0x82,0xa,0xae,0x5f,0xbf,0xce,0x37, + 0xf5,0x7b,0x95,0x4,0x9f,0xe8,0x3e,0x29,0xfb,0x93,0xb5,0x6d,0x32,0xa8,0x90,0x86, + 0x61,0xe2,0x79,0x6c,0x8c,0xc7,0x44,0x34,0x20,0xcb,0x9c,0x95,0xa4,0x11,0xe,0x74, + 0x76,0xae,0xf5,0x5f,0xe8,0xb3,0x65,0x82,0x6a,0xb6,0xa8,0xff,0xaf,0xfe,0xf5,0xc3, + 0xb6,0x5e,0x24,0xad,0x26,0x4a,0x6e,0x98,0x95,0x3,0xc,0xeb,0xf1,0xe3,0xc7,0xed, + 0xf0,0x61,0x65,0xe3,0x23,0xc3,0xae,0x26,0xe3,0xec,0x25,0x47,0xe3,0x1b,0xa1,0x19, + 0x72,0xca,0x7b,0x2f,0xa4,0x88,0xff,0x7a,0xb0,0x45,0x6,0x1f,0x2f,0x76,0xaa,0xe7, + 0x92,0x8d,0xe8,0x99,0xae,0xb5,0xed,0xb6,0x4e,0xea,0x85,0x3d,0x8a,0x86,0x1f,0x6f, + 0xe4,0xc1,0xa7,0x80,0x1a,0x2d,0x6e,0xe6,0xea,0x1e,0xda,0x62,0xcb,0x82,0x17,0x92, + 0x4f,0x3c,0xfe,0x2d,0xdf,0x0,0x5b,0x6d,0x7c,0x68,0x82,0x0,0x3f,0x16,0x20,0xd3, + 0x7f,0xe7,0x9d,0x77,0xec,0xfc,0xf9,0x1e,0xdf,0x82,0x65,0x62,0x53,0x8a,0x67,0x70, + 0xf1,0xa8,0x0,0x20,0xce,0x69,0x90,0xc4,0x74,0xb4,0xb5,0x5a,0xa3,0x56,0x7c,0x56, + 0x6,0xfc,0xca,0xd8,0x98,0xf5,0xca,0x9e,0xe4,0xa4,0x9e,0xeb,0x3b,0xd6,0x5a,0x93, + 0xd2,0x9a,0x3a,0x1d,0xd7,0x88,0x20,0xdc,0x3d,0xed,0x12,0x5b,0xf1,0x2,0x12,0x71, + 0xc7,0x10,0x93,0x70,0x7a,0x44,0x2d,0xb5,0x63,0x5b,0xf7,0xef,0xff,0xee,0x49,0x97, + 0xe0,0x7c,0x69,0x5d,0x2d,0xac,0xa,0x41,0x0,0x12,0x90,0x9a,0xc1,0xc1,0x41,0x7b, + 0xf7,0xbd,0xf7,0xed,0xd2,0xa5,0x4b,0xae,0x16,0x71,0x3f,0x87,0xcd,0x11,0xa4,0xa2, + 0x4a,0x2e,0x1e,0xe3,0x1d,0xde,0x83,0x65,0x6d,0x3c,0x33,0x23,0x82,0x26,0x6c,0x52, + 0xde,0xaa,0x49,0x92,0xd0,0xac,0x88,0xbd,0xb3,0x51,0x11,0xbb,0x9e,0xc1,0xa8,0xf3, + 0xbb,0x24,0x3c,0x25,0xa4,0xf3,0x22,0x93,0xf7,0xa7,0x95,0x6c,0xb9,0x68,0xd8,0x5b, + 0x65,0x88,0x9,0x2,0x6f,0x16,0x39,0x60,0xd5,0x8,0x8a,0x80,0x24,0xde,0x48,0xb0, + 0xf7,0x7c,0xe6,0xec,0x39,0x7f,0x45,0xe4,0xf1,0x8f,0x80,0xca,0x40,0x92,0x77,0x29, + 0xa1,0xaa,0x90,0x7,0x82,0xd8,0x31,0x49,0xd2,0x90,0x52,0x10,0x6c,0x10,0xaf,0xb2, + 0x5b,0x6a,0xd3,0xbe,0xd5,0x3a,0x25,0x29,0xcc,0xaa,0x1e,0x23,0x3e,0x3d,0x35,0xe9, + 0x51,0xfc,0xa6,0x5b,0xb6,0xda,0x6,0x79,0xaa,0x2d,0x1b,0x37,0xd8,0x66,0x15,0x4f, + 0x4f,0x6e,0x12,0x39,0x60,0xd5,0x9,0x8a,0xa0,0x59,0xd4,0x3,0x55,0x18,0x1d,0x1b, + 0xf5,0x6c,0x1f,0xd7,0xce,0x2b,0x69,0x7f,0x93,0xa0,0x5e,0x99,0x17,0x84,0x21,0x51, + 0x59,0xdd,0xcf,0xbd,0x35,0x72,0xf9,0xf5,0x32,0xd2,0x6c,0xb5,0x10,0x77,0x51,0x20, + 0x81,0x73,0xd2,0x13,0x12,0x5a,0xbc,0x1c,0xbb,0x81,0xd1,0x29,0xdc,0x4c,0xdc,0x34, + 0x82,0x22,0x68,0x1e,0x17,0x4d,0x82,0xc9,0x3b,0x7b,0xd2,0x5,0x5e,0xa,0x42,0xd2, + 0xbf,0xff,0xdb,0xbf,0xba,0x54,0x3d,0xfa,0xe8,0x37,0xfd,0xbf,0x12,0x70,0x5c,0x93, + 0xae,0xf6,0xad,0xf,0x12,0x63,0xde,0x96,0x10,0xa,0xe0,0xf1,0x9c,0xc8,0x12,0x92, + 0xf2,0xfc,0xf3,0xcf,0xfb,0xf7,0x43,0xf,0x3d,0xe4,0x71,0xd4,0x6a,0xe1,0xa6,0x13, + 0x54,0xa,0x1d,0x1d,0x1d,0x4e,0xd8,0xcf,0x7f,0xfe,0x73,0x7b,0xec,0xb1,0xc7,0xfc, + 0x5a,0x9c,0x68,0x29,0xc4,0x7b,0x23,0x68,0x83,0xb6,0x40,0x7e,0x5b,0xa7,0x4f,0x9f, + 0xb6,0x43,0x87,0xe,0xf9,0x71,0x21,0xa,0xdb,0x58,0x16,0x10,0xb4,0x9a,0x18,0x1a, + 0x1a,0x4a,0x8e,0x2,0xa,0xcf,0xf3,0xb1,0x7b,0xf7,0xee,0x9c,0xa4,0x26,0xf7,0xdc, + 0x73,0xcf,0xf9,0x39,0xf7,0x72,0xbe,0x52,0x29,0xd6,0x47,0xac,0x3b,0x75,0xea,0x54, + 0x72,0x35,0x97,0xfb,0xee,0x77,0xbf,0x7b,0xd5,0x73,0xb1,0xec,0xd8,0xb1,0x23,0xb9, + 0x63,0x65,0x14,0xff,0x1d,0xec,0xc9,0x97,0xed,0xc7,0x3f,0xfa,0xa5,0x1d,0x49,0x4e, + 0x97,0xc3,0xa7,0xff,0xf1,0xa7,0xf6,0xf,0x3b,0x92,0x13,0x21,0xae,0xe4,0xbd,0xf7, + 0xde,0x6b,0x6f,0xbd,0xf5,0x96,0xfd,0xf0,0x87,0x3f,0xb4,0xef,0x7d,0xef,0x7b,0x57, + 0xad,0x6a,0xb9,0xe0,0x99,0x42,0x3c,0xf9,0xe4,0x93,0xc9,0xd1,0xf2,0x28,0xa6,0x5e, + 0xf4,0xfd,0xf8,0xe3,0x8f,0xbb,0x44,0x31,0x9e,0xeb,0x51,0xc1,0x65,0x7e,0x28,0x7c, + 0xc2,0xfe,0xe3,0xd9,0x67,0xed,0xcd,0xe4,0x6c,0x39,0xec,0x7f,0xf4,0xa7,0x66,0x79, + 0x4,0x45,0x71,0xc6,0xe,0x0,0x8,0x2b,0x4,0xa4,0x71,0x1d,0x12,0x23,0x18,0x78, + 0xbc,0x1e,0x51,0x68,0x4b,0x4a,0xb5,0x95,0xf,0xae,0x81,0xfc,0x67,0xb7,0x6f,0xdf, + 0xee,0x24,0x95,0xa3,0xbe,0xd7,0x20,0x91,0xa4,0xab,0xd1,0xfd,0x4c,0x6e,0xff,0xde, + 0xbd,0xb9,0xbd,0x45,0xa,0x8f,0x84,0xb2,0x37,0xf7,0x4c,0x77,0x72,0x7f,0x2,0x54, + 0x5,0x11,0xfe,0xc1,0xf,0x7e,0xe0,0xe7,0xfb,0xf6,0xed,0xf3,0xf3,0x7c,0x95,0x88, + 0x6a,0xb5,0x52,0x29,0xa5,0x46,0xb1,0xae,0x54,0x5b,0xd4,0x45,0x15,0xe3,0x1b,0xc4, + 0xf1,0x51,0x57,0x2e,0xae,0xcf,0x6,0x89,0xb8,0xbd,0x9,0x41,0x7b,0xf3,0xd8,0x79, + 0xea,0xa9,0xa7,0xbc,0x53,0x74,0x3b,0xe,0x80,0xd2,0xde,0xde,0xbe,0x78,0x1e,0x49, + 0x7b,0xed,0xb5,0xd7,0x7c,0xa0,0x9c,0x53,0x47,0xe1,0x98,0x6b,0x71,0x2,0xf9,0x6d, + 0xe4,0x97,0x58,0x17,0x9,0xa2,0x2d,0x8e,0x9f,0x7d,0xf6,0xd9,0xab,0xea,0x62,0xfd, + 0x6a,0x10,0x74,0x5d,0xc9,0xea,0xcb,0x3f,0xfa,0x4e,0xa2,0x76,0xfb,0xed,0x9f,0xf2, + 0x8c,0xf,0xaa,0xc5,0x7f,0xe8,0x45,0x55,0x0,0xc7,0x94,0x28,0xfe,0xf9,0xc7,0xa8, + 0xe,0xe2,0x1e,0xef,0x5,0x51,0x5,0xa2,0x6a,0x96,0x8b,0xa8,0x86,0xb4,0x9f,0x8f, + 0xeb,0xb1,0x31,0x2b,0x22,0x21,0x6a,0x65,0xfc,0x7a,0xff,0xa2,0x7a,0xe5,0x4b,0x4f, + 0x4,0xab,0x96,0xaf,0x52,0x94,0xb8,0x5a,0x71,0x45,0xf3,0x91,0x2f,0x11,0x14,0xa4, + 0x30,0x3e,0x43,0x29,0x7c,0xa6,0x54,0x5d,0x94,0x5c,0xa,0x52,0x4b,0x5b,0xe0,0x2f, + 0x28,0x41,0x27,0xed,0xc7,0xff,0xf2,0x6c,0x72,0x7c,0xb5,0xf4,0x44,0xb0,0x6a,0x4, + 0x83,0x7c,0x53,0xf2,0xd,0x76,0xe1,0x8a,0xbe,0xfe,0xfa,0xeb,0xd7,0xac,0xfa,0xcf, + 0x7e,0xf6,0x33,0x2f,0xd7,0xb,0x8c,0x72,0xbe,0x34,0x2,0xda,0xb9,0x21,0x83,0x5c, + 0x4,0xe5,0x11,0xf4,0xf2,0x8f,0xec,0x3b,0xd1,0xa5,0xed,0x7f,0xd4,0xbe,0x92,0x1c, + 0x46,0x30,0x61,0x6,0xc4,0xa4,0x51,0x97,0x78,0xc,0x18,0x3c,0xe7,0xf9,0x93,0x90, + 0xcd,0x48,0x8e,0x2,0x9e,0x7e,0xfa,0x69,0xff,0xc6,0x5,0x47,0x3c,0xf2,0xc8,0x23, + 0xb6,0x67,0xcf,0x9e,0xc5,0xc2,0x79,0x31,0x14,0x92,0xfa,0xed,0x6f,0x7f,0xdb,0xbf, + 0xa3,0x37,0x3,0x8c,0xe9,0x86,0x91,0x48,0x52,0x49,0xfc,0x7a,0xff,0xf2,0x9e,0xb, + 0x14,0xaa,0x4b,0xb1,0x52,0x28,0xe6,0xa8,0x42,0x7c,0x8e,0x6b,0x18,0xea,0x7c,0xc3, + 0x4d,0x5d,0x61,0x89,0x75,0x51,0xc5,0xe2,0xfd,0xd1,0x19,0xc4,0x3a,0xfa,0xe2,0x3b, + 0x3e,0x43,0xfb,0xe0,0x46,0x54,0xac,0xc,0x82,0x7e,0x9d,0xdb,0x9f,0xd8,0x1e,0xdb, + 0xfb,0x4c,0xae,0x8,0x3f,0x3e,0xd0,0x27,0x9e,0x78,0xc2,0x3b,0xc7,0xe,0x31,0xc0, + 0x68,0x8f,0xb8,0xce,0x79,0x1c,0x64,0x1c,0x34,0xd7,0xa,0x27,0x50,0xca,0xce,0x14, + 0xd6,0x11,0x31,0x47,0x62,0x68,0xab,0xd8,0x73,0xd1,0x36,0xbd,0xfd,0xf6,0xdb,0x7e, + 0x7e,0x53,0x8,0xea,0x7e,0x66,0x29,0xf6,0x29,0x66,0x9c,0x23,0x62,0xe7,0x90,0x5, + 0xe2,0xe4,0xb,0x27,0x8a,0x1,0x65,0xe0,0x5c,0xff,0x30,0x4,0x81,0xd8,0x16,0x64, + 0x15,0xd6,0x41,0xa,0xe7,0xd4,0x47,0xdc,0x8,0x41,0x2b,0xda,0xa0,0xee,0x23,0xd1, + 0xf8,0xec,0xb5,0x27,0xbe,0x76,0xad,0x71,0x8e,0x88,0x36,0x27,0x5f,0xdf,0xa3,0xc1, + 0xce,0xc7,0xf7,0xbf,0xff,0x7d,0x7b,0xe5,0x95,0x57,0xae,0xb9,0x5e,0xc,0x84,0x6, + 0xb1,0x14,0xc3,0x4f,0x7e,0xf2,0x13,0xeb,0xee,0xee,0x2e,0xda,0x56,0xb4,0x41,0xf7, + 0xdc,0x73,0x8f,0x7f,0x17,0x3,0xb6,0x2d,0xdf,0x56,0x15,0xc3,0xa,0x4,0xbd,0x6c, + 0xbf,0x5c,0xb4,0xa7,0xb7,0xdb,0xce,0xe5,0xf9,0x59,0x4,0x83,0x65,0x42,0xd1,0x60, + 0x17,0x82,0xfa,0x72,0x8c,0x26,0x39,0x5d,0x61,0x29,0x17,0x38,0x85,0xe8,0xc5,0xf6, + 0xef,0x97,0x81,0x28,0x0,0xe3,0xc3,0x69,0x30,0x46,0x1c,0xc3,0x72,0xb,0xe0,0x48, + 0x24,0xa9,0x38,0xf2,0x22,0xe7,0xe5,0xec,0x4f,0x3e,0xf2,0xd5,0xa2,0x50,0x45,0x8a, + 0x21,0xda,0x88,0x62,0x2a,0x86,0x5d,0x29,0x2c,0xb1,0xae,0xb0,0xed,0xfc,0xe7,0x88, + 0xaa,0xa3,0x6d,0xc2,0xfe,0xe5,0x23,0xaa,0x5d,0x7e,0xc1,0x56,0x96,0xc2,0x47,0xb6, + 0x1f,0xc4,0xaa,0x45,0xa9,0x88,0xd9,0x7e,0xfe,0x35,0x7e,0xcd,0x96,0xaf,0x3a,0xa5, + 0xea,0x0,0xea,0x2,0x50,0x61,0x24,0x43,0x69,0x88,0xb7,0x5b,0x78,0x1f,0x2a,0x95, + 0x2f,0x31,0xf4,0x9b,0x9f,0x38,0x17,0xe2,0x23,0xdd,0x30,0x8b,0x3,0x2d,0x24,0x2, + 0x14,0x4e,0xc,0x94,0xaa,0xbb,0x59,0xf8,0x48,0x9,0xfa,0xf8,0xc3,0xec,0xff,0x0, + 0x70,0xf9,0xd2,0xa7,0xe2,0xb8,0xb5,0xce,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44, + 0xae,0x42,0x60,0x82, + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/cam8.png + 0x0,0x0,0x23,0x7, + 0x89, + 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, + 0x0,0x0,0x48,0x0,0x0,0x0,0x48,0x8,0x6,0x0,0x0,0x0,0x55,0xed,0xb3,0x47, + 0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8e,0x7c,0xfb,0x51,0x93, + 0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x87,0xf,0x0,0x0,0x8c,0xf, + 0x0,0x0,0xfd,0x52,0x0,0x0,0x81,0x40,0x0,0x0,0x7d,0x79,0x0,0x0,0xe9,0x8b, + 0x0,0x0,0x3c,0xe5,0x0,0x0,0x19,0xcc,0x73,0x3c,0x85,0x77,0x0,0x0,0xa,0x39, + 0x69,0x43,0x43,0x50,0x50,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x49,0x43, + 0x43,0x20,0x70,0x72,0x6f,0x66,0x69,0x6c,0x65,0x0,0x0,0x48,0xc7,0x9d,0x96,0x77, + 0x54,0x54,0xd7,0x16,0x87,0xcf,0xbd,0x77,0x7a,0xa1,0xcd,0x30,0xd2,0x19,0x7a,0x93, + 0x2e,0x30,0x80,0xf4,0x2e,0x20,0x1d,0x4,0x51,0x18,0x66,0x6,0x18,0xca,0x0,0xc3, + 0xc,0x4d,0x6c,0x88,0xa8,0x40,0x44,0x11,0x11,0x1,0x45,0x90,0xa0,0x80,0x1,0xa3, + 0xa1,0x48,0xac,0x88,0x62,0x21,0x28,0xa8,0x60,0xf,0x48,0x10,0x50,0x62,0x30,0x8a, + 0xa8,0xa8,0x64,0x46,0xd6,0x4a,0x7c,0x79,0x79,0xef,0xe5,0xe5,0xf7,0xc7,0xbd,0xdf, + 0xda,0x67,0xef,0x73,0xf7,0xd9,0x7b,0x9f,0xb5,0x2e,0x0,0x24,0x4f,0x1f,0x2e,0x2f, + 0x5,0x96,0x2,0x20,0x99,0x27,0xe0,0x7,0x7a,0x38,0xd3,0x57,0x85,0x47,0xd0,0xb1, + 0xfd,0x0,0x6,0x78,0x80,0x1,0xa6,0x0,0x30,0x59,0xe9,0xa9,0xbe,0x41,0xee,0xc1, + 0x40,0x24,0x2f,0x37,0x17,0x7a,0xba,0xc8,0x9,0xfc,0x8b,0xde,0xc,0x1,0x48,0xfc, + 0xbe,0x65,0xe8,0xe9,0x4f,0xa7,0x83,0xff,0x4f,0xd2,0xac,0x54,0xbe,0x0,0x0,0xc8, + 0x5f,0xc4,0xe6,0x6c,0x4e,0x3a,0x4b,0xc4,0xf9,0x22,0x4e,0xca,0x14,0xa4,0x8a,0xed, + 0x33,0x22,0xa6,0xc6,0x24,0x8a,0x19,0x46,0x89,0x99,0x2f,0x4a,0x50,0xc4,0x72,0x62, + 0x8e,0x5b,0xe4,0xa5,0x9f,0x7d,0x16,0xd9,0x51,0xcc,0xec,0x64,0x1e,0x5b,0xc4,0xe2, + 0x9c,0x53,0xd9,0xc9,0x6c,0x31,0xf7,0x88,0x78,0x7b,0x86,0x90,0x23,0x62,0xc4,0x47, + 0xc4,0x5,0x19,0x5c,0x4e,0xa6,0x88,0x6f,0x8b,0x58,0x33,0x49,0x98,0xcc,0x15,0xf1, + 0x5b,0x71,0x6c,0x32,0x87,0x99,0xe,0x0,0x8a,0x24,0xb6,0xb,0x38,0xac,0x78,0x11, + 0x9b,0x88,0x98,0xc4,0xf,0xe,0x74,0x11,0xf1,0x72,0x0,0x70,0xa4,0xb8,0x2f,0x38, + 0xe6,0xb,0x16,0x70,0xb2,0x4,0xe2,0x43,0xb9,0xa4,0xa4,0x66,0xf3,0xb9,0x71,0xf1, + 0x2,0xba,0x2e,0x4b,0x8f,0x6e,0x6a,0x6d,0xcd,0xa0,0x7b,0x72,0x32,0x93,0x38,0x2, + 0x81,0xa1,0x3f,0x93,0x95,0xc8,0xe4,0xb3,0xe9,0x2e,0x29,0xc9,0xa9,0x4c,0x5e,0x36, + 0x0,0x8b,0x67,0xfe,0x2c,0x19,0x71,0x6d,0xe9,0xa2,0x22,0x5b,0x9a,0x5a,0x5b,0x5a, + 0x1a,0x9a,0x19,0x99,0x7e,0x51,0xa8,0xff,0xba,0xf8,0x37,0x25,0xee,0xed,0x22,0xbd, + 0xa,0xf8,0xdc,0x33,0x88,0xd6,0xf7,0x87,0xed,0xaf,0xfc,0x52,0xea,0x0,0x60,0xcc, + 0x8a,0x6a,0xb3,0xeb,0xf,0x5b,0xcc,0x7e,0x0,0x3a,0xb6,0x2,0x20,0x77,0xff,0xf, + 0x9b,0xe6,0x21,0x0,0x24,0x45,0x7d,0x6b,0xbf,0xf1,0xc5,0x79,0x68,0xe2,0x79,0x89, + 0x17,0x8,0x52,0x6d,0x8c,0x8d,0x33,0x33,0x33,0x8d,0xb8,0x1c,0x96,0x91,0xb8,0xa0, + 0xbf,0xeb,0x7f,0x3a,0xfc,0xd,0x7d,0xf1,0x3d,0x23,0xf1,0x76,0xbf,0x97,0x87,0xee, + 0xca,0x89,0x65,0xa,0x93,0x4,0x74,0x71,0xdd,0x58,0x29,0x49,0x29,0x42,0x3e,0x3d, + 0x3d,0x95,0xc9,0xe2,0xd0,0xd,0xff,0x3c,0xc4,0xff,0x38,0xf0,0xaf,0xf3,0x58,0x1a, + 0xc8,0x89,0xe5,0xf0,0x39,0x3c,0x51,0x44,0xa8,0x68,0xca,0xb8,0xbc,0x38,0x51,0xbb, + 0x79,0x6c,0xae,0x80,0x9b,0xc2,0xa3,0x73,0x79,0xff,0xa9,0x89,0xff,0x30,0xec,0x4f, + 0x5a,0x9c,0x6b,0x91,0x28,0xf5,0x9f,0x0,0x35,0xca,0x8,0x48,0xdd,0xa0,0x2,0xe4, + 0xe7,0x3e,0x80,0xa2,0x10,0x1,0x12,0x79,0x50,0xdc,0xf5,0xdf,0xfb,0xe6,0x83,0xf, + 0x5,0xe2,0x9b,0x17,0xa6,0x3a,0xb1,0x38,0xf7,0x9f,0x5,0xfd,0xfb,0xae,0x70,0x89, + 0xf8,0x91,0xce,0x8d,0xfb,0x1c,0xe7,0x12,0x18,0x4c,0x67,0x9,0xf9,0x19,0x8b,0x6b, + 0xe2,0x6b,0x9,0xd0,0x80,0x0,0x24,0x1,0x15,0xc8,0x3,0x15,0xa0,0x1,0x74,0x81, + 0x21,0x30,0x3,0x56,0xc0,0x16,0x38,0x2,0x37,0xb0,0x2,0xf8,0x81,0x60,0x10,0xe, + 0xd6,0x2,0x16,0x88,0x7,0xc9,0x80,0xf,0x32,0x41,0x2e,0xd8,0xc,0xa,0x40,0x11, + 0xd8,0x5,0xf6,0x82,0x4a,0x50,0x3,0xea,0x41,0x23,0x68,0x1,0x27,0x40,0x7,0x38, + 0xd,0x2e,0x80,0xcb,0xe0,0x3a,0xb8,0x9,0xee,0x80,0x7,0x60,0x4,0x8c,0x83,0xe7, + 0x60,0x6,0xbc,0x1,0xf3,0x10,0x4,0x61,0x21,0x32,0x44,0x81,0xe4,0x21,0x55,0x48, + 0xb,0x32,0x80,0xcc,0x20,0x6,0x64,0xf,0xb9,0x41,0x3e,0x50,0x20,0x14,0xe,0x45, + 0x43,0x71,0x10,0xf,0x12,0x42,0xb9,0xd0,0x16,0xa8,0x8,0x2a,0x85,0x2a,0xa1,0x5a, + 0xa8,0x11,0xfa,0x16,0x3a,0x5,0x5d,0x80,0xae,0x42,0x3,0xd0,0x3d,0x68,0x14,0x9a, + 0x82,0x7e,0x85,0xde,0xc3,0x8,0x4c,0x82,0xa9,0xb0,0x32,0xac,0xd,0x1b,0xc3,0xc, + 0xd8,0x9,0xf6,0x86,0x83,0xe1,0x35,0x70,0x1c,0x9c,0x6,0xe7,0xc0,0xf9,0xf0,0x4e, + 0xb8,0x2,0xae,0x83,0x8f,0xc1,0xed,0xf0,0x5,0xf8,0x3a,0x7c,0x7,0x1e,0x81,0x9f, + 0xc3,0xb3,0x8,0x40,0x88,0x8,0xd,0x51,0x43,0xc,0x11,0x6,0xe2,0x82,0xf8,0x21, + 0x11,0x48,0x2c,0xc2,0x47,0x36,0x20,0x85,0x48,0x39,0x52,0x87,0xb4,0x20,0x5d,0x48, + 0x2f,0x72,0xb,0x19,0x41,0xa6,0x91,0x77,0x28,0xc,0x8a,0x82,0xa2,0xa3,0xc,0x51, + 0xb6,0x28,0x4f,0x54,0x8,0x8a,0x85,0x4a,0x43,0x6d,0x40,0x15,0xa3,0x2a,0x51,0x47, + 0x51,0xed,0xa8,0x1e,0xd4,0x2d,0xd4,0x28,0x6a,0x6,0xf5,0x9,0x4d,0x46,0x2b,0xa1, + 0xd,0xd0,0x36,0x68,0x2f,0xf4,0x2a,0x74,0x1c,0x3a,0x13,0x5d,0x80,0x2e,0x47,0x37, + 0xa0,0xdb,0xd0,0x97,0xd0,0x77,0xd0,0xe3,0xe8,0x37,0x18,0xc,0x86,0x86,0xd1,0xc1, + 0x58,0x61,0x3c,0x31,0xe1,0x98,0x4,0xcc,0x3a,0x4c,0x31,0xe6,0x0,0xa6,0x15,0x73, + 0x1e,0x33,0x80,0x19,0xc3,0xcc,0x62,0xb1,0x58,0x79,0xac,0x1,0xd6,0xe,0xeb,0x87, + 0x65,0x62,0x5,0xd8,0x2,0xec,0x7e,0xec,0x31,0xec,0x39,0xec,0x20,0x76,0x1c,0xfb, + 0x16,0x47,0xc4,0xa9,0xe2,0xcc,0x70,0xee,0xb8,0x8,0x1c,0xf,0x97,0x87,0x2b,0xc7, + 0x35,0xe1,0xce,0xe2,0x6,0x71,0x13,0xb8,0x79,0xbc,0x14,0x5e,0xb,0x6f,0x83,0xf7, + 0xc3,0xb3,0xf1,0xd9,0xf8,0x12,0x7c,0x3d,0xbe,0xb,0x7f,0x3,0x3f,0x8e,0x9f,0x27, + 0x48,0x13,0x74,0x8,0x76,0x84,0x60,0x42,0x2,0x61,0x33,0xa1,0x82,0xd0,0x42,0xb8, + 0x44,0x78,0x48,0x78,0x45,0x24,0x12,0xd5,0x89,0xd6,0xc4,0x0,0x22,0x97,0xb8,0x89, + 0x58,0x41,0x3c,0x4e,0xbc,0x42,0x1c,0x25,0xbe,0x23,0xc9,0x90,0xf4,0x49,0x2e,0xa4, + 0x48,0x92,0x90,0xb4,0x93,0x74,0x84,0x74,0x9e,0x74,0x8f,0xf4,0x8a,0x4c,0x26,0x6b, + 0x93,0x1d,0xc9,0x11,0x64,0x1,0x79,0x27,0xb9,0x91,0x7c,0x91,0xfc,0x98,0xfc,0x56, + 0x82,0x22,0x61,0x24,0xe1,0x25,0xc1,0x96,0xd8,0x28,0x51,0x25,0xd1,0x2e,0x31,0x28, + 0xf1,0x42,0x12,0x2f,0xa9,0x25,0xe9,0x24,0xb9,0x56,0x32,0x47,0xb2,0x5c,0xf2,0xa4, + 0xe4,0xd,0xc9,0x69,0x29,0xbc,0x94,0xb6,0x94,0x8b,0x14,0x53,0x6a,0x83,0x54,0x95, + 0xd4,0x29,0xa9,0x61,0xa9,0x59,0x69,0x8a,0xb4,0xa9,0xb4,0x9f,0x74,0xb2,0x74,0xb1, + 0x74,0x93,0xf4,0x55,0xe9,0x49,0x19,0xac,0x8c,0xb6,0x8c,0x9b,0xc,0x5b,0x26,0x5f, + 0xe6,0xb0,0xcc,0x45,0x99,0x31,0xa,0x42,0xd1,0xa0,0xb8,0x50,0x58,0x94,0x2d,0x94, + 0x7a,0xca,0x25,0xca,0x38,0x15,0x43,0xd5,0xa1,0x7a,0x51,0x13,0xa8,0x45,0xd4,0x6f, + 0xa8,0xfd,0xd4,0x19,0x59,0x19,0xd9,0x65,0xb2,0xa1,0xb2,0x59,0xb2,0x55,0xb2,0x67, + 0x64,0x47,0x68,0x8,0x4d,0x9b,0xe6,0x45,0x4b,0xa2,0x95,0xd0,0x4e,0xd0,0x86,0x68, + 0xef,0x97,0x28,0x2f,0x71,0x5a,0xc2,0x59,0xb2,0x63,0x49,0xcb,0x92,0xc1,0x25,0x73, + 0x72,0x8a,0x72,0x8e,0x72,0x1c,0xb9,0x42,0xb9,0x56,0xb9,0x3b,0x72,0xef,0xe5,0xe9, + 0xf2,0x6e,0xf2,0x89,0xf2,0xbb,0xe5,0x3b,0xe4,0x1f,0x29,0xa0,0x14,0xf4,0x15,0x2, + 0x14,0x32,0x15,0xe,0x2a,0x5c,0x52,0x98,0x56,0xa4,0x2a,0xda,0x2a,0xb2,0x14,0xb, + 0x15,0x4f,0x28,0xde,0x57,0x82,0x95,0xf4,0x95,0x2,0x95,0xd6,0x29,0x1d,0x56,0xea, + 0x53,0x9a,0x55,0x56,0x51,0xf6,0x50,0x4e,0x55,0xde,0xaf,0x7c,0x51,0x79,0x5a,0x85, + 0xa6,0xe2,0xa8,0x92,0xa0,0x52,0xa6,0x72,0x56,0x65,0x4a,0x95,0xa2,0x6a,0xaf,0xca, + 0x55,0x2d,0x53,0x3d,0xa7,0xfa,0x8c,0x2e,0x4b,0x77,0xa2,0x27,0xd1,0x2b,0xe8,0x3d, + 0xf4,0x19,0x35,0x25,0x35,0x4f,0x35,0xa1,0x5a,0xad,0x5a,0xbf,0xda,0xbc,0xba,0x8e, + 0x7a,0x88,0x7a,0x9e,0x7a,0xab,0xfa,0x23,0xd,0x82,0x6,0x43,0x23,0x56,0xa3,0x4c, + 0xa3,0x5b,0x63,0x46,0x53,0x55,0xd3,0x57,0x33,0x57,0xb3,0x59,0xf3,0xbe,0x16,0x5e, + 0x8b,0xa1,0x15,0xaf,0xb5,0x4f,0xab,0x57,0x6b,0x4e,0x5b,0x47,0x3b,0x4c,0x7b,0x9b, + 0x76,0x87,0xf6,0xa4,0x8e,0x9c,0x8e,0x97,0x4e,0x8e,0x4e,0xb3,0xce,0x43,0x5d,0xb2, + 0xae,0x83,0x6e,0x9a,0x6e,0x9d,0xee,0x6d,0x3d,0x8c,0x1e,0x43,0x2f,0x51,0xef,0x80, + 0xde,0x4d,0x7d,0x58,0xdf,0x42,0x3f,0x5e,0xbf,0x4a,0xff,0x86,0x1,0x6c,0x60,0x69, + 0xc0,0x35,0x38,0x60,0x30,0xb0,0x14,0xbd,0xd4,0x7a,0x29,0x6f,0x69,0xdd,0xd2,0x61, + 0x43,0x92,0xa1,0x93,0x61,0x86,0x61,0xb3,0xe1,0xa8,0x11,0xcd,0xc8,0xc7,0x28,0xcf, + 0xa8,0xc3,0xe8,0x85,0xb1,0xa6,0x71,0x84,0xf1,0x6e,0xe3,0x5e,0xe3,0x4f,0x26,0x16, + 0x26,0x49,0x26,0xf5,0x26,0xf,0x4c,0x65,0x4c,0x57,0x98,0xe6,0x99,0x76,0x99,0xfe, + 0x6a,0xa6,0x6f,0xc6,0x32,0xab,0x32,0xbb,0x6d,0x4e,0x36,0x77,0x37,0xdf,0x68,0xde, + 0x69,0xfe,0x72,0x99,0xc1,0x32,0xce,0xb2,0x83,0xcb,0xee,0x5a,0x50,0x2c,0x7c,0x2d, + 0xb6,0x59,0x74,0x5b,0x7c,0xb4,0xb4,0xb2,0xe4,0x5b,0xb6,0x58,0x4e,0x59,0x69,0x5a, + 0x45,0x5b,0x55,0x5b,0xd,0x33,0xa8,0xc,0x7f,0x46,0x31,0xe3,0x8a,0x35,0xda,0xda, + 0xd9,0x7a,0xa3,0xf5,0x69,0xeb,0x77,0x36,0x96,0x36,0x2,0x9b,0x13,0x36,0xbf,0xd8, + 0x1a,0xda,0x26,0xda,0x36,0xd9,0x4e,0x2e,0xd7,0x59,0xce,0x59,0x5e,0xbf,0x7c,0xcc, + 0x4e,0xdd,0x8e,0x69,0x57,0x6b,0x37,0x62,0x4f,0xb7,0x8f,0xb6,0x3f,0x64,0x3f,0xe2, + 0xa0,0xe6,0xc0,0x74,0xa8,0x73,0x78,0xe2,0xa8,0xe1,0xc8,0x76,0x6c,0x70,0x9c,0x70, + 0xd2,0x73,0x4a,0x70,0x3a,0xe6,0xf4,0xc2,0xd9,0xc4,0x99,0xef,0xdc,0xe6,0x3c,0xe7, + 0x62,0xe3,0xb2,0xde,0xe5,0xbc,0x2b,0xe2,0xea,0xe1,0x5a,0xe8,0xda,0xef,0x26,0xe3, + 0x16,0xe2,0x56,0xe9,0xf6,0xd8,0x5d,0xdd,0x3d,0xce,0xbd,0xd9,0x7d,0xc6,0xc3,0xc2, + 0x63,0x9d,0xc7,0x79,0x4f,0xb4,0xa7,0xb7,0xe7,0x6e,0xcf,0x61,0x2f,0x65,0x2f,0x96, + 0x57,0xa3,0xd7,0xcc,0xa,0xab,0x15,0xeb,0x57,0xf4,0x78,0x93,0xbc,0x83,0xbc,0x2b, + 0xbd,0x9f,0xf8,0xe8,0xfb,0xf0,0x7d,0xba,0x7c,0x61,0xdf,0x15,0xbe,0x7b,0x7c,0x1f, + 0xae,0xd4,0x5a,0xc9,0x5b,0xd9,0xe1,0x7,0xfc,0xbc,0xfc,0xf6,0xf8,0x3d,0xf2,0xd7, + 0xf1,0x4f,0xf3,0xff,0x3e,0x0,0x13,0xe0,0x1f,0x50,0x15,0xf0,0x34,0xd0,0x34,0x30, + 0x37,0xb0,0x37,0x88,0x12,0x14,0x15,0xd4,0x14,0xf4,0x26,0xd8,0x39,0xb8,0x24,0xf8, + 0x41,0x88,0x6e,0x88,0x30,0xa4,0x3b,0x54,0x32,0x34,0x32,0xb4,0x31,0x74,0x2e,0xcc, + 0x35,0xac,0x34,0x6c,0x64,0x95,0xf1,0xaa,0xf5,0xab,0xae,0x87,0x2b,0x84,0x73,0xc3, + 0x3b,0x23,0xb0,0x11,0xa1,0x11,0xd,0x11,0xb3,0xab,0xdd,0x56,0xef,0x5d,0x3d,0x1e, + 0x69,0x11,0x59,0x10,0x39,0xb4,0x46,0x67,0x4d,0xd6,0x9a,0xab,0x6b,0x15,0xd6,0x26, + 0xad,0x3d,0x13,0x25,0x19,0xc5,0x8c,0x3a,0x19,0x8d,0x8e,0xe,0x8b,0x6e,0x8a,0xfe, + 0xc0,0xf4,0x63,0xd6,0x31,0x67,0x63,0xbc,0x62,0xaa,0x63,0x66,0x58,0x2e,0xac,0x7d, + 0xac,0xe7,0x6c,0x47,0x76,0x19,0x7b,0x8a,0x63,0xc7,0x29,0xe5,0x4c,0xc4,0xda,0xc5, + 0x96,0xc6,0x4e,0xc6,0xd9,0xc5,0xed,0x89,0x9b,0x8a,0x77,0x88,0x2f,0x8f,0x9f,0xe6, + 0xba,0x70,0x2b,0xb9,0x2f,0x13,0x3c,0x13,0x6a,0x12,0xe6,0x12,0xfd,0x12,0x8f,0x24, + 0x2e,0x24,0x85,0x25,0xb5,0x26,0xe3,0x92,0xa3,0x93,0x4f,0xf1,0x64,0x78,0x89,0xbc, + 0x9e,0x14,0x95,0x94,0xac,0x94,0x81,0x54,0x83,0xd4,0x82,0xd4,0x91,0x34,0x9b,0xb4, + 0xbd,0x69,0x33,0x7c,0x6f,0x7e,0x43,0x3a,0x94,0xbe,0x26,0xbd,0x53,0x40,0x15,0xfd, + 0x4c,0xf5,0x9,0x75,0x85,0x5b,0x85,0xa3,0x19,0xf6,0x19,0x55,0x19,0x6f,0x33,0x43, + 0x33,0x4f,0x66,0x49,0x67,0xf1,0xb2,0xfa,0xb2,0xf5,0xb3,0x77,0x64,0x4f,0xe4,0xb8, + 0xe7,0x7c,0xbd,0xe,0xb5,0x8e,0xb5,0xae,0x3b,0x57,0x2d,0x77,0x73,0xee,0xe8,0x7a, + 0xa7,0xf5,0xb5,0x1b,0xa0,0xd,0x31,0x1b,0xba,0x37,0x6a,0x6c,0xcc,0xdf,0x38,0xbe, + 0xc9,0x63,0xd3,0xd1,0xcd,0x84,0xcd,0x89,0x9b,0x7f,0xc8,0x33,0xc9,0x2b,0xcd,0x7b, + 0xbd,0x25,0x6c,0x4b,0x57,0xbe,0x72,0xfe,0xa6,0xfc,0xb1,0xad,0x1e,0x5b,0x9b,0xb, + 0x24,0xa,0xf8,0x5,0xc3,0xdb,0x6c,0xb7,0xd5,0x6c,0x47,0x6d,0xe7,0x6e,0xef,0xdf, + 0x61,0xbe,0x63,0xff,0x8e,0x4f,0x85,0xec,0xc2,0x6b,0x45,0x26,0x45,0xe5,0x45,0x1f, + 0x8a,0x59,0xc5,0xd7,0xbe,0x32,0xfd,0xaa,0xe2,0xab,0x85,0x9d,0xb1,0x3b,0xfb,0x4b, + 0x2c,0x4b,0xe,0xee,0xc2,0xec,0xe2,0xed,0x1a,0xda,0xed,0xb0,0xfb,0x68,0xa9,0x74, + 0x69,0x4e,0xe9,0xd8,0x1e,0xdf,0x3d,0xed,0x65,0xf4,0xb2,0xc2,0xb2,0xd7,0x7b,0xa3, + 0xf6,0x5e,0x2d,0x5f,0x56,0x5e,0xb3,0x8f,0xb0,0x4f,0xb8,0x6f,0xa4,0xc2,0xa7,0xa2, + 0x73,0xbf,0xe6,0xfe,0x5d,0xfb,0x3f,0x54,0xc6,0x57,0xde,0xa9,0x72,0xae,0x6a,0xad, + 0x56,0xaa,0xde,0x51,0x3d,0x77,0x80,0x7d,0x60,0xf0,0xa0,0xe3,0xc1,0x96,0x1a,0xe5, + 0x9a,0xa2,0x9a,0xf7,0x87,0xb8,0x87,0xee,0xd6,0x7a,0xd4,0xb6,0xd7,0x69,0xd7,0x95, + 0x1f,0xc6,0x1c,0xce,0x38,0xfc,0xb4,0x3e,0xb4,0xbe,0xf7,0x6b,0xc6,0xd7,0x8d,0xd, + 0xa,0xd,0x45,0xd,0x1f,0x8f,0xf0,0x8e,0x8c,0x1c,0xd,0x3c,0xda,0xd3,0x68,0xd5, + 0xd8,0xd8,0xa4,0xd4,0x54,0xd2,0xc,0x37,0xb,0x9b,0xa7,0x8e,0x45,0x1e,0xbb,0xf9, + 0x8d,0xeb,0x37,0x9d,0x2d,0x86,0x2d,0xb5,0xad,0xb4,0xd6,0xa2,0xe3,0xe0,0xb8,0xf0, + 0xf8,0xb3,0x6f,0xa3,0xbf,0x1d,0x3a,0xe1,0x7d,0xa2,0xfb,0x24,0xe3,0x64,0xcb,0x77, + 0x5a,0xdf,0x55,0xb7,0x51,0xda,0xa,0xdb,0xa1,0xf6,0xec,0xf6,0x99,0x8e,0xf8,0x8e, + 0x91,0xce,0xf0,0xce,0x81,0x53,0x2b,0x4e,0x75,0x77,0xd9,0x76,0xb5,0x7d,0x6f,0xf4, + 0xfd,0x91,0xd3,0x6a,0xa7,0xab,0xce,0xc8,0x9e,0x29,0x39,0x4b,0x38,0x9b,0x7f,0x76, + 0xe1,0x5c,0xce,0xb9,0xd9,0xf3,0xa9,0xe7,0xa7,0x2f,0xc4,0x5d,0x18,0xeb,0x8e,0xea, + 0x7e,0x70,0x71,0xd5,0xc5,0xdb,0x3d,0x1,0x3d,0xfd,0x97,0xbc,0x2f,0x5d,0xb9,0xec, + 0x7e,0xf9,0x62,0xaf,0x53,0xef,0xb9,0x2b,0x76,0x57,0x4e,0x5f,0xb5,0xb9,0x7a,0xea, + 0x1a,0xe3,0x5a,0xc7,0x75,0xcb,0xeb,0xed,0x7d,0x16,0x7d,0x6d,0x3f,0x58,0xfc,0xd0, + 0xd6,0x6f,0xd9,0xdf,0x7e,0xc3,0xea,0x46,0xe7,0x4d,0xeb,0x9b,0x5d,0x3,0xcb,0x7, + 0xce,0xe,0x3a,0xc,0x5e,0xb8,0xe5,0x7a,0xeb,0xf2,0x6d,0xaf,0xdb,0xd7,0xef,0xac, + 0xbc,0x33,0x30,0x14,0x32,0x74,0x77,0x38,0x72,0x78,0xe4,0x2e,0xfb,0xee,0xe4,0xbd, + 0xa4,0x7b,0x2f,0xef,0x67,0xdc,0x9f,0x7f,0xb0,0xe9,0x21,0xfa,0x61,0xe1,0x23,0xa9, + 0x47,0xe5,0x8f,0x95,0x1e,0xd7,0xfd,0xa8,0xf7,0x63,0xeb,0x88,0xe5,0xc8,0x99,0x51, + 0xd7,0xd1,0xbe,0x27,0x41,0x4f,0x1e,0x8c,0xb1,0xc6,0x9e,0xff,0x94,0xfe,0xd3,0x87, + 0xf1,0xfc,0xa7,0xe4,0xa7,0xe5,0x13,0xaa,0x13,0x8d,0x93,0x66,0x93,0xa7,0xa7,0xdc, + 0xa7,0x6e,0x3e,0x5b,0xfd,0x6c,0xfc,0x79,0xea,0xf3,0xf9,0xe9,0x82,0x9f,0xa5,0x7f, + 0xae,0x7e,0xa1,0xfb,0xe2,0xbb,0x5f,0x1c,0x7f,0xe9,0x9b,0x59,0x35,0x33,0xfe,0x92, + 0xff,0x72,0xe1,0xd7,0xe2,0x57,0xf2,0xaf,0x8e,0xbc,0x5e,0xf6,0xba,0x7b,0xd6,0x7f, + 0xf6,0xf1,0x9b,0xe4,0x37,0xf3,0x73,0x85,0x6f,0xe5,0xdf,0x1e,0x7d,0xc7,0x78,0xd7, + 0xfb,0x3e,0xec,0xfd,0xc4,0x7c,0xe6,0x7,0xec,0x87,0x8a,0x8f,0x7a,0x1f,0xbb,0x3e, + 0x79,0x7f,0x7a,0xb8,0x90,0xbc,0xb0,0xf0,0x1b,0xf7,0x84,0xf3,0xfb,0xe2,0xe6,0x1d, + 0xc2,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0x12,0x74,0x0,0x0,0x12, + 0x74,0x1,0xde,0x66,0x1f,0x78,0x0,0x0,0x18,0x38,0x49,0x44,0x41,0x54,0x78,0x5e, + 0xd5,0x9b,0x5b,0x70,0x5d,0x57,0x79,0xc7,0x3f,0xe9,0x48,0x3a,0x92,0xac,0xbb,0x64, + 0xd9,0xf2,0x2d,0xb6,0xe3,0xd8,0x40,0xae,0x24,0xb1,0x1,0x7b,0x80,0x40,0xea,0xa4, + 0x9,0x3,0xd,0x25,0x4d,0xa7,0x7d,0xe1,0x9,0x87,0x37,0x78,0x81,0x81,0x19,0x1e, + 0xfa,0xd0,0x19,0x6,0x78,0x31,0x6f,0x4c,0x78,0x69,0xfb,0x46,0x93,0x94,0x86,0x4c, + 0x1d,0x52,0x12,0x28,0x1,0xdc,0x4e,0x1c,0x3b,0x89,0x43,0x7c,0x93,0xef,0x57,0x5d, + 0xac,0xfb,0xf5,0x48,0x47,0x3a,0xfd,0xff,0xbe,0xb5,0x97,0x74,0x7c,0x7c,0x74,0x24, + 0x3b,0x52,0x93,0xfe,0xe5,0x75,0xce,0xde,0x6b,0xef,0xbd,0x2e,0xff,0xf5,0x5d,0xd7, + 0x3e,0x2e,0xcb,0x9,0xb6,0xc2,0x18,0x1e,0x1a,0xb2,0x33,0xa7,0x4f,0xdb,0xcc,0xec, + 0xac,0x6d,0xd9,0xba,0xd5,0x5a,0x5a,0x5a,0xac,0xac,0xac,0x2c,0xb9,0xfa,0xd1,0xc6, + 0x8a,0x13,0x74,0xe9,0xc2,0x5,0x3b,0xfe,0xe7,0xf7,0x6d,0x72,0x6a,0xca,0xb2,0xb3, + 0x66,0x13,0x99,0x8c,0xdd,0xb1,0x79,0x93,0xed,0xf9,0xcc,0xa7,0xff,0x5f,0x90,0x54, + 0x9e,0x7c,0x2f,0x3b,0xe0,0xfd,0xec,0xe9,0x4e,0x3b,0x72,0xe8,0x90,0xd,0xd,0x8f, + 0x48,0x7a,0x72,0x36,0xab,0xba,0x59,0x49,0xd1,0x85,0xf3,0x17,0xec,0xdc,0xb9,0xf3, + 0x36,0x39,0x39,0x99,0xdc,0xfd,0xd1,0xc5,0x8a,0x48,0xd0,0xec,0xcc,0x8c,0x9d,0x3a, + 0x79,0xca,0xde,0x79,0xfb,0x1d,0x4b,0x95,0xa7,0x2c,0x55,0x59,0x65,0x74,0x92,0x2b, + 0xd3,0xa7,0xfe,0x41,0x54,0x45,0x2a,0x65,0xed,0x6b,0x56,0xdb,0xea,0xb6,0x36,0x6b, + 0x68,0xa8,0x57,0x69,0xb0,0xda,0xda,0xda,0x8f,0x9c,0x54,0x2d,0x3b,0x41,0xd9,0xec, + 0x8c,0x9d,0x38,0x71,0xdc,0xe,0xbd,0x79,0xd8,0x6a,0x6b,0x6a,0xad,0xb2,0xaa,0xd2, + 0xc9,0x99,0xcd,0x49,0xbf,0x1c,0x65,0x12,0xdb,0x32,0xcb,0xce,0x64,0x6d,0x3a,0x3b, + 0xed,0x84,0xd5,0xd5,0xd5,0x59,0x47,0xc7,0x5a,0x6b,0x6b,0x6b,0xb5,0xe6,0xe6,0x26, + 0x3d,0x53,0x65,0xab,0x44,0x56,0x79,0xf9,0x8a,0x9,0xf8,0x92,0xb1,0xac,0x4,0x65, + 0xb3,0x59,0x7b,0x4f,0xf6,0xe6,0xc8,0xe1,0x23,0x56,0x23,0x72,0xaa,0xab,0xab,0xdd, + 0x30,0x3b,0xb,0x73,0x28,0xa3,0x53,0x49,0x93,0xbe,0x25,0x2c,0xb3,0x33,0xb3,0xfe, + 0xdc,0xcc,0xec,0x8c,0x5f,0xab,0x12,0x39,0x1b,0x37,0xac,0xb7,0xd,0x2a,0xd5,0xd5, + 0x69,0x4b,0xab,0x8d,0xba,0x55,0xab,0x2c,0x25,0x89,0xfb,0x30,0xb0,0x6c,0x4,0x4d, + 0x6b,0x92,0x87,0xf,0x1f,0xb6,0xf7,0xdf,0x3f,0x2e,0x72,0x6a,0xac,0x3a,0x2d,0x72, + 0xa4,0x6a,0xe,0xb4,0x26,0x27,0x42,0xfc,0x4,0x72,0xf8,0xe,0xe7,0xde,0xbd,0xe, + 0x50,0x2d,0x8e,0x91,0x40,0x8,0x9b,0x15,0x61,0xb5,0xb5,0xab,0x6c,0xe3,0xc6,0xd, + 0xd6,0xb1,0x76,0xad,0x35,0xb7,0x34,0xf9,0xfd,0x90,0x5e,0x59,0x59,0x49,0x3,0xff, + 0x27,0x58,0x16,0x82,0xa6,0xa7,0xa7,0xed,0x8d,0x3f,0xfc,0xd1,0xce,0xcb,0x63,0xd5, + 0x56,0xd7,0xba,0x14,0x60,0x8c,0x8b,0x22,0xb0,0x34,0x2f,0x54,0xf1,0x3c,0x1e,0x30, + 0x9c,0x72,0xa4,0xcc,0x44,0xb0,0xa4,0x4b,0xaa,0x88,0x7a,0x56,0xa4,0x2a,0x6c,0x5d, + 0x47,0x87,0x6d,0xde,0xbc,0xd1,0xda,0xdb,0xdb,0xad,0xa2,0xa2,0xc2,0x49,0x45,0xb2, + 0x56,0xd2,0x6e,0x7d,0x60,0x82,0x32,0x99,0x29,0xfb,0xdd,0x7f,0xfd,0xde,0xae,0x5c, + 0xb9,0x22,0x55,0xa8,0x73,0xbb,0xe1,0x4d,0xe6,0x4d,0xdc,0xf,0xe3,0x87,0xf7,0x96, + 0x74,0x99,0xd4,0xc5,0x5b,0x25,0x5b,0xc9,0xd1,0x7c,0x5d,0xbc,0x87,0x36,0x67,0x5c, + 0xb2,0x66,0xad,0x3c,0x55,0x6e,0x6b,0x25,0x55,0x77,0x6e,0xdd,0x62,0xad,0xad,0xad, + 0x92,0xd8,0x6a,0xbf,0xe,0x51,0xcb,0x4d,0xd6,0x7,0x22,0x68,0x62,0x7c,0xc2,0x5e, + 0xfb,0xed,0x6f,0xad,0xab,0xab,0xdb,0x1a,0xea,0x1b,0xc2,0xe0,0x6e,0x18,0x5f,0xde, + 0x44,0xb,0x91,0x5c,0x88,0x77,0xdc,0x44,0x4e,0xb1,0x76,0x92,0xf,0x86,0xc,0x51, + 0x39,0x95,0x54,0x45,0x4a,0x81,0x67,0xb3,0x54,0x71,0xa3,0x6d,0x58,0xbf,0xce,0xa5, + 0x77,0x39,0xed,0xd5,0x6d,0x13,0x34,0x32,0x3a,0x6a,0x6f,0xbc,0xf1,0x7,0xbb,0x76, + 0xad,0xcb,0x6d,0xe,0xcd,0x40,0x50,0x39,0xab,0x28,0x29,0x2a,0x2f,0x43,0xf4,0xb9, + 0x33,0x4c,0x3d,0x90,0xc7,0xc0,0x99,0x2c,0x75,0xaa,0xf5,0x9e,0xf9,0x88,0x43,0xb8, + 0x99,0x9c,0xa4,0x26,0xaf,0x2e,0x1c,0xf0,0x19,0x49,0xe5,0x13,0xcf,0x88,0xc7,0x6c, + 0x54,0xb8,0xb0,0x5e,0x44,0xad,0x5e,0xbd,0xda,0x7a,0xba,0x7b,0xac,0xaf,0xbf,0xdf, + 0x36,0x6e,0xda,0xe0,0xe1,0xc4,0xed,0xd8,0xae,0xdb,0x22,0xa8,0xa7,0xa7,0xc7,0x5e, + 0xff,0xdd,0xef,0x6d,0x70,0x70,0xd0,0x45,0x9c,0x95,0xa4,0x19,0x8a,0xdb,0x1e,0x6f, + 0x52,0x64,0x49,0x15,0x82,0xab,0xe6,0x18,0xc2,0x2,0x41,0x7a,0x40,0xb7,0x44,0x1b, + 0x35,0xdf,0xbd,0x4f,0xbd,0x8,0x11,0xf9,0x75,0x5,0x97,0x85,0x20,0x51,0x4e,0x97, + 0xbe,0xcb,0xca,0xca,0x2d,0x2d,0x29,0x72,0x3b,0x28,0x27,0x51,0x26,0x7b,0x96,0x99, + 0xca,0xd8,0x9a,0x35,0x6b,0xec,0xde,0x7b,0xef,0x51,0xe8,0x51,0x13,0x1e,0x5b,0x22, + 0x6e,0x39,0xd0,0xc0,0xc3,0xbc,0x71,0xf0,0x7f,0xec,0xd8,0x99,0x33,0x56,0xa1,0x41, + 0x54,0x24,0xb1,0x8a,0x4b,0x8f,0x8e,0xf1,0x5e,0x4,0x7c,0xe9,0x74,0xda,0xeb,0x67, + 0xe4,0x95,0xf0,0x66,0x6e,0x3f,0xdc,0xab,0xcd,0xfa,0xbd,0xc,0x9c,0x49,0xfa,0xb1, + 0xff,0x9,0x79,0x93,0xe6,0xb0,0x58,0xdd,0xfc,0x5,0x10,0xea,0xca,0xd5,0x16,0x7d, + 0xa7,0x64,0xc8,0xa9,0xc1,0x2e,0x8e,0x8d,0x8d,0xfa,0xec,0x32,0xd3,0x53,0xd6,0x2f, + 0x29,0x7a,0xf7,0xdd,0xa3,0x76,0xec,0xd8,0xf1,0x84,0xcc,0xa5,0xe3,0x96,0x9,0x3a, + 0xd9,0x79,0xda,0x8e,0x1c,0x3b,0x61,0xd9,0x72,0x89,0xab,0x6,0x34,0x23,0xf,0xe6, + 0x50,0xbf,0x61,0x70,0x19,0x1b,0x56,0x6a,0x31,0x31,0x39,0xa1,0x33,0x6,0xad,0x48, + 0x5a,0x92,0xc4,0xd,0x33,0xb3,0x4,0x87,0x59,0x79,0xa6,0x59,0x79,0xa6,0x30,0xd3, + 0xa0,0x7a,0x7e,0x38,0x7,0x3f,0x9c,0xab,0xa3,0x55,0xfe,0xe6,0xcf,0x63,0x99,0xaf, + 0x3,0x41,0x71,0x21,0x2b,0x9d,0x56,0xa0,0xa9,0xd8,0x9,0xef,0x3a,0xa2,0xb1,0xc0, + 0x9,0x8b,0xf4,0xde,0x7b,0x7f,0xb6,0xeb,0xd7,0xaf,0xdf,0x12,0x49,0xb7,0x44,0x10, + 0x6e,0xf7,0xf7,0x6f,0xfc,0x51,0xaa,0x35,0x6c,0x15,0xc4,0x39,0xaa,0x9b,0xd2,0x20, + 0xe2,0x24,0xe9,0xf6,0xf2,0x95,0xcb,0x76,0xf4,0xbd,0xf7,0xec,0xec,0xd9,0x73,0x36, + 0x36,0x3e,0x2a,0xe,0x2b,0x7c,0x65,0xcb,0xcb,0x29,0xa8,0x99,0xbc,0x9c,0xee,0x8b, + 0x79,0x19,0x12,0x99,0xf3,0x20,0x51,0x40,0x9a,0x74,0xbd,0x60,0xe6,0x4b,0x40,0x50, + 0x33,0x9e,0xa8,0x90,0xd1,0xae,0xa8,0x4c,0x79,0x9e,0x37,0x38,0x38,0xe4,0xb,0x46, + 0x87,0xf4,0x3d,0x3a,0x36,0x66,0x7f,0x92,0xf4,0x67,0x63,0x7c,0xb6,0x4,0x2c,0x99, + 0x20,0x26,0xd3,0xd3,0xdb,0x6b,0x3d,0x5a,0x81,0x55,0x5a,0xa1,0x6a,0x5,0x2a,0x33, + 0x99,0x49,0x9b,0x62,0x82,0x1a,0x80,0xab,0xa,0x3c,0xf1,0x8d,0xfa,0xb0,0x9e,0x5c, + 0x50,0x9,0x83,0x57,0xcc,0xa2,0x41,0x92,0x83,0x21,0x51,0xdc,0xc2,0x8a,0x63,0x8b, + 0x88,0xb6,0x59,0x61,0xa2,0xea,0x68,0xcf,0x0,0x64,0x39,0xf9,0x7e,0x12,0xbe,0x22, + 0xfc,0x34,0xaf,0x8e,0xc3,0xaa,0x8a,0x4a,0x8f,0x8f,0x26,0x27,0x33,0x36,0x30,0x34, + 0xe8,0x12,0xc4,0x95,0x69,0x54,0x5c,0x85,0x76,0x89,0xd5,0x86,0x64,0x3b,0x63,0x1f, + 0x8b,0x61,0xc9,0x46,0x9a,0x95,0xfe,0xf5,0x6f,0x5e,0xb7,0xce,0x33,0x67,0x6d,0x7c, + 0x62,0xc2,0xca,0x35,0xb1,0x1a,0xa5,0x2,0xf5,0x75,0xf5,0x21,0xba,0xd5,0xe0,0x2, + 0x31,0x81,0x4c,0x9a,0x65,0xb0,0x39,0x65,0xf1,0x74,0x30,0x9f,0x57,0xe9,0x9e,0xf0, + 0x2f,0x90,0xa7,0x3f,0xee,0xf,0xc6,0x5d,0xf5,0x5c,0x73,0x92,0x53,0x73,0xcf,0x4, + 0x8e,0xf8,0x80,0xe6,0x64,0xb8,0x5e,0x7,0x38,0xc8,0xc9,0x43,0x55,0xf8,0x18,0x26, + 0x12,0xc9,0x99,0x51,0x80,0x89,0x7a,0x4f,0x4d,0x4b,0xad,0x13,0x33,0x0,0xf9,0xcc, + 0xe3,0xfe,0x7,0xee,0xb5,0xcf,0xee,0xd9,0xe3,0xe3,0x5b,0xc,0x4b,0x96,0x20,0x48, + 0x39,0x7d,0xfa,0xb4,0x8c,0x70,0x5a,0xd1,0xb2,0xc,0xb1,0xbc,0x41,0xba,0x2a,0xed, + 0x13,0x63,0x0,0x9a,0xa2,0x93,0xc1,0xf8,0xe9,0x18,0x97,0xea,0xe7,0x42,0x98,0xb, + 0xc7,0x5c,0x97,0x78,0x3b,0x81,0x2a,0x7e,0x2d,0x44,0xc3,0x78,0x1d,0x8f,0x61,0x34, + 0x49,0x40,0xaa,0x91,0x55,0x32,0x3b,0x4b,0x24,0xed,0xf7,0x23,0x85,0x7a,0x22,0xf0, + 0x94,0x7c,0x4,0x72,0xbc,0x3f,0x95,0xf1,0xf1,0xf1,0x1b,0xc8,0xc9,0xb0,0x7,0x95, + 0x90,0x13,0x1f,0xa1,0xfe,0xf8,0xf1,0x93,0x41,0xf5,0x96,0x80,0x25,0x11,0x84,0x78, + 0x9e,0x3b,0x77,0xce,0x3b,0xa9,0xd2,0x40,0x50,0x13,0x56,0x97,0xc2,0x6a,0x33,0x81, + 0x99,0x69,0x89,0xb0,0xae,0x53,0xdc,0x6b,0x49,0x5d,0x1c,0xba,0x8e,0xbb,0x1f,0x1e, + 0x19,0x55,0x40,0xd9,0xe3,0x6,0x7c,0x6e,0xb4,0x82,0x3f,0xc3,0x7,0x40,0x72,0x54, + 0x2a,0x44,0x12,0xd2,0x40,0x7a,0xc1,0x35,0x3c,0x60,0x56,0xde,0xc8,0x9,0x73,0xd2, + 0xa1,0x35,0xb4,0xc0,0x58,0xd2,0x8a,0x7f,0xc6,0xc7,0xc6,0x6d,0x68,0x78,0xd8,0xc9, + 0x61,0x5c,0x53,0x90,0xa3,0xe7,0x0,0xf7,0x21,0xa9,0xb4,0xcd,0xb5,0x31,0xdd,0xdb, + 0x3f,0x30,0xe0,0xe3,0x5e,0xc,0x4b,0x22,0x28,0x23,0x9d,0x7e,0xf7,0x9d,0xa3,0x3e, + 0x18,0x6,0x59,0xa6,0x86,0x3d,0x20,0xc,0x73,0xf4,0xe1,0x6,0x1d,0x8f,0xc6,0x2f, + 0x99,0x80,0x54,0x8e,0xe0,0x8d,0xc9,0xf6,0xf5,0xf,0x58,0xa7,0xf4,0xff,0x5a,0xef, + 0xf5,0x70,0x8d,0xc1,0xea,0x40,0xf6,0x54,0x13,0x4c,0x39,0x11,0xd8,0xb8,0x43,0x87, + 0xe,0xc9,0x25,0xbf,0x6b,0xbd,0xd7,0x7b,0xfd,0x1e,0xd4,0xb7,0x4a,0x92,0x5a,0x41, + 0x90,0xa7,0x73,0x72,0xb3,0x29,0xd9,0xbe,0x69,0x11,0xc6,0x75,0xda,0x67,0xc2,0xc3, + 0xa,0x5c,0x99,0x30,0x76,0x6e,0x6a,0x6a,0x5a,0xde,0x52,0x31,0x90,0xf7,0x14,0xc8, + 0xc9,0x7,0xb5,0xdd,0xa,0x22,0x97,0xb2,0x61,0xb7,0x24,0x82,0x60,0xfb,0xe2,0xa5, + 0x4b,0xae,0x4a,0x19,0x35,0xca,0xd6,0x4,0x22,0x1f,0xb,0x3,0x85,0xc,0x26,0xc9, + 0x70,0x74,0xea,0x2b,0x85,0x18,0x1f,0x7b,0xff,0x98,0xbd,0x7b,0xf4,0xa8,0x74,0x66, + 0xc6,0xee,0xde,0xbe,0xdd,0xee,0xdc,0xb2,0x19,0xe6,0xfc,0xb9,0x94,0xee,0x4b,0x8b, + 0xa0,0x2a,0x8d,0xa2,0x5c,0x46,0x9f,0xc9,0x8f,0x2a,0x7e,0x19,0x19,0x1d,0xf1,0xbe, + 0xe6,0xa6,0x95,0xb4,0x87,0x64,0xa5,0x2b,0xab,0xe4,0xc6,0x43,0x46,0x3f,0xab,0x5, + 0xc1,0x8d,0x13,0xd5,0xd3,0x37,0x84,0xb8,0xe4,0x68,0xb1,0x2,0x35,0x37,0x93,0x3, + 0x18,0xeb,0xa5,0x8b,0x17,0xe7,0x24,0xac,0x14,0x16,0x25,0x88,0x81,0x9e,0xbb,0x10, + 0xb6,0x47,0x9,0xfa,0x52,0x1a,0x68,0x9d,0x2,0xc1,0x86,0xfa,0x7a,0x37,0xd0,0xbe, + 0x13,0xb8,0x2a,0xec,0xfd,0x30,0x68,0x26,0x52,0x2e,0x2,0xf8,0x46,0x1d,0x6,0x7, + 0x6,0xa5,0x5a,0xd7,0xfc,0xf9,0x5a,0x25,0x95,0x14,0x66,0xc3,0x4,0x88,0x85,0xa6, + 0x66,0x55,0xb2,0xd8,0x98,0x32,0x5b,0xdd,0xda,0x66,0xf,0x3f,0xfc,0xb0,0xdd,0x7f, + 0xff,0x3,0x4a,0x15,0xda,0x7d,0x22,0x64,0xf2,0x2e,0x29,0x90,0x23,0x69,0xc1,0xe, + 0x61,0x47,0x6a,0xd4,0x1f,0x94,0xc,0xe,0xd,0xf9,0x44,0xb9,0xcf,0xd,0xb2,0x4b, + 0x4e,0xc0,0x4d,0xe4,0x24,0xa7,0xa8,0xee,0xb5,0xee,0x6e,0xb7,0x51,0x8b,0x61,0x51, + 0x2f,0x46,0x14,0xfa,0xfc,0xb,0x2f,0x2a,0xe7,0xea,0xb6,0xc6,0xe6,0x66,0x4b,0xd7, + 0xd6,0x78,0xd6,0x5e,0x27,0x23,0x9d,0xd2,0xc0,0x31,0xa6,0x34,0x90,0x2f,0xce,0xf1, + 0x18,0xb5,0x63,0x85,0x33,0xd3,0x19,0xdf,0x40,0x63,0xe3,0xb,0xe2,0xc2,0xe6,0x98, + 0x9e,0x21,0xe6,0x49,0x10,0xa4,0x8e,0x10,0x80,0x68,0x58,0x26,0x5f,0x36,0x6c,0xc6, + 0xc9,0x61,0x15,0xcb,0x6c,0x1c,0xd7,0x3d,0x32,0x6c,0x69,0xb5,0x23,0x4e,0x6d,0x42, + 0xc6,0xd8,0x3d,0xa9,0xda,0x24,0x42,0x67,0x1f,0x29,0x18,0xf3,0xd0,0x56,0x98,0x54, + 0xc1,0xd4,0x92,0x53,0xbc,0xd9,0x94,0x4c,0xc5,0x57,0x9f,0xfa,0x2b,0xdb,0xb4,0x71, + 0x83,0x13,0xbe,0x10,0x4a,0x12,0xc4,0xa5,0xe3,0x27,0x4e,0xda,0x4b,0x2f,0xfd,0x4a, + 0x19,0x73,0xab,0x65,0xd5,0xf3,0x80,0x32,0xf8,0x4a,0xd9,0x84,0xd6,0xe6,0x26,0x6b, + 0x41,0x72,0x92,0x7c,0x8b,0x4d,0x79,0x46,0xc0,0x6a,0xf3,0x5c,0x6e,0x46,0xee,0x5b, + 0x13,0x20,0xdb,0xbe,0x71,0x9c,0xe1,0xc4,0xef,0xe6,0x3e,0x1d,0x4,0x3a,0x75,0xbf, + 0x4a,0xf0,0x84,0xb8,0x7d,0x49,0x8a,0xda,0x25,0x55,0xb8,0xde,0xd7,0x6f,0x57,0x7b, + 0xfb,0x6c,0x42,0x75,0xf5,0xcd,0x2d,0xb2,0x5b,0xe5,0x36,0x3d,0x36,0x62,0xb5,0x92, + 0xb0,0x76,0x25,0xa1,0xee,0xad,0x5c,0xad,0x42,0x4b,0xe0,0x6,0xe9,0xb9,0xe1,0x30, + 0x9c,0x10,0xe,0x3c,0xf1,0xf8,0x63,0xbe,0x65,0x42,0xb2,0xbd,0x10,0x4a,0xaa,0x18, + 0xc6,0xaf,0xb7,0xa7,0xd7,0x55,0x69,0x4d,0x7b,0xbb,0xe7,0x57,0x13,0x13,0x19,0x1b, + 0xd3,0xe4,0x87,0x32,0xd3,0x76,0x7d,0x68,0xd8,0xae,0xe9,0x3a,0x6f,0x28,0xce,0x9d, + 0x3f,0x6f,0x17,0xa4,0xd7,0xec,0xb,0xf5,0xca,0x10,0x13,0xb5,0xba,0x37,0x4b,0xec, + 0x15,0xf6,0x85,0x54,0x83,0x4c,0x1f,0x55,0x24,0x1d,0x20,0xa9,0x4c,0x57,0x11,0x12, + 0x10,0x6d,0x27,0xd9,0xbf,0x93,0x13,0xbc,0xcb,0xa4,0x72,0xaa,0xde,0xeb,0xfd,0x76, + 0xe1,0xf2,0x55,0xbb,0xa4,0x76,0xc7,0x75,0x3e,0xa2,0x70,0x23,0x23,0x8f,0x99,0xae, + 0x59,0x65,0x95,0xb2,0x45,0xd8,0x39,0x3c,0xa6,0x3f,0x3b,0xcf,0xcf,0xa2,0xa0,0x8f, + 0x9,0xda,0x52,0x9b,0xa5,0x50,0x52,0x82,0xce,0xca,0xb5,0x77,0x2a,0xf7,0xba,0x2e, + 0xef,0x52,0x5f,0xdf,0x60,0xa3,0x6a,0xb0,0x77,0x78,0xd4,0xb2,0x55,0xd5,0x2e,0xd6, + 0x43,0xdd,0xd7,0xac,0xe7,0xf2,0x65,0xcb,0x88,0xc,0xf6,0x8e,0xab,0x34,0x51,0x62, + 0x92,0x2a,0x4d,0x1e,0x35,0xc4,0x3e,0xd5,0xd7,0xd7,0x79,0x5e,0x4,0xb9,0x48,0x1a, + 0xbd,0x91,0x2f,0x11,0xb7,0x20,0x6d,0x4c,0xa,0x22,0x5d,0xa5,0x48,0x6c,0x5d,0xfd, + 0x8,0x1e,0x73,0xd6,0x37,0x30,0x64,0x5d,0x90,0x2d,0x23,0x3c,0x39,0x31,0x6e,0x95, + 0x6a,0xb3,0x4a,0x8b,0x85,0xfb,0xab,0xd1,0xd2,0xb6,0x68,0xe5,0x49,0x2d,0xf2,0x25, + 0x4,0x84,0xd3,0xa4,0xf2,0x86,0x6b,0xf3,0x72,0xc5,0x5e,0xd6,0xae,0x5d,0x3b,0xed, + 0xae,0xbb,0xee,0xf4,0x9d,0xca,0x85,0x50,0x92,0xa0,0x37,0xdf,0x3c,0xe4,0xee,0x10, + 0xa6,0xc9,0xa9,0xc0,0x98,0x1a,0x3e,0x7b,0xe1,0xa2,0x65,0x64,0x18,0x27,0x55,0x3f, + 0x2c,0xf,0x17,0x8d,0x36,0x83,0x65,0x65,0xf0,0x24,0x6e,0xd4,0x35,0x71,0x8,0x83, + 0xa8,0xb5,0x1d,0x6b,0xad,0x45,0xea,0x1,0x51,0xbe,0xd5,0xa1,0x5e,0x3d,0xe5,0x48, + 0x6c,0x12,0xe4,0x30,0x14,0x7f,0xfb,0xa1,0xef,0xd1,0xb1,0x9,0xeb,0x53,0x4a,0x30, + 0x3a,0x3a,0xa6,0x3a,0x3c,0x9e,0x2c,0x91,0x88,0x99,0x94,0xb,0xc7,0x7e,0x34,0xac, + 0xaa,0xb1,0xf6,0x96,0x16,0x3d,0x1b,0xda,0xca,0xc7,0x1c,0xd,0x45,0xea,0xa3,0x1a, + 0x22,0x79,0x1f,0xff,0xd8,0xe,0xbb,0xf3,0xce,0xad,0xb6,0x7d,0xfb,0x5d,0x5e,0x57, + 0xc,0x25,0x9,0xfa,0xcd,0x6b,0xaf,0xcb,0xc8,0x4a,0x62,0x44,0x6,0x93,0xc7,0x43, + 0x9c,0x3c,0x71,0xc2,0xce,0x9f,0xbf,0x60,0x8d,0x1a,0xdc,0xa6,0x3b,0xee,0x90,0xfa, + 0xad,0xf2,0x2d,0xf,0x3a,0x27,0x36,0x8a,0x72,0xce,0xa4,0x27,0x27,0x26,0x7d,0xf5, + 0x89,0x69,0x88,0x72,0x5b,0x45,0xd0,0x96,0x2d,0x5b,0xac,0xa5,0xb5,0xc5,0xc9,0x60, + 0x2,0x3c,0xc2,0x71,0x88,0xa3,0x2,0x41,0x90,0x3c,0x2a,0xf5,0xc6,0x7d,0x13,0x80, + 0x96,0xbb,0x54,0xa6,0xbd,0xcd,0x31,0x49,0x6b,0xb5,0x54,0xb4,0x5e,0xf6,0xcf,0x5f, + 0x46,0x26,0xea,0x8,0xe6,0xe5,0x23,0x41,0x3c,0xd,0x43,0xa,0x48,0xea,0x48,0xb2, + 0x79,0xc3,0xbb,0x45,0x73,0xf8,0xe4,0x3,0xf7,0x87,0xca,0x22,0x28,0x49,0xd0,0x4b, + 0xbf,0x7a,0x59,0x6e,0x5e,0x76,0x43,0x7f,0xc,0xa4,0xa7,0xb7,0xc7,0xe,0xbd,0x75, + 0xd8,0x36,0x6d,0xda,0x64,0x9b,0x37,0xdf,0xe1,0xaa,0x3,0x29,0x81,0x98,0xd0,0x37, + 0xde,0x64,0x7e,0x33,0x2c,0xe8,0x3a,0xa1,0x2,0x9b,0x6b,0xd7,0xae,0x5d,0x73,0xe3, + 0xb8,0x71,0xdd,0x7a,0x7f,0x47,0x4f,0x90,0x17,0x6e,0x82,0xa0,0xf0,0x9e,0x8c,0xd1, + 0xf0,0xc,0x84,0x92,0x8,0x57,0x29,0xee,0x21,0x5,0xe1,0xd5,0x35,0x92,0x5c,0x8d, + 0xed,0x12,0x41,0x6c,0x9b,0x64,0xa6,0x14,0x35,0x7b,0xd7,0xf4,0x1c,0xb3,0xb4,0x64, + 0x3a,0xc9,0x97,0x1f,0xf8,0x3d,0x9,0x4b,0x49,0x3d,0x36,0x11,0xbb,0xca,0x5b,0x93, + 0x3d,0xbb,0x3f,0x13,0x2a,0x8b,0xa0,0xa4,0x91,0xce,0x6a,0xf5,0xbc,0x7d,0x11,0x80, + 0xda,0x8c,0x28,0x5d,0xb8,0xff,0xbe,0x7b,0xbd,0xac,0x69,0x6f,0x73,0xb1,0x9f,0x96, + 0xc8,0xbb,0x17,0xd1,0x80,0x99,0x1d,0x9,0x6c,0x53,0x53,0xa3,0xbf,0x0,0x64,0x33, + 0x9d,0x28,0x98,0xd7,0x37,0xec,0xe8,0x6d,0xdb,0xb6,0xcd,0x7,0x75,0xad,0xab,0xcb, + 0xe,0x1f,0x39,0x62,0x43,0x32,0xf2,0x59,0xc5,0x40,0x13,0x7a,0x36,0xab,0xb6,0x78, + 0x61,0x48,0x1b,0x10,0x84,0x4a,0x37,0x36,0x36,0x7a,0x5b,0xa8,0x62,0x4a,0x4c,0x34, + 0x48,0x6a,0x6a,0xd5,0x7e,0x90,0x38,0xde,0xce,0x6,0xc9,0x5,0xe1,0x3b,0x99,0xfd, + 0x1c,0x38,0x17,0x31,0x8a,0xb1,0xf2,0x2f,0xf3,0x3c,0x73,0x42,0x6a,0x59,0xbc,0x52, + 0x28,0x29,0x41,0x2f,0xbe,0xf8,0x4b,0x6f,0x13,0x3,0x4a,0x43,0x88,0x7f,0xa3,0x6, + 0x3c,0x3c,0x34,0x62,0x97,0x65,0x9c,0x99,0x20,0x2f,0xf7,0xea,0xa4,0x66,0x71,0x2c, + 0x4,0x70,0x68,0x7a,0x55,0x65,0x5a,0xab,0xb3,0xce,0x6d,0xe,0x76,0xb,0x9b,0x44, + 0xe2,0x88,0x14,0xf4,0x5e,0xef,0xb3,0x9e,0x9e,0x6e,0x46,0x6a,0x75,0x52,0xbb,0x94, + 0x3c,0x52,0x85,0xa4,0xa9,0xb5,0xa9,0xde,0x1a,0x45,0xe8,0x8c,0x5c,0xbb,0xbb,0xf9, + 0xa,0xad,0x9f,0x26,0xe2,0xe4,0x8b,0x34,0x3c,0x20,0x6d,0x63,0x3f,0x48,0x4a,0xc7, + 0xc7,0xc7,0xa4,0xae,0xad,0x92,0xa2,0x79,0xa2,0x1c,0x91,0x8,0xbf,0x3b,0x91,0x9c, + 0x4,0xd4,0xc5,0x29,0x37,0x35,0x35,0xd9,0xba,0x75,0x1d,0xf6,0xe8,0x17,0x1e,0xf1, + 0xf3,0x62,0x28,0x29,0x41,0xe,0x35,0xc6,0x8a,0x46,0x63,0xdb,0xdd,0xd5,0x6d,0x27, + 0x4f,0x9d,0x92,0x4b,0xbf,0xe4,0x51,0xec,0xb8,0x26,0xcf,0x4,0x10,0x79,0xf6,0x61, + 0x26,0x94,0x27,0x9d,0x38,0x71,0xca,0xfe,0xfd,0xa5,0x5f,0xdb,0x2b,0xaf,0xbc,0x61, + 0xc7,0x8e,0x77,0xba,0x2b,0x6f,0x6a,0x6a,0x70,0x12,0x2a,0xa5,0x32,0x2d,0xad,0xcd, + 0xd6,0xbe,0xa6,0xdd,0xd,0x6c,0x57,0x4f,0x8f,0x8d,0x4a,0x2,0xd3,0x2d,0x6d,0x56, + 0xb6,0xaa,0xc1,0x6,0x31,0xee,0x4c,0x4c,0xf3,0x62,0x85,0x3d,0x1b,0xd7,0x18,0x30, + 0xe6,0xd1,0xa8,0x23,0xc9,0x57,0xae,0x5c,0xb6,0x3e,0xc5,0x47,0x9c,0x27,0x1a,0x1e, + 0x88,0xc9,0x23,0xc7,0x57,0x6c,0x21,0xc4,0x7b,0x17,0x96,0xf,0xc7,0xa2,0x4,0xc1, + 0xb6,0x6f,0xbe,0x2b,0x4e,0x41,0x62,0x88,0x79,0x86,0xb4,0x7a,0xe,0xef,0x3f,0x6c, + 0x37,0x84,0xed,0xa,0x5c,0x79,0xca,0x57,0xf6,0xe2,0xc5,0x73,0xb2,0x57,0x87,0xec, + 0xe5,0x97,0xff,0xd3,0x7e,0xa5,0xd2,0xab,0x40,0xf,0xb5,0x4b,0x57,0x57,0xb9,0x78, + 0xbb,0x67,0x5b,0xbf,0xde,0x3d,0x60,0x2e,0x3b,0xe5,0x5b,0xb7,0xc4,0x58,0xbd,0x72, + 0xed,0x92,0x15,0xf5,0x27,0x9b,0x82,0xd4,0xe8,0x5e,0x27,0x1,0xe9,0xd1,0x5c,0xf0, + 0x76,0x2c,0x6,0xc1,0x6a,0xb3,0x22,0x7b,0xae,0xdf,0x20,0x3d,0x79,0x98,0xe7,0x2d, + 0xef,0x2f,0x21,0x4,0x52,0xb1,0x79,0x8b,0xc5,0x41,0x25,0x9,0xf2,0x8,0x33,0x19, + 0x20,0x86,0xb7,0x5b,0xf9,0xcb,0xf8,0xf8,0xa4,0x7,0x75,0x24,0x8d,0x48,0xd6,0xa4, + 0xc4,0x3d,0xda,0x8c,0x6a,0x4d,0x7e,0x7e,0x45,0xa7,0xa4,0x6,0x3d,0xd6,0xdb,0x7d, + 0xd9,0x5e,0xfb,0xcd,0xef,0xec,0xdf,0x7e,0xf9,0xb2,0x9d,0x3b,0x7b,0xde,0x25,0xc9, + 0xf3,0x28,0xa9,0x45,0x83,0x44,0x9c,0xd7,0x31,0x59,0x79,0xab,0xcb,0xc7,0xdf,0xb7, + 0x81,0x6b,0x57,0xad,0x5a,0xde,0x92,0xb6,0x21,0x80,0x97,0x2,0xe1,0x6d,0x88,0x1a, + 0x54,0xc1,0x6b,0xd1,0x1f,0x6a,0xbb,0x6e,0x5d,0x78,0xb5,0x13,0x76,0x20,0x7d,0xb8, + 0x2,0x7,0x9,0x1,0xfe,0x19,0x80,0x9a,0x85,0xbf,0xe4,0x5c,0x6d,0x8d,0xcb,0xc3, + 0xf2,0x3,0x89,0x35,0x92,0xe4,0x52,0x28,0x49,0x10,0xbf,0xb6,0xf0,0xd7,0x27,0x1a, + 0x4,0xdb,0x1c,0xb8,0x6c,0xdc,0x7d,0x58,0x55,0x15,0xfd,0x65,0x64,0xa4,0xc7,0xe4, + 0x71,0xc4,0x8b,0x4b,0x12,0xe9,0x1,0xde,0xad,0x99,0x98,0xa7,0x2a,0xa5,0xf8,0x88, + 0x68,0xd9,0xec,0xbf,0xf,0x1e,0xb4,0x17,0x9f,0xff,0xa5,0x9d,0x3d,0x73,0xce,0x25, + 0x9,0xdb,0x25,0x3,0xe8,0x1b,0x6f,0xd5,0x22,0x61,0xa2,0xff,0xba,0x65,0x6,0xfa, + 0x6c,0xad,0xae,0x11,0x70,0xa6,0x52,0x95,0x56,0x21,0xa2,0x20,0xc6,0x2d,0x89,0xbe, + 0xe3,0x7b,0x7b,0x12,0x57,0x48,0x46,0xb2,0xe7,0xc8,0x99,0x23,0x29,0x22,0xd2,0x31, + 0x2f,0x3d,0x11,0x53,0x92,0x1a,0xa2,0xf8,0x7,0x1f,0x7c,0xc0,0xee,0xfe,0xc4,0xc7, + 0x93,0xda,0xe2,0x48,0xfd,0x83,0x90,0x1c,0x17,0x41,0x99,0x4f,0x7e,0x48,0xb6,0x6, + 0xa3,0xc9,0x1b,0x81,0x18,0xd6,0x87,0xb5,0xe2,0x4d,0x85,0x82,0x3c,0x85,0x2,0xf5, + 0x75,0x75,0x73,0xd1,0x31,0x99,0x3d,0x76,0xa6,0xb1,0xb1,0x49,0xc4,0xa5,0xac,0xb5, + 0xa5,0xd1,0x89,0xbd,0xa0,0x0,0xb3,0xbb,0xbb,0x57,0xf1,0xd3,0x26,0x6b,0x96,0xb1, + 0x9f,0x92,0x34,0x20,0x1,0x55,0xb2,0x4d,0x1e,0x37,0xa9,0xaf,0xd5,0x32,0xba,0xb8, + 0x7f,0x4f,0x64,0x25,0xb5,0x90,0x88,0xad,0xc6,0x9d,0x4f,0x4d,0x85,0xb4,0x82,0xc0, + 0xd1,0x77,0x24,0xe7,0x45,0x27,0x1,0xa4,0x4,0x95,0x43,0x5e,0x9c,0x14,0xee,0xd, + 0x17,0xfd,0x39,0x1c,0xe,0x63,0xf9,0xa2,0xc,0xf3,0x8e,0xed,0xdb,0x3d,0xed,0x29, + 0x85,0x92,0x4,0xb1,0xca,0x18,0x5e,0xc,0x33,0xdd,0x10,0xcb,0xb0,0x8a,0x11,0xc, + 0x9e,0xde,0xa7,0xe4,0x75,0xc8,0xc2,0x49,0x37,0xd8,0x54,0x23,0xb7,0x6a,0x6c,0x68, + 0xb4,0x8e,0x8e,0x75,0xa,0xc6,0x36,0x5b,0xcb,0xea,0x76,0x57,0x25,0x54,0xa3,0xaf, + 0x6f,0x40,0xc9,0xe7,0x80,0xed,0xd8,0xb1,0xcd,0x57,0x91,0xdd,0x0,0xde,0x78,0x30, + 0x78,0xf6,0x9d,0x90,0x10,0x9e,0x45,0x72,0x2b,0xcb,0x73,0x96,0x56,0x0,0x5f,0x51, + 0xa6,0x9,0xe7,0x64,0x7b,0x44,0x90,0x93,0x2,0x77,0x71,0xd6,0xb,0xa1,0xe0,0x3a, + 0xcf,0xb9,0xb3,0xd1,0xd8,0xbe,0xf0,0xc8,0xe7,0xed,0xee,0xbb,0x3f,0xe1,0xe6,0x60, + 0x31,0x94,0xbc,0x83,0x41,0xb6,0x2b,0xde,0xa9,0x4e,0x7e,0x1c,0xc0,0x4a,0x23,0x3d, + 0x48,0x89,0x17,0x75,0x40,0x94,0xb,0x39,0x7d,0x72,0xdd,0xa3,0xf2,0x2e,0x6e,0x8f, + 0x12,0xbb,0x81,0x3b,0x9e,0x96,0x87,0x6a,0x56,0x3c,0xb3,0xe3,0x63,0x1f,0xb3,0xc7, + 0x1e,0xdf,0x6b,0x4f,0x3c,0xb9,0x57,0x64,0x35,0xdb,0xe5,0x4b,0x57,0x5d,0xe2,0xb0, + 0x73,0x78,0x27,0x7e,0x6c,0x45,0xba,0xd2,0x2b,0x29,0x45,0x6a,0x53,0x65,0x92,0xac, + 0xc4,0x6b,0x41,0x1e,0xd9,0x3a,0x63,0x40,0x9a,0x2a,0x25,0x4e,0x8c,0xe3,0x26,0x12, + 0x92,0xbf,0x79,0x84,0x33,0xc6,0x2,0xf1,0x4,0x99,0x5f,0xf8,0xfc,0xe7,0x5c,0xad, + 0xa8,0x5b,0xa,0x16,0xa5,0x10,0x4f,0xb1,0x6d,0xdb,0x56,0x17,0xed,0x7a,0x4d,0x80, + 0xc9,0xc4,0x91,0xd1,0x5,0x7b,0x42,0xd8,0x1e,0x6a,0x98,0x1c,0x2e,0x98,0x13,0x8c, + 0xf6,0x2a,0xc5,0x47,0x90,0x3a,0xa1,0x44,0x73,0x74,0x84,0x17,0x78,0x39,0xe5,0x64, + 0x1d,0x76,0xdf,0x7d,0xf7,0x58,0xad,0x72,0x29,0x26,0xce,0xb3,0x48,0x1c,0x9,0x2e, + 0xf7,0x13,0x2f,0x8d,0x8e,0x8e,0xc8,0x5b,0xf1,0xbe,0x2d,0xf4,0x82,0x57,0x43,0x72, + 0xc3,0x44,0x91,0xa4,0xb0,0xed,0x1b,0x40,0xcf,0x71,0x3c,0xe1,0x2f,0x9c,0xce,0x93, + 0x43,0xca,0xc3,0xb,0x86,0x47,0x3e,0xff,0x88,0x4b,0xce,0x52,0xc9,0x1,0x8b,0x12, + 0xc4,0x4,0xee,0x50,0x6a,0x81,0x87,0xc2,0xf8,0x46,0xe9,0xf0,0x82,0x4,0xa9,0x60, + 0x98,0xd1,0x65,0xa2,0x6d,0x7e,0x30,0x40,0x7c,0x44,0x3d,0x12,0xe2,0x6f,0x41,0x70, + 0xe5,0xb2,0x19,0x6c,0xa7,0x86,0xb8,0x29,0x6c,0x6e,0xb1,0xd7,0xcd,0xb3,0x90,0x8, + 0xf1,0xd8,0x2e,0x86,0x3e,0x2e,0x92,0x71,0xbf,0xb9,0x1c,0xc3,0xd3,0x2,0xe8,0x1a, + 0x7b,0xd7,0xdc,0xdb,0x23,0x49,0x45,0xd5,0x39,0x66,0xc,0x91,0x1e,0x97,0x1d,0x11, + 0x4e,0x89,0x60,0xc,0x6c,0xe6,0x33,0xb6,0xc7,0x1e,0xfb,0xb,0xa9,0xf5,0xc2,0x49, + 0xe9,0x42,0x58,0x94,0x20,0x80,0xe4,0xec,0xda,0xb9,0x53,0x93,0xa8,0xf0,0x63,0x1f, + 0x98,0x6,0x12,0x75,0x98,0x73,0x27,0x49,0xde,0x85,0x24,0xb0,0xa7,0xa7,0x57,0x71, + 0x4f,0xaf,0xa2,0xef,0x29,0xbf,0x27,0xc6,0x49,0x18,0x47,0x72,0xae,0x9,0xad,0x28, + 0x85,0x5f,0xbf,0xba,0x5d,0xd0,0x73,0x44,0xc3,0xb4,0x8f,0xe4,0x8d,0x49,0xe2,0x3c, + 0x72,0xd7,0xa4,0x25,0xb8,0xa6,0xac,0xc2,0x86,0x95,0xdd,0x77,0x29,0x96,0x52,0x67, + 0x5a,0xa8,0x1a,0x2d,0xe,0xdb,0xb1,0xf3,0x64,0xe4,0xc3,0x65,0x47,0xf7,0x91,0xd8, + 0xb2,0xd9,0xff,0x95,0x2f,0x3f,0x69,0xdb,0x94,0xb5,0x33,0xce,0x5b,0xc5,0x92,0x8, + 0x62,0x92,0x1d,0xa,0xc9,0x37,0x6f,0xd9,0x6c,0xcd,0xca,0xe2,0x31,0xb6,0x11,0xf9, + 0x12,0xc5,0x31,0x64,0x10,0xc8,0x11,0x18,0x5e,0xb9,0xda,0xe5,0xd2,0x84,0x5b,0xa5, + 0xd,0x4f,0x3c,0x75,0x1d,0x95,0x62,0xac,0x6e,0xa3,0x64,0x5b,0xb8,0x86,0xb7,0x3, + 0xb4,0x43,0xe8,0xe0,0xde,0x92,0x3f,0x9d,0x4f,0x4e,0x66,0xad,0xf3,0xcc,0x5,0x1b, + 0x90,0x11,0x6f,0x6a,0xac,0xb3,0xba,0xfa,0x6,0x27,0x8d,0xfe,0xe6,0x90,0xc7,0x15, + 0x8b,0x87,0xaa,0xd2,0xdf,0xd3,0x7f,0xfd,0x94,0x12,0xeb,0xcd,0xde,0xce,0xed,0x60, + 0x49,0x4,0x1,0xe2,0x8e,0x9d,0xf,0x7d,0xd2,0xd6,0x6f,0x58,0xef,0xbf,0x94,0xf, + 0xfb,0x3a,0x31,0x5,0x8,0xef,0xc9,0x22,0x49,0xa8,0x16,0xee,0x9b,0xc8,0x1b,0xb7, + 0xce,0xeb,0x1c,0x42,0x5,0x8,0x81,0x19,0x72,0x2c,0xd4,0xa6,0x4c,0xde,0xc9,0x7f, + 0xf1,0xc1,0xe4,0x34,0x92,0x98,0x3c,0x22,0x45,0xb3,0xba,0x6f,0x6,0x9,0xd1,0xbc, + 0xe8,0x87,0xfb,0xd8,0x5a,0xa9,0xaa,0xc2,0x61,0xc8,0x16,0x29,0x91,0x9e,0x9c,0x9c, + 0xf0,0x6b,0x71,0xea,0xf4,0x8f,0x44,0xa2,0xea,0xa8,0xf5,0xd7,0x44,0xe,0xd9,0xfa, + 0xed,0x92,0x3,0x96,0x4c,0x10,0xa0,0xd3,0xcf,0x7c,0x6a,0xa7,0x7d,0x7c,0xc7,0xe, + 0x6b,0x91,0xf1,0x46,0xb7,0xb1,0x2d,0x41,0x2,0x42,0x61,0x30,0x7c,0x73,0x8d,0x7d, + 0x22,0xec,0xc,0x44,0xb1,0xaf,0x8c,0x8b,0xef,0x1f,0x18,0xb4,0x1,0xa5,0x2a,0x23, + 0x12,0x7f,0x54,0x0,0x95,0xb,0x31,0x4f,0xce,0x27,0x86,0x7d,0xe2,0x77,0xd3,0x4, + 0x89,0xbc,0xed,0xa0,0x94,0x89,0xcc,0x75,0x4a,0x4b,0x1a,0x5b,0x5a,0x2d,0x27,0x75, + 0x1c,0xd7,0x7d,0x7d,0x92,0x26,0x7e,0xa7,0xc4,0x6f,0x19,0x1,0xfd,0x12,0x4b,0x11, + 0x72,0xb4,0x2b,0xc2,0xfe,0xca,0x97,0xbf,0xf4,0x81,0xc9,0x1,0xb7,0x44,0x10,0x68, + 0x56,0x7a,0xb0,0x73,0xd7,0xc3,0x76,0x8f,0xbc,0x41,0x5b,0x5b,0x8b,0x13,0xc1,0x12, + 0x16,0x92,0x4,0x30,0xe2,0xc1,0x0,0x63,0x7b,0x64,0xa4,0x47,0xc7,0xa4,0x26,0x83, + 0xd6,0x2f,0xb2,0xfa,0xfb,0x7,0x44,0x9c,0xbc,0x15,0x81,0x9b,0x2c,0x30,0x46,0x99, + 0x6b,0xdc,0x8f,0xe7,0xc4,0xeb,0x70,0x6d,0x5a,0x36,0x28,0x3b,0x5b,0x66,0xe9,0x55, + 0xf5,0x36,0x2b,0x72,0x52,0xd5,0xb5,0x96,0x51,0xdd,0xa0,0xec,0xd7,0x74,0x66,0xda, + 0x73,0x36,0x75,0x28,0xc9,0x99,0x71,0x9,0xed,0xe8,0x58,0x63,0x7b,0xf7,0x3e,0x6a, + 0x1b,0x44,0xe8,0x72,0xe0,0x96,0x9,0x2,0xa4,0xa,0x9f,0xde,0xfd,0x29,0xb9,0xcc, + 0xbb,0x3d,0x97,0x61,0x52,0xe1,0x47,0x4c,0x41,0x7a,0x20,0x28,0x16,0x16,0x98,0x6f, + 0x2,0x48,0x5c,0x39,0xea,0x87,0x41,0x66,0xf2,0xfe,0x73,0xe1,0xea,0x1a,0xa9,0x4b, + 0xd6,0xba,0xba,0xba,0xec,0xd2,0xe5,0x4b,0xae,0xbe,0x44,0xe5,0xb4,0x3,0xf1,0xb4, + 0x40,0xc,0x43,0xe1,0x5c,0xd1,0x91,0xa5,0x2a,0xeb,0xac,0x49,0xd9,0x3f,0xbf,0xd4, + 0xa7,0x12,0xb5,0x62,0x43,0x8d,0x3d,0xa7,0x47,0xbf,0xf8,0x45,0xff,0xd9,0xf0,0x72, + 0xe1,0xb6,0x8,0x2,0xfc,0x16,0xf0,0x73,0x9f,0xdd,0x63,0xf7,0xdd,0x7b,0x8f,0x87, + 0x1,0x64,0xe7,0xd1,0x68,0x16,0x93,0x26,0xc0,0x51,0x20,0x2e,0xa8,0xe0,0xda,0xb5, + 0x6b,0x7c,0x53,0xbf,0x4b,0x49,0xf0,0xa9,0xce,0xd3,0xb2,0x3f,0x59,0xdb,0x22,0x83, + 0xa,0x69,0x18,0x26,0x9e,0xc7,0xc6,0x78,0x4c,0x44,0x3,0xb2,0xcc,0x59,0x49,0x1a, + 0xe1,0x40,0x7b,0xfb,0x6a,0xff,0x85,0x3e,0x5b,0x26,0xa8,0x66,0x93,0xfa,0x7f,0xf2, + 0x2f,0x1f,0xb3,0xb5,0x22,0x69,0x39,0x51,0x72,0xc3,0x6c,0x29,0xc0,0xb0,0x9e,0x3c, + 0x79,0xd2,0x8e,0x1e,0x55,0x36,0x3e,0x38,0xe0,0x6a,0x32,0xc2,0x5e,0x72,0x34,0xbe, + 0x11,0x9a,0x21,0xa7,0xbc,0xf7,0x42,0x8a,0xf8,0xaf,0x7,0x9b,0x64,0xf0,0xf1,0x62, + 0x67,0x2e,0x5f,0xb5,0x41,0x3d,0xd3,0xb1,0xba,0xd5,0xd6,0x48,0xbd,0xb0,0x47,0xd1, + 0xf0,0xe3,0x8d,0x3c,0xf8,0x14,0x50,0xa3,0xb9,0xcd,0x5c,0xdd,0x43,0x5b,0x6c,0x59, + 0xf0,0x42,0xf2,0x99,0xbf,0xf9,0x9a,0x6f,0x80,0x2d,0x37,0x3e,0x30,0x41,0x80,0x1f, + 0xb,0x90,0xe9,0xbf,0xfd,0xf6,0xdb,0x76,0xf1,0xe2,0x65,0xdf,0x82,0x65,0x62,0xe3, + 0x8a,0x67,0x70,0xf1,0xa8,0x0,0x20,0xce,0xa9,0x93,0xc4,0xb4,0xb5,0x34,0x5b,0xbd, + 0x56,0x7c,0x4a,0x6,0xfc,0xfa,0xf0,0xb0,0x75,0xc9,0x9e,0xe4,0xa4,0x9e,0x6b,0xdb, + 0x56,0x5b,0x83,0xd2,0x9a,0x1a,0x1d,0x57,0x89,0x20,0xdc,0x3d,0xed,0x12,0x5b,0xf1, + 0x2,0x12,0x71,0xc7,0x10,0x93,0x70,0x7a,0x44,0x2d,0xb5,0x63,0x5b,0xf7,0xef,0xff, + 0xee,0x6f,0x5d,0x82,0xf3,0xa5,0x75,0xb9,0xb0,0x2c,0x4,0x1,0x48,0x40,0x6a,0xfa, + 0xfa,0xfa,0xec,0x9d,0x77,0xdf,0xb3,0xab,0x57,0xaf,0xba,0x5a,0xc4,0xfd,0x1c,0x36, + 0x47,0x90,0x8a,0xa,0xb9,0x78,0x8c,0x77,0x78,0xf,0x96,0xb5,0x91,0xcc,0xa4,0x8, + 0x1a,0xb5,0x31,0x79,0xab,0x6,0x49,0x42,0xa3,0x22,0xf6,0xf6,0x7a,0x45,0xec,0x7a, + 0x6,0xa3,0xce,0xef,0x92,0xf0,0x94,0x90,0xce,0x8b,0x4c,0xde,0x9f,0x96,0xb3,0xe5, + 0xa2,0x61,0x6f,0x96,0x21,0x26,0x8,0x5c,0x29,0x72,0xc0,0xb2,0x11,0x14,0x1,0x49, + 0xbc,0x91,0x60,0xef,0xf9,0xdc,0xf9,0xb,0xfe,0x8a,0xc8,0xe3,0x1f,0x1,0x95,0x81, + 0x24,0xef,0x52,0x42,0x55,0x26,0xf,0x4,0xb1,0xc3,0x92,0xa4,0x7e,0xa5,0x20,0xd8, + 0x20,0x5e,0x65,0x37,0x55,0xa7,0x7d,0xab,0x75,0x5c,0x52,0x98,0xd5,0x75,0x8c,0xf8, + 0xc4,0xf8,0x98,0x47,0xf1,0x1b,0xee,0xd8,0x6c,0xeb,0xe4,0xa9,0x36,0xad,0x5f,0x67, + 0x1b,0x55,0x3c,0x3d,0x59,0x21,0x72,0xc0,0xb2,0x13,0x14,0x41,0xb3,0xa8,0x7,0xaa, + 0x30,0x34,0x3c,0xe4,0xd9,0x3e,0xae,0x9d,0x57,0xd2,0xfe,0x26,0x41,0xbd,0x32,0x2f, + 0x8,0x43,0xa2,0xb2,0xba,0x9f,0x7b,0xab,0xe4,0xf2,0x6b,0x65,0xa4,0xd9,0x6a,0x21, + 0xee,0xa2,0x40,0x2,0xe7,0xa4,0x27,0x24,0xb4,0x78,0x39,0x76,0x3,0xa3,0x53,0x58, + 0x49,0xac,0x18,0x41,0x11,0x34,0x8f,0x8b,0x26,0xc1,0xe4,0x9d,0x3d,0xe9,0x2,0x2f, + 0x5,0x21,0xe9,0x5f,0xfe,0xf9,0x9f,0x5c,0xaa,0x9e,0x7a,0xea,0xab,0xfe,0x5f,0x9, + 0x38,0xae,0x4a,0x57,0xfa,0xd6,0x7,0x89,0x31,0x6f,0x4b,0x8,0x5,0xf0,0x78,0x4e, + 0x64,0x9,0x49,0x79,0xe1,0x85,0x17,0xfc,0xfb,0xd1,0x47,0x1f,0xf5,0x38,0x6a,0xb9, + 0xb0,0xe2,0x4,0x95,0x42,0x5b,0x5b,0x9b,0x13,0xf6,0x8b,0x5f,0xfc,0xc2,0x9e,0x7e, + 0xfa,0x69,0xaf,0x8b,0x13,0x2d,0x85,0x78,0x6f,0x4,0x6d,0xd0,0x16,0xc8,0x6f,0xeb, + 0xec,0xd9,0xb3,0x76,0xe4,0xc8,0x11,0x3f,0x2e,0x44,0x61,0x1b,0xb,0x2,0x82,0x16, + 0x46,0x67,0xae,0xf3,0xc0,0xfe,0xdc,0xbe,0xdd,0xbb,0x73,0xbb,0x93,0xb2,0x6f,0xff, + 0x1,0xd5,0x2e,0x8c,0xfe,0xfe,0xfe,0xe4,0x28,0xa0,0xf0,0x3c,0x1f,0x3b,0x77,0xee, + 0xcc,0x49,0x6a,0x72,0xcf,0x3f,0xff,0xbc,0x9f,0x73,0x2f,0xe7,0x8b,0x95,0x62,0x7d, + 0xc4,0x6b,0x67,0xce,0x9c,0x49,0x6a,0x73,0xb9,0xef,0x7d,0xef,0x7b,0x37,0x3c,0x17, + 0xcb,0xb6,0x6d,0xdb,0x92,0x3b,0x16,0x47,0x9,0x82,0x3a,0x73,0xfb,0x77,0x87,0xd0, + 0xe5,0xe6,0xb2,0x3b,0xb7,0xbf,0x8,0x4b,0x71,0xa0,0x4c,0x1c,0xfc,0xe8,0x47,0x3f, + 0xf2,0xf3,0x48,0x40,0x21,0x4a,0x11,0x44,0x5d,0x61,0x89,0xd7,0x4a,0x11,0x94,0x7f, + 0x2d,0x12,0xf4,0xcc,0x33,0xcf,0xf8,0xf3,0x71,0x3c,0x71,0x7c,0x4b,0xc1,0x82,0x3f, + 0x14,0x3e,0xfd,0xd3,0xaf,0xdb,0xb7,0xf,0x26,0x27,0xfb,0xf6,0x5b,0xe7,0x77,0xbe, + 0x64,0x9d,0xff,0xf1,0x75,0x7b,0xd2,0x2b,0xf,0xda,0xb7,0xbf,0xfe,0x53,0xfb,0xd2, + 0x9f,0xbe,0x65,0xdb,0xc2,0x1d,0x8e,0x28,0xce,0xd8,0x1,0x80,0xe8,0x17,0xe2,0xc7, + 0x3f,0xfe,0xb1,0xd7,0x3f,0xf4,0xd0,0x43,0x49,0x4d,0x50,0x85,0x58,0x1f,0x51,0x68, + 0x4b,0x4a,0xb5,0x95,0xf,0xea,0x40,0xfe,0xb3,0x5b,0xb7,0x6e,0x75,0x95,0x5a,0x8a, + 0xfa,0xde,0x84,0x84,0xa8,0x9b,0x70,0x60,0x5f,0x31,0x69,0xc9,0x97,0xaa,0x7d,0xb9, + 0x3,0x49,0x6d,0x44,0x5c,0x65,0x56,0xa,0xec,0xdd,0xbb,0xf7,0xa6,0x55,0x8d,0x52, + 0xb3,0x58,0x59,0x8a,0x94,0x94,0x6a,0x8b,0x6b,0x51,0x82,0xf8,0x6,0x71,0x7c,0xb7, + 0x22,0x41,0x4b,0xc8,0xc5,0xee,0xb1,0xed,0xf9,0x62,0x12,0xb1,0xfb,0x13,0x16,0x37, + 0x30,0xbf,0xf9,0xcd,0x6f,0xda,0xae,0x5d,0xbb,0xec,0xfb,0xdf,0xff,0xbe,0x9f,0xb3, + 0x52,0x9c,0x47,0x89,0x7a,0xfc,0xf1,0xc7,0xe7,0x56,0xf6,0x87,0x3f,0xfc,0xa1,0x1b, + 0x52,0xbe,0x23,0x62,0x1d,0x25,0x82,0x67,0x68,0x23,0x16,0xce,0xb,0xc1,0x73,0xbc, + 0x8a,0xfa,0xd9,0xcf,0x7e,0x96,0xd4,0x98,0x9f,0x53,0xde,0x7c,0xf3,0xcd,0xa4,0xe6, + 0x83,0x61,0x41,0x82,0x9e,0xf8,0xce,0x7e,0xdb,0xed,0x47,0xcf,0xd9,0x93,0xcf,0xbe, + 0xe2,0xbf,0xb2,0x3f,0xfd,0xca,0x4f,0xe6,0xd4,0x6e,0xdf,0xf,0xe6,0xd5,0xb,0x22, + 0xf8,0xf,0xbd,0xa8,0xa,0xe0,0x98,0x12,0xc5,0x3f,0xff,0x18,0xd5,0x41,0xdc,0xe3, + 0xbd,0x20,0xaa,0x40,0x54,0xcd,0xa5,0x22,0xaa,0x21,0xed,0xe7,0x63,0x39,0xdd,0x7c, + 0x69,0x2f,0xd6,0xb9,0x3f,0x27,0x92,0x12,0x95,0x8a,0x45,0x9e,0xec,0xc0,0xcd,0x16, + 0x1a,0xb1,0xcf,0x57,0xa9,0xa8,0x12,0x88,0x73,0x54,0x89,0x7c,0x14,0xaa,0xc7,0xb3, + 0xcf,0x3e,0x3b,0xf7,0xc,0xa5,0xf0,0x99,0x52,0xd7,0xf0,0x4a,0xf1,0x5a,0x6b,0x6b, + 0xab,0xb7,0x5,0x56,0x58,0xc5,0x4e,0xdb,0x4f,0x7f,0xf2,0xaf,0x32,0xc7,0x85,0x38, + 0x68,0xcf,0xfd,0xe3,0x4f,0xec,0x95,0xd3,0xc9,0x69,0x2,0x56,0x8d,0x60,0x90,0x6f, + 0x4a,0xbe,0xc1,0x2e,0x5c,0xd1,0xd7,0x5f,0x7f,0xfd,0xa6,0x55,0xff,0xf9,0xcf,0x7f, + 0xee,0xe5,0x56,0x81,0xea,0xe6,0x4b,0x23,0xa0,0x9d,0xdb,0x32,0xc8,0x45,0xb0,0x0, + 0x41,0x22,0x67,0xcf,0x5d,0xf6,0xed,0xe7,0xa0,0x67,0xb7,0x49,0x62,0x3c,0x22,0x56, + 0x50,0x64,0xfb,0xb8,0x7c,0x50,0x6a,0x77,0xd7,0xb3,0xf6,0xa,0xc7,0x2,0x13,0x66, + 0x40,0x4c,0x1a,0x75,0x89,0xc7,0x80,0xc1,0x73,0x9e,0x3f,0x89,0xe7,0x9e,0x7b,0x2e, + 0x39,0xa,0xf8,0xee,0x77,0xbf,0xeb,0xdf,0xd1,0x86,0x81,0xa5,0xd8,0x20,0x50,0x48, + 0xea,0x37,0xbe,0xf1,0xd,0xff,0x8e,0x36,0xf,0x30,0xa6,0xdb,0x46,0x10,0xa4,0x2, + 0xe4,0xab,0xd6,0xbe,0x1b,0x7d,0x55,0xe7,0xfe,0xdd,0x73,0xea,0x16,0x2f,0x15,0xaa, + 0x4b,0xb1,0x52,0x28,0xe6,0xa8,0x42,0x7c,0x2e,0xc6,0x28,0x31,0x4e,0xa1,0x70,0xad, + 0xb0,0xc4,0x6b,0x51,0xc5,0xe2,0xfd,0xb4,0x95,0x7f,0x8d,0xbe,0xf8,0x8e,0xcf,0xd0, + 0x3e,0x58,0x21,0x2f,0xb6,0x30,0xfe,0x7c,0x2a,0xe8,0x19,0x6,0x36,0x86,0xee,0xa8, + 0x14,0x12,0x11,0xd,0x2e,0xf5,0x9c,0xc7,0xb8,0x27,0xae,0x6c,0x5c,0xe9,0x8,0xee, + 0xc9,0xaf,0x7b,0xf5,0xd5,0x57,0xdd,0x13,0xc5,0xc2,0x79,0x3e,0x90,0xc8,0x85,0xda, + 0xc2,0xbb,0xa1,0xd6,0xd1,0x31,0xf0,0xc3,0xd1,0xdb,0x46,0x42,0x54,0x1,0xe,0xe4, + 0xa4,0x4a,0x89,0xa4,0x28,0xde,0x29,0x1a,0x7,0xdd,0x18,0x4d,0xc7,0xd5,0x89,0x31, + 0x50,0x5c,0xbd,0x42,0x83,0x8a,0x1,0xc5,0xa8,0x16,0x5b,0x61,0xea,0x38,0x2f,0xf6, + 0x5c,0xb1,0x6b,0xb1,0x2d,0xd2,0x8b,0xc2,0x6b,0x6f,0xbd,0xf5,0x96,0x9f,0xe7,0xa7, + 0x15,0xcb,0x28,0x41,0x4f,0xd8,0x77,0xc4,0x44,0x0,0xf6,0xa6,0xcc,0xca,0xf6,0xec, + 0x51,0x36,0x2d,0xbb,0x34,0x17,0x5d,0xff,0xc0,0xbe,0x95,0x17,0x1f,0x45,0x9b,0x93, + 0xaf,0xef,0xd1,0x60,0xe7,0x83,0xd5,0x45,0x1a,0xa,0xeb,0x8b,0x1,0x9,0x88,0xa5, + 0x18,0x88,0x7f,0x3a,0x3b,0x3b,0x8b,0xb6,0x15,0xa5,0xeb,0xc1,0x7,0x1f,0xf4,0xef, + 0x62,0xc0,0xb6,0xe5,0xdb,0xaa,0xa2,0x48,0x88,0x2a,0x8a,0xce,0x3,0xfb,0x8a,0xbb, + 0xf9,0x22,0x9,0x6b,0x74,0xa9,0xaf,0xbd,0xf6,0xda,0xdc,0x6a,0x2f,0xb6,0x52,0xa5, + 0x24,0xa8,0x54,0x89,0x52,0x12,0x91,0xff,0x1c,0xc7,0x51,0x52,0x28,0x8c,0x27,0x22, + 0xd6,0x2f,0x24,0x75,0xc5,0x50,0x3a,0xe,0x9a,0x83,0xb2,0xfa,0x4e,0x4a,0x72,0xba, + 0x0,0xf2,0x3b,0x2a,0xd5,0x69,0x44,0x8c,0x5f,0x8a,0x11,0x4,0xe1,0x85,0x65,0xa1, + 0x9,0xe5,0x3f,0x27,0xf,0x39,0x67,0xb4,0x49,0x52,0xf3,0x11,0xd5,0x2e,0xbf,0x10, + 0xbb,0x95,0xc2,0x87,0xb6,0x1f,0x84,0xda,0x14,0xee,0xe1,0xe4,0xd7,0x91,0x2e,0xe4, + 0xab,0x4e,0xa9,0x6b,0x0,0x75,0x1,0xa8,0x30,0xea,0x2e,0xc9,0xf1,0x76,0xb,0xef, + 0x43,0xa5,0xf2,0x55,0x96,0x7e,0xf3,0x13,0xe7,0x42,0x7c,0xa8,0x1b,0x66,0x71,0xa0, + 0x85,0x44,0x80,0x62,0x76,0xa5,0xd4,0xb5,0x95,0xc2,0x87,0x4a,0xd0,0x47,0x1f,0x66, + 0xff,0xb,0x7f,0xec,0xfb,0x6e,0x7f,0xc4,0xad,0xf1,0x0,0x0,0x0,0x0,0x49,0x45, + 0x4e,0x44,0xae,0x42,0x60,0x82, + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/logo.png + 0x0,0x0,0x22,0x1b, + 0x89, + 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, + 0x0,0x0,0xb6,0x0,0x0,0x0,0xa2,0x8,0x6,0x0,0x0,0x0,0xec,0xb7,0x37,0x89, + 0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13, + 0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0xa,0x4d,0x69,0x43,0x43,0x50,0x50,0x68,0x6f, + 0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66,0x69, + 0x6c,0x65,0x0,0x0,0x78,0xda,0x9d,0x53,0x77,0x58,0x93,0xf7,0x16,0x3e,0xdf,0xf7, + 0x65,0xf,0x56,0x42,0xd8,0xf0,0xb1,0x97,0x6c,0x81,0x0,0x22,0x23,0xac,0x8,0xc8, + 0x10,0x59,0xa2,0x10,0x92,0x0,0x61,0x84,0x10,0x12,0x40,0xc5,0x85,0x88,0xa,0x56, + 0x14,0x15,0x11,0x9c,0x48,0x55,0xc4,0x82,0xd5,0xa,0x48,0x9d,0x88,0xe2,0xa0,0x28, + 0xb8,0x67,0x41,0x8a,0x88,0x5a,0x8b,0x55,0x5c,0x38,0xee,0x1f,0xdc,0xa7,0xb5,0x7d, + 0x7a,0xef,0xed,0xed,0xfb,0xd7,0xfb,0xbc,0xe7,0x9c,0xe7,0xfc,0xce,0x79,0xcf,0xf, + 0x80,0x11,0x12,0x26,0x91,0xe6,0xa2,0x6a,0x0,0x39,0x52,0x85,0x3c,0x3a,0xd8,0x1f, + 0x8f,0x4f,0x48,0xc4,0xc9,0xbd,0x80,0x2,0x15,0x48,0xe0,0x4,0x20,0x10,0xe6,0xcb, + 0xc2,0x67,0x5,0xc5,0x0,0x0,0xf0,0x3,0x79,0x78,0x7e,0x74,0xb0,0x3f,0xfc,0x1, + 0xaf,0x6f,0x0,0x2,0x0,0x70,0xd5,0x2e,0x24,0x12,0xc7,0xe1,0xff,0x83,0xba,0x50, + 0x26,0x57,0x0,0x20,0x91,0x0,0xe0,0x22,0x12,0xe7,0xb,0x1,0x90,0x52,0x0,0xc8, + 0x2e,0x54,0xc8,0x14,0x0,0xc8,0x18,0x0,0xb0,0x53,0xb3,0x64,0xa,0x0,0x94,0x0, + 0x0,0x6c,0x79,0x7c,0x42,0x22,0x0,0xaa,0xd,0x0,0xec,0xf4,0x49,0x3e,0x5,0x0, + 0xd8,0xa9,0x93,0xdc,0x17,0x0,0xd8,0xa2,0x1c,0xa9,0x8,0x0,0x8d,0x1,0x0,0x99, + 0x28,0x47,0x24,0x2,0x40,0xbb,0x0,0x60,0x55,0x81,0x52,0x2c,0x2,0xc0,0xc2,0x0, + 0xa0,0xac,0x40,0x22,0x2e,0x4,0xc0,0xae,0x1,0x80,0x59,0xb6,0x32,0x47,0x2,0x80, + 0xbd,0x5,0x0,0x76,0x8e,0x58,0x90,0xf,0x40,0x60,0x0,0x80,0x99,0x42,0x2c,0xcc, + 0x0,0x20,0x38,0x2,0x0,0x43,0x1e,0x13,0xcd,0x3,0x20,0x4c,0x3,0xa0,0x30,0xd2, + 0xbf,0xe0,0xa9,0x5f,0x70,0x85,0xb8,0x48,0x1,0x0,0xc0,0xcb,0x95,0xcd,0x97,0x4b, + 0xd2,0x33,0x14,0xb8,0x95,0xd0,0x1a,0x77,0xf2,0xf0,0xe0,0xe2,0x21,0xe2,0xc2,0x6c, + 0xb1,0x42,0x61,0x17,0x29,0x10,0x66,0x9,0xe4,0x22,0x9c,0x97,0x9b,0x23,0x13,0x48, + 0xe7,0x3,0x4c,0xce,0xc,0x0,0x0,0x1a,0xf9,0xd1,0xc1,0xfe,0x38,0x3f,0x90,0xe7, + 0xe6,0xe4,0xe1,0xe6,0x66,0xe7,0x6c,0xef,0xf4,0xc5,0xa2,0xfe,0x6b,0xf0,0x6f,0x22, + 0x3e,0x21,0xf1,0xdf,0xfe,0xbc,0x8c,0x2,0x4,0x0,0x10,0x4e,0xcf,0xef,0xda,0x5f, + 0xe5,0xe5,0xd6,0x3,0x70,0xc7,0x1,0xb0,0x75,0xbf,0x6b,0xa9,0x5b,0x0,0xda,0x56, + 0x0,0x68,0xdf,0xf9,0x5d,0x33,0xdb,0x9,0xa0,0x5a,0xa,0xd0,0x7a,0xf9,0x8b,0x79, + 0x38,0xfc,0x40,0x1e,0x9e,0xa1,0x50,0xc8,0x3c,0x1d,0x1c,0xa,0xb,0xb,0xed,0x25, + 0x62,0xa1,0xbd,0x30,0xe3,0x8b,0x3e,0xff,0x33,0xe1,0x6f,0xe0,0x8b,0x7e,0xf6,0xfc, + 0x40,0x1e,0xfe,0xdb,0x7a,0xf0,0x0,0x71,0x9a,0x40,0x99,0xad,0xc0,0xa3,0x83,0xfd, + 0x71,0x61,0x6e,0x76,0xae,0x52,0x8e,0xe7,0xcb,0x4,0x42,0x31,0x6e,0xf7,0xe7,0x23, + 0xfe,0xc7,0x85,0x7f,0xfd,0x8e,0x29,0xd1,0xe2,0x34,0xb1,0x5c,0x2c,0x15,0x8a,0xf1, + 0x58,0x89,0xb8,0x50,0x22,0x4d,0xc7,0x79,0xb9,0x52,0x91,0x44,0x21,0xc9,0x95,0xe2, + 0x12,0xe9,0x7f,0x32,0xf1,0x1f,0x96,0xfd,0x9,0x93,0x77,0xd,0x0,0xac,0x86,0x4f, + 0xc0,0x4e,0xb6,0x7,0xb5,0xcb,0x6c,0xc0,0x7e,0xee,0x1,0x2,0x8b,0xe,0x58,0xd2, + 0x76,0x0,0x40,0x7e,0xf3,0x2d,0x8c,0x1a,0xb,0x91,0x0,0x10,0x67,0x34,0x32,0x79, + 0xf7,0x0,0x0,0x93,0xbf,0xf9,0x8f,0x40,0x2b,0x1,0x0,0xcd,0x97,0xa4,0xe3,0x0, + 0x0,0xbc,0xe8,0x18,0x5c,0xa8,0x94,0x17,0x4c,0xc6,0x8,0x0,0x0,0x44,0xa0,0x81, + 0x2a,0xb0,0x41,0x7,0xc,0xc1,0x14,0xac,0xc0,0xe,0x9c,0xc1,0x1d,0xbc,0xc0,0x17, + 0x2,0x61,0x6,0x44,0x40,0xc,0x24,0xc0,0x3c,0x10,0x42,0x6,0xe4,0x80,0x1c,0xa, + 0xa1,0x18,0x96,0x41,0x19,0x54,0xc0,0x3a,0xd8,0x4,0xb5,0xb0,0x3,0x1a,0xa0,0x11, + 0x9a,0xe1,0x10,0xb4,0xc1,0x31,0x38,0xd,0xe7,0xe0,0x12,0x5c,0x81,0xeb,0x70,0x17, + 0x6,0x60,0x18,0x9e,0xc2,0x18,0xbc,0x86,0x9,0x4,0x41,0xc8,0x8,0x13,0x61,0x21, + 0x3a,0x88,0x11,0x62,0x8e,0xd8,0x22,0xce,0x8,0x17,0x99,0x8e,0x4,0x22,0x61,0x48, + 0x34,0x92,0x80,0xa4,0x20,0xe9,0x88,0x14,0x51,0x22,0xc5,0xc8,0x72,0xa4,0x2,0xa9, + 0x42,0x6a,0x91,0x5d,0x48,0x23,0xf2,0x2d,0x72,0x14,0x39,0x8d,0x5c,0x40,0xfa,0x90, + 0xdb,0xc8,0x20,0x32,0x8a,0xfc,0x8a,0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3,0xd4, + 0x2,0x75,0x40,0xb9,0xa8,0x1f,0x1a,0x8a,0xc6,0xa0,0x73,0xd1,0x74,0x34,0xf,0x5d, + 0x80,0x96,0xa2,0x6b,0xd1,0x1a,0xb4,0x1e,0x3d,0x80,0xb6,0xa2,0xa7,0xd1,0x4b,0xe8, + 0x75,0x74,0x0,0x7d,0x8a,0x8e,0x63,0x80,0xd1,0x31,0xe,0x66,0x8c,0xd9,0x61,0x5c, + 0x8c,0x87,0x45,0x60,0x89,0x58,0x1a,0x26,0xc7,0x16,0x63,0xe5,0x58,0x35,0x56,0x8f, + 0x35,0x63,0x1d,0x58,0x37,0x76,0x15,0x1b,0xc0,0x9e,0x61,0xef,0x8,0x24,0x2,0x8b, + 0x80,0x13,0xec,0x8,0x5e,0x84,0x10,0xc2,0x6c,0x82,0x90,0x90,0x47,0x58,0x4c,0x58, + 0x43,0xa8,0x25,0xec,0x23,0xb4,0x12,0xba,0x8,0x57,0x9,0x83,0x84,0x31,0xc2,0x27, + 0x22,0x93,0xa8,0x4f,0xb4,0x25,0x7a,0x12,0xf9,0xc4,0x78,0x62,0x3a,0xb1,0x90,0x58, + 0x46,0xac,0x26,0xee,0x21,0x1e,0x21,0x9e,0x25,0x5e,0x27,0xe,0x13,0x5f,0x93,0x48, + 0x24,0xe,0xc9,0x92,0xe4,0x4e,0xa,0x21,0x25,0x90,0x32,0x49,0xb,0x49,0x6b,0x48, + 0xdb,0x48,0x2d,0xa4,0x53,0xa4,0x3e,0xd2,0x10,0x69,0x9c,0x4c,0x26,0xeb,0x90,0x6d, + 0xc9,0xde,0xe4,0x8,0xb2,0x80,0xac,0x20,0x97,0x91,0xb7,0x90,0xf,0x90,0x4f,0x92, + 0xfb,0xc9,0xc3,0xe4,0xb7,0x14,0x3a,0xc5,0x88,0xe2,0x4c,0x9,0xa2,0x24,0x52,0xa4, + 0x94,0x12,0x4a,0x35,0x65,0x3f,0xe5,0x4,0xa5,0x9f,0x32,0x42,0x99,0xa0,0xaa,0x51, + 0xcd,0xa9,0x9e,0xd4,0x8,0xaa,0x88,0x3a,0x9f,0x5a,0x49,0x6d,0xa0,0x76,0x50,0x2f, + 0x53,0x87,0xa9,0x13,0x34,0x75,0x9a,0x25,0xcd,0x9b,0x16,0x43,0xcb,0xa4,0x2d,0xa3, + 0xd5,0xd0,0x9a,0x69,0x67,0x69,0xf7,0x68,0x2f,0xe9,0x74,0xba,0x9,0xdd,0x83,0x1e, + 0x45,0x97,0xd0,0x97,0xd2,0x6b,0xe8,0x7,0xe9,0xe7,0xe9,0x83,0xf4,0x77,0xc,0xd, + 0x86,0xd,0x83,0xc7,0x48,0x62,0x28,0x19,0x6b,0x19,0x7b,0x19,0xa7,0x18,0xb7,0x19, + 0x2f,0x99,0x4c,0xa6,0x5,0xd3,0x97,0x99,0xc8,0x54,0x30,0xd7,0x32,0x1b,0x99,0x67, + 0x98,0xf,0x98,0x6f,0x55,0x58,0x2a,0xf6,0x2a,0x7c,0x15,0x91,0xca,0x12,0x95,0x3a, + 0x95,0x56,0x95,0x7e,0x95,0xe7,0xaa,0x54,0x55,0x73,0x55,0x3f,0xd5,0x79,0xaa,0xb, + 0x54,0xab,0x55,0xf,0xab,0x5e,0x56,0x7d,0xa6,0x46,0x55,0xb3,0x50,0xe3,0xa9,0x9, + 0xd4,0x16,0xab,0xd5,0xa9,0x1d,0x55,0xbb,0xa9,0x36,0xae,0xce,0x52,0x77,0x52,0x8f, + 0x50,0xcf,0x51,0x5f,0xa3,0xbe,0x5f,0xfd,0x82,0xfa,0x63,0xd,0xb2,0x86,0x85,0x46, + 0xa0,0x86,0x48,0xa3,0x54,0x63,0xb7,0xc6,0x19,0x8d,0x21,0x16,0xc6,0x32,0x65,0xf1, + 0x58,0x42,0xd6,0x72,0x56,0x3,0xeb,0x2c,0x6b,0x98,0x4d,0x62,0x5b,0xb2,0xf9,0xec, + 0x4c,0x76,0x5,0xfb,0x1b,0x76,0x2f,0x7b,0x4c,0x53,0x43,0x73,0xaa,0x66,0xac,0x66, + 0x91,0x66,0x9d,0xe6,0x71,0xcd,0x1,0xe,0xc6,0xb1,0xe0,0xf0,0x39,0xd9,0x9c,0x4a, + 0xce,0x21,0xce,0xd,0xce,0x7b,0x2d,0x3,0x2d,0x3f,0x2d,0xb1,0xd6,0x6a,0xad,0x66, + 0xad,0x7e,0xad,0x37,0xda,0x7a,0xda,0xbe,0xda,0x62,0xed,0x72,0xed,0x16,0xed,0xeb, + 0xda,0xef,0x75,0x70,0x9d,0x40,0x9d,0x2c,0x9d,0xf5,0x3a,0x6d,0x3a,0xf7,0x75,0x9, + 0xba,0x36,0xba,0x51,0xba,0x85,0xba,0xdb,0x75,0xcf,0xea,0x3e,0xd3,0x63,0xeb,0x79, + 0xe9,0x9,0xf5,0xca,0xf5,0xe,0xe9,0xdd,0xd1,0x47,0xf5,0x6d,0xf4,0xa3,0xf5,0x17, + 0xea,0xef,0xd6,0xef,0xd1,0x1f,0x37,0x30,0x34,0x8,0x36,0x90,0x19,0x6c,0x31,0x38, + 0x63,0xf0,0xcc,0x90,0x63,0xe8,0x6b,0x98,0x69,0xb8,0xd1,0xf0,0x84,0xe1,0xa8,0x11, + 0xcb,0x68,0xba,0x91,0xc4,0x68,0xa3,0xd1,0x49,0xa3,0x27,0xb8,0x26,0xee,0x87,0x67, + 0xe3,0x35,0x78,0x17,0x3e,0x66,0xac,0x6f,0x1c,0x62,0xac,0x34,0xde,0x65,0xdc,0x6b, + 0x3c,0x61,0x62,0x69,0x32,0xdb,0xa4,0xc4,0xa4,0xc5,0xe4,0xbe,0x29,0xcd,0x94,0x6b, + 0x9a,0x66,0xba,0xd1,0xb4,0xd3,0x74,0xcc,0xcc,0xc8,0x2c,0xdc,0xac,0xd8,0xac,0xc9, + 0xec,0x8e,0x39,0xd5,0x9c,0x6b,0x9e,0x61,0xbe,0xd9,0xbc,0xdb,0xfc,0x8d,0x85,0xa5, + 0x45,0x9c,0xc5,0x4a,0x8b,0x36,0x8b,0xc7,0x96,0xda,0x96,0x7c,0xcb,0x5,0x96,0x4d, + 0x96,0xf7,0xac,0x98,0x56,0x3e,0x56,0x79,0x56,0xf5,0x56,0xd7,0xac,0x49,0xd6,0x5c, + 0xeb,0x2c,0xeb,0x6d,0xd6,0x57,0x6c,0x50,0x1b,0x57,0x9b,0xc,0x9b,0x3a,0x9b,0xcb, + 0xb6,0xa8,0xad,0x9b,0xad,0xc4,0x76,0x9b,0x6d,0xdf,0x14,0xe2,0x14,0x8f,0x29,0xd2, + 0x29,0xf5,0x53,0x6e,0xda,0x31,0xec,0xfc,0xec,0xa,0xec,0x9a,0xec,0x6,0xed,0x39, + 0xf6,0x61,0xf6,0x25,0xf6,0x6d,0xf6,0xcf,0x1d,0xcc,0x1c,0x12,0x1d,0xd6,0x3b,0x74, + 0x3b,0x7c,0x72,0x74,0x75,0xcc,0x76,0x6c,0x70,0xbc,0xeb,0xa4,0xe1,0x34,0xc3,0xa9, + 0xc4,0xa9,0xc3,0xe9,0x57,0x67,0x1b,0x67,0xa1,0x73,0x9d,0xf3,0x35,0x17,0xa6,0x4b, + 0x90,0xcb,0x12,0x97,0x76,0x97,0x17,0x53,0x6d,0xa7,0x8a,0xa7,0x6e,0x9f,0x7a,0xcb, + 0x95,0xe5,0x1a,0xee,0xba,0xd2,0xb5,0xd3,0xf5,0xa3,0x9b,0xbb,0x9b,0xdc,0xad,0xd9, + 0x6d,0xd4,0xdd,0xcc,0x3d,0xc5,0x7d,0xab,0xfb,0x4d,0x2e,0x9b,0x1b,0xc9,0x5d,0xc3, + 0x3d,0xef,0x41,0xf4,0xf0,0xf7,0x58,0xe2,0x71,0xcc,0xe3,0x9d,0xa7,0x9b,0xa7,0xc2, + 0xf3,0x90,0xe7,0x2f,0x5e,0x76,0x5e,0x59,0x5e,0xfb,0xbd,0x1e,0x4f,0xb3,0x9c,0x26, + 0x9e,0xd6,0x30,0x6d,0xc8,0xdb,0xc4,0x5b,0xe0,0xbd,0xcb,0x7b,0x60,0x3a,0x3e,0x3d, + 0x65,0xfa,0xce,0xe9,0x3,0x3e,0xc6,0x3e,0x2,0x9f,0x7a,0x9f,0x87,0xbe,0xa6,0xbe, + 0x22,0xdf,0x3d,0xbe,0x23,0x7e,0xd6,0x7e,0x99,0x7e,0x7,0xfc,0x9e,0xfb,0x3b,0xfa, + 0xcb,0xfd,0x8f,0xf8,0xbf,0xe1,0x79,0xf2,0x16,0xf1,0x4e,0x5,0x60,0x1,0xc1,0x1, + 0xe5,0x1,0xbd,0x81,0x1a,0x81,0xb3,0x3,0x6b,0x3,0x1f,0x4,0x99,0x4,0xa5,0x7, + 0x35,0x5,0x8d,0x5,0xbb,0x6,0x2f,0xc,0x3e,0x15,0x42,0xc,0x9,0xd,0x59,0x1f, + 0x72,0x93,0x6f,0xc0,0x17,0xf2,0x1b,0xf9,0x63,0x33,0xdc,0x67,0x2c,0x9a,0xd1,0x15, + 0xca,0x8,0x9d,0x15,0x5a,0x1b,0xfa,0x30,0xcc,0x26,0x4c,0x1e,0xd6,0x11,0x8e,0x86, + 0xcf,0x8,0xdf,0x10,0x7e,0x6f,0xa6,0xf9,0x4c,0xe9,0xcc,0xb6,0x8,0x88,0xe0,0x47, + 0x6c,0x88,0xb8,0x1f,0x69,0x19,0x99,0x17,0xf9,0x7d,0x14,0x29,0x2a,0x32,0xaa,0x2e, + 0xea,0x51,0xb4,0x53,0x74,0x71,0x74,0xf7,0x2c,0xd6,0xac,0xe4,0x59,0xfb,0x67,0xbd, + 0x8e,0xf1,0x8f,0xa9,0x8c,0xb9,0x3b,0xdb,0x6a,0xb6,0x72,0x76,0x67,0xac,0x6a,0x6c, + 0x52,0x6c,0x63,0xec,0x9b,0xb8,0x80,0xb8,0xaa,0xb8,0x81,0x78,0x87,0xf8,0x45,0xf1, + 0x97,0x12,0x74,0x13,0x24,0x9,0xed,0x89,0xe4,0xc4,0xd8,0xc4,0x3d,0x89,0xe3,0x73, + 0x2,0xe7,0x6c,0x9a,0x33,0x9c,0xe4,0x9a,0x54,0x96,0x74,0x63,0xae,0xe5,0xdc,0xa2, + 0xb9,0x17,0xe6,0xe9,0xce,0xcb,0x9e,0x77,0x3c,0x59,0x35,0x59,0x90,0x7c,0x38,0x85, + 0x98,0x12,0x97,0xb2,0x3f,0xe5,0x83,0x20,0x42,0x50,0x2f,0x18,0x4f,0xe5,0xa7,0x6e, + 0x4d,0x1d,0x13,0xf2,0x84,0x9b,0x85,0x4f,0x45,0xbe,0xa2,0x8d,0xa2,0x51,0xb1,0xb7, + 0xb8,0x4a,0x3c,0x92,0xe6,0x9d,0x56,0x95,0xf6,0x38,0xdd,0x3b,0x7d,0x43,0xfa,0x68, + 0x86,0x4f,0x46,0x75,0xc6,0x33,0x9,0x4f,0x52,0x2b,0x79,0x91,0x19,0x92,0xb9,0x23, + 0xf3,0x4d,0x56,0x44,0xd6,0xde,0xac,0xcf,0xd9,0x71,0xd9,0x2d,0x39,0x94,0x9c,0x94, + 0x9c,0xa3,0x52,0xd,0x69,0x96,0xb4,0x2b,0xd7,0x30,0xb7,0x28,0xb7,0x4f,0x66,0x2b, + 0x2b,0x93,0xd,0xe4,0x79,0xe6,0x6d,0xca,0x1b,0x93,0x87,0xca,0xf7,0xe4,0x23,0xf9, + 0x73,0xf3,0xdb,0x15,0x6c,0x85,0x4c,0xd1,0xa3,0xb4,0x52,0xae,0x50,0xe,0x16,0x4c, + 0x2f,0xa8,0x2b,0x78,0x5b,0x18,0x5b,0x78,0xb8,0x48,0xbd,0x48,0x5a,0xd4,0x33,0xdf, + 0x66,0xfe,0xea,0xf9,0x23,0xb,0x82,0x16,0x7c,0xbd,0x90,0xb0,0x50,0xb8,0xb0,0xb3, + 0xd8,0xb8,0x78,0x59,0xf1,0xe0,0x22,0xbf,0x45,0xbb,0x16,0x23,0x8b,0x53,0x17,0x77, + 0x2e,0x31,0x5d,0x52,0xba,0x64,0x78,0x69,0xf0,0xd2,0x7d,0xcb,0x68,0xcb,0xb2,0x96, + 0xfd,0x50,0xe2,0x58,0x52,0x55,0xf2,0x6a,0x79,0xdc,0xf2,0x8e,0x52,0x83,0xd2,0xa5, + 0xa5,0x43,0x2b,0x82,0x57,0x34,0x95,0xa9,0x94,0xc9,0xcb,0x6e,0xae,0xf4,0x5a,0xb9, + 0x63,0x15,0x61,0x95,0x64,0x55,0xef,0x6a,0x97,0xd5,0x5b,0x56,0x7f,0x2a,0x17,0x95, + 0x5f,0xac,0x70,0xac,0xa8,0xae,0xf8,0xb0,0x46,0xb8,0xe6,0xe2,0x57,0x4e,0x5f,0xd5, + 0x7c,0xf5,0x79,0x6d,0xda,0xda,0xde,0x4a,0xb7,0xca,0xed,0xeb,0x48,0xeb,0xa4,0xeb, + 0x6e,0xac,0xf7,0x59,0xbf,0xaf,0x4a,0xbd,0x6a,0x41,0xd5,0xd0,0x86,0xf0,0xd,0xad, + 0x1b,0xf1,0x8d,0xe5,0x1b,0x5f,0x6d,0x4a,0xde,0x74,0xa1,0x7a,0x6a,0xf5,0x8e,0xcd, + 0xb4,0xcd,0xca,0xcd,0x3,0x35,0x61,0x35,0xed,0x5b,0xcc,0xb6,0xac,0xdb,0xf2,0xa1, + 0x36,0xa3,0xf6,0x7a,0x9d,0x7f,0x5d,0xcb,0x56,0xfd,0xad,0xab,0xb7,0xbe,0xd9,0x26, + 0xda,0xd6,0xbf,0xdd,0x77,0x7b,0xf3,0xe,0x83,0x1d,0x15,0x3b,0xde,0xef,0x94,0xec, + 0xbc,0xb5,0x2b,0x78,0x57,0x6b,0xbd,0x45,0x7d,0xf5,0x6e,0xd2,0xee,0x82,0xdd,0x8f, + 0x1a,0x62,0x1b,0xba,0xbf,0xe6,0x7e,0xdd,0xb8,0x47,0x77,0x4f,0xc5,0x9e,0x8f,0x7b, + 0xa5,0x7b,0x7,0xf6,0x45,0xef,0xeb,0x6a,0x74,0x6f,0x6c,0xdc,0xaf,0xbf,0xbf,0xb2, + 0x9,0x6d,0x52,0x36,0x8d,0x1e,0x48,0x3a,0x70,0xe5,0x9b,0x80,0x6f,0xda,0x9b,0xed, + 0x9a,0x77,0xb5,0x70,0x5a,0x2a,0xe,0xc2,0x41,0xe5,0xc1,0x27,0xdf,0xa6,0x7c,0x7b, + 0xe3,0x50,0xe8,0xa1,0xce,0xc3,0xdc,0xc3,0xcd,0xdf,0x99,0x7f,0xb7,0xf5,0x8,0xeb, + 0x48,0x79,0x2b,0xd2,0x3a,0xbf,0x75,0xac,0x2d,0xa3,0x6d,0xa0,0x3d,0xa1,0xbd,0xef, + 0xe8,0x8c,0xa3,0x9d,0x1d,0x5e,0x1d,0x47,0xbe,0xb7,0xff,0x7e,0xef,0x31,0xe3,0x63, + 0x75,0xc7,0x35,0x8f,0x57,0x9e,0xa0,0x9d,0x28,0x3d,0xf1,0xf9,0xe4,0x82,0x93,0xe3, + 0xa7,0x64,0xa7,0x9e,0x9d,0x4e,0x3f,0x3d,0xd4,0x99,0xdc,0x79,0xf7,0x4c,0xfc,0x99, + 0x6b,0x5d,0x51,0x5d,0xbd,0x67,0x43,0xcf,0x9e,0x3f,0x17,0x74,0xee,0x4c,0xb7,0x5f, + 0xf7,0xc9,0xf3,0xde,0xe7,0x8f,0x5d,0xf0,0xbc,0x70,0xf4,0x22,0xf7,0x62,0xdb,0x25, + 0xb7,0x4b,0xad,0x3d,0xae,0x3d,0x47,0x7e,0x70,0xfd,0xe1,0x48,0xaf,0x5b,0x6f,0xeb, + 0x65,0xf7,0xcb,0xed,0x57,0x3c,0xae,0x74,0xf4,0x4d,0xeb,0x3b,0xd1,0xef,0xd3,0x7f, + 0xfa,0x6a,0xc0,0xd5,0x73,0xd7,0xf8,0xd7,0x2e,0x5d,0x9f,0x79,0xbd,0xef,0xc6,0xec, + 0x1b,0xb7,0x6e,0x26,0xdd,0x1c,0xb8,0x25,0xba,0xf5,0xf8,0x76,0xf6,0xed,0x17,0x77, + 0xa,0xee,0x4c,0xdc,0x5d,0x7a,0x8f,0x78,0xaf,0xfc,0xbe,0xda,0xfd,0xea,0x7,0xfa, + 0xf,0xea,0x7f,0xb4,0xfe,0xb1,0x65,0xc0,0x6d,0xe0,0xf8,0x60,0xc0,0x60,0xcf,0xc3, + 0x59,0xf,0xef,0xe,0x9,0x87,0x9e,0xfe,0x94,0xff,0xd3,0x87,0xe1,0xd2,0x47,0xcc, + 0x47,0xd5,0x23,0x46,0x23,0x8d,0x8f,0x9d,0x1f,0x1f,0x1b,0xd,0x1a,0xbd,0xf2,0x64, + 0xce,0x93,0xe1,0xa7,0xb2,0xa7,0x13,0xcf,0xca,0x7e,0x56,0xff,0x79,0xeb,0x73,0xab, + 0xe7,0xdf,0xfd,0xe2,0xfb,0x4b,0xcf,0x58,0xfc,0xd8,0xf0,0xb,0xf9,0x8b,0xcf,0xbf, + 0xae,0x79,0xa9,0xf3,0x72,0xef,0xab,0xa9,0xaf,0x3a,0xc7,0x23,0xc7,0x1f,0xbc,0xce, + 0x79,0x3d,0xf1,0xa6,0xfc,0xad,0xce,0xdb,0x7d,0xef,0xb8,0xef,0xba,0xdf,0xc7,0xbd, + 0x1f,0x99,0x28,0xfc,0x40,0xfe,0x50,0xf3,0xd1,0xfa,0x63,0xc7,0xa7,0xd0,0x4f,0xf7, + 0x3e,0xe7,0x7c,0xfe,0xfc,0x2f,0xf7,0x84,0xf3,0xfb,0x25,0xd2,0x9f,0x33,0x0,0x0, + 0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x25,0x0,0x0,0x80,0x83,0x0,0x0, + 0xf9,0xff,0x0,0x0,0x80,0xe9,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0, + 0x3a,0x98,0x0,0x0,0x17,0x6f,0x92,0x5f,0xc5,0x46,0x0,0x0,0x17,0x48,0x49,0x44, + 0x41,0x54,0x78,0xda,0xec,0x9d,0x79,0x54,0x53,0xd7,0xda,0xc6,0xf,0x48,0x49,0x0, + 0x3,0x88,0x40,0x5,0x27,0x54,0x54,0x4,0x14,0xc5,0xaa,0xd8,0xd6,0x56,0x5a,0x6c, + 0x1d,0x6e,0x69,0x15,0x97,0x5e,0x51,0x7a,0x97,0xb4,0xb8,0xbc,0xd6,0x5b,0x7b,0xd5, + 0x4f,0xfa,0xd9,0x5b,0x5a,0x5d,0xb,0x3f,0xa9,0x5c,0xc5,0xda,0x6a,0xc5,0x8a,0xd6, + 0xb1,0x58,0x5a,0x87,0x6a,0xb1,0x80,0x62,0x91,0x41,0x91,0x29,0x18,0xe6,0x21,0x10, + 0xc6,0x24,0x24,0x90,0x79,0x26,0xdf,0x1f,0x77,0xd9,0xab,0x10,0x49,0x72,0x72,0x86, + 0xbd,0x4f,0xce,0xb3,0x56,0xd7,0x42,0x4a,0xce,0x39,0x7b,0xef,0xdf,0x79,0xf2,0xee, + 0xe9,0xdd,0xe,0x46,0xa3,0x11,0xa1,0x45,0x8b,0x6a,0x72,0xa4,0xab,0x80,0x16,0xd, + 0x36,0x2d,0x5a,0x90,0xc8,0xc9,0xda,0xf,0x38,0x38,0x38,0xd0,0xb5,0x86,0xb1,0xd2, + 0x32,0xd2,0xb7,0x8f,0xf5,0xf1,0xf6,0x9,0xc,0x9c,0x1e,0x36,0x6a,0xd4,0x28,0x27, + 0xc4,0x88,0x20,0x8e,0x8e,0xe,0xa3,0x6,0x7,0x8d,0x6,0x99,0x5c,0x26,0xe6,0xf3, + 0xf9,0x1d,0x22,0x61,0x9f,0xe0,0x1f,0x7f,0x8b,0x3f,0x6a,0x8f,0xf5,0x83,0x26,0x5c, + 0x76,0xb0,0xf6,0x43,0x34,0xd8,0xd6,0x69,0xc6,0x8c,0x19,0xbe,0xaf,0xbf,0xf9,0xe6, + 0x9c,0x99,0xc1,0x41,0x81,0xb3,0x82,0x83,0xc3,0x7c,0x7c,0x7d,0x27,0xfa,0xf9,0xfa, + 0x4e,0x73,0x65,0xba,0x78,0x38,0x39,0x39,0x31,0x5e,0x70,0x72,0x62,0x20,0x8,0x82, + 0xb8,0x38,0x33,0xdc,0x46,0xba,0x8e,0x4e,0xaf,0xd7,0x68,0xf5,0x3a,0x8d,0x4e,0xaf, + 0x57,0x2b,0xd5,0x6a,0x69,0xbf,0x64,0xa0,0x87,0xcf,0x17,0xb6,0xb5,0xb4,0x34,0xd7, + 0x70,0xaa,0xab,0x39,0xd5,0x55,0xec,0x96,0x7b,0x79,0x79,0xf5,0x34,0xd8,0x34,0xd8, + 0x98,0x6b,0x5b,0xe2,0xee,0xe5,0xb3,0x66,0x87,0xce,0x9c,0x3b,0x67,0xce,0xcb,0xd3, + 0x27,0x5,0x2c,0x7c,0xd1,0x63,0x4c,0x0,0xd1,0xcf,0x30,0xa0,0x52,0x8,0x1e,0xb7, + 0x34,0xde,0x63,0x57,0xb1,0x8b,0x1f,0x16,0x16,0x57,0x5c,0x38,0x79,0xea,0x3e,0xd, + 0x36,0xd,0xb6,0xd5,0x8a,0x5e,0xb3,0x3a,0xfc,0xdd,0xd5,0xab,0x97,0x4f,0x9d,0x36, + 0x35,0x64,0xe9,0xe2,0x57,0x62,0x41,0x7a,0x36,0xb5,0x56,0xab,0xa8,0xe7,0xb6,0x94, + 0x54,0x54,0x54,0xe4,0xb3,0xcb,0x2b,0xd8,0x5f,0xff,0xfb,0xf0,0x2d,0x7b,0x1,0x1b, + 0x31,0x1a,0x8d,0x56,0xfd,0x47,0xeb,0x3f,0x2a,0xe1,0xb0,0xaf,0xe9,0xd,0x6,0x9d, + 0x11,0x32,0xb1,0x5b,0x9b,0xee,0xee,0x3b,0x7c,0x28,0xe,0x36,0xb0,0xad,0xe6,0x94, + 0x6,0xdb,0x72,0xa5,0x1c,0x3d,0x92,0x50,0x59,0x5f,0x9b,0xdb,0x37,0xd0,0xdf,0xad, + 0xd4,0xa8,0xe5,0x46,0x48,0xa5,0xd2,0xa8,0xe5,0x5d,0x42,0x7e,0x53,0xfa,0xb9,0x1f, + 0x12,0x19,0x4c,0xa6,0x13,0xd,0xb6,0x9d,0x82,0x5d,0x50,0x59,0x96,0x69,0xa4,0xb0, + 0xea,0x78,0xdc,0xe2,0xa4,0x43,0x7,0x63,0x69,0xb0,0xed,0x40,0x4b,0xdf,0x7c,0x33, + 0x28,0xfb,0xee,0x9d,0xf4,0x4e,0x41,0x6f,0x93,0x5c,0xa5,0x94,0x18,0x29,0x2e,0xb9, + 0x4a,0x25,0xa9,0x6c,0xa8,0xcd,0xdd,0xbb,0xff,0xcb,0x75,0x34,0xd8,0x14,0x55,0x5d, + 0x3b,0xb7,0xd8,0x68,0xc7,0xea,0x57,0xc8,0xf9,0xe9,0x99,0x17,0x13,0x69,0xb0,0x29, + 0xa0,0x71,0xfe,0x7e,0xee,0xa5,0x35,0xd5,0x37,0x45,0x52,0x49,0x37,0x8c,0x9d,0x42, + 0xac,0xa5,0xd4,0xa8,0xe5,0x65,0x9c,0xea,0xec,0x65,0x6f,0xbd,0x15,0x42,0x83,0xd, + 0xa1,0x18,0x4c,0xa6,0x53,0xd6,0x9d,0xdb,0xa9,0x46,0x5a,0x23,0xc6,0xe0,0xf1,0x1f, + 0x6d,0x8d,0xa4,0xc1,0x86,0x44,0xab,0xde,0x8b,0xe,0x6b,0xed,0xee,0xa8,0xa2,0xd1, + 0x35,0x2f,0xbe,0x58,0xc4,0x4b,0x3f,0x77,0x36,0x91,0x6,0x1b,0x70,0x5d,0xfa,0xf5, + 0x5a,0x32,0x8d,0xab,0xf5,0xea,0x1d,0x10,0x73,0xf7,0xec,0xff,0x22,0x86,0x6,0x1b, + 0x30,0x5,0xcf,0xe,0xf5,0xab,0xac,0xab,0xcd,0x15,0x49,0x25,0x7c,0x1a,0x53,0x94, + 0x9d,0x4b,0x99,0x94,0x7f,0xe2,0xec,0xe9,0x5d,0x34,0xd8,0x80,0xe8,0xf4,0x4f,0x97, + 0xf7,0xd2,0x58,0x62,0x27,0x4e,0x6b,0x73,0x1,0xd,0x36,0xc9,0x1d,0xc4,0xd3,0x97, + 0x2f,0xee,0x95,0xab,0x54,0x12,0x1a,0x47,0xec,0x47,0x4e,0xe6,0xce,0x9b,0x37,0x91, + 0x6,0x9b,0x60,0x45,0x6f,0x58,0x17,0xde,0x2e,0xe4,0x73,0x68,0xc,0xf1,0xd5,0xf9, + 0xdb,0xbf,0xee,0xa3,0xc1,0x26,0x48,0xcb,0x56,0xad,0x8,0xe9,0x10,0xf2,0xeb,0x68, + 0xec,0x88,0x51,0xca,0xd7,0x69,0x9,0x34,0xd8,0x4,0xa8,0x5f,0x2e,0xa3,0x3b,0x88, + 0x4,0x4a,0xa1,0x56,0x49,0x8e,0x65,0x7c,0xbf,0x3,0x4,0xb0,0x29,0xb9,0xe7,0x71, + 0x53,0xfc,0xe6,0x25,0xbd,0xa2,0x3e,0x2e,0xcb,0xc5,0xd5,0xb,0xa1,0x45,0x98,0x5c, + 0x19,0x4c,0xf7,0xf5,0xab,0xd7,0xec,0xda,0x93,0xf4,0x79,0xc,0xe9,0xf,0x43,0x35, + 0xc7,0x4e,0xf9,0xee,0x9b,0x4,0xaa,0x4f,0x89,0xf7,0x88,0x84,0xdc,0x66,0x5e,0x7b, + 0xf9,0x93,0x32,0xab,0x74,0x5a,0xa0,0x96,0xd0,0xea,0xd,0x6,0xdd,0xbe,0xc3,0x5f, + 0xc5,0x91,0xe9,0xd8,0x94,0x2,0xfb,0xe3,0x3d,0xbb,0x57,0x51,0x19,0xea,0x5e,0x89, + 0x98,0x7b,0xbd,0x28,0xff,0x98,0x89,0x86,0x7,0x4e,0x5d,0x7d,0x82,0xa6,0x65,0x2b, + 0x97,0x87,0xd0,0x60,0xdb,0xa8,0x84,0x8f,0xb7,0x47,0x51,0xd,0x64,0x41,0xbf,0x98, + 0x97,0x53,0x70,0x2f,0x63,0xa4,0x72,0x37,0xb4,0x73,0x1f,0x82,0xfa,0xfc,0xed,0xfc, + 0x1e,0x4e,0xf0,0x9c,0xd9,0x7e,0x34,0xd8,0x28,0xb5,0x32,0xfa,0x9d,0xb0,0x2e,0xa1, + 0xa0,0x89,0x32,0x40,0x4b,0x7,0x78,0xe7,0x6f,0xfc,0x62,0x76,0xf8,0x2c,0xeb,0xc6, + 0xf5,0x54,0xe1,0x40,0x7f,0x37,0xc8,0x65,0xc9,0xfa,0xed,0x66,0x2a,0xd,0x36,0x9a, + 0x8e,0x62,0xc2,0x7,0x4b,0xa8,0x10,0x7e,0x88,0xa5,0x12,0x7e,0xe6,0xd5,0x5f,0xe, + 0x5a,0x5a,0xee,0xd4,0xe3,0xdf,0x6c,0x85,0xa1,0x5c,0x7a,0x83,0x41,0x97,0x74,0x30, + 0x39,0x96,0x6,0xdb,0x4a,0x15,0x56,0x96,0x67,0xc1,0xe,0x75,0x5d,0x47,0x5b,0xb1, + 0xb5,0xe5,0x66,0x37,0xd6,0xdf,0x85,0xa5,0x7c,0x45,0x15,0x65,0x59,0x34,0xd8,0x56, + 0x28,0xfb,0xfe,0x1f,0xe9,0xb0,0xc2,0x2c,0x51,0xc8,0x45,0x65,0x9c,0xea,0x6c,0x54, + 0x6b,0x5e,0xae,0xc0,0xb7,0xe6,0x25,0xe5,0x9b,0xa3,0x9,0x34,0xd8,0x96,0xc,0xeb, + 0x1d,0x39,0x92,0x20,0x86,0x74,0x85,0x9e,0xde,0x60,0xd0,0xd9,0x52,0xf6,0xd6,0xee, + 0x4e,0xe8,0xd6,0x90,0x97,0xd5,0x3c,0xce,0xa6,0xc1,0x36,0xa3,0x7d,0xa9,0x29,0x71, + 0x30,0x2,0xad,0xd2,0xa8,0xe5,0x39,0x85,0x5,0x19,0xb6,0x94,0x3d,0xf9,0xe8,0xe1, + 0xcd,0xb0,0x7e,0x4b,0x1d,0x48,0x3b,0xbc,0x99,0x28,0xb0,0x81,0xcf,0x29,0x31,0x54, + 0x73,0xe7,0x87,0x4f,0x8c,0xdb,0x10,0xbb,0xb,0xb6,0xe7,0x56,0xeb,0xb4,0xa,0x17, + 0x6,0x73,0xb4,0xad,0xd7,0x79,0x6d,0xc9,0xab,0xcb,0x61,0x9d,0x99,0x5c,0x14,0x11, + 0x11,0x89,0x20,0xc8,0x19,0x7a,0xe6,0xd1,0x54,0x67,0xb1,0xa,0xae,0xce,0xa2,0x52, + 0xa3,0x96,0x97,0x72,0xd8,0x37,0xb1,0x2a,0xbf,0x4a,0xab,0x81,0x36,0x51,0x8f,0x40, + 0xd2,0xcf,0xa3,0xd7,0x8a,0x98,0x8a,0xab,0x8f,0x1e,0x49,0x98,0x3d,0x7d,0x66,0x24, + 0x4c,0xcf,0x5c,0x5e,0xcb,0xb9,0xb5,0x30,0x34,0xec,0x2f,0x58,0x5d,0x6f,0x40,0x26, + 0x13,0xc1,0xea,0xd8,0x2c,0x17,0x57,0xaf,0xb4,0x53,0x27,0xb7,0xd3,0x8e,0xfd,0x94, + 0xb6,0xed,0xda,0xb9,0x1c,0xaa,0x95,0x6e,0x2a,0x95,0x24,0xf3,0xe6,0xf5,0x83,0x28, + 0xdb,0xc4,0x68,0x1c,0xa1,0xb2,0x61,0x1e,0xb7,0x3f,0xfb,0xf3,0x95,0x24,0xda,0xb1, + 0x9f,0x52,0xec,0xc6,0x8d,0x1f,0xc2,0xe4,0x4e,0xd9,0xf7,0xf3,0x4f,0xad,0xff,0xcb, + 0xbb,0x9f,0xa2,0x81,0xda,0xd4,0xcf,0xcf,0x80,0x3d,0x68,0xd0,0xc3,0xea,0xda,0x1e, + 0x1e,0x1e,0x84,0xac,0xb8,0x84,0x2,0xec,0xb4,0xef,0x4f,0x6e,0x7f,0x65,0x5e,0x78, + 0xc,0xc,0xcf,0xaa,0xd6,0x6a,0x14,0x19,0x99,0x97,0x3e,0x5b,0xfb,0xd6,0xca,0xdd, + 0xb6,0x40,0x3d,0x92,0x6,0x8d,0xc6,0x41,0x58,0xc1,0xf6,0xf4,0xf0,0xf4,0xa1,0xc1, + 0x46,0x10,0x64,0xf2,0x94,0x29,0x5e,0xd1,0x2b,0x56,0x42,0xe3,0xd6,0xb7,0xb,0xb, + 0xbe,0xff,0xe0,0xaf,0x1b,0xf,0x60,0x1,0xb5,0x83,0x89,0x64,0xe4,0x45,0x9c,0xaa, + 0x5c,0x97,0x17,0x9c,0x5d,0x61,0x5,0x9b,0xc9,0x18,0xf9,0xe4,0x6,0xbb,0x89,0xb1, + 0x6f,0xdd,0xcf,0x3f,0x1,0xcb,0x18,0xf5,0xf9,0x9f,0xaf,0xec,0x43,0xd9,0x6,0xcf, + 0xc8,0x9a,0xbf,0x85,0x6e,0xa2,0xa6,0xae,0x26,0x1b,0x6f,0x46,0x81,0x8f,0xb1,0xd7, + 0xc7,0x6d,0x5a,0xbc,0x74,0x41,0x44,0x2c,0xc,0x4e,0x54,0x5e,0x5f,0x7b,0x3b,0x2e, + 0x66,0xdd,0x17,0x78,0x85,0x1f,0x4f,0x64,0x18,0x1c,0x84,0x36,0xbe,0x26,0x52,0x40, + 0x83,0xfd,0xcf,0xc4,0xff,0x49,0x74,0x65,0x30,0xdd,0x41,0xaf,0xc4,0x9a,0xd6,0xe6, + 0xfb,0xaf,0x86,0x85,0xaf,0xc5,0xe2,0x5a,0xe,0x66,0xce,0x42,0x81,0xb9,0xe3,0xf8, + 0x9f,0xfe,0xc1,0xa0,0xc1,0xae,0xc1,0xde,0x14,0xbf,0x79,0x49,0xd8,0xf4,0xa0,0x28, + 0xd0,0x1b,0x4a,0xa6,0x52,0x8a,0x43,0xa7,0x4d,0x7f,0xd,0x6d,0x8,0x62,0xd,0xd4, + 0x8,0x82,0x20,0x4e,0x8e,0xa3,0x9c,0x60,0x6,0x5b,0xa7,0xd5,0xa9,0xed,0x1a,0xec, + 0x8f,0x76,0x7e,0xb2,0x8b,0xe9,0xec,0xec,0x6,0x7a,0x43,0xb9,0xbb,0xba,0x8d,0x25, + 0xa,0x6a,0x4,0x41,0x90,0x51,0x8e,0x8e,0x50,0x83,0x2d,0x95,0x4a,0xc5,0x76,0xb, + 0xf6,0xb2,0x15,0xcb,0x43,0xa6,0x4d,0x98,0x14,0xe,0x7a,0x23,0xb5,0xf4,0x74,0x56, + 0xd0,0xd1,0xac,0x75,0x52,0x6b,0xd4,0x4a,0xbb,0x5,0xfb,0xd3,0x7d,0x5f,0x24,0xfa, + 0x78,0x78,0x4e,0x4,0xb9,0x81,0xba,0x45,0xc2,0xe6,0x40,0xff,0x89,0xf3,0x9,0x77, + 0x3c,0xa5,0x42,0xc,0x33,0xd8,0x9d,0x3c,0x1e,0xd7,0x2e,0xc1,0x66,0xb1,0x58,0x8c, + 0xf0,0xe0,0x90,0xb7,0x41,0x6f,0xa0,0xf1,0xde,0xbe,0xd3,0xc9,0xb8,0xaf,0x5c,0xa5, + 0x84,0x1a,0x6c,0x6e,0xb,0xb7,0xcd,0x2e,0xc1,0x4e,0xfb,0xfe,0xe4,0x2e,0x4f,0x37, + 0x96,0x2f,0xc8,0x8d,0x53,0x5e,0xcb,0xb9,0x6d,0xcb,0xe7,0xd1,0xc6,0xd7,0x64,0xbe, + 0x50,0x58,0x48,0x2c,0x93,0xf6,0x3c,0x28,0x2a,0xaa,0x21,0xe2,0x5e,0x40,0x9d,0xcc, + 0xcb,0x62,0xb1,0x18,0xa5,0xd5,0xec,0xfc,0xa0,0x80,0x29,0x8b,0x41,0x6e,0x20,0x7, + 0x1b,0x2a,0xc1,0xd2,0x19,0x46,0x6b,0xaf,0x1,0x83,0xaa,0x9a,0x1a,0xf2,0xe6,0xcd, + 0x8,0x5a,0x86,0xa2,0xce,0xe0,0x76,0xec,0xdd,0x5f,0xfe,0x6b,0x1d,0xe8,0x50,0xd7, + 0xb4,0xb6,0xdc,0x27,0xfb,0x25,0x51,0x6a,0xd4,0x52,0x18,0xc1,0x7e,0xf0,0xf0,0xe1, + 0x6d,0xa2,0xee,0x5,0x14,0xd8,0x73,0xe6,0xce,0x9d,0xf,0x7a,0xe3,0x14,0x14,0x17, + 0x5d,0x27,0x3d,0x14,0x6a,0xac,0xbd,0xd,0x1b,0xd4,0x3a,0x83,0x5e,0x73,0xef,0xee, + 0x9d,0x62,0xc2,0x6e,0x8,0xca,0x5a,0x91,0x5,0x8b,0x23,0x2,0x80,0x5f,0xe7,0x50, + 0xcb,0xc9,0xc6,0xa0,0xbe,0x2d,0x5e,0x17,0x32,0x92,0x78,0xbd,0x3d,0x50,0xa5,0x47, + 0x3e,0xfb,0xd3,0x8f,0x49,0x44,0x31,0xa,0xd4,0x5a,0x91,0x25,0x91,0x4b,0xc3,0x40, + 0x77,0x9d,0x8a,0xaa,0xca,0x7b,0x64,0x75,0x1a,0x87,0xaa,0xe4,0x51,0xe9,0x75,0x58, + 0xdc,0x5a,0x2c,0x97,0xf6,0xa4,0x7d,0x75,0xe8,0xc,0xa1,0x37,0x5,0xc5,0xb1,0xb3, + 0xb,0xee,0x1,0x9d,0x23,0x44,0x24,0x93,0x74,0x83,0xe2,0xd6,0x4f,0xd4,0x21,0xe8, + 0x5,0xde,0xb5,0xe5,0x2a,0x95,0x24,0xf9,0x70,0xea,0x66,0x22,0x19,0x5,0xca,0xb1, + 0x83,0xa7,0xcf,0x78,0x19,0x64,0xd7,0x69,0xea,0x68,0x2f,0x5,0xed,0x99,0x72,0xee, + 0xe5,0x9f,0x7,0xdd,0xad,0xeb,0xdb,0x5b,0x8b,0x3f,0xdb,0xb9,0xfb,0xc,0xe1,0x37, + 0x6,0xc5,0xb1,0x55,0x1a,0x70,0x77,0x5f,0x6b,0xf5,0xd8,0x2c,0xdc,0xc1,0xda,0xb1, + 0x11,0x4,0x41,0x8a,0x2a,0xcb,0xb2,0x24,0xa,0xb9,0x8,0x3c,0xa7,0x56,0x4a,0x8a, + 0xca,0x1e,0x65,0xb1,0x58,0x2c,0x6,0xd1,0x8c,0x2,0xe3,0xd8,0xa9,0xc7,0xbf,0xd9, + 0x8a,0x20,0xe0,0xe,0xcd,0x72,0x7b,0xbb,0xd9,0x38,0x99,0x8a,0xcd,0x85,0x7e,0x65, + 0xde,0x4b,0x6b,0x7,0x64,0xd2,0x1e,0xd0,0xea,0x4c,0x24,0x91,0x74,0xbc,0xf2,0xd2, + 0x82,0xb5,0x32,0x99,0x4c,0x43,0xc6,0xfd,0x81,0x0,0xfb,0xd5,0xd7,0x96,0x2c,0x67, + 0x3a,0x33,0x80,0x5d,0xc9,0x57,0x8a,0xd3,0xf8,0xab,0x3,0x46,0xb3,0x5d,0x93,0xc7, + 0xf9,0x87,0xd6,0xb7,0xb6,0x94,0x80,0x52,0x5f,0xdd,0x7d,0xc2,0xe6,0x6d,0x5b,0xb6, + 0x6c,0x24,0xf3,0x19,0x48,0x7,0x7b,0x9c,0xbf,0x9f,0xbb,0xaf,0xd7,0xd8,0x0,0x90, + 0xe3,0xc4,0xd6,0x96,0xd6,0x66,0xd0,0x63,0xd9,0x59,0xd3,0x2,0x81,0xe9,0xa3,0x9c, + 0xbd,0x78,0xe1,0xc0,0xad,0x1b,0xbf,0xb2,0x49,0x7d,0x8,0xb2,0x63,0xec,0xf8,0x6d, + 0x5b,0x23,0x41,0xee,0xd5,0x37,0x77,0xf2,0xca,0xb1,0xc,0x3d,0xb0,0x8e,0xb1,0x87, + 0x8a,0xd3,0xda,0x5c,0x20,0x57,0x29,0x49,0x39,0xa8,0xb5,0xb2,0xbe,0x36,0x77,0x6e, + 0x78,0xf8,0x44,0xb2,0x19,0x5,0x22,0xc6,0x9e,0x30,0x69,0xa2,0x1f,0xc8,0x4e,0xd8, + 0xdb,0x27,0xe4,0x22,0x10,0x29,0x74,0x6a,0xe0,0x6b,0x9c,0x96,0xa6,0x7c,0xc2,0x47, + 0x3f,0x3a,0xda,0x4a,0x36,0xae,0x5b,0xff,0x7e,0x55,0x45,0x45,0x7,0x10,0x15,0x41, + 0xb6,0x63,0x9f,0xcd,0xca,0x4c,0x2,0xd9,0xb1,0xb1,0xee,0x2c,0xe2,0xed,0xd8,0xcf, + 0xb8,0x77,0x53,0x63,0x1,0x5e,0xa9,0x96,0xf5,0x6,0x83,0xae,0x6f,0x60,0xa0,0xbb, + 0xae,0xa5,0xb9,0x78,0xef,0xfe,0x2f,0xd7,0x81,0xc4,0x28,0x10,0x69,0x84,0xb3,0xb, + 0xf2,0xd3,0x69,0xb0,0xf1,0x53,0xfa,0xe5,0xb,0x89,0xa,0x35,0xf6,0x67,0xc8,0x2b, + 0xd4,0x2a,0x9,0xa8,0xe6,0xb,0x4,0xd8,0xf,0xaa,0x2b,0xaf,0x1,0x3b,0xdb,0x28, + 0xb5,0x7d,0xb6,0x91,0x6c,0xb0,0x9f,0x56,0x59,0x35,0x3b,0xbb,0xa5,0x83,0x57,0xc5, + 0x17,0xf7,0xf1,0x94,0x1a,0xb5,0xdc,0x1a,0x77,0x16,0x4b,0x25,0xfc,0x2e,0x1,0xbf, + 0x29,0xe7,0xfe,0x1f,0x19,0xeb,0x37,0x6d,0x24,0x74,0x5,0x26,0x94,0xf9,0xb1,0x5d, + 0x5c,0x5c,0x80,0x4d,0xaf,0x20,0x83,0x7c,0xb7,0xca,0x50,0xbd,0x34,0x27,0x6c,0xc5, + 0x93,0x9f,0x73,0x4a,0xa,0x33,0xa6,0x4e,0xe,0x8,0x1b,0xeb,0xe1,0x31,0xc1,0xd3, + 0x75,0xf4,0xb0,0x8d,0x1d,0x3a,0x83,0x5e,0x23,0x94,0x4a,0x3a,0xda,0xba,0x3a,0xd8, + 0xad,0x5c,0x6e,0x4d,0x5c,0xf4,0x9a,0x2f,0xa0,0x2a,0x2c,0xd9,0x8e,0xdd,0xdc,0xd1, + 0x5e,0xe,0xaa,0x63,0x57,0x36,0xd6,0xe6,0xe2,0xe9,0xd8,0x78,0x9c,0x3b,0x8e,0x56, + 0x33,0x66,0xce,0xf0,0x5d,0xb0,0x68,0x51,0x40,0x70,0x68,0xa8,0x1f,0x83,0xc9,0x74, + 0x82,0x99,0x51,0x20,0x1c,0xdb,0xd9,0x19,0xdc,0x3c,0x74,0x6a,0x8d,0x46,0x81,0xe7, + 0xf5,0x3,0xa7,0x7,0x86,0x80,0x52,0xd6,0xc6,0x86,0x46,0x1,0x95,0xbe,0x9d,0x48, + 0x1f,0xee,0xf3,0x64,0xb9,0x3,0xbb,0xbf,0x91,0xd7,0xde,0x51,0x8f,0xe7,0xf5,0xa7, + 0x4e,0x9e,0x1c,0x86,0xd0,0xa2,0x26,0xd8,0x20,0x27,0x80,0x31,0xc,0x1a,0x70,0x4d, + 0xc7,0xe5,0xed,0x39,0x66,0x22,0x8d,0x20,0xe0,0x60,0xa3,0x1d,0x2a,0x73,0x74,0x70, + 0x1c,0x5,0x2c,0xd8,0x6,0x6c,0xf3,0xe4,0xd,0x5d,0x1b,0xe2,0xc5,0xf2,0xf0,0xcb, + 0x7f,0xf4,0xe0,0x22,0x8d,0x21,0xed,0xd8,0x44,0x83,0x8d,0xb9,0x63,0xf3,0x7,0xc4, + 0x6d,0xcf,0x74,0xda,0xa6,0x4c,0x5d,0x48,0x63,0x48,0x41,0xb0,0x81,0x16,0xe,0xa9, + 0x26,0xc6,0x8d,0x19,0x3b,0xe5,0xe9,0x7f,0xfb,0x8f,0xf5,0x9,0xcc,0xca,0xf9,0x2d, + 0x95,0xae,0x6c,0x1a,0x6c,0xe2,0x44,0xd0,0x1c,0xca,0xa2,0xb9,0xe1,0xab,0xe8,0xca, + 0xa6,0x18,0xd8,0x3a,0x83,0x5e,0x3,0x6a,0xe5,0x38,0x3b,0x33,0x18,0x78,0x5c,0x97, + 0xdb,0xd3,0xf5,0xcc,0x92,0xce,0x9,0x3e,0x2f,0x6,0x9d,0xce,0xbc,0xbc,0x97,0xc6, + 0x91,0x42,0x60,0x6b,0xf5,0x7a,0x35,0xa8,0x95,0x33,0x6a,0x14,0x3e,0x1d,0xdb,0xa9, + 0xfe,0x13,0xe6,0xe,0xfd,0xdd,0x5b,0x4b,0x23,0xe3,0x68,0x1c,0x29,0x4,0xf6,0xe0, + 0x20,0x31,0x19,0xee,0xd1,0x68,0x8c,0x97,0x17,0x61,0x63,0xec,0x13,0x7c,0x5f,0xc, + 0x3a,0x7d,0xf9,0x22,0xe9,0xae,0x3d,0x6f,0xfe,0xfc,0xf1,0x34,0xd8,0x66,0xc4,0x60, + 0x30,0xcc,0x8e,0x78,0xe8,0xf4,0xe0,0x86,0x22,0xee,0xa3,0x47,0xe3,0x76,0x26,0x61, + 0x7d,0x67,0xfb,0xb0,0xad,0x5c,0x8b,0x5e,0x5a,0x40,0xea,0x39,0xe9,0x46,0xa3,0xd1, + 0x58,0x51,0x56,0xd6,0x19,0x11,0x11,0x31,0x89,0x6,0x7b,0x4,0x6d,0xd8,0xb0,0xe1, + 0x75,0x73,0x7f,0xa3,0x24,0x70,0xf9,0xa3,0xb5,0xf2,0xf5,0xf6,0x9,0xc0,0xeb,0xda, + 0xb3,0x26,0x6,0xc,0xdb,0xca,0x15,0x34,0x75,0x1a,0x10,0x79,0xb,0xd7,0xff,0x2d, + 0x2e,0x92,0x6,0x1b,0x79,0xfe,0x6e,0xeb,0xe5,0xcb,0x57,0xbc,0x61,0x1e,0x6c,0x70, + 0x13,0x2c,0xba,0x32,0x99,0x1e,0x78,0x5e,0xbf,0x5d,0xc8,0x1f,0x96,0x52,0xb7,0xad, + 0xb7,0x9b,0x43,0x76,0xb9,0xdf,0x5a,0xb6,0x6c,0x93,0x5d,0x83,0x6d,0x6e,0x86,0x51, + 0x20,0xe0,0x9b,0x3d,0xd0,0x5e,0x2e,0x7,0x37,0x43,0xbf,0x87,0xdb,0x68,0x5c,0x4f, + 0x91,0xd,0xf0,0x1d,0x17,0x2a,0x92,0x48,0xfe,0x4c,0x9d,0x30,0xca,0xd1,0xd1,0x69, + 0xf2,0x8b,0x7e,0x21,0xec,0x96,0xc6,0xbb,0x64,0x96,0x3b,0x78,0xda,0xf4,0xa8,0xf3, + 0x57,0xb3,0xf6,0xd9,0x1d,0xd8,0x96,0x4e,0x99,0x5f,0xbc,0x74,0xe9,0xa6,0xb9,0xbf, + 0x51,0xa8,0x94,0xc0,0x3a,0x36,0xf3,0x5,0xfc,0xf,0x77,0x1a,0x90,0xf,0xcf,0x9, + 0x12,0x12,0x30,0x6d,0x9,0x19,0xe5,0x7d,0xfa,0xc,0xc9,0x95,0x6f,0x44,0x25,0x24, + 0x1d,0x48,0x8e,0x85,0x96,0x6c,0x14,0x6b,0x5d,0x2d,0xd2,0x82,0x5,0xb,0xa6,0x58, + 0x72,0xff,0xab,0x79,0xbf,0xa7,0x81,0xbc,0x35,0xec,0x6a,0xee,0xed,0x34,0x22,0x3a, + 0x6d,0x78,0xee,0x8e,0x47,0xfb,0x1c,0x82,0x81,0x7e,0x1e,0xa4,0x8c,0x62,0xdb,0x79, + 0x74,0x78,0x4a,0x8f,0x1e,0x3d,0xb2,0x68,0x77,0xb7,0x5c,0x26,0x97,0x80,0xfc,0xe2, + 0xfb,0x78,0x7b,0x4f,0xc0,0xfb,0x1e,0xdd,0xe2,0xbe,0x61,0x79,0x4b,0x7c,0x3c,0xbd, + 0x2,0x4e,0x5f,0x3c,0x4f,0xea,0xf0,0x9f,0x17,0xcb,0xdd,0xaf,0xa1,0xad,0xf5,0x61, + 0xf0,0xec,0x50,0x3f,0x4,0x36,0x61,0xe5,0xd8,0x68,0xef,0x1f,0x1d,0xb3,0x26,0x1c, + 0x64,0xc7,0xee,0xea,0x13,0x36,0x11,0xd1,0xe,0x5,0xc5,0x45,0xd7,0xf0,0xde,0x4c, + 0x8c,0xe6,0x9b,0xc3,0x68,0x34,0x1a,0x3b,0x84,0xfc,0x3a,0xbb,0x76,0x6c,0x34,0x92, + 0x4a,0xa5,0x4a,0x90,0x5f,0x7c,0x2f,0x96,0x3b,0x21,0x6e,0xd5,0xd4,0xdc,0x64,0x32, + 0x9b,0x6b,0x9,0xbb,0xf2,0x1a,0xd9,0x75,0xe0,0xe7,0xe5,0x1d,0x98,0xff,0xb0,0x4, + 0xae,0xe5,0xb5,0x64,0x3b,0xb6,0xb7,0x8f,0x8f,0x5b,0xbf,0x42,0xc6,0x7,0xd9,0xb5, + 0xb,0xd9,0xe5,0x59,0x44,0xb4,0x85,0x4a,0x6b,0x3a,0xe3,0xec,0x89,0x1f,0xce,0xec, + 0x22,0xd3,0xb1,0x9f,0xe8,0x41,0xd,0xfb,0x1a,0x24,0x8c,0x92,0xef,0xd8,0x7d,0x42, + 0xa1,0xa2,0x57,0x2c,0x6a,0x1,0xf9,0xe5,0x9f,0xe4,0x37,0x9e,0x90,0xbd,0x89,0xf7, + 0xab,0x2a,0xae,0x98,0xfa,0xfd,0x1b,0xaf,0x2f,0x5d,0x7,0x42,0x3d,0xbc,0x14,0x14, + 0xba,0xca,0x96,0x23,0x37,0x80,0x7e,0x1b,0x9e,0xf7,0x66,0xdb,0xf2,0xc,0x97,0x6e, + 0x5c,0x4b,0x6,0x3d,0x33,0x7f,0x56,0xde,0x6d,0x42,0xd6,0x4c,0x37,0x77,0xf2,0x4c, + 0xee,0xda,0xbf,0x7a,0xe7,0x77,0x5c,0x47,0x67,0xa,0x2b,0xcb,0xb3,0x2c,0xad,0x8b, + 0x63,0x67,0x89,0xdd,0x5d,0x4f,0xaa,0x63,0xdb,0x2,0x77,0x53,0x53,0x63,0x3d,0xe8, + 0x6,0x10,0x1e,0x32,0x3b,0x8a,0x88,0xfb,0xfc,0x51,0x54,0xf8,0xb3,0xa9,0xdf,0xbf, + 0xb6,0x20,0x2,0x57,0xd7,0x1e,0x3b,0x66,0x8c,0xbf,0xa5,0x7f,0xbb,0x29,0x66,0xdd, + 0xde,0x84,0x8f,0xfe,0x1e,0x5,0x74,0x83,0x61,0xe5,0xd8,0xb6,0xa4,0x9,0x5b,0xb0, + 0x38,0x22,0x40,0x24,0x95,0x74,0x83,0xee,0xda,0xc9,0x47,0xf,0x6f,0x26,0xa2,0x4d, + 0xd8,0x8d,0xd,0x77,0x4d,0x9e,0x5a,0x56,0x5f,0x93,0x8d,0xd7,0x3d,0x5,0x3,0xfd, + 0x3c,0xab,0x52,0x9c,0x69,0x54,0x92,0xbd,0xc9,0xfb,0xd7,0x81,0xea,0xd8,0x84,0x80, + 0x6d,0x9,0xdc,0xec,0xe6,0xc6,0xbb,0xa0,0x83,0xfd,0xa0,0x9a,0xb8,0x11,0xa,0x53, + 0xf7,0x57,0x69,0x34,0x72,0xdc,0x3a,0xae,0x56,0xa4,0x3c,0xfb,0xef,0x50,0xa8,0xa0, + 0x69,0xd9,0x8a,0xe5,0x21,0x34,0xd8,0x23,0x28,0x2d,0xfd,0xbb,0xed,0x30,0x9c,0x57, + 0x98,0x94,0x72,0x80,0x90,0x69,0xe6,0xca,0x86,0xba,0x5c,0x53,0xf7,0x6f,0xeb,0xed, + 0xe1,0x10,0xf5,0x22,0x59,0xa2,0x36,0x7e,0xf,0xe7,0xe5,0xc8,0xd7,0x3,0x69,0xb0, + 0x9f,0x17,0xb7,0x25,0xc4,0x2f,0x81,0x1,0xec,0xfc,0x52,0xe2,0xd2,0x25,0x10,0x99, + 0xe5,0xd4,0x96,0x3a,0xb9,0xf3,0xb0,0xf8,0x1c,0x25,0xc0,0x7e,0x9e,0xe2,0xe3,0x3f, + 0x78,0xdb,0x96,0x71,0x6e,0xe,0xb7,0xa5,0x0,0x6,0xb8,0xf7,0xa5,0xa6,0xc4,0x11, + 0xe3,0xda,0xb5,0x26,0x5d,0xbb,0xb5,0xbb,0xb3,0xa,0xcb,0xfb,0xf4,0xe,0x88,0xb8, + 0x36,0xe7,0x39,0xe4,0x36,0xe7,0x82,0x4,0x36,0xa6,0xe3,0xd8,0x9d,0x9d,0x1d,0x5c, + 0x5b,0x46,0x4d,0x2a,0x1f,0x57,0x13,0x9e,0x89,0x1f,0x8d,0xa2,0xdf,0x79,0xe7,0x7d, + 0x22,0xee,0x33,0x6f,0x66,0xf0,0x32,0x53,0xbf,0xf7,0x1d,0x92,0xc2,0xc1,0x56,0xbd, + 0xe8,0xe1,0x15,0x60,0xeb,0x35,0xe6,0x6,0x4c,0x8b,0x4a,0x4a,0xde,0xf,0xce,0x6a, + 0x40,0x2c,0x1d,0x9b,0xc9,0x64,0x3a,0x45,0xbf,0x13,0x1d,0xfa,0xbc,0xb7,0xda,0xc3, + 0xc3,0x83,0x39,0xd2,0xe7,0xd7,0xc6,0x6e,0x58,0x88,0x47,0x92,0x72,0x3c,0x74,0xfe, + 0xfa,0xcf,0x84,0xac,0x57,0x2e,0xe3,0x3c,0xce,0x36,0xe9,0x90,0x4d,0xf5,0x98,0x38, + 0xe4,0xf9,0xab,0x3f,0xed,0xc3,0xaa,0x4e,0x54,0x5a,0x8d,0xfc,0xc0,0x91,0xd4,0xcd, + 0x20,0x38,0x36,0x2e,0x69,0x84,0xc7,0x78,0x79,0xb9,0x9a,0x2a,0xf8,0xff,0x1d,0x4c, + 0x31,0xbb,0x33,0xa3,0xac,0xbe,0x26,0x1b,0x6,0xb0,0x7b,0xc5,0x22,0x2e,0x81,0xe6, + 0x33,0x4c,0x52,0xa5,0x42,0x84,0xc5,0xb5,0x4b,0x39,0xec,0x9b,0x58,0xd6,0x4b,0x5b, + 0x4f,0x17,0x67,0xdb,0xce,0x1d,0xcb,0x29,0x9,0xf6,0x48,0x9d,0x11,0xa6,0x99,0xdc, + 0xcb,0xa9,0x27,0x8e,0x6f,0x95,0xab,0xe0,0x70,0xed,0x86,0x2e,0xde,0x43,0x22,0xc0, + 0x6e,0xed,0xea,0xac,0x32,0x75,0xff,0x4b,0x37,0xae,0x25,0xdb,0x7a,0xed,0x7e,0x99, + 0x14,0xf3,0x75,0x3a,0x22,0x99,0xa4,0x3b,0xfe,0xa3,0xad,0x91,0x94,0x4,0x7b,0x34, + 0x8b,0xc5,0x44,0xdb,0x89,0xe4,0x9,0x7a,0xeb,0x8c,0x90,0x88,0x4c,0xd7,0x66,0x37, + 0xd5,0xdb,0xbc,0x85,0x4c,0x22,0x97,0xe1,0x72,0x5c,0x75,0x59,0xed,0xe3,0x6c,0xac, + 0xd6,0x71,0x1b,0x41,0x3b,0x83,0x6,0x2d,0x8,0x77,0x4a,0x8b,0xcf,0xc1,0x2,0xb6, + 0x4a,0x8b,0xdf,0xa4,0xc9,0xb3,0x13,0x28,0xc3,0x57,0xfe,0x49,0x55,0xa,0xd1,0xce, + 0xcf,0xf7,0xbe,0x8b,0x3a,0x7e,0xaf,0xe1,0xe0,0x1a,0xf6,0x35,0x74,0xb6,0x3f,0x9c, + 0x31,0x2b,0xc8,0x97,0xc,0xb0,0x9,0x5f,0xdd,0x67,0x49,0x38,0x72,0xfd,0xea,0xd5, + 0x4c,0x90,0x53,0x9f,0x3d,0xd3,0x61,0x7e,0xc1,0xd9,0xad,0x8d,0xdf,0x8b,0xfb,0xce, + 0x72,0x9e,0xa0,0x67,0xd8,0x8e,0x76,0x16,0xd3,0xd5,0x2b,0x28,0x78,0x56,0x10,0xda, + 0x6b,0x4e,0x18,0x37,0x2e,0x8,0xcf,0x67,0x9e,0x31,0x7e,0xd2,0xc2,0x33,0x97,0x2e, + 0x1c,0x87,0x7e,0x54,0xc4,0xd2,0x38,0xfb,0xc3,0x2d,0x9,0x66,0xe3,0xaf,0x9c,0xa2, + 0x82,0xc,0x23,0x44,0xaa,0xe3,0x71,0x8b,0xc9,0x8,0x47,0xa,0xab,0x2b,0x50,0xad, + 0x15,0xbf,0x5f,0x5e,0x9a,0x49,0x44,0xbd,0xe8,0xd,0x6,0x9d,0x5d,0x38,0x36,0x82, + 0x20,0xc8,0xa9,0x93,0xe9,0x66,0x63,0xc3,0xdb,0xb7,0xb3,0xaf,0x23,0x10,0x69,0xfa, + 0xf8,0x49,0xb,0x32,0xaf,0x5f,0x3d,0x48,0xf4,0x7d,0xc7,0x7a,0x78,0xfa,0xa3,0x7a, + 0xde,0x0,0xe2,0xf2,0x72,0x4b,0x15,0x72,0x51,0xda,0xc9,0x13,0xdb,0x29,0xef,0xd8, + 0x96,0xc6,0xda,0xf9,0x8f,0x1e,0x5c,0x34,0x42,0xa6,0xec,0xc2,0x3f,0xd2,0x89,0x74, + 0xec,0xde,0x1,0xb1,0xd5,0xc3,0x8e,0x25,0x35,0x6c,0x52,0xce,0xd6,0x4c,0x39,0x7e, + 0x2c,0x81,0xb2,0xc3,0x7d,0xd6,0x80,0x9d,0xb8,0xff,0x8b,0x18,0xd8,0xc0,0x96,0x28, + 0xe4,0xa2,0x4b,0xd7,0x7f,0x49,0x26,0xa,0x6c,0x91,0x4c,0x6a,0xf5,0x21,0xab,0x7a, + 0x83,0x41,0x47,0x46,0xdd,0xf0,0xf8,0xbd,0x75,0x71,0xf1,0xf1,0x4b,0xa0,0x5,0x1b, + 0xcb,0x21,0xb2,0xeb,0x77,0x72,0x8e,0x19,0x21,0x14,0x1e,0xce,0xdd,0x26,0xe4,0x73, + 0x6c,0xad,0xcf,0xb2,0x6,0x72,0x27,0xc0,0x3a,0x4,0xbd,0x75,0x44,0x80,0xed,0x88, + 0x87,0xab,0x8c,0xf4,0xff,0x87,0x1e,0x30,0x64,0x76,0xca,0x37,0xe3,0xcc,0x79,0x4, + 0x42,0xbd,0x32,0x6f,0x7e,0xcc,0xa5,0x6b,0xd8,0x3a,0x77,0xbf,0x6c,0x78,0xd6,0x28, + 0x6b,0x35,0x7f,0x46,0x30,0xa9,0x19,0x5d,0xc7,0x7a,0x78,0x4e,0x2c,0x28,0x7b,0x98, + 0x9,0x55,0x8c,0x6d,0xee,0x6d,0xad,0x7e,0xcc,0x39,0xc1,0x44,0x71,0xea,0xeb,0xb1, + 0xef,0xd3,0x77,0x18,0x21,0x55,0x51,0x55,0x5,0x66,0x3b,0xdc,0xaf,0xde,0xcb,0x4b, + 0xb3,0xc5,0xb1,0xfb,0xe5,0xe0,0x64,0x3,0x28,0x6b,0xa8,0xcd,0x86,0xca,0xb1,0x47, + 0xd2,0xbd,0x7b,0xf9,0x5,0x6a,0xb5,0xda,0xea,0x23,0xe6,0x76,0x6f,0xff,0xf8,0xdb, + 0xaa,0x96,0x86,0x3c,0x18,0x9d,0x3b,0x34,0x70,0x46,0x64,0xc1,0x23,0x6c,0x1c,0x4a, + 0xab,0xd5,0xd8,0x74,0xfa,0x83,0xa7,0xdb,0x68,0x60,0xe,0x8b,0x9d,0x1b,0x38,0x33, + 0xea,0x6a,0x4e,0x76,0x1a,0x25,0x1c,0xdb,0xd3,0xd3,0x93,0x89,0xf6,0x39,0xd7,0xc7, + 0x6d,0x5a,0x6c,0x84,0x58,0x58,0xe4,0xe2,0x3b,0x7e,0xf1,0x87,0x5d,0x68,0x1d,0x1b, + 0xc4,0x3a,0xe9,0x97,0x49,0xf9,0x50,0x38,0xb6,0xb9,0xf8,0x79,0x60,0x60,0x0,0xb5, + 0xe3,0x64,0x9e,0xbf,0x50,0x52,0x5c,0xcb,0xfe,0x19,0x81,0x54,0x3e,0x9e,0x5e,0x1, + 0x6d,0xdd,0x5d,0x36,0xcd,0x50,0x6a,0x35,0x1a,0x54,0xb3,0xb1,0xad,0x5d,0xd8,0x6e, + 0x4c,0xc0,0x4a,0x8f,0x38,0xec,0x5b,0x78,0x5d,0x1b,0xaa,0xe3,0xf0,0xde,0x98,0x1f, + 0xf1,0xd7,0x46,0x5e,0x5b,0x29,0x8c,0x60,0xbb,0xbb,0xb9,0x79,0x4d,0xf6,0xf3,0xf, + 0x31,0x1a,0x8d,0xc6,0xb3,0xbf,0x5c,0x41,0x95,0x74,0x46,0xaf,0xd3,0x5b,0x1d,0xc6, + 0x35,0x77,0x77,0x96,0x4f,0xf1,0x1f,0xf,0xdc,0x99,0xed,0xed,0xfc,0x9e,0x9a,0x84, + 0xd8,0xf7,0x77,0x43,0x3,0xf6,0x48,0xae,0x3d,0xf4,0x6b,0xd3,0xda,0xaf,0x54,0x8d, + 0x5a,0xad,0x4f,0x3d,0xfc,0xef,0xcf,0x60,0x59,0x47,0xf2,0x3c,0xad,0x7e,0x7b,0xe5, + 0x8e,0x5b,0xf9,0x77,0x4e,0x58,0xfb,0x39,0x27,0x27,0x27,0xab,0x3a,0xde,0x77,0x1e, + 0x16,0x9f,0x9b,0xe6,0x37,0x3e,0x1c,0xb4,0xf2,0xcb,0x54,0x4a,0xf1,0xe1,0xb4,0x23, + 0x89,0xed,0x5c,0x2e,0x7e,0x49,0xff,0xc9,0x9a,0xa0,0xb1,0xa5,0x77,0x9f,0x7c,0x38, + 0x75,0xb3,0xa9,0xd5,0x6e,0xf0,0x8d,0x98,0x58,0x97,0x13,0x30,0xfd,0xc7,0xb,0x89, + 0x96,0xae,0x2e,0xcc,0x2e,0x2e,0x48,0x7,0xb1,0xcc,0x4a,0x8d,0x5a,0x9e,0x7a,0xfc, + 0xd8,0x56,0xbc,0xc7,0xb1,0x81,0x2,0xdb,0x1a,0xb8,0x4b,0x6b,0x39,0x37,0x61,0x7, + 0x5b,0x22,0x97,0x89,0x72,0xa,0xee,0x65,0x58,0x5a,0xe6,0xb3,0xbf,0x5c,0x49,0x1a, + 0xbe,0x74,0x55,0x39,0x6c,0x27,0xcd,0xd9,0x2b,0x97,0x93,0x40,0x2d,0x73,0xce,0x83, + 0xa2,0xc,0xbc,0xcd,0x97,0x94,0xf5,0xd8,0x58,0xc1,0xed,0xed,0xe3,0xe3,0x56,0x50, + 0xfe,0x28,0xd3,0x48,0x1,0x71,0xda,0x5a,0xa,0x2c,0x29,0x73,0x4e,0x49,0xe1,0xb0, + 0x15,0x8f,0x75,0xed,0xad,0xcf,0xac,0x2a,0x2c,0x6d,0xac,0x5,0xf6,0x85,0x67,0x37, + 0xd5,0xdf,0xf5,0xf6,0xf1,0x71,0x23,0x2,0x6c,0x68,0xcf,0x52,0xef,0x13,0xa,0x15, + 0x67,0x33,0x32,0xbe,0x13,0xcb,0x65,0x3d,0x8,0xe4,0x9a,0xe6,0x3f,0x21,0x3c,0x2d, + 0xe3,0x94,0xd9,0xd5,0x6f,0xae,0xae,0xae,0xee,0x43,0x7f,0x27,0x14,0x8b,0x3b,0x9e, + 0xfc,0xcc,0xe1,0xb5,0x16,0x2c,0x98,0x3e,0xb,0xc8,0x73,0xd9,0x75,0x6,0xbd,0xe6, + 0xd0,0xa1,0x43,0x5f,0xf4,0x9,0x85,0xa,0x42,0x6e,0x88,0xa7,0x63,0x13,0x11,0x92, + 0xec,0xf9,0x32,0x29,0xa6,0x3,0xa2,0xad,0x64,0xcf,0x5d,0x20,0xd4,0x27,0x30,0xbb, + 0x86,0xc2,0x54,0x26,0xd6,0x9c,0x8a,0x7,0x19,0x8,0x82,0x20,0x6d,0xfc,0x1e,0xe, + 0xb0,0x65,0xe3,0xf7,0xd6,0x45,0xc7,0xac,0x9,0xb7,0x96,0x19,0x60,0x43,0x11,0x5b, + 0xc1,0xb7,0xf4,0x1a,0x29,0xc7,0xbf,0x49,0xa0,0x42,0x48,0x62,0xae,0x9c,0x5d,0x7d, + 0x82,0xa6,0xa1,0x9f,0xd1,0xea,0x75,0x6a,0x9e,0x90,0xf,0xf4,0x8b,0x9d,0x76,0x3a, + 0x7d,0x3b,0x5a,0x1e,0xa0,0x5,0x1b,0x2b,0xb8,0x13,0x3f,0xff,0x57,0xc,0xd5,0xc1, + 0x26,0x6b,0xb9,0x29,0x5a,0x69,0x75,0x3a,0xf5,0xbe,0xaf,0xe,0xc6,0x61,0xc0,0x1, + 0x9c,0x60,0x63,0x5,0xf7,0x8d,0xc2,0xfc,0x63,0x54,0x5,0x3b,0xeb,0xb7,0x9b,0xa9, + 0xb0,0x81,0x7d,0x3a,0xeb,0xc7,0xbd,0x18,0x85,0xac,0xf0,0x82,0x8d,0x15,0xdc,0xe9, + 0x17,0xcf,0x25,0x4a,0x95,0xa,0x11,0xd5,0xc0,0x6e,0xed,0x36,0x9d,0x5b,0x4,0x44, + 0x49,0x15,0x72,0xd1,0x9e,0xcf,0x3f,0x8b,0xc1,0xaa,0xdd,0xa1,0x7,0x1b,0x33,0xb8, + 0x4d,0x4c,0x64,0xc0,0xe,0xb6,0x12,0x45,0xfe,0x6a,0xb2,0x94,0x72,0xfc,0xeb,0x4, + 0x2c,0xdb,0x9b,0xf2,0x60,0x5b,0x3,0xf7,0xa6,0xf8,0xcd,0x4b,0x7a,0xc5,0x7d,0x5c, + 0x2a,0x80,0x5d,0xd9,0x68,0x3a,0x57,0x36,0x68,0xea,0x10,0xf4,0xd4,0x45,0xc7,0xac, + 0xe,0xc7,0xda,0xc4,0x28,0x1,0x36,0x56,0xae,0x8d,0x20,0x8,0x12,0xb7,0xe5,0xc3, + 0x25,0xbd,0xfd,0x22,0x28,0xe0,0x1e,0x69,0xef,0x22,0x5e,0xd9,0x9a,0xb0,0x54,0xbf, + 0x52,0xce,0x5f,0xbf,0xf9,0xfd,0xc5,0x58,0xb4,0x33,0xf0,0x33,0x8f,0x58,0x83,0x3d, + 0x38,0x38,0xd8,0x6f,0xed,0xb5,0xbc,0x7d,0xbc,0xdd,0x6e,0xdd,0xcd,0x3b,0x1,0x3a, + 0x1c,0x59,0xb9,0xa6,0x4f,0x25,0x3,0xfd,0xc5,0x14,0x4b,0x25,0xfc,0x9c,0xc2,0x82, + 0xc,0x6,0x8a,0x9d,0x51,0x76,0x5,0xf6,0x48,0x95,0xb8,0x21,0x36,0x16,0xf5,0x4a, + 0xb5,0xac,0xdf,0x7f,0x4b,0x5,0x15,0x8e,0xe6,0x9e,0x4e,0x93,0x9b,0x10,0x4a,0xd8, + 0x95,0xd7,0x40,0x1f,0x9,0xc9,0xfc,0xed,0xc6,0x41,0x3c,0xda,0xdb,0xae,0xc0,0xb6, + 0xf5,0xda,0x3b,0xff,0xf7,0xd3,0x77,0xdb,0x7b,0xba,0x39,0x72,0x95,0x12,0xa8,0x6c, + 0xae,0x22,0xf9,0xf0,0x30,0xe4,0x1,0x49,0xb9,0x3f,0x2c,0x55,0xaf,0xb8,0x8f,0x1b, + 0xbf,0x75,0x4b,0x24,0x5e,0xed,0x4d,0x29,0xb0,0xf1,0x84,0xfa,0xd9,0xce,0x58,0x3d, + 0x70,0x9d,0xb1,0x7e,0xb9,0xec,0xcf,0x6d,0x52,0x45,0x95,0x65,0x59,0x20,0x43,0xdd, + 0xdc,0xdd,0x59,0xbe,0x72,0xcd,0x7b,0x61,0x78,0xb7,0x3b,0xe5,0xc1,0xc6,0xe3,0x5e, + 0x29,0x87,0xf,0x27,0x8,0xc4,0x62,0x1e,0x68,0xd0,0x80,0x1c,0x7a,0x74,0x9,0x5, + 0x4d,0x29,0x69,0x47,0x12,0x88,0x6e,0x77,0xca,0xce,0x3c,0x8e,0x4,0xb7,0x2d,0x2f, + 0x40,0xc2,0x8e,0xed,0x51,0xbc,0x3e,0x1,0xf4,0xb,0xa8,0x88,0x10,0x4f,0xc8,0xaf, + 0x4b,0xd8,0xb1,0x3d,0x8a,0x8c,0x6f,0x6a,0x4a,0x83,0xfd,0x9c,0xde,0x32,0x26,0xee, + 0x1e,0xb3,0x6e,0xdd,0xc2,0xfb,0xc5,0xc5,0x99,0x34,0xbe,0xcf,0x4a,0xa2,0x90,0x8b, + 0xd8,0xd,0x75,0x77,0x3f,0xde,0xbd,0x73,0x95,0xad,0x6d,0x6a,0x8b,0xa1,0x51,0x3a, + 0xc6,0x36,0xf1,0xf5,0x84,0x79,0x3c,0x9e,0xcf,0x2e,0xbf,0x48,0xe3,0xfc,0xdf,0x90, + 0xc8,0x96,0x11,0xf,0xb,0x3b,0x85,0x96,0xb6,0x35,0xf5,0x67,0x1e,0x6d,0x9d,0xc5, + 0xb3,0x44,0xa9,0x47,0x8f,0x6e,0x6d,0xeb,0xea,0xe4,0xc0,0x34,0x8d,0x8d,0xd5,0x98, + 0x74,0x5b,0x77,0x17,0xe7,0xf4,0xa5,0xb,0x7b,0xd1,0xec,0x74,0xc1,0xab,0xfd,0xec, + 0x62,0xe6,0x91,0x48,0xc0,0x6f,0xdd,0xcf,0x3f,0x61,0x4f,0x60,0x5f,0xfa,0xd5,0xb6, + 0xc3,0x9a,0xf0,0x6a,0x33,0xca,0x80,0xd,0x12,0xdc,0xde,0x3e,0x3e,0x6e,0xc7,0x7f, + 0xc8,0xd8,0xd5,0xd0,0xce,0x7d,0xa8,0xa2,0x90,0x83,0xeb,0xd,0x6,0x9d,0x58,0x2a, + 0xe1,0x73,0x9a,0x1b,0xb,0x52,0xbf,0x3d,0xb6,0x75,0x9c,0x9f,0x9f,0x3b,0xa8,0x6d, + 0x45,0x29,0xb0,0xad,0x1d,0x29,0xc1,0x13,0xee,0x3f,0x87,0x8,0x4f,0x1c,0x4b,0x28, + 0xac,0xae,0xcc,0xd2,0xea,0x75,0x6a,0x98,0xa1,0x56,0x68,0xd4,0x92,0x3b,0x65,0xf, + 0xce,0xc1,0x62,0x40,0x68,0xc0,0x76,0xb0,0xb6,0xcd,0xad,0xcc,0x2,0x8c,0x49,0xc5, + 0x3d,0xe7,0x39,0x1c,0x2c,0xfd,0x5b,0x73,0x9f,0x43,0x35,0x8b,0xf9,0xe9,0x9e,0x77, + 0xdf,0x5b,0x1b,0x13,0x3b,0x77,0x56,0x68,0x94,0x93,0xd3,0x28,0x86,0x8b,0x33,0xc3, + 0xd,0x1,0x50,0x86,0xc1,0x41,0xbd,0x42,0xad,0x92,0x4a,0xa4,0x52,0xc1,0x1f,0x85, + 0xf7,0xaf,0xe4,0xe7,0xe6,0xdd,0xcb,0x48,0x3f,0x95,0x8f,0x57,0xbb,0x8c,0x54,0xdf, + 0x23,0x7d,0xc6,0x4c,0xa2,0x25,0x54,0xf,0x8,0xac,0x63,0xa3,0x19,0xab,0xc6,0x3b, + 0x34,0x31,0xd9,0xd9,0x4c,0x3f,0xbe,0xb5,0xb2,0xb5,0x11,0xb8,0xd9,0x4c,0x91,0x4c, + 0xd2,0x9d,0x5d,0x5c,0x90,0x8e,0x67,0x7b,0xa0,0xa9,0x63,0x6b,0xdb,0x83,0x92,0x8e, + 0x8d,0x87,0xa3,0x38,0xe0,0x58,0x88,0xe0,0xd0,0x50,0xbf,0x2d,0xdb,0xfe,0x1e,0x13, + 0xb1,0x28,0x22,0xca,0xdd,0x9d,0xe5,0xeb,0xe2,0xea,0xea,0xee,0xea,0xe2,0xe2,0xee, + 0xe6,0xe2,0xe2,0xc1,0x74,0x66,0xb8,0x8e,0x72,0x74,0x74,0xc2,0xca,0x89,0x11,0x4, + 0x41,0x74,0x7a,0x9d,0x6,0x41,0x1c,0x10,0xb5,0x56,0xa3,0xe8,0xea,0xed,0x69,0xa8, + 0xa9,0xa9,0x29,0xce,0xcb,0xcd,0xcd,0x3b,0xf5,0xed,0x89,0x3c,0xa2,0xeb,0xd5,0x9a, + 0xfa,0x7d,0x72,0x1d,0xb,0xff,0xd6,0xea,0xe7,0xa4,0x2c,0xd8,0xd6,0x86,0x31,0x44, + 0xa8,0x8e,0xc7,0x2d,0x76,0x1f,0xcd,0xf2,0x61,0xb9,0xb8,0x7a,0xb9,0x3a,0x33,0xdc, + 0xad,0x85,0x5c,0xad,0xd3,0x2a,0xd4,0x5a,0xad,0x42,0xae,0x56,0x8a,0xfb,0x6,0x6, + 0x3a,0xe7,0x5,0xce,0x5c,0x66,0xf,0x86,0x41,0x83,0x6d,0x61,0x43,0x38,0x0,0x52, + 0x8,0x16,0x8b,0xc5,0x98,0x38,0x69,0x92,0x97,0xa7,0x97,0x97,0x1b,0x82,0x20,0x88, + 0xb3,0xb3,0xf3,0x9f,0xa0,0x6b,0xb5,0x5a,0xbd,0x52,0x21,0xd7,0x68,0x35,0x5a,0x3d, + 0xe2,0x80,0x20,0xa,0xb9,0x42,0xd3,0xde,0xd6,0x26,0xb6,0x47,0xb3,0xa0,0xc1,0x86, + 0xc,0x6c,0x18,0x5,0xb,0xd8,0x4e,0x74,0x53,0x8d,0xdc,0x78,0xf4,0x4b,0x0,0xa7, + 0x68,0xb0,0xcd,0x38,0x12,0xd5,0x21,0x1f,0x5a,0x5e,0x73,0x65,0x74,0x70,0x70,0x70, + 0x30,0x92,0x35,0x3c,0x66,0x85,0x1c,0x69,0x78,0x2d,0xef,0xf1,0xe3,0xb9,0x3e,0x9c, + 0xe8,0xf2,0x8f,0xb4,0x62,0x92,0x76,0x6c,0xa,0xc0,0xfd,0xc4,0xa1,0xac,0x69,0x50, + 0x58,0x5d,0xdc,0xd2,0x32,0x1a,0x8d,0x46,0x23,0xda,0x9,0x30,0x1a,0x6c,0xc8,0x1a, + 0x1b,0xab,0xaf,0x72,0x98,0xca,0x85,0xe6,0xa5,0xa7,0x43,0x11,0xfa,0x45,0x1,0xfe, + 0x19,0x60,0xe,0xbd,0x28,0xef,0xd8,0x68,0x3b,0x3b,0x96,0xae,0x71,0x20,0x3,0x3c, + 0xac,0xbf,0x15,0x6c,0x75,0x66,0x10,0xc3,0x31,0xbb,0x8,0x45,0xac,0x6d,0xb8,0xa1, + 0xd,0x35,0xf4,0xdf,0x54,0xe8,0x60,0x99,0x82,0x11,0x8d,0x9,0x80,0xda,0xc7,0xb0, + 0xab,0x50,0xc4,0x92,0x46,0xb0,0xf4,0x6f,0x9e,0x88,0x8c,0x30,0xc1,0x68,0x34,0x1a, + 0xe7,0xcf,0x9f,0x3f,0xde,0xda,0xb2,0x5b,0xf2,0xdc,0x96,0x96,0x9,0x6d,0xf9,0x69, + 0xb0,0x71,0x84,0xfb,0x79,0xd,0x82,0xa6,0xa1,0x3e,0xda,0xfe,0x8f,0xe8,0xa1,0xbf, + 0xb,0xe,0x9,0x19,0x87,0x77,0x39,0xca,0xca,0xca,0x3a,0x23,0x22,0x22,0x26,0xe1, + 0xe1,0xaa,0xe6,0xc0,0x87,0x61,0x24,0xc8,0x6e,0x3b,0x8f,0xe,0x26,0x64,0xed,0x35, + 0x98,0x4c,0xa6,0x53,0xe4,0xd2,0xc8,0x88,0xa1,0xbf,0xf7,0xf3,0xf3,0xf7,0x26,0xa2, + 0x63,0xb9,0x65,0xcb,0x96,0x28,0x3c,0xeb,0x7,0x8b,0x6f,0x28,0x32,0x7b,0xd0,0xc0, + 0xaf,0xc7,0x6,0x59,0x9f,0x7c,0xf2,0xcf,0x77,0xf0,0xde,0xb6,0x46,0xe6,0xd6,0x38, + 0x18,0x19,0xa5,0xf4,0x7a,0x6c,0xa2,0xe4,0xee,0xee,0xce,0x94,0x48,0x24,0x2a,0xbc, + 0x47,0x13,0x6c,0x1,0x14,0xf6,0xa5,0x0,0xf4,0xea,0x3e,0xf2,0x2a,0x9e,0x90,0x61, + 0x32,0x2a,0xd,0xc7,0xe1,0xd,0x36,0x3d,0x41,0x3,0xf0,0x8,0xd,0x2d,0xba,0xf3, + 0x48,0x8b,0xd6,0x33,0xa2,0x97,0xad,0xe2,0xe4,0xbe,0x78,0x6c,0xa1,0xb2,0x74,0x2, + 0x85,0xfe,0x36,0xa0,0xc1,0x6,0x6,0x76,0x3a,0xa4,0xc1,0xb8,0x5e,0xe8,0x21,0x3c, + 0x5a,0x54,0xd4,0xff,0xf,0x0,0x4a,0x2e,0xd8,0xdb,0x9e,0x96,0xe8,0xcd,0x0,0x0, + 0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/cam3_yes.png 0x0,0x0,0x25,0xf, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, @@ -16713,7 +23129,614 @@ static const unsigned char qt_resource_data[] = { 0xfe,0x38,0xfd,0xb7,0xd,0x3d,0x8c,0x93,0xce,0xe8,0x7f,0x95,0x5,0xb3,0xff,0x27, 0x9a,0xfc,0xff,0x10,0x9c,0xb8,0xfd,0x9f,0x1,0x0,0x13,0x1f,0x8d,0x5d,0x10,0x6e, 0x5,0x9d,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, - // D:/????/??????/230526-????-2?????-1600x900-2/Cigarette/Resources/cam4_no.png + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/cam3_no.png + 0x0,0x0,0x25,0xbd, + 0x89, + 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, + 0x0,0x0,0x48,0x0,0x0,0x0,0x48,0x8,0x6,0x0,0x0,0x0,0x55,0xed,0xb3,0x47, + 0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13, + 0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0xa,0x4d,0x69,0x43,0x43,0x50,0x50,0x68,0x6f, + 0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66,0x69, + 0x6c,0x65,0x0,0x0,0x78,0xda,0x9d,0x53,0x77,0x58,0x93,0xf7,0x16,0x3e,0xdf,0xf7, + 0x65,0xf,0x56,0x42,0xd8,0xf0,0xb1,0x97,0x6c,0x81,0x0,0x22,0x23,0xac,0x8,0xc8, + 0x10,0x59,0xa2,0x10,0x92,0x0,0x61,0x84,0x10,0x12,0x40,0xc5,0x85,0x88,0xa,0x56, + 0x14,0x15,0x11,0x9c,0x48,0x55,0xc4,0x82,0xd5,0xa,0x48,0x9d,0x88,0xe2,0xa0,0x28, + 0xb8,0x67,0x41,0x8a,0x88,0x5a,0x8b,0x55,0x5c,0x38,0xee,0x1f,0xdc,0xa7,0xb5,0x7d, + 0x7a,0xef,0xed,0xed,0xfb,0xd7,0xfb,0xbc,0xe7,0x9c,0xe7,0xfc,0xce,0x79,0xcf,0xf, + 0x80,0x11,0x12,0x26,0x91,0xe6,0xa2,0x6a,0x0,0x39,0x52,0x85,0x3c,0x3a,0xd8,0x1f, + 0x8f,0x4f,0x48,0xc4,0xc9,0xbd,0x80,0x2,0x15,0x48,0xe0,0x4,0x20,0x10,0xe6,0xcb, + 0xc2,0x67,0x5,0xc5,0x0,0x0,0xf0,0x3,0x79,0x78,0x7e,0x74,0xb0,0x3f,0xfc,0x1, + 0xaf,0x6f,0x0,0x2,0x0,0x70,0xd5,0x2e,0x24,0x12,0xc7,0xe1,0xff,0x83,0xba,0x50, + 0x26,0x57,0x0,0x20,0x91,0x0,0xe0,0x22,0x12,0xe7,0xb,0x1,0x90,0x52,0x0,0xc8, + 0x2e,0x54,0xc8,0x14,0x0,0xc8,0x18,0x0,0xb0,0x53,0xb3,0x64,0xa,0x0,0x94,0x0, + 0x0,0x6c,0x79,0x7c,0x42,0x22,0x0,0xaa,0xd,0x0,0xec,0xf4,0x49,0x3e,0x5,0x0, + 0xd8,0xa9,0x93,0xdc,0x17,0x0,0xd8,0xa2,0x1c,0xa9,0x8,0x0,0x8d,0x1,0x0,0x99, + 0x28,0x47,0x24,0x2,0x40,0xbb,0x0,0x60,0x55,0x81,0x52,0x2c,0x2,0xc0,0xc2,0x0, + 0xa0,0xac,0x40,0x22,0x2e,0x4,0xc0,0xae,0x1,0x80,0x59,0xb6,0x32,0x47,0x2,0x80, + 0xbd,0x5,0x0,0x76,0x8e,0x58,0x90,0xf,0x40,0x60,0x0,0x80,0x99,0x42,0x2c,0xcc, + 0x0,0x20,0x38,0x2,0x0,0x43,0x1e,0x13,0xcd,0x3,0x20,0x4c,0x3,0xa0,0x30,0xd2, + 0xbf,0xe0,0xa9,0x5f,0x70,0x85,0xb8,0x48,0x1,0x0,0xc0,0xcb,0x95,0xcd,0x97,0x4b, + 0xd2,0x33,0x14,0xb8,0x95,0xd0,0x1a,0x77,0xf2,0xf0,0xe0,0xe2,0x21,0xe2,0xc2,0x6c, + 0xb1,0x42,0x61,0x17,0x29,0x10,0x66,0x9,0xe4,0x22,0x9c,0x97,0x9b,0x23,0x13,0x48, + 0xe7,0x3,0x4c,0xce,0xc,0x0,0x0,0x1a,0xf9,0xd1,0xc1,0xfe,0x38,0x3f,0x90,0xe7, + 0xe6,0xe4,0xe1,0xe6,0x66,0xe7,0x6c,0xef,0xf4,0xc5,0xa2,0xfe,0x6b,0xf0,0x6f,0x22, + 0x3e,0x21,0xf1,0xdf,0xfe,0xbc,0x8c,0x2,0x4,0x0,0x10,0x4e,0xcf,0xef,0xda,0x5f, + 0xe5,0xe5,0xd6,0x3,0x70,0xc7,0x1,0xb0,0x75,0xbf,0x6b,0xa9,0x5b,0x0,0xda,0x56, + 0x0,0x68,0xdf,0xf9,0x5d,0x33,0xdb,0x9,0xa0,0x5a,0xa,0xd0,0x7a,0xf9,0x8b,0x79, + 0x38,0xfc,0x40,0x1e,0x9e,0xa1,0x50,0xc8,0x3c,0x1d,0x1c,0xa,0xb,0xb,0xed,0x25, + 0x62,0xa1,0xbd,0x30,0xe3,0x8b,0x3e,0xff,0x33,0xe1,0x6f,0xe0,0x8b,0x7e,0xf6,0xfc, + 0x40,0x1e,0xfe,0xdb,0x7a,0xf0,0x0,0x71,0x9a,0x40,0x99,0xad,0xc0,0xa3,0x83,0xfd, + 0x71,0x61,0x6e,0x76,0xae,0x52,0x8e,0xe7,0xcb,0x4,0x42,0x31,0x6e,0xf7,0xe7,0x23, + 0xfe,0xc7,0x85,0x7f,0xfd,0x8e,0x29,0xd1,0xe2,0x34,0xb1,0x5c,0x2c,0x15,0x8a,0xf1, + 0x58,0x89,0xb8,0x50,0x22,0x4d,0xc7,0x79,0xb9,0x52,0x91,0x44,0x21,0xc9,0x95,0xe2, + 0x12,0xe9,0x7f,0x32,0xf1,0x1f,0x96,0xfd,0x9,0x93,0x77,0xd,0x0,0xac,0x86,0x4f, + 0xc0,0x4e,0xb6,0x7,0xb5,0xcb,0x6c,0xc0,0x7e,0xee,0x1,0x2,0x8b,0xe,0x58,0xd2, + 0x76,0x0,0x40,0x7e,0xf3,0x2d,0x8c,0x1a,0xb,0x91,0x0,0x10,0x67,0x34,0x32,0x79, + 0xf7,0x0,0x0,0x93,0xbf,0xf9,0x8f,0x40,0x2b,0x1,0x0,0xcd,0x97,0xa4,0xe3,0x0, + 0x0,0xbc,0xe8,0x18,0x5c,0xa8,0x94,0x17,0x4c,0xc6,0x8,0x0,0x0,0x44,0xa0,0x81, + 0x2a,0xb0,0x41,0x7,0xc,0xc1,0x14,0xac,0xc0,0xe,0x9c,0xc1,0x1d,0xbc,0xc0,0x17, + 0x2,0x61,0x6,0x44,0x40,0xc,0x24,0xc0,0x3c,0x10,0x42,0x6,0xe4,0x80,0x1c,0xa, + 0xa1,0x18,0x96,0x41,0x19,0x54,0xc0,0x3a,0xd8,0x4,0xb5,0xb0,0x3,0x1a,0xa0,0x11, + 0x9a,0xe1,0x10,0xb4,0xc1,0x31,0x38,0xd,0xe7,0xe0,0x12,0x5c,0x81,0xeb,0x70,0x17, + 0x6,0x60,0x18,0x9e,0xc2,0x18,0xbc,0x86,0x9,0x4,0x41,0xc8,0x8,0x13,0x61,0x21, + 0x3a,0x88,0x11,0x62,0x8e,0xd8,0x22,0xce,0x8,0x17,0x99,0x8e,0x4,0x22,0x61,0x48, + 0x34,0x92,0x80,0xa4,0x20,0xe9,0x88,0x14,0x51,0x22,0xc5,0xc8,0x72,0xa4,0x2,0xa9, + 0x42,0x6a,0x91,0x5d,0x48,0x23,0xf2,0x2d,0x72,0x14,0x39,0x8d,0x5c,0x40,0xfa,0x90, + 0xdb,0xc8,0x20,0x32,0x8a,0xfc,0x8a,0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,0x3,0xd4, + 0x2,0x75,0x40,0xb9,0xa8,0x1f,0x1a,0x8a,0xc6,0xa0,0x73,0xd1,0x74,0x34,0xf,0x5d, + 0x80,0x96,0xa2,0x6b,0xd1,0x1a,0xb4,0x1e,0x3d,0x80,0xb6,0xa2,0xa7,0xd1,0x4b,0xe8, + 0x75,0x74,0x0,0x7d,0x8a,0x8e,0x63,0x80,0xd1,0x31,0xe,0x66,0x8c,0xd9,0x61,0x5c, + 0x8c,0x87,0x45,0x60,0x89,0x58,0x1a,0x26,0xc7,0x16,0x63,0xe5,0x58,0x35,0x56,0x8f, + 0x35,0x63,0x1d,0x58,0x37,0x76,0x15,0x1b,0xc0,0x9e,0x61,0xef,0x8,0x24,0x2,0x8b, + 0x80,0x13,0xec,0x8,0x5e,0x84,0x10,0xc2,0x6c,0x82,0x90,0x90,0x47,0x58,0x4c,0x58, + 0x43,0xa8,0x25,0xec,0x23,0xb4,0x12,0xba,0x8,0x57,0x9,0x83,0x84,0x31,0xc2,0x27, + 0x22,0x93,0xa8,0x4f,0xb4,0x25,0x7a,0x12,0xf9,0xc4,0x78,0x62,0x3a,0xb1,0x90,0x58, + 0x46,0xac,0x26,0xee,0x21,0x1e,0x21,0x9e,0x25,0x5e,0x27,0xe,0x13,0x5f,0x93,0x48, + 0x24,0xe,0xc9,0x92,0xe4,0x4e,0xa,0x21,0x25,0x90,0x32,0x49,0xb,0x49,0x6b,0x48, + 0xdb,0x48,0x2d,0xa4,0x53,0xa4,0x3e,0xd2,0x10,0x69,0x9c,0x4c,0x26,0xeb,0x90,0x6d, + 0xc9,0xde,0xe4,0x8,0xb2,0x80,0xac,0x20,0x97,0x91,0xb7,0x90,0xf,0x90,0x4f,0x92, + 0xfb,0xc9,0xc3,0xe4,0xb7,0x14,0x3a,0xc5,0x88,0xe2,0x4c,0x9,0xa2,0x24,0x52,0xa4, + 0x94,0x12,0x4a,0x35,0x65,0x3f,0xe5,0x4,0xa5,0x9f,0x32,0x42,0x99,0xa0,0xaa,0x51, + 0xcd,0xa9,0x9e,0xd4,0x8,0xaa,0x88,0x3a,0x9f,0x5a,0x49,0x6d,0xa0,0x76,0x50,0x2f, + 0x53,0x87,0xa9,0x13,0x34,0x75,0x9a,0x25,0xcd,0x9b,0x16,0x43,0xcb,0xa4,0x2d,0xa3, + 0xd5,0xd0,0x9a,0x69,0x67,0x69,0xf7,0x68,0x2f,0xe9,0x74,0xba,0x9,0xdd,0x83,0x1e, + 0x45,0x97,0xd0,0x97,0xd2,0x6b,0xe8,0x7,0xe9,0xe7,0xe9,0x83,0xf4,0x77,0xc,0xd, + 0x86,0xd,0x83,0xc7,0x48,0x62,0x28,0x19,0x6b,0x19,0x7b,0x19,0xa7,0x18,0xb7,0x19, + 0x2f,0x99,0x4c,0xa6,0x5,0xd3,0x97,0x99,0xc8,0x54,0x30,0xd7,0x32,0x1b,0x99,0x67, + 0x98,0xf,0x98,0x6f,0x55,0x58,0x2a,0xf6,0x2a,0x7c,0x15,0x91,0xca,0x12,0x95,0x3a, + 0x95,0x56,0x95,0x7e,0x95,0xe7,0xaa,0x54,0x55,0x73,0x55,0x3f,0xd5,0x79,0xaa,0xb, + 0x54,0xab,0x55,0xf,0xab,0x5e,0x56,0x7d,0xa6,0x46,0x55,0xb3,0x50,0xe3,0xa9,0x9, + 0xd4,0x16,0xab,0xd5,0xa9,0x1d,0x55,0xbb,0xa9,0x36,0xae,0xce,0x52,0x77,0x52,0x8f, + 0x50,0xcf,0x51,0x5f,0xa3,0xbe,0x5f,0xfd,0x82,0xfa,0x63,0xd,0xb2,0x86,0x85,0x46, + 0xa0,0x86,0x48,0xa3,0x54,0x63,0xb7,0xc6,0x19,0x8d,0x21,0x16,0xc6,0x32,0x65,0xf1, + 0x58,0x42,0xd6,0x72,0x56,0x3,0xeb,0x2c,0x6b,0x98,0x4d,0x62,0x5b,0xb2,0xf9,0xec, + 0x4c,0x76,0x5,0xfb,0x1b,0x76,0x2f,0x7b,0x4c,0x53,0x43,0x73,0xaa,0x66,0xac,0x66, + 0x91,0x66,0x9d,0xe6,0x71,0xcd,0x1,0xe,0xc6,0xb1,0xe0,0xf0,0x39,0xd9,0x9c,0x4a, + 0xce,0x21,0xce,0xd,0xce,0x7b,0x2d,0x3,0x2d,0x3f,0x2d,0xb1,0xd6,0x6a,0xad,0x66, + 0xad,0x7e,0xad,0x37,0xda,0x7a,0xda,0xbe,0xda,0x62,0xed,0x72,0xed,0x16,0xed,0xeb, + 0xda,0xef,0x75,0x70,0x9d,0x40,0x9d,0x2c,0x9d,0xf5,0x3a,0x6d,0x3a,0xf7,0x75,0x9, + 0xba,0x36,0xba,0x51,0xba,0x85,0xba,0xdb,0x75,0xcf,0xea,0x3e,0xd3,0x63,0xeb,0x79, + 0xe9,0x9,0xf5,0xca,0xf5,0xe,0xe9,0xdd,0xd1,0x47,0xf5,0x6d,0xf4,0xa3,0xf5,0x17, + 0xea,0xef,0xd6,0xef,0xd1,0x1f,0x37,0x30,0x34,0x8,0x36,0x90,0x19,0x6c,0x31,0x38, + 0x63,0xf0,0xcc,0x90,0x63,0xe8,0x6b,0x98,0x69,0xb8,0xd1,0xf0,0x84,0xe1,0xa8,0x11, + 0xcb,0x68,0xba,0x91,0xc4,0x68,0xa3,0xd1,0x49,0xa3,0x27,0xb8,0x26,0xee,0x87,0x67, + 0xe3,0x35,0x78,0x17,0x3e,0x66,0xac,0x6f,0x1c,0x62,0xac,0x34,0xde,0x65,0xdc,0x6b, + 0x3c,0x61,0x62,0x69,0x32,0xdb,0xa4,0xc4,0xa4,0xc5,0xe4,0xbe,0x29,0xcd,0x94,0x6b, + 0x9a,0x66,0xba,0xd1,0xb4,0xd3,0x74,0xcc,0xcc,0xc8,0x2c,0xdc,0xac,0xd8,0xac,0xc9, + 0xec,0x8e,0x39,0xd5,0x9c,0x6b,0x9e,0x61,0xbe,0xd9,0xbc,0xdb,0xfc,0x8d,0x85,0xa5, + 0x45,0x9c,0xc5,0x4a,0x8b,0x36,0x8b,0xc7,0x96,0xda,0x96,0x7c,0xcb,0x5,0x96,0x4d, + 0x96,0xf7,0xac,0x98,0x56,0x3e,0x56,0x79,0x56,0xf5,0x56,0xd7,0xac,0x49,0xd6,0x5c, + 0xeb,0x2c,0xeb,0x6d,0xd6,0x57,0x6c,0x50,0x1b,0x57,0x9b,0xc,0x9b,0x3a,0x9b,0xcb, + 0xb6,0xa8,0xad,0x9b,0xad,0xc4,0x76,0x9b,0x6d,0xdf,0x14,0xe2,0x14,0x8f,0x29,0xd2, + 0x29,0xf5,0x53,0x6e,0xda,0x31,0xec,0xfc,0xec,0xa,0xec,0x9a,0xec,0x6,0xed,0x39, + 0xf6,0x61,0xf6,0x25,0xf6,0x6d,0xf6,0xcf,0x1d,0xcc,0x1c,0x12,0x1d,0xd6,0x3b,0x74, + 0x3b,0x7c,0x72,0x74,0x75,0xcc,0x76,0x6c,0x70,0xbc,0xeb,0xa4,0xe1,0x34,0xc3,0xa9, + 0xc4,0xa9,0xc3,0xe9,0x57,0x67,0x1b,0x67,0xa1,0x73,0x9d,0xf3,0x35,0x17,0xa6,0x4b, + 0x90,0xcb,0x12,0x97,0x76,0x97,0x17,0x53,0x6d,0xa7,0x8a,0xa7,0x6e,0x9f,0x7a,0xcb, + 0x95,0xe5,0x1a,0xee,0xba,0xd2,0xb5,0xd3,0xf5,0xa3,0x9b,0xbb,0x9b,0xdc,0xad,0xd9, + 0x6d,0xd4,0xdd,0xcc,0x3d,0xc5,0x7d,0xab,0xfb,0x4d,0x2e,0x9b,0x1b,0xc9,0x5d,0xc3, + 0x3d,0xef,0x41,0xf4,0xf0,0xf7,0x58,0xe2,0x71,0xcc,0xe3,0x9d,0xa7,0x9b,0xa7,0xc2, + 0xf3,0x90,0xe7,0x2f,0x5e,0x76,0x5e,0x59,0x5e,0xfb,0xbd,0x1e,0x4f,0xb3,0x9c,0x26, + 0x9e,0xd6,0x30,0x6d,0xc8,0xdb,0xc4,0x5b,0xe0,0xbd,0xcb,0x7b,0x60,0x3a,0x3e,0x3d, + 0x65,0xfa,0xce,0xe9,0x3,0x3e,0xc6,0x3e,0x2,0x9f,0x7a,0x9f,0x87,0xbe,0xa6,0xbe, + 0x22,0xdf,0x3d,0xbe,0x23,0x7e,0xd6,0x7e,0x99,0x7e,0x7,0xfc,0x9e,0xfb,0x3b,0xfa, + 0xcb,0xfd,0x8f,0xf8,0xbf,0xe1,0x79,0xf2,0x16,0xf1,0x4e,0x5,0x60,0x1,0xc1,0x1, + 0xe5,0x1,0xbd,0x81,0x1a,0x81,0xb3,0x3,0x6b,0x3,0x1f,0x4,0x99,0x4,0xa5,0x7, + 0x35,0x5,0x8d,0x5,0xbb,0x6,0x2f,0xc,0x3e,0x15,0x42,0xc,0x9,0xd,0x59,0x1f, + 0x72,0x93,0x6f,0xc0,0x17,0xf2,0x1b,0xf9,0x63,0x33,0xdc,0x67,0x2c,0x9a,0xd1,0x15, + 0xca,0x8,0x9d,0x15,0x5a,0x1b,0xfa,0x30,0xcc,0x26,0x4c,0x1e,0xd6,0x11,0x8e,0x86, + 0xcf,0x8,0xdf,0x10,0x7e,0x6f,0xa6,0xf9,0x4c,0xe9,0xcc,0xb6,0x8,0x88,0xe0,0x47, + 0x6c,0x88,0xb8,0x1f,0x69,0x19,0x99,0x17,0xf9,0x7d,0x14,0x29,0x2a,0x32,0xaa,0x2e, + 0xea,0x51,0xb4,0x53,0x74,0x71,0x74,0xf7,0x2c,0xd6,0xac,0xe4,0x59,0xfb,0x67,0xbd, + 0x8e,0xf1,0x8f,0xa9,0x8c,0xb9,0x3b,0xdb,0x6a,0xb6,0x72,0x76,0x67,0xac,0x6a,0x6c, + 0x52,0x6c,0x63,0xec,0x9b,0xb8,0x80,0xb8,0xaa,0xb8,0x81,0x78,0x87,0xf8,0x45,0xf1, + 0x97,0x12,0x74,0x13,0x24,0x9,0xed,0x89,0xe4,0xc4,0xd8,0xc4,0x3d,0x89,0xe3,0x73, + 0x2,0xe7,0x6c,0x9a,0x33,0x9c,0xe4,0x9a,0x54,0x96,0x74,0x63,0xae,0xe5,0xdc,0xa2, + 0xb9,0x17,0xe6,0xe9,0xce,0xcb,0x9e,0x77,0x3c,0x59,0x35,0x59,0x90,0x7c,0x38,0x85, + 0x98,0x12,0x97,0xb2,0x3f,0xe5,0x83,0x20,0x42,0x50,0x2f,0x18,0x4f,0xe5,0xa7,0x6e, + 0x4d,0x1d,0x13,0xf2,0x84,0x9b,0x85,0x4f,0x45,0xbe,0xa2,0x8d,0xa2,0x51,0xb1,0xb7, + 0xb8,0x4a,0x3c,0x92,0xe6,0x9d,0x56,0x95,0xf6,0x38,0xdd,0x3b,0x7d,0x43,0xfa,0x68, + 0x86,0x4f,0x46,0x75,0xc6,0x33,0x9,0x4f,0x52,0x2b,0x79,0x91,0x19,0x92,0xb9,0x23, + 0xf3,0x4d,0x56,0x44,0xd6,0xde,0xac,0xcf,0xd9,0x71,0xd9,0x2d,0x39,0x94,0x9c,0x94, + 0x9c,0xa3,0x52,0xd,0x69,0x96,0xb4,0x2b,0xd7,0x30,0xb7,0x28,0xb7,0x4f,0x66,0x2b, + 0x2b,0x93,0xd,0xe4,0x79,0xe6,0x6d,0xca,0x1b,0x93,0x87,0xca,0xf7,0xe4,0x23,0xf9, + 0x73,0xf3,0xdb,0x15,0x6c,0x85,0x4c,0xd1,0xa3,0xb4,0x52,0xae,0x50,0xe,0x16,0x4c, + 0x2f,0xa8,0x2b,0x78,0x5b,0x18,0x5b,0x78,0xb8,0x48,0xbd,0x48,0x5a,0xd4,0x33,0xdf, + 0x66,0xfe,0xea,0xf9,0x23,0xb,0x82,0x16,0x7c,0xbd,0x90,0xb0,0x50,0xb8,0xb0,0xb3, + 0xd8,0xb8,0x78,0x59,0xf1,0xe0,0x22,0xbf,0x45,0xbb,0x16,0x23,0x8b,0x53,0x17,0x77, + 0x2e,0x31,0x5d,0x52,0xba,0x64,0x78,0x69,0xf0,0xd2,0x7d,0xcb,0x68,0xcb,0xb2,0x96, + 0xfd,0x50,0xe2,0x58,0x52,0x55,0xf2,0x6a,0x79,0xdc,0xf2,0x8e,0x52,0x83,0xd2,0xa5, + 0xa5,0x43,0x2b,0x82,0x57,0x34,0x95,0xa9,0x94,0xc9,0xcb,0x6e,0xae,0xf4,0x5a,0xb9, + 0x63,0x15,0x61,0x95,0x64,0x55,0xef,0x6a,0x97,0xd5,0x5b,0x56,0x7f,0x2a,0x17,0x95, + 0x5f,0xac,0x70,0xac,0xa8,0xae,0xf8,0xb0,0x46,0xb8,0xe6,0xe2,0x57,0x4e,0x5f,0xd5, + 0x7c,0xf5,0x79,0x6d,0xda,0xda,0xde,0x4a,0xb7,0xca,0xed,0xeb,0x48,0xeb,0xa4,0xeb, + 0x6e,0xac,0xf7,0x59,0xbf,0xaf,0x4a,0xbd,0x6a,0x41,0xd5,0xd0,0x86,0xf0,0xd,0xad, + 0x1b,0xf1,0x8d,0xe5,0x1b,0x5f,0x6d,0x4a,0xde,0x74,0xa1,0x7a,0x6a,0xf5,0x8e,0xcd, + 0xb4,0xcd,0xca,0xcd,0x3,0x35,0x61,0x35,0xed,0x5b,0xcc,0xb6,0xac,0xdb,0xf2,0xa1, + 0x36,0xa3,0xf6,0x7a,0x9d,0x7f,0x5d,0xcb,0x56,0xfd,0xad,0xab,0xb7,0xbe,0xd9,0x26, + 0xda,0xd6,0xbf,0xdd,0x77,0x7b,0xf3,0xe,0x83,0x1d,0x15,0x3b,0xde,0xef,0x94,0xec, + 0xbc,0xb5,0x2b,0x78,0x57,0x6b,0xbd,0x45,0x7d,0xf5,0x6e,0xd2,0xee,0x82,0xdd,0x8f, + 0x1a,0x62,0x1b,0xba,0xbf,0xe6,0x7e,0xdd,0xb8,0x47,0x77,0x4f,0xc5,0x9e,0x8f,0x7b, + 0xa5,0x7b,0x7,0xf6,0x45,0xef,0xeb,0x6a,0x74,0x6f,0x6c,0xdc,0xaf,0xbf,0xbf,0xb2, + 0x9,0x6d,0x52,0x36,0x8d,0x1e,0x48,0x3a,0x70,0xe5,0x9b,0x80,0x6f,0xda,0x9b,0xed, + 0x9a,0x77,0xb5,0x70,0x5a,0x2a,0xe,0xc2,0x41,0xe5,0xc1,0x27,0xdf,0xa6,0x7c,0x7b, + 0xe3,0x50,0xe8,0xa1,0xce,0xc3,0xdc,0xc3,0xcd,0xdf,0x99,0x7f,0xb7,0xf5,0x8,0xeb, + 0x48,0x79,0x2b,0xd2,0x3a,0xbf,0x75,0xac,0x2d,0xa3,0x6d,0xa0,0x3d,0xa1,0xbd,0xef, + 0xe8,0x8c,0xa3,0x9d,0x1d,0x5e,0x1d,0x47,0xbe,0xb7,0xff,0x7e,0xef,0x31,0xe3,0x63, + 0x75,0xc7,0x35,0x8f,0x57,0x9e,0xa0,0x9d,0x28,0x3d,0xf1,0xf9,0xe4,0x82,0x93,0xe3, + 0xa7,0x64,0xa7,0x9e,0x9d,0x4e,0x3f,0x3d,0xd4,0x99,0xdc,0x79,0xf7,0x4c,0xfc,0x99, + 0x6b,0x5d,0x51,0x5d,0xbd,0x67,0x43,0xcf,0x9e,0x3f,0x17,0x74,0xee,0x4c,0xb7,0x5f, + 0xf7,0xc9,0xf3,0xde,0xe7,0x8f,0x5d,0xf0,0xbc,0x70,0xf4,0x22,0xf7,0x62,0xdb,0x25, + 0xb7,0x4b,0xad,0x3d,0xae,0x3d,0x47,0x7e,0x70,0xfd,0xe1,0x48,0xaf,0x5b,0x6f,0xeb, + 0x65,0xf7,0xcb,0xed,0x57,0x3c,0xae,0x74,0xf4,0x4d,0xeb,0x3b,0xd1,0xef,0xd3,0x7f, + 0xfa,0x6a,0xc0,0xd5,0x73,0xd7,0xf8,0xd7,0x2e,0x5d,0x9f,0x79,0xbd,0xef,0xc6,0xec, + 0x1b,0xb7,0x6e,0x26,0xdd,0x1c,0xb8,0x25,0xba,0xf5,0xf8,0x76,0xf6,0xed,0x17,0x77, + 0xa,0xee,0x4c,0xdc,0x5d,0x7a,0x8f,0x78,0xaf,0xfc,0xbe,0xda,0xfd,0xea,0x7,0xfa, + 0xf,0xea,0x7f,0xb4,0xfe,0xb1,0x65,0xc0,0x6d,0xe0,0xf8,0x60,0xc0,0x60,0xcf,0xc3, + 0x59,0xf,0xef,0xe,0x9,0x87,0x9e,0xfe,0x94,0xff,0xd3,0x87,0xe1,0xd2,0x47,0xcc, + 0x47,0xd5,0x23,0x46,0x23,0x8d,0x8f,0x9d,0x1f,0x1f,0x1b,0xd,0x1a,0xbd,0xf2,0x64, + 0xce,0x93,0xe1,0xa7,0xb2,0xa7,0x13,0xcf,0xca,0x7e,0x56,0xff,0x79,0xeb,0x73,0xab, + 0xe7,0xdf,0xfd,0xe2,0xfb,0x4b,0xcf,0x58,0xfc,0xd8,0xf0,0xb,0xf9,0x8b,0xcf,0xbf, + 0xae,0x79,0xa9,0xf3,0x72,0xef,0xab,0xa9,0xaf,0x3a,0xc7,0x23,0xc7,0x1f,0xbc,0xce, + 0x79,0x3d,0xf1,0xa6,0xfc,0xad,0xce,0xdb,0x7d,0xef,0xb8,0xef,0xba,0xdf,0xc7,0xbd, + 0x1f,0x99,0x28,0xfc,0x40,0xfe,0x50,0xf3,0xd1,0xfa,0x63,0xc7,0xa7,0xd0,0x4f,0xf7, + 0x3e,0xe7,0x7c,0xfe,0xfc,0x2f,0xf7,0x84,0xf3,0xfb,0x25,0xd2,0x9f,0x33,0x0,0x0, + 0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x25,0x0,0x0,0x80,0x83,0x0,0x0, + 0xf9,0xff,0x0,0x0,0x80,0xe9,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0, + 0x3a,0x98,0x0,0x0,0x17,0x6f,0x92,0x5f,0xc5,0x46,0x0,0x0,0x1a,0xea,0x49,0x44, + 0x41,0x54,0x78,0xda,0xec,0x9b,0x79,0x90,0x64,0x47,0x9d,0xdf,0x3f,0x99,0xf9,0xae, + 0xaa,0xea,0xaa,0xea,0x7b,0xba,0x7b,0xae,0x9e,0x51,0x6b,0xa4,0x19,0x9,0x46,0xa3, + 0x13,0x89,0x43,0x23,0x10,0x5a,0x2f,0x42,0x48,0x2c,0x5e,0xaf,0xf0,0xe2,0x40,0xe, + 0x8,0x2f,0xe,0xd9,0x81,0x58,0x3b,0x38,0x36,0xd6,0x68,0x30,0xb0,0x4,0x6,0x73, + 0xad,0x1d,0x21,0x60,0x59,0x9,0xb3,0x1c,0x46,0xb,0x42,0x12,0x2c,0x97,0x85,0xae, + 0x45,0x1c,0x36,0xd6,0x1,0x12,0xd6,0x48,0x9a,0xb3,0xef,0xae,0xee,0xaa,0xee,0xae, + 0xeb,0x5d,0x99,0xfe,0xe3,0xbd,0xaa,0xae,0xe9,0xe9,0x39,0x35,0x23,0x8,0x87,0xb3, + 0xa3,0xa2,0xde,0x7b,0x95,0xfd,0xea,0xe5,0x37,0x7f,0xbf,0x6f,0x7e,0x7f,0xbf,0x5f, + 0x96,0x30,0xc6,0x70,0xb6,0xdb,0xb3,0xcf,0x3c,0x33,0xfa,0xcc,0xd3,0x4f,0xbf,0x3a, + 0x36,0xd8,0x63,0xdb,0xb6,0xfd,0x7c,0xeb,0xd6,0x2d,0xcf,0x16,0xa,0x85,0x98,0xdf, + 0x61,0x1b,0x1e,0x1e,0xea,0xcf,0xe7,0xf3,0xd7,0xf4,0xf5,0xf5,0x5e,0x6e,0x59,0x76, + 0x76,0x71,0x71,0xf1,0xb7,0xf3,0xf3,0xf3,0xf,0x48,0x29,0x9f,0x3d,0x7c,0x78,0x5c, + 0xb7,0xfa,0x89,0xb3,0xd,0xd0,0xff,0xfc,0xd9,0xcf,0xae,0x9f,0x18,0x9f,0xf8,0xb, + 0x3,0x63,0xa1,0x86,0x6a,0xbd,0xbe,0x58,0xec,0x2e,0xfe,0xf7,0x7f,0x72,0xdd,0xb5, + 0x1f,0xcc,0xe5,0x72,0xe6,0xa5,0x6,0xe6,0x9c,0x73,0xb6,0x5a,0x42,0x88,0xf7,0xbd, + 0xe1,0xd,0x6f,0xf8,0xc8,0x8d,0x37,0xde,0xc4,0xe0,0xe0,0x20,0x52,0x4a,0xea,0xf5, + 0x3a,0x8f,0x3d,0xf6,0x18,0x77,0xdf,0x7d,0xf7,0x33,0xfb,0xf7,0xef,0xfb,0xc3,0x89, + 0x89,0xc9,0x43,0x67,0x1d,0xa0,0xc7,0x1e,0x7d,0xe4,0xad,0x13,0x87,0xc7,0x3f,0x8c, + 0x50,0xe7,0x58,0x8e,0x43,0x6c,0xa0,0xd1,0x6c,0x62,0x8c,0xae,0x6c,0x3b,0x77,0xec, + 0xdd,0xeb,0x47,0x46,0xee,0xdf,0xb8,0x69,0x63,0xf9,0x25,0x4,0x47,0xf5,0xf5,0xf6, + 0x3e,0xf0,0x97,0xff,0xf1,0xc3,0x57,0x5f,0x7a,0xf9,0x65,0x84,0xd5,0x1a,0x51,0x14, + 0x61,0x8c,0x41,0x4a,0x89,0x9b,0xcd,0xb2,0xec,0xfb,0x7c,0xea,0xaf,0x3e,0xca,0xf7, + 0xee,0xff,0xee,0xd8,0xc4,0xe4,0xe4,0xb,0x67,0xd,0xa0,0x87,0x1f,0x7c,0xe8,0x5d, + 0xe3,0x87,0xc7,0x3f,0xea,0xd8,0x4e,0xaf,0xb2,0x1d,0xc,0x60,0x84,0x1,0x3,0xda, + 0x18,0x4,0x2c,0x74,0xe5,0x73,0xf,0x15,0x8b,0xc5,0x9f,0x3b,0xb6,0xf3,0xf3,0x6c, + 0x36,0xf3,0xf4,0xc6,0x8d,0x1b,0xca,0xf9,0x7c,0xfe,0xac,0xcd,0xd8,0x8e,0x1d,0xdb, + 0xf7,0x7c,0xf2,0xb3,0x9f,0xbd,0xfd,0x62,0x69,0xb3,0xbc,0xbc,0x8c,0xb9,0xf8,0x22, + 0x68,0x36,0x93,0xf,0x6d,0x1b,0x16,0x16,0x70,0x1e,0x7f,0x8a,0xf8,0xca,0xcb,0x79, + 0xef,0x9e,0xdb,0x67,0x1e,0x79,0xe8,0xe1,0xcd,0x6a,0xcf,0x9e,0x3d,0x67,0xfc,0x41, + 0x1e,0x78,0xe0,0x27,0xb7,0x1d,0x38,0x70,0xe8,0xaf,0x5d,0x37,0x93,0xb1,0x1c,0x7, + 0x23,0x40,0xd3,0x72,0x6b,0x81,0x12,0x92,0x58,0xc7,0x99,0x6a,0xad,0xb6,0xbd,0xbc, + 0x50,0x79,0x7d,0xad,0x56,0x7f,0x73,0x18,0x86,0xe7,0x2e,0x2d,0x2f,0xf,0x54,0xab, + 0x55,0x39,0x35,0x3d,0xe3,0x3b,0xb6,0xdd,0xcc,0x64,0x32,0x67,0xc,0xac,0x75,0xeb, + 0xd6,0xf5,0xdc,0x7c,0xf3,0xcd,0xdf,0x7f,0xf3,0xcd,0x7f,0xc2,0xf2,0x3d,0xf7,0x21, + 0xbe,0x70,0x27,0x5c,0xb0,0x1d,0xd6,0xf,0x27,0x1d,0x82,0x0,0xf9,0x9f,0x3f,0x87, + 0x7e,0xf8,0x51,0xbc,0x1b,0xde,0xc0,0xc6,0xf3,0xb6,0x75,0xfd,0xe4,0x7f,0xfc,0xf8, + 0xc0,0x19,0xb7,0xa0,0x1f,0xfc,0xf0,0x47,0xff,0x7e,0x62,0x7c,0xe2,0x13,0x99,0x4c, + 0x16,0xcf,0xf3,0x88,0xb5,0x6,0x3a,0xbf,0x43,0x20,0x8c,0xc1,0x8,0x81,0x10,0xa0, + 0x63,0x4d,0x14,0x45,0xc4,0x3a,0x6,0x4,0x8e,0xe3,0xd0,0xd3,0x5d,0xfc,0xce,0xc0, + 0xc0,0xc0,0x7d,0x41,0x18,0xfc,0x22,0xc,0xa3,0x89,0x4d,0x1b,0x37,0x56,0x37,0x6d, + 0xda,0xf0,0xa2,0x48,0x7d,0x6c,0x6c,0xec,0x4f,0xef,0xb8,0xe3,0x8e,0xbf,0x3b,0xf7, + 0xbc,0x6d,0xf8,0x4d,0x1f,0xf9,0xe9,0xbf,0x86,0xa7,0x7e,0x83,0xfe,0xab,0x3d,0x30, + 0x3a,0x8a,0xfc,0xd8,0x27,0xe0,0x37,0xcf,0x60,0x3e,0xf8,0x1,0x38,0x77,0xc,0x1b, + 0x78,0xcf,0x7b,0xde,0xf3,0x94,0x75,0x26,0xc1,0xb9,0xef,0xfe,0xef,0x7e,0x78,0x6e, + 0xae,0xf4,0x97,0x99,0x6c,0x16,0xcf,0xf5,0x88,0xe3,0xb8,0x85,0x9,0x18,0x81,0x0, + 0xc0,0x60,0x44,0xfa,0xf,0x6,0x84,0x10,0xd8,0x8e,0x8d,0x23,0x1c,0x8c,0x31,0x44, + 0x51,0xcc,0xcc,0xec,0xdc,0x4d,0x53,0xd3,0xd3,0x37,0x65,0xb3,0x39,0x7a,0x7b,0x7b, + 0xef,0x2f,0x95,0x4a,0xdf,0x8a,0xe2,0xf0,0x97,0x33,0xd3,0xb3,0xe3,0x85,0x42,0xbe, + 0x7e,0xc1,0x5,0x3b,0xe2,0x53,0x5f,0xb5,0x86,0x5f,0x37,0x3c,0x3c,0x4c,0xe8,0x7, + 0xa0,0x14,0xfa,0xdd,0xff,0x6,0xf9,0xa9,0xcf,0x22,0x3f,0xfe,0x29,0x58,0xbf,0x1e, + 0x9e,0x7f,0x1,0xf3,0x1f,0xde,0x8f,0x39,0xff,0x3c,0x68,0x34,0x70,0xba,0xba,0xd8, + 0xbe,0xfd,0xfc,0xe2,0x19,0x3,0xe8,0xef,0xbf,0xf5,0xed,0xbb,0x16,0x97,0x96,0xde, + 0x9e,0xcd,0x64,0x71,0x1c,0x67,0x5,0x1c,0x5a,0x6,0x64,0x92,0xb7,0x36,0x38,0x47, + 0x9e,0x9b,0xf4,0xc4,0x52,0xa,0xcb,0xb6,0x10,0x6,0xe2,0x58,0x33,0x3d,0x3d,0x7d, + 0xc3,0xe4,0xd4,0xe4,0xd,0x96,0xb2,0xe8,0xed,0xe9,0xf9,0x85,0xeb,0x3a,0x5f,0x9c, + 0x98,0x98,0xfc,0x71,0x1c,0xc7,0xd3,0xf3,0xf3,0xf3,0xd1,0xae,0x5d,0x17,0xe9,0x93, + 0x79,0xbe,0x5c,0x2e,0x3b,0xe8,0x38,0xc9,0x24,0x10,0x86,0x90,0xcd,0xa2,0xdf,0xf5, + 0x4e,0xe4,0x9f,0xbf,0xf,0x1e,0xfe,0x47,0xcc,0xbf,0xfb,0xb7,0x98,0x5d,0x3b,0x61, + 0xa1,0xc,0x42,0x60,0xc,0x14,0xa,0xc5,0xe8,0x8c,0x0,0xf4,0xf5,0x6f,0x7c,0xf3, + 0x6b,0xf5,0x7a,0xfd,0xad,0x5d,0xb9,0x2e,0xa4,0x94,0x9,0x38,0xa2,0xc3,0xa5,0xda, + 0x40,0x88,0x36,0x58,0x74,0x5c,0x5b,0x31,0x28,0x93,0x5a,0x5b,0x72,0xae,0x94,0x44, + 0x59,0xe,0x20,0x30,0xc6,0x50,0x2e,0x97,0xaf,0x98,0x9f,0x9f,0xbf,0x62,0xef,0x73, + 0xcf,0x53,0x2c,0x16,0x1f,0x1b,0x1e,0x5a,0x77,0xc7,0xf8,0xf8,0xc4,0xc3,0x7d,0xbd, + 0xbd,0x93,0x87,0x27,0x26,0xe2,0x6d,0xe7,0x8e,0x1d,0x93,0x2f,0x9a,0xcd,0x66,0x39, + 0x8a,0x22,0x6c,0xdb,0xc6,0x28,0x5,0x51,0x84,0xb8,0xfb,0xdb,0x20,0x15,0xec,0xbc, + 0x10,0xf1,0xbd,0x1f,0x60,0x5e,0x7e,0x21,0x8c,0x8c,0x40,0xb3,0x89,0x10,0x50,0xab, + 0xd5,0xa4,0x7c,0xb1,0xe0,0xfc,0xdd,0x57,0xbf,0x76,0x5f,0xb5,0x5a,0x7d,0x6b,0x57, + 0xae,0xb,0x21,0xc4,0xca,0x20,0x39,0x72,0xf0,0xc9,0x32,0x66,0x56,0x81,0xc3,0x91, + 0xe0,0xac,0x6,0x54,0xac,0x7c,0x8f,0x4c,0x5d,0xd1,0xf5,0x3c,0x2c,0xcb,0x66,0x79, + 0xb9,0x7a,0xd5,0xb3,0xcf,0x3e,0x77,0xd7,0xcf,0x7f,0xf1,0xcb,0xfd,0x3f,0x79,0xe8, + 0xe1,0x47,0xe7,0xe7,0x17,0x6e,0x9d,0x9c,0x9c,0x1c,0x3d,0x78,0xf0,0xe0,0x9a,0x63, + 0x9a,0x9e,0x9e,0xf9,0xc7,0xb9,0xb9,0x59,0x2c,0xdb,0x2,0xcb,0x42,0x7c,0xe9,0xcb, + 0x88,0x1f,0x3d,0x80,0xb9,0xed,0x56,0xf4,0x47,0xf6,0x80,0xe7,0x21,0x3f,0xf4,0x31, + 0x98,0x9a,0x6,0xc7,0x26,0x8a,0x22,0x9e,0x7b,0x6e,0x6f,0xf8,0xa2,0x48,0xfa,0xeb, + 0xdf,0xf8,0xe6,0xf7,0xaa,0xd5,0xea,0x75,0xd9,0x6c,0xd6,0x32,0xc6,0x20,0x84,0x40, + 0xa,0x81,0x90,0x12,0x29,0x14,0x42,0xac,0xc,0x5d,0x8,0x1,0x42,0xa5,0x0,0x98, + 0xe4,0x6a,0xdb,0x9a,0xd6,0x0,0x67,0x35,0xc4,0x1d,0xa0,0xb7,0x69,0x2d,0xfd,0x3f, + 0x3,0x1a,0x6d,0xaa,0xca,0x52,0xcb,0x19,0xcf,0xdb,0xdb,0xdd,0xdd,0xfd,0xd5,0x81, + 0x81,0x81,0x9f,0x4e,0x4f,0x4d,0x5f,0x59,0x59,0x5c,0xdc,0x31,0xb2,0x7e,0xf8,0xc7, + 0x7f,0xf1,0x81,0xf7,0x4f,0xbc,0xea,0x55,0xaf,0xfc,0xcd,0x3b,0x6e,0xbd,0x95,0xe5, + 0x3b,0xbf,0x82,0xf8,0xf2,0x57,0x31,0xef,0xfd,0x73,0xcc,0x6b,0xae,0x82,0x28,0x86, + 0x72,0x5,0xb9,0xe7,0xa3,0xd0,0x6c,0xe2,0x7c,0xe6,0x3f,0x71,0x60,0x61,0x9e,0x3f, + 0x7b,0xe7,0x3b,0xdf,0x7b,0xda,0x0,0xfd,0xd7,0x3b,0xbe,0x70,0x9f,0x14,0xe2,0xfa, + 0xbe,0xbe,0x3e,0x69,0xb4,0xc6,0x18,0x83,0x31,0x6,0xad,0x75,0x6a,0x29,0x2,0xa9, + 0x24,0x52,0xca,0xf4,0x58,0x21,0x52,0x80,0x30,0x1a,0x63,0x74,0x27,0x41,0x75,0x7a, + 0xdc,0x51,0x40,0xac,0x69,0x91,0x1d,0x7,0x26,0xb5,0xcc,0x64,0x92,0x24,0x96,0x52, + 0x25,0x29,0xe5,0xb4,0x14,0x62,0x48,0x59,0xaa,0x50,0xab,0xd7,0x66,0x84,0x90,0x5f, + 0xff,0xe4,0x27,0x3e,0x7e,0xc1,0x27,0x3e,0xf3,0xe9,0xeb,0x47,0xc7,0xa7,0xa8,0x55, + 0x16,0xe1,0xda,0x6b,0x56,0x74,0x90,0xeb,0xc2,0xa1,0xc3,0x58,0x8f,0xfc,0x14,0xfb, + 0x2d,0x37,0x72,0xfb,0x27,0x3f,0xd1,0xbc,0xff,0xde,0x7b,0x7,0x4e,0xb,0xa0,0xff, + 0xf2,0x85,0xbf,0xf9,0xe2,0x4c,0xa9,0xf4,0xce,0x4d,0xc3,0xc3,0xf4,0x15,0x8b,0x84, + 0x51,0xd4,0xfe,0xcc,0x52,0x16,0x52,0xa,0xe2,0x58,0x13,0x46,0x21,0x46,0x1b,0x10, + 0x2,0x29,0x25,0x52,0x5a,0x48,0x25,0x53,0x1b,0x4a,0x40,0x15,0x1d,0x24,0x7e,0x22, + 0x20,0x56,0x5b,0xd7,0xd1,0xd7,0x4,0x46,0x9b,0x54,0x19,0x43,0x26,0x9b,0x21,0x8, + 0x43,0x16,0xe6,0xe7,0xf1,0xfd,0x20,0xa,0xc3,0xf0,0xb,0xf7,0xdd,0xfb,0xed,0xeb, + 0x3f,0xf8,0x91,0x8f,0x6e,0xde,0x3a,0x36,0x46,0xb3,0x52,0x69,0x2f,0x26,0x42,0x8, + 0xdc,0x5c,0xe,0xad,0x14,0x5f,0xf8,0xdc,0xe7,0xb8,0xeb,0x6f,0xff,0xf6,0xaa,0x89, + 0xc9,0xc9,0x9f,0x9d,0x32,0x40,0xf7,0x7d,0xf7,0x1f,0xde,0xf8,0xe8,0xaf,0x1e,0xbf, + 0xd3,0x72,0xbd,0xfe,0xad,0x23,0x43,0x74,0xbb,0xe,0x5a,0x88,0xf6,0x92,0x1d,0x45, + 0x11,0x61,0x18,0x22,0x95,0xc4,0xb6,0x9c,0xc4,0xcd,0x4,0x89,0x85,0x21,0x40,0xa4, + 0xee,0x27,0x13,0x98,0x64,0xfa,0xd9,0x91,0x96,0x24,0x8e,0x3,0x96,0x38,0xa6,0xc5, + 0x19,0xc,0x12,0x81,0x65,0x59,0x38,0x8e,0x8d,0x1f,0xf8,0x2c,0x2d,0x2d,0x13,0x4, + 0x1,0xcd,0x66,0x13,0xa5,0xd4,0x4c,0xbd,0x56,0xfd,0x57,0x5f,0xfa,0xd2,0x17,0xdf, + 0xf6,0xb6,0xb7,0xfd,0x8b,0x3f,0xbe,0xee,0xba,0xeb,0xc8,0xe7,0xf3,0x48,0x29,0xf1, + 0x7d,0x9f,0xa7,0x9f,0x7e,0x9a,0xaf,0x7c,0xe5,0x2b,0xd5,0x5f,0xfd,0xea,0x7f,0xbd, + 0x6e,0x7c,0x7c,0xe2,0x97,0xa7,0x15,0x8b,0x7d,0xf4,0xe3,0x9f,0xfc,0xc9,0xc4,0x7c, + 0xe5,0x9a,0xbe,0xe1,0x61,0xd6,0xf7,0x75,0x93,0x97,0x2,0xdb,0x75,0xd3,0x41,0xa, + 0xe,0x1e,0x3c,0xc0,0xcc,0xcc,0x2c,0x85,0x42,0x81,0xd,0x1b,0xd6,0x53,0x2c,0x76, + 0x3,0xa0,0xb5,0x49,0xd9,0x26,0x45,0x4c,0x80,0x30,0x1a,0x8c,0x46,0xa,0x10,0x52, + 0x82,0x10,0x29,0x1c,0x6,0x3a,0xde,0x4f,0xc,0x90,0x48,0xdd,0xb,0x6c,0xcb,0xc2, + 0xb2,0x2d,0x2,0x3f,0x60,0x71,0x69,0x89,0x30,0xc,0x11,0x8,0x82,0x30,0xc4,0xf, + 0xfc,0xa0,0xa7,0xbb,0xfb,0xe1,0xfe,0xfe,0xde,0x1b,0xdf,0xf9,0x8e,0x7f,0xb9,0x71, + 0xdd,0xba,0xa1,0xb7,0xc,0xd,0xd,0x5d,0x6e,0x59,0x96,0x57,0x2e,0x97,0x5f,0x18, + 0x1f,0x3f,0x7c,0xaf,0xef,0x7,0x8f,0x4e,0x4e,0x4e,0x35,0xdb,0x1e,0x71,0xaa,0xee, + 0xe5,0x7,0xc1,0x95,0x39,0xd7,0xc1,0x13,0x86,0xd8,0x6f,0x12,0xd8,0x36,0x96,0xe3, + 0x26,0x24,0x9c,0x9a,0xaa,0x90,0xa2,0xcd,0x9,0x2d,0xbd,0x23,0x48,0xdc,0xc,0x21, + 0xd2,0x5,0x4d,0xa3,0x8d,0x1,0xa3,0x89,0xd,0x88,0x94,0x3f,0xa4,0x48,0xc1,0x13, + 0x2,0x21,0xe4,0x8a,0x48,0x12,0x47,0x3e,0xc7,0xd1,0x64,0xe,0x8e,0x65,0xa3,0x2c, + 0x45,0xb3,0xe9,0xb3,0xb8,0xb4,0x48,0x1c,0x25,0xea,0x3c,0x8c,0xe3,0x96,0x2b,0x39, + 0xf3,0xb,0xb,0xaf,0xdf,0xb9,0xf3,0x65,0xe7,0x3d,0xf9,0xd4,0x6f,0x9e,0xec,0xef, + 0xeb,0xfb,0xd8,0x89,0xc6,0x7b,0x4a,0x0,0xfd,0xb7,0xaf,0x7e,0xe3,0xab,0xc5,0x62, + 0x11,0xd7,0xf7,0x91,0x41,0x93,0x50,0x1a,0xb4,0xca,0x13,0x45,0x21,0xb6,0x65,0x23, + 0xa4,0x60,0x74,0x74,0x94,0x4d,0x9b,0x36,0x61,0x8c,0xc1,0xb2,0xac,0x84,0x13,0x0, + 0x29,0x5,0xa0,0x13,0x45,0x2d,0x40,0xa,0x50,0x52,0x62,0xa4,0x40,0x6b,0x8d,0xd6, + 0x1a,0xa3,0x63,0x4c,0xb,0x1c,0x49,0x4a,0xf0,0xa4,0xab,0xa1,0x68,0xaf,0x80,0x47, + 0xaf,0x6a,0x6,0xdb,0xb1,0xb0,0x2c,0x8b,0x46,0xb3,0x49,0xa5,0xb2,0x48,0x1c,0x47, + 0x28,0xa5,0x8,0xc2,0xc4,0xe5,0x13,0xa9,0x20,0xd1,0x46,0xeb,0xbd,0xcf,0x3d,0xff, + 0xae,0xc1,0x81,0xc1,0xdb,0x80,0xe6,0x89,0xc6,0x7c,0x4a,0x3a,0x68,0x61,0x61,0xfe, + 0x9f,0x67,0x33,0x19,0x2f,0xeb,0x79,0x64,0x33,0x19,0x5c,0xc7,0x45,0x6b,0x4d,0x18, + 0x86,0x68,0x74,0x42,0xc8,0x6,0x2c,0xcb,0x4a,0x4,0x99,0x36,0x1d,0x63,0x49,0x79, + 0xc6,0xc4,0xa0,0x93,0x55,0xac,0x65,0x59,0x4a,0x29,0x1c,0xc7,0xc1,0x71,0x1c,0x94, + 0x65,0xa7,0x2e,0x19,0x13,0x45,0x21,0x3a,0x8e,0x12,0xf0,0x8c,0x49,0xc0,0x11,0x9d, + 0xe6,0x93,0x80,0x63,0x59,0x16,0xb6,0x65,0x51,0xaf,0xd7,0x8f,0x0,0xc7,0xf,0x2, + 0xa2,0x14,0x9c,0xd6,0xbf,0x28,0xa5,0xe4,0xf4,0xf4,0xcc,0xdb,0xab,0xb5,0x6a,0xcf, + 0xc9,0x8c,0xf9,0xa4,0x1,0xfa,0xde,0x3f,0x7c,0xff,0x1d,0x89,0x19,0x5b,0x58,0x4a, + 0xa5,0xab,0x92,0x44,0x88,0xc4,0x2,0xe2,0x30,0x6e,0x2b,0x9a,0x38,0x8e,0x89,0xe3, + 0x74,0x19,0x17,0xc9,0x72,0xbf,0xb4,0x5c,0x65,0x7a,0x7a,0x96,0xa5,0xa5,0xe5,0x23, + 0xfc,0xa3,0xad,0x1f,0xd3,0xbe,0x42,0x8,0x2c,0xcb,0xc6,0xb6,0x6c,0x2c,0x65,0x61, + 0xc,0xc4,0x51,0x44,0x14,0x6,0x9,0x60,0x7a,0x85,0x97,0x4,0x60,0x29,0x85,0xeb, + 0xd8,0xd4,0x6b,0x75,0x16,0x97,0x96,0x88,0xe3,0x8,0x29,0x25,0x41,0x10,0x10,0xa5, + 0xab,0x6b,0x4b,0x33,0x89,0x74,0x35,0x6d,0x34,0x9a,0x5e,0xa9,0x34,0x7f,0xc1,0xf8, + 0xc4,0xa4,0x38,0x63,0x2e,0x76,0xe8,0xe0,0xa1,0x5b,0x2d,0xa5,0x88,0xa2,0x10,0xa1, + 0x75,0xb2,0xa,0x89,0x95,0x75,0x26,0x8e,0x63,0x94,0x25,0x11,0xc2,0x5a,0x19,0x80, + 0x14,0x58,0xb6,0x8d,0x44,0x30,0xbf,0x50,0x66,0x7c,0x7a,0x9a,0xc1,0xbe,0x3e,0x8a, + 0xc5,0x42,0x4a,0xc8,0x6,0x25,0x41,0x2a,0x45,0x10,0x6a,0xe6,0x4a,0x73,0x1c,0xd8, + 0xbf,0x1f,0xd7,0x71,0x18,0x59,0x3f,0xc2,0x40,0xff,0x40,0x92,0x11,0x88,0x63,0xb4, + 0x49,0xdc,0x30,0x8a,0x23,0x8,0x35,0x52,0x4a,0x1c,0xc7,0xc5,0x76,0x6c,0x6a,0xb5, + 0x3a,0x4b,0xd5,0x2a,0x5a,0x6b,0x94,0x4c,0x2d,0x27,0x8e,0xe9,0x8,0x8f,0x8f,0xe2, + 0xaf,0x72,0xb9,0xfc,0x4a,0x29,0xc5,0x4f,0x37,0xac,0x1f,0x69,0x9c,0x11,0x80,0x4a, + 0xf3,0xf3,0x2f,0xcb,0xe7,0xf3,0xc4,0x71,0x8c,0x31,0x6,0x25,0x54,0x5b,0x1c,0xb6, + 0x88,0xd9,0xa4,0x7a,0x26,0x51,0xd4,0x92,0xa6,0xdf,0x64,0xef,0xde,0xe7,0x88,0xe3, + 0x18,0xcf,0xf3,0xb8,0x60,0xdb,0x36,0xa,0x85,0x3c,0x8,0x99,0x70,0x94,0x4,0x57, + 0x81,0x90,0x10,0x9,0x43,0x14,0x47,0x54,0x6b,0x55,0x82,0xc0,0x26,0xc,0xc3,0x95, + 0x61,0x89,0x84,0x3f,0xa4,0x54,0x1d,0xbc,0x6c,0xd0,0x26,0x66,0x79,0x69,0x39,0xcd, + 0x52,0x26,0xd3,0x12,0xb4,0xc1,0x61,0x4d,0x70,0x48,0x27,0x6e,0x6e,0x6e,0xee,0x9a, + 0xe1,0xe1,0xe1,0x3b,0x80,0x17,0xf,0xd0,0x37,0xbe,0x79,0xf7,0x7,0x7c,0xdf,0xb7, + 0xb2,0x99,0x2c,0xb6,0x67,0xe1,0xb9,0x2e,0xb6,0xe3,0x60,0x59,0x16,0xca,0xb2,0xd2, + 0x15,0x47,0xac,0xac,0x64,0xe9,0x8a,0xa5,0xb5,0xa1,0x52,0xae,0x50,0xab,0x57,0x19, + 0x1a,0x1a,0x66,0x38,0xe3,0x91,0xcd,0x78,0x84,0x41,0x88,0x0,0xb4,0x11,0x4,0x1a, + 0x84,0xd6,0x18,0x23,0x18,0xe8,0xeb,0xa7,0xeb,0xd2,0x4b,0x11,0x8,0x3c,0xcf,0x43, + 0x48,0x81,0x36,0x3a,0x71,0xbb,0x54,0x80,0x86,0x41,0x80,0x54,0x16,0x8e,0x6d,0x51, + 0x6f,0x36,0xa9,0x2c,0x2e,0xa2,0x94,0x2,0x21,0x8,0xc3,0x88,0x28,0x8a,0xdb,0x96, + 0x7d,0x14,0x38,0x66,0x45,0xcc,0x2e,0x2d,0x2f,0x5f,0x16,0x45,0x71,0x2f,0x30,0xf3, + 0xa2,0x1,0x9a,0x9a,0x9c,0x7a,0x9b,0x65,0xd9,0x48,0xdb,0x46,0xb8,0x2e,0x76,0xae, + 0x8b,0xae,0x4c,0x6,0x25,0x4,0x5a,0xc7,0x47,0xa8,0x95,0x44,0xe,0x26,0xc7,0x19, + 0xcf,0x63,0xfb,0xf9,0xe7,0xe3,0x87,0x3e,0x99,0x4c,0x96,0x8c,0xe7,0x11,0x47,0x71, + 0xfb,0xc1,0x35,0x2,0x1d,0xb7,0xe9,0x7,0xd7,0x75,0xc9,0x66,0x73,0x8,0x34,0x3a, + 0xd6,0xc4,0x26,0x49,0xb6,0x49,0x4,0xd5,0x5a,0x8d,0xf2,0xf2,0x12,0x6e,0x26,0x8b, + 0x16,0xd0,0xa8,0x2c,0x22,0x8d,0x26,0x93,0xcb,0xa1,0xe3,0x98,0x28,0x8a,0x93,0x30, + 0xe7,0xa8,0x0,0xe6,0xe8,0xa6,0xa4,0x24,0x8,0xc2,0x6c,0xb5,0x5a,0x1d,0x39,0x7c, + 0x78,0x7c,0xef,0xc6,0x8d,0xc7,0x4e,0xc6,0x9d,0x10,0xa0,0xef,0xff,0xe0,0x87,0x7f, + 0xd4,0x6c,0x36,0x77,0xc,0xf,0xf,0x13,0x9,0xc1,0x42,0xad,0xc1,0x72,0xa8,0xe9, + 0x13,0x92,0xde,0x5c,0x16,0xcf,0xb6,0x92,0x14,0x87,0x36,0x6d,0xf7,0x32,0xc6,0x60, + 0x62,0x83,0x52,0x8a,0xc1,0xa1,0xc1,0x55,0x4f,0x6b,0x0,0x3b,0x25,0x67,0xd3,0x21, + 0x71,0xc,0x1a,0x43,0x1c,0x87,0x60,0x34,0x5a,0x1b,0x94,0x94,0xf8,0x41,0x40,0x69, + 0x7e,0x81,0xc9,0xb9,0x79,0x1a,0xda,0x90,0xef,0xe9,0xc5,0x56,0x92,0xb0,0x56,0x25, + 0x2b,0x5,0xb9,0x5c,0x2e,0xd1,0x39,0x3a,0xe1,0x1c,0x21,0xd6,0x80,0xe8,0x88,0x43, + 0x3,0x52,0x10,0x6b,0x4d,0xa3,0xd1,0x18,0xa9,0x56,0xab,0x19,0xa0,0x7a,0x5a,0x0, + 0xfd,0xf6,0xb7,0xff,0xa7,0x7f,0x69,0x69,0xf9,0xf2,0x7c,0x57,0x9e,0x75,0x83,0x83, + 0x94,0x96,0x96,0x68,0xcc,0x57,0x8,0x94,0x83,0xe5,0x87,0xe8,0x68,0x9,0x15,0x85, + 0x4,0x8d,0x6,0xb1,0x31,0x48,0x29,0xb0,0x2d,0xb,0xdb,0x76,0xf0,0x5c,0xf,0xd7, + 0x75,0x40,0x82,0x44,0x26,0x3,0x10,0x60,0x59,0x36,0x96,0x4a,0x42,0x8d,0x24,0x6e, + 0xd2,0x18,0x43,0xaa,0x83,0xa2,0x44,0x40,0x6a,0xd,0x8,0x9a,0x7e,0x40,0x69,0x61, + 0x81,0x43,0x13,0x93,0x4c,0x97,0x4a,0x64,0x7b,0xfb,0xa1,0xd1,0x20,0xe7,0x7a,0x64, + 0x32,0x39,0x6c,0x34,0xbe,0xef,0x13,0x6b,0xb3,0x2,0xcc,0x49,0x6,0x6,0x5a,0x6b, + 0xc2,0x28,0x1c,0xa,0x82,0xa0,0xfb,0xb4,0x1,0x9a,0x9e,0x99,0xd9,0xa5,0x94,0x7c, + 0x59,0x4f,0x4f,0x11,0x29,0x5,0x59,0xd7,0x61,0xb0,0xaf,0x87,0xc8,0xf1,0xd0,0x71, + 0xcc,0xa1,0xc9,0x29,0x66,0xc7,0xc7,0xf1,0x6b,0x35,0x5c,0xcf,0xc3,0xb1,0x13,0xb1, + 0xe6,0xb8,0xe,0x5d,0xb9,0x2e,0xa,0x85,0x2,0xf9,0x7c,0x17,0xb9,0x5c,0xe,0xd7, + 0x75,0xd3,0xe5,0x37,0x24,0x92,0x11,0x76,0xca,0x5d,0x8,0x88,0x75,0x8c,0x8e,0x35, + 0x3a,0xd2,0xed,0x1c,0xb6,0xd6,0x9a,0xf2,0xe2,0x12,0x73,0xb,0x15,0xe2,0x58,0x93, + 0xf7,0x3c,0x6c,0x1,0x96,0xd6,0xf8,0x7e,0x3,0x29,0x21,0x97,0xc9,0x10,0xb7,0x34, + 0x82,0x11,0x6b,0xbb,0xd7,0x31,0x4e,0x24,0x2,0xbf,0xe9,0xf,0x2e,0x57,0xab,0x7d, + 0xc0,0xf8,0x69,0x1,0xd4,0xa8,0x37,0xae,0x55,0x52,0xed,0xb4,0x6d,0x87,0x30,0x8a, + 0x70,0x6d,0x9b,0x9e,0x8c,0xc7,0xbe,0x83,0x87,0xf0,0xa3,0x88,0x66,0xa3,0x41,0x1c, + 0x45,0x74,0xf7,0xf4,0x50,0xc8,0xe7,0xb1,0x2c,0x85,0xd6,0x9a,0x20,0x8,0x28,0x97, + 0xcb,0x94,0x4a,0x25,0x2c,0xcb,0xa2,0x50,0x28,0x30,0x34,0x3c,0x44,0x6f,0x4f,0x2f, + 0xae,0x9b,0x88,0x4b,0xdf,0xf,0x50,0x69,0x3a,0x24,0xd6,0x71,0xc2,0x4d,0xa6,0x95, + 0x27,0x32,0xd4,0xea,0xd,0x6a,0x8d,0x3a,0x2,0x43,0x2e,0x97,0xa5,0xd0,0xd5,0x85, + 0x90,0x82,0x66,0xe0,0x13,0x44,0x21,0x2a,0x97,0xc1,0x75,0xec,0x14,0xd0,0xd5,0xcd, + 0xac,0x69,0x4d,0x9d,0x5c,0xa9,0x94,0xa2,0xd1,0x68,0x74,0x97,0xcb,0xe5,0xee,0xd3, + 0x26,0xe9,0x30,0xa,0xaf,0x32,0x86,0xf5,0xad,0xdb,0x86,0x51,0xcc,0x81,0x7d,0xfb, + 0x38,0x74,0xe0,0x20,0xc5,0xde,0x5e,0x36,0x6d,0xde,0x4c,0xfe,0xbc,0x6d,0x58,0x52, + 0x26,0x91,0xb4,0x58,0x49,0x3,0xc6,0x3a,0xa6,0xd9,0x68,0x52,0xad,0x56,0x99,0x2b, + 0xcd,0xf1,0xeb,0x5f,0xff,0x9a,0xbe,0x9e,0x5e,0xb6,0x6c,0xd9,0x42,0x6f,0x5f,0x2f, + 0x6,0x43,0x1c,0xeb,0xb6,0x4a,0x6e,0xbf,0x77,0xe8,0x1d,0x29,0x20,0xe7,0x79,0x48, + 0xcb,0xc2,0x71,0x5d,0x62,0x1d,0xa3,0x6a,0x35,0xfa,0xec,0x3c,0xf9,0x5c,0x36,0xe1, + 0xbd,0xd5,0xfc,0xb2,0x56,0xeb,0xd0,0x6b,0xed,0x48,0x45,0x4a,0x82,0x28,0x2c,0xd6, + 0xea,0xf5,0xd3,0x7,0x28,0x8e,0xf5,0x85,0xda,0x68,0x94,0x52,0xc4,0xb1,0xa6,0x54, + 0x9a,0x63,0xdf,0x81,0x3,0x6c,0xda,0xb4,0x89,0xd1,0xd1,0xcd,0xe4,0x72,0x39,0x64, + 0x9a,0x45,0x6c,0xcd,0x50,0x14,0xc5,0x69,0x32,0xcc,0x26,0xe3,0x79,0x14,0x8b,0x5, + 0x6,0x7,0x7,0xa8,0x54,0x2a,0x4c,0x4d,0x4d,0xf1,0xf8,0x93,0x4f,0xb0,0x71,0x64, + 0x3d,0x5b,0xb6,0x6e,0xc5,0x76,0xec,0xb4,0xfe,0x9d,0x8c,0x21,0x8a,0xa3,0x36,0x1f, + 0xa1,0x35,0xae,0xe3,0xe0,0xe4,0x92,0x10,0xa4,0x19,0x4,0x34,0x1a,0x21,0x7d,0xdd, + 0x45,0x5c,0xdb,0x26,0x8c,0x22,0xa2,0x38,0x46,0xa,0x3a,0xa2,0x7f,0xb1,0x86,0xf5, + 0x98,0xd5,0x89,0xa5,0xc4,0xc5,0xa4,0x40,0x47,0x71,0xaf,0xdf,0xf4,0xfb,0x4e,0x1b, + 0x20,0xa3,0x4d,0x1,0x93,0x8,0xab,0x20,0x8,0x58,0x5e,0xae,0xb2,0xf3,0xe5,0x2f, + 0x63,0xd3,0xa6,0x4d,0x78,0x9e,0x43,0xa3,0xee,0x13,0x4,0x41,0x12,0xe3,0x48,0x89, + 0x52,0x8a,0x8c,0xe7,0xe2,0xb8,0xe,0x42,0x8,0x9a,0xcd,0x26,0x61,0x18,0x63,0xdb, + 0xe,0xae,0xeb,0x92,0xcb,0xe5,0x98,0x9d,0x9d,0x65,0x6a,0x7a,0x9a,0x85,0x4a,0x85, + 0xed,0xdb,0xb7,0x93,0xcb,0x75,0x11,0xea,0x18,0x29,0x25,0xb6,0xe3,0x10,0x34,0xfd, + 0x44,0x11,0x5b,0x16,0xc5,0x5c,0xe,0xd7,0x71,0xf0,0x7d,0x1f,0x25,0x5,0x85,0x5c, + 0x16,0xcb,0x52,0x44,0x51,0x4c,0x1c,0x1b,0x2c,0x95,0x92,0xff,0x31,0xad,0xc7,0x74, + 0x14,0xa,0x3a,0xae,0xa6,0xe2,0x36,0x8a,0x22,0x8e,0xce,0x13,0x9c,0xd2,0x32,0x6f, + 0x24,0x82,0x76,0x4c,0xb3,0x7e,0xfd,0x8,0xc5,0xee,0x22,0x4b,0x8b,0xcb,0x3c,0xf7, + 0xdc,0xf3,0x2c,0x2e,0x2e,0xe1,0x79,0x2e,0x5d,0x5d,0xb9,0xf6,0xb3,0x64,0x3c,0xf, + 0x83,0xc0,0xb1,0x5d,0x36,0x6e,0x1c,0xa1,0x58,0x70,0xa9,0xd5,0x1b,0x34,0x9b,0x4d, + 0xf2,0x5d,0x79,0x2c,0x65,0x61,0xdb,0x2e,0xb3,0xb3,0x33,0x3c,0xf5,0xe4,0x93,0x74, + 0xf5,0xf4,0xa2,0x32,0x39,0x2c,0xc7,0xa6,0xaf,0x3b,0x4f,0xd1,0x71,0x91,0x5a,0x63, + 0x2b,0xb,0x89,0x21,0xc,0x3,0xb4,0x8e,0x71,0x94,0x44,0x48,0x89,0x41,0x10,0xeb, + 0x90,0x6a,0x75,0x99,0x7a,0xbd,0x46,0x6f,0x5f,0x5f,0x9a,0x16,0x31,0x6b,0x52,0x90, + 0x38,0xa,0x32,0xd3,0x8e,0xcb,0xb4,0x31,0x98,0x8e,0x6c,0xe8,0xe9,0x9,0xc5,0x94, + 0x1f,0x2c,0xcb,0xc2,0xcb,0x78,0xcc,0x4c,0xcf,0x70,0xe8,0xf0,0x38,0xa5,0xd2,0x3c, + 0x0,0x5,0x9d,0xc7,0xf3,0xdc,0x24,0xa8,0x4c,0xcb,0x3d,0x7,0xf6,0x1f,0x66,0xdf, + 0xbe,0x9,0xc6,0xce,0x19,0x63,0xdb,0x79,0xa3,0x6c,0x3b,0x77,0x14,0xcf,0x2b,0x50, + 0x59,0x5c,0xc2,0x8e,0x62,0x7a,0xfb,0x7a,0x40,0x18,0xa6,0x26,0xa7,0x98,0x9e,0x9d, + 0xa5,0x38,0xbc,0x9e,0x75,0x43,0xc3,0x88,0x8c,0x4b,0x65,0x79,0x91,0xac,0x12,0x48, + 0x41,0x3b,0xac,0x49,0x5c,0x42,0x22,0x95,0x44,0x1b,0xc1,0xf2,0x72,0x95,0x89,0x89, + 0x71,0xb4,0x36,0xf4,0xf,0xc,0x24,0x16,0x64,0xd6,0xd0,0x3b,0xc7,0x33,0xe,0x73, + 0x2,0xde,0x3a,0x59,0x80,0x8c,0x31,0x49,0x1e,0x59,0x48,0x16,0x17,0x97,0xd8,0xbf, + 0xff,0x0,0xd5,0x6a,0xad,0xc3,0xad,0x93,0x74,0x83,0x10,0x92,0x38,0xd6,0x48,0xa9, + 0xa8,0xd7,0x6b,0x1c,0x3a,0xb4,0x9f,0x72,0xb9,0xcc,0xb3,0x7b,0xf7,0x72,0xee,0xb9, + 0xa3,0x5c,0x75,0xd5,0x65,0xc,0xae,0x1b,0x60,0x41,0x2f,0xe0,0x87,0x3e,0x85,0x42, + 0x1,0x23,0x24,0x73,0xa5,0x79,0x4c,0x14,0x10,0x87,0x21,0xd,0x60,0xa9,0xbc,0xc8, + 0xc6,0xfe,0x1e,0x2c,0x5,0x51,0x18,0x23,0xd2,0x8c,0x81,0x48,0x8b,0x79,0x71,0x14, + 0x13,0x46,0x11,0xb6,0xe3,0x92,0xcd,0x64,0xd2,0xeb,0xfa,0x78,0xdc,0x7c,0x4,0x8, + 0x2d,0xc0,0x45,0x22,0x2f,0x32,0x5a,0xeb,0xec,0x69,0x3,0x64,0x59,0xd6,0xe1,0x20, + 0xc,0x37,0xca,0x34,0xa5,0x31,0x33,0x33,0x43,0xbd,0xde,0x44,0x29,0x85,0x14,0x92, + 0x46,0xd0,0xa4,0xe9,0x27,0x9c,0xe1,0xb8,0xe,0xb6,0x9d,0xee,0xdc,0x10,0x0,0x1, + 0x95,0xca,0x2c,0x7e,0x63,0x99,0x83,0x7,0xf6,0x33,0x3d,0x33,0xcd,0x1f,0x5c,0xf7, + 0x5a,0x36,0x6f,0xde,0x40,0x18,0x86,0x84,0x51,0x4c,0xa1,0xbb,0x1b,0x10,0xcc,0xcc, + 0xcd,0x31,0xfe,0xdb,0xa7,0xe9,0x1d,0x18,0x24,0xe7,0x39,0xb8,0xb6,0x83,0xa5,0x44, + 0x3b,0xa8,0x4d,0xe4,0x76,0x52,0x8,0x68,0xfa,0x3e,0xae,0xeb,0x32,0x32,0x32,0x82, + 0x6d,0x59,0x18,0xad,0x3b,0x87,0x7f,0x74,0x1e,0xfb,0xe8,0xd2,0x24,0x42,0x8,0xea, + 0xf5,0x6,0xc5,0x42,0x61,0xa9,0x50,0xc8,0x4f,0x9d,0x76,0x3e,0x28,0x97,0xcb,0x3d, + 0x64,0x59,0x56,0x55,0x6b,0x4d,0x14,0x85,0x54,0xab,0x55,0x2c,0x4b,0xa5,0x79,0x15, + 0x81,0x44,0xe2,0x7,0x21,0xb5,0x7a,0x1d,0x29,0x93,0x44,0x99,0x92,0x92,0x5c,0x2e, + 0x47,0x4f,0x4f,0x2f,0xae,0xa3,0x28,0xe4,0x1d,0x5c,0x7,0x7e,0xf6,0xd8,0x63,0x7c, + 0xeb,0xee,0x7b,0xd8,0xf7,0xc2,0x7e,0x7a,0x7a,0xba,0xf1,0x3c,0x17,0x61,0xc,0xd9, + 0x4c,0x6,0x4f,0x29,0x1a,0xb,0x25,0xfc,0xf2,0x3c,0x43,0x3d,0xdd,0x38,0xb6,0x85, + 0x52,0x36,0x96,0xed,0xa4,0x29,0x5a,0x91,0x92,0x6a,0x4c,0x14,0x45,0xd8,0x56,0xb2, + 0x42,0x4a,0x25,0x57,0x72,0x49,0xe6,0x78,0xf6,0x63,0x8e,0xb0,0xa2,0xc0,0xf,0x90, + 0x42,0x96,0xb6,0x6d,0x1b,0xfb,0xe2,0x95,0x57,0x5e,0xf1,0xc0,0xf1,0x30,0x38,0xee, + 0xf6,0x97,0xc5,0xa5,0xa5,0xb8,0xd1,0x68,0x6e,0xa8,0xd7,0xeb,0x5b,0xb5,0x36,0x94, + 0x4a,0x25,0xe2,0x58,0x93,0x16,0x31,0x12,0x2d,0xa3,0x63,0xe2,0x30,0x22,0xdf,0xd5, + 0xd5,0x56,0xc7,0x9e,0xe7,0xd1,0xdb,0xd7,0x43,0xb1,0xd8,0x8d,0x94,0x8a,0xbe,0xde, + 0x22,0x96,0xa5,0x38,0x78,0xf0,0x10,0x33,0x33,0x73,0x6c,0xda,0xbc,0x89,0x9e,0xee, + 0x22,0x81,0xef,0x63,0xb4,0xc6,0x71,0xec,0x44,0x37,0xd5,0xeb,0xc,0xf4,0xf5,0x61, + 0x3b,0x76,0x42,0xbc,0x46,0x23,0xd2,0xb4,0x88,0x14,0x10,0x4,0x7e,0xa2,0x9d,0x4c, + 0x2b,0x44,0x31,0x6b,0x80,0x22,0xda,0x1,0x73,0x4b,0x74,0xb6,0x7a,0x69,0x63,0xd0, + 0xb1,0xc6,0x18,0x3d,0x7b,0xe1,0x85,0x3b,0x3e,0x70,0xd9,0xa5,0x97,0xfc,0xfd,0xd0, + 0xba,0x75,0xb5,0xd3,0x6,0x68,0x78,0x68,0xe8,0xd9,0xe9,0xe9,0x99,0x4d,0x4b,0x8b, + 0x4b,0xaf,0x35,0x18,0x2a,0x95,0xa,0x51,0xb4,0x12,0xf8,0xa,0x93,0x8,0xb5,0x20, + 0xc,0x50,0xca,0x4a,0xca,0xc2,0x4a,0x61,0xdb,0x16,0xc5,0x42,0x91,0xe1,0xe1,0x11, + 0x36,0x8f,0x8e,0xd2,0x3b,0x30,0xc8,0x40,0x7f,0x3f,0xae,0xeb,0x32,0x3f,0x5f,0xa6, + 0x34,0x5f,0xe6,0xbc,0xf3,0xc6,0x70,0x1d,0x7,0xad,0x63,0xa4,0xb4,0xd0,0xc6,0xb0, + 0x50,0x2e,0x13,0x45,0x11,0xc5,0x42,0x11,0xc7,0x71,0xb0,0xa5,0xc1,0xb5,0xc0,0x12, + 0x6,0x61,0x62,0xc2,0xc0,0x4f,0x40,0x91,0x1d,0x59,0xc8,0x13,0x90,0x70,0x27,0xf7, + 0x68,0xad,0x41,0x50,0xda,0xb1,0x63,0xc7,0xfb,0x5f,0xf5,0xaa,0xab,0xee,0xca,0xe7, + 0xf3,0xd1,0x8b,0xce,0x28,0xf6,0xf6,0xf6,0x3c,0x32,0x3b,0x37,0x17,0xd5,0xeb,0x75, + 0xcb,0x71,0x6c,0x1a,0x8d,0x66,0xe2,0xd5,0xad,0x12,0xb3,0x65,0xa1,0x80,0xf9,0xd2, + 0x3c,0x9e,0xeb,0xd2,0xdd,0x5d,0x4c,0x85,0x65,0x4c,0xb3,0xe9,0x3,0xd0,0x53,0x2c, + 0xb2,0x6e,0x70,0x90,0xb1,0xb1,0x31,0x66,0x67,0x67,0x98,0x99,0x99,0x63,0xfc,0xf0, + 0x24,0x5b,0xb6,0x6c,0x22,0x93,0xc9,0x10,0xc7,0x35,0xb2,0x99,0x2c,0x85,0x7c,0x9e, + 0xb9,0x52,0x89,0x91,0x91,0x11,0xa,0x5d,0x19,0x1c,0x95,0x70,0x50,0x4b,0x14,0xb6, + 0x92,0x6c,0x2,0x41,0x60,0xc,0xab,0xb9,0xf9,0xe8,0x15,0x69,0x85,0x73,0xc2,0x30, + 0xc4,0x52,0x6a,0x6a,0xfb,0xf6,0xf3,0x3f,0xf8,0xea,0x57,0xbd,0xf2,0x4e,0xcf,0xf3, + 0x4e,0x2a,0xac,0x3d,0x61,0x4e,0xfa,0x82,0xb,0x76,0x3c,0xd2,0xdf,0xdf,0xf7,0xa9, + 0x38,0xd6,0xe4,0xf3,0x79,0x94,0x5a,0xd1,0x1c,0x2,0x50,0x22,0x29,0xd4,0x19,0x60, + 0xae,0x54,0x62,0x79,0xb9,0xa,0x6,0x94,0x65,0x91,0xeb,0xca,0x91,0x80,0x5a,0xa7, + 0xba,0xbc,0x8c,0x31,0x86,0xa1,0xe1,0x61,0x5e,0xfe,0xf2,0xb,0xc9,0xe6,0x32,0xe8, + 0xb4,0xf2,0x61,0xdb,0x49,0x80,0x9b,0xeb,0xca,0xd1,0x6c,0x36,0xa9,0x56,0x97,0x89, + 0xa3,0xb0,0x5d,0xcd,0xd0,0x88,0x34,0x11,0x96,0xbc,0x87,0x41,0x92,0xf6,0x85,0x23, + 0x6b,0xfb,0x22,0xfd,0xeb,0xdc,0x6e,0x23,0x84,0xa0,0xd9,0x68,0xa2,0xa4,0x2a,0x5d, + 0x78,0xc1,0x5,0xef,0x7d,0xfd,0xb5,0xaf,0xfb,0x9b,0x93,0x5,0xe7,0xa4,0x93,0xf6, + 0x57,0xbf,0xe6,0xd5,0xef,0xf3,0x3c,0x87,0x5c,0x2e,0x87,0x52,0x6a,0x25,0x83,0x98, + 0x26,0xee,0x95,0x94,0xd8,0xb6,0x4d,0x10,0x4,0xcc,0xce,0xcc,0x52,0x59,0x5c,0x4c, + 0x94,0xb1,0x95,0x64,0x1f,0xb3,0xd9,0x2c,0xc6,0x68,0xaa,0xb5,0x2a,0xf5,0x7a,0xa3, + 0x9d,0xdc,0xf2,0x9b,0x3e,0x4a,0x4a,0x1c,0xc7,0x46,0x29,0x99,0x64,0x11,0x81,0xfa, + 0x72,0x15,0xdf,0xf,0x30,0x46,0xa6,0x7b,0x86,0x24,0xb6,0x4a,0xd4,0xfa,0x6c,0x69, + 0x9e,0x4a,0xa5,0x82,0x4a,0x97,0x7f,0xc3,0xa,0x1f,0xb6,0x52,0xc0,0x2b,0xe1,0x84, + 0xa4,0x5e,0xab,0xa3,0x94,0xaa,0xef,0xdc,0xf9,0xb2,0x7f,0x7d,0xd5,0x55,0xaf,0xf8, + 0xda,0xa9,0xd6,0x1,0x4f,0xba,0xaa,0x71,0xf3,0x9f,0xfc,0x33,0xa1,0x94,0x45,0x3e, + 0x9f,0x6f,0x27,0xc5,0x56,0xea,0x56,0x22,0x1,0xc9,0xb2,0x9,0xc2,0x90,0xd9,0xd9, + 0x39,0xe6,0xe6,0xe6,0x8,0xc3,0x0,0x29,0x65,0x5a,0xa,0x76,0xb0,0x2c,0x45,0x1c, + 0x47,0x34,0x1a,0x4d,0x1a,0x8d,0x26,0x8b,0x4b,0xcb,0xa9,0x8,0xb5,0x91,0x42,0xa2, + 0x54,0x92,0xc2,0xad,0x35,0xea,0x69,0x29,0xc9,0x10,0x6b,0x88,0xd,0x2c,0xd5,0x1a, + 0x4c,0xcf,0xcd,0x83,0x10,0xe4,0x72,0x99,0x34,0x1d,0x6b,0x8e,0x41,0x3f,0x89,0x2c, + 0xa8,0xd5,0x6a,0x28,0xcb,0xa,0x2e,0xbd,0x74,0xd7,0xcd,0x97,0x5d,0x76,0xe9,0x3d, + 0x9e,0xe7,0xe9,0x53,0x5,0xe8,0x94,0xa,0x87,0xfd,0x3,0xfd,0xf7,0x7,0x61,0x78, + 0x43,0xad,0x56,0x23,0x8a,0xea,0xed,0xb4,0x41,0x2b,0xd5,0xd9,0xb2,0xae,0x30,0x8a, + 0x98,0x9b,0x9b,0xa7,0xd9,0xf4,0xe9,0x2e,0x16,0xf0,0xdc,0x64,0x49,0x76,0x6c,0x7, + 0x1d,0xc7,0x68,0x93,0x84,0x2f,0xbe,0xef,0x13,0xc6,0x31,0xb6,0x65,0x21,0xa5,0x6a, + 0x83,0xed,0x7,0x61,0xb2,0x5a,0xa6,0x5c,0xd7,0x6c,0x46,0x3c,0xf7,0xc2,0x41,0xa4, + 0x14,0xc,0xf,0xaf,0x23,0x93,0xed,0x22,0x88,0x5a,0x41,0x74,0x74,0x74,0xd6,0xd0, + 0x18,0x7c,0xdf,0xc7,0xb6,0xec,0xe0,0x8a,0x2b,0x2e,0xbb,0xfe,0xa2,0x9d,0x2f,0xff, + 0x49,0x36,0x9b,0x3d,0x65,0x70,0x4e,0xb9,0x70,0x78,0xfd,0x1f,0xfe,0xc1,0x9b,0xfa, + 0xfa,0xfb,0x9e,0xe8,0xed,0x4d,0xf2,0x3a,0x2d,0x2b,0x52,0x69,0x9d,0x4c,0x88,0xa4, + 0x8,0xd8,0x12,0x70,0x8b,0x8b,0x4b,0xcc,0xcc,0xcc,0x31,0x3b,0x37,0xc7,0xe2,0xe2, + 0x22,0xbe,0xef,0x83,0x10,0x28,0x4b,0x62,0x29,0x89,0x10,0x6,0x1d,0xc7,0xc9,0xe0, + 0x64,0x12,0x5a,0x84,0x61,0x88,0xb2,0x2c,0xb4,0x10,0x49,0x32,0x2c,0xdd,0xdc,0xa0, + 0xe3,0x98,0x7c,0x57,0xe,0xc7,0xf1,0x30,0x46,0x10,0x85,0x31,0xcd,0x66,0x63,0x65, + 0x87,0x48,0xa,0x6e,0x2b,0x1f,0xe5,0x38,0x4e,0xe9,0xca,0x57,0x5c,0x71,0xfd,0xae, + 0x8b,0x76,0x3e,0x70,0xba,0xe0,0x9c,0x56,0x6d,0xfe,0x8f,0x6e,0xbc,0x61,0xd7,0x7d, + 0xf7,0x7e,0xf7,0x7f,0x47,0x61,0xb4,0xab,0x34,0x3f,0x9f,0x16,0xea,0x54,0x7b,0xe6, + 0xda,0x1b,0xa9,0xa4,0x44,0xc7,0x31,0x7e,0x33,0x89,0xf8,0x6b,0xf5,0x3a,0x9e,0xeb, + 0xe1,0xb8,0x4e,0xba,0x5,0x26,0x21,0xf9,0x9e,0x9e,0x6e,0x84,0xc8,0x80,0x31,0x69, + 0xb1,0x2f,0xa6,0x50,0xc8,0x63,0xd9,0xe,0x41,0xa4,0x11,0x18,0x84,0x92,0x8c,0xac, + 0x5f,0x8f,0xe3,0xb9,0x18,0xcb,0xa6,0xee,0x7,0x2c,0x94,0xcb,0x34,0x9b,0xd,0xd6, + 0xf,0x8f,0xb4,0x6b,0xf9,0xb1,0x8e,0x9,0xc2,0x80,0xae,0x5c,0xd7,0x53,0xbb,0x76, + 0xed,0xbc,0xed,0x8a,0xcb,0x2f,0x7b,0xf0,0xc5,0xee,0xa0,0x3b,0xad,0x2d,0x78,0x6f, + 0xba,0xf1,0x8d,0x17,0x8f,0x9d,0xb3,0xf5,0x89,0xfe,0xfe,0x5e,0x6c,0xdb,0x4e,0xea, + 0x56,0x29,0x61,0xb7,0x2c,0xa9,0x95,0x94,0x4a,0x8,0x38,0xc9,0x27,0x55,0xab,0x35, + 0xca,0xe5,0xa,0xb,0xf3,0xb,0x2c,0x2c,0x94,0x59,0x5c,0x5c,0x26,0x8e,0x35,0x96, + 0xad,0xf0,0xfd,0x80,0x72,0xb9,0x82,0xe3,0xd8,0xf4,0xf4,0xf4,0xe0,0x3a,0x6e,0xb2, + 0xc7,0x48,0x43,0xa4,0x5,0x6e,0x2e,0x8f,0xb6,0x6c,0x94,0x97,0xc5,0xd7,0x50,0x59, + 0x5a,0x26,0xf4,0x43,0xa4,0x12,0x90,0x56,0x57,0x7c,0xdf,0xa7,0x50,0xc8,0xff,0xea, + 0x92,0x4b,0x76,0xfd,0xd9,0x99,0x0,0xe7,0xb4,0x1,0x2,0xb8,0xf1,0xa6,0x1b,0x76, + 0x8d,0x8d,0x8d,0x3d,0xb5,0x6e,0xdd,0x20,0x8e,0x63,0x27,0xa1,0x87,0x14,0x6d,0x80, + 0xda,0x1,0x66,0x6a,0xfa,0x96,0x52,0x49,0xbc,0x66,0x59,0xc8,0x34,0xb0,0xcd,0x64, + 0x32,0x78,0x5e,0x86,0x28,0x8c,0x98,0x9e,0x9e,0xe6,0xf0,0xf8,0x61,0x7a,0x7b,0x7b, + 0xc9,0x77,0x75,0xa5,0x3b,0x41,0x12,0x5d,0x1c,0x45,0x51,0x92,0x72,0x11,0xa0,0x71, + 0x50,0x76,0x17,0xdd,0xbd,0xfd,0xc,0xae,0x1b,0x48,0x64,0x80,0xd6,0x34,0x83,0x80, + 0x42,0xa1,0xf0,0xcc,0x25,0x17,0x5f,0x7c,0xeb,0x65,0x97,0x5e,0xf2,0xf3,0x33,0xb5, + 0x7b,0xf7,0x45,0x6d,0xe2,0xbc,0xf1,0x4d,0x6f,0xdc,0x39,0x36,0x76,0xce,0x23,0x1b, + 0x37,0x6c,0x68,0x16,0xa,0x85,0xa4,0x80,0xc7,0xda,0xd6,0xd4,0xe,0x4,0xd2,0x6d, + 0x2d,0xb6,0x6d,0x33,0x34,0xb4,0x8e,0x7c,0xbe,0x8b,0xe9,0x99,0x19,0xf6,0x3e,0xf7, + 0x3c,0x61,0x18,0xb1,0x65,0x74,0x14,0xcf,0xcb,0x24,0xf5,0x30,0x99,0x8,0xc5,0x38, + 0x4a,0xa,0x8d,0xc4,0x86,0xc8,0xf,0xf0,0x3c,0x8f,0xc1,0xc1,0x1,0xba,0xba,0xba, + 0x88,0x53,0xce,0xc9,0x65,0x32,0x53,0xaf,0xb8,0xe2,0xf2,0x3f,0xbd,0xe4,0xe2,0x5d, + 0xbf,0x38,0x93,0x7b,0xbf,0xcf,0xc8,0x4e,0xfb,0x9f,0xfe,0xf4,0xb1,0xf,0x1f,0x3a, + 0x34,0xfe,0xfe,0xca,0x62,0xc5,0x2a,0x97,0x2b,0x2c,0x57,0xab,0x49,0x6e,0xe8,0xc8, + 0xd,0xf6,0x89,0x5e,0xd1,0x6,0xdb,0xb2,0x18,0x1e,0x1e,0x62,0xd3,0x86,0xf5,0x84, + 0x71,0xcc,0xb,0xe3,0x93,0x54,0xaa,0x55,0x86,0x7,0xfa,0x58,0xd7,0xd3,0x3,0xc6, + 0xb4,0x89,0xbf,0xd9,0x6c,0x26,0xe2,0x33,0xdd,0xf1,0xa1,0x3b,0xf2,0x54,0x46,0x1b, + 0xc2,0x28,0xc4,0x75,0x9c,0x99,0x6b,0x76,0x5f,0xfd,0x9a,0x1d,0x3b,0xb6,0xef,0xe5, + 0xc,0xb7,0x33,0xb2,0x4f,0xda,0xb6,0xed,0x3d,0x17,0x5f,0x7c,0xd1,0x7d,0xcf,0x3f, + 0xff,0xc2,0xe7,0x3d,0xd7,0xdb,0xd5,0x9b,0x6e,0x79,0xab,0x37,0xea,0x4,0x7e,0xd0, + 0x21,0x3,0x2c,0xba,0xf2,0x5d,0xf4,0xf7,0xf6,0x90,0x2f,0x14,0x68,0x36,0x7d,0x4a, + 0x4b,0x4b,0x54,0xc3,0x10,0x95,0xf1,0x90,0x5e,0x16,0x1f,0x41,0x46,0x49,0x6c,0xa5, + 0xf0,0x83,0x90,0x66,0xa3,0x99,0xec,0x5,0xb0,0x54,0x3b,0xc5,0xaa,0x63,0x4d,0x14, + 0x6b,0xc2,0x28,0xc2,0x71,0x9d,0xea,0xb5,0xd7,0xbe,0xf6,0x35,0xc3,0x43,0xeb,0x9e, + 0xe3,0x2c,0xb4,0x33,0xf6,0x5b,0x8d,0x17,0x5e,0xd8,0x27,0xba,0xba,0xba,0xba,0x4a, + 0xa5,0xd2,0xeb,0x5e,0xd8,0xb7,0xff,0x63,0xa5,0x52,0xe9,0x7c,0x1,0xe9,0xee,0x56, + 0x81,0x20,0x91,0x3,0x96,0x95,0xa4,0x4e,0x75,0xac,0x89,0xa3,0x88,0x65,0xbf,0xc9, + 0xf4,0x52,0x95,0x5a,0xa4,0x29,0xe4,0x72,0x14,0x3d,0x87,0xc1,0x7c,0xe,0x25,0x4, + 0xd5,0x6a,0x8d,0x7a,0xa3,0x81,0x31,0x1a,0x3f,0x8,0xa8,0xd5,0xea,0xc4,0x8,0xa4, + 0xa5,0x10,0xc6,0x30,0xd0,0xdd,0xf3,0xf8,0x35,0xd7,0xbc,0xfa,0xad,0x83,0x3,0x3, + 0x7b,0x7b,0x7a,0x7a,0xcc,0xef,0x35,0x40,0xad,0xb6,0x6f,0xff,0x1,0xb9,0xbc,0xbc, + 0xdc,0xeb,0x38,0xf6,0x15,0x93,0x93,0x53,0x6f,0x2f,0x95,0xe6,0xff,0xd8,0xf7,0xfd, + 0x36,0x37,0x29,0x95,0xec,0xa,0x41,0x83,0x50,0x9,0xc1,0x2e,0x35,0x7d,0x16,0xea, + 0xd,0xc2,0x30,0xc2,0x53,0x92,0x6e,0xcf,0x25,0xa,0x43,0xea,0xcd,0x26,0x91,0xd6, + 0x44,0x61,0x44,0xa3,0x5e,0xc3,0xb2,0xed,0xfd,0xfd,0xeb,0x86,0x7e,0x3b,0x38,0xd8, + 0x7f,0x60,0x68,0x60,0xe0,0xd1,0x4d,0xeb,0x47,0x7e,0x74,0xce,0xd6,0x2d,0xb,0x9c, + 0xc5,0x76,0xd6,0x7e,0x2f,0x56,0xa9,0x54,0xc4,0xf3,0x2f,0xec,0x2b,0xe6,0x72,0xb9, + 0xd,0xd5,0x6a,0x75,0xd7,0xe2,0xe2,0xe2,0x65,0xf5,0x7a,0xe3,0x15,0x61,0x18,0x9e, + 0x17,0xc7,0x71,0x21,0x8d,0x6,0x5a,0x3b,0x33,0x2,0x3f,0x8a,0x2a,0x4d,0x3f,0xa8, + 0x48,0x61,0x66,0x1d,0xcb,0x9e,0x55,0x52,0x4e,0x38,0x8e,0x33,0xe1,0xb8,0xee,0x94, + 0x54,0x6a,0xd2,0x52,0x72,0xf6,0x89,0x27,0x7f,0xbd,0x50,0xec,0xed,0xad,0x6f,0xdd, + 0xba,0x25,0x38,0x67,0xf3,0xe6,0xfa,0xe8,0xa6,0xd,0x9a,0xb3,0xdc,0xce,0xfa,0x4f, + 0x32,0x6b,0xb5,0x9a,0xa8,0xd5,0x6a,0xc5,0x99,0x99,0xd9,0xed,0xb,0xb,0xe5,0x57, + 0xd6,0x6a,0xb5,0x5d,0x7e,0x10,0x6c,0x88,0xe3,0xb8,0xfb,0x9f,0xbe,0xe5,0xcd,0x3b, + 0x1,0x3e,0xff,0xf9,0x2f,0xfe,0x70,0xc3,0x86,0xd,0x87,0xa2,0x38,0x9e,0x13,0x82, + 0x29,0xc7,0x71,0xa6,0x3c,0xcf,0x9b,0x28,0xe4,0xf3,0xd3,0xb9,0x5c,0x6e,0xc1,0xf5, + 0xdc,0x7a,0x57,0x2e,0x17,0xf5,0xf7,0xf7,0xbf,0xe4,0x3f,0xe1,0x14,0x2f,0xc5,0x8f, + 0x7a,0x8f,0xd1,0x46,0x81,0x3b,0xd3,0xe3,0x6b,0x5e,0xe4,0xbd,0x76,0xa7,0xef,0x4f, + 0x0,0x95,0xff,0x57,0x0,0x6a,0x85,0x98,0x7,0x80,0x2d,0x1d,0x3,0xbd,0xfa,0x4, + 0xff,0xf3,0xa1,0x35,0xae,0xed,0x4f,0x1,0xdf,0x92,0xde,0xf,0xe0,0x16,0x60,0xf3, + 0x1a,0x7d,0xbf,0xdc,0xd1,0xe7,0x8c,0x2e,0xf3,0xdd,0xe9,0x97,0x16,0xd3,0xf3,0x87, + 0x81,0x87,0xd6,0xe8,0x77,0x13,0xb0,0x33,0x1d,0xc8,0x28,0xf0,0xf6,0xe3,0xf4,0x65, + 0xd5,0xc3,0x5e,0xd,0xec,0x39,0xd,0x80,0xe,0xa4,0xdf,0xd5,0x79,0xaf,0xb7,0x77, + 0x58,0x56,0x67,0x7b,0xf8,0x54,0x0,0x6a,0x7,0x98,0x27,0x78,0x8d,0x1a,0x63,0xca, + 0xe6,0xe8,0x76,0xe7,0x1a,0x7d,0x1f,0x4c,0xfb,0x62,0x8c,0xd9,0x9d,0xf6,0xbb,0xe5, + 0x18,0xf7,0x35,0x69,0xff,0xd6,0xf9,0xed,0xe9,0xb5,0xdb,0x8f,0x71,0x5f,0x73,0x8c, + 0xfb,0xac,0xf5,0x59,0xeb,0xda,0xee,0x63,0x9c,0x9f,0xd4,0xeb,0x64,0x43,0x8d,0x3b, + 0x53,0xb,0xda,0x93,0x46,0xc,0xd7,0x74,0x98,0xf1,0xe8,0x1a,0xdc,0xf2,0x44,0x7a, + 0x7c,0xd1,0x1a,0x56,0xf2,0x60,0xc7,0xab,0xd5,0xa7,0x75,0x7e,0xcb,0x29,0x58,0xf4, + 0xed,0xa9,0x6b,0x3d,0xd8,0xf1,0x3d,0xf,0x2,0x8f,0xa7,0x9f,0xbd,0xa4,0x4a,0x7a, + 0x77,0x3a,0xc8,0x96,0x79,0x3f,0x94,0xbe,0x76,0xa7,0x80,0x54,0x3a,0x1e,0xb2,0x75, + 0xbe,0x3b,0x75,0xb5,0x96,0x7b,0xae,0x76,0x81,0xd1,0x13,0x10,0xf8,0xee,0x35,0x5c, + 0xbc,0xb3,0x1d,0xec,0x70,0xdb,0xdd,0x1d,0xcf,0xd5,0x72,0xa3,0xdd,0x67,0x86,0x25, + 0x4f,0xc1,0xdc,0x56,0xbd,0xf6,0xa7,0x26,0x7b,0x51,0x87,0x2b,0x1d,0xaf,0xad,0x76, + 0x9b,0x4f,0x1f,0xc7,0xc5,0x8e,0xd7,0x56,0x3f,0xc7,0x2d,0xc7,0xf8,0xec,0x25,0x75, + 0xb1,0xce,0x99,0xbd,0x29,0x35,0xe5,0x51,0xe0,0xae,0xd4,0x9d,0xe,0xa4,0xee,0x77, + 0x57,0xda,0xef,0x3b,0xe9,0xf9,0x81,0x8e,0xcf,0x1e,0x5e,0x83,0xcc,0x5b,0xf7,0xbc, + 0x67,0x95,0x85,0xec,0x61,0x65,0xc3,0x4f,0xeb,0x75,0x2c,0x92,0xbf,0xb1,0xe3,0xf8, + 0xb6,0xe,0x4b,0xe6,0x77,0x61,0x41,0x9d,0x33,0x5c,0x4e,0xad,0x67,0xad,0xd9,0xdc, + 0x7d,0xc,0x12,0x6e,0xbd,0x2e,0x5a,0xc3,0x32,0xee,0x39,0xd,0x92,0xee,0x5e,0xe3, + 0x3e,0x8f,0xa7,0xd7,0x5b,0xfd,0xbb,0x5f,0x8c,0x5,0x9d,0x6a,0x34,0xff,0x21,0xe0, + 0x5e,0xe0,0xdd,0x29,0xa1,0x3e,0x98,0x6a,0x8f,0x96,0x38,0xdb,0xdc,0x41,0xca,0xdd, + 0x1d,0xe2,0x6d,0x75,0x7b,0x77,0xc7,0xf1,0x13,0x1d,0x16,0xb5,0xfb,0x14,0x38,0x68, + 0xf5,0x7d,0xe8,0xe0,0xc5,0x4e,0x92,0xae,0xfc,0xae,0x38,0xa8,0x35,0x23,0xb7,0x9d, + 0x22,0x7,0x5d,0xd4,0x61,0x81,0x2d,0xb,0x6b,0xc9,0x88,0xc7,0x4f,0x81,0x83,0xba, + 0x3b,0xee,0xd1,0xe2,0xc3,0xd1,0xf4,0x7e,0x17,0x75,0x5c,0xe3,0x6c,0x73,0xd0,0x28, + 0xf0,0xe9,0xd4,0xbf,0x59,0x63,0xe6,0x8b,0xe9,0x2c,0x3d,0x94,0xbe,0xb7,0x8e,0x9f, + 0xe8,0xe8,0xf7,0x50,0xba,0xea,0xd0,0x11,0x5e,0x7c,0x66,0x95,0xd0,0xeb,0x49,0xb9, + 0xeb,0x64,0x39,0xa8,0x25,0x3d,0xee,0xea,0x58,0x1d,0xf,0xa4,0x12,0xe4,0x89,0x55, + 0x72,0xe3,0xac,0xa7,0x5c,0x6f,0x4b,0xcd,0xf6,0xa2,0xe,0x73,0x6f,0x91,0xec,0x93, + 0xe9,0x83,0x5c,0x93,0x82,0xd3,0x3a,0x6e,0xd,0xf6,0x3d,0xe9,0xf9,0x5d,0xab,0x0, + 0xf9,0xec,0x8b,0x7c,0xf6,0x87,0x8f,0xa3,0xac,0x6f,0x3a,0x8e,0x7b,0x9f,0x71,0x80, + 0xe,0xa4,0xb3,0xdd,0x9d,0x72,0xce,0x3d,0xa9,0x18,0x6b,0xcd,0xd0,0x77,0x56,0x59, + 0x5b,0xe5,0x18,0x96,0x46,0x47,0x60,0x7a,0xcd,0x19,0x8,0x2a,0x3f,0x3,0xec,0x3a, + 0x46,0xd8,0xf0,0xee,0x55,0x20,0xae,0x6e,0xb7,0xa4,0x13,0xde,0x7d,0x26,0x39,0xe8, + 0xf6,0xe,0x9f,0x2f,0xa7,0x61,0x46,0xf7,0x1a,0x2b,0xd3,0xed,0x27,0x11,0x1a,0x9c, + 0x28,0xd4,0x38,0x15,0x1d,0xb4,0xfa,0xbb,0x6e,0xe9,0x78,0xc6,0xee,0x35,0xfa,0xdc, + 0x74,0x2a,0x7c,0xf4,0xfb,0x16,0xcd,0xdf,0x9e,0xf2,0xcf,0x43,0x6b,0x70,0x4e,0x2b, + 0xac,0x59,0x6b,0x67,0x66,0x39,0xb5,0x86,0x5d,0xa9,0x75,0xb7,0x5c,0xbb,0x93,0xe7, + 0xd6,0xe2,0xd1,0x9e,0x13,0x59,0xb2,0xf5,0x3b,0x4,0x67,0xf4,0x38,0x21,0xc7,0x43, + 0x6b,0x70,0x4b,0xf7,0x71,0x44,0xe0,0x13,0x1d,0x4b,0xfa,0x7b,0x52,0xb9,0xf1,0x99, + 0x35,0x24,0x4a,0x27,0x18,0x4f,0x9e,0x8c,0x9b,0xff,0xae,0x2d,0xe8,0xf7,0xbe,0xc9, + 0xff,0xf,0xc1,0xf1,0xdb,0xff,0x1d,0x0,0x7e,0xed,0x8b,0x71,0x18,0x17,0x76,0x30, + 0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, + // D:/CigaretteSH/240510-changde-GDX1-1xiangji-1280x800-2/Cigarette/Resources/cam4_no.png 0x0,0x0,0x25,0x27, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, @@ -17355,6 +24378,11 @@ static const unsigned char qt_resource_name[] = { 0x7,0x26,0x57,0xa7, 0x0,0x70, 0x0,0x6c,0x0,0x63,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, + // cam8_yes.png + 0x0,0xc, + 0x2,0xf6,0x4b,0x87, + 0x0,0x63, + 0x0,0x61,0x0,0x6d,0x0,0x38,0x0,0x5f,0x0,0x79,0x0,0x65,0x0,0x73,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, // setup.png 0x0,0x9, 0xb,0xc3,0xa4,0xc7, @@ -17370,6 +24398,11 @@ static const unsigned char qt_resource_name[] = { 0x5,0x9e,0x59,0x27, 0x0,0x6c, 0x0,0x6f,0x0,0x63,0x0,0x6b,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, + // cam6_yes.png + 0x0,0xc, + 0x2,0xf6,0x4f,0x87, + 0x0,0x63, + 0x0,0x61,0x0,0x6d,0x0,0x36,0x0,0x5f,0x0,0x79,0x0,0x65,0x0,0x73,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, // exit.png 0x0,0x8, 0xf,0x7,0x5a,0xc7, @@ -17400,6 +24433,11 @@ static const unsigned char qt_resource_name[] = { 0x6,0xbe,0xa5,0xe7, 0x0,0x6b, 0x0,0x65,0x0,0x79,0x0,0x62,0x0,0x6f,0x0,0x61,0x0,0x72,0x0,0x64,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, + // cam8_no.png + 0x0,0xb, + 0x6,0x85,0x56,0x87, + 0x0,0x63, + 0x0,0x61,0x0,0x6d,0x0,0x38,0x0,0x5f,0x0,0x6e,0x0,0x6f,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, // cam1.png 0x0,0x8, 0x8,0x4,0x5a,0x67, @@ -17420,21 +24458,66 @@ static const unsigned char qt_resource_name[] = { 0x8,0x7,0x5a,0x67, 0x0,0x63, 0x0,0x61,0x0,0x6d,0x0,0x34,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, + // cam5_no.png + 0x0,0xb, + 0x6,0x85,0x56,0x27, + 0x0,0x63, + 0x0,0x61,0x0,0x6d,0x0,0x35,0x0,0x5f,0x0,0x6e,0x0,0x6f,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, + // cam5.png + 0x0,0x8, + 0x8,0x8,0x5a,0x67, + 0x0,0x63, + 0x0,0x61,0x0,0x6d,0x0,0x35,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, + // cam6_no.png + 0x0,0xb, + 0x6,0x85,0x56,0xc7, + 0x0,0x63, + 0x0,0x61,0x0,0x6d,0x0,0x36,0x0,0x5f,0x0,0x6e,0x0,0x6f,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, + // cam7_yes.png + 0x0,0xc, + 0x2,0xf6,0x4d,0x87, + 0x0,0x63, + 0x0,0x61,0x0,0x6d,0x0,0x37,0x0,0x5f,0x0,0x79,0x0,0x65,0x0,0x73,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, + // cam6.png + 0x0,0x8, + 0x8,0x9,0x5a,0x67, + 0x0,0x63, + 0x0,0x61,0x0,0x6d,0x0,0x36,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, + // cam7_no.png + 0x0,0xb, + 0x6,0x85,0x56,0xe7, + 0x0,0x63, + 0x0,0x61,0x0,0x6d,0x0,0x37,0x0,0x5f,0x0,0x6e,0x0,0x6f,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, + // cam5_yes.png + 0x0,0xc, + 0x2,0xf6,0x41,0x87, + 0x0,0x63, + 0x0,0x61,0x0,0x6d,0x0,0x35,0x0,0x5f,0x0,0x79,0x0,0x65,0x0,0x73,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, + // cam7.png + 0x0,0x8, + 0x8,0xa,0x5a,0x67, + 0x0,0x63, + 0x0,0x61,0x0,0x6d,0x0,0x37,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, + // cam8.png + 0x0,0x8, + 0x8,0xb,0x5a,0x67, + 0x0,0x63, + 0x0,0x61,0x0,0x6d,0x0,0x38,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, // logo.png 0x0,0x8, 0x5,0xe2,0x59,0x27, 0x0,0x6c, 0x0,0x6f,0x0,0x67,0x0,0x6f,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, - // cam3_no.png - 0x0,0xb, - 0x6,0x85,0x56,0x67, - 0x0,0x63, - 0x0,0x61,0x0,0x6d,0x0,0x33,0x0,0x5f,0x0,0x6e,0x0,0x6f,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, // cam3_yes.png 0x0,0xc, 0x2,0xf6,0x45,0x87, 0x0,0x63, 0x0,0x61,0x0,0x6d,0x0,0x33,0x0,0x5f,0x0,0x79,0x0,0x65,0x0,0x73,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, + // cam3_no.png + 0x0,0xb, + 0x6,0x85,0x56,0x67, + 0x0,0x63, + 0x0,0x61,0x0,0x6d,0x0,0x33,0x0,0x5f,0x0,0x6e,0x0,0x6f,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, // cam4_no.png 0x0,0xb, 0x6,0x85,0x56,0x7, @@ -17451,77 +24534,113 @@ static const unsigned char qt_resource_struct[] = { 0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, // :/Cigarette/Resources - 0x0,0x0,0x0,0x18,0x0,0x2,0x0,0x0,0x0,0x17,0x0,0x0,0x0,0x3, + 0x0,0x0,0x0,0x18,0x0,0x2,0x0,0x0,0x0,0x23,0x0,0x0,0x0,0x3, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + // :/Cigarette/Resources/cam5_yes.png + 0x0,0x0,0x3,0x2,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x4,0xec,0x95, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, // :/Cigarette/Resources/cam4_yes.png - 0x0,0x0,0x1,0x40,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x2,0x15,0xd1, -0x0,0x0,0x1,0x80,0x61,0x72,0x6a,0x90, + 0x0,0x0,0x1,0x7c,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x2,0x60,0xb, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, // :/Cigarette/Resources/cam3_yes.png - 0x0,0x0,0x2,0x3e,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x3,0xea,0xbb, -0x0,0x0,0x1,0x80,0x61,0x72,0x6a,0x90, + 0x0,0x0,0x3,0x62,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x5,0x79,0x7c, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, // :/Cigarette/Resources/cam2_yes.png - 0x0,0x0,0x1,0x78,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x2,0x76,0xaa, -0x0,0x0,0x1,0x80,0x61,0x72,0x6a,0x90, + 0x0,0x0,0x1,0xb4,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x2,0xc0,0xe4, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, + // :/Cigarette/Resources/cam8_yes.png + 0x0,0x0,0x0,0xcc,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x4,0xa3, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, + // :/Cigarette/Resources/cam7_yes.png + 0x0,0x0,0x2,0xb2,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x4,0x7f,0x96, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, + // :/Cigarette/Resources/cam6_yes.png + 0x0,0x0,0x1,0x30,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0xe8,0x12, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, // :/Cigarette/Resources/cam1_yes.png 0x0,0x0,0x0,0x30,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0, -0x0,0x0,0x1,0x80,0x61,0x72,0x6a,0x90, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, // :/Cigarette/Resources/unlock.png 0x0,0x0,0x0,0x4e,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x24,0xa7, -0x0,0x0,0x1,0x80,0x61,0x72,0x6a,0x90, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, // :/Cigarette/Resources/lock.png - 0x0,0x0,0x0,0xfc,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0xa4,0x0, -0x0,0x0,0x1,0x80,0x61,0x72,0x6a,0x90, + 0x0,0x0,0x1,0x1a,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0xc9,0x2c, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, // :/Cigarette/Resources/logo.png - 0x0,0x0,0x2,0xc,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x3,0xa2,0xdb, -0x0,0x0,0x1,0x80,0x61,0x72,0x6a,0x90, + 0x0,0x0,0x3,0x4c,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x5,0x57,0x5d, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, // :/Cigarette/Resources/cam4_no.png - 0x0,0x0,0x2,0x5c,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x4,0xf,0xce, -0x0,0x0,0x1,0x80,0x61,0x72,0x6a,0x90, + 0x0,0x0,0x3,0x9c,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x5,0xc4,0x50, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, + // :/Cigarette/Resources/cam5_no.png + 0x0,0x0,0x2,0x64,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x4,0x12,0x5b, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, // :/Cigarette/Resources/cam2_no.png 0x0,0x0,0x0,0x9c,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0xc1,0x8, -0x0,0x0,0x1,0x80,0x61,0x72,0x6a,0x90, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, // :/Cigarette/Resources/cam3_no.png - 0x0,0x0,0x2,0x22,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x3,0xc4,0xfa, -0x0,0x0,0x1,0x80,0x61,0x72,0x6a,0x90, + 0x0,0x0,0x3,0x80,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x5,0x9e,0x8f, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, + // :/Cigarette/Resources/cam8_no.png + 0x0,0x0,0x1,0xf0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x3,0x57,0xe9, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, + // :/Cigarette/Resources/cam6_no.png + 0x0,0x0,0x2,0x96,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x4,0x5a,0x6b, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, + // :/Cigarette/Resources/cam7_no.png + 0x0,0x0,0x2,0xe6,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x4,0xc7,0x88, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, // :/Cigarette/Resources/cam1_no.png 0x0,0x0,0x0,0x68,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x44,0x36, -0x0,0x0,0x1,0x80,0x61,0x72,0x6a,0x90, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, // :/Cigarette/Resources/keyboard.png - 0x0,0x0,0x1,0x96,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x2,0x9b,0x94, -0x0,0x0,0x1,0x80,0x61,0x72,0x6a,0x90, + 0x0,0x0,0x1,0xd2,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x2,0xe5,0xce, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, // :/Cigarette/Resources/plc.png 0x0,0x0,0x0,0xb8,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0xe6,0xc5, -0x0,0x0,0x1,0x80,0x61,0x72,0x6a,0x90, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, // :/Cigarette/Resources/cam1.png - 0x0,0x0,0x1,0xb4,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x3,0xd,0xaf, -0x0,0x0,0x1,0x80,0x61,0x72,0x6a,0x90, + 0x0,0x0,0x2,0xc,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x3,0x7d,0x2f, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, // :/Cigarette/Resources/cam2.png - 0x0,0x0,0x1,0xca,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x3,0x32,0xc1, -0x0,0x0,0x1,0x80,0x61,0x72,0x6a,0x90, + 0x0,0x0,0x2,0x22,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x3,0xa2,0x41, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, // :/Cigarette/Resources/cam3.png - 0x0,0x0,0x1,0xe0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x3,0x58,0x25, -0x0,0x0,0x1,0x80,0x61,0x72,0x6a,0x90, + 0x0,0x0,0x2,0x38,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x3,0xc7,0xa5, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, // :/Cigarette/Resources/cam4.png - 0x0,0x0,0x1,0xf6,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x3,0x7d,0x85, -0x0,0x0,0x1,0x80,0x61,0x72,0x6a,0x90, + 0x0,0x0,0x2,0x4e,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x3,0xed,0x5, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, + // :/Cigarette/Resources/cam5.png + 0x0,0x0,0x2,0x80,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x4,0x37,0x92, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, + // :/Cigarette/Resources/cam6.png + 0x0,0x0,0x2,0xd0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x4,0xa4,0x7a, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, + // :/Cigarette/Resources/cam7.png + 0x0,0x0,0x3,0x20,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x5,0x11,0x99, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, + // :/Cigarette/Resources/cam8.png + 0x0,0x0,0x3,0x36,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x5,0x34,0x52, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, // :/Cigarette/Resources/alarm.png - 0x0,0x0,0x1,0x28,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0xef,0x4e, -0x0,0x0,0x1,0x80,0x61,0x72,0x6a,0x90, + 0x0,0x0,0x1,0x64,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x2,0x39,0x88, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, // :/Cigarette/Resources/start.png - 0x0,0x0,0x0,0xe4,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x5a,0xd7, -0x0,0x0,0x1,0x80,0x61,0x72,0x6a,0x90, + 0x0,0x0,0x1,0x2,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x80,0x3, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, // :/Cigarette/Resources/rotate.png - 0x0,0x0,0x1,0x5e,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x2,0x3a,0xb8, -0x0,0x0,0x1,0x80,0x61,0x72,0x6a,0x90, + 0x0,0x0,0x1,0x9a,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x2,0x84,0xf2, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, // :/Cigarette/Resources/setup.png - 0x0,0x0,0x0,0xcc,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x4,0xa3, -0x0,0x0,0x1,0x80,0x61,0x72,0x6a,0x90, + 0x0,0x0,0x0,0xea,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x29,0xcf, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, // :/Cigarette/Resources/pause.png 0x0,0x0,0x0,0x84,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x69,0xa8, -0x0,0x0,0x1,0x80,0x61,0x72,0x6a,0x90, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, // :/Cigarette/Resources/exit.png - 0x0,0x0,0x1,0x12,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0xc2,0xe6, -0x0,0x0,0x1,0x80,0x61,0x72,0x6a,0x90, + 0x0,0x0,0x1,0x4e,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x2,0xd,0x20, +0x0,0x0,0x1,0x8c,0x7a,0xb1,0xb5,0xe0, }; diff --git a/Cigarette/GeneratedFiles/ui_alarmdialog.h b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/ui_alarmdialog.h similarity index 98% rename from Cigarette/GeneratedFiles/ui_alarmdialog.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/ui_alarmdialog.h index 1e1ceabe..b33f9986 100644 --- a/Cigarette/GeneratedFiles/ui_alarmdialog.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/ui_alarmdialog.h @@ -1,7 +1,7 @@ /******************************************************************************** ** Form generated from reading UI file 'alarmdialog.ui' ** -** Created by: Qt User Interface Compiler version 5.15.2 +** Created by: Qt User Interface Compiler version 5.14.2 ** ** WARNING! All changes made in this file will be lost when recompiling UI file! ********************************************************************************/ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/ui_camera_glue.h b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/ui_camera_glue.h new file mode 100644 index 00000000..db291de9 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/ui_camera_glue.h @@ -0,0 +1,427 @@ +/******************************************************************************** +** Form generated from reading UI file 'camera_glue.ui' +** +** Created by: Qt User Interface Compiler version 5.14.2 +** +** WARNING! All changes made in this file will be lost when recompiling UI file! +********************************************************************************/ + +#ifndef UI_CAMERA_GLUE_H +#define UI_CAMERA_GLUE_H + +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class Ui_camera_glue +{ +public: + QSpinBox *spinBox_21; + QSpinBox *spinBox_31; + QSpinBox *spinBox_41; + QSpinBox *spinBox_32; + QSpinBox *spinBox_22; + QSpinBox *spinBox_42; + QSpinBox *spinBox_33; + QSpinBox *spinBox_23; + QSpinBox *spinBox_43; + QSpinBox *spinBox_12; + QSpinBox *spinBox_11; + QSpinBox *spinBox_13; + QLabel *label_first; + QLabel *label_second; + QLabel *label_third; + QLabel *label_1; + QLabel *label_2; + QLabel *label_3; + QLabel *label_4; + QLabel *label_hint; + QPushButton *pushButton_take; + QSpinBox *spinBox_53; + QLabel *label_5; + QSpinBox *spinBox_52; + QSpinBox *spinBox_51; + QSpinBox *spinBox_63; + QLabel *label_6; + QSpinBox *spinBox_62; + QSpinBox *spinBox_61; + QSpinBox *spinBox_73; + QLabel *label_7; + QSpinBox *spinBox_72; + QSpinBox *spinBox_71; + QSpinBox *spinBox_83; + QLabel *label_8; + QSpinBox *spinBox_82; + QSpinBox *spinBox_81; + QSpinBox *spinBox_14; + QLabel *label_fourth; + QSpinBox *spinBox_15; + QLabel *label_fifth; + QSpinBox *spinBox_24; + QSpinBox *spinBox_25; + QSpinBox *spinBox_34; + QSpinBox *spinBox_35; + QSpinBox *spinBox_44; + QSpinBox *spinBox_45; + QSpinBox *spinBox_54; + QSpinBox *spinBox_55; + QSpinBox *spinBox_64; + QSpinBox *spinBox_65; + QSpinBox *spinBox_74; + QSpinBox *spinBox_75; + QSpinBox *spinBox_84; + QSpinBox *spinBox_85; + + void setupUi(QDialog *camera_glue) + { + if (camera_glue->objectName().isEmpty()) + camera_glue->setObjectName(QString::fromUtf8("camera_glue")); + camera_glue->resize(289, 374); + spinBox_21 = new QSpinBox(camera_glue); + spinBox_21->setObjectName(QString::fromUtf8("spinBox_21")); + spinBox_21->setGeometry(QRect(190, 1740, 70, 30)); + QFont font; + font.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); + font.setPointSize(12); + font.setBold(true); + font.setWeight(75); + spinBox_21->setFont(font); + spinBox_21->setWrapping(true); + spinBox_21->setMaximum(10); + spinBox_31 = new QSpinBox(camera_glue); + spinBox_31->setObjectName(QString::fromUtf8("spinBox_31")); + spinBox_31->setGeometry(QRect(290, 1740, 70, 30)); + spinBox_31->setFont(font); + spinBox_31->setWrapping(true); + spinBox_31->setMaximum(10); + spinBox_41 = new QSpinBox(camera_glue); + spinBox_41->setObjectName(QString::fromUtf8("spinBox_41")); + spinBox_41->setGeometry(QRect(390, 1740, 70, 30)); + spinBox_41->setFont(font); + spinBox_41->setWrapping(true); + spinBox_41->setMaximum(10); + spinBox_32 = new QSpinBox(camera_glue); + spinBox_32->setObjectName(QString::fromUtf8("spinBox_32")); + spinBox_32->setGeometry(QRect(290, 1790, 70, 30)); + spinBox_32->setFont(font); + spinBox_32->setWrapping(true); + spinBox_32->setMaximum(10); + spinBox_22 = new QSpinBox(camera_glue); + spinBox_22->setObjectName(QString::fromUtf8("spinBox_22")); + spinBox_22->setGeometry(QRect(190, 1790, 70, 30)); + spinBox_22->setFont(font); + spinBox_22->setWrapping(true); + spinBox_22->setMaximum(10); + spinBox_42 = new QSpinBox(camera_glue); + spinBox_42->setObjectName(QString::fromUtf8("spinBox_42")); + spinBox_42->setGeometry(QRect(390, 1790, 70, 30)); + spinBox_42->setFont(font); + spinBox_42->setWrapping(true); + spinBox_42->setMaximum(10); + spinBox_33 = new QSpinBox(camera_glue); + spinBox_33->setObjectName(QString::fromUtf8("spinBox_33")); + spinBox_33->setGeometry(QRect(290, 1840, 70, 30)); + spinBox_33->setFont(font); + spinBox_33->setWrapping(true); + spinBox_33->setMaximum(10); + spinBox_23 = new QSpinBox(camera_glue); + spinBox_23->setObjectName(QString::fromUtf8("spinBox_23")); + spinBox_23->setGeometry(QRect(190, 1840, 70, 30)); + spinBox_23->setFont(font); + spinBox_23->setWrapping(true); + spinBox_23->setMaximum(10); + spinBox_43 = new QSpinBox(camera_glue); + spinBox_43->setObjectName(QString::fromUtf8("spinBox_43")); + spinBox_43->setGeometry(QRect(390, 1840, 70, 30)); + spinBox_43->setFont(font); + spinBox_43->setWrapping(true); + spinBox_43->setMaximum(10); + spinBox_12 = new QSpinBox(camera_glue); + spinBox_12->setObjectName(QString::fromUtf8("spinBox_12")); + spinBox_12->setGeometry(QRect(130, 100, 70, 30)); + spinBox_12->setFont(font); + spinBox_12->setWrapping(true); + spinBox_12->setMaximum(10); + spinBox_11 = new QSpinBox(camera_glue); + spinBox_11->setObjectName(QString::fromUtf8("spinBox_11")); + spinBox_11->setGeometry(QRect(130, 50, 70, 30)); + spinBox_11->setFont(font); + spinBox_11->setWrapping(true); + spinBox_11->setMaximum(10); + spinBox_13 = new QSpinBox(camera_glue); + spinBox_13->setObjectName(QString::fromUtf8("spinBox_13")); + spinBox_13->setGeometry(QRect(130, 150, 70, 30)); + spinBox_13->setFont(font); + spinBox_13->setWrapping(true); + spinBox_13->setMaximum(10); + label_first = new QLabel(camera_glue); + label_first->setObjectName(QString::fromUtf8("label_first")); + label_first->setGeometry(QRect(50, 53, 61, 21)); + label_first->setFont(font); + label_second = new QLabel(camera_glue); + label_second->setObjectName(QString::fromUtf8("label_second")); + label_second->setGeometry(QRect(50, 105, 61, 21)); + label_second->setFont(font); + label_third = new QLabel(camera_glue); + label_third->setObjectName(QString::fromUtf8("label_third")); + label_third->setGeometry(QRect(50, 155, 61, 21)); + label_third->setFont(font); + label_1 = new QLabel(camera_glue); + label_1->setObjectName(QString::fromUtf8("label_1")); + label_1->setGeometry(QRect(130, 20, 70, 20)); + label_1->setFont(font); + label_2 = new QLabel(camera_glue); + label_2->setObjectName(QString::fromUtf8("label_2")); + label_2->setGeometry(QRect(190, 1710, 70, 20)); + label_2->setFont(font); + label_3 = new QLabel(camera_glue); + label_3->setObjectName(QString::fromUtf8("label_3")); + label_3->setGeometry(QRect(290, 1710, 70, 20)); + label_3->setFont(font); + label_4 = new QLabel(camera_glue); + label_4->setObjectName(QString::fromUtf8("label_4")); + label_4->setGeometry(QRect(390, 1710, 70, 20)); + label_4->setFont(font); + label_hint = new QLabel(camera_glue); + label_hint->setObjectName(QString::fromUtf8("label_hint")); + label_hint->setGeometry(QRect(30, 290, 285, 25)); + QFont font1; + font1.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); + font1.setPointSize(10); + label_hint->setFont(font1); + pushButton_take = new QPushButton(camera_glue); + pushButton_take->setObjectName(QString::fromUtf8("pushButton_take")); + pushButton_take->setGeometry(QRect(70, 330, 141, 31)); + pushButton_take->setFont(font); + spinBox_53 = new QSpinBox(camera_glue); + spinBox_53->setObjectName(QString::fromUtf8("spinBox_53")); + spinBox_53->setGeometry(QRect(490, 1840, 70, 30)); + spinBox_53->setFont(font); + spinBox_53->setWrapping(true); + spinBox_53->setMaximum(10); + label_5 = new QLabel(camera_glue); + label_5->setObjectName(QString::fromUtf8("label_5")); + label_5->setGeometry(QRect(490, 1710, 70, 20)); + label_5->setFont(font); + spinBox_52 = new QSpinBox(camera_glue); + spinBox_52->setObjectName(QString::fromUtf8("spinBox_52")); + spinBox_52->setGeometry(QRect(490, 1790, 70, 30)); + spinBox_52->setFont(font); + spinBox_52->setWrapping(true); + spinBox_52->setMaximum(10); + spinBox_51 = new QSpinBox(camera_glue); + spinBox_51->setObjectName(QString::fromUtf8("spinBox_51")); + spinBox_51->setGeometry(QRect(490, 1740, 70, 30)); + spinBox_51->setFont(font); + spinBox_51->setWrapping(true); + spinBox_51->setMaximum(10); + spinBox_63 = new QSpinBox(camera_glue); + spinBox_63->setObjectName(QString::fromUtf8("spinBox_63")); + spinBox_63->setGeometry(QRect(590, 1840, 70, 30)); + spinBox_63->setFont(font); + spinBox_63->setWrapping(true); + spinBox_63->setMaximum(10); + label_6 = new QLabel(camera_glue); + label_6->setObjectName(QString::fromUtf8("label_6")); + label_6->setGeometry(QRect(590, 1710, 70, 20)); + label_6->setFont(font); + spinBox_62 = new QSpinBox(camera_glue); + spinBox_62->setObjectName(QString::fromUtf8("spinBox_62")); + spinBox_62->setGeometry(QRect(590, 1790, 70, 30)); + spinBox_62->setFont(font); + spinBox_62->setWrapping(true); + spinBox_62->setMaximum(10); + spinBox_61 = new QSpinBox(camera_glue); + spinBox_61->setObjectName(QString::fromUtf8("spinBox_61")); + spinBox_61->setGeometry(QRect(590, 1740, 70, 30)); + spinBox_61->setFont(font); + spinBox_61->setWrapping(true); + spinBox_61->setMaximum(10); + spinBox_73 = new QSpinBox(camera_glue); + spinBox_73->setObjectName(QString::fromUtf8("spinBox_73")); + spinBox_73->setGeometry(QRect(690, 1840, 70, 30)); + spinBox_73->setFont(font); + spinBox_73->setWrapping(true); + spinBox_73->setMaximum(10); + label_7 = new QLabel(camera_glue); + label_7->setObjectName(QString::fromUtf8("label_7")); + label_7->setGeometry(QRect(690, 1710, 70, 20)); + label_7->setFont(font); + spinBox_72 = new QSpinBox(camera_glue); + spinBox_72->setObjectName(QString::fromUtf8("spinBox_72")); + spinBox_72->setGeometry(QRect(690, 1790, 70, 30)); + spinBox_72->setFont(font); + spinBox_72->setWrapping(true); + spinBox_72->setMaximum(10); + spinBox_71 = new QSpinBox(camera_glue); + spinBox_71->setObjectName(QString::fromUtf8("spinBox_71")); + spinBox_71->setGeometry(QRect(690, 1740, 70, 30)); + spinBox_71->setFont(font); + spinBox_71->setWrapping(true); + spinBox_71->setMaximum(10); + spinBox_83 = new QSpinBox(camera_glue); + spinBox_83->setObjectName(QString::fromUtf8("spinBox_83")); + spinBox_83->setGeometry(QRect(790, 1840, 70, 30)); + spinBox_83->setFont(font); + spinBox_83->setWrapping(true); + spinBox_83->setMaximum(10); + label_8 = new QLabel(camera_glue); + label_8->setObjectName(QString::fromUtf8("label_8")); + label_8->setGeometry(QRect(790, 1710, 70, 20)); + label_8->setFont(font); + spinBox_82 = new QSpinBox(camera_glue); + spinBox_82->setObjectName(QString::fromUtf8("spinBox_82")); + spinBox_82->setGeometry(QRect(790, 1790, 70, 30)); + spinBox_82->setFont(font); + spinBox_82->setWrapping(true); + spinBox_82->setMaximum(10); + spinBox_81 = new QSpinBox(camera_glue); + spinBox_81->setObjectName(QString::fromUtf8("spinBox_81")); + spinBox_81->setGeometry(QRect(790, 1740, 70, 30)); + spinBox_81->setFont(font); + spinBox_81->setWrapping(true); + spinBox_81->setMaximum(10); + spinBox_14 = new QSpinBox(camera_glue); + spinBox_14->setObjectName(QString::fromUtf8("spinBox_14")); + spinBox_14->setGeometry(QRect(130, 195, 70, 30)); + spinBox_14->setFont(font); + spinBox_14->setWrapping(true); + spinBox_14->setMaximum(10); + label_fourth = new QLabel(camera_glue); + label_fourth->setObjectName(QString::fromUtf8("label_fourth")); + label_fourth->setGeometry(QRect(50, 200, 61, 21)); + label_fourth->setFont(font); + spinBox_15 = new QSpinBox(camera_glue); + spinBox_15->setObjectName(QString::fromUtf8("spinBox_15")); + spinBox_15->setGeometry(QRect(130, 245, 70, 30)); + spinBox_15->setFont(font); + spinBox_15->setWrapping(true); + spinBox_15->setMaximum(10); + label_fifth = new QLabel(camera_glue); + label_fifth->setObjectName(QString::fromUtf8("label_fifth")); + label_fifth->setGeometry(QRect(50, 250, 61, 21)); + label_fifth->setFont(font); + spinBox_24 = new QSpinBox(camera_glue); + spinBox_24->setObjectName(QString::fromUtf8("spinBox_24")); + spinBox_24->setGeometry(QRect(190, 1890, 70, 30)); + spinBox_24->setFont(font); + spinBox_24->setWrapping(true); + spinBox_24->setMaximum(10); + spinBox_25 = new QSpinBox(camera_glue); + spinBox_25->setObjectName(QString::fromUtf8("spinBox_25")); + spinBox_25->setGeometry(QRect(190, 1940, 70, 30)); + spinBox_25->setFont(font); + spinBox_25->setWrapping(true); + spinBox_25->setMaximum(10); + spinBox_34 = new QSpinBox(camera_glue); + spinBox_34->setObjectName(QString::fromUtf8("spinBox_34")); + spinBox_34->setGeometry(QRect(290, 1890, 70, 30)); + spinBox_34->setFont(font); + spinBox_34->setWrapping(true); + spinBox_34->setMaximum(10); + spinBox_35 = new QSpinBox(camera_glue); + spinBox_35->setObjectName(QString::fromUtf8("spinBox_35")); + spinBox_35->setGeometry(QRect(290, 1940, 70, 30)); + spinBox_35->setFont(font); + spinBox_35->setWrapping(true); + spinBox_35->setMaximum(10); + spinBox_44 = new QSpinBox(camera_glue); + spinBox_44->setObjectName(QString::fromUtf8("spinBox_44")); + spinBox_44->setGeometry(QRect(390, 1890, 70, 30)); + spinBox_44->setFont(font); + spinBox_44->setWrapping(true); + spinBox_44->setMaximum(10); + spinBox_45 = new QSpinBox(camera_glue); + spinBox_45->setObjectName(QString::fromUtf8("spinBox_45")); + spinBox_45->setGeometry(QRect(390, 1940, 70, 30)); + spinBox_45->setFont(font); + spinBox_45->setWrapping(true); + spinBox_45->setMaximum(10); + spinBox_54 = new QSpinBox(camera_glue); + spinBox_54->setObjectName(QString::fromUtf8("spinBox_54")); + spinBox_54->setGeometry(QRect(490, 1890, 70, 30)); + spinBox_54->setFont(font); + spinBox_54->setWrapping(true); + spinBox_54->setMaximum(10); + spinBox_55 = new QSpinBox(camera_glue); + spinBox_55->setObjectName(QString::fromUtf8("spinBox_55")); + spinBox_55->setGeometry(QRect(490, 1940, 70, 30)); + spinBox_55->setFont(font); + spinBox_55->setWrapping(true); + spinBox_55->setMaximum(10); + spinBox_64 = new QSpinBox(camera_glue); + spinBox_64->setObjectName(QString::fromUtf8("spinBox_64")); + spinBox_64->setGeometry(QRect(590, 1890, 70, 30)); + spinBox_64->setFont(font); + spinBox_64->setWrapping(true); + spinBox_64->setMaximum(10); + spinBox_65 = new QSpinBox(camera_glue); + spinBox_65->setObjectName(QString::fromUtf8("spinBox_65")); + spinBox_65->setGeometry(QRect(590, 1930, 70, 30)); + spinBox_65->setFont(font); + spinBox_65->setWrapping(true); + spinBox_65->setMaximum(10); + spinBox_74 = new QSpinBox(camera_glue); + spinBox_74->setObjectName(QString::fromUtf8("spinBox_74")); + spinBox_74->setGeometry(QRect(690, 1890, 70, 30)); + spinBox_74->setFont(font); + spinBox_74->setWrapping(true); + spinBox_74->setMaximum(10); + spinBox_75 = new QSpinBox(camera_glue); + spinBox_75->setObjectName(QString::fromUtf8("spinBox_75")); + spinBox_75->setGeometry(QRect(690, 1930, 70, 30)); + spinBox_75->setFont(font); + spinBox_75->setWrapping(true); + spinBox_75->setMaximum(10); + spinBox_84 = new QSpinBox(camera_glue); + spinBox_84->setObjectName(QString::fromUtf8("spinBox_84")); + spinBox_84->setGeometry(QRect(790, 1890, 70, 30)); + spinBox_84->setFont(font); + spinBox_84->setWrapping(true); + spinBox_84->setMaximum(10); + spinBox_85 = new QSpinBox(camera_glue); + spinBox_85->setObjectName(QString::fromUtf8("spinBox_85")); + spinBox_85->setGeometry(QRect(790, 1930, 70, 30)); + spinBox_85->setFont(font); + spinBox_85->setWrapping(true); + spinBox_85->setMaximum(10); + + retranslateUi(camera_glue); + + QMetaObject::connectSlotsByName(camera_glue); + } // setupUi + + void retranslateUi(QDialog *camera_glue) + { + camera_glue->setWindowTitle(QCoreApplication::translate("camera_glue", "\351\205\215\346\226\271\350\256\276\347\275\256", nullptr)); + label_first->setText(QCoreApplication::translate("camera_glue", "\347\254\254\344\270\200\345\274\240", nullptr)); + label_second->setText(QCoreApplication::translate("camera_glue", "\347\254\254\344\272\214\345\274\240", nullptr)); + label_third->setText(QCoreApplication::translate("camera_glue", "\347\254\254\344\270\211\345\274\240", nullptr)); + label_1->setText(QCoreApplication::translate("camera_glue", "1\345\217\267\347\233\270\346\234\272", nullptr)); + label_2->setText(QCoreApplication::translate("camera_glue", "2\345\217\267\347\233\270\346\234\272", nullptr)); + label_3->setText(QCoreApplication::translate("camera_glue", "3\345\217\267\347\233\270\346\234\272", nullptr)); + label_4->setText(QCoreApplication::translate("camera_glue", "4\345\217\267\347\233\270\346\234\272", nullptr)); + label_hint->setText(QCoreApplication::translate("camera_glue", "\350\213\245\350\246\201\344\277\235\345\255\230\345\217\202\346\225\260\350\257\267\350\277\224\345\233\236\344\270\212\344\270\200\347\272\247\347\202\271\345\207\273\344\277\235\345\255\230", nullptr)); + pushButton_take->setText(QCoreApplication::translate("camera_glue", "\345\272\224\347\224\250", nullptr)); + label_5->setText(QCoreApplication::translate("camera_glue", "5\345\217\267\347\233\270\346\234\272", nullptr)); + label_6->setText(QCoreApplication::translate("camera_glue", "6\345\217\267\347\233\270\346\234\272", nullptr)); + label_7->setText(QCoreApplication::translate("camera_glue", "7\345\217\267\347\233\270\346\234\272", nullptr)); + label_8->setText(QCoreApplication::translate("camera_glue", "8\345\217\267\347\233\270\346\234\272", nullptr)); + label_fourth->setText(QCoreApplication::translate("camera_glue", "\347\254\254\345\233\233\345\274\240", nullptr)); + label_fifth->setText(QCoreApplication::translate("camera_glue", "\347\254\254\344\272\224\345\274\240", nullptr)); + } // retranslateUi + +}; + +namespace Ui { + class camera_glue: public Ui_camera_glue {}; +} // namespace Ui + +QT_END_NAMESPACE + +#endif // UI_CAMERA_GLUE_H diff --git a/Cigarette/GeneratedFiles/ui_change_shift.h b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/ui_change_shift.h similarity index 51% rename from Cigarette/GeneratedFiles/ui_change_shift.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/ui_change_shift.h index ec3e7e36..795fea20 100644 --- a/Cigarette/GeneratedFiles/ui_change_shift.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/ui_change_shift.h @@ -1,7 +1,7 @@ /******************************************************************************** ** Form generated from reading UI file 'change_shift.ui' ** -** Created by: Qt User Interface Compiler version 5.15.2 +** Created by: Qt User Interface Compiler version 5.14.2 ** ** WARNING! All changes made in this file will be lost when recompiling UI file! ********************************************************************************/ @@ -14,6 +14,7 @@ #include #include #include +#include #include QT_BEGIN_NAMESPACE @@ -21,86 +22,129 @@ QT_BEGIN_NAMESPACE class Ui_change_shift { public: + QPushButton *pushButton_apply; + QLabel *label_tips; + QRadioButton *radioButton_auto; + QSpinBox *C_minute; + QLabel *A_hour_lab; + QLabel *C_minute_lab; QSpinBox *A_hour; - QSpinBox *A_minute; + QLabel *B_class_lab; + QLabel *C_class_lab; QLabel *A_class_lab; - QLabel *A_hour_lab; + QSpinBox *A_minute; QLabel *A_minute_lab; - QLabel *B_hour_lab; + QSpinBox *C_hour; + QRadioButton *radioButton_time; QSpinBox *B_minute; QLabel *B_minute_lab; - QLabel *B_class_lab; - QSpinBox *B_hour; QLabel *C_hour_lab; - QSpinBox *C_minute; - QLabel *C_minute_lab; - QLabel *C_class_lab; - QSpinBox *C_hour; - QPushButton *pushButton; - QLabel *label_4; + QSpinBox *B_hour; + QLabel *B_hour_lab; + QRadioButton *radioButton_byhand; void setupUi(QDialog *change_shift) { if (change_shift->objectName().isEmpty()) change_shift->setObjectName(QString::fromUtf8("change_shift")); - change_shift->resize(397, 255); + change_shift->resize(456, 360); + pushButton_apply = new QPushButton(change_shift); + pushButton_apply->setObjectName(QString::fromUtf8("pushButton_apply")); + pushButton_apply->setGeometry(QRect(170, 250, 110, 30)); + QFont font; + font.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); + font.setPointSize(10); + font.setBold(true); + font.setWeight(75); + pushButton_apply->setFont(font); + label_tips = new QLabel(change_shift); + label_tips->setObjectName(QString::fromUtf8("label_tips")); + label_tips->setGeometry(QRect(70, 300, 331, 30)); + QFont font1; + font1.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); + font1.setPointSize(12); + label_tips->setFont(font1); + radioButton_auto = new QRadioButton(change_shift); + radioButton_auto->setObjectName(QString::fromUtf8("radioButton_auto")); + radioButton_auto->setGeometry(QRect(30, 810, 140, 30)); + QFont font2; + font2.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); + font2.setPointSize(16); + radioButton_auto->setFont(font2); + C_minute = new QSpinBox(change_shift); + C_minute->setObjectName(QString::fromUtf8("C_minute")); + C_minute->setGeometry(QRect(250, 200, 60, 30)); + C_minute->setFont(font1); + C_minute->setMaximum(59); + A_hour_lab = new QLabel(change_shift); + A_hour_lab->setObjectName(QString::fromUtf8("A_hour_lab")); + A_hour_lab->setGeometry(QRect(220, 120, 20, 30)); + A_hour_lab->setFont(font1); + C_minute_lab = new QLabel(change_shift); + C_minute_lab->setObjectName(QString::fromUtf8("C_minute_lab")); + C_minute_lab->setGeometry(QRect(310, 200, 20, 30)); + C_minute_lab->setFont(font1); A_hour = new QSpinBox(change_shift); A_hour->setObjectName(QString::fromUtf8("A_hour")); - A_hour->setGeometry(QRect(130, 50, 42, 22)); + A_hour->setGeometry(QRect(160, 120, 60, 30)); + A_hour->setFont(font1); A_hour->setMaximum(23); + B_class_lab = new QLabel(change_shift); + B_class_lab->setObjectName(QString::fromUtf8("B_class_lab")); + B_class_lab->setGeometry(QRect(110, 160, 50, 30)); + B_class_lab->setFont(font1); + C_class_lab = new QLabel(change_shift); + C_class_lab->setObjectName(QString::fromUtf8("C_class_lab")); + C_class_lab->setGeometry(QRect(110, 200, 50, 30)); + C_class_lab->setFont(font1); + A_class_lab = new QLabel(change_shift); + A_class_lab->setObjectName(QString::fromUtf8("A_class_lab")); + A_class_lab->setGeometry(QRect(110, 120, 50, 30)); + A_class_lab->setFont(font1); A_minute = new QSpinBox(change_shift); A_minute->setObjectName(QString::fromUtf8("A_minute")); - A_minute->setGeometry(QRect(210, 50, 61, 22)); + A_minute->setGeometry(QRect(250, 120, 60, 30)); + A_minute->setFont(font1); A_minute->setMaximum(59); - A_class_lab = new QLabel(change_shift); - A_class_lab->setObjectName(QString::fromUtf8("A_class_lab")); - A_class_lab->setGeometry(QRect(90, 50, 31, 21)); - A_hour_lab = new QLabel(change_shift); - A_hour_lab->setObjectName(QString::fromUtf8("A_hour_lab")); - A_hour_lab->setGeometry(QRect(180, 50, 31, 20)); A_minute_lab = new QLabel(change_shift); A_minute_lab->setObjectName(QString::fromUtf8("A_minute_lab")); - A_minute_lab->setGeometry(QRect(280, 50, 54, 21)); - B_hour_lab = new QLabel(change_shift); - B_hour_lab->setObjectName(QString::fromUtf8("B_hour_lab")); - B_hour_lab->setGeometry(QRect(180, 90, 31, 20)); + A_minute_lab->setGeometry(QRect(310, 120, 20, 30)); + A_minute_lab->setFont(font1); + C_hour = new QSpinBox(change_shift); + C_hour->setObjectName(QString::fromUtf8("C_hour")); + C_hour->setGeometry(QRect(160, 200, 60, 30)); + C_hour->setFont(font1); + C_hour->setMaximum(23); + radioButton_time = new QRadioButton(change_shift); + radioButton_time->setObjectName(QString::fromUtf8("radioButton_time")); + radioButton_time->setGeometry(QRect(280, 60, 140, 30)); + radioButton_time->setFont(font2); B_minute = new QSpinBox(change_shift); B_minute->setObjectName(QString::fromUtf8("B_minute")); - B_minute->setGeometry(QRect(210, 90, 61, 22)); + B_minute->setGeometry(QRect(250, 160, 60, 30)); + B_minute->setFont(font1); B_minute->setMaximum(59); B_minute_lab = new QLabel(change_shift); B_minute_lab->setObjectName(QString::fromUtf8("B_minute_lab")); - B_minute_lab->setGeometry(QRect(280, 90, 54, 21)); - B_class_lab = new QLabel(change_shift); - B_class_lab->setObjectName(QString::fromUtf8("B_class_lab")); - B_class_lab->setGeometry(QRect(90, 90, 31, 21)); + B_minute_lab->setGeometry(QRect(310, 160, 20, 30)); + B_minute_lab->setFont(font1); + C_hour_lab = new QLabel(change_shift); + C_hour_lab->setObjectName(QString::fromUtf8("C_hour_lab")); + C_hour_lab->setGeometry(QRect(220, 200, 20, 30)); + C_hour_lab->setFont(font1); B_hour = new QSpinBox(change_shift); B_hour->setObjectName(QString::fromUtf8("B_hour")); - B_hour->setGeometry(QRect(130, 90, 42, 22)); + B_hour->setGeometry(QRect(160, 160, 60, 30)); + B_hour->setFont(font1); B_hour->setMaximum(23); - C_hour_lab = new QLabel(change_shift); - C_hour_lab->setObjectName(QString::fromUtf8("C_hour_lab")); - C_hour_lab->setGeometry(QRect(180, 130, 31, 20)); - C_minute = new QSpinBox(change_shift); - C_minute->setObjectName(QString::fromUtf8("C_minute")); - C_minute->setGeometry(QRect(210, 130, 61, 22)); - C_minute->setMaximum(59); - C_minute_lab = new QLabel(change_shift); - C_minute_lab->setObjectName(QString::fromUtf8("C_minute_lab")); - C_minute_lab->setGeometry(QRect(280, 130, 54, 21)); - C_class_lab = new QLabel(change_shift); - C_class_lab->setObjectName(QString::fromUtf8("C_class_lab")); - C_class_lab->setGeometry(QRect(90, 130, 31, 21)); - C_hour = new QSpinBox(change_shift); - C_hour->setObjectName(QString::fromUtf8("C_hour")); - C_hour->setGeometry(QRect(130, 130, 42, 22)); - C_hour->setMaximum(23); - pushButton = new QPushButton(change_shift); - pushButton->setObjectName(QString::fromUtf8("pushButton")); - pushButton->setGeometry(QRect(140, 210, 111, 31)); - label_4 = new QLabel(change_shift); - label_4->setObjectName(QString::fromUtf8("label_4")); - label_4->setGeometry(QRect(100, 180, 241, 21)); + B_hour_lab = new QLabel(change_shift); + B_hour_lab->setObjectName(QString::fromUtf8("B_hour_lab")); + B_hour_lab->setGeometry(QRect(220, 160, 20, 30)); + B_hour_lab->setFont(font1); + radioButton_byhand = new QRadioButton(change_shift); + radioButton_byhand->setObjectName(QString::fromUtf8("radioButton_byhand")); + radioButton_byhand->setGeometry(QRect(40, 60, 140, 30)); + radioButton_byhand->setFont(font2); retranslateUi(change_shift); @@ -110,17 +154,20 @@ public: void retranslateUi(QDialog *change_shift) { change_shift->setWindowTitle(QCoreApplication::translate("change_shift", "\346\215\242\347\217\255\350\256\276\347\275\256", nullptr)); - A_class_lab->setText(QCoreApplication::translate("change_shift", "A\347\217\255", nullptr)); + pushButton_apply->setText(QCoreApplication::translate("change_shift", "\345\272\224\347\224\250", nullptr)); + label_tips->setText(QCoreApplication::translate("change_shift", "\350\213\245\350\246\201\344\277\235\345\255\230\345\217\202\346\225\260\350\257\267\350\277\224\345\233\236\344\270\212\344\270\200\347\272\247\347\202\271\345\207\273\344\277\235\345\255\230", nullptr)); + radioButton_auto->setText(QCoreApplication::translate("change_shift", "\350\207\252\345\212\250\346\215\242\347\217\255", nullptr)); A_hour_lab->setText(QCoreApplication::translate("change_shift", "\347\202\271", nullptr)); + C_minute_lab->setText(QCoreApplication::translate("change_shift", "\345\210\206", nullptr)); + B_class_lab->setText(QCoreApplication::translate("change_shift", "B\347\217\255", nullptr)); + C_class_lab->setText(QCoreApplication::translate("change_shift", "C\347\217\255", nullptr)); + A_class_lab->setText(QCoreApplication::translate("change_shift", "A\347\217\255", nullptr)); A_minute_lab->setText(QCoreApplication::translate("change_shift", "\345\210\206", nullptr)); - B_hour_lab->setText(QCoreApplication::translate("change_shift", "\347\202\271", nullptr)); + radioButton_time->setText(QCoreApplication::translate("change_shift", "\345\256\232\346\227\266\346\215\242\347\217\255", nullptr)); B_minute_lab->setText(QCoreApplication::translate("change_shift", "\345\210\206", nullptr)); - B_class_lab->setText(QCoreApplication::translate("change_shift", "B\347\217\255", nullptr)); C_hour_lab->setText(QCoreApplication::translate("change_shift", "\347\202\271", nullptr)); - C_minute_lab->setText(QCoreApplication::translate("change_shift", "\345\210\206", nullptr)); - C_class_lab->setText(QCoreApplication::translate("change_shift", "C\347\217\255", nullptr)); - pushButton->setText(QCoreApplication::translate("change_shift", "\345\272\224\347\224\250", nullptr)); - label_4->setText(QCoreApplication::translate("change_shift", "\350\213\245\350\246\201\344\277\235\345\255\230\345\217\202\346\225\260\350\257\267\350\277\224\345\233\236\344\270\212\344\270\200\347\272\247\347\202\271\345\207\273\344\277\235\345\255\230", nullptr)); + B_hour_lab->setText(QCoreApplication::translate("change_shift", "\347\202\271", nullptr)); + radioButton_byhand->setText(QCoreApplication::translate("change_shift", "\346\211\213\345\212\250\346\215\242\347\217\255", nullptr)); } // retranslateUi }; diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/ui_cigarette.h b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/ui_cigarette.h new file mode 100644 index 00000000..9c3a6c19 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/ui_cigarette.h @@ -0,0 +1,1655 @@ +/******************************************************************************** +** Form generated from reading UI file 'cigarette.ui' +** +** Created by: Qt User Interface Compiler version 5.14.2 +** +** WARNING! All changes made in this file will be lost when recompiling UI file! +********************************************************************************/ + +#ifndef UI_CIGARETTE_H +#define UI_CIGARETTE_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "db_label.h" + +QT_BEGIN_NAMESPACE + +class Ui_CigaretteClass +{ +public: + QWidget *centralWidget; + QLabel *label_title; + QGroupBox *groupBox_op; + QToolButton *btn_start; + QToolButton *btn_pause; + QToolButton *btn_lock; + QToolButton *btn_setup; + QGroupBox *groupBox_dev; + QToolButton *toolButton_cam_1; + QToolButton *toolButton_cam_2; + QLabel *cam_status_2; + QLabel *cam_work_2; + QLabel *cam_work_1; + QCheckBox *checkBox_debug; + QCheckBox *checkBox_unkick; + QLabel *cam_work_4; + QToolButton *toolButton_cam_4; + QToolButton *toolButton_cam_6; + QToolButton *toolButton_cam_8; + QLabel *cam_status_8; + QLabel *cam_work_8; + QToolButton *toolButton_cam_3; + QToolButton *toolButton_cam_5; + QToolButton *toolButton_cam_7; + QLabel *cam_status_5; + QLabel *cam_status_3; + QLabel *cam_status_7; + QLabel *cam_status_6; + QLabel *cam_status_4; + QLabel *cam_work_3; + QLabel *cam_work_5; + QLabel *cam_work_6; + QLabel *cam_work_7; + QLabel *cam_status_1; + QGroupBox *groupBox_status; + db_label *label_alarm; + QLabel *label_5; + QLabel *label_plc; + QLCDNumber *lcdNumber_total_no; + QToolButton *toolButton_alarm; + QToolButton *toolButton_plc; + QPushButton *pushButton_clear; + QLabel *label_run_stat; + QLabel *label_12; + QLabel *label_role; + QLabel *label_8; + QLCDNumber *lcdNumber_total_no_last; + QPushButton *pushButton_reset; + db_label *image_label_11; + QGroupBox *groupBox_a_1; + QLabel *label_speed_1; + QLabel *label_cap_speed_1; + QLabel *label_jd_no_1; + QLabel *label_jdnum_1; + QLabel *label_time_1; + QLabel *label_timecost_1; + QLabel *label_reslut_1; + QLCDNumber *lcdNumber_kick_1; + QLabel *label_check_1; + QLCDNumber *lcdNumber_ng_1; + QLCDNumber *lcdNumber_total_1; + QLabel *label_ok_1; + QLabel *label_kick_1; + QLCDNumber *lcdNumber_ok_1; + db_label *label_ng_1; + QToolButton *rotate_1; + QLabel *label_title_7; + QLabel *label_title_6; + QToolButton *toolButton_4; + QLabel *label_17; + QLabel *label_18; + QLabel *label_cur_time; + db_label *image_label_12; + db_label *image_label_22; + QToolButton *rotate_2; + db_label *image_label_21; + QLCDNumber *lcdNumber_ok_4; + db_label *image_label_42; + QLCDNumber *lcdNumber_ng_4; + QLCDNumber *lcdNumber_total_4; + QToolButton *rotate_4; + QLabel *label_check_4; + QLabel *label_ok_4; + QLabel *label_kick_4; + QGroupBox *groupBox_a_4; + QLabel *label_speed_4; + QLabel *label_cap_speed_4; + QLabel *label_jd_no_4; + QLabel *label_jdnum_4; + QLabel *label_time_4; + QLabel *label_timecost_4; + QLabel *label_reslut_4; + db_label *image_label_41; + QLCDNumber *lcdNumber_kick_4; + db_label *label_ng_4; + QLabel *label_kick_2; + QLCDNumber *lcdNumber_kick_2; + QLabel *label_ok_2; + QLCDNumber *lcdNumber_ok_2; + QLCDNumber *lcdNumber_total_2; + QLabel *label_check_2; + db_label *label_ng_2; + QLCDNumber *lcdNumber_ng_2; + QGroupBox *groupBox_a_2; + QLabel *label_speed_2; + QLabel *label_cap_speed_2; + QLabel *label_jd_no_2; + QLabel *label_jdnum_2; + QLabel *label_time_2; + QLabel *label_timecost_2; + QLabel *label_reslut_2; + QLCDNumber *lcdNumber_ng_3; + QLabel *label_kick_3; + QLabel *label_check_3; + QLCDNumber *lcdNumber_kick_3; + QToolButton *rotate_3; + QGroupBox *groupBox_a_3; + QLabel *label_speed_3; + QLabel *label_cap_speed_3; + QLabel *label_jd_no_3; + QLabel *label_jdnum_3; + QLabel *label_time_3; + QLabel *label_timecost_3; + QLabel *label_reslut_3; + db_label *label_ng_3; + db_label *image_label_31; + QLabel *label_ok_3; + QLCDNumber *lcdNumber_ok_3; + QLCDNumber *lcdNumber_total_3; + db_label *image_label_32; + QLCDNumber *lcdNumber_total_6; + QLCDNumber *lcdNumber_ng_5; + db_label *image_label_61; + QLabel *label_kick_6; + QLabel *label_check_5; + QLabel *label_check_8; + QToolButton *rotate_5; + QLabel *label_kick_8; + QLabel *label_check_7; + db_label *label_ng_6; + QToolButton *rotate_6; + db_label *label_ng_5; + QLCDNumber *lcdNumber_ng_7; + QLabel *label_ok_7; + db_label *image_label_72; + QGroupBox *groupBox_a_6; + QLabel *label_speed_6; + QLabel *label_cap_speed_6; + QLabel *label_jd_no_6; + QLabel *label_jdnum_6; + QLabel *label_time_6; + QLabel *label_timecost_6; + QLabel *label_reslut_6; + QLCDNumber *lcdNumber_ng_6; + db_label *image_label_81; + QLCDNumber *lcdNumber_total_8; + QGroupBox *groupBox_a_8; + QLabel *label_speed_8; + QLabel *label_cap_speed_8; + QLabel *label_jd_no_8; + QLabel *label_jdnum_8; + QLabel *label_time_8; + QLabel *label_timecost_8; + QLabel *label_reslut_8; + QGroupBox *groupBox_a_7; + QLabel *label_speed_7; + QLabel *label_cap_speed_7; + QLabel *label_jd_no_7; + QLabel *label_jdnum_7; + QLabel *label_time_7; + QLabel *label_timecost_7; + QLabel *label_reslut_7; + QLabel *label_kick_5; + QLCDNumber *lcdNumber_ng_8; + QLCDNumber *lcdNumber_kick_5; + QLabel *label_kick_7; + QLCDNumber *lcdNumber_ok_6; + QGroupBox *groupBox_a_5; + QLabel *label_speed_5; + QLabel *label_cap_speed_5; + QLabel *label_jd_no_5; + QLabel *label_jdnum_5; + QLabel *label_time_5; + QLabel *label_timecost_5; + QLabel *label_reslut_5; + QLCDNumber *lcdNumber_kick_7; + db_label *image_label_51; + QLabel *label_ok_5; + QLabel *label_check_6; + QLabel *label_ok_8; + QLCDNumber *lcdNumber_ok_8; + QLCDNumber *lcdNumber_ok_5; + db_label *label_ng_8; + QLCDNumber *lcdNumber_total_7; + QLCDNumber *lcdNumber_kick_6; + db_label *label_ng_7; + QLCDNumber *lcdNumber_total_5; + db_label *image_label_52; + db_label *image_label_82; + QLCDNumber *lcdNumber_ok_7; + QLabel *label_ok_6; + db_label *image_label_62; + QLCDNumber *lcdNumber_kick_8; + QToolButton *rotate_8; + QToolButton *rotate_7; + db_label *image_label_71; + QLabel *location; + + void setupUi(QMainWindow *CigaretteClass) + { + if (CigaretteClass->objectName().isEmpty()) + CigaretteClass->setObjectName(QString::fromUtf8("CigaretteClass")); + CigaretteClass->resize(1280, 800); + CigaretteClass->setStyleSheet(QString::fromUtf8("background-color: rgb(55, 55, 55);")); + centralWidget = new QWidget(CigaretteClass); + centralWidget->setObjectName(QString::fromUtf8("centralWidget")); + label_title = new QLabel(centralWidget); + label_title->setObjectName(QString::fromUtf8("label_title")); + label_title->setGeometry(QRect(430, 10, 441, 61)); + QFont font; + font.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); + font.setPointSize(24); + label_title->setFont(font); + label_title->setStyleSheet(QString::fromUtf8("background-color: rgb(255, 255, 0);")); + label_title->setAlignment(Qt::AlignCenter); + groupBox_op = new QGroupBox(centralWidget); + groupBox_op->setObjectName(QString::fromUtf8("groupBox_op")); + groupBox_op->setGeometry(QRect(10, 70, 111, 411)); + QFont font1; + font1.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); + font1.setPointSize(14); + font1.setBold(true); + font1.setWeight(75); + groupBox_op->setFont(font1); + groupBox_op->setStyleSheet(QString::fromUtf8("color:white")); + btn_start = new QToolButton(groupBox_op); + btn_start->setObjectName(QString::fromUtf8("btn_start")); + btn_start->setGeometry(QRect(20, 34, 72, 96)); + QFont font2; + font2.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); + btn_start->setFont(font2); + btn_start->setStyleSheet(QString::fromUtf8("border-image: url(:/Cigarette/Resources/start.png);")); + btn_start->setAutoRaise(false); + btn_pause = new QToolButton(groupBox_op); + btn_pause->setObjectName(QString::fromUtf8("btn_pause")); + btn_pause->setGeometry(QRect(20, 120, 72, 96)); + btn_pause->setFont(font2); + btn_pause->setStyleSheet(QString::fromUtf8("border-image: url(:/Cigarette/Resources/pause.png);\n" +"")); + btn_pause->setAutoRaise(false); + btn_lock = new QToolButton(groupBox_op); + btn_lock->setObjectName(QString::fromUtf8("btn_lock")); + btn_lock->setGeometry(QRect(20, 215, 72, 91)); + btn_lock->setFont(font2); + btn_lock->setStyleSheet(QString::fromUtf8("border-image: url(:/Cigarette/Resources/unlock.png);")); + btn_lock->setAutoRaise(false); + btn_setup = new QToolButton(groupBox_op); + btn_setup->setObjectName(QString::fromUtf8("btn_setup")); + btn_setup->setGeometry(QRect(20, 310, 72, 96)); + btn_setup->setFont(font2); + btn_setup->setStyleSheet(QString::fromUtf8("border-image: url(:/Cigarette/Resources/setup.png);\n" +"")); + btn_setup->setAutoRaise(false); + groupBox_dev = new QGroupBox(centralWidget); + groupBox_dev->setObjectName(QString::fromUtf8("groupBox_dev")); + groupBox_dev->setGeometry(QRect(10, 500, 111, 241)); + groupBox_dev->setFont(font1); + groupBox_dev->setStyleSheet(QString::fromUtf8("color:white")); + toolButton_cam_1 = new QToolButton(groupBox_dev); + toolButton_cam_1->setObjectName(QString::fromUtf8("toolButton_cam_1")); + toolButton_cam_1->setGeometry(QRect(20, 30, 71, 71)); + toolButton_cam_1->setStyleSheet(QString::fromUtf8("border-image: url(:/Cigarette/Resources/cam1_no.png);")); + toolButton_cam_2 = new QToolButton(groupBox_dev); + toolButton_cam_2->setObjectName(QString::fromUtf8("toolButton_cam_2")); + toolButton_cam_2->setGeometry(QRect(20, 1280, 41, 41)); + toolButton_cam_2->setStyleSheet(QString::fromUtf8("border-image: url(:/Cigarette/Resources/cam2_no.png);")); + cam_status_2 = new QLabel(groupBox_dev); + cam_status_2->setObjectName(QString::fromUtf8("cam_status_2")); + cam_status_2->setGeometry(QRect(10, 1330, 61, 16)); + QFont font3; + font3.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); + font3.setPointSize(10); + font3.setBold(true); + font3.setWeight(75); + cam_status_2->setFont(font3); + cam_status_2->setStyleSheet(QString::fromUtf8("background-color: rgb(255, 255, 0);")); + cam_status_2->setAlignment(Qt::AlignCenter); + cam_work_2 = new QLabel(groupBox_dev); + cam_work_2->setObjectName(QString::fromUtf8("cam_work_2")); + cam_work_2->setGeometry(QRect(10, 1350, 61, 16)); + cam_work_2->setFont(font3); + cam_work_2->setStyleSheet(QString::fromUtf8("background-color: rgb(255, 255, 0);")); + cam_work_2->setAlignment(Qt::AlignCenter); + cam_work_1 = new QLabel(groupBox_dev); + cam_work_1->setObjectName(QString::fromUtf8("cam_work_1")); + cam_work_1->setGeometry(QRect(20, 145, 71, 31)); + QFont font4; + font4.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); + font4.setPointSize(18); + font4.setBold(true); + font4.setWeight(75); + cam_work_1->setFont(font4); + cam_work_1->setStyleSheet(QString::fromUtf8("background-color: rgb(255, 255, 0);")); + cam_work_1->setAlignment(Qt::AlignCenter); + checkBox_debug = new QCheckBox(groupBox_dev); + checkBox_debug->setObjectName(QString::fromUtf8("checkBox_debug")); + checkBox_debug->setGeometry(QRect(10, 180, 91, 21)); + QFont font5; + font5.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); + font5.setPointSize(12); + font5.setBold(true); + font5.setWeight(75); + checkBox_debug->setFont(font5); + checkBox_debug->setStyleSheet(QString::fromUtf8("color:white")); + checkBox_unkick = new QCheckBox(groupBox_dev); + checkBox_unkick->setObjectName(QString::fromUtf8("checkBox_unkick")); + checkBox_unkick->setGeometry(QRect(10, 210, 71, 21)); + checkBox_unkick->setFont(font5); + checkBox_unkick->setStyleSheet(QString::fromUtf8("color:white")); + cam_work_4 = new QLabel(groupBox_dev); + cam_work_4->setObjectName(QString::fromUtf8("cam_work_4")); + cam_work_4->setGeometry(QRect(10, 1530, 61, 16)); + cam_work_4->setFont(font3); + cam_work_4->setStyleSheet(QString::fromUtf8("background-color: rgb(255, 255, 0);")); + cam_work_4->setAlignment(Qt::AlignCenter); + toolButton_cam_4 = new QToolButton(groupBox_dev); + toolButton_cam_4->setObjectName(QString::fromUtf8("toolButton_cam_4")); + toolButton_cam_4->setGeometry(QRect(20, 1460, 41, 41)); + toolButton_cam_4->setStyleSheet(QString::fromUtf8("border-image: url(:/Cigarette/Resources/cam4_no.png);")); + toolButton_cam_6 = new QToolButton(groupBox_dev); + toolButton_cam_6->setObjectName(QString::fromUtf8("toolButton_cam_6")); + toolButton_cam_6->setGeometry(QRect(100, 1280, 41, 41)); + toolButton_cam_6->setStyleSheet(QString::fromUtf8("border-image: url(:/Cigarette/Resources/cam6_no.png);")); + toolButton_cam_8 = new QToolButton(groupBox_dev); + toolButton_cam_8->setObjectName(QString::fromUtf8("toolButton_cam_8")); + toolButton_cam_8->setGeometry(QRect(100, 1460, 41, 41)); + toolButton_cam_8->setStyleSheet(QString::fromUtf8("border-image: url(:/Cigarette/Resources/cam8_no.png);")); + cam_status_8 = new QLabel(groupBox_dev); + cam_status_8->setObjectName(QString::fromUtf8("cam_status_8")); + cam_status_8->setGeometry(QRect(90, 1510, 61, 16)); + cam_status_8->setFont(font3); + cam_status_8->setStyleSheet(QString::fromUtf8("background-color: rgb(255, 255, 0);")); + cam_status_8->setAlignment(Qt::AlignCenter); + cam_work_8 = new QLabel(groupBox_dev); + cam_work_8->setObjectName(QString::fromUtf8("cam_work_8")); + cam_work_8->setGeometry(QRect(90, 1530, 61, 16)); + cam_work_8->setFont(font3); + cam_work_8->setStyleSheet(QString::fromUtf8("background-color: rgb(255, 255, 0);")); + cam_work_8->setAlignment(Qt::AlignCenter); + toolButton_cam_3 = new QToolButton(groupBox_dev); + toolButton_cam_3->setObjectName(QString::fromUtf8("toolButton_cam_3")); + toolButton_cam_3->setGeometry(QRect(20, 1370, 41, 41)); + toolButton_cam_3->setStyleSheet(QString::fromUtf8("border-image: url(:/Cigarette/Resources/cam3_no.png);")); + toolButton_cam_5 = new QToolButton(groupBox_dev); + toolButton_cam_5->setObjectName(QString::fromUtf8("toolButton_cam_5")); + toolButton_cam_5->setGeometry(QRect(100, 1190, 41, 41)); + toolButton_cam_5->setStyleSheet(QString::fromUtf8("border-image: url(:/Cigarette/Resources/cam5_no.png);")); + toolButton_cam_7 = new QToolButton(groupBox_dev); + toolButton_cam_7->setObjectName(QString::fromUtf8("toolButton_cam_7")); + toolButton_cam_7->setGeometry(QRect(100, 1370, 41, 41)); + toolButton_cam_7->setStyleSheet(QString::fromUtf8("border-image: url(:/Cigarette/Resources/cam7_no.png);")); + cam_status_5 = new QLabel(groupBox_dev); + cam_status_5->setObjectName(QString::fromUtf8("cam_status_5")); + cam_status_5->setGeometry(QRect(90, 1240, 61, 16)); + cam_status_5->setFont(font3); + cam_status_5->setStyleSheet(QString::fromUtf8("background-color: rgb(255, 255, 0);")); + cam_status_5->setAlignment(Qt::AlignCenter); + cam_status_3 = new QLabel(groupBox_dev); + cam_status_3->setObjectName(QString::fromUtf8("cam_status_3")); + cam_status_3->setGeometry(QRect(10, 1420, 61, 16)); + cam_status_3->setFont(font3); + cam_status_3->setStyleSheet(QString::fromUtf8("background-color: rgb(255, 255, 0);")); + cam_status_3->setAlignment(Qt::AlignCenter); + cam_status_7 = new QLabel(groupBox_dev); + cam_status_7->setObjectName(QString::fromUtf8("cam_status_7")); + cam_status_7->setGeometry(QRect(90, 1420, 61, 16)); + cam_status_7->setFont(font3); + cam_status_7->setStyleSheet(QString::fromUtf8("background-color: rgb(255, 255, 0);")); + cam_status_7->setAlignment(Qt::AlignCenter); + cam_status_6 = new QLabel(groupBox_dev); + cam_status_6->setObjectName(QString::fromUtf8("cam_status_6")); + cam_status_6->setGeometry(QRect(90, 1330, 61, 16)); + cam_status_6->setFont(font3); + cam_status_6->setStyleSheet(QString::fromUtf8("background-color: rgb(255, 255, 0);")); + cam_status_6->setAlignment(Qt::AlignCenter); + cam_status_4 = new QLabel(groupBox_dev); + cam_status_4->setObjectName(QString::fromUtf8("cam_status_4")); + cam_status_4->setGeometry(QRect(10, 1510, 61, 16)); + cam_status_4->setFont(font3); + cam_status_4->setStyleSheet(QString::fromUtf8("background-color: rgb(255, 255, 0);")); + cam_status_4->setAlignment(Qt::AlignCenter); + cam_work_3 = new QLabel(groupBox_dev); + cam_work_3->setObjectName(QString::fromUtf8("cam_work_3")); + cam_work_3->setGeometry(QRect(10, 1440, 61, 16)); + cam_work_3->setFont(font3); + cam_work_3->setStyleSheet(QString::fromUtf8("background-color: rgb(255, 255, 0);")); + cam_work_3->setAlignment(Qt::AlignCenter); + cam_work_5 = new QLabel(groupBox_dev); + cam_work_5->setObjectName(QString::fromUtf8("cam_work_5")); + cam_work_5->setGeometry(QRect(90, 1260, 61, 16)); + cam_work_5->setFont(font3); + cam_work_5->setStyleSheet(QString::fromUtf8("background-color: rgb(255, 255, 0);")); + cam_work_5->setAlignment(Qt::AlignCenter); + cam_work_6 = new QLabel(groupBox_dev); + cam_work_6->setObjectName(QString::fromUtf8("cam_work_6")); + cam_work_6->setGeometry(QRect(90, 1350, 61, 16)); + cam_work_6->setFont(font3); + cam_work_6->setStyleSheet(QString::fromUtf8("background-color: rgb(255, 255, 0);")); + cam_work_6->setAlignment(Qt::AlignCenter); + cam_work_7 = new QLabel(groupBox_dev); + cam_work_7->setObjectName(QString::fromUtf8("cam_work_7")); + cam_work_7->setGeometry(QRect(90, 1440, 61, 16)); + cam_work_7->setFont(font3); + cam_work_7->setStyleSheet(QString::fromUtf8("background-color: rgb(255, 255, 0);")); + cam_work_7->setAlignment(Qt::AlignCenter); + cam_status_1 = new QLabel(groupBox_dev); + cam_status_1->setObjectName(QString::fromUtf8("cam_status_1")); + cam_status_1->setGeometry(QRect(20, 110, 71, 31)); + cam_status_1->setFont(font4); + cam_status_1->setStyleSheet(QString::fromUtf8("background-color: rgb(255, 255, 0);")); + cam_status_1->setAlignment(Qt::AlignCenter); + toolButton_cam_1->raise(); + cam_work_1->raise(); + checkBox_debug->raise(); + checkBox_unkick->raise(); + cam_status_1->raise(); + cam_work_5->raise(); + cam_work_7->raise(); + toolButton_cam_4->raise(); + toolButton_cam_6->raise(); + toolButton_cam_7->raise(); + toolButton_cam_8->raise(); + cam_status_3->raise(); + cam_work_2->raise(); + toolButton_cam_3->raise(); + cam_status_5->raise(); + cam_work_6->raise(); + cam_status_4->raise(); + cam_work_8->raise(); + cam_work_4->raise(); + toolButton_cam_5->raise(); + cam_status_2->raise(); + toolButton_cam_2->raise(); + cam_status_7->raise(); + cam_status_8->raise(); + cam_work_3->raise(); + cam_status_6->raise(); + groupBox_status = new QGroupBox(centralWidget); + groupBox_status->setObjectName(QString::fromUtf8("groupBox_status")); + groupBox_status->setGeometry(QRect(10, 745, 1264, 53)); + groupBox_status->setFont(font5); + label_alarm = new db_label(groupBox_status); + label_alarm->setObjectName(QString::fromUtf8("label_alarm")); + label_alarm->setGeometry(QRect(919, 10, 71, 31)); + label_alarm->setFont(font5); + label_alarm->setStyleSheet(QString::fromUtf8("color:white")); + label_alarm->setAlignment(Qt::AlignCenter); + label_5 = new QLabel(groupBox_status); + label_5->setObjectName(QString::fromUtf8("label_5")); + label_5->setGeometry(QRect(410, 10, 41, 31)); + label_5->setFont(font5); + label_5->setStyleSheet(QString::fromUtf8("color:white")); + label_plc = new QLabel(groupBox_status); + label_plc->setObjectName(QString::fromUtf8("label_plc")); + label_plc->setGeometry(QRect(740, 10, 81, 31)); + label_plc->setFont(font5); + label_plc->setStyleSheet(QString::fromUtf8("color:white")); + label_plc->setAlignment(Qt::AlignCenter); + lcdNumber_total_no = new QLCDNumber(groupBox_status); + lcdNumber_total_no->setObjectName(QString::fromUtf8("lcdNumber_total_no")); + lcdNumber_total_no->setGeometry(QRect(450, 5, 171, 41)); + lcdNumber_total_no->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_total_no->setDigitCount(8); + toolButton_alarm = new QToolButton(groupBox_status); + toolButton_alarm->setObjectName(QString::fromUtf8("toolButton_alarm")); + toolButton_alarm->setGeometry(QRect(880, 5, 41, 41)); + toolButton_alarm->setStyleSheet(QString::fromUtf8("border-image: url(:/Cigarette/Resources/alarm.png);")); + toolButton_plc = new QToolButton(groupBox_status); + toolButton_plc->setObjectName(QString::fromUtf8("toolButton_plc")); + toolButton_plc->setGeometry(QRect(690, 5, 51, 41)); + toolButton_plc->setStyleSheet(QString::fromUtf8("border-image: url(:/Cigarette/Resources/plc.png);")); + pushButton_clear = new QPushButton(groupBox_status); + pushButton_clear->setObjectName(QString::fromUtf8("pushButton_clear")); + pushButton_clear->setGeometry(QRect(630, 5, 51, 41)); + QFont font6; + font6.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); + font6.setPointSize(12); + pushButton_clear->setFont(font6); + pushButton_clear->setStyleSheet(QString::fromUtf8("color:white")); + label_run_stat = new QLabel(groupBox_status); + label_run_stat->setObjectName(QString::fromUtf8("label_run_stat")); + label_run_stat->setGeometry(QRect(1000, 16, 250, 20)); + label_run_stat->setFont(font5); + label_run_stat->setStyleSheet(QString::fromUtf8("color:white")); + label_run_stat->setAlignment(Qt::AlignCenter); + label_12 = new QLabel(groupBox_status); + label_12->setObjectName(QString::fromUtf8("label_12")); + label_12->setGeometry(QRect(10, 10, 101, 31)); + label_12->setFont(font5); + label_12->setStyleSheet(QString::fromUtf8("color:white")); + label_12->setAlignment(Qt::AlignCenter); + label_role = new QLabel(groupBox_status); + label_role->setObjectName(QString::fromUtf8("label_role")); + label_role->setGeometry(QRect(110, 10, 71, 31)); + QFont font7; + font7.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); + font7.setPointSize(12); + font7.setBold(false); + font7.setWeight(50); + label_role->setFont(font7); + label_role->setStyleSheet(QString::fromUtf8("color:white")); + label_8 = new QLabel(groupBox_status); + label_8->setObjectName(QString::fromUtf8("label_8")); + label_8->setGeometry(QRect(190, 10, 41, 31)); + label_8->setFont(font5); + label_8->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_total_no_last = new QLCDNumber(groupBox_status); + lcdNumber_total_no_last->setObjectName(QString::fromUtf8("lcdNumber_total_no_last")); + lcdNumber_total_no_last->setGeometry(QRect(230, 5, 171, 41)); + lcdNumber_total_no_last->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_total_no_last->setDigitCount(8); + pushButton_reset = new QPushButton(groupBox_status); + pushButton_reset->setObjectName(QString::fromUtf8("pushButton_reset")); + pushButton_reset->setGeometry(QRect(825, 5, 51, 41)); + pushButton_reset->setFont(font6); + pushButton_reset->setStyleSheet(QString::fromUtf8("color:white")); + image_label_11 = new db_label(centralWidget); + image_label_11->setObjectName(QString::fromUtf8("image_label_11")); + image_label_11->setGeometry(QRect(140, 80, 861, 651)); + image_label_11->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 0, 0);")); + groupBox_a_1 = new QGroupBox(centralWidget); + groupBox_a_1->setObjectName(QString::fromUtf8("groupBox_a_1")); + groupBox_a_1->setGeometry(QRect(1020, 80, 251, 651)); + QFont font8; + font8.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); + font8.setPointSize(14); + groupBox_a_1->setFont(font8); + groupBox_a_1->setStyleSheet(QString::fromUtf8("color:white")); + label_speed_1 = new QLabel(groupBox_a_1); + label_speed_1->setObjectName(QString::fromUtf8("label_speed_1")); + label_speed_1->setGeometry(QRect(20, 370, 70, 20)); + label_speed_1->setFont(font3); + label_cap_speed_1 = new QLabel(groupBox_a_1); + label_cap_speed_1->setObjectName(QString::fromUtf8("label_cap_speed_1")); + label_cap_speed_1->setGeometry(QRect(100, 370, 71, 20)); + QFont font9; + font9.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); + font9.setPointSize(11); + label_cap_speed_1->setFont(font9); + label_cap_speed_1->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); + label_jd_no_1 = new QLabel(groupBox_a_1); + label_jd_no_1->setObjectName(QString::fromUtf8("label_jd_no_1")); + label_jd_no_1->setGeometry(QRect(90, 440, 81, 20)); + label_jd_no_1->setFont(font9); + label_jd_no_1->setLayoutDirection(Qt::LeftToRight); + label_jd_no_1->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); + label_jdnum_1 = new QLabel(groupBox_a_1); + label_jdnum_1->setObjectName(QString::fromUtf8("label_jdnum_1")); + label_jdnum_1->setGeometry(QRect(20, 440, 70, 20)); + label_jdnum_1->setFont(font3); + label_time_1 = new QLabel(groupBox_a_1); + label_time_1->setObjectName(QString::fromUtf8("label_time_1")); + label_time_1->setGeometry(QRect(20, 510, 70, 20)); + label_time_1->setFont(font3); + label_timecost_1 = new QLabel(groupBox_a_1); + label_timecost_1->setObjectName(QString::fromUtf8("label_timecost_1")); + label_timecost_1->setGeometry(QRect(90, 510, 61, 20)); + label_timecost_1->setFont(font9); + label_timecost_1->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); + label_reslut_1 = new QLabel(groupBox_a_1); + label_reslut_1->setObjectName(QString::fromUtf8("label_reslut_1")); + label_reslut_1->setGeometry(QRect(20, 560, 121, 81)); + QFont font10; + font10.setFamily(QString::fromUtf8("SimSun")); + font10.setPointSize(18); + font10.setBold(true); + font10.setWeight(75); + label_reslut_1->setFont(font10); + label_reslut_1->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 255, 0);")); + label_reslut_1->setAlignment(Qt::AlignCenter); + lcdNumber_kick_1 = new QLCDNumber(groupBox_a_1); + lcdNumber_kick_1->setObjectName(QString::fromUtf8("lcdNumber_kick_1")); + lcdNumber_kick_1->setGeometry(QRect(110, 280, 131, 41)); + QFont font11; + font11.setPointSize(10); + lcdNumber_kick_1->setFont(font11); + lcdNumber_kick_1->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_kick_1->setDigitCount(10); + label_check_1 = new QLabel(groupBox_a_1); + label_check_1->setObjectName(QString::fromUtf8("label_check_1")); + label_check_1->setGeometry(QRect(15, 40, 91, 31)); + label_check_1->setFont(font3); + label_check_1->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_ng_1 = new QLCDNumber(groupBox_a_1); + lcdNumber_ng_1->setObjectName(QString::fromUtf8("lcdNumber_ng_1")); + lcdNumber_ng_1->setGeometry(QRect(110, 200, 131, 41)); + lcdNumber_ng_1->setFont(font11); + lcdNumber_ng_1->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_ng_1->setDigitCount(10); + lcdNumber_total_1 = new QLCDNumber(groupBox_a_1); + lcdNumber_total_1->setObjectName(QString::fromUtf8("lcdNumber_total_1")); + lcdNumber_total_1->setGeometry(QRect(110, 40, 131, 41)); + lcdNumber_total_1->setFont(font11); + lcdNumber_total_1->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_total_1->setDigitCount(10); + label_ok_1 = new QLabel(groupBox_a_1); + label_ok_1->setObjectName(QString::fromUtf8("label_ok_1")); + label_ok_1->setGeometry(QRect(15, 120, 91, 31)); + label_ok_1->setFont(font3); + label_ok_1->setStyleSheet(QString::fromUtf8("color:white")); + label_kick_1 = new QLabel(groupBox_a_1); + label_kick_1->setObjectName(QString::fromUtf8("label_kick_1")); + label_kick_1->setGeometry(QRect(15, 290, 91, 31)); + label_kick_1->setFont(font3); + label_kick_1->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_ok_1 = new QLCDNumber(groupBox_a_1); + lcdNumber_ok_1->setObjectName(QString::fromUtf8("lcdNumber_ok_1")); + lcdNumber_ok_1->setGeometry(QRect(110, 120, 131, 41)); + lcdNumber_ok_1->setFont(font11); + lcdNumber_ok_1->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_ok_1->setDigitCount(10); + label_ng_1 = new db_label(groupBox_a_1); + label_ng_1->setObjectName(QString::fromUtf8("label_ng_1")); + label_ng_1->setGeometry(QRect(15, 200, 91, 31)); + label_ng_1->setFont(font3); + label_ng_1->setStyleSheet(QString::fromUtf8("color:white")); + rotate_1 = new QToolButton(centralWidget); + rotate_1->setObjectName(QString::fromUtf8("rotate_1")); + rotate_1->setGeometry(QRect(484, 65, 0, 0)); + rotate_1->setFocusPolicy(Qt::ClickFocus); + rotate_1->setAutoFillBackground(false); + QIcon icon; + icon.addFile(QString::fromUtf8(":/Cigarette/Resources/rotate.png"), QSize(), QIcon::Normal, QIcon::Off); + rotate_1->setIcon(icon); + rotate_1->setIconSize(QSize(40, 40)); + label_title_7 = new QLabel(centralWidget); + label_title_7->setObjectName(QString::fromUtf8("label_title_7")); + label_title_7->setGeometry(QRect(80, 2470, 341, 16)); + QFont font12; + font12.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); + font12.setPointSize(10); + label_title_7->setFont(font12); + label_title_7->setStyleSheet(QString::fromUtf8("color:white")); + label_title_7->setAlignment(Qt::AlignCenter); + label_title_6 = new QLabel(centralWidget); + label_title_6->setObjectName(QString::fromUtf8("label_title_6")); + label_title_6->setGeometry(QRect(80, 2427, 271, 31)); + QFont font13; + font13.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); + font13.setPointSize(13); + label_title_6->setFont(font13); + label_title_6->setStyleSheet(QString::fromUtf8("color:white")); + label_title_6->setAlignment(Qt::AlignCenter); + toolButton_4 = new QToolButton(centralWidget); + toolButton_4->setObjectName(QString::fromUtf8("toolButton_4")); + toolButton_4->setGeometry(QRect(10, 2425, 70, 61)); + toolButton_4->setStyleSheet(QString::fromUtf8("border-image: url(:/Cigarette/Resources/logo.png);\n" +"")); + label_17 = new QLabel(centralWidget); + label_17->setObjectName(QString::fromUtf8("label_17")); + label_17->setGeometry(QRect(1020, 10, 191, 21)); + label_17->setFont(font7); + label_17->setStyleSheet(QString::fromUtf8("color:white")); + label_18 = new QLabel(centralWidget); + label_18->setObjectName(QString::fromUtf8("label_18")); + label_18->setGeometry(QRect(1170, 10, 81, 21)); + label_18->setFont(font7); + label_18->setStyleSheet(QString::fromUtf8("color:white")); + label_cur_time = new QLabel(centralWidget); + label_cur_time->setObjectName(QString::fromUtf8("label_cur_time")); + label_cur_time->setGeometry(QRect(990, 30, 211, 31)); + label_cur_time->setFont(font7); + label_cur_time->setStyleSheet(QString::fromUtf8("color:white")); + label_cur_time->setAlignment(Qt::AlignCenter); + image_label_12 = new db_label(centralWidget); + image_label_12->setObjectName(QString::fromUtf8("image_label_12")); + image_label_12->setGeometry(QRect(10, 1890, 160, 110)); + image_label_12->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 0, 0);")); + image_label_22 = new db_label(centralWidget); + image_label_22->setObjectName(QString::fromUtf8("image_label_22")); + image_label_22->setGeometry(QRect(170, 1890, 160, 110)); + image_label_22->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 0, 0);")); + rotate_2 = new QToolButton(centralWidget); + rotate_2->setObjectName(QString::fromUtf8("rotate_2")); + rotate_2->setGeometry(QRect(484, 230, 0, 0)); + rotate_2->setFocusPolicy(Qt::ClickFocus); + rotate_2->setAutoFillBackground(false); + rotate_2->setIcon(icon); + rotate_2->setIconSize(QSize(40, 40)); + image_label_21 = new db_label(centralWidget); + image_label_21->setObjectName(QString::fromUtf8("image_label_21")); + image_label_21->setGeometry(QRect(185, 1390, 320, 110)); + image_label_21->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 0, 0);")); + lcdNumber_ok_4 = new QLCDNumber(centralWidget); + lcdNumber_ok_4->setObjectName(QString::fromUtf8("lcdNumber_ok_4")); + lcdNumber_ok_4->setGeometry(QRect(610, 1755, 90, 20)); + lcdNumber_ok_4->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_ok_4->setDigitCount(10); + image_label_42 = new db_label(centralWidget); + image_label_42->setObjectName(QString::fromUtf8("image_label_42")); + image_label_42->setGeometry(QRect(490, 1890, 160, 110)); + image_label_42->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 0, 0);")); + lcdNumber_ng_4 = new QLCDNumber(centralWidget); + lcdNumber_ng_4->setObjectName(QString::fromUtf8("lcdNumber_ng_4")); + lcdNumber_ng_4->setGeometry(QRect(610, 1785, 90, 20)); + lcdNumber_ng_4->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_ng_4->setDigitCount(10); + lcdNumber_total_4 = new QLCDNumber(centralWidget); + lcdNumber_total_4->setObjectName(QString::fromUtf8("lcdNumber_total_4")); + lcdNumber_total_4->setGeometry(QRect(610, 1725, 90, 20)); + lcdNumber_total_4->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_total_4->setDigitCount(10); + rotate_4 = new QToolButton(centralWidget); + rotate_4->setObjectName(QString::fromUtf8("rotate_4")); + rotate_4->setGeometry(QRect(484, 565, 0, 0)); + rotate_4->setFocusPolicy(Qt::ClickFocus); + rotate_4->setAutoFillBackground(false); + rotate_4->setIcon(icon); + rotate_4->setIconSize(QSize(40, 40)); + label_check_4 = new QLabel(centralWidget); + label_check_4->setObjectName(QString::fromUtf8("label_check_4")); + label_check_4->setGeometry(QRect(515, 1725, 90, 20)); + label_check_4->setFont(font3); + label_check_4->setStyleSheet(QString::fromUtf8("color:white")); + label_ok_4 = new QLabel(centralWidget); + label_ok_4->setObjectName(QString::fromUtf8("label_ok_4")); + label_ok_4->setGeometry(QRect(515, 1755, 90, 20)); + label_ok_4->setFont(font3); + label_ok_4->setStyleSheet(QString::fromUtf8("color:white")); + label_kick_4 = new QLabel(centralWidget); + label_kick_4->setObjectName(QString::fromUtf8("label_kick_4")); + label_kick_4->setGeometry(QRect(515, 1815, 90, 20)); + label_kick_4->setFont(font3); + label_kick_4->setStyleSheet(QString::fromUtf8("color:white")); + groupBox_a_4 = new QGroupBox(centralWidget); + groupBox_a_4->setObjectName(QString::fromUtf8("groupBox_a_4")); + groupBox_a_4->setGeometry(QRect(185, 1835, 511, 51)); + groupBox_a_4->setFont(font12); + groupBox_a_4->setStyleSheet(QString::fromUtf8("color:white")); + label_speed_4 = new QLabel(groupBox_a_4); + label_speed_4->setObjectName(QString::fromUtf8("label_speed_4")); + label_speed_4->setGeometry(QRect(10, 20, 70, 20)); + label_speed_4->setFont(font12); + label_cap_speed_4 = new QLabel(groupBox_a_4); + label_cap_speed_4->setObjectName(QString::fromUtf8("label_cap_speed_4")); + label_cap_speed_4->setGeometry(QRect(80, 20, 50, 20)); + label_cap_speed_4->setFont(font9); + label_cap_speed_4->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); + label_jd_no_4 = new QLabel(groupBox_a_4); + label_jd_no_4->setObjectName(QString::fromUtf8("label_jd_no_4")); + label_jd_no_4->setGeometry(QRect(220, 20, 50, 20)); + label_jd_no_4->setFont(font9); + label_jd_no_4->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); + label_jdnum_4 = new QLabel(groupBox_a_4); + label_jdnum_4->setObjectName(QString::fromUtf8("label_jdnum_4")); + label_jdnum_4->setGeometry(QRect(150, 20, 70, 20)); + label_jdnum_4->setFont(font12); + label_time_4 = new QLabel(groupBox_a_4); + label_time_4->setObjectName(QString::fromUtf8("label_time_4")); + label_time_4->setGeometry(QRect(290, 20, 70, 20)); + label_time_4->setFont(font12); + label_timecost_4 = new QLabel(groupBox_a_4); + label_timecost_4->setObjectName(QString::fromUtf8("label_timecost_4")); + label_timecost_4->setGeometry(QRect(360, 20, 50, 20)); + label_timecost_4->setFont(font9); + label_timecost_4->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); + label_reslut_4 = new QLabel(groupBox_a_4); + label_reslut_4->setObjectName(QString::fromUtf8("label_reslut_4")); + label_reslut_4->setGeometry(QRect(430, 20, 60, 25)); + label_reslut_4->setFont(font10); + label_reslut_4->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 255, 0);")); + label_reslut_4->setAlignment(Qt::AlignCenter); + image_label_41 = new db_label(centralWidget); + image_label_41->setObjectName(QString::fromUtf8("image_label_41")); + image_label_41->setGeometry(QRect(185, 1725, 320, 110)); + image_label_41->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 0, 0);")); + lcdNumber_kick_4 = new QLCDNumber(centralWidget); + lcdNumber_kick_4->setObjectName(QString::fromUtf8("lcdNumber_kick_4")); + lcdNumber_kick_4->setGeometry(QRect(610, 1815, 90, 20)); + lcdNumber_kick_4->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_kick_4->setDigitCount(10); + label_ng_4 = new db_label(centralWidget); + label_ng_4->setObjectName(QString::fromUtf8("label_ng_4")); + label_ng_4->setGeometry(QRect(515, 1785, 90, 20)); + label_ng_4->setFont(font3); + label_ng_4->setStyleSheet(QString::fromUtf8("color:white")); + label_kick_2 = new QLabel(centralWidget); + label_kick_2->setObjectName(QString::fromUtf8("label_kick_2")); + label_kick_2->setGeometry(QRect(515, 1480, 90, 20)); + label_kick_2->setFont(font3); + label_kick_2->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_kick_2 = new QLCDNumber(centralWidget); + lcdNumber_kick_2->setObjectName(QString::fromUtf8("lcdNumber_kick_2")); + lcdNumber_kick_2->setGeometry(QRect(610, 1480, 90, 20)); + lcdNumber_kick_2->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_kick_2->setDigitCount(10); + label_ok_2 = new QLabel(centralWidget); + label_ok_2->setObjectName(QString::fromUtf8("label_ok_2")); + label_ok_2->setGeometry(QRect(515, 1420, 90, 20)); + label_ok_2->setFont(font3); + label_ok_2->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_ok_2 = new QLCDNumber(centralWidget); + lcdNumber_ok_2->setObjectName(QString::fromUtf8("lcdNumber_ok_2")); + lcdNumber_ok_2->setGeometry(QRect(610, 1420, 90, 20)); + lcdNumber_ok_2->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_ok_2->setDigitCount(10); + lcdNumber_total_2 = new QLCDNumber(centralWidget); + lcdNumber_total_2->setObjectName(QString::fromUtf8("lcdNumber_total_2")); + lcdNumber_total_2->setGeometry(QRect(610, 1390, 90, 20)); + lcdNumber_total_2->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_total_2->setDigitCount(10); + label_check_2 = new QLabel(centralWidget); + label_check_2->setObjectName(QString::fromUtf8("label_check_2")); + label_check_2->setGeometry(QRect(515, 1390, 90, 20)); + label_check_2->setFont(font3); + label_check_2->setStyleSheet(QString::fromUtf8("color:white")); + label_ng_2 = new db_label(centralWidget); + label_ng_2->setObjectName(QString::fromUtf8("label_ng_2")); + label_ng_2->setGeometry(QRect(515, 1450, 90, 20)); + label_ng_2->setFont(font3); + label_ng_2->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_ng_2 = new QLCDNumber(centralWidget); + lcdNumber_ng_2->setObjectName(QString::fromUtf8("lcdNumber_ng_2")); + lcdNumber_ng_2->setGeometry(QRect(610, 1450, 90, 20)); + lcdNumber_ng_2->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_ng_2->setDigitCount(10); + groupBox_a_2 = new QGroupBox(centralWidget); + groupBox_a_2->setObjectName(QString::fromUtf8("groupBox_a_2")); + groupBox_a_2->setGeometry(QRect(185, 1505, 510, 50)); + groupBox_a_2->setFont(font12); + groupBox_a_2->setStyleSheet(QString::fromUtf8("color:white")); + label_speed_2 = new QLabel(groupBox_a_2); + label_speed_2->setObjectName(QString::fromUtf8("label_speed_2")); + label_speed_2->setGeometry(QRect(10, 20, 70, 20)); + label_speed_2->setFont(font12); + label_cap_speed_2 = new QLabel(groupBox_a_2); + label_cap_speed_2->setObjectName(QString::fromUtf8("label_cap_speed_2")); + label_cap_speed_2->setGeometry(QRect(80, 20, 50, 20)); + label_cap_speed_2->setFont(font9); + label_cap_speed_2->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); + label_jd_no_2 = new QLabel(groupBox_a_2); + label_jd_no_2->setObjectName(QString::fromUtf8("label_jd_no_2")); + label_jd_no_2->setGeometry(QRect(220, 20, 50, 20)); + label_jd_no_2->setFont(font9); + label_jd_no_2->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); + label_jdnum_2 = new QLabel(groupBox_a_2); + label_jdnum_2->setObjectName(QString::fromUtf8("label_jdnum_2")); + label_jdnum_2->setGeometry(QRect(150, 20, 70, 20)); + label_jdnum_2->setFont(font12); + label_time_2 = new QLabel(groupBox_a_2); + label_time_2->setObjectName(QString::fromUtf8("label_time_2")); + label_time_2->setGeometry(QRect(290, 20, 70, 20)); + label_time_2->setFont(font12); + label_timecost_2 = new QLabel(groupBox_a_2); + label_timecost_2->setObjectName(QString::fromUtf8("label_timecost_2")); + label_timecost_2->setGeometry(QRect(360, 20, 50, 20)); + label_timecost_2->setFont(font9); + label_timecost_2->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); + label_reslut_2 = new QLabel(groupBox_a_2); + label_reslut_2->setObjectName(QString::fromUtf8("label_reslut_2")); + label_reslut_2->setGeometry(QRect(430, 20, 60, 25)); + label_reslut_2->setFont(font10); + label_reslut_2->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 255, 0);")); + label_reslut_2->setAlignment(Qt::AlignCenter); + lcdNumber_ng_3 = new QLCDNumber(centralWidget); + lcdNumber_ng_3->setObjectName(QString::fromUtf8("lcdNumber_ng_3")); + lcdNumber_ng_3->setGeometry(QRect(610, 1620, 90, 20)); + lcdNumber_ng_3->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_ng_3->setDigitCount(10); + label_kick_3 = new QLabel(centralWidget); + label_kick_3->setObjectName(QString::fromUtf8("label_kick_3")); + label_kick_3->setGeometry(QRect(515, 1650, 90, 20)); + label_kick_3->setFont(font3); + label_kick_3->setStyleSheet(QString::fromUtf8("color:white")); + label_check_3 = new QLabel(centralWidget); + label_check_3->setObjectName(QString::fromUtf8("label_check_3")); + label_check_3->setGeometry(QRect(515, 1560, 90, 20)); + label_check_3->setFont(font3); + label_check_3->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_kick_3 = new QLCDNumber(centralWidget); + lcdNumber_kick_3->setObjectName(QString::fromUtf8("lcdNumber_kick_3")); + lcdNumber_kick_3->setGeometry(QRect(610, 1650, 90, 20)); + lcdNumber_kick_3->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_kick_3->setDigitCount(10); + rotate_3 = new QToolButton(centralWidget); + rotate_3->setObjectName(QString::fromUtf8("rotate_3")); + rotate_3->setGeometry(QRect(484, 400, 0, 0)); + rotate_3->setFocusPolicy(Qt::ClickFocus); + rotate_3->setAutoFillBackground(false); + rotate_3->setIcon(icon); + rotate_3->setIconSize(QSize(40, 40)); + groupBox_a_3 = new QGroupBox(centralWidget); + groupBox_a_3->setObjectName(QString::fromUtf8("groupBox_a_3")); + groupBox_a_3->setGeometry(QRect(185, 1670, 510, 50)); + groupBox_a_3->setFont(font12); + groupBox_a_3->setStyleSheet(QString::fromUtf8("color:white")); + label_speed_3 = new QLabel(groupBox_a_3); + label_speed_3->setObjectName(QString::fromUtf8("label_speed_3")); + label_speed_3->setGeometry(QRect(10, 20, 70, 20)); + label_speed_3->setFont(font12); + label_cap_speed_3 = new QLabel(groupBox_a_3); + label_cap_speed_3->setObjectName(QString::fromUtf8("label_cap_speed_3")); + label_cap_speed_3->setGeometry(QRect(80, 20, 50, 20)); + label_cap_speed_3->setFont(font9); + label_cap_speed_3->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); + label_jd_no_3 = new QLabel(groupBox_a_3); + label_jd_no_3->setObjectName(QString::fromUtf8("label_jd_no_3")); + label_jd_no_3->setGeometry(QRect(220, 20, 50, 20)); + label_jd_no_3->setFont(font9); + label_jd_no_3->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); + label_jdnum_3 = new QLabel(groupBox_a_3); + label_jdnum_3->setObjectName(QString::fromUtf8("label_jdnum_3")); + label_jdnum_3->setGeometry(QRect(150, 20, 70, 20)); + label_jdnum_3->setFont(font12); + label_time_3 = new QLabel(groupBox_a_3); + label_time_3->setObjectName(QString::fromUtf8("label_time_3")); + label_time_3->setGeometry(QRect(290, 20, 70, 20)); + label_time_3->setFont(font12); + label_timecost_3 = new QLabel(groupBox_a_3); + label_timecost_3->setObjectName(QString::fromUtf8("label_timecost_3")); + label_timecost_3->setGeometry(QRect(360, 20, 50, 20)); + label_timecost_3->setFont(font9); + label_timecost_3->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); + label_reslut_3 = new QLabel(groupBox_a_3); + label_reslut_3->setObjectName(QString::fromUtf8("label_reslut_3")); + label_reslut_3->setGeometry(QRect(430, 20, 60, 25)); + label_reslut_3->setFont(font10); + label_reslut_3->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 255, 0);")); + label_reslut_3->setAlignment(Qt::AlignCenter); + label_ng_3 = new db_label(centralWidget); + label_ng_3->setObjectName(QString::fromUtf8("label_ng_3")); + label_ng_3->setGeometry(QRect(515, 1620, 90, 20)); + label_ng_3->setFont(font3); + label_ng_3->setStyleSheet(QString::fromUtf8("color:white")); + image_label_31 = new db_label(centralWidget); + image_label_31->setObjectName(QString::fromUtf8("image_label_31")); + image_label_31->setGeometry(QRect(185, 1560, 320, 110)); + image_label_31->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 0, 0);")); + label_ok_3 = new QLabel(centralWidget); + label_ok_3->setObjectName(QString::fromUtf8("label_ok_3")); + label_ok_3->setGeometry(QRect(515, 1590, 90, 20)); + label_ok_3->setFont(font3); + label_ok_3->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_ok_3 = new QLCDNumber(centralWidget); + lcdNumber_ok_3->setObjectName(QString::fromUtf8("lcdNumber_ok_3")); + lcdNumber_ok_3->setGeometry(QRect(610, 1590, 90, 20)); + lcdNumber_ok_3->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_ok_3->setDigitCount(10); + lcdNumber_total_3 = new QLCDNumber(centralWidget); + lcdNumber_total_3->setObjectName(QString::fromUtf8("lcdNumber_total_3")); + lcdNumber_total_3->setGeometry(QRect(610, 1560, 90, 20)); + lcdNumber_total_3->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_total_3->setDigitCount(10); + image_label_32 = new db_label(centralWidget); + image_label_32->setObjectName(QString::fromUtf8("image_label_32")); + image_label_32->setGeometry(QRect(330, 1890, 160, 110)); + image_label_32->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 0, 0);")); + lcdNumber_total_6 = new QLCDNumber(centralWidget); + lcdNumber_total_6->setObjectName(QString::fromUtf8("lcdNumber_total_6")); + lcdNumber_total_6->setGeometry(QRect(1175, 1380, 90, 20)); + lcdNumber_total_6->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_total_6->setDigitCount(10); + lcdNumber_ng_5 = new QLCDNumber(centralWidget); + lcdNumber_ng_5->setObjectName(QString::fromUtf8("lcdNumber_ng_5")); + lcdNumber_ng_5->setGeometry(QRect(1175, 1275, 90, 20)); + lcdNumber_ng_5->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_ng_5->setDigitCount(10); + image_label_61 = new db_label(centralWidget); + image_label_61->setObjectName(QString::fromUtf8("image_label_61")); + image_label_61->setGeometry(QRect(750, 1380, 320, 110)); + image_label_61->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 0, 0);")); + label_kick_6 = new QLabel(centralWidget); + label_kick_6->setObjectName(QString::fromUtf8("label_kick_6")); + label_kick_6->setGeometry(QRect(1080, 1470, 90, 20)); + label_kick_6->setFont(font3); + label_kick_6->setStyleSheet(QString::fromUtf8("color:white")); + label_check_5 = new QLabel(centralWidget); + label_check_5->setObjectName(QString::fromUtf8("label_check_5")); + label_check_5->setGeometry(QRect(1080, 1215, 90, 20)); + label_check_5->setFont(font3); + label_check_5->setStyleSheet(QString::fromUtf8("color:white")); + label_check_8 = new QLabel(centralWidget); + label_check_8->setObjectName(QString::fromUtf8("label_check_8")); + label_check_8->setGeometry(QRect(1080, 1715, 90, 20)); + label_check_8->setFont(font3); + label_check_8->setStyleSheet(QString::fromUtf8("color:white")); + rotate_5 = new QToolButton(centralWidget); + rotate_5->setObjectName(QString::fromUtf8("rotate_5")); + rotate_5->setGeometry(QRect(1034, 65, 0, 0)); + rotate_5->setFocusPolicy(Qt::ClickFocus); + rotate_5->setAutoFillBackground(false); + rotate_5->setIcon(icon); + rotate_5->setIconSize(QSize(40, 40)); + label_kick_8 = new QLabel(centralWidget); + label_kick_8->setObjectName(QString::fromUtf8("label_kick_8")); + label_kick_8->setGeometry(QRect(1080, 1805, 90, 20)); + label_kick_8->setFont(font3); + label_kick_8->setStyleSheet(QString::fromUtf8("color:white")); + label_check_7 = new QLabel(centralWidget); + label_check_7->setObjectName(QString::fromUtf8("label_check_7")); + label_check_7->setGeometry(QRect(1080, 1550, 90, 20)); + label_check_7->setFont(font3); + label_check_7->setStyleSheet(QString::fromUtf8("color:white")); + label_ng_6 = new db_label(centralWidget); + label_ng_6->setObjectName(QString::fromUtf8("label_ng_6")); + label_ng_6->setGeometry(QRect(1080, 1440, 90, 20)); + label_ng_6->setFont(font3); + label_ng_6->setStyleSheet(QString::fromUtf8("color:white")); + rotate_6 = new QToolButton(centralWidget); + rotate_6->setObjectName(QString::fromUtf8("rotate_6")); + rotate_6->setGeometry(QRect(1034, 230, 0, 0)); + rotate_6->setFocusPolicy(Qt::ClickFocus); + rotate_6->setAutoFillBackground(false); + rotate_6->setIcon(icon); + rotate_6->setIconSize(QSize(40, 40)); + label_ng_5 = new db_label(centralWidget); + label_ng_5->setObjectName(QString::fromUtf8("label_ng_5")); + label_ng_5->setGeometry(QRect(1080, 1275, 90, 20)); + label_ng_5->setFont(font3); + label_ng_5->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_ng_7 = new QLCDNumber(centralWidget); + lcdNumber_ng_7->setObjectName(QString::fromUtf8("lcdNumber_ng_7")); + lcdNumber_ng_7->setGeometry(QRect(1175, 1610, 90, 20)); + lcdNumber_ng_7->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_ng_7->setDigitCount(10); + label_ok_7 = new QLabel(centralWidget); + label_ok_7->setObjectName(QString::fromUtf8("label_ok_7")); + label_ok_7->setGeometry(QRect(1080, 1580, 90, 20)); + label_ok_7->setFont(font3); + label_ok_7->setStyleSheet(QString::fromUtf8("color:white")); + image_label_72 = new db_label(centralWidget); + image_label_72->setObjectName(QString::fromUtf8("image_label_72")); + image_label_72->setGeometry(QRect(970, 1890, 160, 110)); + image_label_72->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 0, 0);")); + groupBox_a_6 = new QGroupBox(centralWidget); + groupBox_a_6->setObjectName(QString::fromUtf8("groupBox_a_6")); + groupBox_a_6->setGeometry(QRect(750, 1495, 510, 50)); + groupBox_a_6->setFont(font12); + groupBox_a_6->setStyleSheet(QString::fromUtf8("color:white")); + label_speed_6 = new QLabel(groupBox_a_6); + label_speed_6->setObjectName(QString::fromUtf8("label_speed_6")); + label_speed_6->setGeometry(QRect(10, 20, 70, 20)); + label_speed_6->setFont(font12); + label_cap_speed_6 = new QLabel(groupBox_a_6); + label_cap_speed_6->setObjectName(QString::fromUtf8("label_cap_speed_6")); + label_cap_speed_6->setGeometry(QRect(80, 20, 50, 20)); + label_cap_speed_6->setFont(font9); + label_cap_speed_6->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); + label_jd_no_6 = new QLabel(groupBox_a_6); + label_jd_no_6->setObjectName(QString::fromUtf8("label_jd_no_6")); + label_jd_no_6->setGeometry(QRect(220, 20, 50, 20)); + label_jd_no_6->setFont(font9); + label_jd_no_6->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); + label_jdnum_6 = new QLabel(groupBox_a_6); + label_jdnum_6->setObjectName(QString::fromUtf8("label_jdnum_6")); + label_jdnum_6->setGeometry(QRect(150, 20, 70, 20)); + label_jdnum_6->setFont(font12); + label_time_6 = new QLabel(groupBox_a_6); + label_time_6->setObjectName(QString::fromUtf8("label_time_6")); + label_time_6->setGeometry(QRect(290, 20, 70, 20)); + label_time_6->setFont(font12); + label_timecost_6 = new QLabel(groupBox_a_6); + label_timecost_6->setObjectName(QString::fromUtf8("label_timecost_6")); + label_timecost_6->setGeometry(QRect(360, 20, 50, 20)); + label_timecost_6->setFont(font9); + label_timecost_6->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); + label_reslut_6 = new QLabel(groupBox_a_6); + label_reslut_6->setObjectName(QString::fromUtf8("label_reslut_6")); + label_reslut_6->setGeometry(QRect(430, 20, 60, 25)); + label_reslut_6->setFont(font10); + label_reslut_6->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 255, 0);")); + label_reslut_6->setAlignment(Qt::AlignCenter); + lcdNumber_ng_6 = new QLCDNumber(centralWidget); + lcdNumber_ng_6->setObjectName(QString::fromUtf8("lcdNumber_ng_6")); + lcdNumber_ng_6->setGeometry(QRect(1175, 1440, 90, 20)); + lcdNumber_ng_6->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_ng_6->setDigitCount(10); + image_label_81 = new db_label(centralWidget); + image_label_81->setObjectName(QString::fromUtf8("image_label_81")); + image_label_81->setGeometry(QRect(750, 1715, 320, 110)); + image_label_81->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 0, 0);")); + lcdNumber_total_8 = new QLCDNumber(centralWidget); + lcdNumber_total_8->setObjectName(QString::fromUtf8("lcdNumber_total_8")); + lcdNumber_total_8->setGeometry(QRect(1175, 1715, 90, 20)); + lcdNumber_total_8->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_total_8->setDigitCount(10); + groupBox_a_8 = new QGroupBox(centralWidget); + groupBox_a_8->setObjectName(QString::fromUtf8("groupBox_a_8")); + groupBox_a_8->setGeometry(QRect(750, 1825, 511, 51)); + groupBox_a_8->setFont(font12); + groupBox_a_8->setStyleSheet(QString::fromUtf8("color:white")); + label_speed_8 = new QLabel(groupBox_a_8); + label_speed_8->setObjectName(QString::fromUtf8("label_speed_8")); + label_speed_8->setGeometry(QRect(10, 20, 70, 20)); + label_speed_8->setFont(font12); + label_cap_speed_8 = new QLabel(groupBox_a_8); + label_cap_speed_8->setObjectName(QString::fromUtf8("label_cap_speed_8")); + label_cap_speed_8->setGeometry(QRect(80, 20, 50, 20)); + label_cap_speed_8->setFont(font9); + label_cap_speed_8->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); + label_jd_no_8 = new QLabel(groupBox_a_8); + label_jd_no_8->setObjectName(QString::fromUtf8("label_jd_no_8")); + label_jd_no_8->setGeometry(QRect(220, 20, 50, 20)); + label_jd_no_8->setFont(font9); + label_jd_no_8->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); + label_jdnum_8 = new QLabel(groupBox_a_8); + label_jdnum_8->setObjectName(QString::fromUtf8("label_jdnum_8")); + label_jdnum_8->setGeometry(QRect(150, 20, 70, 20)); + label_jdnum_8->setFont(font12); + label_time_8 = new QLabel(groupBox_a_8); + label_time_8->setObjectName(QString::fromUtf8("label_time_8")); + label_time_8->setGeometry(QRect(290, 20, 70, 20)); + label_time_8->setFont(font12); + label_timecost_8 = new QLabel(groupBox_a_8); + label_timecost_8->setObjectName(QString::fromUtf8("label_timecost_8")); + label_timecost_8->setGeometry(QRect(360, 20, 50, 20)); + label_timecost_8->setFont(font9); + label_timecost_8->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); + label_reslut_8 = new QLabel(groupBox_a_8); + label_reslut_8->setObjectName(QString::fromUtf8("label_reslut_8")); + label_reslut_8->setGeometry(QRect(430, 20, 60, 25)); + label_reslut_8->setFont(font10); + label_reslut_8->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 255, 0);")); + label_reslut_8->setAlignment(Qt::AlignCenter); + groupBox_a_7 = new QGroupBox(centralWidget); + groupBox_a_7->setObjectName(QString::fromUtf8("groupBox_a_7")); + groupBox_a_7->setGeometry(QRect(750, 1660, 510, 50)); + groupBox_a_7->setFont(font12); + groupBox_a_7->setStyleSheet(QString::fromUtf8("color:white")); + label_speed_7 = new QLabel(groupBox_a_7); + label_speed_7->setObjectName(QString::fromUtf8("label_speed_7")); + label_speed_7->setGeometry(QRect(10, 20, 70, 20)); + label_speed_7->setFont(font12); + label_cap_speed_7 = new QLabel(groupBox_a_7); + label_cap_speed_7->setObjectName(QString::fromUtf8("label_cap_speed_7")); + label_cap_speed_7->setGeometry(QRect(80, 20, 50, 20)); + label_cap_speed_7->setFont(font9); + label_cap_speed_7->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); + label_jd_no_7 = new QLabel(groupBox_a_7); + label_jd_no_7->setObjectName(QString::fromUtf8("label_jd_no_7")); + label_jd_no_7->setGeometry(QRect(220, 20, 50, 20)); + label_jd_no_7->setFont(font9); + label_jd_no_7->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); + label_jdnum_7 = new QLabel(groupBox_a_7); + label_jdnum_7->setObjectName(QString::fromUtf8("label_jdnum_7")); + label_jdnum_7->setGeometry(QRect(150, 20, 70, 20)); + label_jdnum_7->setFont(font12); + label_time_7 = new QLabel(groupBox_a_7); + label_time_7->setObjectName(QString::fromUtf8("label_time_7")); + label_time_7->setGeometry(QRect(290, 20, 70, 20)); + label_time_7->setFont(font12); + label_timecost_7 = new QLabel(groupBox_a_7); + label_timecost_7->setObjectName(QString::fromUtf8("label_timecost_7")); + label_timecost_7->setGeometry(QRect(360, 20, 50, 20)); + label_timecost_7->setFont(font9); + label_timecost_7->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); + label_reslut_7 = new QLabel(groupBox_a_7); + label_reslut_7->setObjectName(QString::fromUtf8("label_reslut_7")); + label_reslut_7->setGeometry(QRect(430, 20, 60, 25)); + label_reslut_7->setFont(font10); + label_reslut_7->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 255, 0);")); + label_reslut_7->setAlignment(Qt::AlignCenter); + label_kick_5 = new QLabel(centralWidget); + label_kick_5->setObjectName(QString::fromUtf8("label_kick_5")); + label_kick_5->setGeometry(QRect(1080, 1305, 90, 20)); + label_kick_5->setFont(font3); + label_kick_5->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_ng_8 = new QLCDNumber(centralWidget); + lcdNumber_ng_8->setObjectName(QString::fromUtf8("lcdNumber_ng_8")); + lcdNumber_ng_8->setGeometry(QRect(1175, 1775, 90, 20)); + lcdNumber_ng_8->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_ng_8->setDigitCount(10); + lcdNumber_kick_5 = new QLCDNumber(centralWidget); + lcdNumber_kick_5->setObjectName(QString::fromUtf8("lcdNumber_kick_5")); + lcdNumber_kick_5->setGeometry(QRect(1175, 1305, 90, 20)); + lcdNumber_kick_5->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_kick_5->setDigitCount(10); + label_kick_7 = new QLabel(centralWidget); + label_kick_7->setObjectName(QString::fromUtf8("label_kick_7")); + label_kick_7->setGeometry(QRect(1080, 1640, 90, 20)); + label_kick_7->setFont(font3); + label_kick_7->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_ok_6 = new QLCDNumber(centralWidget); + lcdNumber_ok_6->setObjectName(QString::fromUtf8("lcdNumber_ok_6")); + lcdNumber_ok_6->setGeometry(QRect(1175, 1410, 90, 20)); + lcdNumber_ok_6->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_ok_6->setDigitCount(10); + groupBox_a_5 = new QGroupBox(centralWidget); + groupBox_a_5->setObjectName(QString::fromUtf8("groupBox_a_5")); + groupBox_a_5->setGeometry(QRect(750, 1325, 510, 50)); + groupBox_a_5->setFont(font12); + groupBox_a_5->setStyleSheet(QString::fromUtf8("color:white")); + label_speed_5 = new QLabel(groupBox_a_5); + label_speed_5->setObjectName(QString::fromUtf8("label_speed_5")); + label_speed_5->setGeometry(QRect(10, 20, 70, 20)); + label_speed_5->setFont(font12); + label_cap_speed_5 = new QLabel(groupBox_a_5); + label_cap_speed_5->setObjectName(QString::fromUtf8("label_cap_speed_5")); + label_cap_speed_5->setGeometry(QRect(80, 20, 50, 20)); + label_cap_speed_5->setFont(font9); + label_cap_speed_5->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); + label_jd_no_5 = new QLabel(groupBox_a_5); + label_jd_no_5->setObjectName(QString::fromUtf8("label_jd_no_5")); + label_jd_no_5->setGeometry(QRect(220, 20, 50, 20)); + label_jd_no_5->setFont(font9); + label_jd_no_5->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); + label_jdnum_5 = new QLabel(groupBox_a_5); + label_jdnum_5->setObjectName(QString::fromUtf8("label_jdnum_5")); + label_jdnum_5->setGeometry(QRect(150, 20, 70, 20)); + label_jdnum_5->setFont(font12); + label_time_5 = new QLabel(groupBox_a_5); + label_time_5->setObjectName(QString::fromUtf8("label_time_5")); + label_time_5->setGeometry(QRect(290, 20, 70, 20)); + label_time_5->setFont(font12); + label_timecost_5 = new QLabel(groupBox_a_5); + label_timecost_5->setObjectName(QString::fromUtf8("label_timecost_5")); + label_timecost_5->setGeometry(QRect(360, 20, 50, 20)); + label_timecost_5->setFont(font9); + label_timecost_5->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); + label_reslut_5 = new QLabel(groupBox_a_5); + label_reslut_5->setObjectName(QString::fromUtf8("label_reslut_5")); + label_reslut_5->setGeometry(QRect(430, 20, 60, 25)); + label_reslut_5->setFont(font10); + label_reslut_5->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 255, 0);")); + label_reslut_5->setAlignment(Qt::AlignCenter); + lcdNumber_kick_7 = new QLCDNumber(centralWidget); + lcdNumber_kick_7->setObjectName(QString::fromUtf8("lcdNumber_kick_7")); + lcdNumber_kick_7->setGeometry(QRect(1175, 1640, 90, 20)); + lcdNumber_kick_7->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_kick_7->setDigitCount(10); + image_label_51 = new db_label(centralWidget); + image_label_51->setObjectName(QString::fromUtf8("image_label_51")); + image_label_51->setGeometry(QRect(750, 1215, 320, 110)); + image_label_51->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 0, 0);")); + label_ok_5 = new QLabel(centralWidget); + label_ok_5->setObjectName(QString::fromUtf8("label_ok_5")); + label_ok_5->setGeometry(QRect(1080, 1245, 90, 20)); + label_ok_5->setFont(font3); + label_ok_5->setStyleSheet(QString::fromUtf8("color:white")); + label_check_6 = new QLabel(centralWidget); + label_check_6->setObjectName(QString::fromUtf8("label_check_6")); + label_check_6->setGeometry(QRect(1080, 1380, 90, 20)); + label_check_6->setFont(font3); + label_check_6->setStyleSheet(QString::fromUtf8("color:white")); + label_ok_8 = new QLabel(centralWidget); + label_ok_8->setObjectName(QString::fromUtf8("label_ok_8")); + label_ok_8->setGeometry(QRect(1080, 1745, 90, 20)); + label_ok_8->setFont(font3); + label_ok_8->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_ok_8 = new QLCDNumber(centralWidget); + lcdNumber_ok_8->setObjectName(QString::fromUtf8("lcdNumber_ok_8")); + lcdNumber_ok_8->setGeometry(QRect(1175, 1745, 90, 20)); + lcdNumber_ok_8->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_ok_8->setDigitCount(10); + lcdNumber_ok_5 = new QLCDNumber(centralWidget); + lcdNumber_ok_5->setObjectName(QString::fromUtf8("lcdNumber_ok_5")); + lcdNumber_ok_5->setGeometry(QRect(1175, 1245, 90, 20)); + lcdNumber_ok_5->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_ok_5->setDigitCount(10); + label_ng_8 = new db_label(centralWidget); + label_ng_8->setObjectName(QString::fromUtf8("label_ng_8")); + label_ng_8->setGeometry(QRect(1080, 1775, 90, 20)); + label_ng_8->setFont(font3); + label_ng_8->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_total_7 = new QLCDNumber(centralWidget); + lcdNumber_total_7->setObjectName(QString::fromUtf8("lcdNumber_total_7")); + lcdNumber_total_7->setGeometry(QRect(1175, 1550, 90, 20)); + lcdNumber_total_7->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_total_7->setDigitCount(10); + lcdNumber_kick_6 = new QLCDNumber(centralWidget); + lcdNumber_kick_6->setObjectName(QString::fromUtf8("lcdNumber_kick_6")); + lcdNumber_kick_6->setGeometry(QRect(1175, 1470, 90, 20)); + lcdNumber_kick_6->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_kick_6->setDigitCount(10); + label_ng_7 = new db_label(centralWidget); + label_ng_7->setObjectName(QString::fromUtf8("label_ng_7")); + label_ng_7->setGeometry(QRect(1080, 1610, 90, 20)); + label_ng_7->setFont(font3); + label_ng_7->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_total_5 = new QLCDNumber(centralWidget); + lcdNumber_total_5->setObjectName(QString::fromUtf8("lcdNumber_total_5")); + lcdNumber_total_5->setGeometry(QRect(1175, 1215, 90, 20)); + lcdNumber_total_5->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_total_5->setDigitCount(10); + image_label_52 = new db_label(centralWidget); + image_label_52->setObjectName(QString::fromUtf8("image_label_52")); + image_label_52->setGeometry(QRect(650, 1890, 160, 110)); + image_label_52->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 0, 0);")); + image_label_82 = new db_label(centralWidget); + image_label_82->setObjectName(QString::fromUtf8("image_label_82")); + image_label_82->setGeometry(QRect(1130, 1890, 160, 110)); + image_label_82->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 0, 0);")); + lcdNumber_ok_7 = new QLCDNumber(centralWidget); + lcdNumber_ok_7->setObjectName(QString::fromUtf8("lcdNumber_ok_7")); + lcdNumber_ok_7->setGeometry(QRect(1175, 1580, 90, 20)); + lcdNumber_ok_7->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_ok_7->setDigitCount(10); + label_ok_6 = new QLabel(centralWidget); + label_ok_6->setObjectName(QString::fromUtf8("label_ok_6")); + label_ok_6->setGeometry(QRect(1080, 1410, 90, 20)); + label_ok_6->setFont(font3); + label_ok_6->setStyleSheet(QString::fromUtf8("color:white")); + image_label_62 = new db_label(centralWidget); + image_label_62->setObjectName(QString::fromUtf8("image_label_62")); + image_label_62->setGeometry(QRect(810, 1890, 160, 110)); + image_label_62->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 0, 0);")); + lcdNumber_kick_8 = new QLCDNumber(centralWidget); + lcdNumber_kick_8->setObjectName(QString::fromUtf8("lcdNumber_kick_8")); + lcdNumber_kick_8->setGeometry(QRect(1175, 1805, 90, 20)); + lcdNumber_kick_8->setStyleSheet(QString::fromUtf8("color:white")); + lcdNumber_kick_8->setDigitCount(10); + rotate_8 = new QToolButton(centralWidget); + rotate_8->setObjectName(QString::fromUtf8("rotate_8")); + rotate_8->setGeometry(QRect(1034, 565, 0, 0)); + rotate_8->setFocusPolicy(Qt::ClickFocus); + rotate_8->setAutoFillBackground(false); + rotate_8->setIcon(icon); + rotate_8->setIconSize(QSize(40, 40)); + rotate_7 = new QToolButton(centralWidget); + rotate_7->setObjectName(QString::fromUtf8("rotate_7")); + rotate_7->setGeometry(QRect(1034, 400, 0, 0)); + rotate_7->setFocusPolicy(Qt::ClickFocus); + rotate_7->setAutoFillBackground(false); + rotate_7->setIcon(icon); + rotate_7->setIconSize(QSize(40, 40)); + image_label_71 = new db_label(centralWidget); + image_label_71->setObjectName(QString::fromUtf8("image_label_71")); + image_label_71->setGeometry(QRect(750, 1550, 320, 110)); + image_label_71->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 0, 0);")); + location = new QLabel(centralWidget); + location->setObjectName(QString::fromUtf8("location")); + location->setGeometry(QRect(1180, 35, 91, 21)); + location->setFont(font7); + location->setStyleSheet(QString::fromUtf8("color:white")); + CigaretteClass->setCentralWidget(centralWidget); + rotate_1->raise(); + groupBox_status->raise(); + label_title->raise(); + groupBox_op->raise(); + groupBox_dev->raise(); + image_label_11->raise(); + groupBox_a_1->raise(); + label_title_7->raise(); + label_title_6->raise(); + toolButton_4->raise(); + label_17->raise(); + label_18->raise(); + label_cur_time->raise(); + rotate_2->raise(); + image_label_21->raise(); + lcdNumber_ok_4->raise(); + lcdNumber_ng_4->raise(); + lcdNumber_total_4->raise(); + rotate_4->raise(); + label_check_4->raise(); + label_ok_4->raise(); + label_kick_4->raise(); + groupBox_a_4->raise(); + image_label_41->raise(); + lcdNumber_kick_4->raise(); + label_ng_4->raise(); + label_kick_2->raise(); + lcdNumber_kick_2->raise(); + label_ok_2->raise(); + lcdNumber_ok_2->raise(); + lcdNumber_total_2->raise(); + label_check_2->raise(); + label_ng_2->raise(); + lcdNumber_ng_2->raise(); + groupBox_a_2->raise(); + lcdNumber_ng_3->raise(); + label_kick_3->raise(); + label_check_3->raise(); + lcdNumber_kick_3->raise(); + groupBox_a_3->raise(); + label_ng_3->raise(); + image_label_31->raise(); + label_ok_3->raise(); + lcdNumber_ok_3->raise(); + lcdNumber_total_3->raise(); + rotate_3->raise(); + lcdNumber_total_6->raise(); + lcdNumber_ng_5->raise(); + image_label_61->raise(); + label_kick_6->raise(); + label_check_5->raise(); + label_check_8->raise(); + rotate_5->raise(); + label_kick_8->raise(); + label_check_7->raise(); + label_ng_6->raise(); + rotate_6->raise(); + label_ng_5->raise(); + lcdNumber_ng_7->raise(); + label_ok_7->raise(); + groupBox_a_6->raise(); + lcdNumber_ng_6->raise(); + image_label_81->raise(); + lcdNumber_total_8->raise(); + groupBox_a_8->raise(); + groupBox_a_7->raise(); + label_kick_5->raise(); + lcdNumber_ng_8->raise(); + lcdNumber_kick_5->raise(); + label_kick_7->raise(); + lcdNumber_ok_6->raise(); + groupBox_a_5->raise(); + lcdNumber_kick_7->raise(); + image_label_51->raise(); + label_ok_5->raise(); + label_check_6->raise(); + label_ok_8->raise(); + lcdNumber_ok_8->raise(); + lcdNumber_ok_5->raise(); + label_ng_8->raise(); + lcdNumber_total_7->raise(); + lcdNumber_kick_6->raise(); + label_ng_7->raise(); + lcdNumber_total_5->raise(); + lcdNumber_ok_7->raise(); + label_ok_6->raise(); + lcdNumber_kick_8->raise(); + rotate_8->raise(); + rotate_7->raise(); + image_label_71->raise(); + image_label_22->raise(); + image_label_32->raise(); + image_label_42->raise(); + image_label_52->raise(); + image_label_62->raise(); + image_label_72->raise(); + image_label_82->raise(); + image_label_12->raise(); + location->raise(); + + retranslateUi(CigaretteClass); + + QMetaObject::connectSlotsByName(CigaretteClass); + } // setupUi + + void retranslateUi(QMainWindow *CigaretteClass) + { + CigaretteClass->setWindowTitle(QCoreApplication::translate("CigaretteClass", "Cigarette", nullptr)); + label_title->setText(QCoreApplication::translate("CigaretteClass", "\345\225\206\346\240\207\347\272\270\350\203\266\347\202\271\346\243\200\346\265\213\347\263\273\347\273\237", nullptr)); + groupBox_op->setTitle(QCoreApplication::translate("CigaretteClass", "\346\223\215\344\275\234\345\214\272", nullptr)); + btn_start->setText(QString()); + btn_pause->setText(QString()); + btn_lock->setText(QString()); + btn_setup->setText(QString()); + groupBox_dev->setTitle(QCoreApplication::translate("CigaretteClass", "\350\256\276\345\244\207\345\214\272", nullptr)); + toolButton_cam_1->setText(QString()); + toolButton_cam_2->setText(QString()); + cam_status_2->setText(QCoreApplication::translate("CigaretteClass", "\350\201\224\346\234\272", nullptr)); + cam_work_2->setText(QCoreApplication::translate("CigaretteClass", "\345\267\245\344\275\234", nullptr)); + cam_work_1->setText(QCoreApplication::translate("CigaretteClass", "\345\267\245\344\275\234", nullptr)); + checkBox_debug->setText(QCoreApplication::translate("CigaretteClass", "\350\260\203\350\257\225\346\250\241\345\274\217", nullptr)); + checkBox_unkick->setText(QCoreApplication::translate("CigaretteClass", "\344\270\215\345\211\224\351\231\244", nullptr)); + cam_work_4->setText(QCoreApplication::translate("CigaretteClass", "\345\267\245\344\275\234", nullptr)); + toolButton_cam_4->setText(QString()); + toolButton_cam_6->setText(QString()); + toolButton_cam_8->setText(QString()); + cam_status_8->setText(QCoreApplication::translate("CigaretteClass", "\350\201\224\346\234\272", nullptr)); + cam_work_8->setText(QCoreApplication::translate("CigaretteClass", "\345\267\245\344\275\234", nullptr)); + toolButton_cam_3->setText(QString()); + toolButton_cam_5->setText(QString()); + toolButton_cam_7->setText(QString()); + cam_status_5->setText(QCoreApplication::translate("CigaretteClass", "\350\201\224\346\234\272", nullptr)); + cam_status_3->setText(QCoreApplication::translate("CigaretteClass", "\350\201\224\346\234\272", nullptr)); + cam_status_7->setText(QCoreApplication::translate("CigaretteClass", "\350\201\224\346\234\272", nullptr)); + cam_status_6->setText(QCoreApplication::translate("CigaretteClass", "\350\201\224\346\234\272", nullptr)); + cam_status_4->setText(QCoreApplication::translate("CigaretteClass", "\350\201\224\346\234\272", nullptr)); + cam_work_3->setText(QCoreApplication::translate("CigaretteClass", "\345\267\245\344\275\234", nullptr)); + cam_work_5->setText(QCoreApplication::translate("CigaretteClass", "\345\267\245\344\275\234", nullptr)); + cam_work_6->setText(QCoreApplication::translate("CigaretteClass", "\345\267\245\344\275\234", nullptr)); + cam_work_7->setText(QCoreApplication::translate("CigaretteClass", "\345\267\245\344\275\234", nullptr)); + cam_status_1->setText(QCoreApplication::translate("CigaretteClass", "\350\201\224\346\234\272", nullptr)); + groupBox_status->setTitle(QString()); + label_alarm->setText(QCoreApplication::translate("CigaretteClass", "\346\227\240\346\212\245\350\255\246", nullptr)); + label_5->setText(QCoreApplication::translate("CigaretteClass", "\345\275\223\347\217\255", nullptr)); + label_plc->setText(QCoreApplication::translate("CigaretteClass", "PLC\346\255\243\345\270\270", nullptr)); + toolButton_alarm->setText(QString()); + toolButton_plc->setText(QString()); + pushButton_clear->setText(QCoreApplication::translate("CigaretteClass", "\346\215\242\347\217\255", nullptr)); + label_run_stat->setText(QCoreApplication::translate("CigaretteClass", "\350\277\220\350\241\2141\345\271\26410\346\234\21025\345\244\2519\346\227\26615\345\210\206", nullptr)); + label_12->setText(QCoreApplication::translate("CigaretteClass", "\347\231\273\351\231\206\347\224\250\346\210\267\357\274\232", nullptr)); + label_role->setText(QCoreApplication::translate("CigaretteClass", "\346\223\215\344\275\234\345\221\230", nullptr)); + label_8->setText(QCoreApplication::translate("CigaretteClass", "\344\270\212\347\217\255", nullptr)); + pushButton_reset->setText(QCoreApplication::translate("CigaretteClass", "\345\244\215\344\275\215", nullptr)); + image_label_11->setText(QString()); + groupBox_a_1->setTitle(QCoreApplication::translate("CigaretteClass", "\347\233\270\346\234\272\345\210\206\346\236\220\347\273\223\346\236\234", nullptr)); + label_speed_1->setText(QCoreApplication::translate("CigaretteClass", "\351\207\207\351\233\206\351\200\237\345\272\246\357\274\232", nullptr)); + label_cap_speed_1->setText(QString()); + label_jd_no_1->setText(QString()); + label_jdnum_1->setText(QCoreApplication::translate("CigaretteClass", "\350\203\266\347\202\271\344\270\252\346\225\260\357\274\232", nullptr)); + label_time_1->setText(QCoreApplication::translate("CigaretteClass", "\350\257\206\345\210\253\346\227\266\351\227\264\357\274\232", nullptr)); + label_timecost_1->setText(QString()); + label_reslut_1->setText(QCoreApplication::translate("CigaretteClass", "OK", nullptr)); + label_check_1->setText(QCoreApplication::translate("CigaretteClass", "\346\243\200\346\265\213\344\270\252\346\225\260", nullptr)); + label_ok_1->setText(QCoreApplication::translate("CigaretteClass", "OK\346\254\241\346\225\260", nullptr)); + label_kick_1->setText(QCoreApplication::translate("CigaretteClass", "\345\211\224\351\231\244\346\254\241\346\225\260", nullptr)); + label_ng_1->setText(QCoreApplication::translate("CigaretteClass", "NG\346\254\241\346\225\260", nullptr)); + rotate_1->setText(QCoreApplication::translate("CigaretteClass", "...", nullptr)); + label_title_7->setText(QCoreApplication::translate("CigaretteClass", "SHANGHAI TOBACCO MACHINERY CO.,LTD", nullptr)); + label_title_6->setText(QCoreApplication::translate("CigaretteClass", "\344\270\212\346\265\267\347\203\237\350\215\211\346\234\272\346\242\260\346\234\211\351\231\220\350\264\243\344\273\273\345\205\254\345\217\270", nullptr)); + toolButton_4->setText(QString()); + label_17->setText(QCoreApplication::translate("CigaretteClass", "Tel:87907256(0532)", nullptr)); + label_18->setText(QCoreApplication::translate("CigaretteClass", "\351\235\222\345\262\233\347\273\264\345\205\213", nullptr)); + label_cur_time->setText(QCoreApplication::translate("CigaretteClass", "2020-10-10 13:15:39", nullptr)); + image_label_12->setText(QString()); + image_label_22->setText(QString()); + rotate_2->setText(QCoreApplication::translate("CigaretteClass", "...", nullptr)); + image_label_21->setText(QString()); + image_label_42->setText(QString()); + rotate_4->setText(QCoreApplication::translate("CigaretteClass", "...", nullptr)); + label_check_4->setText(QCoreApplication::translate("CigaretteClass", "4#\346\243\200\346\265\213\344\270\252\346\225\260", nullptr)); + label_ok_4->setText(QCoreApplication::translate("CigaretteClass", "4#OK\346\254\241\346\225\260", nullptr)); + label_kick_4->setText(QCoreApplication::translate("CigaretteClass", "4#\345\211\224\351\231\244\346\254\241\346\225\260", nullptr)); + groupBox_a_4->setTitle(QCoreApplication::translate("CigaretteClass", "4#\347\233\270\346\234\272\345\210\206\346\236\220\347\273\223\346\236\234", nullptr)); + label_speed_4->setText(QCoreApplication::translate("CigaretteClass", "\351\207\207\351\233\206\351\200\237\345\272\246\357\274\232", nullptr)); + label_cap_speed_4->setText(QString()); + label_jd_no_4->setText(QString()); + label_jdnum_4->setText(QCoreApplication::translate("CigaretteClass", "\350\203\266\347\202\271\344\270\252\346\225\260\357\274\232", nullptr)); + label_time_4->setText(QCoreApplication::translate("CigaretteClass", "\350\257\206\345\210\253\346\227\266\351\227\264\357\274\232", nullptr)); + label_timecost_4->setText(QString()); + label_reslut_4->setText(QCoreApplication::translate("CigaretteClass", "OK", nullptr)); + image_label_41->setText(QString()); + label_ng_4->setText(QCoreApplication::translate("CigaretteClass", "4#NG\346\254\241\346\225\260", nullptr)); + label_kick_2->setText(QCoreApplication::translate("CigaretteClass", "2#\345\211\224\351\231\244\346\254\241\346\225\260", nullptr)); + label_ok_2->setText(QCoreApplication::translate("CigaretteClass", "2#OK\346\254\241\346\225\260", nullptr)); + label_check_2->setText(QCoreApplication::translate("CigaretteClass", "2#\346\243\200\346\265\213\344\270\252\346\225\260", nullptr)); + label_ng_2->setText(QCoreApplication::translate("CigaretteClass", "2#NG\346\254\241\346\225\260", nullptr)); + groupBox_a_2->setTitle(QCoreApplication::translate("CigaretteClass", "2#\347\233\270\346\234\272\345\210\206\346\236\220\347\273\223\346\236\234", nullptr)); + label_speed_2->setText(QCoreApplication::translate("CigaretteClass", "\351\207\207\351\233\206\351\200\237\345\272\246\357\274\232", nullptr)); + label_cap_speed_2->setText(QString()); + label_jd_no_2->setText(QString()); + label_jdnum_2->setText(QCoreApplication::translate("CigaretteClass", "\350\203\266\347\202\271\344\270\252\346\225\260\357\274\232", nullptr)); + label_time_2->setText(QCoreApplication::translate("CigaretteClass", "\350\257\206\345\210\253\346\227\266\351\227\264\357\274\232", nullptr)); + label_timecost_2->setText(QString()); + label_reslut_2->setText(QCoreApplication::translate("CigaretteClass", "OK", nullptr)); + label_kick_3->setText(QCoreApplication::translate("CigaretteClass", "3#\345\211\224\351\231\244\346\254\241\346\225\260", nullptr)); + label_check_3->setText(QCoreApplication::translate("CigaretteClass", "3#\346\243\200\346\265\213\344\270\252\346\225\260", nullptr)); + rotate_3->setText(QCoreApplication::translate("CigaretteClass", "...", nullptr)); + groupBox_a_3->setTitle(QCoreApplication::translate("CigaretteClass", "3#\347\233\270\346\234\272\345\210\206\346\236\220\347\273\223\346\236\234", nullptr)); + label_speed_3->setText(QCoreApplication::translate("CigaretteClass", "\351\207\207\351\233\206\351\200\237\345\272\246\357\274\232", nullptr)); + label_cap_speed_3->setText(QString()); + label_jd_no_3->setText(QString()); + label_jdnum_3->setText(QCoreApplication::translate("CigaretteClass", "\350\203\266\347\202\271\344\270\252\346\225\260\357\274\232", nullptr)); + label_time_3->setText(QCoreApplication::translate("CigaretteClass", "\350\257\206\345\210\253\346\227\266\351\227\264\357\274\232", nullptr)); + label_timecost_3->setText(QString()); + label_reslut_3->setText(QCoreApplication::translate("CigaretteClass", "OK", nullptr)); + label_ng_3->setText(QCoreApplication::translate("CigaretteClass", "3#NG\346\254\241\346\225\260", nullptr)); + image_label_31->setText(QString()); + label_ok_3->setText(QCoreApplication::translate("CigaretteClass", "3#OK\346\254\241\346\225\260", nullptr)); + image_label_32->setText(QString()); + image_label_61->setText(QString()); + label_kick_6->setText(QCoreApplication::translate("CigaretteClass", "6#\345\211\224\351\231\244\346\254\241\346\225\260", nullptr)); + label_check_5->setText(QCoreApplication::translate("CigaretteClass", "5#\346\243\200\346\265\213\344\270\252\346\225\260", nullptr)); + label_check_8->setText(QCoreApplication::translate("CigaretteClass", "8#\346\243\200\346\265\213\344\270\252\346\225\260", nullptr)); + rotate_5->setText(QCoreApplication::translate("CigaretteClass", "...", nullptr)); + label_kick_8->setText(QCoreApplication::translate("CigaretteClass", "8#\345\211\224\351\231\244\346\254\241\346\225\260", nullptr)); + label_check_7->setText(QCoreApplication::translate("CigaretteClass", "7#\346\243\200\346\265\213\344\270\252\346\225\260", nullptr)); + label_ng_6->setText(QCoreApplication::translate("CigaretteClass", "6#NG\346\254\241\346\225\260", nullptr)); + rotate_6->setText(QCoreApplication::translate("CigaretteClass", "...", nullptr)); + label_ng_5->setText(QCoreApplication::translate("CigaretteClass", "5#NG\346\254\241\346\225\260", nullptr)); + label_ok_7->setText(QCoreApplication::translate("CigaretteClass", "7#OK\346\254\241\346\225\260", nullptr)); + image_label_72->setText(QString()); + groupBox_a_6->setTitle(QCoreApplication::translate("CigaretteClass", "6#\347\233\270\346\234\272\345\210\206\346\236\220\347\273\223\346\236\234", nullptr)); + label_speed_6->setText(QCoreApplication::translate("CigaretteClass", "\351\207\207\351\233\206\351\200\237\345\272\246\357\274\232", nullptr)); + label_cap_speed_6->setText(QString()); + label_jd_no_6->setText(QString()); + label_jdnum_6->setText(QCoreApplication::translate("CigaretteClass", "\350\203\266\347\202\271\344\270\252\346\225\260\357\274\232", nullptr)); + label_time_6->setText(QCoreApplication::translate("CigaretteClass", "\350\257\206\345\210\253\346\227\266\351\227\264\357\274\232", nullptr)); + label_timecost_6->setText(QString()); + label_reslut_6->setText(QCoreApplication::translate("CigaretteClass", "OK", nullptr)); + image_label_81->setText(QString()); + groupBox_a_8->setTitle(QCoreApplication::translate("CigaretteClass", "8#\347\233\270\346\234\272\345\210\206\346\236\220\347\273\223\346\236\234", nullptr)); + label_speed_8->setText(QCoreApplication::translate("CigaretteClass", "\351\207\207\351\233\206\351\200\237\345\272\246\357\274\232", nullptr)); + label_cap_speed_8->setText(QString()); + label_jd_no_8->setText(QString()); + label_jdnum_8->setText(QCoreApplication::translate("CigaretteClass", "\350\203\266\347\202\271\344\270\252\346\225\260\357\274\232", nullptr)); + label_time_8->setText(QCoreApplication::translate("CigaretteClass", "\350\257\206\345\210\253\346\227\266\351\227\264\357\274\232", nullptr)); + label_timecost_8->setText(QString()); + label_reslut_8->setText(QCoreApplication::translate("CigaretteClass", "OK", nullptr)); + groupBox_a_7->setTitle(QCoreApplication::translate("CigaretteClass", "7#\347\233\270\346\234\272\345\210\206\346\236\220\347\273\223\346\236\234", nullptr)); + label_speed_7->setText(QCoreApplication::translate("CigaretteClass", "\351\207\207\351\233\206\351\200\237\345\272\246\357\274\232", nullptr)); + label_cap_speed_7->setText(QString()); + label_jd_no_7->setText(QString()); + label_jdnum_7->setText(QCoreApplication::translate("CigaretteClass", "\350\203\266\347\202\271\344\270\252\346\225\260\357\274\232", nullptr)); + label_time_7->setText(QCoreApplication::translate("CigaretteClass", "\350\257\206\345\210\253\346\227\266\351\227\264\357\274\232", nullptr)); + label_timecost_7->setText(QString()); + label_reslut_7->setText(QCoreApplication::translate("CigaretteClass", "OK", nullptr)); + label_kick_5->setText(QCoreApplication::translate("CigaretteClass", "5#\345\211\224\351\231\244\346\254\241\346\225\260", nullptr)); + label_kick_7->setText(QCoreApplication::translate("CigaretteClass", "7#\345\211\224\351\231\244\346\254\241\346\225\260", nullptr)); + groupBox_a_5->setTitle(QCoreApplication::translate("CigaretteClass", "5#\347\233\270\346\234\272\345\210\206\346\236\220\347\273\223\346\236\234", nullptr)); + label_speed_5->setText(QCoreApplication::translate("CigaretteClass", "\351\207\207\351\233\206\351\200\237\345\272\246\357\274\232", nullptr)); + label_cap_speed_5->setText(QString()); + label_jd_no_5->setText(QString()); + label_jdnum_5->setText(QCoreApplication::translate("CigaretteClass", "\350\203\266\347\202\271\344\270\252\346\225\260\357\274\232", nullptr)); + label_time_5->setText(QCoreApplication::translate("CigaretteClass", "\350\257\206\345\210\253\346\227\266\351\227\264\357\274\232", nullptr)); + label_timecost_5->setText(QString()); + label_reslut_5->setText(QCoreApplication::translate("CigaretteClass", "OK", nullptr)); + image_label_51->setText(QString()); + label_ok_5->setText(QCoreApplication::translate("CigaretteClass", "5#OK\346\254\241\346\225\260", nullptr)); + label_check_6->setText(QCoreApplication::translate("CigaretteClass", "6#\346\243\200\346\265\213\344\270\252\346\225\260", nullptr)); + label_ok_8->setText(QCoreApplication::translate("CigaretteClass", "8#OK\346\254\241\346\225\260", nullptr)); + label_ng_8->setText(QCoreApplication::translate("CigaretteClass", "8#NG\346\254\241\346\225\260", nullptr)); + label_ng_7->setText(QCoreApplication::translate("CigaretteClass", "7#NG\346\254\241\346\225\260", nullptr)); + image_label_52->setText(QString()); + image_label_82->setText(QString()); + label_ok_6->setText(QCoreApplication::translate("CigaretteClass", "6#OK\346\254\241\346\225\260", nullptr)); + image_label_62->setText(QString()); + rotate_8->setText(QCoreApplication::translate("CigaretteClass", "...", nullptr)); + rotate_7->setText(QCoreApplication::translate("CigaretteClass", "...", nullptr)); + image_label_71->setText(QString()); + location->setText(QCoreApplication::translate("CigaretteClass", "CDTH", nullptr)); + } // retranslateUi + +}; + +namespace Ui { + class CigaretteClass: public Ui_CigaretteClass {}; +} // namespace Ui + +QT_END_NAMESPACE + +#endif // UI_CIGARETTE_H diff --git a/Cigarette/GeneratedFiles/ui_dialogin.h b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/ui_dialogin.h similarity index 99% rename from Cigarette/GeneratedFiles/ui_dialogin.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/ui_dialogin.h index 25109c11..caf57019 100644 --- a/Cigarette/GeneratedFiles/ui_dialogin.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/ui_dialogin.h @@ -1,7 +1,7 @@ /******************************************************************************** ** Form generated from reading UI file 'dialogin.ui' ** -** Created by: Qt User Interface Compiler version 5.15.2 +** Created by: Qt User Interface Compiler version 5.14.2 ** ** WARNING! All changes made in this file will be lost when recompiling UI file! ********************************************************************************/ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/ui_dialogsetup.h b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/ui_dialogsetup.h new file mode 100644 index 00000000..4ee82c9a --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/ui_dialogsetup.h @@ -0,0 +1,710 @@ +/******************************************************************************** +** Form generated from reading UI file 'dialogsetup.ui' +** +** Created by: Qt User Interface Compiler version 5.14.2 +** +** WARNING! All changes made in this file will be lost when recompiling UI file! +********************************************************************************/ + +#ifndef UI_DIALOGSETUP_H +#define UI_DIALOGSETUP_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class Ui_DialogSetup +{ +public: + QScrollArea *scrollArea; + QWidget *scrollAreaWidgetContents; + QGroupBox *groupBox_startSets; + QCheckBox *checkBox_auto_open; + QCheckBox *checkBox_auto_work; + QGroupBox *groupBox_adminUpdate; + QPushButton *pushButton_pswd; + QLabel *label_newPwd; + QLineEdit *lineEdit_confirm; + QLineEdit *lineEdit_new; + QLabel *label_confirm; + QLineEdit *lineEdit_old; + QLabel *label_oldPwd; + QGroupBox *groupBox_camerasParams; + QLabel *label_11; + QLineEdit *lineEdit_expo_1; + QLineEdit *lineEdit_expo_2; + QLabel *label_21; + QLineEdit *lineEdit_gain_2; + QLabel *label_12; + QLabel *label_22; + QLineEdit *lineEdit_gain_1; + QLineEdit *lineEdit_expo_3; + QLabel *label_41; + QLineEdit *lineEdit_expo_4; + QLabel *label_31; + QLineEdit *lineEdit_gain_4; + QLabel *label_32; + QLabel *label_42; + QLineEdit *lineEdit_gain_3; + QPushButton *pushButton_expo; + QLabel *label_51; + QLabel *label_61; + QLabel *label_71; + QLineEdit *lineEdit_expo_5; + QLineEdit *lineEdit_expo_6; + QLineEdit *lineEdit_expo_7; + QLabel *label_52; + QLabel *label_62; + QLabel *label_72; + QLineEdit *lineEdit_gain_5; + QLineEdit *lineEdit_gain_6; + QLineEdit *lineEdit_gain_7; + QLabel *label_81; + QLineEdit *lineEdit_expo_8; + QLabel *label_82; + QLineEdit *lineEdit_gain_8; + QGroupBox *groupBox_filterSet; + QLabel *label_1; + QLineEdit *lineEdit_filter_1; + QLineEdit *lineEdit_filter_2; + QLabel *label_2; + QLineEdit *lineEdit_filter_4; + QLabel *label_3; + QLineEdit *lineEdit_filter_3; + QLabel *label_4; + QPushButton *pushButton_filter; + QLabel *label_5; + QLabel *label_6; + QLabel *label_7; + QLabel *label_8; + QLineEdit *lineEdit_filter_5; + QLineEdit *lineEdit_filter_7; + QLineEdit *lineEdit_filter_6; + QLineEdit *lineEdit_filter_8; + QGroupBox *groupBox_saveSets; + QRadioButton *radioButton_none; + QRadioButton *radioButton_ng; + QRadioButton *radioButton_all; + QPushButton *pushButton_image; + QPushButton *pushButton_save; + QPushButton *pushButton_exit; + QGroupBox *groupBox_userUpdate; + QLabel *label_admin_newPwd; + QLineEdit *lineEdit_confirm_op; + QLineEdit *lineEdit_new_op; + QLabel *label_admin_confirm; + QLineEdit *lineEdit_old_op; + QLabel *label_admin_oldPwd; + QPushButton *pushButton_pswd_op; + QPushButton *pushButton_close; + QPushButton *pushButton_desktop; + QToolButton *toolButton_keyboard; + QLabel *label; + QPushButton *pushButton_config; + QPushButton *pushButton_change; + QPushButton *pushButton_statistic; + QToolButton *toolButton_choose_model_path; + QLabel *label_model_path; + QComboBox *comboBox_model_path; + QLabel *label_path_jpg; + QComboBox *comboBox_2; + QToolButton *toolButton_choose_path_jpg; + QPushButton *pushButton_clear_pic; + QPushButton *pushButton_testimg; + QPushButton *pushButton_testimgs; + QLabel *label_conf_path; + QComboBox *comboBox_config_path; + QToolButton *toolButton_choose_config_path; + QLabel *label_save_pics_path; + QComboBox *comboBox_save_pics_path; + QToolButton *toolButton_choose_save_pics_path; + + void setupUi(QDialog *DialogSetup) + { + if (DialogSetup->objectName().isEmpty()) + DialogSetup->setObjectName(QString::fromUtf8("DialogSetup")); + DialogSetup->resize(661, 716); + QFont font; + font.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); + font.setPointSize(14); + font.setBold(true); + font.setWeight(75); + DialogSetup->setFont(font); + DialogSetup->setStyleSheet(QString::fromUtf8("background-color: rgb(240, 240, 240);")); + scrollArea = new QScrollArea(DialogSetup); + scrollArea->setObjectName(QString::fromUtf8("scrollArea")); + scrollArea->setGeometry(QRect(0, 0, 731, 1091)); + QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); + sizePolicy.setHorizontalStretch(0); + sizePolicy.setVerticalStretch(0); + sizePolicy.setHeightForWidth(scrollArea->sizePolicy().hasHeightForWidth()); + scrollArea->setSizePolicy(sizePolicy); + scrollArea->setMinimumSize(QSize(0, 0)); + scrollArea->setWidgetResizable(true); + scrollAreaWidgetContents = new QWidget(); + scrollAreaWidgetContents->setObjectName(QString::fromUtf8("scrollAreaWidgetContents")); + scrollAreaWidgetContents->setGeometry(QRect(0, 0, 729, 1089)); + QSizePolicy sizePolicy1(QSizePolicy::Expanding, QSizePolicy::Expanding); + sizePolicy1.setHorizontalStretch(0); + sizePolicy1.setVerticalStretch(0); + sizePolicy1.setHeightForWidth(scrollAreaWidgetContents->sizePolicy().hasHeightForWidth()); + scrollAreaWidgetContents->setSizePolicy(sizePolicy1); + scrollAreaWidgetContents->setMinimumSize(QSize(670, 900)); + groupBox_startSets = new QGroupBox(scrollAreaWidgetContents); + groupBox_startSets->setObjectName(QString::fromUtf8("groupBox_startSets")); + groupBox_startSets->setGeometry(QRect(10, 60, 641, 61)); + QFont font1; + font1.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); + font1.setPointSize(12); + font1.setBold(true); + font1.setWeight(75); + groupBox_startSets->setFont(font1); + checkBox_auto_open = new QCheckBox(groupBox_startSets); + checkBox_auto_open->setObjectName(QString::fromUtf8("checkBox_auto_open")); + checkBox_auto_open->setGeometry(QRect(30, 30, 220, 22)); + checkBox_auto_open->setFont(font1); + checkBox_auto_work = new QCheckBox(groupBox_startSets); + checkBox_auto_work->setObjectName(QString::fromUtf8("checkBox_auto_work")); + checkBox_auto_work->setGeometry(QRect(380, 30, 261, 21)); + checkBox_auto_work->setFont(font1); + groupBox_adminUpdate = new QGroupBox(scrollAreaWidgetContents); + groupBox_adminUpdate->setObjectName(QString::fromUtf8("groupBox_adminUpdate")); + groupBox_adminUpdate->setGeometry(QRect(10, 410, 641, 81)); + groupBox_adminUpdate->setFont(font1); + pushButton_pswd = new QPushButton(groupBox_adminUpdate); + pushButton_pswd->setObjectName(QString::fromUtf8("pushButton_pswd")); + pushButton_pswd->setGeometry(QRect(540, 20, 91, 51)); + pushButton_pswd->setFont(font1); + label_newPwd = new QLabel(groupBox_adminUpdate); + label_newPwd->setObjectName(QString::fromUtf8("label_newPwd")); + label_newPwd->setGeometry(QRect(190, 30, 61, 31)); + label_newPwd->setFont(font1); + lineEdit_confirm = new QLineEdit(groupBox_adminUpdate); + lineEdit_confirm->setObjectName(QString::fromUtf8("lineEdit_confirm")); + lineEdit_confirm->setGeometry(QRect(440, 32, 91, 31)); + lineEdit_confirm->setFont(font1); + lineEdit_confirm->setEchoMode(QLineEdit::Password); + lineEdit_new = new QLineEdit(groupBox_adminUpdate); + lineEdit_new->setObjectName(QString::fromUtf8("lineEdit_new")); + lineEdit_new->setGeometry(QRect(250, 30, 101, 31)); + lineEdit_new->setFont(font1); + lineEdit_new->setEchoMode(QLineEdit::Password); + label_confirm = new QLabel(groupBox_adminUpdate); + label_confirm->setObjectName(QString::fromUtf8("label_confirm")); + label_confirm->setGeometry(QRect(360, 30, 81, 31)); + label_confirm->setFont(font1); + lineEdit_old = new QLineEdit(groupBox_adminUpdate); + lineEdit_old->setObjectName(QString::fromUtf8("lineEdit_old")); + lineEdit_old->setGeometry(QRect(90, 30, 91, 31)); + lineEdit_old->setFont(font1); + lineEdit_old->setEchoMode(QLineEdit::Password); + label_oldPwd = new QLabel(groupBox_adminUpdate); + label_oldPwd->setObjectName(QString::fromUtf8("label_oldPwd")); + label_oldPwd->setGeometry(QRect(20, 30, 61, 31)); + label_oldPwd->setFont(font1); + groupBox_camerasParams = new QGroupBox(scrollAreaWidgetContents); + groupBox_camerasParams->setObjectName(QString::fromUtf8("groupBox_camerasParams")); + groupBox_camerasParams->setGeometry(QRect(10, 180, 640, 71)); + groupBox_camerasParams->setFont(font1); + label_11 = new QLabel(groupBox_camerasParams); + label_11->setObjectName(QString::fromUtf8("label_11")); + label_11->setGeometry(QRect(20, 40, 180, 20)); + QFont font2; + font2.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); + font2.setPointSize(10); + font2.setBold(true); + font2.setWeight(75); + label_11->setFont(font2); + lineEdit_expo_1 = new QLineEdit(groupBox_camerasParams); + lineEdit_expo_1->setObjectName(QString::fromUtf8("lineEdit_expo_1")); + lineEdit_expo_1->setGeometry(QRect(210, 40, 90, 20)); + lineEdit_expo_1->setFont(font2); + lineEdit_expo_2 = new QLineEdit(groupBox_camerasParams); + lineEdit_expo_2->setObjectName(QString::fromUtf8("lineEdit_expo_2")); + lineEdit_expo_2->setGeometry(QRect(210, 2170, 90, 20)); + lineEdit_expo_2->setFont(font2); + label_21 = new QLabel(groupBox_camerasParams); + label_21->setObjectName(QString::fromUtf8("label_21")); + label_21->setGeometry(QRect(20, 2170, 180, 20)); + label_21->setFont(font2); + lineEdit_gain_2 = new QLineEdit(groupBox_camerasParams); + lineEdit_gain_2->setObjectName(QString::fromUtf8("lineEdit_gain_2")); + lineEdit_gain_2->setGeometry(QRect(510, 2170, 90, 20)); + lineEdit_gain_2->setFont(font2); + label_12 = new QLabel(groupBox_camerasParams); + label_12->setObjectName(QString::fromUtf8("label_12")); + label_12->setGeometry(QRect(320, 40, 180, 20)); + label_12->setFont(font2); + label_22 = new QLabel(groupBox_camerasParams); + label_22->setObjectName(QString::fromUtf8("label_22")); + label_22->setGeometry(QRect(320, 2170, 180, 20)); + label_22->setFont(font2); + lineEdit_gain_1 = new QLineEdit(groupBox_camerasParams); + lineEdit_gain_1->setObjectName(QString::fromUtf8("lineEdit_gain_1")); + lineEdit_gain_1->setGeometry(QRect(510, 40, 90, 20)); + lineEdit_gain_1->setFont(font2); + lineEdit_expo_3 = new QLineEdit(groupBox_camerasParams); + lineEdit_expo_3->setObjectName(QString::fromUtf8("lineEdit_expo_3")); + lineEdit_expo_3->setGeometry(QRect(210, 2200, 90, 20)); + lineEdit_expo_3->setFont(font2); + label_41 = new QLabel(groupBox_camerasParams); + label_41->setObjectName(QString::fromUtf8("label_41")); + label_41->setGeometry(QRect(20, 1680, 180, 20)); + label_41->setFont(font2); + lineEdit_expo_4 = new QLineEdit(groupBox_camerasParams); + lineEdit_expo_4->setObjectName(QString::fromUtf8("lineEdit_expo_4")); + lineEdit_expo_4->setGeometry(QRect(210, 1680, 90, 20)); + lineEdit_expo_4->setFont(font2); + label_31 = new QLabel(groupBox_camerasParams); + label_31->setObjectName(QString::fromUtf8("label_31")); + label_31->setGeometry(QRect(20, 2200, 180, 20)); + label_31->setFont(font2); + lineEdit_gain_4 = new QLineEdit(groupBox_camerasParams); + lineEdit_gain_4->setObjectName(QString::fromUtf8("lineEdit_gain_4")); + lineEdit_gain_4->setGeometry(QRect(510, 1680, 90, 20)); + lineEdit_gain_4->setFont(font2); + label_32 = new QLabel(groupBox_camerasParams); + label_32->setObjectName(QString::fromUtf8("label_32")); + label_32->setGeometry(QRect(320, 2200, 180, 20)); + label_32->setFont(font2); + label_42 = new QLabel(groupBox_camerasParams); + label_42->setObjectName(QString::fromUtf8("label_42")); + label_42->setGeometry(QRect(320, 1680, 180, 20)); + label_42->setFont(font2); + lineEdit_gain_3 = new QLineEdit(groupBox_camerasParams); + lineEdit_gain_3->setObjectName(QString::fromUtf8("lineEdit_gain_3")); + lineEdit_gain_3->setGeometry(QRect(510, 2200, 90, 20)); + lineEdit_gain_3->setFont(font2); + pushButton_expo = new QPushButton(groupBox_camerasParams); + pushButton_expo->setObjectName(QString::fromUtf8("pushButton_expo")); + pushButton_expo->setGeometry(QRect(680, 90, 91, 51)); + pushButton_expo->setFont(font1); + label_51 = new QLabel(groupBox_camerasParams); + label_51->setObjectName(QString::fromUtf8("label_51")); + label_51->setGeometry(QRect(20, 1220, 180, 20)); + label_51->setFont(font2); + label_61 = new QLabel(groupBox_camerasParams); + label_61->setObjectName(QString::fromUtf8("label_61")); + label_61->setGeometry(QRect(20, 1250, 180, 20)); + label_61->setFont(font2); + label_71 = new QLabel(groupBox_camerasParams); + label_71->setObjectName(QString::fromUtf8("label_71")); + label_71->setGeometry(QRect(20, 1280, 180, 20)); + label_71->setFont(font2); + lineEdit_expo_5 = new QLineEdit(groupBox_camerasParams); + lineEdit_expo_5->setObjectName(QString::fromUtf8("lineEdit_expo_5")); + lineEdit_expo_5->setGeometry(QRect(210, 1220, 90, 20)); + lineEdit_expo_5->setFont(font2); + lineEdit_expo_6 = new QLineEdit(groupBox_camerasParams); + lineEdit_expo_6->setObjectName(QString::fromUtf8("lineEdit_expo_6")); + lineEdit_expo_6->setGeometry(QRect(210, 1250, 90, 20)); + lineEdit_expo_6->setFont(font2); + lineEdit_expo_7 = new QLineEdit(groupBox_camerasParams); + lineEdit_expo_7->setObjectName(QString::fromUtf8("lineEdit_expo_7")); + lineEdit_expo_7->setGeometry(QRect(210, 1280, 90, 20)); + lineEdit_expo_7->setFont(font2); + label_52 = new QLabel(groupBox_camerasParams); + label_52->setObjectName(QString::fromUtf8("label_52")); + label_52->setGeometry(QRect(320, 1220, 180, 20)); + label_52->setFont(font2); + label_62 = new QLabel(groupBox_camerasParams); + label_62->setObjectName(QString::fromUtf8("label_62")); + label_62->setGeometry(QRect(320, 1250, 180, 20)); + label_62->setFont(font2); + label_72 = new QLabel(groupBox_camerasParams); + label_72->setObjectName(QString::fromUtf8("label_72")); + label_72->setGeometry(QRect(320, 1280, 180, 20)); + label_72->setFont(font2); + lineEdit_gain_5 = new QLineEdit(groupBox_camerasParams); + lineEdit_gain_5->setObjectName(QString::fromUtf8("lineEdit_gain_5")); + lineEdit_gain_5->setGeometry(QRect(510, 1220, 90, 20)); + lineEdit_gain_5->setFont(font2); + lineEdit_gain_6 = new QLineEdit(groupBox_camerasParams); + lineEdit_gain_6->setObjectName(QString::fromUtf8("lineEdit_gain_6")); + lineEdit_gain_6->setGeometry(QRect(510, 1250, 90, 20)); + lineEdit_gain_6->setFont(font2); + lineEdit_gain_7 = new QLineEdit(groupBox_camerasParams); + lineEdit_gain_7->setObjectName(QString::fromUtf8("lineEdit_gain_7")); + lineEdit_gain_7->setGeometry(QRect(510, 1280, 90, 20)); + lineEdit_gain_7->setFont(font2); + label_81 = new QLabel(groupBox_camerasParams); + label_81->setObjectName(QString::fromUtf8("label_81")); + label_81->setGeometry(QRect(20, 1310, 180, 20)); + label_81->setFont(font2); + lineEdit_expo_8 = new QLineEdit(groupBox_camerasParams); + lineEdit_expo_8->setObjectName(QString::fromUtf8("lineEdit_expo_8")); + lineEdit_expo_8->setGeometry(QRect(210, 1310, 90, 20)); + lineEdit_expo_8->setFont(font2); + label_82 = new QLabel(groupBox_camerasParams); + label_82->setObjectName(QString::fromUtf8("label_82")); + label_82->setGeometry(QRect(320, 1310, 180, 20)); + label_82->setFont(font2); + lineEdit_gain_8 = new QLineEdit(groupBox_camerasParams); + lineEdit_gain_8->setObjectName(QString::fromUtf8("lineEdit_gain_8")); + lineEdit_gain_8->setGeometry(QRect(510, 1310, 90, 20)); + lineEdit_gain_8->setFont(font2); + groupBox_filterSet = new QGroupBox(scrollAreaWidgetContents); + groupBox_filterSet->setObjectName(QString::fromUtf8("groupBox_filterSet")); + groupBox_filterSet->setGeometry(QRect(10, 570, 641, 61)); + groupBox_filterSet->setFont(font1); + label_1 = new QLabel(groupBox_filterSet); + label_1->setObjectName(QString::fromUtf8("label_1")); + label_1->setGeometry(QRect(20, 30, 180, 20)); + label_1->setFont(font2); + lineEdit_filter_1 = new QLineEdit(groupBox_filterSet); + lineEdit_filter_1->setObjectName(QString::fromUtf8("lineEdit_filter_1")); + lineEdit_filter_1->setGeometry(QRect(210, 30, 90, 20)); + lineEdit_filter_1->setFont(font2); + lineEdit_filter_2 = new QLineEdit(groupBox_filterSet); + lineEdit_filter_2->setObjectName(QString::fromUtf8("lineEdit_filter_2")); + lineEdit_filter_2->setGeometry(QRect(510, 2130, 90, 20)); + lineEdit_filter_2->setFont(font2); + label_2 = new QLabel(groupBox_filterSet); + label_2->setObjectName(QString::fromUtf8("label_2")); + label_2->setGeometry(QRect(320, 2130, 180, 20)); + label_2->setFont(font2); + lineEdit_filter_4 = new QLineEdit(groupBox_filterSet); + lineEdit_filter_4->setObjectName(QString::fromUtf8("lineEdit_filter_4")); + lineEdit_filter_4->setGeometry(QRect(510, 1610, 90, 20)); + lineEdit_filter_4->setFont(font2); + label_3 = new QLabel(groupBox_filterSet); + label_3->setObjectName(QString::fromUtf8("label_3")); + label_3->setGeometry(QRect(20, 2160, 180, 20)); + label_3->setFont(font2); + lineEdit_filter_3 = new QLineEdit(groupBox_filterSet); + lineEdit_filter_3->setObjectName(QString::fromUtf8("lineEdit_filter_3")); + lineEdit_filter_3->setGeometry(QRect(210, 2160, 90, 20)); + lineEdit_filter_3->setFont(font2); + label_4 = new QLabel(groupBox_filterSet); + label_4->setObjectName(QString::fromUtf8("label_4")); + label_4->setGeometry(QRect(320, 1610, 180, 20)); + label_4->setFont(font2); + pushButton_filter = new QPushButton(groupBox_filterSet); + pushButton_filter->setObjectName(QString::fromUtf8("pushButton_filter")); + pushButton_filter->setGeometry(QRect(680, 50, 91, 51)); + pushButton_filter->setFont(font1); + label_5 = new QLabel(groupBox_filterSet); + label_5->setObjectName(QString::fromUtf8("label_5")); + label_5->setGeometry(QRect(20, 1150, 180, 20)); + label_5->setFont(font2); + label_6 = new QLabel(groupBox_filterSet); + label_6->setObjectName(QString::fromUtf8("label_6")); + label_6->setGeometry(QRect(320, 1150, 180, 20)); + label_6->setFont(font2); + label_7 = new QLabel(groupBox_filterSet); + label_7->setObjectName(QString::fromUtf8("label_7")); + label_7->setGeometry(QRect(20, 1180, 180, 20)); + label_7->setFont(font2); + label_8 = new QLabel(groupBox_filterSet); + label_8->setObjectName(QString::fromUtf8("label_8")); + label_8->setGeometry(QRect(320, 1180, 180, 20)); + label_8->setFont(font2); + lineEdit_filter_5 = new QLineEdit(groupBox_filterSet); + lineEdit_filter_5->setObjectName(QString::fromUtf8("lineEdit_filter_5")); + lineEdit_filter_5->setGeometry(QRect(210, 1150, 90, 20)); + lineEdit_filter_5->setFont(font2); + lineEdit_filter_7 = new QLineEdit(groupBox_filterSet); + lineEdit_filter_7->setObjectName(QString::fromUtf8("lineEdit_filter_7")); + lineEdit_filter_7->setGeometry(QRect(210, 1180, 90, 20)); + lineEdit_filter_7->setFont(font2); + lineEdit_filter_6 = new QLineEdit(groupBox_filterSet); + lineEdit_filter_6->setObjectName(QString::fromUtf8("lineEdit_filter_6")); + lineEdit_filter_6->setGeometry(QRect(510, 1150, 90, 20)); + lineEdit_filter_6->setFont(font2); + lineEdit_filter_8 = new QLineEdit(groupBox_filterSet); + lineEdit_filter_8->setObjectName(QString::fromUtf8("lineEdit_filter_8")); + lineEdit_filter_8->setGeometry(QRect(510, 1180, 90, 20)); + lineEdit_filter_8->setFont(font2); + groupBox_saveSets = new QGroupBox(scrollAreaWidgetContents); + groupBox_saveSets->setObjectName(QString::fromUtf8("groupBox_saveSets")); + groupBox_saveSets->setGeometry(QRect(10, 120, 641, 61)); + groupBox_saveSets->setFont(font1); + radioButton_none = new QRadioButton(groupBox_saveSets); + radioButton_none->setObjectName(QString::fromUtf8("radioButton_none")); + radioButton_none->setGeometry(QRect(30, 30, 90, 21)); + radioButton_none->setFont(font1); + radioButton_ng = new QRadioButton(groupBox_saveSets); + radioButton_ng->setObjectName(QString::fromUtf8("radioButton_ng")); + radioButton_ng->setGeometry(QRect(230, 30, 90, 21)); + radioButton_ng->setFont(font1); + radioButton_all = new QRadioButton(groupBox_saveSets); + radioButton_all->setObjectName(QString::fromUtf8("radioButton_all")); + radioButton_all->setGeometry(QRect(440, 30, 90, 21)); + radioButton_all->setFont(font1); + pushButton_image = new QPushButton(groupBox_saveSets); + pushButton_image->setObjectName(QString::fromUtf8("pushButton_image")); + pushButton_image->setGeometry(QRect(570, 25, 50, 30)); + pushButton_image->setFont(font1); + pushButton_save = new QPushButton(scrollAreaWidgetContents); + pushButton_save->setObjectName(QString::fromUtf8("pushButton_save")); + pushButton_save->setGeometry(QRect(110, 650, 131, 51)); + pushButton_save->setFont(font1); + pushButton_exit = new QPushButton(scrollAreaWidgetContents); + pushButton_exit->setObjectName(QString::fromUtf8("pushButton_exit")); + pushButton_exit->setGeometry(QRect(520, 10, 130, 50)); + pushButton_exit->setFont(font1); + groupBox_userUpdate = new QGroupBox(scrollAreaWidgetContents); + groupBox_userUpdate->setObjectName(QString::fromUtf8("groupBox_userUpdate")); + groupBox_userUpdate->setGeometry(QRect(10, 490, 641, 81)); + groupBox_userUpdate->setFont(font1); + label_admin_newPwd = new QLabel(groupBox_userUpdate); + label_admin_newPwd->setObjectName(QString::fromUtf8("label_admin_newPwd")); + label_admin_newPwd->setGeometry(QRect(190, 30, 61, 31)); + label_admin_newPwd->setFont(font1); + lineEdit_confirm_op = new QLineEdit(groupBox_userUpdate); + lineEdit_confirm_op->setObjectName(QString::fromUtf8("lineEdit_confirm_op")); + lineEdit_confirm_op->setGeometry(QRect(440, 32, 91, 31)); + lineEdit_confirm_op->setFont(font1); + lineEdit_confirm_op->setEchoMode(QLineEdit::Password); + lineEdit_new_op = new QLineEdit(groupBox_userUpdate); + lineEdit_new_op->setObjectName(QString::fromUtf8("lineEdit_new_op")); + lineEdit_new_op->setGeometry(QRect(250, 30, 101, 31)); + lineEdit_new_op->setFont(font1); + lineEdit_new_op->setEchoMode(QLineEdit::Password); + label_admin_confirm = new QLabel(groupBox_userUpdate); + label_admin_confirm->setObjectName(QString::fromUtf8("label_admin_confirm")); + label_admin_confirm->setGeometry(QRect(360, 30, 81, 31)); + label_admin_confirm->setFont(font1); + lineEdit_old_op = new QLineEdit(groupBox_userUpdate); + lineEdit_old_op->setObjectName(QString::fromUtf8("lineEdit_old_op")); + lineEdit_old_op->setGeometry(QRect(90, 30, 91, 31)); + lineEdit_old_op->setFont(font1); + lineEdit_old_op->setEchoMode(QLineEdit::Password); + label_admin_oldPwd = new QLabel(groupBox_userUpdate); + label_admin_oldPwd->setObjectName(QString::fromUtf8("label_admin_oldPwd")); + label_admin_oldPwd->setGeometry(QRect(20, 30, 61, 31)); + label_admin_oldPwd->setFont(font1); + pushButton_pswd_op = new QPushButton(groupBox_userUpdate); + pushButton_pswd_op->setObjectName(QString::fromUtf8("pushButton_pswd_op")); + pushButton_pswd_op->setGeometry(QRect(540, 20, 91, 51)); + pushButton_pswd_op->setFont(font1); + pushButton_close = new QPushButton(scrollAreaWidgetContents); + pushButton_close->setObjectName(QString::fromUtf8("pushButton_close")); + pushButton_close->setGeometry(QRect(370, 650, 131, 51)); + pushButton_close->setFont(font1); + pushButton_desktop = new QPushButton(scrollAreaWidgetContents); + pushButton_desktop->setObjectName(QString::fromUtf8("pushButton_desktop")); + pushButton_desktop->setGeometry(QRect(220, 10, 130, 50)); + pushButton_desktop->setFont(font1); + toolButton_keyboard = new QToolButton(scrollAreaWidgetContents); + toolButton_keyboard->setObjectName(QString::fromUtf8("toolButton_keyboard")); + toolButton_keyboard->setGeometry(QRect(110, 10, 91, 41)); + toolButton_keyboard->setFont(font1); + toolButton_keyboard->setStyleSheet(QString::fromUtf8("border-image: url(:/Cigarette/Resources/keyboard.png);")); + label = new QLabel(scrollAreaWidgetContents); + label->setObjectName(QString::fromUtf8("label")); + label->setGeometry(QRect(20, 20, 81, 21)); + label->setFont(font1); + pushButton_config = new QPushButton(scrollAreaWidgetContents); + pushButton_config->setObjectName(QString::fromUtf8("pushButton_config")); + pushButton_config->setGeometry(QRect(40, 260, 101, 41)); + pushButton_config->setFont(font1); + pushButton_change = new QPushButton(scrollAreaWidgetContents); + pushButton_change->setObjectName(QString::fromUtf8("pushButton_change")); + pushButton_change->setGeometry(QRect(40, 360, 101, 41)); + pushButton_change->setFont(font1); + pushButton_statistic = new QPushButton(scrollAreaWidgetContents); + pushButton_statistic->setObjectName(QString::fromUtf8("pushButton_statistic")); + pushButton_statistic->setGeometry(QRect(40, 310, 101, 41)); + pushButton_statistic->setFont(font1); + toolButton_choose_model_path = new QToolButton(scrollAreaWidgetContents); + toolButton_choose_model_path->setObjectName(QString::fromUtf8("toolButton_choose_model_path")); + toolButton_choose_model_path->setGeometry(QRect(620, 1610, 27, 25)); + QFont font3; + font3.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); + toolButton_choose_model_path->setFont(font3); + label_model_path = new QLabel(scrollAreaWidgetContents); + label_model_path->setObjectName(QString::fromUtf8("label_model_path")); + label_model_path->setGeometry(QRect(190, 1610, 171, 30)); + label_model_path->setFont(font1); + label_model_path->setAlignment(Qt::AlignCenter); + comboBox_model_path = new QComboBox(scrollAreaWidgetContents); + comboBox_model_path->setObjectName(QString::fromUtf8("comboBox_model_path")); + comboBox_model_path->setGeometry(QRect(370, 1610, 241, 30)); + QFont font4; + font4.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); + font4.setPointSize(10); + comboBox_model_path->setFont(font4); + label_path_jpg = new QLabel(scrollAreaWidgetContents); + label_path_jpg->setObjectName(QString::fromUtf8("label_path_jpg")); + label_path_jpg->setGeometry(QRect(340, 1020, 91, 21)); + QFont font5; + font5.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); + font5.setBold(true); + font5.setWeight(75); + label_path_jpg->setFont(font5); + comboBox_2 = new QComboBox(scrollAreaWidgetContents); + comboBox_2->setObjectName(QString::fromUtf8("comboBox_2")); + comboBox_2->setGeometry(QRect(440, 1020, 171, 25)); + comboBox_2->setFont(font3); + toolButton_choose_path_jpg = new QToolButton(scrollAreaWidgetContents); + toolButton_choose_path_jpg->setObjectName(QString::fromUtf8("toolButton_choose_path_jpg")); + toolButton_choose_path_jpg->setGeometry(QRect(620, 1020, 27, 26)); + toolButton_choose_path_jpg->setFont(font3); + pushButton_clear_pic = new QPushButton(scrollAreaWidgetContents); + pushButton_clear_pic->setObjectName(QString::fromUtf8("pushButton_clear_pic")); + pushButton_clear_pic->setGeometry(QRect(370, 10, 130, 50)); + pushButton_clear_pic->setFont(font1); + pushButton_testimg = new QPushButton(scrollAreaWidgetContents); + pushButton_testimg->setObjectName(QString::fromUtf8("pushButton_testimg")); + pushButton_testimg->setGeometry(QRect(520, 650, 131, 21)); + pushButton_testimg->setFont(font5); + pushButton_testimgs = new QPushButton(scrollAreaWidgetContents); + pushButton_testimgs->setObjectName(QString::fromUtf8("pushButton_testimgs")); + pushButton_testimgs->setGeometry(QRect(520, 680, 131, 21)); + pushButton_testimgs->setFont(font5); + label_conf_path = new QLabel(scrollAreaWidgetContents); + label_conf_path->setObjectName(QString::fromUtf8("label_conf_path")); + label_conf_path->setGeometry(QRect(190, 280, 171, 30)); + label_conf_path->setFont(font1); + label_conf_path->setAlignment(Qt::AlignCenter); + comboBox_config_path = new QComboBox(scrollAreaWidgetContents); + comboBox_config_path->setObjectName(QString::fromUtf8("comboBox_config_path")); + comboBox_config_path->setGeometry(QRect(370, 280, 241, 30)); + comboBox_config_path->setFont(font4); + toolButton_choose_config_path = new QToolButton(scrollAreaWidgetContents); + toolButton_choose_config_path->setObjectName(QString::fromUtf8("toolButton_choose_config_path")); + toolButton_choose_config_path->setGeometry(QRect(620, 280, 27, 25)); + toolButton_choose_config_path->setFont(font3); + label_save_pics_path = new QLabel(scrollAreaWidgetContents); + label_save_pics_path->setObjectName(QString::fromUtf8("label_save_pics_path")); + label_save_pics_path->setGeometry(QRect(190, 350, 171, 30)); + label_save_pics_path->setFont(font1); + label_save_pics_path->setAlignment(Qt::AlignCenter); + comboBox_save_pics_path = new QComboBox(scrollAreaWidgetContents); + comboBox_save_pics_path->setObjectName(QString::fromUtf8("comboBox_save_pics_path")); + comboBox_save_pics_path->setGeometry(QRect(370, 350, 241, 30)); + comboBox_save_pics_path->setFont(font4); + toolButton_choose_save_pics_path = new QToolButton(scrollAreaWidgetContents); + toolButton_choose_save_pics_path->setObjectName(QString::fromUtf8("toolButton_choose_save_pics_path")); + toolButton_choose_save_pics_path->setGeometry(QRect(620, 350, 27, 25)); + toolButton_choose_save_pics_path->setFont(font3); + scrollArea->setWidget(scrollAreaWidgetContents); + + retranslateUi(DialogSetup); + + QMetaObject::connectSlotsByName(DialogSetup); + } // setupUi + + void retranslateUi(QDialog *DialogSetup) + { + DialogSetup->setWindowTitle(QCoreApplication::translate("DialogSetup", "DialogSetup", nullptr)); + groupBox_startSets->setTitle(QCoreApplication::translate("DialogSetup", "\345\220\257\345\212\250\350\256\276\347\275\256", nullptr)); + checkBox_auto_open->setText(QCoreApplication::translate("DialogSetup", "\350\207\252\345\212\250\346\211\223\345\274\200\346\211\200\346\234\211\347\233\270\346\234\272", nullptr)); + checkBox_auto_work->setText(QCoreApplication::translate("DialogSetup", "\347\250\213\345\272\217\345\220\257\345\212\250\345\220\216\350\207\252\345\212\250\345\274\200\345\247\213\345\267\245\344\275\234", nullptr)); + groupBox_adminUpdate->setTitle(QCoreApplication::translate("DialogSetup", "\347\256\241\347\220\206\345\221\230\345\257\206\347\240\201\344\277\256\346\224\271", nullptr)); + pushButton_pswd->setText(QCoreApplication::translate("DialogSetup", "\347\241\256\345\256\232", nullptr)); + label_newPwd->setText(QCoreApplication::translate("DialogSetup", "\346\226\260\345\257\206\347\240\201\357\274\232", nullptr)); + lineEdit_confirm->setText(QString()); + lineEdit_new->setText(QString()); + label_confirm->setText(QCoreApplication::translate("DialogSetup", "\347\241\256\350\256\244\345\257\206\347\240\201\357\274\232", nullptr)); + lineEdit_old->setText(QString()); + label_oldPwd->setText(QCoreApplication::translate("DialogSetup", "\345\216\237\345\257\206\347\240\201\357\274\232", nullptr)); + groupBox_camerasParams->setTitle(QCoreApplication::translate("DialogSetup", "\347\233\270\346\234\272\345\217\202\346\225\260", nullptr)); + label_11->setText(QCoreApplication::translate("DialogSetup", "1#\347\233\270\346\234\272\346\233\235\345\205\211\346\227\266\351\227\264(\345\276\256\347\247\222)\357\274\232", nullptr)); + lineEdit_expo_1->setText(QString()); + lineEdit_expo_2->setText(QString()); + label_21->setText(QCoreApplication::translate("DialogSetup", "2#\347\233\270\346\234\272\346\233\235\345\205\211\346\227\266\351\227\264(\345\276\256\347\247\222)\357\274\232", nullptr)); + lineEdit_gain_2->setText(QString()); + label_12->setText(QCoreApplication::translate("DialogSetup", "1#\347\233\270\346\234\272\346\250\241\346\213\237\345\242\236\347\233\212(0~64)\357\274\232", nullptr)); + label_22->setText(QCoreApplication::translate("DialogSetup", "2#\347\233\270\346\234\272\346\250\241\346\213\237\345\242\236\347\233\212(0~64)\357\274\232", nullptr)); + lineEdit_gain_1->setText(QString()); + lineEdit_expo_3->setText(QString()); + label_41->setText(QCoreApplication::translate("DialogSetup", "4#\347\233\270\346\234\272\346\233\235\345\205\211\346\227\266\351\227\264(\345\276\256\347\247\222)\357\274\232", nullptr)); + lineEdit_expo_4->setText(QString()); + label_31->setText(QCoreApplication::translate("DialogSetup", "3#\347\233\270\346\234\272\346\233\235\345\205\211\346\227\266\351\227\264(\345\276\256\347\247\222)\357\274\232", nullptr)); + lineEdit_gain_4->setText(QString()); + label_32->setText(QCoreApplication::translate("DialogSetup", "3#\347\233\270\346\234\272\346\250\241\346\213\237\345\242\236\347\233\212(0~64)\357\274\232", nullptr)); + label_42->setText(QCoreApplication::translate("DialogSetup", "4#\347\233\270\346\234\272\346\250\241\346\213\237\345\242\236\347\233\212(0~64)\357\274\232", nullptr)); + lineEdit_gain_3->setText(QString()); + pushButton_expo->setText(QCoreApplication::translate("DialogSetup", "\347\241\256\345\256\232", nullptr)); + label_51->setText(QCoreApplication::translate("DialogSetup", "5#\347\233\270\346\234\272\346\233\235\345\205\211\346\227\266\351\227\264(\345\276\256\347\247\222)\357\274\232", nullptr)); + label_61->setText(QCoreApplication::translate("DialogSetup", "6#\347\233\270\346\234\272\346\233\235\345\205\211\346\227\266\351\227\264(\345\276\256\347\247\222)\357\274\232", nullptr)); + label_71->setText(QCoreApplication::translate("DialogSetup", "7#\347\233\270\346\234\272\346\233\235\345\205\211\346\227\266\351\227\264(\345\276\256\347\247\222)\357\274\232", nullptr)); + lineEdit_expo_5->setText(QString()); + lineEdit_expo_6->setText(QString()); + lineEdit_expo_7->setText(QString()); + label_52->setText(QCoreApplication::translate("DialogSetup", "5#\347\233\270\346\234\272\346\250\241\346\213\237\345\242\236\347\233\212(0~64)\357\274\232", nullptr)); + label_62->setText(QCoreApplication::translate("DialogSetup", "6#\347\233\270\346\234\272\346\250\241\346\213\237\345\242\236\347\233\212(0~64)\357\274\232", nullptr)); + label_72->setText(QCoreApplication::translate("DialogSetup", "7#\347\233\270\346\234\272\346\250\241\346\213\237\345\242\236\347\233\212(0~64)\357\274\232", nullptr)); + lineEdit_gain_5->setText(QString()); + lineEdit_gain_6->setText(QString()); + lineEdit_gain_7->setText(QString()); + label_81->setText(QCoreApplication::translate("DialogSetup", "8#\347\233\270\346\234\272\346\233\235\345\205\211\346\227\266\351\227\264(\345\276\256\347\247\222)\357\274\232", nullptr)); + lineEdit_expo_8->setText(QString()); + label_82->setText(QCoreApplication::translate("DialogSetup", "8#\347\233\270\346\234\272\346\250\241\346\213\237\345\242\236\347\233\212(0~64)\357\274\232", nullptr)); + lineEdit_gain_8->setText(QString()); + groupBox_filterSet->setTitle(QCoreApplication::translate("DialogSetup", "\346\273\244\346\263\242\350\256\276\347\275\256", nullptr)); + label_1->setText(QCoreApplication::translate("DialogSetup", "1#\347\233\270\346\234\272\346\273\244\346\263\242\346\227\266\351\227\264(\345\276\256\347\247\222)\357\274\232", nullptr)); + lineEdit_filter_1->setText(QString()); + lineEdit_filter_2->setText(QString()); + label_2->setText(QCoreApplication::translate("DialogSetup", "2#\347\233\270\346\234\272\346\273\244\346\263\242\346\227\266\351\227\264(\345\276\256\347\247\222)\357\274\232", nullptr)); + lineEdit_filter_4->setText(QString()); + label_3->setText(QCoreApplication::translate("DialogSetup", "3#\347\233\270\346\234\272\346\273\244\346\263\242\346\227\266\351\227\264(\345\276\256\347\247\222)\357\274\232", nullptr)); + lineEdit_filter_3->setText(QString()); + label_4->setText(QCoreApplication::translate("DialogSetup", "4#\347\233\270\346\234\272\346\273\244\346\263\242\346\227\266\351\227\264(\345\276\256\347\247\222)\357\274\232", nullptr)); + pushButton_filter->setText(QCoreApplication::translate("DialogSetup", "\347\241\256\345\256\232", nullptr)); + label_5->setText(QCoreApplication::translate("DialogSetup", "5#\347\233\270\346\234\272\346\273\244\346\263\242\346\227\266\351\227\264(\345\276\256\347\247\222)\357\274\232", nullptr)); + label_6->setText(QCoreApplication::translate("DialogSetup", "6#\347\233\270\346\234\272\346\273\244\346\263\242\346\227\266\351\227\264(\345\276\256\347\247\222)\357\274\232", nullptr)); + label_7->setText(QCoreApplication::translate("DialogSetup", "7#\347\233\270\346\234\272\346\273\244\346\263\242\346\227\266\351\227\264(\345\276\256\347\247\222)\357\274\232", nullptr)); + label_8->setText(QCoreApplication::translate("DialogSetup", "8#\347\233\270\346\234\272\346\273\244\346\263\242\346\227\266\351\227\264(\345\276\256\347\247\222)\357\274\232", nullptr)); + lineEdit_filter_5->setText(QString()); + lineEdit_filter_7->setText(QString()); + lineEdit_filter_6->setText(QString()); + lineEdit_filter_8->setText(QString()); + groupBox_saveSets->setTitle(QCoreApplication::translate("DialogSetup", "\345\255\230\345\233\276\350\256\276\347\275\256", nullptr)); + radioButton_none->setText(QCoreApplication::translate("DialogSetup", "\344\270\215\345\255\230", nullptr)); + radioButton_ng->setText(QCoreApplication::translate("DialogSetup", "\345\255\230NG", nullptr)); + radioButton_all->setText(QCoreApplication::translate("DialogSetup", "\345\205\250\345\255\230", nullptr)); + pushButton_image->setText(QCoreApplication::translate("DialogSetup", "\347\241\256\345\256\232", nullptr)); + pushButton_save->setText(QCoreApplication::translate("DialogSetup", "\344\277\235\345\255\230\345\217\202\346\225\260", nullptr)); + pushButton_exit->setText(QCoreApplication::translate("DialogSetup", "\351\200\200\345\207\272\347\263\273\347\273\237", nullptr)); + groupBox_userUpdate->setTitle(QCoreApplication::translate("DialogSetup", "\346\223\215\344\275\234\345\221\230\345\257\206\347\240\201\344\277\256\346\224\271", nullptr)); + label_admin_newPwd->setText(QCoreApplication::translate("DialogSetup", "\346\226\260\345\257\206\347\240\201\357\274\232", nullptr)); + lineEdit_confirm_op->setText(QString()); + lineEdit_new_op->setText(QString()); + label_admin_confirm->setText(QCoreApplication::translate("DialogSetup", "\347\241\256\350\256\244\345\257\206\347\240\201\357\274\232", nullptr)); + lineEdit_old_op->setText(QString()); + label_admin_oldPwd->setText(QCoreApplication::translate("DialogSetup", "\345\216\237\345\257\206\347\240\201\357\274\232", nullptr)); + pushButton_pswd_op->setText(QCoreApplication::translate("DialogSetup", "\347\241\256\345\256\232", nullptr)); + pushButton_close->setText(QCoreApplication::translate("DialogSetup", "\345\205\263\351\227\255\347\252\227\345\217\243", nullptr)); + pushButton_desktop->setText(QCoreApplication::translate("DialogSetup", "\346\230\276\347\244\272\346\241\214\351\235\242", nullptr)); + toolButton_keyboard->setText(QString()); + label->setText(QCoreApplication::translate("DialogSetup", "\347\263\273\347\273\237\350\256\276\347\275\256", nullptr)); + pushButton_config->setText(QCoreApplication::translate("DialogSetup", "\351\205\215\346\226\271\350\256\276\347\275\256", nullptr)); + pushButton_change->setText(QCoreApplication::translate("DialogSetup", "\346\215\242\347\217\255\350\256\276\347\275\256", nullptr)); + pushButton_statistic->setText(QCoreApplication::translate("DialogSetup", "\344\272\247\351\207\217\347\273\237\350\256\241", nullptr)); + toolButton_choose_model_path->setText(QCoreApplication::translate("DialogSetup", "...", nullptr)); + label_model_path->setText(QCoreApplication::translate("DialogSetup", "\346\250\241\345\236\213\345\255\230\345\202\250\350\267\257\345\276\204", nullptr)); + label_path_jpg->setText(QCoreApplication::translate("DialogSetup", "\345\233\276\347\211\207\345\255\230\345\202\250\350\267\257\345\276\204", nullptr)); + toolButton_choose_path_jpg->setText(QCoreApplication::translate("DialogSetup", "...", nullptr)); + pushButton_clear_pic->setText(QCoreApplication::translate("DialogSetup", "\346\270\205\347\220\206\345\233\276\347\211\207", nullptr)); + pushButton_testimg->setText(QCoreApplication::translate("DialogSetup", "\346\265\213\350\257\225\345\215\225\345\274\240\345\233\276\347\211\207", nullptr)); + pushButton_testimgs->setText(QCoreApplication::translate("DialogSetup", "\346\265\213\350\257\225\345\244\232\345\274\240\345\233\276\347\211\207", nullptr)); + label_conf_path->setText(QCoreApplication::translate("DialogSetup", "\351\205\215\347\275\256\346\226\207\344\273\266\345\255\230\345\202\250\350\267\257\345\276\204", nullptr)); + toolButton_choose_config_path->setText(QCoreApplication::translate("DialogSetup", "...", nullptr)); + label_save_pics_path->setText(QCoreApplication::translate("DialogSetup", "\345\233\276\347\211\207\345\255\230\345\202\250\350\267\257\345\276\204", nullptr)); + toolButton_choose_save_pics_path->setText(QCoreApplication::translate("DialogSetup", "...", nullptr)); + } // retranslateUi + +}; + +namespace Ui { + class DialogSetup: public Ui_DialogSetup {}; +} // namespace Ui + +QT_END_NAMESPACE + +#endif // UI_DIALOGSETUP_H diff --git a/Cigarette/GeneratedFiles/ui_dialogsetuppasswd.h b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/ui_dialogsetuppasswd.h similarity index 99% rename from Cigarette/GeneratedFiles/ui_dialogsetuppasswd.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/ui_dialogsetuppasswd.h index 162303cc..1c51dd7f 100644 --- a/Cigarette/GeneratedFiles/ui_dialogsetuppasswd.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/ui_dialogsetuppasswd.h @@ -1,7 +1,7 @@ /******************************************************************************** ** Form generated from reading UI file 'dialogsetuppasswd.ui' ** -** Created by: Qt User Interface Compiler version 5.15.2 +** Created by: Qt User Interface Compiler version 5.14.2 ** ** WARNING! All changes made in this file will be lost when recompiling UI file! ********************************************************************************/ diff --git a/Cigarette/GeneratedFiles/ui_output_statistic.h b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/ui_output_statistic.h similarity index 63% rename from Cigarette/GeneratedFiles/ui_output_statistic.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/ui_output_statistic.h index 96b7ad9e..ca57e4ae 100644 --- a/Cigarette/GeneratedFiles/ui_output_statistic.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/ui_output_statistic.h @@ -1,7 +1,7 @@ /******************************************************************************** ** Form generated from reading UI file 'output_statistic.ui' ** -** Created by: Qt User Interface Compiler version 5.15.2 +** Created by: Qt User Interface Compiler version 5.14.2 ** ** WARNING! All changes made in this file will be lost when recompiling UI file! ********************************************************************************/ @@ -25,20 +25,17 @@ class Ui_output_statistic public: QGridLayout *gridLayout; QFrame *frame; - QGridLayout *gridLayout_2; + QGridLayout *gridLayout_0; QTabWidget *tabWidget; QWidget *Camera1; - QGridLayout *gridLayout_4; + QGridLayout *gridLayout_1; QTextBrowser *textBrowser_1; - QWidget *Camera2; - QGridLayout *gridLayout_3; - QTextBrowser *textBrowser_2; void setupUi(QDialog *output_statistic) { if (output_statistic->objectName().isEmpty()) output_statistic->setObjectName(QString::fromUtf8("output_statistic")); - output_statistic->resize(573, 390); + output_statistic->resize(810, 390); gridLayout = new QGridLayout(output_statistic); gridLayout->setSpacing(6); gridLayout->setContentsMargins(11, 11, 11, 11); @@ -47,38 +44,29 @@ public: frame->setObjectName(QString::fromUtf8("frame")); frame->setFrameShape(QFrame::StyledPanel); frame->setFrameShadow(QFrame::Raised); - gridLayout_2 = new QGridLayout(frame); - gridLayout_2->setSpacing(6); - gridLayout_2->setContentsMargins(11, 11, 11, 11); - gridLayout_2->setObjectName(QString::fromUtf8("gridLayout_2")); + gridLayout_0 = new QGridLayout(frame); + gridLayout_0->setSpacing(6); + gridLayout_0->setContentsMargins(11, 11, 11, 11); + gridLayout_0->setObjectName(QString::fromUtf8("gridLayout_0")); tabWidget = new QTabWidget(frame); tabWidget->setObjectName(QString::fromUtf8("tabWidget")); + QFont font; + font.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); + tabWidget->setFont(font); Camera1 = new QWidget(); Camera1->setObjectName(QString::fromUtf8("Camera1")); - gridLayout_4 = new QGridLayout(Camera1); - gridLayout_4->setSpacing(6); - gridLayout_4->setContentsMargins(11, 11, 11, 11); - gridLayout_4->setObjectName(QString::fromUtf8("gridLayout_4")); + gridLayout_1 = new QGridLayout(Camera1); + gridLayout_1->setSpacing(6); + gridLayout_1->setContentsMargins(11, 11, 11, 11); + gridLayout_1->setObjectName(QString::fromUtf8("gridLayout_1")); textBrowser_1 = new QTextBrowser(Camera1); textBrowser_1->setObjectName(QString::fromUtf8("textBrowser_1")); - gridLayout_4->addWidget(textBrowser_1, 0, 0, 1, 1); + gridLayout_1->addWidget(textBrowser_1, 0, 0, 1, 1); tabWidget->addTab(Camera1, QString()); - Camera2 = new QWidget(); - Camera2->setObjectName(QString::fromUtf8("Camera2")); - gridLayout_3 = new QGridLayout(Camera2); - gridLayout_3->setSpacing(6); - gridLayout_3->setContentsMargins(11, 11, 11, 11); - gridLayout_3->setObjectName(QString::fromUtf8("gridLayout_3")); - textBrowser_2 = new QTextBrowser(Camera2); - textBrowser_2->setObjectName(QString::fromUtf8("textBrowser_2")); - gridLayout_3->addWidget(textBrowser_2, 0, 0, 1, 1); - - tabWidget->addTab(Camera2, QString()); - - gridLayout_2->addWidget(tabWidget, 0, 0, 1, 1); + gridLayout_0->addWidget(tabWidget, 0, 0, 1, 1); gridLayout->addWidget(frame, 0, 0, 1, 1); @@ -96,7 +84,6 @@ public: { output_statistic->setWindowTitle(QCoreApplication::translate("output_statistic", "\344\272\247\351\207\217\347\273\237\350\256\241", nullptr)); tabWidget->setTabText(tabWidget->indexOf(Camera1), QCoreApplication::translate("output_statistic", "Camera1", nullptr)); - tabWidget->setTabText(tabWidget->indexOf(Camera2), QCoreApplication::translate("output_statistic", "Camera2", nullptr)); } // retranslateUi }; diff --git a/Cigarette/GeneratedFiles/ui_plcsetup.h b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/ui_plcsetup.h similarity index 98% rename from Cigarette/GeneratedFiles/ui_plcsetup.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/ui_plcsetup.h index b5eafb5b..12a28a1c 100644 --- a/Cigarette/GeneratedFiles/ui_plcsetup.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/GeneratedFiles/ui_plcsetup.h @@ -1,7 +1,7 @@ /******************************************************************************** ** Form generated from reading UI file 'plcsetup.ui' ** -** Created by: Qt User Interface Compiler version 5.15.2 +** Created by: Qt User Interface Compiler version 5.14.2 ** ** WARNING! All changes made in this file will be lost when recompiling UI file! ********************************************************************************/ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/License.dat b/240510-常德GDX1-1相机-1280x800/Cigarette/License.dat new file mode 100644 index 00000000..64489a78 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/License.dat @@ -0,0 +1 @@ +8x;iB2@%^/|y5 *)*3Hgkެټg EdQ+SBtRR~MXT2O'ES1,l gZ=wxIKȄ,Rb?նi%:YCm򆜬n} \ No newline at end of file diff --git a/Cigarette/Logthread.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/Logthread.cpp similarity index 100% rename from Cigarette/Logthread.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Logthread.cpp diff --git a/Cigarette/Logthread.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Logthread.h similarity index 100% rename from Cigarette/Logthread.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Logthread.h diff --git a/Cigarette/MVS3.2.1/Include/CameraParams.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MVS3.2.1/Include/CameraParams.h similarity index 100% rename from Cigarette/MVS3.2.1/Include/CameraParams.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MVS3.2.1/Include/CameraParams.h diff --git a/Cigarette/MVS3.2.1/Include/MvCameraControl.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MVS3.2.1/Include/MvCameraControl.h similarity index 100% rename from Cigarette/MVS3.2.1/Include/MvCameraControl.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MVS3.2.1/Include/MvCameraControl.h diff --git a/Cigarette/MVS3.2.1/Include/MvErrorDefine.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MVS3.2.1/Include/MvErrorDefine.h similarity index 100% rename from Cigarette/MVS3.2.1/Include/MvErrorDefine.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MVS3.2.1/Include/MvErrorDefine.h diff --git a/Cigarette/MVS3.2.1/Include/MvObsoleteInterfaces.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MVS3.2.1/Include/MvObsoleteInterfaces.h similarity index 100% rename from Cigarette/MVS3.2.1/Include/MvObsoleteInterfaces.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MVS3.2.1/Include/MvObsoleteInterfaces.h diff --git a/Cigarette/MVS3.2.1/Include/MvSdkExport.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MVS3.2.1/Include/MvSdkExport.h similarity index 100% rename from Cigarette/MVS3.2.1/Include/MvSdkExport.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MVS3.2.1/Include/MvSdkExport.h diff --git a/Cigarette/MVS3.2.1/Include/ObsoleteCamParams.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MVS3.2.1/Include/ObsoleteCamParams.h similarity index 100% rename from Cigarette/MVS3.2.1/Include/ObsoleteCamParams.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MVS3.2.1/Include/ObsoleteCamParams.h diff --git a/Cigarette/MVS3.2.1/Include/PixelType.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MVS3.2.1/Include/PixelType.h similarity index 100% rename from Cigarette/MVS3.2.1/Include/PixelType.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MVS3.2.1/Include/PixelType.h diff --git a/Cigarette/MVS3.2.1/lib/win32/C++ Builder/MvCameraControlBC.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/MVS3.2.1/lib/win32/C++ Builder/MvCameraControlBC.lib similarity index 100% rename from Cigarette/MVS3.2.1/lib/win32/C++ Builder/MvCameraControlBC.lib rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MVS3.2.1/lib/win32/C++ Builder/MvCameraControlBC.lib diff --git a/Cigarette/MVS3.2.1/lib/win32/MvCameraControl.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/MVS3.2.1/lib/win32/MvCameraControl.lib similarity index 100% rename from Cigarette/MVS3.2.1/lib/win32/MvCameraControl.lib rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MVS3.2.1/lib/win32/MvCameraControl.lib diff --git a/Cigarette/MVS3.2.1/lib/win32/VC6/MvSdkExport.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/MVS3.2.1/lib/win32/VC6/MvSdkExport.lib similarity index 100% rename from Cigarette/MVS3.2.1/lib/win32/VC6/MvSdkExport.lib rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MVS3.2.1/lib/win32/VC6/MvSdkExport.lib diff --git a/Cigarette/MVS3.2.1/lib/win64/C++ Builder/MvCameraControlBC.a b/240510-常德GDX1-1相机-1280x800/Cigarette/MVS3.2.1/lib/win64/C++ Builder/MvCameraControlBC.a similarity index 100% rename from Cigarette/MVS3.2.1/lib/win64/C++ Builder/MvCameraControlBC.a rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MVS3.2.1/lib/win64/C++ Builder/MvCameraControlBC.a diff --git a/Cigarette/MVS3.2.1/lib/win64/MvCameraControl.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/MVS3.2.1/lib/win64/MvCameraControl.lib similarity index 100% rename from Cigarette/MVS3.2.1/lib/win64/MvCameraControl.lib rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MVS3.2.1/lib/win64/MvCameraControl.lib diff --git a/Cigarette/MvIMPACT/DriverBase/Include/mvCustomCommandDataTypes.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/DriverBase/Include/mvCustomCommandDataTypes.h similarity index 66% rename from Cigarette/MvIMPACT/DriverBase/Include/mvCustomCommandDataTypes.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/DriverBase/Include/mvCustomCommandDataTypes.h index dede197c..806eeab7 100644 --- a/Cigarette/MvIMPACT/DriverBase/Include/mvCustomCommandDataTypes.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/DriverBase/Include/mvCustomCommandDataTypes.h @@ -1,12 +1,15 @@ //----------------------------------------------------------------------------- -// (C) Copyright 2005 - 2021 by MATRIX VISION GmbH +// @description: Impact Acquire +// @copyright: (C) Copyright 2005 - 2023 by Balluff GmbH +// @authors: APIs and drivers development team at Balluff GmbH +// @initial date: 2005 // -// This software is provided by MATRIX VISION GmbH "as is" +// This software is provided by Balluff GmbH "as is" // and any express or implied warranties, including, but not limited to, the // implied warranties of merchantability and fitness for a particular purpose // are disclaimed. // -// In no event shall MATRIX VISION GmbH be liable for any direct, +// In no event shall Balluff GmbH be liable for any direct, // indirect, incidental, special, exemplary, or consequential damages // (including, but not limited to, procurement of substitute goods or services; // loss of use, data, or profits; or business interruption) however caused and @@ -21,14 +24,12 @@ #endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS //----------------------------------------------------------------------------- -#ifdef __GNUC__ -# define ATTR_PACK __attribute__((packed)) __attribute__ ((aligned (1))) -#elif defined _MSC_VER || defined __BORLANDC__ -# define ATTR_PACK +#if defined(__GNUC__) && !defined(_WIN32) +# define ATTR_PACK_1 __attribute__((packed)) __attribute__ ((aligned (1))) +#else // _MSC_VER, __BORLANDC__, SWIG, ... +# define ATTR_PACK_1 # pragma pack(push, 1) // 1 byte structure alignment -#elif !defined(SWIG) -# error add your compiler specific structure alignment function here -#endif +#endif // defined(__GNUC__) && !defined(_WIN32) #ifdef __cplusplus extern "C" { @@ -52,7 +53,7 @@ typedef unsigned __int32 uint32_type; # ifdef __BORLANDC__ // is Borland compiler? # pragma option push -b // force enums to the size of integer # endif // __BORLANDC__ -# elif defined(linux) || defined(__linux) || defined(__linux__) || defined(__GNUC__) +# elif defined(linux) || defined(__linux) || defined(__linux__) || defined(__APPLE__) || defined(__GNUC__) # ifndef WRAP_ANY # include # endif // #ifndef WRAP_ANY @@ -95,60 +96,80 @@ enum TRequestTransmissionMode enum TSequencerSetParameter //----------------------------------------------------------------------------- { - /// \brief Requests the CounterDuration[CounterSelector=Counter1] property to be modified in a user selected sequencer set. + /// \brief Requests the CounterDuration[CounterSelector=Counter1] property to be modified in a user selected sequencer set. sspCounterDuration_Counter1, - /// \brief Requests the CounterDuration[CounterSelector=Counter2] property to be modified in a user selected sequencer set. + /// \brief Requests the CounterDuration[CounterSelector=Counter2] property to be modified in a user selected sequencer set. sspCounterDuration_Counter2, - /// \brief Requests the CounterDuration[CounterSelector=Counter3] property to be modified in a user selected sequencer set. + /// \brief Requests the CounterDuration[CounterSelector=Counter3] property to be modified in a user selected sequencer set. sspCounterDuration_Counter3, - /// \brief Requests the CounterDuration[CounterSelector=Counter4] property to be modified in a user selected sequencer set. + /// \brief Requests the CounterDuration[CounterSelector=Counter4] property to be modified in a user selected sequencer set. sspCounterDuration_Counter4, - /// \brief Requests the CounterDuration[CounterSelector=Counter5] property to be modified in a user selected sequencer set. + /// \brief Requests the CounterDuration[CounterSelector=Counter5] property to be modified in a user selected sequencer set. sspCounterDuration_Counter5, - /// \brief Requests the CounterDuration[CounterSelector=Counter6] property to be modified in a user selected sequencer set. + /// \brief Requests the CounterDuration[CounterSelector=Counter6] property to be modified in a user selected sequencer set. sspCounterDuration_Counter6, - /// \brief Requests the CounterDuration[CounterSelector=Counter7] property to be modified in a user selected sequencer set. + /// \brief Requests the CounterDuration[CounterSelector=Counter7] property to be modified in a user selected sequencer set. sspCounterDuration_Counter7, - /// \brief Requests the CounterDuration[CounterSelector=Counter8] property to be modified in a user selected sequencer set. + /// \brief Requests the CounterDuration[CounterSelector=Counter8] property to be modified in a user selected sequencer set. sspCounterDuration_Counter8, /// \brief Requests the \c ExposureTime property to be modified in a user selected sequencer set. sspExposureTime, - /// \brief Requests the Gain[GainSelector=AnalogAll] property to be modified in a user selected sequencer set. + /// \brief Requests the Gain[GainSelector=AnalogAll] property to be modified in a user selected sequencer set. sspGain_AnalogAll, - /// \brief Requests the Gain[GainSelector=AnalogRed] property to be modified in a user selected sequencer set. + /// \brief Requests the Gain[GainSelector=AnalogRed] property to be modified in a user selected sequencer set. sspGain_AnalogRed, - /// \brief Requests the Gain[GainSelector=AnalogGreen] property to be modified in a user selected sequencer set. + /// \brief Requests the Gain[GainSelector=AnalogGreen] property to be modified in a user selected sequencer set. sspGain_AnalogGreen, - /// \brief Requests the Gain[GainSelector=AnalogBlue] property to be modified in a user selected sequencer set. + /// \brief Requests the Gain[GainSelector=AnalogBlue] property to be modified in a user selected sequencer set. sspGain_AnalogBlue, - /// \brief Requests the Gain[GainSelector=AnalogTap1] property to be modified in a user selected sequencer set. + /// \brief Requests the Gain[GainSelector=AnalogTap1] property to be modified in a user selected sequencer set. sspGain_AnalogTap1, - /// \brief Requests the Gain[GainSelector=AnalogTap2] property to be modified in a user selected sequencer set. + /// \brief Requests the Gain[GainSelector=AnalogTap2] property to be modified in a user selected sequencer set. sspGain_AnalogTap2, - /// \brief Requests the Gain[GainSelector=AnalogTap3] property to be modified in a user selected sequencer set. + /// \brief Requests the Gain[GainSelector=AnalogTap3] property to be modified in a user selected sequencer set. sspGain_AnalogTap3, - /// \brief Requests the Gain[GainSelector=AnalogTap4] property to be modified in a user selected sequencer set. + /// \brief Requests the Gain[GainSelector=AnalogTap4] property to be modified in a user selected sequencer set. sspGain_AnalogTap4, - /// \brief Requests the OffsetX property to be modified in a user selected sequencer set. + /// \brief Requests the OffsetX property to be modified in a user selected sequencer set. /** * \since 2.34.0, requires firmware version >= 2.35 */ sspOffsetX, - /// \brief Requests the OffsetY property to be modified in a user selected sequencer set. + /// \brief Requests the OffsetY property to be modified in a user selected sequencer set. /** * \since 2.34.0, requires firmware version >= 2.35 */ sspOffsetY, - /// \brief Requests the Width property to be modified in a user selected sequencer set. + /// \brief Requests the Width property to be modified in a user selected sequencer set. /** * \since 2.36.0, requires firmware version >= 2.36 */ sspWidth, - /// \brief Requests the Height property to be modified in a user selected sequencer set. + /// \brief Requests the Height property to be modified in a user selected sequencer set. /** * \since 2.36.0, requires firmware version >= 2.36 */ - sspHeight + sspHeight, + /// \brief Requests the BinningVertical property to be modified in a user selected sequencer set. + /** + * \since 2.45.0, requires firmware version >= 2.44 + */ + sspBinningVertical, + /// \brief Requests the BinningHorizontal property to be modified in a user selected sequencer set. + /** + * \since 2.45.0, requires firmware version >= 2.44 + */ + sspBinningHorizontal, + /// \brief Requests the DecimationVertical property to be modified in a user selected sequencer set. + /** + * \since 2.45.0, requires firmware version >= 2.44 + */ + sspDecimationVertical, + /// \brief Requests the DecimationHorizontal property to be modified in a user selected sequencer set. + /** + * \since 2.45.0, requires firmware version >= 2.44 + */ + sspDecimationHorizontal }; #if !defined(DOXYGEN_SHOULD_SKIP_THIS) && !defined(WRAP_ANY) @@ -170,7 +191,7 @@ struct CustomCommandProtocolHeader uint16_type interpreterVersionMinor; uint16_type totalMessageLength; uint16_type request_id; -} ATTR_PACK; +} ATTR_PACK_1; #define VARS_SFCPacketHeader \ uint16_type command; \ @@ -185,7 +206,7 @@ struct CustomCommandHeader //----------------------------------------------------------------------------- { VARS_SFCPacketHeader -} ATTR_PACK; +} ATTR_PACK_1; //----------------------------------------------------------------------------- struct CustomCommandSendFrame @@ -199,7 +220,7 @@ struct CustomCommandSendFrame uint32_type timestamp_high; uint32_type timestamp_low; uint32_type identifier; -} ATTR_PACK; +} ATTR_PACK_1; //----------------------------------------------------------------------------- struct CustomCommandUpdateSequencerSet @@ -207,7 +228,7 @@ struct CustomCommandUpdateSequencerSet { VARS_SFCPacketHeader VARS_SFCPacketUpdateSequencerSet -} ATTR_PACK; +} ATTR_PACK_1; //----------------------------------------------------------------------------- struct CustomCommandUpdateSequencerSetI64 @@ -217,7 +238,7 @@ struct CustomCommandUpdateSequencerSetI64 VARS_SFCPacketUpdateSequencerSet int32_type value_high; int32_type value_low; -} ATTR_PACK; +} ATTR_PACK_1; //----------------------------------------------------------------------------- struct CustomCommandUpdateSequencerSetF @@ -226,7 +247,7 @@ struct CustomCommandUpdateSequencerSetF VARS_SFCPacketHeader VARS_SFCPacketUpdateSequencerSet char data[8]; -} ATTR_PACK; +} ATTR_PACK_1; typedef enum TRequestTransmissionMode TRequestTransmissionMode; typedef enum TSequencerSetParameter TSequencerSetParameter; @@ -258,13 +279,9 @@ typedef struct CustomCommandUpdateSequencerSetF CustomCommandUpdateSequencerSetF } #endif // __cplusplus -#ifdef __GNUC__ -# undef ATTR_PACK -#elif defined _MSC_VER || defined __BORLANDC__ -# undef ATTR_PACK +#if defined(_WIN32) || !defined(__GNUC__) # pragma pack(pop) // restore previous structure alignment -#elif !defined(SWIG) -# error restore your compiler specific structure alignment here if necessary -#endif +#endif // defined(_WIN32) || !defined(__GNUC__) +#undef ATTR_PACK_1 #endif /*MV_CUSTOM_COMMAND_DATA_TYPES_H*/ diff --git a/Cigarette/MvIMPACT/DriverBase/Include/mvDriverBaseEnums.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/DriverBase/Include/mvDriverBaseEnums.h similarity index 77% rename from Cigarette/MvIMPACT/DriverBase/Include/mvDriverBaseEnums.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/DriverBase/Include/mvDriverBaseEnums.h index 7f7d44a7..8e489799 100644 --- a/Cigarette/MvIMPACT/DriverBase/Include/mvDriverBaseEnums.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/DriverBase/Include/mvDriverBaseEnums.h @@ -1,12 +1,15 @@ //----------------------------------------------------------------------------- -// (C) Copyright 2005 - 2021 by MATRIX VISION GmbH +// @description: Impact Acquire +// @copyright: (C) Copyright 2005 - 2023 by Balluff GmbH +// @authors: APIs and drivers development team at Balluff GmbH +// @initial date: 2005 // -// This software is provided by MATRIX VISION GmbH "as is" +// This software is provided by Balluff GmbH "as is" // and any express or implied warranties, including, but not limited to, the // implied warranties of merchantability and fitness for a particular purpose // are disclaimed. // -// In no event shall MATRIX VISION GmbH be liable for any direct, +// In no event shall Balluff GmbH be liable for any direct, // indirect, incidental, special, exemplary, or consequential damages // (including, but not limited to, procurement of substitute goods or services; // loss of use, data, or profits; or business interruption) however caused and @@ -41,11 +44,6 @@ # define IGNORE_MVGRABBER_SPECIFIC_DOCUMENTATION # define IGNORE_MVV4L2_SPECIFIC_DOCUMENTATION # define IGNORE_MVVIRTUALDEVICE_SPECIFIC_DOCUMENTATION -# elif defined(BUILD_MVGRABBER_DOCUMENTATION) -# define IGNORE_MVBLUECOUGAR_SPECIFIC_DOCUMENTATION -# define IGNORE_MVBLUEFOX_SPECIFIC_DOCUMENTATION -# define IGNORE_MVV4L2_SPECIFIC_DOCUMENTATION -# define IGNORE_MVVIRTUALDEVICE_SPECIFIC_DOCUMENTATION # elif defined(BUILD_MVVIRTUALDEVICE_DOCUMENTATION) # define IGNORE_MVBLUECOUGAR_SPECIFIC_DOCUMENTATION # define IGNORE_MVBLUEFOX_SPECIFIC_DOCUMENTATION @@ -79,18 +77,43 @@ namespace acquire #include //----------------------------------------------------------------------------- -/// \brief Defines which field triggers the start of the acquisition. +/// \brief Defines which field triggers the start of the acquisition (deprecated. +/** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ /// \ingroup DeviceSpecificInterface enum TAcquisitionField // flags_attribute, uint_type //----------------------------------------------------------------------------- { /// \brief Controlled by the camera parameter. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ afAuto = 0, /// \brief Only odd fields will be digitised. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ afOdd = 1, /// \brief Only even fields will be digitised. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ afEven = 2, /// \brief Odd and even fields will be digitised. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ afAny = afOdd | afEven }; @@ -104,7 +127,7 @@ enum TAcquisitionMode amContinuous = 1, /// \brief In this mode \a AcquisitionFrameCount images will transferred by the device. /** - * When \a AcquisitionFrameCount have been send by the device, it will automatically stop + * When \a AcquisitionFrameCount have been sent by the device, it will automatically stop * to send more data */ amMultiFrame = 2, @@ -137,7 +160,7 @@ enum TAcquisitionStartStopBehaviour /// \brief The user can control the start and stop of the data transfer from the device. /** * In this mode, queuing of image request buffers and the actual streaming of - * data from the device is de-coupled. This can sometimes be favourable + * data from the device is de-coupled. This can sometimes be favorable * compared to the default behaviour e.g. when dealing with device drivers * that do not accept new buffers while the acquisition engine is running. * Also when working at very high frame rates, pre-queuing some buffer before @@ -379,24 +402,6 @@ enum TBayerConversionMode // uint_type bcmAdaptiveHomogeneityDirected }; -//----------------------------------------------------------------------------- -/// \brief Defines valid Bayer formats. -/// \ingroup CommonInterface -enum TBayerMosaicParity -//----------------------------------------------------------------------------- -{ - /// \brief It is not known whether the buffer or image contains raw Bayer data or the buffer or image does NOT contain raw Bayer data. - bmpUndefined = -1, - /// \brief The buffer or image starts with a green-red line starting with a green pixel. - bmpGR, - /// \brief The buffer or image starts with a green-red line starting with a red pixel. - bmpRG, - /// \brief The buffer or image starts with a green-blue line starting with a blue pixel. - bmpBG, - /// \brief The buffer or image starts with a green-blue line starting with a green pixel. - bmpGB -}; - //----------------------------------------------------------------------------- /// \brief Defines valid results of a white balance calibration. /// \ingroup CommonInterface @@ -576,79 +581,6 @@ enum TBoolean bTrue = 1 }; -//----------------------------------------------------------------------------- -/// \brief Defines buffer part data types. -/** - * \since 2.20.0 - */ -/// \ingroup CommonInterface -enum TBufferPartDataType -//----------------------------------------------------------------------------- -{ - /// \brief The framework is not aware of the data type of the data in the provided buffer part - /** - * From the application perspective this can be handled as raw data. - */ - bpdtUnknown = 0, - /// \brief Color or monochrome (2D) image. - /** - * This part carries all the pixel data of given image (even if the image is represented by a single-plane pixel format). - */ - bpdt2DImage = 1, - /// \brief Single color plane of a planar (2D) image. - /** - * The data should be linked with the other color planes to get the complete image. The complete image consists of 2 planes. - * The planes of a given planar image must be placed as consecutive parts within the buffer. - */ - bpdt2DPlaneBiplanar = 2, - /// \brief Single color plane of a planar (2D) image. - /** - * The data should be linked with the other color planes to get the complete image. The complete image consists of 3 planes. - * The planes of a given planar image must be placed as consecutive parts within the buffer. - */ - bpdt2DPlaneTriplanar = 3, - /// \brief Single color plane of a planar (2D) image. - /** - * The data should be linked with the other color planes to get the complete image. The complete image consists of 4 planes. - * The planes of a given planar image must be placed as consecutive parts within the buffer. - */ - bpdt2DPlaneQuadplanar = 4, - /// \brief 3D image (pixel coordinates). - /** - * This part carries all the pixel data of given image (even if the image is represented by a single-plane pixel format, for example when transferring the depth map only). - */ - bpdt3DImage = 5, - /// \brief Single color plane of a planar (3D) image. - /** - * The data should be linked with the other color planes to get the complete image. The complete image consists of 2 planes. - * The planes of a given planar image must be placed as consecutive parts within the buffer. - */ - bpdt3DPlaneBiplanar = 6, - /// \brief Single color plane of a planar (3D) image. - /** - * The data should be linked with the other color planes to get the complete image. The complete image consists of 3 planes. - * The planes of a given planar image must be placed as consecutive parts within the buffer. - */ - bpdt3DPlaneTriplanar = 7, - /// \brief Single color plane of a planar (3D) image. - /** - * The data should be linked with the other color planes to get the complete image. The complete image consists of 4 planes. - * The planes of a given planar image must be placed as consecutive parts within the buffer. - */ - bpdt3DPlaneQuadplanar = 8, - /// \brief Confidence of the individual pixel values. - /** - * Expresses the level of validity of given pixel values. Confidence map is always used together with one or more additional - * image-based parts matching 1:1 dimension-wise. Each value in the confidence map expresses level of validity of the image pixel at - * matching position. - */ - bpdtConfidenceMap = 9, - /// \brief JPEG image data. - bpdtJPEG = 1000, - /// \brief JPEG 2000 image data. - bpdtJPEG2000 -}; - //----------------------------------------------------------------------------- /// \brief Defines the camera Aoi modes. /// \ingroup DeviceSpecificInterface @@ -671,7 +603,7 @@ enum TCameraAoiMode * might be useful (e.g. when taking image in a very dark surrounding or at night * where almost no color information will be contained in the image anyway thus * resulting in useful images again). Therefore this feature has deliberately - * left available. \n \n + * left available. \n * \image html Binning_modes.png */ /// \ingroup DeviceSpecificInterface @@ -720,22 +652,57 @@ enum TCameraBinningMode // flags_attribute, uint_type #ifndef IGNORE_MVGRABBER_SPECIFIC_DOCUMENTATION //----------------------------------------------------------------------------- -/// \brief Defines the data format the camera is sending. +/// \brief Defines the data format the camera is sending (deprecated. +/** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ /// \ingroup CommonInterface enum TCameraDataFormat //----------------------------------------------------------------------------- { /// \brief This is an unknown type. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ cdfUnknown = 0, /// \brief This is a mono data format. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ cdfMono, /// \brief This is a Bayer format. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ cdfBayer, /// \brief This is a Bayer Packed format. For each object line there is a red and a blue raw line to calculate the resulting color line. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ cdfBayerPacked, /// \brief This is a RGB format. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ cdfRGB, /// \brief This is a YUV format. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ cdfYUV }; #endif // #ifndef IGNORE_MVGRABBER_SPECIFIC_DOCUMENTATION @@ -774,35 +741,85 @@ enum TCameraExposeMode #ifndef IGNORE_MVGRABBER_SPECIFIC_DOCUMENTATION //----------------------------------------------------------------------------- -/// \brief Some grabbers are able to get the video signal and sync signals ( HD-IN, VD-IN ) on separate lines. The user can define this for non standard cameras. +/// \brief Some grabbers are able to get the video signal and sync signals ( HD-IN, VD-IN ) on separate lines. The user can define this for non standard cameras (deprecated. +/** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ /// \ingroup DeviceSpecificInterface enum TCameraExternalSyncEdge //----------------------------------------------------------------------------- { // \brief The sync signal is expected within the video signal. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ ceseNo = 0, // \brief The falling edge of external sync signal is used ( HD-IN,VD-IN ) + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ ceseFallingEdge = 1, // \brief The rising edge of external sync signal is used ( HD-IN,VD-IN ) + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ ceseRisingEdge = 2 }; //----------------------------------------------------------------------------- -/// \brief Some grabbers are able to get the video signal and the sync signal on different input pins. The user can select this for non standard cameras. +/// \brief Some grabbers are able to get the video signal and the sync signal on different input pins. The user can select this for non standard cameras (deprecated. +/** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ /// \ingroup DeviceSpecificInterface enum TCameraExternalSyncOutput //----------------------------------------------------------------------------- { - // \brief The sync signal is expected on the selected video channel. - // If RGB is used the sync signal is expected on the 'green' channel ( SyncOnGreen ) + /// \brief The sync signal is expected on the selected video channel. + /// If RGB is used the sync signal is expected on the 'green' channel ( SyncOnGreen ) + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ cesoAuto = 0, - // \brief The sync signal is expected on the first ('red') video channel ( mvTITAN-RGB only ) + /// \brief The sync signal is expected on the first ('red') video channel ( mvTITAN-RGB only ) + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ cesoRed = 1, - // \brief The sync signal is expected on the second ('green') video channel ( mvTITAN-RGB only ) + /// \brief The sync signal is expected on the second ('green') video channel ( mvTITAN-RGB only ) + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ cesoGreen = 2, - // \brief The sync signal is expected on the third ('blue') video channel ( mvTITAN-RGB only ) + /// \brief The sync signal is expected on the third ('blue') video channel ( mvTITAN-RGB only ) + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ cesoBlue = 3, - // \brief The sync signal is expected on the fourth ('extern') video channel ( mvTITAN-RGB only ) + /// \brief The sync signal is expected on the fourth ('extern') video channel ( mvTITAN-RGB only ) + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ cesoExtern = 4 }; #endif // #ifndef IGNORE_MVGRABBER_SPECIFIC_DOCUMENTATION @@ -839,7 +856,7 @@ enum TCameraFlashType cftRollingShutterFlash = 1, /// \brief Flash signal is derived from the sensors internal VSync (Frame-sync. signal). /** - * The specific timing of this signal is hardware dependent. The signal can be used to synchronise + * The specific timing of this signal is hardware dependent. The signal can be used to synchronize * a master camera with a flash or another camera with a rolling shutter sensor. */ cftVSync = 2 @@ -869,23 +886,42 @@ enum TCameraHDRMode cHDRmUser = 100 }; +#ifndef IGNORE_MVGRABBER_SPECIFIC_DOCUMENTATION //----------------------------------------------------------------------------- -/// \brief Defines how the camera transmits its video signal. +/// \brief Defines how the camera transmits its video signal (deprecated. +/** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ /// \ingroup DeviceSpecificInterface enum TCameraInterlacedType //----------------------------------------------------------------------------- { /// \brief The video signal is transmitted non interlaced, meaning that a complete image is transferred without interruption. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ citNone, /// \brief The video signal is transferred interlaced. /** - * Here the camera transmits the video signal in two consecutive frames that form a complete - * image. The first frame contains all the even lines (0, 2, 4, ... ) of the image, while - * the second frame contains all odd lines of the image. - */ + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + * + * Here the camera transmits the video signal in two consecutive frames that form a complete + * image. The first frame contains all the even lines (0, 2, 4, ... ) of the image, while + * the second frame contains all odd lines of the image. + */ citInterlaced, /// \brief The video signal is transferred interlaced with the two frames in reversed order. /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + * * Here the camera transmits the video signal in two consecutive frames that form a complete * image. The first frame contains all the odd lines (0, 2, 4, ... ) of the image, while * the second frame contains all even lines of the image. @@ -893,54 +929,148 @@ enum TCameraInterlacedType citInvertedInterlaced }; -#ifndef IGNORE_MVGRABBER_SPECIFIC_DOCUMENTATION //----------------------------------------------------------------------------- -/// \brief Defines how the camera transmits the DVAL signal defined in the CameraLink® standard. +/// \brief Defines how the camera transmits the DVAL signal defined in the CameraLink® standard (deprecated. +/** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ /// \ingroup DeviceSpecificInterface enum TCameraLinkDataValidMode //----------------------------------------------------------------------------- { /// \brief The camera transmits a data valid (DVAL) signal, that should be evaluated by the frame grabber. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ cldvmActive = 0, /// \brief The camera does not transmit a data valid (DVAL) signal, that should be evaluated by the frame grabber. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ cldvmInactive }; //----------------------------------------------------------------------------- -/// \brief Defines valid ways a camera can offer image data to a capture device. +/// \brief Defines valid ways a camera can offer image data to a capture device (deprecated. +/** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ /// \ingroup CommonInterface enum TCameraOutput //----------------------------------------------------------------------------- { /// \brief Specifies an undefined output. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ coUndefined = -1, /// \brief Auto mode. Here the capture device tries to guess how the data is transmitted. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ coAuto = 0, /// \brief The camera will offer an analogue composite video signal. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ coComposite = 1, /// \brief The camera will offer CameraLink® Base compliant image data. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ coBase = 2, /// \brief The camera will offer digital image data. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ coDigital = 3, /// \brief The camera will offer an analogue SVideo signal. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ coSVideo = 4, /// \brief The camera will offer CameraLink® Medium compliant image data. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ coMedium = 5, /// \brief The camera will offer an analogue RGB signal. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ coRGB = 6, /// \brief Two cameras will offer two synchronous analogue signals. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ co2xComposite = 7, /// \brief Three cameras will offer three synchronous analogue signals. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ co3xComposite = 8, /// \brief Four cameras will offer four synchronous analogue signals. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ co4xComposite = 9, /// \brief The camera will offer CameraLink® Full compliant image data. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ coFull = 10, /// \brief The camera will offer serial digital interface(SDI) SD signal. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ coSDSDI = 11, /// \brief The camera will offer serial digital interface(SDI) HD signal. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ coHDSDI = 12, /// \brief The camera will offer serial digital interface(SDI) 3G signal. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ co3GSDI = 13 }; #endif // #ifndef IGNORE_MVGRABBER_SPECIFIC_DOCUMENTATION @@ -1005,26 +1135,71 @@ enum TCameraScanMode #ifndef IGNORE_MVGRABBER_SPECIFIC_DOCUMENTATION //----------------------------------------------------------------------------- -/// \brief Defines valid baud rates for serial port communication between frame grabber and camera. +/// \brief Defines valid baud rates for serial port communication between frame grabber and camera (deprecated. +/** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ /// \ingroup DeviceSpecificInterface enum TCameraSerialPortBaudRate //----------------------------------------------------------------------------- { /// \brief 9600 baud + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ cspbr9600 = 9600, /// \brief 19200 baud + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ cspbr19200 = 19200, /// \brief 38400 baud + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ cspbr38400 = 38400, /// \brief 57600 baud + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ cspbr57600 = 57600, /// \brief 115200 baud + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ cspbr115200 = 115200, /// \brief 230400 baud + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ cspbr230400 = 230400, /// \brief 460800 baud + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ cspbr460800 = 460800, /// \brief 921600 baud + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ cspbr921600 = 921600 }; #endif // #ifndef IGNORE_MVGRABBER_SPECIFIC_DOCUMENTATION @@ -1423,17 +1598,31 @@ enum TChannelSplitMode #ifndef IGNORE_MVGRABBER_SPECIFIC_DOCUMENTATION //----------------------------------------------------------------------------- -/// \brief Clamp signal means, that an AC coupled video signal is clamped on the porch to get a signal transfer with less noise and independent from the d.c. voltage portion. +/// \brief Clamp signal means, that an AC coupled video signal is clamped on the porch to get a signal transfer with less noise and independent from the d.c. voltage portion (deprecated. /** - * The clamp pulse width is always 0.5 micro sec. + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + * + * The clamp pulse width is always 0.5 micro sec. */ /// \ingroup DeviceSpecificInterface enum TClampMode //----------------------------------------------------------------------------- { - /// \brief Clamp pulse starts at 80 % of \b ActiveVideoAoi/X . + /// \brief Clamp pulse starts at 80 % of ActiveVideoAoi/X. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ ecmAuto, /// \brief The user can set the clamp start time in micro sec. after the falling edge of the video signals' VSync. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ ecmUser }; #endif // IGNORE_MVGRABBER_SPECIFIC_DOCUMENTATION @@ -1763,7 +1952,7 @@ enum TDeviceAdvancedOptions // flags_attribute, uint_type }; //----------------------------------------------------------------------------- -/// \brief Defines the way the packet size auto negotiation is handled for GigE Vision devices. +/// \brief Defines the way the packet size auto negotiation is handled for GigE Vision™ devices. /** * All modes will eventually result in the optimal packet value. However depending on the network * setup one method might be faster than another. @@ -1867,84 +2056,31 @@ enum TDeviceDigitalOutputMode ddomTemperatureOutOfRange }; -#if !defined(WRAP_ANY) && !defined(BUILD_FOR_JAVA) // don't wrap deprecated stuff -//----------------------------------------------------------------------------- -/// \brief Defines valid event states. -/** - * A driver might offer to inform the user about certain events that occur - * at runtime. This e.g. might be unplugging the device if it's PnP compliant or - * the detection of a digital input change. - */ -/// \ingroup CommonInterface -enum TDeviceEventMode -//----------------------------------------------------------------------------- -{ - /// \brief This event won't be signaled in this state even if the underlying event has been noticed by the device driver. - demIgnore, - /// \brief This event will be notified whenever the underlying event has been detected by the device driver. - demNotify -}; - +#ifndef IGNORE_MVGRABBER_SPECIFIC_DOCUMENTATION //----------------------------------------------------------------------------- -/// \brief Defines valid device event types. +/// \brief Defines acquisition start event if using pulse sequences (deprecated. /** - * \note - * Not every device will support every event. - * - * \deprecated - * This enumeration belongs to a set of functions and data types that have been declared - * deprecated and will be removed in future versions of this interface. - * A more flexible way of getting informed about changes in driver features - * has been added to the interface and should be used instead. Look for an example - * called \a Callback to find out how to use it. + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! */ -/// \ingroup CommonInterface -enum TDeviceEventType // flags_attribute, uint_type -//----------------------------------------------------------------------------- -{ - /// \brief A dummy constant to specify \a no event where an event type must be specified. - detNone = 0, - /// \brief An event of this type will be signaled (if desired) each time a hotplug compliant device recognized by the mvIMPACT acquire device manager has been connected to the system(deprecated). - /** - * \deprecated - * This event has been declared deprecated. An application should register a callback - * to the state property instead. - */ - detPnPArrival = 0x1, - /// \brief An event of this type will be signaled (if desired) each time a hotplug compliant device recognized by the mvIMPACT acquire device manager has been disconnected to the system(deprecated). - /** - * \deprecated - * This event has been declared deprecated. An application should register a callback - * to the state property instead. - */ - detPnPRemoval = 0x2, - /// \brief An event of this type will be signaled (if desired) each time the start of a new image has been detected by the device. - /** - * \note - * This is currently only supported by mvTITAN/mvGAMMA devices. - */ - detFrameStart = 0x4, - /// \brief An event of this type will be signaled (if desired) each time the histogram is calculated. - /** - * \note - * This is currently only supported by OEM devices. - */ - detHistogramReady = 0x8, - /// \brief A combination of all event types, which can be used as a mask. - detAll = detPnPArrival | detPnPRemoval | detFrameStart | detHistogramReady -}; -#endif // #if !defined(WRAP_ANY) && !defined(BUILD_FOR_JAVA) // don't wrap deprecated stuff - -#ifndef IGNORE_MVGRABBER_SPECIFIC_DOCUMENTATION -//----------------------------------------------------------------------------- -/// \brief Defines acquisition start event if using pulse sequences. /// \ingroup DeviceSpecificInterface enum TDeviceImageTrigger //----------------------------------------------------------------------------- { /// \brief Acquisition starts with trigger event as fast as possible. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ ditImmediately = 0, /// \brief Acquisition starts after all defined signals have been generated on the digital outputs. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ ditAfterDigOutSignals }; #endif // IGNORE_MVGRABBER_SPECIFIC_DOCUMENTATION @@ -1961,7 +2097,7 @@ enum TDeviceImageTrigger enum TDeviceInterfaceLayout //----------------------------------------------------------------------------- { - /// \brief A device specific interface shall be used(deprecated for all GenICam compliant devices). + /// \brief A device specific interface shall be used(deprecated for all GenICam™ compliant devices). /** * For most devices supported by this SDK this will be the only interface layout * available. In this interface layout also most of the features will have @@ -1978,7 +2114,7 @@ enum TDeviceInterfaceLayout * this request if the current settings differ from the settings that shall be used for this request. * * \deprecated - * This interface layout has been declared deprecated for GenICam compliant devices(mvBlueCOUGAR-S, + * This interface layout has been declared deprecated for GenICam™ compliant devices(mvBlueCOUGAR-S, * mvBlueCOUGAR-X and mvBlueCOUGAR-XD). For these products please use mvIMPACT::acquire::dilGenICam * instead. Newer devices like the mvBlueFOX3 will not support this interface layout at all. * @@ -1990,7 +2126,7 @@ enum TDeviceInterfaceLayout * This interface layout will be available when a device is * (or claims to be) compliant with a the GenICam™ standard, thus provides a GenICam™ * compliant XML interface description. This also applies for third party devices, which can - * be used with the GenICam GenTL Producer of mvIMPACT Acquire. + * be used with the GenICam™ GenTL Producer of Impact Acquire. * * In this interface layout property value changes will always have immediate effect, thus when * changing the exposure time directly \b after requesting a buffer this buffer might be captured @@ -2279,20 +2415,39 @@ enum TDigitalIOMeasurementSource #ifndef IGNORE_MVGRABBER_SPECIFIC_DOCUMENTATION //----------------------------------------------------------------------------- -/// \brief Defines valid ways to create signals on a digital output. +/// \brief Defines valid ways to create signals on a digital output (deprecated. +/** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ /// \ingroup DeviceSpecificInterface enum TDigitalOutputControlMode //----------------------------------------------------------------------------- { /// \brief The digital output signal is generated by the on-board processor. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ docmSoftware = 0, /// \brief The digital output signal is generated by a Real Time Controller that is part of the used hardware device. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ docmRTC }; //----------------------------------------------------------------------------- -/// \brief Defines valid digital source signal constants that can be used to configure a devices behaviour in certain digital I/O related modes. +/// \brief Defines valid digital source signal constants that can be used to configure a devices behaviour in certain digital I/O related modes (deprecated. /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + * * As these parameters are highly device dependent, no direct name like * \a dsTriggerJ8/12 are defined here. However when the translation dictionary for * a property with this type is queried, the string representation for the @@ -2303,38 +2458,123 @@ enum TDigitalSignal // flags_attribute, uint_type //----------------------------------------------------------------------------- { /// \brief A dummy value to delete a mask or signal configuration. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ dsNone = 0x00000000, /// \brief A constant for digital signal 1. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ dsSignal1 = 0x00000001, /// \brief A constant for digital signal 2. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ dsSignal2 = 0x00000002, /// \brief A constant for digital signal 3. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ dsSignal3 = 0x00000004, /// \brief A constant for digital signal 4. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ dsSignal4 = 0x00000008, /// \brief A constant for digital signal 5. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ dsSignal5 = 0x00000010, /// \brief A constant for digital signal 6. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ dsSignal6 = 0x00000020, /// \brief A constant for digital signal 7. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ dsSignal7 = 0x00000040, /// \brief A constant for digital signal 8. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ dsSignal8 = 0x00000080, /// \brief A constant for digital signal 9. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ dsSignal9 = 0x00000100, /// \brief A constant for digital signal 10. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ dsSignal10 = 0x00000200, /// \brief A constant for digital signal 11. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ dsSignal11 = 0x00000400, /// \brief A constant for digital signal 12. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ dsSignal12 = 0x00000800, /// \brief A constant for digital signal 13. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ dsSignal13 = 0x00001000, /// \brief A constant for digital signal 14. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ dsSignal14 = 0x00002000, /// \brief A constant for digital signal 15. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ dsSignal15 = 0x00004000, /// \brief A constant for digital signal 16. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ dsSignal16 = 0x00008000 }; #endif // #ifndef IGNORE_MVGRABBER_SPECIFIC_DOCUMENTATION @@ -2359,15 +2599,11 @@ enum TDMR_ERROR // no_property_type * This error occurs either if an invalid device ID has been passed to the * device manager or if the caller tried to close a device which currently * isn't initialized. - * - * \n \b [-2100] */ DMR_DEV_NOT_FOUND = -2100, /// \brief The device manager couldn't be initialized. /** * This is an internal error. - * - * \n \b [-2101] */ DMR_INIT_FAILED = -2101, /// \brief The device is already in use. @@ -2375,49 +2611,36 @@ enum TDMR_ERROR // no_property_type * This error e.g. will occur if this or another process has initialized this * device already and an application tries to open the device once more or if a * certain resource is available only once but shall be used twice. - * - * \n \b [-2102] */ DMR_DRV_ALREADY_IN_USE = -2102, /// \brief The specified device couldn't be initialized. - /** - * \n \b [-2103] - */ DMR_DEV_CANNOT_OPEN = -2103, /// \brief The device manager or another module hasn't been initialized properly. /** * This error occurs if the user tries e.g. to close the device manager without * having initialized it before or if a library used internally or a module or device associated with that library has not been initialized properly or if - * - * \n \b [-2104] */ DMR_NOT_INITIALIZED = -2104, /// \brief A device could not be initialized. /** * In this case the log-file will contain detailed information about the source of the * problem. - * - * \n \b [-2105] */ DMR_DRV_CANNOT_OPEN = -2105, /// \brief The devices request queue is empty. /** * This error e.g. occurs if the user waits for an image request to become available at a - * result queue without having send an image request to the device before. + * result queue without having send an image request to the device before. \n * * It might also arise when trying to trigger an image with a software trigger mechanism * before the acquisition engine has been completely started. In this case a small delay and * then again calling the software trigger function will succeed. - * - * \n \b [-2106] */ DMR_DEV_REQUEST_QUEUE_EMPTY = -2106, /// \brief A request object couldn't be created. /** * The creation of a request object failed. This might e.g. happen, if the system * runs extremely low on memory. - * - * \n \b [-2107] */ DMR_DEV_REQUEST_CREATION_FAILED = -2107, /// \brief An invalid parameter has been passed to a function. @@ -2425,8 +2648,6 @@ enum TDMR_ERROR // no_property_type * This might e.g. happen if a function requiring a pointer to a structure has been passed * an unassigned pointer or if a value has been passed, that is either too large or too small in * that context. - * - * \n \b [-2108] */ DMR_INVALID_PARAMETER = -2108, /// \brief One or more symbols needed in a detected driver library couldn't be resolved. @@ -2435,43 +2656,28 @@ enum TDMR_ERROR // no_property_type * code as a result of a call to an API function. However when the user tries to get access * to an IMPACT buffer type while the needed IMPACT Base libraries are not installed * on the target system this error code also might be returned to the user. - * - * \n \b [-2109] */ DMR_EXPORTED_SYMBOL_NOT_FOUND = -2109, /// \brief An unknown error occurred while processing a user called driver function. - /** - * \n \b [-2110] - */ DEV_UNKNOWN_ERROR = -2110, /// \brief A driver function has been called with an invalid device handle. - /** - * \n \b [-2111] - */ DEV_HANDLE_INVALID = -2111, /// \brief A driver function has been called but one or more of the input parameters are invalid. /** - * There are several possible reasons for this error: - * - an unassigned pointer has been passed to a function, that requires a valid pointer - * - one or more of the passed parameters are of an incorrect type - * - one or more parameters contain an invalid value (e.g. a filename that points to a file that can't - * be found, a value, that is larger or smaller than the allowed values. - * - * \n \b [-2112] + * There are several possible reasons for this error: \n + * • an unassigned pointer has been passed to a function, that requires a valid pointer. \n + * • one or more of the passed parameters are of an incorrect type. \n + * • one or more parameters contain an invalid value (e.g. a filename that points to a file that can't be found, a value, that is larger or smaller than the allowed values. \n + * • within the current setup one or more parameters impose restrictions on the requested operation that don't allow its execution. \n */ DEV_INPUT_PARAM_INVALID = -2112, /// \brief A function has been called with an invalid number of input parameters. - /** - * \n \b [-2113] - */ DEV_WRONG_INPUT_PARAM_COUNT = -2113, /// \brief The creation of a setting failed. /** * This can either happen, when a setting with the same name as the one the user * tried to create already exists or if the system can't allocate memory for the * new setting. - * - * \n \b [-2114] */ DEV_CREATE_SETTING_FAILED = -2114, /// \brief The unlock for a mvIMPACT::acquire::Request object failed. @@ -2481,16 +2687,12 @@ enum TDMR_ERROR // no_property_type * user already or this request has never been locked as the request so far has not been used to * capture image data into its buffer. Another reason for this error might be that the user tries to * unlock a request that is currently processed by the device driver. - * - * \n \b [-2115] */ DEV_REQUEST_CANT_BE_UNLOCKED = -2115, /// \brief The number for the mvIMPACT::acquire::Request object is invalid. /** * The max. number for a mvIMPACT::acquire::Request object is * the value of the property \a RequestCount in the mvIMPACT::acquire::SystemSettings list - 1. - * - * \n \b [-2116] */ DEV_INVALID_REQUEST_NUMBER = -2116, /// \brief A Request that hasn't been unlocked has been passed back to the driver. @@ -2498,91 +2700,55 @@ enum TDMR_ERROR // no_property_type * This error might occur if the user requested an image from the driver but hasn't * unlocked the mvIMPACT::acquire::Request that will be used for this new * image. - * - * \n \b [-2117] */ DEV_LOCKED_REQUEST_IN_QUEUE = -2117, /// \brief The user requested a new image, but no free mvIMPACT::acquire::Request object is available to process this request. - /** - * \n \b [-2118] - */ DEV_NO_FREE_REQUEST_AVAILABLE = -2118, /// \brief The wait for a request failed. /** - * This might have several reasons: - * - * • the user waited for an image, but no image has been requested before. \n - * • the user waited for a requested image, but the image is still not ready(e.g. because of - * a short timeout and a long exposure time). \n - * • a triggered image has been requested but no trigger signal has been detected within the - * wait period. \n - * • a plug and play device(e.g. an USB device) has been unplugged and therefore can't deliver - * images anymore. In this case the \a 'state' property should be checked to find out if the - * device is still present or not. \n + * This might have several reasons: \n * - * \n \b [-2119] + * • The user waited for an image, but no image has been requested before. \n + * • The user waited for a requested image, but the image is still not ready(e.g. because of a short timeout and a long exposure time). \n + * • A triggered image has been requested but no trigger signal has been detected within the wait period. \n + * • A plug and play device(e.g. an USB device) has been unplugged and therefore can't deliver images anymore. In this case the \a 'state' property should be checked to find out if the device is still present or not. */ DEV_WAIT_FOR_REQUEST_FAILED = -2119, /// \brief The user tried to get/set a parameter, which is not supported by this device. - /** - * \n \b [-2120] - */ DEV_UNSUPPORTED_PARAMETER = -2120, /// \brief The requested real time controller is not available for this device. - /** - * \n \b [-2121] - */ DEV_INVALID_RTC_NUMBER = -2121, /// \brief Some kind of internal error occurred. /** * More information can be found in the *.log-file or the debug output. - * - * \n \b [-2122] */ DMR_INTERNAL_ERROR = -2122, /// \brief The user allocated input buffer is too small to accommodate the result. - /** - * \n \b [-2123] - */ DMR_INPUT_BUFFER_TOO_SMALL = -2123, /// \brief Some kind of internal error occurred in the device driver. /** * More information can be found in the *.log-file or the debug output. - * - * \n \b [-2124] */ DEV_INTERNAL_ERROR = -2124, /// \brief One or more needed libraries are not installed on the system. - /** - * \n \b [-2125] - */ DMR_LIBRARY_NOT_FOUND = -2125, /// \brief A called function or accessed feature is not available for this device. - /** - * \n \b [-2126] - */ DMR_FUNCTION_NOT_IMPLEMENTED = -2126, /// \brief The feature in question is (currently) not available for this device or driver. /** * This might be because another feature currently blocks the one in question from being accessible. * More information can be found in the *.log-file or the debug output. - * - * \n \b [-2127] */ DMR_FEATURE_NOT_AVAILABLE = -2127, /// \brief The user is not permitted to perform the requested operation. /** * This e.g. might happen if the user tried to delete user data without specifying the * required password. - * - * \n \b [-2128] */ DMR_EXECUTION_PROHIBITED = -2128, /// \brief The specified file can't be found. /** * This might e.g. happen if the current working directory doesn't contain the file specified. - * - * \n \b [-2129] */ DMR_FILE_NOT_FOUND = -2129, /// \brief The licence doesn't match the device it has been assigned to. @@ -2590,22 +2756,15 @@ enum TDMR_ERROR // no_property_type * When e.g. upgrading a device feature each licence file is bound to a certain device. If the * device this file has been assigned to has a different serial number then the one used * to create the licence this error will occur. - * - * \n \b [-2130] */ DMR_INVALID_LICENCE = -2130, /// \brief There is no sensor found or the found sensor type is wrong or not supported. - /** - * \n \b [-2131] - */ DEV_SENSOR_TYPE_ERROR = -2131, /// \brief A function call was associated with a camera description, that is invalid. /** * One possible reason might be, that the camera description has been deleted(driver closed?). * * \since 1.5.0 - * - * \n \b [-2132] */ DMR_CAMERA_DESCRIPTION_INVALID = -2132, /// \brief A suitable driver library to work with the device manager has been detected, but it is too old to work with this version of the mvDeviceManager library. @@ -2613,15 +2772,13 @@ enum TDMR_ERROR // no_property_type * This might happen if two different drivers have been installed on the target system and * one introduces a newer version of the device manager that is not compatible with the older * driver installed on the system. In this case this error message will be written into the - * log-file together with the name of the library that is considered to be too old. + * log-file together with the name of the library that is considered to be too old. \n * - * The latest drivers will always be available online under www.matrix-vision.de. There + * The latest drivers will always be available online under https://www.balluff.com. There * will always be an updated version of the library considered to be too old for download from * here. * * \since 1.6.6 - * - * \n \b [-2133] */ DMR_NEWER_LIBRARY_REQUIRED = -2133, /// \brief A general timeout occurred. @@ -2632,8 +2789,6 @@ enum TDMR_ERROR // no_property_type * More information can be found in the *.log-file or the debug output. * * \since 1.7.2 - * - * \n \b [-2134] */ DMR_TIMEOUT = -2134, /// \brief A wait operation has been aborted. @@ -2643,8 +2798,6 @@ enum TDMR_ERROR // no_property_type * terminated in an unusual wait, mvIMPACT::acquire::DMR_WAIT_ABANDONED will be returned then. * * \since 1.7.2 - * - * \n \b [-2135] */ DMR_WAIT_ABANDONED = -2135, /// \brief The execution of a method object or reading/writing to a feature failed. @@ -2652,8 +2805,6 @@ enum TDMR_ERROR // no_property_type * More information can be found in the log-file. * * \since 1.9.0 - * - * \n \b [-2136] */ DMR_EXECUTION_FAILED = -2136, /// \brief This request is currently used by the driver @@ -2662,16 +2813,12 @@ enum TDMR_ERROR // no_property_type * corresponding image request function. * * \since 1.10.31 - * - * \n \b [-2137] */ DEV_REQUEST_ALREADY_IN_USE = -2137, /// \brief A request has been configured to use a user supplied buffer, but the buffer pointer associated with the request is invalid. /** * * \since 1.10.31 - * - * \n \b [-2138] */ DEV_REQUEST_BUFFER_INVALID = -2138, /// \brief A request has been configured to use a user supplied buffer, but the buffer pointer associated with the request has an incorrect alignment. @@ -2680,19 +2827,20 @@ enum TDMR_ERROR // no_property_type * capture data into this buffer must follow these alignment constraints * * \since 1.10.31 - * - * \n \b [-2139] */ DEV_REQUEST_BUFFER_MISALIGNED = -2139, /// \brief The requested access to a device could not be granted. /** - * This might e.g. happen if an application tries to access a device exclusively that is already open in another - * process. This could also happen if a network device has already been opened with control access from another system - * and the current system also tries to establish control access to the device. + * There are multiple reasons for this error code. Detailed information can be found in the *.log-file. * - * \since 1.10.39 + * POSSIBLE CAUSES: * - * \n \b [-2140] + * • an application tries to access a device exclusively that is already open in another process \n + * • a network device has already been opened with control access from another system and the current system also tries to establish control access to the device \n + * • an application tried to execute a function that is currently not available \n + * • an application tries to write to a read-only location. + * + * \since 1.10.39 */ DEV_ACCESS_DENIED = -2140, /// \brief A pre-load condition for loading a device driver failed. @@ -2704,57 +2852,47 @@ enum TDMR_ERROR // no_property_type * to the selected log outputs. * * \since 1.10.52 - * - * \n \b [-2141] */ DMR_PRELOAD_CHECK_FAILED = -2141, /// \brief One or more of the camera descriptions parameters are invalid for the grabber it is used with. /** - * There are multiple reasons for this error code. Detailed information can be found in the *.log-file. + * There are multiple reasons for this error code. Detailed information can be found in the *.log-file. \n * - * POSSIBLE CAUSES: + * POSSIBLE CAUSES: \n * * • The TapsXGeometry or TapsYGeometry parameter of the selected camera description cannot be used with a user defined AOI. \n * • A scan standard has been selected, that is not supported by this device. \n * • An invalid scan rate has been selected. \n - * • ... \n + * • ... * * This error code will be returned by frame grabbers only. * * \since 1.10.57 - * - * \n \b [-2142] */ DMR_CAMERA_DESCRIPTION_INVALID_PARAMETER = -2142, /// \brief A general error returned whenever there has been a problem with accessing a file. /** * There can be multiple reasons for this error and a detailed error message will be sent to the log-output - * whenever this error code is returned. + * whenever this error code is returned. \n * - * POSSIBLE CAUSES: + * POSSIBLE CAUSES: \n * - * • The driver tried to modify a file, for which it has no write access \n - * • The driver tried to read from a file, for which it has no read access \n - * • ... \n + * • The driver tried to modify a file, for which it has no write access. \n + * • The driver tried to read from a file, for which it has no read access. \n + * • ... * * \since 1.10.87 - * - * \n \b [-2143] */ DMR_FILE_ACCESS_ERROR = -2143, /// \brief An error returned when the user application attempts to operate on an invalid queue. /** * \since 1.11.0 - * - * \n \b [-2144] */ DMR_INVALID_QUEUE_SELECTION = -2144, /// \brief An error returned when the user application attempts to start the acquisition engine at a /// time, where it is already running. /** * \since 2.5.3 - * - * \n \b [-2145] */ DMR_ACQUISITION_ENGINE_BUSY = -2145, /// \brief An error returned when the user application attempts to perform any operation that currently for any reason cannot be started because something else already running. @@ -2762,8 +2900,6 @@ enum TDMR_ERROR // no_property_type * The log-output will provide additional information. * * \since 2.32.0 - * - * \n \b [-2146] */ DMR_BUSY = -2146, /// \brief An error returned when for any reason internal resources (memory, handles, ...) cannot be allocated. @@ -2771,8 +2907,6 @@ enum TDMR_ERROR // no_property_type * The log-output will provide additional information. * * \since 2.32.0 - * - * \n \b [-2147] */ DMR_OUT_OF_MEMORY = -2147, // If new error codes must be added this happens HERE! @@ -2784,22 +2918,34 @@ enum TDMR_ERROR // no_property_type DMR_LAST_ASSIGNED_ERROR_CODE = DMR_PSEUDO_LAST_ASSIGNED_ERROR_CODE - 2, #endif // #if !defined(DOXYGEN_SHOULD_SKIP_THIS) && !defined(WRAP_ANY) /// \brief Defines the last valid error code value for device and device manager related errors. - /** - * \n \b [-2199] - */ DMR_LAST_VALID_ERROR_CODE = -2199 }; #ifndef IGNORE_MVGRABBER_SPECIFIC_DOCUMENTATION //----------------------------------------------------------------------------- -/// \brief The fieldgate is used to detect the field ( odd or even ) for interlaced video signals. +/// \brief The field gate is used to detect the field ( odd or even ) for interlaced video signals (deprecated. +/** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ /// \ingroup DeviceSpecificInterface enum TFieldGateMode //----------------------------------------------------------------------------- { - /// \brief Fieldgate starts at 1/3 of a line and ends at 2/3 of a line. + /// \brief Field gate starts at 1/3 of a line and ends at 2/3 of a line. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ efmAuto, /// \brief FieldGateStart and FieldGateWidth can be set in pixels. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ efmUser }; #endif // IGNORE_MVGRABBER_SPECIFIC_DOCUMENTATION @@ -2862,6 +3008,8 @@ enum TFirmwareUpdateStep fusUpdatingBootProgrammer = 20, /// \brief Uploading firmware into device memory. fusUploadingFirmware = 25, + /// \brief An external hard reset is required. + fusHardResetRequired = 89, /// \brief Rebooting the device. fusRebootingDevice = 90, /// \brief Loading user sets of the device. @@ -2969,560 +3117,9 @@ enum TI2COperationStatus I2CosNotEnoughData }; -//----------------------------------------------------------------------------- -/// \brief Valid image buffer pixel formats. -/// \ingroup CommonInterface -enum TImageBufferPixelFormat -//----------------------------------------------------------------------------- -{ - /// \brief An unprocessed block of data. - ibpfRaw = 0, - /// \brief A single channel 8 bit per pixel format. - ibpfMono8 = 1, - /// \brief A single channel 16 bit per pixel format. - ibpfMono16 = 2, - /// \brief A three channel RGB image with 32 bit per pixel containing one fill byte per pixel. - /** - * This is an interleaved pixel format suitable for most display functions. The data - * is stored pixel-wise. The memory layout of the pixel data is like this: - * - * \code - * 4 bytes 4 bytes etc. - * B(1) G(1) R(1) A(1) B(2) G(2) R(2) A(2) etc. - * ....................................... - * B(n) G(n) R(n) A(n) - * \endcode - * - * So the first byte in memory is the first pixels blue component. ImageBuffer::vpData will therefore - * point to B(1) when using a byte pointer. - * - * \sa \ref Channel_Split_PackedToPlanar - */ - ibpfRGBx888Packed = 3, - /// \brief This is a YUV422 packed image with 32 bit for a pair of pixels. - /** - * This format uses 2:1 horizontal downsampling, which means that the Y component is - * sampled at each pixel, while U(Cb) and V(Cr) components are sampled every 2 pixels in - * horizontal direction. If each component takes 8 bits, the pair of pixels requires 32 bits. - * - * Two consecutive pixels (32 bit, 0xaabbccdd ) contain 8 bit luminance of pixel 1(aa), - * 8 bit chrominance blue of pixel 1 and 2(bb), 8 bit luminance of pixel 2(cc) and finally 8 bit chrominance red of pixels 1 and 2(dd). - * - * Thus in memory the data will be stored like this: - * - * \code - * 4 bytes 4 bytes etc. - * Y(1) Cb(1,2) Y(2) Cr(1,2) Y(3) Cb(3,4) Y(4) Cr(3,4) etc. - * ..........................Y(n-1) Cb(n-1,n) Y(n) Cr(n-1,n) - * \endcode - * - * So the first byte in memory is the first pixels luminance component. ImageBuffer::vpData will therefore - * point to Y(1) when using a byte pointer. - * - * \sa \ref Channel_Split_PackedToPlanar - */ - ibpfYUV422Packed = 4, - /// \brief The image will be transferred as an RGB image in planar format. - /** - * This is a format best suitable for most image processing functions. - * The image will be converted into four planes(a plane for each color component and one - * alpha plane). - * - * \code - * R(1) R(2) R(3) R(4) etc. - * ................... - * .............. R(n) - * G(1) G(2) G(3) G(4) etc. - * ................... - * .............. G(n) - * B(1) B(2) B(3) B(4) etc. - * ................... - * .............. B(n) - * A(1) A(2) A(3) A(4) etc. - * ................... - * .............. A(n) - * \endcode - * - * So the first byte in memory is the first pixels red component. ImageBuffer::vpData will therefore - * point to R(1) when using a byte pointer. - */ - ibpfRGBx888Planar = 5, - /// \brief A single channel 10 bit per pixel format. - /** - * Each pixel in this format consumes 2 bytes of memory. The lower 10 bit of this 2 bytes will contain valid data. - */ - ibpfMono10 = 6, - /// \brief A single channel 12 bit per pixel format. - /** - * Each pixel in this format consumes 2 bytes of memory. The lower 12 bit of this 2 bytes will contain valid data. - */ - ibpfMono12 = 7, - /// \brief A single channel 14 bit per pixel format. - /** - * Each pixel in this format consumes 2 bytes of memory. The lower 14 bit of this 2 bytes will contain valid data. - */ - ibpfMono14 = 8, - /// \brief The image will be transferred as an RGB image with 24 bit per pixel. - /** - * This is an interleaved pixel format suitable for most display and processing functions. - * The data is stored pixel-wise: - * - * \code - * 3 bytes 3 bytes 3 bytes etc. - * B(1)G(1)R(1) B(2)G(2)R(2) B(3)G(3)R(3) etc. - * .......................................... - * ........................... B(n)G(n)R(n) - * \endcode - * - * So the first byte in memory is the first pixels blue component. ImageBuffer::vpData will therefore - * point to B(1) when using a byte pointer. - * - * \sa \ref Channel_Split_PackedToPlanar - */ - ibpfRGB888Packed = 9, - /// \brief This is a YUV444 planar image with 24 bit per pixels. - /** - * A planar YUV format. In memory the data will be stored plane-wise like this: - * - * \code - * Y(1) Y(2) Y(3) Y(4) etc. - * ............................ - * .............. Y(n-1) Y(n) - * Cr(1) Cr(2) Cr(3) Cr(4) etc. - * ............................ - * .............. Cr(n-1) Cr(n) - * Cb(1) Cb(2) Cb(3) Cb(4) etc. - * ............................ - * ............. Cb(n-1) Cb(n) - * \endcode - * - * So the first byte in memory is the first pixels luminance component. ImageBuffer::vpData will therefore - * point to Y(1) when using a byte pointer. - */ - ibpfYUV444Planar = 10, - /// \brief A single channel 32 bit per pixel format. - ibpfMono32 = 11, - /// \brief This is a YUV422 planar image with 32 bit for a pair of pixels. - /** - * This format uses 2:1 horizontal downsampling, which means that the Y component is - * sampled at each pixel, while U(Cb) and V(Cr) components are sampled every 2 pixels in - * horizontal direction. If each component takes 8 bits, the pair of pixels requires 32 bits. - * - * In memory the data will be stored like this: - * - * \code - * Y(1) Y(2) Y(3) Y(4) etc. - * ............................ - * .............. Y(n-1) Y(n) - * Cr(1,2) Cr(3,4) etc. - * ............... - * ....... Cr(n/2) - * Cb(1,2) Cb(3,4) etc. - * ............... - * ....... Cb(n/2) - * \endcode - * - * Thus the Y planes size in bytes equals the sum of the 2 other planes. - * - * So the first byte in memory is the first pixels luminance component. ImageBuffer::vpData will therefore - * point to Y(1) when using a byte pointer. - */ - ibpfYUV422Planar = 12, - /// \brief The image will be transferred as an RGB image with 30 bit of usable data per pixel. - /** - * This is an interleaved pixel format with 2 bytes per color component. - * The data is stored pixel-wise: - * - * \code - * 6 bytes 6 bytes 6 bytes etc. - * B(1)G(1)R(1) B(2)G(2)R(2) B(3)G(3)R(3) etc. - * .......................................... - * ........................... B(n)G(n)R(n) - * \endcode - * - * The data of each color component will be LSB aligned, thus the 6 MSB of each 16 bit will - * not contain valid data. - * - * So the first 2 bytes in memory are the first pixels blue component. ImageBuffer::vpData will therefore - * point to B(1) when using a 16 bit pointer. - * - * \sa \ref Channel_Split_PackedToPlanar - */ - ibpfRGB101010Packed = 13, - /// \brief The image will be transferred as an RGB image with 36 bit of usable data per pixel. - /** - * This is an interleaved pixel format with 2 bytes per color component. - * The data is stored pixel-wise: - * - * \code - * 6 bytes 6 bytes 6 bytes etc. - * B(1)G(1)R(1) B(2)G(2)R(2) B(3)G(3)R(3) etc. - * .......................................... - * ........................... B(n)G(n)R(n) - * \endcode - * - * The data of each color component will be LSB aligned, thus the 4 MSB of each 16 bit will - * not contain valid data. - * - * So the first 2 bytes in memory are the first pixels blue component. ImageBuffer::vpData will therefore - * point to B(1) when using a 16 bit pointer. - * - * \sa \ref Channel_Split_PackedToPlanar - */ - ibpfRGB121212Packed = 14, - /// \brief The image will be transferred as an RGB image with 42 bit of usable data per pixel. - /** - * This is an interleaved pixel format with 2 bytes per color component. - * The data is stored pixel-wise: - * - * \code - * 6 bytes 6 bytes 6 bytes etc. - * B(1)G(1)R(1) B(2)G(2)R(2) B(3)G(3)R(3) etc. - * .......................................... - * ........................... B(n)G(n)R(n) - * \endcode - * - * The data of each color component will be LSB aligned, thus the 2 MSB of each 16 bit will - * not contain valid data. - * - * So the first 2 bytes in memory are the first pixels blue component. ImageBuffer::vpData will therefore - * point to B(1) when using a 16 bit pointer. - * - * \sa \ref Channel_Split_PackedToPlanar - */ - ibpfRGB141414Packed = 15, - /// \brief The image will be transferred as an RGB image with 48 bit of usable data per pixel. - /** - * This is an interleaved pixel format with 2 bytes per color component. - * The data is stored pixel-wise: - * - * \code - * 6 bytes 6 bytes 6 bytes etc. - * B(1)G(1)R(1) B(2)G(2)R(2) B(3)G(3)R(3) etc. - * .......................................... - * ........................... B(n)G(n)R(n) - * \endcode - * - * The data of each color component will be LSB aligned. - * - * So the first 2 bytes in memory are the first pixels blue component. ImageBuffer::vpData will therefore - * point to B(1) when using a 16 bit pointer. - * - * \sa \ref Channel_Split_PackedToPlanar - */ - ibpfRGB161616Packed = 16, - /// \brief This is a YUV422 packed image with 32 bit for a pair of pixels. - /** - * This format uses 2:1 horizontal downsampling, which means that the Y component is - * sampled at each pixel, while U(Cb) and V(Cr) components are sampled every 2 pixels in - * horizontal direction. If each component takes 8 bits, the pair of pixels requires 32 bits. - * - * Two consecutive pixels (32 bit, 0xaabbccdd ) will contain 8 bit chrominance blue of pixel 1 and 2(aa), - * 8 bit luminance of pixel 1(bb), 8 bit chrominance red of pixel 1 and 2 (cc) and finally 8 bit luminance of pixel 2(dd). - * - * Thus in memory the data will be stored like this: - * - * \code - * 4 bytes 4 bytes etc. - * Cb(1,2) Y(1) Cr(1,2) Y(2) Cb(3,4) Y(3) Cr(3,4) Y(4) etc. - * ..........................Cb(n-1,n) Y(n-1) Cr(n-1,n) Y(n) - * \endcode - * - * So the first byte in memory is the first pixels Cb component. ImageBuffer::vpData will therefore - * point to Cb(1,2) when using a byte pointer. - * - * \sa \ref Channel_Split_PackedToPlanar - */ - ibpfYUV422_UYVYPacked = 17, - /// \brief A single channel 12 bit per pixel packed format. - /** - * This format will use 3 bytes to store 2 12 bit pixel. Every 3 bytes will use the following layout in - * memory: - * - * \code - * 3 bytes 3 bytes etc. - * bits 11..4(1) bits 3..0(1) bits 3..0(2) bits 11..4(2) bits 11..4(3) bits 3..0(3) bits 3..0(4) bits 11..4(4) etc. - * \endcode - * - * \note - * When the width is not divisible by 2 the line pitch of a buffer can't be used to calculate line start offsets in a buffer! - * In that case something like this can be used to access a certain pixel (pseudo code assuming 'pointerToStartOfTheBuffer' is a 'byte pointer'): - * - * \code - * GetMono12Packed_V1Pixel( pointerToStartOfTheBuffer, pixelIndex ) - * const int offsetFromStartOfTheBuffer = (3*pixel)/2 - * if pixel divisible by 2 - * return (pointerToStartOfTheBuffer[offset+1] << shift) | (pointerToStartOfTheBuffer[offset] >> 4) - * return pointerToStartOfTheBuffer[offset] << shift) | (pointerToStartOfTheBuffer[offset+1] & 0xF) - * \endcode - */ - ibpfMono12Packed_V2 = 18, - /// \brief This is a YUV422 packed image with 64 bit for a pair of pixels. - /** - * This format uses 2:1 horizontal downsampling, which means that the Y component is - * sampled at each pixel, while U(Cb) and V(Cr) components are sampled every 2 pixels in - * horizontal direction. If each component takes 16 bits, the pair of pixels requires 64 bits. - * - * Two consecutive pixels (64 bit, 0xaaaabbbbccccdddd ) contain 10 bit luminance of pixel 1(aaaa), - * 10 bit chrominance blue of pixel 1 and 2(bbbb), 10 bit luminance of pixel 2(cccc) and finally 10 bit chrominance red of pixels 1 and 2(dddd). - * The upper 6 bits of each component will be 0. - * - * Thus in memory the data will be stored like this: - * - * \code - * 8 bytes 8 bytes etc. - * Y(1) Cb(1,2) Y(2) Cr(1,2) Y(3) Cb(3,4) Y(4) Cr(3,4) etc. - * ..........................Y(n-1) Cb(n-1,n) Y(n) Cr(n-1,n) - * \endcode - * - * So the first 2 bytes in memory are the first pixels luminance component. ImageBuffer::vpData will therefore - * point to Y(1) when using a 16 bit pointer. - * - * \sa \ref Channel_Split_PackedToPlanar - */ - ibpfYUV422_10Packed = 20, - /// \brief This is a YUV422 packed image with 64 bit for a pair of pixels. - /** - * This format uses 2:1 horizontal downsampling, which means that the Y component is - * sampled at each pixel, while U(Cb) and V(Cr) components are sampled every 2 pixels in - * horizontal direction. If each component takes 16 bits, the pair of pixels requires 64 bits. - * - * Two consecutive pixels (64 bit, 0xaaaabbbbccccdddd ) will contain 10 bit chrominance blue of pixel 1 and 2(aaaa), - * 10 bit luminance of pixel 1(bbbb), 10 bit chrominance red of pixel 1 and 2 (cccc) and finally 10 bit luminance of pixel 2(dddd). - * The upper 6 bits of each component will be 0. - * - * Thus in memory the data will be stored like this: - * - * \code - * 8 bytes 8 bytes etc. - * Cb(1,2) Y(1) Cr(1,2) Y(2) Cb(3,4) Y(3) Cr(3,4) Y(4) etc. - * ..........................Cb(n-1,n) Y(n-1) Cr(n-1,n) Y(n) - * \endcode - * - * So the first 2 bytes in memory are the first pixels luminance component. ImageBuffer::vpData will therefore - * point to Cb(1,2) when using a 16 bit pointer. - * - * \sa \ref Channel_Split_PackedToPlanar - */ - ibpfYUV422_UYVY_10Packed = 21, - /// \brief The image will be transferred as an RGB image with 24 bit per pixel. - /** - * This is an interleaved pixel format suitable for most processing functions. Most - * blit/display function however will expect ibpfRGB888Packed. - * The data is stored pixel-wise: - * - * \code - * 3 bytes 3 bytes 3 bytes etc. - * R(1)G(1)B(1) R(2)G(2)B(2) R(3)G(3)B(3) etc. - * .......................................... - * ........................... R(n)G(n)B(n) - * \endcode - * - * So the first byte in memory is the first pixels red component. ImageBuffer::vpData will therefore - * point to R(1) when using a byte pointer. - * - * \sa \ref Channel_Split_PackedToPlanar - */ - ibpfBGR888Packed = 22, - /// \brief A 10 bit per color component RGB packed format. - /** - * This format will use 4 bytes to store one 10 bit per color component RGB pixel. The following memory layout is - * used for each pixel: - * - * \code - * byte 0 | byte 1 | byte 2 | byte 3 | - * 0 7 | 890....5 | 6..90..3 | 4 9xx | - * RRRRRRRR | RRGGGGGG | GGGGBBBB | BBBBBB | - * \endcode - * - * \if (DOXYGEN_C_DOCUMENTATION || DOXYGEN_CPP_DOCUMENTATION) - * \note - * Access to a certain pixel can e.g. be implemented like this: - * - * \code - * //----------------------------------------------------------------------------- - * // slow version - * inline void GetBGR101010Packed_V2Pixel( void* p, const int pitch, int x, int y, unsigned short& red, unsigned short& green, unsigned short& blue ) - * //----------------------------------------------------------------------------- - * { - * unsigned int* pSrc = reinterpret_cast(static_cast(p) + y * pitch) + x; - * red = static_cast( (*pSrc) & 0x3FF); - * green = static_cast(((*pSrc) >> 10 ) & 0x3FF); - * blue = static_cast(((*pSrc) >> 20 ) & 0x3FF); - * } - * - * //----------------------------------------------------------------------------- - * // faster version - * inline void GetBGR101010Packed_V2Pixel( unsigned int pixel, unsigned short& red, unsigned short& green, unsigned short& blue ) - * //----------------------------------------------------------------------------- - * { - * red = static_cast( pixel & 0x3FF); - * green = static_cast(( pixel >> 10 ) & 0x3FF); - * blue = static_cast(( pixel >> 20 ) & 0x3FF); - * } - * \endcode - * \endif - * - * \sa \ref Channel_Split_PackedToPlanar - */ - ibpfBGR101010Packed_V2 = 23, - /// \brief The image will be transferred as an YUV image with 24 bit per pixel. - /** - * This is an interleaved pixel format. - * - * The data is stored pixel-wise: - * - * \code - * 3 bytes 3 bytes 3 bytes etc. - * Cb(1)Y(1)Cr(1) Cb(2)Y(2)Cr(2) Cb(3)Y(3)Cr(3) etc. - * .......................................... - * ........................... Cb(n)Y(n)Cr(n) - * \endcode - * - * So the first byte in memory is the first pixels Cb component. ImageBuffer::vpData will therefore - * point to Cb(1) when using a byte pointer. - * - * \sa \ref Channel_Split_PackedToPlanar - */ - ibpfYUV444_UYVPacked = 24, - /// \brief The image will be transferred as an YUV image with 30 bit of usable data per pixel. - /** - * This is an interleaved pixel format with 2 bytes per color component. - * The data is stored pixel-wise: - * - * \code - * 6 bytes 6 bytes 6 bytes etc. - * Cb(1)Y(1)Cr(1) Cb(2)Y(2)Cr(2) Cb(3)Y(3)Cr(3) etc. - * .......................................... - * ........................... Cb(n)Y(n)Cr(n) - * \endcode - * - * The data of each color component will be LSB aligned, thus the 6 MSB of each 16 bit will - * not contain valid data. - * - * So the first byte in memory is the first pixels Cb component. ImageBuffer::vpData will therefore - * point to Cb(1) when using a 16 bit pointer. - * - * \sa \ref Channel_Split_PackedToPlanar - */ - ibpfYUV444_UYV_10Packed = 25, - /// \brief The image will be transferred as an YUV image with 24 bit per pixel. - /** - * This is an interleaved pixel format. - * - * The data is stored pixel-wise: - * - * \code - * 3 bytes 3 bytes 3 bytes etc. - * Y(1)Cb(1)Cr(1) Y(2)Cb(2)Cr(2) Y(3)Cb(3)Cr(3) etc. - * .......................................... - * ........................... Y(n)Cb(n)Cr(n) - * \endcode - * - * So the first byte in memory is the first pixels luminance component. ImageBuffer::vpData will therefore - * point to Y(1) when using a byte pointer. - * - * \sa \ref Channel_Split_PackedToPlanar - */ - ibpfYUV444Packed = 26, - /// \brief The image will be transferred as an YUV image with 30 bit of usable data per pixel. - /** - * This is an interleaved pixel format with 2 bytes per color component. - * The data is stored pixel-wise: - * - * \code - * 6 bytes 6 bytes 6 bytes etc. - * Y(1)Cb(1)Cr(1) Y(2)Cb(2)Cr(2) Y(3)Cb(3)Cr(3) etc. - * .......................................... - * ........................... Y(n)Cb(n)Cr(n) - * \endcode - * - * The data of each color component will be LSB aligned, thus the 6 MSB of each 16 bit will - * not contain valid data. - * - * So the first byte in memory is the first pixels luminance component. ImageBuffer::vpData will therefore - * point to Y(1) when using a 16 bit pointer. - * - * \sa \ref Channel_Split_PackedToPlanar - */ - ibpfYUV444_10Packed = 27, - /// \brief A single channel 12 bit per pixel packed format. - /** - * This format will use 3 bytes to store 2 12 bit pixel. Every 3 bytes will use the following layout in - * memory: - * - * \code - * 3 bytes 3 bytes etc. - * bits 0..7(1) bits 8..11(1) bits 0..3(2) bits 4..11(2) bits 0..7(3) bits 8..11(3) bits 0..3(4) bits 4..11(4) etc. - * \endcode - * - * \note - * When the width is not divisible by 2 the line pitch of a buffer can't be used to calculate line start offsets in a buffer! - * In that case something like this can be used to access a certain pixel (pseudo code assuming 'pointerToStartOfTheBuffer' is a 'byte pointer'): - * - * \code - * GetMono12Packed_V1Pixel( pointerToStartOfTheBuffer, pixelIndex ) - * const int offsetFromStartOfTheBuffer = pixel + pixel/2 - * if pixel divisible by 2 - * return (pointerToStartOfTheBuffer[offset] >> 4) | (pointerToStartOfTheBuffer[offset+1] << 4) - * return pointerToStartOfTheBuffer[offset]) | (pointerToStartOfTheBuffer[offset+1] & 0xF) << 8) - * \endcode - * - * \since 2.5.0 - */ - ibpfMono12Packed_V1 = 28, - /// \brief This is a YUV411 packed image with 48 bits for four pixels. - /** - * This format uses 4:1 horizontal downsampling, which means that the Y component is - * sampled at each pixel, while U(Cb) and V(Cr) components are sampled every 4 pixels in - * horizontal direction. If each component takes 8 bits, four pixels require 48 bits. - * - * Four consecutive pixels (48 bit, 0xaabbccddeeff ) contain 8 bit chrominance blue of pixels 1, 2, 3 and 4(aa), - * 8 bit luminance of pixel 1(bb),8 bit luminance of pixel 2(cc), 8 bit chrominance red of pixels 1, 2, 3 and 4(dd), - * 8 bit luminance of pixel 3(ee) and finally 8 bit luminance of pixel 4(ff). - * - * Thus in memory the data will be stored like this: - * - * \code - * 6 bytes 6 bytes etc. - * Cb(1,2,3,4) Y(1) Y(2) Cr(1,2,3,4) Y(3) Y(4) Cb(5,6,7,8) Y(5) Y(6) Cr(5,6,7,8) Y(7) Y(8) etc. - * .................. Cb(n,n+1,n+2,n+3) Y(n) Y(n+1) Cr(n,n+1,n+2,n+3) Y(n+2) Y(n+3) - * \endcode - * - * So the first byte in memory is the chrominance blue component. ImageBuffer::vpData will therefore - * point to Cb when using a byte pointer. - * - * \sa \ref Channel_Split_PackedToPlanar - * - * \since 2.13.0 - */ - ibpfYUV411_UYYVYY_Packed = 29, - /// \brief The image will be transferred as an RGB image in planar format. - /** - * This is a format best suitable for most image processing functions. - * The image will be converted into 3 planes(a plane for each color component). - * - * \code - * R(1) R(2) R(3) R(4) etc. - * ................... - * .............. R(n) - * G(1) G(2) G(3) G(4) etc. - * ................... - * .............. G(n) - * B(1) B(2) B(3) B(4) etc. - * ................... - * .............. B(n) - * \endcode - * - * So the first byte in memory is the first pixels red component. ImageBuffer::vpData will therefore - * point to R(1) when using a byte pointer. - * - * \since 2.17.0 - */ - ibpfRGB888Planar = 30, - /// \brief The driver will decide which format will be used. - ibpfAuto = -1 -}; +#include +#include +#include //------------------------------------------------------------------------------ /// \brief Valid image buffer format reinterpreter modes. @@ -3592,532 +3189,544 @@ enum TImageBufferFormatReinterpreterMode // dotNETReplacement=ibpf;TImageBufferP //----------------------------------------------------------------------------- /// \brief Defines the pixel format of the result image. +/** + * Also refer to \ref ImageProcessing_General_PixelFormats + */ /// \ingroup CommonInterface enum TImageDestinationPixelFormat //----------------------------------------------------------------------------- { /// \brief The driver will decide which destination format will be used. idpfAuto = 0, - /// \brief The image will be transferred as an unprocessed block of data. +/// \brief An unprocessed block of data. idpfRaw = 1, - /// \brief The image will be transferred as a mono channel 8 bit per pixel image. + /// \brief A single channel 8 bit per pixel format. (PFNC name: Mono8) idpfMono8 = 2, - /// \brief The image will be transferred as an RGB image with 32 bit per pixel containing one fill byte per pixel. + /// \brief A four channel interleaved RGB format with 32 bit per pixel containing one alpha byte per pixel. (PFNC name: BGRa8) /** - * This is an interleaved pixel format suitable for most display functions. The data - * is stored pixel-wise. When accessed 4-byte wise the data layout in memory can be - * interpreted like this (starting with the MSB): + * This is an interleaved pixel format suitable for most display functions. The data + * is stored pixel-wise. The memory layout of the pixel data is like this: * * \code - * 4 bytes 4 bytes etc. - * B(1) G(1) R(1) A(1) B(2) G(2) R(2) A(2) etc. - * ....................................... - * B(n) G(n) R(n) A(n) + * 4 bytes 4 bytes etc. + * B(1) G(1) R(1) A(1) B(2) G(2) R(2) A(2) etc. + * ....................................... + * B(n) G(n) R(n) A(n) * \endcode * - * So the first byte in memory is the first pixels blue component. ImageBuffer::vpData will therefore - * point to B(1) when using a byte pointer. + * So the first byte in memory is the first pixels \b blue component. ImageBuffer::vpData will therefore + * point to B(1) when using a byte pointer. The 4th byte could be used for alpha information but isn't used by + * this framework. + * + * \note + * This format reports 3 channels only for backward compatibility reasons while in fact memory is allocated for + * 4 channels! Use this format with some extra care! * * \sa \ref Channel_Split_PackedToPlanar */ idpfRGBx888Packed = 3, - /// \brief This is a YUV422 packed image with 32 bit for a pair of pixels. + /// \brief A three channel interleaved YUV422 format using 32 bit for a pair of pixels. (PFNC name: YUV422_8) /** - * This format uses 2:1 horizontal downsampling, which means that the Y component is - * sampled at each pixel, while U(Cb) and V(Cr) components are sampled every 2 pixels in - * horizontal direction. If each component takes 8 bits, the pair of pixels requires 32 bits. + * This format uses 2:1 horizontal downsampling, meaning the Y component is + * sampled at each pixel, while U(Cb) and V(Cr) components are sampled every 2 pixels in + * horizontal direction. Each component takes 8 bits, therefore a pair of pixels requires 32 bits. * - * Two consecutive pixels (32 bit, 0xaabbccdd ) contain 8 bit luminance of pixel 1(aa), - * 8 bit chrominance blue of pixel 1 and 2(bb), 8 bit luminance of pixel 2(cc) and finally 8 bit chrominance red of pixels 1 and 2(dd). + * Two consecutive pixels (32 bit, 0xaabbccdd ) contain 8 bit luminance of pixel 1(aa), + * 8 bit chrominance blue of pixel 1 and 2(bb), 8 bit luminance of pixel 2(cc) and finally 8 bit chrominance red of pixels 1 and 2(dd). * - * Thus in memory the data will be stored like this: + * Thus in memory the data will be stored like this: * * \code - * 4 bytes 4 bytes etc. - * Y(1) Cb(1,2) Y(2) Cr(1,2) Y(3) Cb(3,4) Y(4) Cr(3,4) etc. - * ..........................Y(n-1) Cb(n-1,n) Y(n) Cr(n-1,n) + * 4 bytes 4 bytes etc. + * Y(1) Cb(1,2) Y(2) Cr(1,2) Y(3) Cb(3,4) Y(4) Cr(3,4) etc. + * ..........................Y(n-1) Cb(n-1,n) Y(n) Cr(n-1,n) * \endcode * - * So the first byte in memory is the first pixels luminance component. ImageBuffer::vpData will therefore - * point to Y(1) when using a byte pointer. + * So the first byte in memory is the first pixels luminance component. ImageBuffer::vpData will therefore + * point to Y(1) when using a byte pointer. * * \sa \ref Channel_Split_PackedToPlanar */ idpfYUV422Packed = 4, - /// \brief The image will be transferred as an RGB image in planar format. + /// \brief A four channel planar RGB format. (PFNC name: RGBa8_Planar) /** - * This is a format best suitable for most image processing functions. - * The image will be converted into four planes(a plane for each color component and one - * alpha plane). + * This is a format best suitable for most image processing functions. + * The data is stored in 4 separate planes (one plane for each color component and one + * alpha plane). * * \code - * R(1) R(2) R(3) R(4) etc. - * ................... - * .............. R(n) - * G(1) G(2) G(3) G(4) etc. - * ................... - * .............. G(n) - * B(1) B(2) B(3) B(4) etc. - * ................... - * .............. B(n) - * A(1) A(2) A(3) A(4) etc. - * ................... - * .............. A(n) + * R(1) R(2) R(3) R(4) etc. + * ................... + * .............. R(n) + * G(1) G(2) G(3) G(4) etc. + * ................... + * .............. G(n) + * B(1) B(2) B(3) B(4) etc. + * ................... + * .............. B(n) + * A(1) A(2) A(3) A(4) etc. + * ................... + * .............. A(n) * \endcode * - * So the first byte in memory is the first pixels red component. ImageBuffer::vpData will therefore - * point to R(1) when using a byte pointer. + * So the first byte in memory is the first pixels red component. ImageBuffer::vpData will therefore + * point to R(1) when using a byte pointer. All red data will follow! + * + * \note + * This format reports 3 channels only for backward compatibility reasons while in fact memory is allocated for + * 4 channels! Use this format with some extra care! */ idpfRGBx888Planar = 5, - /// \brief The image will be transferred as a mono channel 10 bit per pixel image. + /// \brief A single channel 10 bit per pixel format. (PFNC name: Mono10) /** - * Each pixel in this format consumes 2 bytes of memory. The lower 10 bit of this 2 bytes will contain valid data. + * Each pixel in this format consumes 2 bytes of memory. The lower 10 bit of this 2 bytes will contain valid data. */ idpfMono10 = 6, - /// \brief The image will be transferred as a mono channel 12 bit per pixel image. + /// \brief A single channel 12 bit per pixel format. (PFNC name: Mono12) /** - * Each pixel in this format consumes 2 bytes of memory. The lower 12 bit of this 2 bytes will contain valid data. + * Each pixel in this format consumes 2 bytes of memory. The lower 12 bit of this 2 bytes will contain valid data. */ idpfMono12 = 7, - /// \brief The image will be transferred as a mono channel 14 bit per pixel image. + /// \brief A single channel 14 bit per pixel format. (PFNC name: Mono14) /** - * Each pixel in this format consumes 2 bytes of memory. The lower 14 bit of this 2 bytes will contain valid data. + * Each pixel in this format consumes 2 bytes of memory. The lower 14 bit of this 2 bytes will contain valid data. */ idpfMono14 = 8, - /// \brief The image will be transferred as a mono channel 16 bit per pixel image. + /// \brief A single channel 16 bit per pixel format. (PFNC name: Mono16) idpfMono16 = 9, - /// \brief The image will be transferred as an RGB image with 24 bit per pixel. + /// \brief A three channel interleaved RGB format containing 24 bit per pixel. (PFNC name: BGR8) /** - * This is an interleaved pixel format suitable for most display and processing functions. - * The data is stored pixel-wise: + * This is an interleaved pixel format suitable for most display and processing functions. + * The data is stored pixel-wise: * * \code - * 3 bytes 3 bytes 3 bytes etc. - * B(1)G(1)R(1) B(2)G(2)R(2) B(3)G(3)R(3) etc. - * .......................................... - * ........................... B(n)G(n)R(n) + * 3 bytes 3 bytes 3 bytes etc. + * B(1)G(1)R(1) B(2)G(2)R(2) B(3)G(3)R(3) etc. + * .......................................... + * ........................... B(n)G(n)R(n) * \endcode * - * So the first byte in memory is the first pixels blue component. ImageBuffer::vpData will therefore - * point to B(1) when using a byte pointer. + * So the first byte in memory is the first pixels \b blue component. ImageBuffer::vpData will therefore + * point to B(1) when using a byte pointer. * * \sa \ref Channel_Split_PackedToPlanar */ idpfRGB888Packed = 10, - /// \brief The image will be transferred as a YUV422 image with 16 bit per pixel. + /// \brief A three channel planar YUV422 format. (PFNC name: YUV422_8_YVU_Planar) /** - * This format uses 2:1 horizontal downsampling, which means that the Y component is - * sampled at each pixel, while U(Cb) and V(Cr) components are sampled every 2 pixels in - * horizontal direction. If each component takes 8 bits, the pair of pixels requires 32 bits. + * This format uses 2:1 horizontal downsampling, meaning the Y component is + * sampled at each pixel, while U(Cb) and V(Cr) components are sampled every 2 pixels in + * horizontal direction. If each component takes 8 bits, the pair of pixels requires 32 bits. * - * In memory the data will be stored like this: + * In memory the data will be stored like this: * * \code - * Y(1) Y(2) Y(3) Y(4) etc. - * ............................ - * .............. Y(n-1) Y(n) - * Cr(1,2) Cr(3,4) etc. - * ............... - * ....... Cr(n/2) - * Cb(1,2) Cb(3,4) etc. - * ............... - * ....... Cb(n/2) + * Y(1) Y(2) Y(3) Y(4) etc. + * ............................ + * .............. Y(n-1) Y(n) + * Cr(1,2) Cr(3,4) etc. + * ............... + * ....... Cr(n/2) + * Cb(1,2) Cb(3,4) etc. + * ............... + * ....... Cb(n/2) * \endcode * - * Thus the Y planes size in bytes equals the sum of the 2 other planes. + * Thus the Y planes size in bytes equals the sum of the 2 other planes. * - * So the first byte in memory is the first pixels luminance component. ImageBuffer::vpData will therefore - * point to Y(1) when using a byte pointer. + * So the first byte in memory is the first pixels luminance component. ImageBuffer::vpData will therefore + * point to Y(1) when using a byte pointer. */ idpfYUV422Planar = 13, - /// \brief The image will be transferred as an RGB image with 30 bit of usable data per pixel. + /// \brief A three channel interleaved RGB image occupying 48 bit with 30 bit of usable data per pixel. (PFNC name: BGR10) /** - * This is an interleaved pixel format with 2 bytes per color component. - * The data is stored pixel-wise: + * This is an interleaved pixel format with 2 bytes per color component. + * The data is stored pixel-wise: * * \code - * 6 bytes 6 bytes 6 bytes etc. - * B(1)G(1)R(1) B(2)G(2)R(2) B(3)G(3)R(3) etc. - * .......................................... - * ........................... B(n)G(n)R(n) + * 6 bytes 6 bytes 6 bytes etc. + * B(1)G(1)R(1) B(2)G(2)R(2) B(3)G(3)R(3) etc. + * .......................................... + * ........................... B(n)G(n)R(n) * \endcode * - * The data of each color component will be LSB aligned, thus the 6 MSB of each 16 bit will - * not contain valid data. + * The data of each color component will be LSB aligned, thus the 6 MSB of each 16 bit will + * not contain valid data. * - * So the first byte in memory is the first pixels blue component. ImageBuffer::vpData will therefore - * point to B(1) when using a 16 bit pointer. + * So the first 2 bytes in memory are the first pixels \b blue component. ImageBuffer::vpData will therefore + * point to B(1) when using a 16 bit pointer. * * \sa \ref Channel_Split_PackedToPlanar */ idpfRGB101010Packed = 14, - /// \brief The image will be transferred as an RGB image with 36 bit of usable data per pixel. + /// \brief A three channel interleaved RGB image occupying 48 bit with 36 bit of usable data per pixel. (PFNC name: BGR12) /** - * This is an interleaved pixel format with 2 bytes per color component. - * The data is stored pixel-wise: + * This is an interleaved pixel format with 2 bytes per color component. + * The data is stored pixel-wise: * * \code - * 6 bytes 6 bytes 6 bytes etc. - * B(1)G(1)R(1) B(2)G(2)R(2) B(3)G(3)R(3) etc. - * .......................................... - * ........................... B(n)G(n)R(n) + * 6 bytes 6 bytes 6 bytes etc. + * B(1)G(1)R(1) B(2)G(2)R(2) B(3)G(3)R(3) etc. + * .......................................... + * ........................... B(n)G(n)R(n) * \endcode * - * The data of each color component will be LSB aligned, thus the 4 MSB of each 16 bit will - * not contain valid data. + * The data of each color component will be LSB aligned, thus the 4 MSB of each 16 bit will + * not contain valid data. * - * So the first byte in memory is the first pixels blue component. ImageBuffer::vpData will therefore - * point to B(1) when using a 16 bit pointer. + * So the first 2 bytes in memory are the first pixels \b blue component. ImageBuffer::vpData will therefore + * point to B(1) when using a 16 bit pointer. * * \sa \ref Channel_Split_PackedToPlanar */ idpfRGB121212Packed = 15, - /// \brief The image will be transferred as an RGB image with 42 bit of usable data per pixel. + /// \brief A three channel interleaved RGB image occupying 48 bit with 42 bit of usable data per pixel. (PFNC name: BGR14) /** - * This is an interleaved pixel format with 2 bytes per color component. - * The data is stored pixel-wise: + * This is an interleaved pixel format with 2 bytes per color component. + * The data is stored pixel-wise: * * \code - * 6 bytes 6 bytes 6 bytes etc. - * B(1)G(1)R(1) B(2)G(2)R(2) B(3)G(3)R(3) etc. - * .......................................... - * ........................... B(n)G(n)R(n) + * 6 bytes 6 bytes 6 bytes etc. + * B(1)G(1)R(1) B(2)G(2)R(2) B(3)G(3)R(3) etc. + * .......................................... + * ........................... B(n)G(n)R(n) * \endcode * - * The data of each color component will be LSB aligned, thus the 2 MSB of each 16 bit will - * not contain valid data. + * The data of each color component will be LSB aligned, thus the 2 MSB of each 16 bit will + * not contain valid data. * - * So the first byte in memory is the first pixels blue component. ImageBuffer::vpData will therefore - * point to B(1) when using a 16 bit pointer. + * So the first 2 bytes in memory are the first pixels \b blue component. ImageBuffer::vpData will therefore + * point to B(1) when using a 16 bit pointer. * * \sa \ref Channel_Split_PackedToPlanar */ idpfRGB141414Packed = 16, - /// \brief The image will be transferred as an RGB image with 48 bit of usable data per pixel. + /// \brief A three channel interleaved RGB image occupying 48 bit per pixel. (PFNC name: BGR16) /** - * This is an interleaved pixel format with 2 bytes per color component. - * The data is stored pixel-wise: + * This is an interleaved pixel format with 2 bytes per color component. + * The data is stored pixel-wise: * * \code - * 6 bytes 6 bytes 6 bytes etc. - * B(1)G(1)R(1) B(2)G(2)R(2) B(3)G(3)R(3) etc. - * .......................................... - * ........................... B(n)G(n)R(n) + * 6 bytes 6 bytes 6 bytes etc. + * B(1)G(1)R(1) B(2)G(2)R(2) B(3)G(3)R(3) etc. + * .......................................... + * ........................... B(n)G(n)R(n) * \endcode * - * The data of each color component will be LSB aligned. + * The data of each color component will be LSB aligned. * - * So the first byte in memory is the first pixels blue component. ImageBuffer::vpData will therefore - * point to B(1) when using a 16 bit pointer. + * So the first 2 bytes in memory are the first pixels \b blue component. ImageBuffer::vpData will therefore + * point to B(1) when using a 16 bit pointer. * * \sa \ref Channel_Split_PackedToPlanar */ idpfRGB161616Packed = 17, - /// \brief This is a YUV422 packed image with 32 bit for a pair of pixels. + /// \brief A three channel interleaved YUV422 format occupying 32 bit for a pair of pixels. (PFNC name: YUV422_8_UYV) /** - * This format uses 2:1 horizontal downsampling, which means that the Y component is - * sampled at each pixel, while U(Cb) and V(Cr) components are sampled every 2 pixels in - * horizontal direction. If each component takes 8 bits, the pair of pixels requires 32 bits. + * This format uses 2:1 horizontal downsampling, meaning the Y component is + * sampled at each pixel, while U(Cb) and V(Cr) components are sampled every 2 pixels in + * horizontal direction. If each component takes 8 bits, the pair of pixels requires 32 bits. * - * Two consecutive pixels (32 bit, 0xaabbccdd ) will contain 8 bit chrominance blue of pixel 1 and 2(aa), - * 8 bit luminance of pixel 1(bb), 8 bit chrominance red of pixel 1 and 2 (cc) and finally 8 bit luminance of pixel 2(dd). + * Two consecutive pixels (32 bit, 0xaabbccdd ) will contain 8 bit chrominance blue of pixel 1 and 2(aa), + * 8 bit luminance of pixel 1(bb), 8 bit chrominance red of pixel 1 and 2 (cc) and finally 8 bit luminance of pixel 2(dd). * - * Thus in memory the data will be stored like this: + * Thus in memory the data will be stored like this: * * \code - * 4 bytes 4 bytes etc. - * Cb(1,2) Y(1) Cr(1,2) Y(2) Cb(3,4) Y(3) Cr(3,4) Y(4) etc. - * ..........................Cb(n-1,n) Y(n-1) Cr(n-1,n) Y(n) + * 4 bytes 4 bytes etc. + * Cb(1,2) Y(1) Cr(1,2) Y(2) Cb(3,4) Y(3) Cr(3,4) Y(4) etc. + * ..........................Cb(n-1,n) Y(n-1) Cr(n-1,n) Y(n) * \endcode * - * So the first byte in memory is the first pixels Cb component. ImageBuffer::vpData will therefore - * point to Cb(1,2) when using a byte pointer. + * So the first byte in memory is the first pixels Cb component. ImageBuffer::vpData will therefore + * point to Cb(1,2) when using a byte pointer. * * \sa \ref Channel_Split_PackedToPlanar */ idpfYUV422_UYVYPacked = 18, - /// \brief A single channel 12 bit per pixel packed format. + /// \brief A single channel 12 bit per pixel packed format occupying 12 bit per pixel. (PFNC name: Mono12Packed) /** - * This format will use 3 bytes to store 2 12 bit pixel. Every 3 bytes will use the following layout in - * memory: + * This format will use 3 bytes to store 2 12 bit pixel. Every 3 bytes will use the following layout in + * memory: * * \code - * 3 bytes 3 bytes etc. - * bits 11..4(1) bits 3..0(1) bits 3..0(2) bits 11..4(2) bits 11..4(3) bits 3..0(3) bits 3..0(4) bits 11..4(4) etc. + * 3 bytes 3 bytes etc. + * bits 11..4(1) bits 3..0(1) bits 3..0(2) bits 11..4(2) bits 11..4(3) bits 3..0(3) bits 3..0(4) bits 11..4(4) etc. * \endcode * - * \note - * When the width is not divisible by 2 the line pitch of a buffer can't be used to calculate line start offsets in a buffer! - * In that case something like this can be used to access a certain pixel (pseudo code assuming 'pointerToStartOfTheBuffer' is a 'byte pointer'): + * \note + * When the width is not divisible by 2 the line pitch of a buffer can't be used to calculate line start offsets in a buffer! + * In that case something like this can be used to access a certain pixel (pseudo code assuming 'pointerToStartOfTheBuffer' is a 'byte pointer'): * * \code - * GetMono12Packed_V1Pixel( pointerToStartOfTheBuffer, pixelIndex ) - * const int offsetFromStartOfTheBuffer = (3*pixel)/2 - * if pixel divisible by 2 - * return (pointerToStartOfTheBuffer[offset+1] << shift) | (pointerToStartOfTheBuffer[offset] >> 4) - * return pointerToStartOfTheBuffer[offset] << shift) | (pointerToStartOfTheBuffer[offset+1] & 0xF) - * } + * GetMono12Packed_V1Pixel( pointerToStartOfTheBuffer, pixelIndex ) + * const int offsetFromStartOfTheBuffer = (3*pixel)/2 + * if pixel divisible by 2 + * return (pointerToStartOfTheBuffer[offset+1] << shift) | (pointerToStartOfTheBuffer[offset] >> 4) + * return pointerToStartOfTheBuffer[offset] << shift) | (pointerToStartOfTheBuffer[offset+1] & 0xF) * \endcode */ idpfMono12Packed_V2 = 19, - /// \brief This is a YUV422 packed image with 64 bit for a pair of pixels. + /// \brief A three channel interleaved YUV422 format occupying 64 bit for a pair of pixels. (PFNC name: YUV422_10) /** - * This format uses 2:1 horizontal downsampling, which means that the Y component is - * sampled at each pixel, while U(Cb) and V(Cr) components are sampled every 2 pixels in - * horizontal direction. If each component takes 16 bits, the pair of pixels requires 64 bits. + * This format uses 2:1 horizontal downsampling, meaning the Y component is + * sampled at each pixel, while U(Cb) and V(Cr) components are sampled every 2 pixels in + * horizontal direction. If each component takes 16 bits, the pair of pixels requires 64 bits. * - * Two consecutive pixels (64 bit, 0xaaaabbbbccccdddd ) contain 10 bit luminance of pixel 1(aaaa), - * 10 bit chrominance blue of pixel 1 and 2(bbbb), 10 bit luminance of pixel 2(cccc) and finally 10 bit chrominance red of pixels 1 and 2(dddd). - * The upper 6 bits of each component will be 0. + * Two consecutive pixels (64 bit, 0xaaaabbbbccccdddd ) contain 10 bit luminance of pixel 1(aaaa), + * 10 bit chrominance blue of pixel 1 and 2(bbbb), 10 bit luminance of pixel 2(cccc) and finally 10 bit chrominance red of pixels 1 and 2(dddd). + * The upper 6 bits of each component will be 0. * - * Thus in memory the data will be stored like this: + * Thus in memory the data will be stored like this: * * \code - * 8 bytes 8 bytes etc. - * Y(1) Cb(1,2) Y(2) Cr(1,2) Y(3) Cb(3,4) Y(4) Cr(3,4) etc. - * ..........................Y(n-1) Cb(n-1,n) Y(n) Cr(n-1,n) + * 8 bytes 8 bytes etc. + * Y(1) Cb(1,2) Y(2) Cr(1,2) Y(3) Cb(3,4) Y(4) Cr(3,4) etc. + * ..........................Y(n-1) Cb(n-1,n) Y(n) Cr(n-1,n) * \endcode * - * So the first 2 bytes in memory are the first pixels luminance component. ImageBuffer::vpData will therefore - * point to Y(1) when using a 16 bit pointer. + * So the first 2 bytes in memory are the first pixels luminance component. ImageBuffer::vpData will therefore + * point to Y(1) when using a 16 bit pointer. * * \sa \ref Channel_Split_PackedToPlanar */ idpfYUV422_10Packed = 20, - /// \brief This is a YUV422 packed image with 64 bit for a pair of pixels. + /// \brief A three channel interleaved YUV422 format occupying 64 bit for a pair of pixels. (PFNC name: YUV422_10_UYV) /** - * This format uses 2:1 horizontal downsampling, which means that the Y component is - * sampled at each pixel, while U(Cb) and V(Cr) components are sampled every 2 pixels in - * horizontal direction. If each component takes 16 bits, the pair of pixels requires 64 bits. + * This format uses 2:1 horizontal downsampling, meaning the Y component is + * sampled at each pixel, while U(Cb) and V(Cr) components are sampled every 2 pixels in + * horizontal direction. If each component takes 16 bits, the pair of pixels requires 64 bits. * - * Two consecutive pixels (64 bit, 0xaaaabbbbccccdddd ) will contain 10 bit chrominance blue of pixel 1 and 2(aaaa), - * 10 bit luminance of pixel 1(bbbb), 10 bit chrominance red of pixel 1 and 2 (cccc) and finally 10 bit luminance of pixel 2(dddd). - * The upper 6 bits of each component will be 0. + * Two consecutive pixels (64 bit, 0xaaaabbbbccccdddd ) will contain 10 bit chrominance blue of pixel 1 and 2(aaaa), + * 10 bit luminance of pixel 1(bbbb), 10 bit chrominance red of pixel 1 and 2 (cccc) and finally 10 bit luminance of pixel 2(dddd). + * The upper 6 bits of each component will be 0. * - * Thus in memory the data will be stored like this: + * Thus in memory the data will be stored like this: * * \code - * 8 bytes 8 bytes etc. - * Cb(1,2) Y(1) Cr(1,2) Y(2) Cb(3,4) Y(3) Cr(3,4) Y(4) etc. - * ..........................Cb(n-1,n) Y(n-1) Cr(n-1,n) Y(n) + * 8 bytes 8 bytes etc. + * Cb(1,2) Y(1) Cr(1,2) Y(2) Cb(3,4) Y(3) Cr(3,4) Y(4) etc. + * ..........................Cb(n-1,n) Y(n-1) Cr(n-1,n) Y(n) * \endcode * - * So the first 2 bytes in memory are the first pixels luminance component. ImageBuffer::vpData will therefore - * point to Cb(1,2) when using a 16 bit pointer. + * So the first 2 bytes in memory are the first pixels luminance component. ImageBuffer::vpData will therefore + * point to Cb(1,2) when using a 16 bit pointer. * * \sa \ref Channel_Split_PackedToPlanar */ idpfYUV422_UYVY_10Packed = 21, - /// \brief The image will be transferred as an RGB image with 24 bit per pixel. + /// \brief A three channel interleaved RGB format with 24 bit per pixel. (PFNC name: RGB8) /** - * This is an interleaved pixel format suitable for most processing functions. Most - * blit/display function however will expect idpfRGB888Packed. - * The data is stored pixel-wise: + * This is an interleaved pixel format suitable for most processing functions. Most + * blit/display function however will expect idpfRGB888Packed. + * The data is stored pixel-wise: * * \code - * 3 bytes 3 bytes 3 bytes etc. - * R(1)G(1)B(1) R(2)G(2)B(2) R(3)G(3)B(3) etc. - * .......................................... - * ........................... R(n)G(n)B(n) + * 3 bytes 3 bytes 3 bytes etc. + * R(1)G(1)B(1) R(2)G(2)B(2) R(3)G(3)B(3) etc. + * .......................................... + * ........................... R(n)G(n)B(n) * \endcode * - * So the first byte in memory is the first pixels red component. ImageBuffer::vpData will therefore - * point to R(1) when using a byte pointer. + * So the first byte in memory is the first pixels \b red component. ImageBuffer::vpData will therefore + * point to R(1) when using a byte pointer. * * \sa \ref Channel_Split_PackedToPlanar */ idpfBGR888Packed = 22, - /// \brief A 10 bit per color component RGB packed format. + /// \brief A three channel 10 bit per color component RGB packed format occupying 32 bit per pixel. (PFNC name: RGB10p32) /** - * This format will use 4 bytes to store one 10 bit per color component RGB pixel. The following memory layout is - * used for each pixel: + * This format will use 4 bytes to store one 10 bit per color component RGB pixel. The following memory layout is + * used for each pixel: * * \code - * byte 0 | byte 1 | byte 2 | byte 3 | - * 0 7 | 890....5 | 6..90..3 | 4 9xx | - * RRRRRRRR | RRGGGGGG | GGGGBBBB | BBBBBB | + * byte 0 | byte 1 | byte 2 | byte 3 | + * 0 7 | 890....5 | 6..90..3 | 4 9xx | + * RRRRRRRR | RRGGGGGG | GGGGBBBB | BBBBBB | * \endcode * + * The last 2 bit of each 32 bit bit may contain undefined data. * \if (DOXYGEN_C_DOCUMENTATION || DOXYGEN_CPP_DOCUMENTATION) - * \note - * Access to a certain pixel can e.g. be implemented like this: + * \note + * Access to a certain pixel can e.g. be implemented like this: + * * \code - * //----------------------------------------------------------------------------- - * // slow version - * inline void GetBGR101010Packed_V2Pixel( void* p, const int pitch, int x, int y, unsigned short& red, unsigned short& green, unsigned short& blue ) - * //----------------------------------------------------------------------------- - * { - * unsigned int* pSrc = reinterpret_cast(static_cast(p) + y * pitch) + x; - * red = static_cast( (*pSrc) & 0x3FF); - * green = static_cast(((*pSrc) >> 10 ) & 0x3FF); - * blue = static_cast(((*pSrc) >> 20 ) & 0x3FF); - * } - * - * //----------------------------------------------------------------------------- - * // faster version - * inline void GetBGR101010Packed_V2Pixel( unsigned int pixel, unsigned short& red, unsigned short& green, unsigned short& blue ) - * //----------------------------------------------------------------------------- - * { - * red = static_cast( pixel & 0x3FF); - * green = static_cast(( pixel >> 10 ) & 0x3FF); - * blue = static_cast(( pixel >> 20 ) & 0x3FF); - * } + * //----------------------------------------------------------------------------- + * // slow version + * inline void GetBGR101010Packed_V2Pixel( void* p, const int pitch, int x, int y, unsigned short& red, unsigned short& green, unsigned short& blue ) + * //----------------------------------------------------------------------------- + * { + * unsigned int* pSrc = reinterpret_cast(static_cast(p) + y * pitch) + x; + * red = static_cast( (*pSrc) & 0x3FF); + * green = static_cast(((*pSrc) >> 10 ) & 0x3FF); + * blue = static_cast(((*pSrc) >> 20 ) & 0x3FF); + * } + * + * //----------------------------------------------------------------------------- + * // faster version + * inline void GetBGR101010Packed_V2Pixel( unsigned int pixel, unsigned short& red, unsigned short& green, unsigned short& blue ) + * //----------------------------------------------------------------------------- + * { + * red = static_cast( pixel & 0x3FF); + * green = static_cast(( pixel >> 10 ) & 0x3FF); + * blue = static_cast(( pixel >> 20 ) & 0x3FF); + * } * \endcode * \endif * * \sa \ref Channel_Split_PackedToPlanar */ idpfBGR101010Packed_V2 = 23, - /// \brief The image will be transferred as an YUV image with 24 bit per pixel. + /// \brief A three channel interleaved YUV format occupying 24 bit per pixel. (PFNC name: YUV8_UYV) /** - * This is an interleaved pixel format. + * This is an interleaved pixel format. * - * The data is stored pixel-wise: + * The data is stored pixel-wise: * * \code - * 3 bytes 3 bytes 3 bytes etc. - * Cb(1)Y(1)Cr(1) Cb(2)Y(2)Cr(2) Cb(3)Y(3)Cr(3) etc. - * .......................................... - * ........................... Cb(n)Y(n)Cr(n) + * 3 bytes 3 bytes 3 bytes etc. + * Cb(1)Y(1)Cr(1) Cb(2)Y(2)Cr(2) Cb(3)Y(3)Cr(3) etc. + * .......................................... + * ........................... Cb(n)Y(n)Cr(n) * \endcode * - * So the first byte in memory is the first pixels Cb component. ImageBuffer::vpData will therefore - * point to Cb(1) when using a byte pointer. + * So the first byte in memory is the first pixels Cb component. ImageBuffer::vpData will therefore + * point to Cb(1) when using a byte pointer. * * \sa \ref Channel_Split_PackedToPlanar */ idpfYUV444_UYVPacked = 24, - /// \brief The image will be transferred as an YUV image with 30 bit of usable data per pixel. + /// \brief A three channel interleaved YUV format occupying 48 bit per pixel with 30 bit of usable data per pixel. (PFNC name: YUV422_8_UYV) /** - * This is an interleaved pixel format with 2 bytes per color component. - * The data is stored pixel-wise: + * This is an interleaved pixel format with 2 bytes per color component. + * The data is stored pixel-wise: * * \code - * 6 bytes 6 bytes 6 bytes etc. - * Cb(1)Y(1)Cr(1) Cb(2)Y(2)Cr(2) Cb(3)Y(3)Cr(3) etc. - * .......................................... - * ........................... Cb(n)Y(n)Cr(n) + * 6 bytes 6 bytes 6 bytes etc. + * Cb(1)Y(1)Cr(1) Cb(2)Y(2)Cr(2) Cb(3)Y(3)Cr(3) etc. + * .......................................... + * ........................... Cb(n)Y(n)Cr(n) * \endcode * - * The data of each color component will be LSB aligned, thus the 6 MSB of each 16 bit will - * not contain valid data. + * The data of each color component will be LSB aligned, thus the 6 MSB of each 16 bit will + * not contain valid data. * - * So the first byte in memory is the first pixels Cb component. ImageBuffer::vpData will therefore - * point to Cb(1) when using a 16 bit pointer. + * So the first byte in memory is the first pixels Cb component. ImageBuffer::vpData will therefore + * point to Cb(1) when using a 16 bit pointer. * * \sa \ref Channel_Split_PackedToPlanar */ idpfYUV444_UYV_10Packed = 25, - /// \brief The image will be transferred as an YUV image with 24 bit per pixel. + /// \brief A three channel interleaved YUV format occupying 24 bit per pixel. (PFNC name: YUV8) /** - * This is an interleaved pixel format. + * This is an interleaved pixel format. * - * The data is stored pixel-wise: + * The data is stored pixel-wise: * * \code - * 3 bytes 3 bytes 3 bytes etc. - * Y(1)Cb(1)Cr(1) Y(2)Cb(2)Cr(2) Y(3)Cb(3)Cr(3) etc. - * .......................................... - * ........................... Y(n)Cb(n)Cr(n) + * 3 bytes 3 bytes 3 bytes etc. + * Y(1)Cb(1)Cr(1) Y(2)Cb(2)Cr(2) Y(3)Cb(3)Cr(3) etc. + * .......................................... + * ........................... Y(n)Cb(n)Cr(n) * \endcode * - * So the first byte in memory is the first pixels luminance component. ImageBuffer::vpData will therefore - * point to Y(1) when using a byte pointer. + * So the first byte in memory is the first pixels luminance component. ImageBuffer::vpData will therefore + * point to Y(1) when using a byte pointer. * * \sa \ref Channel_Split_PackedToPlanar */ idpfYUV444Packed = 26, - /// \brief The image will be transferred as an YUV image with 30 bit of usable data per pixel. + /// \brief A three channel interleaved YUV format occupying 48 bit per pixel with 30 bit of usable data per pixel. (PFNC name: YUV10) /** - * This is an interleaved pixel format with 2 bytes per color component. - * The data is stored pixel-wise: + * This is an interleaved pixel format with 2 bytes per color component. + * The data is stored pixel-wise: * * \code - * 6 bytes 6 bytes 6 bytes etc. - * Y(1)Cb(1)Cr(1) Y(2)Cb(2)Cr(2) Y(3)Cb(3)Cr(3) etc. - * .......................................... - * ........................... Y(n)Cb(n)Cr(n) + * 6 bytes 6 bytes 6 bytes etc. + * Y(1)Cb(1)Cr(1) Y(2)Cb(2)Cr(2) Y(3)Cb(3)Cr(3) etc. + * .......................................... + * ........................... Y(n)Cb(n)Cr(n) * \endcode * - * The data of each color component will be LSB aligned, thus the 6 MSB of each 16 bit will - * not contain valid data. + * The data of each color component will be LSB aligned, thus the 6 MSB of each 16 bit will + * not contain valid data. * - * So the first byte in memory is the first pixels luminance component. ImageBuffer::vpData will therefore - * point to Y(1) when using a 16 bit pointer. + * So the first byte in memory is the first pixels luminance component. ImageBuffer::vpData will therefore + * point to Y(1) when using a 16 bit pointer. * * \sa \ref Channel_Split_PackedToPlanar */ idpfYUV444_10Packed = 27, - /// \brief A single channel 12 bit per pixel packed format. + /// \brief A single channel 12 bit per pixel packed format occupying 12 bit per pixel. (PFNC name: Mono12p) /** - * This format will use 3 bytes to store 2 12 bit pixel. Every 3 bytes will use the following layout in - * memory: + * This format will use 3 bytes to store 2 12 bit pixel. Every 3 bytes will use the following layout in + * memory: * * \code - * 3 bytes 3 bytes etc. - * bits 0..7(1) bits 8..11(1) bits 0..3(2) bits 4..11(2) bits 0..7(3) bits 8..11(3) bits 0..3(4) bits 4..11(4) etc. + * 3 bytes 3 bytes etc. + * bits 0..7(1) bits 8..11(1) bits 0..3(2) bits 4..11(2) bits 0..7(3) bits 8..11(3) bits 0..3(4) bits 4..11(4) etc. * \endcode * - * \note - * When the width is not divisible by 2 the line pitch of a buffer can't be used to calculate line start offsets in a buffer! - * In that case something like this can be used to access a certain pixel (pseudo code assuming 'pointerToStartOfTheBuffer' is a 'byte pointer'): + * \note + * When the width is not divisible by 2 the line pitch of a buffer can't be used to calculate line start offsets in a buffer! + * In that case something like this can be used to access a certain pixel (pseudo code assuming 'pointerToStartOfTheBuffer' is a 'byte pointer'): * * \code - * GetMono12Packed_V1Pixel( pointerToStartOfTheBuffer, pixelIndex ) - * const int offsetFromStartOfTheBuffer = pixel + pixel/2 - * if pixel divisible by 2 - * return (pointerToStartOfTheBuffer[offset] >> 4) | (pointerToStartOfTheBuffer[offset+1] << 4) - * return pointerToStartOfTheBuffer[offset]) | (pointerToStartOfTheBuffer[offset+1] & 0xF) << 8) + * GetMono12Packed_V1Pixel( pointerToStartOfTheBuffer, pixelIndex ) + * const int offsetFromStartOfTheBuffer = pixel + pixel/2 + * if pixel divisible by 2 + * return (pointerToStartOfTheBuffer[offset] >> 4) | (pointerToStartOfTheBuffer[offset+1] << 4) + * return pointerToStartOfTheBuffer[offset]) | (pointerToStartOfTheBuffer[offset+1] & 0xF) << 8) * \endcode * * \since 2.5.0 */ idpfMono12Packed_V1 = 28, - /// \brief This is a YUV411 packed image with 48 bits for four pixels. + /// \brief A three channel interleaved YUV format occupying 48 bit for four pixels. (PFNC name: YUV411_8_UYYVYY) /** - * This format uses 4:1 horizontal downsampling, which means that the Y component is - * sampled at each pixel, while U(Cb) and V(Cr) components are sampled every 4 pixels in - * horizontal direction. If each component takes 8 bits, four pixels require 48 bits. + * This format uses 4:1 horizontal downsampling, meaning the Y component is + * sampled at each pixel, while U(Cb) and V(Cr) components are sampled every 4 pixels in + * horizontal direction. If each component takes 8 bits, four pixels require 48 bits. * - * Four consecutive pixels (48 bit, 0xaabbccddeeff ) contain 8 bit chrominance blue of pixels 1, 2, 3 and 4(aa), - * 8 bit luminance of pixel 1(bb),8 bit luminance of pixel 2(cc), 8 bit chrominance red of pixels 1, 2, 3 and 4(dd), - * 8 bit luminance of pixel 3(ee) and finally 8 bit luminance of pixel 4(ff). + * Four consecutive pixels (48 bit, 0xaabbccddeeff ) contain 8 bit chrominance blue of pixels 1, 2, 3 and 4(aa), + * 8 bit luminance of pixel 1(bb),8 bit luminance of pixel 2(cc), 8 bit chrominance red of pixels 1, 2, 3 and 4(dd), + * 8 bit luminance of pixel 3(ee) and finally 8 bit luminance of pixel 4(ff). * - * Thus in memory the data will be stored like this: + * Thus in memory the data will be stored like this: * * \code - * 6 bytes 6 bytes etc. - * Cb(1,2,3,4) Y(1) Y(2) Cr(1,2,3,4) Y(3) Y(4) Cb(5,6,7,8) Y(5) Y(6) Cr(5,6,7,8) Y(7) Y(8) etc. - * .................. Cb(n,n+1,n+2,n+3) Y(n) Y(n+1) Cr(n,n+1,n+2,n+3) Y(n+2) Y(n+3) + * 6 bytes 6 bytes etc. + * Cb(1,2,3,4) Y(1) Y(2) Cr(1,2,3,4) Y(3) Y(4) Cb(5,6,7,8) Y(5) Y(6) Cr(5,6,7,8) Y(7) Y(8) etc. + * .................. Cb(n,n+1,n+2,n+3) Y(n) Y(n+1) Cr(n,n+1,n+2,n+3) Y(n+2) Y(n+3) * \endcode * - * So the first byte in memory is the chrominance blue component. ImageBuffer::vpData will therefore - * point to Cb when using a byte pointer. + * So the first byte in memory is the chrominance blue component. ImageBuffer::vpData will therefore + * point to Cb when using a byte pointer. * * \sa \ref Channel_Split_PackedToPlanar * * \since 2.13.0 */ idpfYUV411_UYYVYY_Packed = 29, - /// \brief The image will be transferred as an RGB image in planar format. + /// \brief A three channel planar RGB format. (PFNC name: RGB8_Planar) /** - * This is a format best suitable for most image processing functions. - * The image will be converted into 3 planes(a plane for each color component). + * This is a format best suitable for most image processing functions. + * The image will be converted into 3 planes(a plane for each color component). * * \code - * R(1) R(2) R(3) R(4) etc. - * ................... - * .............. R(n) - * G(1) G(2) G(3) G(4) etc. - * ................... - * .............. G(n) - * B(1) B(2) B(3) B(4) etc. - * ................... - * .............. B(n) + * R(1) R(2) R(3) R(4) etc. + * ................... + * .............. R(n) + * G(1) G(2) G(3) G(4) etc. + * ................... + * .............. G(n) + * B(1) B(2) B(3) B(4) etc. + * ................... + * .............. B(n) * \endcode * - * So the first byte in memory is the first pixels red component. ImageBuffer::vpData will therefore - * point to R(1) when using a byte pointer. + * So the first byte in memory is the first pixels red component. ImageBuffer::vpData will therefore + * point to R(1) when using a byte pointer. * * \since 2.17.0 */ @@ -4177,7 +3786,7 @@ enum TImageProcessingMode * This might be useful for applications that display the processed result but that also want to * capture data at the highest possible frame rate and is not important that EVERY image gets processed. * - * \attention This mode might result in images being returned without the expected processing on the host. + * \note This mode might result in images being returned without the expected processing on the host. * * \sa \b mvIMPACT::acquire::Device::userControlledImageProcessingEnable, \n * \b mvIMPACT::acquire::Request::hasProcessingBeenSkipped, \n @@ -4202,7 +3811,7 @@ enum TImageProcessingOptimization ipoMaximizeSpeed = 0, /// \brief Will minimize the memory footprint. This might result in a higher CPU load. /** - * \attention This mode will also result in a higher amount of memory allocation and freeing operations + * \note This mode will also result in a higher amount of memory allocation and freeing operations * thus if the application itself is working with heap memory a lot the long term effects of heap * fragmentation should be considered! */ @@ -4260,7 +3869,7 @@ enum TImageRequestControlMode /// \brief The standard mode for image requests. /** * In this mode one image will be captured from the hardware for each request - * that is send to the device driver. The image will be taken with respect to the + * that is sent to the device driver. The image will be taken with respect to the * current parameters as defined in the setting selected in the corresponding * image request control. */ @@ -4394,9 +4003,14 @@ enum TInterfaceEnumerationBehaviour iebForceEnumerate = 2 }; +#ifndef IGNORE_MVGRABBER_SPECIFIC_DOCUMENTATION //----------------------------------------------------------------------------- -/// \brief Defines how to handle interlaced image data. +/// \brief Defines how to handle interlaced image data (deprecated. /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + * * Image data might be transmitted as fields. These later can either be combined * back into a full frame or can be handled individually. */ @@ -4406,18 +4020,30 @@ enum TInterlacedMode { /// \brief Enable the interlaced function. /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + * * The device will re-construct the interlaced data into a full frame. * InvInterlaced/Interlaced is controlled by the camera parameter. */ imOn = 0, /// \brief Disable the interlaced function. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ imOff = 1 }; -#ifndef IGNORE_MVGRABBER_SPECIFIC_DOCUMENTATION //----------------------------------------------------------------------------- -/// \brief Currently available for mvTITAN/mvGAMMA-CL. +/// \brief Currently available for mvTITAN/mvGAMMA-CL (deprecated. /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + * * If mvIMPACT::acquire::lcOn is used * \if DOXYGEN_C_DOCUMENTATION * mvIMPACT::acquire::RequestInfo::lineCounter @@ -4450,8 +4076,18 @@ enum TLineCounter //----------------------------------------------------------------------------- { /// \brief Disables line counter. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ lcOff = 0, /// \brief Enables line counter. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ lcOn = 1 }; #endif // IGNORE_MVGRABBER_SPECIFIC_DOCUMENTATION @@ -4625,19 +4261,32 @@ enum TMirrorOperationMode #ifndef IGNORE_MVGRABBER_SPECIFIC_DOCUMENTATION //----------------------------------------------------------------------------- -/// \brief Defines valid modes for the handling of the device' on board memory (if available) +/// \brief Defines valid modes for the handling of the device' on board memory (if available) (deprecated. +/** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ /// \ingroup DeviceSpecificInterface enum TOnBoardMemoryMode //----------------------------------------------------------------------------- { /// \brief The device will work with reasonable default values. /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + * * This option will be the right choice for most of the user. */ obmmDefault, /// \brief The user can define how the on board memory of the device will be used. /** - * This is for advanced user only and will not be necessary in most of + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + * + * This is for advanced users only and will not be necessary in most of * the cases. */ obmmUser @@ -4706,7 +4355,7 @@ enum TPolarizedDataExtractionMode * The angle of the maximum polarization is calculated based the formula: * \f[\Theta = \frac{1}{2}*atan\left (\left ( P45-P135 \right ); \left (P0 - P90\right )\right ) \f] * - * \warning Pixels which are saturated or which don't show a signal at all will cause incorrect polarization data. This happens as a result of wrong relations between the different + * \note Pixels which are saturated or which don't show a signal at all will cause incorrect polarization data. This happens as a result of wrong relations between the different * polarization directions which causes wrong values for the different stokes parameters resulting in incorrect pixel data. Different exposure settings might improve the result. * \since 2.38.0 */ @@ -4720,20 +4369,20 @@ enum TPolarizedDataExtractionMode * The calculation of the degree of the maximum polarization is based the formula: * \f[\Pi = \frac{\sqrt{\left(P0-P90\right)^{2}+\left(P45-P135\right)^{2}}}{\left(P0+P90\right)}\f] * - * \warning Pixels which are saturated or which don't show a signal at all will cause incorrect polarization data. This happens as a result of wrong relations between the different + * \note Pixels which are saturated or which don't show a signal at all will cause incorrect polarization data. This happens as a result of wrong relations between the different * polarization directions which causes wrong values for the different stokes parameters resulting in incorrect pixel data. Different exposure settings might improve the result. * \since 2.38.0 */ prmExtractDegree, /// \brief The angle of the maximum polarization and the degree of the polarization for every '2 * 2' region in the image will be calculated and the resulting value will then be mapped to the value range of and 8-bit HSL image. /** - * The angle and the degree are calculated as described in \b mvIMPACT::acquire::prmExtractDegree and \b \b mvIMPACT::acquire::prmExtractAngle mode. Afterwards the angle is used as hue and the degree is used as saturation value + * The angle and the degree are calculated as described in \b mvIMPACT::acquire::prmExtractDegree and \b mvIMPACT::acquire::prmExtractAngle mode. Afterwards the angle is used as hue and the degree is used as saturation value * in the HSL color representation and converted to RGB color representation. * * The resulting image therefore will have a width equal to 'input image width / 2' and a height equal to 'input image height / 2'. From each 2 by 2 region (thus 4 input values) 2 output * values will be calculated and placed into the resulting temporary HSL image. Afterwards this HSL image will transformed back to RGB to generate a pseudo-color image in \b mvIMPACT::acquire::ibpfRGB888Planar format. * - * \warning Pixels which are saturated or which don't show a signal at all will cause incorrect polarization data. This happens as a result of wrong relations between the different + * \note Pixels which are saturated or which don't show a signal at all will cause incorrect polarization data. This happens as a result of wrong relations between the different * polarization directions which causes wrong values for the different stokes parameters resulting in incorrect pixel data. Different exposure settings might improve the result. * \since 2.38.0 */ @@ -5034,13 +4683,22 @@ enum TScalerMode #ifndef IGNORE_MVGRABBER_SPECIFIC_DOCUMENTATION //----------------------------------------------------------------------------- -/// \brief Analogue grabbers generate its scan clock on different ways. +/// \brief Analogue grabbers generate its scan clock on different ways (deprecated. +/** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ /// \ingroup DeviceSpecificInterface enum TScanClock //----------------------------------------------------------------------------- { /// \brief The cameras clock signal is used. /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + * * If the property \a pixelClockOutput in the camera description is either set to * mvIMPACT::acquire::ceseFallingEdge or * mvIMPACT::acquire::ceseRisingEdge. @@ -5051,9 +4709,13 @@ enum TScanClock scAuto, /// \brief The scan clock is generated by genlocking on horizontal sync.(HD) signal. /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + * * ADVANTAGES: \n * - very small jitter (typically around some 100 pico seconds) -> suitable for high pixel clock (>20Mhz) - * - for matching HD freq. values (with respect to the signal send by the camera) this will produce + * - for matching HD freq. values (with respect to the signal sent by the camera) this will produce * results almost as good as when working with an external clock signal(less scan artifacts) * * DISADVANTAGES: \n @@ -5063,6 +4725,10 @@ enum TScanClock scAnalogue, /// \brief The scan clock is generated digitally. /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + * * ADVANTAGE: \n * - locked after a single line, therefore this mode is very useful for fast channel switching * @@ -5073,16 +4739,36 @@ enum TScanClock }; //----------------------------------------------------------------------------- -/// \brief Defines valid scan modes for standard cameras. +/// \brief Defines valid scan modes for standard cameras (deprecated. +/** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ /// \ingroup DeviceSpecificInterface enum TScanStandard //----------------------------------------------------------------------------- { - /// \brief 720 x 576 Pixels for 50 Hz standard cameras, 720 x 480 Pixels for 60 Hz standard cameras + /// \brief 720 x 576 Pixels for 50 Hz standard cameras, 720 x 480 Pixels for 60 Hz standard cameras. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ ssITU601, - /// \brief 768 x 576 Pixels for 50 Hz standard cameras, 640 x 480 Pixels for 60 Hz standard cameras + /// \brief 768 x 576 Pixels for 50 Hz standard cameras, 640 x 480 Pixels for 60 Hz standard cameras. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ ssSquare, - /// \brief The user can define scan rate and camera AOI + /// \brief The user can define scan rate and camera AOI. + /** + * \deprecated Beginning with the release of 3.0.0 of Impact Acquire everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + */ ssUser }; #endif // IGNORE_MVGRABBER_SPECIFIC_DOCUMENTATION @@ -5408,7 +5094,6 @@ typedef enum TAutoExposureControl TAutoExposureControl; typedef enum TAutoGainControl TAutoGainControl; typedef enum TAutoOffsetCalibration TAutoOffsetCalibration; typedef enum TBayerConversionMode TBayerConversionMode; -typedef enum TBayerMosaicParity TBayerMosaicParity; typedef enum TBayerWhiteBalanceResult TBayerWhiteBalanceResult; typedef enum TBlueFOXDigitalInputThreshold TBlueFOXDigitalInputThreshold; typedef enum TBlueFOXFooterMode TBlueFOXFooterMode; @@ -5417,7 +5102,6 @@ typedef enum TBlueFOXOffsetAutoBlackSpeed TBlueFOXOffsetAutoBlackSpeed; typedef enum TBlueFOXSensorTiming TBlueFOXSensorTiming; typedef enum TBlueFOXTransferSize TBlueFOXTransferSize; typedef enum TBoolean TBoolean; -typedef enum TBufferPartDataType TBufferPartDataType; typedef enum TCameraAoiMode TCameraAoiMode; typedef enum TCameraBinningMode TCameraBinningMode; typedef enum TCameraDataFormat TCameraDataFormat; @@ -5452,10 +5136,6 @@ typedef enum TDeviceAutoNegotiatePacketSizeMode TDeviceAutoNegotiatePacketSizeMo typedef enum TDeviceCapability TDeviceCapability; typedef enum TDeviceClass TDeviceClass; typedef enum TDeviceDigitalOutputMode TDeviceDigitalOutputMode; -#if !defined(BUILD_FOR_JAVA) // don't wrap deprecated stuff -typedef enum TDeviceEventMode TDeviceEventMode; -typedef enum TDeviceEventType TDeviceEventType; -#endif // #if !defined(BUILD_FOR_JAVA) // don't wrap deprecated stuff typedef enum TDeviceImageTrigger TDeviceImageTrigger; typedef enum TDeviceInterfaceLayout TDeviceInterfaceLayout; typedef enum TDeviceLoadSettings TDeviceLoadSettings; @@ -5482,7 +5162,6 @@ typedef enum THWUpdateResult THWUpdateResult; typedef enum TI2COperationMode TI2COperationMode; typedef enum TI2COperationStatus TI2COperationStatus; typedef enum TImageBufferFormatReinterpreterMode TImageBufferFormatReinterpreterMode; -typedef enum TImageBufferPixelFormat TImageBufferPixelFormat; typedef enum TImageDestinationPixelFormat TImageDestinationPixelFormat; typedef enum TImageFileFormat TImageFileFormat; typedef enum TImageProcessingFilter TImageProcessingFilter; @@ -5494,7 +5173,6 @@ typedef enum TInfoSensorColorMode TInfoSensorColorMode; typedef enum TInfoSensorColorPattern TInfoSensorColorPattern; typedef enum TInfoSensorType TInfoSensorType; typedef enum TInterfaceEnumerationBehaviour TInterfaceEnumerationBehaviour; -typedef enum TInterlacedMode TInterlacedMode; typedef enum TLineCounter TLineCounter; typedef enum TLUTGammaMode TLUTGammaMode; typedef enum TLUTImplementation TLUTImplementation; @@ -5528,12 +5206,12 @@ typedef enum TVirtualDeviceTestMode TVirtualDeviceTestMode; typedef enum TWhiteBalanceCalibrationMode TWhiteBalanceCalibrationMode; typedef enum TWhiteBalanceParameter TWhiteBalanceParameter; -#ifdef __GNUC__ -# define ATTR_PACK_FOUR __attribute__((packed)) __attribute__ ((aligned (4))) -#else -#define ATTR_PACK_FOUR +#if defined(__GNUC__) && !defined(_WIN32) +# define ATTR_PACK_4 __attribute__((packed)) __attribute__ ((aligned (4))) +#else // _MSC_VER, __BORLANDC__, SWIG, ... +# define ATTR_PACK_4 # pragma pack(push, 4) // 4 byte structure alignment -#endif // #ifdef __GNUC__ +#endif // defined(__GNUC__) && !defined(_WIN32) //----------------------------------------------------------------------------- /// \brief A structure containing information about the currently running firmware update process @@ -5544,12 +5222,13 @@ struct FirmwareUpdateStatusData TFirmwareUpdateStep updateStep; int progressPercent; double timeElapsed_s; -} ATTR_PACK_FOUR; +} ATTR_PACK_4; -#ifndef __GNUC__ +#if defined(_WIN32) || !defined(__GNUC__) # pragma pack(pop) // restore previous structure alignment -#endif -#undef ATTR_PACK_FOUR +#endif // defined(_WIN32) || !defined(__GNUC__) +#undef ATTR_PACK_4 + typedef struct FirmwareUpdateStatusData FirmwareUpdateStatusData; //----------------------------------------------------------------------------- @@ -5557,7 +5236,8 @@ typedef struct FirmwareUpdateStatusData FirmwareUpdateStatusData; /** * This callback will be executed to inform the user about the progress of the firmware update. */ -typedef int( *CBP_FIRMWARE_UPDATE )( /// The pointer to the associated FirmwareUpdater object +typedef int( *CBP_FIRMWARE_UPDATE )( + /// The pointer to the associated FirmwareUpdater object void* pUserData, /// The information about the internal states FirmwareUpdateStatusData* statusData, diff --git a/Cigarette/MvIMPACT/DriverBase/Include/mvVersionInfo.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/DriverBase/Include/mvVersionInfo.h similarity index 55% rename from Cigarette/MvIMPACT/DriverBase/Include/mvVersionInfo.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/DriverBase/Include/mvVersionInfo.h index a2fc4cd1..ff0b7a86 100644 --- a/Cigarette/MvIMPACT/DriverBase/Include/mvVersionInfo.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/DriverBase/Include/mvVersionInfo.h @@ -1,12 +1,15 @@ //----------------------------------------------------------------------------- -// (C) Copyright 2005 - 2021 by MATRIX VISION GmbH +// @description: Impact Acquire +// @copyright: (C) Copyright 2005 - 2023 by Balluff GmbH +// @authors: APIs and drivers development team at Balluff GmbH +// @initial date: 2005 // -// This software is provided by MATRIX VISION GmbH "as is" +// This software is provided by Balluff GmbH "as is" // and any express or implied warranties, including, but not limited to, the // implied warranties of merchantability and fitness for a particular purpose // are disclaimed. // -// In no event shall MATRIX VISION GmbH be liable for any direct, +// In no event shall Balluff GmbH be liable for any direct, // indirect, incidental, special, exemplary, or consequential damages // (including, but not limited to, procurement of substitute goods or services; // loss of use, data, or profits; or business interruption) however caused and @@ -25,39 +28,44 @@ # error "This file must NOT be included directly! Include mvDeviceManager.h(C-API) or mvIMPACT_acquire.h(C++ API) instead" #endif // #if !defined(mvDriverBaseEnumsH) && !defined(SWIG) -/// \brief Returns the major version number of the current mvIMPACT Acquire release. +/// \brief Returns the major version number of the current Impact Acquire release. /** - * \returns The major version number of mvIMPACT Acquire + * \returns The major version number of Impact Acquire + * \ingroup CommonInterface */ -#define MVIMPACT_ACQUIRE_MAJOR_VERSION 2 +#define MVIMPACT_ACQUIRE_MAJOR_VERSION 3 -/// \brief Returns the minor version number of the current mvIMPACT Acquire release. +/// \brief Returns the minor version number of the current Impact Acquire release. /** - * \returns The minor version number of mvIMPACT Acquire -*/ -#define MVIMPACT_ACQUIRE_MINOR_VERSION 43 + * \returns The minor version number of Impact Acquire + * \ingroup CommonInterface + */ +#define MVIMPACT_ACQUIRE_MINOR_VERSION 0 -/// \brief Returns the release version number of the current mvIMPACT Acquire release. +/// \brief Returns the release version number of the current Impact Acquire release. /** - * \returns The release version number of mvIMPACT Acquire + * \returns The release version number of Impact Acquire + * \ingroup CommonInterface */ -#define MVIMPACT_ACQUIRE_RELEASE_VERSION 0 +#define MVIMPACT_ACQUIRE_RELEASE_VERSION 2 -/// \brief Returns the build version number of the current mvIMPACT Acquire release. +/// \brief Returns the build version number of the current Impact Acquire release. /** - * \returns The build version number of mvIMPACT Acquire + * \returns The build version number of Impact Acquire + * \ingroup CommonInterface */ -#define MVIMPACT_ACQUIRE_BUILD_VERSION 3180 +#define MVIMPACT_ACQUIRE_BUILD_VERSION 3838 -/// \brief Returns the full version number of the current mvIMPACT Acquire release as a string ("2.43.0.3180"). +/// \brief Returns the full version number of the current Impact Acquire release as a string ("3.0.2.3838"). /** - * \returns The full version string of mvIMPACT Acquire + * \returns The full version string of Impact Acquire + * \ingroup CommonInterface */ -#define MVIMPACT_ACQUIRE_VERSION_STRING "2.43.0.3180" +#define MVIMPACT_ACQUIRE_VERSION_STRING "3.0.2.3838" -/// \brief This is a macro which evaluates to true if the current mvIMPACT Acquire version is at least major.minor.release. +/// \brief This is a macro which evaluates to true if the current Impact Acquire version is at least major.minor.release. /** - * For example, to test if the program will be compiled with mvIMPACT Acquire 2.0 or higher, the following can be done: + * For example, to test if the program will be compiled with Impact Acquire 2.0 or higher, the following can be done: * * \code * HDISP hDisp = getDisplayHandleFromSomewhere(); @@ -68,7 +76,8 @@ * #endif * \endcode * - * \since 2.0.0 + * \since 2.0.0 + * \ingroup CommonInterface */ #define MVIMPACT_ACQUIRE_CHECK_VERSION(MAJOR, MINOR, RELEASE) \ (MVIMPACT_ACQUIRE_MAJOR_VERSION > (MAJOR) || \ diff --git a/Cigarette/MvIMPACT/apps/Common/CommonGUIFunctions.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/CommonGUIFunctions.cpp similarity index 55% rename from Cigarette/MvIMPACT/apps/Common/CommonGUIFunctions.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/CommonGUIFunctions.cpp index 0aed8562..d8bf1815 100644 --- a/Cigarette/MvIMPACT/apps/Common/CommonGUIFunctions.cpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/CommonGUIFunctions.cpp @@ -1,3 +1,20 @@ +// +// @description: Example applications for Impact Acquire +// @copyright: Copyright (C) 2018 - 2020 Balluff GmbH +// @authors: APIs and drivers development team at Balluff GmbH +// @initial date: 2018-04-03 +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,i +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + #include "CommonGUIFunctions.h" #include "wxIncludePrologue.h" diff --git a/Cigarette/MvIMPACT/apps/Common/CommonGUIFunctions.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/CommonGUIFunctions.h similarity index 52% rename from Cigarette/MvIMPACT/apps/Common/CommonGUIFunctions.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/CommonGUIFunctions.h index b38f05ab..02e8ad40 100644 --- a/Cigarette/MvIMPACT/apps/Common/CommonGUIFunctions.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/CommonGUIFunctions.h @@ -1,3 +1,20 @@ +/* + * @description: Example applications for Impact Acquire + * @copyright: Copyright (C) 2018 - 2020 Balluff GmbH + * @authors: APIs and drivers development team at Balluff GmbH + * @initial date: 2018-04-03 + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + //----------------------------------------------------------------------------- #ifndef CommonGUIFunctionsH #define CommonGUIFunctionsH CommonGUIFunctionsH diff --git a/Cigarette/MvIMPACT/apps/Common/Info.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/Info.h similarity index 100% rename from Cigarette/MvIMPACT/apps/Common/Info.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/Info.h diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/ProxyResolverContext.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/ProxyResolverContext.h new file mode 100644 index 00000000..5eaf7e7c --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/ProxyResolverContext.h @@ -0,0 +1,39 @@ +/* + * @description: Example applications for Impact Acquire + * @copyright: Copyright (C) 2019 Balluff GmbH + * @authors: APIs and drivers development team at Balluff GmbH + * @initial date: 2019-02-19 + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +//----------------------------------------------------------------------------- +#ifndef ProxyResolverContextH +#define ProxyResolverContextH ProxyResolverContextH +//----------------------------------------------------------------------------- +#include + +//----------------------------------------------------------------------------- +class ProxyResolverContext +//----------------------------------------------------------------------------- +{ + struct ProxyResolverContextImpl* pImpl_; +public: + explicit ProxyResolverContext( const std::wstring& userAgent = std::wstring(), const std::wstring& url = std::wstring() ); + ~ProxyResolverContext(); + + std::wstring GetProxy( unsigned int index ) const; + unsigned int GetProxyPort( unsigned int index ) const; +}; + +bool IsCurrentUserLocalAdministrator( void ); + +#endif // ProxyResolverContextH diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/aviexception.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/aviexception.h new file mode 100644 index 00000000..4b62f952 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/aviexception.h @@ -0,0 +1,56 @@ +/* + * @description: Example applications for Impact Acquire + * @copyright: Copyright (C) 2006 - 2013 Balluff GmbH + * @authors: APIs and drivers development team at Balluff GmbH + * @initial date: 2006-10-20 + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +//---------------------------------------------------------------------------------------- +#ifndef aviexceptionH +#define aviexceptionH aviexceptionH +//---------------------------------------------------------------------------------------- +#include + +//---------------------------------------------------------------------------------------- +class AVIException +//---------------------------------------------------------------------------------------- +{ +public: + virtual const char* what() const = 0; +}; + +//---------------------------------------------------------------------------------------- +class AEUnsupportedCodec : public AVIException +//---------------------------------------------------------------------------------------- +{ +public: + const char* what() const + { + return "Unsupported codec"; + } +}; + +//---------------------------------------------------------------------------------------- +class AVIWrapperException : public AVIException +//---------------------------------------------------------------------------------------- +{ + std::string m_errorString; +public: + AVIWrapperException( const char* pError ) : m_errorString( pError ) {} + const char* what() const + { + return m_errorString.c_str(); + } +}; + +#endif // aviexceptionH \ No newline at end of file diff --git a/Cigarette/MvIMPACT/apps/Common/avihelper.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/avihelper.cpp similarity index 81% rename from Cigarette/MvIMPACT/apps/Common/avihelper.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/avihelper.cpp index 2c6c87e9..e24caefc 100644 --- a/Cigarette/MvIMPACT/apps/Common/avihelper.cpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/avihelper.cpp @@ -1,3 +1,20 @@ +// +// @description: Example applications for Impact Acquire +// @copyright: Copyright (C) 2006 - 2018 Balluff GmbH +// @authors: APIs and drivers development team at Balluff GmbH +// @initial date: 2006-10-20 +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,i +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + //---------------------------------------------------------------------------------------- #include "avihelper.h" //---------------------------------------------------------------------------------------- diff --git a/Cigarette/MvIMPACT/apps/Common/avihelper.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/avihelper.h similarity index 51% rename from Cigarette/MvIMPACT/apps/Common/avihelper.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/avihelper.h index 94e40192..ce23e18d 100644 --- a/Cigarette/MvIMPACT/apps/Common/avihelper.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/avihelper.h @@ -1,3 +1,20 @@ +/* + * @description: Example applications for Impact Acquire + * @copyright: Copyright (C) 2006 - 2018 Balluff GmbH + * @authors: APIs and drivers development team at Balluff GmbH + * @initial date: 2006-10-20 + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + //---------------------------------------------------------------------------------------- #ifndef avihelperH #define avihelperH avihelperH diff --git a/Cigarette/MvIMPACT/apps/Common/aviwrapper.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/aviwrapper.cpp similarity index 89% rename from Cigarette/MvIMPACT/apps/Common/aviwrapper.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/aviwrapper.cpp index b71dd2a2..77ac7f00 100644 --- a/Cigarette/MvIMPACT/apps/Common/aviwrapper.cpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/aviwrapper.cpp @@ -1,3 +1,20 @@ +// +// @description: Example applications for Impact Acquire +// @copyright: Copyright (C) 2006 - 2019 Balluff GmbH +// @authors: APIs and drivers development team at Balluff GmbH +// @initial date: 2006-10-20 +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,i +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + //---------------------------------------------------------------------------------------- #include "aviwrapper.h" #include diff --git a/Cigarette/MvIMPACT/apps/Common/aviwrapper.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/aviwrapper.h similarity index 65% rename from Cigarette/MvIMPACT/apps/Common/aviwrapper.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/aviwrapper.h index c49d1489..e2f82ca7 100644 --- a/Cigarette/MvIMPACT/apps/Common/aviwrapper.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/aviwrapper.h @@ -1,3 +1,20 @@ +/* + * @description: Example applications for Impact Acquire + * @copyright: Copyright (C) 2006 - 2019 Balluff GmbH + * @authors: APIs and drivers development team at Balluff GmbH + * @initial date: 2006-10-20 + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + //---------------------------------------------------------------------------------------- #ifndef aviwrapperH #define aviwrapperH aviwrapperH diff --git a/Cigarette/MvIMPACT/apps/Common/exampleHelper.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/exampleHelper.h similarity index 93% rename from Cigarette/MvIMPACT/apps/Common/exampleHelper.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/exampleHelper.h index 2f9e857a..b4ae3346 100644 --- a/Cigarette/MvIMPACT/apps/Common/exampleHelper.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/exampleHelper.h @@ -1,3 +1,20 @@ +/* + * @description: Example applications for Impact Acquire + * @copyright: Copyright (C) 2009 - 2023 Balluff GmbH + * @authors: APIs and drivers development team at Balluff GmbH + * @initial date: 2009-02-25 + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + //----------------------------------------------------------------------------- #ifndef exampleHelperH #define exampleHelperH exampleHelperH @@ -6,6 +23,8 @@ #include #include #include + +#include #include //----------------------------------------------------------------------------- @@ -417,12 +436,9 @@ inline mvIMPACT::acquire::Device* getDeviceFromUserInput( const mvIMPACT::acquir conditionalSetProperty( pDev->acquisitionStartStopBehaviour, assbUser, true ); std::cout << ", acquisition start/stop behaviour: " << pDev->acquisitionStartStopBehaviour.readS(); } - if( pDev->interfaceLayout.isValid() && !pDev->interfaceLayout.isWriteable() ) + if( pDev->interfaceLayout.isValid() && !pDev->interfaceLayout.isWriteable() && pDev->isInUse() ) { - if( pDev->isInUse() ) - { - std::cout << ", !!!ALREADY IN USE!!!"; - } + std::cout << ", !!!ALREADY IN USE!!!"; } std::cout << ")" << std::endl; validDeviceNumbers.insert( i ); @@ -485,7 +501,7 @@ inline std::vector::size_type getValidDevices( const return v.size(); } -#if defined(linux) || defined(__linux) || defined(__linux__) +#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__APPLE__) # include # include # include @@ -540,6 +556,6 @@ inline int checkKeyboardInput( void ) return 0; } -#endif // #if defined(linux) || defined(__linux) || defined(__linux__) +#endif // #if defined(linux) || defined(__linux) || defined(__linux__) || defined(__APPLE__) #endif // exampleHelperH diff --git a/Cigarette/MvIMPACT/apps/Common/exampleHelper_C.c b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/exampleHelper_C.c similarity index 94% rename from Cigarette/MvIMPACT/apps/Common/exampleHelper_C.c rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/exampleHelper_C.c index d33b4ea2..0c444a08 100644 --- a/Cigarette/MvIMPACT/apps/Common/exampleHelper_C.c +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/exampleHelper_C.c @@ -1,3 +1,20 @@ +/* + * @description: Example applications for Impact Acquire + * @copyright: Copyright (C) 2009 - 2022 Balluff GmbH + * @authors: APIs and drivers development team at Balluff GmbH + * @initial date: 2009-10-27 + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + //----------------------------------------------------------------------------- #include #include @@ -577,7 +594,7 @@ unsigned int isFeatureWriteable( HOBJ hObj ) return isFeatureFlagSet( hObj, cfWriteAccess ); } -#if defined(linux) || defined(__linux) || defined(__linux__) +#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__APPLE__) # include # include //----------------------------------------------------------------------------- @@ -596,4 +613,4 @@ unsigned waitForInput( int maxWait_sec, int fd ) return select( fd + 1, &rfds, NULL, NULL, &tv ); } -#endif // #if defined(linux) || defined(__linux) || defined(__linux__) +#endif // #if defined(linux) || defined(__linux) || defined(__linux__) || defined(__APPLE__) diff --git a/Cigarette/MvIMPACT/apps/Common/exampleHelper_C.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/exampleHelper_C.h similarity index 72% rename from Cigarette/MvIMPACT/apps/Common/exampleHelper_C.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/exampleHelper_C.h index feafd42c..98682e41 100644 --- a/Cigarette/MvIMPACT/apps/Common/exampleHelper_C.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/exampleHelper_C.h @@ -1,16 +1,34 @@ +/* + * @description: Example applications for Impact Acquire + * @copyright: Copyright (C) 2009 - 2023 Balluff GmbH + * @authors: APIs and drivers development team at Balluff GmbH + * @initial date: 2009-10-27 + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + //----------------------------------------------------------------------------- #ifndef exampleHelper_CH #define exampleHelper_CH exampleHelper_CH //----------------------------------------------------------------------------- +#include #include #define END_APPLICATION \ printf( "Press [ENTER] to end the application.\n" ); \ return getchar() == EOF ? 2 : 1; -#if defined(linux) || defined(__linux) || defined(__linux__) +#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__APPLE__) unsigned waitForInput( int maxWait_sec, int fd ); -#endif // #if defined(linux) || defined(__linux) || defined(__linux__) +#endif // #if defined(linux) || defined(__linux) || defined(__linux__) || defined(__APPLE__) int getIntValFromSTDIn( void ); int getPropI( HOBJ hProp, int index ); diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/qtIncludeEpilogue.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/qtIncludeEpilogue.h new file mode 100644 index 00000000..82059c8d --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/qtIncludeEpilogue.h @@ -0,0 +1,20 @@ +/* + * @description: Example applications for Impact Acquire + * @copyright: Copyright (C) 2018 Balluff GmbH + * @authors: APIs and drivers development team at Balluff GmbH + * @initial date: 2018-11-29 + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#if defined(_MSC_VER) && (_MSC_VER >= 1400) // is at least VC 2005 compiler? +# pragma warning( pop ) +#endif diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/qtIncludePrologue.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/qtIncludePrologue.h new file mode 100644 index 00000000..d19e8956 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/qtIncludePrologue.h @@ -0,0 +1,24 @@ +/* + * @description: Example applications for Impact Acquire + * @copyright: Copyright (C) 2018 Balluff GmbH + * @authors: APIs and drivers development team at Balluff GmbH + * @initial date: 2018-11-29 + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#if defined(_MSC_VER) && (_MSC_VER >= 1400) // is at least VC 2005 compiler? +# pragma warning( push ) +# pragma warning( disable : 4127 ) // 'conditional expression is constant' +# pragma warning( disable : 4244 ) // 'conversion from 'Bla' to 'Blub', possible loss of data +# pragma warning( disable : 4251 ) // 'class 'Bla' needs to have dll-interface to be used by clients of class 'Blub'' +# pragma warning( disable : 4800 ) // 'int' : forcing value to bool 'true' or 'false' (performance warning) +#endif diff --git a/Cigarette/MvIMPACT/apps/Common/win32/ProxyResolver.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/win32/ProxyResolver.cpp similarity index 91% rename from Cigarette/MvIMPACT/apps/Common/win32/ProxyResolver.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/win32/ProxyResolver.cpp index 1c6a0835..ce755f11 100644 --- a/Cigarette/MvIMPACT/apps/Common/win32/ProxyResolver.cpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/win32/ProxyResolver.cpp @@ -1,3 +1,20 @@ +// +// @description: Example applications for Impact Acquire +// @copyright: Copyright (C) 2019 Balluff GmbH +// @authors: APIs and drivers development team at Balluff GmbH +// @initial date: 2019-02-19 +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,i +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + #include "ProxyResolver.h" #if _WIN32_WINNT < 0x0602 // This stuff became available with Windows 8 diff --git a/Cigarette/MvIMPACT/apps/Common/win32/ProxyResolver.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/win32/ProxyResolver.h similarity index 64% rename from Cigarette/MvIMPACT/apps/Common/win32/ProxyResolver.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/win32/ProxyResolver.h index 946fb6f3..7af6b24e 100644 --- a/Cigarette/MvIMPACT/apps/Common/win32/ProxyResolver.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/win32/ProxyResolver.h @@ -1,3 +1,20 @@ +/* + * @description: Example applications for Impact Acquire + * @copyright: Copyright (C) 2019 - 2022 Balluff GmbH + * @authors: APIs and drivers development team at Balluff GmbH + * @initial date: 2019-02-19 + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + #pragma once #include #include @@ -6,7 +23,7 @@ typedef struct _WINHTTP_PROXY_RESULT_ENTRY { BOOL fProxy; // Is this a proxy or DIRECT? - BOOL fBypass; // If DIRECT, is it bypassing a proxy (intranet) or is all traffic DIRECT (internet) + BOOL fBypass; // If DIRECT, is it bypassing a proxy (intranet) or is all traffic DIRECT (Internet) INTERNET_SCHEME ProxyScheme; // The scheme of the proxy, SOCKS, HTTP (CERN Proxy), HTTPS (SSL through Proxy) PWSTR pwszProxy; // Hostname of the proxy. INTERNET_PORT ProxyPort; // Port of the proxy. diff --git a/Cigarette/MvIMPACT/apps/Common/win32/ProxyResolverContext.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/win32/ProxyResolverContext.cpp similarity index 87% rename from Cigarette/MvIMPACT/apps/Common/win32/ProxyResolverContext.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/win32/ProxyResolverContext.cpp index 9f65f9ae..9ec62e46 100644 --- a/Cigarette/MvIMPACT/apps/Common/win32/ProxyResolverContext.cpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/win32/ProxyResolverContext.cpp @@ -1,3 +1,20 @@ +// +// @description: Example applications for Impact Acquire +// @copyright: Copyright (C) 2019 Balluff GmbH +// @authors: APIs and drivers development team at Balluff GmbH +// @initial date: 2019-02-19 +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,i +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + //----------------------------------------------------------------------------- #include "../ProxyResolverContext.h" #include "ProxyResolver.h" diff --git a/Cigarette/MvIMPACT/apps/Common/wxAbstraction.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/wxAbstraction.h similarity index 79% rename from Cigarette/MvIMPACT/apps/Common/wxAbstraction.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/wxAbstraction.h index ce4487ab..039f3034 100644 --- a/Cigarette/MvIMPACT/apps/Common/wxAbstraction.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/wxAbstraction.h @@ -1,8 +1,25 @@ +/* + * @description: Example applications for Impact Acquire + * @copyright: Copyright (C) 2008 - 2023 Balluff GmbH + * @authors: APIs and drivers development team at Balluff GmbH + * @initial date: 2008-08-12 + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + //----------------------------------------------------------------------------- #ifndef wxAbstractionH #define wxAbstractionH wxAbstractionH //----------------------------------------------------------------------------- -#include +#include #include #include #include @@ -12,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -28,6 +46,14 @@ #include #include "wxIncludeEpilogue.h" +#ifdef __APPLE__ +# define MV_MENU_SHORTCUT_CTRL_STRING "COMMAND" +# define MV_MENU_SHORTCUT_ALT_STRING "OPTION" +#else +# define MV_MENU_SHORTCUT_ALT_STRING "ALT" +# define MV_MENU_SHORTCUT_CTRL_STRING "CTRL" +#endif // #ifdef __APPLE__ + //----------------------------------------------------------------------------- struct ConvertedString : wxString //----------------------------------------------------------------------------- @@ -38,27 +64,27 @@ struct ConvertedString : wxString ConvertedString( const std::string& s ) : wxString( s.c_str(), wxConvUTF8 ) {} ConvertedString( const wxString& s ) : -# if wxCHECK_VERSION(2,9,0) +# if wxCHECK_VERSION(2,9,0) wxString( s.mb_str(), wxConvUTF8 ) {} -# else +# else wxString( s.c_str(), wxConvUTF8 ) {} -# endif +# endif // #if wxCHECK_VERSION(2,9,0) #else ConvertedString( const char* s ) : wxString( s ) {} ConvertedString( const std::string& s ) : wxString( s.c_str() ) {} ConvertedString( const wxString& s ) : -# if wxCHECK_VERSION(2,9,0) +# if wxCHECK_VERSION(2,9,0) wxString( s.mb_str() ) {} -# else +# else wxString( s.c_str() ) {} -# endif -#endif +# endif // #if wxCHECK_VERSION(2,9,0) +#endif // #if wxUSE_UNICODE }; -#if ( wxMINOR_VERSION > 6 ) && ( wxMAJOR_VERSION < 3 ) && !WXWIN_COMPATIBILITY_2_6 -#include +#if wxCHECK_VERSION( 2, 7, 0 ) && !WXWIN_COMPATIBILITY_2_6 +# include enum { wxOPEN = wxFD_OPEN, @@ -68,14 +94,14 @@ enum wxMULTIPLE = wxFD_MULTIPLE, wxCHANGE_DIR = wxFD_CHANGE_DIR }; -#endif +#endif // #if wxCHECK_VERSION( 2, 7, 0 ) && !WXWIN_COMPATIBILITY_2_6 //----------------------------------------------------------------------------- enum TApplicationColors //----------------------------------------------------------------------------- { acRedPastel = ( 200 << 16 ) | ( 200 << 8 ) | 255, - acYellowPastel = ( 180 << 16 ) | ( 255 << 8 ) | 255, + acOrangePastel = ( 70 << 16 ) | ( 180 << 8 ) | 255, acBluePastel = ( 255 << 16 ) | ( 220 << 8 ) | 200, acDarkBluePastel = ( 255 << 16 ) | ( 100 << 8 ) | 80, acGreenPastel = ( 200 << 16 ) | ( 255 << 8 ) | 200, @@ -100,14 +126,24 @@ public: static void Save( wxWindow* pWin, const wxString& windowName = wxT( "MainFrame" ) ) { wxConfigBase* pConfig( wxConfigBase::Get() ); - int Height, Width, XPos, YPos; - pWin->GetSize( &Width, &Height ); + int height, width, XPos, YPos; + pWin->GetSize( &width, &height ); pWin->GetPosition( &XPos, &YPos ); // when we e.g. try to write config stuff on a read-only file system the result can // be an annoying message box. Therefore we switch off logging during the storage operation. wxLogNull logSuspendScope; - pConfig->Write( wxString::Format( wxT( "/%s/h" ), windowName.c_str() ), Height ); - pConfig->Write( wxString::Format( wxT( "/%s/w" ), windowName.c_str() ), Width ); + // For some reasons on some systems negative values might be reported from time to time. This has + // been observed on multi-screen setups so far and when this happens the next time an application + // is stared the window then is just visible in the taskbar on Windows. In order to prevent this + // we don't store negative values. + if( height > 0 ) + { + pConfig->Write( wxString::Format( wxT( "/%s/h" ), windowName.c_str() ), height ); + } + if( width > 0 ) + { + pConfig->Write( wxString::Format( wxT( "/%s/w" ), windowName.c_str() ), width ); + } pConfig->Write( wxString::Format( wxT( "/%s/x" ), windowName.c_str() ), XPos ); pConfig->Write( wxString::Format( wxT( "/%s/y" ), windowName.c_str() ), YPos ); if( dynamic_cast( pWin ) ) @@ -116,26 +152,39 @@ public: } pConfig->Flush(); } - static wxRect Load( const wxRect& defaultDimensions, bool& boMaximized, const wxString& windowName = wxT( "MainFrame" ) ) + static wxRect Load( const wxRect& defaultDimensions, bool& boMaximized, const wxString& applicationName = wxT( "" ), const wxString& windowName = wxT( "MainFrame" ) ) { - wxConfigBase* pConfig( wxConfigBase::Get() ); + wxConfigBase* pConfig( applicationName.IsEmpty() ? wxConfigBase::Get() : new wxConfig( applicationName ) ); wxRect rect; rect.height = pConfig->Read( wxString::Format( wxT( "/%s/h" ), windowName.c_str() ), defaultDimensions.height ); rect.width = pConfig->Read( wxString::Format( wxT( "/%s/w" ), windowName.c_str() ), defaultDimensions.width ); rect.x = pConfig->Read( wxString::Format( wxT( "/%s/x" ), windowName.c_str() ), defaultDimensions.x ); rect.y = pConfig->Read( wxString::Format( wxT( "/%s/y" ), windowName.c_str() ), defaultDimensions.y ); boMaximized = pConfig->Read( wxString::Format( wxT( "/%s/maximized" ), windowName.c_str() ), 1l ) != 0; - int displayWidth = 0; - int displayHeight = 0; - wxDisplaySize( &displayWidth, &displayHeight ); - if( ( rect.x >= displayWidth ) || ( ( rect.x + rect.width ) < 0 ) ) + if( !applicationName.IsEmpty() ) { - rect.x = 0; + delete pConfig; } - if( ( rect.y >= displayHeight ) || ( ( rect.y + rect.height ) < 0 ) ) + // Make sure the upper left corner is on one of the screens; if not, make sure part of the window is visible + const int monitor = wxDisplay::GetFromPoint( wxPoint( rect.x, rect.y ) ); + if( monitor == wxNOT_FOUND ) { + rect.x = 0; rect.y = 0; } + else + { + wxDisplay currentDisplay( monitor ); + wxRect displayRect = currentDisplay.GetGeometry(); + if( rect.x > ( displayRect.x + displayRect.width - 100 ) ) + { + rect.x = displayRect.x; + } + if( rect.y > ( displayRect.y + displayRect.height - 100 ) ) + { + rect.y = displayRect.y; + } + } return rect; } }; @@ -196,14 +245,14 @@ public: inline wxString LoadGenTLProducer( wxDynamicLibrary& lib ) //----------------------------------------------------------------------------- { -#ifdef _WIN32 +#if defined(_WIN32) || defined(WIN32) || defined(__WIN32__) const wxString libName( wxT( "mvGenTLProducer.cti" ) ); #else - const wxString libName( wxT( "libmvGenTLProducer.so" ) ); -#endif + const wxString libName( wxDynamicLibrary::CanonicalizeName( wxT( "mvGenTLProducer" ) ) ); +#endif // #if defined(_WIN32) || defined(WIN32) || defined(__WIN32__) const wxString GenTLPathVariable( ( sizeof( void* ) == 8 ) ? wxT( "GENICAM_GENTL64_PATH" ) : wxT( "GENICAM_GENTL32_PATH" ) ); -#if defined(linux) || defined(__linux) || defined(__linux__) +#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__APPLE__) const wxChar PATH_SEPARATOR( wxT( ':' ) ); #elif defined(_WIN32) || defined(WIN32) || defined(__WIN32__) const wxChar PATH_SEPARATOR( wxT( ';' ) ); @@ -248,7 +297,7 @@ inline void AddSourceInfo( wxWindow* pParent, wxSizer* pParentSizer ) { wxBoxSizer* pSizer = new wxBoxSizer( wxHORIZONTAL ); pSizer->Add( new wxStaticText( pParent, wxID_ANY, wxT( "The complete source code belonging to this application can be obtained by contacting " ) ) ); - pSizer->Add( new wxHyperlinkCtrl( pParent, wxID_ANY, COMPANY_NAME, COMPANY_WEBSITE ) ); + pSizer->Add( new wxHyperlinkCtrl( pParent, wxID_ANY, wxT( COMPANY_NAME_FULL ), wxT( COMPANY_URL_HTTPS ) ) ); pParentSizer->Add( pSizer, 0, wxALL | wxALIGN_CENTER, 5 ); } @@ -258,7 +307,7 @@ inline void AddSupportInfo( wxWindow* pParent, wxSizer* pParentSizer ) { wxBoxSizer* pSizer = new wxBoxSizer( wxHORIZONTAL ); pSizer->Add( new wxStaticText( pParent, wxID_ANY, wxT( "Support contact: " ) ) ); - pSizer->Add( new wxHyperlinkCtrl( pParent, wxID_ANY, COMPANY_SUPPORT_MAIL, COMPANY_SUPPORT_MAIL ) ); + pSizer->Add( new wxHyperlinkCtrl( pParent, wxID_ANY, wxT( COMPANY_SUPPORT_SERVICEDESK ), wxT( COMPANY_SUPPORT_SERVICEDESK ) ) ); pParentSizer->Add( pSizer, 0, wxALL | wxALIGN_CENTER, 5 ); } @@ -268,8 +317,8 @@ inline void AddwxWidgetsInfo( wxWindow* pParent, wxSizer* pParentSizer ) { wxBoxSizer* pSizer = new wxBoxSizer( wxHORIZONTAL ); pSizer->Add( new wxStaticText( pParent, wxID_ANY, wxT( "This tool has been written using " ) ) ); - pSizer->Add( new wxHyperlinkCtrl( pParent, wxID_ANY, wxT( "wxWidgets" ), wxT( "http://www.wxwidgets.org" ) ) ); - pSizer->Add( new wxStaticText( pParent, wxID_ANY, wxString::Format( wxT( " %d.%d.%d." ), wxMAJOR_VERSION, wxMINOR_VERSION, wxRELEASE_NUMBER ) ) ); + pSizer->Add( new wxHyperlinkCtrl( pParent, wxID_ANY, wxT( "wxWidgets" ), wxT( "https://www.wxwidgets.org" ) ) ); + pSizer->Add( new wxStaticText( pParent, wxID_ANY, wxString::Format( wxT( " %d.%d.%d.%d." ), wxMAJOR_VERSION, wxMINOR_VERSION, wxRELEASE_NUMBER, wxSUBRELEASE_NUMBER ) ) ); pParentSizer->Add( pSizer, 0, wxALL | wxALIGN_CENTER, 5 ); } @@ -320,7 +369,50 @@ inline void AppendPathSeparatorIfNeeded( wxString& path ) } //----------------------------------------------------------------------------- -inline void WriteToTextCtrl( wxTextCtrl* pTextCtrl, const wxString& msg, const wxTextAttr& style = wxTextAttr( *wxBLACK ) ) +inline wxColour GetDefaultTextColour( void ) +//----------------------------------------------------------------------------- +{ + return wxSystemSettings::GetColour( wxSYS_COLOUR_BTNTEXT ); +} + +#if !wxCHECK_VERSION(3, 1, 3) +//----------------------------------------------------------------------------- +inline double GetLuminance( const wxColour& colour ) +//----------------------------------------------------------------------------- +{ + // This has been backported from newer wxWidgets source code + return ( 0.299 * colour.Red() + 0.587 * colour.Green() + 0.114 * colour.Blue() ) / 255.0; +} +#endif // #if !wxCHECK_VERSION(3, 1, 3) + +//----------------------------------------------------------------------------- +/// \brief Return whether the application shall use a dark theme +/** + * This is meant as a hint to the application only. Since on Windows so far (wxWidgets 3.2.2.1) + * there is no proper support for the dark mode (see e.g. https://github.com/wxWidgets/wxWidgets/issues/19223 + * or have a look at the implementation of wxSystemSettings::GetAppearance().IsDark() for + * Windows) we always return false here since most parts of an application will appear like + * in light mode anyway thus e.g. using dark mode icons for a light mode application + * wouldn't look nice. + */ +inline bool UseDarkTheme( void ) +//----------------------------------------------------------------------------- +{ +#if defined(_WIN32) || defined(WIN32) || defined(__WIN32__) + return false; +#elif wxCHECK_VERSION(3, 1, 3) + return wxSystemSettings::GetAppearance().IsDark(); +#else + // This has been backported from newer wxWidgets source code + const wxColour bg = wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ); + const wxColour fg = wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOWTEXT ); + + return GetLuminance( fg ) - GetLuminance( bg ) > 0.2; +#endif // #if defined(_WIN32) || defined(WIN32) || defined(__WIN32__) +} + +//----------------------------------------------------------------------------- +inline void WriteToTextCtrl( wxTextCtrl* pTextCtrl, const wxString& msg, const wxTextAttr& style = wxTextAttr( GetDefaultTextColour() ) ) //----------------------------------------------------------------------------- { if( pTextCtrl ) @@ -384,9 +476,9 @@ inline void DisplayCommonAboutDialog( const AboutDialogInformation& info ) pTopDownSizer = new wxBoxSizer( wxVERTICAL ); wxStaticText* pText = new wxStaticText( &dlg, wxID_ANY, info.briefDescription_ ); pTopDownSizer->Add( pText, 0, wxALL | wxALIGN_CENTER, 5 ); - pText = new wxStaticText( &dlg, wxID_ANY, wxString::Format( wxT( "(C) %u - %s by %s" ), info.yearOfInitialRelease_, CURRENT_YEAR, COMPANY_NAME ) ); + pText = new wxStaticText( &dlg, wxID_ANY, wxString::Format( wxT( "(C) %u - %s by %s" ), info.yearOfInitialRelease_, wxT( CURRENT_YEAR ), wxT( COMPANY_NAME_FULL ) ) ); pTopDownSizer->Add( pText, 0, wxALL | wxALIGN_CENTER, 5 ); - pText = new wxStaticText( &dlg, wxID_ANY, wxString::Format( wxT( "Version %s" ), VERSION_STRING ) ); + pText = new wxStaticText( &dlg, wxID_ANY, wxString::Format( wxT( "Version %s" ), wxT( VERSION_STRING ) ) ); pTopDownSizer->Add( pText, 0, wxALL | wxALIGN_CENTER, 5 ); AddSupportInfo( &dlg, pTopDownSizer ); AddwxWidgetsInfo( &dlg, pTopDownSizer ); @@ -638,6 +730,13 @@ inline Version VersionFromString( const wxString& versionAsString ) return version; } +//----------------------------------------------------------------------------- +inline wxString VersionToString( const Version& version ) +//----------------------------------------------------------------------------- +{ + return wxString::Format( wxT( "%d.%d.%d.%d" ), version.major_, version.minor_, version.subMinor_, version.release_ ); +} + //----------------------------------------------------------------------------- inline bool IsVersionWithinRange( const Version& version, const Version& minVersion, const Version& maxVersion ) //----------------------------------------------------------------------------- diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/wxIncludeEpilogue.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/wxIncludeEpilogue.h new file mode 100644 index 00000000..5273ad10 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/wxIncludeEpilogue.h @@ -0,0 +1,22 @@ +/* + * @description: Example applications for Impact Acquire + * @copyright: Copyright (C) 2018 Balluff GmbH + * @authors: APIs and drivers development team at Balluff GmbH + * @initial date: 2018-02-27 + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#if defined(__clang__) +# pragma clang diagnostic pop +#elif defined(_MSC_VER) && (_MSC_VER >= 1400) // is at least VC 2005 compiler? +# pragma warning( pop ) +#endif diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/wxIncludePrologue.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/wxIncludePrologue.h new file mode 100644 index 00000000..4cd0e398 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/wxIncludePrologue.h @@ -0,0 +1,27 @@ +/* + * @description: Example applications for Impact Acquire + * @copyright: Copyright (C) 2018 Balluff GmbH + * @authors: APIs and drivers development team at Balluff GmbH + * @initial date: 2018-02-27 + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#if defined(__clang__) +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wdeprecated-declarations" +# pragma clang diagnostic ignored "-Wunused-local-typedef" +#elif defined(_MSC_VER) && (_MSC_VER >= 1400) // is at least VC 2005 compiler? +# pragma warning( push ) +# pragma warning( disable : 4127 ) // 'conditional expression is constant' +# pragma warning( disable : 4512 ) // 'class XYZ': assignment operator could not be generated' +# pragma warning( disable : 4996 ) // ''function XYZ': was declared deprecated' +#endif diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/wxIncluder.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/wxIncluder.h new file mode 100644 index 00000000..32051ae4 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/apps/Common/wxIncluder.h @@ -0,0 +1,26 @@ +/* + * @description: Example applications for Impact Acquire + * @copyright: Copyright (C) 2018 Balluff GmbH + * @authors: APIs and drivers development team at Balluff GmbH + * @initial date: 2018-02-27 + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +//----------------------------------------------------------------------------- +#ifndef wxIncluderH +#define wxIncluderH wxIncluderH +//----------------------------------------------------------------------------- +#include +#include "wx/wx.h" +#include + +#endif // wxIncluderH diff --git a/Cigarette/MvIMPACT/common/STLHelper.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/STLHelper.h similarity index 88% rename from Cigarette/MvIMPACT/common/STLHelper.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/STLHelper.h index 07514f87..3a466cd7 100644 --- a/Cigarette/MvIMPACT/common/STLHelper.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/STLHelper.h @@ -1,12 +1,15 @@ //----------------------------------------------------------------------------- -// (C) Copyright 2005 - 2021 by MATRIX VISION GmbH +// @description: Impact Acquire +// @copyright: (C) Copyright 2005 - 2023 by Balluff GmbH +// @authors: APIs and drivers development team at Balluff GmbH +// @initial date: 2005 // -// This software is provided by MATRIX VISION GmbH "as is" +// This software is provided by Balluff GmbH "as is" // and any express or implied warranties, including, but not limited to, the // implied warranties of merchantability and fitness for a particular purpose // are disclaimed. // -// In no event shall MATRIX VISION GmbH be liable for any direct, +// In no event shall Balluff GmbH be liable for any direct, // indirect, incidental, special, exemplary, or consequential damages // (including, but not limited to, procurement of substitute goods or services; // loss of use, data, or profits; or business interruption) however caused and @@ -67,7 +70,7 @@ void DeleteSecond( std::pair<_Ty1, _Ty2>& data ) //----------------------------------------------------------------------------- template -class ContainsFirst : public std::unary_function, bool> +class ContainsFirst //----------------------------------------------------------------------------- { std::map<_Ty1, _Ty2> m_; @@ -81,13 +84,14 @@ public: //----------------------------------------------------------------------------- template -class FirstMatches : public std::unary_function, bool> +class FirstMatches //----------------------------------------------------------------------------- { std::pair<_Ty1, _Ty2> value_; FirstMatches<_Ty1, _Ty2>& operator=( const FirstMatches<_Ty1, _Ty2>& ); // do not allow assignments public: explicit FirstMatches( const std::pair<_Ty1, _Ty2>& val ) : value_( val ) {} + FirstMatches( const FirstMatches<_Ty1, _Ty2>& src ) : value_( src.value_ ) {} bool operator()( const std::pair<_Ty1, _Ty2>& x ) { return x.first == value_.first; @@ -96,13 +100,14 @@ public: //----------------------------------------------------------------------------- template -class SecondMatches : public std::unary_function, bool> +class SecondMatches //----------------------------------------------------------------------------- { std::pair<_Ty1, _Ty2> value_; SecondMatches<_Ty1, _Ty2>& operator=( const SecondMatches<_Ty1, _Ty2>& ); // do not allow assignments public: explicit SecondMatches( const std::pair<_Ty1, _Ty2>& val ) : value_( val ) {} + SecondMatches( const FirstMatches<_Ty1, _Ty2>& src ) : value_( src.value_ ) {} bool operator()( const std::pair<_Ty1, _Ty2>& x ) { return x.second == value_.second; @@ -312,7 +317,13 @@ void makeLowerCase( std::basic_string<_Elem, _Traits, _Ax>& s ) //----------------------------------------------------------------------------- { - std::transform( s.begin(), s.end(), s.begin(), std::ptr_fun<_Elem, _Elem>( mv_tolower ) ); + typename std::basic_string<_Elem, _Traits, _Ax>::iterator it = s.begin(); + const typename std::basic_string<_Elem, _Traits, _Ax>::iterator itEND = s.end(); + while( it != itEND ) + { + *it = mv_tolower( *it ); + ++it; + } } //----------------------------------------------------------------------------- @@ -323,7 +334,13 @@ std::basic_string<_Elem, _Traits, _Ax> makeLowerCase( //----------------------------------------------------------------------------- { std::basic_string<_Elem, _Traits, _Ax> lc( s ); - std::transform( lc.begin(), lc.end(), lc.begin(), std::ptr_fun<_Elem, _Elem>( mv_tolower ) ); + typename std::basic_string<_Elem, _Traits, _Ax>::iterator it = lc.begin(); + const typename std::basic_string<_Elem, _Traits, _Ax>::iterator itEND = lc.end(); + while( it != itEND ) + { + *it = mv_tolower( *it ); + ++it; + } return lc; } @@ -342,7 +359,13 @@ void makeUpperCase( std::basic_string<_Elem, _Traits, _Ax>& s ) //----------------------------------------------------------------------------- { - std::transform( s.begin(), s.end(), s.begin(), std::ptr_fun<_Elem, _Elem>( mv_toupper ) ); + typename std::basic_string<_Elem, _Traits, _Ax>::iterator it = s.begin(); + const typename std::basic_string<_Elem, _Traits, _Ax>::iterator itEND = s.end(); + while( it != itEND ) + { + *it = mv_toupper( *it ); + ++it; + } } //----------------------------------------------------------------------------- @@ -353,7 +376,13 @@ std::basic_string<_Elem, _Traits, _Ax> makeUpperCase( //----------------------------------------------------------------------------- { std::basic_string<_Elem, _Traits, _Ax> uc( s ); - std::transform( uc.begin(), uc.end(), uc.begin(), std::ptr_fun<_Elem, _Elem>( mv_toupper ) ); + typename std::basic_string<_Elem, _Traits, _Ax>::iterator it = uc.begin(); + const typename std::basic_string<_Elem, _Traits, _Ax>::iterator itEND = uc.end(); + while( it != itEND ) + { + *it = mv_toupper( *it ); + ++it; + } return uc; } diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/TBayerMosaicParity.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/TBayerMosaicParity.h new file mode 100644 index 00000000..e2ad111d --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/TBayerMosaicParity.h @@ -0,0 +1,60 @@ +//----------------------------------------------------------------------------- +// @description: Impact Acquire +// @copyright: (C) Copyright 2005 - 2023 by Balluff GmbH +// @authors: APIs and drivers development team at Balluff GmbH +// @initial date: 2005 +// +// This software is provided by Balluff GmbH "as is" +// and any express or implied warranties, including, but not limited to, the +// implied warranties of merchantability and fitness for a particular purpose +// are disclaimed. +// +// In no event shall Balluff GmbH be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused and +// on any theory of liability, whether in contract, strict liability, or tort +// (including negligence or otherwise) arising in any way out of the use of +// this software, even if advised of the possibility of such damage. + +//----------------------------------------------------------------------------- +#ifndef TBayerMosaicParityH +#ifndef DOXYGEN_SHOULD_SKIP_THIS +# define TBayerMosaicParityH TBayerMosaicParityH +#endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS +//----------------------------------------------------------------------------- +#if defined(DOXYGEN_CPP_DOCUMENTATION) +namespace mvIMPACT +{ +namespace acquire +{ +#endif // defined(DOXYGEN_CPP_DOCUMENTATION) + +//----------------------------------------------------------------------------- +/// \brief Defines valid Bayer formats. +/// \ingroup CommonInterface +enum TBayerMosaicParity +//----------------------------------------------------------------------------- +{ + /// \brief It is not known whether the buffer or image contains raw Bayer data or the buffer or image does NOT contain raw Bayer data. + bmpUndefined = -1, + /// \brief The buffer or image starts with a green-red line starting with a green pixel. + bmpGR, + /// \brief The buffer or image starts with a green-red line starting with a red pixel. + bmpRG, + /// \brief The buffer or image starts with a green-blue line starting with a blue pixel. + bmpBG, + /// \brief The buffer or image starts with a green-blue line starting with a green pixel. + bmpGB +}; + +#if !defined(DOXYGEN_SHOULD_SKIP_THIS) && !defined(WRAP_ANY) +typedef enum TBayerMosaicParity TBayerMosaicParity; +#endif // #if !defined(DOXYGEN_SHOULD_SKIP_THIS) && !defined(WRAP_ANY) + +#if defined(DOXYGEN_CPP_DOCUMENTATION) +} // namespace acquire +} // namespace mvIMPACT +#endif // #if defined(DOXYGEN_CPP_DOCUMENTATION) + +#endif // TBayerMosaicParityH diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/TBufferPartDataType.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/TBufferPartDataType.h new file mode 100644 index 00000000..9c3b5097 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/TBufferPartDataType.h @@ -0,0 +1,158 @@ +//----------------------------------------------------------------------------- +// @description: Impact Acquire +// @copyright: (C) Copyright 2005 - 2023 by Balluff GmbH +// @authors: APIs and drivers development team at Balluff GmbH +// @initial date: 2005 +// +// This software is provided by Balluff GmbH "as is" +// and any express or implied warranties, including, but not limited to, the +// implied warranties of merchantability and fitness for a particular purpose +// are disclaimed. +// +// In no event shall Balluff GmbH be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused and +// on any theory of liability, whether in contract, strict liability, or tort +// (including negligence or otherwise) arising in any way out of the use of +// this software, even if advised of the possibility of such damage. + +//----------------------------------------------------------------------------- +#ifndef TBufferPartDataTypeH +#ifndef DOXYGEN_SHOULD_SKIP_THIS +# define TBufferPartDataTypeH TBufferPartDataTypeH +#endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS +//----------------------------------------------------------------------------- +#if defined(DOXYGEN_CPP_DOCUMENTATION) +namespace mvIMPACT +{ +namespace acquire +{ +#endif // defined(DOXYGEN_CPP_DOCUMENTATION) + +//----------------------------------------------------------------------------- +/// \brief Defines buffer part data types. +/** + * \since 2.20.0 + */ +/// \ingroup CommonInterface +enum TBufferPartDataType +//----------------------------------------------------------------------------- +{ + /// \brief The framework is not aware of the data type of the data in the provided buffer part + /** + * From the application perspective this can be handled as raw data. + */ + bpdtUnknown = 0, + /// \brief Color or monochrome (2D) image (GenTL). + /** + * This part carries all the pixel data of given image (even if the image is represented by a single-plane pixel format). + */ + bpdt2DImage = 1, + /// \brief Single color plane of a planar (2D) image (GenTL). + /** + * The data should be linked with the other color planes to get the complete image. The complete image consists of 2 planes. + * The planes of a given planar image must be placed as consecutive parts within the buffer. + */ + bpdt2DPlaneBiplanar = 2, + /// \brief Single color plane of a planar (2D) image (GenTL). + /** + * The data should be linked with the other color planes to get the complete image. The complete image consists of 3 planes. + * The planes of a given planar image must be placed as consecutive parts within the buffer. + */ + bpdt2DPlaneTriplanar = 3, + /// \brief Single color plane of a planar (2D) image (GenTL). + /** + * The data should be linked with the other color planes to get the complete image. The complete image consists of 4 planes. + * The planes of a given planar image must be placed as consecutive parts within the buffer. + */ + bpdt2DPlaneQuadplanar = 4, + /// \brief 3D image (pixel coordinates) (GenTL). + /** + * This part carries all the pixel data of given image (even if the image is represented by a single-plane pixel format, for example when transferring the depth map only). + */ + bpdt3DImage = 5, + /// \brief Single color plane of a planar (3D) image (GenTL). + /** + * The data should be linked with the other color planes to get the complete image. The complete image consists of 2 planes. + * The planes of a given planar image must be placed as consecutive parts within the buffer. + */ + bpdt3DPlaneBiplanar = 6, + /// \brief Single color plane of a planar (3D) image (GenTL). + /** + * The data should be linked with the other color planes to get the complete image. The complete image consists of 3 planes. + * The planes of a given planar image must be placed as consecutive parts within the buffer. + */ + bpdt3DPlaneTriplanar = 7, + /// \brief Single color plane of a planar (3D) image (GenTL). + /** + * The data should be linked with the other color planes to get the complete image. The complete image consists of 4 planes. + * The planes of a given planar image must be placed as consecutive parts within the buffer. + */ + bpdt3DPlaneQuadplanar = 8, + /// \brief Confidence of the individual pixel values (GenTL). + /** + * Expresses the level of validity of given pixel values. Confidence map is always used together with one or more additional + * image-based parts matching 1:1 dimension-wise. Each value in the confidence map expresses level of validity of the image pixel at + * matching position. + */ + bpdtConfidenceMap = 9, + /// \brief Chunk data (GenTL). + /** + * The data in this buffer part contains chunk data which can be decoded according the standard the data originated from. + * + * \since 2.50.0 + */ + bpdtGenICamChunkData = 10, + /// \brief JPEG image data (GenTL). + bpdtJPEG = 1000, + /// \brief JPEG 2000 image data (GenTL). + bpdtJPEG2000, + /// \brief Chunk data (GenDC). + /** + * The data in this buffer part contains chunk data which can be decoded according the standard the data originated from. + * + * \since 2.50.0 + */ + bpdtGDC_GenICamChunkData = 0x4000, + /// \brief GenICam XML data (GenDC). + /** + * The data in this buffer part contains a GenICam XML file. + * + * \since 2.50.0 + */ + bpdtGDC_GenICamXML = 0x4001, + /// \brief Color or monochrome (2D) image (GenDC). + /** + * This part carries all the pixel data of given image (even if the image is represented by a single-plane pixel format). + */ + bpdtGDC_2DImage = 0x4200, + /// \brief JPEG image data (GenDC). + /** + * \since 2.50.0 + */ + bpdtGDC_JPEG = 0x4201, + /// \brief JPEG 2000 image data (GenDC). + /** + * \since 2.50.0 + */ + bpdtGDC_JPEG2000 = 0x4202, + /// \brief A H.264 buffer (GenDC). + /** + * The data in this buffer part contains H.264 frame. + * + * \since 2.50.0 + */ + bpdtGDC_H264 = 0x4203 +}; + +#if !defined(DOXYGEN_SHOULD_SKIP_THIS) && !defined(WRAP_ANY) +typedef enum TBufferPartDataType TBufferPartDataType; +#endif // #if !defined(DOXYGEN_SHOULD_SKIP_THIS) && !defined(WRAP_ANY) + +#if defined(DOXYGEN_CPP_DOCUMENTATION) +} // namespace acquire +} // namespace mvIMPACT +#endif // #if defined(DOXYGEN_CPP_DOCUMENTATION) + +#endif // TBufferPartDataTypeH diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/TImageBufferPixelFormat.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/TImageBufferPixelFormat.h new file mode 100644 index 00000000..0d67e4fa --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/TImageBufferPixelFormat.h @@ -0,0 +1,610 @@ +//----------------------------------------------------------------------------- +// @description: Impact Acquire +// @copyright: (C) Copyright 2005 - 2023 by Balluff GmbH +// @authors: APIs and drivers development team at Balluff GmbH +// @initial date: 2005 +// +// This software is provided by Balluff GmbH "as is" +// and any express or implied warranties, including, but not limited to, the +// implied warranties of merchantability and fitness for a particular purpose +// are disclaimed. +// +// In no event shall Balluff GmbH be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused and +// on any theory of liability, whether in contract, strict liability, or tort +// (including negligence or otherwise) arising in any way out of the use of +// this software, even if advised of the possibility of such damage. + +//----------------------------------------------------------------------------- +#ifndef TImageBufferPixelFormatH +#ifndef DOXYGEN_SHOULD_SKIP_THIS +# define TImageBufferPixelFormatH TImageBufferPixelFormatH +#endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS +//----------------------------------------------------------------------------- +#if defined(DOXYGEN_CPP_DOCUMENTATION) +namespace mvIMPACT +{ +namespace acquire +{ +#endif // defined(DOXYGEN_CPP_DOCUMENTATION) + +//----------------------------------------------------------------------------- +/// \brief Valid image buffer pixel formats. +/** + * Also refer to \ref ImageProcessing_General_PixelFormats + */ +/// \ingroup CommonInterface +enum TImageBufferPixelFormat +//----------------------------------------------------------------------------- +{ + /// \brief An unprocessed block of data. + ibpfRaw = 0, + /// \brief A single channel 8 bit per pixel format. (PFNC name: Mono8) + ibpfMono8 = 1, + /// \brief A single channel 16 bit per pixel format. (PFNC name: Mono16) + ibpfMono16 = 2, + /// \brief A four channel interleaved RGB format with 32 bit per pixel containing one alpha byte per pixel. (PFNC name: BGRa8) + /** + * This is an interleaved pixel format suitable for most display functions. The data + * is stored pixel-wise. The memory layout of the pixel data is like this: + * + * \code + * 4 bytes 4 bytes etc. + * B(1) G(1) R(1) A(1) B(2) G(2) R(2) A(2) etc. + * ....................................... + * B(n) G(n) R(n) A(n) + * \endcode + * + * So the first byte in memory is the first pixels \b blue component. ImageBuffer::vpData will therefore + * point to B(1) when using a byte pointer. The 4th byte could be used for alpha information but isn't used by + * this framework. + * + * \note + * This format reports 3 channels only for backward compatibility reasons while in fact memory is allocated for + * 4 channels! Use this format with some extra care! + * + * \sa \ref Channel_Split_PackedToPlanar + */ + ibpfRGBx888Packed = 3, + /// \brief A three channel interleaved YUV422 format using 32 bit for a pair of pixels. (PFNC name: YUV422_8) + /** + * This format uses 2:1 horizontal downsampling, meaning the Y component is + * sampled at each pixel, while U(Cb) and V(Cr) components are sampled every 2 pixels in + * horizontal direction. Each component takes 8 bits, therefore a pair of pixels requires 32 bits. + * + * Two consecutive pixels (32 bit, 0xaabbccdd ) contain 8 bit luminance of pixel 1(aa), + * 8 bit chrominance blue of pixel 1 and 2(bb), 8 bit luminance of pixel 2(cc) and finally 8 bit chrominance red of pixels 1 and 2(dd). + * + * Thus in memory the data will be stored like this: + * + * \code + * 4 bytes 4 bytes etc. + * Y(1) Cb(1,2) Y(2) Cr(1,2) Y(3) Cb(3,4) Y(4) Cr(3,4) etc. + * ..........................Y(n-1) Cb(n-1,n) Y(n) Cr(n-1,n) + * \endcode + * + * So the first byte in memory is the first pixels luminance component. ImageBuffer::vpData will therefore + * point to Y(1) when using a byte pointer. + * + * \sa \ref Channel_Split_PackedToPlanar + */ + ibpfYUV422Packed = 4, + /// \brief A four channel planar RGB format. (PFNC name: RGBa8_Planar) + /** + * This is a format best suitable for most image processing functions. + * The data is stored in 4 separate planes (one plane for each color component and one + * alpha plane). + * + * \code + * R(1) R(2) R(3) R(4) etc. + * ................... + * .............. R(n) + * G(1) G(2) G(3) G(4) etc. + * ................... + * .............. G(n) + * B(1) B(2) B(3) B(4) etc. + * ................... + * .............. B(n) + * A(1) A(2) A(3) A(4) etc. + * ................... + * .............. A(n) + * \endcode + * + * So the first byte in memory is the first pixels red component. ImageBuffer::vpData will therefore + * point to R(1) when using a byte pointer. All red data will follow! + * + * \note + * This format reports 3 channels only for backward compatibility reasons while in fact memory is allocated for + * 4 channels! Use this format with some extra care! + */ + ibpfRGBx888Planar = 5, + /// \brief A single channel 10 bit per pixel format. (PFNC name: Mono10) + /** + * Each pixel in this format consumes 2 bytes of memory. The lower 10 bit of this 2 bytes will contain valid data. + */ + ibpfMono10 = 6, + /// \brief A single channel 12 bit per pixel format. (PFNC name: Mono12) + /** + * Each pixel in this format consumes 2 bytes of memory. The lower 12 bit of this 2 bytes will contain valid data. + */ + ibpfMono12 = 7, + /// \brief A single channel 14 bit per pixel format. (PFNC name: Mono14) + /** + * Each pixel in this format consumes 2 bytes of memory. The lower 14 bit of this 2 bytes will contain valid data. + */ + ibpfMono14 = 8, + /// \brief A three channel interleaved RGB format containing 24 bit per pixel. (PFNC name: BGR8) + /** + * This is an interleaved pixel format suitable for most display and processing functions. + * The data is stored pixel-wise: + * + * \code + * 3 bytes 3 bytes 3 bytes etc. + * B(1)G(1)R(1) B(2)G(2)R(2) B(3)G(3)R(3) etc. + * .......................................... + * ........................... B(n)G(n)R(n) + * \endcode + * + * So the first byte in memory is the first pixels \b blue component. ImageBuffer::vpData will therefore + * point to B(1) when using a byte pointer. + * + * \sa \ref Channel_Split_PackedToPlanar + */ + ibpfRGB888Packed = 9, + /// \brief A three channel YUV444 planar format occupying 24 bit per pixels. (PFNC name: YUV444_8_YVU_Planar) + /** + * A planar YUV format. In memory the data will be stored plane-wise like this: + * + * \code + * Y(1) Y(2) Y(3) Y(4) etc. + * ............................ + * .............. Y(n-1) Y(n) + * Cr(1) Cr(2) Cr(3) Cr(4) etc. + * ............................ + * .............. Cr(n-1) Cr(n) + * Cb(1) Cb(2) Cb(3) Cb(4) etc. + * ............................ + * ............. Cb(n-1) Cb(n) + * \endcode + * + * So the first byte in memory is the first pixels luminance component. ImageBuffer::vpData will therefore + * point to Y(1) when using a byte pointer. + */ + ibpfYUV444Planar = 10, + /// \brief A single channel 32 bit per pixel format. (PFNC name: Mono32) + ibpfMono32 = 11, + /// \brief A three channel YUV422 planar format occupying 32 bit for a pair of pixels. (PFNC name: YUV422_8_YVU_Planar) + /** + * This format uses 2:1 horizontal downsampling, meaning the Y component is + * sampled at each pixel, while U(Cb) and V(Cr) components are sampled every 2 pixels in + * horizontal direction. If each component takes 8 bits, the pair of pixels requires 32 bits. + * + * In memory the data will be stored like this: + * + * \code + * Y(1) Y(2) Y(3) Y(4) etc. + * ............................ + * .............. Y(n-1) Y(n) + * Cr(1,2) Cr(3,4) etc. + * ............... + * ....... Cr(n/2) + * Cb(1,2) Cb(3,4) etc. + * ............... + * ....... Cb(n/2) + * \endcode + * + * Thus the Y planes size in bytes equals the sum of the 2 other planes. + * + * So the first byte in memory is the first pixels luminance component. ImageBuffer::vpData will therefore + * point to Y(1) when using a byte pointer. + */ + ibpfYUV422Planar = 12, + /// \brief A three channel interleaved RGB image occupying 48 bit with 30 bit of usable data per pixel. (PFNC name: BGR10) + /** + * This is an interleaved pixel format with 2 bytes per color component. + * The data is stored pixel-wise: + * + * \code + * 6 bytes 6 bytes 6 bytes etc. + * B(1)G(1)R(1) B(2)G(2)R(2) B(3)G(3)R(3) etc. + * .......................................... + * ........................... B(n)G(n)R(n) + * \endcode + * + * The data of each color component will be LSB aligned, thus the 6 MSB of each 16 bit will + * not contain valid data. + * + * So the first 2 bytes in memory are the first pixels \b blue component. ImageBuffer::vpData will therefore + * point to B(1) when using a 16 bit pointer. + * + * \sa \ref Channel_Split_PackedToPlanar + */ + ibpfRGB101010Packed = 13, + /// \brief A three channel interleaved RGB image occupying 48 bit with 36 bit of usable data per pixel. (PFNC name: BGR12) + /** + * This is an interleaved pixel format with 2 bytes per color component. + * The data is stored pixel-wise: + * + * \code + * 6 bytes 6 bytes 6 bytes etc. + * B(1)G(1)R(1) B(2)G(2)R(2) B(3)G(3)R(3) etc. + * .......................................... + * ........................... B(n)G(n)R(n) + * \endcode + * + * The data of each color component will be LSB aligned, thus the 4 MSB of each 16 bit will + * not contain valid data. + * + * So the first 2 bytes in memory are the first pixels \b blue component. ImageBuffer::vpData will therefore + * point to B(1) when using a 16 bit pointer. + * + * \sa \ref Channel_Split_PackedToPlanar + */ + ibpfRGB121212Packed = 14, + /// \brief A three channel interleaved RGB image occupying 48 bit with 42 bit of usable data per pixel. (PFNC name: BGR14) + /** + * This is an interleaved pixel format with 2 bytes per color component. + * The data is stored pixel-wise: + * + * \code + * 6 bytes 6 bytes 6 bytes etc. + * B(1)G(1)R(1) B(2)G(2)R(2) B(3)G(3)R(3) etc. + * .......................................... + * ........................... B(n)G(n)R(n) + * \endcode + * + * The data of each color component will be LSB aligned, thus the 2 MSB of each 16 bit will + * not contain valid data. + * + * So the first 2 bytes in memory are the first pixels \b blue component. ImageBuffer::vpData will therefore + * point to B(1) when using a 16 bit pointer. + * + * \sa \ref Channel_Split_PackedToPlanar + */ + ibpfRGB141414Packed = 15, + /// \brief A three channel interleaved RGB image occupying 48 bit per pixel. (PFNC name: BGR16) + /** + * This is an interleaved pixel format with 2 bytes per color component. + * The data is stored pixel-wise: + * + * \code + * 6 bytes 6 bytes 6 bytes etc. + * B(1)G(1)R(1) B(2)G(2)R(2) B(3)G(3)R(3) etc. + * .......................................... + * ........................... B(n)G(n)R(n) + * \endcode + * + * The data of each color component will be LSB aligned. + * + * So the first 2 bytes in memory are the first pixels \b blue component. ImageBuffer::vpData will therefore + * point to B(1) when using a 16 bit pointer. + * + * \sa \ref Channel_Split_PackedToPlanar + */ + ibpfRGB161616Packed = 16, + /// \brief A three channel interleaved YUV422 format occupying 32 bit for a pair of pixels. (PFNC name: YUV422_8_UYV) + /** + * This format uses 2:1 horizontal downsampling, meaning the Y component is + * sampled at each pixel, while U(Cb) and V(Cr) components are sampled every 2 pixels in + * horizontal direction. If each component takes 8 bits, the pair of pixels requires 32 bits. + * + * Two consecutive pixels (32 bit, 0xaabbccdd ) will contain 8 bit chrominance blue of pixel 1 and 2(aa), + * 8 bit luminance of pixel 1(bb), 8 bit chrominance red of pixel 1 and 2 (cc) and finally 8 bit luminance of pixel 2(dd). + * + * Thus in memory the data will be stored like this: + * + * \code + * 4 bytes 4 bytes etc. + * Cb(1,2) Y(1) Cr(1,2) Y(2) Cb(3,4) Y(3) Cr(3,4) Y(4) etc. + * ..........................Cb(n-1,n) Y(n-1) Cr(n-1,n) Y(n) + * \endcode + * + * So the first byte in memory is the first pixels Cb component. ImageBuffer::vpData will therefore + * point to Cb(1,2) when using a byte pointer. + * + * \sa \ref Channel_Split_PackedToPlanar + */ + ibpfYUV422_UYVYPacked = 17, + /// \brief A single channel 12 bit per pixel packed format occupying 12 bit per pixel. (PFNC name: Mono12Packed) + /** + * This format will use 3 bytes to store 2 12 bit pixel. Every 3 bytes will use the following layout in + * memory: + * + * \code + * 3 bytes 3 bytes etc. + * bits 11..4(1) bits 3..0(1) bits 3..0(2) bits 11..4(2) bits 11..4(3) bits 3..0(3) bits 3..0(4) bits 11..4(4) etc. + * \endcode + * + * \note + * When the width is not divisible by 2 the line pitch of a buffer can't be used to calculate line start offsets in a buffer! + * In that case something like this can be used to access a certain pixel (pseudo code assuming 'pointerToStartOfTheBuffer' is a 'byte pointer'): + * + * \code + * GetMono12Packed_V1Pixel( pointerToStartOfTheBuffer, pixelIndex ) + * const int offsetFromStartOfTheBuffer = (3*pixel)/2 + * if pixel divisible by 2 + * return (pointerToStartOfTheBuffer[offset+1] << shift) | (pointerToStartOfTheBuffer[offset] >> 4) + * return pointerToStartOfTheBuffer[offset] << shift) | (pointerToStartOfTheBuffer[offset+1] & 0xF) + * \endcode + */ + ibpfMono12Packed_V2 = 18, + /// \brief A three channel interleaved YUV422 format occupying 64 bit for a pair of pixels. (PFNC name: YUV422_10) + /** + * This format uses 2:1 horizontal downsampling, meaning the Y component is + * sampled at each pixel, while U(Cb) and V(Cr) components are sampled every 2 pixels in + * horizontal direction. If each component takes 16 bits, the pair of pixels requires 64 bits. + * + * Two consecutive pixels (64 bit, 0xaaaabbbbccccdddd ) contain 10 bit luminance of pixel 1(aaaa), + * 10 bit chrominance blue of pixel 1 and 2(bbbb), 10 bit luminance of pixel 2(cccc) and finally 10 bit chrominance red of pixels 1 and 2(dddd). + * The upper 6 bits of each component will be 0. + * + * Thus in memory the data will be stored like this: + * + * \code + * 8 bytes 8 bytes etc. + * Y(1) Cb(1,2) Y(2) Cr(1,2) Y(3) Cb(3,4) Y(4) Cr(3,4) etc. + * ..........................Y(n-1) Cb(n-1,n) Y(n) Cr(n-1,n) + * \endcode + * + * So the first 2 bytes in memory are the first pixels luminance component. ImageBuffer::vpData will therefore + * point to Y(1) when using a 16 bit pointer. + * + * \sa \ref Channel_Split_PackedToPlanar + */ + ibpfYUV422_10Packed = 20, + /// \brief A three channel interleaved YUV422 format occupying 64 bit for a pair of pixels. (PFNC name: YUV422_10_UYV) + /** + * This format uses 2:1 horizontal downsampling, meaning the Y component is + * sampled at each pixel, while U(Cb) and V(Cr) components are sampled every 2 pixels in + * horizontal direction. If each component takes 16 bits, the pair of pixels requires 64 bits. + * + * Two consecutive pixels (64 bit, 0xaaaabbbbccccdddd ) will contain 10 bit chrominance blue of pixel 1 and 2(aaaa), + * 10 bit luminance of pixel 1(bbbb), 10 bit chrominance red of pixel 1 and 2 (cccc) and finally 10 bit luminance of pixel 2(dddd). + * The upper 6 bits of each component will be 0. + * + * Thus in memory the data will be stored like this: + * + * \code + * 8 bytes 8 bytes etc. + * Cb(1,2) Y(1) Cr(1,2) Y(2) Cb(3,4) Y(3) Cr(3,4) Y(4) etc. + * ..........................Cb(n-1,n) Y(n-1) Cr(n-1,n) Y(n) + * \endcode + * + * So the first 2 bytes in memory are the first pixels luminance component. ImageBuffer::vpData will therefore + * point to Cb(1,2) when using a 16 bit pointer. + * + * \sa \ref Channel_Split_PackedToPlanar + */ + ibpfYUV422_UYVY_10Packed = 21, + /// \brief A three channel interleaved RGB format with 24 bit per pixel. (PFNC name: RGB8) + /** + * This is an interleaved pixel format suitable for most processing functions. Most + * blit/display function however will expect ibpfRGB888Packed. + * The data is stored pixel-wise: + * + * \code + * 3 bytes 3 bytes 3 bytes etc. + * R(1)G(1)B(1) R(2)G(2)B(2) R(3)G(3)B(3) etc. + * .......................................... + * ........................... R(n)G(n)B(n) + * \endcode + * + * So the first byte in memory is the first pixels \b red component. ImageBuffer::vpData will therefore + * point to R(1) when using a byte pointer. + * + * \sa \ref Channel_Split_PackedToPlanar + */ + ibpfBGR888Packed = 22, + /// \brief A three channel 10 bit per color component RGB packed format occupying 32 bit per pixel. (PFNC name: RGB10p32) + /** + * This format will use 4 bytes to store one 10 bit per color component RGB pixel. The following memory layout is + * used for each pixel: + * + * \code + * byte 0 | byte 1 | byte 2 | byte 3 | + * 0 7 | 890....5 | 6..90..3 | 4 9xx | + * RRRRRRRR | RRGGGGGG | GGGGBBBB | BBBBBB | + * \endcode + * + * The last 2 bit of each 32 bit bit may contain undefined data. + * \if (DOXYGEN_C_DOCUMENTATION || DOXYGEN_CPP_DOCUMENTATION) + * \note + * Access to a certain pixel can e.g. be implemented like this: + * + * \code + * //----------------------------------------------------------------------------- + * // slow version + * inline void GetBGR101010Packed_V2Pixel( void* p, const int pitch, int x, int y, unsigned short& red, unsigned short& green, unsigned short& blue ) + * //----------------------------------------------------------------------------- + * { + * unsigned int* pSrc = reinterpret_cast(static_cast(p) + y * pitch) + x; + * red = static_cast( (*pSrc) & 0x3FF); + * green = static_cast(((*pSrc) >> 10 ) & 0x3FF); + * blue = static_cast(((*pSrc) >> 20 ) & 0x3FF); + * } + * + * //----------------------------------------------------------------------------- + * // faster version + * inline void GetBGR101010Packed_V2Pixel( unsigned int pixel, unsigned short& red, unsigned short& green, unsigned short& blue ) + * //----------------------------------------------------------------------------- + * { + * red = static_cast( pixel & 0x3FF); + * green = static_cast(( pixel >> 10 ) & 0x3FF); + * blue = static_cast(( pixel >> 20 ) & 0x3FF); + * } + * \endcode + * \endif + * + * \sa \ref Channel_Split_PackedToPlanar + */ + ibpfBGR101010Packed_V2 = 23, + /// \brief A three channel interleaved YUV format occupying 24 bit per pixel. (PFNC name: YUV8_UYV) + /** + * This is an interleaved pixel format. + * + * The data is stored pixel-wise: + * + * \code + * 3 bytes 3 bytes 3 bytes etc. + * Cb(1)Y(1)Cr(1) Cb(2)Y(2)Cr(2) Cb(3)Y(3)Cr(3) etc. + * .......................................... + * ........................... Cb(n)Y(n)Cr(n) + * \endcode + * + * So the first byte in memory is the first pixels Cb component. ImageBuffer::vpData will therefore + * point to Cb(1) when using a byte pointer. + * + * \sa \ref Channel_Split_PackedToPlanar + */ + ibpfYUV444_UYVPacked = 24, + /// \brief A three channel interleaved YUV format occupying 48 bit per pixel with 30 bit of usable data per pixel. (PFNC name: YUV422_10_UYV) + /** + * This is an interleaved pixel format with 2 bytes per color component. + * The data is stored pixel-wise: + * + * \code + * 6 bytes 6 bytes 6 bytes etc. + * Cb(1)Y(1)Cr(1) Cb(2)Y(2)Cr(2) Cb(3)Y(3)Cr(3) etc. + * .......................................... + * ........................... Cb(n)Y(n)Cr(n) + * \endcode + * + * The data of each color component will be LSB aligned, thus the 6 MSB of each 16 bit will + * not contain valid data. + * + * So the first byte in memory is the first pixels Cb component. ImageBuffer::vpData will therefore + * point to Cb(1) when using a 16 bit pointer. + * + * \sa \ref Channel_Split_PackedToPlanar + */ + ibpfYUV444_UYV_10Packed = 25, + /// \brief A three channel interleaved YUV format occupying 24 bit per pixel. (PFNC name: YUV8) + /** + * This is an interleaved pixel format. + * + * The data is stored pixel-wise: + * + * \code + * 3 bytes 3 bytes 3 bytes etc. + * Y(1)Cb(1)Cr(1) Y(2)Cb(2)Cr(2) Y(3)Cb(3)Cr(3) etc. + * .......................................... + * ........................... Y(n)Cb(n)Cr(n) + * \endcode + * + * So the first byte in memory is the first pixels luminance component. ImageBuffer::vpData will therefore + * point to Y(1) when using a byte pointer. + * + * \sa \ref Channel_Split_PackedToPlanar + */ + ibpfYUV444Packed = 26, + /// \brief A three channel interleaved YUV format occupying 48 bit per pixel with 30 bit of usable data per pixel. (PFNC name: YUV10) + /** + * This is an interleaved pixel format with 2 bytes per color component. + * The data is stored pixel-wise: + * + * \code + * 6 bytes 6 bytes 6 bytes etc. + * Y(1)Cb(1)Cr(1) Y(2)Cb(2)Cr(2) Y(3)Cb(3)Cr(3) etc. + * .......................................... + * ........................... Y(n)Cb(n)Cr(n) + * \endcode + * + * The data of each color component will be LSB aligned, thus the 6 MSB of each 16 bit will + * not contain valid data. + * + * So the first byte in memory is the first pixels luminance component. ImageBuffer::vpData will therefore + * point to Y(1) when using a 16 bit pointer. + * + * \sa \ref Channel_Split_PackedToPlanar + */ + ibpfYUV444_10Packed = 27, + /// \brief A single channel 12 bit per pixel packed format occupying 12 bit per pixel. (PFNC name: Mono12p) + /** + * This format will use 3 bytes to store 2 12 bit pixel. Every 3 bytes will use the following layout in + * memory: + * + * \code + * 3 bytes 3 bytes etc. + * bits 0..7(1) bits 8..11(1) bits 0..3(2) bits 4..11(2) bits 0..7(3) bits 8..11(3) bits 0..3(4) bits 4..11(4) etc. + * \endcode + * + * \note + * When the width is not divisible by 2 the line pitch of a buffer can't be used to calculate line start offsets in a buffer! + * In that case something like this can be used to access a certain pixel (pseudo code assuming 'pointerToStartOfTheBuffer' is a 'byte pointer'): + * + * \code + * GetMono12Packed_V1Pixel( pointerToStartOfTheBuffer, pixelIndex ) + * const int offsetFromStartOfTheBuffer = pixel + pixel/2 + * if pixel divisible by 2 + * return (pointerToStartOfTheBuffer[offset] >> 4) | (pointerToStartOfTheBuffer[offset+1] << 4) + * return pointerToStartOfTheBuffer[offset]) | (pointerToStartOfTheBuffer[offset+1] & 0xF) << 8) + * \endcode + * + * \since 2.5.0 + */ + ibpfMono12Packed_V1 = 28, + /// \brief A three channel interleaved YUV format occupying 48 bit for four pixels. (PFNC name: YUV411_8_UYYVYY) + /** + * This format uses 4:1 horizontal downsampling, meaning the Y component is + * sampled at each pixel, while U(Cb) and V(Cr) components are sampled every 4 pixels in + * horizontal direction. If each component takes 8 bits, four pixels require 48 bits. + * + * Four consecutive pixels (48 bit, 0xaabbccddeeff ) contain 8 bit chrominance blue of pixels 1, 2, 3 and 4(aa), + * 8 bit luminance of pixel 1(bb),8 bit luminance of pixel 2(cc), 8 bit chrominance red of pixels 1, 2, 3 and 4(dd), + * 8 bit luminance of pixel 3(ee) and finally 8 bit luminance of pixel 4(ff). + * + * Thus in memory the data will be stored like this: + * + * \code + * 6 bytes 6 bytes etc. + * Cb(1,2,3,4) Y(1) Y(2) Cr(1,2,3,4) Y(3) Y(4) Cb(5,6,7,8) Y(5) Y(6) Cr(5,6,7,8) Y(7) Y(8) etc. + * .................. Cb(n,n+1,n+2,n+3) Y(n) Y(n+1) Cr(n,n+1,n+2,n+3) Y(n+2) Y(n+3) + * \endcode + * + * So the first byte in memory is the chrominance blue component. ImageBuffer::vpData will therefore + * point to Cb when using a byte pointer. + * + * \sa \ref Channel_Split_PackedToPlanar + * + * \since 2.13.0 + */ + ibpfYUV411_UYYVYY_Packed = 29, + /// \brief A three channel planar RGB format. (PFNC name: RGB8_Planar) + /** + * This is a format best suitable for most image processing functions. + * The image will be converted into 3 planes(a plane for each color component). + * + * \code + * R(1) R(2) R(3) R(4) etc. + * ................... + * .............. R(n) + * G(1) G(2) G(3) G(4) etc. + * ................... + * .............. G(n) + * B(1) B(2) B(3) B(4) etc. + * ................... + * .............. B(n) + * \endcode + * + * So the first byte in memory is the first pixels red component. ImageBuffer::vpData will therefore + * point to R(1) when using a byte pointer. + * + * \since 2.17.0 + */ + ibpfRGB888Planar = 30, + /// \brief The framework will decide which format will be used. + ibpfAuto = -1 +}; + +#if !defined(DOXYGEN_SHOULD_SKIP_THIS) && !defined(WRAP_ANY) +typedef enum TImageBufferPixelFormat TImageBufferPixelFormat; +#endif // #if !defined(DOXYGEN_SHOULD_SKIP_THIS) && !defined(WRAP_ANY) + +#if defined(DOXYGEN_CPP_DOCUMENTATION) +} // namespace acquire +} // namespace mvIMPACT +#endif // #if defined(DOXYGEN_CPP_DOCUMENTATION) + +#endif // TImageBufferPixelFormatH diff --git a/Cigarette/MvIMPACT/common/auto_array_ptr.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/auto_array_ptr.h similarity index 92% rename from Cigarette/MvIMPACT/common/auto_array_ptr.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/auto_array_ptr.h index eefa2c19..d521c9bf 100644 --- a/Cigarette/MvIMPACT/common/auto_array_ptr.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/auto_array_ptr.h @@ -1,12 +1,15 @@ //----------------------------------------------------------------------------- -// (C) Copyright 2005 - 2021 by MATRIX VISION GmbH +// @description: Impact Acquire +// @copyright: (C) Copyright 2005 - 2023 by Balluff GmbH +// @authors: APIs and drivers development team at Balluff GmbH +// @initial date: 2005 // -// This software is provided by MATRIX VISION GmbH "as is" +// This software is provided by Balluff GmbH "as is" // and any express or implied warranties, including, but not limited to, the // implied warranties of merchantability and fitness for a particular purpose // are disclaimed. // -// In no event shall MATRIX VISION GmbH be liable for any direct, +// In no event shall Balluff GmbH be liable for any direct, // indirect, incidental, special, exemplary, or consequential damages // (including, but not limited to, procurement of substitute goods or services; // loss of use, data, or profits; or business interruption) however caused and diff --git a/Cigarette/MvIMPACT/common/crt/mvstdio.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/crt/mvstdio.h similarity index 85% rename from Cigarette/MvIMPACT/common/crt/mvstdio.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/crt/mvstdio.h index 97ba5743..becc3675 100644 --- a/Cigarette/MvIMPACT/common/crt/mvstdio.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/crt/mvstdio.h @@ -1,12 +1,15 @@ //----------------------------------------------------------------------------- -// (C) Copyright 2005 - 2021 by MATRIX VISION GmbH +// @description: Impact Acquire +// @copyright: (C) Copyright 2005 - 2023 by Balluff GmbH +// @authors: APIs and drivers development team at Balluff GmbH +// @initial date: 2005 // -// This software is provided by MATRIX VISION GmbH "as is" +// This software is provided by Balluff GmbH "as is" // and any express or implied warranties, including, but not limited to, the // implied warranties of merchantability and fitness for a particular purpose // are disclaimed. // -// In no event shall MATRIX VISION GmbH be liable for any direct, +// In no event shall Balluff GmbH be liable for any direct, // indirect, incidental, special, exemplary, or consequential damages // (including, but not limited to, procurement of substitute goods or services; // loss of use, data, or profits; or business interruption) however caused and @@ -28,13 +31,14 @@ /// \brief Version that mimics the C11 \c fopen_s function. /** * See \c fopen_s of your runtime implementation for documentation! + * \ingroup CommonInterface */ inline int mv_fopen_s( FILE** ppFile, const char* pName, const char* pMode ) //----------------------------------------------------------------------------- { #if defined(_MSC_VER) && (_MSC_VER >= 1400) // is at least VC 2005 compiler? // The M$ version of fopen_s does not support sharing thus parallel access to the same file... - // As this is needed by mvIMPACT Acquire e.g. when writing log files from multiple processes into + // As this is needed by Impact Acquire e.g. when writing log files from multiple processes into // a common file we have to use the '_fsopen' function with '_SH_DENYNO' here to get // what we want, which is parallel access AND no compiler warnings *ppFile = _fsopen( pName, pMode, _SH_DENYNO ); @@ -51,6 +55,7 @@ inline int mv_fopen_s( FILE** ppFile, const char* pName, const char* pMode ) /// \brief Version that mimics the traditional \c fopen function. /** * See \c fopen of your runtime implementation for documentation! + * \ingroup CommonInterface */ inline FILE* mv_fopen_s( const char* pName, const char* pMode ) //----------------------------------------------------------------------------- diff --git a/Cigarette/MvIMPACT/common/crt/mvstring.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/crt/mvstring.h similarity index 73% rename from Cigarette/MvIMPACT/common/crt/mvstring.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/crt/mvstring.h index a6d324af..bc3033a3 100644 --- a/Cigarette/MvIMPACT/common/crt/mvstring.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/crt/mvstring.h @@ -1,12 +1,15 @@ //----------------------------------------------------------------------------- -// (C) Copyright 2005 - 2021 by MATRIX VISION GmbH +// @description: Impact Acquire +// @copyright: (C) Copyright 2005 - 2023 by Balluff GmbH +// @authors: APIs and drivers development team at Balluff GmbH +// @initial date: 2005 // -// This software is provided by MATRIX VISION GmbH "as is" +// This software is provided by Balluff GmbH "as is" // and any express or implied warranties, including, but not limited to, the // implied warranties of merchantability and fitness for a particular purpose // are disclaimed. // -// In no event shall MATRIX VISION GmbH be liable for any direct, +// In no event shall Balluff GmbH be liable for any direct, // indirect, incidental, special, exemplary, or consequential damages // (including, but not limited to, procurement of substitute goods or services; // loss of use, data, or profits; or business interruption) however caused and @@ -23,10 +26,16 @@ #include //----------------------------------------------------------------------------- -/// \brief Version that mimics the C11 \c strncpy_s function. +/// \brief \a Safe version of the pre-C11 strncpy, adhering to the C11 standard behavior of strncpy_s(pDst, bufsize, pSrc, bufsize) /** - * See \c strncpy_s of your runtime implementation for documentation! - */ +* Copies at most \c bufsize characters of the character array pointed to by \c pSrc (including the terminating null character, but not +* any of the characters that follow the null character) to character array pointed to by \c pDst. +* If \c bufsize is reached before the entire array \c pSrc was copied, this function writes a null at pDst[bufsize] and then stops. +* The behavior is undefined if the character arrays overlap, if either \c pDst or \c pSrc is not a pointer to a character array +* (including if \c pDst or \c pSrc is a null pointer), if the size of the array pointed to by \c pDst is less than bufsize, or if +* the size of the array pointed to by \c pSrc is less than \c bufsize and it does not contain a null character. + * \ingroup CommonInterface +*/ inline int mv_strncpy_s( char* pDst, const char* pSrc, size_t bufSize ) //----------------------------------------------------------------------------- { @@ -36,8 +45,7 @@ inline int mv_strncpy_s( char* pDst, const char* pSrc, size_t bufSize ) #elif defined (__STDC_LIB_EXT1__) // does implementation support CRT extensions? return strncpy_s( pDst, bufSize, pSrc, bufSize ); #else - strncpy( pDst, pSrc, bufSize ); - return errno; + return pDst != strncpy( pDst, pSrc, bufSize ); #endif // #if (defined(_MSC_VER) && (_MSC_VER >= 1400)) // is at least VC 2005 compiler? } @@ -45,6 +53,7 @@ inline int mv_strncpy_s( char* pDst, const char* pSrc, size_t bufSize ) /// \brief Version that mimics the C11 \c strncat_s function. /** * See \c strncat_s of your runtime implementation for documentation! + * \ingroup CommonInterface */ inline int mv_strncat_s( char* pDst, const char* pSrc, size_t bufSize ) //----------------------------------------------------------------------------- @@ -55,8 +64,7 @@ inline int mv_strncat_s( char* pDst, const char* pSrc, size_t bufSize ) #elif defined (__STDC_LIB_EXT1__) // does implementation support CRT extensions? return strncat_s( pDst, bufSize, pSrc, bufSize - strnlen_s( pDst, bufSize ) ); #else - strncat( pDst, pSrc, bufSize ); - return errno; + return pDst != strncat( pDst, pSrc, bufSize ); #endif // #if (defined(_MSC_VER) && (_MSC_VER >= 1400)) // is at least VC 2005 compiler? } @@ -64,6 +72,7 @@ inline int mv_strncat_s( char* pDst, const char* pSrc, size_t bufSize ) /// \brief Version that mimics the C11 \c strerror_s function. /** * See \c strerror_s of your runtime implementation for documentation! + * \ingroup CommonInterface */ inline int mv_strerror_s( char* pBuf, size_t bufSize, int errnum ) //----------------------------------------------------------------------------- @@ -74,12 +83,16 @@ inline int mv_strerror_s( char* pBuf, size_t bufSize, int errnum ) // Should check the following constraints here: // - pBuf is a null pointer // - bufSize is zero or greater than RSIZE_MAX - strncpy( pBuf, strerror( errnum ), bufSize ); - return errno; + return pBuf != strncpy( pBuf, strerror( errnum ), bufSize ); #endif // #if (defined(_MSC_VER) && (_MSC_VER >= 1400)) || defined (__STDC_LIB_EXT1__) // is at least VC 2005 compiler OR implementation supports CRT extensions? } //----------------------------------------------------------------------------- +/// \brief Version that mimics the C11 \c strerrorlen_s function. +/** + * See \c strerrorlen_s of your runtime implementation for documentation! + * \ingroup CommonInterface + */ inline size_t mv_strerrorlen_s( int errnum ) //----------------------------------------------------------------------------- { diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/designData.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/designData.h new file mode 100644 index 00000000..51102950 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/designData.h @@ -0,0 +1,47 @@ +//----------------------------------------------------------------------------- +// @description: Impact Acquire +// @copyright: (C) Copyright 2005 - 2023 by Balluff GmbH +// @authors: APIs and drivers development team at Balluff GmbH +// @initial date: 2005 +// +// This software is provided by Balluff GmbH "as is" +// and any express or implied warranties, including, but not limited to, the +// implied warranties of merchantability and fitness for a particular purpose +// are disclaimed. +// +// In no event shall Balluff GmbH be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused and +// on any theory of liability, whether in contract, strict liability, or tort +// (including negligence or otherwise) arising in any way out of the use of +// this software, even if advised of the possibility of such damage. + +//----------------------------------------------------------------------------- +#ifndef designDataH +#define designDataH designDataH +//----------------------------------------------------------------------------- + +#define COMPANY_NAME "Balluff" +#define COMPANY_NAME_FULL "Balluff GmbH" + +#define COMPANY_NAMES "Balluff/MATRIX VISION" + +#define COMPANY_SUPPORT_MAIL "support.de@balluff.de" +#define COMPANY_SUPPORT_MAILTO "mailto:support.de@balluff.de" +#define COMPANY_SUPPORT_SERVICEDESK "https://www.balluff.com/en-de/contact-support" + +#define COMPANY_URL_DOWNLOAD_ARCHIVE "http://static.matrix-vision.com" +#define COMPANY_URL_HTTP "http://www.balluff.com" +#define COMPANY_URL_HTTPS "https://www.balluff.com" +#define COMPANY_URL_MANUALS "https://www.balluff.com/en-de/online-manuals-mv" +#define COMPANY_URL_RSS_FEED "http://static.matrix-vision.com/mvIMPACT_Acquire/rss" +#define COMPANY_URL_SDK_DOWNLOADS "https://www.balluff.com/en-de/downloads/software" + +#define CURRENT_YEAR "2023" + +#define PRODUCT_NAME "Impact Acquire" + +#define VERSION_STRING "3.0.2.3838" + +#endif // designDataH diff --git a/Cigarette/MvIMPACT/common/function_cast.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/function_cast.h similarity index 88% rename from Cigarette/MvIMPACT/common/function_cast.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/function_cast.h index 05392196..03ec32e9 100644 --- a/Cigarette/MvIMPACT/common/function_cast.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/function_cast.h @@ -1,12 +1,15 @@ //----------------------------------------------------------------------------- -// (C) Copyright 2005 - 2021 by MATRIX VISION GmbH +// @description: Impact Acquire +// @copyright: (C) Copyright 2005 - 2023 by Balluff GmbH +// @authors: APIs and drivers development team at Balluff GmbH +// @initial date: 2005 // -// This software is provided by MATRIX VISION GmbH "as is" +// This software is provided by Balluff GmbH "as is" // and any express or implied warranties, including, but not limited to, the // implied warranties of merchantability and fitness for a particular purpose // are disclaimed. // -// In no event shall MATRIX VISION GmbH be liable for any direct, +// In no event shall Balluff GmbH be liable for any direct, // indirect, incidental, special, exemplary, or consequential damages // (including, but not limited to, procurement of substitute goods or services; // loss of use, data, or profits; or business interruption) however caused and diff --git a/Cigarette/MvIMPACT/common/minmax.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/minmax.h similarity index 87% rename from Cigarette/MvIMPACT/common/minmax.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/minmax.h index 200f676c..246cc2bb 100644 --- a/Cigarette/MvIMPACT/common/minmax.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/minmax.h @@ -1,12 +1,15 @@ //----------------------------------------------------------------------------- -// (C) Copyright 2005 - 2021 by MATRIX VISION GmbH +// @description: Impact Acquire +// @copyright: (C) Copyright 2005 - 2023 by Balluff GmbH +// @authors: APIs and drivers development team at Balluff GmbH +// @initial date: 2005 // -// This software is provided by MATRIX VISION GmbH "as is" +// This software is provided by Balluff GmbH "as is" // and any express or implied warranties, including, but not limited to, the // implied warranties of merchantability and fitness for a particular purpose // are disclaimed. // -// In no event shall MATRIX VISION GmbH be liable for any direct, +// In no event shall Balluff GmbH be liable for any direct, // indirect, incidental, special, exemplary, or consequential damages // (including, but not limited to, procurement of substitute goods or services; // loss of use, data, or profits; or business interruption) however caused and @@ -93,6 +96,29 @@ inline _Result getBit( _Ty shift ) return static_cast<_Result>( _Result( 1 ) << _Result( shift ) ); } +//----------------------------------------------------------------------------- +template +bool fitsInRange( const _Ty& lowerLimit, const _Ty& upperLimit, const _Ty& start, const _Ty& end ) +//----------------------------------------------------------------------------- +{ + if( start >= end ) + { + return false; + } + + if( start < lowerLimit ) + { + return false; + } + + if( end > upperLimit ) + { + return false; + } + + return true; +} + //----------------------------------------------------------------------------- template bool isInRange( const _Ty& lowerLimit, const _Ty& upperLimit, const _Ty& start, const _Ty& end, _Ty* pOverlappingRangeStart = 0, _Ty* pOverlappingRangeEnd = 0 ) diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/mvCommonDataTypes.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/mvCommonDataTypes.h new file mode 100644 index 00000000..ec706103 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/mvCommonDataTypes.h @@ -0,0 +1,53 @@ +//----------------------------------------------------------------------------- +// @description: Impact Acquire +// @copyright: (C) Copyright 2005 - 2023 by Balluff GmbH +// @authors: APIs and drivers development team at Balluff GmbH +// @initial date: 2005 +// +// This software is provided by Balluff GmbH "as is" +// and any express or implied warranties, including, but not limited to, the +// implied warranties of merchantability and fitness for a particular purpose +// are disclaimed. +// +// In no event shall Balluff GmbH be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused and +// on any theory of liability, whether in contract, strict liability, or tort +// (including negligence or otherwise) arising in any way out of the use of +// this software, even if advised of the possibility of such damage. + +//----------------------------------------------------------------------------- +#ifndef mvCommonDataTypesH +#ifndef DOXYGEN_SHOULD_SKIP_THIS +# define mvCommonDataTypesH mvCommonDataTypesH +#endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS +//----------------------------------------------------------------------------- +#if defined(DOXYGEN_CPP_DOCUMENTATION) +namespace mvIMPACT +{ +namespace acquire +{ +#endif // defined(DOXYGEN_CPP_DOCUMENTATION) + +#if !defined(DOXYGEN_SHOULD_SKIP_THIS) && !defined(WRAP_ANY) +# if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) +typedef __int64 int64_type; +typedef unsigned __int64 uint64_type; +# elif defined(linux) || defined(__linux) || defined(__linux__) || defined(__APPLE__) +# ifndef WRAP_ANY +# include +# endif // #ifndef WRAP_ANY +typedef int64_t int64_type; +typedef uint64_t uint64_type; +# else +# error "unsupported target environment" +# endif // #if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) +#endif // #if !defined(DOXYGEN_SHOULD_SKIP_THIS) && !defined(WRAP_ANY) + +#if defined(DOXYGEN_CPP_DOCUMENTATION) +} // namespace acquire +} // namespace mvIMPACT +#endif // #if defined(DOXYGEN_CPP_DOCUMENTATION) + +#endif // mvCommonDataTypesH diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/mvImageBuffer.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/mvImageBuffer.h new file mode 100644 index 00000000..2acc6af4 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/common/mvImageBuffer.h @@ -0,0 +1,193 @@ +//----------------------------------------------------------------------------- +// @description: Impact Acquire +// @copyright: (C) Copyright 2005 - 2023 by Balluff GmbH +// @authors: APIs and drivers development team at Balluff GmbH +// @initial date: 2005 +// +// This software is provided by Balluff GmbH "as is" +// and any express or implied warranties, including, but not limited to, the +// implied warranties of merchantability and fitness for a particular purpose +// are disclaimed. +// +// In no event shall Balluff GmbH be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused and +// on any theory of liability, whether in contract, strict liability, or tort +// (including negligence or otherwise) arising in any way out of the use of +// this software, even if advised of the possibility of such damage. + +//----------------------------------------------------------------------------- +#ifndef mvImageBufferH +#ifndef DOXYGEN_SHOULD_SKIP_THIS +# define mvImageBufferH mvImageBufferH +#endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS +//----------------------------------------------------------------------------- +#include + +#if !defined(DOXYGEN_SHOULD_SKIP_THIS) && !defined(WRAP_ANY) +# ifdef _WIN32 +# ifdef __BORLANDC__ +# pragma option push -b // force enums to the size of integer +# endif // __BORLANDC__ +# endif // _WIN32 +#endif // #if !defined(DOXYGEN_SHOULD_SKIP_THIS) && !defined(WRAP_ANY) + +#ifdef __cplusplus +extern "C" { +#endif // #ifdef __cplusplus + +#if defined(MVIMPACT_ACQUIRE_H_) || defined(MVIMPACT_ACQUIRE_GIGEVISION_H_) || defined(DOXYGEN_CPP_DOCUMENTATION) +namespace mvIMPACT +{ +namespace acquire +{ +#endif // #if defined(MVIMPACT_ACQUIRE_H_) || defined(MVIMPACT_ACQUIRE_GIGEVISION_H_) || defined(DOXYGEN_CPP_DOCUMENTATION) + +#include + +#if defined(__GNUC__) && !defined(_WIN32) +# define ATTR_PACK_8 __attribute__((packed)) __attribute__ ((aligned (8))) +#else // _MSC_VER, __BORLANDC__, SWIG, ... +# define ATTR_PACK_8 +# pragma pack(push, 8) // 8 byte structure alignment +#endif // defined(__GNUC__) && !defined(_WIN32) + +//----------------------------------------------------------------------------- +/// \brief A structure for image buffer channel specific data +/** + * Channel specific data in an image is data, that in e.g. and RGB image + * might differ for the color components red, green and blue. + * + * \ingroup CommonInterface + */ +struct ChannelData +//----------------------------------------------------------------------------- +{ + /// \brief The offset (in bytes) to the next channel. + int iChannelOffset; + /// \brief The offset (in bytes) to the next line of this channel. + int iLinePitch; + /// \brief The offset (in bytes) to the next pixel of this channel. + int iPixelPitch; + /// \brief The string descriptor for this channel. + /** + * For an RGB image the string values of three mvIMPACT::acquire::ChannelData + * structures this might e.g. be "R", "G" and "B". + */ + char szChannelDesc[DEFAULT_STRING_SIZE_LIMIT]; +} ATTR_PACK_8; + +#if !defined(DOXYGEN_SHOULD_SKIP_THIS) && !defined(WRAP_ANY) +typedef struct ChannelData ChannelData; +#endif // #if !defined(DOXYGEN_SHOULD_SKIP_THIS) && !defined(WRAP_ANY) + +//----------------------------------------------------------------------------- +/// \brief Fully describes a captured image. +/** + * This class serves as a describing structure for captured images. + * + * \ingroup CommonInterface + */ +struct ImageBuffer +//----------------------------------------------------------------------------- +{ + /// \brief The number of bytes per pixel. + int iBytesPerPixel; + /// \brief The height of the image in pixel or lines. + int iHeight; + /// \brief The width of the image in pixel. + int iWidth; + /// \brief The pixel format of this image. + /** + * This might be important, when the image data needs to be processed or stored in + * a file or maybe even if the image shall be displayed. + */ + TImageBufferPixelFormat pixelFormat; + /// \brief The size (in bytes) of the whole image. + /** + * This value in connection with mvIMPACT::acquire::ImageBuffer::vpData + * is sufficient to copy the complete image without having any additional information about it. + */ + int iSize; + /// \brief The starting address of the image. + /** + * This address in connection with mvIMPACT::acquire::ImageBuffer::iSize + * is sufficient to copy the complete image without having any additional information about it. + * + * \if (DOXYGEN_CPP_DOCUMENTATION || DOXYGEN_C_DOCUMENTATION) + * EXAMPLE:

+ * \code + * const ImageBuffer* pib = getImageBufferFromSomewhere(); + * unsigned char* pTempBuf = new unsigned char[ib.iSize]; + * memcpy( pTempBuf, pib.vpData, pIB.iSize ); + * \endcode + * \elseif DOXYGEN_NET_DOCUMENTATION + * \attention To copy this data from within a .NET environment the appropriate marshaling functions must be used! + * \elseif DOXYGEN_JAVA_DOCUMENTATION + * \attention Do \b NOT use this pointer in Java! It references native, unmanaged memory and cannot be copied directly into + * a piece of managed Java memory. Use mvIMPACT::acquire::ImageBufferDesc::copy() instead (see code below)! + * \code + * byte[] data = new byte[pRequest.getImageSize().read()]; + * pRequest.getImageBufferDesc().copy( data ); + * \endcode + * \elseif DOXYGEN_PYTHON_DOCUMENTATION + * \attention There are various ways to access the data captured into a request object. One way would be by using the \c ctypes module: + * \code + * ib = getImageBufferFromSomewhere() + * cbuf = (ctypes.c_char * ib.iSize).from_address(int(ib.vpData)) + * \endcode + * \endif + * + * \note + * It's not always necessary to copy the image data! Each mvIMPACT::acquire::ImageBuffer is an + * integral part of the mvIMPACT::acquire::Request object returned to the user by a call to + * the corresponding 'waitFor' function offered by the interface. + * The data in this mvIMPACT::acquire::ImageBuffer remains valid until the user either + * unlocks the request buffer or closes the mvIMPACT::acquire::Device again. + * + * \note + * By unlocking the mvIMPACT::acquire::Request the user informs the driver, that this mvIMPACT::acquire::Request + * and the mvIMPACT::acquire::ImageBuffer belonging to that mvIMPACT::acquire::Request is not longer needed by the + * user. The driver then queues this mvIMPACT::acquire::Request for capturing image data into it once + * again. However once a mvIMPACT::acquire::Request has been returned to the user, its mvIMPACT::acquire::ImageBuffer + * can't be overwritten by the driver! Therefore the user can work with, modify, store or + * copy the data safely until he unlocks the mvIMPACT::acquire::Request again. + */ + void* vpData; + /// \brief The number of channels this image consists of. + /** + * For an RGB image this value e.g. would be 3. This value defines how many + * mvIMPACT::acquire::ChannelData structures mvIMPACT::acquire::ImageBuffer::pChannels + * is pointing to once this structure has been allocated and filled with valid data. + */ + int iChannelCount; + /// \brief A pointer to an array of channel specific image data. + ChannelData* pChannels; +} ATTR_PACK_8; + +#if defined(_WIN32) || !defined(__GNUC__) +# pragma pack(pop) // restore previous structure alignment +#endif // defined(_WIN32) || !defined(__GNUC__) +#undef ATTR_PACK_ + +#if defined(MVIMPACT_ACQUIRE_H_) || defined(MVIMPACT_ACQUIRE_GIGEVISION_H_) || defined(DOXYGEN_CPP_DOCUMENTATION) +} // namespace acquire +} // namespace mvIMPACT +#endif // #if defined(MVIMPACT_ACQUIRE_H_) || defined(DOXYGEN_CPP_DOCUMENTATION) + +#ifdef __cplusplus +} +#endif // __cplusplus + +// restore Borland compiler switch 'force enums to the size of integer' +#if !defined(DOXYGEN_SHOULD_SKIP_THIS) && !defined(WRAP_ANY) +# ifdef _WIN32 +# ifdef __BORLANDC__ +# pragma option pop +# endif // __BORLANDC__ +# endif // _WIN32 +#endif // #if !defined(DOXYGEN_SHOULD_SKIP_THIS) && !defined(WRAP_ANY) + + +#endif // mvImageBufferH diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/mvDeviceManager.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/mvDeviceManager.lib new file mode 100644 index 00000000..7c6f4dfa Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/mvDeviceManager.lib differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/mvDeviceManagerb.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/mvDeviceManagerb.lib new file mode 100644 index 00000000..250fdfa2 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/mvDeviceManagerb.lib differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/mvDisplay.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/mvDisplay.lib new file mode 100644 index 00000000..23daaf9a Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/mvDisplay.lib differ diff --git a/Cigarette/MvIMPACT/lib/win32/mvDisplayb.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/mvDisplayb.lib similarity index 100% rename from Cigarette/MvIMPACT/lib/win32/mvDisplayb.lib rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/mvDisplayb.lib diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/win/x64/mvDeviceManager.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/win/x64/mvDeviceManager.lib new file mode 100644 index 00000000..4448b1e0 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/win/x64/mvDeviceManager.lib differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/win/x64/mvDeviceManagerb.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/win/x64/mvDeviceManagerb.lib new file mode 100644 index 00000000..7ded3d95 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/win/x64/mvDeviceManagerb.lib differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/win/x64/mvDisplay.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/win/x64/mvDisplay.lib new file mode 100644 index 00000000..46cacd75 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/win/x64/mvDisplay.lib differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/win/x64/mvDisplayb.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/win/x64/mvDisplayb.lib new file mode 100644 index 00000000..4964b05a Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/win/x64/mvDisplayb.lib differ diff --git a/Cigarette/MvIMPACT/lib/win32/mvDeviceManager.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/win32/mvDeviceManager.lib similarity index 100% rename from Cigarette/MvIMPACT/lib/win32/mvDeviceManager.lib rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/win32/mvDeviceManager.lib diff --git a/Cigarette/MvIMPACT/lib/win32/mvDeviceManagerb.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/win32/mvDeviceManagerb.lib similarity index 100% rename from Cigarette/MvIMPACT/lib/win32/mvDeviceManagerb.lib rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/win32/mvDeviceManagerb.lib diff --git a/Cigarette/MvIMPACT/lib/win32/mvDisplay.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/win32/mvDisplay.lib similarity index 100% rename from Cigarette/MvIMPACT/lib/win32/mvDisplay.lib rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/win32/mvDisplay.lib diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/win32/mvDisplayb.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/win32/mvDisplayb.lib new file mode 100644 index 00000000..4ef63354 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/win32/mvDisplayb.lib differ diff --git a/Cigarette/MvIMPACT/lib/win64/mvDeviceManager.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/win64/mvDeviceManager.lib similarity index 100% rename from Cigarette/MvIMPACT/lib/win64/mvDeviceManager.lib rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/win64/mvDeviceManager.lib diff --git a/Cigarette/MvIMPACT/lib/win64/mvDeviceManagerb.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/win64/mvDeviceManagerb.lib similarity index 100% rename from Cigarette/MvIMPACT/lib/win64/mvDeviceManagerb.lib rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/win64/mvDeviceManagerb.lib diff --git a/Cigarette/MvIMPACT/lib/win64/mvDisplay.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/win64/mvDisplay.lib similarity index 100% rename from Cigarette/MvIMPACT/lib/win64/mvDisplay.lib rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/win64/mvDisplay.lib diff --git a/Cigarette/MvIMPACT/lib/win64/mvDisplayb.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/win64/mvDisplayb.lib similarity index 100% rename from Cigarette/MvIMPACT/lib/win64/mvDisplayb.lib rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/lib/win64/mvDisplayb.lib diff --git a/Cigarette/MvIMPACT/mvDeviceManager/Include/mvDeviceManager.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvDeviceManager/Include/mvDeviceManager.h similarity index 82% rename from Cigarette/MvIMPACT/mvDeviceManager/Include/mvDeviceManager.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvDeviceManager/Include/mvDeviceManager.h index 8980c64f..50a72356 100644 --- a/Cigarette/MvIMPACT/mvDeviceManager/Include/mvDeviceManager.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvDeviceManager/Include/mvDeviceManager.h @@ -1,12 +1,15 @@ //----------------------------------------------------------------------------- -// (C) Copyright 2005 - 2021 by MATRIX VISION GmbH +// @description: Impact Acquire +// @copyright: (C) Copyright 2005 - 2023 by Balluff GmbH +// @authors: APIs and drivers development team at Balluff GmbH +// @initial date: 2005 // -// This software is provided by MATRIX VISION GmbH "as is" +// This software is provided by Balluff GmbH "as is" // and any express or implied warranties, including, but not limited to, the // implied warranties of merchantability and fitness for a particular purpose // are disclaimed. // -// In no event shall MATRIX VISION GmbH be liable for any direct, +// In no event shall Balluff GmbH be liable for any direct, // indirect, incidental, special, exemplary, or consequential damages // (including, but not limited to, procurement of substitute goods or services; // loss of use, data, or profits; or business interruption) however caused and @@ -24,8 +27,8 @@ # include #endif // #ifndef WRAP_ANY +#include #include -#include #ifdef __cplusplus extern "C" { @@ -74,12 +77,12 @@ namespace acquire # endif // #ifdef _WIN32 #endif // #ifdef DOXYGEN_SHOULD_SKIP_THIS -#ifdef __GNUC__ -# define ATTR_PACK __attribute__((packed)) __attribute__ ((aligned (8))) -#else -#define ATTR_PACK +#if defined(__GNUC__) && !defined(_WIN32) +# define ATTR_PACK_8 __attribute__((packed)) __attribute__ ((aligned (8))) +#else // _MSC_VER, __BORLANDC__, SWIG, ... +# define ATTR_PACK_8 # pragma pack(push, 8) // 8 byte structure alignment -#endif // #ifdef __GNUC__ +#endif // defined(__GNUC__) && !defined(_WIN32) #if !defined(MVIMPACT_DEPRECATED_C) && !defined(DOXYGEN_SHOULD_SKIP_THIS) # if !defined(MVIMPACT_ACQUIRE_H_) && !defined(NO_MVIMPACT_DEPRECATED_C_WARNINGS) @@ -95,119 +98,6 @@ namespace acquire # endif // #if !defined(MVIMPACT_ACQUIRE_H_) && !defined(NO_MVIMPACT_DEPRECATED_C_WARNINGS) #endif // #if !defined(MVIMPACT_DEPRECATED_C) && !defined(DOXYGEN_SHOULD_SKIP_THIS) -//----------------------------------------------------------------------------- -/// \brief A structure for image buffer channel specific data -/** - * Channel specific data in an image is data, that in e.g. and RGB image - * might differ for the color components red, green and blue. - * - * \ingroup CommonInterface - */ -struct ChannelData -//----------------------------------------------------------------------------- -{ - /// \brief The offset (in bytes) to the next channel. - int iChannelOffset; - /// \brief The offset (in bytes) to the next line of this channel. - int iLinePitch; - /// \brief The offset (in bytes) to the next pixel of this channel. - int iPixelPitch; - /// \brief The string descriptor for this channel. - /** - * For an RGB image the string values of three mvIMPACT::acquire::ChannelData - * structures this might e.g. be "R", "G" and "B". - */ - char szChannelDesc[DEFAULT_STRING_SIZE_LIMIT]; -} ATTR_PACK; - -#if !defined(DOXYGEN_SHOULD_SKIP_THIS) && !defined(WRAP_ANY) -typedef struct ChannelData ChannelData; -#endif // #if !defined(DOXYGEN_SHOULD_SKIP_THIS) && !defined(WRAP_ANY) - -//----------------------------------------------------------------------------- -/// \brief Fully describes a captured image. -/** - * This class serves as a describing structure for captured images. - * - * \ingroup CommonInterface - */ -struct ImageBuffer -//----------------------------------------------------------------------------- -{ - /// \brief The number of bytes per pixel. - int iBytesPerPixel; - /// \brief The height of the image in pixel or lines. - int iHeight; - /// \brief The width of the image in pixel. - int iWidth; - /// \brief The pixel format of this image. - /** - * This might be important, when the image data needs to be processed or stored in - * a file or maybe even if the image shall be displayed. - */ - TImageBufferPixelFormat pixelFormat; - /// \brief The size (in bytes) of the whole image. - /** - * This value in connection with mvIMPACT::acquire::ImageBuffer::vpData - * is sufficient to copy the complete image without having any additional information about it. - */ - int iSize; - /// \brief The starting address of the image. - /** - * This address in connection with mvIMPACT::acquire::ImageBuffer::iSize - * is sufficient to copy the complete image without having any additional information about it. - * - * \if (DOXYGEN_CPP_DOCUMENTATION || DOXYGEN_C_DOCUMENTATION) - * EXAMPLE:

- * \code - * const ImageBuffer* pib = getImageBufferFromSomewhere(); - * unsigned char* pTempBuf = new unsigned char[ib.iSize]; - * memcpy( pTempBuf, pib.vpData, pIB.iSize ); - * \endcode - * \elseif DOXYGEN_NET_DOCUMENTATION - * \attention To copy this data from within a .NET environment the appropriate marshaling functions must be used! - * \elseif DOXYGEN_JAVA_DOCUMENTATION - * \warning Do \b NOT use this pointer in Java! It references native, unmanaged memory and cannot be copied directly into - * a piece of managed Java memory. Use mvIMPACT::acquire::ImageBufferDesc::copy() instead (see code below)! - * \code - * byte[] data = new byte[pRequest.getImageSize().read()]; - * pRequest.getImageBufferDesc().copy( data ); - * \endcode - * \elseif DOXYGEN_PYTHON_DOCUMENTATION - * \attention There are various ways to access the data captured into a request object. One way would be by using the \c ctypes module: - * \code - * ib = getImageBufferFromSomewhere() - * cbuf = (ctypes.c_char * ib.iSize).from_address(int(ib.vpData)) - * \endcode - * \endif - * - * \note - * It's not always necessary to copy the image data! Each mvIMPACT::acquire::ImageBuffer is an - * integral part of the mvIMPACT::acquire::Request object returned to the user by a call to - * the corresponding 'waitFor' function offered by the interface. - * The data in this mvIMPACT::acquire::ImageBuffer remains valid until the user either - * unlocks the request buffer or closes the mvIMPACT::acquire::Device again. - * - * \note - * By unlocking the mvIMPACT::acquire::Request the user informs the driver, that this mvIMPACT::acquire::Request - * and the mvIMPACT::acquire::ImageBuffer belonging to that mvIMPACT::acquire::Request is not longer needed by the - * user. The driver then queues this mvIMPACT::acquire::Request for capturing image data into it once - * again. However once a mvIMPACT::acquire::Request has been returned to the user, its mvIMPACT::acquire::ImageBuffer - * can't be overwritten by the driver! Therefore the user can work with, modify, store or - * copy the data safely until he unlocks the mvIMPACT::acquire::Request again. - */ - void* vpData; - /// \brief The number of channels this image consists of. - /** - * For an RGB image this value e.g. would be 3. This value defines how many - * mvIMPACT::acquire::ChannelData structures mvIMPACT::acquire::ImageBuffer::pChannels - * is pointing to once this structure has been allocated and filled with valid data. - */ - int iChannelCount; - /// \brief A pointer to an array of channel specific image data. - ChannelData* pChannels; -} ATTR_PACK; - #if !defined(DOXYGEN_CPP_DOCUMENTATION) && !defined(WRAP_ANY) //----------------------------------------------------------------------------- /// \brief This structure contains information about the image currently associated with the request object. @@ -318,7 +208,7 @@ struct RequestInfo * to indicate that not all the data has been captured, this property will contain the amount of data missing in percent. */ double missingData_pc; -} ATTR_PACK; +} ATTR_PACK_8; //----------------------------------------------------------------------------- /// \brief Contains status information about the capture process. @@ -345,34 +235,9 @@ struct RequestResult * it is currently processed by the driver. */ TRequestState state; -} ATTR_PACK; +} ATTR_PACK_8; #endif // #if !defined(DOXYGEN_CPP_DOCUMENTATION) && !defined(WRAP_ANY) -#if !defined(WRAP_ANY) -//----------------------------------------------------------------------------- -/// \brief A structure containing information about an event that has been reported by the device driver and has been successfully waited for. -/** - * \deprecated This structure has been declared deprecated. 'onChanged' callbacks can - * directly be registered on every feature now. - * - * \ingroup CommonInterface - */ -struct EventData -//----------------------------------------------------------------------------- -{ - /// \brief A consecutive number telling the user how many times this event has occurred already. - unsigned int count; - /// \brief The lower part of the timestamp associated with this event. - unsigned int timestamp_lowPart; - /// \brief The higher part of the timestamp associated with this event. - /** - * \note Not every device or event type will support this parameter. If the - * parameter is not supported, it will be 0. - */ - unsigned int timestamp_highPart; -} ATTR_PACK; -#endif // #if !defined(WRAP_ANY) - //----------------------------------------------------------------------------- /// \brief Defines valid image request parameters. /** @@ -537,6 +402,9 @@ const size_t INFO_STRING_SIZE = 38; //----------------------------------------------------------------------------- /// \brief Valid handle check modes. +/** + * \ingroup CommonInterface + */ enum TOBJ_HandleCheckMode // no_managed_type //----------------------------------------------------------------------------- { @@ -551,6 +419,7 @@ enum TOBJ_HandleCheckMode // no_managed_type /** * Certain information for an object can be queried as a string with direct * construction. + * \ingroup CommonInterface */ enum TOBJ_StringQuery // no_managed_type //----------------------------------------------------------------------------- @@ -614,6 +483,7 @@ enum TOBJ_StringQuery // no_managed_type /** * \sa * DMR_GetDeviceInfo() + * \ingroup CommonInterface */ struct TDMR_DeviceInfo // no_managed_type //----------------------------------------------------------------------------- @@ -621,14 +491,32 @@ struct TDMR_DeviceInfo // no_managed_type /// \brief A string representation of the serial number of this device. char serial[INFO_STRING_SIZE]; /// \brief A string representation of the family this device belongs to. + /** + * \note This is a legacy property only provided for backward compatibility. New applications + * should use \b deviceFamilyName instead! + */ char family[INFO_STRING_SIZE]; /// \brief A string representation of the product name of this device. + /** + * \note This is a legacy property only provided for backward compatibility. New applications + * should use \b deviceModelName instead! + */ char product[INFO_STRING_SIZE]; /// \brief An integer value containing the current firmware version this device is programmed with. int firmwareVersion; /// \brief The device ID this device has been associated with. int deviceId; -} ATTR_PACK; + /// \brief A string representation of the family name this device belongs to. + /** + * \since 3.0.0 + */ + char deviceFamilyName[INFO_STRING_SIZE]; + /// \brief A string representation of the model name of this device. + /** + * \since 3.0.0 + */ + char deviceModelName[INFO_STRING_SIZE]; +} ATTR_PACK_8; //----------------------------------------------------------------------------- /// \brief Valid search modes for the function \b DMR_GetDevice() when searching for a certain device. @@ -636,6 +524,7 @@ struct TDMR_DeviceInfo // no_managed_type * \note * ::dmdsmUseDevID can be 'ored' (|) together with * all the other modes. + * \ingroup CommonInterface */ enum TDMR_DeviceSearchMode // no_managed_type //----------------------------------------------------------------------------- @@ -657,6 +546,9 @@ enum TDMR_DeviceSearchMode // no_managed_type //----------------------------------------------------------------------------- /// \brief Defines valid info query types, which can be passed to the function \b DMR_GetDeviceInfoEx(). +/** + * \ingroup CommonInterface + */ enum TDMR_DeviceInfoType //----------------------------------------------------------------------------- { @@ -690,6 +582,9 @@ enum TDMR_DeviceInfoType //----------------------------------------------------------------------------- /// \brief Defines valid interface list types, which can be located using the function \b DMR_FindList(). +/** + * \ingroup CommonInterface + */ enum TDMR_ListType // no_managed_type //----------------------------------------------------------------------------- { @@ -751,34 +646,8 @@ enum TDMR_ListType // no_managed_type * \note This feature currently is only available for frame grabber devices. */ dmltDeviceSpecificData = 9, - /// \brief Specifies the driver interface list providing access to the device specific event type settings lists (\b deprecated). - /** - * \note Every device will support a different set of events that can be waited for by the user. - * - * This list will contain a sublist for each event type recognized for this device. Within this sublist - * all properties that can be describe the current mode an event is operated in user can be found. - * - * \deprecated - * This value has been declared deprecated and will be removed in future versions of this interface. - * A more flexible way of getting informed about changes in driver features - * has been added to the interface and should be used instead. An example for this new method - * is \b Callback.c. - */ - dmltEventSubSystemSettings = 10, - /// \brief Specifies the driver interface list providing access to the device specific event type results lists (\b deprecated). - /** - * \note Every device will support a different set of events that can be waited for by the user. - * - * This list will contain a sublist for each event type recognized for this device. Within this sublist - * all result properties that can be queried by the user can be found. - * - * \deprecated - * This value has been declared deprecated and will be removed in future versions of this interface. - * A more flexible way of getting informed about changes in driver features - * has been added to the interface and should be used instead. An example for this new method - * is \b Callback.c. - */ - dmltEventSubSystemResults = 11, + // dmltEventSubSystemSettings = 10, // Removed in version 2.47.0! Do not re-use value! + // dmltEventSubSystemResults = 11, // Removed in version 2.47.0! Do not re-use value! /// \brief Specifies the driver interface list providing access to the devices memory manager list. /** * \note This feature currently is only available for frame grabber devices. @@ -817,7 +686,6 @@ MVDMR_API TDMR_ERROR DMR_CALL DMR_GetDeviceWithStringID( HDEV* pHDev, TDMR_Devic MVDMR_API TDMR_ERROR DMR_CALL DMR_GetDeviceCount( unsigned int* pDevCnt ); MVDMR_API TDMR_ERROR DMR_CALL DMR_OpenDevice( HDEV hDev, HDRV* pHDrv ); MVDMR_API TDMR_ERROR DMR_CALL DMR_CloseDevice( HDRV hDrv, HDEV hDev ); -MVIMPACT_DEPRECATED_C( MVDMR_API TDMR_ERROR DMR_CALL DMR_GetDeviceInfo( unsigned int devNr, TDMR_DeviceInfo* pInfo, size_t infoSize ) ); MVDMR_API TDMR_ERROR DMR_CALL DMR_GetDeviceInfoEx( HDEV hDev, TDMR_DeviceInfoType infoType, void* pInfo, size_t* pInfoSize ); MVDMR_API TDMR_ERROR DMR_CALL DMR_GetDriverHandle( HDEV hDev, HDRV* pHDrv ); MVDMR_API TDMR_ERROR DMR_CALL DMR_UpdateDeviceList( unsigned int reserved, int reserved2 ); @@ -860,9 +728,9 @@ MVDMR_API TDMR_ERROR DMR_CALL DMR_LoadSettingFromDefault( HDRV hDrv, TScope scop MVDMR_API TDMR_ERROR DMR_CALL DMR_SaveSettingToDefault( HDRV hDrv, TScope scope ); MVDMR_API TDMR_ERROR DMR_CALL DMR_IsSettingAvailable( const char* pName, TStorageLocation storageLocation, TScope scope ); MVDMR_API TDMR_ERROR DMR_CALL DMR_DeleteSetting( const char* pName, TStorageLocation location, TScope scope ); -MVDMR_API TDMR_ERROR DMR_CALL DMR_ExportCameraDescription( HDRV hDrv, HLIST hCameraDescList ); -MVDMR_API TDMR_ERROR DMR_CALL DMR_ImportCameraDescription( HDRV hDrv, HLIST hCameraDescList ); -MVDMR_API TDMR_ERROR DMR_CALL DMR_CopyCameraDescription( HDRV hDrv, HLIST hCameraDescList, const char* pNewName ); +MVIMPACT_DEPRECATED_C( MVDMR_API TDMR_ERROR DMR_CALL DMR_ExportCameraDescription( HDRV hDrv, HLIST hCameraDescList ) ); +MVIMPACT_DEPRECATED_C( MVDMR_API TDMR_ERROR DMR_CALL DMR_ImportCameraDescription( HDRV hDrv, HLIST hCameraDescList ) ); +MVIMPACT_DEPRECATED_C( MVDMR_API TDMR_ERROR DMR_CALL DMR_CopyCameraDescription( HDRV hDrv, HLIST hCameraDescList, const char* pNewName ) ); // miscellaneous HW specific functions MVDMR_API TDMR_ERROR DMR_CALL DMR_SetDeviceID( HDEV hDev, int newID ); MVDMR_API TDMR_ERROR DMR_CALL DMR_UpdateFirmware( HDEV hDev ); @@ -870,10 +738,6 @@ MVDMR_API TDMR_ERROR DMR_CALL DMR_UpdateDigitalInputs( HDRV hDrv ); MVDMR_API TDMR_ERROR DMR_CALL DMR_CreateUserDataEntry( HDEV hDev, HLIST* pEntry ); MVDMR_API TDMR_ERROR DMR_CALL DMR_DeleteUserDataEntry( HDEV hDev, HLIST hEntry ); MVDMR_API TDMR_ERROR DMR_CALL DMR_WriteUserDataToHardware( HDEV hDev ); -#if !defined(WRAP_ANY) && !defined(BUILD_FOR_JAVA) // don't wrap deprecated stuff -MVIMPACT_DEPRECATED_C( MVDMR_API TDMR_ERROR DMR_CALL DMR_EventWaitFor( HDRV hDrv, int timeout_ms, TDeviceEventType mask, int reserved, int reserved2, TDeviceEventType* pResultType ) ); -MVIMPACT_DEPRECATED_C( MVDMR_API TDMR_ERROR DMR_CALL DMR_EventGetData( HDRV hDrv, TDeviceEventType type, int reserved, int reserved2, EventData* pResult, size_t resultSize ) ); -#endif // #if !defined(WRAP_ANY) && !defined(BUILD_FOR_JAVA) // don't wrap deprecated stuff // device independent image buffer related functions MVDMR_API TDMR_ERROR DMR_CALL DMR_AllocImageRequestBufferDesc( ImageBuffer** ppBuffer, int channelCount ); @@ -900,8 +764,6 @@ MVDMR_API const char* DMR_CALL DMR_ErrorCodeToString( int errorCode ); MVDMR_API const char* DMR_CALL DMR_GetVersion( TLibraryQuery libraryQuery ); MVDMR_API TDMR_ERROR DMR_CALL DMR_GetLastError( TDMR_ERROR* pErrorCode, char* pErrorText, size_t* pErrorTextSize ); // general object specific functions -MVIMPACT_DEPRECATED_C( MVDMR_API TPROPHANDLING_ERROR DMR_CALL OBJ_IsSettingAvailable( const char* pName, TStorageFlag storageFlags, TScope scope ) ); -MVIMPACT_DEPRECATED_C( MVDMR_API TPROPHANDLING_ERROR DMR_CALL OBJ_DeleteSetting( const char* pName, TStorageFlag storageFlags, TScope scope ) ); MVDMR_API TPROPHANDLING_ERROR DMR_CALL OBJ_CheckHandle( HOBJ hObj, TOBJ_HandleCheckMode mode ); MVDMR_API TPROPHANDLING_ERROR DMR_CALL OBJ_GetChangedCounter( HOBJ hObj, unsigned int* pChangedCounter ); MVDMR_API TPROPHANDLING_ERROR DMR_CALL OBJ_GetChangedCounterAttr( HOBJ hObj, unsigned int* pChangedCounter ); @@ -921,7 +783,6 @@ MVDMR_API TPROPHANDLING_ERROR DMR_CALL OBJ_GetRepresentationS( HOBJ hObj, char* MVDMR_API TPROPHANDLING_ERROR DMR_CALL OBJ_RepresentationToString( TComponentRepresentation representation, char* pBuf, size_t bufSize ); MVDMR_API TPROPHANDLING_ERROR DMR_CALL OBJ_IsDefault( HOBJ hObj, unsigned int* pResult ); MVDMR_API TPROPHANDLING_ERROR DMR_CALL OBJ_RestoreDefault( HOBJ hObj ); -MVIMPACT_DEPRECATED_C( MVDMR_API TPROPHANDLING_ERROR DMR_CALL OBJ_GetHandle( HLIST hList, const char* pPathAndObjName, HOBJ* phObj ) ); MVDMR_API TPROPHANDLING_ERROR DMR_CALL OBJ_GetSelectedFeatures( HOBJ hObj, int index, HOBJ* phFeatures, size_t* pFeatureCount ); MVDMR_API TPROPHANDLING_ERROR DMR_CALL OBJ_GetSelectingFeatures( HOBJ hObj, int index, HOBJ* phFeatures, size_t* pFeatureCount ); @@ -1005,10 +866,10 @@ MVDMR_API TPROPHANDLING_ERROR DMR_CALL OBJ_FreeSMemory( char* pBuffer ); #endif // #ifndef DOXYGEN_CPP_DOCUMENTATION -#ifndef __GNUC__ +#if defined(_WIN32) || !defined(__GNUC__) # pragma pack(pop) // restore previous structure alignment -#endif -#undef ATTR_PACK +#endif // defined(_WIN32) || !defined(__GNUC__) +#undef ATTR_PACK_8 #if defined(MVIMPACT_ACQUIRE_H_) || defined(DOXYGEN_CPP_DOCUMENTATION) } // namespace acquire diff --git a/Cigarette/MvIMPACT/mvDisplay/Include/mvDisplay.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvDisplay/Include/mvDisplay.h similarity index 95% rename from Cigarette/MvIMPACT/mvDisplay/Include/mvDisplay.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvDisplay/Include/mvDisplay.h index 354c7291..9847e851 100644 --- a/Cigarette/MvIMPACT/mvDisplay/Include/mvDisplay.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvDisplay/Include/mvDisplay.h @@ -1,12 +1,15 @@ //----------------------------------------------------------------------------- -// (C) Copyright 2005 - 2021 by MATRIX VISION GmbH +// @description: Impact Acquire +// @copyright: (C) Copyright 2005 - 2023 by Balluff GmbH +// @authors: APIs and drivers development team at Balluff GmbH +// @initial date: 2005 // -// This software is provided by MATRIX VISION GmbH "as is" +// This software is provided by Balluff GmbH "as is" // and any express or implied warranties, including, but not limited to, the // implied warranties of merchantability and fitness for a particular purpose // are disclaimed. // -// In no event shall MATRIX VISION GmbH be liable for any direct, +// In no event shall Balluff GmbH be liable for any direct, // indirect, incidental, special, exemplary, or consequential damages // (including, but not limited to, procurement of substitute goods or services; // loss of use, data, or profits; or business interruption) however caused and diff --git a/Cigarette/MvIMPACT/mvDisplay/Include/mvDisplayDatatypes.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvDisplay/Include/mvDisplayDatatypes.h similarity index 91% rename from Cigarette/MvIMPACT/mvDisplay/Include/mvDisplayDatatypes.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvDisplay/Include/mvDisplayDatatypes.h index 26f23965..2bd512be 100644 --- a/Cigarette/MvIMPACT/mvDisplay/Include/mvDisplayDatatypes.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvDisplay/Include/mvDisplayDatatypes.h @@ -1,12 +1,15 @@ //----------------------------------------------------------------------------- -// (C) Copyright 2005 - 2021 by MATRIX VISION GmbH +// @description: Impact Acquire +// @copyright: (C) Copyright 2005 - 2023 by Balluff GmbH +// @authors: APIs and drivers development team at Balluff GmbH +// @initial date: 2005 // -// This software is provided by MATRIX VISION GmbH "as is" +// This software is provided by Balluff GmbH "as is" // and any express or implied warranties, including, but not limited to, the // implied warranties of merchantability and fitness for a particular purpose // are disclaimed. // -// In no event shall MATRIX VISION GmbH be liable for any direct, +// In no event shall Balluff GmbH be liable for any direct, // indirect, incidental, special, exemplary, or consequential damages // (including, but not limited to, procurement of substitute goods or services; // loss of use, data, or profits; or business interruption) however caused and @@ -52,7 +55,10 @@ enum TImageDisplayError IDE_NoError = 0, /// \brief There is not enough memory available to perform the requested operation. IDE_OutOfMemory, - /// \brief The update failed. This is an internal error. + /// \brief The update failed. + /** + * This usually is an internal error but will also be returned when a raw buffer has been passed to the display module since it then is unclear how to draw it. + */ IDE_UpdateFailed, /// \brief One or more of the handles passed to a function where invalid. IDE_InvalidHandle, @@ -162,7 +168,12 @@ enum TFormatFlags /** * \since 2.13.0 */ - ffYUV411_UYYVYY_Packed + ffYUV411_UYYVYY_Packed, + /// \brief Valid values for bits per pixel in this format: not used. Raw buffer. Won't be displayed + /** + * \since 2.46.0 + */ + ffRaw }; /// \brief Display structure handle for C compliant interface diff --git a/Cigarette/MvIMPACT/mvDisplay/Include/mvDisplayExtensions.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvDisplay/Include/mvDisplayExtensions.h similarity index 90% rename from Cigarette/MvIMPACT/mvDisplay/Include/mvDisplayExtensions.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvDisplay/Include/mvDisplayExtensions.h index ff1ad5a8..577e01a8 100644 --- a/Cigarette/MvIMPACT/mvDisplay/Include/mvDisplayExtensions.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvDisplay/Include/mvDisplayExtensions.h @@ -1,12 +1,15 @@ //----------------------------------------------------------------------------- -// (C) Copyright 2005 - 2021 by MATRIX VISION GmbH +// @description: Impact Acquire +// @copyright: (C) Copyright 2005 - 2023 by Balluff GmbH +// @authors: APIs and drivers development team at Balluff GmbH +// @initial date: 2005 // -// This software is provided by MATRIX VISION GmbH "as is" +// This software is provided by Balluff GmbH "as is" // and any express or implied warranties, including, but not limited to, the // implied warranties of merchantability and fitness for a particular purpose // are disclaimed. // -// In no event shall MATRIX VISION GmbH be liable for any direct, +// In no event shall Balluff GmbH be liable for any direct, // indirect, incidental, special, exemplary, or consequential damages // (including, but not limited to, procurement of substitute goods or services; // loss of use, data, or profits; or business interruption) however caused and @@ -53,8 +56,9 @@ void MV_DISPLAY_API_CALL mvDispSetImageFromImageBuffer( TDisp* pDisp, const Imag //----------------------------------------------------------------------------- /// \brief Sets the next image to display. /** - * This function can deal with any pixel format supported by mvIMPACT Acquire. - * \since 1.12.68 + * This function can deal with any pixel format supported by \product_name. + * \since 1.12.68 + * \ingroup Display */ inline void mvDispSetImageFromRequest( /// [in] A handle to a display structure obtained diff --git a/Cigarette/MvIMPACT/mvDisplay/Include/mvDisplayWindow.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvDisplay/Include/mvDisplayWindow.h similarity index 90% rename from Cigarette/MvIMPACT/mvDisplay/Include/mvDisplayWindow.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvDisplay/Include/mvDisplayWindow.h index 841d23ce..956e47f1 100644 --- a/Cigarette/MvIMPACT/mvDisplay/Include/mvDisplayWindow.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvDisplay/Include/mvDisplayWindow.h @@ -1,12 +1,15 @@ //----------------------------------------------------------------------------- -// (C) Copyright 2005 - 2021 by MATRIX VISION GmbH +// @description: Impact Acquire +// @copyright: (C) Copyright 2005 - 2023 by Balluff GmbH +// @authors: APIs and drivers development team at Balluff GmbH +// @initial date: 2005 // -// This software is provided by MATRIX VISION GmbH "as is" +// This software is provided by Balluff GmbH "as is" // and any express or implied warranties, including, but not limited to, the // implied warranties of merchantability and fitness for a particular purpose // are disclaimed. // -// In no event shall MATRIX VISION GmbH be liable for any direct, +// In no event shall Balluff GmbH be liable for any direct, // indirect, incidental, special, exemplary, or consequential damages // (including, but not limited to, procurement of substitute goods or services; // loss of use, data, or profits; or business interruption) however caused and diff --git a/Cigarette/MvIMPACT/mvDisplay/Include/mvIMPACT_acquire_display.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvDisplay/Include/mvIMPACT_acquire_display.h similarity index 97% rename from Cigarette/MvIMPACT/mvDisplay/Include/mvIMPACT_acquire_display.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvDisplay/Include/mvIMPACT_acquire_display.h index bde1ce97..14393e16 100644 --- a/Cigarette/MvIMPACT/mvDisplay/Include/mvIMPACT_acquire_display.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvDisplay/Include/mvIMPACT_acquire_display.h @@ -1,12 +1,15 @@ //----------------------------------------------------------------------------- -// (C) Copyright 2005 - 2021 by MATRIX VISION GmbH +// @description: Impact Acquire +// @copyright: (C) Copyright 2005 - 2023 by Balluff GmbH +// @authors: APIs and drivers development team at Balluff GmbH +// @initial date: 2005 // -// This software is provided by MATRIX VISION GmbH "as is" +// This software is provided by Balluff GmbH "as is" // and any express or implied warranties, including, but not limited to, the // implied warranties of merchantability and fitness for a particular purpose // are disclaimed. // -// In no event shall MATRIX VISION GmbH be liable for any direct, +// In no event shall Balluff GmbH be liable for any direct, // indirect, incidental, special, exemplary, or consequential damages // (including, but not limited to, procurement of substitute goods or services; // loss of use, data, or profits; or business interruption) however caused and @@ -117,7 +120,7 @@ namespace acquire namespace display { -/// \defgroup Display Display functions +/// \defgroup Display Display Functions /// \brief Classes and functions that can be used to display images. /** * This group contains classes and functions that can be used to display images. @@ -150,9 +153,9 @@ class ImageDisplayWindow; * * \if DOXYGEN_CPP_DOCUMENTATION * \note - * This class can be used without using the rest of %mvIMPACT Acquire. This is achieved by using a pre-processor check - * for the presence of a certain include guard that is defined by %mvIMPACT Acquire. Now in order to be able to use those - * functions, that can directly work on data types as defined by %mvIMPACT Acquire, the main %mvIMPACT Acquire header + * This class can be used without using the rest of \product_name. This is achieved by using a pre-processor check + * for the presence of a certain include guard that is defined by \product_name. Now in order to be able to use those + * functions, that can directly work on data types as defined by \product_name, the main \product_name header * must be included \b BEFORE including this header: * * \code @@ -327,7 +330,7 @@ public: #if defined(MVIMPACT_ACQUIRE_H_) || defined(DOXYGEN_CPP_DOCUMENTATION) /// \brief Sets the next image to display. /** - * This function can deal with any pixel format supported by %mvIMPACT Acquire. + * This function can deal with any pixel format supported by \product_name. */ void SetImage( /// [in] The image buffer object that shall be displayed. @@ -337,7 +340,7 @@ public: } /// \brief Sets the next image to display. /** - * This function can deal with any pixel format supported by %mvIMPACT Acquire. + * This function can deal with any pixel format supported by \product_name. */ void SetImage( /// [in] The \b mvIMPACT::acquire::Request object whose image data shall be displayed. @@ -348,7 +351,7 @@ public: # if (defined( CPP_STANDARD_VERSION ) && ( CPP_STANDARD_VERSION >= 11 )) || defined(DOXYGEN_CPP_DOCUMENTATION) /// \brief Sets the next image to display. /** - * This function can deal with any pixel format supported by %mvIMPACT Acquire. + * This function can deal with any pixel format supported by \product_name. */ void SetImage( /// [in] The \b mvIMPACT::acquire::Request object whose image data shall be displayed. @@ -450,7 +453,7 @@ public: * * Now sometimes it is required to display other bits from the image e.g. for analysis purposes. As most operating * systems only support to display 8 bits per color component this requires to select a different range of pixels to - * be send to the canvas. This can be done by calling this function and passing a custom \a shift value to it. The + * be sent to the canvas. This can be done by calling this function and passing a custom \a shift value to it. The * custom \a shift value will be subtracted from the value that would be needed to display the 8 msb for a given format. * * So to display the 8 lsb for a 12 bit mono format, \a shift must be set to 4. This then results in the display module to @@ -531,7 +534,7 @@ public: * See \b mvDispInit() for a detailed description on which regions will be painted using * the background brush. * - * \warning This only stores the handle to the brush object, not the actual brush, so + * \attention This only stores the handle to the brush object, not the actual brush, so * as long as this handle is set and the display object is used, the referenced * brush must \b NOT be deleted again. */ diff --git a/Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire.h similarity index 95% rename from Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire.h index f57199e8..f3879849 100644 --- a/Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire.h @@ -1,12 +1,15 @@ //----------------------------------------------------------------------------- -// (C) Copyright 2005 - 2021 by MATRIX VISION GmbH +// @description: Impact Acquire +// @copyright: (C) Copyright 2005 - 2023 by Balluff GmbH +// @authors: APIs and drivers development team at Balluff GmbH +// @initial date: 2005 // -// This software is provided by MATRIX VISION GmbH "as is" +// This software is provided by Balluff GmbH "as is" // and any express or implied warranties, including, but not limited to, the // implied warranties of merchantability and fitness for a particular purpose // are disclaimed. // -// In no event shall MATRIX VISION GmbH be liable for any direct, +// In no event shall Balluff GmbH be liable for any direct, // indirect, incidental, special, exemplary, or consequential damages // (including, but not limited to, procurement of substitute goods or services; // loss of use, data, or profits; or business interruption) however caused and @@ -98,6 +101,9 @@ #endif // #if !defined(MVIMPACT_DEPRECATED_CPP) #if !defined(DOXYGEN_SHOULD_SKIP_THIS) +# ifdef MVIA_FUNCTION +# undef MVIA_FUNCTION +# endif // MVIA_FUNCTION # ifdef _MSC_VER // is Microsoft compiler? # pragma warning( push ) # if _MSC_VER < 1300 // is 'old' VC 6 compiler? @@ -115,7 +121,7 @@ # else # define MVIA_FUNCTION __FUNCTION__ # endif // #ifdef _MSC_VER -#endif // #ifdef DOXYGEN_SHOULD_SKIP_THIS +#endif // #if !defined(DOXYGEN_SHOULD_SKIP_THIS) #ifndef WRAP_ANY # include @@ -173,9 +179,6 @@ class ComponentLocator; class Device; class DigitalInput; class DigitalOutput; -# ifndef WRAP_ANY -class EventSubSystem; -# endif // #ifndef WRAP_ANY class HDRControl; class IOSubSystem; class ImageProcessing; @@ -188,7 +191,7 @@ class WhiteBalanceSettings; #ifdef MVIMPACT_H_ //----------------------------------------------------------------------------- -/// \brief A base class for exceptions generated by mvIMPACT Acquire. +/// \brief A base class for exceptions generated by Impact Acquire. /** * \if DOXYGEN_CPP_DOCUMENTATION * If \a mvIMPACT.h has been included before including this interface, this class will @@ -242,7 +245,7 @@ public: }; #else //----------------------------------------------------------------------------- -/// \brief A base class for exceptions generated by mvIMPACT Acquire. +/// \brief A base class for exceptions generated by Impact Acquire. class ImpactAcquireException : public std::runtime_error //----------------------------------------------------------------------------- { @@ -793,7 +796,7 @@ public: }; //----------------------------------------------------------------------------- -/// \brief A factory class to raise mvIMPACT acquire related exceptions. +/// \brief A factory class to raise Impact Acquire related exceptions. /** * This class contains a collection of static member functions that are used inside the * interface to raise the appropriate exception in case of an error @@ -1946,7 +1949,7 @@ public: //----------------------------------------------------------------------------- /// \brief A simple helper class to wrap the creation of a callback object. /** - * Applications need to derive from this class and must re-implement the function + * Applications need to derive from this class and must re-implement the function * \b mvIMPACT::acquire::ComponentCallback::execute. * * By deriving from this class it will become possible to receive a notification whenever @@ -1971,7 +1974,7 @@ public: * Reading and understanding the documentation supplied with the \b mvIMPACT::acquire::ComponentCallback::execute function * is vital to write error-free code! * - * \warning + * \attention * It is \b NOT save to call \b mvIMPACT::acquire::ComponentCallback::registerComponent and \b mvIMPACT::acquire::ComponentCallback::unregisterComponent * from parallel threads! If this is absolutely necessary appropriate synchronization code must be wrapped around these calls by the calling code! * @@ -2018,11 +2021,37 @@ class ComponentCallback --( m_pRefData->m_refCnt ); if( m_pRefData->m_refCnt == 0 ) { + while( !m_pRefData->objectsRegistered_.empty() ) + { + if( OBJ_CheckHandle( *m_pRefData->objectsRegistered_.begin(), hcmOwnerList ) == PROPHANDLING_NO_ERROR ) + { + unregisterComponent( Component( *m_pRefData->objectsRegistered_.begin() ), false ); + } + else + { + m_pRefData->objectsRegistered_.erase( *m_pRefData->objectsRegistered_.begin() ); + } + } OBJ_DeleteCallback( m_pRefData->handle_ ); delete m_pRefData; m_pRefData = 0; } } + bool unregisterComponent( Component c, bool boRaiseExceptionOnError ) + { + std::set::iterator it = m_pRefData->objectsRegistered_.find( c.hObj() ); + if( it == m_pRefData->objectsRegistered_.end() ) + { + return false; + } + const TPROPHANDLING_ERROR result = OBJ_DetachCallback( c.hObj(), m_pRefData->handle_ ); + if( boRaiseExceptionOnError && ( result != PROPHANDLING_NO_ERROR ) ) + { + ExceptionFactory::raiseException( MVIA_FUNCTION, __LINE__, result ); + } + m_pRefData->objectsRegistered_.erase( *it ); + return true; + } #endif // #ifndef WRAP_ANY public: /// \brief Creates a new \b mvIMPACT::acquire::ComponentCallback instance. @@ -2116,18 +2145,7 @@ public: /// [in] The component to unregister from this callback Component c ) { - std::set::iterator it = m_pRefData->objectsRegistered_.find( c.hObj() ); - if( it == m_pRefData->objectsRegistered_.end() ) - { - return false; - } - const TPROPHANDLING_ERROR result = OBJ_DetachCallback( c.hObj(), m_pRefData->handle_ ); - if( result != PROPHANDLING_NO_ERROR ) - { - ExceptionFactory::raiseException( MVIA_FUNCTION, __LINE__, result ); - } - m_pRefData->objectsRegistered_.erase( *it ); - return true; + return unregisterComponent( c, true ); } /// \brief The callback function. /** @@ -2139,7 +2157,7 @@ public: * a different thread than any known to by the application, thus appropriate mechanisms to ensure * correct execution must be implemented by an application(e.g. GUI applications might send an * event to the main thread instead of directly accessing GUI elements from here). - * + * * As each device driver instance internally creates multiple threads and since components can be modified by the * driver framework from any of these threads, the thread context might in fact be different each time * this function gets called. Accessing data from objects that are inherited from \b mvIMPACT::acquire::Component is @@ -2733,7 +2751,7 @@ public: } const std::string separators( " $%&!?=*#:;()" ); const std::string::size_type separatorCount = separators.size(); - for ( std::string::size_type i = 0; i < separatorCount; i++ ) + for( std::string::size_type i = 0; i < separatorCount; i++ ) { if( !isCharacterInStringList( separators[i], params ) ) { @@ -2769,7 +2787,7 @@ public: * * 'empty' strings can be passed as a single underline('_'). * - * \warning + * \attention * The characters '.', ',' and '_' can't be used as delimiters. * * \if (DOXYGEN_CPP_DOCUMENTATION || DOXYGEN_JAVA_DOCUMENTATION) @@ -3143,13 +3161,14 @@ public: * section in the documentation. * * Valid values for \a constant are defined by the enum \b mvIMPACT::acquire::TPropertyLimits. + * + * \param constant [in] The constant whose existence is in question + * * \return * - true if this property defines this constant * - false otherwise */ - MVIMPACT_DEPRECATED_CPP( bool isConstDefined( - /// [in] The constant whose existence is in question - TPropertyLimits constant ) const ); + MVIMPACT_DEPRECATED_CPP( bool isConstDefined( TPropertyLimits constant ) const ); #endif // #if !defined(WRAP_ANY) && !defined(BUILD_FOR_JAVA) // don't wrap deprecated stuff /// \brief Checks if a maximum value is defined for this property. /** @@ -3405,7 +3424,7 @@ public: * \return A const reference to the calling property. */ const Property& writeS( - /// [in] The new value for this property at the given \a index + /// [in] The new value for this property at the given \a index. const std::string& value, /// [in] The index of the value to modify int index = 0 ) const @@ -3773,7 +3792,6 @@ public: /** * This function queries a set of values from a property and stores these values * into \a sequence. - * \return Nothing. */ void read( /// [out] A reference to a container to store the data read from the property into. @@ -3783,7 +3801,7 @@ public: /// [in] The index where to stop reading values from the property. int end = END_OF_LIST ) const { - unsigned int valCnt = valuesToRead( start, end ); + const unsigned int valCnt = valuesToRead( start, end ); sequence.resize( valCnt ); for( unsigned int i = 0; i < valCnt; i++ ) { @@ -3794,7 +3812,6 @@ public: /** * This function queries a set of values from a property and stores these values * into \a sequence. - * \return Nothing. */ void read( /// [out] A reference to a container to store the data read from the property into. @@ -3859,7 +3876,7 @@ public: /// [in] The index where to write the first value to the property. int index = 0 ) const { - unsigned int vSize = static_cast( sequence.size() ); + const unsigned int vSize = static_cast( sequence.size() ); for( unsigned int i = 0; i < vSize; i++ ) { write( sequence[i], index + i ); @@ -4220,7 +4237,6 @@ public: /** * This function queries a set of values from a property and stores these values * into \a sequence. - * \return Nothing. */ void read( /// [out] A reference to a container to store the data read from the property into. @@ -4241,7 +4257,6 @@ public: /** * This function queries a set of values from a property and stores these values * into \a sequence. - * \return Nothing. */ void read( /// [out] A reference to a container to store the data read from the property into. @@ -4824,7 +4839,6 @@ public: /** * This function queries a set of values from a property and stores these values * into \a sequence. - * \return Nothing. */ void read( /// [out] A reference to a container to store the data read from the property into. @@ -4834,7 +4848,7 @@ public: /// [in] The index where to stop reading values from the property. int end = END_OF_LIST ) const { - unsigned int valCnt = valuesToRead( start, end ); + const unsigned int valCnt = valuesToRead( start, end ); sequence.resize( valCnt ); for( unsigned int i = 0; i < valCnt; i++ ) { @@ -4845,7 +4859,6 @@ public: /** * This function queries a set of values from a property and stores these values * into \a sequence. - * \return Nothing. */ void read( /// [out] A reference to a container to store the data read from the property into. @@ -4962,7 +4975,7 @@ typedef EnumPropertyI64 PropertyI64; typedef EnumPropertyI64 PropertyI64BufferPartDataType; typedef EnumPropertyI64 PropertyI64DeviceTriggerOverlap; #else -/// \brief Defines a property for values defined by \b mvIMPACT::acquire::TImageBufferPartType. +/// \brief Defines a property for values defined by \b mvIMPACT::acquire::TBufferPartDataType. typedef EnumPropertyI64 PropertyI64BufferPartDataType; /// \brief Defines a property for values defined by \b mvIMPACT::acquire::TDeviceTriggerOverlap. @@ -4976,7 +4989,7 @@ class PropertyPtr : public Property { public: /// \brief Constructs a new unbound \b mvIMPACT::acquire::PropertyPtr object. - explicit PropertyPtr() {} + explicit PropertyPtr() : Property() {} /// \brief Constructs a new \b mvIMPACT::acquire::PropertyPtr object. explicit PropertyPtr( /// [in] A valid handle to a pointer property @@ -5015,7 +5028,6 @@ public: /** * This function queries a set of values from a property and stores these values * into \a sequence. - * \return Nothing. */ void read( /// [out] A reference to a container to store the data read from the property into. @@ -5077,7 +5089,7 @@ class PropertyS : public Property { public: /// \brief Constructs a new unbound \b mvIMPACT::acquire::PropertyS object. - explicit PropertyS() {} + explicit PropertyS() : Property() {} /// \brief Constructs a new \b mvIMPACT::acquire::PropertyS object. explicit PropertyS( /// [in] A valid handle to the string property @@ -5157,7 +5169,6 @@ public: /** * This function queries a set of values from a property and stores these values * into \a sequence. - * \return Nothing. */ void read( /// [out] A reference to a container to store the data read from the property into. @@ -5196,8 +5207,8 @@ public: std::string readBinary( /// [in] The index of the value to get(if this property holds more than one value). int index = 0, - /// [in] If set to \a true this allows applications compiled with mvIMPACT Acquire 2.32.0 or greater using this function - /// to run on systems with mvIMPACT Acquire smaller than 2.32.0. The legacy version of this function runs slower! + /// [in] If set to \a true this allows applications compiled with Impact Acquire 2.32.0 or greater using this function + /// to run on systems with Impact Acquire smaller than 2.32.0. The legacy version of this function runs slower! bool boLegacyMode = false ) const { unsigned int bufSize = boLegacyMode ? binaryDataBufferSize( index ) : binaryDataBufferMaxSize(); @@ -5314,12 +5325,13 @@ public: * * Performance considerations: * - * mvIMPACT Acquire 2.15.0 and newer: + * Impact Acquire 2.15.0 and newer: * * - Base64 encoding/decoding only is performed when read string data previously written as binary data and vice versa. * - encoding/decoding only is performed if the 2 internal caches are out of sync. so only on the first read access using the other format. * - this version is more efficient compared to previous implementations. * + *
* \dot * digraph BinaryDataHandling2_15 { * abb [label="Application Binary Buffer"]; @@ -5336,11 +5348,13 @@ public: * iss -> ibs [label="Base64(decode)"]; * } * \enddot + *
* - * mvIMPACT Acquire versions smaller than 2.15.0 + * Impact Acquire versions smaller than 2.15.0 * * - Base64 encoding/decoding always is performed when reading/writing data in binary format. * + *
* \dot * digraph BinaryDataHandling { * abb [label="Application Binary Buffer"]; @@ -5356,6 +5370,7 @@ public: * is -> asb [label="read:\nmemcpy"]; * } * \enddot + *
* * \note * When a property stores binary data that came from a GenICam chunk buffer additional copy operations from the GenApi runtime will take place. This can be @@ -5365,7 +5380,9 @@ public: * \b mvIMPACT::acquire::PropertyS::binaryDataBufferSize, \n * \b mvIMPACT::acquire::PropertyS::binaryDataBufferMaxSize * + * \if DOXYGEN_CPP_DOCUMENTATION * \return A const 'self' reference. + * \endif */ const PropertyS& writeBinary( /// [in] A const reference to the string holding the binary data that shall @@ -5577,9 +5594,7 @@ class UserDataEntry { friend class UserData; HLIST m_hList; - //----------------------------------------------------------------------------- explicit UserDataEntry( HLIST hList ) : m_hList( hList ), name(), data(), access(), password() - //----------------------------------------------------------------------------- { if( hList != INVALID_ID ) { @@ -5656,7 +5671,7 @@ public: * \b mvIMPACT::acquire::UserData::createEntry or deleting an entry with the function * \b mvIMPACT::acquire::UserData::deleteEntry will \b NOT automatically result in * the complete data to be updated in the device specific memory. As writing to the device memory takes - * a long (in terms of ms) time depending on the device architecture the modifications will only become. + * a long (in terms of ms) time depending on the device architecture the modifications will only become * permanent when calling \b mvIMPACT::acquire::UserData::writeToHardware. * * If data at the end of the list of entries doesn't fit in the memory it will be discarded and therefore @@ -5698,10 +5713,8 @@ class UserData bool m_boAvailable; HDEV m_hDev; ComponentLocator m_userDataEntryLocator; - //----------------------------------------------------------------------------- explicit UserData( HDEV hDev ) : m_boAvailable( false ), m_hDev( hDev ), m_userDataEntryLocator( hDev ), reconnectBehaviour(), memoryAvailable_bytes(), memoryConsumed_bytes() - //----------------------------------------------------------------------------- { init(); } @@ -5720,7 +5733,7 @@ class UserData void init( void ) { // check if user data is supported - HOBJ hUserData = m_userDataEntryLocator.findComponent( "UserData" ); + const HOBJ hUserData = m_userDataEntryLocator.findComponent( "UserData" ); if( hUserData != INVALID_ID ) { Component userData( hUserData ); @@ -5752,7 +5765,7 @@ public: UserDataEntry createEntry( void ) { HLIST hList; - TDMR_ERROR result = DMR_CreateUserDataEntry( m_hDev, &hList ); + const TDMR_ERROR result = DMR_CreateUserDataEntry( m_hDev, &hList ); if( result != DMR_NO_ERROR ) { ExceptionFactory::raiseException( MVIA_FUNCTION, __LINE__, result ); @@ -5775,7 +5788,7 @@ public: /// [in] A reference to the entry to delete UserDataEntry& userDataEntry ) { - TDMR_ERROR result = DMR_DeleteUserDataEntry( m_hDev, userDataEntry.m_hList ); + const TDMR_ERROR result = DMR_DeleteUserDataEntry( m_hDev, userDataEntry.m_hList ); userDataEntry.m_hList = INVALID_ID; if( result != DMR_NO_ERROR ) { @@ -5910,10 +5923,10 @@ public: * A valid pointer to a \b mvIMPACT::acquire::Device object is needed to construct most of the * other objects available in this interface. * - * Almost every object requiering a valid pointer to a \b mvIMPACT::acquire::Device object will + * Almost every object requiring a valid pointer to a \b mvIMPACT::acquire::Device object will * need to device in an initialized state as the properties provided e.g. by the * class \b mvIMPACT::acquire::CameraSettingsBase will be constructed when the device is initialized. - * To initialize a device this class provides the function \b Device::open. + * To initialize a device this class provides the function \b mvIMPACT::acquire::Device::open. * However every object which needs an initialized device to be constructed * successfully will try to open the device when it hasn't been opened before, so * the user does not need to call this function explicitly. @@ -5971,7 +5984,17 @@ class Device ComponentLocator locator( hDev ); locator.bindComponent( deviceClass, "DeviceClass" ); locator.bindComponent( family, "Family" ); + locator.bindComponent( deviceFamilyName, "DeviceFamilyName" ); + if( !deviceFamilyName.isValid() ) + { + locator.bindComponent( deviceFamilyName, "Family" ); + } locator.bindComponent( product, "Product" ); + locator.bindComponent( deviceModelName, "DeviceModelName" ); + if( !deviceModelName.isValid() ) + { + locator.bindComponent( deviceFamilyName, "Product" ); + } locator.bindComponent( capabilities, "Capabilities" ); locator.bindComponent( serial, "Serial" ); locator.bindComponent( state, "State" ); @@ -5994,6 +6017,8 @@ class Device locator.bindComponent( grantedAccess, "GrantedAccess" ); locator.bindComponent( autoNegotiatePacketSize, "AutoNegotiatePacketSize" ); locator.bindComponent( autoNegotiatePacketSizeMode, "AutoNegotiatePacketSizeMode" ); + locator.bindComponent( licenseValid, "LicenseValid" ); + locator.bindComponent( licenseDetails, "LicenseDetails" ); } //----------------------------------------------------------------------------- HDRV hDrvInternal( void ) const @@ -6004,10 +6029,11 @@ class Device } //----------------------------------------------------------------------------- explicit Device( HDEV hDev ) : m_pRefData( new ReferenceCountedData( hDev ) ), m_userData( hDev ), - deviceClass(), family(), product(), capabilities(), serial(), state(), deviceID(), deviceVersion(), + deviceClass(), family(), deviceFamilyName(), product(), deviceModelName(), capabilities(), serial(), state(), deviceID(), deviceVersion(), firmwareVersion(), loadSettings(), autoLoadSettingOrder(), interfaceLayout(), customDataDirectory(), defaultRequestCount(), resultQueueCount(), userControlledImageProcessingEnable(), allowUnrecommendedFeatures(), - acquisitionStartStopBehaviour(), HWUpdateResult(), manufacturer(), manufacturerSpecificInformation(), desiredAccess(), grantedAccess(), autoNegotiatePacketSize(), autoNegotiatePacketSizeMode() + acquisitionStartStopBehaviour(), HWUpdateResult(), manufacturer(), manufacturerSpecificInformation(), desiredAccess(), grantedAccess(), + autoNegotiatePacketSize(), autoNegotiatePacketSizeMode(), licenseValid(), licenseDetails() //----------------------------------------------------------------------------- { bindPublicProperties( hDev ); @@ -6022,7 +6048,8 @@ public: * objects of this class under all platforms and languages. */ explicit Device( const Device& src ) : m_pRefData( src.m_pRefData ), m_userData( src.m_pRefData->m_hDev ), - deviceClass( src.deviceClass ), family( src.family ), product( src.product ), + deviceClass( src.deviceClass ), family( src.family ), deviceFamilyName( src.deviceFamilyName ), + product( src.product ), deviceModelName( src.deviceModelName ), capabilities( src.capabilities ), serial( src.serial ), state( src.state ), deviceID( src.deviceID ), deviceVersion( src.deviceVersion ), firmwareVersion( src.firmwareVersion ), loadSettings( src.loadSettings ), autoLoadSettingOrder( src.autoLoadSettingOrder ), interfaceLayout( src.interfaceLayout ), @@ -6030,7 +6057,8 @@ public: userControlledImageProcessingEnable( src.userControlledImageProcessingEnable ), allowUnrecommendedFeatures( src.allowUnrecommendedFeatures ), acquisitionStartStopBehaviour( src.acquisitionStartStopBehaviour ), HWUpdateResult( src.HWUpdateResult ), manufacturer( src.manufacturer ), manufacturerSpecificInformation( src.manufacturerSpecificInformation ), - desiredAccess( src.desiredAccess ), grantedAccess( src.grantedAccess ), autoNegotiatePacketSize( src.autoNegotiatePacketSize ), autoNegotiatePacketSizeMode( src.autoNegotiatePacketSizeMode ) + desiredAccess( src.desiredAccess ), grantedAccess( src.grantedAccess ), autoNegotiatePacketSize( src.autoNegotiatePacketSize ), + autoNegotiatePacketSizeMode( src.autoNegotiatePacketSizeMode ), licenseValid( src.licenseValid ), licenseDetails( src.licenseDetails ) { ++( m_pRefData->m_refCnt ); } @@ -6075,10 +6103,10 @@ public: */ void close( void ) { - HDRV hDrv = hDrvInternal(); - if( hDrv != INVALID_ID ) + HDRV h = hDrvInternal(); + if( h != INVALID_ID ) { - DMR_CloseDevice( hDrv, m_pRefData->m_hDev ); + DMR_CloseDevice( h, m_pRefData->m_hDev ); m_pRefData->m_hDrv = INVALID_ID; } } @@ -6091,11 +6119,27 @@ public: * - false otherwise. */ bool hasCapability( - /// [in] The capability who's presence shall be checked. + /// [in] The capability whose presence shall be checked. TDeviceCapability capability ) const { return ( ( capabilities.isValid() ) ? ( ( capabilities.read() & capability ) == capability ) : false ); } + /// \brief Checks whether this device has a valid usage license. + /** + * Valid values for this property are defined by the enumeration \b mvIMPACT::acquire::TBoolean. + * + * \note As the name indicates, this property returns if this device has a valid license. Not all third-party vendors + * are allowed to run with this SDK without limitations, so this function offers a way to check in advance if this is one of them. + * + * \since 2.46.0 + * \return + * - true if the device has a valid license + * - false otherwise. + */ + bool hasValidLicense( void ) const + { + return ( ( licenseValid.isValid() ) ? ( licenseValid.read() == bTrue ) : true ); + } /// \brief A unique identifier for this device. /** * \note @@ -6202,7 +6246,7 @@ public: *
Device_Setting_Start_Procedure.png
*
Device setting start procedure
* - * Please have a look here for more information about automatic loading of + * Please have a look here for more information about automatic loading of * settings when a device is opened. */ void open( void ) @@ -6216,7 +6260,7 @@ public: /// \brief Assigns a new ID to this device. /** * To allow any application to distinguish between different devices of the same - * type the user can assign an unique ID to each device using this function. This ID + * type the user can assign a unique ID to each device using this function. This ID * currently is limited to values between 0 and 250 and is stored in the devices * internal memory. This ID is \b NOT volatile. It will remain stored even if * the device is unplugged. @@ -6250,7 +6294,7 @@ public: * into the driver library into the devices non-volatile internal memory. * * \note - * - This feature currently is only available for \b mvBlueFOX devices. To update the firmware of other devices please refer to the tool \c mvDeviceConfigure(this tool also offers a command line interface) + * - This feature currently is only available for \b mvBlueFOX devices. To update the firmware of other devices please refer to the tool \c DeviceConfigure(this tool also offers a command line interface) * - Be sure you know what you are doing \b before calling this function. Under normal circumstances * it won't be necessary to update a devices firmware. * - The download will take some time (depending on the device up to 30 seconds). During this time @@ -6307,9 +6351,27 @@ public: */ PropertyIDeviceClass deviceClass; /// \brief A string property \b (read-only) containing the family name of this device. + /** + * \note This is a legacy property only provided for backward compatibility. New applications + * should use \b mvIMPACT::acquire::Device::deviceFamilyName instead! + */ PropertyS family; + /// \brief A string property \b (read-only) containing the family name of this device. + /** + * \since 3.0.0 + */ + PropertyS deviceFamilyName; /// \brief A string property \b (read-only) containing the product name of this device. + /** + * \note This is a legacy property only provided for backward compatibility. New applications + * should use \b mvIMPACT::acquire::Device::deviceModelName instead! + */ PropertyS product; + /// \brief A string property \b (read-only) containing the model name of this device. + /** + * \since 3.0.0 + */ + PropertyS deviceModelName; /// \brief An enumerated integer property \b (read-only) defining special device capabilities. /** * This property stores certain device capabilities that can be read without opening the device. @@ -6424,14 +6486,8 @@ public: * \endcode * * If this property is left empty - * \code - * %ALL USERS%/Documents/MATRIX VISION/mvIMPACT acquire - * \endcode - * will be used by default on Windows™ platforms and - * \code - * /etc/matrix-vision/mvimpact-acquire - * \endcode - * on Linux platforms. + * - \product_default_data_directory_windows will be used by default on Windows™ platforms and + * - \product_default_data_directory_linux on Unix based platforms. */ PropertyS customDataDirectory; /// \brief An integer property that defines the number of \b mvIMPACT::acquire::Request objects to be created when the device is opened. @@ -6522,7 +6578,6 @@ public: * \b mvIMPACT::acquire::Request::hasProcessingBeenSkipped * * \since 2.14.0 - * */ PropertyIBoolean userControlledImageProcessingEnable; /// \brief An enumerated integer property which can be used to unlock certain features, that are available but not recommended by the device manufacturer. @@ -6614,7 +6669,7 @@ public: * firmware update is needed to use it when accessed via the \c mvGenTLProducer-lib. When using a 3rd party GenTL producer to access the GigE Vision device this * feature will not be available. * - * \note This property might not supported by every device. Therefore always call the function + * \note This property might not be supported by every device. Therefore always call the function * \b mvIMPACT::acquire::Component::isValid to check if this property is available or not. */ PropertyIBoolean autoNegotiatePacketSize; @@ -6628,10 +6683,35 @@ public: * \note Once the device is in use (has been initialized) this property will become \b (read-only). When using a 3rd party GenTL producer to access the GigE Vision device this * feature will not be available. * - * \note This property might not supported by every device. Therefore always call the function + * \note This property might not be supported by every device. Therefore always call the function * \b mvIMPACT::acquire::Component::isValid to check if this property is available or not. */ PropertyIDeviceAutoNegotiatePacketSizeMode autoNegotiatePacketSizeMode; + /// \brief A boolean property \b (read-only) that indicates if a device may be used with this SDK. + /** + * All Balluff imaging and image capture devices may be used with this SDK without limitations. Third party devices might work as well but + * without an appropriate license that can be obtained from Balluff certain restrictions may apply. + * + * \note This property will only be supported by some drivers (those allowing the usage of third party devices). Therefore always call the function + * \b mvIMPACT::acquire::Component::isValid to check if this property is available or not. + * + * \sa \b mvIMPACT::acquire::Device::licenseDetails + * + * \since 2.46.0 + */ + PropertyIBoolean licenseValid; + /// \brief A string property \b (read-only) that indicates why a device may be used with this SDK. + /** + * This property holds information on why a device may be used with Impact Acquire. + * + * \note This property will only be supported by some drivers (those allowing the usage of third party devices). Therefore always call the function + * \b mvIMPACT::acquire::Component::isValid to check if this property is available or not. + * + * \sa \b mvIMPACT::acquire::Device::licenseValid + * + * \since 2.46.0 + */ + PropertyS licenseDetails; // *INDENT-OFF* PYTHON_OR_JAVA_ONLY( %mutable; ) // *INDENT-ON* @@ -6689,7 +6769,7 @@ public: * \b NEVER declare a global instance of this class within a dynamic library(*.dll, *.so, *.ocx, ...), as creating * this instance will result in other shared libraries to be loaded dynamically by the framework. If you do, applications * using your library might lock up because global objects might be constructed from (Windows) the \c DllMain context - * and loading other libraries from within \c DllMain is discouraged (see \c DllMain \c Best \c Practices in MSDN for + * and loading other libraries from within \c DllMain is discouraged (see DllMain Best Practices in MSDN for * example). Instead either attach your instance of the device manager to a singleton, declare a global pointer that gets * initialised/destroyed by custom library init/close functions or use any other approach that suits your needs. * @@ -6989,7 +7069,7 @@ class DeviceManager m_lastChangedCounter = changedCount; unsigned int curDevCnt = 0; - size_t vSize = m_devVector.size(); + DevVector::size_type vSize = m_devVector.size(); DMR_GetDeviceCount( &curDevCnt ); if( curDevCnt <= static_cast( vSize ) ) { @@ -6997,7 +7077,7 @@ class DeviceManager } HDEV hDev = INVALID_ID; - for( size_t i = vSize; i < curDevCnt; i++ ) + for( DevVector::size_type i = vSize; i < curDevCnt; i++ ) { DMR_GetDevice( &hDev, dmdsmSerial, "*", static_cast( i ), '*' ); if( hDev != INVALID_ID ) @@ -7096,7 +7176,7 @@ public: * index in the device managers internal list. * \if DOXYGEN_CPP_DOCUMENTATION * If the index is either equal or higher than the number of devices detected \n - * a STL out_of_range exception is thrown. + * an STL out_of_range exception is thrown. * \endif * * \sa @@ -7167,8 +7247,10 @@ public: * of devices can only grow, but never gets shorter again until either the process terminates or the * last instance of this class went out of scope. If a device has been unplugged, its \b mvIMPACT::acquire::Device::state * property will change. If the application is interested in getting an instant notification when a - * device has been disconnected a callback can be registered on this property. How to do this is explained - * here: \ref Callback.cpp + * device has been disconnected a callback can be registered on this property. + * \if DOXYGEN_CPP_DOCUMENTATION + * How to do this is explained here: \ref Callback.cpp + * \endif */ void updateDeviceList( void ) const { @@ -7184,14 +7266,14 @@ public: * index in the device managers internal list. * \if DOXYGEN_CPP_DOCUMENTATION * If the index is either equal or higher than the number of devices detected - * a STL out_of_range exception will be thrown. + * an STL out_of_range exception will be thrown. * \endif * * \sa - * \b DeviceManager::deviceCount, \n - * \b DeviceManager::getDeviceBySerial, \n - * \b DeviceManager::getDeviceByFamily, \n - * \b DeviceManager::getDeviceByProduct + * \b mvIMPACT::acquire::DeviceManager::deviceCount, \n + * \b mvIMPACT::acquire::DeviceManager::getDeviceBySerial, \n + * \b mvIMPACT::acquire::DeviceManager::getDeviceByFamily, \n + * \b mvIMPACT::acquire::DeviceManager::getDeviceByProduct * \return * - A pointer to the device if \a index specifies a valid value. \n * - an exception will be raised otherwise. @@ -7251,9 +7333,9 @@ public: * \endif * * \sa - * \b DeviceManager::getDeviceByFamily, \n - * \b DeviceManager::getDeviceByProduct, \n - * \b DeviceManager::getDeviceByProductAndID + * \b mvIMPACT::acquire::DeviceManager::getDeviceByFamily, \n + * \b mvIMPACT::acquire::DeviceManager::getDeviceByProduct, \n + * \b mvIMPACT::acquire::DeviceManager::getDeviceByProductAndID * \return * - A pointer to the device if found. \n * - an invalid pointer or reference otherwise. @@ -7390,9 +7472,9 @@ public: * \endif * * \sa - * \b DeviceManager::getDeviceBySerial, \n - * \b DeviceManager::getDeviceByFamily, \n - * \b DeviceManager::getDeviceByProductAndID + * \b mvIMPACT::acquire::DeviceManager::getDeviceBySerial, \n + * \b mvIMPACT::acquire::DeviceManager::getDeviceByFamily, \n + * \b mvIMPACT::acquire::DeviceManager::getDeviceByProductAndID * \return * - A pointer to the device if found. \n * - an invalid pointer or reference otherwise. @@ -7461,11 +7543,11 @@ public: * \endif * * \sa - * \b Device::deviceID, \n - * \b DeviceManager::getDeviceByFamily, \n - * \b DeviceManager::getDeviceByProduct, \n - * \b DeviceManager::getDeviceBySerial, \n - * \b Device::setID + * \b mvIMPACT::acquire::Device::deviceID, \n + * \b mvIMPACT::acquire::DeviceManager::getDeviceByFamily, \n + * \b mvIMPACT::acquire::DeviceManager::getDeviceByProduct, \n + * \b mvIMPACT::acquire::DeviceManager::getDeviceBySerial, \n + * \b mvIMPACT::acquire::Device::setID * \return * - A pointer to the device if found. \n * - an invalid pointer or reference otherwise. @@ -7537,11 +7619,11 @@ public: * \endif * * \sa - * \b Device::deviceID, \n - * \b DeviceManager::getDeviceByFamily, \n - * \b DeviceManager::getDeviceByProduct, \n - * \b DeviceManager::getDeviceBySerial, \n - * \b Device::setID + * \b mvIMPACT::acquire::Device::deviceID, \n + * \b mvIMPACT::acquire::DeviceManager::getDeviceByFamily, \n + * \b mvIMPACT::acquire::DeviceManager::getDeviceByProduct, \n + * \b mvIMPACT::acquire::DeviceManager::getDeviceBySerial, \n + * \b mvIMPACT::acquire::Device::setID * \return * - A pointer to the device if found. \n * - an invalid pointer or reference otherwise. @@ -7621,36 +7703,6 @@ enum TDeviceListType * \note This feature currently is only available for frame grabber devices. */ dltDeviceSpecificData = dmltDeviceSpecificData, -#if !defined(WRAP_ANY) && !defined(BUILD_FOR_JAVA) // don't wrap deprecated stuff - /// \brief Specifies the driver interface list providing access to the device specific event type settings lists(deprecated). - /** - * \note Every device will support a different set of events that can be waited for by the user. - * - * This list will contain a sublist for each event type recognized for this device. Within this sublist - * all properties that can be describe the current mode an event is operated in user can be found. - * - * \deprecated - * This value has been declared deprecated and will be removed in future versions of this interface. - * A more flexible way of getting informed about changes in driver features - * has been added to the interface and should be used instead. An example for this new method - * is \ref Callback.cpp. - */ - dltEventSubSystemSettings = dmltEventSubSystemSettings, - /// \brief Specifies the driver interface list providing access to the device specific event type results lists(deprecated). - /** - * \note Every device will support a different set of events that can be waited for by the user. - * - * This list will contain a sublist for each event type recognized for this device. Within this sublist - * all result properties that can be queried by the user can be found. - * - * \deprecated - * This value has been declared deprecated and will be removed in future versions of this interface. - * A more flexible way of getting informed about changes in driver features - * has been added to the interface and should be used instead. An example for this new method - * is \ref Callback.cpp. - */ - dltEventSubSystemResults = dmltEventSubSystemResults, -#endif // #if !defined(WRAP_ANY) && !defined(BUILD_FOR_JAVA) // don't wrap deprecated stuff /// \brief Specifies the driver interface list providing access to the devices memory manager list. /** * \note This feature currently is only available for frame grabber devices. @@ -7852,8 +7904,8 @@ public: } HLIST hList; - TDMR_ERROR result; - if( ( result = DMR_FindList( pDev->hDrv(), ( sublistName.length() == 0 ) ? 0 : sublistName.c_str(), static_cast( deviceListType ), 0, &hList ) ) != DMR_NO_ERROR ) + const TDMR_ERROR result = DMR_FindList( pDev->hDrv(), ( sublistName.length() == 0 ) ? 0 : sublistName.c_str(), static_cast( deviceListType ), 0, &hList ); + if( result != DMR_NO_ERROR ) { ExceptionFactory::raiseException( MVIA_FUNCTION, __LINE__, result ); } @@ -8173,7 +8225,7 @@ class BufferPart : public ComponentCollection Component m_firstSibling; explicit BufferPart( HOBJ hObj ): ComponentCollection( hObj ), m_imageBufferDesc( 1 ), m_firstSibling(), address(), dataSize(), dataType(), pixelFormat(), width(), height(), offsetX(), offsetY(), paddingX(), bytesPerPixel(), bayerMosaicParity(), - channelCount(), channelDesc(), pixelPitch(), linePitch(), channelBitDepth(), channelOffset(), sourceID() + channelCount(), channelDesc(), pixelPitch(), linePitch(), channelBitDepth(), channelOffset(), sourceID(), regionID(), groupID() { bindPublicProperties( hObj ); } @@ -8202,6 +8254,8 @@ class BufferPart : public ComponentCollection locator.bindComponent( channelBitDepth, "ChannelBitDepth" ); locator.bindComponent( channelOffset, "ChannelOffset" ); locator.bindComponent( sourceID, "SourceID" ); + locator.bindComponent( regionID, "RegionID" ); + locator.bindComponent( groupID, "GroupID" ); } public: /// \brief Returns a const reference to the image buffer descriptor of this buffer part. @@ -8209,7 +8263,7 @@ public: * This function returns a const reference to the \b mvIMPACT::acquire::ImageBufferDesc associated * with this \b mvIMPACT::acquire::BufferPart. * - * \warning + * \attention * Please do \b NEVER work with old references to this structure. So do \b NOT store this reference in * some variable to use it for the evaluation of the next \b mvIMPACT::acquire::BufferPart object as well, * as this will not work. Whenever \b mvIMPACT::acquire::BufferPart::getImageBufferDesc is called the function @@ -8351,6 +8405,19 @@ public: * of the two different sources. In this case the source ID helps to match the 3D and Confidence parts belonging together. */ PropertyI64 sourceID; + /// \brief Identifier allowing to group data parts belonging to the same region (usually corresponding with the RegionSelector/ChunkRegionID features from SFNC). + /** + * Parts marked with the same region_id can be pixel mapped together. Parts carrying data from different ROI's of the same source would typically be marked with the + * same source_id but with different region_ids. + * + * \since 2.50.0 + */ + PropertyI64 regionID; + /// \brief Identifier allowing to group data parts having the same purpose (usually corresponding with the ComponentSelector feature from SFNC). + /** + * \since 2.50.0 + */ + PropertyI64 groupID; // *INDENT-OFF* PYTHON_OR_JAVA_ONLY( %mutable; ) // *INDENT-ON* @@ -8404,9 +8471,18 @@ protected: std::vector m_chunkGains; std::map m_chunkGainString2IndexMap; unsigned int m_refCnt; +#ifdef COMPILE_PYTHON + Py_buffer m_pythonUserBuffer; +#endif // #ifdef COMPILE_PYTHON explicit ReferenceCountedData( Device* pDev, int requestNr ) : m_requestName(), m_requestNr( requestNr ), m_imageBufferDesc( 1 ), m_pDev( pDev ), m_locator(), m_bufferPartIterator(), m_infoIterator(), m_info_imageProcessingResultsIterator(), m_bufferParts(), m_chunkCounterValues(), m_chunkTimerValues(), m_chunkGains(), m_chunkGainString2IndexMap(), m_refCnt( 1 ) +#ifdef COMPILE_PYTHON + , m_pythonUserBuffer() +#endif // #ifdef COMPILE_PYTHON { +#ifdef COMPILE_PYTHON + m_pythonUserBuffer.buf = NULL; +#endif // #ifdef COMPILE_PYTHON if( m_requestNr >= 0 ) { std::ostringstream oss; @@ -8447,6 +8523,9 @@ protected: { delete m_chunkGains[k]; } +#ifdef COMPILE_PYTHON + releasePythonBufferIfNeeded(); +#endif // #ifdef COMPILE_PYTHON } // make sure there are NO assignments or copy constructions by accident! ReferenceCountedData( const ReferenceCountedData& src ); @@ -8502,6 +8581,16 @@ protected: collectChunkFeatures( it ); } } +#ifdef COMPILE_PYTHON + void releasePythonBufferIfNeeded( void ) + { + if( m_pythonUserBuffer.buf != NULL ) + { + PyBuffer_Release( &m_pythonUserBuffer ); + m_pythonUserBuffer.buf = NULL; + } + } +#endif // #ifdef COMPILE_PYTHON }* m_pRefData; #endif // #if !defined(DOXYGEN_SHOULD_SKIP_THIS) && !defined(WRAP_ANY) private: @@ -8722,7 +8811,7 @@ public: * This function returns a reference to a \b mvIMPACT::acquire::BufferPart at index \c index associated * with this \b mvIMPACT::acquire::Request. * - * \warning + * \attention * Please do \b NEVER work with old references to this class. So do \b NOT store this reference in * some variable to use it for the evaluation of the next \b mvIMPACT::acquire::Request object as well, * as this might not work because the buffer layout might have changed. Whenever \b mvIMPACT::acquire::Request::getBufferPart @@ -8745,6 +8834,27 @@ public: updateBufferParts(); return *( m_pRefData->m_bufferParts.at( index ) ); } +#ifdef COMPILE_PYTHON + /// \brief Returns the Python user memory buffer associated with this request. + /** + * \attention + * This buffer is managed automatically. Manual modification \b will lead to undefined behavior, + * including Python interpreter crashes. + */ + Py_buffer* getPythonUserBuffer( void ) + { + return &m_pRefData->m_pythonUserBuffer; + } + /// \brief Releases the Python user memory buffer associated with this request. + /** + * \attention + * Releasing the buffer while the request is capturing to user memory \b will lead to undefined behavior. + */ + void releasePythonUserBufferIfNeeded( void ) + { + m_pRefData->releasePythonBufferIfNeeded(); + } +#endif // #ifdef COMPILE_PYTHON /// \brief Returns the name associated with this request. /** * \since 2.32.0 @@ -8763,7 +8873,7 @@ public: * This function returns a const reference to the \b mvIMPACT::acquire::ImageBufferDesc associated * with this \b mvIMPACT::acquire::Request. * - * \warning + * \attention * Please do \b NEVER work with old references to this structure. So do \b NOT store this reference in * some variable to use it for the evaluation of the next \b mvIMPACT::acquire::Request object as well, * as this will not work. Whenever \b mvIMPACT::acquire::Request::getImageBufferDesc is called the function @@ -8781,7 +8891,7 @@ public: return m_pRefData->m_imageBufferDesc; } #if defined(MVIMPACT_H_) || defined(DOXYGEN_CPP_DOCUMENTATION) - /// \brief Returns a mvIMPACT image buffer representation of the image associated with this request. + /// \brief Returns an mvIMPACT image buffer representation of the image associated with this request. /** * \attention * This function is slow, as it performs a copy of the @@ -8811,7 +8921,7 @@ public: } return mvIMPACT::Image::imageFactory( hBuf ); } - /// \brief Returns a mvIMPACT image buffer representation of the image associated with this request. + /// \brief Returns an mvIMPACT image buffer representation of the image associated with this request. /** * \note * This function might be fast depending on the \a flags parameter or might behave like @@ -8983,7 +9093,7 @@ public: /// \brief Returns a 64 bit integer property \b (read-only) defining the selected counter value at the time of the internal frame start event for this request. /** * \if DOXYGEN_CPP_DOCUMENTATION - * If \a index is invalid(too large) a STL out_of_range exception + * If \a index is invalid(too large) an STL out_of_range exception * will be thrown. * \endif * @@ -9017,7 +9127,7 @@ public: /// \brief Returns a floating point property \b (read-only) defining the selected timer value at the time of the internal frame start event for this request. /** * \if DOXYGEN_CPP_DOCUMENTATION - * If \a index is invalid(too large) a STL out_of_range exception + * If \a index is invalid(too large) an STL out_of_range exception * will be thrown. * \endif * @@ -9051,7 +9161,7 @@ public: /// \brief Returns a floating point property \b (read-only) defining the selected gain value at the time of the internal frame start event for this request. /** * \if DOXYGEN_CPP_DOCUMENTATION - * If \a index is invalid(too large) a STL out_of_range exception + * If \a index is invalid(too large) an STL out_of_range exception * will be thrown. * \endif * @@ -9340,9 +9450,11 @@ public: * \endcode * \endif * - * To find out more about capturing to user supplied buffers please refer to the example - * \ref CaptureToUserMemory.cpp and have a look at the - * documentation of the function \b mvIMPACT::acquire::Request::configure + * To find out more about capturing to user supplied buffers please + * \if DOXYGEN_CPP_DOCUMENTATION + * refer to the example \ref CaptureToUserMemory.cpp and + * \endif + * have a look at the documentation of the function \b mvIMPACT::acquire::Request::configure. * * \sa * \b mvIMPACT::acquire::Request::detachUserBuffer, \n @@ -9430,9 +9542,11 @@ public: * \endcode * \endif * - * To find out more about capturing to user supplied buffers please refer to the example - * \ref CaptureToUserMemory.cpp and have a look at the - * documentation of the function \b mvIMPACT::acquire::Request::configure + * To find out more about capturing to user supplied buffers please + * \if DOXYGEN_CPP_DOCUMENTATION + * refer to the example \ref CaptureToUserMemory.cpp and + * \endif + * have a look at the documentation of the function \b mvIMPACT::acquire::Request::configure. * * \sa * \b mvIMPACT::acquire::Request::attachUserBuffer, \n @@ -9454,6 +9568,9 @@ public: { imageMemoryMode.write( rimmAuto ); result = unlock(); +#ifdef COMPILE_PYTHON + m_pRefData->releasePythonBufferIfNeeded(); +#endif // #ifdef COMPILE_PYTHON } return result; } @@ -9528,6 +9645,18 @@ public: * This might differ slightly from the value selected by the user via * the corresponding exposure property depending on the precision * available for the device or the connected camera. + * + * \note When working with the mvIMPACT::acquire::dilGenICam this value will reflect the last value of the corresponding device + * property when it was written thus is a cached copy of the value that has been set by the application. For various operation modes + * this might \b NOT be the value actually used by the device for taking the image described by this request object. For example when + * AEC (exposureAuto) is active or the device is operated in a special sequencer mode the value of this property might be incorrect. When + * precise information about this value is needed it is recommended to work in chunk mode and use the exposure provided as chunk information instead. + * + * \sa + * \b mvIMPACT::acquire::Device::interfaceLayout, \n + * \b mvIMPACT::acquire::GenICam::ChunkDataControl, \n + * \b mvIMPACT::acquire::GenICam::AcquisitionControl::exposureAuto, \n + * \b mvIMPACT::acquire::Request::getChunkExposureTime */ PropertyI infoExposeTime_us; /// \brief An integer property \b (read-only) containing the time the transaction of this image has been delayed (in us) because either the bus was blocked or the CPU was busy. @@ -9540,6 +9669,20 @@ public: */ PropertyI infoTransferDelay_us; /// \brief A float property \b (read-only) containing the gain(in dB) this image has been taken with. + /** + * \note When working with the mvIMPACT::acquire::dilGenICam this value will reflect the last value of the corresponding device + * property when it was written thus is a cached copy of the value that has been set by the application. For various operation modes + * this might \b NOT be the value actually used by the device for taking the image described by this request object. For example when + * AGC (gainAuto) is active or the device is operated in a special sequencer mode the value of this property might be incorrect. When + * precise information about this value is needed it is recommended to work in chunk mode and use the gain provided as chunk information instead. + * + * \sa + * \b mvIMPACT::acquire::Device::interfaceLayout, \n + * \b mvIMPACT::acquire::GenICam::ChunkDataControl, \n + * \b mvIMPACT::acquire::GenICam::AnalogControl::gainAuto, \n + * \b mvIMPACT::acquire::Request::getChunkGainCount, \n + * \b mvIMPACT::acquire::Request::getChunkGain + */ PropertyF infoGain_dB; /// \brief A 64 bit integer property \b (read-only) containing a timestamp to define the exact time this image has been captured /// (usually either at exposure start or exposure end, depending on the device). @@ -9694,7 +9837,7 @@ public: PropertyI64 chunkHeight; /// \brief A 64 bit integer property \b (read-only) containing the pixel format of the image as returned in the chunk data attached to the image. /** - * This will \b NOT be a valid mvIMPACT acquire pixel format but e.g. a GigE Vision, USB3 Vision of PFNC compliant pixel format or something else. + * This will \b NOT be a valid Impact Acquire pixel format but e.g. a GigE Vision, USB3 Vision of PFNC compliant pixel format or something else. * \note * For additional information about the chunk data format please refer to \ref ImageAcquisition_chunk. */ @@ -9940,13 +10083,13 @@ public: /// \brief An integer property \b (read-only) containing the X-offset of the image in pixels. /** * \note - * This feature will be supported by devices using a mvIMPACT Acquire driver greater or equal version 1.10.92. + * This feature will be supported by devices using an Impact Acquire driver greater or equal version 1.10.92. */ PropertyI imageOffsetX; /// \brief An integer property \b (read-only) containing the Y-offset of the image in pixels. /** * \note - * This feature will be supported by devices using a mvIMPACT Acquire driver greater or equal version 1.10.92. + * This feature will be supported by devices using an Impact Acquire driver greater or equal version 1.10.92. */ PropertyI imageOffsetY; /// \brief An integer property \b (read-only) containing the width of the image in pixels. @@ -9954,7 +10097,7 @@ public: /// \brief An integer property \b (read-only) containing the total width of the image in pixels if this buffer is part of a larger image. /** * \note - * This feature will be supported by devices using a mvIMPACT Acquire driver greater or equal version 1.11.50. Not + * This feature will be supported by devices using an Impact Acquire driver greater or equal version 1.11.50. Not * every device driver will be capable of dealing with multiple buffers forming a single image. If a device driver can * not deliver parts of a larger image, then this property will always contain the same value as returned by * \b mvIMPACT::acquire::Request::imageWidth. @@ -9965,7 +10108,7 @@ public: /// \brief An integer property \b (read-only) containing the total height of the image in pixels if this buffer is part of a larger image. /** * \note - * This feature will be supported by devices using a mvIMPACT Acquire driver greater or equal version 1.11.50. Not + * This feature will be supported by devices using an Impact Acquire driver greater or equal version 1.11.50. Not * every device driver will be capable of dealing with multiple buffers forming a single image. If a device driver can * not deliver parts of a larger image, then this property will always contain the same value as returned by * \b mvIMPACT::acquire::Request::imageHeight. @@ -10000,13 +10143,14 @@ public: /// new image request controls can be created with the function /// \b mvIMPACT::acquire::FunctionInterface::createImageRequestControl const std::string& name = "Base" ) : ComponentCollection( pDev ), mode(), - imageCount(), setting(), resultQueue(), requestToUse() + imageCount(), setting(), requestQueue(), resultQueue(), requestToUse() { DeviceComponentLocator locator( pDev, dltRequestCtrl, name ); m_hRoot = locator.searchbase_id(); locator.bindComponent( mode, "Mode" ); locator.bindComponent( imageCount, "ImageCount" ); locator.bindComponent( setting, "Setting" ); + locator.bindComponent( requestQueue, "RequestQueue" ); locator.bindComponent( resultQueue, "ResultQueue" ); locator.bindComponent( requestToUse, "RequestToUse" ); } @@ -10075,6 +10219,17 @@ public: * to set this property to the desired value. */ PropertyI setting; + /// \brief An integer property defining to which request queue the image request will be sent. + /** + * This property defines the stream channel requests associated with this request control instance will be sent to. + * + * The maximum value for this feature corresponds to the number of independent stream channels offered by the device. Only devices operated in + * interface layout \b mvIMPACT::acquire::dilGenICam may offer more than one stream channel. Therefore the default + * value and the default maximum and minimum value will be 0 for most devices. + * + * \since 2.47.0 + */ + PropertyI requestQueue; /// \brief An integer property defining to which result queue the resulting image will be sent after the acquisition. PropertyI resultQueue; /// \brief An integer property defining which request object shall be used for the next image request. @@ -10315,7 +10470,7 @@ public: * # assuming we got back a request from the driver at this point: * pRequest = fi.getRequest(getRequestNrFromSomewhere()) * if pRequest.isOK: - * # The paranoid could do this additional check, but it is not neccessary: + * # The paranoid could do this additional check, but it is not necessary: * if type(pRequest) is MyRequest: * print(pMyRequest.myRequestResult.name() + ": " + pMyRequest.myRequestResult.readS()) * else: @@ -10556,7 +10711,7 @@ public: * following from this call. * * \sa - * \b Device::open + * \b mvIMPACT::acquire::Device::open */ explicit FunctionInterface( /// [in] A pointer to a \b mvIMPACT::acquire::Device object obtained from @@ -10833,7 +10988,7 @@ public: * \if DOXYGEN_CPP_DOCUMENTATION * If \a nr refers to an invalid \b mvIMPACT::acquire::Request \n * (e.g. when \a nr is higher than the actual number of \n - * available requests) a STL out_of_range exception will be thrown. + * available requests) an STL out_of_range exception will be thrown. * \endif * \return A pointer to a \b mvIMPACT::acquire::Request object. */ @@ -10947,7 +11102,7 @@ public: * } * \endcode * \elseif DOXYGEN_JAVA_DOCUMENTATION - * \warning There is currently no way to deal with alignment in Java when capturing into user supplied(thus managed) memory! Suggestions welcome! + * \attention There is currently no way to deal with alignment in Java when capturing into user supplied(thus managed) memory! Suggestions welcome! * * \code * import java.nio.ByteBuffer; @@ -11129,7 +11284,7 @@ public: * \note * When \b mvIMPACT::acquire::Device::acquisitionStartStopBehaviour is * set to \b mvIMPACT::acquire::assbUser several calls to \b mvIMPACT::acquire::FunctionInterface::imageRequestSingle - * will \b NOT start the data acquisition! After requests have been send down to the driver, + * will \b NOT start the data acquisition! After requests have been sent down to the driver, * \b mvIMPACT::acquire::FunctionInterface::acquisitionStart must be called. For performance reasons some device drivers * will \b NOT allow to request data into buffers which have not been known to the driver when \b mvIMPACT::acquire::FunctionInterface::acquisitionStart * was called, thus before starting the acquisition, \b mvIMPACT::acquire::FunctionInterface::imageRequestSingle @@ -11156,7 +11311,8 @@ public: /// to be used for this request. \b mvIMPACT::acquire::ImageRequestControl /// objects define (among other things), which setting will /// be used for this image acquisition (via the property - /// \b mvIMPACT::acquire::ImageRequestControl::setting). + /// \b mvIMPACT::acquire::ImageRequestControl::setting). If this pointer is 0 the default request control will be used + /// for this operation. ImageRequestControl* pImageRequestControl = 0, /// [out] If a valid pointer to an integer is passed here, this /// variable receives the number of the \b mvIMPACT::acquire::Request which @@ -11256,7 +11412,7 @@ public: * \b mvIMPACT::acquire::FunctionInterface::imageRequestUnlock, \n * \b mvIMPACT::acquire::FunctionInterface::imageRequestResultQueueElementCount, \n * \b mvIMPACT::acquire::FunctionInterface::getRequest - * \return If the return value is positive, the return value is the request number of the + * \return If the return value is greater than or equal to zero, the return value is the request number of the * image request in the interface's internal array of image requests. In this case the user * can call \b mvIMPACT::acquire::FunctionInterface::getRequest to get access to the * results. \n \n If the result is negative, the return value is an error code. @@ -11293,8 +11449,10 @@ public: * will probably be \a alignment and \a size, thus for most application calling the other overload * of this function will probably be enough. * + * \if DOXYGEN_CPP_DOCUMENTATION * To find out more about capturing to user memory please refer to the application * \ref CaptureToUserMemory.cpp + * \endif * * \sa mvIMPACT::acquire::Request::configure * @@ -11352,8 +11510,10 @@ public: * When an application wants to provide capture buffers, this function will be needed in order to * get information on how the capture buffers must be constructed. * + * \if DOXYGEN_CPP_DOCUMENTATION * To find out more about capturing to user memory please refer to the application * \ref CaptureToUserMemory.cpp + * \endif * * \sa * \b mvIMPACT::acquire::Request::configure @@ -11384,13 +11544,25 @@ public: const int result = getCurrentCaptureBufferLayout( imageRequestControl, &pRequest, &alignment ); if( m_pRefData->m_pCurrentCaptureBufferLayout ) { - size = m_pRefData->m_pCurrentCaptureBufferLayout->imageSize.read() + m_pRefData->m_pCurrentCaptureBufferLayout->imageFooterSize.read(); + const unsigned int bufferPartCount = m_pRefData->m_pCurrentCaptureBufferLayout->getBufferPartCount(); + if( bufferPartCount > 0 ) + { + for( unsigned int i = 0; i < bufferPartCount; i++ ) + { + size += static_cast( m_pRefData->m_pCurrentCaptureBufferLayout->getBufferPart( i ).dataSize.read() ); + } + } + else + { + size = m_pRefData->m_pCurrentCaptureBufferLayout->imageSize.read(); + } + size += m_pRefData->m_pCurrentCaptureBufferLayout->imageFooterSize.read(); } return result; } /// \brief Check if \a nr specifies a valid \b mvIMPACT::acquire::Request. /** - * \return \n + * \return * - true if \a nr specifies a valid request. * - false otherwise */ @@ -11437,24 +11609,24 @@ public: * specified. It's not allowed to combine \b mvIMPACT::acquire::sfFile and * \b mvIMPACT::acquire::sfNative for this operation. * - * \warning Since mvIMPACT Acquire 2.9.0 GenICam devices will be able to save their properties in a XML File, only if the properties have the \b streamable attribute set (for more information refer to the GenICam standard specification). Properties with no \b streamable attribute set, will be silently ignored when saving, which means they will \b not be saved in the XML file. For MATRIX VISION GenICam cameras, starting with firmware version 1.6.414 the \b streamable attribute is set for all the necessary properties. + * \attention Since Impact Acquire 2.9.0 GenICam devices will be able to save their properties in an XML File, only if the properties have the \b streamable attribute set (for more information refer to the GenICam standard specification). Properties with no \b streamable attribute set, will be silently ignored when saving, which means they will \b not be saved in the XML file. For Balluff GenICam devices, starting with firmware version 1.6.414 the \b streamable attribute is set for all the necessary properties. * *
* - * \warning Since mvIMPACT Acquire 2.9.0 and again in version 2.11.0 storing and loading of camera settings in a XML file for the \b mvIMPACT::acquire::dilGenICam - * interface layout has been updated. As a result XML files created with newer versions of mvIMPACT Acquire might \b not - * be readable on systems with older version of mvIMPACT Acquire installed. XML files created on systems - * with earlier versions of mvIMPACT Acquire will always be readable this or newer versions. See the following table for details. + * \attention Since Impact Acquire 2.9.0 and again in version 2.11.0 storing and loading of camera settings in an XML file for the \b mvIMPACT::acquire::dilGenICam + * interface layout has been updated. As a result XML files created with newer versions of Impact Acquire might \b not + * be readable on systems with older version of Impact Acquire installed. XML files created on systems + * with earlier versions of Impact Acquire will always be readable this or newer versions. See the following table for details. * - *
%mvIMPACT Acquire VersionLoading a XML settings file created with %mvIMPACT Acquire version < 2.9.0Loading a XML settings file created with %mvIMPACT Acquire version 2.9.0 - 2.10.1Loading a XML settings file created with %mvIMPACT Acquire version 2.11.0 or later + *
Impact Acquire VersionLoading an XML settings file created with Impact Acquire version < 2.9.0Loading an XML settings file created with Impact Acquire version 2.9.0 - 2.10.1Loading an XML settings file created with Impact Acquire version 2.11.0 or later *
< 2.9.0 YES NO NO *
2.9.0 - 2.10.1 YES YES NO *
>= 2.11.0 YES YES YES *
* - * \attention Since mvIMPACT Acquire 2.28.0 it is possible for devices operated in the \b ::dilGenICam interface layout to store settings including + * \attention Since Impact Acquire 2.28.0 it is possible for devices operated in the \b ::dilGenICam interface layout to store settings including * sequencer sets and user sets (see SFNC for details) data by specifying the \b ::sfProcessGenICamSequencerData and/or \b ::sfProcessGenICamUserSetData - * during the storage operation. Settings stored like this cannot be loaded by previous mvIMPACT Acquire versions. + * during the storage operation. Settings stored like this cannot be loaded by previous Impact Acquire versions. * * \note For devices operated in the \b mvIMPACT::acquire::dilGenICam interface layout further restriction apply: Settings created with a certain product type can only * be used with other devices belonging to the exact same type as defined by the property mvIMPACT::acquire::Device::product inside the device list (the one device specific property list that @@ -11539,7 +11711,7 @@ public: * can only succeed if a setting has been stored previously by a call to * \b mvIMPACT::acquire::FunctionInterface::saveSettingToDefault. * - * \warning There has been an incompatible change when loading settings in version 2.9.0 and 2.11.0 of mvIMPACT Acquire as well as in version 2.28.0. See mvIMPACT::acquire::FunctionInterface::loadSetting for details. + * \attention There has been an incompatible change when loading settings in version 2.9.0 and 2.11.0 of Impact Acquire as well as in version 2.28.0. See mvIMPACT::acquire::FunctionInterface::loadSetting for details. * * \return * - \b mvIMPACT::acquire::DMR_NO_ERROR if successful. @@ -11622,7 +11794,7 @@ public: * fi.deleteSettingFromStack() # remove the setting from the stack, but keep changes * \endif * - * The stack makes use of mvIMPACT Acquires ability to store capture settings in the memory of + * The stack makes use of Impact Acquires ability to store capture settings in the memory of * the current process. Once the last instance of this mvIMPACT::acquire::FunctionInterface * object is deleted all settings pushed on this stack will be deleted automatically. * @@ -11645,7 +11817,7 @@ public: } /// \brief Stores the current settings. /** - * This function can be used to store the current settings either in a XML-file or + * This function can be used to store the current settings either in an XML-file or * (under Windows©) into the Registry. A setting contains all the values set * for properties that control the overall way an image is acquired( e.g. the exposure time, etc.). * @@ -11655,7 +11827,7 @@ public: * specified. Both flags can be combined. In that case the same setting will be stored in a * file \b AND in a platform specific location if these location differ (platform dependent!). * - * \warning There has been an incompatible change when loading settings in version 2.9.0 and 2.11.0 of mvIMPACT Acquire as well as in version 2.28.0. See mvIMPACT::acquire::FunctionInterface::loadSetting for details. + * \attention There has been an incompatible change when loading settings in version 2.9.0 and 2.11.0 of Impact Acquire as well as in version 2.28.0. See mvIMPACT::acquire::FunctionInterface::loadSetting for details. * * \return * - \b mvIMPACT::acquire::DMR_NO_ERROR if successful. @@ -11677,7 +11849,7 @@ public: * Under Windows© this will be in the Registry. A setting contains all the values set * for properties that control the overall way an image is acquired( e.g. the exposure time, etc.). * - * \warning There has been an incompatible change when loading settings in version 2.9.0 and 2.11.0 of mvIMPACT Acquire as well as in version 2.28.0. See mvIMPACT::acquire::FunctionInterface::loadSetting for details. + * \attention There has been an incompatible change when loading settings in version 2.9.0 and 2.11.0 of Impact Acquire as well as in version 2.28.0. See mvIMPACT::acquire::FunctionInterface::loadSetting for details. * * \return * - \b mvIMPACT::acquire::DMR_NO_ERROR if successful. @@ -11707,7 +11879,7 @@ public: explicit Info( /// A pointer to a \b mvIMPACT::acquire::Device object obtained from /// a \b mvIMPACT::acquire::DeviceManager object. Device* pDev ) : ComponentCollection( pDev ), deviceDriverVersion(), driverDate(), - driverVersion(), state(), loadedSettings(), logFile(), captureBufferAlignment(), + driverVersion(), state(), loadedSettings(), logFile(), systemPhysicalProcessorCount(), systemLogicalProcessorCount(), captureBufferAlignment(), recommendedListsForUIs() { DeviceComponentLocator locator( pDev, dltInfo ); @@ -11718,6 +11890,8 @@ public: locator.bindComponent( state, "State" ); locator.bindComponent( loadedSettings, "LoadedSettings" ); locator.bindComponent( logFile, "LogFile" ); + locator.bindComponent( systemPhysicalProcessorCount, "SystemPhysicalProcessorCount" ); + locator.bindComponent( systemLogicalProcessorCount, "SystemLogicalProcessorCount" ); locator.bindComponent( captureBufferAlignment, "CaptureBufferAlignment" ); locator.bindComponent( recommendedListsForUIs, "RecommendedListsForUIs" ); } @@ -11757,6 +11931,16 @@ public: PropertyS loadedSettings; /// \brief A string property \b (read-only) containing the name and the full path of the current log-file for this device. PropertyS logFile; + /// \brief An integer property \b (read-only) containing the number of physical processors detected in the current system. + /** + * \since 2.44.0 + */ + PropertyI systemPhysicalProcessorCount; + /// \brief An integer property \b (read-only) containing the number of logical processors detected in the current system. + /** + * \since 2.44.0 + */ + PropertyI systemLogicalProcessorCount; /// \brief An integer property \b (read-only) containing the capture buffer alignment in bytes needed by this device driver. PropertyI captureBufferAlignment; /// \brief A string property \b (read-only) containing an array of full search paths to lists which are recommended to be displayed in a user interface that is created dynamically. @@ -11817,6 +12001,8 @@ public: PropertyS basedOn; /// \brief An integer property defining the maximum time to wait for an image in ms. /** + * \attention Since Impact Acquire 2.32.0 the default value for this property has been changed! See \ref KnownIssuesPage_ApplicationTerminationWaitingForRequests for details. + * * When this property is set to 0 the timeout never elapses. If the timeout this property * defines elapses the currently processed request will be returned to the user even if no data * has been captured so far. The result structure of the request object should be examined in that @@ -12512,8 +12698,8 @@ public: * \b mvIMPACT::acquire::LUTmGamma. * * \attention This property is mainly provided for compatibility reasons since the original implementation of - * the mvIMPACT Acquire framework and the implementation inside MATRIX VISION GmbH GenICam devices introduced later - * differ. The default behaviour of the mvIMPACT Acquire results in the reverse function of the gamma function + * the Impact Acquire framework and the implementation inside Balluff GmbH GenICam devices introduced later + * differ. The default behaviour of the Impact Acquire results in the reverse function of the gamma function * inside the device firmware thus the gamma value specified here results in the same response as if applying * (1/gamma value) to a device. So a gamma value of 2.2 with the inverter switched off this would result in the same * response as a gamma value of 0.45 with the inverter switched on. In order not to change the default behaviour of this filter @@ -13325,10 +13511,10 @@ public: * - the sensor is damaged (replace the device then) * - the sensor has more defective pixels then indicated by the value of this property but which are still valid according to the specification of the sensor manufacturer (adjust the value of this property accordingly then) * - * \attention When reducing this value at runtime excess pixels will be dropped from the current list of defective pixels if the new maximum list length is smaller then the amount of + * \attention When reducing this value at runtime excess pixels will be dropped from the current list of defective pixels if the new maximum list length is smaller than the amount of * defective pixels currently detected. * - * \attention Some devices might offer to store defective pixels inside the device in an mvIMPACT Acquire compatible format by calling \b mvIMPACT::acquire::ImageProcessing::defectivePixelWriteToDevice. + * \attention Some devices might offer to store defective pixels inside the device in an Impact Acquire compatible format by calling \b mvIMPACT::acquire::ImageProcessing::defectivePixelWriteToDevice. * However the device might not be able to store all these pixels due to a lack of storage space. Therefore always check the return value of the function! * * \note @@ -13842,7 +14028,7 @@ public: /// \brief Returns a reference to a set of user definable parameters to configure a certain channel of the GainOffsetKnee filter. /** * \if DOXYGEN_CPP_DOCUMENTATION - * If \a nr is invalid(too large) a STL out_of_range exception + * If \a nr is invalid(too large) an STL out_of_range exception * will be thrown. * \endif * @@ -13863,7 +14049,7 @@ public: /// \brief Returns a reference to a set of user definable parameters to configure mirror filter related features. /** * \if DOXYGEN_CPP_DOCUMENTATION - * If \a nr is invalid(too large) a STL out_of_range exception + * If \a nr is invalid(too large) an STL out_of_range exception * will be thrown. * \endif * @@ -13884,7 +14070,7 @@ public: /// \brief Returns a reference to a set of user definable parameters to configure LUT (Look Up Table) operations. /** * \if DOXYGEN_CPP_DOCUMENTATION - * If \a nr is invalid(too large) a STL out_of_range exception + * If \a nr is invalid(too large) an STL out_of_range exception * will be thrown. * \endif * @@ -13909,7 +14095,7 @@ public: * \b mvIMPACT::acquire::wbpUser2 and so on. * * \if DOXYGEN_CPP_DOCUMENTATION - * If \a nr is invalid(too large) a STL out_of_range exception + * If \a nr is invalid(too large) an STL out_of_range exception * will be thrown. * \endif * @@ -14401,10 +14587,10 @@ public: /// \brief An integer property defining the polling interval in ms the driver waits for each iteration before running through update loop again. /** * Some features define a so called \c polling \c time. This is a recommendation by the device/driver stating that this property - * might change it's value without user interaction act a certain rate (e.g. the device temperature could be one example for a + * might change its value without user interaction act a certain rate (e.g. the device temperature could be one example for a * feature with such a behaviour). When \b mvIMPACT::acquire::SystemSettings::featurePollingEnable is set to * \b mvIMPACT::acquire::bTrue a thread will check every \c featurePollingInterval_ms if features need to be updated. This will - * only cause communication with a device for each feature who's polling time has elapsed. + * only cause communication with a device for each feature whose polling time has elapsed. * * \note * This property will not be available for every device. Right now only devices operated through the \a GenTL driver package will support @@ -14459,7 +14645,7 @@ typedef SystemSettings MVIMPACT_DEPRECATED_CPP( SystemBase ); #ifndef IGNORE_MVDEVICE_SPECIFIC_INTERFACE_DOCUMENTATION -/// \defgroup DeviceSpecificInterface Device specific interface layout +/// \defgroup DeviceSpecificInterface Device Specific Interface Layout /// \brief Classes and functions that will be available if the device is used in \a device \a specific interface layout. /// /// This group contains classes and functions that will be available if the device is used @@ -14635,10 +14821,6 @@ typedef EnumPropertyI PropertyIClampMode; typedef EnumPropertyI PropertyIDeviceAdvancedOptions; /// \brief Defines a property for values defined by \b mvIMPACT::acquire::TDeviceDigitalOutputMode. typedef EnumPropertyI PropertyIDeviceDigitalOutputMode; -/// \brief Defines a property for values defined by \b mvIMPACT::acquire::TDeviceEventMode. -typedef EnumPropertyI PropertyIDeviceEventMode; -/// \brief Defines a property for values defined by \b mvIMPACT::acquire::TDeviceEventType. -typedef EnumPropertyI PropertyIDeviceEventType; #ifndef IGNORE_MVGRABBER_SPECIFIC_DOCUMENTATION /// \brief Defines a property for values defined by \b mvIMPACT::acquire::TDeviceImageTrigger. @@ -15678,7 +15860,7 @@ public: /// \brief Returns a pointer to a program instruction of the program. /** * \if DOXYGEN_CPP_DOCUMENTATION - * If \a nr is invalid(too large) a STL out_of_range exception + * If \a nr is invalid(too large) an STL out_of_range exception * will be thrown. * \endif * @@ -15744,534 +15926,57 @@ public: } }; -#if !defined(WRAP_ANY) && !defined(BUILD_FOR_JAVA) // don't wrap deprecated stuff //----------------------------------------------------------------------------- -/// \brief An interface class to model a internal driver event that the user can wait for(\b Device specific interface layout only)(\b deprecated). +/// \brief A class to configure the creation of digital signals passed to one or more of the digital outputs of a device(\b Device specific interface layout only). /** - * \deprecated - * This class has been declared \b deprecated and will be removed in future versions - * of this interface. A more flexible way of getting informed about changes in driver features - * has been added to the interface and should be used instead. An example for this new method can - * be found here: \ref Callback.cpp - * - * An event can be anything that occurs at a certain time within the driver or - * something that can be reported by the hardware. Typical examples might - * be the detection of an external trigger signal, a change at one of the - * digital inputs of a device or the start of a VD pulse send from a camera and - * detected by a capture device. - * - * Sometimes one or more of these events might be important for an application. - * E.g. the user might want to get a notification each time the state of - * one of the digital inputs of a device changes in order to read the current - * state from the device. - * - * Events will return a timestamp that can be used to synchronize the event - * with a certain chronology of other events. - * - * \note - * Instances of this class can't be constructed directly. Valid objects must be - * obtained via the class \b mvIMPACT::acquire::EventSubSystem. - * * \note This class will only be available if \b mvIMPACT::acquire::Device::interfaceLayout is set to * \b mvIMPACT::acquire::dilDeviceSpecific before the device is opened. */ -class Event +class PulseStartConfiguration : public ComponentCollection //----------------------------------------------------------------------------- { - friend class EventSubSystem; - mutable EventData m_data; - HDRV m_hDrv; - TDeviceEventType m_type; - explicit Event( HDRV hDrv, HOBJ hObjSettings ) : m_data(), m_hDrv( hDrv ), m_type( detNone ), mode(), - queueDepth(), type() + friend class IOSubSystem; + explicit PulseStartConfiguration( HLIST hList, int nr ) : ComponentCollection( hList ), m_nr( nr ), + pulseStartTrigger(), digitalSignal(), divider(), frequency_Hz(), triggerMoment() { - memset( &m_data, 0, sizeof( m_data ) ); - ComponentLocator locator( hObjSettings ); - locator.bindComponent( mode, "Mode" ); - locator.bindComponent( queueDepth, "QueueDepth" ); - locator.bindComponent( type, "Type" ); - // buffer this type as it doesn't change and this provides faster access at runtime. - m_type = static_cast( type.read() ); + ComponentLocator locator( m_hRoot ); + locator.bindComponent( pulseStartTrigger, "PulseStartTrigger" ); + locator.bindComponent( digitalSignal, "DigitalSignal" ); + locator.bindComponent( divider, "Divider" ); + locator.bindComponent( frequency_Hz, "Frequency_Hz" ); + locator.bindComponent( triggerMoment, "TriggerMoment" ); } + int m_nr; public: - /// \brief Returns a const reference to the \b mvIMPACT::acquire::EventData structure of this event(deprecated). - /** - * \deprecated - * All functions belonging to this class have been declared \b deprecated. See detailed description of - * \b mvIMPACT::acquire::Event. - * - * The referenced \b mvIMPACT::acquire::EventData structure contains additional information about - * the image, e.g. a timestamp that defines the time this event has been reported by the device. - * - * \note - * Please do \b NOT store this reference in some variable to use it for the - * evaluation of the next notification you get for this event as well, as this will \b NOT update - * the referenced data. Whenever \b mvIMPACT::acquire::Event::getData is called the function - * will make sure that the data in the returned structure is up to date while when working with - * an old reference to the \b mvIMPACT::acquire::EventData structure the data in the structure - * will refer to the previous result. - */ - MVIMPACT_DEPRECATED_CPP( const EventData& getData( void ) const ); + /// \brief Returns the internal number associated with this pulse start configuration. + int number( void ) const + { + return m_nr; + } // *INDENT-OFF* PYTHON_OR_JAVA_ONLY( %immutable; ) // *INDENT-ON* - /// \brief An enumerated integer property \b (read-only) defining the mode this event is currently operated in. + /// \brief An enumerated integer property that will define how/when a digital signal is generated by the device. /** - * \deprecated - * All functions belonging to this class have been declared \b deprecated. See detailed description of - * \b mvIMPACT::acquire::Event. + * When certain digital output signals * - * This property must be used whenever the user wants to receive notification from this event - * Valid values for this property are defined by the enumeration - * \b mvIMPACT::acquire::TDeviceEventMode. - */ - PropertyIDeviceEventMode mode; - /// \brief Currently unsupported. - /** - * \deprecated - * All functions belonging to this class have been declared \b deprecated. See detailed description of - * \b mvIMPACT::acquire::Event. + * Valid values for this property are defined by the enumeration \b mvIMPACT::acquire::TPulseStartTrigger. * * \note - * This feature is subject to change! Don't use it! + * Not every device will offer the same options. + * Check for valid modes by reading the properties translation dictionary with + * the functions \b mvIMPACT::acquire::PropertyIPulseStartTrigger::getTranslationDictString and + * \b mvIMPACT::acquire::PropertyIPulseStartTrigger::getTranslationDictValue. + * \if DOXYGEN_CPP_DOCUMENTATION + * C++ offers the more efficient function \b mvIMPACT::acquire::PropertyIPulseStartTrigger::getTranslationDict + * in addition to the functions mentioned above. + * \endif */ - PropertyI queueDepth; - /// \brief An enumerated integer property \b (read-only) containing the type of this event. + PropertyIPulseStartTrigger pulseStartTrigger; + /// \brief An enumerated property to define one or more signals that will trigger the creation of the associated output signals. /** - * \deprecated - * All functions belonging to this class have been declared \b deprecated. See detailed description of - * \b mvIMPACT::acquire::Event. - * - * Valid values for this property are defined by the enumeration - * \b mvIMPACT::acquire::TDeviceEventType. - */ - PropertyIDeviceEventType type; - // *INDENT-OFF* - PYTHON_OR_JAVA_ONLY( %mutable; ) - // *INDENT-ON* -}; - -//----------------------------------------------------------------------------- -/// \brief A class containing the result of a wait call for events (\b Device specific interface layout only)(\b deprecated). -/** - * \deprecated - * This class has been declared \b deprecated and will be removed in future versions - * of this interface. A more flexible way of getting informed about changes in driver features - * has been added to the interface and should be used instead. An example for this new method can - * be found here: \ref Callback.cpp - * - * Objects of this class will be returned by \b mvIMPACT::acquire::EventSubSystem::waitFor - * calls. - * - * \note This class will only be available if \b mvIMPACT::acquire::Device::interfaceLayout is set to - * \b mvIMPACT::acquire::dilDeviceSpecific before the device is opened. - */ -class EventWaitResults -//----------------------------------------------------------------------------- -{ - int m_errorCode; - TDeviceEventType m_waitMask; - TDeviceEventType m_resultMask; -public: - /// \brief Constructs a new \b mvIMPACT::acquire::EventWaitResults object. - /** - * \deprecated - * All functions belonging to this class have been declared \b deprecated. See detailed description of - * \b mvIMPACT::acquire::EventWaitResults. - */ - explicit EventWaitResults( - /// [in] The error code returned by the wait function - int errorCode, - /// [in] The wait mask passed to the wait function - TDeviceEventType waitMask, - /// [in] The result mask of the wait function call - TDeviceEventType resultMask ); - /// \brief The error code returned by the wait function. - /** - * \deprecated - * All functions belonging to this class have been declared \b deprecated. See detailed description of - * \b mvIMPACT::acquire::EventWaitResults. - */ - int errorCode( void ) const - { - return m_errorCode; - } - /// \brief The wait mask passed to the wait function. - /** - * \deprecated - * All functions belonging to this class have been declared \b deprecated. See detailed description of - * \b mvIMPACT::acquire::EventWaitResults. - */ - TDeviceEventType waitMask( void ) const - { - return m_waitMask; - } - /// \brief The result mask of the wait function call. - /** - * \deprecated - * All functions belonging to this class have been declared \b deprecated. See detailed description of - * \b mvIMPACT::acquire::EventWaitResults. - */ - TDeviceEventType resultMask( void ) const - { - return m_resultMask; - } -}; - -//----------------------------------------------------------------------------- -/// \brief An interface class that provides access to all event handling related objects and functions(\b Device specific interface layout only)(\b deprecated). -/** - * \deprecated - * This class has been declared \b deprecated and will be removed in future versions - * of this interface. A more flexible way of getting informed about changes in driver features - * has been added to the interface and should be used instead. An example for this new method can - * be found here: \ref Callback.cpp - * - * Events from the \b mvIMPACT \b Acquire interfaces point of view are certain - * things reported by the hardware like e.g. the detection of a frame start or - * the change on one of the digital inputs of a device. - * - * This class combines everything that is related \b mvIMPACT \a Acquire s event - * handling. - * \if DOXYGEN_CPP_DOCUMENTATION - * \code - * //----------------------------------------------------------------------------- - * void fn( void ) - * //----------------------------------------------------------------------------- - * { - * // create an interface to the event processing - * unsigned int frameStartEventCnt = 0; - * EventSubSystem ess(getDevicePointerFromSomewhere()); - * Event* pEvent = ess.getEventByType( detFrameStart ); - * if( !pEvent ) - * { - * cout << "Frame start events not supported by this device." << endl; - * return; - * } - * - * pEvent->mode.write( demNotify ); - * TDeviceEventType type = pEvent->type.read(); - * TDeviceEventType resultMask; - * int timeout_ms = 500; - * - * while( !s_boTerminated ) - * { - * // wait for frame start event - * EventWaitResults waitResult = ess.waitFor( timeout_ms, type ); - * if( ( waitResult.errorCode() == DMR_NO_ERROR ) ) - * { - * // we are just waiting for one event type, thus the result mask ain't interesting - * frameStartEventCnt = pEvent->getData().count; - * // do something - * } - * else - * { - * // no event detected within the given timeout - * } - * } - * } - * \endcode - * \endif - * - * \note This class will only be available if \b mvIMPACT::acquire::Device::interfaceLayout is set to - * \b mvIMPACT::acquire::dilDeviceSpecific before the device is opened. - */ -class EventSubSystem -//----------------------------------------------------------------------------- -{ - typedef std::vector EventVector; - typedef std::map EventTypeToEventMap; - typedef std::map StringToEventMap; -# ifndef DOXYGEN_SHOULD_SKIP_THIS - //----------------------------------------------------------------------------- - struct ReferenceCountedData - //----------------------------------------------------------------------------- - { - EventVector m_vEvents; - EventTypeToEventMap m_mTypeToEvent; - StringToEventMap m_mNameToEvent; - HDRV m_hDrv; - int m_refCnt; - explicit ReferenceCountedData( HDRV hDrv ) : m_vEvents(), m_mTypeToEvent(), m_mNameToEvent(), - m_hDrv( hDrv ), m_refCnt( 1 ) {} - ~ReferenceCountedData() - { - m_mTypeToEvent.clear(); - m_mNameToEvent.clear(); - EventVector::size_type vSize = m_vEvents.size(); - for( EventVector::size_type i = 0; i < vSize; i++ ) - { - delete m_vEvents[i]; - } - } - }* m_pRefData; -# endif // #ifdef DOXYGEN_SHOULD_SKIP_THIS - //----------------------------------------------------------------------------- - void dealloc( void ) - //----------------------------------------------------------------------------- - { - assert( m_pRefData && "BUG in reference counting detected!" ); - --( m_pRefData->m_refCnt ); - if( m_pRefData->m_refCnt == 0 ) - { - delete m_pRefData; - m_pRefData = 0; - } - } -public: - /// \brief Constructs a new \b mvIMPACT::acquire::EventSubSystem object(\b deprecated). - /** - * \deprecated - * All functions belonging to this class have been declared \b deprecated. See detailed description of - * \b mvIMPACT::acquire::EventSubSystem. - */ - explicit MVIMPACT_DEPRECATED_CPP( EventSubSystem( - /// [in] A pointer to a \b mvIMPACT::acquire::Device object obtained from a \b mvIMPACT::acquire::DeviceManager object. - Device* pDev ) ); - /// \brief Constructs a new \b mvIMPACT::acquire::EventSubSystem from an existing one. - /** - * \deprecated - * All functions belonging to this class have been declared \b deprecated. See detailed description of - * \b mvIMPACT::acquire::EventSubSystem. - * - * Internal data is reference counted, thus modifying an event obtained from \a src will also - * modify the same event obtained from this newly constructed class. - */ - EventSubSystem( - /// [in] A reference to an existing \b mvIMPACT::acquire::EventSubSystem. - const EventSubSystem& src ) : m_pRefData( src.m_pRefData ) - { - ++( m_pRefData->m_refCnt ); - } - /// \deprecated - ~EventSubSystem() - { - dealloc(); - } - /// \brief Allows assignment of one \b mvIMPACT::acquire::EventSubSystem to another. - /** - * \deprecated - * Internal data is reference counted, thus modifying an event obtained from \a src will also - * modify the same event obtained from this newly constructed class. - */ - EventSubSystem& operator=( - /// [in] A reference to an existing \b mvIMPACT::acquire::EventSubSystem. - const EventSubSystem& rhs ) - { - if( this != &rhs ) - { - dealloc(); - m_pRefData = rhs.m_pRefData; - ++( m_pRefData->m_refCnt ); - } - return *this; - } - /// \brief Returns a reference to an \b mvIMPACT::acquire::Event based on the index in the internal array of event references. - /** - * \deprecated - * All functions belonging to this class have been declared \b deprecated. See detailed description of - * \b mvIMPACT::acquire::EventSubSystem. - * - * \if DOXYGEN_CPP_DOCUMENTATION - * If the index is either equal or higher than the number of recognized events \n - * a STL out_of_range exception is thrown. - * \endif - * \return - * - a pointer to a \b mvIMPACT::acquire::Event object specifying the event - * the given index in the internal list if available. - * - an invalid pointer or reference otherwise. - */ - Event* getEventByIndex( - /// [in] The index of the event object the user wants to access. - int index ) const - { - return m_pRefData->m_vEvents.at( index ); - } - /// \brief Returns a reference to an \b mvIMPACT::acquire::Event based on the type of the event. - /** - * \deprecated - * All functions belonging to this class have been declared \b deprecated. See detailed description of - * \b mvIMPACT::acquire::EventSubSystem. - * - * \return - * - a pointer to a \b mvIMPACT::acquire::Event object specifying the event of - * the given type in the internal list if available. - * - an invalid pointer or reference otherwise. - */ - Event* getEventByType( - /// [in] The type of the event object the user wants to access. - TDeviceEventType type ) const - { - EventTypeToEventMap::iterator it = m_pRefData->m_mTypeToEvent.find( type ); - if( it != m_pRefData->m_mTypeToEvent.end() ) - { - return it->second; - } - return 0; - } - /// \brief Returns a reference to an \b mvIMPACT::acquire::Event based on the type (represented as a string) of the event. - /** - * \deprecated - * All functions belonging to this class have been declared \b deprecated. See detailed description of - * \b mvIMPACT::acquire::EventSubSystem. - * - * \return - * - a pointer to a \b mvIMPACT::acquire::Event object specifying the event of - * the given type in the internal list if available. - * - an invalid pointer or reference otherwise. - */ - Event* getEventByName( - /// [in] The name/string representation of the event object the user wants to access. - const std::string& name ) const - { - StringToEventMap::iterator it = m_pRefData->m_mNameToEvent.find( name ); - if( it != m_pRefData->m_mNameToEvent.end() ) - { - return it->second; - } - return 0; - } - /// \brief Returns the number of different event types available for the device that has been passed to the constructor of this object. - /** - * \deprecated - * All functions belonging to this class have been declared \b deprecated. See detailed description of - * \b mvIMPACT::acquire::EventSubSystem. - */ - unsigned int getEventCount( void ) const - { - return static_cast( m_pRefData->m_vEvents.size() ); - } - /// \brief Waits for the occurrence of one or more events(\b deprecated). - /** - * \deprecated - * This function has been declared \b deprecated and will be removed in future versions - * of this interface. A more flexible way of getting informed about changes in driver features - * has been added to the interface and should be used instead. An example for this new method can - * be found here: \ref Callback.cpp - * - * This function must be called to wait for one or more events to becomes signalled by the device - * driver. - * - * \return A \b mvIMPACT::acquire::EventWaitResults object containing information about the - * result of this operation. - */ - MVIMPACT_DEPRECATED_CPP( EventWaitResults waitFor( - /// [in] The timeout in ms defining the maximum time to be spend waiting - int timeout_ms, - /// [in] A mask specifying the event types to wait for. Here values defined by - /// \b mvIMPACT::acquire::TDeviceEventType can be ORed together. - TDeviceEventType mask ) ); -}; - -# ifndef DOXYGEN_SHOULD_SKIP_THIS -//----------------------------------------------------------------------------- -inline const EventData& Event::getData( void ) const -//----------------------------------------------------------------------------- -{ - TDMR_ERROR result = DMR_NO_ERROR; - if( ( result = DMR_EventGetData( m_hDrv, m_type, 0, 0, &m_data, sizeof( m_data ) ) ) != DMR_NO_ERROR ) - { - std::ostringstream oss; - oss << "Couldn't obtain event data for event type " << m_type << "(string representation: " << type.name() << ")"; - ExceptionFactory::raiseException( MVIA_FUNCTION, __LINE__, result, oss.str() ); - } - return m_data; -} - -//----------------------------------------------------------------------------- -inline EventWaitResults::EventWaitResults( int errorCode, TDeviceEventType waitMask, TDeviceEventType resultMask ) : m_errorCode( errorCode ), m_waitMask( waitMask ), m_resultMask( resultMask ) {} -//----------------------------------------------------------------------------- - -//----------------------------------------------------------------------------- -inline EventSubSystem::EventSubSystem( Device* pDev ) : m_pRefData( 0 ) -//----------------------------------------------------------------------------- -{ - pDev->validateInterfaceLayout( dilDeviceSpecific ); - if( !pDev->isOpen() ) - { - pDev->open(); - } - - m_pRefData = new ReferenceCountedData( pDev->hDrv() ); - - HLIST hList; - if( DMR_FindList( pDev->hDrv(), 0, dmltEventSubSystemSettings, 0, &hList ) == DMR_NO_ERROR ) - { - Component it( hList ); - it = it.firstChild(); - while( it.isValid() ) - { - Event* p = new Event( pDev->hDrv(), it.hObj() ); - m_pRefData->m_mTypeToEvent.insert( std::make_pair( p->type.read(), p ) ); - m_pRefData->m_mNameToEvent.insert( std::make_pair( p->type.readS(), p ) ); - m_pRefData->m_vEvents.push_back( p ); - ++it; - } - } -} - -//----------------------------------------------------------------------------- -inline EventWaitResults EventSubSystem::waitFor( int timeout_ms, TDeviceEventType mask ) -//----------------------------------------------------------------------------- -{ - TDeviceEventType resultMask; - int errorCode = DMR_EventWaitFor( m_pRefData->m_hDrv, timeout_ms, mask, 0, 0, &resultMask ); - return EventWaitResults( errorCode, mask, resultMask ); -} -# endif // #ifdef DOXYGEN_SHOULD_SKIP_THIS -#endif // #if !defined(WRAP_ANY) && !defined(BUILD_FOR_JAVA) // don't wrap deprecated stuff - -//----------------------------------------------------------------------------- -/// \brief A class to configure the creation of digital signals passed to one or more of the digital outputs of a device(\b Device specific interface layout only). -/** - * \note This class will only be available if \b mvIMPACT::acquire::Device::interfaceLayout is set to - * \b mvIMPACT::acquire::dilDeviceSpecific before the device is opened. - */ -class PulseStartConfiguration : public ComponentCollection -//----------------------------------------------------------------------------- -{ - friend class IOSubSystem; - explicit PulseStartConfiguration( HLIST hList, int nr ) : ComponentCollection( hList ), m_nr( nr ), - pulseStartTrigger(), digitalSignal(), divider(), frequency_Hz(), triggerMoment() - { - ComponentLocator locator( m_hRoot ); - locator.bindComponent( pulseStartTrigger, "PulseStartTrigger" ); - locator.bindComponent( digitalSignal, "DigitalSignal" ); - locator.bindComponent( divider, "Divider" ); - locator.bindComponent( frequency_Hz, "Frequency_Hz" ); - locator.bindComponent( triggerMoment, "TriggerMoment" ); - } - int m_nr; -public: - /// \brief Returns the internal number associated with this pulse start configuration. - int number( void ) const - { - return m_nr; - } - // *INDENT-OFF* - PYTHON_OR_JAVA_ONLY( %immutable; ) - // *INDENT-ON* - /// \brief An enumerated integer property that will define how/when a digital signal is generated by the device. - /** - * When certain digital output signals - * - * Valid values for this property are defined by the enumeration \b mvIMPACT::acquire::TPulseStartTrigger. - * - * \note - * Not every device will offer the same options. - * Check for valid modes by reading the properties translation dictionary with - * the functions \b mvIMPACT::acquire::PropertyIPulseStartTrigger::getTranslationDictString and - * \b mvIMPACT::acquire::PropertyIPulseStartTrigger::getTranslationDictValue. - * \if DOXYGEN_CPP_DOCUMENTATION - * C++ offers the more efficient function \b mvIMPACT::acquire::PropertyIPulseStartTrigger::getTranslationDict - * in addition to the functions mentioned above. - * \endif - */ - PropertyIPulseStartTrigger pulseStartTrigger; - /// \brief An enumerated property to define one or more signals that will trigger the creation of the associated output signals. - /** - * This property will be visible and thus active when \b mvIMPACT::acquire::PulseStartConfiguration::digitalSignal is switched - * to \b mvIMPACT::acquire::pstDigitalSignal. + * This property will be visible and thus active when \b mvIMPACT::acquire::PulseStartConfiguration::digitalSignal is switched + * to \b mvIMPACT::acquire::pstDigitalSignal. * * Depending on the device one or more signals can be defined as 'active for output signal creation'. When more than one signal can be * defined, calling \b mvIMPACT::acquire::PropertyIDigitalSignal::allowsValueCombinations will return true. @@ -16523,7 +16228,7 @@ public: /// \brief Returns a pointer to a \b mvIMPACT::acquire::PulseStartConfiguration associated with this device. /** * \if DOXYGEN_CPP_DOCUMENTATION - * If \a nr is invalid(too large) a STL out_of_range exception + * If \a nr is invalid(too large) an STL out_of_range exception * will be thrown. * \endif */ @@ -16541,7 +16246,7 @@ public: /// \brief Returns a pointer to a \b mvIMPACT::acquire::RTCtrProgram associated with this device. /** * \if DOXYGEN_CPP_DOCUMENTATION - * If \a nr is invalid(too large) a STL out_of_range exception + * If \a nr is invalid(too large) an STL out_of_range exception * will be thrown. * \endif */ @@ -16576,7 +16281,7 @@ public: /** * * \if DOXYGEN_CPP_DOCUMENTATION - * If \a nr references an invalid pin a STL out_of_range exception + * If \a nr references an invalid pin an STL out_of_range exception * will be thrown. * \endif * @@ -16594,7 +16299,7 @@ public: /// \brief Returns a pointer to a \b mvIMPACT::acquire::DigitalOutput object. /** * \if DOXYGEN_CPP_DOCUMENTATION - * If \a nr references an invalid pin a STL out_of_range exception + * If \a nr references an invalid pin an STL out_of_range exception * will be thrown. * \endif * @@ -17485,7 +17190,7 @@ public: { ExceptionFactory::raiseException( MVIA_FUNCTION, __LINE__, DMR_FEATURE_NOT_AVAILABLE, "Unsupported feature query(Could not obtain pointer to output properties)" ); } - return p ? static_cast( p->mode.read() ) : ddomManual; + return static_cast( p->mode.read() ); } /// \brief Checks whether the specified output is currently operated in a certain mode. bool isOutputModeActive( @@ -17556,8 +17261,12 @@ public: # ifndef IGNORE_MVGRABBER_SPECIFIC_DOCUMENTATION //----------------------------------------------------------------------------- -/// \brief A class to handle the digital inputs and outputs for frame grabber devices(\b Device specific interface layout only). +/// \brief A class to handle the digital inputs and outputs for frame grabber devices(\b Device specific interface layout only) (deprecated. /** + * \deprecated Beginning with the release of 3.0.0 of \product_name everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + * * This class provides a convenient basic access to the digital inputs and * outputs of a frame grabber device. * @@ -17579,39 +17288,9 @@ class IOSubSystemFrameGrabber : public IOSubSystemCommon { public: /// \brief Constructs a new \b mvIMPACT::acquire::IOSubSystemFrameGrabber object. - explicit IOSubSystemFrameGrabber( /// A pointer to a \b mvIMPACT::acquire::Device object obtained from a \b mvIMPACT::acquire::DeviceManager object. - Device* pDev ) : IOSubSystemCommon( pDev ), syncOutputMode() - { - DeviceComponentLocator locator( pDev, dltIOSubSystem ); - Component itSyncs; - locator.bindComponent( itSyncs, "SyncOutputs", 0, 1 ); - if( itSyncs.isValid() && itSyncs.firstChild().isValid() ) - { - locator.bindSearchBase( locator.searchbase_id(), "SyncOutputs" ); - locator.bindComponent( syncOutputMode, "Mode" ); - itSyncs = itSyncs.firstChild(); - while( itSyncs.isValid() ) - { - if( itSyncs.isList() ) - { - std::string name = itSyncs.name(); - if( name.substr( 0, 3 ) == "VD-" ) - { - registerVDOutput( itSyncs ); - } - else if( name.substr( 0, 3 ) == "HD-" ) - { - registerHDOutput( itSyncs ); - } - else - { - ; // type not recognized?! - } - } - ++itSyncs; - } - } - } + MVIMPACT_DEPRECATED_CPP( explicit IOSubSystemFrameGrabber( + /// [in] A pointer to a \b mvIMPACT::acquire::Device object obtained from a \b mvIMPACT::acquire::DeviceManager object. + Device* pDev ) ); /// \brief Returns the number of available HD output pins for the \b mvIMPACT::acquire::Device associated with this object. unsigned int getHDOutputCount( void ) const { @@ -17623,7 +17302,7 @@ public: * value returned by \b mvIMPACT::acquire::IOSubSystemFrameGrabber::getHDOutputCount. * * \if DOXYGEN_CPP_DOCUMENTATION - * If \a nr references an invalid pin a STL out_of_range exception + * If \a nr references an invalid pin an STL out_of_range exception * will be thrown. * \endif * @@ -17645,7 +17324,7 @@ public: * \a nr \b MUST be a valid number ( larger or equal than 0 and smaller than the * value returned by \b mvIMPACT::acquire::IOSubSystemFrameGrabber::getVDOutputCount. * \if DOXYGEN_CPP_DOCUMENTATION - * If \a nr references an invalid pin a STL out_of_range exception + * If \a nr references an invalid pin an STL out_of_range exception * will be thrown. * \endif * @@ -17687,22 +17366,64 @@ public: // *INDENT-ON* }; +# ifndef DOXYGEN_SHOULD_SKIP_THIS //----------------------------------------------------------------------------- -/// \brief A class to create complex digital output signals(\b Device specific interface layout only). -/** - * Instances of this class can be used to create more complex digital output - * related signals like a single pulse or sequence of pulses on a certain pin - * as a reaction on a signal on one of the digital inputs of a device. - * - * The availability of the features provided by this class heavily depends on the - * used capture device. Therefore it's crucial to check if a desired feature is available - * at all. This class either provides the functions needed for these checks or its - * functions will return appropriate error codes. - * - * \note - * If the property \b mvIMPACT::acquire::OutputSignalGeneratorFrameGrabber::controlMode - * is not available \b NO feature of this class can be used. - * +inline IOSubSystemFrameGrabber::IOSubSystemFrameGrabber( + /// [in] A pointer to a \b mvIMPACT::acquire::Device object obtained from a \b mvIMPACT::acquire::DeviceManager object. + Device* pDev ) : IOSubSystemCommon( pDev ), syncOutputMode() +//----------------------------------------------------------------------------- +{ + DeviceComponentLocator locator( pDev, dltIOSubSystem ); + Component itSyncs; + locator.bindComponent( itSyncs, "SyncOutputs", 0, 1 ); + if( itSyncs.isValid() && itSyncs.firstChild().isValid() ) + { + locator.bindSearchBase( locator.searchbase_id(), "SyncOutputs" ); + locator.bindComponent( syncOutputMode, "Mode" ); + itSyncs = itSyncs.firstChild(); + while( itSyncs.isValid() ) + { + if( itSyncs.isList() ) + { + std::string name = itSyncs.name(); + if( name.substr( 0, 3 ) == "VD-" ) + { + registerVDOutput( itSyncs ); + } + else if( name.substr( 0, 3 ) == "HD-" ) + { + registerHDOutput( itSyncs ); + } + else + { + ; // type not recognized?! + } + } + ++itSyncs; + } + } +} +# endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS +//----------------------------------------------------------------------------- +/// \brief A class to create complex digital output signals(\b Device specific interface layout only) (deprecated. +/** + * \deprecated Beginning with the release of 3.0.0 of \product_name everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + * + * Instances of this class can be used to create more complex digital output + * related signals like a single pulse or sequence of pulses on a certain pin + * as a reaction on a signal on one of the digital inputs of a device. + * + * The availability of the features provided by this class heavily depends on the + * used capture device. Therefore it's crucial to check if a desired feature is available + * at all. This class either provides the functions needed for these checks or its + * functions will return appropriate error codes. + * + * \note + * If the property \b mvIMPACT::acquire::OutputSignalGeneratorFrameGrabber::controlMode + * is not available \b NO feature of this class can be used. + * * \note * If the translation dictionary of \b mvIMPACT::acquire::OutputSignalGeneratorFrameGrabber::controlMode * does not contain \b mvIMPACT::acquire::docmRTC the function @@ -18067,35 +17788,9 @@ class OutputSignalGeneratorFrameGrabber # endif // #ifdef DOXYGEN_SHOULD_SKIP_THIS public: /// \brief Constructs a new \b mvIMPACT::acquire::OutputSignalGeneratorFrameGrabber object. - explicit OutputSignalGeneratorFrameGrabber( /// A pointer to a \b mvIMPACT::acquire::Device object obtained from a \b mvIMPACT::acquire::DeviceManager object. - Device* pDev ) : m_pRefData( 0 ), controlMode(), pulseStartEvent(), imageTrigger() - { - pDev->validateInterfaceLayout( dilDeviceSpecific ); - m_pRefData = new ReferenceCountedData(); - DeviceComponentLocator locator( pDev, dltIOSubSystem ); - locator.bindComponent( m_pRefData->m_outputs, "DigitalOutputs" ); - locator.bindSearchBase( m_pRefData->m_outputs.hObj() ); - bindPublicProperties( m_pRefData->m_outputs.hObj() ); - locator.bindComponent( m_pRefData->m_pulseStartEventLineScan, "PulseStartEvent(LineScan)" ); - locator.bindComponent( m_pRefData->m_softwareSignalPeriod_pclk, "SoftwareSignalPeriod_pclk" ); - locator.bindComponent( m_pRefData->m_output, "Output" ); - locator.bindComponent( m_pRefData->m_width_pclk, "Width_pclk" ); - locator.bindComponent( m_pRefData->m_polarity, "Polarity" ); - locator.bindComponent( m_pRefData->m_divider, "Divider" ); - if( m_pRefData->m_outputs.isValid() ) - { - Component it( m_pRefData->m_outputs.hObj() ); - it = it.firstChild(); - while( it.isValid() ) - { - if( it.isList() ) - { - m_pRefData->m_mOutputs.insert( std::pair( it.name(), new OutputProperties( it ) ) ); - } - ++it; - } - } - } + MVIMPACT_DEPRECATED_CPP( explicit OutputSignalGeneratorFrameGrabber( + /// [in] A pointer to a \b mvIMPACT::acquire::Device object obtained from a \b mvIMPACT::acquire::DeviceManager object. + Device* pDev ) ); /// \brief Constructs a new \b mvIMPACT::acquire::OutputSignalGeneratorFrameGrabber from an existing one. OutputSignalGeneratorFrameGrabber( /// [in] A constant reference to the \b mvIMPACT::acquire::OutputSignalGeneratorFrameGrabber object, this object shall be created from @@ -18356,7 +18051,7 @@ public: { ExceptionFactory::raiseException( MVIA_FUNCTION, __LINE__, DMR_FEATURE_NOT_AVAILABLE, "Unsupported feature query" ); } - return p ? p->digitalSignal.getTranslationDictString( index ) : std::string(); + return p->digitalSignal.getTranslationDictString( index ); } /// \brief Assigns a certain signal to a digital output. /** @@ -18374,7 +18069,7 @@ public: DigitalOutput* pOutput, /// [in] The digital signal that shall be passed to the digital output. /// Valid values for this parameter will be obtained by a call to the function - /// \b mvIMPACT::acquire::OutputSignalGeneratorFrameGrabber::getValidSignalsForPassThroughModes + /// \b mvIMPACT::acquire::OutputSignalGeneratorFrameGrabber::getValidSignalsForPassThroughModes. TDigitalSignal digitalSignal, /// [in] If set to \a true, the signal will be inverted internally before being passed to the output. bool boInverted = false ) @@ -18411,7 +18106,7 @@ public: DigitalOutput* pOutput, /// [in] The string representation of the digital output that shall be passed to the digital output. /// Valid values for this parameter will be obtained by a call to the function - /// \b mvIMPACT::acquire::OutputSignalGeneratorFrameGrabber::getValidSignalsForPassThroughModes + /// \b mvIMPACT::acquire::OutputSignalGeneratorFrameGrabber::getValidSignalsForPassThroughModes. const std::string& digitalSignal, /// [in] If set to \a true, the signal will be inverted internally before being passed to the output. bool boInverted = false ) @@ -18589,6 +18284,40 @@ public: PYTHON_OR_JAVA_ONLY( %mutable; ) // *INDENT-ON* }; + +# ifndef DOXYGEN_SHOULD_SKIP_THIS +//----------------------------------------------------------------------------- +inline OutputSignalGeneratorFrameGrabber::OutputSignalGeneratorFrameGrabber( + Device* pDev ) : m_pRefData( 0 ), controlMode(), pulseStartEvent(), imageTrigger() +//----------------------------------------------------------------------------- +{ + pDev->validateInterfaceLayout( dilDeviceSpecific ); + m_pRefData = new ReferenceCountedData(); + DeviceComponentLocator locator( pDev, dltIOSubSystem ); + locator.bindComponent( m_pRefData->m_outputs, "DigitalOutputs" ); + locator.bindSearchBase( m_pRefData->m_outputs.hObj() ); + bindPublicProperties( m_pRefData->m_outputs.hObj() ); + locator.bindComponent( m_pRefData->m_pulseStartEventLineScan, "PulseStartEvent(LineScan)" ); + locator.bindComponent( m_pRefData->m_softwareSignalPeriod_pclk, "SoftwareSignalPeriod_pclk" ); + locator.bindComponent( m_pRefData->m_output, "Output" ); + locator.bindComponent( m_pRefData->m_width_pclk, "Width_pclk" ); + locator.bindComponent( m_pRefData->m_polarity, "Polarity" ); + locator.bindComponent( m_pRefData->m_divider, "Divider" ); + if( m_pRefData->m_outputs.isValid() ) + { + Component it( m_pRefData->m_outputs.hObj() ); + it = it.firstChild(); + while( it.isValid() ) + { + if( it.isList() ) + { + m_pRefData->m_mOutputs.insert( std::pair( it.name(), new OutputProperties( it ) ) ); + } + ++it; + } + } +} +# endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS # endif // #ifndef IGNORE_MVGRABBER_SPECIFIC_DOCUMENTATION //----------------------------------------------------------------------------- @@ -18777,7 +18506,7 @@ public: // *INDENT-ON* /// \brief An enumerated integer property defining the pixel format used to transfer the image data into the target systems host memory. /** - * Support for this property has been added in version 1.11.0 of mvIMPACT Acquire thus old driver versions will + * Support for this property has been added in version 1.11.0 of Impact Acquire thus old driver versions will * raise an exception if an application accesses the property without checking if the property is present. * * By default this property will be set to \b mvIMPACT::acquire::ibpfAuto. This will result in the previous driver @@ -18809,7 +18538,7 @@ public: /** * \note * As this is a device driver meant for testing the interface an allowing to - * start the integration of mvIMPACT Acquire into an application, this class + * start the integration of Impact Acquire into an application, this class * might change at ANY time! Changes in the virtual device driver might not * be backward compatible! * @@ -18854,7 +18583,7 @@ public: // *INDENT-ON* /// \brief An integer property defining the number of buffer part to transmit in each request. /** - * This property is meant to test the multi-part buffer feature of mvIMPACT Acquire mainly. When + * This property is meant to test the multi-part buffer feature of Impact Acquire mainly. When * set to 0 multi-part buffer handling is switched off. When set to a value greater than 0 the * virtual device will transmit data in multi-part mode, meaning that mvIMPACT::acquire::Request::getBufferPartCount() * will return a value larger than zero. Only when this is the case the properties belonging to the @@ -18895,7 +18624,7 @@ public: * \endcode * * Where: \n - * \c gain_dB: MATRIX VISION gain value (logarithmic) \n + * \c gain_dB: Balluff gain value (logarithmic) \n * \c gain_x: multiplicative gain \n * \c ^: power function \n */ @@ -18954,7 +18683,7 @@ public: * This feature will only be visible, when the property \b mvIMPACT::acquire::CameraSettingsVirtualDevice::testMode * is set to \b mvIMPACT::acquire::vdtmImageDirectory. * - * See \b mvIMPACT::acquire::CameraSettingsVirtualDevice::imageType to find out how to configure what kind of images shall be captured from disc. + * See \b mvIMPACT::acquire::CameraSettingsVirtualDevice::imageType to find out how to configure what kind of images shall be captured from disk. */ PropertyS imageDirectory; /// \brief An enumerated integer property defining what images shall be captured from hard disk. @@ -19601,7 +19330,7 @@ public: * \endcode * * Where: \n - * \c gain_dB: MATRIX VISION gain value (logarithmic) \n + * \c gain_dB: Balluff gain value (logarithmic) \n * \c gain_x: multiplicative gain \n * \c ^: power function \n */ @@ -19921,7 +19650,7 @@ public: * or to change the number of knee points. * * \if DOXYGEN_CPP_DOCUMENTATION - * If \a nr is invalid(too large) a STL out_of_range exception + * If \a nr is invalid(too large) an STL out_of_range exception * will be thrown. * \endif * @@ -20196,7 +19925,7 @@ public: /// \brief Returns a const pointer to a \b mvIMPACT::acquire::TriggerControl object. /** * \if DOXYGEN_CPP_DOCUMENTATION - * If \a nr references an invalid pin a STL out_of_range exception + * If \a nr references an invalid pin an STL out_of_range exception * will be thrown. * \endif * @@ -20289,8 +20018,12 @@ public: # ifndef IGNORE_MVGRABBER_SPECIFIC_DOCUMENTATION //----------------------------------------------------------------------------- -/// \brief A class to access frame grabber related camera settings(\b Device specific interface layout only). +/// \brief A class to access frame grabber related camera settings(\b Device specific interface layout only) (deprecated. /** + * \deprecated Beginning with the release of 3.0.0 of \product_name everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + * * This class contains properties to control the way the a frame grabber * behaves in connection with the connected camera. * @@ -20310,52 +20043,15 @@ class CameraSettingsFrameGrabber : public CameraSettingsBase TriggerControlVector m_triggerControls; public: /// \brief Constructs a new \b mvIMPACT::acquire::CameraSettingsFrameGrabber object. - explicit CameraSettingsFrameGrabber( - /// [in] A pointer to a \b mvIMPACT::acquire::Device object obtained from a \b mvIMPACT::acquire::DeviceManager object. - Device* pDev, - /// [in] The name of the driver internal setting to access with this instance. - /// A list of valid setting names can be obtained by a call to - /// \b mvIMPACT::acquire::FunctionInterface::getAvailableSettings, new - /// settings can be created with the function - /// \b mvIMPACT::acquire::FunctionInterface::createSetting - const std::string& settingName = "Base" ) : CameraSettingsBase( pDev, settingName ), - type(), aoiMode(), gain_dB(), offset_mV(), scanClock(), triggerMode(), softwareTriggerPeriod_ms(), - serialPortBaudrate(), interlacedMode(), acquisitionField(), scanRateMode(), scanRate_kHz(), - luminance_pc(), saturation_pc(), hue_pc(), contrast_pc(), lineCounter() - { - ComponentLocator locator( m_hRoot ); - locator.bindComponent( type, "Type" ); - locator.bindComponent( aoiMode, "AoiMode" ); - locator.bindComponent( gain_dB, "Gain_dB" ); - locator.bindComponent( offset_mV, "Offset_mV" ); - locator.bindComponent( scanClock, "ScanClock" ); - locator.bindComponent( triggerMode, "TriggerMode", 0, 0 ); - locator.bindComponent( softwareTriggerPeriod_ms, "SoftwareTriggerPeriod_ms" ); - locator.bindComponent( serialPortBaudrate, "SerialPortBaudRate" ); - locator.bindComponent( interlacedMode, "InterlacedMode" ); - locator.bindComponent( acquisitionField, "AcquisitionField" ); - locator.bindComponent( scanRateMode, "ScanRateMode" ); - locator.bindComponent( scanRate_kHz, "ScanRate_kHz" ); - locator.bindComponent( luminance_pc, "Luminance_pc" ); - locator.bindComponent( saturation_pc, "Saturation_pc" ); - locator.bindComponent( hue_pc, "Hue_pc" ); - locator.bindComponent( contrast_pc, "Contrast_pc" ); - locator.bindComponent( lineCounter, "LineCounter" ); - if( locator.findComponent( "TriggerControls" ) != INVALID_ID ) - { - locator.bindSearchBase( locator.searchbase_id(), "TriggerControls" ); - Component it( locator.searchbase_id() ); - if( it.isValid() ) - { - it = it.firstChild(); - while( it.isValid() ) - { - m_triggerControls.push_back( new TriggerControl( it ) ); - ++it; - } - } - } - } + MVIMPACT_DEPRECATED_CPP( explicit CameraSettingsFrameGrabber( + /// [in] A pointer to a \b mvIMPACT::acquire::Device object obtained from a \b mvIMPACT::acquire::DeviceManager object. + Device* pDev, + /// [in] The name of the driver internal setting to access with this instance. + /// A list of valid setting names can be obtained by a call to + /// \b mvIMPACT::acquire::FunctionInterface::getAvailableSettings, new + /// settings can be created with the function + /// \b mvIMPACT::acquire::FunctionInterface::createSetting + const std::string& settingName = "Base" ) ); virtual ~CameraSettingsFrameGrabber() { TriggerControlVector::size_type vSize = m_triggerControls.size(); @@ -20375,7 +20071,7 @@ public: /// \brief Returns a const pointer to a \b mvIMPACT::acquire::TriggerControl object. /** * \if DOXYGEN_CPP_DOCUMENTATION - * If \a nr references an invalid pin a STL out_of_range exception + * If \a nr references an invalid pin an STL out_of_range exception * will be thrown. * \endif */ @@ -20445,7 +20141,7 @@ public: * \endcode * * Where: \n - * \c gain_dB: MATRIX VISION gain value (logarithmic) \n + * \c gain_dB: Balluff gain value (logarithmic) \n * \c gain_x: multiplicative gain \n * \c ^: power function \n * @@ -20615,9 +20311,56 @@ public: // *INDENT-ON* }; +# ifndef DOXYGEN_SHOULD_SKIP_THIS +//----------------------------------------------------------------------------- +inline CameraSettingsFrameGrabber::CameraSettingsFrameGrabber( Device* pDev, const std::string& settingName /* = "Base" */ ) : CameraSettingsBase( pDev, settingName ), + type(), aoiMode(), gain_dB(), offset_mV(), scanClock(), triggerMode(), softwareTriggerPeriod_ms(), + serialPortBaudrate(), interlacedMode(), acquisitionField(), scanRateMode(), scanRate_kHz(), + luminance_pc(), saturation_pc(), hue_pc(), contrast_pc(), lineCounter() +//----------------------------------------------------------------------------- +{ + ComponentLocator locator( m_hRoot ); + locator.bindComponent( type, "Type" ); + locator.bindComponent( aoiMode, "AoiMode" ); + locator.bindComponent( gain_dB, "Gain_dB" ); + locator.bindComponent( offset_mV, "Offset_mV" ); + locator.bindComponent( scanClock, "ScanClock" ); + locator.bindComponent( triggerMode, "TriggerMode", 0, 0 ); + locator.bindComponent( softwareTriggerPeriod_ms, "SoftwareTriggerPeriod_ms" ); + locator.bindComponent( serialPortBaudrate, "SerialPortBaudRate" ); + locator.bindComponent( interlacedMode, "InterlacedMode" ); + locator.bindComponent( acquisitionField, "AcquisitionField" ); + locator.bindComponent( scanRateMode, "ScanRateMode" ); + locator.bindComponent( scanRate_kHz, "ScanRate_kHz" ); + locator.bindComponent( luminance_pc, "Luminance_pc" ); + locator.bindComponent( saturation_pc, "Saturation_pc" ); + locator.bindComponent( hue_pc, "Hue_pc" ); + locator.bindComponent( contrast_pc, "Contrast_pc" ); + locator.bindComponent( lineCounter, "LineCounter" ); + if( locator.findComponent( "TriggerControls" ) != INVALID_ID ) + { + locator.bindSearchBase( locator.searchbase_id(), "TriggerControls" ); + Component it( locator.searchbase_id() ); + if( it.isValid() ) + { + it = it.firstChild(); + while( it.isValid() ) + { + m_triggerControls.push_back( new TriggerControl( it ) ); + ++it; + } + } + } +} +# endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS + //----------------------------------------------------------------------------- -/// \brief A base class to describe a camera (\b Device specific interface layout only). +/// \brief A base class to describe a camera (\b Device specific interface layout only) connected to a frame grabber (deprecated. /** + * \deprecated Beginning with the release of 3.0.0 of \product_name everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + * * A camera description object provides an abstract way to prepare the capture * device (e.g. a frame grabber) for the connected imaging device (e.g. a camera). * @@ -20625,7 +20368,7 @@ public: * will use the information provided in the camera description to prepare the * image capture. Therefore it is crucial to select a camera description * that matches the connected video signal as close as possible. If no description - * for the camera or imaging device connected is available a new description + * for the camera connected to a frame grabber is available a new description * should be generated from one of the existing ones. This can be achieved by calling * the function \b mvIMPACT::acquire::CameraDescriptionBase::copyDescription. A new * camera description with the name that is passed to the function will be created. @@ -20860,27 +20603,18 @@ public: { return DMR_CopyCameraDescription( m_hDrv, m_hRoot, newName.c_str() ); } - /// \brief Stores the current camera description on disc. + /// \brief Stores the current camera description on disk. /** * This function can be used to store the current settings of a camera description * permanently so that the next time the driver is initialized these settings are restored. * - * When exporting a camera description a file in XML format will be written to disc. On - * Windows® camera descriptions will be stored under - * \code - * %ALLUSERS%/Documents/MATRIX VISION/mvIMPACT acquire/CameraFiles - * \endcode - * or - * \code - * %MVIMPACT_ACQUIRE_DATA_DIR%/CameraFiles - * \endcode - * which will point to the same folder), on Linux® this directory will be - * \code - * /etc/matrix-vision/mvimpact-acquire/camerafiles - * \endcode - * while under other platforms these files will end up in the current working directory. This behaviour can be modified - * by writing the property \b mvIMPACT::acquire::Device::customDataDirectory before initialising the - * device. + * When exporting a camera description a file in XML format will be written to disk. + * - On Windows® camera descriptions will be stored under \product_default_data_directory_windows/CameraFiles (or %MVIMPACT_ACQUIRE_DATA_DIR%/CameraFiles, which will point to the same folder) + * - On Unix based systems this directory will be \product_default_data_directory_linux/camerafiles + * - On other platforms these files will end up in the current working directory. + * + * This behaviour can be modified by writing the property \b mvIMPACT::acquire::Device::customDataDirectory + * before initialising the device. * * \sa * \b mvIMPACT::acquire::CameraDescriptionBase::copyDescription, \n @@ -20896,21 +20630,13 @@ public: /// \brief Updates a camera description with the data stored in a previous session or with the original default data. /** * When importing a camera description the device driver will try to retrieve the parameters - * needed from a XML file. On Windows® camera descriptions MUST be stored under - * \code - * %ALLUSERS%/Documents/MATRIX VISION/mvIMPACT acquire/CameraFiles - * \endcode - * or - * \code - * %MVIMPACT_ACQUIRE_DATA_DIR%/CameraFiles - * \endcode - * which will point to the same folder), under Linux® this directory will be - * \code - * /etc/matrix-vision/mvimpact-acquire/camerafiles - * \endcode - * while under other platforms these files MUST be located in the current working directory. + * needed from a XML file. + * - On Windows® camera descriptions MUST be stored under \product_default_data_directory_windows/CameraFiles (or %MVIMPACT_ACQUIRE_DATA_DIR%/CameraFiles, which will point to the same folder) + * - n Unix based systems this directory will be \product_default_data_directory_linux/camerafiles + * - On other platforms these files MUST be located in the current working directory. + * * This behaviour can be modified by writing the property \b mvIMPACT::acquire::Device::customDataDirectory before initialising the device. - * To get access to a XML description file within the application, these file must be copied to + * To get access to an XML description file within the application, these file must be copied to * this directory \b BEFORE the device is initialized. During the initialisation process the * device driver will process every file located under this location and will add them to * the internal list of descriptions. Every camera located during this process and also descriptions @@ -20975,8 +20701,12 @@ public: }; //----------------------------------------------------------------------------- -/// \brief A base class to describe an arbitrary digital camera signal(\b Device specific interface layout only). +/// \brief A base class to describe an arbitrary digital camera signal(\b Device specific interface layout only) (deprecated. /** + * \deprecated Beginning with the release of 3.0.0 of \product_name everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + * * This class provides access to all settings specific for digital video signals. * * \note This class will only be available if \b mvIMPACT::acquire::Device::interfaceLayout is set to @@ -21016,8 +20746,12 @@ public: }; //----------------------------------------------------------------------------- -/// \brief A base class to describe a SDI(Serial Digital Interface) camera signal (\b Device specific interface layout only). +/// \brief A base class to describe an SDI(Serial Digital Interface) camera signal (\b Device specific interface layout only) (deprecated. /** + * \deprecated Beginning with the release of 3.0.0 of \product_name everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + * * This class provides access to all settings specific for SDI video signals. * * \note This class will only be available if \b mvIMPACT::acquire::Device::interfaceLayout is set to @@ -21047,8 +20781,12 @@ public: }; //----------------------------------------------------------------------------- -/// \brief A base class to describe an arbitrary digital camera signal(\b Device specific interface layout only). +/// \brief A base class to describe an arbitrary digital camera signal(\b Device specific interface layout only) (deprecated. /** + * \deprecated Beginning with the release of 3.0.0 of \product_name everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + * * This class provides access to all settings specific for digital video signals. * * \note This class will only be available if \b mvIMPACT::acquire::Device::interfaceLayout is set to @@ -21085,8 +20823,12 @@ public: }; //----------------------------------------------------------------------------- -/// \brief A class to describe a CameraLink® compliant camera(\b Device specific interface layout only). +/// \brief A class to describe a CameraLink® compliant camera(\b Device specific interface layout only) (deprecated. /** + * \deprecated Beginning with the release of 3.0.0 of \product_name everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + * * This class provides access to all settings specific for CameraLink® compliant cameras. * * \note This class will only be available if \b mvIMPACT::acquire::Device::interfaceLayout is set to @@ -21129,8 +20871,12 @@ public: }; //----------------------------------------------------------------------------- -/// \brief A class to describe a non-standard digital video signal(\b Device specific interface layout only). +/// \brief A class to describe a non-standard digital video signal(\b Device specific interface layout only) (deprecated. /** + * \deprecated Beginning with the release of 3.0.0 of \product_name everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + * * This class provides access to all settings specific for non-standard digital video signals. * * \note This class will only be available if \b mvIMPACT::acquire::Device::interfaceLayout is set to @@ -21203,8 +20949,12 @@ public: }; //----------------------------------------------------------------------------- -/// \brief An internal base class to describe standard analogue video cameras(\b Device specific interface layout only). +/// \brief An internal base class to describe standard analogue video cameras(\b Device specific interface layout only) (deprecated. /** + * \deprecated Beginning with the release of 3.0.0 of \product_name everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + * * Instances of this class can't be constructed directly. Use one of the derived types. * * \note This class will only be available if \b mvIMPACT::acquire::Device::interfaceLayout is set to @@ -21252,8 +21002,12 @@ public: }; //----------------------------------------------------------------------------- -/// \brief A class describing analogue standard compliant video cameras(\b Device specific interface layout only). +/// \brief A class describing analogue standard compliant video cameras(\b Device specific interface layout only) (deprecated. /** + * \deprecated Beginning with the release of 3.0.0 of \product_name everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + * * \note This class will only be available if \b mvIMPACT::acquire::Device::interfaceLayout is set to * \b mvIMPACT::acquire::dilDeviceSpecific before the device is opened. */ @@ -21265,8 +21019,12 @@ class CameraDescriptionStandard : public CameraDescriptionStandardBase }; //----------------------------------------------------------------------------- -/// \brief A class describing non-standard video cameras(\b Device specific interface layout only). +/// \brief A class describing non-standard video cameras(\b Device specific interface layout only) (deprecated. /** + * \deprecated Beginning with the release of 3.0.0 of \product_name everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + * * This class can be used to describe a non-standard analogue video camera. A camera * considered as non-standard when it is not compliant with one of the defined * video standards like e.g. CCIR. @@ -21355,8 +21113,12 @@ public: }; //----------------------------------------------------------------------------- -/// \brief Grants access to camera description objects(\b Device specific interface layout only). +/// \brief Grants access to camera description objects(\b Device specific interface layout only) (deprecated. /** + * \deprecated Beginning with the release of 3.0.0 of \product_name everything specifically + * related to frame grabber boards will be considered as deprecated and might be removed + * without further notice! + * * This class provides access to the various camera description objects. Each * device recognizes a different set of camera descriptions. E.g. a digital * frame grabber will not be able to work with analogue cameras. Each camera description @@ -21646,15 +21408,14 @@ class CameraDescriptionManager index = it->second; return true; } - else + + it = m.find( name ); + if( it != m.end() ) { - it = m.find( name ); - if( it != m.end() ) - { - index = it->second; - return true; - } + index = it->second; + return true; } + return false; } //----------------------------------------------------------------------------- @@ -21729,24 +21490,9 @@ class CameraDescriptionManager } public: /// \brief Constructs a new \b mvIMPACT::acquire::CameraDescriptionManager object. - explicit CameraDescriptionManager( - /// [in] A pointer to a \b mvIMPACT::acquire::Device object obtained from a \b mvIMPACT::acquire::>DeviceManager object. - Device* pDev ) : m_pRefData( 0 ) - { - pDev->validateInterfaceLayout( dilDeviceSpecific ); - if( !pDev->isOpen() ) - { - pDev->open(); - } - - TDMR_ERROR result; - HLIST hList; - if( ( result = DMR_FindList( pDev->hDrv(), 0, dmltCameraDescriptions, 0, &hList ) ) != DMR_NO_ERROR ) - { - ExceptionFactory::raiseException( MVIA_FUNCTION, __LINE__, result, "Couldn't find camera description list (is this a frame grabber?)" ); - } - m_pRefData = new ReferenceCountedData( pDev->hDrv(), hList ); - } + MVIMPACT_DEPRECATED_CPP( explicit CameraDescriptionManager( + /// [in] A pointer to a \b mvIMPACT::acquire::Device object obtained from a \b mvIMPACT::acquire::>DeviceManager object. + Device* pDev ) ); /// \brief Constructs a new \b mvIMPACT::acquire::CameraDescriptionManager from an existing one. CameraDescriptionManager( /// A constant reference to the \b mvIMPACT::acquire::CameraDescriptionManager object, this object shall be created from @@ -21781,7 +21527,7 @@ public: /** * \if DOXYGEN_CPP_DOCUMENTATION * If the index is either equal or higher than the number of CameraLink® camera descriptions \n - * detected for this device a STL out_of_range exception will be thrown. + * detected for this device an STL out_of_range exception will be thrown. * \endif */ CameraDescriptionCameraLink* cameraDescriptionCameraLink( @@ -21819,7 +21565,7 @@ public: /** * \if DOXYGEN_CPP_DOCUMENTATION * If the index is either equal or higher than the number of SDI camera descriptions \n - * detected for this device a STL out_of_range exception will be thrown. + * detected for this device an STL out_of_range exception will be thrown. * \endif */ CameraDescriptionSDI* cameraDescriptionSDI( @@ -21857,7 +21603,7 @@ public: /** * \if DOXYGEN_CPP_DOCUMENTATION * If the index is either equal or higher than the number of non-standard digital camera descriptions \n - * detected for this device a STL out_of_range exception will be thrown. + * detected for this device an STL out_of_range exception will be thrown. * \endif */ CameraDescriptionDigital* cameraDescriptionDigital( @@ -21895,7 +21641,7 @@ public: /** * \if DOXYGEN_CPP_DOCUMENTATION * If the index is either equal or higher than the number of standard camera descriptions \n - * detected for this device a STL out_of_range exception will be thrown. + * detected for this device an STL out_of_range exception will be thrown. * \endif */ CameraDescriptionStandard* cameraDescriptionStandard( @@ -21933,7 +21679,7 @@ public: /** * \if DOXYGEN_CPP_DOCUMENTATION * If the index is either equal or higher than the number of non-standard camera descriptions \n - * detected for this device a STL out_of_range exception will be thrown. + * detected for this device an STL out_of_range exception will be thrown. * \endif */ CameraDescriptionNonStandard* cameraDescriptionNonStandard( @@ -21971,6 +21717,27 @@ public: return m_pRefData->m_lastListSize; } }; + +# ifndef DOXYGEN_SHOULD_SKIP_THIS +//----------------------------------------------------------------------------- +inline CameraDescriptionManager::CameraDescriptionManager( Device* pDev ) : m_pRefData( 0 ) +//----------------------------------------------------------------------------- +{ + pDev->validateInterfaceLayout( dilDeviceSpecific ); + if( !pDev->isOpen() ) + { + pDev->open(); + } + + TDMR_ERROR result; + HLIST hList; + if( ( result = DMR_FindList( pDev->hDrv(), 0, dmltCameraDescriptions, 0, &hList ) ) != DMR_NO_ERROR ) + { + ExceptionFactory::raiseException( MVIA_FUNCTION, __LINE__, result, "Couldn't find camera description list (is this a frame grabber?)" ); + } + m_pRefData = new ReferenceCountedData( pDev->hDrv(), hList ); +} +# endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS # endif // #ifndef #ifndef IGNORE_MVGRABBER_SPECIFIC_DOCUMENTATION # ifndef IGNORE_MVBLUEFOX_SPECIFIC_DOCUMENTATION @@ -21989,12 +21756,12 @@ public: * * The following I2C addresses will be blocked for access from an application: * - * - * - * + * + * + * * - * - * + * + * * *
i2c addressremark
0x20-0x3F-
0x66-0x67-
i2c address rangeaffected devices
0x20-0x3Fall mvBlueFOX devices
0x66-0x67all mvBlueFOX devices
0x90-0x91mvBlueFOX-200w only
0xA0-0xA3-
0xA6-0xA7-
0xA0-0xA3all mvBlueFOX devices
0xA6-0xA7all mvBlueFOX devices
0xBA-0xBBmvBlueFOX-202a and mvBlueFOX-205 only
* @@ -22573,45 +22340,6 @@ public: }; # endif // #ifndef IGNORE_MVBLUEFOX_SPECIFIC_DOCUMENTATION -# ifndef IGNORE_MVGRABBER_SPECIFIC_DOCUMENTATION -//----------------------------------------------------------------------------- -/// \brief This class provides access to general settings as well as to settings which are unique for frame grabber devices(\b Device specific interface layout only). -/** - * To see a small code example on how you can work with object of this class see - * the detailed description of the class \b mvIMPACT::acquire::FunctionInterface as well. - * Statements made for the use of the class \b mvIMPACT::acquire::FullSettingsBase apply for - * this class as well. - * - * \note This class will only be available if \b mvIMPACT::acquire::Device::interfaceLayout is set to - * \b mvIMPACT::acquire::dilDeviceSpecific before the device is opened. - */ -class SettingsFrameGrabber : public FullSettingsBase -//----------------------------------------------------------------------------- -{ -public: - /// brief Constructs a new \b mvIMPACT::acquire::SettingsFrameGrabber object. - explicit SettingsFrameGrabber( - /// [in] A pointer to a \b mvIMPACT::acquire::Device object obtained from a \b mvIMPACT::acquire::DeviceManager object. - Device* pDev, - /// [in] The name of the driver internal setting to access with this instance. - /// A list of valid setting names can be obtained by a call to - /// \b mvIMPACT::acquire::FunctionInterface::getAvailableSettings, new - /// settings can be created with the function - /// \b mvIMPACT::acquire::FunctionInterface::createSetting - const std::string& name = "Base" ) : FullSettingsBase( pDev, name ), cameraSetting( pDev, name ), connector( pDev, name ) {} - // *INDENT-OFF* - PYTHON_OR_JAVA_ONLY( %immutable; ) - // *INDENT-ON* - /// \brief Camera related settings. - CameraSettingsFrameGrabber cameraSetting; - /// \brief Input channel related properties. - Connector connector; - // *INDENT-OFF* - PYTHON_OR_JAVA_ONLY( %mutable; ) - // *INDENT-ON* -}; -# endif // #ifndef IGNORE_MVGRABBER_SPECIFIC_DOCUMENTATION - # ifndef IGNORE_MVBLUECOUGAR_SPECIFIC_DOCUMENTATION # ifndef WRAP_ANY /// \brief \b deprecated. Use the class \b mvIMPACT::acquire::SystemSettings instead(\b Device specific interface layout only). @@ -22936,1513 +22664,1700 @@ inline void ExceptionFactory::raiseException( const char* pFunctionName, int lin } } -namespace GenICam -{ - -class GenTLDriverConfigurator; - //----------------------------------------------------------------------------- -/// \brief A class that contains items to configure the behaviour of the GenICam GenTL driver stack. +/// \brief A class to perform a firmware update of a specific device. /** - * This class contains items to configure the enumeration behaviour of a third party GenTL producer library. - * -* \note - * Instances of this class cannot be constructed directly. To get access the functions \b mvIMPACT::acquire::GenICam::GenTLDriverConfigurator::createProducerConfiguration, - * \b mvIMPACT::acquire::GenICam::GenTLDriverConfigurator::getProducerConfigurations - * or \b mvIMPACT::acquire::GenICam::GenTLDriverConfigurator::getProducerConfiguration must be used. - * must be used. + * This class is intended to provide an ease of use possibility to update the firmware of specific devices. It is possible to + * specify the behavior of the class very detailed to make sure the update suits the users expectations. It is also possible to derive + * from this class and override various functions in order to get custom notifications e.g. to update a GUI application. * - * For a comprehensive usage example see the description of the class \b mvIMPACT::acquire::GenICam::GenTLDriverConfigurator. + * \if DOXYGEN_CPP_DOCUMENTATION + * To start a firmware update for Balluff %GenICam devices the following code will be sufficient: + * \code + * // force the update even if the version of the mvu-file is the same as the one on the device + * mvIMPACT::acquire::FirmwareUpdater fwUpdater( pDev, true ); + * try + * { + * const string pathToFirmwareArchive( "someArchive.mvu" ); + * // start the whole update process + * const int FWUpdateResult = fwUpdater.update( pathToFirmwareArchive ); + * cout << "Result of 'updateFirmware' call: " << ImpactAcquireException::getErrorCodeAsString( FWUpdateResult ) << "." << endl; + * } + * catch( const ImpactAcquireException& e ) + * { + * cout << "An error occurred while updating the firmware of the device " << pDev->serial.read() + * << "(error code: " << e.getErrorCodeAsString() << ")."; + * // reading out potential issues + * cout << "Status: " << fwUpdater.statusMessage() << endl; + * return 1; + * } + * \endcode * - * \sa - * \ref CommonCases_mvGenTLConsumerSetup + * To start a firmware update for Balluff mvBlueFOX devices the following code will be sufficient: + * \code + * mvIMPACT::acquire::FirmwareUpdater fwUpdater( pDev ); + * // if necessary, a specific version for the update can be selected by using the firmwareVersionToUpload property + * try + * { + * const int FWUpdateResult = fwUpdater.update(); + * cout << "Result of 'updateFirmware' call: " << ImpactAcquireException::getErrorCodeAsString( FWUpdateResult ) << "." << endl; + * } + * catch( const ImpactAcquireException& e ) + * { + * cout << "An error occurred while updating the firmware of the device " << pDev->serial.read() + * << "(error code: " << e.getErrorCodeAsString() << ")."; + * return 1; + * } + * \endcode * - * \since 2.34.0 - * \ingroup GenICamInterfaceProducer - */ -class GenTLProducerConfiguration : public mvIMPACT::acquire::ComponentCollection -//----------------------------------------------------------------------------- -{ - friend class GenTLDriverConfigurator; + * A more custom behavior can be accomplished by deriving from the mvIMPACT::acquire::FirmwareUpdater class and re-implementing the various notification functions: + * \code + * //----------------------------------------------------------------------------- + * class MyFirmwareUpdater : public mvIMPACT::acquire::FirmwareUpdater + * //----------------------------------------------------------------------------- + * { + * public: + * explicit MyFirmwareUpdater( mvIMPACT::acquire::Device* pDev, bool boForceOverideSameVersion = false, bool boForceDowngrade = false, bool boForceSameVersion = false, bool boForceBreakingChange = false ) : mvIMPACT::acquire::FirmwareUpdater( pDev, boForceOverideSameVersion, boForceDowngrade, boForceSameVersion, boForceBreakingChange ) {} + * virtual int onErrorMessage( const double timeElapsed_s ) const + * { + * cout << "Error: " << statusMessage() << "@" << timeElapsed_s << " s" << endl; + * return fuaCancel; + * } + * virtual int onErasingFlash( const int currentProgress_pc, const double timeElapsed_s ) const + * { + * cout << "Erasing - Update progress: " << currentProgress_pc << ", time " << timeElapsed_s << " s" << endl; + * return fuaContinue; + * } + * virtual int onUnzippingFirmwareArchive( const int currentProgress_pc, const double timeElapsed_s ) const + * { + * cout << "Unzipping firmware archive - Update progress: " << currentProgress_pc << ", time " << timeElapsed_s << " s" << endl; + * return fuaContinue; + * } + * virtual int onUpdatingBootProgrammer( const int currentProgress_pc, const double timeElapsed_s ) const + * { + * cout << "Updating boot programmer - Update progress: " << currentProgress_pc << ", time " << timeElapsed_s << " s" << endl; + * return fuaContinue; + * } + * virtual int onUploadingImage( const int currentProgress_pc, const double timeElapsed_s ) const + * { + * cout << "Uploading - Update progress: " << currentProgress_pc << ", time " << timeElapsed_s << " s" << endl; + * return fuaContinue; + * } + * virtual int onRebooting( const int currentProgress_pc, const double timeElapsed_s ) const + * { + * cout << "Rebooting - Update progress: " << currentProgress_pc << ", time " << timeElapsed_s << " s" << endl; + * return fuaContinue; + * } + * virtual int onHardResetRequired( const int currentProgress_pc, const double timeElapsed_s ) const + * { + * cout << "Rebooting - Update progress: " << currentProgress_pc << ", time " << timeElapsed_s << " s" << endl << "Manual hard reset required." << endl; + * return fuaCancel; + * } + * virtual int onSavingUserSets( const int currentProgress_pc, const double timeElapsed_s ) const + * { + * cout << "Saving sets - Update progress: " << currentProgress_pc << ", time " << timeElapsed_s << " s" << endl; + * return fuaContinue; + * } + * virtual int onLoadingUserSets( const int currentProgress_pc, const double timeElapsed_s ) const + * { + * cout << "Loading sets - Update progress: " << currentProgress_pc << ", time " << timeElapsed_s << " s" << endl; + * return fuaContinue; + * } + * }; + * \endcode + * \elseif DOXYGEN_JAVA_DOCUMENTATION + * To start a firmware update for Balluff GenICam devices the following code will be sufficient: + * \code + * // force the update even if the version of the mvu-file is the same as the one on the device + * mvIMPACT.acquire.FirmwareUpdater fwUpdater = new mvIMPACT.acquire.FirmwareUpdater( pDev, true ); + * try + * { + * String pathToMVUfile = new String( "someArchive.mvu" ); + * // start the whole update process + * System.out.println( "Result of firmware update call: " + ImpactAcquireException.getErrorCodeAsString( pFWU.update( pathToMVUfile ) ) ); + * } + * catch( ImpactAcquireException e ) + * { + * System.out.println( "An error occured during the firmware update process. Error code: " + e.getErrorCodeAsString() ); + * System.out.println( "Status: " + pFWU.statusMessage() ); + * } + * \endcode + * + * To start a firmware update for Balluff mvBlueFOX devices the following code will be sufficient: + * \code + * mvIMPACT.acquire.FirmwareUpdater fwUpdater = new mvIMPACT.acquire.FirmwareUpdater( pDev ); + * // if necessary, a specific version for the update can be selected by using the firmwareVersionToUpload property + * try + * { + * // start the whole update process + * System.out.println( "Result of firmware update call: " + ImpactAcquireException.getErrorCodeAsString( pFWU.update() ) ); + * } + * catch( ImpactAcquireException e ) + * { + * System.out.println( "An error occured during the firmware update process. Error code: " + e.getErrorCodeAsString() ); + * System.out.println( "Status: " + pFWU.statusMessage() ); + * } + * \endcode + * + * A more custom behavior can be accomplished by deriving from the mvIMPACT.acquire.FirmwareUpdater class and re-implementing the various notification functions: + * \code + * import mvIMPACT.acquire.*; + * + * public class MyFirmwareUpdater extends FirmwareUpdater + * { + * public MyFirmwareUpdater( Device pDev, boolean boForceOverideSameVersion, boolean boForceDowngrade, boolean boKeepUserSets, boolean boForceBreakingChange ) + * { + * super( pDev, boForceOverideSameVersion, boForceDowngrade, boKeepUserSets, boForceBreakingChange ); + * } + * @Override + * public int onErrorMessage( double timeElapsed_s ) + * { + * System.out.println( "Error: " + statusMessage() + " @ " + timeElapsed_s + " s" ); + * return mvIMPACT.acquire.TFirmwareUpdateAction.fuaContinue; + * } + * @Override + * public int onErasingFlash( int currentProgress_pc, double timeElapsed_s ) + * { + * System.out.println( "Erasing - Update progress: " + currentProgress_pc + ", time " + timeElapsed_s + " s" ); + * return mvIMPACT.acquire.TFirmwareUpdateAction.fuaContinue; + * } + * @Override + * public int onUnzippingFirmwareArchive( int currentProgress_pc, double timeElapsed_s ) + * { + * System.out.println( "Unzipping firmware archive - Update progress: " + currentProgress_pc + ", time " + timeElapsed_s + " s" ); + * return mvIMPACT.acquire.TFirmwareUpdateAction.fuaContinue; + * } + * @Override + * public int onUpdatingBootProgrammer( int currentProgress_pc, double timeElapsed_s ) + * { + * System.out.println( "Updating boot programmer - Update progress: " + currentProgress_pc + ", time " + timeElapsed_s + " s" ); + * return mvIMPACT.acquire.TFirmwareUpdateAction.fuaContinue; + * } + * @Override + * public int onUploadingImage( int currentProgress_pc, double timeElapsed_s ) + * { + * System.out.println( "Uploading - Update progress: " + currentProgress_pc + ", time " + timeElapsed_s + " s" ); + * return mvIMPACT.acquire.TFirmwareUpdateAction.fuaContinue; + * } + * @Override + * public int onRebooting( int currentProgress_pc, double timeElapsed_s ) + * { + * System.out.println( "Rebooting - Update progress: " + currentProgress_pc + ", time " + timeElapsed_s + " s" ); + * return mvIMPACT.acquire.TFirmwareUpdateAction.fuaContinue; + * } + * @Override + * public int onHardResetRequired( int currentProgress_pc, double timeElapsed_s ) + * { + * System.out.println( "Rebooting - Update progress: " + currentProgress_pc + ", time " + timeElapsed_s + " s" ); + * System.out.println( "Manual hard reset required." ); + * System.out.println( "Status message: " + statusMessage() ); + * return mvIMPACT.acquire.TFirmwareUpdateAction.fuaCancel; + * } + * @Override + * public int onSavingUserSets( int currentProgress_pc, double timeElapsed_s ) + * { + * System.out.println( "Saving sets - Update progress: " + currentProgress_pc + ", time " + timeElapsed_s + " s" ); + * return mvIMPACT.acquire.TFirmwareUpdateAction.fuaContinue; + * } + * @Override + * public int onLoadingUserSets( int currentProgress_pc, double timeElapsed_s ) + * { + * System.out.println( "Loading sets - Update progress: " + currentProgress_pc + ", time " + timeElapsed_s + " s" ); + * return mvIMPACT.acquire.TFirmwareUpdateAction.fuaContinue; + * } + * } + * \endcode + * \elseif DOXYGEN_PYTHON_DOCUMENTATION + * + * To start a firmware update for Balluff mvBlueFOX devices the following code will be sufficient: + * \code + * fwUpdater = acquire.FirmwareUpdater( pDev, False, False, True, False ) + * fwUpdateResult = fwUpdater.update( PATH_TO_FIRMWARE_ARCHIVE.mvu ) + * if FWUpdateResult == 0: + * print("Update successful!") + * else: + * print( fwUpdater.statusMessage() ) + * \endcode + * To start a firmware update for Balluff mvBlueFOX devices the following code will be sufficient: + * \code + * fwUpdater = acquire.FirmwareUpdater( pDev ) + * fwUpdateResult = fwUpdater.update( 52 ) + * if FWUpdateResult == 0: + * print("Update successful!") + * else: + * print( fwUpdater.statusMessage() ) + * \endcode + * A more custom behavior can be accomplished by deriving from the acquire.FirmwareUpdater class and re-implementing the various notification functions: + * \code + * from mvIMPACT import acquire + * + * class MyFirmwareUpdater( acquire.FirmwareUpdater ): + * def __init__(self, *args): + * super(MyFirmwareUpdater, self).__init__(*args) + * + * def onErrorMessage( self, timeElapsed_s ): + * print( "Error: " + statusMessage() + " @ " + str(timeElapsed_s) + " s" ) + * return acquire.fuaContinue + * + * def onErasingFlash( self, currentProgress_pc, timeElapsed_s ): + * print( "Erasing - Update progress: " + str(currentProgress_pc) + ", time " + str(timeElapsed_s) + " s" ) + * return acquire.fuaContinue + * + * def onUnzippingFirmwareArchive( self, currentProgress_pc, timeElapsed_s ): + * print( "Unzipping firmware archive - Update progress: " + str(currentProgress_pc) + ", time " + str(timeElapsed_s) + " s" ) + * return acquire.fuaContinue + * + * def onUpdatingBootProgrammer( self, currentProgress_pc, timeElapsed_s ): + * print( "Updating boot programmer - Update progress: " + str(currentProgress_pc) + ", time " + str(timeElapsed_s) + " s" ) + * return acquire.fuaContinue + * + * def onUploadingImage( self, currentProgress_pc, timeElapsed_s ): + * print( "Uploading - Update progress: " + str(currentProgress_pc) + ", time " + str(timeElapsed_s) + " s" ) + * return acquire.fuaContinue + * + * def onRebooting( self, currentProgress_pc, timeElapsed_s ): + * print( "Rebooting - Update progress: " + str(currentProgress_pc) + ", time " + str(timeElapsed_s) + " s" ) + * return acquire.fuaContinue + * + * def onHardResetRequired( self, currentProgress_pc, timeElapsed_s ): + * print( "Rebooting - Update progress: " + str(currentProgress_pc) + ", time " + str(timeElapsed_s) + " s" ) + * print( "Manual hard reset required." ) + * print( "Status message: " + statusMessage() ) + * return acquire.fuaCancel + * + * def onSavingUserSets( self, currentProgress_pc, timeElapsed_s ): + * print( "Saving sets - Update progress: " + str(currentProgress_pc) + ", time " + str(timeElapsed_s) + " s" ) + * return acquire.fuaContinue + * + * def onLoadingUserSets( self, currentProgress_pc, timeElapsed_s ): + * print( "Loading sets - Update progress: " + str(currentProgress_pc) + ", time " + str(timeElapsed_s) + " s" ) + * return acquire.fuaContinue + * \endcode - Method createProducerInterfaceConfigurationEntry_; - Method deleteProducerInterfaceConfigurationEntry_; + * \endif - void bindProperties( HLIST hList ) + * \note + * The following device families are currently supported by this API: + * \note + * - GenICam compliant Balluff/MATRIX VISION devices + * - BVS CA-GX0 (mvBlueCOUGAR-X) + * - BVS CA-GX2 (mvBlueCOUGAR-XD) + * - BVS CA-GT (mvBlueCOUGAR-XT) + * - BVS CA-SF (mvBlueFOX3) + * - BVS CA-BN (mvBlueNAOS) + * - Other Balluff/MATRIX VISION devices + * - BVS CA-MLC / BVS CA-IGC (mvBlueFOX-MLC/IGC) + * - mvBlueFOX + * + * \attention + * - Do not unplug the device during the update procedure! + * - Once the firmwareUpdate method call returns an error call the \b mvIMPACT::acquire::FirmwareUpdater::statusMessage function. It will return useful information about the current status (including issues) of the update procedure. + * - The actual \b mvIMPACT::acquire::FirmwareUpdater::update method did get an additional parameter in version 2.48.0 of this SDK! Make sure you understand the intention of this parameter! When using older versions of this API + * make sure \b not attempting to use a device without closing, updating the device list and re-opening it again. Undefined behavior might be the result when not doing so! + * + * \since 2.41.0 + * \ingroup CommonInterface + */ +class FirmwareUpdater +//----------------------------------------------------------------------------- +{ +private: +#if !defined(DOXYGEN_SHOULD_SKIP_THIS) + PropertyS firmwareUpdateFileName_; + PropertyPtr firmwareUpdateProgressListenerAddress_; + PropertyPtr firmwareUpdateProgressListenerUserDataAddress_; + PropertyIBoolean firmwareUpdateKeepUserSets_; + PropertyIBoolean firmwareUpdateForceBreakingChange_; + PropertyIBoolean firmwareUpdateForceOverrideSameVersion_; + PropertyIBoolean firmwareUpdateForceDowngrade_; + PropertyS firmwareUpdateStatusMessage_; + Method updateFirmware_; + double timeElapsed_s_; + Device* pDev_; + bool boForceOverideSameVersion_; + bool boForceDowngrade_; + bool boKeepUserSets_; + bool boForceBreakingChange_; + std::string lastStatusMessage_; + + void registerFirmwareUpdateCallback( CBP_FIRMWARE_UPDATE pCB, void* pUserData ) { + if( firmwareUpdateProgressListenerAddress_.isValid() && firmwareUpdateProgressListenerUserDataAddress_.isValid() ) { - Component it( hList ); - ComponentLocator locator( it.parent().parent().hObj() ); - locator.bindComponent( createProducerInterfaceConfigurationEntry_, "CreateProducerInterfaceConfigurationEntry@iss" ); - locator.bindComponent( deleteProducerInterfaceConfigurationEntry_, "DeleteProducerInterfaceConfigurationEntry@iss" ); + function_cast pFunc; + pFunc.pO = pCB; + firmwareUpdateProgressListenerAddress_.write( pFunc.pI ); + firmwareUpdateProgressListenerUserDataAddress_.write( pUserData ); } + } + void unregisterFirmwareUpdateCallback( void ) + { + if( firmwareUpdateProgressListenerAddress_.isValid() && firmwareUpdateProgressListenerUserDataAddress_.isValid() ) { - ComponentLocator locator( hList ); - locator.bindComponent( enumerationEnable, "EnumerationEnable" ); + firmwareUpdateProgressListenerAddress_.write( 0 ); + firmwareUpdateProgressListenerUserDataAddress_.write( 0 ); + } + } + static int infoCallback( void* pUserData, FirmwareUpdateStatusData* pFwUpdateData, unsigned long int /*fwUpdateDataSize*/ ) + { + if( !pUserData ) + { + return fuaContinue; + } + FirmwareUpdater* pFirmwareUpdater = reinterpret_cast( pUserData ); + pFirmwareUpdater->setTimeElapsed( pFwUpdateData->timeElapsed_s ); + switch( pFwUpdateData->updateStep ) + { + case fusErasingFlash: + return pFirmwareUpdater->onErasingFlash( pFwUpdateData->progressPercent, pFwUpdateData->timeElapsed_s ); + case fusUpdatingBootProgrammer: + return pFirmwareUpdater->onUpdatingBootProgrammer( pFwUpdateData->progressPercent, pFwUpdateData->timeElapsed_s ); + case fusUnzippingFirmwareArchive: + return pFirmwareUpdater->onUnzippingFirmwareArchive( pFwUpdateData->progressPercent, pFwUpdateData->timeElapsed_s ); + case fusUploadingFirmware: + return pFirmwareUpdater->onUploadingImage( pFwUpdateData->progressPercent, pFwUpdateData->timeElapsed_s ); + case fusRebootingDevice: + return pFirmwareUpdater->onRebooting( pFwUpdateData->progressPercent, pFwUpdateData->timeElapsed_s ); + case fusHardResetRequired: + return pFirmwareUpdater->onHardResetRequired( pFwUpdateData->progressPercent, pFwUpdateData->timeElapsed_s ); + case fusSavingUserSets: + return pFirmwareUpdater->onSavingUserSets( pFwUpdateData->progressPercent, pFwUpdateData->timeElapsed_s ); + case fusLoadingUserSets: + return pFirmwareUpdater->onLoadingUserSets( pFwUpdateData->progressPercent, pFwUpdateData->timeElapsed_s ); + case fusErrorMessage: + return pFirmwareUpdater->onErrorMessage( pFwUpdateData->timeElapsed_s ); + } + return fuaContinue; + } + bool bindProperties( void ) + { + bool needsReInitAfterUpdate = false; + ComponentLocator l( pDev_->hDev() ); + l.bindComponent( updateFirmware_, "UpdateFirmware@i" ); + if( !updateFirmware_.isValid() ) + { + needsReInitAfterUpdate = true; + if( !pDev_->isOpen() ) + { + pDev_->open(); + } + DeviceComponentLocator locator( pDev_, dltSystemSettings ); + locator.bindComponent( firmwareUpdateKeepUserSets_, "KeepUserSets" ); + locator.bindComponent( firmwareUpdateForceBreakingChange_, "ForceBreakingChange" ); + locator.bindComponent( firmwareUpdateForceOverrideSameVersion_, "ForceOverrideSameVersion" ); + locator.bindComponent( firmwareUpdateForceDowngrade_, "ForceDowngrade" ); + locator.bindComponent( firmwareUpdateFileName_, "FileName" ); + locator.bindComponent( firmwareUpdateStatusMessage_, "UpdateStatusMessage" ); + locator.bindComponent( firmwareUpdateProgressListenerAddress_, "ProgressListenerAddress" ); + locator.bindComponent( firmwareUpdateProgressListenerUserDataAddress_, "ProgressListenerUserDataAddress" ); + locator.bindComponent( updateFirmware_, "UpdateDeviceFirmware@i" ); + } + + if( firmwareUpdateForceOverrideSameVersion_.isValid() ) + { + firmwareUpdateForceOverrideSameVersion_.write( boForceOverideSameVersion_ ? bTrue : bFalse ); + } + if( firmwareUpdateForceDowngrade_.isValid() ) + { + firmwareUpdateForceDowngrade_.write( boForceDowngrade_ ? bTrue : bFalse ); + } + if( firmwareUpdateKeepUserSets_.isValid() ) + { + firmwareUpdateKeepUserSets_.write( boKeepUserSets_ ? bTrue : bFalse ); + } + if( firmwareUpdateForceBreakingChange_.isValid() ) + { + firmwareUpdateForceBreakingChange_.write( boForceBreakingChange_ ? bTrue : bFalse ); } + lastStatusMessage_ = firmwareUpdateStatusMessage_.isValid() ? firmwareUpdateStatusMessage_.read() : std::string( "STATUS PROPERTY NOT AVAILABLE" ); + return needsReInitAfterUpdate; } - explicit GenTLProducerConfiguration( HLIST hList ) : mvIMPACT::acquire::ComponentCollection( hList ), - createProducerInterfaceConfigurationEntry_(), deleteProducerInterfaceConfigurationEntry_(), - enumerationEnable() + // do not allow assignments + FirmwareUpdater& operator=( const FirmwareUpdater& ); + // do not allow copy construction + FirmwareUpdater( const FirmwareUpdater& src ); + +protected: + void setTimeElapsed( double time_s ) { - bindProperties( hList ); + timeElapsed_s_ = time_s; } +#endif // #if !defined(DOXYGEN_SHOULD_SKIP_THIS) public: - /// \brief Constructs a new \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration from an existing one. - GenTLProducerConfiguration( - /// [in] A constant reference to the \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration object, this object shall be created from - const GenTLProducerConfiguration& src ) : ComponentCollection( src.hObj() ), - createProducerInterfaceConfigurationEntry_( src.createProducerInterfaceConfigurationEntry_ ), - deleteProducerInterfaceConfigurationEntry_( src.deleteProducerInterfaceConfigurationEntry_ ), - enumerationEnable( src.enumerationEnable ) {} - /// \brief Allows assignments of \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration objects. - GenTLProducerConfiguration& operator=( const GenTLProducerConfiguration& rhs ) + /// \brief Creates a new mvIMPACT::acquire::FirmwareUpdater object. + explicit FirmwareUpdater( + /// [in] A pointer to a \b mvIMPACT::acquire::Device object obtained from a \b mvIMPACT::acquire::DeviceManager object. + mvIMPACT::acquire::Device* pDev, + /// [in] A boolean value which defines if updates using the same version as installed on the camera should be allowed. + bool boForceOverideSameVersion = false, + /// [in] A boolean value which defines if updates using an older version as installed on the camera should be allowed. + bool boForceDowngrade = false, + /// [in] A boolean value which defines if the user sets of the device will be kept or will be deleted during the update. + bool boKeepUserSets = true, + /// [in] A boolean value which defines if updates to versions which will deliver interface breaking changes will be allowed. Setting this value to \c true will also update a device which after the update + /// might have a different interface. See documentation for additional information about breaking changes in firmware versions(there are not too many)! + bool boForceBreakingChange = false ) : timeElapsed_s_( 0 ), pDev_( pDev ), + boForceOverideSameVersion_( boForceOverideSameVersion ), boForceDowngrade_( boForceDowngrade ), boKeepUserSets_( boKeepUserSets ), boForceBreakingChange_( boForceBreakingChange ), lastStatusMessage_( "Idle" ) { - if( this != &rhs ) + ComponentLocator l( pDev_->hDev() ); + l.bindComponent( updateFirmware_, "UpdateFirmware@i" ); + if( updateFirmware_.isValid() ) { - ComponentCollection::operator=( rhs ); - bindProperties( rhs.hObj() ); + l.bindComponent( firmwareVersionToUpload, "FirmwareVersionToUpload" ); } - return *this; } - // *INDENT-OFF* - PYTHON_OR_JAVA_ONLY( %immutable; ) - // *INDENT-ON* - /// \brief An enumerated integer property defining the enumeration behavior this particular GenTL producer. + virtual ~FirmwareUpdater() {} + /// \brief This function will be called once a message is waiting to be passed to the user. /** - * If this property is set to \b mvIMPACT::acquire::bTrue ALL interfaces of this producer will be enumerated - * unless a specific interface enumeration behaviour has been set to \b mvIMPACT::acquire::iebForceIgnore. - * - * Valid values for this property are defined by the enumeration \b mvIMPACT::acquire::TBoolean. - */ - PropertyIBoolean enumerationEnable; - // *INDENT-OFF* - PYTHON_OR_JAVA_ONLY( %mutable; ) - // *INDENT-ON* - /// \brief Returns the interface enumeration behaviour property for the specified interface ID for this particular GenTL producer. + * Re-implement this function in a derived class in order to implement a custom behaviour. + * \return + * - mvIMPACT::acquire::fuaContinue if the current update shall continue. + * - mvIMPACT::acquire::fuaCancel otherwise. + */ + virtual int onErrorMessage( + /// [in] The total time elapsed since starting the update process (in seconds). + const double timeElapsed_s ) const + { + ( void ) timeElapsed_s; + return fuaContinue; + } + /// \brief This function will be called once the devices flash memory is erased. /** - * - * Valid values for this property are defined by the enumeration \b mvIMPACT::acquire::TInterfaceEnumerationBehaviour. - * - * \note If no entry for the specified interface ID exists an exception will be thrown. - * - * \return The enumeration behaviour configuration property for the specified interface - */ - PropertyIInterfaceEnumerationBehaviour getInterfaceEnumerationBehaviour( - /// [in] The interface ID previously passed e.g. to the \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration::createProducerInterfaceConfigurationEntry function. - const std::string& interfaceID ) const + * Re-implement this function in a derived class in order to implement a custom behaviour. + * + * \note Only some device types require this step so this callback might not be called for every device type. + * + * \return + * - mvIMPACT::acquire::fuaContinue if the current update shall continue. + * - mvIMPACT::acquire::fuaCancel otherwise. + */ + virtual int onErasingFlash( + /// [in] The current progress of the erase operation (in percent). + const int currentProgress_pc, + /// [in] The total time elapsed since starting the update process (in seconds). + const double timeElapsed_s ) const + { + ( void ) currentProgress_pc; + ( void ) timeElapsed_s; + return fuaContinue; + } + /// \brief This function will be called once firmware archive (*.mvu) is unzipped to provide the correct firmware file. + /** + * Re-implement this function in a derived class in order to implement a custom behaviour. + * + * \return + * - mvIMPACT::acquire::fuaContinue if the current update shall continue. + * - mvIMPACT::acquire::fuaCancel otherwise. + */ + virtual int onUnzippingFirmwareArchive( + /// [in] The current progress of the unzip operation (in percent). + const int currentProgress_pc, + /// [in] The total time elapsed since starting the update process (in seconds). + const double timeElapsed_s ) const + { + ( void ) currentProgress_pc; + ( void ) timeElapsed_s; + return fuaContinue; + } + /// \brief This function will be called once the boot programmer of an mvBlueFOX3 camera is updated. + /** + * Re-implement this function in a derived class in order to implement a custom behaviour. + * + * \note + * - Only mvBlueFOX3 cameras require this step so this callback might not be called in case of different device types. + * - BootProgrammer updates won't be necessary often, so this callback will not apply in every firmware update process. + * + * \return + * - mvIMPACT::acquire::fuaContinue if the current update shall continue. + * - mvIMPACT::acquire::fuaCancel otherwise. + */ + virtual int onUpdatingBootProgrammer( + /// [in] The current progress of the update operation (in percent). + const int currentProgress_pc, + /// [in] The total time elapsed since starting the update process (in seconds). + const double timeElapsed_s ) const + { + ( void ) currentProgress_pc; + ( void ) timeElapsed_s; + return fuaContinue; + } + /// \brief This function will be called once the actual firmware file is uploaded to the device's flash memory. + /** + * Re-implement this function in a derived class in order to implement a custom behaviour. + * + * \note + * - Depending on the device type this step might take a few seconds up to a few minutes. + * - The callback will be called several times during the upload. + * - Each time there was a progress of 5 percent this callback will be called. + * + * \return + * - mvIMPACT::acquire::fuaContinue if the current update shall continue. + * - mvIMPACT::acquire::fuaCancel otherwise. + */ + virtual int onUploadingImage( + /// [in] The current progress of the upload operation (in percent). + const int currentProgress_pc, + /// [in] The total time elapsed since starting the update process (in seconds). + const double timeElapsed_s ) const + { + ( void ) currentProgress_pc; + ( void ) timeElapsed_s; + return fuaContinue; + } + /// \brief This function will be called once the device reboots to make sure the new firmware is applied to the device. + /** + * Re-implement this function in a derived class in order to implement a custom behaviour. + * + * \note Returning mvIMPACT::acquire::fuaCancel on this callback will stop the upgrade process without rebooting the device. However, a new firmware is not active until a reboot or hard reset has been performed. + * + * \return + * - mvIMPACT::acquire::fuaContinue if the current update shall continue. + * - mvIMPACT::acquire::fuaCancel otherwise. + */ + virtual int onRebooting( + /// [in] The current progress of the reboot operation (in percent). + const int currentProgress_pc, + /// [in] The total time elapsed since starting the update process (in seconds). + const double timeElapsed_s ) const + { + ( void ) currentProgress_pc; + ( void ) timeElapsed_s; + return fuaContinue; + } + /// \brief This function will be called once the device reboots and a manual hard reset is required. + /** + * Re-implement this function in a derived class in order to implement a custom behaviour. + * + * \note If this function is called, a power cycle is inevitable. Otherwise the new firmware may be broken. The default is to stop the update at this point, so that the user can manually disconnect the power source. + * + * \return + * - mvIMPACT::acquire::fuaContinue if the current update shall continue. + * - mvIMPACT::acquire::fuaCancel otherwise. + */ + virtual int onHardResetRequired( + /// [in] The current progress of the reboot operation (in percent). + const int currentProgress_pc, + /// [in] The total time elapsed since starting the update process (in seconds). + const double timeElapsed_s ) const { - ComponentLocator locator( hObj(), "Interfaces" ); - const HOBJ hObj = locator.findComponent( interfaceID, 0, 1 ); - if( hObj == INVALID_ID ) - { - ExceptionFactory::raiseException( MVIA_FUNCTION, __LINE__, static_cast( PROPHANDLING_COMPONENT_NOT_FOUND ), "Couldn't find 'InterfaceEnumerationBehaviour' for interface '" + interfaceID + "' of producer '" + getProducerName() + "'" ); - } - return PropertyIInterfaceEnumerationBehaviour( hObj ); + ( void ) currentProgress_pc; + ( void ) timeElapsed_s; + return fuaCancel; } - /// \brief Returns a map containing all the configured interface IDs and their corresponding enumeration behaviour properties for this particular GenTL producer. + /// \brief This function will be called when the settings of the device are stored before updating the firmware. /** - * The returned map will only contain interface IDs which have explicitly been configured (e.g. by a previous call to - * \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration::createProducerInterfaceConfigurationEntry. Certain third party - * interfaces might also have an entry in this map (e.g. if there is a MATRIX VISION producer supporting the same technology present - * on the system). - * - * Valid values for the properties are defined by the enumeration \b mvIMPACT::acquire::TInterfaceEnumerationBehaviour. - * - * \return A map containing all the configured interface IDs and their corresponding enumeration behaviour properties for this particular GenTL producer - */ - std::map getInterfaceEnumerationBehaviours( void ) const + * Re-implement this function in a derived class in order to implement a custom behaviour. + * + * This callback will only be called when user sets shall be available after the update. This can be specified by setting the \b boKeepUserSets flag upon construction of this object. + * + * \return + * - mvIMPACT::acquire::fuaContinue if the current update shall continue. + * - mvIMPACT::acquire::fuaCancel otherwise. + */ + virtual int onSavingUserSets( + /// [in] The current progress of the store operation (in percent). + const int currentProgress_pc, + /// [in] The total time elapsed since starting the update process (in seconds). + const double timeElapsed_s ) const + { + ( void ) currentProgress_pc; + ( void ) timeElapsed_s; + return fuaContinue; + } + /// \brief This function will be called when the settings of the device are written back after updating the firmware. + /** + * Re-implement this function in a derived class in order to implement a custom behaviour. + * + * This callback will only be called when user sets shall be available after the update. This can be specified by setting the \b boKeepUserSets flag upon construction of this object. + * + * \return + * - mvIMPACT::acquire::fuaContinue if the current update shall continue. + * - mvIMPACT::acquire::fuaCancel otherwise. + */ + virtual int onLoadingUserSets( + /// [in] The current progress of the load operation (in percent). + const int currentProgress_pc, + /// [in] The total time elapsed since starting the update process (in seconds). + const double timeElapsed_s ) const + { + ( void ) currentProgress_pc; + ( void ) timeElapsed_s; + return fuaContinue; + } + /// \brief A function to start the firmware update process. + /** + * This function is intended to be used to update Balluff imaging and image capture devices. + * \note + * - Once this function returns, the device will be closed! All objects previously created using the \b mvIMPACT::acquire::Device pointer must be recreated then. + * - For mvBlueFOX device this function needs to be called \b without passing any parameters to the function! + * + * \return + * - mvIMPACT::acquire::DMR_NO_ERROR if successful. + * - A negative error code of type ::TDMR_ERROR otherwise. + */ + TDMR_ERROR update( + /// [in] Path to the file which should be used to update the device. Can be empty if no update archives are needed for the device. + const std::string& archivePath = "", + /// [in] Can be set to false in order to save time when updating multiple devices in one go. Please note that as soon as at least one GenICam + /// device is part of these multiple devices either \b mvIMPACT::acquire::DeviceManager::updateDeviceList \b must be called \b or every instance + /// to mvIMPACT::acquire::DeviceManager in the current process needs to be destroyed afterwards before any of those GenICam + /// devices can be used again! + const bool boUpdateDataAsNeeded = true ) { - std::map m; - ComponentLocator locator( hObj(), "Interfaces" ); - Component it( locator.searchbase_id() ); - it = it.firstChild(); - while( it.isValid() ) + if( pDev_->isOpen() ) { - m.insert( make_pair( it.name(), PropertyIInterfaceEnumerationBehaviour( it.hObj() ) ) ); - it++; + pDev_->close(); } - return m; + const bool needsReInitAfterUpdate = bindProperties(); + if( !updateFirmware_.isValid() ) + { + return DMR_FEATURE_NOT_AVAILABLE; + } + if( firmwareUpdateFileName_.isValid() ) + { + firmwareUpdateFileName_.writeS( archivePath ); + } + registerFirmwareUpdateCallback( infoCallback, this ); + const TDMR_ERROR returnVal = static_cast( updateFirmware_.call() ); + unregisterFirmwareUpdateCallback(); + lastStatusMessage_ = firmwareUpdateStatusMessage_.isValid() ? firmwareUpdateStatusMessage_.read() : std::string( "STATUS PROPERTY NOT AVAILABLE" ); + if( needsReInitAfterUpdate ) + { + pDev_->close(); + if( boUpdateDataAsNeeded ) + { + DeviceManager devMgr; + devMgr.updateDeviceList(); // Refresh GenICam XML file related properties as well as the firmware version properties. + } + } + return returnVal; } - /// \brief Creates a new interface configuration entry for this producers configuration. + /// \brief Returns the current status from the status property + std::string statusMessage( void ) const + { + return firmwareUpdateStatusMessage_.isValid() ? firmwareUpdateStatusMessage_.read() : lastStatusMessage_; + } + /// \brief A method to receive the time in seconds since the update process has been started /** - * Usually the parameter passed to this function will be one of the interface IDs of the producers list of reported interfaces - * in order to configure this particular interface. However it can also be an identifier for an interface not yet connected to the - * system or not yet available to the producer. No internal checks are performed regarding the validity of the given interface ID. - * - * \note If an entry with the same interface ID already exists an exception will be thrown. + * \return The time elapsed since the firmware update currently running has been started. */ - PropertyIInterfaceEnumerationBehaviour createProducerInterfaceConfigurationEntry( - /// [in] The interface ID to create the configuration entry for. - const std::string& interfaceID ) + double getTimeElapsed( void ) const { - Component it( hObj() ); - std::vector parameters; - parameters.push_back( it.name() ); - parameters.push_back( interfaceID ); - const int result = createProducerInterfaceConfigurationEntry_.call( parameters ); - if( result != DMR_NO_ERROR ) + return timeElapsed_s_; + } + /// \brief A function to check the integrity of the firmware running on a device. + /** + * This function is intended to be used to check the firmware integrity of Balluff imaging and image capture devices only. + * Most Balluff imaging and image capture devices are capable of calculating a hash from the firmware image which is currently running on the device. In addition to + * that firmware archives for imaging devices provided by Balluff contain hashes for all the firmware images contained in the update archive. Comparing these + * 2 hashes will provide additional security when an application wants to make sure that the firmware running on the device is undamaged. + * + * \note + * - When calling this function, the firmware archive path passed to it must contain the exact same firmware that is running on the + * device. + * - This feature is currently only available for most Balluff GenICam compliant devices. + * - Once this function returns, the device will be closed! All objects previously created using the mvIMPACT::acquire::Device pointer must be recreated then. + * - If the function returns a negative code of type \b mvIMPACT::acquire::TDMR_ERROR, the status string will contain a more specific explanation about the root cause for the issue. + * + * \since 2.47.0 + * + * \return + * - mvIMPACT::acquire::DMR_NO_ERROR if successful. + * - A negative error code of type ::TDMR_ERROR otherwise. + */ + static TDMR_ERROR verifyFirmwareChecksum( + /// [in] A pointer to a \b mvIMPACT::acquire::Device object obtained from a \b mvIMPACT::acquire::DeviceManager object. + Device* pDev, + /// [in] Path to the file which should be used to compare the firmware checksum from with the firmware currently running on the device. + const std::string& archivePath, + /// [out] Pointer to a string receiving additional information about the outcome of the operation. This can be 0 if no one is interested in status information. + std::string* pStatusMessage = 0 ) + { + if( pDev->isOpen() ) + { + pDev->close(); + } + try + { + pDev->interfaceLayout.write( dilGenICam ); + } + catch( const ImpactAcquireException& ) { - ExceptionFactory::raiseException( MVIA_FUNCTION, __LINE__, static_cast( result ), "Failed to create interface configuration entry" ); + return DMR_FEATURE_NOT_AVAILABLE; } - ComponentLocator locator( hObj(), "Interfaces" ); - return PropertyIInterfaceEnumerationBehaviour( locator.findComponent( interfaceID ) ); - } - /// \brief Deletes an interface configuration entry from this producers configuration. - /** - * \note If no entry for the specified interface can be found an exception will be thrown. - */ - void deleteProducerInterfaceConfigurationEntry( - /// [in] The exact interface ID of the producers list of reported interfaces to delete the configuration entry for. - const std::string& interfaceID ) - { - Component it( hObj() ); - std::vector parameters; - parameters.push_back( it.name() ); - parameters.push_back( interfaceID ); - const int result = deleteProducerInterfaceConfigurationEntry_.call( parameters ); - if( result != DMR_NO_ERROR ) + + DeviceComponentLocator locator( pDev, dltSystemSettings ); + Method verifyFirmwareChecksum; + locator.bindComponent( verifyFirmwareChecksum, "VerifyDeviceFirmwareChecksum@i" ); + if( !verifyFirmwareChecksum.isValid() ) { - ExceptionFactory::raiseException( MVIA_FUNCTION, __LINE__, static_cast( result ), "Failed to delete interface configuration entry" ); + pDev->close(); + return DMR_FEATURE_NOT_AVAILABLE; } + + PropertyS firmwareUpdateFileName; + PropertyS firmwareUpdateStatusMessage; + locator.bindComponent( firmwareUpdateFileName, "FileName" ); + locator.bindComponent( firmwareUpdateStatusMessage, "UpdateStatusMessage" ); + firmwareUpdateFileName.writeS( archivePath ); + const TDMR_ERROR returnVal = static_cast( verifyFirmwareChecksum.call() ); + if( pStatusMessage && firmwareUpdateStatusMessage.isValid() ) + { + *pStatusMessage = firmwareUpdateStatusMessage.read(); + } + pDev->close(); + return returnVal; } - /// \brief Returns the name of the GenTL producer associated with this configuration object. + // *INDENT-OFF* + PYTHON_OR_JAVA_ONLY( %immutable; ) + // *INDENT-ON* + /// \brief An enumerated integer property containing a list of available firmware versions. /** - * \return The name of the GenTL producer associated with this configuration object. + * \note + * This feature currently is only available for \b mvBlueFOX devices since here the firmware is part of the driver library. + * So no additional archive is needed, but the desired firmware version to upload into the device's non-volatile memory can + * be selected by writing to this property before calling the \b mvIMPACT::acquire::FirmwareUpdater::update function. */ - std::string getProducerName( void ) const - { - return Component( hObj() ).name(); - } + PropertyI firmwareVersionToUpload; + // *INDENT-OFF* + PYTHON_OR_JAVA_ONLY( %mutable; ) + // *INDENT-OFF* }; +namespace GenICam +{ + +class GenTLDriverConfigurator; + //----------------------------------------------------------------------------- -/// \brief A class that contains items to configure the behaviour of the GenICam GenTL driver stack. +/// \brief A class that contains items to configure the behaviour of the %GenICam GenTL driver stack. /** - * This class contains items e.g. to configure the enumeration behaviour of third party GenTL producer libraries. - * - * Since version 2.32.0 mvIMPACT Acquire has built-in support for third party GenTL producer libraries. - * The latest version of the GenTL specification can be found here: https://www.emva.org/standards-technology/genicam/. - * - * Detection of GenTL producer libraries works by evaluating the \c GENICAM_GENTL32_PATH environment variable - * within a 32-bit process or the \c GENICAM_GENTL64_PATH variable in a 64-bit process. This variable contains - * a list of directories that might potentially contain GenTL producer libraries. These libraries use a - * the file extension \c .cti and export a defined interface. - * - * All libraries that fulfill these requirements will be loaded into the mvIMPACT Acquire process. By default - * all these libraries will then also be enumerated for connected/bound devices. The only exception will be - * if a third party producer is found that reports an interface supporting the same technology as one delivered - * by mvIMPACT Acquire (e.g. for the GigE Vision or USB3 Vision standard). These interfaces by default will not - * be enumerated. - * - * The purpose of this class now is to allow an application to modify this behaviour. This might be beneficial for - * several reasons: - * - * - a certain third party library on the system has negative impact on the overall stability of the process - * - there are so many third party libraries on the system that enumeration takes a very long time but the application does not want to access devices reported by these third party libraries - * - multiple producers support the same device resulting in very long and confusing device lists - * - etc. - * - * To exclude a certain producer from enumeration first a mvIMPACT::acquire::GenICam::GenTLProducerConfiguration entry for that - * producer must be created and then the \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration::enumerationEnable - * property for this producer must be set to \b mvIMPACT::acquire::bFalse. - * - * \if DOXYGEN_CPP_DOCUMENTATION - * \code - * // Assuming a certain 'ACME.producer.cti' producer has been found somewhere in the GENICAM_GENTLXY_PATH. - * GenTLDriverConfigurator driverConfigurator; - * if( !driverConfigurator.hasProducerConfiguration( "ACME.producer.cti" ) ) - * { - * driverConfigurator.createProducerConfiguration( "ACME.producer.cti" ); // the 'enumerationEnable' will be false by default! - * } - * else - * { - * driverConfigurator.getProducerConfiguration( "ACME.producer.cti" ).enumerationEnable.write( bFalse ); - * } - * \endcode - * \elseif DOXYGEN_JAVA_DOCUMENTATION - * \code - * // Assuming a certain 'ACME.producer.cti' producer has been found somewhere in the GENICAM_GENTLXY_PATH. - * GenTLDriverConfigurator driverConfigurator = new GenTLDriverConfigurator(); - * if( !driverConfigurator.hasProducerConfiguration( "ACME.producer.cti" ) ) - * { - * driverConfigurator.createProducerConfiguration( "ACME.producer.cti" ); // the 'enumerationEnable' will be false by default! - * } - * else - * { - * driverConfigurator.getProducerConfiguration( "ACME.producer.cti" ).enumerationEnable.write( TBoolean.bFalse ); - * } - * \endcode - * \elseif DOXYGEN_PYTHON_DOCUMENTATION - * \code - * # Assuming a certain 'ACME.producer.cti' producer has been found somewhere in the GENICAM_GENTLXY_PATH. - * driverConfigurator = acquire.GenTLDriverConfigurator() - * if driverConfigurator.hasProducerConfiguration("ACME.producer.cti") == False: - * driverConfigurator.createProducerConfiguration("ACME.producer.cti") # the 'enumerationEnable' will be false by default! - * else: - * driverConfigurator.getProducerConfiguration("ACME.producer.cti").enumerationEnable.write(acquire.bFalse) - * \endcode - * \endif - * - * To exclude a certain interface from a producer from enumeration an \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration::enumerationEnable - * property for this producer can be set to \b mvIMPACT::acquire::bFalse and the interface enumeration behaviour should be set to - * \b mvIMPACT::acquire::iebForceEnumerate. + * This class contains items to configure the enumeration behaviour of a third party GenTL producer library. * - * \if DOXYGEN_CPP_DOCUMENTATION - * \code - * // Assuming a certain 'ACME.producer.cti' producer has been found somewhere in the GENICAM_GENTLXY_PATH. - * GenTLDriverConfigurator driverConfigurator; - * GenTLProducerConfiguration configuration( driverConfigurator.hasProducerConfiguration( "ACME.producer.cti" ) ? driverConfigurator.getProducerConfiguration( "ACME.producer.cti" ) : driverConfigurator.createProducerConfiguration( "ACME.producer.cti" ) ); - * configuration.enumerationEnable.write( bTrue ); // switch on ALL interfaces... - * configuration.createProducerInterfaceConfigurationEntry( "ACME.interface0.ID" ).write( iebForceIgnore ); // ... except this one - * \endcode - * \elseif DOXYGEN_JAVA_DOCUMENTATION - * \code - * // Assuming a certain 'ACME.producer.cti' producer has been found somewhere in the GENICAM_GENTLXY_PATH. - * GenTLDriverConfigurator driverConfigurator = new GenTLDriverConfigurator(); - * GenTLProducerConfiguration configuration = null; - * if( driverConfigurator.hasProducerConfiguration( "ACME.producer.cti" ) ) - * { - * configuration = driverConfigurator.getProducerConfiguration( "ACME.producer.cti" ); - * } - * else - * { - * configuration = driverConfigurator.createProducerConfiguration( "ACME.producer.cti" ); - * } - * configuration.getEnumerationEnable().write( TBoolean.bTrue ); // switch on ALL interfaces... - * configuration.createProducerInterfaceConfigurationEntry( "ACME.interface0.ID" ).write( TInterfaceEnumerationBehaviour.iebForceIgnore ); // ... except this one - * \endcode - * \elseif DOXYGEN_PYTHON_DOCUMENTATION - * \code - * # Assuming a certain 'ACME.producer.cti' producer has been found somewhere in the GENICAM_GENTLXY_PATH. - * driverConfigurator = acquire.GenTLDriverConfigurator() - * GenTLProducerConfiguration configuration = None - * if driverConfigurator.hasProducerConfiguration("ACME.producer.cti"): - * configuration = driverConfigurator.getProducerConfiguration("ACME.producer.cti") - * else: - * configuration = driverConfigurator.createProducerConfiguration("ACME.producer.cti") - * configuration.enumerationEnable.write(acquire.bTrue) # switch on ALL interfaces... - * configuration.createProducerInterfaceConfigurationEntry("ACME.interface0.ID").write(acquire.iebForceIgnore) # ... except this one - * \endcode - * \endif +* \note + * Instances of this class cannot be constructed directly. To get access the functions \b mvIMPACT::acquire::GenICam::GenTLDriverConfigurator::createProducerConfiguration, + * \b mvIMPACT::acquire::GenICam::GenTLDriverConfigurator::getProducerConfigurations + * or \b mvIMPACT::acquire::GenICam::GenTLDriverConfigurator::getProducerConfiguration must be used. + * must be used. * - * The same thing can be done the other way round: + * For a comprehensive usage example see the description of the class \b mvIMPACT::acquire::GenICam::GenTLDriverConfigurator. * - * \if DOXYGEN_CPP_DOCUMENTATION - * \code - * // Assuming a certain 'ACME.producer.cti' producer has been found somewhere in the GENICAM_GENTLXY_PATH and only a certain interface shall be enumerated. - * GenTLDriverConfigurator driverConfigurator; - * GenTLProducerConfiguration configuration( driverConfigurator.hasProducerConfiguration( "ACME.producer.cti" ) ? driverConfigurator.getProducerConfiguration( "ACME.producer.cti" ) : driverConfigurator.createProducerConfiguration( "ACME.producer.cti" ) ); - * configuration.enumerationEnable.write( bFalse ); // switch off ALL interfaces... - * configuration.createProducerInterfaceConfigurationEntry( "ACME.interface0.ID" ).write( iebForceEnumerate ); // ... except this one - * \endcode - * \elseif DOXYGEN_JAVA_DOCUMENTATION - * \code - * GenTLDriverConfigurator driverConfigurator = new GenTLDriverConfigurator(); - * GenTLProducerConfiguration configuration = null; - * if( driverConfigurator.hasProducerConfiguration( "ACME.producer.cti" ) ) - * { - * configuration = driverConfigurator.getProducerConfiguration( "ACME.producer.cti" ); - * } - * else - * { - * configuration = driverConfigurator.createProducerConfiguration( "ACME.producer.cti" ); - * } - * configuration.getEnumerationEnable().write( TBoolean.bFalse ); // switch on ALL interfaces... - * configuration.createProducerInterfaceConfigurationEntry( "ACME.interface0.ID" ).write( TInterfaceEnumerationBehaviour.iebForceEnumerate ); // ... except this one - * \endcode - * \elseif DOXYGEN_PYTHON_DOCUMENTATION - * \code - * # Assuming a certain 'ACME.producer.cti' producer has been found somewhere in the GENICAM_GENTLXY_PATH. - * driverConfigurator = acquire.GenTLDriverConfigurator() - * GenTLProducerConfiguration configuration = None - * if driverConfigurator.hasProducerConfiguration("ACME.producer.cti"): - * configuration = driverConfigurator.getProducerConfiguration("ACME.producer.cti") - * else: - * configuration = driverConfigurator.createProducerConfiguration("ACME.producer.cti") - * configuration.enumerationEnable.write(acquire.bFalse) # switch on ALL interfaces... - * configuration.createProducerInterfaceConfigurationEntry("ACME.interface0.ID").write(acquire.iebForceEnumerate) # ... except this one - * \endcode - * \endif * \sa * \ref CommonCases_mvGenTLConsumerSetup * * \since 2.34.0 * \ingroup GenICamInterfaceProducer */ -class GenTLDriverConfigurator : public mvIMPACT::acquire::ComponentCollection +class GenTLProducerConfiguration : public mvIMPACT::acquire::ComponentCollection //----------------------------------------------------------------------------- { -private: - Method createProducerConfigurationEntry_; - Method deleteProducerConfigurationEntry_; + friend class GenTLDriverConfigurator; + Method createProducerInterfaceConfigurationEntry_; + Method deleteProducerInterfaceConfigurationEntry_; - void bindProperties( void ) + void bindProperties( HLIST hList ) { - HLIST hList; - TDMR_ERROR result; - if( ( result = DMR_FindList( INVALID_ID, "mvGenTLConsumer", dmltDeviceDriverLib, 0, &hList ) ) != DMR_NO_ERROR ) { - ExceptionFactory::raiseException( MVIA_FUNCTION, __LINE__, result, "Couldn't find list 'mvGenTLConsumer'(type: dmltDeviceDriverLib)" ); + Component it( hList ); + ComponentLocator locator( it.parent().parent().hObj() ); + locator.bindComponent( createProducerInterfaceConfigurationEntry_, "CreateProducerInterfaceConfigurationEntry@iss" ); + locator.bindComponent( deleteProducerInterfaceConfigurationEntry_, "DeleteProducerInterfaceConfigurationEntry@iss" ); } - mvIMPACT::acquire::ComponentLocator locator( hList, "GenTL" ); - hList = locator.findComponent( "ProducersConfiguration", 0, 1 ); - if( hList == INVALID_ID ) { - ExceptionFactory::raiseException( MVIA_FUNCTION, __LINE__, DMR_NEWER_LIBRARY_REQUIRED, "Couldn't find list 'ProducersConfiguration'. An update of the GenTL Acquire package might fix this!" ); + ComponentLocator locator( hList ); + locator.bindComponent( enumerationEnable, "EnumerationEnable" ); } - locator.bindComponent( masterEnumerationBehaviour, "MasterEnumerationBehaviour" ); - locator.bindComponent( createProducerConfigurationEntry_, "CreateProducerConfigurationEntry@is" ); - locator.bindComponent( deleteProducerConfigurationEntry_, "DeleteProducerConfigurationEntry@is" ); - locator.bindComponent( createProducerInterfaceConfigurationEntry_, "CreateProducerInterfaceConfigurationEntry@iss" ); - locator.bindSearchBase( hList ); - m_hRoot = locator.searchbase_id(); } -public: - /// \brief Constructs a new mvIMPACT::acquire::GenICam::GenTLDriverConfigurator object. - explicit GenTLDriverConfigurator() : mvIMPACT::acquire::ComponentCollection( INVALID_ID ), - createProducerConfigurationEntry_(), deleteProducerConfigurationEntry_(), - createProducerInterfaceConfigurationEntry_(), - masterEnumerationBehaviour() + explicit GenTLProducerConfiguration( HLIST hList ) : mvIMPACT::acquire::ComponentCollection( hList ), + createProducerInterfaceConfigurationEntry_(), deleteProducerInterfaceConfigurationEntry_(), + enumerationEnable() { - bindProperties(); + bindProperties( hList ); } - /// \brief Constructs a new \b mvIMPACT::acquire::GenICam::GenTLDriverConfigurator from an existing one. - GenTLDriverConfigurator( - /// [in] A constant reference to the \b mvIMPACT::acquire::GenICam::GenTLDriverConfigurator object, this object shall be created from - const GenTLDriverConfigurator& src ) : ComponentCollection( src.hObj() ), - createProducerConfigurationEntry_( src.createProducerConfigurationEntry_ ), - deleteProducerConfigurationEntry_( src.deleteProducerConfigurationEntry_ ), +public: + /// \brief Constructs a new \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration from an existing one. + GenTLProducerConfiguration( + /// [in] A constant reference to the \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration object, this object shall be created from + const GenTLProducerConfiguration& src ) : ComponentCollection( src.hObj() ), createProducerInterfaceConfigurationEntry_( src.createProducerInterfaceConfigurationEntry_ ), - masterEnumerationBehaviour( src.masterEnumerationBehaviour ) {} - /// \brief Allows assignments of \b mvIMPACT::acquire::GenICam::GenTLDriverConfigurator objects. - GenTLDriverConfigurator& operator=( const GenTLDriverConfigurator& rhs ) + deleteProducerInterfaceConfigurationEntry_( src.deleteProducerInterfaceConfigurationEntry_ ), + enumerationEnable( src.enumerationEnable ) {} + /// \brief Allows assignments of \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration objects. + GenTLProducerConfiguration& operator=( const GenTLProducerConfiguration& rhs ) { if( this != &rhs ) { ComponentCollection::operator=( rhs ); - bindProperties(); + bindProperties( rhs.hObj() ); } return *this; } // *INDENT-OFF* PYTHON_OR_JAVA_ONLY( %immutable; ) // *INDENT-ON* - /// \brief An enumerated integer property defining the master enumeration mode for all GenTL producer detected in the current session. + /// \brief An enumerated integer property defining the enumeration behavior this particular GenTL producer. /** - * Valid values for this property are defined by the enumeration \b mvIMPACT::acquire::TInterfaceEnumerationBehaviour. + * If this property is set to \b mvIMPACT::acquire::bTrue ALL interfaces of this producer will be enumerated + * unless a specific interface enumeration behaviour has been set to \b mvIMPACT::acquire::iebForceIgnore. + * + * Valid values for this property are defined by the enumeration \b mvIMPACT::acquire::TBoolean. */ - PropertyIInterfaceEnumerationBehaviour masterEnumerationBehaviour; + PropertyIBoolean enumerationEnable; // *INDENT-OFF* PYTHON_OR_JAVA_ONLY( %mutable; ) // *INDENT-ON* - /// \brief Creates a new \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration object for the desired interface reported by the specified producer. + /// \brief Returns the interface enumeration behaviour property for the specified interface ID for this particular GenTL producer. /** - * Calling this function will creates a new \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration object for the desired interface - * reported by the specified producer. * - * \note If a configuration entry for the specified interface does already exist an exception will be thrown. + * Valid values for this property are defined by the enumeration \b mvIMPACT::acquire::TInterfaceEnumerationBehaviour. + * + * \note If no entry for the specified interface ID exists an exception will be thrown. + * + * \return The enumeration behaviour configuration property for the specified interface */ - GenTLProducerConfiguration createProducerConfiguration( - /// [in] The exact name of the producer library without the path to create the entry for. - const std::string& producerName, - /// [in] The interface ID to create the configuration entry for. - const std::string& interfaceID = "" ) + PropertyIInterfaceEnumerationBehaviour getInterfaceEnumerationBehaviour( + /// [in] The interface ID previously passed e.g. to the \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration::createProducerInterfaceConfigurationEntry function. + const std::string& interfaceID ) const { - int result = DMR_NO_ERROR; - if( interfaceID.empty() ) - { - result = createProducerConfigurationEntry_.call( producerName ); - } - else - { - std::vector parameters; - parameters.push_back( producerName ); - parameters.push_back( interfaceID ); - result = createProducerInterfaceConfigurationEntry_.call( parameters ); - } - if( result != DMR_NO_ERROR ) + ComponentLocator locator( hObj(), "Interfaces" ); + const HOBJ hObj = locator.findComponent( interfaceID, 0, 1 ); + if( hObj == INVALID_ID ) { - ExceptionFactory::raiseException( MVIA_FUNCTION, __LINE__, static_cast( result ), "Failed to create entry '" + producerName + "'" + ( interfaceID.empty() ? "" : " with interface entry '" + interfaceID + "'" ) ); + ExceptionFactory::raiseException( MVIA_FUNCTION, __LINE__, static_cast( PROPHANDLING_COMPONENT_NOT_FOUND ), "Couldn't find 'InterfaceEnumerationBehaviour' for interface '" + interfaceID + "' of producer '" + getProducerName() + "'" ); } - ComponentLocator locator( hObj(), "ConfigurationData" ); - return GenTLProducerConfiguration( locator.findComponent( producerName, 0, 1 ) ); + return PropertyIInterfaceEnumerationBehaviour( hObj ); } - /// \brief Deletes a \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration objects. + /// \brief Returns a map containing all the configured interface IDs and their corresponding enumeration behaviour properties for this particular GenTL producer. /** - * Calling this function will delete the \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration object for the referenced producer. + * The returned map will only contain interface IDs which have explicitly been configured (e.g. by a previous call to + * \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration::createProducerInterfaceConfigurationEntry. Certain third party + * interfaces might also have an entry in this map (e.g. if there is a Balluff GenICam GenTL producer supporting the same technology present + * on the system). * - * \note If no entry for the specified producer can be found an exception will be thrown. + * Valid values for the properties are defined by the enumeration \b mvIMPACT::acquire::TInterfaceEnumerationBehaviour. + * + * \return A map containing all the configured interface IDs and their corresponding enumeration behaviour properties for this particular GenTL producer */ - void deleteProducerConfiguration( - /// [in] The exact name of the producer library without the path to delete the entry from. - const std::string& producerName ) + std::map getInterfaceEnumerationBehaviours( void ) const { - const int result = deleteProducerConfigurationEntry_.call( producerName ); - if( result != DMR_NO_ERROR ) + std::map m; + ComponentLocator locator( hObj(), "Interfaces" ); + Component it( locator.searchbase_id() ); + it = it.firstChild(); + while( it.isValid() ) { - ExceptionFactory::raiseException( MVIA_FUNCTION, __LINE__, static_cast( result ), "Failed to delete entry '" + producerName + "'" ); + m.insert( make_pair( it.name(), PropertyIInterfaceEnumerationBehaviour( it.hObj() ) ) ); + it++; } + return m; } - /// \brief Deletes all \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration objects. + /// \brief Creates a new interface configuration entry for this producers configuration. /** - * Calling this function will result in all \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration objects to be deleted. When the next - * mvIMPACT Acquire process will be started after shutting down the current one all producer libraries found on the system will be processed. By default only interfaces reporting - * types/technologies (e.g. GigE Vision) also supported by MATRIX VISION will be ignored (will not enumerate devices) then. + * Usually the parameter passed to this function will be one of the interface IDs of the producers list of reported interfaces + * in order to configure this particular interface. However it can also be an identifier for an interface not yet connected to the + * system or not yet available to the producer. No internal checks are performed regarding the validity of the given interface ID. + * + * \note If an entry with the same interface ID already exists an exception will be thrown. */ - void deleteAllProducerConfigurations( void ) + PropertyIInterfaceEnumerationBehaviour createProducerInterfaceConfigurationEntry( + /// [in] The interface ID to create the configuration entry for. + const std::string& interfaceID ) { - std::vector data( getProducerConfigurations() ); - std::vector::size_type cnt = data.size(); - for( std::vector::size_type i = 0; i < cnt; i++ ) + Component it( hObj() ); + std::vector parameters; + parameters.push_back( it.name() ); + parameters.push_back( interfaceID ); + const int result = createProducerInterfaceConfigurationEntry_.call( parameters ); + if( result != DMR_NO_ERROR ) { - deleteProducerConfiguration( data[i].getProducerName() ); + ExceptionFactory::raiseException( MVIA_FUNCTION, __LINE__, static_cast( result ), "Failed to create interface configuration entry" ); } + ComponentLocator locator( hObj(), "Interfaces" ); + return PropertyIInterfaceEnumerationBehaviour( locator.findComponent( interfaceID ) ); } - /// \brief Checks if a certain producer library has been associated with a \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration. - /** - * \return - * - true if a \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration is currently associated with the referenced producer library - * - false otherwise - */ - bool hasProducerConfiguration( - /// [in] The exact name of the producer library without the path. - const std::string& producerName ) const - { - ComponentLocator locator( hObj(), "ConfigurationData" ); - return locator.findComponent( producerName, 0, 1 ) != INVALID_ID; - } - /// \brief Returns the \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration associated with the referenced producer library. + /// \brief Deletes an interface configuration entry from this producers configuration. /** - * - * \note If no entry for the specified producer can be found an exception will be thrown. - * - * \return The \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration associated with the referenced producer library. + * \note If no entry for the specified interface can be found an exception will be thrown. */ - GenTLProducerConfiguration getProducerConfiguration( - /// [in] The exact name of the producer library without the path. - const std::string& producerName ) const + void deleteProducerInterfaceConfigurationEntry( + /// [in] The exact interface ID of the producers list of reported interfaces to delete the configuration entry for. + const std::string& interfaceID ) { - ComponentLocator locator( hObj(), "ConfigurationData" ); - const HLIST hList = locator.findComponent( producerName, 0, 1 ); - if( hList == INVALID_ID ) + Component it( hObj() ); + std::vector parameters; + parameters.push_back( it.name() ); + parameters.push_back( interfaceID ); + const int result = deleteProducerInterfaceConfigurationEntry_.call( parameters ); + if( result != DMR_NO_ERROR ) { - ExceptionFactory::raiseException( MVIA_FUNCTION, __LINE__, static_cast( PROPHANDLING_COMPONENT_NOT_FOUND ), "Couldn't find configuration for producer '" + producerName + "'" ); + ExceptionFactory::raiseException( MVIA_FUNCTION, __LINE__, static_cast( result ), "Failed to delete interface configuration entry" ); } - return GenTLProducerConfiguration( hList ); } - /// \brief Returns a vector containing all \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration objects currently defined. + /// \brief Returns the name of the GenTL producer associated with this configuration object. /** - * \return A vector containing all \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration objects currently defined. + * \return The name of the GenTL producer associated with this configuration object. */ - std::vector getProducerConfigurations( void ) const + std::string getProducerName( void ) const { - ComponentLocator locator( hObj(), "ConfigurationData" ); - Component it( locator.searchbase_id() ); - it = it.firstChild(); - std::vector data; - while( it.isValid() ) - { - data.push_back( GenTLProducerConfiguration( it.hObj() ) ); - it++; - } - return data; + return Component( hObj() ).name(); } }; -} // namespace GenICam - -/// \namespace mvIMPACT::acquire::labs This namespace contains classes and functions belonging to the general part of this SDK that -/// are not yet final and might change in the future without further notice. Yet still we think code within this namespace -/// might prove useful thus we encourage you to use it if beneficial for your application. However be prepared to apply changes when needed. -/// Feedback that helps to improve or finalize code from this namespace will be highly appreciated! A migration guide will be provided and we will -/// perform changes only if they make sense and improve the code. -namespace labs -{ - //----------------------------------------------------------------------------- -/// \brief A class to create compressed video stream from images captured or loaded using the %mvIMPACT Acquire API. +/// \brief A class that contains items to configure the behaviour of the %GenICam GenTL driver stack. /** - * This class heavily depends on the FFmpeg project (see \ref LegalNotice_UsedThirdPartySoftware_FFmpeg). Without the - * libraries belonging to this project being present on the target system video streams cannot be created. + * This class contains items e.g. to configure the enumeration behaviour of third party GenTL producer libraries. * - * Because of what is stated in the above section %mvIMPACT Acquire is \b NOT shipped with the FFmpeg binaries required to use - * this class! + * Since version 2.32.0 Impact Acquire has built-in support for third party GenTL producer libraries. + * The latest version of the GenTL specification can be found here: https://www.emva.org/standards-technology/genicam/. * - * On Windows the \a FFmpeg-share package matching the platform the application shall run with (32- or 64-bit) is needed. This - * can either be extracted into the installation folder of %mvIMPACT Acquire e.g. into \$(MVIMPACT_ACQUIRE_DIR)/Toolkits/ffmpeg-4.2.2-win64-shared or - * \$(MVIMPACT_ACQUIRE_DIR)/Toolkits/ffmpeg-4.2.2-win32-shared (Works only for this versions) \b OR at the location pointed to by \b MVIMPACT_ACQUIRE_FFMPEG_DIR (see below) - * \b OR anywhere into the systems search path. + * Detection of GenTL producer libraries works by evaluating the \c GENICAM_GENTL32_PATH environment variable + * within a 32-bit process or the \c GENICAM_GENTL64_PATH variable in a 64-bit process. This variable contains + * a list of directories that might potentially contain GenTL producer libraries. These libraries use a + * the file extension \c .cti and export a defined interface. * - * On Linux the package \a ffmpeg must be installed and if e.g. H.264 support is needed the libavcodec-extra package as well. + * All libraries that fulfill these requirements will be loaded into the Impact Acquire process. By default + * all these libraries will then also be enumerated for connected/bound devices. The only exception will be + * if a third party producer is found that reports an interface supporting the same technology as one delivered + * by Impact Acquire (e.g. for the GigE Vision or USB3 Vision standard). These interfaces by default will not + * be enumerated. * - * \attention Please carefully read and understand the legal implications coming with the use of FFmpeg in a commercial product: http://ffmpeg.org/legal.html + * The purpose of this class now is to allow an application to modify this behaviour. This might be beneficial for + * several reasons: * - * %mvIMPACT Acquire is capable of communicating with FFmpeg 4.x right now. This means that the following libraries will be recognized: - * - libavcodec-58, libavformat-58 and libavutil-56 (FFmpeg 4.0 was released on 20.04.2018) + * - a certain third party library on the system has negative impact on the overall stability of the process + * - there are so many third party libraries on the system that enumeration takes a very long time but the application does not want to access devices reported by these third party libraries + * - multiple producers support the same device resulting in very long and confusing device lists + * - etc. + * + * To exclude a certain producer from enumeration first an mvIMPACT::acquire::GenICam::GenTLProducerConfiguration entry for that + * producer must be created and then the \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration::enumerationEnable + * property for this producer must be set to \b mvIMPACT::acquire::bFalse. + * + * \if DOXYGEN_CPP_DOCUMENTATION + * \code + * // Assuming a certain 'ACME.producer.cti' producer has been found somewhere in the GENICAM_GENTLXY_PATH. + * GenTLDriverConfigurator driverConfigurator; + * if( !driverConfigurator.hasProducerConfiguration( "ACME.producer.cti" ) ) + * { + * driverConfigurator.createProducerConfiguration( "ACME.producer.cti" ); // the 'enumerationEnable' will be false by default! + * } + * else + * { + * driverConfigurator.getProducerConfiguration( "ACME.producer.cti" ).enumerationEnable.write( bFalse ); + * } + * \endcode + * \elseif DOXYGEN_JAVA_DOCUMENTATION + * \code + * // Assuming a certain 'ACME.producer.cti' producer has been found somewhere in the GENICAM_GENTLXY_PATH. + * GenTLDriverConfigurator driverConfigurator = new GenTLDriverConfigurator(); + * if( !driverConfigurator.hasProducerConfiguration( "ACME.producer.cti" ) ) + * { + * driverConfigurator.createProducerConfiguration( "ACME.producer.cti" ); // the 'enumerationEnable' will be false by default! + * } + * else + * { + * driverConfigurator.getProducerConfiguration( "ACME.producer.cti" ).enumerationEnable.write( TBoolean.bFalse ); + * } + * \endcode + * \elseif DOXYGEN_PYTHON_DOCUMENTATION + * \code + * # Assuming a certain 'ACME.producer.cti' producer has been found somewhere in the GENICAM_GENTLXY_PATH. + * driverConfigurator = acquire.GenTLDriverConfigurator() + * if driverConfigurator.hasProducerConfiguration("ACME.producer.cti") == False: + * driverConfigurator.createProducerConfiguration("ACME.producer.cti") # the 'enumerationEnable' will be false by default! + * else: + * driverConfigurator.getProducerConfiguration("ACME.producer.cti").enumerationEnable.write(acquire.bFalse) + * \endcode + * \endif + * + * To exclude a certain interface from a producer from enumeration an \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration::enumerationEnable + * property for this producer can be set to \b mvIMPACT::acquire::bFalse and the interface enumeration behaviour should be set to + * \b mvIMPACT::acquire::iebForceEnumerate. + * + * \if DOXYGEN_CPP_DOCUMENTATION + * \code + * // Assuming a certain 'ACME.producer.cti' producer has been found somewhere in the GENICAM_GENTLXY_PATH. + * GenTLDriverConfigurator driverConfigurator; + * GenTLProducerConfiguration configuration( driverConfigurator.hasProducerConfiguration( "ACME.producer.cti" ) ? driverConfigurator.getProducerConfiguration( "ACME.producer.cti" ) : driverConfigurator.createProducerConfiguration( "ACME.producer.cti" ) ); + * configuration.enumerationEnable.write( bTrue ); // switch on ALL interfaces... + * configuration.createProducerInterfaceConfigurationEntry( "ACME.interface0.ID" ).write( iebForceIgnore ); // ... except this one + * \endcode + * \elseif DOXYGEN_JAVA_DOCUMENTATION + * \code + * // Assuming a certain 'ACME.producer.cti' producer has been found somewhere in the GENICAM_GENTLXY_PATH. + * GenTLDriverConfigurator driverConfigurator = new GenTLDriverConfigurator(); + * GenTLProducerConfiguration configuration = null; + * if( driverConfigurator.hasProducerConfiguration( "ACME.producer.cti" ) ) + * { + * configuration = driverConfigurator.getProducerConfiguration( "ACME.producer.cti" ); + * } + * else + * { + * configuration = driverConfigurator.createProducerConfiguration( "ACME.producer.cti" ); + * } + * configuration.getEnumerationEnable().write( TBoolean.bTrue ); // switch on ALL interfaces... + * configuration.createProducerInterfaceConfigurationEntry( "ACME.interface0.ID" ).write( TInterfaceEnumerationBehaviour.iebForceIgnore ); // ... except this one + * \endcode + * \elseif DOXYGEN_PYTHON_DOCUMENTATION + * \code + * # Assuming a certain 'ACME.producer.cti' producer has been found somewhere in the GENICAM_GENTLXY_PATH. + * driverConfigurator = acquire.GenTLDriverConfigurator() + * GenTLProducerConfiguration configuration = None + * if driverConfigurator.hasProducerConfiguration("ACME.producer.cti"): + * configuration = driverConfigurator.getProducerConfiguration("ACME.producer.cti") + * else: + * configuration = driverConfigurator.createProducerConfiguration("ACME.producer.cti") + * configuration.enumerationEnable.write(acquire.bTrue) # switch on ALL interfaces... + * configuration.createProducerInterfaceConfigurationEntry("ACME.interface0.ID").write(acquire.iebForceIgnore) # ... except this one + * \endcode + * \endif * - * In order to load the FFmpeg libraries - * from a custom location the environment variable \b MVIMPACT_ACQUIRE_FFMPEG_DIR can be defined before creating the first - * \b mvIMPACT::acquire::labs::VideoStream instance after loading the mvDeviceManager library into the current processes address space. - * Without this environment variable only the systems default search path will be used to locate it and (Windows only) the \a Toolkits - * folder of the installation directory. This is how the search algorithm will operate: + * The same thing can be done the other way round: * + * \if DOXYGEN_CPP_DOCUMENTATION * \code - * if isEnvironmentVariableDefined( MVIMPACT_ACQUIRE_FFMPEG_DIR ) - * if tryToLoadFFmpegVersion4Succeeded - * return - * if tryToLoadFFmpegVersion3Succeeded - * return - * if isWindowsSystem - * if tryToLoadFFmpegVersionFromToolkits4Succeeded - * return - * if tryToLoadFFmpegVersion4Succeeded - * return - * if tryToLoadFFmpegVersion3Succeeded - * return - * ReportError + * // Assuming a certain 'ACME.producer.cti' producer has been found somewhere in the GENICAM_GENTLXY_PATH and only a certain interface shall be enumerated. + * GenTLDriverConfigurator driverConfigurator; + * GenTLProducerConfiguration configuration( driverConfigurator.hasProducerConfiguration( "ACME.producer.cti" ) ? driverConfigurator.getProducerConfiguration( "ACME.producer.cti" ) : driverConfigurator.createProducerConfiguration( "ACME.producer.cti" ) ); + * configuration.enumerationEnable.write( bFalse ); // switch off ALL interfaces... + * configuration.createProducerInterfaceConfigurationEntry( "ACME.interface0.ID" ).write( iebForceEnumerate ); // ... except this one * \endcode + * \elseif DOXYGEN_JAVA_DOCUMENTATION + * \code + * GenTLDriverConfigurator driverConfigurator = new GenTLDriverConfigurator(); + * GenTLProducerConfiguration configuration = null; + * if( driverConfigurator.hasProducerConfiguration( "ACME.producer.cti" ) ) + * { + * configuration = driverConfigurator.getProducerConfiguration( "ACME.producer.cti" ); + * } + * else + * { + * configuration = driverConfigurator.createProducerConfiguration( "ACME.producer.cti" ); + * } + * configuration.getEnumerationEnable().write( TBoolean.bFalse ); // switch on ALL interfaces... + * configuration.createProducerInterfaceConfigurationEntry( "ACME.interface0.ID" ).write( TInterfaceEnumerationBehaviour.iebForceEnumerate ); // ... except this one + * \endcode + * \elseif DOXYGEN_PYTHON_DOCUMENTATION + * \code + * # Assuming a certain 'ACME.producer.cti' producer has been found somewhere in the GENICAM_GENTLXY_PATH. + * driverConfigurator = acquire.GenTLDriverConfigurator() + * GenTLProducerConfiguration configuration = None + * if driverConfigurator.hasProducerConfiguration("ACME.producer.cti"): + * configuration = driverConfigurator.getProducerConfiguration("ACME.producer.cti") + * else: + * configuration = driverConfigurator.createProducerConfiguration("ACME.producer.cti") + * configuration.enumerationEnable.write(acquire.bFalse) # switch on ALL interfaces... + * configuration.createProducerInterfaceConfigurationEntry("ACME.interface0.ID").write(acquire.iebForceEnumerate) # ... except this one + * \endcode + * \endif + * \sa + * \ref CommonCases_mvGenTLConsumerSetup * - * \note - * Currently video streams can only be created for a limited number of pixel formats. Which codec supports which input formats is described at the corresponding - * \b mvIMPACT::acquire::TVideoCodec value. Make sure to use one of these formats either by setting up your device accordingly or by using - * the \b mvIMPACT::acquire::ImageDestination::pixelFormat property of the \ref Image_Format_Converter. - * - * \attention - * - You have to feed one of the supported pixel formats depending on the video codecs requirements into the stream! The video stream API will NOT perform internal conversion. If you need to convert - * (most likely you will be!) use the \ref Image_Format_Converter to achieve that. It will get the job done! - * - When not providing timestamps together with the images that are fed into the encoder the resulting video stream can still be used, but the playback speed will differ from the acquisition speed then. - * When providing the timestamps coming with the requests the playback speed will resemble exactly the acquisition speed. Most codecs even support variable playback speeds so dynamic changes in the - * frame rate will be reflected during playback. - * \since 2.39.0 - * \ingroup CommonInterface + * \since 2.34.0 + * \ingroup GenICamInterfaceProducer */ -class VideoStream +class GenTLDriverConfigurator : public mvIMPACT::acquire::ComponentCollection //----------------------------------------------------------------------------- { - HDMR_VIDEO_STREAM hStream_; - std::string fileName_; - TVideoCodec videoCodec_; +private: + Method createProducerConfigurationEntry_; + Method deleteProducerConfigurationEntry_; + Method createProducerInterfaceConfigurationEntry_; - void create( const std::string& fileName, const unsigned int imageWidth, const unsigned int imageHeight, const TVideoCodec codec, const unsigned int quality_pc, const unsigned int bitrate ) + void bindProperties( void ) { - const TDMR_ERROR result = DMR_OpenVideoStream( fileName.c_str(), imageWidth, imageHeight, codec, quality_pc, bitrate, &hStream_ ); - if( result != DMR_NO_ERROR ) + HLIST hList; + TDMR_ERROR result; + if( ( result = DMR_FindList( INVALID_ID, "mvGenTLConsumer", dmltDeviceDriverLib, 0, &hList ) ) != DMR_NO_ERROR ) { - ExceptionFactory::raiseException( MVIA_FUNCTION, __LINE__, result ); + ExceptionFactory::raiseException( MVIA_FUNCTION, __LINE__, result, "Couldn't find list 'mvGenTLConsumer'(type: dmltDeviceDriverLib)" ); + } + mvIMPACT::acquire::ComponentLocator locator( hList, "GenTL" ); + hList = locator.findComponent( "ProducersConfiguration", 0, 1 ); + if( hList == INVALID_ID ) + { + ExceptionFactory::raiseException( MVIA_FUNCTION, __LINE__, DMR_NEWER_LIBRARY_REQUIRED, "Couldn't find list 'ProducersConfiguration'. An update of the Impact Acquire package might fix this!" ); } + locator.bindComponent( masterEnumerationBehaviour, "MasterEnumerationBehaviour" ); + locator.bindComponent( createProducerConfigurationEntry_, "CreateProducerConfigurationEntry@is" ); + locator.bindComponent( deleteProducerConfigurationEntry_, "DeleteProducerConfigurationEntry@is" ); + locator.bindComponent( createProducerInterfaceConfigurationEntry_, "CreateProducerInterfaceConfigurationEntry@iss" ); + locator.bindSearchBase( hList ); + m_hRoot = locator.searchbase_id(); } public: -/// \brief Creates a new video stream file. - /** - * \note - * Internally the FFmpeg project (see \ref LegalNotice_UsedThirdPartySoftware_FFmpeg section) is used for this operation. If the corresponding libraries - * cannot be located in one of the supported versions on the host system calling this constructor will raise an exception. - */ - explicit VideoStream( - /// [in] The name or full path of the file to create. The recommended file extensions for files can be found where the - /// \b mvIMPACT::acquire::TVideoCodec enumeration is documented - const std::string& fileName, - /// [in] An image buffer containing the layout of the images that are about to get stored in the stream. This structure can be - /// extracted from a real \b mvIMPACT::acquire::Request object captured previously but \b NOT by calling the - /// \b mvIMPACT::acquire::FunctionInterface::getCurrentCaptureBufferLayout function after setting up the device - /// completely.The latter one will not contain all the information needed for a successful stream creation. You could even create a stream from a list of files e.g. on a hard-disc using the - /// \b mvIMPACT::acquire::ImageBufferDesc constructor accepting a file name. If you want to use the \b mvIMPACT::acquire::Request - /// object obtained from a call to \b mvIMPACT::acquire::FunctionInterface::getCurrentCaptureBufferLayout use the constructor accepting - /// a \b mvIMPACT::acquire::Request pointer! - const ImageBuffer* pBuffer, - /// [in] The codec that shall be used while encoding the images into the stream. - const TVideoCodec codec = vcH264, - /// [in] The quality of the resulting video stream in percent. The higher this value the larger the file will get. This value is only taken into - /// account for the following codecs: \b mvIMPACT::acquire::vcH264, \b mvIMPACT::acquire::vcH265 - const unsigned int quality_pc = 60, - /// [in] The bitrate of the resulting video stream in kBit/s. The higher this value the larger the file will get. This value is only taken into - /// account for the following codecs: \b mvIMPACT::acquire::vcMPEG2. - const unsigned int bitrate = 6000 ) : hStream_( 0 ), fileName_( fileName ), videoCodec_( codec ) - { - create( fileName, pBuffer->iWidth, pBuffer->iHeight, codec, quality_pc, bitrate ); - } - /// \brief Creates a new video stream file. - /** - * \note - * Internally the FFmpeg project (see \ref LegalNotice_UsedThirdPartySoftware_FFmpeg section) is used for this operation. If the corresponding libraries - * cannot be located in one of the supported versions on the host system calling this constructor will raise an exception. - */ - explicit VideoStream( - /// [in] The name or full path of the file to create. The recommended file extensions for files can be found where the - /// \b mvIMPACT::acquire::TVideoCodec enumeration is documented - const std::string& fileName, - /// [in] The input image width in pixels - const unsigned int imageWidth, - /// [in] The input image height in pixels - const unsigned int imageHeight, - /// [in] The codec that shall be used while encoding the images into the stream. - const TVideoCodec codec = vcH264, - /// [in] The quality of the resulting video stream in percent. The higher this value the larger the file will get. This value is only taken into - /// account for the following codecs: \b mvIMPACT::acquire::vcH264, \b mvIMPACT::acquire::vcH265 - const unsigned int quality_pc = 60, - /// [in] The bitrate of the resulting video stream in kBit/s. The higher this value the larger the file will get. This value is only taken into - /// account for the following codecs: \b mvIMPACT::acquire::vcMPEG2. - const unsigned int bitrate = 6000 ) : hStream_( 0 ), fileName_( fileName ), videoCodec_( codec ) - { - create( fileName, imageWidth, imageHeight, codec, quality_pc, bitrate ); - } - /// \brief Creates a new video stream file. - /** - * \note - * Internally the FFmpeg project (see \ref LegalNotice_UsedThirdPartySoftware_FFmpeg section) is used for this operation. If the corresponding libraries - * cannot be located in one of the supported versions on the host system calling this constructor will raise an exception. - */ - explicit VideoStream( - /// [in] The name or full path of the file to create. The recommended file extensions for files can be found where the - /// \b mvIMPACT::acquire::TVideoCodec enumeration is documented. - const std::string& fileName, - /// [in] A \b mvIMPACT::acquire::Request object carrying the image related information that are about to get stored in the stream. This can either be - /// extracted from a real \b mvIMPACT::acquire::Request object captured previously or by calling the - /// \b mvIMPACT::acquire::FunctionInterface::getCurrentCaptureBufferLayout function after setting up the device - /// completely. To create a stream from a list of files e.g. on a hard-disc use the \b mvIMPACT::acquire::labs::VideoStream - /// constructor accepting a \b mvIMPACT::acquire::ImageBufferDesc instead! Create instances of b mvIMPACT::acquire::ImageBufferDesc - /// objects from files call the \b mvIMPACT::acquire::ImageBufferDesc constructor accepting a file name. - const Request* pRequest, - /// [in] The codec that shall be used while encoding the images into the stream. - const TVideoCodec codec = vcH264, - /// [in] The quality of the resulting video stream in percent. The higher this value the larger the file will get. This value is only taken into - /// account for the following codecs: \b mvIMPACT::acquire::vcH264, \b mvIMPACT::acquire::vcH265 - const unsigned int quality_pc = 60, - /// [in] The bitrate of the resulting video stream in kBit/s. The higher this value the larger the file will get. This value is only taken into - /// account for the following codecs: \b mvIMPACT::acquire::vcMPEG2. - const unsigned int bitrate = 6000 ) : hStream_( 0 ), fileName_( fileName ), videoCodec_( codec ) - { - create( fileName, pRequest->imageWidth.read(), pRequest->imageHeight.read(), codec, quality_pc, bitrate ); - } - ~VideoStream() - { - DMR_CloseVideoStream( hStream_ ); - } - /// \brief Returns the file name of this video stream. - /** - * This function returns the file name of this video stream. - * - * \since 2.39.0 - * - * \return The file name of this video stream. - */ - const std::string& getFileName( void ) const - { - return fileName_; - } - /// \brief Returns the codec used by this video stream. - /** - * This function returns the codec used by this video stream. - * - * \since 2.39.0 - * - * \return The codec used by this video stream. - */ - const TVideoCodec& getCodec( void ) const - { - return videoCodec_; - } - /// \brief Returns the a string representation for a video codec. - /** - * This function returns a string representation for a video codec. - * - * \since 2.39.0 - * - * \return A string representation for a video codec. - */ - static std::string getCodecAsString( const TVideoCodec codec ) + /// \brief Constructs a new mvIMPACT::acquire::GenICam::GenTLDriverConfigurator object. + explicit GenTLDriverConfigurator() : mvIMPACT::acquire::ComponentCollection( INVALID_ID ), + createProducerConfigurationEntry_(), deleteProducerConfigurationEntry_(), + createProducerInterfaceConfigurationEntry_(), + masterEnumerationBehaviour() { - switch( codec ) - { - case vcH264: - return "H.264"; - case vcH265: - return "H.265"; - case vcMPEG2: - return "MPEG-2"; - } - return "INVALID VIDEO CODEC"; + bindProperties(); } - /// \brief Returns the codec used by this video stream as a string. - /** - * This function returns the codec used by this video stream as a string. - * - * \since 2.39.0 - * - * \return The codec used by this video stream as a string. - */ - std::string getCodecAsString( void ) const + /// \brief Constructs a new \b mvIMPACT::acquire::GenICam::GenTLDriverConfigurator from an existing one. + GenTLDriverConfigurator( + /// [in] A constant reference to the \b mvIMPACT::acquire::GenICam::GenTLDriverConfigurator object, this object shall be created from + const GenTLDriverConfigurator& src ) : ComponentCollection( src.hObj() ), + createProducerConfigurationEntry_( src.createProducerConfigurationEntry_ ), + deleteProducerConfigurationEntry_( src.deleteProducerConfigurationEntry_ ), + createProducerInterfaceConfigurationEntry_( src.createProducerInterfaceConfigurationEntry_ ), + masterEnumerationBehaviour( src.masterEnumerationBehaviour ) {} + /// \brief Allows assignments of \b mvIMPACT::acquire::GenICam::GenTLDriverConfigurator objects. + GenTLDriverConfigurator& operator=( const GenTLDriverConfigurator& rhs ) { - return getCodecAsString( getCodec() ); + if( this != &rhs ) + { + ComponentCollection::operator=( rhs ); + bindProperties(); + } + return *this; } - /// \brief Checks if the video stream API is available. + // *INDENT-OFF* + PYTHON_OR_JAVA_ONLY( %immutable; ) + // *INDENT-ON* + /// \brief An enumerated integer property defining the master enumeration mode for all GenTL producer detected in the current session. /** - * This function checks if the video stream API is available. - * - * \since 2.39.0 - * - * \return - * - true if the video stream API is available thus video streams can be created - * - false otherwise. + * Valid values for this property are defined by the enumeration \b mvIMPACT::acquire::TInterfaceEnumerationBehaviour. */ - static bool isAPIAvailable( void ) - { - return DMR_InitVideoStreamAPI( 0, 0 ) == DMR_NO_ERROR; - } - /// \brief Stores an image into the video stream. + PropertyIInterfaceEnumerationBehaviour masterEnumerationBehaviour; + // *INDENT-OFF* + PYTHON_OR_JAVA_ONLY( %mutable; ) + // *INDENT-ON* + /// \brief Creates a new \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration object for the desired interface reported by the specified producer. /** - * This function stores an image into the video stream. - * - * \note - * Internally the FFmpeg project (see \ref LegalNotice_UsedThirdPartySoftware_FFmpeg section as well as the remarks made here: \b mvIMPACT::acquire::labs::VideoStream) is used for this operation. If the corresponding libraries - * cannot be located in one of the supported versions on the host system calling this function will fail. - * - * \since 2.39.0 + * Calling this function will creates a new \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration object for the desired interface + * reported by the specified producer. * - * \return - * - mvIMPACT::acquire::DMR_NO_ERROR if successful. - * - mvIMPACT::acquire::DMR_LIBRARY_NOT_FOUND if no compatible version of the FFmpeg libraries could be located on the host system. - * - mvIMPACT::acquire::DEV_UNSUPPORTED_PARAMETER if a pixel format has been passed to the function that is not supported by the internal algorithms. - * - mvIMPACT::acquire::DEV_INPUT_PARAM_INVALID e.g. if a pixel format has been passed to the function that is not supported by the FFmpeg libraries. - * - A negative error code of type ::TDMR_ERROR otherwise. + * \note If a configuration entry for the specified interface does already exist an exception will be thrown. */ - int saveImage( - /// [in] The image to encode and store. - const ImageBuffer* pBuffer, - /// [in] A timestamp(in us) to associate this image with. This can be 0 if no timestamp is available. - int64_type timestamp_us = 0LL ) + GenTLProducerConfiguration createProducerConfiguration( + /// [in] The exact name of the producer library without the path to create the entry for. + const std::string& producerName, + /// [in] The interface ID to create the configuration entry for. + const std::string& interfaceID = "" ) { - return DMR_SaveImageBufferToVideoStream( hStream_, pBuffer, timestamp_us ); + int result = DMR_NO_ERROR; + if( interfaceID.empty() ) + { + result = createProducerConfigurationEntry_.call( producerName ); + } + else + { + std::vector parameters; + parameters.push_back( producerName ); + parameters.push_back( interfaceID ); + result = createProducerInterfaceConfigurationEntry_.call( parameters ); + } + if( result != DMR_NO_ERROR ) + { + ExceptionFactory::raiseException( MVIA_FUNCTION, __LINE__, static_cast( result ), "Failed to create entry '" + producerName + "'" + ( interfaceID.empty() ? "" : " with interface entry '" + interfaceID + "'" ) ); + } + ComponentLocator locator( hObj(), "ConfigurationData" ); + return GenTLProducerConfiguration( locator.findComponent( producerName, 0, 1 ) ); } - /// \brief Encodes and stores the image associated with the \b mvIMPACT::acquire::Request object into the stream. + /// \brief Deletes a \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration objects. /** - * This function stores the image associated with an \b mvIMPACT::acquire::Request object into the video stream. - * - * \note - * Internally the FFmpeg project (see \ref LegalNotice_UsedThirdPartySoftware_FFmpeg section as well as the remarks made here: \b mvIMPACT::acquire::labs::VideoStream) is used for this operation. If the corresponding libraries - * cannot be located in one of the supported versions on the host system calling this function will fail. - * - * \since 2.39.0 - * - * \sa - * \b mvIMPACT::acquire::labs::VideoStream::pause, \n - * \b mvIMPACT::acquire::labs::VideoStream::isPaused, \n - * \b mvIMPACT::acquire::labs::VideoStream::resume \n + * Calling this function will delete the \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration object for the referenced producer. * - * \return - * - mvIMPACT::acquire::DMR_NO_ERROR if successful. - * - mvIMPACT::acquire::DMR_LIBRARY_NOT_FOUND if no compatible version of the FFmpeg libraries could be located on the host system. - * - mvIMPACT::acquire::DEV_UNSUPPORTED_PARAMETER if a pixel format has been passed to the function that is not supported by the internal algorithms. - * - mvIMPACT::acquire::DEV_INPUT_PARAM_INVALID e.g. if a pixel format has been passed to the function that is not supported by the FFmpeg libraries. - * - A negative error code of type ::TDMR_ERROR otherwise. + * \note If no entry for the specified producer can be found an exception will be thrown. */ - int saveImage( - /// [in] A pointer to a \b mvIMPACT::acquire::Device object obtained from - /// a \b mvIMPACT::acquire::DeviceManager object. - Device* pDev, - /// [in] A pointer to the \b mvIMPACT::acquire::Request object carrying the image to encode and store. - const Request* pRequest ) + void deleteProducerConfiguration( + /// [in] The exact name of the producer library without the path to delete the entry from. + const std::string& producerName ) { - return DMR_ImageRequestSaveToVideoStream( pDev->hDrv(), pRequest->getNumber(), hStream_ ); + const int result = deleteProducerConfigurationEntry_.call( producerName ); + if( result != DMR_NO_ERROR ) + { + ExceptionFactory::raiseException( MVIA_FUNCTION, __LINE__, static_cast( result ), "Failed to delete entry '" + producerName + "'" ); + } } - /// \brief Pauses this video stream. + /// \brief Deletes all \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration objects. /** - * This function pauses this video stream. While paused no images can be written into the stream. Pausing internally simply starts a timer - * and all accumulated pause times will be subtracted from images that will be written into the stream after the pause has been ended effectively - * allowing to remove inactive sections from the video stream. - * - * \note - * Internally the FFmpeg project (see \ref LegalNotice_UsedThirdPartySoftware_FFmpeg section as well as the remarks made here: \b mvIMPACT::acquire::labs::VideoStream) is used for this operation. If the corresponding libraries - * cannot be located in one of the supported versions on the host system calling this function will fail. - * - * \since 2.41.0 - * - * \sa - * \b mvIMPACT::acquire::labs::VideoStream::resume, \n - * \b mvIMPACT::acquire::labs::VideoStream::isPaused - * - * \return - * - mvIMPACT::acquire::DMR_NO_ERROR if successful. - * - mvIMPACT::acquire::DMR_BUSY if this stream has been paused already. - * - A negative error code of type ::TDMR_ERROR otherwise. + * Calling this function will result in all \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration objects to be deleted. When the next + * Impact Acquire process will be started after shutting down the current one all producer libraries found on the system will be processed. By default only interfaces reporting + * types/technologies (e.g. GigE Vision) also supported by Balluff will be ignored (will not enumerate devices) then. */ - int pause( void ) const + void deleteAllProducerConfigurations( void ) { - return DMR_PauseVideoStream( hStream_ ); + std::vector data( getProducerConfigurations() ); + std::vector::size_type cnt = data.size(); + for( std::vector::size_type i = 0; i < cnt; i++ ) + { + deleteProducerConfiguration( data[i].getProducerName() ); + } } - /// \brief Checks is this video stream is currently paused. + /// \brief Checks if a certain producer library has been associated with a \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration. /** - * - * \note - * Internally the FFmpeg project (see \ref LegalNotice_UsedThirdPartySoftware_FFmpeg section as well as the remarks made here: \b mvIMPACT::acquire::labs::VideoStream) is used for this operation. If the corresponding libraries - * cannot be located in one of the supported versions on the host system calling this function will fail. - * - * \since 2.41.0 - * - * \sa - * \b mvIMPACT::acquire::labs::VideoStream::pause, \n - * \b mvIMPACT::acquire::labs::VideoStream::resume - * - * \return - * - true if this video stream is currently paused. - * - false otherwise. + * \return + * - true if a \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration is currently associated with the referenced producer library + * - false otherwise */ - bool isPaused( void ) const + bool hasProducerConfiguration( + /// [in] The exact name of the producer library without the path. + const std::string& producerName ) const { - return DMR_IsVideoStreamPaused( hStream_ ) == DMR_NO_ERROR; + ComponentLocator locator( hObj(), "ConfigurationData" ); + return locator.findComponent( producerName, 0, 1 ) != INVALID_ID; } - /// \brief Resumes this video stream. + /// \brief Returns the \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration associated with the referenced producer library. /** - * This function resumes this previously paused video stream. While paused no images can be written into the stream. Pausing internally simply starts a timer - * and all accumulated pause times will be subtracted from images that will be written into the stream after the pause has been ended effectively - * allowing to remove inactive sections from the video stream. - * - * \note - * Internally the FFmpeg project (see \ref LegalNotice_UsedThirdPartySoftware_FFmpeg section as well as the remarks made here: \b mvIMPACT::acquire::labs::VideoStream) is used for this operation. If the corresponding libraries - * cannot be located in one of the supported versions on the host system calling this function will fail. - * - * \since 2.41.0 * - * \sa - * \b mvIMPACT::acquire::labs::VideoStream::pause, \n - * \b mvIMPACT::acquire::labs::VideoStream::isPaused + * \note If no entry for the specified producer can be found an exception will be thrown. * - * \return - * - mvIMPACT::acquire::DMR_NO_ERROR if successful. - * - mvIMPACT::acquire::DMR_EXECUTION_PROHIBITED if this stream has been paused already. - * - A negative error code of type ::TDMR_ERROR otherwise. - */ - int resume( void ) const - { - return DMR_ResumeVideoStream( hStream_ ); - } -}; - -//----------------------------------------------------------------------------- -/// \brief A smaller helper class for pausing a video stream for a defined time. -/** - * This class uses a RAII pattern to pause an instance of mvIMPACT::acquire::labs::VideoStream - * \since 2.41.0 - * \ingroup CommonInterface - */ -class VideoStreamPauseScope -//----------------------------------------------------------------------------- -{ - VideoStream& stream_; - bool boPausedWithinScope_; -public: - /// \brief Creates a new mvIMPACT::acquire::labs::VideoStreamPauseScope object. - /** - * Trying to pause a stream that is paused already or trying to resume a stream that is not paused will raise an exception! - * When this object goes out of scope the previous state will be restored automatically. + * \return The \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration associated with the referenced producer library. */ - explicit VideoStreamPauseScope( - /// [in] The video stream that shall be configured. - VideoStream& stream, - /// [in] The mode the selected video stream shall have while this object is alive. - bool boPausedWithinScope = true ) : stream_( stream ), boPausedWithinScope_( boPausedWithinScope ) + GenTLProducerConfiguration getProducerConfiguration( + /// [in] The exact name of the producer library without the path. + const std::string& producerName ) const { - TDMR_ERROR result = DMR_NO_ERROR; - if( boPausedWithinScope_ ) - { - result = static_cast( stream_.pause() ); - } - else - { - result = static_cast( stream_.resume() ); - } - - if( result != DMR_NO_ERROR ) + ComponentLocator locator( hObj(), "ConfigurationData" ); + const HLIST hList = locator.findComponent( producerName, 0, 1 ); + if( hList == INVALID_ID ) { - ExceptionFactory::raiseException( __FUNCTION__, __LINE__, result ); + ExceptionFactory::raiseException( MVIA_FUNCTION, __LINE__, static_cast( PROPHANDLING_COMPONENT_NOT_FOUND ), "Couldn't find configuration for producer '" + producerName + "'" ); } + return GenTLProducerConfiguration( hList ); } - ~VideoStreamPauseScope() + /// \brief Returns a vector containing all \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration objects currently defined. + /** + * \return A vector containing all \b mvIMPACT::acquire::GenICam::GenTLProducerConfiguration objects currently defined. + */ + std::vector getProducerConfigurations( void ) const { - if( boPausedWithinScope_ ) - { - stream_.resume(); - } - else + ComponentLocator locator( hObj(), "ConfigurationData" ); + Component it( locator.searchbase_id() ); + it = it.firstChild(); + std::vector data; + while( it.isValid() ) { - stream_.pause(); + data.push_back( GenTLProducerConfiguration( it.hObj() ) ); + it++; } + return data; } }; +} // namespace GenICam + +/// \namespace mvIMPACT::acquire::labs This namespace contains classes and functions belonging to the general part of this SDK that +/// are not yet final and might change in the future without further notice. Yet still we think code within this namespace +/// might prove useful thus we encourage you to use it if beneficial for your application. However be prepared to apply changes when needed. +/// Feedback that helps to improve or finalize code from this namespace will be highly appreciated! A migration guide will be provided and we will +/// perform changes only if they make sense and improve the code. +namespace labs +{ + //----------------------------------------------------------------------------- -/// \brief A class to perform a firmware update of a specific device. +/// \brief A class to create compressed video stream from images captured or loaded using the Impact Acquire API. /** - * This class is intended to provide an ease of use possibility to update the firmware of specific devices. It is possible to - * specify the behavior of the class very detailed to make sure the update suits the users expectations. It is also possible to derive - * from this class and override various functions in order to get custom notifications e.g. to update a GUI application. + * This class heavily depends on the FFmpeg project (see \ref LegalNotice_UsedThirdPartySoftware_FFmpeg). Without the + * libraries belonging to this project being present on the target system video streams cannot be created. * - * \if DOXYGEN_CPP_DOCUMENTATION - * To start a firmware update for MATRIX VISION GenICam devices the following code will be sufficient: - * \code - * // force the update even if the version of the mvu-file is the same es the one on the device - * mvIMPACT::acquire::labs::FirmwareUpdater fwUpdater( pDev, true ); - * try - * { - * const string pathToFirmwareArchive( "someArchive.mvu" ); - * // start the whole update process - * const int FWUpdateResult = fwUpdater.update( pathToFirmwareArchive ); - * cout << "Result of 'updateFirmware' call: " << ImpactAcquireException::getErrorCodeAsString( FWUpdateResult ) << "." << endl; - * } - * catch( const ImpactAcquireException& e ) - * { - * cout << "An error occurred while updating the firmware of the device " << pDev->serial.read() - * << "(error code: " << e.getErrorCodeAsString() << ")."; - * // reading out potential issues - * cout << "Status: " << fwUpdater.statusMessage() << endl; - * return 1; - * } - * \endcode + * Because of what is stated in the above section Impact Acquire is \b NOT shipped with the FFmpeg binaries required to use + * this class! * - * To start a firmware update for MATRIX VISION mvBlueFOX devices the following code will be sufficient: - * \code - * mvIMPACT::acquire::labs::FirmwareUpdater fwUpdater( pDev ); - * // if necessary, a specific version for the update can be selected by using the firmwareVersionToUpload property - * try - * { - * const int FWUpdateResult = fwUpdater.update(); - * cout << "Result of 'updateFirmware' call: " << ImpactAcquireException::getErrorCodeAsString( FWUpdateResult ) << "." << endl; - * } - * catch( const ImpactAcquireException& e ) - * { - * cout << "An error occurred while updating the firmware of the device " << pDev->serial.read() - * << "(error code: " << e.getErrorCodeAsString() << ")."; - * return 1; - * } - * \endcode + * On Windows the \a FFmpeg-share package matching the platform the application shall run with (32- or 64-bit) is needed. This + * can either be extracted into the installation folder of Impact Acquire e.g. into \$(MVIMPACT_ACQUIRE_DIR)/Toolkits/ffmpeg-4.2.2-win64-shared or + * \$(MVIMPACT_ACQUIRE_DIR)/Toolkits/ffmpeg-4.2.2-win32-shared (Works only for this versions) \b OR at the location pointed to by \b MVIMPACT_ACQUIRE_FFMPEG_DIR (see below) + * \b OR anywhere into the systems search path. * - * A more custom behavior can be accomplished by deriving from the mvIMPACT::acquire::labs::FirmwareUpdater class and re-implementing the various notification functions: - * \code - * //----------------------------------------------------------------------------- - * class MyFirmwareUpdater : public mvIMPACT::acquire::labs::FirmwareUpdater - * //----------------------------------------------------------------------------- - * { - * public: - * explicit MyFirmwareUpdater( mvIMPACT::acquire::Device* pDev ) : mvIMPACT::acquire::labs::FirmwareUpdater( pDev ) {} - * virtual int onErrorMessage( const double timeElapsed_s ) const - * { - * printf( "Error: %s @ %f [s]\n", statusMessage().c_str(), timeElapsed_s ); - * return fuaCancel; - * } - * virtual int onErasingFlash( const int currentProgress_pc, const double timeElapsed_s ) const - * { - * printf( "Erasing - Update progress: %d, time %f [s]\n", currentProgress_pc, timeElapsed_s ); - * return fuaContinue; - * } - * virtual int onUnzippingFirmwareArchive( const int currentProgress_pc, const double timeElapsed_s ) const - * { - * printf( "Unzipping firmware archive - Update progress: %d, time %f [s]\n", currentProgress_pc, timeElapsed_s ); - * return fuaContinue; - * } - * virtual int onUpdatingBootProgrammer( const int currentProgress_pc, const double timeElapsed_s ) const - * { - * printf( "Updating boot programmer - Update progress: %, time %f [s]\n", currentProgress_pc, timeElapsed_s ); - * return fuaContinue; - * } - * virtual int onUploadingImage( const int currentProgress_pc, const double timeElapsed_s ) const - * { - * printf( "Uploading - Update progress: %d, time %f [s]\n", currentProgress_pc, timeElapsed_s ); - * return fuaContinue; - * } - * virtual int onSavingUserSets( const int currentProgress_pc, const double timeElapsed_s ) const - * { - * printf( "Saving sets - Update progress: %d, time %f [s]\n", currentProgress_pc, timeElapsed_s ); - * return fuaContinue; - * } - * virtual int onLoadingUserSets( const int currentProgress_pc, const double timeElapsed_s ) const - * { - * printf( "Loading sets - Update progress: %d, time %f [s]\n", currentProgress_pc, timeElapsed_s ); - * return fuaContinue; - * } - * virtual int onRebooting( const int currentProgress_pc, const double timeElapsed_s ) const - * { - * printf( "Rebooting - Update progress: %d, time %f [s]\n", currentProgress_pc, timeElapsed_s ); - * return fuaContinue; - * } - * }; - * \endcode - * \elseif DOXYGEN_JAVA_DOCUMENTATION - * To start a firmware update for MATRIX VISION GenICam devices the following code will be sufficient: - * \code - * // force the update even if the version of the mvu-file is the same es the one on the device - * mvIMPACT.acquire.labs.FirmwareUpdater fwUpdater = new mvIMPACT.acquire.labs.FirmwareUpdater( pDev, true ); - * try - * { - * String pathToMVUfile = new String( "someArchive.mvu" ); - * // start the whole update process - * System.out.println( "Result of firmware update call: " + ImpactAcquireException.getErrorCodeAsString( pFWU.update( pathToMVUfile ) ) ); - * } - * catch( ImpactAcquireException e ) - * { - * System.out.println( "An error occured during the firmware update process. Error code: " + e.getErrorCodeAsString() ); - * System.out.println( "Status: " + pFWU.statusMessage() ); - * } - * \endcode + * On Linux the package \a ffmpeg must be installed and if e.g. H.264 support is needed the libavcodec-extra package as well. * - * To start a firmware update for MATRIX VISION mvBlueFOX devices the following code will be sufficient: - * \code - * mvIMPACT.acquire.labs.FirmwareUpdater fwUpdater = new mvIMPACT.acquire.labs.FirmwareUpdater( pDev ); - * // if necessary, a specific version for the update can be selected by using the firmwareVersionToUpload property - * try - * { - * // start the whole update process - * System.out.println( "Result of firmware update call: " + ImpactAcquireException.getErrorCodeAsString( pFWU.update() ) ); - * } - * catch( ImpactAcquireException e ) - * { - * System.out.println( "An error occured during the firmware update process. Error code: " + e.getErrorCodeAsString() ); - * System.out.println( "Status: " + pFWU.statusMessage() ); - * } - * \endcode + * \attention Please carefully read and understand the legal implications coming with the use of FFmpeg in a commercial product: http://ffmpeg.org/legal.html * - * A more custom behavior can be accomplished by deriving from the mvIMPACT.acquire.labs.FirmwareUpdater class and re-implementing the various notification functions: - * \code - * import mvIMPACT.acquire.*; + * Impact Acquire is capable of communicating with FFmpeg 4.x right now. This means that the following libraries will be recognized: + * - libavcodec-58, libavformat-58 and libavutil-56 (FFmpeg 4.0 was released on 20.04.2018) * - * public class MyFirmwareUpdater extends FirmwareUpdater - * { - * public MyFirmwareUpdater( Device pDev, boolean boForceOverideSameVersion, boolean boForceDowngrade, boolean boKeepUserSets, boolean boForceBreakingChange ) - * { - * super( pDev, boForceOverideSameVersion, boForceDowngrade, boKeepUserSets, boForceBreakingChange ); - * } - * @Override - * public int onErrorMessage( double timeElapsed_s ) - * { - * System.out.println( "Error: " + statusMessage() + " @ " + timeElapsed_s + " [s]" ); - * return mvIMPACT.acquire.TFirmwareUpdateAction.fuaContinue; - * } - * @Override - * public int onErasingFlash( int currentProgress_pc, double timeElapsed_s ) - * { - * System.out.println( "Erasing - Update progress: " + currentProgress_pc + ", time " + timeElapsed_s + " [s]" ); - * return mvIMPACT.acquire.TFirmwareUpdateAction.fuaContinue; - * } - * @Override - * public int onUnzippingFirmwareArchive( int currentProgress_pc, double timeElapsed_s ) - * { - * System.out.println( "Unzipping firmware archive - Update progress: " + currentProgress_pc + ", time " + timeElapsed_s + " [s]" ); - * return mvIMPACT.acquire.TFirmwareUpdateAction.fuaContinue; - * } - * @Override - * public int onUpdatingBootProgrammer( int currentProgress_pc, double timeElapsed_s ) - * { - * System.out.println( "Updating boot programmer - Update progress: " + currentProgress_pc + ", time " + timeElapsed_s + " [s]" ); - * return mvIMPACT.acquire.TFirmwareUpdateAction.fuaContinue; - * } - * @Override - * public int onUploadingImage( int currentProgress_pc, double timeElapsed_s ) - * { - * System.out.println( "Uploading - Update progress: " + currentProgress_pc + ", time " + timeElapsed_s + " [s]" ); - * return mvIMPACT.acquire.TFirmwareUpdateAction.fuaContinue; - * } - * @Override - * public int onSavingUserSets( int currentProgress_pc, double timeElapsed_s ) - * { - * System.out.println( "Saving sets - Update progress: " + currentProgress_pc + ", time " + timeElapsed_s + " [s]" ); - * return mvIMPACT.acquire.TFirmwareUpdateAction.fuaContinue; - * } - * @Override - * public int onLoadingUserSets( int currentProgress_pc, double timeElapsed_s ) - * { - * System.out.println( "Loading sets - Update progress: " + currentProgress_pc + ", time " + timeElapsed_s + " [s]" ); - * return mvIMPACT.acquire.TFirmwareUpdateAction.fuaContinue; - * } - * @Override - * public int onRebooting( int currentProgress_pc, double timeElapsed_s ) - * { - * System.out.println( "Rebooting - Update progress: " + currentProgress_pc + ", time " + timeElapsed_s + " [s]" ); - * return mvIMPACT.acquire.TFirmwareUpdateAction.fuaContinue; - * } - * } - * \endcode - * \elseif DOXYGEN_PYTHON_DOCUMENTATION + * In order to load the FFmpeg libraries + * from a custom location the environment variable \b MVIMPACT_ACQUIRE_FFMPEG_DIR can be defined before creating the first + * \b mvIMPACT::acquire::labs::VideoStream instance after loading the mvDeviceManager library into the current processes address space. + * Without this environment variable only the systems default search path will be used to locate it and (Windows only) the \a Toolkits + * folder of the installation directory. This is how the search algorithm will operate: * - * To start a firmware update for MATRIX VISION mvBlueFOX devices the following code will be sufficient: - * \code - * fwUpdater = acquire.FirmwareUpdater( pDev, False, False, True, False ) - * fwUpdateResult = fwUpdater.update( PATH_TO_FIRMWARE_ARCHIVE.mvu ) - * if FWUpdateResult == 0: - * print("Update successful!") - * else: - * print( fwUpdater.statusMessage() ) - * \endcode - * To start a firmware update for MATRIX VISION mvBlueFOX devices the following code will be sufficient: * \code - * fwUpdater = acquire.FirmwareUpdater( pDev ) - * fwUpdateResult = fwUpdater.update( 52 ) - * if FWUpdateResult == 0: - * print("Update successful!") - * else: - * print( fwUpdater.statusMessage() ) + * if isEnvironmentVariableDefined( MVIMPACT_ACQUIRE_FFMPEG_DIR ) + * if tryToLoadFFmpegVersion4Succeeded + * return + * if tryToLoadFFmpegVersion3Succeeded + * return + * if isWindowsSystem + * if tryToLoadFFmpegVersionFromToolkits4Succeeded + * return + * if tryToLoadFFmpegVersion4Succeeded + * return + * if tryToLoadFFmpegVersion3Succeeded + * return + * ReportError * \endcode - * A more custom behavior can be accomplished by deriving from the acquire.FirmwareUpdater class and re-implementing the various notification functions: - * \code - * from mvIMPACT import acquire - * - * class MyFirmwareUpdater( acquire.FirmwareUpdater ): - * def __init__(self, *args): - * super(MyFirmwareUpdater, self).__init__(*args) - * - * def onErrorMessage( self, timeElapsed_s ): - * print( "Error: " + statusMessage() + " @ " + str(timeElapsed_s) + " [s]" ) - * return acquire.fuaContinue - * - * def onErasingFlash( self, currentProgress_pc, timeElapsed_s ): - * print( "Erasing - Update progress: " + str(currentProgress_pc) + ", time " + str(timeElapsed_s) + " [s]" ) - * return acquire.fuaContinue - * - * def onUnzippingFirmwareArchive( self, currentProgress_pc, timeElapsed_s ): - * print( "Unzipping firmware archive - Update progress: " + str(currentProgress_pc) + ", time " + str(timeElapsed_s) + " [s]" ) - * return acquire.fuaContinue - * - * def onUpdatingBootProgrammer( self, currentProgress_pc, timeElapsed_s ): - * print( "Updating boot programmer - Update progress: " + str(currentProgress_pc) + ", time " + str(timeElapsed_s) + " [s]" ) - * return acquire.fuaContinue - * - * def onUploadingImage( self, currentProgress_pc, timeElapsed_s ): - * print( "Uploading - Update progress: " + str(currentProgress_pc) + ", time " + str(timeElapsed_s) + " [s]" ) - * return acquire.fuaContinue - * - * def onSavingUserSets( self, currentProgress_pc, timeElapsed_s ): - * print( "Saving sets - Update progress: " + str(currentProgress_pc) + ", time " + str(timeElapsed_s) + " [s]" ) - * return acquire.fuaContinue * - * def onLoadingUserSets( self, currentProgress_pc, timeElapsed_s ): - * print( "Loading sets - Update progress: " + str(currentProgress_pc) + ", time " + str(timeElapsed_s) + " [s]" ) - * return acquire.fuaContinue - * - * def onRebooting( self, currentProgress_pc, timeElapsed_s ): - * print( "Rebooting - Update progress: " + str(currentProgress_pc) + ", time " + str(timeElapsed_s) + " [s]" ) - * return acquire.fuaContinue - * \endcode - - * \endif - - * \note - * Currently supported are the following device families: * \note - * GenICam compliant MATRIX VISION devices - * - mvBlueCOUGAR-X - * - mvBlueCOUGAR-XD - * - mvBlueCOUGAR-XT - * - mvBlueFOX3 - * \note - * Other MATRIX VISION devices - * - mvBlueFOX - * - mvBlueFOX-MLC/IGC + * Currently video streams can only be created for a limited number of pixel formats. Which codec supports which input formats is described at the corresponding + * \b mvIMPACT::acquire::TVideoCodec value. Make sure to use one of these formats either by setting up your device accordingly or by using + * the \b mvIMPACT::acquire::ImageDestination::pixelFormat property of the \ref Image_Format_Converter. * * \attention - * It is important not to unplug the device during the update procedure.\n - * Once the firmwareUpdate method call returns an error call the mvIMPACT::acquire::labs::FirmwareUpdater::statusMessage function. It will return useful information about the current status (including issues) during the update procedure. - * - * \since 2.41.0 + * - You have to feed one of the supported pixel formats depending on the video codecs requirements into the stream! The video stream API will NOT perform internal conversion. If you need to convert + * (most likely you will be!) use the \ref Image_Format_Converter to achieve that. It will get the job done! + * - When not providing timestamps together with the images that are fed into the encoder the resulting video stream can still be used, but the playback speed will differ from the acquisition speed then. + * When providing the timestamps coming with the requests the playback speed will resemble exactly the acquisition speed. Most codecs even support variable playback speeds so dynamic changes in the + * frame rate will be reflected during playback. + * \since 2.39.0 * \ingroup CommonInterface */ -class FirmwareUpdater +class VideoStream //----------------------------------------------------------------------------- { -private: -#if !defined(DOXYGEN_SHOULD_SKIP_THIS) - PropertyS firmwareUpdateFileName_; - PropertyPtr firmwareUpdateProgressListenerAddress_; - PropertyPtr firmwareUpdateProgressListenerUserDataAddress_; - PropertyIBoolean firmwareUpdateKeepUserSets_; - PropertyIBoolean firmwareUpdateForceBreakingChange_; - PropertyIBoolean firmwareUpdateForceOverrideSameVersion_; - PropertyIBoolean firmwareUpdateForceDowngrade_; - PropertyS firmwareUpdateStatusMessage_; - Method updateFirmware_; - double timeElapsed_s_; + HDMR_VIDEO_STREAM hStream_; + std::string fileName_; + TVideoCodec videoCodec_; - void registerFirmwareUpdateCallback( CBP_FIRMWARE_UPDATE pCB, void* pUserData ) + void create( const std::string& fileName, const unsigned int imageWidth, const unsigned int imageHeight, const TVideoCodec codec, const unsigned int quality_pc, const unsigned int bitrate ) { - if( firmwareUpdateProgressListenerAddress_.isValid() && firmwareUpdateProgressListenerUserDataAddress_.isValid() ) + const TDMR_ERROR result = DMR_OpenVideoStream( fileName.c_str(), imageWidth, imageHeight, codec, quality_pc, bitrate, &hStream_ ); + if( result != DMR_NO_ERROR ) { - function_cast< CBP_FIRMWARE_UPDATE > pFunc; - pFunc.pO = pCB; - firmwareUpdateProgressListenerAddress_.write( pFunc.pI ); - firmwareUpdateProgressListenerUserDataAddress_.write( pUserData ); + ExceptionFactory::raiseException( MVIA_FUNCTION, __LINE__, result ); } } - void unregisterFirmwareUpdateCallback( void ) +public: +/// \brief Creates a new video stream file. + /** + * \note + * Internally the FFmpeg project (see \ref LegalNotice_UsedThirdPartySoftware_FFmpeg section) is used for this operation. If the corresponding libraries + * cannot be located in one of the supported versions on the host system calling this constructor will raise an exception. + */ + explicit VideoStream( + /// [in] The name or full path of the file to create. The recommended file extensions for files can be found where the + /// \b mvIMPACT::acquire::TVideoCodec enumeration is documented + const std::string& fileName, + /// [in] An image buffer containing the layout of the images that are about to get stored in the stream. This structure can be + /// extracted from a real \b mvIMPACT::acquire::Request object captured previously but \b NOT by calling the + /// \b mvIMPACT::acquire::FunctionInterface::getCurrentCaptureBufferLayout function after setting up the device + /// completely.The latter one will not contain all the information needed for a successful stream creation. You could even create a stream from a list of files e.g. on a hard-disk using the + /// \b mvIMPACT::acquire::ImageBufferDesc constructor accepting a file name. If you want to use the \b mvIMPACT::acquire::Request + /// object obtained from a call to \b mvIMPACT::acquire::FunctionInterface::getCurrentCaptureBufferLayout use the constructor accepting + /// a \b mvIMPACT::acquire::Request pointer! + const ImageBuffer* pBuffer, + /// [in] The codec that shall be used while encoding the images into the stream. + const TVideoCodec codec = vcH264, + /// [in] The quality of the resulting video stream in percent. The higher this value the larger the file will get. This value is only taken into + /// account for the following codecs: \b mvIMPACT::acquire::vcH264, \b mvIMPACT::acquire::vcH265. + const unsigned int quality_pc = 60, + /// [in] The bitrate of the resulting video stream in kBit/s. The higher this value the larger the file will get. This value is only taken into + /// account for the following codecs: \b mvIMPACT::acquire::vcMPEG2. + const unsigned int bitrate = 6000 ) : hStream_( 0 ), fileName_( fileName ), videoCodec_( codec ) { - if( firmwareUpdateProgressListenerAddress_.isValid() && firmwareUpdateProgressListenerUserDataAddress_.isValid() ) - { - firmwareUpdateProgressListenerAddress_.write( 0 ); - firmwareUpdateProgressListenerUserDataAddress_.write( 0 ); - } + create( fileName, pBuffer->iWidth, pBuffer->iHeight, codec, quality_pc, bitrate ); } - static int infoCallback( void* pUserData, FirmwareUpdateStatusData* pFwUpdateData, unsigned long int /*fwUpdateDataSize*/ ) + /// \brief Creates a new video stream file. + /** + * \note + * Internally the FFmpeg project (see \ref LegalNotice_UsedThirdPartySoftware_FFmpeg section) is used for this operation. If the corresponding libraries + * cannot be located in one of the supported versions on the host system calling this constructor will raise an exception. + */ + explicit VideoStream( + /// [in] The name or full path of the file to create. The recommended file extensions for files can be found where the + /// \b mvIMPACT::acquire::TVideoCodec enumeration is documented + const std::string& fileName, + /// [in] The input image width in pixels + const unsigned int imageWidth, + /// [in] The input image height in pixels + const unsigned int imageHeight, + /// [in] The codec that shall be used while encoding the images into the stream. + const TVideoCodec codec = vcH264, + /// [in] The quality of the resulting video stream in percent. The higher this value the larger the file will get. This value is only taken into + /// account for the following codecs: \b mvIMPACT::acquire::vcH264, \b mvIMPACT::acquire::vcH265. + const unsigned int quality_pc = 60, + /// [in] The bitrate of the resulting video stream in kBit/s. The higher this value the larger the file will get. This value is only taken into + /// account for the following codecs: \b mvIMPACT::acquire::vcMPEG2. + const unsigned int bitrate = 6000 ) : hStream_( 0 ), fileName_( fileName ), videoCodec_( codec ) { - if( !pUserData ) - { - return fuaContinue; - } - FirmwareUpdater* pFirmwareUpdater = reinterpret_cast( pUserData ); - pFirmwareUpdater->setTimeElapsed( pFwUpdateData->timeElapsed_s ); - switch ( pFwUpdateData->updateStep ) - { - case fusErasingFlash: - return pFirmwareUpdater->onErasingFlash( pFwUpdateData->progressPercent, pFwUpdateData->timeElapsed_s ); - case fusUpdatingBootProgrammer: - return pFirmwareUpdater->onUpdatingBootProgrammer( pFwUpdateData->progressPercent, pFwUpdateData->timeElapsed_s ); - case fusUnzippingFirmwareArchive: - return pFirmwareUpdater->onUnzippingFirmwareArchive( pFwUpdateData->progressPercent, pFwUpdateData->timeElapsed_s ); - case fusUploadingFirmware: - return pFirmwareUpdater->onUploadingImage( pFwUpdateData->progressPercent, pFwUpdateData->timeElapsed_s ); - case fusRebootingDevice: - return pFirmwareUpdater->onRebooting( pFwUpdateData->progressPercent, pFwUpdateData->timeElapsed_s ); - case fusSavingUserSets: - return pFirmwareUpdater->onSavingUserSets( pFwUpdateData->progressPercent, pFwUpdateData->timeElapsed_s ); - case fusLoadingUserSets: - return pFirmwareUpdater->onLoadingUserSets( pFwUpdateData->progressPercent, pFwUpdateData->timeElapsed_s ); - case fusErrorMessage: - return pFirmwareUpdater->onErrorMessage( pFwUpdateData->timeElapsed_s ); - } - return fuaContinue; + create( fileName, imageWidth, imageHeight, codec, quality_pc, bitrate ); } - - // do not allow assignments - FirmwareUpdater& operator=( const FirmwareUpdater& ); - // do not allow copy construction - FirmwareUpdater( const FirmwareUpdater& src ); - -protected: - void setTimeElapsed( double time_s ) + /// \brief Creates a new video stream file. + /** + * \note + * Internally the FFmpeg project (see \ref LegalNotice_UsedThirdPartySoftware_FFmpeg section) is used for this operation. If the corresponding libraries + * cannot be located in one of the supported versions on the host system calling this constructor will raise an exception. + */ + explicit VideoStream( + /// [in] The name or full path of the file to create. The recommended file extensions for files can be found where the + /// \b mvIMPACT::acquire::TVideoCodec enumeration is documented. + const std::string& fileName, + /// [in] A \b mvIMPACT::acquire::Request object carrying the image related information that are about to get stored in the stream. This can either be + /// extracted from a real \b mvIMPACT::acquire::Request object captured previously or by calling the + /// \b mvIMPACT::acquire::FunctionInterface::getCurrentCaptureBufferLayout function after setting up the device + /// completely. To create a stream from a list of files e.g. on a hard-disk use the \b mvIMPACT::acquire::labs::VideoStream + /// constructor accepting a \b mvIMPACT::acquire::ImageBufferDesc instead! Create instances of b mvIMPACT::acquire::ImageBufferDesc + /// objects from files call the \b mvIMPACT::acquire::ImageBufferDesc constructor accepting a file name. + const Request* pRequest, + /// [in] The codec that shall be used while encoding the images into the stream. + const TVideoCodec codec = vcH264, + /// [in] The quality of the resulting video stream in percent. The higher this value the larger the file will get. This value is only taken into + /// account for the following codecs: \b mvIMPACT::acquire::vcH264, \b mvIMPACT::acquire::vcH265. + const unsigned int quality_pc = 60, + /// [in] The bitrate of the resulting video stream in kBit/s. The higher this value the larger the file will get. This value is only taken into + /// account for the following codecs: \b mvIMPACT::acquire::vcMPEG2. + const unsigned int bitrate = 6000 ) : hStream_( 0 ), fileName_( fileName ), videoCodec_( codec ) { - timeElapsed_s_ = time_s; + create( fileName, pRequest->imageWidth.read(), pRequest->imageHeight.read(), codec, quality_pc, bitrate ); } -#endif // #if !defined(DOXYGEN_SHOULD_SKIP_THIS) -public: - /// \brief Creates a new mvIMPACT::acquire::labs::FirmwareUpdater object. - explicit FirmwareUpdater( - /// [in] A pointer to a \b mvIMPACT::acquire::Device object obtained from a \b mvIMPACT::acquire::DeviceManager object. - mvIMPACT::acquire::Device* pDev, - /// [in] A boolean value which defines if updates using the same version as installed on the camera should be allowed. - bool boForceOverideSameVersion = false, - /// [in] A boolean value which defines if updates using an older version as installed on the camera should be allowed. - bool boForceDowngrade = false, - /// [in] A boolean value which defines if the user sets of the device will be kept or will be deleted during the update. - bool boKeepUserSets = true, - /// [in] A boolean value which defines if updates to versions which will deliver interface breaking changes will be allowed. Setting this value to \c true will also update a device which after the update - /// might have a different interface. See documentation for additional information about breaking changes in firmware versions(there are not too many)! - bool boForceBreakingChange = false ) : timeElapsed_s_( 0 ) + ~VideoStream() { - ComponentLocator l( pDev->hDev() ); - l.bindComponent( updateFirmware_, "UpdateFirmware@i" ); - if( !updateFirmware_.isValid() ) - { - if( !pDev->isOpen() ) - { - pDev->open(); - } - DeviceComponentLocator locator( pDev, dltSystemSettings ); - locator.bindComponent( firmwareUpdateKeepUserSets_, "KeepUserSets" ); - locator.bindComponent( firmwareUpdateForceBreakingChange_, "ForceBreakingChange" ); - locator.bindComponent( firmwareUpdateForceOverrideSameVersion_, "ForceOverrideSameVersion" ); - locator.bindComponent( firmwareUpdateForceDowngrade_, "ForceDowngrade" ); - locator.bindComponent( firmwareUpdateFileName_, "FileName" ); - locator.bindComponent( firmwareUpdateStatusMessage_, "UpdateStatusMessage" ); - locator.bindComponent( firmwareUpdateProgressListenerAddress_, "ProgressListenerAddress" ); - locator.bindComponent( firmwareUpdateProgressListenerUserDataAddress_, "ProgressListenerUserDataAddress" ); - locator.bindComponent( updateFirmware_, "UpdateDeviceFirmware@i" ); - } - else - { - l.bindComponent( firmwareVersionToUpload, "FirmwareVersionToUpload" ); - } - - if( firmwareUpdateForceOverrideSameVersion_.isValid() ) - { - firmwareUpdateForceOverrideSameVersion_.write( boForceOverideSameVersion ? bTrue : bFalse ); - } - if( firmwareUpdateForceDowngrade_.isValid() ) - { - firmwareUpdateForceDowngrade_.write( boForceDowngrade ? bTrue : bFalse ); - } - if( firmwareUpdateKeepUserSets_.isValid() ) - { - firmwareUpdateKeepUserSets_.write( boKeepUserSets ? bTrue : bFalse ); - } - if( firmwareUpdateForceBreakingChange_.isValid() ) - { - firmwareUpdateForceBreakingChange_.write( boForceBreakingChange ? bTrue : bFalse ); - } + DMR_CloseVideoStream( hStream_ ); } - virtual ~FirmwareUpdater() {} - /// \brief This function will be called once a message is waiting to be passed to the user. + /// \brief Returns the file name of this video stream. /** - * Re-implement this function in a derived class in order to implement a custom behaviour. - * \return - * - mvIMPACT::acquire::fuaContinue if the current update shall continue. - * - mvIMPACT::acquire::fuaCancel otherwise. - */ - virtual int onErrorMessage( const double /*timeElapsed*/ ) const + * This function returns the file name of this video stream. + * + * \since 2.39.0 + * + * \return The file name of this video stream. + */ + const std::string& getFileName( void ) const { - return fuaContinue; + return fileName_; } - /// \brief This function will be called once the devices flash memory is erased. + /// \brief Returns the codec used by this video stream. /** - * Re-implement this function in a derived class in order to implement a custom behaviour. - * - * \note Only some device types require this step so this callback might not be called for every device type. - * - * \return - * - mvIMPACT::acquire::fuaContinue if the current update shall continue. - * - mvIMPACT::acquire::fuaCancel otherwise. - */ - virtual int onErasingFlash( const int /*currentProgress_pc*/, const double /*timeElapsed*/ ) const + * This function returns the codec used by this video stream. + * + * \since 2.39.0 + * + * \return The codec used by this video stream. + */ + const TVideoCodec& getCodec( void ) const { - return fuaContinue; + return videoCodec_; } - /// \brief This function will be called once firmware archive (*.mvu) is unzipped to provide the correct firmware file. + /// \brief Returns the a string representation for a video codec. /** - * Re-implement this function in a derived class in order to implement a custom behaviour. - * - * \return - * - mvIMPACT::acquire::fuaContinue if the current update shall continue. - * - mvIMPACT::acquire::fuaCancel otherwise. - */ - virtual int onUnzippingFirmwareArchive( const int /*currentProgress_pc*/, const double /*timeElapsed*/ ) const + * This function returns a string representation for a video codec. + * + * \since 2.39.0 + * + * \return A string representation for a video codec. + */ + static std::string getCodecAsString( const TVideoCodec codec ) + { + switch( codec ) + { + case vcH264: + return "H.264"; + case vcH265: + return "H.265"; + case vcMPEG2: + return "MPEG-2"; + } + return "INVALID VIDEO CODEC"; + } + /// \brief Returns the codec used by this video stream as a string. + /** + * This function returns the codec used by this video stream as a string. + * + * \since 2.39.0 + * + * \return The codec used by this video stream as a string. + */ + std::string getCodecAsString( void ) const + { + return getCodecAsString( getCodec() ); + } + /// \brief Checks if the video stream API is available. + /** + * This function checks if the video stream API is available. + * + * \since 2.39.0 + * + * \return + * - true if the video stream API is available thus video streams can be created + * - false otherwise. + */ + static bool isAPIAvailable( void ) { - return fuaContinue; + return DMR_InitVideoStreamAPI( 0, 0 ) == DMR_NO_ERROR; } - /// \brief This function will be called once the boot programmer of an mvBlueFOX3 camera is updated. + /// \brief Stores an image into the video stream. /** - * Re-implement this function in a derived class in order to implement a custom behaviour. - * - * \note - * - Only mvBlueFOX3 cameras require this step so this callback might not be called in case of different device types. - * - BootProgrammer updates won't be necessary often, so this callback will not apply in every firmware update process. - * - * \return - * - mvIMPACT::acquire::fuaContinue if the current update shall continue. - * - mvIMPACT::acquire::fuaCancel otherwise. - */ - virtual int onUpdatingBootProgrammer( const int /*currentProgress_pc*/, const double /*timeElapsed*/ ) const + * This function stores an image into the video stream. + * + * \note + * Internally the FFmpeg project (see \ref LegalNotice_UsedThirdPartySoftware_FFmpeg section as well as the remarks made here: \b mvIMPACT::acquire::labs::VideoStream) is used for this operation. If the corresponding libraries + * cannot be located in one of the supported versions on the host system calling this function will fail. + * + * \since 2.39.0 + * + * \return + * - mvIMPACT::acquire::DMR_NO_ERROR if successful. + * - mvIMPACT::acquire::DMR_LIBRARY_NOT_FOUND if no compatible version of the FFmpeg libraries could be located on the host system. + * - mvIMPACT::acquire::DEV_UNSUPPORTED_PARAMETER if a pixel format has been passed to the function that is not supported by the internal algorithms. + * - mvIMPACT::acquire::DEV_INPUT_PARAM_INVALID e.g. if a pixel format has been passed to the function that is not supported by the FFmpeg libraries. + * - A negative error code of type ::TDMR_ERROR otherwise. + */ + int saveImage( + /// [in] The image to encode and store. + const ImageBuffer* pBuffer, + /// [in] A timestamp(in us) to associate this image with. This can be 0 if no timestamp is available. + int64_type timestamp_us = 0LL ) { - return fuaContinue; + return DMR_SaveImageBufferToVideoStream( hStream_, pBuffer, timestamp_us ); } - /// \brief This function will be called once the actual firmware file is uploaded to the device's flash memory. + /// \brief Encodes and stores the image associated with the \b mvIMPACT::acquire::Request object into the stream. /** - * Re-implement this function in a derived class in order to implement a custom behaviour. - * - * \note - * - Depending on the device type this step might take a few seconds up to a few minutes. - * - The callback will be called several times during the upload. - * - Each time there was a progress of 5 percent this callback will be called. - * - * \return - * - mvIMPACT::acquire::fuaContinue if the current update shall continue. - * - mvIMPACT::acquire::fuaCancel otherwise. - */ - virtual int onUploadingImage( const int /*currentProgress_pc*/, const double /*timeElapsed*/ ) const + * This function stores the image associated with an \b mvIMPACT::acquire::Request object into the video stream. + * + * \note + * Internally the FFmpeg project (see \ref LegalNotice_UsedThirdPartySoftware_FFmpeg section as well as the remarks made here: \b mvIMPACT::acquire::labs::VideoStream) is used for this operation. If the corresponding libraries + * cannot be located in one of the supported versions on the host system calling this function will fail. + * + * \since 2.39.0 + * + * \sa + * \b mvIMPACT::acquire::labs::VideoStream::pause, \n + * \b mvIMPACT::acquire::labs::VideoStream::isPaused, \n + * \b mvIMPACT::acquire::labs::VideoStream::resume \n + * + * \return + * - mvIMPACT::acquire::DMR_NO_ERROR if successful. + * - mvIMPACT::acquire::DMR_LIBRARY_NOT_FOUND if no compatible version of the FFmpeg libraries could be located on the host system. + * - mvIMPACT::acquire::DEV_UNSUPPORTED_PARAMETER if a pixel format has been passed to the function that is not supported by the internal algorithms. + * - mvIMPACT::acquire::DEV_INPUT_PARAM_INVALID e.g. if a pixel format has been passed to the function that is not supported by the FFmpeg libraries. + * - A negative error code of type ::TDMR_ERROR otherwise. + */ + int saveImage( + /// [in] A pointer to a \b mvIMPACT::acquire::Device object obtained from + /// a \b mvIMPACT::acquire::DeviceManager object. + Device* pDev, + /// [in] A pointer to the \b mvIMPACT::acquire::Request object carrying the image to encode and store. + const Request* pRequest ) { - return fuaContinue; + return DMR_ImageRequestSaveToVideoStream( pDev->hDrv(), pRequest->getNumber(), hStream_ ); } - /// \brief This function will be called once the device reboots to make sure the new firmware is applied to the device. + /// \brief Pauses this video stream. /** - * Re-implement this function in a derived class in order to implement a custom behaviour. - * - * \return - * - mvIMPACT::acquire::fuaContinue if the current update shall continue. - * - mvIMPACT::acquire::fuaCancel otherwise. - */ - virtual int onRebooting( const int /*currentProgress_pc*/, const double /*timeElapsed*/ ) const + * This function pauses this video stream. While paused no images can be written into the stream. Pausing internally simply starts a timer + * and all accumulated pause times will be subtracted from images that will be written into the stream after the pause has been ended effectively + * allowing to remove inactive sections from the video stream. + * + * \note + * Internally the FFmpeg project (see \ref LegalNotice_UsedThirdPartySoftware_FFmpeg section as well as the remarks made here: \b mvIMPACT::acquire::labs::VideoStream) is used for this operation. If the corresponding libraries + * cannot be located in one of the supported versions on the host system calling this function will fail. + * + * \since 2.41.0 + * + * \sa + * \b mvIMPACT::acquire::labs::VideoStream::resume, \n + * \b mvIMPACT::acquire::labs::VideoStream::isPaused + * + * \return + * - mvIMPACT::acquire::DMR_NO_ERROR if successful. + * - mvIMPACT::acquire::DMR_BUSY if this stream has been paused already. + * - A negative error code of type ::TDMR_ERROR otherwise. + */ + int pause( void ) const { - return fuaContinue; + return DMR_PauseVideoStream( hStream_ ); } - /// \brief This function will be called when the settings of the device are stored before updating the firmware. + /// \brief Checks is this video stream is currently paused. /** - * Re-implement this function in a derived class in order to implement a custom behaviour. - * - * This callback will only be called when user sets shall be available after the update. This can be specified by setting the \b boKeepUserSets flag upon construction of this object. - * - * \return - * - mvIMPACT::acquire::fuaContinue if the current update shall continue. - * - mvIMPACT::acquire::fuaCancel otherwise. - */ - virtual int onSavingUserSets( const int /*currentProgress_pc*/, const double /*timeElapsed*/ ) const + * + * \note + * Internally the FFmpeg project (see \ref LegalNotice_UsedThirdPartySoftware_FFmpeg section as well as the remarks made here: \b mvIMPACT::acquire::labs::VideoStream) is used for this operation. If the corresponding libraries + * cannot be located in one of the supported versions on the host system calling this function will fail. + * + * \since 2.41.0 + * + * \sa + * \b mvIMPACT::acquire::labs::VideoStream::pause, \n + * \b mvIMPACT::acquire::labs::VideoStream::resume + * + * \return + * - true if this video stream is currently paused. + * - false otherwise. + */ + bool isPaused( void ) const { - return fuaContinue; + return DMR_IsVideoStreamPaused( hStream_ ) == DMR_NO_ERROR; } - /// \brief This function will be called when the settings of the device are written back after updating the firmware. + /// \brief Resumes this video stream. /** - * Re-implement this function in a derived class in order to implement a custom behaviour. - * - * This callback will only be called when user sets shall be available after the update. This can be specified by setting the \b boKeepUserSets flag upon construction of this object. - * - * \return - * - mvIMPACT::acquire::fuaContinue if the current update shall continue. - * - mvIMPACT::acquire::fuaCancel otherwise. - */ - virtual int onLoadingUserSets( const int /*currentProgress_pc*/, const double /*timeElapsed*/ ) const + * This function resumes this previously paused video stream. While paused no images can be written into the stream. Pausing internally simply starts a timer + * and all accumulated pause times will be subtracted from images that will be written into the stream after the pause has been ended effectively + * allowing to remove inactive sections from the video stream. + * + * \note + * Internally the FFmpeg project (see \ref LegalNotice_UsedThirdPartySoftware_FFmpeg section as well as the remarks made here: \b mvIMPACT::acquire::labs::VideoStream) is used for this operation. If the corresponding libraries + * cannot be located in one of the supported versions on the host system calling this function will fail. + * + * \since 2.41.0 + * + * \sa + * \b mvIMPACT::acquire::labs::VideoStream::pause, \n + * \b mvIMPACT::acquire::labs::VideoStream::isPaused + * + * \return + * - mvIMPACT::acquire::DMR_NO_ERROR if successful. + * - mvIMPACT::acquire::DMR_EXECUTION_PROHIBITED if this stream has been paused already. + * - A negative error code of type ::TDMR_ERROR otherwise. + */ + int resume( void ) const { - return fuaContinue; + return DMR_ResumeVideoStream( hStream_ ); } - /// \brief A function to start the firmware update process. +}; + +//----------------------------------------------------------------------------- +/// \brief A smaller helper class for pausing a video stream for a defined time. +/** + * This class uses a RAII pattern to pause an instance of mvIMPACT::acquire::labs::VideoStream + * \since 2.41.0 + * \ingroup CommonInterface + */ +class VideoStreamPauseScope +//----------------------------------------------------------------------------- +{ + VideoStream& stream_; + bool boPausedWithinScope_; +public: + /// \brief Creates a new mvIMPACT::acquire::labs::VideoStreamPauseScope object. /** - * This function is intended to be used to update MATRIX VISION devices. - * \note - * The function needs to be called without any additional parameter in case of mvBlueFOX devices. - * - * \return - * - mvIMPACT::acquire::DMR_NO_ERROR if successful. - * - A negative error code of type ::TDMR_ERROR otherwise. - */ - TDMR_ERROR update( - /// [in] Path to the file which should be used to update the device. Can be empty if no update archives are needed for the device. - const std::string& archivePath = "" - ) + * Trying to pause a stream that is paused already or trying to resume a stream that is not paused will raise an exception! + * When this object goes out of scope the previous state will be restored automatically. + */ + explicit VideoStreamPauseScope( + /// [in] The video stream that shall be configured. + VideoStream& stream, + /// [in] The mode the selected video stream shall have while this object is alive. + bool boPausedWithinScope = true ) : stream_( stream ), boPausedWithinScope_( boPausedWithinScope ) { - if( !updateFirmware_.isValid() ) + TDMR_ERROR result = DMR_NO_ERROR; + if( boPausedWithinScope_ ) { - return DMR_FEATURE_NOT_AVAILABLE; + result = static_cast( stream_.pause() ); } - if( firmwareUpdateFileName_.isValid() ) + else { - firmwareUpdateFileName_.writeS( archivePath ); + result = static_cast( stream_.resume() ); + } + + if( result != DMR_NO_ERROR ) + { + ExceptionFactory::raiseException( __FUNCTION__, __LINE__, result ); } - registerFirmwareUpdateCallback( infoCallback, this ); - const TDMR_ERROR returnVal = static_cast( updateFirmware_.call() ); - unregisterFirmwareUpdateCallback(); - return returnVal; - } - /// \brief Returns the current status from the status property - std::string statusMessage( void ) const - { - return firmwareUpdateStatusMessage_.isValid() ? firmwareUpdateStatusMessage_.readS() : "STATUS PROPERTY NOT AVAILABLE"; } - /// \brief A method to receive the time in seconds since the update process has been started - /** - * \return The time elapsed since the firmware update currently running has been started. - */ - double getTimeElapsed( void ) const + ~VideoStreamPauseScope() { - return timeElapsed_s_; + if( boPausedWithinScope_ ) + { + stream_.resume(); + } + else + { + stream_.pause(); + } } - - // *INDENT-OFF* - PYTHON_OR_JAVA_ONLY( %immutable; ) - // *INDENT-ON* - /// \brief An enumerated integer property containing a list of available firmware versions. - /** - * \note - * This feature currently is only available for \b mvBlueFOX devices since here the firmware is part of the driver library. - * So no additional archive is needed, but the desired firmware version to upload into the device's non-volatile memory can - * be selected by writing to this property before calling the \b mvIMPACT::acquire::labs::FirmwareUpdater::update function. - */ - PropertyI firmwareVersionToUpload; - // *INDENT-OFF* - PYTHON_OR_JAVA_ONLY( %mutable; ) - // *INDENT-OFF* }; } // namespace labs diff --git a/Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire_GenICam.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire_GenICam.h similarity index 93% rename from Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire_GenICam.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire_GenICam.h index d8ed61ba..89a7a6bb 100644 --- a/Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire_GenICam.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire_GenICam.h @@ -1,12 +1,15 @@ //----------------------------------------------------------------------------- -// (C) Copyright 2005 - 2021 by MATRIX VISION GmbH +// @description: Impact Acquire +// @copyright: (C) Copyright 2005 - 2023 by Balluff GmbH +// @authors: APIs and drivers development team at Balluff GmbH +// @initial date: 2005 // -// This software is provided by MATRIX VISION GmbH "as is" +// This software is provided by Balluff GmbH "as is" // and any express or implied warranties, including, but not limited to, the // implied warranties of merchantability and fitness for a particular purpose // are disclaimed. // -// In no event shall MATRIX VISION GmbH be liable for any direct, +// In no event shall Balluff GmbH be liable for any direct, // indirect, incidental, special, exemplary, or consequential damages // (including, but not limited to, procurement of substitute goods or services; // loss of use, data, or profits; or business interruption) however caused and @@ -41,7 +44,7 @@ namespace acquire namespace GenICam { -/// \defgroup GenICamInterface GenICam interface layout +/// \defgroup GenICamInterface GenICam Interface Layout /// \brief Classes and functions that will be available if the device is used /// with the \a GenICam interface layout. /** @@ -49,7 +52,7 @@ namespace GenICam * with the mvIMPACT::acquire::dilGenICam interface layout. */ -/** \defgroup GenICamInterfaceDevice GenICam interface layout(device) +/** \defgroup GenICamInterfaceDevice GenICam Interface Layout (Device) * \brief Classes and functions that will be available if the device is used * with the \a GenICam interface layout. * @@ -59,7 +62,7 @@ namespace GenICam * \ingroup GenICamInterface */ -/** \defgroup GenICamInterfaceProducer GenICam interface layout(producer) +/** \defgroup GenICamInterfaceProducer GenICam Interface Layout (Producer) * \brief Classes and functions that will be available if the device is used * with the \a GenICam interface layout. * @@ -158,6 +161,7 @@ public: timestampReset(), timestampLatch(), timestampLatchValue(), + rcSystemReady(), mvDeviceTemperatureRaw(), mvDeviceTemperatureUpperLimit(), mvDeviceTemperatureLowerLimit(), @@ -181,6 +185,8 @@ public: mvTimestampPPSPulsesMissed(), mvTimestampPPSStatus(), mvTimestampResetValue(), + mvDeviceTimeSync(), + mvDeviceTimeSyncPushValue(), mvTemperatureState(), mvTemperatureStateCriticalThreshold() { @@ -243,10 +249,6 @@ public: locator.bindComponent( deviceLinkConnectionCount, "DeviceLinkConnectionCount" ); locator.bindComponent( deviceLinkHeartbeatMode, "DeviceLinkHeartbeatMode" ); locator.bindComponent( deviceLinkHeartbeatTimeout, "DeviceLinkHeartbeatTimeout" ); - if( !deviceLinkHeartbeatTimeout.isValid() ) - { - locator.bindComponent( deviceLinkHeartbeatTimeout, "GevHeartbeatTimeout" ); - } locator.bindComponent( deviceLinkCommandTimeout, "DeviceLinkCommandTimeout" ); locator.bindComponent( deviceStreamChannelCount, "DeviceStreamChannelCount" ); if( !deviceStreamChannelCount.isValid() ) @@ -309,6 +311,7 @@ public: { locator.bindComponent( timestampLatchValue, "GevTimestampValue" ); } + locator.bindComponent( rcSystemReady, "RcSystemReady" ); locator.bindComponent( mvDeviceTemperatureRaw, "mvDeviceTemperatureRaw" ); locator.bindComponent( mvDeviceTemperatureUpperLimit, "mvDeviceTemperatureUpperLimit" ); locator.bindComponent( mvDeviceTemperatureLowerLimit, "mvDeviceTemperatureLowerLimit" ); @@ -340,6 +343,8 @@ public: locator.bindComponent( mvTimestampPPSPulsesMissed, "mvTimestampPPSPulsesMissed" ); locator.bindComponent( mvTimestampPPSStatus, "mvTimestampPPSStatus" ); locator.bindComponent( mvTimestampResetValue, "mvTimestampResetValue" ); + locator.bindComponent( mvDeviceTimeSync, "mvDeviceTimeSync" ); + locator.bindComponent( mvDeviceTimeSyncPushValue, "mvDeviceTimeSyncPushValue" ); locator.bindComponent( mvTemperatureState, "mvTemperatureState" ); locator.bindComponent( mvTemperatureStateCriticalThreshold, "mvTemperatureStateCriticalThreshold" ); } @@ -372,10 +377,10 @@ public: * Scan type of the sensor of the device. * * The following string values might be valid for this feature: - * - \b Areascan (Display string: 'Areascan'): 2D sensor. - * - \b Linescan (Display string: 'Linescan'): 1D sensor. - * - \b Areascan3D (Display string: 'Areascan 3D'): device outputs 2D range image. - * - \b Linescan3D (Display string: 'Linescan 3D'): device outputs 1D range image. + * - \b Areascan (Display string: 'Areascan'): 2D sensor outputting an image created from a unique sensor acquisition. + * - \b Linescan (Display string: 'Linescan'): 1D sensor outputting an image acquired line by line. + * - \b Areascan3D (Display string: 'Areascan 3D'): 3D sensor outputting a range (or disparity) image created from a unique sensor acquisition. + * - \b Linescan3D (Display string: 'Linescan 3D'): 3D sensor outputting a range (or disparity) image acquired line by line. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -842,21 +847,26 @@ public: * Returns the latched value of the timestamp counter. */ PropertyI64 timestampLatchValue; + /// \brief A boolean property. Returns if the system is ready (fully booted). + /** + * Returns if the system is ready (fully booted). + */ + PropertyIBoolean rcSystemReady; /// \brief An integer property. Device temperature in degrees Celsius (C). /** * Device temperature in degrees Celsius (C). It is measured at the location selected by DeviceTemperatureSelector. */ PropertyI64 mvDeviceTemperatureRaw; - /// \brief An integer property. Upper limit in degrees Celsius(C) for the TemperatureOutOfRange signal. + /// \brief A floating point property. Upper limit in degrees Celsius(C) for the TemperatureOutOfRange signal. /** * Upper limit in degrees Celsius(C) for the TemperatureOutOfRange signal. */ - PropertyI64 mvDeviceTemperatureUpperLimit; - /// \brief An integer property. Lower limit in degrees Celsius(C) for the TemperatureOutOfRange signal. + PropertyF mvDeviceTemperatureUpperLimit; + /// \brief A floating point property. Lower limit in degrees Celsius(C) for the TemperatureOutOfRange signal. /** * Lower limit in degrees Celsius(C) for the TemperatureOutOfRange signal. */ - PropertyI64 mvDeviceTemperatureLowerLimit; + PropertyF mvDeviceTemperatureLowerLimit; /// \brief An enumerated integer property. Hysteresis in degrees Celsius(C) for temperature limits. /** * Hysteresis in degrees Celsius(C) for temperature limits. @@ -998,7 +1008,7 @@ public: PropertyS mvDeviceFirmwareHashCode; /// \brief A method object. Do a new calculation of the hash code. This might serve as a means to check whether the firmware has been changed in flash. /** - * Do a new calculation of the hash code. This might serve as a means to check whether the firmware has been changed in flash. Caution: This needs approximately 15-20 seconds! + * Do a new calculation of the hash code. This might serve as a means to check whether the firmware has been changed in flash. Caution: This needs approximately 15-20 seconds. */ Method mvCalculateHashCode; /// \brief An enumerated integer property. The algorithm used for the hash calculation. @@ -1070,6 +1080,24 @@ public: * Defines the initial value after the cameras timestamp timer has been reset. */ PropertyI64 mvTimestampResetValue; + /// \brief An enumerated integer property. you can specify the way the camera timestamps are synchronized to the PC / your application + /** + * you can specify the way the camera timestamps are synchronized to the PC / your application + * + * The following string values might be valid for this feature: + * - \b mvSystemTime (Display string: 'mv System Time') + * - \b mvNoSynchronization (Display string: 'mv No Synchronization') + * - \b mvPushSynchronization (Display string: 'mv Push Synchronization') + * + * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. + * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. + */ + PropertyI64 mvDeviceTimeSync; + /// \brief An integer property. when you write to this register in 'mvPushSynchronization'-mode you can actively synchronize the timestamps with accurate time values + /** + * when you write to this register in 'mvPushSynchronization'-mode you can actively synchironize the timestamps with accurate time values + */ + PropertyI64 mvDeviceTimeSyncPushValue; /// \brief An enumerated integer property. Indicates the current temperature state of the camera /** * Indicates the current temperature state of the camera @@ -1179,7 +1207,9 @@ public: imageCompressionQuality(), imageCompressionBitrate(), imageCompressionJPEGFormatOption(), - mvSensorDigitizationBitDepth() + mvSensorDigitizationBitDepth(), + mvDualAdcMode(), + mvDualAdcCompression() { pDev->validateInterfaceLayout( dilGenICam ); mvIMPACT::acquire::DeviceComponentLocator locator( pDev, mvIMPACT::acquire::dltSetting, settingName ); @@ -1267,6 +1297,8 @@ public: locator.bindComponent( imageCompressionBitrate, "ImageCompressionBitrate" ); locator.bindComponent( imageCompressionJPEGFormatOption, "ImageCompressionJPEGFormatOption" ); locator.bindComponent( mvSensorDigitizationBitDepth, "mvSensorDigitizationBitDepth" ); + locator.bindComponent( mvDualAdcMode, "mvDualAdcMode" ); + locator.bindComponent( mvDualAdcCompression, "mvDualAdcCompression" ); } // *INDENT-OFF* PYTHON_OR_JAVA_ONLY( %immutable; ) @@ -1356,14 +1388,13 @@ public: * Selects the Region of interest to control. The RegionSelector feature allows devices that are able to extract multiple regions out of an image, to configure the features of those individual regions independently. * * The following string values might be valid for this feature: + * - \b All (Display string: 'All'): Selected features will control all the regions at the same time. * - \b Region0 (Display string: 'Region 0'): Selected feature will control the region 0. * - \b Region1 (Display string: 'Region 1'): Selected feature will control the region 1. * - \b Region2 (Display string: 'Region 2'): Selected feature will control the region 2. - * - \b Region\#3\# (Display string: 'Region \#3\#'): Selected feature will control the region \#3\#. * - \b Scan3dExtraction0 (Display string: 'Scan 3d Extraction 0'): Selected feature will control the Scan3dExtraction0 output Region. * - \b Scan3dExtraction1 (Display string: 'Scan 3d Extraction 1'): Selected feature will control the Scan3dExtraction1 output Region. * - \b Scan3dExtraction2 (Display string: 'Scan 3d Extraction 2'): Selected feature will control the Scan3dExtraction2 output Region. - * - \b All (Display string: 'All'): Selected features will control all the regions at the same time. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -1389,7 +1420,6 @@ public: * - \b Stream0 (Display string: 'Stream 0'): The destination of the region is the data stream 0. * - \b Stream1 (Display string: 'Stream 1'): The destination of the region is the data stream 1. * - \b Stream2 (Display string: 'Stream 2'): The destination of the region is the data stream 2. - * - \b Stream\#3\# (Display string: 'Stream \#3\#'): The destination of the region is the data stream \#3\#. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -1411,9 +1441,9 @@ public: * - \b Range (Display string: 'Range'): The acquisition of range (distance) data is controlled. The data produced may be only range (2.5D) or a point cloud giving the 3D coordinates depending on the Scan3dControl features. * - \b Reflectance (Display string: 'Reflectance'): The reflected intensity acquired together with Range in a Linescan3D sensor acquiring a single linescan profile for each exposure of the sensor. * - \b Confidence (Display string: 'Confidence'): The acquisition of confidence map of the acquired image is controlled. Confidence data may be binary (0 - invalid) or an integer where 0 is invalid and increasing value is increased confidence in the data in the corresponding pixel. If floating point representation is used the confidence image is normalized to the range [0,1], for integer representation the maximum possible integer represents maximum confidence. - * - \b Disparity (Display string: 'Disparity'): The acquisition of stereo camera disparity data is controlled. Disparity is a more specific range format approximately inversely proportional to distance. Disparity is typically given in pixel units. * - \b Scatter (Display string: 'Scatter'): The acquisition of data measuring how much light is scattered around the reflected light. In processing this is used as an additional intensity image, often together with the standard intensity or reflectance. - * - \b Multispectral (Display string: 'Multispectral'): The acquisition of multiple spectral bands corresponding to various light wavelenghts is controlled. + * - \b Disparity (Display string: 'Disparity'): The acquisition of stereo camera disparity data is controlled. Disparity is a more specific range format approximately inversely proportional to distance. Disparity is typically given in pixel units. + * - \b Multispectral (Display string: 'Multispectral'): The acquisition of multiple spectral bands corresponding to various light wavelengths is controlled. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -1437,7 +1467,6 @@ public: * - \b Group0 (Display string: 'Group 0'): Group 0 * - \b Group1 (Display string: 'Group 1'): Group 1 * - \b Group2 (Display string: 'Group 2'): Group 2 - * - \b Group\#3\# (Display string: 'Group \#3\#'): Group \#3\# * - \b Group3 (Display string: 'Group 3'): Group 3 * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. @@ -1461,8 +1490,8 @@ public: * - \b Ultraviolet (Display string: 'Ultraviolet'): The acquisition of non-visible ultraviolet light is controlled. * - \b Range (Display string: 'Range'): The acquisition of range (distance) data is controlled. The data produced may be only range (2.5D) or a point cloud 3D coordinates depending on the Scan3dControl features. * - \b Confidence (Display string: 'Confidence'): The acquisition of confidence map of the acquired image is controlled. Confidence data may be binary (0 - invalid) or an integer where 0 is invalid and increasing value is increased confidence in the data in the corresponding pixel. If floating point representation is used the confidence image is normalized to the range [0,1], for integer representation the maximum possible integer represents maximum confidence. - * - \b Disparity (Display string: 'Disparity'): The acquisition of stereo camera disparity data is controlled. Disparity is a more specific range format approximately inversely proportional to distance. Disparity is typically given in pixel units. * - \b Scatter (Display string: 'Scatter'): The acquisition of data measuring how much light is scattered around the reflected light. In processing this is used as an additional intensity image, often together with the standard intensity. + * - \b Disparity (Display string: 'Disparity'): The acquisition of stereo camera disparity data is controlled. Disparity is a more specific range format approximately inversely proportional to distance. Disparity is typically given in pixel units. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -1584,11 +1613,10 @@ public: * Selects which binning engine is controlled by the BinningHorizontal and BinningVertical features. * * The following string values might be valid for this feature: - * - \b Sensor (Display string: 'Sensor'): Selected features will control the sensor binning. * - \b Region0 (Display string: 'Region 0'): Selected feature will control the region 0 binning. * - \b Region1 (Display string: 'Region 1'): Selected feature will control the region 1 binning. * - \b Region2 (Display string: 'Region 2'): Selected feature will control the region 2 binning. - * - \b Region\#3\# (Display string: 'Region \#3\#'): Selected feature will control the region \#3\# binning. + * - \b Sensor (Display string: 'Sensor'): Selected features will control the sensor binning. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -1902,11 +1930,10 @@ public: * Selects which test pattern generator is controlled by the TestPattern feature. * * The following string values might be valid for this feature: - * - \b Sensor (Display string: 'Sensor'): TestPattern feature will control the sensor's test pattern generator. * - \b Region0 (Display string: 'Region 0'): TestPattern feature will control the region 0 test pattern generator. * - \b Region1 (Display string: 'Region 1'): TestPattern feature will control the region 1 test pattern generator. * - \b Region2 (Display string: 'Region 2'): TestPattern feature will control the region 2 test pattern generator. - * - \b Region\#3\# (Display string: 'Region \#3\#'): TestPattern feature will control the region \#3\# test pattern generator. + * - \b Sensor (Display string: 'Sensor'): TestPattern feature will control the sensor's test pattern generator. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -1982,7 +2009,7 @@ public: PropertyI64 deinterlacing; /// \brief An enumerated integer property. Enable a specific image compression mode as the base mode for image transfer. /** - * Enable a specific image compression mode as the base mode for image transfer. Optionally, chunk data can be appended to the compressed image (See the REF _Ref397502619 \h chapter). + * Enable a specific image compression mode as the base mode for image transfer. * * The following string values might be valid for this feature: * - \b Off (Display string: 'Off'): Default value. Image compression is disabled. Images are transmitted uncompressed. @@ -2045,6 +2072,16 @@ public: * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. */ PropertyI64 mvSensorDigitizationBitDepth; + /// \brief A boolean property. Use this mode for a higher dynamic range. The maximum frame rate will be halved then. Using this mode only makes sense when used with pixel formats >= 14 bits. For Sony Gen 4 sensors, both high and low level gain pixels are combined internally in the sensor. + /** + * Use this mode for a higher dynamic range. The maximum frame rate will be halved then. Using this mode only makes sense when used with pixel formats >= 14 bits. For Sony Gen 4 sensors, both high and low level gain pixels are combined internally in the sensor. + */ + PropertyIBoolean mvDualAdcMode; + /// \brief An integer property. After the internal combination of both high and low gain pixels, the output data is compressed to fit 12-bits. This feature sets the compression characteristic of the Dual Adc (different kneepoints of the compression curve). 0 means compression is off. + /** + * After the internally combination of both high and low gain pixels, the output data is compressed to fit 12-bits. This feature sets the compression characteristic of the Dual Adc (different kneepoints of the compression curve). 0 means compression is off. + */ + PropertyI64 mvDualAdcCompression; // *INDENT-OFF* PYTHON_OR_JAVA_ONLY( %mutable; ) // *INDENT-ON* @@ -2101,6 +2138,7 @@ public: exposureTime(), mvExposureHorizontalZoneDivider(), exposureAuto(), + mvMultiExposureCount(), multiSlopeMode(), multiSlopeKneePointCount(), multiSlopeKneePointSelector(), @@ -2108,6 +2146,15 @@ public: multiSlopeSaturationThreshold(), multiSlopeIntensityLimit(), multiSlopeExposureGradient(), + exposureTimeAutoMax(), + exposureRegionOffsetX(), + exposureRegionOffsetY(), + exposureRegionWidth(), + exposureRegionHeight(), + acquisitionAlternateFilter(), + acquisitionMultiPartMode(), + rcExposureAutoAverageMax(), + rcExposureAutoAverageMin(), mvAcquisitionFrameRateLimitMode(), mvAcquisitionFrameRateEnable(), mvResultingFrameRate(), @@ -2126,6 +2173,8 @@ public: mvExposureAutoHeight(), mvExposureAutoMode(), mvSmearReduction(), + mvExposureActiveShiftEnable(), + mvExposureActiveShift(), mvAcquisitionMemoryMode(), mvPretriggerFrameCount(), mvAcquisitionMemoryMaxFrameCount(), @@ -2187,6 +2236,7 @@ public: } locator.bindComponent( mvExposureHorizontalZoneDivider, "mvExposureHorizontalZoneDivider" ); locator.bindComponent( exposureAuto, "ExposureAuto" ); + locator.bindComponent( mvMultiExposureCount, "mvMultiExposureCount" ); locator.bindComponent( multiSlopeMode, "MultiSlopeMode" ); locator.bindComponent( multiSlopeKneePointCount, "MultiSlopeKneePointCount" ); locator.bindComponent( multiSlopeKneePointSelector, "MultiSlopeKneePointSelector" ); @@ -2194,6 +2244,15 @@ public: locator.bindComponent( multiSlopeSaturationThreshold, "MultiSlopeSaturationThreshold" ); locator.bindComponent( multiSlopeIntensityLimit, "MultiSlopeIntensityLimit" ); locator.bindComponent( multiSlopeExposureGradient, "MultiSlopeExposureGradient" ); + locator.bindComponent( exposureTimeAutoMax, "ExposureTimeAutoMax" ); + locator.bindComponent( exposureRegionOffsetX, "ExposureRegionOffsetX" ); + locator.bindComponent( exposureRegionOffsetY, "ExposureRegionOffsetY" ); + locator.bindComponent( exposureRegionWidth, "ExposureRegionWidth" ); + locator.bindComponent( exposureRegionHeight, "ExposureRegionHeight" ); + locator.bindComponent( acquisitionAlternateFilter, "AcquisitionAlternateFilter" ); + locator.bindComponent( acquisitionMultiPartMode, "AcquisitionMultiPartMode" ); + locator.bindComponent( rcExposureAutoAverageMax, "RcExposureAutoAverageMax" ); + locator.bindComponent( rcExposureAutoAverageMin, "RcExposureAutoAverageMin" ); locator.bindComponent( mvAcquisitionFrameRateLimitMode, "mvAcquisitionFrameRateLimitMode" ); locator.bindComponent( mvAcquisitionFrameRateEnable, "mvAcquisitionFrameRateEnable" ); locator.bindComponent( mvResultingFrameRate, "mvResultingFrameRate" ); @@ -2212,6 +2271,8 @@ public: locator.bindComponent( mvExposureAutoHeight, "mvExposureAutoHeight" ); locator.bindComponent( mvExposureAutoMode, "mvExposureAutoMode" ); locator.bindComponent( mvSmearReduction, "mvSmearReduction" ); + locator.bindComponent( mvExposureActiveShiftEnable, "mvExposureActiveShiftEnable" ); + locator.bindComponent( mvExposureActiveShift, "mvExposureActiveShift" ); locator.bindComponent( mvAcquisitionMemoryMode, "mvAcquisitionMemoryMode" ); locator.bindComponent( mvPretriggerFrameCount, "mvPretriggerFrameCount" ); locator.bindComponent( mvAcquisitionMemoryMaxFrameCount, "mvAcquisitionMemoryMaxFrameCount" ); @@ -2385,56 +2446,75 @@ public: * Specifies the internal signal or physical input Line to use as the trigger source. The selected trigger must have its TriggerMode set to On. * * The following string values might be valid for this feature: - * - \b Software (Display string: 'Software'): Specifies that the trigger source will be generated by software using the TriggerSoftware command. - * - \b SoftwareSignal0 (Display string: 'Software Signal 0'): Specifies that the trigger source will be a signal generated by software using the SoftwareSignalPulse command. - * - \b SoftwareSignal1 (Display string: 'Software Signal 1'): Specifies that the trigger source will be a signal generated by software using the SoftwareSignalPulse command. - * - \b SoftwareSignal2 (Display string: 'Software Signal 2'): Specifies that the trigger source will be a signal generated by software using the SoftwareSignalPulse command. - * - \b SoftwareSignal\#3\# (Display string: 'Software Signal \#3\#'): Specifies that the trigger source will be a signal generated by software using the SoftwareSignalPulse command. - * - \b Line0 (Display string: 'Line 0'): Specifies which physical line (or pin) and associated I/O control block to use as external source for the trigger signal. - * - \b Line1 (Display string: 'Line 1'): Specifies which physical line (or pin) and associated I/O control block to use as external source for the trigger signal. - * - \b Line2 (Display string: 'Line 2'): Specifies which physical line (or pin) and associated I/O control block to use as external source for the trigger signal. - * - \b Line\#3\# (Display string: 'Line \#3\#'): Specifies which physical line (or pin) and associated I/O control block to use as external source for the trigger signal. - * - \b UserOutput0 (Display string: 'User Output 0'): Specifies which User Output bit signal to use as internal source for the trigger. - * - \b UserOutput1 (Display string: 'User Output 1'): Specifies which User Output bit signal to use as internal source for the trigger. - * - \b UserOutput2 (Display string: 'User Output 2'): Specifies which User Output bit signal to use as internal source for the trigger. - * - \b UserOutput\#3\# (Display string: 'User Output \#3\#'): Specifies which User Output bit signal to use as internal source for the trigger. - * - \b Counter0Start (Display string: 'Counter 0 Start'): Specifies which of the Counter signal to use as internal source for the trigger. - * - \b Counter1Start (Display string: 'Counter 1 Start'): Specifies which of the Counter signal to use as internal source for the trigger. - * - \b Counter2Start (Display string: 'Counter 2 Start'): Specifies which of the Counter signal to use as internal source for the trigger. - * - \b Counter\#3\#Start (Display string: 'Counter \#3\# Start'): Specifies which of the Counter signal to use as internal source for the trigger. - * - \b Counter0End (Display string: 'Counter 0 End'): Specifies which of the Counter signal to use as internal source for the trigger. - * - \b Counter1End (Display string: 'Counter 1 End'): Specifies which of the Counter signal to use as internal source for the trigger. - * - \b Counter2End (Display string: 'Counter 2 End'): Specifies which of the Counter signal to use as internal source for the trigger. - * - \b Counter\#3\#End (Display string: 'Counter \#3\# End'): Specifies which of the Counter signal to use as internal source for the trigger. - * - \b Timer0Start (Display string: 'Timer 0 Start'): Specifies which Timer signal to use as internal source for the trigger. - * - \b Timer1Start (Display string: 'Timer 1 Start'): Specifies which Timer signal to use as internal source for the trigger. - * - \b Timer2Start (Display string: 'Timer 2 Start'): Specifies which Timer signal to use as internal source for the trigger. - * - \b Timer\#3\#Start (Display string: 'Timer \#3\# Start'): Specifies which Timer signal to use as internal source for the trigger. - * - \b Timer0End (Display string: 'Timer 0 End'): Specifies which Timer signal to use as internal source for the trigger. - * - \b Timer1End (Display string: 'Timer 1 End'): Specifies which Timer signal to use as internal source for the trigger. - * - \b Timer2End (Display string: 'Timer 2 End'): Specifies which Timer signal to use as internal source for the trigger. - * - \b Timer\#3\#End (Display string: 'Timer \#3\# End'): Specifies which Timer signal to use as internal source for the trigger. - * - \b Encoder0 (Display string: 'Encoder 0'): Specifies which Encoder signal to use as internal source for the trigger. - * - \b Encoder1 (Display string: 'Encoder 1'): Specifies which Encoder signal to use as internal source for the trigger. - * - \b Encoder2 (Display string: 'Encoder 2'): Specifies which Encoder signal to use as internal source for the trigger. - * - \b Encoder\#3\# (Display string: 'Encoder \#3\#'): Specifies which Encoder signal to use as internal source for the trigger. - * - \b LogicBlock0 (Display string: 'Logic Block 0'): Specifies which Logic Block signal to use as internal source for the trigger. - * - \b LogicBlock1 (Display string: 'Logic Block 1'): Specifies which Logic Block signal to use as internal source for the trigger. - * - \b LogicBlock2 (Display string: 'Logic Block 2'): Specifies which Logic Block signal to use as internal source for the trigger. - * - \b LogicBlock\#3\# (Display string: 'Logic Block \#3\#'): Specifies which Logic Block signal to use as internal source for the trigger. * - \b Action0 (Display string: 'Action 0'): Specifies which Action command to use as internal source for the trigger. * - \b Action1 (Display string: 'Action 1'): Specifies which Action command to use as internal source for the trigger. * - \b Action2 (Display string: 'Action 2'): Specifies which Action command to use as internal source for the trigger. - * - \b Action\#3\# (Display string: 'Action \#3\#'): Specifies which Action command to use as internal source for the trigger. - * - \b LinkTrigger0 (Display string: 'Link Trigger 0'): Specifies which Link Trigger to use as source for the trigger (received from the transport layer). - * - \b LinkTrigger1 (Display string: 'Link Trigger 1'): Specifies which Link Trigger to use as source for the trigger (received from the transport layer). - * - \b LinkTrigger2 (Display string: 'Link Trigger 2'): Specifies which Link Trigger to use as source for the trigger (received from the transport layer). - * - \b LinkTrigger\#3\# (Display string: 'Link Trigger \#3\#'): Specifies which Link Trigger to use as source for the trigger (received from the transport layer). + * - \b Action3 (Display string: 'Action 3'): Specifies which Action command to use as internal source for the trigger. + * - \b Action4 (Display string: 'Action 4'): Specifies which Action command to use as internal source for the trigger. + * - \b Action5 (Display string: 'Action 5'): Specifies which Action command to use as internal source for the trigger. + * - \b Action6 (Display string: 'Action 6'): Specifies which Action command to use as internal source for the trigger. + * - \b Action7 (Display string: 'Action 7'): Specifies which Action command to use as internal source for the trigger. + * - \b Action8 (Display string: 'Action 8'): Specifies which Action command to use as internal source for the trigger. + * - \b Action9 (Display string: 'Action 9'): Specifies which Action command to use as internal source for the trigger. + * - \b Action10 (Display string: 'Action 10'): Specifies which Action command to use as internal source for the trigger. + * - \b Action11 (Display string: 'Action 11'): Specifies which Action command to use as internal source for the trigger. + * - \b Action12 (Display string: 'Action 12'): Specifies which Action command to use as internal source for the trigger. + * - \b Action13 (Display string: 'Action 13'): Specifies which Action command to use as internal source for the trigger. + * - \b Action14 (Display string: 'Action 14'): Specifies which Action command to use as internal source for the trigger. + * - \b Action15 (Display string: 'Action 15'): Specifies which Action command to use as internal source for the trigger. * - \b CC1 (Display string: 'CC 1'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. * - \b CC2 (Display string: 'CC 2'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. * - \b CC3 (Display string: 'CC 3'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. * - \b CC4 (Display string: 'CC 4'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. - * - \b CC\#5\# (Display string: 'CC \#5\#'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. + * - \b CC5 (Display string: 'CC 5'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. + * - \b CC6 (Display string: 'CC 6'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. + * - \b CC7 (Display string: 'CC 7'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. + * - \b CC8 (Display string: 'CC 8'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. + * - \b CC9 (Display string: 'CC 9'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. + * - \b CC10 (Display string: 'CC 10'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. + * - \b CC11 (Display string: 'CC 11'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. + * - \b CC12 (Display string: 'CC 12'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. + * - \b CC13 (Display string: 'CC 13'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. + * - \b CC14 (Display string: 'CC 14'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. + * - \b CC15 (Display string: 'CC 15'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. + * - \b Counter0End (Display string: 'Counter 0 End'): Specifies which of the Counter signal to use as internal source for the trigger. + * - \b Counter0Start (Display string: 'Counter 0 Start'): Specifies which of the Counter signal to use as internal source for the trigger. + * - \b Counter1End (Display string: 'Counter 1 End'): Specifies which of the Counter signal to use as internal source for the trigger. + * - \b Counter1Start (Display string: 'Counter 1 Start'): Specifies which of the Counter signal to use as internal source for the trigger. + * - \b Counter2End (Display string: 'Counter 2 End'): Specifies which of the Counter signal to use as internal source for the trigger. + * - \b Counter2Start (Display string: 'Counter 2 Start'): Specifies which of the Counter signal to use as internal source for the trigger. + * - \b Counter3End (Display string: 'Counter 3 End'): Specifies which of the Counter signal to use as internal source for the trigger. + * - \b Counter3Start (Display string: 'Counter 3 Start'): Specifies which of the Counter signal to use as internal source for the trigger. + * - \b Counter4End (Display string: 'Counter 4 End'): Specifies which of the Counter signal to use as internal source for the trigger. + * - \b Counter4Start (Display string: 'Counter 4 Start'): Specifies which of the Counter signal to use as internal source for the trigger. + * - \b Counter5End (Display string: 'Counter 5 End'): Specifies which of the Counter signal to use as internal source for the trigger. + * - \b Counter5Start (Display string: 'Counter 5 Start'): Specifies which of the Counter signal to use as internal source for the trigger. + * - \b Counter6End (Display string: 'Counter 6 End'): Specifies which of the Counter signal to use as internal source for the trigger. + * - \b Counter6Start (Display string: 'Counter 6 Start'): Specifies which of the Counter signal to use as internal source for the trigger. + * - \b Counter7End (Display string: 'Counter 7 End'): Specifies which of the Counter signal to use as internal source for the trigger. + * - \b Counter7Start (Display string: 'Counter 7 Start'): Specifies which of the Counter signal to use as internal source for the trigger. + * - \b Counter8End (Display string: 'Counter 8 End'): Specifies which of the Counter signal to use as internal source for the trigger. + * - \b Counter8Start (Display string: 'Counter 8 Start'): Specifies which of the Counter signal to use as internal source for the trigger. + * - \b Counter9End (Display string: 'Counter 9 End'): Specifies which of the Counter signal to use as internal source for the trigger. + * - \b Counter9Start (Display string: 'Counter 9 Start'): Specifies which of the Counter signal to use as internal source for the trigger. + * - \b Counter10End (Display string: 'Counter 10 End'): Specifies which of the Counter signal to use as internal source for the trigger. + * - \b Counter10Start (Display string: 'Counter 10 Start'): Specifies which of the Counter signal to use as internal source for the trigger. + * - \b Counter11End (Display string: 'Counter 11 End'): Specifies which of the Counter signal to use as internal source for the trigger. + * - \b Counter11Start (Display string: 'Counter 11 Start'): Specifies which of the Counter signal to use as internal source for the trigger. + * - \b Counter12End (Display string: 'Counter 12 End'): Specifies which of the Counter signal to use as internal source for the trigger. + * - \b Counter12Start (Display string: 'Counter 12 Start'): Specifies which of the Counter signal to use as internal source for the trigger. + * - \b Counter13End (Display string: 'Counter 13 End'): Specifies which of the Counter signal to use as internal source for the trigger. + * - \b Counter13Start (Display string: 'Counter 13 Start'): Specifies which of the Counter signal to use as internal source for the trigger. + * - \b Counter14End (Display string: 'Counter 14 End'): Specifies which of the Counter signal to use as internal source for the trigger. + * - \b Counter14Start (Display string: 'Counter 14 Start'): Specifies which of the Counter signal to use as internal source for the trigger. + * - \b Counter15End (Display string: 'Counter 15 End'): Specifies which of the Counter signal to use as internal source for the trigger. + * - \b Counter15Start (Display string: 'Counter 15 Start'): Specifies which of the Counter signal to use as internal source for the trigger. + * - \b Encoder0 (Display string: 'Encoder 0'): Specifies which Encoder signal to use as internal source for the trigger. + * - \b Encoder1 (Display string: 'Encoder 1'): Specifies which Encoder signal to use as internal source for the trigger. + * - \b Encoder2 (Display string: 'Encoder 2'): Specifies which Encoder signal to use as internal source for the trigger. + * - \b Line0 (Display string: 'Line 0'): Specifies which physical line (or pin) and associated I/O control block to use as external source for the trigger signal. + * - \b Line1 (Display string: 'Line 1'): Specifies which physical line (or pin) and associated I/O control block to use as external source for the trigger signal. + * - \b Line2 (Display string: 'Line 2'): Specifies which physical line (or pin) and associated I/O control block to use as external source for the trigger signal. * - \b Line3 (Display string: 'Line 3'): Specifies which physical line (or pin) and associated I/O control block to use as external source for the trigger signal. * - \b Line4 (Display string: 'Line 4'): Specifies which physical line (or pin) and associated I/O control block to use as external source for the trigger signal. * - \b Line5 (Display string: 'Line 5'): Specifies which physical line (or pin) and associated I/O control block to use as external source for the trigger signal. @@ -2448,66 +2528,51 @@ public: * - \b Line13 (Display string: 'Line 13'): Specifies which physical line (or pin) and associated I/O control block to use as external source for the trigger signal. * - \b Line14 (Display string: 'Line 14'): Specifies which physical line (or pin) and associated I/O control block to use as external source for the trigger signal. * - \b Line15 (Display string: 'Line 15'): Specifies which physical line (or pin) and associated I/O control block to use as external source for the trigger signal. - * - \b Timer3Start (Display string: 'Timer 3 Start'): Specifies which Timer signal to use as internal source for the trigger. - * - \b Timer4Start (Display string: 'Timer 4 Start'): Specifies which Timer signal to use as internal source for the trigger. - * - \b Timer5Start (Display string: 'Timer 5 Start'): Specifies which Timer signal to use as internal source for the trigger. - * - \b Timer6Start (Display string: 'Timer 6 Start'): Specifies which Timer signal to use as internal source for the trigger. - * - \b Timer7Start (Display string: 'Timer 7 Start'): Specifies which Timer signal to use as internal source for the trigger. - * - \b Timer8Start (Display string: 'Timer 8 Start'): Specifies which Timer signal to use as internal source for the trigger. - * - \b Timer9Start (Display string: 'Timer 9 Start'): Specifies which Timer signal to use as internal source for the trigger. - * - \b Timer10Start (Display string: 'Timer 10 Start'): Specifies which Timer signal to use as internal source for the trigger. - * - \b Timer11Start (Display string: 'Timer 11 Start'): Specifies which Timer signal to use as internal source for the trigger. - * - \b Timer12Start (Display string: 'Timer 12 Start'): Specifies which Timer signal to use as internal source for the trigger. - * - \b Timer13Start (Display string: 'Timer 13 Start'): Specifies which Timer signal to use as internal source for the trigger. - * - \b Timer14Start (Display string: 'Timer 14 Start'): Specifies which Timer signal to use as internal source for the trigger. - * - \b Timer15Start (Display string: 'Timer 15 Start'): Specifies which Timer signal to use as internal source for the trigger. - * - \b Timer16Start (Display string: 'Timer 16 Start') + * - \b LinkTrigger0 (Display string: 'Link Trigger 0'): Specifies which Link Trigger to use as source for the trigger (received from the transport layer). + * - \b LinkTrigger1 (Display string: 'Link Trigger 1'): Specifies which Link Trigger to use as source for the trigger (received from the transport layer). + * - \b LinkTrigger2 (Display string: 'Link Trigger 2'): Specifies which Link Trigger to use as source for the trigger (received from the transport layer). + * - \b LogicBlock0 (Display string: 'Logic Block 0'): Specifies which Logic Block signal to use as internal source for the trigger. + * - \b LogicBlock1 (Display string: 'Logic Block 1'): Specifies which Logic Block signal to use as internal source for the trigger. + * - \b LogicBlock2 (Display string: 'Logic Block 2'): Specifies which Logic Block signal to use as internal source for the trigger. + * - \b Software (Display string: 'Software'): Specifies that the trigger source will be generated by software using the TriggerSoftware command. + * - \b SoftwareSignal0 (Display string: 'Software Signal 0'): Specifies that the trigger source will be a signal generated by software using the SoftwareSignalPulse command. + * - \b SoftwareSignal1 (Display string: 'Software Signal 1'): Specifies that the trigger source will be a signal generated by software using the SoftwareSignalPulse command. + * - \b SoftwareSignal2 (Display string: 'Software Signal 2'): Specifies that the trigger source will be a signal generated by software using the SoftwareSignalPulse command. + * - \b Timer0End (Display string: 'Timer 0 End'): Specifies which Timer signal to use as internal source for the trigger. + * - \b Timer0Start (Display string: 'Timer 0 Start'): Specifies which Timer signal to use as internal source for the trigger. + * - \b Timer1End (Display string: 'Timer 1 End'): Specifies which Timer signal to use as internal source for the trigger. + * - \b Timer1Start (Display string: 'Timer 1 Start'): Specifies which Timer signal to use as internal source for the trigger. + * - \b Timer2End (Display string: 'Timer 2 End'): Specifies which Timer signal to use as internal source for the trigger. + * - \b Timer2Start (Display string: 'Timer 2 Start'): Specifies which Timer signal to use as internal source for the trigger. * - \b Timer3End (Display string: 'Timer 3 End'): Specifies which Timer signal to use as internal source for the trigger. + * - \b Timer3Start (Display string: 'Timer 3 Start'): Specifies which Timer signal to use as internal source for the trigger. * - \b Timer4End (Display string: 'Timer 4 End'): Specifies which Timer signal to use as internal source for the trigger. + * - \b Timer4Start (Display string: 'Timer 4 Start'): Specifies which Timer signal to use as internal source for the trigger. * - \b Timer5End (Display string: 'Timer 5 End'): Specifies which Timer signal to use as internal source for the trigger. + * - \b Timer5Start (Display string: 'Timer 5 Start'): Specifies which Timer signal to use as internal source for the trigger. * - \b Timer6End (Display string: 'Timer 6 End'): Specifies which Timer signal to use as internal source for the trigger. + * - \b Timer6Start (Display string: 'Timer 6 Start'): Specifies which Timer signal to use as internal source for the trigger. * - \b Timer7End (Display string: 'Timer 7 End'): Specifies which Timer signal to use as internal source for the trigger. + * - \b Timer7Start (Display string: 'Timer 7 Start'): Specifies which Timer signal to use as internal source for the trigger. * - \b Timer8End (Display string: 'Timer 8 End'): Specifies which Timer signal to use as internal source for the trigger. + * - \b Timer8Start (Display string: 'Timer 8 Start'): Specifies which Timer signal to use as internal source for the trigger. * - \b Timer9End (Display string: 'Timer 9 End'): Specifies which Timer signal to use as internal source for the trigger. + * - \b Timer9Start (Display string: 'Timer 9 Start'): Specifies which Timer signal to use as internal source for the trigger. * - \b Timer10End (Display string: 'Timer 10 End'): Specifies which Timer signal to use as internal source for the trigger. + * - \b Timer10Start (Display string: 'Timer 10 Start'): Specifies which Timer signal to use as internal source for the trigger. * - \b Timer11End (Display string: 'Timer 11 End'): Specifies which Timer signal to use as internal source for the trigger. + * - \b Timer11Start (Display string: 'Timer 11 Start'): Specifies which Timer signal to use as internal source for the trigger. * - \b Timer12End (Display string: 'Timer 12 End'): Specifies which Timer signal to use as internal source for the trigger. + * - \b Timer12Start (Display string: 'Timer 12 Start'): Specifies which Timer signal to use as internal source for the trigger. * - \b Timer13End (Display string: 'Timer 13 End'): Specifies which Timer signal to use as internal source for the trigger. + * - \b Timer13Start (Display string: 'Timer 13 Start'): Specifies which Timer signal to use as internal source for the trigger. * - \b Timer14End (Display string: 'Timer 14 End'): Specifies which Timer signal to use as internal source for the trigger. + * - \b Timer14Start (Display string: 'Timer 14 Start'): Specifies which Timer signal to use as internal source for the trigger. * - \b Timer15End (Display string: 'Timer 15 End'): Specifies which Timer signal to use as internal source for the trigger. - * - \b Timer16End (Display string: 'Timer 16 End') - * - \b Counter3Start (Display string: 'Counter 3 Start'): Specifies which of the Counter signal to use as internal source for the trigger. - * - \b Counter4Start (Display string: 'Counter 4 Start'): Specifies which of the Counter signal to use as internal source for the trigger. - * - \b Counter5Start (Display string: 'Counter 5 Start'): Specifies which of the Counter signal to use as internal source for the trigger. - * - \b Counter6Start (Display string: 'Counter 6 Start'): Specifies which of the Counter signal to use as internal source for the trigger. - * - \b Counter7Start (Display string: 'Counter 7 Start'): Specifies which of the Counter signal to use as internal source for the trigger. - * - \b Counter8Start (Display string: 'Counter 8 Start'): Specifies which of the Counter signal to use as internal source for the trigger. - * - \b Counter9Start (Display string: 'Counter 9 Start'): Specifies which of the Counter signal to use as internal source for the trigger. - * - \b Counter10Start (Display string: 'Counter 10 Start'): Specifies which of the Counter signal to use as internal source for the trigger. - * - \b Counter11Start (Display string: 'Counter 11 Start'): Specifies which of the Counter signal to use as internal source for the trigger. - * - \b Counter12Start (Display string: 'Counter 12 Start'): Specifies which of the Counter signal to use as internal source for the trigger. - * - \b Counter13Start (Display string: 'Counter 13 Start'): Specifies which of the Counter signal to use as internal source for the trigger. - * - \b Counter14Start (Display string: 'Counter 14 Start'): Specifies which of the Counter signal to use as internal source for the trigger. - * - \b Counter15Start (Display string: 'Counter 15 Start'): Specifies which of the Counter signal to use as internal source for the trigger. - * - \b Counter16Start (Display string: 'Counter 16 Start') - * - \b Counter3End (Display string: 'Counter 3 End'): Specifies which of the Counter signal to use as internal source for the trigger. - * - \b Counter4End (Display string: 'Counter 4 End'): Specifies which of the Counter signal to use as internal source for the trigger. - * - \b Counter5End (Display string: 'Counter 5 End'): Specifies which of the Counter signal to use as internal source for the trigger. - * - \b Counter6End (Display string: 'Counter 6 End'): Specifies which of the Counter signal to use as internal source for the trigger. - * - \b Counter7End (Display string: 'Counter 7 End'): Specifies which of the Counter signal to use as internal source for the trigger. - * - \b Counter8End (Display string: 'Counter 8 End'): Specifies which of the Counter signal to use as internal source for the trigger. - * - \b Counter9End (Display string: 'Counter 9 End'): Specifies which of the Counter signal to use as internal source for the trigger. - * - \b Counter10End (Display string: 'Counter 10 End'): Specifies which of the Counter signal to use as internal source for the trigger. - * - \b Counter11End (Display string: 'Counter 11 End'): Specifies which of the Counter signal to use as internal source for the trigger. - * - \b Counter12End (Display string: 'Counter 12 End'): Specifies which of the Counter signal to use as internal source for the trigger. - * - \b Counter13End (Display string: 'Counter 13 End'): Specifies which of the Counter signal to use as internal source for the trigger. - * - \b Counter14End (Display string: 'Counter 14 End'): Specifies which of the Counter signal to use as internal source for the trigger. - * - \b Counter15End (Display string: 'Counter 15 End'): Specifies which of the Counter signal to use as internal source for the trigger. - * - \b Counter16End (Display string: 'Counter 16 End') - * - \b mvLogicGateOR1Output (Display string: 'mv Logic Gate OR 1 Output') - * - \b mvLogicGateOR2Output (Display string: 'mv Logic Gate OR 2 Output') - * - \b mvLogicGateOR3Output (Display string: 'mv Logic Gate OR 3 Output') - * - \b mvLogicGateOR4Output (Display string: 'mv Logic Gate OR 4 Output') + * - \b Timer15Start (Display string: 'Timer 15 Start'): Specifies which Timer signal to use as internal source for the trigger. + * - \b UserOutput0 (Display string: 'User Output 0'): Specifies which User Output bit signal to use as internal source for the trigger. + * - \b UserOutput1 (Display string: 'User Output 1'): Specifies which User Output bit signal to use as internal source for the trigger. + * - \b UserOutput2 (Display string: 'User Output 2'): Specifies which User Output bit signal to use as internal source for the trigger. * - \b UserOutput3 (Display string: 'User Output 3'): Specifies which User Output bit signal to use as internal source for the trigger. * - \b UserOutput4 (Display string: 'User Output 4'): Specifies which User Output bit signal to use as internal source for the trigger. * - \b UserOutput5 (Display string: 'User Output 5'): Specifies which User Output bit signal to use as internal source for the trigger. @@ -2521,32 +2586,10 @@ public: * - \b UserOutput13 (Display string: 'User Output 13'): Specifies which User Output bit signal to use as internal source for the trigger. * - \b UserOutput14 (Display string: 'User Output 14'): Specifies which User Output bit signal to use as internal source for the trigger. * - \b UserOutput15 (Display string: 'User Output 15'): Specifies which User Output bit signal to use as internal source for the trigger. - * - \b Action3 (Display string: 'Action 3'): Specifies which Action command to use as internal source for the trigger. - * - \b Action4 (Display string: 'Action 4'): Specifies which Action command to use as internal source for the trigger. - * - \b Action5 (Display string: 'Action 5'): Specifies which Action command to use as internal source for the trigger. - * - \b Action6 (Display string: 'Action 6'): Specifies which Action command to use as internal source for the trigger. - * - \b Action7 (Display string: 'Action 7'): Specifies which Action command to use as internal source for the trigger. - * - \b Action8 (Display string: 'Action 8'): Specifies which Action command to use as internal source for the trigger. - * - \b Action9 (Display string: 'Action 9'): Specifies which Action command to use as internal source for the trigger. - * - \b Action10 (Display string: 'Action 10'): Specifies which Action command to use as internal source for the trigger. - * - \b Action11 (Display string: 'Action 11'): Specifies which Action command to use as internal source for the trigger. - * - \b Action12 (Display string: 'Action 12'): Specifies which Action command to use as internal source for the trigger. - * - \b Action13 (Display string: 'Action 13'): Specifies which Action command to use as internal source for the trigger. - * - \b Action14 (Display string: 'Action 14'): Specifies which Action command to use as internal source for the trigger. - * - \b Action15 (Display string: 'Action 15'): Specifies which Action command to use as internal source for the trigger. - * - \b Action16 (Display string: 'Action 16') - * - \b CC5 (Display string: 'CC 5'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. - * - \b CC6 (Display string: 'CC 6'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. - * - \b CC7 (Display string: 'CC 7'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. - * - \b CC8 (Display string: 'CC 8'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. - * - \b CC9 (Display string: 'CC 9'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. - * - \b CC10 (Display string: 'CC 10'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. - * - \b CC11 (Display string: 'CC 11'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. - * - \b CC12 (Display string: 'CC 12'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. - * - \b CC13 (Display string: 'CC 13'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. - * - \b CC14 (Display string: 'CC 14'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. - * - \b CC15 (Display string: 'CC 15'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. - * - \b CC16 (Display string: 'CC 16') + * - \b mvLogicGateOR1Output (Display string: 'mv Logic Gate OR 1 Output') + * - \b mvLogicGateOR2Output (Display string: 'mv Logic Gate OR 2 Output') + * - \b mvLogicGateOR3Output (Display string: 'mv Logic Gate OR 3 Output') + * - \b mvLogicGateOR4Output (Display string: 'mv Logic Gate OR 4 Output') * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -2629,18 +2672,17 @@ public: * Selects which exposure time is controlled by the ExposureTime feature. This allows for independent control over the exposure components. * * The following string values might be valid for this feature: - * - \b Common (Display string: 'Common'): Selects the common ExposureTime. - * - \b Red (Display string: 'Red'): Selects the red common ExposureTime. - * - \b Green (Display string: 'Green'): Selects the green ExposureTime. * - \b Blue (Display string: 'Blue'): Selects the blue ExposureTime. + * - \b Common (Display string: 'Common'): Selects the common ExposureTime. * - \b Cyan (Display string: 'Cyan'): Selects the cyan common ExposureTime. - * - \b Magenta (Display string: 'Magenta'): Selects the magenta ExposureTime. - * - \b Yellow (Display string: 'Yellow'): Selects the yellow ExposureTime. + * - \b Green (Display string: 'Green'): Selects the green ExposureTime. * - \b Infrared (Display string: 'Infrared'): Selects the infrared ExposureTime. - * - \b Ultraviolet (Display string: 'Ultraviolet'): Selects the ultraviolet ExposureTime. + * - \b Magenta (Display string: 'Magenta'): Selects the magenta ExposureTime. + * - \b Red (Display string: 'Red'): Selects the red common ExposureTime. * - \b Stage1 (Display string: 'Stage 1'): Selects the first stage ExposureTime. * - \b Stage2 (Display string: 'Stage 2'): Selects the second stage ExposureTime. - * - \b Stage\#3\# (Display string: 'Stage \#3\#'): Selects the second stage ExposureTime. + * - \b Ultraviolet (Display string: 'Ultraviolet'): Selects the ultraviolet ExposureTime. + * - \b Yellow (Display string: 'Yellow'): Selects the yellow ExposureTime. * - \b mvHorizontalZone0 (Display string: 'mv Horizontal Zone 0'): Selects the first horizontal exposure zone used when 'ExposureMode' is set to 'mvMultiZone' and when operating the device in a 'mvMultiAreaMode' different from 'mvOff'. * - \b mvHorizontalZone1 (Display string: 'mv Horizontal Zone 1'): Selects the second horizontal exposure zone used when 'ExposureMode' is set to 'mvMultiZone' and when operating the device in a 'mvMultiAreaMode' different from 'mvOff'. * @@ -2672,6 +2714,11 @@ public: * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. */ PropertyI64 exposureAuto; + /// \brief An integer property. The number of exposures per frame. + /** + * The number of exposures per frame. + */ + PropertyI64 mvMultiExposureCount; /// \brief An enumerated integer property. Controls multi-slope exposure state. /** * Controls multi-slope exposure state. @@ -2717,25 +2764,85 @@ public: * The gradient of the additional slope that is defined by this knee-point. */ PropertyF multiSlopeExposureGradient; - /// \brief An enumerated integer property. Controls the calculation of the maximum frame rate. + /// \brief A floating point property. Sets the max exposure time in auto mode. /** - * Controls the calculation of the maximum frame rate. + * This value sets the max exposure time in us when ExposureAuto is Continuous. + */ + PropertyF exposureTimeAutoMax; + /// \brief An integer property. Offset X defining a rectangular region in the left rectified image for limiting the area used by auto exposure (in pixels). + /** + * Offset X defining a rectangular region in the left rectified image for limiting the area used by auto exposure (in pixels). + */ + PropertyI64 exposureRegionOffsetX; + /// \brief An integer property. Offset Y defining a rectangular region in the left rectified image for limiting the area used by auto exposure (in pixels). + /** + * Offset Y defining a rectangular region in the left rectified image for limiting the area used by auto exposure (in pixels). + */ + PropertyI64 exposureRegionOffsetY; + /// \brief An integer property. Width defining a rectangular region in the left rectified image for limiting the area used by auto exposure (in pixels). + /** + * Width defining a rectangular region in the left rectified image for limiting the area used by auto exposure (in pixels). + */ + PropertyI64 exposureRegionWidth; + /// \brief An integer property. Height defining a rectangular region in the left rectified image for limiting the area used by auto exposure (in pixels). + /** + * Height defining a rectangular region in the left rectified image for limiting the area used by auto exposure (in pixels). + */ + PropertyI64 exposureRegionHeight; + /// \brief An enumerated integer property. Filter images if LineSource is ExposureAlternateActive. + /** + * Skip sending of some images depending on GPIO output value. This filter is considered if LineSource of Out1 or Out2 is ExposureAlternateActive. * * The following string values might be valid for this feature: - * - \b mvDeviceLinkThroughput (Display string: 'mv Device Link Throughput'): Uses the highest possible frame rate depending on bandwidth and sensor settings. - * - \b mvDeviceMaxSensorThroughput (Display string: 'mv Device Max Sensor Throughput'): Maximum frame rate the sensor can provide depending on AOI and pixel clock. Note: Images might be buffered in the cameras memory. This can result in delayed images. - * - \b mvLegacy (Display string: 'mv Legacy'): Compatibility mode, not recommended. + * - \b Off (Display string: 'Off'): The filter is turned off, i.e. all images are sent irrespective of the LineSource of Out1 and Out2. + * - \b OnlyHigh (Display string: 'Only High'): Only send images if LineSource of Out1 or Out2 is ExposureAlternateActive and output currently high. + * - \b OnlyLow (Display string: 'Only Low'): Only send images if LineSource of Out1 or Out2 is ExposureAlternateActive and output currently low. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. */ - PropertyI64 mvAcquisitionFrameRateLimitMode; - /// \brief An enumerated integer property. Enables the use of the 'AcquisitionFrameRate' feature. + PropertyI64 acquisitionAlternateFilter; + /// \brief An enumerated integer property. Control which components are sent in a MultiPart buffer. /** - * Enables the use of the 'AcquisitionFrameRate' feature. + * Immediately send one single component per frame/buffer when it becomes available. * * The following string values might be valid for this feature: - * - \b Off (Display string: 'Off'): The acquisition frame rate is set automatically to the limit, calculated according to 'mvAcquisitionFrameRateLimitMode' feature. + * - \b SingleComponent (Display string: 'Single Component'): Immediately send one single component per frame/buffer when it becomes available. + * - \b SynchronizedComponents (Display string: 'Synchronized Components'): Only send a frame/buffer if all enabled components are available for that time. + * + * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. + * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. + */ + PropertyI64 acquisitionMultiPartMode; + /// \brief A floating point property. Sets the maximum mean intensity in auto mode. + /** + * This value sets the maximum mean intensity in auto mode as fraction between 0 and 1. + */ + PropertyF rcExposureAutoAverageMax; + /// \brief A floating point property. Sets the minimum mean intensity in auto mode. + /** + * This value sets the minimum mean intensity in auto mode as fraction between 0 and 1. + */ + PropertyF rcExposureAutoAverageMin; + /// \brief An enumerated integer property. Controls the calculation of the maximum frame rate. + /** + * Controls the calculation of the maximum frame rate. + * + * The following string values might be valid for this feature: + * - \b mvDeviceLinkThroughput (Display string: 'mv Device Link Throughput'): Uses the highest possible frame rate depending on bandwidth and sensor settings. + * - \b mvDeviceMaxSensorThroughput (Display string: 'mv Device Max Sensor Throughput'): Maximum frame rate the sensor can provide depending on AOI and pixel clock. Note: Images might be buffered in the cameras memory. This can result in delayed images. + * - \b mvLegacy (Display string: 'mv Legacy'): Compatibility mode, not recommended. + * + * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. + * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. + */ + PropertyI64 mvAcquisitionFrameRateLimitMode; + /// \brief An enumerated integer property. Enables the use of the 'AcquisitionFrameRate' feature. + /** + * Enables the use of the 'AcquisitionFrameRate' feature. + * + * The following string values might be valid for this feature: + * - \b Off (Display string: 'Off'): The acquisition frame rate is set automatically to the limit, calculated according to 'mvAcquisitionFrameRateLimitMode' feature. * - \b On (Display string: 'On'): The acquisition frame rate is set by the 'AcquisitionFrameRate' feature. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. @@ -2869,6 +2976,16 @@ public: * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. */ PropertyI64 mvSmearReduction; + /// \brief A boolean property. Enables the property to set the value of the shift between sensor exposure and the signal ExposureActive at the camera output. + /** + * Enables the property to set the value of the shift between sensor exposure and the signal ExposureActive at the camera output. + */ + PropertyIBoolean mvExposureActiveShiftEnable; + /// \brief An integer property. Sets the delay between the ExposureActive signal at the output and the exposure start at the sensor in us. Negative values mean ExposureActive is set to high before the exposure. Positive values mean ExposureActive is set to high after the exposure. + /** + * Sets the delay between the ExposureActive signal at the output and the exposure start at the sensor in us. Negative values mean ExposureActive is set to high before the exposure. Positive values mean ExposureActive is set to high after the exposure. + */ + PropertyI64 mvExposureActiveShift; /// \brief An enumerated integer property. mvRecord is used to store frames in memory. mvPlayback transfers stored frames. mvPretrigger stores frames in memory to be transferred after trigger. /** * mvRecord is used to store frames in memory. mvPlayback transfers stored frames. mvPretrigger stores frames in memory to be transferred after trigger. @@ -2926,7 +3043,7 @@ public: * This value defines the strictness of the timestamp-check for the recalled image (given in us). */ PropertyI64 mvSmartFrameRecallTimestampLookupAccuracy; - /// \brief An integer property. When set to a value != 0, the smaller frames get thinned out. AOI requests can still be done for all frames. + /// \brief An integer property. When set to a value different from zero, the smaller frames get thinned out. AOI requests can still be done for all frames. /** * The number of processed images to drop, i.e. skip. This can be used to reduce the frame rate even further. AOIs for unsent images can still be requested - the timestamps for these dropped images must be interpolated. */ @@ -3099,49 +3216,12 @@ public: * * The following string values might be valid for this feature: * - \b All (Display string: 'All'): Gain will be applied to all channels or taps. - * - \b Red (Display string: 'Red'): Gain will be applied to the red channel. - * - \b Green (Display string: 'Green'): Gain will be applied to the green channel. - * - \b Blue (Display string: 'Blue'): Gain will be applied to the blue channel. - * - \b Y (Display string: 'Y'): Gain will be applied to Y channel. - * - \b U (Display string: 'U'): Gain will be applied to U channel. - * - \b V (Display string: 'V'): Gain will be applied to V channel. - * - \b Tap1 (Display string: 'Tap 1'): Gain will be applied to Tap 1. - * - \b Tap2 (Display string: 'Tap 2'): Gain will be applied to Tap 2. - * - \b Tap\#3\# (Display string: 'Tap \#3\#'): Gain will be applied to Tap \#3\#. * - \b AnalogAll (Display string: 'Analog All'): Gain will be applied to all analog channels or taps. - * - \b AnalogRed (Display string: 'Analog Red'): Gain will be applied to the red analog channel. - * - \b AnalogGreen (Display string: 'Analog Green'): Gain will be applied to the green analog channel. * - \b AnalogBlue (Display string: 'Analog Blue'): Gain will be applied to the blue analog channel. - * - \b AnalogY (Display string: 'Analog Y'): Gain will be applied to Y analog channel. - * - \b AnalogU (Display string: 'Analog U'): Gain will be applied to U analog channel. - * - \b AnalogV (Display string: 'Analog V'): Gain will be applied to V analog channel. + * - \b AnalogGreen (Display string: 'Analog Green'): Gain will be applied to the green analog channel. + * - \b AnalogRed (Display string: 'Analog Red'): Gain will be applied to the red analog channel. * - \b AnalogTap1 (Display string: 'Analog Tap 1'): Analog gain will be applied to Tap 1. * - \b AnalogTap2 (Display string: 'Analog Tap 2'): Analog gain will be applied to Tap 2. - * - \b AnalogTap\#3\# (Display string: 'Analog Tap \#3\#'): Analog gain will be applied to Tap \#3\#. - * - \b DigitalAll (Display string: 'Digital All'): Gain will be applied to all digital channels or taps. - * - \b DigitalRed (Display string: 'Digital Red'): Gain will be applied to the red digital channel. - * - \b DigitalGreen (Display string: 'Digital Green'): Gain will be applied to the green digital channel. - * - \b DigitalBlue (Display string: 'Digital Blue'): Gain will be applied to the blue digital channel. - * - \b DigitalY (Display string: 'Digital Y'): Gain will be applied to Y digital channel. - * - \b DigitalU (Display string: 'Digital U'): Gain will be applied to U digital channel. - * - \b DigitalV (Display string: 'Digital V'): Gain will be applied to V digital channel. - * - \b DigitalTap1 (Display string: 'Digital Tap 1'): Digital gain will be applied to Tap 1. - * - \b DigitalTap2 (Display string: 'Digital Tap 2'): Digital gain will be applied to Tap 2. - * - \b DigitalTap\#3\# (Display string: 'Digital Tap \#3\#'): Digital gain will be applied to Tap \#3\#. - * - \b Tap3 (Display string: 'Tap 3'): Gain will be applied to Tap 3. - * - \b Tap4 (Display string: 'Tap 4'): Gain will be applied to Tap 4. - * - \b Tap5 (Display string: 'Tap 5'): Gain will be applied to Tap 5. - * - \b Tap6 (Display string: 'Tap 6'): Gain will be applied to Tap 6. - * - \b Tap7 (Display string: 'Tap 7'): Gain will be applied to Tap 7. - * - \b Tap8 (Display string: 'Tap 8'): Gain will be applied to Tap 8. - * - \b Tap9 (Display string: 'Tap 9'): Gain will be applied to Tap 9. - * - \b Tap10 (Display string: 'Tap 10'): Gain will be applied to Tap 10. - * - \b Tap11 (Display string: 'Tap 11'): Gain will be applied to Tap 11. - * - \b Tap12 (Display string: 'Tap 12'): Gain will be applied to Tap 12. - * - \b Tap13 (Display string: 'Tap 13'): Gain will be applied to Tap 13. - * - \b Tap14 (Display string: 'Tap 14'): Gain will be applied to Tap 14. - * - \b Tap15 (Display string: 'Tap 15'): Gain will be applied to Tap 15. - * - \b Tap16 (Display string: 'Tap 16') * - \b AnalogTap3 (Display string: 'Analog Tap 3'): Analog gain will be applied to Tap 3. * - \b AnalogTap4 (Display string: 'Analog Tap 4'): Analog gain will be applied to Tap 4. * - \b AnalogTap5 (Display string: 'Analog Tap 5'): Analog gain will be applied to Tap 5. @@ -3155,7 +3235,16 @@ public: * - \b AnalogTap13 (Display string: 'Analog Tap 13'): Analog gain will be applied to Tap 13. * - \b AnalogTap14 (Display string: 'Analog Tap 14'): Analog gain will be applied to Tap 14. * - \b AnalogTap15 (Display string: 'Analog Tap 15'): Analog gain will be applied to Tap 15. - * - \b AnalogTap16 (Display string: 'Analog Tap 16') + * - \b AnalogU (Display string: 'Analog U'): Gain will be applied to U analog channel. + * - \b AnalogV (Display string: 'Analog V'): Gain will be applied to V analog channel. + * - \b AnalogY (Display string: 'Analog Y'): Gain will be applied to Y analog channel. + * - \b Blue (Display string: 'Blue'): Gain will be applied to the blue channel. + * - \b DigitalAll (Display string: 'Digital All'): Gain will be applied to all digital channels or taps. + * - \b DigitalBlue (Display string: 'Digital Blue'): Gain will be applied to the blue digital channel. + * - \b DigitalGreen (Display string: 'Digital Green'): Gain will be applied to the green digital channel. + * - \b DigitalRed (Display string: 'Digital Red'): Gain will be applied to the red digital channel. + * - \b DigitalTap1 (Display string: 'Digital Tap 1'): Digital gain will be applied to Tap 1. + * - \b DigitalTap2 (Display string: 'Digital Tap 2'): Digital gain will be applied to Tap 2. * - \b DigitalTap3 (Display string: 'Digital Tap 3'): Digital gain will be applied to Tap 3. * - \b DigitalTap4 (Display string: 'Digital Tap 4'): Digital gain will be applied to Tap 4. * - \b DigitalTap5 (Display string: 'Digital Tap 5'): Digital gain will be applied to Tap 5. @@ -3169,7 +3258,29 @@ public: * - \b DigitalTap13 (Display string: 'Digital Tap 13'): Digital gain will be applied to Tap 13. * - \b DigitalTap14 (Display string: 'Digital Tap 14'): Digital gain will be applied to Tap 14. * - \b DigitalTap15 (Display string: 'Digital Tap 15'): Digital gain will be applied to Tap 15. - * - \b DigitalTap16 (Display string: 'Digital Tap 16') + * - \b DigitalU (Display string: 'Digital U'): Gain will be applied to U digital channel. + * - \b DigitalV (Display string: 'Digital V'): Gain will be applied to V digital channel. + * - \b DigitalY (Display string: 'Digital Y'): Gain will be applied to Y digital channel. + * - \b Green (Display string: 'Green'): Gain will be applied to the green channel. + * - \b Red (Display string: 'Red'): Gain will be applied to the red channel. + * - \b Tap1 (Display string: 'Tap 1'): Gain will be applied to Tap 1. + * - \b Tap2 (Display string: 'Tap 2'): Gain will be applied to Tap 2. + * - \b Tap3 (Display string: 'Tap 3'): Gain will be applied to Tap 3. + * - \b Tap4 (Display string: 'Tap 4'): Gain will be applied to Tap 4. + * - \b Tap5 (Display string: 'Tap 5'): Gain will be applied to Tap 5. + * - \b Tap6 (Display string: 'Tap 6'): Gain will be applied to Tap 6. + * - \b Tap7 (Display string: 'Tap 7'): Gain will be applied to Tap 7. + * - \b Tap8 (Display string: 'Tap 8'): Gain will be applied to Tap 8. + * - \b Tap9 (Display string: 'Tap 9'): Gain will be applied to Tap 9. + * - \b Tap10 (Display string: 'Tap 10'): Gain will be applied to Tap 10. + * - \b Tap11 (Display string: 'Tap 11'): Gain will be applied to Tap 11. + * - \b Tap12 (Display string: 'Tap 12'): Gain will be applied to Tap 12. + * - \b Tap13 (Display string: 'Tap 13'): Gain will be applied to Tap 13. + * - \b Tap14 (Display string: 'Tap 14'): Gain will be applied to Tap 14. + * - \b Tap15 (Display string: 'Tap 15'): Gain will be applied to Tap 15. + * - \b U (Display string: 'U'): Gain will be applied to U channel. + * - \b V (Display string: 'V'): Gain will be applied to V channel. + * - \b Y (Display string: 'Y'): Gain will be applied to Y channel. * - \b mvAnalogSensorA (Display string: 'mv Analog Sensor A') * - \b mvAnalogSensorB (Display string: 'mv Analog Sensor B') * - \b mvHorizontalZone0 (Display string: 'mv Horizontal Zone 0'): Selects the first horizontal gain zone used when 'mvGainMode' is set to 'mvMultiZone' and when operating the device in a 'mvMultiAreaMode' different from 'mvOff'. @@ -3221,15 +3332,11 @@ public: * * The following string values might be valid for this feature: * - \b All (Display string: 'All'): Black Level will be applied to all channels or taps. - * - \b Red (Display string: 'Red'): Black Level will be applied to the red channel. - * - \b Green (Display string: 'Green'): Black Level will be applied to the green channel. * - \b Blue (Display string: 'Blue'): Black Level will be applied to the blue channel. - * - \b Y (Display string: 'Y'): Black Level will be applied to Y channel. - * - \b U (Display string: 'U'): Black Level will be applied to U channel. - * - \b V (Display string: 'V'): Black Level will be applied to V channel. + * - \b Green (Display string: 'Green'): Black Level will be applied to the green channel. + * - \b Red (Display string: 'Red'): Black Level will be applied to the red channel. * - \b Tap1 (Display string: 'Tap 1'): Black Level will be applied to Tap 1. * - \b Tap2 (Display string: 'Tap 2'): Black Level will be applied to Tap 2. - * - \b Tap\#3\# (Display string: 'Tap \#3\#'): Black Level will be applied to Tap \#3\#. * - \b Tap3 (Display string: 'Tap 3'): Black Level will be applied to Tap 3. * - \b Tap4 (Display string: 'Tap 4'): Black Level will be applied to Tap 4. * - \b Tap5 (Display string: 'Tap 5'): Black Level will be applied to Tap 5. @@ -3243,7 +3350,9 @@ public: * - \b Tap13 (Display string: 'Tap 13'): Black Level will be applied to Tap 13. * - \b Tap14 (Display string: 'Tap 14'): Black Level will be applied to Tap 14. * - \b Tap15 (Display string: 'Tap 15'): Black Level will be applied to Tap 15. - * - \b Tap16 (Display string: 'Tap 16') + * - \b U (Display string: 'U'): Black Level will be applied to U channel. + * - \b V (Display string: 'V'): Black Level will be applied to V channel. + * - \b Y (Display string: 'Y'): Black Level will be applied to Y channel. * - \b mvAnalogSensorA (Display string: 'mv Analog Sensor A') * - \b mvAnalogSensorB (Display string: 'mv Analog Sensor B') * @@ -3292,15 +3401,11 @@ public: * * The following string values might be valid for this feature: * - \b All (Display string: 'All'): White Clip will be applied to all channels or taps. - * - \b Red (Display string: 'Red'): White Clip will be applied to the red channel. - * - \b Green (Display string: 'Green'): White Clip will be applied to the green channel. * - \b Blue (Display string: 'Blue'): White Clip will be applied to the blue channel. - * - \b Y (Display string: 'Y'): White Clip will be applied to Y channel. - * - \b U (Display string: 'U'): White Clip will be applied to U channel. - * - \b V (Display string: 'V'): White Clip will be applied to V channel. + * - \b Green (Display string: 'Green'): White Clip will be applied to the green channel. + * - \b Red (Display string: 'Red'): White Clip will be applied to the red channel. * - \b Tap1 (Display string: 'Tap 1'): White Clip will be applied to Tap 1. * - \b Tap2 (Display string: 'Tap 2'): White Clip will be applied to Tap 2. - * - \b Tap\#3\# (Display string: 'Tap \#3\#'): White Clip will be applied to Tap \#3\#. * - \b Tap3 (Display string: 'Tap 3'): White Clip will be applied to Tap 3. * - \b Tap4 (Display string: 'Tap 4'): White Clip will be applied to Tap 4. * - \b Tap5 (Display string: 'Tap 5'): White Clip will be applied to Tap 5. @@ -3314,7 +3419,9 @@ public: * - \b Tap13 (Display string: 'Tap 13'): White Clip will be applied to Tap 13. * - \b Tap14 (Display string: 'Tap 14'): White Clip will be applied to Tap 14. * - \b Tap15 (Display string: 'Tap 15'): White Clip will be applied to Tap 15. - * - \b Tap16 (Display string: 'Tap 16') + * - \b U (Display string: 'U'): White Clip will be applied to U channel. + * - \b V (Display string: 'V'): White Clip will be applied to V channel. + * - \b Y (Display string: 'Y'): White Clip will be applied to Y channel. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -3331,17 +3438,13 @@ public: * * The following string values might be valid for this feature: * - \b All (Display string: 'All'): Balance Ratio will be applied to all channels or taps. - * - \b Red (Display string: 'Red'): Balance Ratio will be applied to the red channel. - * - \b Green (Display string: 'Green'): Balance Ratio will be applied to the green channel. * - \b Blue (Display string: 'Blue'): Balance Ratio will be applied to the blue channel. - * - \b Y (Display string: 'Y'): Balance Ratio will be applied to Y channel. - * - \b U (Display string: 'U'): Balance Ratio will be applied to U channel. - * - \b V (Display string: 'V'): Balance Ratio will be applied to V channel. - * - \b Tap1 (Display string: 'Tap 1'): Balance Ratio will be applied to Tap 1. - * - \b Tap2 (Display string: 'Tap 2'): Balance Ratio will be applied to Tap 2. - * - \b Tap\#3\# (Display string: 'Tap \#3\#'): Balance Ratio will be applied to Tap \#3\#. + * - \b Green (Display string: 'Green'): Balance Ratio will be applied to the green channel. * - \b Green0 (Display string: 'Green 0') * - \b Green1 (Display string: 'Green 1') + * - \b Red (Display string: 'Red'): Balance Ratio will be applied to the red channel. + * - \b Tap1 (Display string: 'Tap 1'): Balance Ratio will be applied to Tap 1. + * - \b Tap2 (Display string: 'Tap 2'): Balance Ratio will be applied to Tap 2. * - \b Tap3 (Display string: 'Tap 3'): Balance Ratio will be applied to Tap 3. * - \b Tap4 (Display string: 'Tap 4'): Balance Ratio will be applied to Tap 4. * - \b Tap5 (Display string: 'Tap 5'): Balance Ratio will be applied to Tap 5. @@ -3355,7 +3458,9 @@ public: * - \b Tap13 (Display string: 'Tap 13'): Balance Ratio will be applied to Tap 13. * - \b Tap14 (Display string: 'Tap 14'): Balance Ratio will be applied to Tap 14. * - \b Tap15 (Display string: 'Tap 15'): Balance Ratio will be applied to Tap 15. - * - \b Tap16 (Display string: 'Tap 16') + * - \b U (Display string: 'U'): Balance Ratio will be applied to U channel. + * - \b V (Display string: 'V'): Balance Ratio will be applied to V channel. + * - \b Y (Display string: 'Y'): Balance Ratio will be applied to Y channel. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -3851,19 +3956,24 @@ public: * Selects the physical line (or pin) of the external device connector or the virtual line of the Transport Layer to configure. * * The following string values might be valid for this feature: - * - \b Line0 (Display string: 'Line 0'): Index of the physical line and associated I/O control block to use. - * - \b Line1 (Display string: 'Line 1'): Index of the physical line and associated I/O control block to use. - * - \b Line2 (Display string: 'Line 2'): Index of the physical line and associated I/O control block to use. - * - \b Line\#3\# (Display string: 'Line \#3\#'): Index of the physical line and associated I/O control block to use. - * - \b LinkTrigger0 (Display string: 'Link Trigger 0'): Index of the virtual line going on the Transport layer to use. - * - \b LinkTrigger1 (Display string: 'Link Trigger 1'): Index of the virtual line going on the Transport layer to use. - * - \b LinkTrigger2 (Display string: 'Link Trigger 2'): Index of the virtual line going on the Transport layer to use. - * - \b LinkTrigger\#3\# (Display string: 'Link Trigger \#3\#'): Index of the virtual line going on the Transport layer to use. * - \b CC1 (Display string: 'CC 1'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink Product only. * - \b CC2 (Display string: 'CC 2'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink Product only. * - \b CC3 (Display string: 'CC 3'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink Product only. * - \b CC4 (Display string: 'CC 4'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink Product only. - * - \b CC\#5\# (Display string: 'CC \#5\#'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink Product only. + * - \b CC5 (Display string: 'CC 5'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink Product only. + * - \b CC6 (Display string: 'CC 6'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink Product only. + * - \b CC7 (Display string: 'CC 7'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink Product only. + * - \b CC8 (Display string: 'CC 8'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink Product only. + * - \b CC9 (Display string: 'CC 9'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink Product only. + * - \b CC10 (Display string: 'CC 10'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink Product only. + * - \b CC11 (Display string: 'CC 11'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink Product only. + * - \b CC12 (Display string: 'CC 12'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink Product only. + * - \b CC13 (Display string: 'CC 13'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink Product only. + * - \b CC14 (Display string: 'CC 14'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink Product only. + * - \b CC15 (Display string: 'CC 15'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink Product only. + * - \b Line0 (Display string: 'Line 0'): Index of the physical line and associated I/O control block to use. + * - \b Line1 (Display string: 'Line 1'): Index of the physical line and associated I/O control block to use. + * - \b Line2 (Display string: 'Line 2'): Index of the physical line and associated I/O control block to use. * - \b Line3 (Display string: 'Line 3'): Index of the physical line and associated I/O control block to use. * - \b Line4 (Display string: 'Line 4'): Index of the physical line and associated I/O control block to use. * - \b Line5 (Display string: 'Line 5'): Index of the physical line and associated I/O control block to use. @@ -3877,18 +3987,9 @@ public: * - \b Line13 (Display string: 'Line 13'): Index of the physical line and associated I/O control block to use. * - \b Line14 (Display string: 'Line 14'): Index of the physical line and associated I/O control block to use. * - \b Line15 (Display string: 'Line 15'): Index of the physical line and associated I/O control block to use. - * - \b CC5 (Display string: 'CC 5'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink Product only. - * - \b CC6 (Display string: 'CC 6'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink Product only. - * - \b CC7 (Display string: 'CC 7'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink Product only. - * - \b CC8 (Display string: 'CC 8'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink Product only. - * - \b CC9 (Display string: 'CC 9'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink Product only. - * - \b CC10 (Display string: 'CC 10'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink Product only. - * - \b CC11 (Display string: 'CC 11'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink Product only. - * - \b CC12 (Display string: 'CC 12'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink Product only. - * - \b CC13 (Display string: 'CC 13'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink Product only. - * - \b CC14 (Display string: 'CC 14'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink Product only. - * - \b CC15 (Display string: 'CC 15'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink Product only. - * - \b CC16 (Display string: 'CC 16') + * - \b LinkTrigger0 (Display string: 'Link Trigger 0'): Index of the virtual line going on the Transport layer to use. + * - \b LinkTrigger1 (Display string: 'Link Trigger 1'): Index of the virtual line going on the Transport layer to use. + * - \b LinkTrigger2 (Display string: 'Link Trigger 2'): Index of the virtual line going on the Transport layer to use. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -3967,83 +4068,75 @@ public: * Selects which internal acquisition or I/O source signal to output on the selected Line. LineMode must be Output. * * The following string values might be valid for this feature: - * - \b Off (Display string: 'Off'): Line output is disabled (Tri-State). - * - \b UserOutput0 (Display string: 'User Output 0'): The chosen User Output Bit state as defined by its current UserOutputValue. - * - \b UserOutput1 (Display string: 'User Output 1'): The chosen User Output Bit state as defined by its current UserOutputValue. - * - \b UserOutput2 (Display string: 'User Output 2'): The chosen User Output Bit state as defined by its current UserOutputValue. - * - \b UserOutput\#3\# (Display string: 'User Output \#3\#'): The chosen User Output Bit state as defined by its current UserOutputValue. - * - \b AcquisitionTriggerWait (Display string: 'Acquisition Trigger Wait'): Device is currently waiting for a trigger for the capture of one or many Frames. + * - \b AcquisitionActive (Display string: 'Acquisition Active'): Device is currently doing an acquisition of one or many Frames. * - \b AcquisitionTrigger (Display string: 'Acquisition Trigger'): Device is currently waiting for a trigger for the capture of one or many Frames. * - \b AcquisitionTriggerMissed (Display string: 'Acquisition Trigger Missed'): Device has missed an Acquisition start trigger. - * - \b AcquisitionActive (Display string: 'Acquisition Active'): Device is currently doing an acquisition of one or many Frames. - * - \b FrameTriggerWait (Display string: 'Frame Trigger Wait'): Device is currently waiting for a Frame start trigger. - * - \b FrameTrigger (Display string: 'Frame Trigger'): Device is currently waiting for a Frame start trigger. - * - \b FrameTriggerMissed (Display string: 'Frame Trigger Missed'): Device has missed a Frame start trigger. - * - \b FrameActive (Display string: 'Frame Active'): Device is currently doing the capture of a Frame. - * - \b ExposureActive (Display string: 'Exposure Active'): Device is doing the exposure of a Frame (or Line). - * - \b LineTriggerWait (Display string: 'Line Trigger Wait'): Device is currently waiting for a Line start trigger. - * - \b LineTrigger (Display string: 'Line Trigger'): Device is currently waiting for a Line start trigger. - * - \b LineTriggerMissed (Display string: 'Line Trigger Missed'): Device has missed a Line start trigger. - * - \b LineActive (Display string: 'Line Active'): Device is currently doing the capture of a Line. + * - \b AcquisitionTriggerWait (Display string: 'Acquisition Trigger Wait'): Device is currently waiting for a trigger for the capture of one or many Frames. * - \b Counter0Active (Display string: 'Counter 0 Active'): The chosen counter is in active state (counting). * - \b Counter1Active (Display string: 'Counter 1 Active'): The chosen counter is in active state (counting). * - \b Counter2Active (Display string: 'Counter 2 Active'): The chosen counter is in active state (counting). - * - \b Counter\#3\#Active (Display string: 'Counter \#3\# Active'): The chosen counter is in active state (counting). - * - \b Timer0Active (Display string: 'Timer 0 Active'): The chosen Timer is in active state. - * - \b Timer1Active (Display string: 'Timer 1 Active'): The chosen Timer is in active state. - * - \b Timer2Active (Display string: 'Timer 2 Active'): The chosen Timer is in active state. - * - \b Timer\#3\#Active (Display string: 'Timer \#3\# Active'): The chosen Timer is in active state. + * - \b Counter3Active (Display string: 'Counter 3 Active'): The chosen counter is in active state (counting). + * - \b Counter4Active (Display string: 'Counter 4 Active'): The chosen counter is in active state (counting). + * - \b Counter5Active (Display string: 'Counter 5 Active'): The chosen counter is in active state (counting). + * - \b Counter6Active (Display string: 'Counter 6 Active'): The chosen counter is in active state (counting). + * - \b Counter7Active (Display string: 'Counter 7 Active'): The chosen counter is in active state (counting). + * - \b Counter8Active (Display string: 'Counter 8 Active'): The chosen counter is in active state (counting). * - \b Encoder0 (Display string: 'Encoder 0'): The chosen Encoder Output state. * - \b Encoder1 (Display string: 'Encoder 1'): The chosen Encoder Output state. * - \b Encoder2 (Display string: 'Encoder 2'): The chosen Encoder Output state. - * - \b Encoder\#3\# (Display string: 'Encoder \#3\#'): The chosen Encoder Output state. + * - \b ExposureActive (Display string: 'Exposure Active'): Device is doing the exposure of a Frame (or Line). + * - \b ExposureAlternateActive (Display string: 'Exposure Alternate Active') + * - \b FrameActive (Display string: 'Frame Active'): Device is currently doing the capture of a Frame. + * - \b FrameTrigger (Display string: 'Frame Trigger'): Device is currently waiting for a Frame start trigger. + * - \b FrameTriggerMissed (Display string: 'Frame Trigger Missed'): Device has missed a Frame start trigger. + * - \b FrameTriggerWait (Display string: 'Frame Trigger Wait'): Device is currently waiting for a Frame start trigger. + * - \b High (Display string: 'High') + * - \b LineActive (Display string: 'Line Active'): Device is currently doing the capture of a Line. + * - \b LineTrigger (Display string: 'Line Trigger'): Device is currently waiting for a Line start trigger. + * - \b LineTriggerMissed (Display string: 'Line Trigger Missed'): Device has missed a Line start trigger. + * - \b LineTriggerWait (Display string: 'Line Trigger Wait'): Device is currently waiting for a Line start trigger. * - \b LogicBlock0 (Display string: 'Logic Block 0'): The choosen Logic Block output state. * - \b LogicBlock1 (Display string: 'Logic Block 1'): The choosen Logic Block output state. * - \b LogicBlock2 (Display string: 'Logic Block 2'): The choosen Logic Block output state. - * - \b LogicBlock\#3\# (Display string: 'Logic Block \#3\#'): The choosen Logic Block output state. + * - \b Low (Display string: 'Low') + * - \b Off (Display string: 'Off'): Line output is disabled (Tri-State). * - \b SoftwareSignal0 (Display string: 'Software Signal 0'): The choosen Software Signal output state. * - \b SoftwareSignal1 (Display string: 'Software Signal 1'): The choosen Software Signal output state. * - \b SoftwareSignal2 (Display string: 'Software Signal 2'): The choosen Software Signal output state. - * - \b SoftwareSignal\#3\# (Display string: 'Software Signal \#3\#'): The choosen Software Signal output state. * - \b Stream0TransferActive (Display string: 'Stream 0 Transfer Active'): Transfer on the stream is active. - * - \b Stream1TransferActive (Display string: 'Stream 1 Transfer Active'): Transfer on the stream is active. - * - \b Stream\#2\#TransferActive (Display string: 'Stream \#2\# Transfer Active'): Transfer on the stream is active. + * - \b Stream0TransferOverflow (Display string: 'Stream 0 Transfer Overflow'): Transfer on the stream is in overflow. * - \b Stream0TransferPaused (Display string: 'Stream 0 Transfer Paused'): Transfer on the stream is paused. - * - \b Stream1TransferPaused (Display string: 'Stream 1 Transfer Paused'): Transfer on the stream is paused. - * - \b Stream\#2\#TransferPaused (Display string: 'Stream \#2\# Transfer Paused'): Transfer on the stream is paused. - * - \b Stream0TransferStopping (Display string: 'Stream 0 Transfer Stopping'): Transfer on the stream is stopping. - * - \b Stream1TransferStopping (Display string: 'Stream 1 Transfer Stopping'): Transfer on the stream is stopping. - * - \b Stream\#2\#TransferStopping (Display string: 'Stream \#2\# Transfer Stopping'): Transfer on the stream is stopping. * - \b Stream0TransferStopped (Display string: 'Stream 0 Transfer Stopped'): Transfer on the stream is stopped. - * - \b Stream1TransferStopped (Display string: 'Stream 1 Transfer Stopped'): Transfer on the stream is stopped. - * - \b Stream\#2\#TransferStopped (Display string: 'Stream \#2\# Transfer Stopped'): Transfer on the stream is stopped. - * - \b Stream0TransferOverflow (Display string: 'Stream 0 Transfer Overflow'): Transfer on the stream is in overflow. + * - \b Stream0TransferStopping (Display string: 'Stream 0 Transfer Stopping'): Transfer on the stream is stopping. + * - \b Stream1TransferActive (Display string: 'Stream 1 Transfer Active'): Transfer on the stream is active. * - \b Stream1TransferOverflow (Display string: 'Stream 1 Transfer Overflow'): Transfer on the stream is in overflow. - * - \b Stream\#2\#TransferOverflow (Display string: 'Stream \#2\# Transfer Overflow'): Transfer on the stream is in overflow. - * - \b mvExposureSensor2Active (Display string: 'mv Exposure Sensor 2 Active') + * - \b Stream1TransferPaused (Display string: 'Stream 1 Transfer Paused'): Transfer on the stream is paused. + * - \b Stream1TransferStopped (Display string: 'Stream 1 Transfer Stopped'): Transfer on the stream is stopped. + * - \b Stream1TransferStopping (Display string: 'Stream 1 Transfer Stopping'): Transfer on the stream is stopping. + * - \b Timer0Active (Display string: 'Timer 0 Active'): The chosen Timer is in active state. + * - \b Timer1Active (Display string: 'Timer 1 Active'): The chosen Timer is in active state. + * - \b Timer2Active (Display string: 'Timer 2 Active'): The chosen Timer is in active state. + * - \b UserOutput0 (Display string: 'User Output 0'): The chosen User Output Bit state as defined by its current UserOutputValue. + * - \b UserOutput1 (Display string: 'User Output 1'): The chosen User Output Bit state as defined by its current UserOutputValue. + * - \b UserOutput2 (Display string: 'User Output 2'): The chosen User Output Bit state as defined by its current UserOutputValue. * - \b UserOutput3 (Display string: 'User Output 3'): The chosen User Output Bit state as defined by its current UserOutputValue. * - \b UserOutput4 (Display string: 'User Output 4'): The chosen User Output Bit state as defined by its current UserOutputValue. * - \b UserOutput5 (Display string: 'User Output 5'): The chosen User Output Bit state as defined by its current UserOutputValue. * - \b UserOutput6 (Display string: 'User Output 6'): The chosen User Output Bit state as defined by its current UserOutputValue. * - \b UserOutput7 (Display string: 'User Output 7'): The chosen User Output Bit state as defined by its current UserOutputValue. - * - \b Counter3Active (Display string: 'Counter 3 Active'): The chosen counter is in active state (counting). - * - \b Counter4Active (Display string: 'Counter 4 Active'): The chosen counter is in active state (counting). - * - \b Counter5Active (Display string: 'Counter 5 Active'): The chosen counter is in active state (counting). - * - \b Counter6Active (Display string: 'Counter 6 Active'): The chosen counter is in active state (counting). - * - \b Counter7Active (Display string: 'Counter 7 Active'): The chosen counter is in active state (counting). - * - \b Counter8Active (Display string: 'Counter 8 Active'): The chosen counter is in active state (counting). - * - \b mvReadOutActive (Display string: 'mv Read Out Active') + * - \b mvExposureActive (Display string: 'mv Exposure Active') * - \b mvExposureAndAcquisitionActive (Display string: 'mv Exposure And Acquisition Active') - * - \b mvTemperatureOutOfRange (Display string: 'mv Temperature Out Of Range') + * - \b mvExposureSensor2Active (Display string: 'mv Exposure Sensor 2 Active') * - \b mvLogicGateOR1Output (Display string: 'mv Logic Gate OR 1 Output') * - \b mvLogicGateOR2Output (Display string: 'mv Logic Gate OR 2 Output') * - \b mvLogicGateOR3Output (Display string: 'mv Logic Gate OR 3 Output') * - \b mvLogicGateOR4Output (Display string: 'mv Logic Gate OR 4 Output') - * - \b mvExposureActive (Display string: 'mv Exposure Active') * - \b mvRTMOutput0 (Display string: 'mv RTM Output 0') * - \b mvRTMOutput1 (Display string: 'mv RTM Output 1') * - \b mvRTMOutput2 (Display string: 'mv RTM Output 2') * - \b mvRTMOutput3 (Display string: 'mv RTM Output 3') + * - \b mvReadOutActive (Display string: 'mv Read Out Active') + * - \b mvTemperatureOutOfRange (Display string: 'mv Temperature Out Of Range') * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -4074,7 +4167,6 @@ public: * - \b UserOutput0 (Display string: 'User Output 0'): Selects the bit 0 of the User Output register. * - \b UserOutput1 (Display string: 'User Output 1'): Selects the bit 1 of the User Output register. * - \b UserOutput2 (Display string: 'User Output 2'): Selects the bit 2 of the User Output register. - * - \b UserOutput\#3\# (Display string: 'User Output \#3\#'): Selects the bit \#3\# of the User Output register. * - \b UserOutput3 (Display string: 'User Output 3'): Selects the bit 3 of the User Output register. * - \b UserOutput4 (Display string: 'User Output 4'): Selects the bit 4 of the User Output register. * - \b UserOutput5 (Display string: 'User Output 5'): Selects the bit 5 of the User Output register. @@ -4264,7 +4356,6 @@ public: * - \b Counter0 (Display string: 'Counter 0'): Selects the counter 0. * - \b Counter1 (Display string: 'Counter 1'): Selects the counter 1. * - \b Counter2 (Display string: 'Counter 2'): Selects the counter 2. - * - \b Counter\#3\# (Display string: 'Counter \#3\#'): Selects the counter \#3\#. * - \b Counter3 (Display string: 'Counter 3'): Selects the counter 3. * - \b Counter4 (Display string: 'Counter 4'): Selects the counter 4. * - \b Counter5 (Display string: 'Counter 5'): Selects the counter 5. @@ -4278,7 +4369,6 @@ public: * - \b Counter13 (Display string: 'Counter 13'): Selects the counter 13. * - \b Counter14 (Display string: 'Counter 14'): Selects the counter 14. * - \b Counter15 (Display string: 'Counter 15'): Selects the counter 15. - * - \b Counter16 (Display string: 'Counter 16') * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -4289,109 +4379,13 @@ public: * Select the events that will be the source to increment the Counter. * * The following string values might be valid for this feature: - * - \b Off (Display string: 'Off'): Counter is stopped. + * - \b AcquisitionEnd (Display string: 'Acquisition End'): Counts the number of Acquisition End. + * - \b AcquisitionStart (Display string: 'Acquisition Start'): Counts the number of Acquisition Start. * - \b AcquisitionTrigger (Display string: 'Acquisition Trigger'): Counts the number of Acquisition Trigger. * - \b AcquisitionTriggerMissed (Display string: 'Acquisition Trigger Missed'): Counts the number of missed Acquisition Start Trigger. - * - \b AcquisitionStart (Display string: 'Acquisition Start'): Counts the number of Acquisition Start. - * - \b AcquisitionEnd (Display string: 'Acquisition End'): Counts the number of Acquisition End. - * - \b FrameTrigger (Display string: 'Frame Trigger'): Counts the number of Frame Start Trigger. - * - \b FrameTriggerMissed (Display string: 'Frame Trigger Missed'): Counts the number of missed Frame Start Trigger. - * - \b FrameStart (Display string: 'Frame Start'): Counts the number of Frame Start. - * - \b FrameEnd (Display string: 'Frame End'): Counts the number of Frame End. - * - \b FrameBurstStart (Display string: 'Frame Burst Start'): Counts the number of Frame Burst Start. - * - \b FrameBurstEnd (Display string: 'Frame Burst End'): Counts the number of Frame Burst End. - * - \b LineTrigger (Display string: 'Line Trigger'): Counts the number of Line Start Trigger. - * - \b LineTriggerMissed (Display string: 'Line Trigger Missed'): Counts the number of missed Line Start Trigger. - * - \b LineStart (Display string: 'Line Start'): Counts the number of Line Start. - * - \b LineEnd (Display string: 'Line End'): Counts the number of Line End. - * - \b ExposureStart (Display string: 'Exposure Start'): Counts the number of Exposure Start. - * - \b ExposureEnd (Display string: 'Exposure End'): Counts the number of Exposure End. - * - \b Line0 (Display string: 'Line 0'): Counts the number of transitions on the chosen I/O Line. - * - \b Line1 (Display string: 'Line 1'): Counts the number of transitions on the chosen I/O Line. - * - \b Line2 (Display string: 'Line 2'): Counts the number of transitions on the chosen I/O Line. - * - \b Line\#3\# (Display string: 'Line \#3\#'): Counts the number of transitions on the chosen I/O Line. - * - \b Counter0Start (Display string: 'Counter 0 Start'): Counts the number of Counter Start. - * - \b Counter1Start (Display string: 'Counter 1 Start'): Counts the number of Counter Start. - * - \b Counter2Start (Display string: 'Counter 2 Start'): Counts the number of Counter Start. - * - \b Counter\#3\#Start (Display string: 'Counter \#3\# Start'): Counts the number of Counter Start. - * - \b Counter0End (Display string: 'Counter 0 End'): Counts the number of Counter End. - * - \b Counter1End (Display string: 'Counter 1 End'): Counts the number of Counter End. - * - \b Counter2End (Display string: 'Counter 2 End'): Counts the number of Counter End. - * - \b Counter\#3\#End (Display string: 'Counter \#3\# End'): Counts the number of Counter End. - * - \b Timer0Start (Display string: 'Timer 0 Start'): Counts the number of Timer Start pulses generated. - * - \b Timer1Start (Display string: 'Timer 1 Start'): Counts the number of Timer Start pulses generated. - * - \b Timer2Start (Display string: 'Timer 2 Start'): Counts the number of Timer Start pulses generated. - * - \b Timer\#3\#Start (Display string: 'Timer \#3\# Start'): Counts the number of Timer Start pulses generated. - * - \b Timer0End (Display string: 'Timer 0 End'): Counts the number of Timer End pulses generated. - * - \b Timer1End (Display string: 'Timer 1 End'): Counts the number of Timer End pulses generated. - * - \b Timer2End (Display string: 'Timer 2 End'): Counts the number of Timer End pulses generated. - * - \b Timer\#3\#End (Display string: 'Timer \#3\# End'): Counts the number of Timer End pulses generated. - * - \b Encoder0 (Display string: 'Encoder 0'): Counts the number of Encoder output pulses. - * - \b Encoder1 (Display string: 'Encoder 1'): Counts the number of Encoder output pulses. - * - \b Encoder2 (Display string: 'Encoder 2'): Counts the number of Encoder output pulses. - * - \b Encoder\#3\# (Display string: 'Encoder \#3\#'): Counts the number of Encoder output pulses. - * - \b LogicBlock0 (Display string: 'Logic Block 0'): Counts the number of Logic Block output pulses. - * - \b LogicBlock1 (Display string: 'Logic Block 1'): Counts the number of Logic Block output pulses. - * - \b LogicBlock2 (Display string: 'Logic Block 2'): Counts the number of Logic Block output pulses. - * - \b LogicBlock\#3\# (Display string: 'Logic Block \#3\#'): Counts the number of Logic Block output pulses. - * - \b SoftwareSignal0 (Display string: 'Software Signal 0'): Counts the number of Software Signal. - * - \b SoftwareSignal1 (Display string: 'Software Signal 1'): Counts the number of Software Signal. - * - \b SoftwareSignal2 (Display string: 'Software Signal 2'): Counts the number of Software Signal. - * - \b SoftwareSignal\#3\# (Display string: 'Software Signal \#3\#'): Counts the number of Software Signal. * - \b Action0 (Display string: 'Action 0'): Counts the number of assertions of the chosen action signal. * - \b Action1 (Display string: 'Action 1'): Counts the number of assertions of the chosen action signal. * - \b Action2 (Display string: 'Action 2'): Counts the number of assertions of the chosen action signal. - * - \b Action\#3\# (Display string: 'Action \#3\#'): Counts the number of assertions of the chosen action signal. - * - \b LinkTrigger0 (Display string: 'Link Trigger 0'): Counts the number of Link Triggers. - * - \b LinkTrigger1 (Display string: 'Link Trigger 1'): Counts the number of Link Triggers. - * - \b LinkTrigger2 (Display string: 'Link Trigger 2'): Counts the number of Link Triggers. - * - \b LinkTrigger\#3\# (Display string: 'Link Trigger \#3\#'): Counts the number of Link Triggers. - * - \b LinkTriggerMissed0 (Display string: 'Link Trigger Missed 0'): Counts the number of Link Triggers missed. - * - \b LinkTriggerMissed1 (Display string: 'Link Trigger Missed 1'): Counts the number of Link Triggers missed. - * - \b LinkTriggerMissed2 (Display string: 'Link Trigger Missed 2'): Counts the number of Link Triggers missed. - * - \b LinkTriggerMissed\#3\# (Display string: 'Link Trigger Missed \#3\#'): Counts the number of Link Triggers missed. - * - \b TimestampTick (Display string: 'Timestamp Tick'): Counts the number of clock ticks of the Timestamp clock. Can be used to create a programmable timer. - * - \b Line3 (Display string: 'Line 3'): Counts the number of transitions on the chosen I/O Line. - * - \b Line4 (Display string: 'Line 4'): Counts the number of transitions on the chosen I/O Line. - * - \b Line5 (Display string: 'Line 5'): Counts the number of transitions on the chosen I/O Line. - * - \b Line6 (Display string: 'Line 6'): Counts the number of transitions on the chosen I/O Line. - * - \b Line7 (Display string: 'Line 7'): Counts the number of transitions on the chosen I/O Line. - * - \b Line8 (Display string: 'Line 8'): Counts the number of transitions on the chosen I/O Line. - * - \b Line9 (Display string: 'Line 9'): Counts the number of transitions on the chosen I/O Line. - * - \b Line10 (Display string: 'Line 10'): Counts the number of transitions on the chosen I/O Line. - * - \b Line11 (Display string: 'Line 11'): Counts the number of transitions on the chosen I/O Line. - * - \b Line12 (Display string: 'Line 12'): Counts the number of transitions on the chosen I/O Line. - * - \b Line13 (Display string: 'Line 13'): Counts the number of transitions on the chosen I/O Line. - * - \b Line14 (Display string: 'Line 14'): Counts the number of transitions on the chosen I/O Line. - * - \b Line15 (Display string: 'Line 15'): Counts the number of transitions on the chosen I/O Line. - * - \b Counter3End (Display string: 'Counter 3 End'): Counts the number of Counter End. - * - \b Counter4End (Display string: 'Counter 4 End'): Counts the number of Counter End. - * - \b Counter5End (Display string: 'Counter 5 End'): Counts the number of Counter End. - * - \b Counter6End (Display string: 'Counter 6 End'): Counts the number of Counter End. - * - \b Counter7End (Display string: 'Counter 7 End'): Counts the number of Counter End. - * - \b Counter8End (Display string: 'Counter 8 End'): Counts the number of Counter End. - * - \b Counter9End (Display string: 'Counter 9 End'): Counts the number of Counter End. - * - \b Counter10End (Display string: 'Counter 10 End'): Counts the number of Counter End. - * - \b Counter11End (Display string: 'Counter 11 End'): Counts the number of Counter End. - * - \b Counter12End (Display string: 'Counter 12 End'): Counts the number of Counter End. - * - \b Counter13End (Display string: 'Counter 13 End'): Counts the number of Counter End. - * - \b Counter14End (Display string: 'Counter 14 End'): Counts the number of Counter End. - * - \b Counter15End (Display string: 'Counter 15 End'): Counts the number of Counter End. - * - \b Counter16End (Display string: 'Counter 16 End') - * - \b Timer3End (Display string: 'Timer 3 End'): Counts the number of Timer End pulses generated. - * - \b Timer4End (Display string: 'Timer 4 End'): Counts the number of Timer End pulses generated. - * - \b Timer5End (Display string: 'Timer 5 End'): Counts the number of Timer End pulses generated. - * - \b Timer6End (Display string: 'Timer 6 End'): Counts the number of Timer End pulses generated. - * - \b Timer7End (Display string: 'Timer 7 End'): Counts the number of Timer End pulses generated. - * - \b Timer8End (Display string: 'Timer 8 End'): Counts the number of Timer End pulses generated. - * - \b Timer9End (Display string: 'Timer 9 End'): Counts the number of Timer End pulses generated. - * - \b Timer10End (Display string: 'Timer 10 End'): Counts the number of Timer End pulses generated. - * - \b Timer11End (Display string: 'Timer 11 End'): Counts the number of Timer End pulses generated. - * - \b Timer12End (Display string: 'Timer 12 End'): Counts the number of Timer End pulses generated. - * - \b Timer13End (Display string: 'Timer 13 End'): Counts the number of Timer End pulses generated. - * - \b Timer14End (Display string: 'Timer 14 End'): Counts the number of Timer End pulses generated. - * - \b Timer15End (Display string: 'Timer 15 End'): Counts the number of Timer End pulses generated. - * - \b Timer16End (Display string: 'Timer 16 End') * - \b Action3 (Display string: 'Action 3'): Counts the number of assertions of the chosen action signal. * - \b Action4 (Display string: 'Action 4'): Counts the number of assertions of the chosen action signal. * - \b Action5 (Display string: 'Action 5'): Counts the number of assertions of the chosen action signal. @@ -4405,28 +4399,110 @@ public: * - \b Action13 (Display string: 'Action 13'): Counts the number of assertions of the chosen action signal. * - \b Action14 (Display string: 'Action 14'): Counts the number of assertions of the chosen action signal. * - \b Action15 (Display string: 'Action 15'): Counts the number of assertions of the chosen action signal. - * - \b Action16 (Display string: 'Action 16') + * - \b Counter0End (Display string: 'Counter 0 End'): Counts the number of Counter End. + * - \b Counter0Start (Display string: 'Counter 0 Start'): Counts the number of Counter Start. + * - \b Counter1End (Display string: 'Counter 1 End'): Counts the number of Counter End. + * - \b Counter1Start (Display string: 'Counter 1 Start'): Counts the number of Counter Start. + * - \b Counter2End (Display string: 'Counter 2 End'): Counts the number of Counter End. + * - \b Counter2Start (Display string: 'Counter 2 Start'): Counts the number of Counter Start. + * - \b Counter3End (Display string: 'Counter 3 End'): Counts the number of Counter End. + * - \b Counter4End (Display string: 'Counter 4 End'): Counts the number of Counter End. + * - \b Counter5End (Display string: 'Counter 5 End'): Counts the number of Counter End. + * - \b Counter6End (Display string: 'Counter 6 End'): Counts the number of Counter End. + * - \b Counter7End (Display string: 'Counter 7 End'): Counts the number of Counter End. + * - \b Counter8End (Display string: 'Counter 8 End'): Counts the number of Counter End. + * - \b Counter9End (Display string: 'Counter 9 End'): Counts the number of Counter End. + * - \b Counter10End (Display string: 'Counter 10 End'): Counts the number of Counter End. + * - \b Counter11End (Display string: 'Counter 11 End'): Counts the number of Counter End. + * - \b Counter12End (Display string: 'Counter 12 End'): Counts the number of Counter End. + * - \b Counter13End (Display string: 'Counter 13 End'): Counts the number of Counter End. + * - \b Counter14End (Display string: 'Counter 14 End'): Counts the number of Counter End. + * - \b Counter15End (Display string: 'Counter 15 End'): Counts the number of Counter End. + * - \b Encoder0 (Display string: 'Encoder 0'): Counts the number of Encoder output pulses. + * - \b Encoder1 (Display string: 'Encoder 1'): Counts the number of Encoder output pulses. + * - \b Encoder2 (Display string: 'Encoder 2'): Counts the number of Encoder output pulses. + * - \b ExposureEnd (Display string: 'Exposure End'): Counts the number of Exposure End. + * - \b ExposureStart (Display string: 'Exposure Start'): Counts the number of Exposure Start. + * - \b FrameBurstEnd (Display string: 'Frame Burst End'): Counts the number of Frame Burst End. + * - \b FrameBurstStart (Display string: 'Frame Burst Start'): Counts the number of Frame Burst Start. + * - \b FrameEnd (Display string: 'Frame End'): Counts the number of Frame End. + * - \b FrameStart (Display string: 'Frame Start'): Counts the number of Frame Start. + * - \b FrameTrigger (Display string: 'Frame Trigger'): Counts the number of Frame Start Trigger. + * - \b FrameTriggerMissed (Display string: 'Frame Trigger Missed'): Counts the number of missed Frame Start Trigger. + * - \b Line0 (Display string: 'Line 0'): Counts the number of transitions on the chosen I/O Line. * - \b Line0RisingEdge (Display string: 'Line 0 Rising Edge') + * - \b Line1 (Display string: 'Line 1'): Counts the number of transitions on the chosen I/O Line. * - \b Line1RisingEdge (Display string: 'Line 1 Rising Edge') + * - \b Line2 (Display string: 'Line 2'): Counts the number of transitions on the chosen I/O Line. * - \b Line2RisingEdge (Display string: 'Line 2 Rising Edge') + * - \b Line3 (Display string: 'Line 3'): Counts the number of transitions on the chosen I/O Line. * - \b Line3RisingEdge (Display string: 'Line 3 Rising Edge') + * - \b Line4 (Display string: 'Line 4'): Counts the number of transitions on the chosen I/O Line. * - \b Line4RisingEdge (Display string: 'Line 4 Rising Edge') + * - \b Line5 (Display string: 'Line 5'): Counts the number of transitions on the chosen I/O Line. * - \b Line5RisingEdge (Display string: 'Line 5 Rising Edge') + * - \b Line6 (Display string: 'Line 6'): Counts the number of transitions on the chosen I/O Line. * - \b Line6RisingEdge (Display string: 'Line 6 Rising Edge') + * - \b Line7 (Display string: 'Line 7'): Counts the number of transitions on the chosen I/O Line. * - \b Line7RisingEdge (Display string: 'Line 7 Rising Edge') + * - \b Line8 (Display string: 'Line 8'): Counts the number of transitions on the chosen I/O Line. * - \b Line8RisingEdge (Display string: 'Line 8 Rising Edge') + * - \b Line9 (Display string: 'Line 9'): Counts the number of transitions on the chosen I/O Line. * - \b Line9RisingEdge (Display string: 'Line 9 Rising Edge') + * - \b Line10 (Display string: 'Line 10'): Counts the number of transitions on the chosen I/O Line. * - \b Line10RisingEdge (Display string: 'Line 10 Rising Edge') + * - \b Line11 (Display string: 'Line 11'): Counts the number of transitions on the chosen I/O Line. * - \b Line11RisingEdge (Display string: 'Line 11 Rising Edge') + * - \b Line12 (Display string: 'Line 12'): Counts the number of transitions on the chosen I/O Line. * - \b Line12RisingEdge (Display string: 'Line 12 Rising Edge') + * - \b Line13 (Display string: 'Line 13'): Counts the number of transitions on the chosen I/O Line. * - \b Line13RisingEdge (Display string: 'Line 13 Rising Edge') + * - \b Line14 (Display string: 'Line 14'): Counts the number of transitions on the chosen I/O Line. * - \b Line14RisingEdge (Display string: 'Line 14 Rising Edge') + * - \b Line15 (Display string: 'Line 15'): Counts the number of transitions on the chosen I/O Line. * - \b Line15RisingEdge (Display string: 'Line 15 Rising Edge') - * - \b mvTemperatureOutOfRange (Display string: 'mv Temperature Out Of Range') + * - \b LineEnd (Display string: 'Line End'): Counts the number of Line End. + * - \b LineStart (Display string: 'Line Start'): Counts the number of Line Start. + * - \b LineTrigger (Display string: 'Line Trigger'): Counts the number of Line Start Trigger. + * - \b LineTriggerMissed (Display string: 'Line Trigger Missed'): Counts the number of missed Line Start Trigger. + * - \b LinkTrigger0 (Display string: 'Link Trigger 0'): Counts the number of Link Triggers. + * - \b LinkTrigger1 (Display string: 'Link Trigger 1'): Counts the number of Link Triggers. + * - \b LinkTrigger2 (Display string: 'Link Trigger 2'): Counts the number of Link Triggers. + * - \b LinkTriggerMissed0 (Display string: 'Link Trigger Missed 0'): Counts the number of Link Triggers missed. + * - \b LinkTriggerMissed1 (Display string: 'Link Trigger Missed 1'): Counts the number of Link Triggers missed. + * - \b LinkTriggerMissed2 (Display string: 'Link Trigger Missed 2'): Counts the number of Link Triggers missed. + * - \b LogicBlock0 (Display string: 'Logic Block 0'): Counts the number of Logic Block output pulses. + * - \b LogicBlock1 (Display string: 'Logic Block 1'): Counts the number of Logic Block output pulses. + * - \b LogicBlock2 (Display string: 'Logic Block 2'): Counts the number of Logic Block output pulses. + * - \b Off (Display string: 'Off'): Counter is stopped. + * - \b SoftwareSignal0 (Display string: 'Software Signal 0'): Counts the number of Software Signal. + * - \b SoftwareSignal1 (Display string: 'Software Signal 1'): Counts the number of Software Signal. + * - \b SoftwareSignal2 (Display string: 'Software Signal 2'): Counts the number of Software Signal. + * - \b Timer0End (Display string: 'Timer 0 End'): Counts the number of Timer End pulses generated. + * - \b Timer0Start (Display string: 'Timer 0 Start'): Counts the number of Timer Start pulses generated. + * - \b Timer1End (Display string: 'Timer 1 End'): Counts the number of Timer End pulses generated. + * - \b Timer1Start (Display string: 'Timer 1 Start'): Counts the number of Timer Start pulses generated. + * - \b Timer2End (Display string: 'Timer 2 End'): Counts the number of Timer End pulses generated. + * - \b Timer2Start (Display string: 'Timer 2 Start'): Counts the number of Timer Start pulses generated. + * - \b Timer3End (Display string: 'Timer 3 End'): Counts the number of Timer End pulses generated. + * - \b Timer4End (Display string: 'Timer 4 End'): Counts the number of Timer End pulses generated. + * - \b Timer5End (Display string: 'Timer 5 End'): Counts the number of Timer End pulses generated. + * - \b Timer6End (Display string: 'Timer 6 End'): Counts the number of Timer End pulses generated. + * - \b Timer7End (Display string: 'Timer 7 End'): Counts the number of Timer End pulses generated. + * - \b Timer8End (Display string: 'Timer 8 End'): Counts the number of Timer End pulses generated. + * - \b Timer9End (Display string: 'Timer 9 End'): Counts the number of Timer End pulses generated. + * - \b Timer10End (Display string: 'Timer 10 End'): Counts the number of Timer End pulses generated. + * - \b Timer11End (Display string: 'Timer 11 End'): Counts the number of Timer End pulses generated. + * - \b Timer12End (Display string: 'Timer 12 End'): Counts the number of Timer End pulses generated. + * - \b Timer13End (Display string: 'Timer 13 End'): Counts the number of Timer End pulses generated. + * - \b Timer14End (Display string: 'Timer 14 End'): Counts the number of Timer End pulses generated. + * - \b Timer15End (Display string: 'Timer 15 End'): Counts the number of Timer End pulses generated. + * - \b TimestampTick (Display string: 'Timestamp Tick'): Counts the number of clock ticks of the Timestamp clock. Can be used to create a programmable timer. * - \b mvLogicGateOR1Output (Display string: 'mv Logic Gate OR 1 Output') * - \b mvLogicGateOR2Output (Display string: 'mv Logic Gate OR 2 Output') * - \b mvLogicGateOR3Output (Display string: 'mv Logic Gate OR 3 Output') * - \b mvLogicGateOR4Output (Display string: 'mv Logic Gate OR 4 Output') + * - \b mvTemperatureOutOfRange (Display string: 'mv Temperature Out Of Range') * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -4452,66 +4528,58 @@ public: * Selects the signals that will be the source to reset the Counter. * * The following string values might be valid for this feature: - * - \b Off (Display string: 'Off'): Disable the Counter Reset trigger. - * - \b CounterTrigger (Display string: 'Counter Trigger'): Resets with the reception of a trigger on the CounterTriggerSource. + * - \b AcquisitionEnd (Display string: 'Acquisition End'): Resets with the reception of the Acquisition End. + * - \b AcquisitionStart (Display string: 'Acquisition Start'): Resets with the reception of the Acquisition Start. * - \b AcquisitionTrigger (Display string: 'Acquisition Trigger'): Resets with the reception of the Acquisition Trigger. * - \b AcquisitionTriggerMissed (Display string: 'Acquisition Trigger Missed'): Resets with the reception of the missed Acquisition start trigger. - * - \b AcquisitionStart (Display string: 'Acquisition Start'): Resets with the reception of the Acquisition Start. - * - \b AcquisitionEnd (Display string: 'Acquisition End'): Resets with the reception of the Acquisition End. - * - \b FrameTrigger (Display string: 'Frame Trigger'): Resets with the reception of the Frame Start Trigger. - * - \b FrameTriggerMissed (Display string: 'Frame Trigger Missed'): Resets with the reception of the missed Frame start trigger. - * - \b FrameStart (Display string: 'Frame Start'): Resets with the reception of the Frame Start. - * - \b FrameEnd (Display string: 'Frame End'): Resets with the reception of the Frame End. - * - \b LineTrigger (Display string: 'Line Trigger'): Resets with the reception of the Line Start Trigger. - * - \b LineTriggerMissed (Display string: 'Line Trigger Missed'): Resets with the reception of the missed Line start trigger. - * - \b LineStart (Display string: 'Line Start'): Resets with the reception of the Line Start. - * - \b LineEnd (Display string: 'Line End'): Resets with the reception of the Line End. - * - \b ExposureStart (Display string: 'Exposure Start'): Resets with the reception of the Exposure Start. - * - \b ExposureEnd (Display string: 'Exposure End'): Resets with the reception of the Exposure End. - * - \b Line0 (Display string: 'Line 0'): Resets by the chosen I/O Line. - * - \b Line1 (Display string: 'Line 1'): Resets by the chosen I/O Line. - * - \b Line2 (Display string: 'Line 2'): Resets by the chosen I/O Line. - * - \b Line\#3\# (Display string: 'Line \#3\#'): Resets by the chosen I/O Line. - * - \b UserOutput0 (Display string: 'User Output 0'): Resets by the chosen User Output bit. - * - \b UserOutput1 (Display string: 'User Output 1'): Resets by the chosen User Output bit. - * - \b UserOutput2 (Display string: 'User Output 2'): Resets by the chosen User Output bit. - * - \b UserOutput\#3\# (Display string: 'User Output \#3\#'): Resets by the chosen User Output bit. - * - \b Counter0Start (Display string: 'Counter 0 Start'): Resets with the reception of the Counter Start. - * - \b Counter1Start (Display string: 'Counter 1 Start'): Resets with the reception of the Counter Start. - * - \b Counter2Start (Display string: 'Counter 2 Start'): Resets with the reception of the Counter Start. - * - \b Counter\#3\#Start (Display string: 'Counter \#3\# Start'): Resets with the reception of the Counter Start. + * - \b Action0 (Display string: 'Action 0'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). + * - \b Action1 (Display string: 'Action 1'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). + * - \b Action2 (Display string: 'Action 2'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). + * - \b Action3 (Display string: 'Action 3'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). + * - \b Action4 (Display string: 'Action 4'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). + * - \b Action5 (Display string: 'Action 5'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). + * - \b Action6 (Display string: 'Action 6'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). + * - \b Action7 (Display string: 'Action 7'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). + * - \b Action8 (Display string: 'Action 8'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). + * - \b Action9 (Display string: 'Action 9'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). + * - \b Action10 (Display string: 'Action 10'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). + * - \b Action11 (Display string: 'Action 11'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). + * - \b Action12 (Display string: 'Action 12'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). + * - \b Action13 (Display string: 'Action 13'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). + * - \b Action14 (Display string: 'Action 14'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). + * - \b Action15 (Display string: 'Action 15'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). * - \b Counter0End (Display string: 'Counter 0 End'): Resets with the reception of the Counter End. + * - \b Counter0Start (Display string: 'Counter 0 Start'): Resets with the reception of the Counter Start. * - \b Counter1End (Display string: 'Counter 1 End'): Resets with the reception of the Counter End. + * - \b Counter1Start (Display string: 'Counter 1 Start'): Resets with the reception of the Counter Start. * - \b Counter2End (Display string: 'Counter 2 End'): Resets with the reception of the Counter End. - * - \b Counter\#3\#End (Display string: 'Counter \#3\# End'): Resets with the reception of the Counter End. - * - \b Timer0Start (Display string: 'Timer 0 Start'): Resets with the reception of the Timer Start. - * - \b Timer1Start (Display string: 'Timer 1 Start'): Resets with the reception of the Timer Start. - * - \b Timer2Start (Display string: 'Timer 2 Start'): Resets with the reception of the Timer Start. - * - \b Timer\#3\#Start (Display string: 'Timer \#3\# Start'): Resets with the reception of the Timer Start. - * - \b Timer0End (Display string: 'Timer 0 End'): Resets with the reception of the Timer End. - * - \b Timer1End (Display string: 'Timer 1 End'): Resets with the reception of the Timer End. - * - \b Timer2End (Display string: 'Timer 2 End'): Resets with the reception of the Timer End. - * - \b Timer\#3\#End (Display string: 'Timer \#3\# End'): Resets with the reception of the Timer End. + * - \b Counter2Start (Display string: 'Counter 2 Start'): Resets with the reception of the Counter Start. + * - \b Counter3End (Display string: 'Counter 3 End'): Resets with the reception of the Counter End. + * - \b Counter4End (Display string: 'Counter 4 End'): Resets with the reception of the Counter End. + * - \b Counter5End (Display string: 'Counter 5 End'): Resets with the reception of the Counter End. + * - \b Counter6End (Display string: 'Counter 6 End'): Resets with the reception of the Counter End. + * - \b Counter7End (Display string: 'Counter 7 End'): Resets with the reception of the Counter End. + * - \b Counter8End (Display string: 'Counter 8 End'): Resets with the reception of the Counter End. + * - \b Counter9End (Display string: 'Counter 9 End'): Resets with the reception of the Counter End. + * - \b Counter10End (Display string: 'Counter 10 End'): Resets with the reception of the Counter End. + * - \b Counter11End (Display string: 'Counter 11 End'): Resets with the reception of the Counter End. + * - \b Counter12End (Display string: 'Counter 12 End'): Resets with the reception of the Counter End. + * - \b Counter13End (Display string: 'Counter 13 End'): Resets with the reception of the Counter End. + * - \b Counter14End (Display string: 'Counter 14 End'): Resets with the reception of the Counter End. + * - \b Counter15End (Display string: 'Counter 15 End'): Resets with the reception of the Counter End. + * - \b CounterTrigger (Display string: 'Counter Trigger'): Resets with the reception of a trigger on the CounterTriggerSource. * - \b Encoder0 (Display string: 'Encoder 0'): Resets with the reception of the Encoder output signal. * - \b Encoder1 (Display string: 'Encoder 1'): Resets with the reception of the Encoder output signal. * - \b Encoder2 (Display string: 'Encoder 2'): Resets with the reception of the Encoder output signal. - * - \b Encoder\#3\# (Display string: 'Encoder \#3\#'): Resets with the reception of the Encoder output signal. - * - \b LogicBlock0 (Display string: 'Logic Block 0'): Resets with the reception of the LogicBlock output signal. - * - \b LogicBlock1 (Display string: 'Logic Block 1'): Resets with the reception of the LogicBlock output signal. - * - \b LogicBlock2 (Display string: 'Logic Block 2'): Resets with the reception of the LogicBlock output signal. - * - \b LogicBlock\#3\# (Display string: 'Logic Block \#3\#'): Resets with the reception of the LogicBlock output signal. - * - \b SoftwareSignal0 (Display string: 'Software Signal 0'): Resets on the reception of the Software Signal. - * - \b SoftwareSignal1 (Display string: 'Software Signal 1'): Resets on the reception of the Software Signal. - * - \b SoftwareSignal2 (Display string: 'Software Signal 2'): Resets on the reception of the Software Signal. - * - \b SoftwareSignal\#3\# (Display string: 'Software Signal \#3\#'): Resets on the reception of the Software Signal. - * - \b Action0 (Display string: 'Action 0'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). - * - \b Action1 (Display string: 'Action 1'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). - * - \b Action2 (Display string: 'Action 2'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). - * - \b Action\#3\# (Display string: 'Action \#3\#'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). - * - \b LinkTrigger0 (Display string: 'Link Trigger 0'): Resets on the reception of the chosen Link Trigger (received from the transport layer). - * - \b LinkTrigger1 (Display string: 'Link Trigger 1'): Resets on the reception of the chosen Link Trigger (received from the transport layer). - * - \b LinkTrigger2 (Display string: 'Link Trigger 2'): Resets on the reception of the chosen Link Trigger (received from the transport layer). - * - \b LinkTrigger\#3\# (Display string: 'Link Trigger \#3\#'): Resets on the reception of the chosen Link Trigger (received from the transport layer). + * - \b ExposureEnd (Display string: 'Exposure End'): Resets with the reception of the Exposure End. + * - \b ExposureStart (Display string: 'Exposure Start'): Resets with the reception of the Exposure Start. + * - \b FrameEnd (Display string: 'Frame End'): Resets with the reception of the Frame End. + * - \b FrameStart (Display string: 'Frame Start'): Resets with the reception of the Frame Start. + * - \b FrameTrigger (Display string: 'Frame Trigger'): Resets with the reception of the Frame Start Trigger. + * - \b FrameTriggerMissed (Display string: 'Frame Trigger Missed'): Resets with the reception of the missed Frame start trigger. + * - \b Line0 (Display string: 'Line 0'): Resets by the chosen I/O Line. + * - \b Line1 (Display string: 'Line 1'): Resets by the chosen I/O Line. + * - \b Line2 (Display string: 'Line 2'): Resets by the chosen I/O Line. * - \b Line3 (Display string: 'Line 3'): Resets by the chosen I/O Line. * - \b Line4 (Display string: 'Line 4'): Resets by the chosen I/O Line. * - \b Line5 (Display string: 'Line 5'): Resets by the chosen I/O Line. @@ -4525,25 +4593,31 @@ public: * - \b Line13 (Display string: 'Line 13'): Resets by the chosen I/O Line. * - \b Line14 (Display string: 'Line 14'): Resets by the chosen I/O Line. * - \b Line15 (Display string: 'Line 15'): Resets by the chosen I/O Line. - * - \b Counter3End (Display string: 'Counter 3 End'): Resets with the reception of the Counter End. - * - \b Counter4End (Display string: 'Counter 4 End'): Resets with the reception of the Counter End. - * - \b Counter5End (Display string: 'Counter 5 End'): Resets with the reception of the Counter End. - * - \b Counter6End (Display string: 'Counter 6 End'): Resets with the reception of the Counter End. - * - \b Counter7End (Display string: 'Counter 7 End'): Resets with the reception of the Counter End. - * - \b Counter8End (Display string: 'Counter 8 End'): Resets with the reception of the Counter End. - * - \b Counter9End (Display string: 'Counter 9 End'): Resets with the reception of the Counter End. - * - \b Counter10End (Display string: 'Counter 10 End'): Resets with the reception of the Counter End. - * - \b Counter11End (Display string: 'Counter 11 End'): Resets with the reception of the Counter End. - * - \b Counter12End (Display string: 'Counter 12 End'): Resets with the reception of the Counter End. - * - \b Counter13End (Display string: 'Counter 13 End'): Resets with the reception of the Counter End. - * - \b Counter14End (Display string: 'Counter 14 End'): Resets with the reception of the Counter End. - * - \b Counter15End (Display string: 'Counter 15 End'): Resets with the reception of the Counter End. - * - \b Counter16End (Display string: 'Counter 16 End') - * - \b Timer3End (Display string: 'Timer 3 End'): Resets with the reception of the Timer End. - * - \b Timer4End (Display string: 'Timer 4 End'): Resets with the reception of the Timer End. - * - \b Timer5End (Display string: 'Timer 5 End'): Resets with the reception of the Timer End. - * - \b Timer6End (Display string: 'Timer 6 End'): Resets with the reception of the Timer End. - * - \b Timer7End (Display string: 'Timer 7 End'): Resets with the reception of the Timer End. + * - \b LineEnd (Display string: 'Line End'): Resets with the reception of the Line End. + * - \b LineStart (Display string: 'Line Start'): Resets with the reception of the Line Start. + * - \b LineTrigger (Display string: 'Line Trigger'): Resets with the reception of the Line Start Trigger. + * - \b LineTriggerMissed (Display string: 'Line Trigger Missed'): Resets with the reception of the missed Line start trigger. + * - \b LinkTrigger0 (Display string: 'Link Trigger 0'): Resets on the reception of the chosen Link Trigger (received from the transport layer). + * - \b LinkTrigger1 (Display string: 'Link Trigger 1'): Resets on the reception of the chosen Link Trigger (received from the transport layer). + * - \b LinkTrigger2 (Display string: 'Link Trigger 2'): Resets on the reception of the chosen Link Trigger (received from the transport layer). + * - \b LogicBlock0 (Display string: 'Logic Block 0'): Resets with the reception of the LogicBlock output signal. + * - \b LogicBlock1 (Display string: 'Logic Block 1'): Resets with the reception of the LogicBlock output signal. + * - \b LogicBlock2 (Display string: 'Logic Block 2'): Resets with the reception of the LogicBlock output signal. + * - \b Off (Display string: 'Off'): Disable the Counter Reset trigger. + * - \b SoftwareSignal0 (Display string: 'Software Signal 0'): Resets on the reception of the Software Signal. + * - \b SoftwareSignal1 (Display string: 'Software Signal 1'): Resets on the reception of the Software Signal. + * - \b SoftwareSignal2 (Display string: 'Software Signal 2'): Resets on the reception of the Software Signal. + * - \b Timer0End (Display string: 'Timer 0 End'): Resets with the reception of the Timer End. + * - \b Timer0Start (Display string: 'Timer 0 Start'): Resets with the reception of the Timer Start. + * - \b Timer1End (Display string: 'Timer 1 End'): Resets with the reception of the Timer End. + * - \b Timer1Start (Display string: 'Timer 1 Start'): Resets with the reception of the Timer Start. + * - \b Timer2End (Display string: 'Timer 2 End'): Resets with the reception of the Timer End. + * - \b Timer2Start (Display string: 'Timer 2 Start'): Resets with the reception of the Timer Start. + * - \b Timer3End (Display string: 'Timer 3 End'): Resets with the reception of the Timer End. + * - \b Timer4End (Display string: 'Timer 4 End'): Resets with the reception of the Timer End. + * - \b Timer5End (Display string: 'Timer 5 End'): Resets with the reception of the Timer End. + * - \b Timer6End (Display string: 'Timer 6 End'): Resets with the reception of the Timer End. + * - \b Timer7End (Display string: 'Timer 7 End'): Resets with the reception of the Timer End. * - \b Timer8End (Display string: 'Timer 8 End'): Resets with the reception of the Timer End. * - \b Timer9End (Display string: 'Timer 9 End'): Resets with the reception of the Timer End. * - \b Timer10End (Display string: 'Timer 10 End'): Resets with the reception of the Timer End. @@ -4552,7 +4626,9 @@ public: * - \b Timer13End (Display string: 'Timer 13 End'): Resets with the reception of the Timer End. * - \b Timer14End (Display string: 'Timer 14 End'): Resets with the reception of the Timer End. * - \b Timer15End (Display string: 'Timer 15 End'): Resets with the reception of the Timer End. - * - \b Timer16End (Display string: 'Timer 16 End') + * - \b UserOutput0 (Display string: 'User Output 0'): Resets by the chosen User Output bit. + * - \b UserOutput1 (Display string: 'User Output 1'): Resets by the chosen User Output bit. + * - \b UserOutput2 (Display string: 'User Output 2'): Resets by the chosen User Output bit. * - \b UserOutput3 (Display string: 'User Output 3'): Resets by the chosen User Output bit. * - \b UserOutput4 (Display string: 'User Output 4'): Resets by the chosen User Output bit. * - \b UserOutput5 (Display string: 'User Output 5'): Resets by the chosen User Output bit. @@ -4566,25 +4642,11 @@ public: * - \b UserOutput13 (Display string: 'User Output 13'): Resets by the chosen User Output bit. * - \b UserOutput14 (Display string: 'User Output 14'): Resets by the chosen User Output bit. * - \b UserOutput15 (Display string: 'User Output 15'): Resets by the chosen User Output bit. - * - \b Action3 (Display string: 'Action 3'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). - * - \b Action4 (Display string: 'Action 4'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). - * - \b Action5 (Display string: 'Action 5'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). - * - \b Action6 (Display string: 'Action 6'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). - * - \b Action7 (Display string: 'Action 7'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). - * - \b Action8 (Display string: 'Action 8'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). - * - \b Action9 (Display string: 'Action 9'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). - * - \b Action10 (Display string: 'Action 10'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). - * - \b Action11 (Display string: 'Action 11'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). - * - \b Action12 (Display string: 'Action 12'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). - * - \b Action13 (Display string: 'Action 13'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). - * - \b Action14 (Display string: 'Action 14'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). - * - \b Action15 (Display string: 'Action 15'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). - * - \b Action16 (Display string: 'Action 16') - * - \b mvTemperatureOutOfRange (Display string: 'mv Temperature Out Of Range') * - \b mvLogicGateOR1Output (Display string: 'mv Logic Gate OR 1 Output') * - \b mvLogicGateOR2Output (Display string: 'mv Logic Gate OR 2 Output') * - \b mvLogicGateOR3Output (Display string: 'mv Logic Gate OR 3 Output') * - \b mvLogicGateOR4Output (Display string: 'mv Logic Gate OR 4 Output') + * - \b mvTemperatureOutOfRange (Display string: 'mv Temperature Out Of Range') * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -4645,67 +4707,59 @@ public: * Selects the source to start the Counter. * * The following string values might be valid for this feature: - * - \b Off (Display string: 'Off'): Disables the Counter trigger. + * - \b AcquisitionEnd (Display string: 'Acquisition End'): Starts with the reception of the Acquisition End. + * - \b AcquisitionStart (Display string: 'Acquisition Start'): Starts with the reception of the Acquisition Start. * - \b AcquisitionTrigger (Display string: 'Acquisition Trigger'): Starts with the reception of the Acquisition Trigger. * - \b AcquisitionTriggerMissed (Display string: 'Acquisition Trigger Missed'): Device has missed an Acquisition start trigger. - * - \b AcquisitionStart (Display string: 'Acquisition Start'): Starts with the reception of the Acquisition Start. - * - \b AcquisitionEnd (Display string: 'Acquisition End'): Starts with the reception of the Acquisition End. - * - \b FrameTrigger (Display string: 'Frame Trigger'): Starts with the reception of the Frame Start Trigger. - * - \b FrameTriggerMissed (Display string: 'Frame Trigger Missed'): Device has missed a Frame start trigger. - * - \b FrameStart (Display string: 'Frame Start'): Starts with the reception of the Frame Start. - * - \b FrameEnd (Display string: 'Frame End'): Starts with the reception of the Frame End. - * - \b FrameBurstStart (Display string: 'Frame Burst Start'): Starts with the reception of the Frame Burst Start. - * - \b FrameBurstEnd (Display string: 'Frame Burst End'): Starts with the reception of the Frame Burst End. - * - \b LineTrigger (Display string: 'Line Trigger'): Starts with the reception of the Line Start Trigger. - * - \b LineTriggerMissed (Display string: 'Line Trigger Missed'): Device has missed a Line start trigger. - * - \b LineStart (Display string: 'Line Start'): Starts with the reception of the Line Start. - * - \b LineEnd (Display string: 'Line End'): Starts with the reception of the Line End. - * - \b ExposureStart (Display string: 'Exposure Start'): Starts with the reception of the Exposure Start. - * - \b ExposureEnd (Display string: 'Exposure End'): Starts with the reception of the Exposure End. - * - \b Line0 (Display string: 'Line 0'): Starts when the specified CounterTriggerActivation condition is met on the chosen I/O Line. - * - \b Line1 (Display string: 'Line 1'): Starts when the specified CounterTriggerActivation condition is met on the chosen I/O Line. - * - \b Line2 (Display string: 'Line 2'): Starts when the specified CounterTriggerActivation condition is met on the chosen I/O Line. - * - \b Line\#3\# (Display string: 'Line \#3\#'): Starts when the specified CounterTriggerActivation condition is met on the chosen I/O Line. - * - \b UserOutput0 (Display string: 'User Output 0'): Specifies which User Output bit signal to use as internal source for the trigger. - * - \b UserOutput1 (Display string: 'User Output 1'): Specifies which User Output bit signal to use as internal source for the trigger. - * - \b UserOutput2 (Display string: 'User Output 2'): Specifies which User Output bit signal to use as internal source for the trigger. - * - \b UserOutput\#3\# (Display string: 'User Output \#3\#'): Specifies which User Output bit signal to use as internal source for the trigger. - * - \b Counter0Start (Display string: 'Counter 0 Start'): Starts with the reception of the Counter Start. - * - \b Counter1Start (Display string: 'Counter 1 Start'): Starts with the reception of the Counter Start. - * - \b Counter2Start (Display string: 'Counter 2 Start'): Starts with the reception of the Counter Start. - * - \b Counter\#3\#Start (Display string: 'Counter \#3\# Start'): Starts with the reception of the Counter Start. + * - \b Action0 (Display string: 'Action 0'): Starts with the assertion of the chosen action signal. + * - \b Action1 (Display string: 'Action 1'): Starts with the assertion of the chosen action signal. + * - \b Action2 (Display string: 'Action 2'): Starts with the assertion of the chosen action signal. + * - \b Action3 (Display string: 'Action 3'): Starts with the assertion of the chosen action signal. + * - \b Action4 (Display string: 'Action 4'): Starts with the assertion of the chosen action signal. + * - \b Action5 (Display string: 'Action 5'): Starts with the assertion of the chosen action signal. + * - \b Action6 (Display string: 'Action 6'): Starts with the assertion of the chosen action signal. + * - \b Action7 (Display string: 'Action 7'): Starts with the assertion of the chosen action signal. + * - \b Action8 (Display string: 'Action 8'): Starts with the assertion of the chosen action signal. + * - \b Action9 (Display string: 'Action 9'): Starts with the assertion of the chosen action signal. + * - \b Action10 (Display string: 'Action 10'): Starts with the assertion of the chosen action signal. + * - \b Action11 (Display string: 'Action 11'): Starts with the assertion of the chosen action signal. + * - \b Action12 (Display string: 'Action 12'): Starts with the assertion of the chosen action signal. + * - \b Action13 (Display string: 'Action 13'): Starts with the assertion of the chosen action signal. + * - \b Action14 (Display string: 'Action 14'): Starts with the assertion of the chosen action signal. + * - \b Action15 (Display string: 'Action 15'): Starts with the assertion of the chosen action signal. * - \b Counter0End (Display string: 'Counter 0 End'): Starts with the reception of the Counter End. + * - \b Counter0Start (Display string: 'Counter 0 Start'): Starts with the reception of the Counter Start. * - \b Counter1End (Display string: 'Counter 1 End'): Starts with the reception of the Counter End. + * - \b Counter1Start (Display string: 'Counter 1 Start'): Starts with the reception of the Counter Start. * - \b Counter2End (Display string: 'Counter 2 End'): Starts with the reception of the Counter End. - * - \b Counter\#3\#End (Display string: 'Counter \#3\# End'): Starts with the reception of the Counter End. - * - \b Timer0Start (Display string: 'Timer 0 Start'): Starts with the reception of the Timer Start. - * - \b Timer1Start (Display string: 'Timer 1 Start'): Starts with the reception of the Timer Start. - * - \b Timer2Start (Display string: 'Timer 2 Start'): Starts with the reception of the Timer Start. - * - \b Timer\#3\#Start (Display string: 'Timer \#3\# Start'): Starts with the reception of the Timer Start. - * - \b Timer0End (Display string: 'Timer 0 End'): Starts with the reception of the Timer End. - * - \b Timer1End (Display string: 'Timer 1 End'): Starts with the reception of the Timer End. - * - \b Timer2End (Display string: 'Timer 2 End'): Starts with the reception of the Timer End. - * - \b Timer\#3\#End (Display string: 'Timer \#3\# End'): Starts with the reception of the Timer End. + * - \b Counter2Start (Display string: 'Counter 2 Start'): Starts with the reception of the Counter Start. + * - \b Counter3End (Display string: 'Counter 3 End'): Starts with the reception of the Counter End. + * - \b Counter4End (Display string: 'Counter 4 End'): Starts with the reception of the Counter End. + * - \b Counter5End (Display string: 'Counter 5 End'): Starts with the reception of the Counter End. + * - \b Counter6End (Display string: 'Counter 6 End'): Starts with the reception of the Counter End. + * - \b Counter7End (Display string: 'Counter 7 End'): Starts with the reception of the Counter End. + * - \b Counter8End (Display string: 'Counter 8 End'): Starts with the reception of the Counter End. + * - \b Counter9End (Display string: 'Counter 9 End'): Starts with the reception of the Counter End. + * - \b Counter10End (Display string: 'Counter 10 End'): Starts with the reception of the Counter End. + * - \b Counter11End (Display string: 'Counter 11 End'): Starts with the reception of the Counter End. + * - \b Counter12End (Display string: 'Counter 12 End'): Starts with the reception of the Counter End. + * - \b Counter13End (Display string: 'Counter 13 End'): Starts with the reception of the Counter End. + * - \b Counter14End (Display string: 'Counter 14 End'): Starts with the reception of the Counter End. + * - \b Counter15End (Display string: 'Counter 15 End'): Starts with the reception of the Counter End. * - \b Encoder0 (Display string: 'Encoder 0'): Starts with the reception of the Encoder output signal. * - \b Encoder1 (Display string: 'Encoder 1'): Starts with the reception of the Encoder output signal. * - \b Encoder2 (Display string: 'Encoder 2'): Starts with the reception of the Encoder output signal. - * - \b Encoder\#3\# (Display string: 'Encoder \#3\#'): Starts with the reception of the Encoder output signal. - * - \b LogicBlock0 (Display string: 'Logic Block 0'): Starts with the reception of the Logic Block output signal. - * - \b LogicBlock1 (Display string: 'Logic Block 1'): Starts with the reception of the Logic Block output signal. - * - \b LogicBlock2 (Display string: 'Logic Block 2'): Starts with the reception of the Logic Block output signal. - * - \b LogicBlock\#3\# (Display string: 'Logic Block \#3\#'): Starts with the reception of the Logic Block output signal. - * - \b SoftwareSignal0 (Display string: 'Software Signal 0'): Starts on the reception of the Software Signal. - * - \b SoftwareSignal1 (Display string: 'Software Signal 1'): Starts on the reception of the Software Signal. - * - \b SoftwareSignal2 (Display string: 'Software Signal 2'): Starts on the reception of the Software Signal. - * - \b SoftwareSignal\#3\# (Display string: 'Software Signal \#3\#'): Starts on the reception of the Software Signal. - * - \b Action0 (Display string: 'Action 0'): Starts with the assertion of the chosen action signal. - * - \b Action1 (Display string: 'Action 1'): Starts with the assertion of the chosen action signal. - * - \b Action2 (Display string: 'Action 2'): Starts with the assertion of the chosen action signal. - * - \b Action\#3\# (Display string: 'Action \#3\#'): Starts with the assertion of the chosen action signal. - * - \b LinkTrigger0 (Display string: 'Link Trigger 0'): Starts with the reception of the chosen Link Trigger signal. - * - \b LinkTrigger1 (Display string: 'Link Trigger 1'): Starts with the reception of the chosen Link Trigger signal. - * - \b LinkTrigger2 (Display string: 'Link Trigger 2'): Starts with the reception of the chosen Link Trigger signal. - * - \b LinkTrigger\#3\# (Display string: 'Link Trigger \#3\#'): Starts with the reception of the chosen Link Trigger signal. + * - \b ExposureEnd (Display string: 'Exposure End'): Starts with the reception of the Exposure End. + * - \b ExposureStart (Display string: 'Exposure Start'): Starts with the reception of the Exposure Start. + * - \b FrameBurstEnd (Display string: 'Frame Burst End'): Starts with the reception of the Frame Burst End. + * - \b FrameBurstStart (Display string: 'Frame Burst Start'): Starts with the reception of the Frame Burst Start. + * - \b FrameEnd (Display string: 'Frame End'): Starts with the reception of the Frame End. + * - \b FrameStart (Display string: 'Frame Start'): Starts with the reception of the Frame Start. + * - \b FrameTrigger (Display string: 'Frame Trigger'): Starts with the reception of the Frame Start Trigger. + * - \b FrameTriggerMissed (Display string: 'Frame Trigger Missed'): Device has missed a Frame start trigger. + * - \b Line0 (Display string: 'Line 0'): Starts when the specified CounterTriggerActivation condition is met on the chosen I/O Line. + * - \b Line1 (Display string: 'Line 1'): Starts when the specified CounterTriggerActivation condition is met on the chosen I/O Line. + * - \b Line2 (Display string: 'Line 2'): Starts when the specified CounterTriggerActivation condition is met on the chosen I/O Line. * - \b Line3 (Display string: 'Line 3'): Starts when the specified CounterTriggerActivation condition is met on the chosen I/O Line. * - \b Line4 (Display string: 'Line 4'): Starts when the specified CounterTriggerActivation condition is met on the chosen I/O Line. * - \b Line5 (Display string: 'Line 5'): Starts when the specified CounterTriggerActivation condition is met on the chosen I/O Line. @@ -4719,33 +4773,26 @@ public: * - \b Line13 (Display string: 'Line 13'): Starts when the specified CounterTriggerActivation condition is met on the chosen I/O Line. * - \b Line14 (Display string: 'Line 14'): Starts when the specified CounterTriggerActivation condition is met on the chosen I/O Line. * - \b Line15 (Display string: 'Line 15'): Starts when the specified CounterTriggerActivation condition is met on the chosen I/O Line. - * - \b UserOutput3 (Display string: 'User Output 3'): Specifies which User Output bit signal to use as internal source for the trigger. - * - \b UserOutput4 (Display string: 'User Output 4'): Specifies which User Output bit signal to use as internal source for the trigger. - * - \b UserOutput5 (Display string: 'User Output 5'): Specifies which User Output bit signal to use as internal source for the trigger. - * - \b UserOutput6 (Display string: 'User Output 6'): Specifies which User Output bit signal to use as internal source for the trigger. - * - \b UserOutput7 (Display string: 'User Output 7'): Specifies which User Output bit signal to use as internal source for the trigger. - * - \b UserOutput8 (Display string: 'User Output 8'): Specifies which User Output bit signal to use as internal source for the trigger. - * - \b UserOutput9 (Display string: 'User Output 9'): Specifies which User Output bit signal to use as internal source for the trigger. - * - \b UserOutput10 (Display string: 'User Output 10'): Specifies which User Output bit signal to use as internal source for the trigger. - * - \b UserOutput11 (Display string: 'User Output 11'): Specifies which User Output bit signal to use as internal source for the trigger. - * - \b UserOutput12 (Display string: 'User Output 12'): Specifies which User Output bit signal to use as internal source for the trigger. - * - \b UserOutput13 (Display string: 'User Output 13'): Specifies which User Output bit signal to use as internal source for the trigger. - * - \b UserOutput14 (Display string: 'User Output 14'): Specifies which User Output bit signal to use as internal source for the trigger. - * - \b UserOutput15 (Display string: 'User Output 15'): Specifies which User Output bit signal to use as internal source for the trigger. - * - \b Counter3End (Display string: 'Counter 3 End'): Starts with the reception of the Counter End. - * - \b Counter4End (Display string: 'Counter 4 End'): Starts with the reception of the Counter End. - * - \b Counter5End (Display string: 'Counter 5 End'): Starts with the reception of the Counter End. - * - \b Counter6End (Display string: 'Counter 6 End'): Starts with the reception of the Counter End. - * - \b Counter7End (Display string: 'Counter 7 End'): Starts with the reception of the Counter End. - * - \b Counter8End (Display string: 'Counter 8 End'): Starts with the reception of the Counter End. - * - \b Counter9End (Display string: 'Counter 9 End'): Starts with the reception of the Counter End. - * - \b Counter10End (Display string: 'Counter 10 End'): Starts with the reception of the Counter End. - * - \b Counter11End (Display string: 'Counter 11 End'): Starts with the reception of the Counter End. - * - \b Counter12End (Display string: 'Counter 12 End'): Starts with the reception of the Counter End. - * - \b Counter13End (Display string: 'Counter 13 End'): Starts with the reception of the Counter End. - * - \b Counter14End (Display string: 'Counter 14 End'): Starts with the reception of the Counter End. - * - \b Counter15End (Display string: 'Counter 15 End'): Starts with the reception of the Counter End. - * - \b Counter16End (Display string: 'Counter 16 End') + * - \b LineEnd (Display string: 'Line End'): Starts with the reception of the Line End. + * - \b LineStart (Display string: 'Line Start'): Starts with the reception of the Line Start. + * - \b LineTrigger (Display string: 'Line Trigger'): Starts with the reception of the Line Start Trigger. + * - \b LineTriggerMissed (Display string: 'Line Trigger Missed'): Device has missed a Line start trigger. + * - \b LinkTrigger0 (Display string: 'Link Trigger 0'): Starts with the reception of the chosen Link Trigger signal. + * - \b LinkTrigger1 (Display string: 'Link Trigger 1'): Starts with the reception of the chosen Link Trigger signal. + * - \b LinkTrigger2 (Display string: 'Link Trigger 2'): Starts with the reception of the chosen Link Trigger signal. + * - \b LogicBlock0 (Display string: 'Logic Block 0'): Starts with the reception of the Logic Block output signal. + * - \b LogicBlock1 (Display string: 'Logic Block 1'): Starts with the reception of the Logic Block output signal. + * - \b LogicBlock2 (Display string: 'Logic Block 2'): Starts with the reception of the Logic Block output signal. + * - \b Off (Display string: 'Off'): Disables the Counter trigger. + * - \b SoftwareSignal0 (Display string: 'Software Signal 0'): Starts on the reception of the Software Signal. + * - \b SoftwareSignal1 (Display string: 'Software Signal 1'): Starts on the reception of the Software Signal. + * - \b SoftwareSignal2 (Display string: 'Software Signal 2'): Starts on the reception of the Software Signal. + * - \b Timer0End (Display string: 'Timer 0 End'): Starts with the reception of the Timer End. + * - \b Timer0Start (Display string: 'Timer 0 Start'): Starts with the reception of the Timer Start. + * - \b Timer1End (Display string: 'Timer 1 End'): Starts with the reception of the Timer End. + * - \b Timer1Start (Display string: 'Timer 1 Start'): Starts with the reception of the Timer Start. + * - \b Timer2End (Display string: 'Timer 2 End'): Starts with the reception of the Timer End. + * - \b Timer2Start (Display string: 'Timer 2 Start'): Starts with the reception of the Timer Start. * - \b Timer3End (Display string: 'Timer 3 End'): Starts with the reception of the Timer End. * - \b Timer4End (Display string: 'Timer 4 End'): Starts with the reception of the Timer End. * - \b Timer5End (Display string: 'Timer 5 End'): Starts with the reception of the Timer End. @@ -4759,21 +4806,22 @@ public: * - \b Timer13End (Display string: 'Timer 13 End'): Starts with the reception of the Timer End. * - \b Timer14End (Display string: 'Timer 14 End'): Starts with the reception of the Timer End. * - \b Timer15End (Display string: 'Timer 15 End'): Starts with the reception of the Timer End. - * - \b Timer16End (Display string: 'Timer 16 End') - * - \b Action3 (Display string: 'Action 3'): Starts with the assertion of the chosen action signal. - * - \b Action4 (Display string: 'Action 4'): Starts with the assertion of the chosen action signal. - * - \b Action5 (Display string: 'Action 5'): Starts with the assertion of the chosen action signal. - * - \b Action6 (Display string: 'Action 6'): Starts with the assertion of the chosen action signal. - * - \b Action7 (Display string: 'Action 7'): Starts with the assertion of the chosen action signal. - * - \b Action8 (Display string: 'Action 8'): Starts with the assertion of the chosen action signal. - * - \b Action9 (Display string: 'Action 9'): Starts with the assertion of the chosen action signal. - * - \b Action10 (Display string: 'Action 10'): Starts with the assertion of the chosen action signal. - * - \b Action11 (Display string: 'Action 11'): Starts with the assertion of the chosen action signal. - * - \b Action12 (Display string: 'Action 12'): Starts with the assertion of the chosen action signal. - * - \b Action13 (Display string: 'Action 13'): Starts with the assertion of the chosen action signal. - * - \b Action14 (Display string: 'Action 14'): Starts with the assertion of the chosen action signal. - * - \b Action15 (Display string: 'Action 15'): Starts with the assertion of the chosen action signal. - * - \b Action16 (Display string: 'Action 16') + * - \b UserOutput0 (Display string: 'User Output 0'): Specifies which User Output bit signal to use as internal source for the trigger. + * - \b UserOutput1 (Display string: 'User Output 1'): Specifies which User Output bit signal to use as internal source for the trigger. + * - \b UserOutput2 (Display string: 'User Output 2'): Specifies which User Output bit signal to use as internal source for the trigger. + * - \b UserOutput3 (Display string: 'User Output 3'): Specifies which User Output bit signal to use as internal source for the trigger. + * - \b UserOutput4 (Display string: 'User Output 4'): Specifies which User Output bit signal to use as internal source for the trigger. + * - \b UserOutput5 (Display string: 'User Output 5'): Specifies which User Output bit signal to use as internal source for the trigger. + * - \b UserOutput6 (Display string: 'User Output 6'): Specifies which User Output bit signal to use as internal source for the trigger. + * - \b UserOutput7 (Display string: 'User Output 7'): Specifies which User Output bit signal to use as internal source for the trigger. + * - \b UserOutput8 (Display string: 'User Output 8'): Specifies which User Output bit signal to use as internal source for the trigger. + * - \b UserOutput9 (Display string: 'User Output 9'): Specifies which User Output bit signal to use as internal source for the trigger. + * - \b UserOutput10 (Display string: 'User Output 10'): Specifies which User Output bit signal to use as internal source for the trigger. + * - \b UserOutput11 (Display string: 'User Output 11'): Specifies which User Output bit signal to use as internal source for the trigger. + * - \b UserOutput12 (Display string: 'User Output 12'): Specifies which User Output bit signal to use as internal source for the trigger. + * - \b UserOutput13 (Display string: 'User Output 13'): Specifies which User Output bit signal to use as internal source for the trigger. + * - \b UserOutput14 (Display string: 'User Output 14'): Specifies which User Output bit signal to use as internal source for the trigger. + * - \b UserOutput15 (Display string: 'User Output 15'): Specifies which User Output bit signal to use as internal source for the trigger. * - \b mvLogicGateOR1Output (Display string: 'mv Logic Gate OR 1 Output') * - \b mvLogicGateOR2Output (Display string: 'mv Logic Gate OR 2 Output') * - \b mvLogicGateOR3Output (Display string: 'mv Logic Gate OR 3 Output') @@ -4807,7 +4855,6 @@ public: * - \b Timer0 (Display string: 'Timer 0'): Selects the Timer 0. * - \b Timer1 (Display string: 'Timer 1'): Selects the Timer 1. * - \b Timer2 (Display string: 'Timer 2'): Selects the Timer 2. - * - \b Timer\#3\# (Display string: 'Timer \#3\#'): Selects the Timer \#3\#. * - \b Timer3 (Display string: 'Timer 3'): Selects the Timer 3. * - \b Timer4 (Display string: 'Timer 4'): Selects the Timer 4. * - \b Timer5 (Display string: 'Timer 5'): Selects the Timer 5. @@ -4821,7 +4868,6 @@ public: * - \b Timer13 (Display string: 'Timer 13'): Selects the Timer 13. * - \b Timer14 (Display string: 'Timer 14'): Selects the Timer 14. * - \b Timer15 (Display string: 'Timer 15'): Selects the Timer 15. - * - \b Timer16 (Display string: 'Timer 16') * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -4866,85 +4912,32 @@ public: * Selects the source of the trigger to start the Timer. * * The following string values might be valid for this feature: - * - \b Off (Display string: 'Off'): Disables the Timer trigger. + * - \b AcquisitionEnd (Display string: 'Acquisition End'): Starts with the reception of the Acquisition End. + * - \b AcquisitionStart (Display string: 'Acquisition Start'): Starts with the reception of the Acquisition Start. * - \b AcquisitionTrigger (Display string: 'Acquisition Trigger'): Starts with the reception of the Acquisition Trigger. * - \b AcquisitionTriggerMissed (Display string: 'Acquisition Trigger Missed'): Starts with the reception of a missed Acquisition Trigger. - * - \b AcquisitionStart (Display string: 'Acquisition Start'): Starts with the reception of the Acquisition Start. - * - \b AcquisitionEnd (Display string: 'Acquisition End'): Starts with the reception of the Acquisition End. - * - \b FrameTrigger (Display string: 'Frame Trigger'): Starts with the reception of the Frame Start Trigger. - * - \b FrameTriggerMissed (Display string: 'Frame Trigger Missed'): Starts with the reception of a missed Frame Trigger. - * - \b FrameStart (Display string: 'Frame Start'): Starts with the reception of the Frame Start. - * - \b FrameEnd (Display string: 'Frame End'): Starts with the reception of the Frame End. - * - \b FrameBurstStart (Display string: 'Frame Burst Start'): Starts with the reception of the Frame Burst Start. - * - \b FrameBurstEnd (Display string: 'Frame Burst End'): Starts with the reception of the Frame Burst End. - * - \b LineTrigger (Display string: 'Line Trigger'): Starts with the reception of the Line Start Trigger. - * - \b LineTriggerMissed (Display string: 'Line Trigger Missed'): Starts with the reception of a missed Line Trigger. - * - \b LineStart (Display string: 'Line Start'): Starts with the reception of the Line Start. - * - \b LineEnd (Display string: 'Line End'): Starts with the reception of the Line End. - * - \b ExposureStart (Display string: 'Exposure Start'): Starts with the reception of the Exposure Start. - * - \b ExposureEnd (Display string: 'Exposure End'): Starts with the reception of the Exposure End. - * - \b Line0 (Display string: 'Line 0'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. - * - \b Line1 (Display string: 'Line 1'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. - * - \b Line2 (Display string: 'Line 2'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. - * - \b Line\#3\# (Display string: 'Line \#3\#'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. - * - \b UserOutput0 (Display string: 'User Output 0'): Specifies which User Output bit signal to use as internal source for the trigger. - * - \b UserOutput1 (Display string: 'User Output 1'): Specifies which User Output bit signal to use as internal source for the trigger. - * - \b UserOutput2 (Display string: 'User Output 2'): Specifies which User Output bit signal to use as internal source for the trigger. - * - \b UserOutput\#3\# (Display string: 'User Output \#3\#'): Specifies which User Output bit signal to use as internal source for the trigger. - * - \b Counter0Start (Display string: 'Counter 0 Start'): Starts with the reception of the Counter Start. - * - \b Counter1Start (Display string: 'Counter 1 Start'): Starts with the reception of the Counter Start. - * - \b Counter2Start (Display string: 'Counter 2 Start'): Starts with the reception of the Counter Start. - * - \b Counter\#3\#Start (Display string: 'Counter \#3\# Start'): Starts with the reception of the Counter Start. - * - \b Counter0End (Display string: 'Counter 0 End'): Starts with the reception of the Counter End. - * - \b Counter1End (Display string: 'Counter 1 End'): Starts with the reception of the Counter End. - * - \b Counter2End (Display string: 'Counter 2 End'): Starts with the reception of the Counter End. - * - \b Counter\#3\#End (Display string: 'Counter \#3\# End'): Starts with the reception of the Counter End. - * - \b Timer0Start (Display string: 'Timer 0 Start'): Starts with the reception of the Timer Start. - * - \b Timer1Start (Display string: 'Timer 1 Start'): Starts with the reception of the Timer Start. - * - \b Timer2Start (Display string: 'Timer 2 Start'): Starts with the reception of the Timer Start. - * - \b Timer\#3\#Start (Display string: 'Timer \#3\# Start'): Starts with the reception of the Timer Start. - * - \b Timer0End (Display string: 'Timer 0 End'): Starts with the reception of the Timer End. Note that a timer can retrigger itself to achieve a free running Timer. - * - \b Timer1End (Display string: 'Timer 1 End'): Starts with the reception of the Timer End. Note that a timer can retrigger itself to achieve a free running Timer. - * - \b Timer2End (Display string: 'Timer 2 End'): Starts with the reception of the Timer End. Note that a timer can retrigger itself to achieve a free running Timer. - * - \b Timer\#3\#End (Display string: 'Timer \#3\# End'): Starts with the reception of the Timer End. Note that a timer can retrigger itself to achieve a free running Timer. - * - \b Encoder0 (Display string: 'Encoder 0'): Starts with the reception of the Encoder output signal. - * - \b Encoder1 (Display string: 'Encoder 1'): Starts with the reception of the Encoder output signal. - * - \b Encoder2 (Display string: 'Encoder 2'): Starts with the reception of the Encoder output signal. - * - \b Encoder\#3\# (Display string: 'Encoder \#3\#'): Starts with the reception of the Encoder output signal. - * - \b LogicBlock0 (Display string: 'Logic Block 0'): Starts with the reception of the Logic Block output signal. - * - \b LogicBlock1 (Display string: 'Logic Block 1'): Starts with the reception of the Logic Block output signal. - * - \b LogicBlock2 (Display string: 'Logic Block 2'): Starts with the reception of the Logic Block output signal. - * - \b LogicBlock\#3\# (Display string: 'Logic Block \#3\#'): Starts with the reception of the Logic Block output signal. - * - \b SoftwareSignal0 (Display string: 'Software Signal 0'): Starts on the reception of the Software Signal. - * - \b SoftwareSignal1 (Display string: 'Software Signal 1'): Starts on the reception of the Software Signal. - * - \b SoftwareSignal2 (Display string: 'Software Signal 2'): Starts on the reception of the Software Signal. - * - \b SoftwareSignal\#3\# (Display string: 'Software Signal \#3\#'): Starts on the reception of the Software Signal. * - \b Action0 (Display string: 'Action 0'): Starts with the assertion of the chosen action signal. * - \b Action1 (Display string: 'Action 1'): Starts with the assertion of the chosen action signal. * - \b Action2 (Display string: 'Action 2'): Starts with the assertion of the chosen action signal. - * - \b Action\#3\# (Display string: 'Action \#3\#'): Starts with the assertion of the chosen action signal. - * - \b LinkTrigger0 (Display string: 'Link Trigger 0'): Starts with the reception of the chosen Link Trigger. - * - \b LinkTrigger1 (Display string: 'Link Trigger 1'): Starts with the reception of the chosen Link Trigger. - * - \b LinkTrigger2 (Display string: 'Link Trigger 2'): Starts with the reception of the chosen Link Trigger. - * - \b LinkTrigger\#3\# (Display string: 'Link Trigger \#3\#'): Starts with the reception of the chosen Link Trigger. - * - \b Line3 (Display string: 'Line 3'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. - * - \b Line4 (Display string: 'Line 4'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. - * - \b Line5 (Display string: 'Line 5'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. - * - \b Line6 (Display string: 'Line 6'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. - * - \b Line7 (Display string: 'Line 7'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. - * - \b Line8 (Display string: 'Line 8'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. - * - \b Line9 (Display string: 'Line 9'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. - * - \b Line10 (Display string: 'Line 10'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. - * - \b Line11 (Display string: 'Line 11'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. - * - \b Line12 (Display string: 'Line 12'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. - * - \b Line13 (Display string: 'Line 13'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. - * - \b Line14 (Display string: 'Line 14'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. - * - \b Line15 (Display string: 'Line 15'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. - * - \b UserOutput3 (Display string: 'User Output 3'): Specifies which User Output bit signal to use as internal source for the trigger. - * - \b UserOutput4 (Display string: 'User Output 4'): Specifies which User Output bit signal to use as internal source for the trigger. - * - \b UserOutput5 (Display string: 'User Output 5'): Specifies which User Output bit signal to use as internal source for the trigger. - * - \b UserOutput6 (Display string: 'User Output 6'): Specifies which User Output bit signal to use as internal source for the trigger. - * - \b UserOutput7 (Display string: 'User Output 7'): Specifies which User Output bit signal to use as internal source for the trigger. + * - \b Action3 (Display string: 'Action 3'): Starts with the assertion of the chosen action signal. + * - \b Action4 (Display string: 'Action 4'): Starts with the assertion of the chosen action signal. + * - \b Action5 (Display string: 'Action 5'): Starts with the assertion of the chosen action signal. + * - \b Action6 (Display string: 'Action 6'): Starts with the assertion of the chosen action signal. + * - \b Action7 (Display string: 'Action 7'): Starts with the assertion of the chosen action signal. + * - \b Action8 (Display string: 'Action 8'): Starts with the assertion of the chosen action signal. + * - \b Action9 (Display string: 'Action 9'): Starts with the assertion of the chosen action signal. + * - \b Action10 (Display string: 'Action 10'): Starts with the assertion of the chosen action signal. + * - \b Action11 (Display string: 'Action 11'): Starts with the assertion of the chosen action signal. + * - \b Action12 (Display string: 'Action 12'): Starts with the assertion of the chosen action signal. + * - \b Action13 (Display string: 'Action 13'): Starts with the assertion of the chosen action signal. + * - \b Action14 (Display string: 'Action 14'): Starts with the assertion of the chosen action signal. + * - \b Action15 (Display string: 'Action 15'): Starts with the assertion of the chosen action signal. + * - \b Counter0End (Display string: 'Counter 0 End'): Starts with the reception of the Counter End. + * - \b Counter0Start (Display string: 'Counter 0 Start'): Starts with the reception of the Counter Start. + * - \b Counter1End (Display string: 'Counter 1 End'): Starts with the reception of the Counter End. + * - \b Counter1Start (Display string: 'Counter 1 Start'): Starts with the reception of the Counter Start. + * - \b Counter2End (Display string: 'Counter 2 End'): Starts with the reception of the Counter End. + * - \b Counter2Start (Display string: 'Counter 2 Start'): Starts with the reception of the Counter Start. * - \b Counter3End (Display string: 'Counter 3 End'): Starts with the reception of the Counter End. * - \b Counter4End (Display string: 'Counter 4 End'): Starts with the reception of the Counter End. * - \b Counter5End (Display string: 'Counter 5 End'): Starts with the reception of the Counter End. @@ -4958,7 +4951,53 @@ public: * - \b Counter13End (Display string: 'Counter 13 End'): Starts with the reception of the Counter End. * - \b Counter14End (Display string: 'Counter 14 End'): Starts with the reception of the Counter End. * - \b Counter15End (Display string: 'Counter 15 End'): Starts with the reception of the Counter End. - * - \b Counter16End (Display string: 'Counter 16 End') + * - \b Encoder0 (Display string: 'Encoder 0'): Starts with the reception of the Encoder output signal. + * - \b Encoder1 (Display string: 'Encoder 1'): Starts with the reception of the Encoder output signal. + * - \b Encoder2 (Display string: 'Encoder 2'): Starts with the reception of the Encoder output signal. + * - \b ExposureEnd (Display string: 'Exposure End'): Starts with the reception of the Exposure End. + * - \b ExposureStart (Display string: 'Exposure Start'): Starts with the reception of the Exposure Start. + * - \b FrameBurstEnd (Display string: 'Frame Burst End'): Starts with the reception of the Frame Burst End. + * - \b FrameBurstStart (Display string: 'Frame Burst Start'): Starts with the reception of the Frame Burst Start. + * - \b FrameEnd (Display string: 'Frame End'): Starts with the reception of the Frame End. + * - \b FrameStart (Display string: 'Frame Start'): Starts with the reception of the Frame Start. + * - \b FrameTrigger (Display string: 'Frame Trigger'): Starts with the reception of the Frame Start Trigger. + * - \b FrameTriggerMissed (Display string: 'Frame Trigger Missed'): Starts with the reception of a missed Frame Trigger. + * - \b Line0 (Display string: 'Line 0'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. + * - \b Line1 (Display string: 'Line 1'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. + * - \b Line2 (Display string: 'Line 2'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. + * - \b Line3 (Display string: 'Line 3'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. + * - \b Line4 (Display string: 'Line 4'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. + * - \b Line5 (Display string: 'Line 5'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. + * - \b Line6 (Display string: 'Line 6'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. + * - \b Line7 (Display string: 'Line 7'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. + * - \b Line8 (Display string: 'Line 8'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. + * - \b Line9 (Display string: 'Line 9'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. + * - \b Line10 (Display string: 'Line 10'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. + * - \b Line11 (Display string: 'Line 11'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. + * - \b Line12 (Display string: 'Line 12'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. + * - \b Line13 (Display string: 'Line 13'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. + * - \b Line14 (Display string: 'Line 14'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. + * - \b Line15 (Display string: 'Line 15'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. + * - \b LineEnd (Display string: 'Line End'): Starts with the reception of the Line End. + * - \b LineStart (Display string: 'Line Start'): Starts with the reception of the Line Start. + * - \b LineTrigger (Display string: 'Line Trigger'): Starts with the reception of the Line Start Trigger. + * - \b LineTriggerMissed (Display string: 'Line Trigger Missed'): Starts with the reception of a missed Line Trigger. + * - \b LinkTrigger0 (Display string: 'Link Trigger 0'): Starts with the reception of the chosen Link Trigger. + * - \b LinkTrigger1 (Display string: 'Link Trigger 1'): Starts with the reception of the chosen Link Trigger. + * - \b LinkTrigger2 (Display string: 'Link Trigger 2'): Starts with the reception of the chosen Link Trigger. + * - \b LogicBlock0 (Display string: 'Logic Block 0'): Starts with the reception of the Logic Block output signal. + * - \b LogicBlock1 (Display string: 'Logic Block 1'): Starts with the reception of the Logic Block output signal. + * - \b LogicBlock2 (Display string: 'Logic Block 2'): Starts with the reception of the Logic Block output signal. + * - \b Off (Display string: 'Off'): Disables the Timer trigger. + * - \b SoftwareSignal0 (Display string: 'Software Signal 0'): Starts on the reception of the Software Signal. + * - \b SoftwareSignal1 (Display string: 'Software Signal 1'): Starts on the reception of the Software Signal. + * - \b SoftwareSignal2 (Display string: 'Software Signal 2'): Starts on the reception of the Software Signal. + * - \b Timer0End (Display string: 'Timer 0 End'): Starts with the reception of the Timer End. Note that a timer can retrigger itself to achieve a free running Timer. + * - \b Timer0Start (Display string: 'Timer 0 Start'): Starts with the reception of the Timer Start. + * - \b Timer1End (Display string: 'Timer 1 End'): Starts with the reception of the Timer End. Note that a timer can retrigger itself to achieve a free running Timer. + * - \b Timer1Start (Display string: 'Timer 1 Start'): Starts with the reception of the Timer Start. + * - \b Timer2End (Display string: 'Timer 2 End'): Starts with the reception of the Timer End. Note that a timer can retrigger itself to achieve a free running Timer. + * - \b Timer2Start (Display string: 'Timer 2 Start'): Starts with the reception of the Timer Start. * - \b Timer3End (Display string: 'Timer 3 End'): Starts with the reception of the Timer End. Note that a timer can retrigger itself to achieve a free running Timer. * - \b Timer4End (Display string: 'Timer 4 End'): Starts with the reception of the Timer End. Note that a timer can retrigger itself to achieve a free running Timer. * - \b Timer5End (Display string: 'Timer 5 End'): Starts with the reception of the Timer End. Note that a timer can retrigger itself to achieve a free running Timer. @@ -4972,21 +5011,14 @@ public: * - \b Timer13End (Display string: 'Timer 13 End'): Starts with the reception of the Timer End. Note that a timer can retrigger itself to achieve a free running Timer. * - \b Timer14End (Display string: 'Timer 14 End'): Starts with the reception of the Timer End. Note that a timer can retrigger itself to achieve a free running Timer. * - \b Timer15End (Display string: 'Timer 15 End'): Starts with the reception of the Timer End. Note that a timer can retrigger itself to achieve a free running Timer. - * - \b Timer16End (Display string: 'Timer 16 End') - * - \b Action3 (Display string: 'Action 3'): Starts with the assertion of the chosen action signal. - * - \b Action4 (Display string: 'Action 4'): Starts with the assertion of the chosen action signal. - * - \b Action5 (Display string: 'Action 5'): Starts with the assertion of the chosen action signal. - * - \b Action6 (Display string: 'Action 6'): Starts with the assertion of the chosen action signal. - * - \b Action7 (Display string: 'Action 7'): Starts with the assertion of the chosen action signal. - * - \b Action8 (Display string: 'Action 8'): Starts with the assertion of the chosen action signal. - * - \b Action9 (Display string: 'Action 9'): Starts with the assertion of the chosen action signal. - * - \b Action10 (Display string: 'Action 10'): Starts with the assertion of the chosen action signal. - * - \b Action11 (Display string: 'Action 11'): Starts with the assertion of the chosen action signal. - * - \b Action12 (Display string: 'Action 12'): Starts with the assertion of the chosen action signal. - * - \b Action13 (Display string: 'Action 13'): Starts with the assertion of the chosen action signal. - * - \b Action14 (Display string: 'Action 14'): Starts with the assertion of the chosen action signal. - * - \b Action15 (Display string: 'Action 15'): Starts with the assertion of the chosen action signal. - * - \b Action16 (Display string: 'Action 16') + * - \b UserOutput0 (Display string: 'User Output 0'): Specifies which User Output bit signal to use as internal source for the trigger. + * - \b UserOutput1 (Display string: 'User Output 1'): Specifies which User Output bit signal to use as internal source for the trigger. + * - \b UserOutput2 (Display string: 'User Output 2'): Specifies which User Output bit signal to use as internal source for the trigger. + * - \b UserOutput3 (Display string: 'User Output 3'): Specifies which User Output bit signal to use as internal source for the trigger. + * - \b UserOutput4 (Display string: 'User Output 4'): Specifies which User Output bit signal to use as internal source for the trigger. + * - \b UserOutput5 (Display string: 'User Output 5'): Specifies which User Output bit signal to use as internal source for the trigger. + * - \b UserOutput6 (Display string: 'User Output 6'): Specifies which User Output bit signal to use as internal source for the trigger. + * - \b UserOutput7 (Display string: 'User Output 7'): Specifies which User Output bit signal to use as internal source for the trigger. * - \b mvLogicGateOR1Output (Display string: 'mv Logic Gate OR 1 Output') * - \b mvLogicGateOR2Output (Display string: 'mv Logic Gate OR 2 Output') * - \b mvLogicGateOR3Output (Display string: 'mv Logic Gate OR 3 Output') @@ -5085,7 +5117,6 @@ public: * - \b Encoder0 (Display string: 'Encoder 0'): Selects Encoder 0. * - \b Encoder1 (Display string: 'Encoder 1'): Selects Encoder 1. * - \b Encoder2 (Display string: 'Encoder 2'): Selects Encoder 2. - * - \b Encoder\#3\# (Display string: 'Encoder \#3\#'): Selects Encoder \#3\#. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -5096,11 +5127,10 @@ public: * Selects the signal which will be the source of the A input of the Encoder. * * The following string values might be valid for this feature: - * - \b Off (Display string: 'Off'): Counter is stopped. * - \b Line0 (Display string: 'Line 0'): Encoder Forward input is taken from the chosen I/O Line. * - \b Line1 (Display string: 'Line 1'): Encoder Forward input is taken from the chosen I/O Line. * - \b Line2 (Display string: 'Line 2'): Encoder Forward input is taken from the chosen I/O Line. - * - \b Line\#3\# (Display string: 'Line \#3\#'): Encoder Forward input is taken from the chosen I/O Line. + * - \b Off (Display string: 'Off'): Counter is stopped. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -5111,11 +5141,10 @@ public: * Selects the signal which will be the source of the B input of the Encoder. * * The following string values might be valid for this feature: - * - \b Off (Display string: 'Off'): Counter is stopped. * - \b Line0 (Display string: 'Line 0'): Encoder Reverse input is taken from the chosen I/O Line. * - \b Line1 (Display string: 'Line 1'): Encoder Reverse input is taken from the chosen I/O Line. * - \b Line2 (Display string: 'Line 2'): Encoder Reverse input is taken from the chosen I/O Line. - * - \b Line\#3\# (Display string: 'Line \#3\#'): Encoder Reverse input is taken from the chosen I/O Line. + * - \b Off (Display string: 'Off'): Counter is stopped. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -5186,57 +5215,47 @@ public: * Selects the signals that will be the source to reset the Encoder. * * The following string values might be valid for this feature: - * - \b Off (Display string: 'Off'): Disable the Encoder Reset trigger. + * - \b AcquisitionEnd (Display string: 'Acquisition End'): Resets with the reception of the Acquisition End. + * - \b AcquisitionStart (Display string: 'Acquisition Start'): Resets with the reception of the Acquisition Start. * - \b AcquisitionTrigger (Display string: 'Acquisition Trigger'): Resets with the reception of the Acquisition Trigger. * - \b AcquisitionTriggerMissed (Display string: 'Acquisition Trigger Missed'): Resets with the reception of a missed Acquisition Trigger. - * - \b AcquisitionStart (Display string: 'Acquisition Start'): Resets with the reception of the Acquisition Start. - * - \b AcquisitionEnd (Display string: 'Acquisition End'): Resets with the reception of the Acquisition End. + * - \b Action0 (Display string: 'Action 0'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). + * - \b Action1 (Display string: 'Action 1'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). + * - \b Action2 (Display string: 'Action 2'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). + * - \b Counter0End (Display string: 'Counter 0 End'): Resets with the reception of the Counter End. + * - \b Counter0Start (Display string: 'Counter 0 Start'): Resets with the reception of the Counter Start. + * - \b Counter1End (Display string: 'Counter 1 End'): Resets with the reception of the Counter End. + * - \b Counter1Start (Display string: 'Counter 1 Start'): Resets with the reception of the Counter Start. + * - \b Counter2End (Display string: 'Counter 2 End'): Resets with the reception of the Counter End. + * - \b Counter2Start (Display string: 'Counter 2 Start'): Resets with the reception of the Counter Start. + * - \b ExposureEnd (Display string: 'Exposure End'): Resets with the reception of the Exposure End. + * - \b ExposureStart (Display string: 'Exposure Start'): Resets with the reception of the Exposure Start. + * - \b FrameEnd (Display string: 'Frame End'): Resets with the reception of the Frame End. + * - \b FrameStart (Display string: 'Frame Start'): Resets with the reception of the Frame Start. * - \b FrameTrigger (Display string: 'Frame Trigger'): Resets with the reception of the Frame Start Trigger. * - \b FrameTriggerMissed (Display string: 'Frame Trigger Missed'): Resets with the reception of a missed Frame Trigger. - * - \b FrameStart (Display string: 'Frame Start'): Resets with the reception of the Frame Start. - * - \b FrameEnd (Display string: 'Frame End'): Resets with the reception of the Frame End. - * - \b ExposureStart (Display string: 'Exposure Start'): Resets with the reception of the Exposure Start. - * - \b ExposureEnd (Display string: 'Exposure End'): Resets with the reception of the Exposure End. * - \b Line0 (Display string: 'Line 0'): Resets by the chosen I/O Line. * - \b Line1 (Display string: 'Line 1'): Resets by the chosen I/O Line. * - \b Line2 (Display string: 'Line 2'): Resets by the chosen I/O Line. - * - \b Line\#3\# (Display string: 'Line \#3\#'): Resets by the chosen I/O Line. - * - \b UserOutput0 (Display string: 'User Output 0'): Resets by the chosen User Output bit. - * - \b UserOutput1 (Display string: 'User Output 1'): Resets by the chosen User Output bit. - * - \b UserOutput2 (Display string: 'User Output 2'): Resets by the chosen User Output bit. - * - \b UserOutput\#3\# (Display string: 'User Output \#3\#'): Resets by the chosen User Output bit. - * - \b Counter0Start (Display string: 'Counter 0 Start'): Resets with the reception of the Counter Start. - * - \b Counter1Start (Display string: 'Counter 1 Start'): Resets with the reception of the Counter Start. - * - \b Counter2Start (Display string: 'Counter 2 Start'): Resets with the reception of the Counter Start. - * - \b Counter\#3\#Start (Display string: 'Counter \#3\# Start'): Resets with the reception of the Counter Start. - * - \b Counter0End (Display string: 'Counter 0 End'): Resets with the reception of the Counter End. - * - \b Counter1End (Display string: 'Counter 1 End'): Resets with the reception of the Counter End. - * - \b Counter2End (Display string: 'Counter 2 End'): Resets with the reception of the Counter End. - * - \b Counter\#3\#End (Display string: 'Counter \#3\# End'): Resets with the reception of the Counter End. - * - \b Timer0Start (Display string: 'Timer 0 Start'): Resets with the reception of the Timer Start. - * - \b Timer1Start (Display string: 'Timer 1 Start'): Resets with the reception of the Timer Start. - * - \b Timer2Start (Display string: 'Timer 2 Start'): Resets with the reception of the Timer Start. - * - \b Timer\#3\#Start (Display string: 'Timer \#3\# Start'): Resets with the reception of the Timer Start. - * - \b Timer0End (Display string: 'Timer 0 End'): Resets with the reception of the Timer End. - * - \b Timer1End (Display string: 'Timer 1 End'): Resets with the reception of the Timer End. - * - \b Timer2End (Display string: 'Timer 2 End'): Resets with the reception of the Timer End. - * - \b Timer\#3\#End (Display string: 'Timer \#3\# End'): Resets with the reception of the Timer End. + * - \b LinkTrigger0 (Display string: 'Link Trigger 0'): Resets on the reception of the chosen Link Trigger (received from the transport layer). + * - \b LinkTrigger1 (Display string: 'Link Trigger 1'): Resets on the reception of the chosen Link Trigger (received from the transport layer). + * - \b LinkTrigger2 (Display string: 'Link Trigger 2'): Resets on the reception of the chosen Link Trigger (received from the transport layer). * - \b LogicBlock0 (Display string: 'Logic Block 0'): Reset by the choosen Logic Block signal. * - \b LogicBlock1 (Display string: 'Logic Block 1'): Reset by the choosen Logic Block signal. * - \b LogicBlock2 (Display string: 'Logic Block 2'): Reset by the choosen Logic Block signal. - * - \b LogicBlock\#3\# (Display string: 'Logic Block \#3\#'): Reset by the choosen Logic Block signal. + * - \b Off (Display string: 'Off'): Disable the Encoder Reset trigger. * - \b SoftwareSignal0 (Display string: 'Software Signal 0'): Resets on the reception of the Software Signal. * - \b SoftwareSignal1 (Display string: 'Software Signal 1'): Resets on the reception of the Software Signal. * - \b SoftwareSignal2 (Display string: 'Software Signal 2'): Resets on the reception of the Software Signal. - * - \b SoftwareSignal\#3\# (Display string: 'Software Signal \#3\#'): Resets on the reception of the Software Signal. - * - \b Action0 (Display string: 'Action 0'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). - * - \b Action1 (Display string: 'Action 1'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). - * - \b Action2 (Display string: 'Action 2'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). - * - \b Action\#3\# (Display string: 'Action \#3\#'): Resets on assertions of the chosen action signal (Broadcasted signal on the transport layer). - * - \b LinkTrigger0 (Display string: 'Link Trigger 0'): Resets on the reception of the chosen Link Trigger (received from the transport layer). - * - \b LinkTrigger1 (Display string: 'Link Trigger 1'): Resets on the reception of the chosen Link Trigger (received from the transport layer). - * - \b LinkTrigger2 (Display string: 'Link Trigger 2'): Resets on the reception of the chosen Link Trigger (received from the transport layer). - * - \b LinkTrigger\#3\# (Display string: 'Link Trigger \#3\#'): Resets on the reception of the chosen Link Trigger (received from the transport layer). + * - \b Timer0End (Display string: 'Timer 0 End'): Resets with the reception of the Timer End. + * - \b Timer0Start (Display string: 'Timer 0 Start'): Resets with the reception of the Timer Start. + * - \b Timer1End (Display string: 'Timer 1 End'): Resets with the reception of the Timer End. + * - \b Timer1Start (Display string: 'Timer 1 Start'): Resets with the reception of the Timer Start. + * - \b Timer2End (Display string: 'Timer 2 End'): Resets with the reception of the Timer End. + * - \b Timer2Start (Display string: 'Timer 2 Start'): Resets with the reception of the Timer Start. + * - \b UserOutput0 (Display string: 'User Output 0'): Resets by the chosen User Output bit. + * - \b UserOutput1 (Display string: 'User Output 1'): Resets by the chosen User Output bit. + * - \b UserOutput2 (Display string: 'User Output 2'): Resets by the chosen User Output bit. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -5338,7 +5357,6 @@ public: * - \b LogicBlock0 (Display string: 'Logic Block 0'): Logic Block 0 is selected. * - \b LogicBlock1 (Display string: 'Logic Block 1'): Logic Block 1 is selected. * - \b LogicBlock2 (Display string: 'Logic Block 2'): Logic Block 2 is selected. - * - \b LogicBlock\#3\# (Display string: 'Logic Block \#3\#'): Logic Block \#3\# is selected. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -5373,64 +5391,52 @@ public: * Selects the source signal for the input into the Logic Block. True or False indicates the input is forced constant. * * The following string values might be valid for this feature: - * - \b True (Display string: 'True'): Logic Block input is forced to One. - * - \b False (Display string: 'False'): Logic Block input is forced to Zero. - * - \b AcquisitionTriggerWait (Display string: 'Acquisition Trigger Wait'): Device is currently waiting for a trigger for the capture of one or many Frames. + * - \b AcquisitionActive (Display string: 'Acquisition Active'): Device is acquiring one or many Frames. * - \b AcquisitionTrigger (Display string: 'Acquisition Trigger'): Device is currently waiting for a trigger for the capture of one or many Frames. * - \b AcquisitionTriggerMissed (Display string: 'Acquisition Trigger Missed'): Device has missed a trigger for the capture of one or many Frames. - * - \b AcquisitionActive (Display string: 'Acquisition Active'): Device is acquiring one or many Frames. - * - \b FrameTriggerWait (Display string: 'Frame Trigger Wait'): Device is currently waiting for a Frame start trigger. - * - \b FrameTrigger (Display string: 'Frame Trigger'): Device is currently waiting for a Frame start trigger. - * - \b FrameTriggerMissed (Display string: 'Frame Trigger Missed'): Device has missed a Frame start trigger. - * - \b FrameActive (Display string: 'Frame Active'): Device is currently doing the capture of a Frame. - * - \b ExposureActive (Display string: 'Exposure Active'): Device is doing the exposure of a Frame (or Line). - * - \b LineTriggerWait (Display string: 'Line Trigger Wait'): Device is currently waiting for a Line start trigger. - * - \b LineTrigger (Display string: 'Line Trigger'): Device is currently waiting for a Line start trigger. - * - \b LineTriggerMissed (Display string: 'Line Trigger Missed'): Device has missed a Line start trigger. - * - \b LineActive (Display string: 'Line Active'): Device is currently doing the capture of a Line. + * - \b AcquisitionTriggerWait (Display string: 'Acquisition Trigger Wait'): Device is currently waiting for a trigger for the capture of one or many Frames. * - \b Counter0Active (Display string: 'Counter 0 Active'): The chosen counter is in active state (counting). * - \b Counter1Active (Display string: 'Counter 1 Active'): The chosen counter is in active state (counting). * - \b Counter2Active (Display string: 'Counter 2 Active'): The chosen counter is in active state (counting). - * - \b Counter\#3\#Active (Display string: 'Counter \#3\# Active'): The chosen counter is in active state (counting). - * - \b Timer0Active (Display string: 'Timer 0 Active'): The chosen Timer is in active state. - * - \b Timer1Active (Display string: 'Timer 1 Active'): The chosen Timer is in active state. - * - \b Timer2Active (Display string: 'Timer 2 Active'): The chosen Timer is in active state. - * - \b Timer\#3\#Active (Display string: 'Timer \#3\# Active'): The chosen Timer is in active state. * - \b Encoder0 (Display string: 'Encoder 0'): The chosen Encoder Output state. * - \b Encoder1 (Display string: 'Encoder 1'): The chosen Encoder Output state. * - \b Encoder2 (Display string: 'Encoder 2'): The chosen Encoder Output state. - * - \b Encoder\#3\# (Display string: 'Encoder \#3\#'): The chosen Encoder Output state. + * - \b ExposureActive (Display string: 'Exposure Active'): Device is doing the exposure of a Frame (or Line). + * - \b False (Display string: 'False'): Logic Block input is forced to Zero. + * - \b FrameActive (Display string: 'Frame Active'): Device is currently doing the capture of a Frame. + * - \b FrameTrigger (Display string: 'Frame Trigger'): Device is currently waiting for a Frame start trigger. + * - \b FrameTriggerMissed (Display string: 'Frame Trigger Missed'): Device has missed a Frame start trigger. + * - \b FrameTriggerWait (Display string: 'Frame Trigger Wait'): Device is currently waiting for a Frame start trigger. + * - \b Line0 (Display string: 'Line 0'): The chosen I/OLine state. + * - \b Line1 (Display string: 'Line 1'): The chosen I/OLine state. + * - \b Line2 (Display string: 'Line 2'): The chosen I/OLine state. + * - \b LineActive (Display string: 'Line Active'): Device is currently doing the capture of a Line. + * - \b LineTrigger (Display string: 'Line Trigger'): Device is currently waiting for a Line start trigger. + * - \b LineTriggerMissed (Display string: 'Line Trigger Missed'): Device has missed a Line start trigger. + * - \b LineTriggerWait (Display string: 'Line Trigger Wait'): Device is currently waiting for a Line start trigger. * - \b LogicBlock0 (Display string: 'Logic Block 0'): The choosen Logic Block output state. * - \b LogicBlock1 (Display string: 'Logic Block 1'): The choosen Logic Block output state. * - \b LogicBlock2 (Display string: 'Logic Block 2'): The choosen Logic Block output state. - * - \b LogicBlock\#3\# (Display string: 'Logic Block \#3\#'): The choosen Logic Block output state. * - \b SoftwareSignal0 (Display string: 'Software Signal 0'): The choosen Software Signal output state. * - \b SoftwareSignal1 (Display string: 'Software Signal 1'): The choosen Software Signal output state. * - \b SoftwareSignal2 (Display string: 'Software Signal 2'): The choosen Software Signal output state. - * - \b SoftwareSignal\#3\# (Display string: 'Software Signal \#3\#'): The choosen Software Signal output state. - * - \b Line0 (Display string: 'Line 0'): The chosen I/OLine state. - * - \b Line1 (Display string: 'Line 1'): The chosen I/OLine state. - * - \b Line2 (Display string: 'Line 2'): The chosen I/OLine state. - * - \b Line\#3\# (Display string: 'Line \#3\#'): The chosen I/OLine state. - * - \b UserOutput0 (Display string: 'User Output 0'): The chosen User Output bit state as defined by its current UserOutputValue. - * - \b UserOutput1 (Display string: 'User Output 1'): The chosen User Output bit state as defined by its current UserOutputValue. - * - \b UserOutput2 (Display string: 'User Output 2'): The chosen User Output bit state as defined by its current UserOutputValue. - * - \b UserOutput\#3\# (Display string: 'User Output \#3\#'): The chosen User Output bit state as defined by its current UserOutputValue. * - \b Stream0TransferActive (Display string: 'Stream 0 Transfer Active'): Transfer on the stream is active. - * - \b Stream1TransferActive (Display string: 'Stream 1 Transfer Active'): Transfer on the stream is active. - * - \b Stream\#2\#TransferActive (Display string: 'Stream \#2\# Transfer Active'): Transfer on the stream is active. + * - \b Stream0TransferOverflow (Display string: 'Stream 0 Transfer Overflow'): Transfer on the stream is in overflow. * - \b Stream0TransferPaused (Display string: 'Stream 0 Transfer Paused'): Transfer on the stream is paused. - * - \b Stream1TransferPaused (Display string: 'Stream 1 Transfer Paused'): Transfer on the stream is paused. - * - \b Stream\#2\#TransferPaused (Display string: 'Stream \#2\# Transfer Paused'): Transfer on the stream is paused. - * - \b Stream0TransferStopping (Display string: 'Stream 0 Transfer Stopping'): Transfer on the stream is stopping. - * - \b Stream1TransferStopping (Display string: 'Stream 1 Transfer Stopping'): Transfer on the stream is stopping. - * - \b Stream\#2\#TransferStopping (Display string: 'Stream \#2\# Transfer Stopping'): Transfer on the stream is stopping. * - \b Stream0TransferStopped (Display string: 'Stream 0 Transfer Stopped'): Transfer on the stream is stopped. - * - \b Stream1TransferStopped (Display string: 'Stream 1 Transfer Stopped'): Transfer on the stream is stopped. - * - \b Stream\#2\#TransferStopped (Display string: 'Stream \#2\# Transfer Stopped'): Transfer on the stream is stopped. - * - \b Stream0TransferOverflow (Display string: 'Stream 0 Transfer Overflow'): Transfer on the stream is in overflow. + * - \b Stream0TransferStopping (Display string: 'Stream 0 Transfer Stopping'): Transfer on the stream is stopping. + * - \b Stream1TransferActive (Display string: 'Stream 1 Transfer Active'): Transfer on the stream is active. * - \b Stream1TransferOverflow (Display string: 'Stream 1 Transfer Overflow'): Transfer on the stream is in overflow. - * - \b Stream\#2\#TransferOverflow (Display string: 'Stream \#2\# Transfer Overflow'): Transfer on the stream is in overflow. + * - \b Stream1TransferPaused (Display string: 'Stream 1 Transfer Paused'): Transfer on the stream is paused. + * - \b Stream1TransferStopped (Display string: 'Stream 1 Transfer Stopped'): Transfer on the stream is stopped. + * - \b Stream1TransferStopping (Display string: 'Stream 1 Transfer Stopping'): Transfer on the stream is stopping. + * - \b Timer0Active (Display string: 'Timer 0 Active'): The chosen Timer is in active state. + * - \b Timer1Active (Display string: 'Timer 1 Active'): The chosen Timer is in active state. + * - \b Timer2Active (Display string: 'Timer 2 Active'): The chosen Timer is in active state. + * - \b True (Display string: 'True'): Logic Block input is forced to One. + * - \b UserOutput0 (Display string: 'User Output 0'): The chosen User Output bit state as defined by its current UserOutputValue. + * - \b UserOutput1 (Display string: 'User Output 1'): The chosen User Output bit state as defined by its current UserOutputValue. + * - \b UserOutput2 (Display string: 'User Output 2'): The chosen User Output bit state as defined by its current UserOutputValue. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -5513,7 +5519,6 @@ public: * - \b SoftwareSignal0 (Display string: 'Software Signal 0'): Selects the software generated signal to control. * - \b SoftwareSignal1 (Display string: 'Software Signal 1'): Selects the software generated signal to control. * - \b SoftwareSignal2 (Display string: 'Software Signal 2'): Selects the software generated signal to control. - * - \b SoftwareSignal\#3\# (Display string: 'Software Signal \#3\#'): Selects the software generated signal to control. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -5666,6 +5671,12 @@ public: eventFrameTriggerMissed(), eventFrameTriggerMissedTimestamp(), eventFrameTriggerMissedFrameID(), + eventDeviceTemperatureStateNormal(), + eventDeviceTemperatureStateNormalTimestamp(), + eventDeviceTemperatureStateCritical(), + eventDeviceTemperatureStateCriticalTimestamp(), + eventDeviceTemperatureStateOverTemperature(), + eventDeviceTemperatureStateOverTemperatureTimestamp(), eventFrameStart(), eventFrameStartTimestamp(), eventFrameStartFrameID(), @@ -6197,6 +6208,12 @@ public: locator.bindComponent( eventFrameTriggerMissed, "EventFrameTriggerMissed" ); locator.bindComponent( eventFrameTriggerMissedTimestamp, "EventFrameTriggerMissedTimestamp" ); locator.bindComponent( eventFrameTriggerMissedFrameID, "EventFrameTriggerMissedFrameID" ); + locator.bindComponent( eventDeviceTemperatureStateNormal, "EventDeviceTemperatureStateNormal" ); + locator.bindComponent( eventDeviceTemperatureStateNormalTimestamp, "EventDeviceTemperatureStateNormalTimestamp" ); + locator.bindComponent( eventDeviceTemperatureStateCritical, "EventDeviceTemperatureStateCritical" ); + locator.bindComponent( eventDeviceTemperatureStateCriticalTimestamp, "EventDeviceTemperatureStateCriticalTimestamp" ); + locator.bindComponent( eventDeviceTemperatureStateOverTemperature, "EventDeviceTemperatureStateOverTemperature" ); + locator.bindComponent( eventDeviceTemperatureStateOverTemperatureTimestamp, "EventDeviceTemperatureStateOverTemperatureTimestamp" ); locator.bindComponent( eventFrameStart, "EventFrameStart" ); locator.bindComponent( eventFrameStartTimestamp, "EventFrameStartTimestamp" ); locator.bindComponent( eventFrameStartFrameID, "EventFrameStartFrameID" ); @@ -6698,199 +6715,152 @@ public: * Selects which Event to signal to the host application. * * The following string values might be valid for this feature: - * - \b AcquisitionTrigger (Display string: 'Acquisition Trigger'): Device just received a trigger for the Acquisition of one or many Frames. - * - \b AcquisitionTriggerMissed (Display string: 'Acquisition Trigger Missed'): Device just missed a trigger for the Acquisition of one or many Frames. - * - \b AcquisitionStart (Display string: 'Acquisition Start'): Device just started the Acquisition of one or many Frames. * - \b AcquisitionEnd (Display string: 'Acquisition End'): Device just completed the Acquisition of one or many Frames. - * - \b AcquisitionTransferStart (Display string: 'Acquisition Transfer Start'): Device just started the transfer of one or many Frames. - * - \b AcquisitionTransferEnd (Display string: 'Acquisition Transfer End'): Device just completed the transfer of one or many Frames. * - \b AcquisitionError (Display string: 'Acquisition Error'): Device just detected an error during the active Acquisition. - * - \b FrameBurstStart (Display string: 'Frame Burst Start'): Device just started the capture of a burst of Frames. - * - \b FrameBurstEnd (Display string: 'Frame Burst End'): Device just completed the capture of a burst of Frames. - * - \b FrameTrigger (Display string: 'Frame Trigger'): Device just received a trigger to start the capture of one Frame. - * - \b FrameTriggerMissed (Display string: 'Frame Trigger Missed'): Device just missed a trigger to start the capture of one Frame. - * - \b FrameStart (Display string: 'Frame Start'): Device just started the capture of one Frame. - * - \b FrameEnd (Display string: 'Frame End'): Device just completed the capture of one Frame. - * - \b FrameTransferStart (Display string: 'Frame Transfer Start'): Device just started the transfer of one Frame. - * - \b FrameTransferEnd (Display string: 'Frame Transfer End'): Device just completed the transfer of one Frame. - * - \b LineTrigger (Display string: 'Line Trigger'): Device just received a trigger to start the capture of one Line. - * - \b LineTriggerMissed (Display string: 'Line Trigger Missed'): Device just missed a trigger to start the capture of one Line. - * - \b LineStart (Display string: 'Line Start'): Device just started the capture of one Line. - * - \b LineEnd (Display string: 'Line End'): Device just completed the capture of one Line. - * - \b ExposureStart (Display string: 'Exposure Start'): Device just started the exposure of one Frame (or Line). - * - \b ExposureEnd (Display string: 'Exposure End'): Device just completed the exposure of one Frame (or Line). - * - \b Stream0TransferStart (Display string: 'Stream 0 Transfer Start'): Device just started the transfer of one or many Blocks. - * - \b Stream0TransferEnd (Display string: 'Stream 0 Transfer End'): Device just completed the transfer of one or many Blocks. - * - \b Stream0TransferPause (Display string: 'Stream 0 Transfer Pause'): Device just paused the transfer. - * - \b Stream0TransferResume (Display string: 'Stream 0 Transfer Resume'): Device just resumed the transfer. - * - \b Stream0TransferBlockStart (Display string: 'Stream 0 Transfer Block Start'): Device just started the transfer of one Block. - * - \b Stream0TransferBlockEnd (Display string: 'Stream 0 Transfer Block End'): Device just completed the transfer of one Block. - * - \b Stream0TransferBlockTrigger (Display string: 'Stream 0 Transfer Block Trigger'): Device just received a trigger to start the transfer of one Block. - * - \b Stream0TransferBurstStart (Display string: 'Stream 0 Transfer Burst Start'): Device just started the transfer of a burst of Blocks. - * - \b Stream0TransferBurstEnd (Display string: 'Stream 0 Transfer Burst End'): Device just completed the transfer of a burst of Blocks. - * - \b Stream0TransferOverflow (Display string: 'Stream 0 Transfer Overflow'): Device transfer queue overflowed. - * - \b SequencerSetChange (Display string: 'Sequencer Set Change'): Device sequencer set has changed. - * - \b Counter0Start (Display string: 'Counter 0 Start'): The event will be generated when counter 0 starts counting. - * - \b Counter1Start (Display string: 'Counter 1 Start'): The event will be generated when counter 1 starts counting. - * - \b Counter\#2\#Start (Display string: 'Counter \#2\# Start'): The event will be generated when counter \#2\# starts counting. - * - \b Counter0End (Display string: 'Counter 0 End'): The event will be generated when counter 0 ends counting. - * - \b Counter1End (Display string: 'Counter 1 End'): The event will be generated when counter 1 ends counting. - * - \b Counter\#2\#End (Display string: 'Counter \#2\# End'): The event will be generated when counter \#2\# ends counting. - * - \b Timer0Start (Display string: 'Timer 0 Start'): The event will be generated when Timer 0 starts counting. - * - \b Timer1Start (Display string: 'Timer 1 Start'): The event will be generated when Timer 1 starts counting. - * - \b Timer\#2\#Start (Display string: 'Timer \#2\# Start'): The event will be generated when Timer \#2\# starts counting. - * - \b Timer0End (Display string: 'Timer 0 End'): The event will be generated when Timer 0 ends counting. - * - \b Timer1End (Display string: 'Timer 1 End'): The event will be generated when Timer 1 ends counting. - * - \b Timer\#2\#End (Display string: 'Timer \#2\# End'): The event will be generated when Timer \#2\# ends counting. - * - \b Encoder0Stopped (Display string: 'Encoder 0 Stopped'): The event will be generated when the Encoder 0 stops for longer than EncoderTimeout. - * - \b Encoder1Stopped (Display string: 'Encoder 1 Stopped'): The event will be generated when the Encoder 1 stops for longer than EncoderTimeout. - * - \b Encoder\#2\#Stopped (Display string: 'Encoder \#2\# Stopped'): The event will be generated when the Encoder \#2\# stops for longer than EncoderTimeout. - * - \b Encoder0Restarted (Display string: 'Encoder 0 Restarted'): The event will be generated when the Encoder 0 restarts moving. - * - \b Encoder1Restarted (Display string: 'Encoder 1 Restarted'): The event will be generated when the Encoder 1 restarts moving. - * - \b Encoder\#2\#Restarted (Display string: 'Encoder \#2\# Restarted'): The event will be generated when the Encoder \#2\# restarts moving. - * - \b Line0RisingEdge (Display string: 'Line 0 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 0. - * - \b Line1RisingEdge (Display string: 'Line 1 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 1. - * - \b Line\#2\#RisingEdge (Display string: 'Line \#2\# Rising Edge'): The event will be generated when a Rising Edge is detected on the Line \#2\#. - * - \b Line0FallingEdge (Display string: 'Line 0 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 0. - * - \b Line1FallingEdge (Display string: 'Line 1 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 1. - * - \b Line\#2\#FallingEdge (Display string: 'Line \#2\# Falling Edge'): The event will be generated when a Falling Edge is detected on the Line \#2\#. - * - \b Line0AnyEdge (Display string: 'Line 0 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 0. - * - \b Line1AnyEdge (Display string: 'Line 1 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 1. - * - \b Line\#2\#AnyEdge (Display string: 'Line \#2\# Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line \#2\#. - * - \b LinkTrigger0 (Display string: 'Link Trigger 0'): The event will be generated when a Rising Edge is detected on the LinkTrigger 0. - * - \b LinkTrigger1 (Display string: 'Link Trigger 1'): The event will be generated when a Rising Edge is detected on the LinkTrigger 1. - * - \b LinkTrigger\#2\# (Display string: 'Link Trigger \#2\#'): The event will be generated when a Rising Edge is detected on the LinkTrigger \#2\#. - * - \b LinkSpeedChange (Display string: 'Link Speed Change'): The event will be generated when the link speed has changed. + * - \b AcquisitionStart (Display string: 'Acquisition Start'): Device just started the Acquisition of one or many Frames. + * - \b AcquisitionTransferEnd (Display string: 'Acquisition Transfer End'): Device just completed the transfer of one or many Frames. + * - \b AcquisitionTransferStart (Display string: 'Acquisition Transfer Start'): Device just started the transfer of one or many Frames. + * - \b AcquisitionTrigger (Display string: 'Acquisition Trigger'): Device just received a trigger for the Acquisition of one or many Frames. + * - \b AcquisitionTriggerMissed (Display string: 'Acquisition Trigger Missed'): Device just missed a trigger for the Acquisition of one or many Frames. * - \b ActionLate (Display string: 'Action Late'): The event will be generated when a valid scheduled action command is received and is scheduled to be executed at a time that is already past. - * - \b Error (Display string: 'Error'): Device just detected an error during the active Acquisition. - * - \b Test (Display string: 'Test'): The test event will be generated when the device receives the TestEventGenerate command (EventNotification for the Test event is always On). - * - \b PrimaryApplicationSwitch (Display string: 'Primary Application Switch'): The event will be generated when a primary application switchover has been granted (GigE Vision Specific). - * - \b Counter2Start (Display string: 'Counter 2 Start'): The event will be generated when counter 2 starts counting. - * - \b Counter3Start (Display string: 'Counter 3 Start'): The event will be generated when counter 3 starts counting. - * - \b Counter4Start (Display string: 'Counter 4 Start'): The event will be generated when counter 4 starts counting. - * - \b Counter5Start (Display string: 'Counter 5 Start'): The event will be generated when counter 5 starts counting. - * - \b Counter6Start (Display string: 'Counter 6 Start'): The event will be generated when counter 6 starts counting. - * - \b Counter7Start (Display string: 'Counter 7 Start'): The event will be generated when counter 7 starts counting. - * - \b Counter8Start (Display string: 'Counter 8 Start'): The event will be generated when counter 8 starts counting. - * - \b Counter9Start (Display string: 'Counter 9 Start'): The event will be generated when counter 9 starts counting. - * - \b Counter10Start (Display string: 'Counter 10 Start'): The event will be generated when counter 10 starts counting. - * - \b Counter11Start (Display string: 'Counter 11 Start'): The event will be generated when counter 11 starts counting. - * - \b Counter12Start (Display string: 'Counter 12 Start'): The event will be generated when counter 12 starts counting. - * - \b Counter13Start (Display string: 'Counter 13 Start'): The event will be generated when counter 13 starts counting. - * - \b Counter14Start (Display string: 'Counter 14 Start'): The event will be generated when counter 14 starts counting. - * - \b Counter15Start (Display string: 'Counter 15 Start'): The event will be generated when counter 15 starts counting. + * - \b BufferTooSmall (Display string: 'Buffer Too Small'): This enumeration value indicates an event that is raised when the buffer was too small to receive the expected amount of data. + * - \b BuffersDiscarded (Display string: 'Buffers Discarded'): This enumeration value indicates an event that is raised when buffers discared by GenTL or device. This event could optionally carry two numeric child data fields EventBuffersDiscardedDeviceCount and EventBuffersDiscardedProducerCount. + * - \b BuffersDiscardedDeviceCount (Display string: 'Buffers Discarded Device Count'): This enumeration value indicates the number of buffers discarded by the device since last fired instance of this event (the producer would get to know about this for example by observing a gap in the block_id sequence). + * - \b BuffersDiscardedProducerCount (Display string: 'Buffers Discarded Producer Count'): This enumeration value indicates the number of buffers discarded by the producer since last fired instance of this event (this would happen e.g. if there are no free buffers available or if given buffer handling mode requires discarding old buffers etc.). + * - \b Counter0End (Display string: 'Counter 0 End'): The event will be generated when counter 0 ends counting. + * - \b Counter0Start (Display string: 'Counter 0 Start'): The event will be generated when counter 0 starts counting. + * - \b Counter1End (Display string: 'Counter 1 End'): The event will be generated when counter 1 ends counting. + * - \b Counter1Start (Display string: 'Counter 1 Start'): The event will be generated when counter 1 starts counting. * - \b Counter2End (Display string: 'Counter 2 End'): The event will be generated when counter 2 ends counting. + * - \b Counter2Start (Display string: 'Counter 2 Start'): The event will be generated when counter 2 starts counting. * - \b Counter3End (Display string: 'Counter 3 End'): The event will be generated when counter 3 ends counting. + * - \b Counter3Start (Display string: 'Counter 3 Start'): The event will be generated when counter 3 starts counting. * - \b Counter4End (Display string: 'Counter 4 End'): The event will be generated when counter 4 ends counting. + * - \b Counter4Start (Display string: 'Counter 4 Start'): The event will be generated when counter 4 starts counting. * - \b Counter5End (Display string: 'Counter 5 End'): The event will be generated when counter 5 ends counting. + * - \b Counter5Start (Display string: 'Counter 5 Start'): The event will be generated when counter 5 starts counting. * - \b Counter6End (Display string: 'Counter 6 End'): The event will be generated when counter 6 ends counting. + * - \b Counter6Start (Display string: 'Counter 6 Start'): The event will be generated when counter 6 starts counting. * - \b Counter7End (Display string: 'Counter 7 End'): The event will be generated when counter 7 ends counting. + * - \b Counter7Start (Display string: 'Counter 7 Start'): The event will be generated when counter 7 starts counting. * - \b Counter8End (Display string: 'Counter 8 End'): The event will be generated when counter 8 ends counting. + * - \b Counter8Start (Display string: 'Counter 8 Start'): The event will be generated when counter 8 starts counting. * - \b Counter9End (Display string: 'Counter 9 End'): The event will be generated when counter 9 ends counting. + * - \b Counter9Start (Display string: 'Counter 9 Start'): The event will be generated when counter 9 starts counting. * - \b Counter10End (Display string: 'Counter 10 End'): The event will be generated when counter 10 ends counting. + * - \b Counter10Start (Display string: 'Counter 10 Start'): The event will be generated when counter 10 starts counting. * - \b Counter11End (Display string: 'Counter 11 End'): The event will be generated when counter 11 ends counting. + * - \b Counter11Start (Display string: 'Counter 11 Start'): The event will be generated when counter 11 starts counting. * - \b Counter12End (Display string: 'Counter 12 End'): The event will be generated when counter 12 ends counting. + * - \b Counter12Start (Display string: 'Counter 12 Start'): The event will be generated when counter 12 starts counting. * - \b Counter13End (Display string: 'Counter 13 End'): The event will be generated when counter 13 ends counting. + * - \b Counter13Start (Display string: 'Counter 13 Start'): The event will be generated when counter 13 starts counting. * - \b Counter14End (Display string: 'Counter 14 End'): The event will be generated when counter 14 ends counting. + * - \b Counter14Start (Display string: 'Counter 14 Start'): The event will be generated when counter 14 starts counting. * - \b Counter15End (Display string: 'Counter 15 End'): The event will be generated when counter 15 ends counting. - * - \b Timer2Start (Display string: 'Timer 2 Start'): The event will be generated when Timer 2 starts counting. - * - \b Timer3Start (Display string: 'Timer 3 Start'): The event will be generated when Timer 3 starts counting. - * - \b Timer4Start (Display string: 'Timer 4 Start'): The event will be generated when Timer 4 starts counting. - * - \b Timer5Start (Display string: 'Timer 5 Start'): The event will be generated when Timer 5 starts counting. - * - \b Timer6Start (Display string: 'Timer 6 Start'): The event will be generated when Timer 6 starts counting. - * - \b Timer7Start (Display string: 'Timer 7 Start'): The event will be generated when Timer 7 starts counting. - * - \b Timer8Start (Display string: 'Timer 8 Start'): The event will be generated when Timer 8 starts counting. - * - \b Timer9Start (Display string: 'Timer 9 Start'): The event will be generated when Timer 9 starts counting. - * - \b Timer10Start (Display string: 'Timer 10 Start'): The event will be generated when Timer 10 starts counting. - * - \b Timer11Start (Display string: 'Timer 11 Start'): The event will be generated when Timer 11 starts counting. - * - \b Timer12Start (Display string: 'Timer 12 Start'): The event will be generated when Timer 12 starts counting. - * - \b Timer13Start (Display string: 'Timer 13 Start'): The event will be generated when Timer 13 starts counting. - * - \b Timer14Start (Display string: 'Timer 14 Start'): The event will be generated when Timer 14 starts counting. - * - \b Timer15Start (Display string: 'Timer 15 Start'): The event will be generated when Timer 15 starts counting. - * - \b Timer2End (Display string: 'Timer 2 End'): The event will be generated when Timer 2 ends counting. - * - \b Timer3End (Display string: 'Timer 3 End'): The event will be generated when Timer 3 ends counting. - * - \b Timer4End (Display string: 'Timer 4 End'): The event will be generated when Timer 4 ends counting. - * - \b Timer5End (Display string: 'Timer 5 End'): The event will be generated when Timer 5 ends counting. - * - \b Timer6End (Display string: 'Timer 6 End'): The event will be generated when Timer 6 ends counting. - * - \b Timer7End (Display string: 'Timer 7 End'): The event will be generated when Timer 7 ends counting. - * - \b Timer8End (Display string: 'Timer 8 End'): The event will be generated when Timer 8 ends counting. - * - \b Timer9End (Display string: 'Timer 9 End'): The event will be generated when Timer 9 ends counting. - * - \b Timer10End (Display string: 'Timer 10 End'): The event will be generated when Timer 10 ends counting. - * - \b Timer11End (Display string: 'Timer 11 End'): The event will be generated when Timer 11 ends counting. - * - \b Timer12End (Display string: 'Timer 12 End'): The event will be generated when Timer 12 ends counting. - * - \b Timer13End (Display string: 'Timer 13 End'): The event will be generated when Timer 13 ends counting. - * - \b Timer14End (Display string: 'Timer 14 End'): The event will be generated when Timer 14 ends counting. - * - \b Timer15End (Display string: 'Timer 15 End'): The event will be generated when Timer 15 ends counting. - * - \b Encoder2Stopped (Display string: 'Encoder 2 Stopped'): The event will be generated when the Encoder 2 stops for longer than EncoderTimeout. - * - \b Encoder3Stopped (Display string: 'Encoder 3 Stopped'): The event will be generated when the Encoder 3 stops for longer than EncoderTimeout. - * - \b Encoder4Stopped (Display string: 'Encoder 4 Stopped'): The event will be generated when the Encoder 4 stops for longer than EncoderTimeout. - * - \b Encoder5Stopped (Display string: 'Encoder 5 Stopped'): The event will be generated when the Encoder 5 stops for longer than EncoderTimeout. - * - \b Encoder6Stopped (Display string: 'Encoder 6 Stopped'): The event will be generated when the Encoder 6 stops for longer than EncoderTimeout. - * - \b Encoder7Stopped (Display string: 'Encoder 7 Stopped'): The event will be generated when the Encoder 7 stops for longer than EncoderTimeout. - * - \b Encoder8Stopped (Display string: 'Encoder 8 Stopped'): The event will be generated when the Encoder 8 stops for longer than EncoderTimeout. - * - \b Encoder9Stopped (Display string: 'Encoder 9 Stopped'): The event will be generated when the Encoder 9 stops for longer than EncoderTimeout. - * - \b Encoder10Stopped (Display string: 'Encoder 10 Stopped'): The event will be generated when the Encoder 10 stops for longer than EncoderTimeout. - * - \b Encoder11Stopped (Display string: 'Encoder 11 Stopped'): The event will be generated when the Encoder 11 stops for longer than EncoderTimeout. - * - \b Encoder12Stopped (Display string: 'Encoder 12 Stopped'): The event will be generated when the Encoder 12 stops for longer than EncoderTimeout. - * - \b Encoder13Stopped (Display string: 'Encoder 13 Stopped'): The event will be generated when the Encoder 13 stops for longer than EncoderTimeout. - * - \b Encoder14Stopped (Display string: 'Encoder 14 Stopped'): The event will be generated when the Encoder 14 stops for longer than EncoderTimeout. - * - \b Encoder15Stopped (Display string: 'Encoder 15 Stopped'): The event will be generated when the Encoder 15 stops for longer than EncoderTimeout. + * - \b Counter15Start (Display string: 'Counter 15 Start'): The event will be generated when counter 15 starts counting. + * - \b DeviceListChanged (Display string: 'Device List Changed'): This enumeration value indicates an event that is fired when the list of devices has been updated. + * - \b DeviceLost (Display string: 'Device Lost'): This enumeration value indicates an event that is raised when the local host looses connection to the physical(remote) device. + * - \b DeviceTemperatureStateCritical (Display string: 'Device Temperature State Critical') + * - \b DeviceTemperatureStateNormal (Display string: 'Device Temperature State Normal') + * - \b DeviceTemperatureStateOverTemperature (Display string: 'Device Temperature State Over Temperature') + * - \b Encoder0Restarted (Display string: 'Encoder 0 Restarted'): The event will be generated when the Encoder 0 restarts moving. + * - \b Encoder0Stopped (Display string: 'Encoder 0 Stopped'): The event will be generated when the Encoder 0 stops for longer than EncoderTimeout. + * - \b Encoder1Restarted (Display string: 'Encoder 1 Restarted'): The event will be generated when the Encoder 1 restarts moving. + * - \b Encoder1Stopped (Display string: 'Encoder 1 Stopped'): The event will be generated when the Encoder 1 stops for longer than EncoderTimeout. * - \b Encoder2Restarted (Display string: 'Encoder 2 Restarted'): The event will be generated when the Encoder 2 restarts moving. + * - \b Encoder2Stopped (Display string: 'Encoder 2 Stopped'): The event will be generated when the Encoder 2 stops for longer than EncoderTimeout. * - \b Encoder3Restarted (Display string: 'Encoder 3 Restarted'): The event will be generated when the Encoder 3 restarts moving. + * - \b Encoder3Stopped (Display string: 'Encoder 3 Stopped'): The event will be generated when the Encoder 3 stops for longer than EncoderTimeout. * - \b Encoder4Restarted (Display string: 'Encoder 4 Restarted'): The event will be generated when the Encoder 4 restarts moving. + * - \b Encoder4Stopped (Display string: 'Encoder 4 Stopped'): The event will be generated when the Encoder 4 stops for longer than EncoderTimeout. * - \b Encoder5Restarted (Display string: 'Encoder 5 Restarted'): The event will be generated when the Encoder 5 restarts moving. + * - \b Encoder5Stopped (Display string: 'Encoder 5 Stopped'): The event will be generated when the Encoder 5 stops for longer than EncoderTimeout. * - \b Encoder6Restarted (Display string: 'Encoder 6 Restarted'): The event will be generated when the Encoder 6 restarts moving. + * - \b Encoder6Stopped (Display string: 'Encoder 6 Stopped'): The event will be generated when the Encoder 6 stops for longer than EncoderTimeout. * - \b Encoder7Restarted (Display string: 'Encoder 7 Restarted'): The event will be generated when the Encoder 7 restarts moving. + * - \b Encoder7Stopped (Display string: 'Encoder 7 Stopped'): The event will be generated when the Encoder 7 stops for longer than EncoderTimeout. * - \b Encoder8Restarted (Display string: 'Encoder 8 Restarted'): The event will be generated when the Encoder 8 restarts moving. + * - \b Encoder8Stopped (Display string: 'Encoder 8 Stopped'): The event will be generated when the Encoder 8 stops for longer than EncoderTimeout. * - \b Encoder9Restarted (Display string: 'Encoder 9 Restarted'): The event will be generated when the Encoder 9 restarts moving. + * - \b Encoder9Stopped (Display string: 'Encoder 9 Stopped'): The event will be generated when the Encoder 9 stops for longer than EncoderTimeout. * - \b Encoder10Restarted (Display string: 'Encoder 10 Restarted'): The event will be generated when the Encoder 10 restarts moving. + * - \b Encoder10Stopped (Display string: 'Encoder 10 Stopped'): The event will be generated when the Encoder 10 stops for longer than EncoderTimeout. * - \b Encoder11Restarted (Display string: 'Encoder 11 Restarted'): The event will be generated when the Encoder 11 restarts moving. + * - \b Encoder11Stopped (Display string: 'Encoder 11 Stopped'): The event will be generated when the Encoder 11 stops for longer than EncoderTimeout. * - \b Encoder12Restarted (Display string: 'Encoder 12 Restarted'): The event will be generated when the Encoder 12 restarts moving. + * - \b Encoder12Stopped (Display string: 'Encoder 12 Stopped'): The event will be generated when the Encoder 12 stops for longer than EncoderTimeout. * - \b Encoder13Restarted (Display string: 'Encoder 13 Restarted'): The event will be generated when the Encoder 13 restarts moving. + * - \b Encoder13Stopped (Display string: 'Encoder 13 Stopped'): The event will be generated when the Encoder 13 stops for longer than EncoderTimeout. * - \b Encoder14Restarted (Display string: 'Encoder 14 Restarted'): The event will be generated when the Encoder 14 restarts moving. + * - \b Encoder14Stopped (Display string: 'Encoder 14 Stopped'): The event will be generated when the Encoder 14 stops for longer than EncoderTimeout. * - \b Encoder15Restarted (Display string: 'Encoder 15 Restarted'): The event will be generated when the Encoder 15 restarts moving. - * - \b Line2RisingEdge (Display string: 'Line 2 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 2. - * - \b Line3RisingEdge (Display string: 'Line 3 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 3. - * - \b Line4RisingEdge (Display string: 'Line 4 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 4. - * - \b Line5RisingEdge (Display string: 'Line 5 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 5. - * - \b Line6RisingEdge (Display string: 'Line 6 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 6. - * - \b Line7RisingEdge (Display string: 'Line 7 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 7. - * - \b Line8RisingEdge (Display string: 'Line 8 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 8. - * - \b Line9RisingEdge (Display string: 'Line 9 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 9. - * - \b Line10RisingEdge (Display string: 'Line 10 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 10. - * - \b Line11RisingEdge (Display string: 'Line 11 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 11. - * - \b Line12RisingEdge (Display string: 'Line 12 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 12. - * - \b Line13RisingEdge (Display string: 'Line 13 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 13. - * - \b Line14RisingEdge (Display string: 'Line 14 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 14. - * - \b Line15RisingEdge (Display string: 'Line 15 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 15. - * - \b Line2FallingEdge (Display string: 'Line 2 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 2. - * - \b Line3FallingEdge (Display string: 'Line 3 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 3. - * - \b Line4FallingEdge (Display string: 'Line 4 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 4. - * - \b Line5FallingEdge (Display string: 'Line 5 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 5. - * - \b Line6FallingEdge (Display string: 'Line 6 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 6. - * - \b Line7FallingEdge (Display string: 'Line 7 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 7. - * - \b Line8FallingEdge (Display string: 'Line 8 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 8. - * - \b Line9FallingEdge (Display string: 'Line 9 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 9. - * - \b Line10FallingEdge (Display string: 'Line 10 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 10. - * - \b Line11FallingEdge (Display string: 'Line 11 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 11. - * - \b Line12FallingEdge (Display string: 'Line 12 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 12. - * - \b Line13FallingEdge (Display string: 'Line 13 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 13. - * - \b Line14FallingEdge (Display string: 'Line 14 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 14. - * - \b Line15FallingEdge (Display string: 'Line 15 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 15. + * - \b Encoder15Stopped (Display string: 'Encoder 15 Stopped'): The event will be generated when the Encoder 15 stops for longer than EncoderTimeout. + * - \b Error (Display string: 'Error'): Device just detected an error during the active Acquisition. + * - \b ExposureEnd (Display string: 'Exposure End'): Device just completed the exposure of one Frame (or Line). + * - \b ExposureStart (Display string: 'Exposure Start'): Device just started the exposure of one Frame (or Line). + * - \b FrameBurstEnd (Display string: 'Frame Burst End'): Device just completed the capture of a burst of Frames. + * - \b FrameBurstStart (Display string: 'Frame Burst Start'): Device just started the capture of a burst of Frames. + * - \b FrameEnd (Display string: 'Frame End'): Device just completed the capture of one Frame. + * - \b FrameStart (Display string: 'Frame Start'): Device just started the capture of one Frame. + * - \b FrameTransferEnd (Display string: 'Frame Transfer End'): Device just completed the transfer of one Frame. + * - \b FrameTransferStart (Display string: 'Frame Transfer Start'): Device just started the transfer of one Frame. + * - \b FrameTrigger (Display string: 'Frame Trigger'): Device just received a trigger to start the capture of one Frame. + * - \b FrameTriggerMissed (Display string: 'Frame Trigger Missed'): Device just missed a trigger to start the capture of one Frame. + * - \b InterfaceListChanged (Display string: 'Interface List Changed'): This enumeration value indicates an event that is fired when the list of interfaces has been updated. + * - \b InterfaceLost (Display string: 'Interface Lost'): This enumeration value indicates an event that is raised when the interface connection is lost. + * - \b Line0AnyEdge (Display string: 'Line 0 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 0. + * - \b Line0FallingEdge (Display string: 'Line 0 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 0. + * - \b Line0RisingEdge (Display string: 'Line 0 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 0. + * - \b Line1AnyEdge (Display string: 'Line 1 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 1. + * - \b Line1FallingEdge (Display string: 'Line 1 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 1. + * - \b Line1RisingEdge (Display string: 'Line 1 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 1. * - \b Line2AnyEdge (Display string: 'Line 2 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 2. + * - \b Line2FallingEdge (Display string: 'Line 2 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 2. + * - \b Line2RisingEdge (Display string: 'Line 2 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 2. * - \b Line3AnyEdge (Display string: 'Line 3 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 3. + * - \b Line3FallingEdge (Display string: 'Line 3 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 3. + * - \b Line3RisingEdge (Display string: 'Line 3 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 3. * - \b Line4AnyEdge (Display string: 'Line 4 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 4. + * - \b Line4FallingEdge (Display string: 'Line 4 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 4. + * - \b Line4RisingEdge (Display string: 'Line 4 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 4. * - \b Line5AnyEdge (Display string: 'Line 5 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 5. + * - \b Line5FallingEdge (Display string: 'Line 5 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 5. + * - \b Line5RisingEdge (Display string: 'Line 5 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 5. * - \b Line6AnyEdge (Display string: 'Line 6 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 6. + * - \b Line6FallingEdge (Display string: 'Line 6 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 6. + * - \b Line6RisingEdge (Display string: 'Line 6 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 6. * - \b Line7AnyEdge (Display string: 'Line 7 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 7. + * - \b Line7FallingEdge (Display string: 'Line 7 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 7. + * - \b Line7RisingEdge (Display string: 'Line 7 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 7. * - \b Line8AnyEdge (Display string: 'Line 8 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 8. + * - \b Line8FallingEdge (Display string: 'Line 8 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 8. + * - \b Line8RisingEdge (Display string: 'Line 8 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 8. * - \b Line9AnyEdge (Display string: 'Line 9 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 9. + * - \b Line9FallingEdge (Display string: 'Line 9 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 9. + * - \b Line9RisingEdge (Display string: 'Line 9 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 9. * - \b Line10AnyEdge (Display string: 'Line 10 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 10. + * - \b Line10FallingEdge (Display string: 'Line 10 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 10. + * - \b Line10RisingEdge (Display string: 'Line 10 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 10. * - \b Line11AnyEdge (Display string: 'Line 11 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 11. + * - \b Line11FallingEdge (Display string: 'Line 11 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 11. + * - \b Line11RisingEdge (Display string: 'Line 11 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 11. * - \b Line12AnyEdge (Display string: 'Line 12 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 12. + * - \b Line12FallingEdge (Display string: 'Line 12 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 12. + * - \b Line12RisingEdge (Display string: 'Line 12 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 12. * - \b Line13AnyEdge (Display string: 'Line 13 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 13. + * - \b Line13FallingEdge (Display string: 'Line 13 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 13. + * - \b Line13RisingEdge (Display string: 'Line 13 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 13. * - \b Line14AnyEdge (Display string: 'Line 14 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 14. + * - \b Line14FallingEdge (Display string: 'Line 14 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 14. + * - \b Line14RisingEdge (Display string: 'Line 14 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 14. * - \b Line15AnyEdge (Display string: 'Line 15 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 15. + * - \b Line15FallingEdge (Display string: 'Line 15 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 15. + * - \b Line15RisingEdge (Display string: 'Line 15 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 15. + * - \b LineEnd (Display string: 'Line End'): Device just completed the capture of one Line. + * - \b LineStart (Display string: 'Line Start'): Device just started the capture of one Line. + * - \b LineTrigger (Display string: 'Line Trigger'): Device just received a trigger to start the capture of one Line. + * - \b LineTriggerMissed (Display string: 'Line Trigger Missed'): Device just missed a trigger to start the capture of one Line. * - \b Link0Trigger (Display string: 'Link 0 Trigger') * - \b Link1Trigger (Display string: 'Link 1 Trigger') * - \b Link2Trigger (Display string: 'Link 2 Trigger') @@ -6907,14 +6877,54 @@ public: * - \b Link13Trigger (Display string: 'Link 13 Trigger') * - \b Link14Trigger (Display string: 'Link 14 Trigger') * - \b Link15Trigger (Display string: 'Link 15 Trigger') - * - \b InterfaceListChanged (Display string: 'Interface List Changed'): This enumeration value indicates an event that is fired when the list of interfaces has been updated. - * - \b InterfaceLost (Display string: 'Interface Lost'): This enumeration value indicates an event that is raised when the interface connection is lost. - * - \b DeviceListChanged (Display string: 'Device List Changed'): This enumeration value indicates an event that is fired when the list of devices has been updated. - * - \b DeviceLost (Display string: 'Device Lost'): This enumeration value indicates an event that is raised when the local host looses connection to the physical(remote) device. - * - \b BufferTooSmall (Display string: 'Buffer Too Small'): This enumeration value indicates an event that is raised when the buffer was too small to receive the expected amount of data. - * - \b BuffersDiscarded (Display string: 'Buffers Discarded'): This enumeration value indicates an event that is raised when buffers discared by GenTL or device. This event could optionally carry two numeric child data fields EventBuffersDiscardedDeviceCount and EventBuffersDiscardedProducerCount. - * - \b BuffersDiscardedDeviceCount (Display string: 'Buffers Discarded Device Count'): This enumeration value indicates the number of buffers discarded by the device since last fired instance of this event (the producer would get to know about this for example by observing a gap in the block_id sequence). - * - \b BuffersDiscardedProducerCount (Display string: 'Buffers Discarded Producer Count'): This enumeration value indicates the number of buffers discarded by the producer since last fired instance of this event (this would happen e.g. if there are no free buffers available or if given buffer handling mode requires discarding old buffers etc.). + * - \b LinkSpeedChange (Display string: 'Link Speed Change'): The event will be generated when the link speed has changed. + * - \b LinkTrigger0 (Display string: 'Link Trigger 0'): The event will be generated when a Rising Edge is detected on the LinkTrigger 0. + * - \b LinkTrigger1 (Display string: 'Link Trigger 1'): The event will be generated when a Rising Edge is detected on the LinkTrigger 1. + * - \b PrimaryApplicationSwitch (Display string: 'Primary Application Switch'): The event will be generated when a primary application switchover has been granted (GigE Vision Specific). + * - \b SequencerSetChange (Display string: 'Sequencer Set Change'): Device sequencer set has changed. + * - \b Stream0TransferBlockEnd (Display string: 'Stream 0 Transfer Block End'): Device just completed the transfer of one Block. + * - \b Stream0TransferBlockStart (Display string: 'Stream 0 Transfer Block Start'): Device just started the transfer of one Block. + * - \b Stream0TransferBlockTrigger (Display string: 'Stream 0 Transfer Block Trigger'): Device just received a trigger to start the transfer of one Block. + * - \b Stream0TransferBurstEnd (Display string: 'Stream 0 Transfer Burst End'): Device just completed the transfer of a burst of Blocks. + * - \b Stream0TransferBurstStart (Display string: 'Stream 0 Transfer Burst Start'): Device just started the transfer of a burst of Blocks. + * - \b Stream0TransferEnd (Display string: 'Stream 0 Transfer End'): Device just completed the transfer of one or many Blocks. + * - \b Stream0TransferOverflow (Display string: 'Stream 0 Transfer Overflow'): Device transfer queue overflowed. + * - \b Stream0TransferPause (Display string: 'Stream 0 Transfer Pause'): Device just paused the transfer. + * - \b Stream0TransferResume (Display string: 'Stream 0 Transfer Resume'): Device just resumed the transfer. + * - \b Stream0TransferStart (Display string: 'Stream 0 Transfer Start'): Device just started the transfer of one or many Blocks. + * - \b Test (Display string: 'Test'): The test event will be generated when the device receives the TestEventGenerate command (EventNotification for the Test event is always On). + * - \b Timer0End (Display string: 'Timer 0 End'): The event will be generated when Timer 0 ends counting. + * - \b Timer0Start (Display string: 'Timer 0 Start'): The event will be generated when Timer 0 starts counting. + * - \b Timer1End (Display string: 'Timer 1 End'): The event will be generated when Timer 1 ends counting. + * - \b Timer1Start (Display string: 'Timer 1 Start'): The event will be generated when Timer 1 starts counting. + * - \b Timer2End (Display string: 'Timer 2 End'): The event will be generated when Timer 2 ends counting. + * - \b Timer2Start (Display string: 'Timer 2 Start'): The event will be generated when Timer 2 starts counting. + * - \b Timer3End (Display string: 'Timer 3 End'): The event will be generated when Timer 3 ends counting. + * - \b Timer3Start (Display string: 'Timer 3 Start'): The event will be generated when Timer 3 starts counting. + * - \b Timer4End (Display string: 'Timer 4 End'): The event will be generated when Timer 4 ends counting. + * - \b Timer4Start (Display string: 'Timer 4 Start'): The event will be generated when Timer 4 starts counting. + * - \b Timer5End (Display string: 'Timer 5 End'): The event will be generated when Timer 5 ends counting. + * - \b Timer5Start (Display string: 'Timer 5 Start'): The event will be generated when Timer 5 starts counting. + * - \b Timer6End (Display string: 'Timer 6 End'): The event will be generated when Timer 6 ends counting. + * - \b Timer6Start (Display string: 'Timer 6 Start'): The event will be generated when Timer 6 starts counting. + * - \b Timer7End (Display string: 'Timer 7 End'): The event will be generated when Timer 7 ends counting. + * - \b Timer7Start (Display string: 'Timer 7 Start'): The event will be generated when Timer 7 starts counting. + * - \b Timer8End (Display string: 'Timer 8 End'): The event will be generated when Timer 8 ends counting. + * - \b Timer8Start (Display string: 'Timer 8 Start'): The event will be generated when Timer 8 starts counting. + * - \b Timer9End (Display string: 'Timer 9 End'): The event will be generated when Timer 9 ends counting. + * - \b Timer9Start (Display string: 'Timer 9 Start'): The event will be generated when Timer 9 starts counting. + * - \b Timer10End (Display string: 'Timer 10 End'): The event will be generated when Timer 10 ends counting. + * - \b Timer10Start (Display string: 'Timer 10 Start'): The event will be generated when Timer 10 starts counting. + * - \b Timer11End (Display string: 'Timer 11 End'): The event will be generated when Timer 11 ends counting. + * - \b Timer11Start (Display string: 'Timer 11 Start'): The event will be generated when Timer 11 starts counting. + * - \b Timer12End (Display string: 'Timer 12 End'): The event will be generated when Timer 12 ends counting. + * - \b Timer12Start (Display string: 'Timer 12 Start'): The event will be generated when Timer 12 starts counting. + * - \b Timer13End (Display string: 'Timer 13 End'): The event will be generated when Timer 13 ends counting. + * - \b Timer13Start (Display string: 'Timer 13 Start'): The event will be generated when Timer 13 starts counting. + * - \b Timer14End (Display string: 'Timer 14 End'): The event will be generated when Timer 14 ends counting. + * - \b Timer14Start (Display string: 'Timer 14 Start'): The event will be generated when Timer 14 starts counting. + * - \b Timer15End (Display string: 'Timer 15 End'): The event will be generated when Timer 15 ends counting. + * - \b Timer15Start (Display string: 'Timer 15 Start'): The event will be generated when Timer 15 starts counting. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -7099,11 +7109,41 @@ public: * Returns the unique Identifier of the Frame (or image) that generated the Frame Trigger Missed Event. */ PropertyI64 eventFrameTriggerMissedFrameID; - /// \brief An integer property. Returns the unique Identifier of the Frame Start type of Event. + /// \brief An integer property. Returns the unique Identifier of the DeviceTemperatureState Normal type of Event. /** - * Returns the unique Identifier of the Frame Start type of Event. + * Returns the unique Identifier of the DeviceTemperatureState Normal type of Event. */ - PropertyI64 eventFrameStart; + PropertyI64 eventDeviceTemperatureStateNormal; + /// \brief An integer property. Returns the Timestamp of the DeviceTemperatureState Normal Event. + /** + * Returns the Timestamp of the DeviceTemperatureState Normal Event. + */ + PropertyI64 eventDeviceTemperatureStateNormalTimestamp; + /// \brief An integer property. Returns the unique Identifier of the DeviceTemperatureState Critical type of Event. + /** + * Returns the unique Identifier of the DeviceTemperatureState Critical type of Event. + */ + PropertyI64 eventDeviceTemperatureStateCritical; + /// \brief An integer property. Returns the Timestamp of the DeviceTemperatureState Critical Event. + /** + * Returns the Timestamp of the DeviceTemperatureState Critical Event + */ + PropertyI64 eventDeviceTemperatureStateCriticalTimestamp; + /// \brief An integer property. Returns the unique Identifier of the DeviceTemperatureState OverTemperature type of Event. + /** + * Returns the unique Identifier of the DeviceTemperatureState OverTemperature type of Event. + */ + PropertyI64 eventDeviceTemperatureStateOverTemperature; + /// \brief An integer property. Returns the Timestamp of the DeviceTemperatureState OverTemperature Event. + /** + * Returns the Timestamp of the DeviceTemperatureState OverTemperature Event + */ + PropertyI64 eventDeviceTemperatureStateOverTemperatureTimestamp; + /// \brief An integer property. Returns the unique Identifier of the Frame Start type of Event. + /** + * Returns the unique Identifier of the Frame Start type of Event. + */ + PropertyI64 eventFrameStart; /// \brief An integer property. Returns the Timestamp of the Frame Start Event. /** * Returns the Timestamp of the Frame Start Event. @@ -9622,7 +9662,6 @@ public: * - \b Default (Display string: 'Default'): Selects the factory setting user set. * - \b UserSet0 (Display string: 'User Set 0'): Selects the user set 0. * - \b UserSet1 (Display string: 'User Set 1'): Selects the user set 1. - * - \b UserSet\#2\# (Display string: 'User Set \#2\#'): Selects the user set \#2\#. * - \b UserSet2 (Display string: 'User Set 2'): Selects the user set 2. * - \b UserSet3 (Display string: 'User Set 3'): Selects the user set 3. * - \b UserSet4 (Display string: 'User Set 4'): Selects the user set 4. @@ -9637,7 +9676,6 @@ public: * - \b UserSet13 (Display string: 'User Set 13'): Selects the user set 13. * - \b UserSet14 (Display string: 'User Set 14'): Selects the user set 14. * - \b UserSet15 (Display string: 'User Set 15'): Selects the user set 15. - * - \b UserSet16 (Display string: 'User Set 16') * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -9666,7 +9704,6 @@ public: * - \b Default (Display string: 'Default'): Select the factory setting user set. * - \b UserSet0 (Display string: 'User Set 0'): Select the user set 0. * - \b UserSet1 (Display string: 'User Set 1'): Select the user set 1. - * - \b UserSet\#2\# (Display string: 'User Set \#2\#'): Select the user set \#2\#. * - \b UserSet2 (Display string: 'User Set 2'): Select the user set 2. * - \b UserSet3 (Display string: 'User Set 3'): Select the user set 3. * - \b UserSet4 (Display string: 'User Set 4'): Select the user set 4. @@ -9681,7 +9718,6 @@ public: * - \b UserSet13 (Display string: 'User Set 13'): Select the user set 13. * - \b UserSet14 (Display string: 'User Set 14'): Select the user set 14. * - \b UserSet15 (Display string: 'User Set 15'): Select the user set 15. - * - \b UserSet16 (Display string: 'User Set 16') * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -9696,7 +9732,6 @@ public: * - \b Default (Display string: 'Default'): Select the factory setting user set. * - \b UserSet0 (Display string: 'User Set 0'): Select the user set 0. * - \b UserSet1 (Display string: 'User Set 1'): Select the user set 1. - * - \b UserSet\#2\# (Display string: 'User Set \#2\#'): Select the user set \#2\#. * - \b UserSet2 (Display string: 'User Set 2'): Select the user set 2. * - \b UserSet3 (Display string: 'User Set 3'): Select the user set 3. * - \b UserSet4 (Display string: 'User Set 4'): Select the user set 4. @@ -9711,7 +9746,6 @@ public: * - \b UserSet13 (Display string: 'User Set 13'): Select the user set 13. * - \b UserSet14 (Display string: 'User Set 14'): Select the user set 14. * - \b UserSet15 (Display string: 'User Set 15'): Select the user set 15. - * - \b UserSet16 (Display string: 'User Set 16') * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -9722,7 +9756,7 @@ public: * Selects which individual UserSet feature to control. * * The following string values might be valid for this feature: - * - \b Device-Specific (Display string: 'Device - Specific'): Device - Specific + * - \b Device-Specific-Feature-List (Display string: 'Device - Specific - Feature - List'): Device - Specific - Feature - List * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -9733,9 +9767,9 @@ public: * Enables the selected feature and make it active in all the UserSets. */ PropertyIBoolean userSetFeatureEnable; - /// \brief A string property. A register to store arbitrary user data into the devices non-volatile memory. + /// \brief A string property. A register to store arbitrary user data into the devices non-volatile memory. The data is stored as binary data encoded in Base64 see mvIMPACT::acquire::PropertyS::writeBinary or mvIMPACT::acquire::PropertyS::readBinary for more details. /** - * A register to store arbitrary user data into the devices non-volatile memory + * A register to store arbitrary user data into the devices non-volatile memory. The data is stored as binary data encoded in Base64 see mvIMPACT::acquire::PropertyS::writeBinary or mvIMPACT::acquire::PropertyS::readBinary for more details. */ PropertyS mvUserData; // *INDENT-OFF* @@ -9826,7 +9860,7 @@ public: * Selects which sequencer features to control. * * The following string values might be valid for this feature: - * - \b Device-Specific (Display string: 'Device - Specific'): Device - Specific + * - \b Device-Specific-Feature-List (Display string: 'Device - Specific - Feature - List'): Device - Specific - Feature - List * - \b ExposureTime (Display string: 'Exposure Time') * - \b CounterDuration (Display string: 'Counter Duration') * - \b mvImagePositionAndSize (Display string: 'mv Image Position And Size'): This value selects whether features affecting the image position and size shall be controlled by the sequencer. @@ -9892,67 +9926,56 @@ public: * Specifies the internal signal or physical input line to use as the sequencer trigger source. * * The following string values might be valid for this feature: - * - \b Off (Display string: 'Off'): Disables the sequencer trigger. + * - \b AcquisitionEnd (Display string: 'Acquisition End'): Starts with the reception of the Acquisition End. + * - \b AcquisitionStart (Display string: 'Acquisition Start'): Starts with the reception of the Acquisition Start. * - \b AcquisitionTrigger (Display string: 'Acquisition Trigger'): Starts with the reception of the Acquisition Trigger. * - \b AcquisitionTriggerMissed (Display string: 'Acquisition Trigger Missed'): Starts with the reception of the missed Acquisition Trigger. - * - \b AcquisitionStart (Display string: 'Acquisition Start'): Starts with the reception of the Acquisition Start. - * - \b AcquisitionEnd (Display string: 'Acquisition End'): Starts with the reception of the Acquisition End. - * - \b FrameTrigger (Display string: 'Frame Trigger'): Starts with the reception of the Frame Start Trigger. - * - \b FrameTriggerMissed (Display string: 'Frame Trigger Missed'): Starts with the reception of the missed Frame Trigger. - * - \b FrameStart (Display string: 'Frame Start'): Starts with the reception of the Frame Start. - * - \b FrameEnd (Display string: 'Frame End'): Starts with the reception of the Frame End. - * - \b FrameBurstStart (Display string: 'Frame Burst Start'): Starts with the reception of the Frame Burst Start. - * - \b FrameBurstEnd (Display string: 'Frame Burst End'): Starts with the reception of the Frame Burst End. - * - \b ExposureStart (Display string: 'Exposure Start'): Starts with the reception of the Exposure Start. - * - \b ExposureEnd (Display string: 'Exposure End'): Starts with the reception of the Exposure End. - * - \b Line0 (Display string: 'Line 0'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. - * - \b Line1 (Display string: 'Line 1'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. - * - \b Line2 (Display string: 'Line 2'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. - * - \b Line\#3\# (Display string: 'Line \#3\#'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. - * - \b UserOutput0 (Display string: 'User Output 0'): Specifies which User Output bit signal to use as internal source for the trigger. - * - \b UserOutput1 (Display string: 'User Output 1'): Specifies which User Output bit signal to use as internal source for the trigger. - * - \b UserOutput2 (Display string: 'User Output 2'): Specifies which User Output bit signal to use as internal source for the trigger. - * - \b UserOutput\#3\# (Display string: 'User Output \#3\#'): Specifies which User Output bit signal to use as internal source for the trigger. - * - \b Counter0Start (Display string: 'Counter 0 Start'): Starts with the reception of the Counter Start. - * - \b Counter1Start (Display string: 'Counter 1 Start'): Starts with the reception of the Counter Start. - * - \b Counter2Start (Display string: 'Counter 2 Start'): Starts with the reception of the Counter Start. - * - \b Counter\#3\#Start (Display string: 'Counter \#3\# Start'): Starts with the reception of the Counter Start. + * - \b Action0 (Display string: 'Action 0'): Starts with the assertion of the chosen action signal. + * - \b Action1 (Display string: 'Action 1'): Starts with the assertion of the chosen action signal. + * - \b Action2 (Display string: 'Action 2'): Starts with the assertion of the chosen action signal. + * - \b CC1 (Display string: 'CC 1'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. + * - \b CC2 (Display string: 'CC 2'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. + * - \b CC3 (Display string: 'CC 3'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. + * - \b CC4 (Display string: 'CC 4'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. * - \b Counter0End (Display string: 'Counter 0 End'): Starts with the reception of the Counter End. + * - \b Counter0Start (Display string: 'Counter 0 Start'): Starts with the reception of the Counter Start. * - \b Counter1End (Display string: 'Counter 1 End'): Starts with the reception of the Counter End. + * - \b Counter1Start (Display string: 'Counter 1 Start'): Starts with the reception of the Counter Start. * - \b Counter2End (Display string: 'Counter 2 End'): Starts with the reception of the Counter End. - * - \b Counter\#3\#End (Display string: 'Counter \#3\# End'): Starts with the reception of the Counter End. - * - \b Timer0Start (Display string: 'Timer 0 Start'): Starts with the reception of the Timer Start. - * - \b Timer1Start (Display string: 'Timer 1 Start'): Starts with the reception of the Timer Start. - * - \b Timer2Start (Display string: 'Timer 2 Start'): Starts with the reception of the Timer Start. - * - \b Timer\#3\#Start (Display string: 'Timer \#3\# Start'): Starts with the reception of the Timer Start. - * - \b Timer0End (Display string: 'Timer 0 End'): Starts with the reception of the Timer End. - * - \b Timer1End (Display string: 'Timer 1 End'): Starts with the reception of the Timer End. - * - \b Timer2End (Display string: 'Timer 2 End'): Starts with the reception of the Timer End. - * - \b Timer\#3\#End (Display string: 'Timer \#3\# End'): Starts with the reception of the Timer End. + * - \b Counter2Start (Display string: 'Counter 2 Start'): Starts with the reception of the Counter Start. * - \b Encoder0 (Display string: 'Encoder 0'): Starts with the reception of the Encoder output signal. * - \b Encoder1 (Display string: 'Encoder 1'): Starts with the reception of the Encoder output signal. * - \b Encoder2 (Display string: 'Encoder 2'): Starts with the reception of the Encoder output signal. - * - \b Encoder\#3\# (Display string: 'Encoder \#3\#'): Starts with the reception of the Encoder output signal. + * - \b ExposureEnd (Display string: 'Exposure End'): Starts with the reception of the Exposure End. + * - \b ExposureStart (Display string: 'Exposure Start'): Starts with the reception of the Exposure Start. + * - \b FrameBurstEnd (Display string: 'Frame Burst End'): Starts with the reception of the Frame Burst End. + * - \b FrameBurstStart (Display string: 'Frame Burst Start'): Starts with the reception of the Frame Burst Start. + * - \b FrameEnd (Display string: 'Frame End'): Starts with the reception of the Frame End. + * - \b FrameStart (Display string: 'Frame Start'): Starts with the reception of the Frame Start. + * - \b FrameTrigger (Display string: 'Frame Trigger'): Starts with the reception of the Frame Start Trigger. + * - \b FrameTriggerMissed (Display string: 'Frame Trigger Missed'): Starts with the reception of the missed Frame Trigger. + * - \b Line0 (Display string: 'Line 0'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. + * - \b Line1 (Display string: 'Line 1'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. + * - \b Line2 (Display string: 'Line 2'): Starts when the specified TimerTriggerActivation condition is met on the chosen I/O Line. + * - \b LinkTrigger0 (Display string: 'Link Trigger 0'): Starts with the reception of the chosen Link Trigger. + * - \b LinkTrigger1 (Display string: 'Link Trigger 1'): Starts with the reception of the chosen Link Trigger. + * - \b LinkTrigger2 (Display string: 'Link Trigger 2'): Starts with the reception of the chosen Link Trigger. * - \b LogicBlock0 (Display string: 'Logic Block 0'): Starts with the reception of the Logic Block output signal. * - \b LogicBlock1 (Display string: 'Logic Block 1'): Starts with the reception of the Logic Block output signal. * - \b LogicBlock2 (Display string: 'Logic Block 2'): Starts with the reception of the Logic Block output signal. - * - \b LogicBlock\#3\# (Display string: 'Logic Block \#3\#'): Starts with the reception of the Logic Block output signal. + * - \b Off (Display string: 'Off'): Disables the sequencer trigger. * - \b SoftwareSignal0 (Display string: 'Software Signal 0'): Starts on the reception of the Software Signal. * - \b SoftwareSignal1 (Display string: 'Software Signal 1'): Starts on the reception of the Software Signal. * - \b SoftwareSignal2 (Display string: 'Software Signal 2'): Starts on the reception of the Software Signal. - * - \b SoftwareSignal\#3\# (Display string: 'Software Signal \#3\#'): Starts on the reception of the Software Signal. - * - \b Action0 (Display string: 'Action 0'): Starts with the assertion of the chosen action signal. - * - \b Action1 (Display string: 'Action 1'): Starts with the assertion of the chosen action signal. - * - \b Action2 (Display string: 'Action 2'): Starts with the assertion of the chosen action signal. - * - \b Action\#3\# (Display string: 'Action \#3\#'): Starts with the assertion of the chosen action signal. - * - \b LinkTrigger0 (Display string: 'Link Trigger 0'): Starts with the reception of the chosen Link Trigger. - * - \b LinkTrigger1 (Display string: 'Link Trigger 1'): Starts with the reception of the chosen Link Trigger. - * - \b LinkTrigger2 (Display string: 'Link Trigger 2'): Starts with the reception of the chosen Link Trigger. - * - \b LinkTrigger\#3\# (Display string: 'Link Trigger \#3\#'): Starts with the reception of the chosen Link Trigger. - * - \b CC1 (Display string: 'CC 1'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. - * - \b CC2 (Display string: 'CC 2'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. - * - \b CC3 (Display string: 'CC 3'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. - * - \b CC4 (Display string: 'CC 4'): Index of the Camera Link physical line and associated I/O control block to use. This ensures a direct mapping between the lines on the frame grabber and on the camera. Applicable to CameraLink products only. + * - \b Timer0End (Display string: 'Timer 0 End'): Starts with the reception of the Timer End. + * - \b Timer0Start (Display string: 'Timer 0 Start'): Starts with the reception of the Timer Start. + * - \b Timer1End (Display string: 'Timer 1 End'): Starts with the reception of the Timer End. + * - \b Timer1Start (Display string: 'Timer 1 Start'): Starts with the reception of the Timer Start. + * - \b Timer2End (Display string: 'Timer 2 End'): Starts with the reception of the Timer End. + * - \b Timer2Start (Display string: 'Timer 2 Start'): Starts with the reception of the Timer Start. + * - \b UserOutput0 (Display string: 'User Output 0'): Specifies which User Output bit signal to use as internal source for the trigger. + * - \b UserOutput1 (Display string: 'User Output 1'): Specifies which User Output bit signal to use as internal source for the trigger. + * - \b UserOutput2 (Display string: 'User Output 2'): Specifies which User Output bit signal to use as internal source for the trigger. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -10076,6 +10099,147 @@ public: // *INDENT-ON* }; +//----------------------------------------------------------------------------- +/// \brief Contains features to control the image controllers. The properties are applied to Auto Gain Control(AGC) and Auto Exposure Control(AEC) controller. To take effect at least AEC or AGC must be enabled. +/** + * Contains features to control the image controllers. The properties are applied to Auto Gain Control(AGC) and Auto Exposure Control(AEC) controller. To take effect at least AEC or AGC must be enabled. + * \ingroup GenICamInterfaceDevice + */ +class mvAutoFeatureControl : public mvIMPACT::acquire::ComponentCollection +//----------------------------------------------------------------------------- +{ +public: + /// \brief Constructs a new mvIMPACT::acquire::GenICam::mvAutoFeatureControl object. + explicit mvAutoFeatureControl( + /// [in] A pointer to a mvIMPACT::acquire::Device object obtained from a mvIMPACT::acquire::DeviceManager object. + mvIMPACT::acquire::Device* pDev, + /// [in] The name of the driver internal setting to access with this instance. + /// A list of valid setting names can be obtained by a call to + /// mvIMPACT::acquire::FunctionInterface::getAvailableSettings, new + /// settings can be created with the function + /// mvIMPACT::acquire::FunctionInterface::createSetting + const std::string& settingName = "Base" ) : + mvIMPACT::acquire::ComponentCollection( pDev ), + mvAutoFeatureBrightness(), + mvAutoFeatureSensitivity(), + mvAutoFeatureCharacteristic(), + mvAutoFeatureBrightnessCalculation(), + mvAutoFeatureAOIHighlightEnable(), + mvAutoFeatureAOIMode(), + mvAutoFeatureAOIOffsetX(), + mvAutoFeatureAOIOffsetY(), + mvAutoFeatureAOIWidth(), + mvAutoFeatureAOIHeight(), + mvAutoFeatureBrightnessTolerance() + { + pDev->validateInterfaceLayout( dilGenICam ); + mvIMPACT::acquire::DeviceComponentLocator locator( pDev, mvIMPACT::acquire::dltSetting, settingName ); + locator.bindSearchBase( locator.searchbase_id(), "Camera/GenICam/mvAutoFeatureControl" ); + m_hRoot = locator.searchbase_id(); + locator.bindComponent( mvAutoFeatureBrightness, "mvAutoFeatureBrightness" ); + locator.bindComponent( mvAutoFeatureSensitivity, "mvAutoFeatureSensitivity" ); + locator.bindComponent( mvAutoFeatureCharacteristic, "mvAutoFeatureCharacteristic" ); + locator.bindComponent( mvAutoFeatureBrightnessCalculation, "mvAutoFeatureBrightnessCalculation" ); + locator.bindComponent( mvAutoFeatureAOIHighlightEnable, "mvAutoFeatureAOIHighlightEnable" ); + locator.bindComponent( mvAutoFeatureAOIMode, "mvAutoFeatureAOIMode" ); + locator.bindComponent( mvAutoFeatureAOIOffsetX, "mvAutoFeatureAOIOffsetX" ); + locator.bindComponent( mvAutoFeatureAOIOffsetY, "mvAutoFeatureAOIOffsetY" ); + locator.bindComponent( mvAutoFeatureAOIWidth, "mvAutoFeatureAOIWidth" ); + locator.bindComponent( mvAutoFeatureAOIHeight, "mvAutoFeatureAOIHeight" ); + locator.bindComponent( mvAutoFeatureBrightnessTolerance, "mvAutoFeatureBrightnessTolerance" ); + } + // *INDENT-OFF* + PYTHON_OR_JAVA_ONLY( %immutable; ) + // *INDENT-ON* + /// \brief An integer property. Common desired average brightness value (in percent) used for Auto Gain Control(AGC) and Auto Exposure Control(AEC). At least one of these controllers must be activated for the value to take effect. + /** + * Common desired average brightness value (in percent) used for Auto Gain Control(AGC) and Auto Exposure Control(AEC). At least one of these controllers must be activated for the value to take effect. + */ + PropertyI64 mvAutoFeatureBrightness; + /// \brief An integer property. The controllers sensitivity of brightness deviations. This parameter influences the gain as well as the exposure controller. At least one of these controllers must be activated for the value to take effect. + /** + * The controllers sensitivity of brightness deviations. This parameter influences the gain as well as the exposure controller. At least one of these controllers must be activated for the value to take effect. + */ + PropertyI64 mvAutoFeatureSensitivity; + /// \brief An enumerated integer property. Selects the prioritization between Auto Exposure Control(AEC) and Auto Gain Control(AGC) controller. Both controllers have to be activated before. + /** + * Selects the prioritization between Auto Exposure Control(AEC) and Auto Gain Control(AGC) controller. Both controllers have to be activated before. + * + * The following string values might be valid for this feature: + * - \b mvLowGain (Display string: 'mv Low Gain') + * - \b mvShortExposure (Display string: 'mv Short Exposure') + * + * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. + * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. + */ + PropertyI64 mvAutoFeatureCharacteristic; + /// \brief An enumerated integer property. Selects the method to determine the brightness for Auto Exposure Control(AEC) and Auto Gain Control(AGC) controller. + /** + * Selects the method to determine the brightness for Auto Exposure Control(AEC) and Auto Gain Control(AGC) controller. + * + * The following string values might be valid for this feature: + * - \b mvPeak (Display string: 'mv Peak'): The peak brightness value is used as actual value for the controller. + * - \b mvAverage (Display string: 'mv Average'): The average brightness is used as actual value for the controller. + * + * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. + * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. + */ + PropertyI64 mvAutoFeatureBrightnessCalculation; + /// \brief An enumerated integer property. Highlight auto control AOI to check AOI settings. Switch off for normal operation. + /** + * Highlight auto control AOI to check AOI settings. Switch off for normal operation. + * + * The following string values might be valid for this feature: + * - \b Off (Display string: 'Off'): The AutoFeatureAOIHighlight is switched off. + * - \b On (Display string: 'On'): The AutoFeatureAOIHighlight is switched on. + * + * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. + * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. + */ + PropertyI64 mvAutoFeatureAOIHighlightEnable; + /// \brief An enumerated integer property. Common AutoControl AOI used for Auto Gain Control(AGC), Auto Exposure Control(AEC) and Auto White Balancing. + /** + * Common AutoControl AOI used for Auto Gain Control(AGC), Auto Exposure Control(AEC) and Auto White Balancing. + * + * The following string values might be valid for this feature: + * - \b mvFull (Display string: 'mv Full'): The auto controller uses the full frame for the actual value computation. + * - \b mvCenter (Display string: 'mv Center'): The auto controller uses a centered AOI of 25% the full frame for the actual value computation. + * - \b mvUser (Display string: 'mv User'): The auto controller uses the user defined AOI for the actual value computation. + * + * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. + * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. + */ + PropertyI64 mvAutoFeatureAOIMode; + /// \brief An integer property. Common AOI X-Offset used for Auto Gain Control(AGC), Auto Exposure Control(AEC) and Auto White Balance(AWB). + /** + * Common AOI X-Offset used for Auto Gain Control(AGC), Auto Exposure Control(AEC) and Auto White Balance(AWB). + */ + PropertyI64 mvAutoFeatureAOIOffsetX; + /// \brief An integer property. Common AOI Y-Offset used for Auto Gain Control(AGC), Auto Exposure Control(AEC) and Auto White Balance(AWB). + /** + * Common AOI Y-Offset used for Auto Gain Control(AGC), Auto Exposure Control(AEC) and Auto White Balance(AWB). + */ + PropertyI64 mvAutoFeatureAOIOffsetY; + /// \brief An integer property. Common AOI Width used for Auto Gain Control(AGC), Auto Exposure Control(AEC) and Auto White Balance(AWB). + /** + * Common AOI Width used for Auto Gain Control(AGC), Auto Exposure Control(AEC) and Auto White Balance(AWB). + */ + PropertyI64 mvAutoFeatureAOIWidth; + /// \brief An integer property. Common AOI Height used for Auto Gain Control(AGC), Auto Exposure Control(AEC) and Auto White Balance(AWB). + /** + * Common AOI Height used for Auto Gain Control(AGC), Auto Exposure Control(AEC) and Auto White Balance(AWB). + */ + PropertyI64 mvAutoFeatureAOIHeight; + /// \brief An integer property. The error input hysteresis width of the controller. If the brightness error exceeds the half of the value in positive or negative direction, the controller restarts to control the brightness. This property applies to AEC and AGC as well. + /** + * The error input hysteresis gap of the controller. If the brightness error exceeds the half of the value in positive or negative direction, the controller restarts to control the brightness. This property applies to AEC and AGC as well. + */ + PropertyI64 mvAutoFeatureBrightnessTolerance; + // *INDENT-OFF* + PYTHON_OR_JAVA_ONLY( %mutable; ) + // *INDENT-ON* +}; + //----------------------------------------------------------------------------- /// \brief Category that contains the File Access control features. /** @@ -10129,17 +10293,16 @@ public: * Selects the target file in the device. * * The following string values might be valid for this feature: - * - \b UserSetDefault (Display string: 'User Set Default'): The default user set of the device. - * - \b UserSet1 (Display string: 'User Set 1'): The first user set of the device. - * - \b UserSet2 (Display string: 'User Set 2'): The second user set of the device. - * - \b UserSet3 (Display string: 'User Set 3'): The third user set of the device. - * - \b UserSet\#4\# (Display string: 'User Set \#4\#'): The third user set of the device. + * - \b DeviceFirmware (Display string: 'Device Firmware') + * - \b LUTBlue (Display string: 'LUT Blue'): The Blue LUT of the camera. + * - \b LUTGreen (Display string: 'LUT Green'): The Green LUT of the camera. * - \b LUTLuminance (Display string: 'LUT Luminance'): The Luminance LUT of the camera. * - \b LUTRed (Display string: 'LUT Red'): The Red LUT of the camera. - * - \b LUTGreen (Display string: 'LUT Green'): The Green LUT of the camera. - * - \b LUTBlue (Display string: 'LUT Blue'): The Blue LUT of the camera. - * - \b DeviceFirmware (Display string: 'Device Firmware') * - \b UserFile (Display string: 'User File') + * - \b UserSet1 (Display string: 'User Set 1'): The first user set of the device. + * - \b UserSet2 (Display string: 'User Set 2'): The second user set of the device. + * - \b UserSet3 (Display string: 'User Set 3'): The third user set of the device. + * - \b UserSetDefault (Display string: 'User Set Default'): The default user set of the device. * - \b mvFFCImage (Display string: 'mv FFC Image') * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. @@ -10266,11 +10429,10 @@ public: * Selects the source to control. * * The following string values might be valid for this feature: + * - \b All (Display string: 'All'): Selects all the data sources. * - \b Source0 (Display string: 'Source 0'): Selects the data source 0. * - \b Source1 (Display string: 'Source 1'): Selects the data source 1. * - \b Source2 (Display string: 'Source 2'): Selects the data source 2. - * - \b Source\#3\# (Display string: 'Source \#3\#'): Selects the data source \#3\#. - * - \b All (Display string: 'All'): Selects all the data sources. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -10361,11 +10523,10 @@ public: * Selects which stream transfers are currently controlled by the selected Transfer features. * * The following string values might be valid for this feature: + * - \b All (Display string: 'All'): The transfer features control all the data streams simultaneously. * - \b Stream0 (Display string: 'Stream 0'): The transfer features control the data stream 0. * - \b Stream1 (Display string: 'Stream 1'): The transfer features control the data stream 1. * - \b Stream2 (Display string: 'Stream 2'): The transfer features control the data stream 2. - * - \b Stream\#3\# (Display string: 'Stream \#3\#'): The transfer features control the data stream \#3\#. - * - \b All (Display string: 'All'): The transfer features control all the data streams simultaneously. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -10487,38 +10648,30 @@ public: * Specifies the signal to use as the trigger source for transfers. * * The following string values might be valid for this feature: - * - \b Line0 (Display string: 'Line 0'): Specifies which physical line (or pin) and associated I/O control block to use as external source for the transfer control trigger signal. - * - \b Line1 (Display string: 'Line 1'): Specifies which physical line (or pin) and associated I/O control block to use as external source for the transfer control trigger signal. - * - \b Line2 (Display string: 'Line 2'): Specifies which physical line (or pin) and associated I/O control block to use as external source for the transfer control trigger signal. - * - \b Line\#3\# (Display string: 'Line \#3\#'): Specifies which physical line (or pin) and associated I/O control block to use as external source for the transfer control trigger signal. - * - \b Counter0Start (Display string: 'Counter 0 Start'): Specifies which of the Counter signal to use as internal source for the transfer control trigger signal. - * - \b Counter1Start (Display string: 'Counter 1 Start'): Specifies which of the Counter signal to use as internal source for the transfer control trigger signal. - * - \b Counter2Start (Display string: 'Counter 2 Start'): Specifies which of the Counter signal to use as internal source for the transfer control trigger signal. - * - \b Counter\#3\#Start (Display string: 'Counter \#3\# Start'): Specifies which of the Counter signal to use as internal source for the transfer control trigger signal. + * - \b Action0 (Display string: 'Action 0'): Specifies which Action command to use as internal source for the transfer control trigger signal. + * - \b Action1 (Display string: 'Action 1'): Specifies which Action command to use as internal source for the transfer control trigger signal. + * - \b Action2 (Display string: 'Action 2'): Specifies which Action command to use as internal source for the transfer control trigger signal. * - \b Counter0End (Display string: 'Counter 0 End'): Specifies which of the Counter signal to use as internal source for the transfer control trigger signal. + * - \b Counter0Start (Display string: 'Counter 0 Start'): Specifies which of the Counter signal to use as internal source for the transfer control trigger signal. * - \b Counter1End (Display string: 'Counter 1 End'): Specifies which of the Counter signal to use as internal source for the transfer control trigger signal. + * - \b Counter1Start (Display string: 'Counter 1 Start'): Specifies which of the Counter signal to use as internal source for the transfer control trigger signal. * - \b Counter2End (Display string: 'Counter 2 End'): Specifies which of the Counter signal to use as internal source for the transfer control trigger signal. - * - \b Counter\#3\#End (Display string: 'Counter \#3\# End'): Specifies which of the Counter signal to use as internal source for the transfer control trigger signal. - * - \b Timer0Start (Display string: 'Timer 0 Start'): Specifies which Timer signal to use as internal source for the transfer control trigger signal. - * - \b Timer1Start (Display string: 'Timer 1 Start'): Specifies which Timer signal to use as internal source for the transfer control trigger signal. - * - \b Timer2Start (Display string: 'Timer 2 Start'): Specifies which Timer signal to use as internal source for the transfer control trigger signal. - * - \b Timer\#3\#Start (Display string: 'Timer \#3\# Start'): Specifies which Timer signal to use as internal source for the transfer control trigger signal. - * - \b Timer0End (Display string: 'Timer 0 End'): Specifies which Timer signal to use as internal source for the transfer control trigger signal. - * - \b Timer1End (Display string: 'Timer 1 End'): Specifies which Timer signal to use as internal source for the transfer control trigger signal. - * - \b Timer2End (Display string: 'Timer 2 End'): Specifies which Timer signal to use as internal source for the transfer control trigger signal. - * - \b Timer\#3\#End (Display string: 'Timer \#3\# End'): Specifies which Timer signal to use as internal source for the transfer control trigger signal. + * - \b Counter2Start (Display string: 'Counter 2 Start'): Specifies which of the Counter signal to use as internal source for the transfer control trigger signal. + * - \b Line0 (Display string: 'Line 0'): Specifies which physical line (or pin) and associated I/O control block to use as external source for the transfer control trigger signal. + * - \b Line1 (Display string: 'Line 1'): Specifies which physical line (or pin) and associated I/O control block to use as external source for the transfer control trigger signal. + * - \b Line2 (Display string: 'Line 2'): Specifies which physical line (or pin) and associated I/O control block to use as external source for the transfer control trigger signal. * - \b LogicBlock0 (Display string: 'Logic Block 0'): Specifies which Logic Block to use as internal source for the transfer control trigger signal. * - \b LogicBlock1 (Display string: 'Logic Block 1'): Specifies which Logic Block to use as internal source for the transfer control trigger signal. * - \b LogicBlock2 (Display string: 'Logic Block 2'): Specifies which Logic Block to use as internal source for the transfer control trigger signal. - * - \b LogicBlock\#3\# (Display string: 'Logic Block \#3\#'): Specifies which Logic Block to use as internal source for the transfer control trigger signal. * - \b SoftwareSignal0 (Display string: 'Software Signal 0'): Specifies which Software Signal to use as internal source for the transfer control trigger signal. * - \b SoftwareSignal1 (Display string: 'Software Signal 1'): Specifies which Software Signal to use as internal source for the transfer control trigger signal. * - \b SoftwareSignal2 (Display string: 'Software Signal 2'): Specifies which Software Signal to use as internal source for the transfer control trigger signal. - * - \b SoftwareSignal\#3\# (Display string: 'Software Signal \#3\#'): Specifies which Software Signal to use as internal source for the transfer control trigger signal. - * - \b Action0 (Display string: 'Action 0'): Specifies which Action command to use as internal source for the transfer control trigger signal. - * - \b Action1 (Display string: 'Action 1'): Specifies which Action command to use as internal source for the transfer control trigger signal. - * - \b Action2 (Display string: 'Action 2'): Specifies which Action command to use as internal source for the transfer control trigger signal. - * - \b Action\#3\# (Display string: 'Action \#3\#'): Specifies which Action command to use as internal source for the transfer control trigger signal. + * - \b Timer0End (Display string: 'Timer 0 End'): Specifies which Timer signal to use as internal source for the transfer control trigger signal. + * - \b Timer0Start (Display string: 'Timer 0 Start'): Specifies which Timer signal to use as internal source for the transfer control trigger signal. + * - \b Timer1End (Display string: 'Timer 1 End'): Specifies which Timer signal to use as internal source for the transfer control trigger signal. + * - \b Timer1Start (Display string: 'Timer 1 Start'): Specifies which Timer signal to use as internal source for the transfer control trigger signal. + * - \b Timer2End (Display string: 'Timer 2 End'): Specifies which Timer signal to use as internal source for the transfer control trigger signal. + * - \b Timer2Start (Display string: 'Timer 2 Start'): Specifies which Timer signal to use as internal source for the transfer control trigger signal. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -10655,13 +10808,14 @@ public: // *INDENT-OFF* PYTHON_OR_JAVA_ONLY( %immutable; ) // *INDENT-ON* - /// \brief An enumerated integer property. Selects the 3DExtraction processing module to control (if multiple ones are present). + /// \brief An enumerated integer property. Selects the 3D Extraction processing module to control (if multiple ones are present). /** - * Selects the 3DExtraction processing module to control (if multiple ones are present). + * Selects the 3D Extraction processing module to control (if multiple ones are present). * * The following string values might be valid for this feature: * - \b Scan3dExtraction0 (Display string: 'Scan 3d Extraction 0'): Selects Scan3d Extraction module 0. * - \b Scan3dExtraction1 (Display string: 'Scan 3d Extraction 1'): Selects Scan3d Extraction module 1. + * - \b Scan3dExtraction2 (Display string: 'Scan 3d Extraction 2'): Selects Scan3d Extraction module 2. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -10674,7 +10828,7 @@ public: * The following string values might be valid for this feature: * - \b Region0 (Display string: 'Region 0'): Data come from Sensor's Region0. * - \b Region1 (Display string: 'Region 1'): Data come from Sensor's Region1. - * - \b Region\#2\# (Display string: 'Region \#2\#'): Data come from Sensor's Region\#2\#. + * - \b Region2 (Display string: 'Region 2'): Data come from Sensor's Region2. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -10862,17 +11016,17 @@ public: }; //----------------------------------------------------------------------------- -/// \brief Category containing the Lighting control features. +/// \brief Adjustment and triggering of the depth image for 3D control. /** - * A category containing the Lighting control features. + * Adjustment and triggering of the depth image for 3D control. * \ingroup GenICamInterfaceDevice */ -class LightControl +class DepthControl : public mvIMPACT::acquire::ComponentCollection //----------------------------------------------------------------------------- { public: - /// \brief Constructs a new mvIMPACT::acquire::GenICam::LightControl object. - explicit LightControl( + /// \brief Constructs a new mvIMPACT::acquire::GenICam::DepthControl object. + explicit DepthControl( /// [in] A pointer to a mvIMPACT::acquire::Device object obtained from a mvIMPACT::acquire::DeviceManager object. mvIMPACT::acquire::Device* pDev, /// [in] The name of the driver internal setting to access with this instance. @@ -10881,48 +11035,190 @@ public: /// settings can be created with the function /// mvIMPACT::acquire::FunctionInterface::createSetting const std::string& settingName = "Base" ) : - lightControllerSelector(), - lightControllerSource(), - lightCurrentRating(), - lightVoltageRating(), - lightBrightness(), - lightConnectionStatus(), - lightCurrentMeasured(), - lightVoltageMeasured() + mvIMPACT::acquire::ComponentCollection( pDev ), + depthQuality(), + depthFill(), + depthSeg(), + depthMinConf(), + depthMinDepth(), + depthMaxDepth(), + depthMaxDepthErr(), + depthAcquisitionMode(), + depthAcquisitionTrigger(), + depthSmooth(), + depthStaticScene(), + depthDoubleShot(), + depthExposureAdaptTimeout() { pDev->validateInterfaceLayout( dilGenICam ); mvIMPACT::acquire::DeviceComponentLocator locator( pDev, mvIMPACT::acquire::dltSetting, settingName ); - locator.bindSearchBase( locator.searchbase_id(), "Camera/GenICam" ); - locator.bindComponent( lightControllerSelector, "LightControllerSelector" ); - locator.bindComponent( lightControllerSource, "LightControllerSource" ); - locator.bindComponent( lightCurrentRating, "LightCurrentRating" ); - locator.bindComponent( lightVoltageRating, "LightVoltageRating" ); - locator.bindComponent( lightBrightness, "LightBrightness" ); - locator.bindComponent( lightConnectionStatus, "LightConnectionStatus" ); - locator.bindComponent( lightCurrentMeasured, "LightCurrentMeasured" ); - locator.bindComponent( lightVoltageMeasured, "LightVoltageMeasured" ); + locator.bindSearchBase( locator.searchbase_id(), "Camera/GenICam/DepthControl" ); + m_hRoot = locator.searchbase_id(); + locator.bindComponent( depthQuality, "DepthQuality" ); + locator.bindComponent( depthFill, "DepthFill" ); + locator.bindComponent( depthSeg, "DepthSeg" ); + locator.bindComponent( depthMinConf, "DepthMinConf" ); + locator.bindComponent( depthMinDepth, "DepthMinDepth" ); + locator.bindComponent( depthMaxDepth, "DepthMaxDepth" ); + locator.bindComponent( depthMaxDepthErr, "DepthMaxDepthErr" ); + locator.bindComponent( depthAcquisitionMode, "DepthAcquisitionMode" ); + locator.bindComponent( depthAcquisitionTrigger, "DepthAcquisitionTrigger@i" ); + locator.bindComponent( depthSmooth, "DepthSmooth" ); + locator.bindComponent( depthStaticScene, "DepthStaticScene" ); + locator.bindComponent( depthDoubleShot, "DepthDoubleShot" ); + locator.bindComponent( depthExposureAdaptTimeout, "DepthExposureAdaptTimeout" ); } // *INDENT-OFF* PYTHON_OR_JAVA_ONLY( %immutable; ) // *INDENT-ON* - /// \brief An enumerated integer property. Selects the Light Controller to configure. + /// \brief An enumerated integer property. Depth image quality (resolution). /** - * Selects the Light Controller to configure. + * Depth image quality (resolution). * * The following string values might be valid for this feature: - * - \b LightController0 (Display string: 'Light Controller 0'): Light Controller 0 - * - \b LightController1 (Display string: 'Light Controller 1'): Light Controller 1 - * - \b LightController2 (Display string: 'Light Controller 2'): Light Controller 2 - * - \b LightController\#3\# (Display string: 'Light Controller \#3\#'): Light Controller \#3\# - * - \b LightController3 (Display string: 'Light Controller 3'): Light Controller 3 - * - \b LightController4 (Display string: 'Light Controller 4'): Light Controller 4 - * - \b LightController5 (Display string: 'Light Controller 5'): Light Controller 5 - * - \b LightController6 (Display string: 'Light Controller 6'): Light Controller 6 - * - \b LightController7 (Display string: 'Light Controller 7'): Light Controller 7 - * - \b LightController8 (Display string: 'Light Controller 8'): Light Controller 8 - * - \b LightController9 (Display string: 'Light Controller 9'): Light Controller 9 - * - \b LightController10 (Display string: 'Light Controller 10'): Light Controller 10 - * - \b LightController11 (Display string: 'Light Controller 11'): Light Controller 11 + * - \b Low (Display string: 'Low'): Low depth image quality. + * - \b Medium (Display string: 'Medium'): Medium depth image quality. + * - \b High (Display string: 'High'): High depth image quality. + * - \b Full (Display string: 'Full'): Full resolution depth image. + * + * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. + * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. + */ + PropertyI64 depthQuality; + /// \brief An integer property. Higher numbers fill gaps with measurements with potentially higher errors. + /** + * Higher numbers fill gaps with measurements with potentially higher errors. + */ + PropertyI64 depthFill; + /// \brief An integer property. Maximum size of isolated disparity regions that will be invalidated, related to full resolution. + /** + * Maximum size of isolated disparity regions that will be invalidated, related to full resolution. + */ + PropertyI64 depthSeg; + /// \brief A floating point property. Minimal confidence. All disparities with lower confidence will be set to invalid. + /** + * Minimal confidence. All disparities with lower confidence will be set to invalid. + */ + PropertyF depthMinConf; + /// \brief A floating point property. Minimum depth in meter. All disparities with lower depth will be set to invalid. + /** + * Minimum depth in meter. All disparities with lower depth will be set to invalid. + */ + PropertyF depthMinDepth; + /// \brief A floating point property. Maximum depth in meter. All disparities with higher depth will be set to invalid. + /** + * Maximum depth in meter. All disparities with higher depth will be set to invalid. + */ + PropertyF depthMaxDepth; + /// \brief A floating point property. Maximum depth error in meter. All disparities with a higher depth error will be set to invalid. + /** + * Maximum depth error in meter. All disparities with a higher depth error will be set to invalid. + */ + PropertyF depthMaxDepthErr; + /// \brief An enumerated integer property. Depth acquisition mode + /** + * Depth acquisition mode + * + * The following string values might be valid for this feature: + * - \b SingleFrame (Display string: 'Single Frame'): This enumeration value sets the camera's depth acquisition mode to single frame. + * - \b SingleFrameOut1 (Display string: 'Single Frame Out 1'): This enumeration value sets the camera's depth acquisition mode to single frame and toggles the Out1 mode between Low and ExposureAlternateActive as needed. + * - \b Continuous (Display string: 'Continuous'): This enumeration value sets the camera's depth acquisition mode to continuous. + * + * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. + * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. + */ + PropertyI64 depthAcquisitionMode; + /// \brief A method object. Triggers a depth acquisition of the device. + /** + * Triggers a depth acquisition of the device. Only relevant in SingleFrame(Out1) DepthAcquisitionMode. + */ + Method depthAcquisitionTrigger; + /// \brief A boolean property. Enables smoothing of the disparity image. + /** + * Enables smoothing of the disparity image. + */ + PropertyIBoolean depthSmooth; + /// \brief A boolean property. Enables accumulation of multiple images for noise reduction in static scenes. + /** + * Enables accumulation of multiple images for noise reduction in static scenes. Only applied to High and Full quality. + */ + PropertyIBoolean depthStaticScene; + /// \brief A boolean property. Enables combination of disaprity images from two stereo pairs. + /** + * Enables combination of disaprity images from two stereo pairs. + */ + PropertyIBoolean depthDoubleShot; + /// \brief A floating point property. Maximum time in seconds to wait after triggering in SingleFrame modes until auto exposure has finished adjustments. + /** + * Maximum time in seconds to wait after triggering in SingleFrame modes until auto exposure has finished adjustments. + */ + PropertyF depthExposureAdaptTimeout; + // *INDENT-OFF* + PYTHON_OR_JAVA_ONLY( %mutable; ) + // *INDENT-ON* +}; + +//----------------------------------------------------------------------------- +/// \brief Category containing the Lighting control features. +/** + * A category containing the Lighting control features. + * \ingroup GenICamInterfaceDevice + */ +class LightControl +//----------------------------------------------------------------------------- +{ +public: + /// \brief Constructs a new mvIMPACT::acquire::GenICam::LightControl object. + explicit LightControl( + /// [in] A pointer to a mvIMPACT::acquire::Device object obtained from a mvIMPACT::acquire::DeviceManager object. + mvIMPACT::acquire::Device* pDev, + /// [in] The name of the driver internal setting to access with this instance. + /// A list of valid setting names can be obtained by a call to + /// mvIMPACT::acquire::FunctionInterface::getAvailableSettings, new + /// settings can be created with the function + /// mvIMPACT::acquire::FunctionInterface::createSetting + const std::string& settingName = "Base" ) : + lightControllerSelector(), + lightControllerSource(), + lightCurrentRating(), + lightVoltageRating(), + lightBrightness(), + lightConnectionStatus(), + lightCurrentMeasured(), + lightVoltageMeasured() + { + pDev->validateInterfaceLayout( dilGenICam ); + mvIMPACT::acquire::DeviceComponentLocator locator( pDev, mvIMPACT::acquire::dltSetting, settingName ); + locator.bindSearchBase( locator.searchbase_id(), "Camera/GenICam" ); + locator.bindComponent( lightControllerSelector, "LightControllerSelector" ); + locator.bindComponent( lightControllerSource, "LightControllerSource" ); + locator.bindComponent( lightCurrentRating, "LightCurrentRating" ); + locator.bindComponent( lightVoltageRating, "LightVoltageRating" ); + locator.bindComponent( lightBrightness, "LightBrightness" ); + locator.bindComponent( lightConnectionStatus, "LightConnectionStatus" ); + locator.bindComponent( lightCurrentMeasured, "LightCurrentMeasured" ); + locator.bindComponent( lightVoltageMeasured, "LightVoltageMeasured" ); + } + // *INDENT-OFF* + PYTHON_OR_JAVA_ONLY( %immutable; ) + // *INDENT-ON* + /// \brief An enumerated integer property. Selects the Light Controller to configure. + /** + * Selects the Light Controller to configure. + * + * The following string values might be valid for this feature: + * - \b LightController0 (Display string: 'Light Controller 0'): Light Controller 0 + * - \b LightController1 (Display string: 'Light Controller 1'): Light Controller 1 + * - \b LightController2 (Display string: 'Light Controller 2'): Light Controller 2 + * - \b LightController3 (Display string: 'Light Controller 3'): Light Controller 3 + * - \b LightController4 (Display string: 'Light Controller 4'): Light Controller 4 + * - \b LightController5 (Display string: 'Light Controller 5'): Light Controller 5 + * - \b LightController6 (Display string: 'Light Controller 6'): Light Controller 6 + * - \b LightController7 (Display string: 'Light Controller 7'): Light Controller 7 + * - \b LightController8 (Display string: 'Light Controller 8'): Light Controller 8 + * - \b LightController9 (Display string: 'Light Controller 9'): Light Controller 9 + * - \b LightController10 (Display string: 'Light Controller 10'): Light Controller 10 + * - \b LightController11 (Display string: 'Light Controller 11'): Light Controller 11 * - \b LightController12 (Display string: 'Light Controller 12'): Light Controller 12 * - \b LightController13 (Display string: 'Light Controller 13'): Light Controller 13 * - \b LightController14 (Display string: 'Light Controller 14'): Light Controller 14 @@ -10937,14 +11233,23 @@ public: * Selects the input source signal of the Light Controller. * * The following string values might be valid for this feature: - * - \b Line0 (Display string: 'Line 0'): Line 0 - * - \b Line\#1\# (Display string: 'Line \#1\#'): Line \#1\# - * - \b Timer0 (Display string: 'Timer 0'): Timer 0 - * - \b Timer\#1\# (Display string: 'Timer \#1\#'): Timer \#1\# * - \b Counter0 (Display string: 'Counter 0'): Counter 0 - * - \b Counter\#1\# (Display string: 'Counter \#1\#'): Counter \#1\# - * - \b UserOutput0 (Display string: 'User Output 0'): User Output 0 - * - \b UserOutput\#1\# (Display string: 'User Output \#1\#'): User Output \#1\# + * - \b Counter1 (Display string: 'Counter 1'): Counter 1 + * - \b Counter2 (Display string: 'Counter 2'): Counter 2 + * - \b Counter3 (Display string: 'Counter 3'): Counter 3 + * - \b Counter4 (Display string: 'Counter 4'): Counter 4 + * - \b Counter5 (Display string: 'Counter 5'): Counter 5 + * - \b Counter6 (Display string: 'Counter 6'): Counter 6 + * - \b Counter7 (Display string: 'Counter 7'): Counter 7 + * - \b Counter8 (Display string: 'Counter 8'): Counter 8 + * - \b Counter9 (Display string: 'Counter 9'): Counter 9 + * - \b Counter10 (Display string: 'Counter 10'): Counter 10 + * - \b Counter11 (Display string: 'Counter 11'): Counter 11 + * - \b Counter12 (Display string: 'Counter 12'): Counter 12 + * - \b Counter13 (Display string: 'Counter 13'): Counter 13 + * - \b Counter14 (Display string: 'Counter 14'): Counter 14 + * - \b Counter15 (Display string: 'Counter 15'): Counter 15 + * - \b Line0 (Display string: 'Line 0'): Line 0 * - \b Line1 (Display string: 'Line 1'): Line 1 * - \b Line2 (Display string: 'Line 2'): Line 2 * - \b Line3 (Display string: 'Line 3'): Line 3 @@ -10960,6 +11265,7 @@ public: * - \b Line13 (Display string: 'Line 13'): Line 13 * - \b Line14 (Display string: 'Line 14'): Line 14 * - \b Line15 (Display string: 'Line 15'): Line 15 + * - \b Timer0 (Display string: 'Timer 0'): Timer 0 * - \b Timer1 (Display string: 'Timer 1'): Timer 1 * - \b Timer2 (Display string: 'Timer 2'): Timer 2 * - \b Timer3 (Display string: 'Timer 3'): Timer 3 @@ -10975,21 +11281,7 @@ public: * - \b Timer13 (Display string: 'Timer 13'): Timer 13 * - \b Timer14 (Display string: 'Timer 14'): Timer 14 * - \b Timer15 (Display string: 'Timer 15'): Timer 15 - * - \b Counter1 (Display string: 'Counter 1'): Counter 1 - * - \b Counter2 (Display string: 'Counter 2'): Counter 2 - * - \b Counter3 (Display string: 'Counter 3'): Counter 3 - * - \b Counter4 (Display string: 'Counter 4'): Counter 4 - * - \b Counter5 (Display string: 'Counter 5'): Counter 5 - * - \b Counter6 (Display string: 'Counter 6'): Counter 6 - * - \b Counter7 (Display string: 'Counter 7'): Counter 7 - * - \b Counter8 (Display string: 'Counter 8'): Counter 8 - * - \b Counter9 (Display string: 'Counter 9'): Counter 9 - * - \b Counter10 (Display string: 'Counter 10'): Counter 10 - * - \b Counter11 (Display string: 'Counter 11'): Counter 11 - * - \b Counter12 (Display string: 'Counter 12'): Counter 12 - * - \b Counter13 (Display string: 'Counter 13'): Counter 13 - * - \b Counter14 (Display string: 'Counter 14'): Counter 14 - * - \b Counter15 (Display string: 'Counter 15'): Counter 15 + * - \b UserOutput0 (Display string: 'User Output 0'): User Output 0 * - \b UserOutput1 (Display string: 'User Output 1'): User Output 1 * - \b UserOutput2 (Display string: 'User Output 2'): User Output 2 * - \b UserOutput3 (Display string: 'User Output 3'): User Output 3 @@ -11055,17 +11347,17 @@ public: }; //----------------------------------------------------------------------------- -/// \brief Category that contains the Chunk Data control features. +/// \brief Category for optical control features. /** - * A category that contains the Chunk Data control features. + * A category for optical control features. * \ingroup GenICamInterfaceDevice */ -class ChunkDataControl +class OpticControl //----------------------------------------------------------------------------- { public: - /// \brief Constructs a new mvIMPACT::acquire::GenICam::ChunkDataControl object. - explicit ChunkDataControl( + /// \brief Constructs a new mvIMPACT::acquire::GenICam::OpticControl object. + explicit OpticControl( /// [in] A pointer to a mvIMPACT::acquire::Device object obtained from a mvIMPACT::acquire::DeviceManager object. mvIMPACT::acquire::Device* pDev, /// [in] The name of the driver internal setting to access with this instance. @@ -11074,415 +11366,869 @@ public: /// settings can be created with the function /// mvIMPACT::acquire::FunctionInterface::createSetting const std::string& settingName = "Base" ) : - chunkModeActive(), - chunkXMLEnable(), - chunkSelector(), - chunkEnable(), - chunkRegionSelector(), - chunkRegionID(), - chunkRegionIDValue(), - chunkComponentSelector(), - chunkComponentID(), - chunkComponentIDValue(), - chunkGroupSelector(), - chunkGroupID(), - chunkImageComponent(), - chunkGroupIDValue(), - chunkPartSelector(), - chunkImage(), - chunkOffsetX(), - chunkOffsetY(), - chunkWidth(), - chunkHeight(), - chunkPixelFormat(), - chunkPixelDynamicRangeMin(), - chunkPixelDynamicRangeMax(), - chunkBinningHorizontal(), - chunkBinningVertical(), - chunkDecimationHorizontal(), - chunkDecimationVertical(), - chunkReverseX(), - chunkReverseY(), - chunkTimestamp(), - chunkTimestampLatchValue(), - chunkLineStatusAll(), - chunkCounterSelector(), - chunkCounterValue(), - chunkTimerSelector(), - chunkTimerValue(), - chunkScanLineSelector(), - chunkEncoderSelector(), - chunkEncoderValue(), - chunkEncoderStatus(), - chunkExposureTimeSelector(), - chunkExposureTime(), - chunkGainSelector(), - chunkGain(), - chunkBlackLevelSelector(), - chunkBlackLevel(), - chunkLinePitch(), - chunkFrameID(), - chunkSourceSelector(), - chunkSourceID(), - chunkSourceIDValue(), - chunkTransferBlockID(), - chunkTransferStreamID(), - chunkTransferQueueCurrentBlockCount(), - chunkStreamChannelID(), - chunkSequencerSetActive(), - chunkScan3dDistanceUnit(), - chunkScan3dOutputMode(), - chunkScan3dCoordinateSystem(), - chunkScan3dCoordinateSystemReference(), - chunkScan3dCoordinateSelector(), - chunkScan3dCoordinateScale(), - chunkScan3dCoordinateOffset(), - chunkScan3dInvalidDataFlag(), - chunkScan3dInvalidDataValue(), - chunkScan3dAxisMin(), - chunkScan3dAxisMax(), - chunkScan3dCoordinateTransformSelector(), - chunkScan3dTransformValue(), - chunkScan3dCoordinateReferenceSelector(), - chunkScan3dCoordinateReferenceValue(), - chunkScan3dFocalLength(), - chunkScan3dBaseline(), - chunkScan3dPrincipalPointU(), - chunkScan3dPrincipalPointV(), - mvChunkJPEG(), - chunkmvCustomIdentifier() + opticControllerSelector(), + opticControllerInitialize(), + opticControllerDisconnect(), + opticControllerAbort(), + opticControllerStatus(), + opticControllerVendorName(), + opticControllerFamilyName(), + opticControllerModelName(), + opticControllerSerialNumber(), + opticControllerVersion(), + opticControllerFirmwareVersion(), + opticControllerTemperature(), + apertureInitialize(), + apertureStatus(), + aperture(), + apertureStepper(), + numericalAperture(), + focusInitialize(), + focusStatus(), + focusStepper(), + focusAutoMode(), + focusAuto(), + focalPower(), + objectSensorDistance(), + focalLengthInitialize(), + focalLengthStatus(), + focalLength(), + focalLengthStepper(), + shutterInitialize(), + shutterStatus(), + shutter(), + filterInitialize(), + filterStatus(), + filter(), + stabilizationInitialize(), + stabilizationStatus(), + stabilization(), + magnificationInitialize(), + magnificationStatus(), + magnification(), + magnificationStepper() { pDev->validateInterfaceLayout( dilGenICam ); mvIMPACT::acquire::DeviceComponentLocator locator( pDev, mvIMPACT::acquire::dltSetting, settingName ); locator.bindSearchBase( locator.searchbase_id(), "Camera/GenICam" ); - locator.bindComponent( chunkModeActive, "ChunkModeActive" ); - locator.bindComponent( chunkXMLEnable, "ChunkXMLEnable" ); - locator.bindComponent( chunkSelector, "ChunkSelector" ); - locator.bindComponent( chunkEnable, "ChunkEnable" ); - locator.bindComponent( chunkRegionSelector, "ChunkRegionSelector" ); - locator.bindComponent( chunkRegionID, "ChunkRegionID" ); - locator.bindComponent( chunkRegionIDValue, "ChunkRegionIDValue" ); - locator.bindComponent( chunkComponentSelector, "ChunkComponentSelector" ); - locator.bindComponent( chunkComponentID, "ChunkComponentID" ); - locator.bindComponent( chunkComponentIDValue, "ChunkComponentIDValue" ); - locator.bindComponent( chunkGroupSelector, "ChunkGroupSelector" ); - locator.bindComponent( chunkGroupID, "ChunkGroupID" ); - locator.bindComponent( chunkImageComponent, "ChunkImageComponent" ); - locator.bindComponent( chunkGroupIDValue, "ChunkGroupIDValue" ); - locator.bindComponent( chunkPartSelector, "ChunkPartSelector" ); - locator.bindComponent( chunkImage, "ChunkImage" ); - locator.bindComponent( chunkOffsetX, "ChunkOffsetX" ); - locator.bindComponent( chunkOffsetY, "ChunkOffsetY" ); - locator.bindComponent( chunkWidth, "ChunkWidth" ); - locator.bindComponent( chunkHeight, "ChunkHeight" ); - locator.bindComponent( chunkPixelFormat, "ChunkPixelFormat" ); - locator.bindComponent( chunkPixelDynamicRangeMin, "ChunkPixelDynamicRangeMin" ); - if( !chunkPixelDynamicRangeMin.isValid() ) - { - locator.bindComponent( chunkPixelDynamicRangeMin, "ChunkDynamicRangeMin" ); - } - locator.bindComponent( chunkPixelDynamicRangeMax, "ChunkPixelDynamicRangeMax" ); - if( !chunkPixelDynamicRangeMax.isValid() ) - { - locator.bindComponent( chunkPixelDynamicRangeMax, "ChunkDynamicRangeMax" ); - } - locator.bindComponent( chunkBinningHorizontal, "ChunkBinningHorizontal" ); - locator.bindComponent( chunkBinningVertical, "ChunkBinningVertical" ); - locator.bindComponent( chunkDecimationHorizontal, "ChunkDecimationHorizontal" ); - locator.bindComponent( chunkDecimationVertical, "ChunkDecimationVertical" ); - locator.bindComponent( chunkReverseX, "ChunkReverseX" ); - locator.bindComponent( chunkReverseY, "ChunkReverseY" ); - locator.bindComponent( chunkTimestamp, "ChunkTimestamp" ); - locator.bindComponent( chunkTimestampLatchValue, "ChunkTimestampLatchValue" ); - locator.bindComponent( chunkLineStatusAll, "ChunkLineStatusAll" ); - locator.bindComponent( chunkCounterSelector, "ChunkCounterSelector" ); - locator.bindComponent( chunkCounterValue, "ChunkCounterValue" ); - if( !chunkCounterValue.isValid() ) - { - locator.bindComponent( chunkCounterValue, "ChunkCounter" ); - } - locator.bindComponent( chunkTimerSelector, "ChunkTimerSelector" ); - locator.bindComponent( chunkTimerValue, "ChunkTimerValue" ); - if( !chunkTimerValue.isValid() ) - { - locator.bindComponent( chunkTimerValue, "ChunkTimer" ); - } - locator.bindComponent( chunkScanLineSelector, "ChunkScanLineSelector" ); - locator.bindComponent( chunkEncoderSelector, "ChunkEncoderSelector" ); - locator.bindComponent( chunkEncoderValue, "ChunkEncoderValue" ); - locator.bindComponent( chunkEncoderStatus, "ChunkEncoderStatus" ); - locator.bindComponent( chunkExposureTimeSelector, "ChunkExposureTimeSelector" ); - locator.bindComponent( chunkExposureTime, "ChunkExposureTime" ); - locator.bindComponent( chunkGainSelector, "ChunkGainSelector" ); - locator.bindComponent( chunkGain, "ChunkGain" ); - locator.bindComponent( chunkBlackLevelSelector, "ChunkBlackLevelSelector" ); - locator.bindComponent( chunkBlackLevel, "ChunkBlackLevel" ); - locator.bindComponent( chunkLinePitch, "ChunkLinePitch" ); - locator.bindComponent( chunkFrameID, "ChunkFrameID" ); - locator.bindComponent( chunkSourceSelector, "ChunkSourceSelector" ); - locator.bindComponent( chunkSourceID, "ChunkSourceID" ); - locator.bindComponent( chunkSourceIDValue, "ChunkSourceIDValue" ); - locator.bindComponent( chunkTransferBlockID, "ChunkTransferBlockID" ); - locator.bindComponent( chunkTransferStreamID, "ChunkTransferStreamID" ); - locator.bindComponent( chunkTransferQueueCurrentBlockCount, "ChunkTransferQueueCurrentBlockCount" ); - locator.bindComponent( chunkStreamChannelID, "ChunkStreamChannelID" ); - locator.bindComponent( chunkSequencerSetActive, "ChunkSequencerSetActive" ); - locator.bindComponent( chunkScan3dDistanceUnit, "ChunkScan3dDistanceUnit" ); - locator.bindComponent( chunkScan3dOutputMode, "ChunkScan3dOutputMode" ); - locator.bindComponent( chunkScan3dCoordinateSystem, "ChunkScan3dCoordinateSystem" ); - locator.bindComponent( chunkScan3dCoordinateSystemReference, "ChunkScan3dCoordinateSystemReference" ); - locator.bindComponent( chunkScan3dCoordinateSelector, "ChunkScan3dCoordinateSelector" ); - locator.bindComponent( chunkScan3dCoordinateScale, "ChunkScan3dCoordinateScale" ); - locator.bindComponent( chunkScan3dCoordinateOffset, "ChunkScan3dCoordinateOffset" ); - locator.bindComponent( chunkScan3dInvalidDataFlag, "ChunkScan3dInvalidDataFlag" ); - locator.bindComponent( chunkScan3dInvalidDataValue, "ChunkScan3dInvalidDataValue" ); - locator.bindComponent( chunkScan3dAxisMin, "ChunkScan3dAxisMin" ); - locator.bindComponent( chunkScan3dAxisMax, "ChunkScan3dAxisMax" ); - locator.bindComponent( chunkScan3dCoordinateTransformSelector, "ChunkScan3dCoordinateTransformSelector" ); - locator.bindComponent( chunkScan3dTransformValue, "ChunkScan3dTransformValue" ); - locator.bindComponent( chunkScan3dCoordinateReferenceSelector, "ChunkScan3dCoordinateReferenceSelector" ); - locator.bindComponent( chunkScan3dCoordinateReferenceValue, "ChunkScan3dCoordinateReferenceValue" ); - locator.bindComponent( chunkScan3dFocalLength, "ChunkScan3dFocalLength" ); - locator.bindComponent( chunkScan3dBaseline, "ChunkScan3dBaseline" ); - locator.bindComponent( chunkScan3dPrincipalPointU, "ChunkScan3dPrincipalPointU" ); - locator.bindComponent( chunkScan3dPrincipalPointV, "ChunkScan3dPrincipalPointV" ); - locator.bindComponent( mvChunkJPEG, "mvChunkJPEG" ); - locator.bindComponent( chunkmvCustomIdentifier, "ChunkmvCustomIdentifier" ); + locator.bindComponent( opticControllerSelector, "OpticControllerSelector" ); + locator.bindComponent( opticControllerInitialize, "OpticControllerInitialize@i" ); + locator.bindComponent( opticControllerDisconnect, "OpticControllerDisconnect@i" ); + locator.bindComponent( opticControllerAbort, "OpticControllerAbort@i" ); + locator.bindComponent( opticControllerStatus, "OpticControllerStatus" ); + locator.bindComponent( opticControllerVendorName, "OpticControllerVendorName" ); + locator.bindComponent( opticControllerFamilyName, "OpticControllerFamilyName" ); + locator.bindComponent( opticControllerModelName, "OpticControllerModelName" ); + locator.bindComponent( opticControllerSerialNumber, "OpticControllerSerialNumber" ); + locator.bindComponent( opticControllerVersion, "OpticControllerVersion" ); + locator.bindComponent( opticControllerFirmwareVersion, "OpticControllerFirmwareVersion" ); + locator.bindComponent( opticControllerTemperature, "OpticControllerTemperature" ); + locator.bindComponent( apertureInitialize, "ApertureInitialize@i" ); + locator.bindComponent( apertureStatus, "ApertureStatus" ); + locator.bindComponent( aperture, "Aperture" ); + locator.bindComponent( apertureStepper, "ApertureStepper" ); + locator.bindComponent( numericalAperture, "NumericalAperture" ); + locator.bindComponent( focusInitialize, "FocusInitialize@i" ); + locator.bindComponent( focusStatus, "FocusStatus" ); + locator.bindComponent( focusStepper, "FocusStepper" ); + locator.bindComponent( focusAutoMode, "FocusAutoMode" ); + locator.bindComponent( focusAuto, "FocusAuto" ); + locator.bindComponent( focalPower, "FocalPower" ); + locator.bindComponent( objectSensorDistance, "ObjectSensorDistance" ); + locator.bindComponent( focalLengthInitialize, "FocalLengthInitialize@i" ); + locator.bindComponent( focalLengthStatus, "FocalLengthStatus" ); + locator.bindComponent( focalLength, "FocalLength" ); + locator.bindComponent( focalLengthStepper, "FocalLengthStepper" ); + locator.bindComponent( shutterInitialize, "ShutterInitialize@i" ); + locator.bindComponent( shutterStatus, "ShutterStatus" ); + locator.bindComponent( shutter, "Shutter" ); + locator.bindComponent( filterInitialize, "FilterInitialize@i" ); + locator.bindComponent( filterStatus, "FilterStatus" ); + locator.bindComponent( filter, "Filter" ); + locator.bindComponent( stabilizationInitialize, "StabilizationInitialize@i" ); + locator.bindComponent( stabilizationStatus, "StabilizationStatus" ); + locator.bindComponent( stabilization, "Stabilization" ); + locator.bindComponent( magnificationInitialize, "MagnificationInitialize@i" ); + locator.bindComponent( magnificationStatus, "MagnificationStatus" ); + locator.bindComponent( magnification, "Magnification" ); + locator.bindComponent( magnificationStepper, "MagnificationStepper" ); } // *INDENT-OFF* PYTHON_OR_JAVA_ONLY( %immutable; ) // *INDENT-ON* - /// \brief A boolean property. Activates the inclusion of Chunk data in the transmitted payload. + /// \brief An enumerated integer property. Selects which optic controller to configure. /** - * Activates the inclusion of Chunk data in the transmitted payload. + * Selects which optic controller to configure. + * + * The following string values might be valid for this feature: + * - \b OpticController0 (Display string: 'Optic Controller 0'): Selects Optic Controller 0. + * - \b OpticController1 (Display string: 'Optic Controller 1'): Selects Optic Controller 1. + * - \b OpticController2 (Display string: 'Optic Controller 2'): Selects Optic Controller 2. + * - \b OpticController3 (Display string: 'Optic Controller 3'): Selects Optic Controller 3. + * - \b OpticController4 (Display string: 'Optic Controller 4'): Selects Optic Controller 4. + * - \b OpticController5 (Display string: 'Optic Controller 5'): Selects Optic Controller 5. + * - \b OpticController6 (Display string: 'Optic Controller 6'): Selects Optic Controller 6. + * - \b OpticController7 (Display string: 'Optic Controller 7'): Selects Optic Controller 7. + * - \b OpticController8 (Display string: 'Optic Controller 8'): Selects Optic Controller 8. + * - \b OpticController9 (Display string: 'Optic Controller 9'): Selects Optic Controller 9. + * - \b OpticController10 (Display string: 'Optic Controller 10'): Selects Optic Controller 10. + * - \b OpticController11 (Display string: 'Optic Controller 11'): Selects Optic Controller 11. + * - \b OpticController12 (Display string: 'Optic Controller 12'): Selects Optic Controller 12. + * - \b OpticController13 (Display string: 'Optic Controller 13'): Selects Optic Controller 13. + * - \b OpticController14 (Display string: 'Optic Controller 14'): Selects Optic Controller 14. + * - \b OpticController15 (Display string: 'Optic Controller 15'): Selects Optic Controller 15. + * + * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. + * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. */ - PropertyIBoolean chunkModeActive; - /// \brief A boolean property. Activates the inclusion of the GenICam XML necessary to the chunk parser to decode all the Chunk data included in the transmitted payload. + PropertyI64 opticControllerSelector; + /// \brief A method object. Initializes the optic controller and makes it ready for use. /** - * Activates the inclusion of the GenICam XML necessary to the chunk parser to decode all the Chunk data included in the transmitted payload. + * Initializes the optic controller and makes it ready for use. */ - PropertyIBoolean chunkXMLEnable; - /// \brief An enumerated integer property. Selects which Chunk to enable or control. + Method opticControllerInitialize; + /// \brief A method object. Closes the optic controller connection and prepares it for removal. /** - * Selects which Chunk to enable or control. + * Closes the optic controller connection and prepares it for removal. + */ + Method opticControllerDisconnect; + /// \brief A method object. Aborts the current command or feature access. + /** + * Aborts the current command or feature access. This will end the process without completing it or having reached the desired end position or value. If no command or feature access is in progress, the command is ignored. + */ + Method opticControllerAbort; + /// \brief An enumerated integer property. Reads the status of the optic controller. + /** + * Reads the status of the optic controller. * * The following string values might be valid for this feature: - * - \b Image (Display string: 'Image'): Image - * - \b OffsetX (Display string: 'Offset X'): Offset X - * - \b OffsetY (Display string: 'Offset Y'): Offset Y - * - \b Width (Display string: 'Width'): Width - * - \b Height (Display string: 'Height'): Height - * - \b PixelFormat (Display string: 'Pixel Format'): Pixel Format - * - \b PixelDynamicRangeMin (Display string: 'Pixel Dynamic Range Min'): Pixel Dynamic Range Min - * - \b PixelDynamicRangeMax (Display string: 'Pixel Dynamic Range Max'): Pixel Dynamic Range Max - * - \b BinningHorizontal (Display string: 'Binning Horizontal'): Binning Horizontal - * - \b BinningVertical (Display string: 'Binning Vertical'): Binning Vertical - * - \b DecimationHorizontal (Display string: 'Decimation Horizontal'): Decimation Horizontal - * - \b DecimationVertical (Display string: 'Decimation Vertical'): Decimation Vertical - * - \b ReverseX (Display string: 'Reverse X'): Reverse X - * - \b ReverseY (Display string: 'Reverse Y'): Reverse Y - * - \b Timestamp (Display string: 'Timestamp'): Timestamp - * - \b TimestampLatchValue (Display string: 'Timestamp Latch Value'): Timestamp Latch Value - * - \b LineStatusAll (Display string: 'Line Status All'): Line Status All - * - \b CounterValue (Display string: 'Counter Value'): Counter Value - * - \b TimerValue (Display string: 'Timer Value'): Timer Value - * - \b EncoderValue (Display string: 'Encoder Value'): Encoder Value - * - \b EncoderStatusValue (Display string: 'Encoder Status Value'): Encoder Status Value - * - \b ExposureTime (Display string: 'Exposure Time'): Exposure Time - * - \b Gain (Display string: 'Gain'): Gain - * - \b BlackLevel (Display string: 'Black Level'): Black Level - * - \b LinePitch (Display string: 'Line Pitch'): Line Pitch - * - \b FrameID (Display string: 'Frame ID'): Frame ID - * - \b SourceID (Display string: 'Source ID'): Source ID - * - \b SourceIDValue (Display string: 'Source ID Value'): Source ID Value - * - \b RegionID (Display string: 'Region ID'): Region ID - * - \b RegionIDValue (Display string: 'Region ID Value'): Region ID Value - * - \b ComponentID (Display string: 'Component ID'): Component ID - * - \b ComponentIDValue (Display string: 'Component ID Value'): Component ID Value - * - \b GroupIDValue (Display string: 'Group ID Value'): Group ID Value - * - \b TransferBlockID (Display string: 'Transfer Block ID'): Transfer Block ID - * - \b TransferStreamID (Display string: 'Transfer Stream ID'): Transfer Stream ID - * - \b TransferQueueCurrentBlockCount (Display string: 'Transfer Queue Current Block Count'): Transfer Queue Current Block Count - * - \b StreamChannelID (Display string: 'Stream Channel ID'): Stream Channel ID - * - \b SequencerSetActive (Display string: 'Sequencer Set Active'): Sequencer Set Active - * - \b Scan3dDistanceUnit (Display string: 'Scan 3d Distance Unit'): Scan 3d Distance Unit - * - \b Scan3dOutputMode (Display string: 'Scan 3d Output Mode'): Scan 3d Output Mode - * - \b Scan3dCoordinateSystem (Display string: 'Scan 3d Coordinate System'): Scan 3d Coordinate System - * - \b Scan3dCoordinateSystemReference (Display string: 'Scan 3d Coordinate System Reference'): Scan 3d Coordinate System Reference - * - \b Scan3dCoordinateScale (Display string: 'Scan 3d Coordinate Scale'): Scan 3d Coordinate Scale - * - \b Scan3dCoordinateOffset (Display string: 'Scan 3d Coordinate Offset'): Scan 3d Coordinate Offset - * - \b Scan3dInvalidDataFlag (Display string: 'Scan 3d Invalid Data Flag'): Scan 3d Invalid Data Flag - * - \b Scan3dInvalidDataValue (Display string: 'Scan 3d Invalid Data Value'): Scan 3d Invalid Data Value - * - \b Scan3dAxisMin (Display string: 'Scan 3d Axis Min'): Scan 3d Axis Min - * - \b Scan3dAxisMax (Display string: 'Scan 3d Axis Max'): Scan 3d Axis Max - * - \b Scan3dCoordinateTransformValue (Display string: 'Scan 3d Coordinate Transform Value'): Scan 3d Coordinate Transform Value - * - \b Scan3dCoordinateReferenceValue (Display string: 'Scan 3d Coordinate Reference Value'): Scan 3d Coordinate Reference Value - * - \b AdditionalInfo (Display string: 'Additional Info') - * - \b JPEG (Display string: 'JPEG') - * - \b mvCustomIdentifier (Display string: 'mv Custom Identifier') + * - \b NotConnected (Display string: 'Not Connected'): The optic controller is physically not connected. + * - \b NotInitialized (Display string: 'Not Initialized'): The optic controller is not initialized. + * - \b NotSupported (Display string: 'Not Supported'): The optic controller is physically connected but not supported. + * - \b Busy (Display string: 'Busy'): The optic controller executes a feature access/command. + * - \b Ready (Display string: 'Ready'): The optic controller is ready to use. + * - \b Error (Display string: 'Error'): The optic controller encountered an error. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. */ - PropertyI64 chunkSelector; - /// \brief A boolean property. Enables the inclusion of the selected Chunk data in the payload of the image. + PropertyI64 opticControllerStatus; + /// \brief A string property. Name of the manufacturer of the optic controller. /** - * Enables the inclusion of the selected Chunk data in the payload of the image. + * Name of the manufacturer of the optic controller. */ - PropertyIBoolean chunkEnable; - /// \brief An enumerated integer property. Selects which Region to retrieve data from. + PropertyS opticControllerVendorName; + /// \brief A string property. Name of the device family of the optic controller. /** - * Selects which Region to retrieve data from. + * Name of the device family of the optic controller. + */ + PropertyS opticControllerFamilyName; + /// \brief A string property. Model name of the optic controller. + /** + * Model name of the optic controller. + */ + PropertyS opticControllerModelName; + /// \brief A string property. Serial number of the optic controller. + /** + * Serial number of the optic controller. + */ + PropertyS opticControllerSerialNumber; + /// \brief A string property. Version of the optic controller. + /** + * Version of the optic controller. + */ + PropertyS opticControllerVersion; + /// \brief A string property. Version of the firmware in the optic controller. + /** + * Version of the firmware in the optic controller. + */ + PropertyS opticControllerFirmwareVersion; + /// \brief A floating point property. Temperature of the optic controller in degrees Celsius (C). + /** + * Temperature of the optic controller in degrees Celsius (C). + */ + PropertyF opticControllerTemperature; + /// \brief A method object. Initializes the aperture and makes it ready for use. + /** + * Initializes the aperture and makes it ready for use. The aperture position after initialization is implementation dependent. This feature is only implemented if an additional initialization is required after OpticControllerInitialize. + */ + Method apertureInitialize; + /// \brief An enumerated integer property. Reads the status of the aperture. + /** + * Reads the status of the aperture. * * The following string values might be valid for this feature: - * - \b Region0 (Display string: 'Region 0'): Image comes from the Region 0. - * - \b Region1 (Display string: 'Region 1'): Image comes from the Region 1. - * - \b Region2 (Display string: 'Region 2'): Image comes from the Region 2. - * - \b Region\#3\# (Display string: 'Region \#3\#'): Image comes from the Region \#3\#. - * - \b Scan3dExtraction0 (Display string: 'Scan 3d Extraction 0'): Image comes from the Scan3dExtraction output Region 0. - * - \b Scan3dExtraction1 (Display string: 'Scan 3d Extraction 1'): Image comes from the Scan3dExtraction output Region 1. - * - \b Scan3dExtraction2 (Display string: 'Scan 3d Extraction 2'): Image comes from the Scan3dExtraction output Region 2. + * - \b NotConnected (Display string: 'Not Connected'): The aperture controller is physically not connected. + * - \b NotInitialized (Display string: 'Not Initialized'): The aperture controller is not initialized. + * - \b NotSupported (Display string: 'Not Supported'): The aperture controller is physically connected but not supported. + * - \b Busy (Display string: 'Busy'): The aperture controller executes a feature access/command. + * - \b Ready (Display string: 'Ready'): The aperture controller is ready to use. + * - \b Error (Display string: 'Error'): The aperture controller encountered an error. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. */ - PropertyI64 chunkRegionSelector; - /// \brief An enumerated integer property. Returns the Identifier of Region that the image comes from. + PropertyI64 apertureStatus; + /// \brief A floating point property. Sets the aperture (also called iris, f-number, f-stop or f/#) of the lens. /** - * Returns the Identifier of Region that the image comes from. + * Sets the aperture (also called iris, f-number, f-stop or f/#) of the lens. The lower the f/# the more light goes through the lens (the 'faster' the lens) and the smaller the depth of field. + */ + PropertyF aperture; + /// \brief An integer property. ApertureStepper controls the stepper value of the aperture. + /** + * ApertureStepper controls the stepper value of the aperture. 0 is the maximum opening. + */ + PropertyI64 apertureStepper; + /// \brief A floating point property. Sets the numerical aperture of a lens. + /** + * Sets the numerical aperture of a lens. It is inversely proportional to the f/#. + */ + PropertyF numericalAperture; + /// \brief A method object. Initializes the focus and makes it ready for use. + /** + * Initializes the focus and makes it ready for use. The focus position after initialization is implementation dependent. This feature is only implemented if an additional initialization is required after OpticControllerInitialize. + */ + Method focusInitialize; + /// \brief An enumerated integer property. Reads the status of the focus. + /** + * Reads the status of the focus. * * The following string values might be valid for this feature: - * - \b Region0 (Display string: 'Region 0'): Image comes from the Region 0. - * - \b Region1 (Display string: 'Region 1'): Image comes from the Region 1. - * - \b Region2 (Display string: 'Region 2'): Image comes from the Region 2. - * - \b Region\#3\# (Display string: 'Region \#3\#'): Image comes from the Region \#3\#. - * - \b Scan3dExtraction0 (Display string: 'Scan 3d Extraction 0'): Image comes from the Scan3dExtraction output Region 0. - * - \b Scan3dExtraction1 (Display string: 'Scan 3d Extraction 1'): Image comes from the Scan3dExtraction output Region 1. - * - \b Scan3dExtraction2 (Display string: 'Scan 3d Extraction 2'): Image comes from the Scan3dExtraction output Region 2. + * - \b NotConnected (Display string: 'Not Connected'): The focus controller is physically not connected. + * - \b NotInitialized (Display string: 'Not Initialized'): The focus controller is not initialized. + * - \b NotSupported (Display string: 'Not Supported'): The focus controller is physically connected but not supported. + * - \b Busy (Display string: 'Busy'): The focus controller executes a feature access/command. + * - \b Ready (Display string: 'Ready'): The focus controller is ready to use. + * - \b Error (Display string: 'Error'): The focus controller encountered an error. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. */ - PropertyI64 chunkRegionID; - /// \brief An integer property. Returns the unique integer Identifier value of the Region that the image comes from. + PropertyI64 focusStatus; + /// \brief An integer property. FocusStepper controls the stepper value of the focus. /** - * Returns the unique integer Identifier value of the Region that the image comes from. + * FocusStepper controls the stepper value of the focus. E.g. ObjectSensorDistance or FocalPower. 0 is the closest focus. */ - PropertyI64 chunkRegionIDValue; - /// \brief An enumerated integer property. Selects the Component from which to retrieve data from. + PropertyI64 focusStepper; + /// \brief An enumerated integer property. Sets automatic focus mode. /** - * Selects the Component from which to retrieve data from. + * Sets automatic focus mode. * * The following string values might be valid for this feature: - * - \b Intensity (Display string: 'Intensity'): The image data is the intensity component (visible). - * - \b Infrared (Display string: 'Infrared'): The image data is the infrared component. - * - \b Ultraviolet (Display string: 'Ultraviolet'): The image data is the ultraviolet component. - * - \b Range (Display string: 'Range'): The image data is the range component (distance or depth). - * - \b Reflectance (Display string: 'Reflectance'): The image data is the reflected intensity component (acquired with the Range). - * - \b Disparity (Display string: 'Disparity'): The image data is the disparity component. - * - \b Confidence (Display string: 'Confidence'): The image data is the confidence map component. - * - \b Scatter (Display string: 'Scatter'): The image data is the scatter component. - * - \b Multispectral (Display string: 'Multispectral'): The image data is the multispectral component. + * - \b DistanceBased (Display string: 'Distance Based'): The OpticController has a built-in distance sensor and computes the focus based on the detected distance (open loop). + * - \b ImageBased (Display string: 'Image Based'): The OpticController evaluates the image for closed loop control (closed loop). * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. */ - PropertyI64 chunkComponentSelector; - /// \brief An enumerated integer property. Returns the Identifier of the selected Component. + PropertyI64 focusAutoMode; + /// \brief An enumerated integer property. Sets automatic focus. /** - * Returns the Identifier of the selected Component. This can be used to identify the image component type of a multi-component payload. + * Sets automatic focus. If enabled, the optic device shall be set into a mode of operation, where the lens automatically finds the best possible focus. * * The following string values might be valid for this feature: - * - \b Intensity (Display string: 'Intensity'): The image data is the intensity component (visible). - * - \b Infrared (Display string: 'Infrared'): The image data is the infrared component. - * - \b Ultraviolet (Display string: 'Ultraviolet'): The image data is the ultraviolet component. - * - \b Range (Display string: 'Range'): The image data is the range component (distance or depth). - * - \b Reflectance (Display string: 'Reflectance'): The image data is the reflected intensity component (acquired with the Range). - * - \b Disparity (Display string: 'Disparity'): The image data is the disparity component. - * - \b Confidence (Display string: 'Confidence'): The image data is the confidence map component. - * - \b Scatter (Display string: 'Scatter'): The image data is the scatter component. - * - \b Multispectral (Display string: 'Multispectral'): The image data is the multispectral component. + * - \b Off (Display string: 'Off'): The focus is set manually. + * - \b Once (Display string: 'Once'): The focus is adapted once by the device. Once it has converged, it returns to the Off state. + * - \b Continuous (Display string: 'Continuous'): The focus is constantly adapted by the device to maximize the dynamic range. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. */ - PropertyI64 chunkComponentID; - /// \brief An integer property. Returns a unique Identifier value that corresponds to the selected chunk Component. + PropertyI64 focusAuto; + /// \brief A floating point property. Sets the focal power (in diopters/dpt). /** - * Returns a unique Identifier value that corresponds to the selected chunk Component. + * Sets the focal power (in diopters/dpt). This is mostly used for liquid lenses and indicates how much a liquid lens focuses. */ - PropertyI64 chunkComponentIDValue; - /// \brief An enumerated integer property. Selects the component Group from which to retrieve data from. + PropertyF focalPower; + /// \brief A floating point property. Distance from the image sensor surface to the object in millimeters (mm). /** - * Selects the component Group from which to retrieve data from. + * Distance from the image sensor surface to the object in millimeters (mm). + */ + PropertyF objectSensorDistance; + /// \brief A method object. Initializes the focal length and makes it ready for use. + /** + * Initializes the focal length and makes it ready for use. The focal length position after initialization is implementation dependent. This feature is only implemented if an additional initialization is required after OpticControllerInitialize. + */ + Method focalLengthInitialize; + /// \brief An enumerated integer property. Reads the status of the focal length. + /** + * Reads the status of the focal length. * * The following string values might be valid for this feature: - * - \b Group0 (Display string: 'Group 0'): Selects Components group 0. - * - \b Group1 (Display string: 'Group 1'): Selects Components group 1. - * - \b Group2 (Display string: 'Group 2'): Selects Components group 2. - * - \b Group\#3\# (Display string: 'Group \#3\#'): Selects Components group \#3\#. - * - \b Group3 (Display string: 'Group 3'): Selects Components group 3. + * - \b NotConnected (Display string: 'Not Connected'): The focal length controller is physically not connected. + * - \b NotInitialized (Display string: 'Not Initialized'): The focal length controller is not initialized. + * - \b NotSupported (Display string: 'Not Supported'): The focal length controller is physically connected but not supported. + * - \b Busy (Display string: 'Busy'): The focal length controller executes a feature access/command. + * - \b Ready (Display string: 'Ready'): The focal length controller is ready to use. + * - \b Error (Display string: 'Error'): The focal length controller encountered an error. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. */ - PropertyI64 chunkGroupSelector; - /// \brief An enumerated integer property. Returns a unique Identifier corresponding to the selected Group of components. + PropertyI64 focalLengthStatus; + /// \brief A floating point property. Focal length in millimeters (mm). /** - * Returns a unique Identifier corresponding to the selected Group of components. This can be used to identify the component Group of a multi-group payload. + * Focal length in millimeters (mm). + */ + PropertyF focalLength; + /// \brief An integer property. FocalLengthStepper controls the stepper value of the focal length. + /** + * FocalLengthStepper controls the stepper value of the focal length. 0 is the shortest focal length. + */ + PropertyI64 focalLengthStepper; + /// \brief A method object. Initializes the shutter and makes it ready for use. + /** + * Initializes the shutter and makes it ready for use. The shutter position after initialization is implementation dependent. This feature is only implemented if an additional initialization is required after OpticControllerInitialize. + */ + Method shutterInitialize; + /// \brief An enumerated integer property. Reads the status of the shutter. + /** + * Reads the status of the shutter. * * The following string values might be valid for this feature: - * - \b Group0 (Display string: 'Group 0'): Selects Components group 0. - * - \b Group1 (Display string: 'Group 1'): Selects Components group 1. - * - \b Group2 (Display string: 'Group 2'): Selects Components group 2. - * - \b Group\#3\# (Display string: 'Group \#3\#'): Selects Components group \#3\#. - * - \b Group3 (Display string: 'Group 3'): Selects Components group 3. + * - \b NotConnected (Display string: 'Not Connected'): The shutter controller is physically not connected. + * - \b NotInitialized (Display string: 'Not Initialized'): The shutter controller is not initialized. + * - \b NotSupported (Display string: 'Not Supported'): The shutter controller is physically connected but not supported. + * - \b Busy (Display string: 'Busy'): The shutter controller executes a feature access/command. + * - \b Ready (Display string: 'Ready'): The shutter controller is ready to use. + * - \b Error (Display string: 'Error'): The shutter controller encountered an error. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. */ - PropertyI64 chunkGroupID; - /// \brief An enumerated integer property. This feature is deprecated (See ChunkComponentID). + PropertyI64 shutterStatus; + /// \brief An integer property. Controls whether the shutter is opened or closed. /** - * \deprecated - * This feature is deprecated (See ChunkComponentID). It was representing the component of the payload image. + * Controls whether the shutter is opened or closed. + */ + PropertyI64 shutter; + /// \brief A method object. Initializes the filter and makes it ready for use. + /** + * Initializes the filter and makes it ready for use. The filter position after initialization is implementation dependent. This feature is only implemented if an additional initialization is required after OpticControllerInitialize. + */ + Method filterInitialize; + /// \brief An enumerated integer property. Reads the status of the filter. + /** + * Reads the status of the filter. * * The following string values might be valid for this feature: - * - \b Intensity (Display string: 'Intensity'): Intensity - * - \b Infrared (Display string: 'Infrared'): Infrared - * - \b Ultraviolet (Display string: 'Ultraviolet'): Ultraviolet - * - \b Range (Display string: 'Range'): Range - * - \b Reflectance (Display string: 'Reflectance'): Reflectance - * - \b Disparity (Display string: 'Disparity'): Disparity - * - \b Confidence (Display string: 'Confidence'): Confidence - * - \b Scatter (Display string: 'Scatter'): Scatter + * - \b NotConnected (Display string: 'Not Connected'): The filter controller is physically not connected. + * - \b NotInitialized (Display string: 'Not Initialized'): The filter controller is not initialized. + * - \b NotSupported (Display string: 'Not Supported'): The filter controller is physically connected but not supported. + * - \b Busy (Display string: 'Busy'): The filter controller executes a feature access/command. + * - \b Ready (Display string: 'Ready'): The filter controller is ready to use. + * - \b Error (Display string: 'Error'): The filter controller encountered an error. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. */ - PropertyI64 chunkImageComponent; - /// \brief An integer property. Returns a unique Identifier value that corresponds to the Group of Components of the selected chunk Component. + PropertyI64 filterStatus; + /// \brief An integer property. Filter positions in native number system. /** - * Returns a unique Identifier value that corresponds to the Group of Components of the selected chunk Component. + * Filter positions in native number system. This is implementation dependent. */ - PropertyI64 chunkGroupIDValue; - /// \brief An integer property. This feature is deprecated (See ChunkComponentSelector). + PropertyI64 filter; + /// \brief A method object. Initializes the stabilization and makes it ready for use. /** - * \deprecated - * This feature is deprecated (See ChunkComponentSelector). It was selecting the individual parts of a multi-component/multi-part buffer to access. + * Initializes the stabilization and makes it ready for use. The stabilization state after initialization is implementation dependent. This feature is only implemented if an additional initialization is required after OpticControllerInitialize. */ - PropertyI64 chunkPartSelector; - /// \brief A string property. Returns the entire image data included in the payload. + Method stabilizationInitialize; + /// \brief An enumerated integer property. Reads the status of the stabilization. /** - * Returns the entire image data included in the payload. + * Reads the status of the stabilization. + * + * The following string values might be valid for this feature: + * - \b NotConnected (Display string: 'Not Connected'): The stabilization controller is physically not connected. + * - \b NotInitialized (Display string: 'Not Initialized'): The stabilization controller is not initialized. + * - \b NotSupported (Display string: 'Not Supported'): The stabilization controller is physically connected but not supported. + * - \b Busy (Display string: 'Busy'): The stabilization controller executes a feature access/command. + * - \b Ready (Display string: 'Ready'): The stabilization controller is ready to use. + * - \b Error (Display string: 'Error'): The stabilization controller encountered an error. + * + * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. + * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. */ - PropertyS chunkImage; - /// \brief An integer property. Returns the OffsetX of the image included in the payload. + PropertyI64 stabilizationStatus; + /// \brief An integer property. Control of image stabilization function build into the optic controller. /** - * Returns the OffsetX of the image included in the payload. + * Control of image stabilization function build into the optic controller. */ - PropertyI64 chunkOffsetX; - /// \brief An integer property. Returns the OffsetY of the image included in the payload. + PropertyI64 stabilization; + /// \brief A method object. Initializes the magnification and makes it ready for use. + /** + * Initializes the magnification and makes it ready for use. The magnification position after initialization is implementation dependent. This feature is only implemented if an additional initialization is required after OpticControllerInitialize. + */ + Method magnificationInitialize; + /// \brief An enumerated integer property. Reads the status of the magnification. + /** + * Reads the status of the magnification. + * + * The following string values might be valid for this feature: + * - \b NotConnected (Display string: 'Not Connected'): The magnification controller is physically not connected. + * - \b NotInitialized (Display string: 'Not Initialized'): The magnification controller is not initialized. + * - \b NotSupported (Display string: 'Not Supported'): The magnification controller is physically connected but not supported. + * - \b Busy (Display string: 'Busy'): The magnification controller executes a feature access/command. + * - \b Ready (Display string: 'Ready'): The magnification controller is ready to use. + * - \b Error (Display string: 'Error'): The magnification controller encountered an error. + * + * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. + * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. + */ + PropertyI64 magnificationStatus; + /// \brief A floating point property. Magnification of the lens, defined as ratio between apparent size of an image and its true size. + /** + * Magnification of the lens, defined as ratio between apparent size of an image and its true size. + */ + PropertyF magnification; + /// \brief An integer property. MagnificationStepper controls the stepper value of the magnification. + /** + * MagnificationStepper controls the stepper value of the magnification. 0 is the lowest magnification. + */ + PropertyI64 magnificationStepper; + // *INDENT-OFF* + PYTHON_OR_JAVA_ONLY( %mutable; ) + // *INDENT-ON* +}; + +//----------------------------------------------------------------------------- +/// \brief Category that contains the Chunk Data control features. +/** + * A category that contains the Chunk Data control features. + * \ingroup GenICamInterfaceDevice + */ +class ChunkDataControl +//----------------------------------------------------------------------------- +{ +public: + /// \brief Constructs a new mvIMPACT::acquire::GenICam::ChunkDataControl object. + explicit ChunkDataControl( + /// [in] A pointer to a mvIMPACT::acquire::Device object obtained from a mvIMPACT::acquire::DeviceManager object. + mvIMPACT::acquire::Device* pDev, + /// [in] The name of the driver internal setting to access with this instance. + /// A list of valid setting names can be obtained by a call to + /// mvIMPACT::acquire::FunctionInterface::getAvailableSettings, new + /// settings can be created with the function + /// mvIMPACT::acquire::FunctionInterface::createSetting + const std::string& settingName = "Base" ) : + chunkModeActive(), + chunkXMLEnable(), + chunkSelector(), + chunkEnable(), + chunkRegionSelector(), + chunkRegionID(), + chunkRegionIDValue(), + chunkComponentSelector(), + chunkComponentID(), + chunkComponentIDValue(), + chunkGroupSelector(), + chunkGroupID(), + chunkImageComponent(), + chunkGroupIDValue(), + chunkPartSelector(), + chunkImage(), + chunkOffsetX(), + chunkOffsetY(), + chunkWidth(), + chunkHeight(), + chunkPixelFormat(), + chunkPixelDynamicRangeMin(), + chunkPixelDynamicRangeMax(), + chunkBinningHorizontal(), + chunkBinningVertical(), + chunkDecimationHorizontal(), + chunkDecimationVertical(), + chunkReverseX(), + chunkReverseY(), + chunkTimestamp(), + chunkTimestampLatchValue(), + chunkLineStatusAll(), + chunkCounterSelector(), + chunkCounterValue(), + chunkTimerSelector(), + chunkTimerValue(), + chunkScanLineSelector(), + chunkEncoderSelector(), + chunkEncoderValue(), + chunkEncoderStatus(), + chunkExposureTimeSelector(), + chunkExposureTime(), + chunkGainSelector(), + chunkGain(), + chunkBlackLevelSelector(), + chunkBlackLevel(), + chunkLinePitch(), + chunkFrameID(), + chunkSourceSelector(), + chunkSourceID(), + chunkSourceIDValue(), + chunkTransferBlockID(), + chunkTransferStreamID(), + chunkTransferQueueCurrentBlockCount(), + chunkStreamChannelID(), + chunkSequencerSetActive(), + chunkScan3dDistanceUnit(), + chunkScan3dOutputMode(), + chunkScan3dCoordinateSystem(), + chunkScan3dCoordinateSystemReference(), + chunkScan3dCoordinateSelector(), + chunkScan3dCoordinateScale(), + chunkScan3dCoordinateOffset(), + chunkScan3dInvalidDataFlag(), + chunkScan3dInvalidDataValue(), + chunkScan3dAxisMin(), + chunkScan3dAxisMax(), + chunkScan3dCoordinateTransformSelector(), + chunkScan3dTransformValue(), + chunkScan3dCoordinateReferenceSelector(), + chunkScan3dCoordinateReferenceValue(), + chunkScan3dFocalLength(), + chunkScan3dBaseline(), + chunkScan3dPrincipalPointU(), + chunkScan3dPrincipalPointV(), + mvChunkJPEG(), + chunkmvCustomIdentifier(), + chunkComponents(), + chunkPartIndex(), + chunkRcNoise(), + chunkRcOut1Reduction(), + chunkRcTest(), + chunkRcBrightness(), + chunkRcAutoExposureAdapting() + { + pDev->validateInterfaceLayout( dilGenICam ); + mvIMPACT::acquire::DeviceComponentLocator locator( pDev, mvIMPACT::acquire::dltSetting, settingName ); + locator.bindSearchBase( locator.searchbase_id(), "Camera/GenICam" ); + locator.bindComponent( chunkModeActive, "ChunkModeActive" ); + locator.bindComponent( chunkXMLEnable, "ChunkXMLEnable" ); + locator.bindComponent( chunkSelector, "ChunkSelector" ); + locator.bindComponent( chunkEnable, "ChunkEnable" ); + locator.bindComponent( chunkRegionSelector, "ChunkRegionSelector" ); + locator.bindComponent( chunkRegionID, "ChunkRegionID" ); + locator.bindComponent( chunkRegionIDValue, "ChunkRegionIDValue" ); + locator.bindComponent( chunkComponentSelector, "ChunkComponentSelector" ); + locator.bindComponent( chunkComponentID, "ChunkComponentID" ); + locator.bindComponent( chunkComponentIDValue, "ChunkComponentIDValue" ); + locator.bindComponent( chunkGroupSelector, "ChunkGroupSelector" ); + locator.bindComponent( chunkGroupID, "ChunkGroupID" ); + locator.bindComponent( chunkImageComponent, "ChunkImageComponent" ); + locator.bindComponent( chunkGroupIDValue, "ChunkGroupIDValue" ); + locator.bindComponent( chunkPartSelector, "ChunkPartSelector" ); + locator.bindComponent( chunkImage, "ChunkImage" ); + locator.bindComponent( chunkOffsetX, "ChunkOffsetX" ); + locator.bindComponent( chunkOffsetY, "ChunkOffsetY" ); + locator.bindComponent( chunkWidth, "ChunkWidth" ); + locator.bindComponent( chunkHeight, "ChunkHeight" ); + locator.bindComponent( chunkPixelFormat, "ChunkPixelFormat" ); + locator.bindComponent( chunkPixelDynamicRangeMin, "ChunkPixelDynamicRangeMin" ); + if( !chunkPixelDynamicRangeMin.isValid() ) + { + locator.bindComponent( chunkPixelDynamicRangeMin, "ChunkDynamicRangeMin" ); + } + locator.bindComponent( chunkPixelDynamicRangeMax, "ChunkPixelDynamicRangeMax" ); + if( !chunkPixelDynamicRangeMax.isValid() ) + { + locator.bindComponent( chunkPixelDynamicRangeMax, "ChunkDynamicRangeMax" ); + } + locator.bindComponent( chunkBinningHorizontal, "ChunkBinningHorizontal" ); + locator.bindComponent( chunkBinningVertical, "ChunkBinningVertical" ); + locator.bindComponent( chunkDecimationHorizontal, "ChunkDecimationHorizontal" ); + locator.bindComponent( chunkDecimationVertical, "ChunkDecimationVertical" ); + locator.bindComponent( chunkReverseX, "ChunkReverseX" ); + locator.bindComponent( chunkReverseY, "ChunkReverseY" ); + locator.bindComponent( chunkTimestamp, "ChunkTimestamp" ); + locator.bindComponent( chunkTimestampLatchValue, "ChunkTimestampLatchValue" ); + locator.bindComponent( chunkLineStatusAll, "ChunkLineStatusAll" ); + locator.bindComponent( chunkCounterSelector, "ChunkCounterSelector" ); + locator.bindComponent( chunkCounterValue, "ChunkCounterValue" ); + if( !chunkCounterValue.isValid() ) + { + locator.bindComponent( chunkCounterValue, "ChunkCounter" ); + } + locator.bindComponent( chunkTimerSelector, "ChunkTimerSelector" ); + locator.bindComponent( chunkTimerValue, "ChunkTimerValue" ); + if( !chunkTimerValue.isValid() ) + { + locator.bindComponent( chunkTimerValue, "ChunkTimer" ); + } + locator.bindComponent( chunkScanLineSelector, "ChunkScanLineSelector" ); + locator.bindComponent( chunkEncoderSelector, "ChunkEncoderSelector" ); + locator.bindComponent( chunkEncoderValue, "ChunkEncoderValue" ); + locator.bindComponent( chunkEncoderStatus, "ChunkEncoderStatus" ); + locator.bindComponent( chunkExposureTimeSelector, "ChunkExposureTimeSelector" ); + locator.bindComponent( chunkExposureTime, "ChunkExposureTime" ); + locator.bindComponent( chunkGainSelector, "ChunkGainSelector" ); + locator.bindComponent( chunkGain, "ChunkGain" ); + locator.bindComponent( chunkBlackLevelSelector, "ChunkBlackLevelSelector" ); + locator.bindComponent( chunkBlackLevel, "ChunkBlackLevel" ); + locator.bindComponent( chunkLinePitch, "ChunkLinePitch" ); + locator.bindComponent( chunkFrameID, "ChunkFrameID" ); + locator.bindComponent( chunkSourceSelector, "ChunkSourceSelector" ); + locator.bindComponent( chunkSourceID, "ChunkSourceID" ); + locator.bindComponent( chunkSourceIDValue, "ChunkSourceIDValue" ); + locator.bindComponent( chunkTransferBlockID, "ChunkTransferBlockID" ); + locator.bindComponent( chunkTransferStreamID, "ChunkTransferStreamID" ); + locator.bindComponent( chunkTransferQueueCurrentBlockCount, "ChunkTransferQueueCurrentBlockCount" ); + locator.bindComponent( chunkStreamChannelID, "ChunkStreamChannelID" ); + locator.bindComponent( chunkSequencerSetActive, "ChunkSequencerSetActive" ); + locator.bindComponent( chunkScan3dDistanceUnit, "ChunkScan3dDistanceUnit" ); + locator.bindComponent( chunkScan3dOutputMode, "ChunkScan3dOutputMode" ); + locator.bindComponent( chunkScan3dCoordinateSystem, "ChunkScan3dCoordinateSystem" ); + locator.bindComponent( chunkScan3dCoordinateSystemReference, "ChunkScan3dCoordinateSystemReference" ); + locator.bindComponent( chunkScan3dCoordinateSelector, "ChunkScan3dCoordinateSelector" ); + locator.bindComponent( chunkScan3dCoordinateScale, "ChunkScan3dCoordinateScale" ); + locator.bindComponent( chunkScan3dCoordinateOffset, "ChunkScan3dCoordinateOffset" ); + locator.bindComponent( chunkScan3dInvalidDataFlag, "ChunkScan3dInvalidDataFlag" ); + locator.bindComponent( chunkScan3dInvalidDataValue, "ChunkScan3dInvalidDataValue" ); + locator.bindComponent( chunkScan3dAxisMin, "ChunkScan3dAxisMin" ); + locator.bindComponent( chunkScan3dAxisMax, "ChunkScan3dAxisMax" ); + locator.bindComponent( chunkScan3dCoordinateTransformSelector, "ChunkScan3dCoordinateTransformSelector" ); + locator.bindComponent( chunkScan3dTransformValue, "ChunkScan3dTransformValue" ); + locator.bindComponent( chunkScan3dCoordinateReferenceSelector, "ChunkScan3dCoordinateReferenceSelector" ); + locator.bindComponent( chunkScan3dCoordinateReferenceValue, "ChunkScan3dCoordinateReferenceValue" ); + locator.bindComponent( chunkScan3dFocalLength, "ChunkScan3dFocalLength" ); + locator.bindComponent( chunkScan3dBaseline, "ChunkScan3dBaseline" ); + locator.bindComponent( chunkScan3dPrincipalPointU, "ChunkScan3dPrincipalPointU" ); + locator.bindComponent( chunkScan3dPrincipalPointV, "ChunkScan3dPrincipalPointV" ); + locator.bindComponent( mvChunkJPEG, "mvChunkJPEG" ); + locator.bindComponent( chunkmvCustomIdentifier, "ChunkmvCustomIdentifier" ); + locator.bindComponent( chunkComponents, "ChunkComponents" ); + locator.bindComponent( chunkPartIndex, "ChunkPartIndex" ); + locator.bindComponent( chunkRcNoise, "ChunkRcNoise" ); + locator.bindComponent( chunkRcOut1Reduction, "ChunkRcOut1Reduction" ); + locator.bindComponent( chunkRcTest, "ChunkRcTest" ); + locator.bindComponent( chunkRcBrightness, "ChunkRcBrightness" ); + locator.bindComponent( chunkRcAutoExposureAdapting, "ChunkRcAutoExposureAdapting" ); + } + // *INDENT-OFF* + PYTHON_OR_JAVA_ONLY( %immutable; ) + // *INDENT-ON* + /// \brief A boolean property. Activates the inclusion of Chunk data in the transmitted payload. + /** + * Activates the inclusion of Chunk data in the transmitted payload. + */ + PropertyIBoolean chunkModeActive; + /// \brief A boolean property. Activates the inclusion of the GenICam XML necessary to the chunk parser to decode all the Chunk data included in the transmitted payload. + /** + * Activates the inclusion of the GenICam XML necessary to the chunk parser to decode all the Chunk data included in the transmitted payload. + */ + PropertyIBoolean chunkXMLEnable; + /// \brief An enumerated integer property. Selects which Chunk to enable or control. + /** + * Selects which Chunk to enable or control. + * + * The following string values might be valid for this feature: + * - \b Image (Display string: 'Image'): Image + * - \b OffsetX (Display string: 'Offset X'): Offset X + * - \b OffsetY (Display string: 'Offset Y'): Offset Y + * - \b Width (Display string: 'Width'): Width + * - \b Height (Display string: 'Height'): Height + * - \b PixelFormat (Display string: 'Pixel Format'): Pixel Format + * - \b PixelDynamicRangeMin (Display string: 'Pixel Dynamic Range Min'): Pixel Dynamic Range Min + * - \b PixelDynamicRangeMax (Display string: 'Pixel Dynamic Range Max'): Pixel Dynamic Range Max + * - \b BinningHorizontal (Display string: 'Binning Horizontal'): Binning Horizontal + * - \b BinningVertical (Display string: 'Binning Vertical'): Binning Vertical + * - \b DecimationHorizontal (Display string: 'Decimation Horizontal'): Decimation Horizontal + * - \b DecimationVertical (Display string: 'Decimation Vertical'): Decimation Vertical + * - \b ReverseX (Display string: 'Reverse X'): Reverse X + * - \b ReverseY (Display string: 'Reverse Y'): Reverse Y + * - \b Timestamp (Display string: 'Timestamp'): Timestamp + * - \b TimestampLatchValue (Display string: 'Timestamp Latch Value'): Timestamp Latch Value + * - \b LineStatusAll (Display string: 'Line Status All'): Line Status All + * - \b CounterValue (Display string: 'Counter Value'): Counter Value + * - \b TimerValue (Display string: 'Timer Value'): Timer Value + * - \b EncoderValue (Display string: 'Encoder Value'): Encoder Value + * - \b EncoderStatusValue (Display string: 'Encoder Status Value'): Encoder Status Value + * - \b ExposureTime (Display string: 'Exposure Time'): Exposure Time + * - \b Gain (Display string: 'Gain'): Gain + * - \b BlackLevel (Display string: 'Black Level'): Black Level + * - \b LinePitch (Display string: 'Line Pitch'): Line Pitch + * - \b FrameID (Display string: 'Frame ID'): Frame ID + * - \b SourceID (Display string: 'Source ID'): Source ID + * - \b SourceIDValue (Display string: 'Source ID Value'): Source ID Value + * - \b RegionID (Display string: 'Region ID'): Region ID + * - \b RegionIDValue (Display string: 'Region ID Value'): Region ID Value + * - \b ComponentID (Display string: 'Component ID'): Component ID + * - \b ComponentIDValue (Display string: 'Component ID Value'): Component ID Value + * - \b GroupIDValue (Display string: 'Group ID Value'): Group ID Value + * - \b TransferBlockID (Display string: 'Transfer Block ID'): Transfer Block ID + * - \b TransferStreamID (Display string: 'Transfer Stream ID'): Transfer Stream ID + * - \b TransferQueueCurrentBlockCount (Display string: 'Transfer Queue Current Block Count'): Transfer Queue Current Block Count + * - \b StreamChannelID (Display string: 'Stream Channel ID'): Stream Channel ID + * - \b SequencerSetActive (Display string: 'Sequencer Set Active'): Sequencer Set Active + * - \b Scan3dDistanceUnit (Display string: 'Scan 3d Distance Unit'): Scan 3d Distance Unit + * - \b Scan3dOutputMode (Display string: 'Scan 3d Output Mode'): Scan 3d Output Mode + * - \b Scan3dCoordinateSystem (Display string: 'Scan 3d Coordinate System'): Scan 3d Coordinate System + * - \b Scan3dCoordinateSystemReference (Display string: 'Scan 3d Coordinate System Reference'): Scan 3d Coordinate System Reference + * - \b Scan3dCoordinateScale (Display string: 'Scan 3d Coordinate Scale'): Scan 3d Coordinate Scale + * - \b Scan3dCoordinateOffset (Display string: 'Scan 3d Coordinate Offset'): Scan 3d Coordinate Offset + * - \b Scan3dInvalidDataFlag (Display string: 'Scan 3d Invalid Data Flag'): Scan 3d Invalid Data Flag + * - \b Scan3dInvalidDataValue (Display string: 'Scan 3d Invalid Data Value'): Scan 3d Invalid Data Value + * - \b Scan3dAxisMin (Display string: 'Scan 3d Axis Min'): Scan 3d Axis Min + * - \b Scan3dAxisMax (Display string: 'Scan 3d Axis Max'): Scan 3d Axis Max + * - \b Scan3dCoordinateTransformValue (Display string: 'Scan 3d Coordinate Transform Value'): Scan 3d Coordinate Transform Value + * - \b Scan3dCoordinateReferenceValue (Display string: 'Scan 3d Coordinate Reference Value'): Scan 3d Coordinate Reference Value + * - \b AdditionalInfo (Display string: 'Additional Info') + * - \b JPEG (Display string: 'JPEG') + * - \b mvCustomIdentifier (Display string: 'mv Custom Identifier') + * + * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. + * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. + */ + PropertyI64 chunkSelector; + /// \brief A boolean property. Enables the inclusion of the selected Chunk data in the payload of the image. + /** + * Enables the inclusion of the selected Chunk data in the payload of the image. + */ + PropertyIBoolean chunkEnable; + /// \brief An enumerated integer property. Selects which Region to retrieve data from. + /** + * Selects which Region to retrieve data from. + * + * The following string values might be valid for this feature: + * - \b Region0 (Display string: 'Region 0'): Image comes from the Region 0. + * - \b Region1 (Display string: 'Region 1'): Image comes from the Region 1. + * - \b Region2 (Display string: 'Region 2'): Image comes from the Region 2. + * - \b Scan3dExtraction0 (Display string: 'Scan 3d Extraction 0'): Image comes from the Scan3dExtraction output Region 0. + * - \b Scan3dExtraction1 (Display string: 'Scan 3d Extraction 1'): Image comes from the Scan3dExtraction output Region 1. + * - \b Scan3dExtraction2 (Display string: 'Scan 3d Extraction 2'): Image comes from the Scan3dExtraction output Region 2. + * + * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. + * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. + */ + PropertyI64 chunkRegionSelector; + /// \brief An enumerated integer property. Returns the Identifier of Region that the image comes from. + /** + * Returns the Identifier of Region that the image comes from. + * + * The following string values might be valid for this feature: + * - \b Region0 (Display string: 'Region 0'): Image comes from the Region 0. + * - \b Region1 (Display string: 'Region 1'): Image comes from the Region 1. + * - \b Region2 (Display string: 'Region 2'): Image comes from the Region 2. + * - \b Scan3dExtraction0 (Display string: 'Scan 3d Extraction 0'): Image comes from the Scan3dExtraction output Region 0. + * - \b Scan3dExtraction1 (Display string: 'Scan 3d Extraction 1'): Image comes from the Scan3dExtraction output Region 1. + * - \b Scan3dExtraction2 (Display string: 'Scan 3d Extraction 2'): Image comes from the Scan3dExtraction output Region 2. + * + * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. + * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. + */ + PropertyI64 chunkRegionID; + /// \brief An integer property. Returns the unique integer Identifier value of the Region that the image comes from. + /** + * Returns the unique integer Identifier value of the Region that the image comes from. + */ + PropertyI64 chunkRegionIDValue; + /// \brief An enumerated integer property. Selects the Component from which to retrieve data from. + /** + * Selects the Component from which to retrieve data from. + * + * The following string values might be valid for this feature: + * - \b Intensity (Display string: 'Intensity'): The image data is the intensity component (visible). + * - \b Infrared (Display string: 'Infrared'): The image data is the infrared component. + * - \b Ultraviolet (Display string: 'Ultraviolet'): The image data is the ultraviolet component. + * - \b Range (Display string: 'Range'): The image data is the range component (distance or depth). + * - \b Reflectance (Display string: 'Reflectance'): The image data is the reflected intensity component (acquired with the Range). + * - \b Disparity (Display string: 'Disparity'): The image data is the disparity component. + * - \b Confidence (Display string: 'Confidence'): The image data is the confidence map component. + * - \b Scatter (Display string: 'Scatter'): The image data is the scatter component. + * - \b Multispectral (Display string: 'Multispectral'): The image data is the multispectral component. + * + * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. + * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. + */ + PropertyI64 chunkComponentSelector; + /// \brief An enumerated integer property. Returns the Identifier of the selected Component. + /** + * Returns the Identifier of the selected Component. This can be used to identify the image component type of a multi-component payload. + * + * The following string values might be valid for this feature: + * - \b Intensity (Display string: 'Intensity'): The image data is the intensity component (visible). + * - \b Infrared (Display string: 'Infrared'): The image data is the infrared component. + * - \b Ultraviolet (Display string: 'Ultraviolet'): The image data is the ultraviolet component. + * - \b Range (Display string: 'Range'): The image data is the range component (distance or depth). + * - \b Reflectance (Display string: 'Reflectance'): The image data is the reflected intensity component (acquired with the Range). + * - \b Disparity (Display string: 'Disparity'): The image data is the disparity component. + * - \b Confidence (Display string: 'Confidence'): The image data is the confidence map component. + * - \b Scatter (Display string: 'Scatter'): The image data is the scatter component. + * - \b Multispectral (Display string: 'Multispectral'): The image data is the multispectral component. + * + * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. + * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. + */ + PropertyI64 chunkComponentID; + /// \brief An integer property. Returns a unique Identifier value that corresponds to the selected chunk Component. + /** + * Returns a unique Identifier value that corresponds to the selected chunk Component. + */ + PropertyI64 chunkComponentIDValue; + /// \brief An enumerated integer property. Selects the component Group from which to retrieve data from. + /** + * Selects the component Group from which to retrieve data from. + * + * The following string values might be valid for this feature: + * - \b Group0 (Display string: 'Group 0'): Selects Components group 0. + * - \b Group1 (Display string: 'Group 1'): Selects Components group 1. + * - \b Group2 (Display string: 'Group 2'): Selects Components group 2. + * - \b Group3 (Display string: 'Group 3'): Selects Components group 3. + * + * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. + * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. + */ + PropertyI64 chunkGroupSelector; + /// \brief An enumerated integer property. Returns a unique Identifier corresponding to the selected Group of components. + /** + * Returns a unique Identifier corresponding to the selected Group of components. This can be used to identify the component Group of a multi-group payload. + * + * The following string values might be valid for this feature: + * - \b Group0 (Display string: 'Group 0'): Selects Components group 0. + * - \b Group1 (Display string: 'Group 1'): Selects Components group 1. + * - \b Group2 (Display string: 'Group 2'): Selects Components group 2. + * - \b Group3 (Display string: 'Group 3'): Selects Components group 3. + * + * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. + * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. + */ + PropertyI64 chunkGroupID; + /// \brief An enumerated integer property. This feature is deprecated (See ChunkComponentID). + /** + * \deprecated + * This feature is deprecated (See ChunkComponentID). It was representing the component of the payload image. + * + * The following string values might be valid for this feature: + * - \b Intensity (Display string: 'Intensity'): Intensity + * - \b Infrared (Display string: 'Infrared'): Infrared + * - \b Ultraviolet (Display string: 'Ultraviolet'): Ultraviolet + * - \b Range (Display string: 'Range'): Range + * - \b Reflectance (Display string: 'Reflectance'): Reflectance + * - \b Disparity (Display string: 'Disparity'): Disparity + * - \b Scatter (Display string: 'Scatter'): Scatter + * - \b Confidence (Display string: 'Confidence'): Confidence + * + * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. + * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. + */ + PropertyI64 chunkImageComponent; + /// \brief An integer property. Returns a unique Identifier value that corresponds to the Group of Components of the selected chunk Component. + /** + * Returns a unique Identifier value that corresponds to the Group of Components of the selected chunk Component. + */ + PropertyI64 chunkGroupIDValue; + /// \brief An integer property. This feature is deprecated (See ChunkComponentSelector). + /** + * \deprecated + * This feature is deprecated (See ChunkComponentSelector). It was selecting the individual parts of a multi-component/multi-part buffer to access. + */ + PropertyI64 chunkPartSelector; + /// \brief A string property. Returns the entire image data included in the payload. + /** + * Returns the entire image data included in the payload. + */ + PropertyS chunkImage; + /// \brief An integer property. Returns the OffsetX of the image included in the payload. + /** + * Returns the OffsetX of the image included in the payload. + */ + PropertyI64 chunkOffsetX; + /// \brief An integer property. Returns the OffsetY of the image included in the payload. /** * Returns the OffsetY of the image included in the payload. */ @@ -11688,7 +12434,6 @@ public: * - \b Counter0 (Display string: 'Counter 0'): Selects the counter 0. * - \b Counter1 (Display string: 'Counter 1'): Selects the counter 1. * - \b Counter2 (Display string: 'Counter 2'): Selects the counter 2. - * - \b Counter\#3\# (Display string: 'Counter \#3\#'): Selects the counter \#3\#. * - \b Counter3 (Display string: 'Counter 3'): Selects the counter 3. * - \b Counter4 (Display string: 'Counter 4'): Selects the counter 4. * - \b Counter5 (Display string: 'Counter 5'): Selects the counter 5. @@ -11702,7 +12447,6 @@ public: * - \b Counter13 (Display string: 'Counter 13'): Selects the counter 13. * - \b Counter14 (Display string: 'Counter 14'): Selects the counter 14. * - \b Counter15 (Display string: 'Counter 15'): Selects the counter 15. - * - \b Counter16 (Display string: 'Counter 16') * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -11721,7 +12465,6 @@ public: * - \b Timer0 (Display string: 'Timer 0'): Selects the first Timer. * - \b Timer1 (Display string: 'Timer 1'): Selects the first Timer. * - \b Timer2 (Display string: 'Timer 2'): Selects the second Timer. - * - \b Timer\#3\# (Display string: 'Timer \#3\#'): Selects the second Timer. * - \b Timer3 (Display string: 'Timer 3'): Selects the second Timer. * - \b Timer4 (Display string: 'Timer 4'): Selects the second Timer. * - \b Timer5 (Display string: 'Timer 5'): Selects the second Timer. @@ -11735,7 +12478,6 @@ public: * - \b Timer13 (Display string: 'Timer 13'): Selects the second Timer. * - \b Timer14 (Display string: 'Timer 14'): Selects the second Timer. * - \b Timer15 (Display string: 'Timer 15'): Selects the second Timer. - * - \b Timer16 (Display string: 'Timer 16') * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -11759,7 +12501,6 @@ public: * - \b Encoder0 (Display string: 'Encoder 0'): Selects the first Encoder. * - \b Encoder1 (Display string: 'Encoder 1'): Selects the first Encoder. * - \b Encoder2 (Display string: 'Encoder 2'): Selects the second Encoder. - * - \b Encoder\#3\# (Display string: 'Encoder \#3\#'): Selects the second Encoder. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -11789,18 +12530,17 @@ public: * Selects which exposure time is read by the ChunkExposureTime feature. * * The following string values might be valid for this feature: - * - \b Common (Display string: 'Common'): Selects the common ExposureTime. - * - \b Red (Display string: 'Red'): Selects the red common ExposureTime. - * - \b Green (Display string: 'Green'): Selects the green ExposureTime. * - \b Blue (Display string: 'Blue'): Selects the blue ExposureTime. + * - \b Common (Display string: 'Common'): Selects the common ExposureTime. * - \b Cyan (Display string: 'Cyan'): Selects the cyan common ExposureTime.. - * - \b Magenta (Display string: 'Magenta'): Selects the magenta ExposureTime.. - * - \b Yellow (Display string: 'Yellow'): Selects the yellow ExposureTime.. + * - \b Green (Display string: 'Green'): Selects the green ExposureTime. * - \b Infrared (Display string: 'Infrared'): Selects the infrared ExposureTime. - * - \b Ultraviolet (Display string: 'Ultraviolet'): Selects the ultraviolet ExposureTime. + * - \b Magenta (Display string: 'Magenta'): Selects the magenta ExposureTime.. + * - \b Red (Display string: 'Red'): Selects the red common ExposureTime. * - \b Stage1 (Display string: 'Stage 1'): Selects the first stage ExposureTime. * - \b Stage2 (Display string: 'Stage 2'): Selects the second stage ExposureTime. - * - \b Stage\#3\# (Display string: 'Stage \#3\#'): Selects the second stage ExposureTime. + * - \b Ultraviolet (Display string: 'Ultraviolet'): Selects the ultraviolet ExposureTime. + * - \b Yellow (Display string: 'Yellow'): Selects the yellow ExposureTime.. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -11817,49 +12557,12 @@ public: * * The following string values might be valid for this feature: * - \b All (Display string: 'All'): Gain will be applied to all channels or taps. - * - \b Red (Display string: 'Red'): Gain will be applied to the red channel. - * - \b Green (Display string: 'Green'): Gain will be applied to the green channel. - * - \b Blue (Display string: 'Blue'): Gain will be applied to the blue channel. - * - \b Y (Display string: 'Y'): Gain will be applied to Y channel. - * - \b U (Display string: 'U'): Gain will be applied to U channel. - * - \b V (Display string: 'V'): Gain will be applied to V channel. - * - \b Tap1 (Display string: 'Tap 1'): Gain will be applied to Tap 1. - * - \b Tap2 (Display string: 'Tap 2'): Gain will be applied to Tap 2. - * - \b Tap\#3\# (Display string: 'Tap \#3\#'): Gain will be applied to Tap \#3\#. * - \b AnalogAll (Display string: 'Analog All'): Gain will be applied to all analog channels or taps. - * - \b AnalogRed (Display string: 'Analog Red'): Gain will be applied to the red analog channel. - * - \b AnalogGreen (Display string: 'Analog Green'): Gain will be applied to the green analog channel. * - \b AnalogBlue (Display string: 'Analog Blue'): Gain will be applied to the blue analog channel. - * - \b AnalogY (Display string: 'Analog Y'): Gain will be applied to Y analog channel. - * - \b AnalogU (Display string: 'Analog U'): Gain will be applied to U analog channel. - * - \b AnalogV (Display string: 'Analog V'): Gain will be applied to V analog channel. + * - \b AnalogGreen (Display string: 'Analog Green'): Gain will be applied to the green analog channel. + * - \b AnalogRed (Display string: 'Analog Red'): Gain will be applied to the red analog channel. * - \b AnalogTap1 (Display string: 'Analog Tap 1'): Analog gain will be applied to Tap 1. * - \b AnalogTap2 (Display string: 'Analog Tap 2'): Analog gain will be applied to Tap 2. - * - \b AnalogTap\#3\# (Display string: 'Analog Tap \#3\#'): Analog gain will be applied to Tap \#3\#. - * - \b DigitalAll (Display string: 'Digital All'): Gain will be applied to all digital channels or taps. - * - \b DigitalRed (Display string: 'Digital Red'): Gain will be applied to the red digital channel. - * - \b DigitalGreen (Display string: 'Digital Green'): Gain will be applied to the green digital channel. - * - \b DigitalBlue (Display string: 'Digital Blue'): Gain will be applied to the blue digital channel. - * - \b DigitalY (Display string: 'Digital Y'): Gain will be applied to Y digital channel. - * - \b DigitalU (Display string: 'Digital U'): Gain will be applied to U digital channel. - * - \b DigitalV (Display string: 'Digital V'): Gain will be applied to V digital channel. - * - \b DigitalTap1 (Display string: 'Digital Tap 1'): Digital gain will be applied to Tap 1. - * - \b DigitalTap2 (Display string: 'Digital Tap 2'): Digital gain will be applied to Tap 2. - * - \b DigitalTap\#3\# (Display string: 'Digital Tap \#3\#'): Digital gain will be applied to Tap \#3\#. - * - \b Tap3 (Display string: 'Tap 3'): Gain will be applied to Tap 3. - * - \b Tap4 (Display string: 'Tap 4'): Gain will be applied to Tap 4. - * - \b Tap5 (Display string: 'Tap 5'): Gain will be applied to Tap 5. - * - \b Tap6 (Display string: 'Tap 6'): Gain will be applied to Tap 6. - * - \b Tap7 (Display string: 'Tap 7'): Gain will be applied to Tap 7. - * - \b Tap8 (Display string: 'Tap 8'): Gain will be applied to Tap 8. - * - \b Tap9 (Display string: 'Tap 9'): Gain will be applied to Tap 9. - * - \b Tap10 (Display string: 'Tap 10'): Gain will be applied to Tap 10. - * - \b Tap11 (Display string: 'Tap 11'): Gain will be applied to Tap 11. - * - \b Tap12 (Display string: 'Tap 12'): Gain will be applied to Tap 12. - * - \b Tap13 (Display string: 'Tap 13'): Gain will be applied to Tap 13. - * - \b Tap14 (Display string: 'Tap 14'): Gain will be applied to Tap 14. - * - \b Tap15 (Display string: 'Tap 15'): Gain will be applied to Tap 15. - * - \b Tap16 (Display string: 'Tap 16') * - \b AnalogTap3 (Display string: 'Analog Tap 3'): Analog gain will be applied to Tap 3. * - \b AnalogTap4 (Display string: 'Analog Tap 4'): Analog gain will be applied to Tap 4. * - \b AnalogTap5 (Display string: 'Analog Tap 5'): Analog gain will be applied to Tap 5. @@ -11873,7 +12576,16 @@ public: * - \b AnalogTap13 (Display string: 'Analog Tap 13'): Analog gain will be applied to Tap 13. * - \b AnalogTap14 (Display string: 'Analog Tap 14'): Analog gain will be applied to Tap 14. * - \b AnalogTap15 (Display string: 'Analog Tap 15'): Analog gain will be applied to Tap 15. - * - \b AnalogTap16 (Display string: 'Analog Tap 16') + * - \b AnalogU (Display string: 'Analog U'): Gain will be applied to U analog channel. + * - \b AnalogV (Display string: 'Analog V'): Gain will be applied to V analog channel. + * - \b AnalogY (Display string: 'Analog Y'): Gain will be applied to Y analog channel. + * - \b Blue (Display string: 'Blue'): Gain will be applied to the blue channel. + * - \b DigitalAll (Display string: 'Digital All'): Gain will be applied to all digital channels or taps. + * - \b DigitalBlue (Display string: 'Digital Blue'): Gain will be applied to the blue digital channel. + * - \b DigitalGreen (Display string: 'Digital Green'): Gain will be applied to the green digital channel. + * - \b DigitalRed (Display string: 'Digital Red'): Gain will be applied to the red digital channel. + * - \b DigitalTap1 (Display string: 'Digital Tap 1'): Digital gain will be applied to Tap 1. + * - \b DigitalTap2 (Display string: 'Digital Tap 2'): Digital gain will be applied to Tap 2. * - \b DigitalTap3 (Display string: 'Digital Tap 3'): Digital gain will be applied to Tap 3. * - \b DigitalTap4 (Display string: 'Digital Tap 4'): Digital gain will be applied to Tap 4. * - \b DigitalTap5 (Display string: 'Digital Tap 5'): Digital gain will be applied to Tap 5. @@ -11887,7 +12599,29 @@ public: * - \b DigitalTap13 (Display string: 'Digital Tap 13'): Digital gain will be applied to Tap 13. * - \b DigitalTap14 (Display string: 'Digital Tap 14'): Digital gain will be applied to Tap 14. * - \b DigitalTap15 (Display string: 'Digital Tap 15'): Digital gain will be applied to Tap 15. - * - \b DigitalTap16 (Display string: 'Digital Tap 16') + * - \b DigitalU (Display string: 'Digital U'): Gain will be applied to U digital channel. + * - \b DigitalV (Display string: 'Digital V'): Gain will be applied to V digital channel. + * - \b DigitalY (Display string: 'Digital Y'): Gain will be applied to Y digital channel. + * - \b Green (Display string: 'Green'): Gain will be applied to the green channel. + * - \b Red (Display string: 'Red'): Gain will be applied to the red channel. + * - \b Tap1 (Display string: 'Tap 1'): Gain will be applied to Tap 1. + * - \b Tap2 (Display string: 'Tap 2'): Gain will be applied to Tap 2. + * - \b Tap3 (Display string: 'Tap 3'): Gain will be applied to Tap 3. + * - \b Tap4 (Display string: 'Tap 4'): Gain will be applied to Tap 4. + * - \b Tap5 (Display string: 'Tap 5'): Gain will be applied to Tap 5. + * - \b Tap6 (Display string: 'Tap 6'): Gain will be applied to Tap 6. + * - \b Tap7 (Display string: 'Tap 7'): Gain will be applied to Tap 7. + * - \b Tap8 (Display string: 'Tap 8'): Gain will be applied to Tap 8. + * - \b Tap9 (Display string: 'Tap 9'): Gain will be applied to Tap 9. + * - \b Tap10 (Display string: 'Tap 10'): Gain will be applied to Tap 10. + * - \b Tap11 (Display string: 'Tap 11'): Gain will be applied to Tap 11. + * - \b Tap12 (Display string: 'Tap 12'): Gain will be applied to Tap 12. + * - \b Tap13 (Display string: 'Tap 13'): Gain will be applied to Tap 13. + * - \b Tap14 (Display string: 'Tap 14'): Gain will be applied to Tap 14. + * - \b Tap15 (Display string: 'Tap 15'): Gain will be applied to Tap 15. + * - \b U (Display string: 'U'): Gain will be applied to U channel. + * - \b V (Display string: 'V'): Gain will be applied to V channel. + * - \b Y (Display string: 'Y'): Gain will be applied to Y channel. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -11904,15 +12638,11 @@ public: * * The following string values might be valid for this feature: * - \b All (Display string: 'All'): Black Level will be applied to all channels or taps. - * - \b Red (Display string: 'Red'): Black Level will be applied to the red channel. - * - \b Green (Display string: 'Green'): Black Level will be applied to the green channel. * - \b Blue (Display string: 'Blue'): Black Level will be applied to the blue channel. - * - \b Y (Display string: 'Y'): Black Level will be applied to Y channel. - * - \b U (Display string: 'U'): Black Level will be applied to U channel. - * - \b V (Display string: 'V'): Black Level will be applied to V channel. + * - \b Green (Display string: 'Green'): Black Level will be applied to the green channel. + * - \b Red (Display string: 'Red'): Black Level will be applied to the red channel. * - \b Tap1 (Display string: 'Tap 1'): Black Level will be applied to Tap 1. * - \b Tap2 (Display string: 'Tap 2'): Black Level will be applied to Tap 2. - * - \b Tap\#3\# (Display string: 'Tap \#3\#'): Black Level will be applied to Tap \#3\#. * - \b Tap3 (Display string: 'Tap 3'): Black Level will be applied to Tap 3. * - \b Tap4 (Display string: 'Tap 4'): Black Level will be applied to Tap 4. * - \b Tap5 (Display string: 'Tap 5'): Black Level will be applied to Tap 5. @@ -11926,7 +12656,9 @@ public: * - \b Tap13 (Display string: 'Tap 13'): Black Level will be applied to Tap 13. * - \b Tap14 (Display string: 'Tap 14'): Black Level will be applied to Tap 14. * - \b Tap15 (Display string: 'Tap 15'): Black Level will be applied to Tap 15. - * - \b Tap16 (Display string: 'Tap 16') + * - \b U (Display string: 'U'): Black Level will be applied to U channel. + * - \b V (Display string: 'V'): Black Level will be applied to V channel. + * - \b Y (Display string: 'Y'): Black Level will be applied to Y channel. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -11942,9 +12674,9 @@ public: * Returns the LinePitch of the image included in the payload. */ PropertyI64 chunkLinePitch; - /// \brief An integer property. Returns the unique Identifier of the frame (or image) included in the payload. + /// \brief An integer property. Returns the unique Identifier of the frame (image or data container) included in the payload. /** - * Returns the unique Identifier of the frame (or image) included in the payload. + * Returns the unique Identifier of the frame (image or data container) included in the payload. */ PropertyI64 chunkFrameID; /// \brief An enumerated integer property. Selects which Source to retrieve data from. @@ -11955,7 +12687,6 @@ public: * - \b Source0 (Display string: 'Source 0'): Image comes from the Source 0. * - \b Source1 (Display string: 'Source 1'): Image comes from the Source 1. * - \b Source2 (Display string: 'Source 2'): Image comes from the Source 2. - * - \b Source\#3\# (Display string: 'Source \#3\#'): Image comes from the Source \#3\#. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -11969,7 +12700,6 @@ public: * - \b Source0 (Display string: 'Source 0'): Image comes from the Source 0. * - \b Source1 (Display string: 'Source 1'): Image comes from the Source 1. * - \b Source2 (Display string: 'Source 2'): Image comes from the Source 2. - * - \b Source\#3\# (Display string: 'Source \#3\#'): Image comes from the Source \#3\#. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -11994,7 +12724,6 @@ public: * - \b Stream1 (Display string: 'Stream 1'): Data comes from Stream1. * - \b Stream2 (Display string: 'Stream 2'): Data comes from Stream2. * - \b Stream3 (Display string: 'Stream 3'): Data comes from Stream3. - * - \b Stream\#4\# (Display string: 'Stream \#4\#'): Data comes from Stream\#4\#. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -12189,6 +12918,41 @@ public: * Contains a custom identifier previously specified by the user. */ PropertyI64 chunkmvCustomIdentifier; + /// \brief An integer property. Returns the bitmask of components contained in this block. + /** + * Returns the bitmask of components contained in this block. + */ + PropertyI64 chunkComponents; + /// \brief An integer property. Returns index of the image part in this block depending on selected component. + /** + * Returns index of the image part in this block depending on selected component. + */ + PropertyI64 chunkPartIndex; + /// \brief A floating point property. Returns the noise of the image. + /** + * Returns the noise of the image. + */ + PropertyF chunkRcNoise; + /// \brief A floating point property. Returns the Out1 reduction. + /** + * Returns the Out1 reduction. + */ + PropertyF chunkRcOut1Reduction; + /// \brief A boolean property. True if test image. + /** + * True if test image. + */ + PropertyIBoolean chunkRcTest; + /// \brief A floating point property. Returns the brightness of the image. + /** + * Returns the brightness of the image + */ + PropertyF chunkRcBrightness; + /// \brief A boolean property. True if auto exposure is still adapting. + /** + * True if auto exposure is still adapting. + */ + PropertyIBoolean chunkRcAutoExposureAdapting; // *INDENT-OFF* PYTHON_OR_JAVA_ONLY( %mutable; ) // *INDENT-ON* @@ -12244,8 +13008,8 @@ public: * * The following string values might be valid for this feature: * - \b Off (Display string: 'Off'): The test mode is disabled. This feature has no effect and the device is streaming data normally according to its configuration. This option has to be the default after each boot of the device. - * - \b MultiPart (Display string: 'Multi Part'): The device streams data using multi-part payload format with at least one part in each payload. This option must be present if and only if the device supports the multi-part payload format. If the underlying transport layer negotiation has failed to allow the device to enter multi-part mode, it must not be possible to enable this test mode. - * - \b GenDC (Display string: 'Gen DC'): The device streams data using GenDC payload format with at least one component in each payload. This option must be present if the device supports the GenDC payload format. If the underlying transport layer negotiation has failed to allow the device to enter GenDC mode, it must not be possible to enable this test mode. + * - \b MultiPart (Display string: 'Multi Part'): The device streams data using multi-part payload format with at least one part in each payload. This option must be present if and only if the device supports the multi-part payload format. + * - \b GenDC (Display string: 'GenDC'): The device streams data using GenDC payload format with at least one component in each payload. This option must be present if the device supports the GenDC payload format. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -12298,6 +13062,7 @@ public: ptpClockID(), ptpParentClockID(), ptpGrandmasterClockID(), + ptpMeanPropagationDelay(), gevVersionMajor(), gevVersionMinor(), gevDeviceModeIsBigEndian(), @@ -12435,6 +13200,7 @@ public: locator.bindComponent( ptpParentClockID, "PtpParentClockId" ); } locator.bindComponent( ptpGrandmasterClockID, "PtpGrandmasterClockID" ); + locator.bindComponent( ptpMeanPropagationDelay, "PtpMeanPropagationDelay" ); locator.bindComponent( gevVersionMajor, "GevVersionMajor" ); locator.bindComponent( gevVersionMinor, "GevVersionMinor" ); locator.bindComponent( gevDeviceModeIsBigEndian, "GevDeviceModeIsBigEndian" ); @@ -12572,9 +13338,9 @@ public: * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. */ PropertyI64 genDCStreamingStatus; - /// \brief A string property. Returns a preliminary GenDC Descriptor that can be used as reference for the data to be streamed out by the device in its current configuration. + /// \brief A string property. Returns a preliminary GenDC Descriptor that can be used as reference for the data Container to be streamed out by the device in its current configuration. /** - * Returns a preliminary GenDC Descriptor that can be used as reference for the data to be streamed out by the device in its current configuration. This information can be used to set up the receiver in advance to be ready for the data Containers to come. + * Returns a preliminary GenDC Descriptor that can be used as reference for the data Container to be streamed out by the device in its current configuration. This information can be used to set up the receiver in advance to be ready for the data Containers to come. */ PropertyS genDCDescriptor; /// \brief A string property. Returns the GenDC Container data Flow mapping table that will be used to transport the GenDC Container. @@ -12750,9 +13516,8 @@ public: * Returns the latched state of the clock servo. When the servo is in a locked state, the value returned is 'Locked'. When the servo is in a non-locked state, a device-specific value can be returned to give specific information. If no device-specific value is available to describe the current state of the clock servo, the value should be 'Unknown'. * * The following string values might be valid for this feature: - * - \b Unknown (Display string: 'Unknown'): Unknown - * - \b Locked (Display string: 'Locked'): Locked - * - \b Device-Specific (Display string: 'Device - Specific'): Device - Specific + * - \b Unknown (Display string: 'Unknown'): Servo state is unknown. + * - \b Locked (Display string: 'Locked'): Servo is locked * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -12778,6 +13543,11 @@ public: * Returns the latched grandmaster clock ID of the PTP device. The grandmaster clock ID is the clock ID of the current grandmaster clock. */ PropertyI64 ptpGrandmasterClockID; + /// \brief An integer property. Returns the latched mean propagation delay from the current PTP master clock in nanoseconds. + /** + * Returns the latched mean propagation delay from the current PTP master clock in nanoseconds. The value is valid only when the PtpStatus is Slave. + */ + PropertyI64 ptpMeanPropagationDelay; /// \brief An integer property. This feature is deprecated (See DeviceTLVersionMajor). /** * \deprecated @@ -12861,63 +13631,62 @@ public: * Selects the GEV option to interrogate for existing support. * * The following string values might be valid for this feature: - * - \b SingleLink (Display string: 'Single Link'): Single Link - * - \b MultiLink (Display string: 'Multi Link'): Multi Link - * - \b StaticLAG (Display string: 'Static LAG'): Static LAG + * - \b Action (Display string: 'Action'): Action + * - \b CCPApplicationSocket (Display string: 'CCP Application Socket'): CCP Application Socket + * - \b CommandsConcatenation (Display string: 'Commands Concatenation'): Commands Concatenation + * - \b DiscoveryAckDelay (Display string: 'Discovery Ack Delay'): Discovery Ack Delay + * - \b DiscoveryAckDelayWritable (Display string: 'Discovery Ack Delay Writable'): Discovery Ack Delay Writable * - \b DynamicLAG (Display string: 'Dynamic LAG'): Dynamic LAG - * - \b PAUSEFrameReception (Display string: 'PAUSE Frame Reception'): PAUSE Frame Reception - * - \b PAUSEFrameGeneration (Display string: 'PAUSE Frame Generation'): PAUSE Frame Generation - * - \b IPConfigurationLLA (Display string: 'IP Configuration LLA'): IP Configuration LLA + * - \b Event (Display string: 'Event'): Event + * - \b EventData (Display string: 'Event Data'): Event Data + * - \b ExtendedStatusCodes (Display string: 'Extended Status Codes'): Extended Status Codes + * - \b ExtendedStatusCodesVersion2_0 (Display string: 'Extended Status Codes Version 2 0'): Extended Status Codes Version 2 0 + * - \b HeartbeatDisable (Display string: 'Heartbeat Disable'): Heartbeat Disable + * - \b IEEE1588 (Display string: 'IEEE 1588'): IEEE 1588 * - \b IPConfigurationDHCP (Display string: 'IP Configuration DHCP'): IP Configuration DHCP + * - \b IPConfigurationLLA (Display string: 'IP Configuration LLA'): IP Configuration LLA * - \b IPConfigurationPersistentIP (Display string: 'IP Configuration Persistent IP'): IP Configuration Persistent IP - * - \b StreamChannelSourceSocket (Display string: 'Stream Channel Source Socket'): Stream Channel Source Socket - * - \b StandardIDMode (Display string: 'Standard ID Mode'): Standard ID Mode + * - \b LinkSpeed (Display string: 'Link Speed'): Link Speed + * - \b ManifestTable (Display string: 'Manifest Table'): Manifest Table * - \b MessageChannelSourceSocket (Display string: 'Message Channel Source Socket'): Message Channel Source Socket - * - \b CommandsConcatenation (Display string: 'Commands Concatenation'): Commands Concatenation - * - \b WriteMem (Display string: 'Write Mem'): Write Mem + * - \b MultiLink (Display string: 'Multi Link'): Multi Link + * - \b PAUSEFrameGeneration (Display string: 'PAUSE Frame Generation'): PAUSE Frame Generation + * - \b PAUSEFrameReception (Display string: 'PAUSE Frame Reception'): PAUSE Frame Reception * - \b PacketResend (Display string: 'Packet Resend'): Packet Resend - * - \b Event (Display string: 'Event'): Event - * - \b EventData (Display string: 'Event Data'): Event Data * - \b PendingAck (Display string: 'Pending Ack'): Pending Ack - * - \b IEEE1588 (Display string: 'IEEE 1588'): IEEE 1588 + * - \b PrimaryApplicationSwitchover (Display string: 'Primary Application Switchover'): Primary Application Switchover * - \b Ptp (Display string: 'Ptp'): Ptp - * - \b Action (Display string: 'Action'): Action - * - \b UnconditionalAction (Display string: 'Unconditional Action'): Unconditional Action * - \b ScheduledAction (Display string: 'Scheduled Action'): Scheduled Action - * - \b PrimaryApplicationSwitchover (Display string: 'Primary Application Switchover'): Primary Application Switchover - * - \b ExtendedStatusCodes (Display string: 'Extended Status Codes'): Extended Status Codes - * - \b ExtendedStatusCodesVersion2_0 (Display string: 'Extended Status Codes Version 2 0'): Extended Status Codes Version 2 0 - * - \b DiscoveryAckDelay (Display string: 'Discovery Ack Delay'): Discovery Ack Delay - * - \b DiscoveryAckDelayWritable (Display string: 'Discovery Ack Delay Writable'): Discovery Ack Delay Writable - * - \b TestData (Display string: 'Test Data'): Test Data - * - \b ManifestTable (Display string: 'Manifest Table'): Manifest Table - * - \b CCPApplicationSocket (Display string: 'CCP Application Socket'): CCP Application Socket - * - \b LinkSpeed (Display string: 'Link Speed'): Link Speed - * - \b HeartbeatDisable (Display string: 'Heartbeat Disable'): Heartbeat Disable * - \b SerialNumber (Display string: 'Serial Number'): Serial Number - * - \b UserDefinedName (Display string: 'User Defined Name'): User Defined Name + * - \b SingleLink (Display string: 'Single Link'): Single Link + * - \b StandardIDMode (Display string: 'Standard ID Mode'): Standard ID Mode + * - \b StaticLAG (Display string: 'Static LAG'): Static LAG + * - \b StreamChannel0AllInTransmission (Display string: 'Stream Channel 0 All In Transmission'): Stream Channel 0 All In Transmission * - \b StreamChannel0BigAndLittleEndian (Display string: 'Stream Channel 0 Big And Little Endian'): Stream Channel 0 Big And Little Endian + * - \b StreamChannel0ExtendedChunkData (Display string: 'Stream Channel 0 Extended Chunk Data'): Stream Channel 0 Extended Chunk Data * - \b StreamChannel0IPReassembly (Display string: 'Stream Channel 0 IP Reassembly'): Stream Channel 0 IP Reassembly * - \b StreamChannel0MultiZone (Display string: 'Stream Channel 0 Multi Zone'): Stream Channel 0 Multi Zone * - \b StreamChannel0PacketResendDestination (Display string: 'Stream Channel 0 Packet Resend Destination'): Stream Channel 0 Packet Resend Destination - * - \b StreamChannel0AllInTransmission (Display string: 'Stream Channel 0 All In Transmission'): Stream Channel 0 All In Transmission * - \b StreamChannel0UnconditionalStreaming (Display string: 'Stream Channel 0 Unconditional Streaming'): Stream Channel 0 Unconditional Streaming - * - \b StreamChannel0ExtendedChunkData (Display string: 'Stream Channel 0 Extended Chunk Data'): Stream Channel 0 Extended Chunk Data + * - \b StreamChannel1AllInTransmission (Display string: 'Stream Channel 1 All In Transmission'): Stream Channel 1 All In Transmission * - \b StreamChannel1BigAndLittleEndian (Display string: 'Stream Channel 1 Big And Little Endian'): Stream Channel 1 Big And Little Endian + * - \b StreamChannel1ExtendedChunkData (Display string: 'Stream Channel 1 Extended Chunk Data'): Stream Channel 1 Extended Chunk Data * - \b StreamChannel1IPReassembly (Display string: 'Stream Channel 1 IP Reassembly'): Stream Channel 1 IP Reassembly * - \b StreamChannel1MultiZone (Display string: 'Stream Channel 1 Multi Zone'): Stream Channel 1 Multi Zone * - \b StreamChannel1PacketResendDestination (Display string: 'Stream Channel 1 Packet Resend Destination'): Stream Channel 1 Packet Resend Destination - * - \b StreamChannel1AllInTransmission (Display string: 'Stream Channel 1 All In Transmission'): Stream Channel 1 All In Transmission * - \b StreamChannel1UnconditionalStreaming (Display string: 'Stream Channel 1 Unconditional Streaming'): Stream Channel 1 Unconditional Streaming - * - \b StreamChannel1ExtendedChunkData (Display string: 'Stream Channel 1 Extended Chunk Data'): Stream Channel 1 Extended Chunk Data + * - \b StreamChannel2AllInTransmission (Display string: 'Stream Channel 2 All In Transmission'): Stream Channel 2 All In Transmission * - \b StreamChannel2BigAndLittleEndian (Display string: 'Stream Channel 2 Big And Little Endian'): Stream Channel 2 Big And Little Endian + * - \b StreamChannel2ExtendedChunkData (Display string: 'Stream Channel 2 Extended Chunk Data'): Stream Channel 2 Extended Chunk Data * - \b StreamChannel2IPReassembly (Display string: 'Stream Channel 2 IP Reassembly'): Stream Channel 2 IP Reassembly * - \b StreamChannel2MultiZone (Display string: 'Stream Channel 2 Multi Zone'): Stream Channel 2 Multi Zone * - \b StreamChannel2PacketResendDestination (Display string: 'Stream Channel 2 Packet Resend Destination'): Stream Channel 2 Packet Resend Destination - * - \b StreamChannel2AllInTransmission (Display string: 'Stream Channel 2 All In Transmission'): Stream Channel 2 All In Transmission * - \b StreamChannel2UnconditionalStreaming (Display string: 'Stream Channel 2 Unconditional Streaming'): Stream Channel 2 Unconditional Streaming - * - \b StreamChannel2ExtendedChunkData (Display string: 'Stream Channel 2 Extended Chunk Data'): Stream Channel 2 Extended Chunk Data - * - \b StreamChannel\#3\#ExtendedChunkData (Display string: 'Stream Channel \#3\# Extended Chunk Data'): Stream Channel \#3\# Extended Chunk Data + * - \b StreamChannelSourceSocket (Display string: 'Stream Channel Source Socket'): Stream Channel Source Socket + * - \b TestData (Display string: 'Test Data'): Test Data + * - \b UnconditionalAction (Display string: 'Unconditional Action'): Unconditional Action + * - \b UserDefinedName (Display string: 'User Defined Name'): User Defined Name + * - \b WriteMem (Display string: 'Write Mem'): Write Mem * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -13388,6 +14157,7 @@ public: * - \b CXP6_X1 (Display string: 'CXP 6 X 1'): 1 Connection operating at CXP-6 speed (6.25 Gbps). * - \b CXP10_X1 (Display string: 'CXP 10 X 1'): 1 Connection operating at CXP-10 speed (10.00 Gbps). * - \b CXP12_X1 (Display string: 'CXP 12 X 1'): 1 Connection operating at CXP-12 speed (12.50 Gbps). + * - \b CXP25_X1 (Display string: 'CXP 25 X 1'): 1 Connection operating at CXP-25 speed (25.78125 Gbps). * - \b CXP1_X2 (Display string: 'CXP 1 X 2'): 2 Connections operating at CXP-1 speed (1.25 Gbps). * - \b CXP2_X2 (Display string: 'CXP 2 X 2'): 2 Connections operating at CXP-2 speed (2.50 Gbps). * - \b CXP3_X2 (Display string: 'CXP 3 X 2'): 2 Connections operating at CXP-3 speed (3.125 Gbps). @@ -13395,13 +14165,7 @@ public: * - \b CXP6_X2 (Display string: 'CXP 6 X 2'): 2 Connections operating at CXP-6 speed (6.25 Gbps). * - \b CXP10_X2 (Display string: 'CXP 10 X 2'): 2 Connections operating at CXP-10 speed (10.00 Gbps). * - \b CXP12_X2 (Display string: 'CXP 12 X 2'): 2 Connections operating at CXP-12 speed (12.50 Gbps). - * - \b CXP1_X3 (Display string: 'CXP 1 X 3'): 3 Connections operating at CXP-1 speed (1.25 Gbps). - * - \b CXP2_X3 (Display string: 'CXP 2 X 3'): 3 Connections operating at CXP-2 speed (2.50 Gbps). - * - \b CXP3_X3 (Display string: 'CXP 3 X 3'): 3 Connections operating at CXP-3 speed (3.125 Gbps). - * - \b CXP5_X3 (Display string: 'CXP 5 X 3'): 3 Connections operating at CXP-5 speed (5.00 Gbps). - * - \b CXP6_X3 (Display string: 'CXP 6 X 3'): 3 Connections operating at CXP-6 speed (6.25 Gbps). - * - \b CXP10_X3 (Display string: 'CXP 10 X 3'): 3 Connections operating at CXP-10 speed (10.00 Gbps). - * - \b CXP12_X3 (Display string: 'CXP 12 X 3'): 3 Connections operating at CXP-12 speed (12.50 Gbps). + * - \b CXP25_X2 (Display string: 'CXP 25 X 2'): 2 Connections operating at CXP-25 speed (25.78125 Gbps). * - \b CXP1_X4 (Display string: 'CXP 1 X 4'): 4 Connections operating at CXP-1 speed (1.25 Gbps). * - \b CXP2_X4 (Display string: 'CXP 2 X 4'): 4 Connections operating at CXP-2 speed (2.50 Gbps). * - \b CXP3_X4 (Display string: 'CXP 3 X 4'): 4 Connections operating at CXP-3 speed (3.125 Gbps). @@ -13409,20 +14173,15 @@ public: * - \b CXP6_X4 (Display string: 'CXP 6 X 4'): 4 Connections operating at CXP-6 speed (6.25 Gbps). * - \b CXP10_X4 (Display string: 'CXP 10 X 4'): 4 Connections operating at CXP-10 speed (10.00 Gbps). * - \b CXP12_X4 (Display string: 'CXP 12 X 4'): 4 Connections operating at CXP-12 speed (12.50 Gbps). - * - \b CXP1_X5 (Display string: 'CXP 1 X 5'): 5 Connections operating at CXP-1 speed (1.25 Gbps). - * - \b CXP2_X5 (Display string: 'CXP 2 X 5'): 5 Connections operating at CXP-2 speed (2.50 Gbps). - * - \b CXP3_X5 (Display string: 'CXP 3 X 5'): 5 Connections operating at CXP-3 speed (3.125 Gbps). - * - \b CXP5_X5 (Display string: 'CXP 5 X 5'): 5 Connections operating at CXP-5 speed (5.00 Gbps). - * - \b CXP6_X5 (Display string: 'CXP 6 X 5'): 5 Connections operating at CXP-6 speed (6.25 Gbps). - * - \b CXP10_X5 (Display string: 'CXP 10 X 5'): 5 Connections operating at CXP-10 speed (10.00 Gbps). - * - \b CXP12_X5 (Display string: 'CXP 12 X 5'): 5 Connections operating at CXP-12 speed (12.50 Gbps). - * - \b CXP1_X6 (Display string: 'CXP 1 X 6'): 6 Connections operating at CXP-1 speed (1.25 Gbps). - * - \b CXP2_X6 (Display string: 'CXP 2 X 6'): 6 Connections operating at CXP-2 speed (2.50 Gbps). - * - \b CXP3_X6 (Display string: 'CXP 3 X 6'): 6 Connections operating at CXP-3 speed (3.125 Gbps). - * - \b CXP5_X6 (Display string: 'CXP 5 X 6'): 6 Connections operating at CXP-5 speed (5.00 Gbps). - * - \b CXP6_X6 (Display string: 'CXP 6 X 6'): 6 Connections operating at CXP-6 speed (6.25 Gbps). - * - \b CXP10_X6 (Display string: 'CXP 10 X 6'): 6 Connections operating at CXP-10 speed (10.00 Gbps). - * - \b CXP12_X6 (Display string: 'CXP 12 X 6'): 6 Connections operating at CXP-12 speed (12.50 Gbps). + * - \b CXP25_X4 (Display string: 'CXP 25 X 4'): 4 Connections operating at CXP-25 speed (25.78125 Gbps). + * - \b CXP1_X8 (Display string: 'CXP 1 X 8'): 8 Connections operating at CXP-1 speed (1.25 Gbps). + * - \b CXP2_X8 (Display string: 'CXP 2 X 8'): 8 Connections operating at CXP-2 speed (2.50 Gbps). + * - \b CXP3_X8 (Display string: 'CXP 3 X 8'): 8 Connections operating at CXP-3 speed (3.125 Gbps). + * - \b CXP5_X8 (Display string: 'CXP 5 X 8'): 8 Connections operating at CXP-5 speed (5.00 Gbps). + * - \b CXP6_X8 (Display string: 'CXP 6 X 8'): 8 Connections operating at CXP-6 speed (6.25 Gbps). + * - \b CXP10_X8 (Display string: 'CXP 10 X 8'): 8 Connections operating at CXP-10 speed (10.00 Gbps). + * - \b CXP12_X8 (Display string: 'CXP 12 X 8'): 8 Connections operating at CXP-12 speed (12.50 Gbps). + * - \b CXP25_X8 (Display string: 'CXP 25 X 8'): 8 Connections operating at CXP-25 speed (25.78125 Gbps). * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -13440,6 +14199,7 @@ public: * - \b CXP6_X1 (Display string: 'CXP 6 X 1'): 1 Connection operating at CXP-6 speed (6.25 Gbps). * - \b CXP10_X1 (Display string: 'CXP 10 X 1'): 1 Connection operating at CXP-10 speed (10.00 Gbps). * - \b CXP12_X1 (Display string: 'CXP 12 X 1'): 1 Connection operating at CXP-12 speed (12.50 Gbps). + * - \b CXP25_X1 (Display string: 'CXP 25 X 1'): 1 Connection operating at CXP-25 speed (25.78125 Gbps). * - \b CXP1_X2 (Display string: 'CXP 1 X 2'): 2 Connections operating at CXP-1 speed (1.25 Gbps). * - \b CXP2_X2 (Display string: 'CXP 2 X 2'): 2 Connections operating at CXP-2 speed (2.50 Gbps). * - \b CXP3_X2 (Display string: 'CXP 3 X 2'): 2 Connections operating at CXP-3 speed (3.125 Gbps). @@ -13447,13 +14207,7 @@ public: * - \b CXP6_X2 (Display string: 'CXP 6 X 2'): 2 Connections operating at CXP-6 speed (6.25 Gbps). * - \b CXP10_X2 (Display string: 'CXP 10 X 2'): 2 Connections operating at CXP-10 speed (10.00 Gbps). * - \b CXP12_X2 (Display string: 'CXP 12 X 2'): 2 Connections operating at CXP-12 speed (12.50 Gbps). - * - \b CXP1_X3 (Display string: 'CXP 1 X 3'): 3 Connections operating at CXP-1 speed (1.25 Gbps). - * - \b CXP2_X3 (Display string: 'CXP 2 X 3'): 3 Connections operating at CXP-2 speed (2.50 Gbps). - * - \b CXP3_X3 (Display string: 'CXP 3 X 3'): 3 Connections operating at CXP-3 speed (3.125 Gbps). - * - \b CXP5_X3 (Display string: 'CXP 5 X 3'): 3 Connections operating at CXP-5 speed (5.00 Gbps). - * - \b CXP6_X3 (Display string: 'CXP 6 X 3'): 3 Connections operating at CXP-6 speed (6.25 Gbps). - * - \b CXP10_X3 (Display string: 'CXP 10 X 3'): 3 Connections operating at CXP-10 speed (10.00 Gbps). - * - \b CXP12_X3 (Display string: 'CXP 12 X 3'): 3 Connections operating at CXP-12 speed (12.50 Gbps). + * - \b CXP25_X2 (Display string: 'CXP 25 X 2'): 2 Connections operating at CXP-25 speed (25.78125 Gbps). * - \b CXP1_X4 (Display string: 'CXP 1 X 4'): 4 Connections operating at CXP-1 speed (1.25 Gbps). * - \b CXP2_X4 (Display string: 'CXP 2 X 4'): 4 Connections operating at CXP-2 speed (2.50 Gbps). * - \b CXP3_X4 (Display string: 'CXP 3 X 4'): 4 Connections operating at CXP-3 speed (3.125 Gbps). @@ -13461,20 +14215,36 @@ public: * - \b CXP6_X4 (Display string: 'CXP 6 X 4'): 4 Connections operating at CXP-6 speed (6.25 Gbps). * - \b CXP10_X4 (Display string: 'CXP 10 X 4'): 4 Connections operating at CXP-10 speed (10.00 Gbps). * - \b CXP12_X4 (Display string: 'CXP 12 X 4'): 4 Connections operating at CXP-12 speed (12.50 Gbps). - * - \b CXP1_X5 (Display string: 'CXP 1 X 5'): 5 Connections operating at CXP-1 speed (1.25 Gbps). - * - \b CXP2_X5 (Display string: 'CXP 2 X 5'): 5 Connections operating at CXP-2 speed (2.50 Gbps). - * - \b CXP3_X5 (Display string: 'CXP 3 X 5'): 5 Connections operating at CXP-3 speed (3.125 Gbps). - * - \b CXP5_X5 (Display string: 'CXP 5 X 5'): 5 Connections operating at CXP-5 speed (5.00 Gbps). - * - \b CXP6_X5 (Display string: 'CXP 6 X 5'): 5 Connections operating at CXP-6 speed (6.25 Gbps). - * - \b CXP10_X5 (Display string: 'CXP 10 X 5'): 5 Connections operating at CXP-10 speed (10.00 Gbps). - * - \b CXP12_X5 (Display string: 'CXP 12 X 5'): 5 Connections operating at CXP-12 speed (12.50 Gbps). - * - \b CXP1_X6 (Display string: 'CXP 1 X 6'): 6 Connections operating at CXP-1 speed (1.25 Gbps). - * - \b CXP2_X6 (Display string: 'CXP 2 X 6'): 6 Connections operating at CXP-2 speed (2.50 Gbps). - * - \b CXP3_X6 (Display string: 'CXP 3 X 6'): 6 Connections operating at CXP-3 speed (3.125 Gbps). - * - \b CXP5_X6 (Display string: 'CXP 5 X 6'): 6 Connections operating at CXP-5 speed (5.00 Gbps). - * - \b CXP6_X6 (Display string: 'CXP 6 X 6'): 6 Connections operating at CXP-6 speed (6.25 Gbps). - * - \b CXP10_X6 (Display string: 'CXP 10 X 6'): 6 Connections operating at CXP-10 speed (10.00 Gbps). - * - \b CXP12_X6 (Display string: 'CXP 12 X 6'): 6 Connections operating at CXP-12 speed (12.50 Gbps). + * - \b CXP25_X4 (Display string: 'CXP 25 X 4'): 4 Connections operating at CXP-25 speed (25.78125 Gbps). + * - \b CXP1_X8 (Display string: 'CXP 1 X 8'): 8 Connections operating at CXP-1 speed (1.25 Gbps). + * - \b CXP2_X8 (Display string: 'CXP 2 X 8'): 8 Connections operating at CXP-2 speed (2.50 Gbps). + * - \b CXP3_X8 (Display string: 'CXP 3 X 8'): 8 Connections operating at CXP-3 speed (3.125 Gbps). + * - \b CXP5_X8 (Display string: 'CXP 5 X 8'): 8 Connections operating at CXP-5 speed (5.00 Gbps). + * - \b CXP6_X8 (Display string: 'CXP 6 X 8'): 8 Connections operating at CXP-6 speed (6.25 Gbps). + * - \b CXP10_X8 (Display string: 'CXP 10 X 8'): 8 Connections operating at CXP-10 speed (10.00 Gbps). + * - \b CXP12_X8 (Display string: 'CXP 12 X 8'): 8 Connections operating at CXP-12 speed (12.50 Gbps). + * - \b CXP25_X8 (Display string: 'CXP 25 X 8'): 8 Connections operating at CXP-25 speed (25.78125 Gbps). + * - \b CXP1_X3 (Display string: 'CXP 1 X 3') + * - \b CXP2_X3 (Display string: 'CXP 2 X 3') + * - \b CXP3_X3 (Display string: 'CXP 3 X 3') + * - \b CXP5_X3 (Display string: 'CXP 5 X 3') + * - \b CXP6_X3 (Display string: 'CXP 6 X 3') + * - \b CXP10_X3 (Display string: 'CXP 10 X 3') + * - \b CXP12_X3 (Display string: 'CXP 12 X 3') + * - \b CXP1_X5 (Display string: 'CXP 1 X 5') + * - \b CXP2_X5 (Display string: 'CXP 2 X 5') + * - \b CXP3_X5 (Display string: 'CXP 3 X 5') + * - \b CXP5_X5 (Display string: 'CXP 5 X 5') + * - \b CXP6_X5 (Display string: 'CXP 6 X 5') + * - \b CXP10_X5 (Display string: 'CXP 10 X 5') + * - \b CXP12_X5 (Display string: 'CXP 12 X 5') + * - \b CXP1_X6 (Display string: 'CXP 1 X 6') + * - \b CXP2_X6 (Display string: 'CXP 2 X 6') + * - \b CXP3_X6 (Display string: 'CXP 3 X 6') + * - \b CXP5_X6 (Display string: 'CXP 5 X 6') + * - \b CXP6_X6 (Display string: 'CXP 6 X 6') + * - \b CXP10_X6 (Display string: 'CXP 10 X 6') + * - \b CXP12_X6 (Display string: 'CXP 12 X 6') * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -13493,6 +14263,7 @@ public: * - \b CXP6_X1 (Display string: 'CXP 6 X 1'): Force the Link to 1 Connection operating at CXP-6 speed (6.25 Gbps). * - \b CXP10_X1 (Display string: 'CXP 10 X 1'): Force the Link to 1 Connection operating at CXP-10 speed (10.00 Gbps). * - \b CXP12_X1 (Display string: 'CXP 12 X 1'): Force the Link to 1 Connection operating at CXP-12 speed (12.50 Gbps). + * - \b CXP25_X1 (Display string: 'CXP 25 X 1'): Force the Link to 1 Connection operating at CXP-25 speed (25.78125 Gbps). * - \b CXP1_X2 (Display string: 'CXP 1 X 2'): Force the Link to 2 Connections operating at CXP-1 speed (1.25 Gbps). * - \b CXP2_X2 (Display string: 'CXP 2 X 2'): Force the Link to 2 Connections operating at CXP-2 speed (2.50 Gbps). * - \b CXP3_X2 (Display string: 'CXP 3 X 2'): Force the Link to 2 Connections operating at CXP-3 speed (3.125 Gbps). @@ -13500,13 +14271,7 @@ public: * - \b CXP6_X2 (Display string: 'CXP 6 X 2'): Force the Link to 2 Connections operating at CXP-6 speed (6.25 Gbps). * - \b CXP10_X2 (Display string: 'CXP 10 X 2'): Force the Link to 2 Connections operating at CXP-10 speed (10.00 Gbps). * - \b CXP12_X2 (Display string: 'CXP 12 X 2'): Force the Link to 2 Connections operating at CXP-12 speed (12.50 Gbps). - * - \b CXP1_X3 (Display string: 'CXP 1 X 3'): Force the Link to 3 Connections operating at CXP-1 speed (1.25 Gbps). - * - \b CXP2_X3 (Display string: 'CXP 2 X 3'): Force the Link to 3 Connections operating at CXP-2 speed (2.50 Gbps). - * - \b CXP3_X3 (Display string: 'CXP 3 X 3'): Force the Link to 3 Connections operating at CXP-3 speed (3.125 Gbps). - * - \b CXP5_X3 (Display string: 'CXP 5 X 3'): Force the Link to 3 Connections operating at CXP-5 speed (5.00 Gbps). - * - \b CXP6_X3 (Display string: 'CXP 6 X 3'): Force the Link to 3 Connections operating at CXP-6 speed (6.25 Gbps). - * - \b CXP10_X3 (Display string: 'CXP 10 X 3'): Force the Link to 3 Connections operating at CXP-10 speed (10.00 Gbps). - * - \b CXP12_X3 (Display string: 'CXP 12 X 3'): Force the Link to 3 Connections operating at CXP-12 speed (12.50 Gbps). + * - \b CXP25_X2 (Display string: 'CXP 25 X 2'): Force the Link to 2 Connections operating at CXP-25 speed (25.78125 Gbps). * - \b CXP1_X4 (Display string: 'CXP 1 X 4'): Force the Link to 4 Connections operating at CXP-1 speed (1.25 Gbps). * - \b CXP2_X4 (Display string: 'CXP 2 X 4'): Force the Link to 4 Connections operating at CXP-2 speed (2.50 Gbps). * - \b CXP3_X4 (Display string: 'CXP 3 X 4'): Force the Link to 4 Connections operating at CXP-3 speed (3.125 Gbps). @@ -13514,20 +14279,36 @@ public: * - \b CXP6_X4 (Display string: 'CXP 6 X 4'): Force the Link to 4 Connections operating at CXP-6 speed (6.25 Gbps). * - \b CXP10_X4 (Display string: 'CXP 10 X 4'): Force the Link to 4 Connections operating at CXP-10 speed (10.00 Gbps). * - \b CXP12_X4 (Display string: 'CXP 12 X 4'): Force the Link to 4 Connections operating at CXP-12 speed (12.50 Gbps). - * - \b CXP1_X5 (Display string: 'CXP 1 X 5'): Force the Link to 5 Connections operating at CXP-1 speed (1.25 Gbps). - * - \b CXP2_X5 (Display string: 'CXP 2 X 5'): Force the Link to 5 Connections operating at CXP-2 speed (2.50 Gbps). - * - \b CXP3_X5 (Display string: 'CXP 3 X 5'): Force the Link to 5 Connections operating at CXP-3 speed (3.125 Gbps). - * - \b CXP5_X5 (Display string: 'CXP 5 X 5'): Force the Link to 5 Connections operating at CXP-5 speed (5.00 Gbps). - * - \b CXP6_X5 (Display string: 'CXP 6 X 5'): Force the Link to 5 Connections operating at CXP-6 speed (6.25 Gbps). - * - \b CXP10_X5 (Display string: 'CXP 10 X 5'): Force the Link to 5 Connections operating at CXP-10 speed (10.00 Gbps). - * - \b CXP12_X5 (Display string: 'CXP 12 X 5'): Force the Link to 5 Connections operating at CXP-12 speed (12.50 Gbps). - * - \b CXP1_X6 (Display string: 'CXP 1 X 6'): Force the Link to 6 Connections operating at CXP-1 speed (1.25 Gbps). - * - \b CXP2_X6 (Display string: 'CXP 2 X 6'): Force the Link to 6 Connections operating at CXP-2 speed (2.50 Gbps). - * - \b CXP3_X6 (Display string: 'CXP 3 X 6'): Force the Link to 6 Connections operating at CXP-3 speed (3.125 Gbps). - * - \b CXP5_X6 (Display string: 'CXP 5 X 6'): Force the Link to 6 Connections operating at CXP-5 speed (5.00 Gbps). - * - \b CXP6_X6 (Display string: 'CXP 6 X 6'): Force the Link to 6 Connections operating at CXP-6 speed (6.25 Gbps). - * - \b CXP10_X6 (Display string: 'CXP 10 X 6'): Force the Link to 6 Connections operating at CXP-10 speed (10.00 Gbps). - * - \b CXP12_X6 (Display string: 'CXP 12 X 6'): Force the Link to 6 Connections operating at CXP-12 speed (12.50 Gbps). + * - \b CXP25_X4 (Display string: 'CXP 25 X 4'): Force the Link to 4 Connections operating at CXP-25 speed (25.78125 Gbps). + * - \b CXP1_X8 (Display string: 'CXP 1 X 8'): Force the Link to 8 Connections operating at CXP-1 speed (1.25 Gbps). + * - \b CXP2_X8 (Display string: 'CXP 2 X 8'): Force the Link to 8 Connections operating at CXP-2 speed (2.50 Gbps). + * - \b CXP3_X8 (Display string: 'CXP 3 X 8'): Force the Link to 8 Connections operating at CXP-3 speed (3.125 Gbps). + * - \b CXP5_X8 (Display string: 'CXP 5 X 8'): Force the Link to 8 Connections operating at CXP-5 speed (5.00 Gbps). + * - \b CXP6_X8 (Display string: 'CXP 6 X 8'): Force the Link to 8 Connections operating at CXP-6 speed (6.25 Gbps). + * - \b CXP10_X8 (Display string: 'CXP 10 X 8'): Force the Link to 8 Connections operating at CXP-10 speed (10.00 Gbps). + * - \b CXP12_X8 (Display string: 'CXP 12 X 8'): Force the Link to 8 Connections operating at CXP-12 speed (12.50 Gbps). + * - \b CXP25_X8 (Display string: 'CXP 25 X 8'): Force the Link to 8 Connections operating at CXP-25 speed (25.78125 Gbps). + * - \b CXP1_X3 (Display string: 'CXP 1 X 3') + * - \b CXP2_X3 (Display string: 'CXP 2 X 3') + * - \b CXP3_X3 (Display string: 'CXP 3 X 3') + * - \b CXP5_X3 (Display string: 'CXP 5 X 3') + * - \b CXP6_X3 (Display string: 'CXP 6 X 3') + * - \b CXP10_X3 (Display string: 'CXP 10 X 3') + * - \b CXP12_X3 (Display string: 'CXP 12 X 3') + * - \b CXP1_X5 (Display string: 'CXP 1 X 5') + * - \b CXP2_X5 (Display string: 'CXP 2 X 5') + * - \b CXP3_X5 (Display string: 'CXP 3 X 5') + * - \b CXP5_X5 (Display string: 'CXP 5 X 5') + * - \b CXP6_X5 (Display string: 'CXP 6 X 5') + * - \b CXP10_X5 (Display string: 'CXP 10 X 5') + * - \b CXP12_X5 (Display string: 'CXP 12 X 5') + * - \b CXP1_X6 (Display string: 'CXP 1 X 6') + * - \b CXP2_X6 (Display string: 'CXP 2 X 6') + * - \b CXP3_X6 (Display string: 'CXP 3 X 6') + * - \b CXP5_X6 (Display string: 'CXP 5 X 6') + * - \b CXP6_X6 (Display string: 'CXP 6 X 6') + * - \b CXP10_X6 (Display string: 'CXP 10 X 6') + * - \b CXP12_X6 (Display string: 'CXP 12 X 6') * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -14282,415 +15063,97 @@ public: /// \brief Constructs a new mvIMPACT::acquire::GenICam::mvI2cInterfaceControl object. explicit mvI2cInterfaceControl( /// [in] A pointer to a mvIMPACT::acquire::Device object obtained from a mvIMPACT::acquire::DeviceManager object. - mvIMPACT::acquire::Device* pDev, - /// [in] The name of the driver internal setting to access with this instance. - /// A list of valid setting names can be obtained by a call to - /// mvIMPACT::acquire::FunctionInterface::getAvailableSettings, new - /// settings can be created with the function - /// mvIMPACT::acquire::FunctionInterface::createSetting - const std::string& settingName = "Base" ) : - mvI2cInterfaceEnable(), - mvI2cInterfaceDeviceAddress(), - mvI2cInterfaceDeviceSubAddress(), - mvI2cInterfaceASCIIBuffer(), - mvI2cInterfaceBinaryBuffer(), - mvI2cInterfaceBytesToWrite(), - mvI2cInterfaceBytesToRead(), - mvI2cInterfaceRead(), - mvI2cInterfaceWrite(), - mvI2cInterfaceSpeed() - { - pDev->validateInterfaceLayout( dilGenICam ); - mvIMPACT::acquire::DeviceComponentLocator locator( pDev, mvIMPACT::acquire::dltSetting, settingName ); - locator.bindComponent( mvI2cInterfaceEnable, "mvI2cInterfaceEnable" ); - locator.bindComponent( mvI2cInterfaceDeviceAddress, "mvI2cInterfaceDeviceAddress" ); - locator.bindComponent( mvI2cInterfaceDeviceSubAddress, "mvI2cInterfaceDeviceSubAddress" ); - locator.bindComponent( mvI2cInterfaceASCIIBuffer, "mvI2cInterfaceASCIIBuffer" ); - locator.bindComponent( mvI2cInterfaceBinaryBuffer, "mvI2cInterfaceBinaryBuffer" ); - locator.bindComponent( mvI2cInterfaceBytesToWrite, "mvI2cInterfaceBytesToWrite" ); - locator.bindComponent( mvI2cInterfaceBytesToRead, "mvI2cInterfaceBytesToRead" ); - locator.bindComponent( mvI2cInterfaceRead, "mvI2cInterfaceRead@i" ); - locator.bindComponent( mvI2cInterfaceWrite, "mvI2cInterfaceWrite@i" ); - locator.bindComponent( mvI2cInterfaceSpeed, "mvI2cInterfaceSpeed" ); - } - // *INDENT-OFF* - PYTHON_OR_JAVA_ONLY( %immutable; ) - // *INDENT-ON* - /// \brief A boolean property. Controls whether the I2C interface is enabled or not. - /** - * Controls whether the I2C interface is enabled or not. - */ - PropertyIBoolean mvI2cInterfaceEnable; - /// \brief An integer property. I2C device address, must be even. - /** - * I2C device address, must be even, blocked addresses: 0x20, 0x30 (Test), 0x32, 0x34, 0x36, 0x3E, 0x60, 0x62, 0x64, 0x66, 0x6E, 0x90, 0x92, 0xA0, 0xA2, 0xA4, 0xA6, 0xAE, 0xB0, 0xB2, 0xB4, 0xB6, 0xB8, 0xBA, 0xBC, 0xBE. - */ - PropertyI64 mvI2cInterfaceDeviceAddress; - /// \brief An integer property. I2C device sub address ignored when set to -1, 2 byte address if bit 0x10000 is set, else 1 Byte. - /** - * I2C device sub address ignored when set to -1, 2 byte address if bit 0x10000 is set, else 1 Byte. - */ - PropertyI64 mvI2cInterfaceDeviceSubAddress; - /// \brief A string property. Buffer for exchanging ASCII data over the I2C interface. This buffer uses the same memory as 'mvI2cInterfaceBinaryBuffer'. - /** - * Buffer for exchanging ASCII data over the I2C interface. This buffer uses the same memory as 'mvI2cInterfaceBinaryBuffer'. - */ - PropertyS mvI2cInterfaceASCIIBuffer; - /// \brief A string property. Buffer for exchanging binary data over the I2C interface. This buffer uses the same memory as 'mvI2cInterfaceASCIIBuffer'. - /** - * Buffer for exchanging binary data over the I2C interface. This buffer uses the same memory as 'mvI2cInterfaceASCIIBuffer'. - */ - PropertyS mvI2cInterfaceBinaryBuffer; - /// \brief An integer property. Number of bytes from mvI2cInterfaceBuffer to write to I2C device. - /** - * Number of bytes from mvI2cInterfaceBuffer to write to I2C device. - */ - PropertyI64 mvI2cInterfaceBytesToWrite; - /// \brief An integer property. Number of bytes to read from I2C device. - /** - * Number of bytes to read from I2C device. - */ - PropertyI64 mvI2cInterfaceBytesToRead; - /// \brief A method object. Command to read data from I2C device. - /** - * Command to read data from I2C device. - */ - Method mvI2cInterfaceRead; - /// \brief A method object. Command to write data to I2C device - /** - * Command to write data to I2C device - */ - Method mvI2cInterfaceWrite; - /// \brief An enumerated integer property. I2C interface clock frequency. - /** - * I2C interface clock frequency. - * - * The following string values might be valid for this feature: - * - \b kHz_100 (Display string: '100 kHz'): default speed - * - \b kHz_400 (Display string: '400 kHz'): fast speed - * - * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. - * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. - */ - PropertyI64 mvI2cInterfaceSpeed; - // *INDENT-OFF* - PYTHON_OR_JAVA_ONLY( %mutable; ) - // *INDENT-ON* -}; - -//----------------------------------------------------------------------------- -/// \brief Custom area. -/** - * Custom area. - * \ingroup GenICamInterfaceDevice - */ -class mvCustomData : public mvIMPACT::acquire::ComponentCollection -//----------------------------------------------------------------------------- -{ -public: - /// \brief Constructs a new mvIMPACT::acquire::GenICam::mvCustomData object. - explicit mvCustomData( - /// [in] A pointer to a mvIMPACT::acquire::Device object obtained from a mvIMPACT::acquire::DeviceManager object. - mvIMPACT::acquire::Device* pDev, - /// [in] The name of the driver internal setting to access with this instance. - /// A list of valid setting names can be obtained by a call to - /// mvIMPACT::acquire::FunctionInterface::getAvailableSettings, new - /// settings can be created with the function - /// mvIMPACT::acquire::FunctionInterface::createSetting - const std::string& settingName = "Base" ) : - mvIMPACT::acquire::ComponentCollection( pDev ), - mvCustomText(), - mvWriteCustomData(), - mvReadCustomData(), - mvSensorRegister(), - mvSensorRegisterValue(), - mvInternalRegister(), - mvInternalRegisterValue(), - mvMSeqRegister(), - mvMSeqRegisterValue(), - mvStateSumRegister(), - mvStat2SumRegister(), - mvStat3SumRegister(), - mvStat4SumRegister(), - mvStat5SumRegister(), - mvStat6SumRegister(), - mvStateSumRegisterReset(), - mvStateSumRegister3Reset(), - mvLVDSSelection(), - mvLVDSAlignment(), - mvRunTest(), - mvTestNumber(), - mvTestMin(), - mvTestMax(), - mvCustomCommandInterpreterVersionMajor(), - mvCustomCommandInterpreterVersionMinor(), - mvCustomCommandBuffer(), - mvImxSensorType(), - mvImxSensorIdOne(), - mvImxGroup(), - mvImxSensorIdTwo() - { - pDev->validateInterfaceLayout( dilGenICam ); - mvIMPACT::acquire::DeviceComponentLocator locator( pDev, mvIMPACT::acquire::dltSetting, settingName ); - locator.bindSearchBase( locator.searchbase_id(), "Camera/GenICam/mvCustomData" ); - m_hRoot = locator.searchbase_id(); - locator.bindComponent( mvCustomText, "mvCustomText" ); - locator.bindComponent( mvWriteCustomData, "mvWriteCustomData@i" ); - locator.bindComponent( mvReadCustomData, "mvReadCustomData@i" ); - locator.bindComponent( mvSensorRegister, "mvSensorRegister" ); - locator.bindComponent( mvSensorRegisterValue, "mvSensorRegisterValue" ); - locator.bindComponent( mvInternalRegister, "mvInternalRegister" ); - locator.bindComponent( mvInternalRegisterValue, "mvInternalRegisterValue" ); - locator.bindComponent( mvMSeqRegister, "mvMSeqRegister" ); - locator.bindComponent( mvMSeqRegisterValue, "mvMSeqRegisterValue" ); - locator.bindComponent( mvStateSumRegister, "mvStateSumRegister" ); - locator.bindComponent( mvStat2SumRegister, "mvStat2SumRegister" ); - locator.bindComponent( mvStat3SumRegister, "mvStat3SumRegister" ); - locator.bindComponent( mvStat4SumRegister, "mvStat4SumRegister" ); - locator.bindComponent( mvStat5SumRegister, "mvStat5SumRegister" ); - locator.bindComponent( mvStat6SumRegister, "mvStat6SumRegister" ); - locator.bindComponent( mvStateSumRegisterReset, "mvStateSumRegisterReset@i" ); - locator.bindComponent( mvStateSumRegister3Reset, "mvStateSumRegister3Reset@i" ); - locator.bindComponent( mvLVDSSelection, "mvLVDSSelection" ); - locator.bindComponent( mvLVDSAlignment, "mvLVDSAlignment" ); - locator.bindComponent( mvRunTest, "mvRunTest@i" ); - locator.bindComponent( mvTestNumber, "mvTestNumber" ); - locator.bindComponent( mvTestMin, "mvTestMin" ); - locator.bindComponent( mvTestMax, "mvTestMax" ); - locator.bindComponent( mvCustomCommandInterpreterVersionMajor, "mvCustomCommandInterpreterVersionMajor" ); - locator.bindComponent( mvCustomCommandInterpreterVersionMinor, "mvCustomCommandInterpreterVersionMinor" ); - locator.bindComponent( mvCustomCommandBuffer, "mvCustomCommandBuffer" ); - locator.bindComponent( mvImxSensorType, "mvImxSensorType" ); - locator.bindComponent( mvImxSensorIdOne, "mvImxSensorIdOne" ); - locator.bindComponent( mvImxGroup, "mvImxGroup" ); - locator.bindComponent( mvImxSensorIdTwo, "mvImxSensorIdTwo" ); - } - // *INDENT-OFF* - PYTHON_OR_JAVA_ONLY( %immutable; ) - // *INDENT-ON* - /// \brief A string property. Custom text. - /** - * Custom text. - */ - PropertyS mvCustomText; - /// \brief A method object. Function to write custom data. - /** - * Function to write custom data. - */ - Method mvWriteCustomData; - /// \brief A method object. Function to read custom data. - /** - * Function to read custom data. - */ - Method mvReadCustomData; - /// \brief An integer property. Sensor register address to access. - /** - * Sensor register address to access. - */ - PropertyI64 mvSensorRegister; - /// \brief An integer property. Value of sensor register. - /** - * Value of sensor register. - */ - PropertyI64 mvSensorRegisterValue; - /// \brief An integer property. Register address to access. - /** - * Register address to access. - */ - PropertyI64 mvInternalRegister; - /// \brief An integer property. Value of internal register. - /** - * Value of internal register. - */ - PropertyI64 mvInternalRegisterValue; - /// \brief An integer property. Register address to access. - /** - * Register address to access. - */ - PropertyI64 mvMSeqRegister; - /// \brief An integer property. Value of mseq register. - /** - * Value of mseq register. - */ - PropertyI64 mvMSeqRegisterValue; - /// \brief An integer property. Indicates several states besides some other info. - /** - * Indicates several states besides some other info. - */ - PropertyI64 mvStateSumRegister; - /// \brief An integer property. Indicates several states besides some other info. - /** - * Indicates several states besides some other info. - */ - PropertyI64 mvStat2SumRegister; - /// \brief An integer property. Indicates several states besides some other info. - /** - * Indicates several states besides some other info. - */ - PropertyI64 mvStat3SumRegister; - /// \brief An integer property. Indicates several states besides some other info. - /** - * Indicates several states besides some other info. - */ - PropertyI64 mvStat4SumRegister; - /// \brief An integer property. Indicates several states besides some other info. - /** - * Indicates several states besides some other info. - */ - PropertyI64 mvStat5SumRegister; - /// \brief An integer property. Indicates several states besides some other info. - /** - * Indicates several states besides some other info. - */ - PropertyI64 mvStat6SumRegister; - /// \brief A method object. Resets the state register. - /** - * Resets the state register. - */ - Method mvStateSumRegisterReset; - /// \brief A method object. Resets the state register. - /** - * Resets the state register. - */ - Method mvStateSumRegister3Reset; - /// \brief An integer property. Selector for LVDS lanes. + mvIMPACT::acquire::Device* pDev, + /// [in] The name of the driver internal setting to access with this instance. + /// A list of valid setting names can be obtained by a call to + /// mvIMPACT::acquire::FunctionInterface::getAvailableSettings, new + /// settings can be created with the function + /// mvIMPACT::acquire::FunctionInterface::createSetting + const std::string& settingName = "Base" ) : + mvI2cInterfaceEnable(), + mvI2cInterfaceDeviceAddress(), + mvI2cInterfaceDeviceSubAddress(), + mvI2cInterfaceASCIIBuffer(), + mvI2cInterfaceBinaryBuffer(), + mvI2cInterfaceBytesToWrite(), + mvI2cInterfaceBytesToRead(), + mvI2cInterfaceRead(), + mvI2cInterfaceWrite(), + mvI2cInterfaceSpeed() + { + pDev->validateInterfaceLayout( dilGenICam ); + mvIMPACT::acquire::DeviceComponentLocator locator( pDev, mvIMPACT::acquire::dltSetting, settingName ); + locator.bindComponent( mvI2cInterfaceEnable, "mvI2cInterfaceEnable" ); + locator.bindComponent( mvI2cInterfaceDeviceAddress, "mvI2cInterfaceDeviceAddress" ); + locator.bindComponent( mvI2cInterfaceDeviceSubAddress, "mvI2cInterfaceDeviceSubAddress" ); + locator.bindComponent( mvI2cInterfaceASCIIBuffer, "mvI2cInterfaceASCIIBuffer" ); + locator.bindComponent( mvI2cInterfaceBinaryBuffer, "mvI2cInterfaceBinaryBuffer" ); + locator.bindComponent( mvI2cInterfaceBytesToWrite, "mvI2cInterfaceBytesToWrite" ); + locator.bindComponent( mvI2cInterfaceBytesToRead, "mvI2cInterfaceBytesToRead" ); + locator.bindComponent( mvI2cInterfaceRead, "mvI2cInterfaceRead@i" ); + locator.bindComponent( mvI2cInterfaceWrite, "mvI2cInterfaceWrite@i" ); + locator.bindComponent( mvI2cInterfaceSpeed, "mvI2cInterfaceSpeed" ); + } + // *INDENT-OFF* + PYTHON_OR_JAVA_ONLY( %immutable; ) + // *INDENT-ON* + /// \brief A boolean property. Controls whether the I2C interface is enabled or not. /** - * Selector for LVDS lanes. + * Controls whether the I2C interface is enabled or not. */ - PropertyI64 mvLVDSSelection; - /// \brief An integer property. Alignment of LVDS lanes. + PropertyIBoolean mvI2cInterfaceEnable; + /// \brief An integer property. I2C device address, must be even. /** - * Alignment of LVDS lanes. + * I2C device address, must be even, blocked addresses: 0x20, 0x30 (Test), 0x32, 0x34, 0x36, 0x3E, 0x60, 0x62, 0x64, 0x66, 0x6E, 0x90, 0x92, 0xA0, 0xA2, 0xA4, 0xA6, 0xAE, 0xB0, 0xB2, 0xB4, 0xB6, 0xB8, 0xBA, 0xBC, 0xBE. */ - PropertyI64 mvLVDSAlignment; - /// \brief A method object. Runs internal test. + PropertyI64 mvI2cInterfaceDeviceAddress; + /// \brief An integer property. I2C device sub address ignored when set to -1, 2 byte address if bit 0x10000 is set, else 1 Byte. /** - * Runs internal test. + * I2C device sub address ignored when set to -1, 2 byte address if bit 0x10000 is set, else 1 Byte. */ - Method mvRunTest; - /// \brief An integer property. Number of test to run. + PropertyI64 mvI2cInterfaceDeviceSubAddress; + /// \brief A string property. Buffer for exchanging ASCII data over the I2C interface. This buffer uses the same memory as 'mvI2cInterfaceBinaryBuffer'. /** - * Number of test to run. + * Buffer for exchanging ASCII data over the I2C interface. This buffer uses the same memory as 'mvI2cInterfaceBinaryBuffer'. */ - PropertyI64 mvTestNumber; - /// \brief An integer property. Min number for test. + PropertyS mvI2cInterfaceASCIIBuffer; + /// \brief A string property. Buffer for exchanging binary data over the I2C interface. This buffer uses the same memory as 'mvI2cInterfaceASCIIBuffer'. /** - * Min number for test. + * Buffer for exchanging binary data over the I2C interface. This buffer uses the same memory as 'mvI2cInterfaceASCIIBuffer'. */ - PropertyI64 mvTestMin; - /// \brief An integer property. Max number for test. + PropertyS mvI2cInterfaceBinaryBuffer; + /// \brief An integer property. Number of bytes from mvI2cInterfaceBuffer to write to I2C device. /** - * Max number for test. + * Number of bytes from mvI2cInterfaceBuffer to write to I2C device. */ - PropertyI64 mvTestMax; - /// \brief An integer property. Returns the major version of the custom command interpreter on the device. + PropertyI64 mvI2cInterfaceBytesToWrite; + /// \brief An integer property. Number of bytes to read from I2C device. /** - * Returns the major version of the custom command interpreter on the device. + * Number of bytes to read from I2C device. */ - PropertyI64 mvCustomCommandInterpreterVersionMajor; - /// \brief An integer property. Returns the minor version of the custom command interpreter on the device. + PropertyI64 mvI2cInterfaceBytesToRead; + /// \brief A method object. Command to read data from I2C device. /** - * Returns the minor version of the custom command interpreter on the device. + * Command to read data from I2C device. */ - PropertyI64 mvCustomCommandInterpreterVersionMinor; - /// \brief A string property. Command buffer for custom commands. + Method mvI2cInterfaceRead; + /// \brief A method object. Command to write data to I2C device /** - * Command buffer for custom commands. + * Command to write data to I2C device */ - PropertyS mvCustomCommandBuffer; - /// \brief An enumerated integer property. IMX sensor type from registers. + Method mvI2cInterfaceWrite; + /// \brief An enumerated integer property. I2C interface clock frequency. /** - * IMX sensor type from registers. + * I2C interface clock frequency. * * The following string values might be valid for this feature: - * - \b mvUnknown (Display string: 'mv Unknown'): unknown or TS - * - \b IMX250G (Display string: 'IMX250G'): IMX250 Grey - * - \b IMX250G_POL (Display string: 'IMX250G_POL'): IMX250 Grey with POL filter - * - \b IMX250C (Display string: 'IMX250C'): IMX250 Color - * - \b IMX250C_POL (Display string: 'IMX250C_POL'): IMX250 Color with POL filter - * - \b IMX252G (Display string: 'IMX252G'): IMX252 Grey - * - \b IMX252C (Display string: 'IMX252C'): IMX252 Color - * - \b IMX253G (Display string: 'IMX253G'): IMX253 Grey - * - \b IMX253C (Display string: 'IMX253C'): IMX253 Color - * - \b IMX255G (Display string: 'IMX255G'): IMX255 Grey - * - \b IMX255C (Display string: 'IMX255C'): IMX255 Color - * - \b IMX264G (Display string: 'IMX264G'): IMX264 Grey - * - \b IMX264C (Display string: 'IMX264C'): IMX264 Color - * - \b IMX265G (Display string: 'IMX265G'): IMX265 Grey - * - \b IMX265C (Display string: 'IMX265C'): IMX265 Color - * - \b IMX267G (Display string: 'IMX267G'): IMX267 Grey - * - \b IMX267C (Display string: 'IMX267C'): IMX267 Color - * - \b IMX273G (Display string: 'IMX273G'): IMX273 Grey - * - \b IMX273C (Display string: 'IMX273C'): IMX273 Color - * - \b IMX392G (Display string: 'IMX392G'): IMX392 Grey - * - \b IMX392C (Display string: 'IMX392C'): IMX392 Color - * - \b IMX287G (Display string: 'IMX287G'): IMX287 Grey - * - \b IMX287C (Display string: 'IMX287C'): IMX287 Color - * - \b IMX304G (Display string: 'IMX304G'): IMX304 Grey - * - \b IMX304C (Display string: 'IMX304C'): IMX304 Color - * - \b IMX342G (Display string: 'IMX342G'): IMX342 Grey - * - \b IMX342C (Display string: 'IMX342C'): IMX342 Color - * - \b IMX367G (Display string: 'IMX367G'): IMX367 Grey - * - \b IMX367C (Display string: 'IMX367C'): IMX367 Color - * - \b IMX387G (Display string: 'IMX387G'): IMX387 Grey - * - \b IMX387C (Display string: 'IMX387C'): IMX387 Color - * - \b IMX420G (Display string: 'IMX420G'): IMX420 Grey - * - \b IMX420C (Display string: 'IMX420C'): IMX420 Color - * - \b IMX425G (Display string: 'IMX425G'): IMX425 Grey - * - \b IMX425C (Display string: 'IMX425C'): IMX425 Color - * - \b IMX428G (Display string: 'IMX428G'): IMX428 Grey - * - \b IMX428C (Display string: 'IMX428C'): IMX428 Color - * - \b IMX430G (Display string: 'IMX430G'): IMX430 Grey - * - \b IMX430C (Display string: 'IMX430C'): IMX430 Color - * - \b IMX432G (Display string: 'IMX432G'): IMX432 Grey - * - \b IMX432C (Display string: 'IMX432C'): IMX432 Color - * - \b IMX531G (Display string: 'IMX531G'): IMX531 Grey - * - \b IMX531C (Display string: 'IMX531C'): IMX531 Color - * - \b IMX532G (Display string: 'IMX532G'): IMX532 Grey - * - \b IMX532C (Display string: 'IMX532C'): IMX532 Color - * - \b IMX535G (Display string: 'IMX535G'): IMX535 Grey - * - \b IMX535C (Display string: 'IMX535C'): IMX535 Color - * - \b IMX540G (Display string: 'IMX540G'): IMX540 Grey - * - \b IMX540C (Display string: 'IMX540C'): IMX540 Color - * - \b IMX541G (Display string: 'IMX541G'): IMX541 Grey - * - \b IMX541C (Display string: 'IMX541C'): IMX541 Color - * - \b IMX542G (Display string: 'IMX542G'): IMX542 Grey - * - \b IMX542C (Display string: 'IMX542C'): IMX542 Color + * - \b kHz_100 (Display string: '100 kHz'): default speed + * - \b kHz_400 (Display string: '400 kHz'): fast speed * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. */ - PropertyI64 mvImxSensorType; - /// \brief An integer property. IMX SensorID1 - /** - * IMX SensorID1 - */ - PropertyI64 mvImxSensorIdOne; - /// \brief An enumerated integer property. IMX Group - /** - * IMX Group - * - * The following string values might be valid for this feature: - * - \b mvUnknown (Display string: 'mv Unknown'): unknown - * - \b V2TypeOneGroup (Display string: 'V2 Type One Group'): Type 1/1 Group: IMX253/255/267/304/305 (2nd Generation GS-CIS) - * - \b V2TypeTwoThirdsGroup (Display string: 'V2 Type Two Thirds Group'): Type 2/3 Group: IMX250/252/264/265 (2nd Generation GS-CIS) - * - \b V2TypeOneThirdGroup (Display string: 'V2 Type One Third Group'): Type 1/3 Group: IMX273/287/296/297/392 (2nd Generation GS-CIS) - * - \b V25Group342 (Display string: 'V2.5 Group 342'): Group 342: IMX342/367/387 (IMX342 GS-CIS) - * - \b V3Group1 (Display string: 'V3 Group 1'): Group 1: IMX420/428 (3rd Generation GS-CIS) - * - \b V3Group2 (Display string: 'V3 Group 2'): Group 2: IMX421/422/429/430/437 (3rd Generation GS-CIS) - * - \b V3Group3 (Display string: 'V3 Group 3'): Group 3: IMX425/432 (3rd Generation GS-CIS) - * - \b V3Group4 (Display string: 'V3 Group 4'): Group 4: IMX426/433 (3rd Generation GS-CIS) - * - \b V4Group1 (Display string: 'V4 Group 1'): Group 1: IMX530/540 (4th Generation GS-CIS) - * - * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. - * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. - */ - PropertyI64 mvImxGroup; - /// \brief An integer property. IMX SensorID2 - /** - * IMX SensorID2 - */ - PropertyI64 mvImxSensorIdTwo; + PropertyI64 mvI2cInterfaceSpeed; // *INDENT-OFF* PYTHON_OR_JAVA_ONLY( %mutable; ) // *INDENT-ON* @@ -15387,7 +15850,7 @@ public: * Selects whether FFC image shall be automatically loaded at camera startup. * * The following string values might be valid for this feature: - * - \b mvLegacy (Display string: 'mv Legacy'): ) + * - \b mvLegacy (Display string: 'mv Legacy'): FFC image will be automatically loaded and saved after calibration. Should no longer be used. Be careful that You do not lose calibrated FFC images(deprecated) * - \b Off (Display string: 'Off'): FFC image will not be automatically loaded at startup. Use this for short boot times. * - \b On (Display string: 'On'): FFC image will be automatically loaded at startup. Boot time will increase accordingly. * @@ -15649,7 +16112,7 @@ class SystemModule : public mvIMPACT::acquire::ComponentCollection //----------------------------------------------------------------------------- { private: - void init( mvIMPACT::acquire::ComponentLocator& locator ) + void init( const mvIMPACT::acquire::ComponentLocator& locator ) { locator.bindComponent( TLVendorName, "TLVendorName" ); locator.bindComponent( TLModelName, "TLModelName" ); @@ -16062,199 +16525,152 @@ public: * Selects which Event to signal to the host application. * * The following string values might be valid for this feature: - * - \b AcquisitionTrigger (Display string: 'Acquisition Trigger'): Device just received a trigger for the Acquisition of one or many Frames. - * - \b AcquisitionTriggerMissed (Display string: 'Acquisition Trigger Missed'): Device just missed a trigger for the Acquisition of one or many Frames. - * - \b AcquisitionStart (Display string: 'Acquisition Start'): Device just started the Acquisition of one or many Frames. * - \b AcquisitionEnd (Display string: 'Acquisition End'): Device just completed the Acquisition of one or many Frames. - * - \b AcquisitionTransferStart (Display string: 'Acquisition Transfer Start'): Device just started the transfer of one or many Frames. - * - \b AcquisitionTransferEnd (Display string: 'Acquisition Transfer End'): Device just completed the transfer of one or many Frames. * - \b AcquisitionError (Display string: 'Acquisition Error'): Device just detected an error during the active Acquisition. - * - \b FrameBurstStart (Display string: 'Frame Burst Start'): Device just started the capture of a burst of Frames. - * - \b FrameBurstEnd (Display string: 'Frame Burst End'): Device just completed the capture of a burst of Frames. - * - \b FrameTrigger (Display string: 'Frame Trigger'): Device just received a trigger to start the capture of one Frame. - * - \b FrameTriggerMissed (Display string: 'Frame Trigger Missed'): Device just missed a trigger to start the capture of one Frame. - * - \b FrameStart (Display string: 'Frame Start'): Device just started the capture of one Frame. - * - \b FrameEnd (Display string: 'Frame End'): Device just completed the capture of one Frame. - * - \b FrameTransferStart (Display string: 'Frame Transfer Start'): Device just started the transfer of one Frame. - * - \b FrameTransferEnd (Display string: 'Frame Transfer End'): Device just completed the transfer of one Frame. - * - \b LineTrigger (Display string: 'Line Trigger'): Device just received a trigger to start the capture of one Line. - * - \b LineTriggerMissed (Display string: 'Line Trigger Missed'): Device just missed a trigger to start the capture of one Line. - * - \b LineStart (Display string: 'Line Start'): Device just started the capture of one Line. - * - \b LineEnd (Display string: 'Line End'): Device just completed the capture of one Line. - * - \b ExposureStart (Display string: 'Exposure Start'): Device just started the exposure of one Frame (or Line). - * - \b ExposureEnd (Display string: 'Exposure End'): Device just completed the exposure of one Frame (or Line). - * - \b Stream0TransferStart (Display string: 'Stream 0 Transfer Start'): Device just started the transfer of one or many Blocks. - * - \b Stream0TransferEnd (Display string: 'Stream 0 Transfer End'): Device just completed the transfer of one or many Blocks. - * - \b Stream0TransferPause (Display string: 'Stream 0 Transfer Pause'): Device just paused the transfer. - * - \b Stream0TransferResume (Display string: 'Stream 0 Transfer Resume'): Device just resumed the transfer. - * - \b Stream0TransferBlockStart (Display string: 'Stream 0 Transfer Block Start'): Device just started the transfer of one Block. - * - \b Stream0TransferBlockEnd (Display string: 'Stream 0 Transfer Block End'): Device just completed the transfer of one Block. - * - \b Stream0TransferBlockTrigger (Display string: 'Stream 0 Transfer Block Trigger'): Device just received a trigger to start the transfer of one Block. - * - \b Stream0TransferBurstStart (Display string: 'Stream 0 Transfer Burst Start'): Device just started the transfer of a burst of Blocks. - * - \b Stream0TransferBurstEnd (Display string: 'Stream 0 Transfer Burst End'): Device just completed the transfer of a burst of Blocks. - * - \b Stream0TransferOverflow (Display string: 'Stream 0 Transfer Overflow'): Device transfer queue overflowed. - * - \b SequencerSetChange (Display string: 'Sequencer Set Change'): Device sequencer set has changed. - * - \b Counter0Start (Display string: 'Counter 0 Start'): The event will be generated when counter 0 starts counting. - * - \b Counter1Start (Display string: 'Counter 1 Start'): The event will be generated when counter 1 starts counting. - * - \b Counter\#2\#Start (Display string: 'Counter \#2\# Start'): The event will be generated when counter \#2\# starts counting. + * - \b AcquisitionStart (Display string: 'Acquisition Start'): Device just started the Acquisition of one or many Frames. + * - \b AcquisitionTransferEnd (Display string: 'Acquisition Transfer End'): Device just completed the transfer of one or many Frames. + * - \b AcquisitionTransferStart (Display string: 'Acquisition Transfer Start'): Device just started the transfer of one or many Frames. + * - \b AcquisitionTrigger (Display string: 'Acquisition Trigger'): Device just received a trigger for the Acquisition of one or many Frames. + * - \b AcquisitionTriggerMissed (Display string: 'Acquisition Trigger Missed'): Device just missed a trigger for the Acquisition of one or many Frames. + * - \b ActionLate (Display string: 'Action Late'): The event will be generated when a valid scheduled action command is received and is scheduled to be executed at a time that is already past. + * - \b BufferTooSmall (Display string: 'Buffer Too Small'): This enumeration value indicates an event that is raised when the buffer was too small to receive the expected amount of data. + * - \b BuffersDiscarded (Display string: 'Buffers Discarded'): This enumeration value indicates an event that is raised when buffers discared by GenTL or device. This event could optionally carry two numeric child data fields EventBuffersDiscardedDeviceCount and EventBuffersDiscardedProducerCount. + * - \b BuffersDiscardedDeviceCount (Display string: 'Buffers Discarded Device Count'): This enumeration value indicates the number of buffers discarded by the device since last fired instance of this event (the producer would get to know about this for example by observing a gap in the block_id sequence). + * - \b BuffersDiscardedProducerCount (Display string: 'Buffers Discarded Producer Count'): This enumeration value indicates the number of buffers discarded by the producer since last fired instance of this event (this would happen e.g. if there are no free buffers available or if given buffer handling mode requires discarding old buffers etc.). * - \b Counter0End (Display string: 'Counter 0 End'): The event will be generated when counter 0 ends counting. + * - \b Counter0Start (Display string: 'Counter 0 Start'): The event will be generated when counter 0 starts counting. * - \b Counter1End (Display string: 'Counter 1 End'): The event will be generated when counter 1 ends counting. - * - \b Counter\#2\#End (Display string: 'Counter \#2\# End'): The event will be generated when counter \#2\# ends counting. - * - \b Timer0Start (Display string: 'Timer 0 Start'): The event will be generated when Timer 0 starts counting. - * - \b Timer1Start (Display string: 'Timer 1 Start'): The event will be generated when Timer 1 starts counting. - * - \b Timer\#2\#Start (Display string: 'Timer \#2\# Start'): The event will be generated when Timer \#2\# starts counting. - * - \b Timer0End (Display string: 'Timer 0 End'): The event will be generated when Timer 0 ends counting. - * - \b Timer1End (Display string: 'Timer 1 End'): The event will be generated when Timer 1 ends counting. - * - \b Timer\#2\#End (Display string: 'Timer \#2\# End'): The event will be generated when Timer \#2\# ends counting. - * - \b Encoder0Stopped (Display string: 'Encoder 0 Stopped'): The event will be generated when the Encoder 0 stops for longer than EncoderTimeout. - * - \b Encoder1Stopped (Display string: 'Encoder 1 Stopped'): The event will be generated when the Encoder 1 stops for longer than EncoderTimeout. - * - \b Encoder\#2\#Stopped (Display string: 'Encoder \#2\# Stopped'): The event will be generated when the Encoder \#2\# stops for longer than EncoderTimeout. - * - \b Encoder0Restarted (Display string: 'Encoder 0 Restarted'): The event will be generated when the Encoder 0 restarts moving. - * - \b Encoder1Restarted (Display string: 'Encoder 1 Restarted'): The event will be generated when the Encoder 1 restarts moving. - * - \b Encoder\#2\#Restarted (Display string: 'Encoder \#2\# Restarted'): The event will be generated when the Encoder \#2\# restarts moving. - * - \b Line0RisingEdge (Display string: 'Line 0 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 0. - * - \b Line1RisingEdge (Display string: 'Line 1 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 1. - * - \b Line\#2\#RisingEdge (Display string: 'Line \#2\# Rising Edge'): The event will be generated when a Rising Edge is detected on the Line \#2\#. - * - \b Line0FallingEdge (Display string: 'Line 0 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 0. - * - \b Line1FallingEdge (Display string: 'Line 1 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 1. - * - \b Line\#2\#FallingEdge (Display string: 'Line \#2\# Falling Edge'): The event will be generated when a Falling Edge is detected on the Line \#2\#. - * - \b Line0AnyEdge (Display string: 'Line 0 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 0. - * - \b Line1AnyEdge (Display string: 'Line 1 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 1. - * - \b Line\#2\#AnyEdge (Display string: 'Line \#2\# Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line \#2\#. - * - \b LinkTrigger0 (Display string: 'Link Trigger 0'): The event will be generated when a Rising Edge is detected on the LinkTrigger 0. - * - \b LinkTrigger1 (Display string: 'Link Trigger 1'): The event will be generated when a Rising Edge is detected on the LinkTrigger 1. - * - \b LinkTrigger\#2\# (Display string: 'Link Trigger \#2\#'): The event will be generated when a Rising Edge is detected on the LinkTrigger \#2\#. - * - \b LinkSpeedChange (Display string: 'Link Speed Change'): The event will be generated when the link speed has changed. - * - \b ActionLate (Display string: 'Action Late'): The event will be generated when a valid scheduled action command is received and is scheduled to be executed at a time that is already past. - * - \b Error (Display string: 'Error'): Device just detected an error during the active Acquisition. - * - \b Test (Display string: 'Test'): The test event will be generated when the device receives the TestEventGenerate command (EventNotification for the Test event is always On). - * - \b PrimaryApplicationSwitch (Display string: 'Primary Application Switch'): The event will be generated when a primary application switchover has been granted (GigE Vision Specific). - * - \b Counter2Start (Display string: 'Counter 2 Start'): The event will be generated when counter 2 starts counting. - * - \b Counter3Start (Display string: 'Counter 3 Start'): The event will be generated when counter 3 starts counting. - * - \b Counter4Start (Display string: 'Counter 4 Start'): The event will be generated when counter 4 starts counting. - * - \b Counter5Start (Display string: 'Counter 5 Start'): The event will be generated when counter 5 starts counting. - * - \b Counter6Start (Display string: 'Counter 6 Start'): The event will be generated when counter 6 starts counting. - * - \b Counter7Start (Display string: 'Counter 7 Start'): The event will be generated when counter 7 starts counting. - * - \b Counter8Start (Display string: 'Counter 8 Start'): The event will be generated when counter 8 starts counting. - * - \b Counter9Start (Display string: 'Counter 9 Start'): The event will be generated when counter 9 starts counting. - * - \b Counter10Start (Display string: 'Counter 10 Start'): The event will be generated when counter 10 starts counting. - * - \b Counter11Start (Display string: 'Counter 11 Start'): The event will be generated when counter 11 starts counting. - * - \b Counter12Start (Display string: 'Counter 12 Start'): The event will be generated when counter 12 starts counting. - * - \b Counter13Start (Display string: 'Counter 13 Start'): The event will be generated when counter 13 starts counting. - * - \b Counter14Start (Display string: 'Counter 14 Start'): The event will be generated when counter 14 starts counting. - * - \b Counter15Start (Display string: 'Counter 15 Start'): The event will be generated when counter 15 starts counting. + * - \b Counter1Start (Display string: 'Counter 1 Start'): The event will be generated when counter 1 starts counting. * - \b Counter2End (Display string: 'Counter 2 End'): The event will be generated when counter 2 ends counting. + * - \b Counter2Start (Display string: 'Counter 2 Start'): The event will be generated when counter 2 starts counting. * - \b Counter3End (Display string: 'Counter 3 End'): The event will be generated when counter 3 ends counting. + * - \b Counter3Start (Display string: 'Counter 3 Start'): The event will be generated when counter 3 starts counting. * - \b Counter4End (Display string: 'Counter 4 End'): The event will be generated when counter 4 ends counting. + * - \b Counter4Start (Display string: 'Counter 4 Start'): The event will be generated when counter 4 starts counting. * - \b Counter5End (Display string: 'Counter 5 End'): The event will be generated when counter 5 ends counting. + * - \b Counter5Start (Display string: 'Counter 5 Start'): The event will be generated when counter 5 starts counting. * - \b Counter6End (Display string: 'Counter 6 End'): The event will be generated when counter 6 ends counting. + * - \b Counter6Start (Display string: 'Counter 6 Start'): The event will be generated when counter 6 starts counting. * - \b Counter7End (Display string: 'Counter 7 End'): The event will be generated when counter 7 ends counting. + * - \b Counter7Start (Display string: 'Counter 7 Start'): The event will be generated when counter 7 starts counting. * - \b Counter8End (Display string: 'Counter 8 End'): The event will be generated when counter 8 ends counting. + * - \b Counter8Start (Display string: 'Counter 8 Start'): The event will be generated when counter 8 starts counting. * - \b Counter9End (Display string: 'Counter 9 End'): The event will be generated when counter 9 ends counting. + * - \b Counter9Start (Display string: 'Counter 9 Start'): The event will be generated when counter 9 starts counting. * - \b Counter10End (Display string: 'Counter 10 End'): The event will be generated when counter 10 ends counting. + * - \b Counter10Start (Display string: 'Counter 10 Start'): The event will be generated when counter 10 starts counting. * - \b Counter11End (Display string: 'Counter 11 End'): The event will be generated when counter 11 ends counting. + * - \b Counter11Start (Display string: 'Counter 11 Start'): The event will be generated when counter 11 starts counting. * - \b Counter12End (Display string: 'Counter 12 End'): The event will be generated when counter 12 ends counting. + * - \b Counter12Start (Display string: 'Counter 12 Start'): The event will be generated when counter 12 starts counting. * - \b Counter13End (Display string: 'Counter 13 End'): The event will be generated when counter 13 ends counting. + * - \b Counter13Start (Display string: 'Counter 13 Start'): The event will be generated when counter 13 starts counting. * - \b Counter14End (Display string: 'Counter 14 End'): The event will be generated when counter 14 ends counting. + * - \b Counter14Start (Display string: 'Counter 14 Start'): The event will be generated when counter 14 starts counting. * - \b Counter15End (Display string: 'Counter 15 End'): The event will be generated when counter 15 ends counting. - * - \b Timer2Start (Display string: 'Timer 2 Start'): The event will be generated when Timer 2 starts counting. - * - \b Timer3Start (Display string: 'Timer 3 Start'): The event will be generated when Timer 3 starts counting. - * - \b Timer4Start (Display string: 'Timer 4 Start'): The event will be generated when Timer 4 starts counting. - * - \b Timer5Start (Display string: 'Timer 5 Start'): The event will be generated when Timer 5 starts counting. - * - \b Timer6Start (Display string: 'Timer 6 Start'): The event will be generated when Timer 6 starts counting. - * - \b Timer7Start (Display string: 'Timer 7 Start'): The event will be generated when Timer 7 starts counting. - * - \b Timer8Start (Display string: 'Timer 8 Start'): The event will be generated when Timer 8 starts counting. - * - \b Timer9Start (Display string: 'Timer 9 Start'): The event will be generated when Timer 9 starts counting. - * - \b Timer10Start (Display string: 'Timer 10 Start'): The event will be generated when Timer 10 starts counting. - * - \b Timer11Start (Display string: 'Timer 11 Start'): The event will be generated when Timer 11 starts counting. - * - \b Timer12Start (Display string: 'Timer 12 Start'): The event will be generated when Timer 12 starts counting. - * - \b Timer13Start (Display string: 'Timer 13 Start'): The event will be generated when Timer 13 starts counting. - * - \b Timer14Start (Display string: 'Timer 14 Start'): The event will be generated when Timer 14 starts counting. - * - \b Timer15Start (Display string: 'Timer 15 Start'): The event will be generated when Timer 15 starts counting. - * - \b Timer2End (Display string: 'Timer 2 End'): The event will be generated when Timer 2 ends counting. - * - \b Timer3End (Display string: 'Timer 3 End'): The event will be generated when Timer 3 ends counting. - * - \b Timer4End (Display string: 'Timer 4 End'): The event will be generated when Timer 4 ends counting. - * - \b Timer5End (Display string: 'Timer 5 End'): The event will be generated when Timer 5 ends counting. - * - \b Timer6End (Display string: 'Timer 6 End'): The event will be generated when Timer 6 ends counting. - * - \b Timer7End (Display string: 'Timer 7 End'): The event will be generated when Timer 7 ends counting. - * - \b Timer8End (Display string: 'Timer 8 End'): The event will be generated when Timer 8 ends counting. - * - \b Timer9End (Display string: 'Timer 9 End'): The event will be generated when Timer 9 ends counting. - * - \b Timer10End (Display string: 'Timer 10 End'): The event will be generated when Timer 10 ends counting. - * - \b Timer11End (Display string: 'Timer 11 End'): The event will be generated when Timer 11 ends counting. - * - \b Timer12End (Display string: 'Timer 12 End'): The event will be generated when Timer 12 ends counting. - * - \b Timer13End (Display string: 'Timer 13 End'): The event will be generated when Timer 13 ends counting. - * - \b Timer14End (Display string: 'Timer 14 End'): The event will be generated when Timer 14 ends counting. - * - \b Timer15End (Display string: 'Timer 15 End'): The event will be generated when Timer 15 ends counting. - * - \b Encoder2Stopped (Display string: 'Encoder 2 Stopped'): The event will be generated when the Encoder 2 stops for longer than EncoderTimeout. - * - \b Encoder3Stopped (Display string: 'Encoder 3 Stopped'): The event will be generated when the Encoder 3 stops for longer than EncoderTimeout. - * - \b Encoder4Stopped (Display string: 'Encoder 4 Stopped'): The event will be generated when the Encoder 4 stops for longer than EncoderTimeout. - * - \b Encoder5Stopped (Display string: 'Encoder 5 Stopped'): The event will be generated when the Encoder 5 stops for longer than EncoderTimeout. - * - \b Encoder6Stopped (Display string: 'Encoder 6 Stopped'): The event will be generated when the Encoder 6 stops for longer than EncoderTimeout. - * - \b Encoder7Stopped (Display string: 'Encoder 7 Stopped'): The event will be generated when the Encoder 7 stops for longer than EncoderTimeout. - * - \b Encoder8Stopped (Display string: 'Encoder 8 Stopped'): The event will be generated when the Encoder 8 stops for longer than EncoderTimeout. - * - \b Encoder9Stopped (Display string: 'Encoder 9 Stopped'): The event will be generated when the Encoder 9 stops for longer than EncoderTimeout. - * - \b Encoder10Stopped (Display string: 'Encoder 10 Stopped'): The event will be generated when the Encoder 10 stops for longer than EncoderTimeout. - * - \b Encoder11Stopped (Display string: 'Encoder 11 Stopped'): The event will be generated when the Encoder 11 stops for longer than EncoderTimeout. - * - \b Encoder12Stopped (Display string: 'Encoder 12 Stopped'): The event will be generated when the Encoder 12 stops for longer than EncoderTimeout. - * - \b Encoder13Stopped (Display string: 'Encoder 13 Stopped'): The event will be generated when the Encoder 13 stops for longer than EncoderTimeout. - * - \b Encoder14Stopped (Display string: 'Encoder 14 Stopped'): The event will be generated when the Encoder 14 stops for longer than EncoderTimeout. - * - \b Encoder15Stopped (Display string: 'Encoder 15 Stopped'): The event will be generated when the Encoder 15 stops for longer than EncoderTimeout. + * - \b Counter15Start (Display string: 'Counter 15 Start'): The event will be generated when counter 15 starts counting. + * - \b DeviceListChanged (Display string: 'Device List Changed'): This enumeration value indicates an event that is fired when the list of devices has been updated. + * - \b DeviceLost (Display string: 'Device Lost'): This enumeration value indicates an event that is raised when the local host looses connection to the physical(remote) device. + * - \b DeviceTemperatureStateCritical (Display string: 'Device Temperature State Critical') + * - \b DeviceTemperatureStateNormal (Display string: 'Device Temperature State Normal') + * - \b DeviceTemperatureStateOverTemperature (Display string: 'Device Temperature State Over Temperature') + * - \b Encoder0Restarted (Display string: 'Encoder 0 Restarted'): The event will be generated when the Encoder 0 restarts moving. + * - \b Encoder0Stopped (Display string: 'Encoder 0 Stopped'): The event will be generated when the Encoder 0 stops for longer than EncoderTimeout. + * - \b Encoder1Restarted (Display string: 'Encoder 1 Restarted'): The event will be generated when the Encoder 1 restarts moving. + * - \b Encoder1Stopped (Display string: 'Encoder 1 Stopped'): The event will be generated when the Encoder 1 stops for longer than EncoderTimeout. * - \b Encoder2Restarted (Display string: 'Encoder 2 Restarted'): The event will be generated when the Encoder 2 restarts moving. + * - \b Encoder2Stopped (Display string: 'Encoder 2 Stopped'): The event will be generated when the Encoder 2 stops for longer than EncoderTimeout. * - \b Encoder3Restarted (Display string: 'Encoder 3 Restarted'): The event will be generated when the Encoder 3 restarts moving. + * - \b Encoder3Stopped (Display string: 'Encoder 3 Stopped'): The event will be generated when the Encoder 3 stops for longer than EncoderTimeout. * - \b Encoder4Restarted (Display string: 'Encoder 4 Restarted'): The event will be generated when the Encoder 4 restarts moving. + * - \b Encoder4Stopped (Display string: 'Encoder 4 Stopped'): The event will be generated when the Encoder 4 stops for longer than EncoderTimeout. * - \b Encoder5Restarted (Display string: 'Encoder 5 Restarted'): The event will be generated when the Encoder 5 restarts moving. + * - \b Encoder5Stopped (Display string: 'Encoder 5 Stopped'): The event will be generated when the Encoder 5 stops for longer than EncoderTimeout. * - \b Encoder6Restarted (Display string: 'Encoder 6 Restarted'): The event will be generated when the Encoder 6 restarts moving. + * - \b Encoder6Stopped (Display string: 'Encoder 6 Stopped'): The event will be generated when the Encoder 6 stops for longer than EncoderTimeout. * - \b Encoder7Restarted (Display string: 'Encoder 7 Restarted'): The event will be generated when the Encoder 7 restarts moving. + * - \b Encoder7Stopped (Display string: 'Encoder 7 Stopped'): The event will be generated when the Encoder 7 stops for longer than EncoderTimeout. * - \b Encoder8Restarted (Display string: 'Encoder 8 Restarted'): The event will be generated when the Encoder 8 restarts moving. + * - \b Encoder8Stopped (Display string: 'Encoder 8 Stopped'): The event will be generated when the Encoder 8 stops for longer than EncoderTimeout. * - \b Encoder9Restarted (Display string: 'Encoder 9 Restarted'): The event will be generated when the Encoder 9 restarts moving. + * - \b Encoder9Stopped (Display string: 'Encoder 9 Stopped'): The event will be generated when the Encoder 9 stops for longer than EncoderTimeout. * - \b Encoder10Restarted (Display string: 'Encoder 10 Restarted'): The event will be generated when the Encoder 10 restarts moving. + * - \b Encoder10Stopped (Display string: 'Encoder 10 Stopped'): The event will be generated when the Encoder 10 stops for longer than EncoderTimeout. * - \b Encoder11Restarted (Display string: 'Encoder 11 Restarted'): The event will be generated when the Encoder 11 restarts moving. + * - \b Encoder11Stopped (Display string: 'Encoder 11 Stopped'): The event will be generated when the Encoder 11 stops for longer than EncoderTimeout. * - \b Encoder12Restarted (Display string: 'Encoder 12 Restarted'): The event will be generated when the Encoder 12 restarts moving. + * - \b Encoder12Stopped (Display string: 'Encoder 12 Stopped'): The event will be generated when the Encoder 12 stops for longer than EncoderTimeout. * - \b Encoder13Restarted (Display string: 'Encoder 13 Restarted'): The event will be generated when the Encoder 13 restarts moving. + * - \b Encoder13Stopped (Display string: 'Encoder 13 Stopped'): The event will be generated when the Encoder 13 stops for longer than EncoderTimeout. * - \b Encoder14Restarted (Display string: 'Encoder 14 Restarted'): The event will be generated when the Encoder 14 restarts moving. + * - \b Encoder14Stopped (Display string: 'Encoder 14 Stopped'): The event will be generated when the Encoder 14 stops for longer than EncoderTimeout. * - \b Encoder15Restarted (Display string: 'Encoder 15 Restarted'): The event will be generated when the Encoder 15 restarts moving. - * - \b Line2RisingEdge (Display string: 'Line 2 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 2. - * - \b Line3RisingEdge (Display string: 'Line 3 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 3. - * - \b Line4RisingEdge (Display string: 'Line 4 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 4. - * - \b Line5RisingEdge (Display string: 'Line 5 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 5. - * - \b Line6RisingEdge (Display string: 'Line 6 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 6. - * - \b Line7RisingEdge (Display string: 'Line 7 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 7. - * - \b Line8RisingEdge (Display string: 'Line 8 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 8. - * - \b Line9RisingEdge (Display string: 'Line 9 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 9. - * - \b Line10RisingEdge (Display string: 'Line 10 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 10. - * - \b Line11RisingEdge (Display string: 'Line 11 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 11. - * - \b Line12RisingEdge (Display string: 'Line 12 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 12. - * - \b Line13RisingEdge (Display string: 'Line 13 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 13. - * - \b Line14RisingEdge (Display string: 'Line 14 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 14. - * - \b Line15RisingEdge (Display string: 'Line 15 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 15. - * - \b Line2FallingEdge (Display string: 'Line 2 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 2. - * - \b Line3FallingEdge (Display string: 'Line 3 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 3. - * - \b Line4FallingEdge (Display string: 'Line 4 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 4. - * - \b Line5FallingEdge (Display string: 'Line 5 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 5. - * - \b Line6FallingEdge (Display string: 'Line 6 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 6. - * - \b Line7FallingEdge (Display string: 'Line 7 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 7. - * - \b Line8FallingEdge (Display string: 'Line 8 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 8. - * - \b Line9FallingEdge (Display string: 'Line 9 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 9. - * - \b Line10FallingEdge (Display string: 'Line 10 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 10. - * - \b Line11FallingEdge (Display string: 'Line 11 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 11. - * - \b Line12FallingEdge (Display string: 'Line 12 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 12. - * - \b Line13FallingEdge (Display string: 'Line 13 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 13. - * - \b Line14FallingEdge (Display string: 'Line 14 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 14. - * - \b Line15FallingEdge (Display string: 'Line 15 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 15. + * - \b Encoder15Stopped (Display string: 'Encoder 15 Stopped'): The event will be generated when the Encoder 15 stops for longer than EncoderTimeout. + * - \b Error (Display string: 'Error'): Device just detected an error during the active Acquisition. + * - \b ExposureEnd (Display string: 'Exposure End'): Device just completed the exposure of one Frame (or Line). + * - \b ExposureStart (Display string: 'Exposure Start'): Device just started the exposure of one Frame (or Line). + * - \b FrameBurstEnd (Display string: 'Frame Burst End'): Device just completed the capture of a burst of Frames. + * - \b FrameBurstStart (Display string: 'Frame Burst Start'): Device just started the capture of a burst of Frames. + * - \b FrameEnd (Display string: 'Frame End'): Device just completed the capture of one Frame. + * - \b FrameStart (Display string: 'Frame Start'): Device just started the capture of one Frame. + * - \b FrameTransferEnd (Display string: 'Frame Transfer End'): Device just completed the transfer of one Frame. + * - \b FrameTransferStart (Display string: 'Frame Transfer Start'): Device just started the transfer of one Frame. + * - \b FrameTrigger (Display string: 'Frame Trigger'): Device just received a trigger to start the capture of one Frame. + * - \b FrameTriggerMissed (Display string: 'Frame Trigger Missed'): Device just missed a trigger to start the capture of one Frame. + * - \b InterfaceListChanged (Display string: 'Interface List Changed'): This enumeration value indicates an event that is fired when the list of interfaces has been updated. + * - \b InterfaceLost (Display string: 'Interface Lost'): This enumeration value indicates an event that is raised when the interface connection is lost. + * - \b Line0AnyEdge (Display string: 'Line 0 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 0. + * - \b Line0FallingEdge (Display string: 'Line 0 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 0. + * - \b Line0RisingEdge (Display string: 'Line 0 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 0. + * - \b Line1AnyEdge (Display string: 'Line 1 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 1. + * - \b Line1FallingEdge (Display string: 'Line 1 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 1. + * - \b Line1RisingEdge (Display string: 'Line 1 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 1. * - \b Line2AnyEdge (Display string: 'Line 2 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 2. + * - \b Line2FallingEdge (Display string: 'Line 2 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 2. + * - \b Line2RisingEdge (Display string: 'Line 2 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 2. * - \b Line3AnyEdge (Display string: 'Line 3 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 3. + * - \b Line3FallingEdge (Display string: 'Line 3 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 3. + * - \b Line3RisingEdge (Display string: 'Line 3 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 3. * - \b Line4AnyEdge (Display string: 'Line 4 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 4. + * - \b Line4FallingEdge (Display string: 'Line 4 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 4. + * - \b Line4RisingEdge (Display string: 'Line 4 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 4. * - \b Line5AnyEdge (Display string: 'Line 5 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 5. + * - \b Line5FallingEdge (Display string: 'Line 5 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 5. + * - \b Line5RisingEdge (Display string: 'Line 5 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 5. * - \b Line6AnyEdge (Display string: 'Line 6 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 6. + * - \b Line6FallingEdge (Display string: 'Line 6 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 6. + * - \b Line6RisingEdge (Display string: 'Line 6 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 6. * - \b Line7AnyEdge (Display string: 'Line 7 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 7. + * - \b Line7FallingEdge (Display string: 'Line 7 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 7. + * - \b Line7RisingEdge (Display string: 'Line 7 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 7. * - \b Line8AnyEdge (Display string: 'Line 8 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 8. + * - \b Line8FallingEdge (Display string: 'Line 8 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 8. + * - \b Line8RisingEdge (Display string: 'Line 8 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 8. * - \b Line9AnyEdge (Display string: 'Line 9 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 9. + * - \b Line9FallingEdge (Display string: 'Line 9 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 9. + * - \b Line9RisingEdge (Display string: 'Line 9 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 9. * - \b Line10AnyEdge (Display string: 'Line 10 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 10. + * - \b Line10FallingEdge (Display string: 'Line 10 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 10. + * - \b Line10RisingEdge (Display string: 'Line 10 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 10. * - \b Line11AnyEdge (Display string: 'Line 11 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 11. + * - \b Line11FallingEdge (Display string: 'Line 11 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 11. + * - \b Line11RisingEdge (Display string: 'Line 11 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 11. * - \b Line12AnyEdge (Display string: 'Line 12 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 12. + * - \b Line12FallingEdge (Display string: 'Line 12 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 12. + * - \b Line12RisingEdge (Display string: 'Line 12 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 12. * - \b Line13AnyEdge (Display string: 'Line 13 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 13. + * - \b Line13FallingEdge (Display string: 'Line 13 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 13. + * - \b Line13RisingEdge (Display string: 'Line 13 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 13. * - \b Line14AnyEdge (Display string: 'Line 14 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 14. + * - \b Line14FallingEdge (Display string: 'Line 14 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 14. + * - \b Line14RisingEdge (Display string: 'Line 14 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 14. * - \b Line15AnyEdge (Display string: 'Line 15 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 15. + * - \b Line15FallingEdge (Display string: 'Line 15 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 15. + * - \b Line15RisingEdge (Display string: 'Line 15 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 15. + * - \b LineEnd (Display string: 'Line End'): Device just completed the capture of one Line. + * - \b LineStart (Display string: 'Line Start'): Device just started the capture of one Line. + * - \b LineTrigger (Display string: 'Line Trigger'): Device just received a trigger to start the capture of one Line. + * - \b LineTriggerMissed (Display string: 'Line Trigger Missed'): Device just missed a trigger to start the capture of one Line. * - \b Link0Trigger (Display string: 'Link 0 Trigger') * - \b Link1Trigger (Display string: 'Link 1 Trigger') * - \b Link2Trigger (Display string: 'Link 2 Trigger') @@ -16271,14 +16687,54 @@ public: * - \b Link13Trigger (Display string: 'Link 13 Trigger') * - \b Link14Trigger (Display string: 'Link 14 Trigger') * - \b Link15Trigger (Display string: 'Link 15 Trigger') - * - \b InterfaceListChanged (Display string: 'Interface List Changed'): This enumeration value indicates an event that is fired when the list of interfaces has been updated. - * - \b InterfaceLost (Display string: 'Interface Lost'): This enumeration value indicates an event that is raised when the interface connection is lost. - * - \b DeviceListChanged (Display string: 'Device List Changed'): This enumeration value indicates an event that is fired when the list of devices has been updated. - * - \b DeviceLost (Display string: 'Device Lost'): This enumeration value indicates an event that is raised when the local host looses connection to the physical(remote) device. - * - \b BufferTooSmall (Display string: 'Buffer Too Small'): This enumeration value indicates an event that is raised when the buffer was too small to receive the expected amount of data. - * - \b BuffersDiscarded (Display string: 'Buffers Discarded'): This enumeration value indicates an event that is raised when buffers discared by GenTL or device. This event could optionally carry two numeric child data fields EventBuffersDiscardedDeviceCount and EventBuffersDiscardedProducerCount. - * - \b BuffersDiscardedDeviceCount (Display string: 'Buffers Discarded Device Count'): This enumeration value indicates the number of buffers discarded by the device since last fired instance of this event (the producer would get to know about this for example by observing a gap in the block_id sequence). - * - \b BuffersDiscardedProducerCount (Display string: 'Buffers Discarded Producer Count'): This enumeration value indicates the number of buffers discarded by the producer since last fired instance of this event (this would happen e.g. if there are no free buffers available or if given buffer handling mode requires discarding old buffers etc.). + * - \b LinkSpeedChange (Display string: 'Link Speed Change'): The event will be generated when the link speed has changed. + * - \b LinkTrigger0 (Display string: 'Link Trigger 0'): The event will be generated when a Rising Edge is detected on the LinkTrigger 0. + * - \b LinkTrigger1 (Display string: 'Link Trigger 1'): The event will be generated when a Rising Edge is detected on the LinkTrigger 1. + * - \b PrimaryApplicationSwitch (Display string: 'Primary Application Switch'): The event will be generated when a primary application switchover has been granted (GigE Vision Specific). + * - \b SequencerSetChange (Display string: 'Sequencer Set Change'): Device sequencer set has changed. + * - \b Stream0TransferBlockEnd (Display string: 'Stream 0 Transfer Block End'): Device just completed the transfer of one Block. + * - \b Stream0TransferBlockStart (Display string: 'Stream 0 Transfer Block Start'): Device just started the transfer of one Block. + * - \b Stream0TransferBlockTrigger (Display string: 'Stream 0 Transfer Block Trigger'): Device just received a trigger to start the transfer of one Block. + * - \b Stream0TransferBurstEnd (Display string: 'Stream 0 Transfer Burst End'): Device just completed the transfer of a burst of Blocks. + * - \b Stream0TransferBurstStart (Display string: 'Stream 0 Transfer Burst Start'): Device just started the transfer of a burst of Blocks. + * - \b Stream0TransferEnd (Display string: 'Stream 0 Transfer End'): Device just completed the transfer of one or many Blocks. + * - \b Stream0TransferOverflow (Display string: 'Stream 0 Transfer Overflow'): Device transfer queue overflowed. + * - \b Stream0TransferPause (Display string: 'Stream 0 Transfer Pause'): Device just paused the transfer. + * - \b Stream0TransferResume (Display string: 'Stream 0 Transfer Resume'): Device just resumed the transfer. + * - \b Stream0TransferStart (Display string: 'Stream 0 Transfer Start'): Device just started the transfer of one or many Blocks. + * - \b Test (Display string: 'Test'): The test event will be generated when the device receives the TestEventGenerate command (EventNotification for the Test event is always On). + * - \b Timer0End (Display string: 'Timer 0 End'): The event will be generated when Timer 0 ends counting. + * - \b Timer0Start (Display string: 'Timer 0 Start'): The event will be generated when Timer 0 starts counting. + * - \b Timer1End (Display string: 'Timer 1 End'): The event will be generated when Timer 1 ends counting. + * - \b Timer1Start (Display string: 'Timer 1 Start'): The event will be generated when Timer 1 starts counting. + * - \b Timer2End (Display string: 'Timer 2 End'): The event will be generated when Timer 2 ends counting. + * - \b Timer2Start (Display string: 'Timer 2 Start'): The event will be generated when Timer 2 starts counting. + * - \b Timer3End (Display string: 'Timer 3 End'): The event will be generated when Timer 3 ends counting. + * - \b Timer3Start (Display string: 'Timer 3 Start'): The event will be generated when Timer 3 starts counting. + * - \b Timer4End (Display string: 'Timer 4 End'): The event will be generated when Timer 4 ends counting. + * - \b Timer4Start (Display string: 'Timer 4 Start'): The event will be generated when Timer 4 starts counting. + * - \b Timer5End (Display string: 'Timer 5 End'): The event will be generated when Timer 5 ends counting. + * - \b Timer5Start (Display string: 'Timer 5 Start'): The event will be generated when Timer 5 starts counting. + * - \b Timer6End (Display string: 'Timer 6 End'): The event will be generated when Timer 6 ends counting. + * - \b Timer6Start (Display string: 'Timer 6 Start'): The event will be generated when Timer 6 starts counting. + * - \b Timer7End (Display string: 'Timer 7 End'): The event will be generated when Timer 7 ends counting. + * - \b Timer7Start (Display string: 'Timer 7 Start'): The event will be generated when Timer 7 starts counting. + * - \b Timer8End (Display string: 'Timer 8 End'): The event will be generated when Timer 8 ends counting. + * - \b Timer8Start (Display string: 'Timer 8 Start'): The event will be generated when Timer 8 starts counting. + * - \b Timer9End (Display string: 'Timer 9 End'): The event will be generated when Timer 9 ends counting. + * - \b Timer9Start (Display string: 'Timer 9 Start'): The event will be generated when Timer 9 starts counting. + * - \b Timer10End (Display string: 'Timer 10 End'): The event will be generated when Timer 10 ends counting. + * - \b Timer10Start (Display string: 'Timer 10 Start'): The event will be generated when Timer 10 starts counting. + * - \b Timer11End (Display string: 'Timer 11 End'): The event will be generated when Timer 11 ends counting. + * - \b Timer11Start (Display string: 'Timer 11 Start'): The event will be generated when Timer 11 starts counting. + * - \b Timer12End (Display string: 'Timer 12 End'): The event will be generated when Timer 12 ends counting. + * - \b Timer12Start (Display string: 'Timer 12 Start'): The event will be generated when Timer 12 starts counting. + * - \b Timer13End (Display string: 'Timer 13 End'): The event will be generated when Timer 13 ends counting. + * - \b Timer13Start (Display string: 'Timer 13 Start'): The event will be generated when Timer 13 starts counting. + * - \b Timer14End (Display string: 'Timer 14 End'): The event will be generated when Timer 14 ends counting. + * - \b Timer14Start (Display string: 'Timer 14 Start'): The event will be generated when Timer 14 starts counting. + * - \b Timer15End (Display string: 'Timer 15 End'): The event will be generated when Timer 15 ends counting. + * - \b Timer15Start (Display string: 'Timer 15 Start'): The event will be generated when Timer 15 starts counting. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -16371,13 +16827,14 @@ class InterfaceModule : public mvIMPACT::acquire::ComponentCollection //----------------------------------------------------------------------------- { private: - void init( mvIMPACT::acquire::ComponentLocator& locator ) + void init( const mvIMPACT::acquire::ComponentLocator& locator ) { locator.bindComponent( interfaceID, "InterfaceID" ); locator.bindComponent( interfaceDisplayName, "InterfaceDisplayName" ); locator.bindComponent( interfaceType, "InterfaceType" ); locator.bindComponent( interfaceTLVersionMajor, "InterfaceTLVersionMajor" ); locator.bindComponent( interfaceTLVersionMinor, "InterfaceTLVersionMinor" ); + locator.bindComponent( mvInterfaceLicenseFile, "mvInterfaceLicenseFile" ); locator.bindComponent( gevInterfaceGatewaySelector, "GevInterfaceGatewaySelector" ); locator.bindComponent( gevInterfaceGateway, "GevInterfaceGateway" ); locator.bindComponent( gevInterfaceMACAddress, "GevInterfaceMACAddress" ); @@ -16400,6 +16857,7 @@ private: locator.bindComponent( deviceLinkSpeed, "DeviceLinkSpeed" ); locator.bindComponent( deviceAccessStatus, "DeviceAccessStatus" ); locator.bindComponent( deviceSerialNumber, "DeviceSerialNumber" ); + locator.bindComponent( mvU3VDeviceGUID, "mvU3VDeviceGUID" ); locator.bindComponent( deviceUserID, "DeviceUserID" ); locator.bindComponent( deviceTLVersionMajor, "DeviceTLVersionMajor" ); locator.bindComponent( deviceTLVersionMinor, "DeviceTLVersionMinor" ); @@ -16430,6 +16888,8 @@ private: locator.bindComponent( gevDeviceForceSubnetMask, "GevDeviceForceSubnetMask" ); locator.bindComponent( gevDeviceForceGateway, "GevDeviceForceGateway" ); locator.bindComponent( mvDeviceUpdateFirmware, "mvDeviceUpdateFirmware@i" ); + locator.bindComponent( mvDeviceLicenseValid, "mvDeviceLicenseValid" ); + locator.bindComponent( mvDeviceLicenseDetails, "mvDeviceLicenseDetails" ); locator.bindComponent( actionCommand, "ActionCommand@i" ); if( !actionCommand.isValid() ) { @@ -16465,6 +16925,11 @@ private: { locator.bindComponent( gevActionDestinationIPAddress, "mvActionDestinationIPAddress" ); } + locator.bindComponent( mvActionAcknowledgeEnable, "mvActionAcknowledgeEnable" ); + locator.bindComponent( mvActionAcknowledgesExpected, "mvActionAcknowledgesExpected" ); + locator.bindComponent( mvActionAcknowledgeTimeout, "mvActionAcknowledgeTimeout" ); + locator.bindComponent( mvActionAcknowledgesReceived, "mvActionAcknowledgesReceived" ); + locator.bindComponent( mvActionAcknowledgesFailed, "mvActionAcknowledgesFailed" ); locator.bindComponent( eventSelector, "EventSelector" ); locator.bindComponent( eventNotification, "EventNotification" ); } @@ -16473,22 +16938,22 @@ public: /// \brief Constructs a new mvIMPACT::acquire::GenICam::InterfaceModule object(\b deprecated). /** * \deprecated This constructor has been declared deprecated as it doesn't allow to access features from 3rd party GenTL producers. Use a constructor that allows the selection of the desired GenTL producer instead. + * \param pDev [in] A pointer to a mvIMPACT::acquire::Device object obtained from a mvIMPACT::acquire::DeviceManager object. + * \param index [in] The \a index of the instance this object shall be created for. Passing an invalid index will raise an exception. * \since 2.17.0 */ explicit MVIMPACT_DEPRECATED_CPP( InterfaceModule( - /// [in] A pointer to a mvIMPACT::acquire::Device object obtained from a mvIMPACT::acquire::DeviceManager object. mvIMPACT::acquire::Device* pDev, - /// [in] The \a index of the instance this object shall be created for. Passing an invalid index will raise an exception. int64_type index ) ); #endif // #ifndef WRAP_ANY #ifndef WRAP_ANY /// \brief Constructs a new mvIMPACT::acquire::GenICam::InterfaceModule object(\b deprecated). /** * \deprecated This constructor has been declared deprecated as it doesn't allow to access features from 3rd party GenTL producers. Use a constructor that allows the selection of the desired GenTL producer instead. + * \param index [in] The \a index of the instance this object shall be created for. Passing an invalid index will raise an exception. * \since 2.17.0 */ explicit MVIMPACT_DEPRECATED_CPP( InterfaceModule( - /// [in] The \a index of the instance this object shall be created for. Passing an invalid index will raise an exception. int64_type index ) ); #endif // #ifndef WRAP_ANY /// \brief Constructs a new mvIMPACT::acquire::GenICam::InterfaceModule object. @@ -16506,6 +16971,7 @@ public: interfaceType(), interfaceTLVersionMajor(), interfaceTLVersionMinor(), + mvInterfaceLicenseFile(), gevInterfaceGatewaySelector(), gevInterfaceGateway(), gevInterfaceMACAddress(), @@ -16528,6 +16994,7 @@ public: deviceLinkSpeed(), deviceAccessStatus(), deviceSerialNumber(), + mvU3VDeviceGUID(), deviceUserID(), deviceTLVersionMajor(), deviceTLVersionMinor(), @@ -16554,6 +17021,8 @@ public: gevDeviceForceSubnetMask(), gevDeviceForceGateway(), mvDeviceUpdateFirmware(), + mvDeviceLicenseValid(), + mvDeviceLicenseDetails(), actionCommand(), actionDeviceKey(), actionGroupKey(), @@ -16561,6 +17030,11 @@ public: actionScheduledTimeEnable(), actionScheduledTime(), gevActionDestinationIPAddress(), + mvActionAcknowledgeEnable(), + mvActionAcknowledgesExpected(), + mvActionAcknowledgeTimeout(), + mvActionAcknowledgesReceived(), + mvActionAcknowledgesFailed(), eventSelector(), eventNotification() { @@ -16612,6 +17086,11 @@ public: * This is a read only element. It indicates the minor version number of the transport layer specification the GenTL Producer complies with. */ PropertyI64 interfaceTLVersionMinor; + /// \brief A string property. Indicates the path of the license file. + /** + * This string register indicates the path of the file that will be used for extracting licenses for devices on this interface. + */ + PropertyS mvInterfaceLicenseFile; /// \brief An integer property. Selector for the different gateway entries for this interface. /** * Selector for the different gateway entries for this interface. The selector is 0-based in order to match the index of the C interface. @@ -16751,6 +17230,11 @@ public: * Device's serial number. This string is a unique identifier of the device. */ PropertyS deviceSerialNumber; + /// \brief A string property. Indicates the USB3 Vision GUID of the device. + /** + * This is a read only element. It indicates the USB3 Vision GUID of the device. + */ + PropertyS mvU3VDeviceGUID; /// \brief A string property. User-programmable device identifier. /** * User-programmable device identifier. @@ -16900,6 +17384,16 @@ public: * Updates the device using the firmware images embedded into this producer library. */ Method mvDeviceUpdateFirmware; + /// \brief A boolean property. True if the current device has a valid license. + /** + * True if the current device has a valid license. This is the case for all Balluff/MATRIX VISION devices and devices for which a license file has been provided. + */ + PropertyIBoolean mvDeviceLicenseValid; + /// \brief A string property. Details about the granted license. + /** + * This is a read only element. It indicates details whether or not this device can be operated without limitations using this driver stack. + */ + PropertyS mvDeviceLicenseDetails; /// \brief A method object. Sends the action command /** * It either sends an action command unicast packet to the IP address specified by the 'mvActionDestinationIPAddress' property, or broadcasts an action command broadcast packet on the broadcast domain specified by the 'mvActionDestinationIPAddress' property @@ -16935,204 +17429,182 @@ public: * A valid IP address if the action command shall be unicast. A broadcast subnet if the action command shall be broadcast. */ PropertyI64 gevActionDestinationIPAddress; + /// \brief A boolean property. Enables or disables the ACK response for the action command + /** + * Enables or disables the ACK response packet for an action command by setting the corresponding flag in the command. Typically, invokers of an action command don't wait for an acknowledge which is why this flag is usually not set in the command. + */ + PropertyIBoolean mvActionAcknowledgeEnable; + /// \brief An integer property. Number of devices to send an acknowledge to the action command generated in the current setup + /** + * An unsigned integer containing the number of devices that are expected to send an acknowledge to the action command generated in the current setup. + */ + PropertyI64 mvActionAcknowledgesExpected; + /// \brief An integer property. Maximum wait time for the acknowledge o an action command(ms) + /** + * Maximum wait time for the acknowledge to the action command generated in the current setup(ms). + */ + PropertyI64 mvActionAcknowledgeTimeout; + /// \brief An integer property. Number of devices that sent an acknowledge to the recent action command + /** + * Number of devices that sent an acknowledge as a response to the recent action command generated in the current setup. + */ + PropertyI64 mvActionAcknowledgesReceived; + /// \brief An integer property. Number of devices that sent an acknowledge with an error code to the recent action command + /** + * Number of devices that sent an acknowledge with an error code as a response to the recent action command generated in the current setup. + */ + PropertyI64 mvActionAcknowledgesFailed; /// \brief An enumerated integer property. Selects which Event to signal to the host application. /** * Selects which Event to signal to the host application. * * The following string values might be valid for this feature: - * - \b AcquisitionTrigger (Display string: 'Acquisition Trigger'): Device just received a trigger for the Acquisition of one or many Frames. - * - \b AcquisitionTriggerMissed (Display string: 'Acquisition Trigger Missed'): Device just missed a trigger for the Acquisition of one or many Frames. - * - \b AcquisitionStart (Display string: 'Acquisition Start'): Device just started the Acquisition of one or many Frames. * - \b AcquisitionEnd (Display string: 'Acquisition End'): Device just completed the Acquisition of one or many Frames. - * - \b AcquisitionTransferStart (Display string: 'Acquisition Transfer Start'): Device just started the transfer of one or many Frames. - * - \b AcquisitionTransferEnd (Display string: 'Acquisition Transfer End'): Device just completed the transfer of one or many Frames. * - \b AcquisitionError (Display string: 'Acquisition Error'): Device just detected an error during the active Acquisition. - * - \b FrameBurstStart (Display string: 'Frame Burst Start'): Device just started the capture of a burst of Frames. - * - \b FrameBurstEnd (Display string: 'Frame Burst End'): Device just completed the capture of a burst of Frames. - * - \b FrameTrigger (Display string: 'Frame Trigger'): Device just received a trigger to start the capture of one Frame. - * - \b FrameTriggerMissed (Display string: 'Frame Trigger Missed'): Device just missed a trigger to start the capture of one Frame. - * - \b FrameStart (Display string: 'Frame Start'): Device just started the capture of one Frame. - * - \b FrameEnd (Display string: 'Frame End'): Device just completed the capture of one Frame. - * - \b FrameTransferStart (Display string: 'Frame Transfer Start'): Device just started the transfer of one Frame. - * - \b FrameTransferEnd (Display string: 'Frame Transfer End'): Device just completed the transfer of one Frame. - * - \b LineTrigger (Display string: 'Line Trigger'): Device just received a trigger to start the capture of one Line. - * - \b LineTriggerMissed (Display string: 'Line Trigger Missed'): Device just missed a trigger to start the capture of one Line. - * - \b LineStart (Display string: 'Line Start'): Device just started the capture of one Line. - * - \b LineEnd (Display string: 'Line End'): Device just completed the capture of one Line. - * - \b ExposureStart (Display string: 'Exposure Start'): Device just started the exposure of one Frame (or Line). - * - \b ExposureEnd (Display string: 'Exposure End'): Device just completed the exposure of one Frame (or Line). - * - \b Stream0TransferStart (Display string: 'Stream 0 Transfer Start'): Device just started the transfer of one or many Blocks. - * - \b Stream0TransferEnd (Display string: 'Stream 0 Transfer End'): Device just completed the transfer of one or many Blocks. - * - \b Stream0TransferPause (Display string: 'Stream 0 Transfer Pause'): Device just paused the transfer. - * - \b Stream0TransferResume (Display string: 'Stream 0 Transfer Resume'): Device just resumed the transfer. - * - \b Stream0TransferBlockStart (Display string: 'Stream 0 Transfer Block Start'): Device just started the transfer of one Block. - * - \b Stream0TransferBlockEnd (Display string: 'Stream 0 Transfer Block End'): Device just completed the transfer of one Block. - * - \b Stream0TransferBlockTrigger (Display string: 'Stream 0 Transfer Block Trigger'): Device just received a trigger to start the transfer of one Block. - * - \b Stream0TransferBurstStart (Display string: 'Stream 0 Transfer Burst Start'): Device just started the transfer of a burst of Blocks. - * - \b Stream0TransferBurstEnd (Display string: 'Stream 0 Transfer Burst End'): Device just completed the transfer of a burst of Blocks. - * - \b Stream0TransferOverflow (Display string: 'Stream 0 Transfer Overflow'): Device transfer queue overflowed. - * - \b SequencerSetChange (Display string: 'Sequencer Set Change'): Device sequencer set has changed. - * - \b Counter0Start (Display string: 'Counter 0 Start'): The event will be generated when counter 0 starts counting. - * - \b Counter1Start (Display string: 'Counter 1 Start'): The event will be generated when counter 1 starts counting. - * - \b Counter\#2\#Start (Display string: 'Counter \#2\# Start'): The event will be generated when counter \#2\# starts counting. + * - \b AcquisitionStart (Display string: 'Acquisition Start'): Device just started the Acquisition of one or many Frames. + * - \b AcquisitionTransferEnd (Display string: 'Acquisition Transfer End'): Device just completed the transfer of one or many Frames. + * - \b AcquisitionTransferStart (Display string: 'Acquisition Transfer Start'): Device just started the transfer of one or many Frames. + * - \b AcquisitionTrigger (Display string: 'Acquisition Trigger'): Device just received a trigger for the Acquisition of one or many Frames. + * - \b AcquisitionTriggerMissed (Display string: 'Acquisition Trigger Missed'): Device just missed a trigger for the Acquisition of one or many Frames. + * - \b ActionLate (Display string: 'Action Late'): The event will be generated when a valid scheduled action command is received and is scheduled to be executed at a time that is already past. + * - \b BufferTooSmall (Display string: 'Buffer Too Small'): This enumeration value indicates an event that is raised when the buffer was too small to receive the expected amount of data. + * - \b BuffersDiscarded (Display string: 'Buffers Discarded'): This enumeration value indicates an event that is raised when buffers discared by GenTL or device. This event could optionally carry two numeric child data fields EventBuffersDiscardedDeviceCount and EventBuffersDiscardedProducerCount. + * - \b BuffersDiscardedDeviceCount (Display string: 'Buffers Discarded Device Count'): This enumeration value indicates the number of buffers discarded by the device since last fired instance of this event (the producer would get to know about this for example by observing a gap in the block_id sequence). + * - \b BuffersDiscardedProducerCount (Display string: 'Buffers Discarded Producer Count'): This enumeration value indicates the number of buffers discarded by the producer since last fired instance of this event (this would happen e.g. if there are no free buffers available or if given buffer handling mode requires discarding old buffers etc.). * - \b Counter0End (Display string: 'Counter 0 End'): The event will be generated when counter 0 ends counting. + * - \b Counter0Start (Display string: 'Counter 0 Start'): The event will be generated when counter 0 starts counting. * - \b Counter1End (Display string: 'Counter 1 End'): The event will be generated when counter 1 ends counting. - * - \b Counter\#2\#End (Display string: 'Counter \#2\# End'): The event will be generated when counter \#2\# ends counting. - * - \b Timer0Start (Display string: 'Timer 0 Start'): The event will be generated when Timer 0 starts counting. - * - \b Timer1Start (Display string: 'Timer 1 Start'): The event will be generated when Timer 1 starts counting. - * - \b Timer\#2\#Start (Display string: 'Timer \#2\# Start'): The event will be generated when Timer \#2\# starts counting. - * - \b Timer0End (Display string: 'Timer 0 End'): The event will be generated when Timer 0 ends counting. - * - \b Timer1End (Display string: 'Timer 1 End'): The event will be generated when Timer 1 ends counting. - * - \b Timer\#2\#End (Display string: 'Timer \#2\# End'): The event will be generated when Timer \#2\# ends counting. - * - \b Encoder0Stopped (Display string: 'Encoder 0 Stopped'): The event will be generated when the Encoder 0 stops for longer than EncoderTimeout. - * - \b Encoder1Stopped (Display string: 'Encoder 1 Stopped'): The event will be generated when the Encoder 1 stops for longer than EncoderTimeout. - * - \b Encoder\#2\#Stopped (Display string: 'Encoder \#2\# Stopped'): The event will be generated when the Encoder \#2\# stops for longer than EncoderTimeout. - * - \b Encoder0Restarted (Display string: 'Encoder 0 Restarted'): The event will be generated when the Encoder 0 restarts moving. - * - \b Encoder1Restarted (Display string: 'Encoder 1 Restarted'): The event will be generated when the Encoder 1 restarts moving. - * - \b Encoder\#2\#Restarted (Display string: 'Encoder \#2\# Restarted'): The event will be generated when the Encoder \#2\# restarts moving. - * - \b Line0RisingEdge (Display string: 'Line 0 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 0. - * - \b Line1RisingEdge (Display string: 'Line 1 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 1. - * - \b Line\#2\#RisingEdge (Display string: 'Line \#2\# Rising Edge'): The event will be generated when a Rising Edge is detected on the Line \#2\#. - * - \b Line0FallingEdge (Display string: 'Line 0 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 0. - * - \b Line1FallingEdge (Display string: 'Line 1 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 1. - * - \b Line\#2\#FallingEdge (Display string: 'Line \#2\# Falling Edge'): The event will be generated when a Falling Edge is detected on the Line \#2\#. - * - \b Line0AnyEdge (Display string: 'Line 0 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 0. - * - \b Line1AnyEdge (Display string: 'Line 1 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 1. - * - \b Line\#2\#AnyEdge (Display string: 'Line \#2\# Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line \#2\#. - * - \b LinkTrigger0 (Display string: 'Link Trigger 0'): The event will be generated when a Rising Edge is detected on the LinkTrigger 0. - * - \b LinkTrigger1 (Display string: 'Link Trigger 1'): The event will be generated when a Rising Edge is detected on the LinkTrigger 1. - * - \b LinkTrigger\#2\# (Display string: 'Link Trigger \#2\#'): The event will be generated when a Rising Edge is detected on the LinkTrigger \#2\#. - * - \b LinkSpeedChange (Display string: 'Link Speed Change'): The event will be generated when the link speed has changed. - * - \b ActionLate (Display string: 'Action Late'): The event will be generated when a valid scheduled action command is received and is scheduled to be executed at a time that is already past. - * - \b Error (Display string: 'Error'): Device just detected an error during the active Acquisition. - * - \b Test (Display string: 'Test'): The test event will be generated when the device receives the TestEventGenerate command (EventNotification for the Test event is always On). - * - \b PrimaryApplicationSwitch (Display string: 'Primary Application Switch'): The event will be generated when a primary application switchover has been granted (GigE Vision Specific). - * - \b Counter2Start (Display string: 'Counter 2 Start'): The event will be generated when counter 2 starts counting. - * - \b Counter3Start (Display string: 'Counter 3 Start'): The event will be generated when counter 3 starts counting. - * - \b Counter4Start (Display string: 'Counter 4 Start'): The event will be generated when counter 4 starts counting. - * - \b Counter5Start (Display string: 'Counter 5 Start'): The event will be generated when counter 5 starts counting. - * - \b Counter6Start (Display string: 'Counter 6 Start'): The event will be generated when counter 6 starts counting. - * - \b Counter7Start (Display string: 'Counter 7 Start'): The event will be generated when counter 7 starts counting. - * - \b Counter8Start (Display string: 'Counter 8 Start'): The event will be generated when counter 8 starts counting. - * - \b Counter9Start (Display string: 'Counter 9 Start'): The event will be generated when counter 9 starts counting. - * - \b Counter10Start (Display string: 'Counter 10 Start'): The event will be generated when counter 10 starts counting. - * - \b Counter11Start (Display string: 'Counter 11 Start'): The event will be generated when counter 11 starts counting. - * - \b Counter12Start (Display string: 'Counter 12 Start'): The event will be generated when counter 12 starts counting. - * - \b Counter13Start (Display string: 'Counter 13 Start'): The event will be generated when counter 13 starts counting. - * - \b Counter14Start (Display string: 'Counter 14 Start'): The event will be generated when counter 14 starts counting. - * - \b Counter15Start (Display string: 'Counter 15 Start'): The event will be generated when counter 15 starts counting. + * - \b Counter1Start (Display string: 'Counter 1 Start'): The event will be generated when counter 1 starts counting. * - \b Counter2End (Display string: 'Counter 2 End'): The event will be generated when counter 2 ends counting. + * - \b Counter2Start (Display string: 'Counter 2 Start'): The event will be generated when counter 2 starts counting. * - \b Counter3End (Display string: 'Counter 3 End'): The event will be generated when counter 3 ends counting. + * - \b Counter3Start (Display string: 'Counter 3 Start'): The event will be generated when counter 3 starts counting. * - \b Counter4End (Display string: 'Counter 4 End'): The event will be generated when counter 4 ends counting. + * - \b Counter4Start (Display string: 'Counter 4 Start'): The event will be generated when counter 4 starts counting. * - \b Counter5End (Display string: 'Counter 5 End'): The event will be generated when counter 5 ends counting. + * - \b Counter5Start (Display string: 'Counter 5 Start'): The event will be generated when counter 5 starts counting. * - \b Counter6End (Display string: 'Counter 6 End'): The event will be generated when counter 6 ends counting. + * - \b Counter6Start (Display string: 'Counter 6 Start'): The event will be generated when counter 6 starts counting. * - \b Counter7End (Display string: 'Counter 7 End'): The event will be generated when counter 7 ends counting. + * - \b Counter7Start (Display string: 'Counter 7 Start'): The event will be generated when counter 7 starts counting. * - \b Counter8End (Display string: 'Counter 8 End'): The event will be generated when counter 8 ends counting. + * - \b Counter8Start (Display string: 'Counter 8 Start'): The event will be generated when counter 8 starts counting. * - \b Counter9End (Display string: 'Counter 9 End'): The event will be generated when counter 9 ends counting. + * - \b Counter9Start (Display string: 'Counter 9 Start'): The event will be generated when counter 9 starts counting. * - \b Counter10End (Display string: 'Counter 10 End'): The event will be generated when counter 10 ends counting. + * - \b Counter10Start (Display string: 'Counter 10 Start'): The event will be generated when counter 10 starts counting. * - \b Counter11End (Display string: 'Counter 11 End'): The event will be generated when counter 11 ends counting. + * - \b Counter11Start (Display string: 'Counter 11 Start'): The event will be generated when counter 11 starts counting. * - \b Counter12End (Display string: 'Counter 12 End'): The event will be generated when counter 12 ends counting. - * - \b Counter13End (Display string: 'Counter 13 End'): The event will be generated when counter 13 ends counting. - * - \b Counter14End (Display string: 'Counter 14 End'): The event will be generated when counter 14 ends counting. - * - \b Counter15End (Display string: 'Counter 15 End'): The event will be generated when counter 15 ends counting. - * - \b Timer2Start (Display string: 'Timer 2 Start'): The event will be generated when Timer 2 starts counting. - * - \b Timer3Start (Display string: 'Timer 3 Start'): The event will be generated when Timer 3 starts counting. - * - \b Timer4Start (Display string: 'Timer 4 Start'): The event will be generated when Timer 4 starts counting. - * - \b Timer5Start (Display string: 'Timer 5 Start'): The event will be generated when Timer 5 starts counting. - * - \b Timer6Start (Display string: 'Timer 6 Start'): The event will be generated when Timer 6 starts counting. - * - \b Timer7Start (Display string: 'Timer 7 Start'): The event will be generated when Timer 7 starts counting. - * - \b Timer8Start (Display string: 'Timer 8 Start'): The event will be generated when Timer 8 starts counting. - * - \b Timer9Start (Display string: 'Timer 9 Start'): The event will be generated when Timer 9 starts counting. - * - \b Timer10Start (Display string: 'Timer 10 Start'): The event will be generated when Timer 10 starts counting. - * - \b Timer11Start (Display string: 'Timer 11 Start'): The event will be generated when Timer 11 starts counting. - * - \b Timer12Start (Display string: 'Timer 12 Start'): The event will be generated when Timer 12 starts counting. - * - \b Timer13Start (Display string: 'Timer 13 Start'): The event will be generated when Timer 13 starts counting. - * - \b Timer14Start (Display string: 'Timer 14 Start'): The event will be generated when Timer 14 starts counting. - * - \b Timer15Start (Display string: 'Timer 15 Start'): The event will be generated when Timer 15 starts counting. - * - \b Timer2End (Display string: 'Timer 2 End'): The event will be generated when Timer 2 ends counting. - * - \b Timer3End (Display string: 'Timer 3 End'): The event will be generated when Timer 3 ends counting. - * - \b Timer4End (Display string: 'Timer 4 End'): The event will be generated when Timer 4 ends counting. - * - \b Timer5End (Display string: 'Timer 5 End'): The event will be generated when Timer 5 ends counting. - * - \b Timer6End (Display string: 'Timer 6 End'): The event will be generated when Timer 6 ends counting. - * - \b Timer7End (Display string: 'Timer 7 End'): The event will be generated when Timer 7 ends counting. - * - \b Timer8End (Display string: 'Timer 8 End'): The event will be generated when Timer 8 ends counting. - * - \b Timer9End (Display string: 'Timer 9 End'): The event will be generated when Timer 9 ends counting. - * - \b Timer10End (Display string: 'Timer 10 End'): The event will be generated when Timer 10 ends counting. - * - \b Timer11End (Display string: 'Timer 11 End'): The event will be generated when Timer 11 ends counting. - * - \b Timer12End (Display string: 'Timer 12 End'): The event will be generated when Timer 12 ends counting. - * - \b Timer13End (Display string: 'Timer 13 End'): The event will be generated when Timer 13 ends counting. - * - \b Timer14End (Display string: 'Timer 14 End'): The event will be generated when Timer 14 ends counting. - * - \b Timer15End (Display string: 'Timer 15 End'): The event will be generated when Timer 15 ends counting. - * - \b Encoder2Stopped (Display string: 'Encoder 2 Stopped'): The event will be generated when the Encoder 2 stops for longer than EncoderTimeout. - * - \b Encoder3Stopped (Display string: 'Encoder 3 Stopped'): The event will be generated when the Encoder 3 stops for longer than EncoderTimeout. - * - \b Encoder4Stopped (Display string: 'Encoder 4 Stopped'): The event will be generated when the Encoder 4 stops for longer than EncoderTimeout. - * - \b Encoder5Stopped (Display string: 'Encoder 5 Stopped'): The event will be generated when the Encoder 5 stops for longer than EncoderTimeout. - * - \b Encoder6Stopped (Display string: 'Encoder 6 Stopped'): The event will be generated when the Encoder 6 stops for longer than EncoderTimeout. - * - \b Encoder7Stopped (Display string: 'Encoder 7 Stopped'): The event will be generated when the Encoder 7 stops for longer than EncoderTimeout. - * - \b Encoder8Stopped (Display string: 'Encoder 8 Stopped'): The event will be generated when the Encoder 8 stops for longer than EncoderTimeout. - * - \b Encoder9Stopped (Display string: 'Encoder 9 Stopped'): The event will be generated when the Encoder 9 stops for longer than EncoderTimeout. - * - \b Encoder10Stopped (Display string: 'Encoder 10 Stopped'): The event will be generated when the Encoder 10 stops for longer than EncoderTimeout. - * - \b Encoder11Stopped (Display string: 'Encoder 11 Stopped'): The event will be generated when the Encoder 11 stops for longer than EncoderTimeout. - * - \b Encoder12Stopped (Display string: 'Encoder 12 Stopped'): The event will be generated when the Encoder 12 stops for longer than EncoderTimeout. - * - \b Encoder13Stopped (Display string: 'Encoder 13 Stopped'): The event will be generated when the Encoder 13 stops for longer than EncoderTimeout. - * - \b Encoder14Stopped (Display string: 'Encoder 14 Stopped'): The event will be generated when the Encoder 14 stops for longer than EncoderTimeout. - * - \b Encoder15Stopped (Display string: 'Encoder 15 Stopped'): The event will be generated when the Encoder 15 stops for longer than EncoderTimeout. + * - \b Counter12Start (Display string: 'Counter 12 Start'): The event will be generated when counter 12 starts counting. + * - \b Counter13End (Display string: 'Counter 13 End'): The event will be generated when counter 13 ends counting. + * - \b Counter13Start (Display string: 'Counter 13 Start'): The event will be generated when counter 13 starts counting. + * - \b Counter14End (Display string: 'Counter 14 End'): The event will be generated when counter 14 ends counting. + * - \b Counter14Start (Display string: 'Counter 14 Start'): The event will be generated when counter 14 starts counting. + * - \b Counter15End (Display string: 'Counter 15 End'): The event will be generated when counter 15 ends counting. + * - \b Counter15Start (Display string: 'Counter 15 Start'): The event will be generated when counter 15 starts counting. + * - \b DeviceListChanged (Display string: 'Device List Changed'): This enumeration value indicates an event that is fired when the list of devices has been updated. + * - \b DeviceLost (Display string: 'Device Lost'): This enumeration value indicates an event that is raised when the local host looses connection to the physical(remote) device. + * - \b DeviceTemperatureStateCritical (Display string: 'Device Temperature State Critical') + * - \b DeviceTemperatureStateNormal (Display string: 'Device Temperature State Normal') + * - \b DeviceTemperatureStateOverTemperature (Display string: 'Device Temperature State Over Temperature') + * - \b Encoder0Restarted (Display string: 'Encoder 0 Restarted'): The event will be generated when the Encoder 0 restarts moving. + * - \b Encoder0Stopped (Display string: 'Encoder 0 Stopped'): The event will be generated when the Encoder 0 stops for longer than EncoderTimeout. + * - \b Encoder1Restarted (Display string: 'Encoder 1 Restarted'): The event will be generated when the Encoder 1 restarts moving. + * - \b Encoder1Stopped (Display string: 'Encoder 1 Stopped'): The event will be generated when the Encoder 1 stops for longer than EncoderTimeout. * - \b Encoder2Restarted (Display string: 'Encoder 2 Restarted'): The event will be generated when the Encoder 2 restarts moving. + * - \b Encoder2Stopped (Display string: 'Encoder 2 Stopped'): The event will be generated when the Encoder 2 stops for longer than EncoderTimeout. * - \b Encoder3Restarted (Display string: 'Encoder 3 Restarted'): The event will be generated when the Encoder 3 restarts moving. + * - \b Encoder3Stopped (Display string: 'Encoder 3 Stopped'): The event will be generated when the Encoder 3 stops for longer than EncoderTimeout. * - \b Encoder4Restarted (Display string: 'Encoder 4 Restarted'): The event will be generated when the Encoder 4 restarts moving. + * - \b Encoder4Stopped (Display string: 'Encoder 4 Stopped'): The event will be generated when the Encoder 4 stops for longer than EncoderTimeout. * - \b Encoder5Restarted (Display string: 'Encoder 5 Restarted'): The event will be generated when the Encoder 5 restarts moving. + * - \b Encoder5Stopped (Display string: 'Encoder 5 Stopped'): The event will be generated when the Encoder 5 stops for longer than EncoderTimeout. * - \b Encoder6Restarted (Display string: 'Encoder 6 Restarted'): The event will be generated when the Encoder 6 restarts moving. + * - \b Encoder6Stopped (Display string: 'Encoder 6 Stopped'): The event will be generated when the Encoder 6 stops for longer than EncoderTimeout. * - \b Encoder7Restarted (Display string: 'Encoder 7 Restarted'): The event will be generated when the Encoder 7 restarts moving. + * - \b Encoder7Stopped (Display string: 'Encoder 7 Stopped'): The event will be generated when the Encoder 7 stops for longer than EncoderTimeout. * - \b Encoder8Restarted (Display string: 'Encoder 8 Restarted'): The event will be generated when the Encoder 8 restarts moving. + * - \b Encoder8Stopped (Display string: 'Encoder 8 Stopped'): The event will be generated when the Encoder 8 stops for longer than EncoderTimeout. * - \b Encoder9Restarted (Display string: 'Encoder 9 Restarted'): The event will be generated when the Encoder 9 restarts moving. + * - \b Encoder9Stopped (Display string: 'Encoder 9 Stopped'): The event will be generated when the Encoder 9 stops for longer than EncoderTimeout. * - \b Encoder10Restarted (Display string: 'Encoder 10 Restarted'): The event will be generated when the Encoder 10 restarts moving. + * - \b Encoder10Stopped (Display string: 'Encoder 10 Stopped'): The event will be generated when the Encoder 10 stops for longer than EncoderTimeout. * - \b Encoder11Restarted (Display string: 'Encoder 11 Restarted'): The event will be generated when the Encoder 11 restarts moving. + * - \b Encoder11Stopped (Display string: 'Encoder 11 Stopped'): The event will be generated when the Encoder 11 stops for longer than EncoderTimeout. * - \b Encoder12Restarted (Display string: 'Encoder 12 Restarted'): The event will be generated when the Encoder 12 restarts moving. + * - \b Encoder12Stopped (Display string: 'Encoder 12 Stopped'): The event will be generated when the Encoder 12 stops for longer than EncoderTimeout. * - \b Encoder13Restarted (Display string: 'Encoder 13 Restarted'): The event will be generated when the Encoder 13 restarts moving. + * - \b Encoder13Stopped (Display string: 'Encoder 13 Stopped'): The event will be generated when the Encoder 13 stops for longer than EncoderTimeout. * - \b Encoder14Restarted (Display string: 'Encoder 14 Restarted'): The event will be generated when the Encoder 14 restarts moving. + * - \b Encoder14Stopped (Display string: 'Encoder 14 Stopped'): The event will be generated when the Encoder 14 stops for longer than EncoderTimeout. * - \b Encoder15Restarted (Display string: 'Encoder 15 Restarted'): The event will be generated when the Encoder 15 restarts moving. - * - \b Line2RisingEdge (Display string: 'Line 2 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 2. - * - \b Line3RisingEdge (Display string: 'Line 3 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 3. - * - \b Line4RisingEdge (Display string: 'Line 4 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 4. - * - \b Line5RisingEdge (Display string: 'Line 5 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 5. - * - \b Line6RisingEdge (Display string: 'Line 6 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 6. - * - \b Line7RisingEdge (Display string: 'Line 7 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 7. - * - \b Line8RisingEdge (Display string: 'Line 8 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 8. - * - \b Line9RisingEdge (Display string: 'Line 9 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 9. - * - \b Line10RisingEdge (Display string: 'Line 10 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 10. - * - \b Line11RisingEdge (Display string: 'Line 11 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 11. - * - \b Line12RisingEdge (Display string: 'Line 12 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 12. - * - \b Line13RisingEdge (Display string: 'Line 13 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 13. - * - \b Line14RisingEdge (Display string: 'Line 14 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 14. - * - \b Line15RisingEdge (Display string: 'Line 15 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 15. - * - \b Line2FallingEdge (Display string: 'Line 2 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 2. - * - \b Line3FallingEdge (Display string: 'Line 3 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 3. - * - \b Line4FallingEdge (Display string: 'Line 4 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 4. - * - \b Line5FallingEdge (Display string: 'Line 5 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 5. - * - \b Line6FallingEdge (Display string: 'Line 6 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 6. - * - \b Line7FallingEdge (Display string: 'Line 7 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 7. - * - \b Line8FallingEdge (Display string: 'Line 8 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 8. - * - \b Line9FallingEdge (Display string: 'Line 9 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 9. - * - \b Line10FallingEdge (Display string: 'Line 10 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 10. - * - \b Line11FallingEdge (Display string: 'Line 11 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 11. - * - \b Line12FallingEdge (Display string: 'Line 12 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 12. - * - \b Line13FallingEdge (Display string: 'Line 13 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 13. - * - \b Line14FallingEdge (Display string: 'Line 14 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 14. - * - \b Line15FallingEdge (Display string: 'Line 15 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 15. + * - \b Encoder15Stopped (Display string: 'Encoder 15 Stopped'): The event will be generated when the Encoder 15 stops for longer than EncoderTimeout. + * - \b Error (Display string: 'Error'): Device just detected an error during the active Acquisition. + * - \b ExposureEnd (Display string: 'Exposure End'): Device just completed the exposure of one Frame (or Line). + * - \b ExposureStart (Display string: 'Exposure Start'): Device just started the exposure of one Frame (or Line). + * - \b FrameBurstEnd (Display string: 'Frame Burst End'): Device just completed the capture of a burst of Frames. + * - \b FrameBurstStart (Display string: 'Frame Burst Start'): Device just started the capture of a burst of Frames. + * - \b FrameEnd (Display string: 'Frame End'): Device just completed the capture of one Frame. + * - \b FrameStart (Display string: 'Frame Start'): Device just started the capture of one Frame. + * - \b FrameTransferEnd (Display string: 'Frame Transfer End'): Device just completed the transfer of one Frame. + * - \b FrameTransferStart (Display string: 'Frame Transfer Start'): Device just started the transfer of one Frame. + * - \b FrameTrigger (Display string: 'Frame Trigger'): Device just received a trigger to start the capture of one Frame. + * - \b FrameTriggerMissed (Display string: 'Frame Trigger Missed'): Device just missed a trigger to start the capture of one Frame. + * - \b InterfaceListChanged (Display string: 'Interface List Changed'): This enumeration value indicates an event that is fired when the list of interfaces has been updated. + * - \b InterfaceLost (Display string: 'Interface Lost'): This enumeration value indicates an event that is raised when the interface connection is lost. + * - \b Line0AnyEdge (Display string: 'Line 0 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 0. + * - \b Line0FallingEdge (Display string: 'Line 0 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 0. + * - \b Line0RisingEdge (Display string: 'Line 0 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 0. + * - \b Line1AnyEdge (Display string: 'Line 1 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 1. + * - \b Line1FallingEdge (Display string: 'Line 1 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 1. + * - \b Line1RisingEdge (Display string: 'Line 1 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 1. * - \b Line2AnyEdge (Display string: 'Line 2 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 2. + * - \b Line2FallingEdge (Display string: 'Line 2 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 2. + * - \b Line2RisingEdge (Display string: 'Line 2 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 2. * - \b Line3AnyEdge (Display string: 'Line 3 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 3. + * - \b Line3FallingEdge (Display string: 'Line 3 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 3. + * - \b Line3RisingEdge (Display string: 'Line 3 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 3. * - \b Line4AnyEdge (Display string: 'Line 4 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 4. + * - \b Line4FallingEdge (Display string: 'Line 4 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 4. + * - \b Line4RisingEdge (Display string: 'Line 4 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 4. * - \b Line5AnyEdge (Display string: 'Line 5 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 5. + * - \b Line5FallingEdge (Display string: 'Line 5 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 5. + * - \b Line5RisingEdge (Display string: 'Line 5 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 5. * - \b Line6AnyEdge (Display string: 'Line 6 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 6. + * - \b Line6FallingEdge (Display string: 'Line 6 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 6. + * - \b Line6RisingEdge (Display string: 'Line 6 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 6. * - \b Line7AnyEdge (Display string: 'Line 7 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 7. + * - \b Line7FallingEdge (Display string: 'Line 7 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 7. + * - \b Line7RisingEdge (Display string: 'Line 7 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 7. * - \b Line8AnyEdge (Display string: 'Line 8 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 8. + * - \b Line8FallingEdge (Display string: 'Line 8 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 8. + * - \b Line8RisingEdge (Display string: 'Line 8 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 8. * - \b Line9AnyEdge (Display string: 'Line 9 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 9. + * - \b Line9FallingEdge (Display string: 'Line 9 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 9. + * - \b Line9RisingEdge (Display string: 'Line 9 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 9. * - \b Line10AnyEdge (Display string: 'Line 10 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 10. + * - \b Line10FallingEdge (Display string: 'Line 10 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 10. + * - \b Line10RisingEdge (Display string: 'Line 10 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 10. * - \b Line11AnyEdge (Display string: 'Line 11 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 11. + * - \b Line11FallingEdge (Display string: 'Line 11 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 11. + * - \b Line11RisingEdge (Display string: 'Line 11 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 11. * - \b Line12AnyEdge (Display string: 'Line 12 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 12. + * - \b Line12FallingEdge (Display string: 'Line 12 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 12. + * - \b Line12RisingEdge (Display string: 'Line 12 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 12. * - \b Line13AnyEdge (Display string: 'Line 13 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 13. + * - \b Line13FallingEdge (Display string: 'Line 13 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 13. + * - \b Line13RisingEdge (Display string: 'Line 13 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 13. * - \b Line14AnyEdge (Display string: 'Line 14 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 14. + * - \b Line14FallingEdge (Display string: 'Line 14 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 14. + * - \b Line14RisingEdge (Display string: 'Line 14 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 14. * - \b Line15AnyEdge (Display string: 'Line 15 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 15. + * - \b Line15FallingEdge (Display string: 'Line 15 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 15. + * - \b Line15RisingEdge (Display string: 'Line 15 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 15. + * - \b LineEnd (Display string: 'Line End'): Device just completed the capture of one Line. + * - \b LineStart (Display string: 'Line Start'): Device just started the capture of one Line. + * - \b LineTrigger (Display string: 'Line Trigger'): Device just received a trigger to start the capture of one Line. + * - \b LineTriggerMissed (Display string: 'Line Trigger Missed'): Device just missed a trigger to start the capture of one Line. * - \b Link0Trigger (Display string: 'Link 0 Trigger') * - \b Link1Trigger (Display string: 'Link 1 Trigger') * - \b Link2Trigger (Display string: 'Link 2 Trigger') @@ -17149,14 +17621,54 @@ public: * - \b Link13Trigger (Display string: 'Link 13 Trigger') * - \b Link14Trigger (Display string: 'Link 14 Trigger') * - \b Link15Trigger (Display string: 'Link 15 Trigger') - * - \b InterfaceListChanged (Display string: 'Interface List Changed'): This enumeration value indicates an event that is fired when the list of interfaces has been updated. - * - \b InterfaceLost (Display string: 'Interface Lost'): This enumeration value indicates an event that is raised when the interface connection is lost. - * - \b DeviceListChanged (Display string: 'Device List Changed'): This enumeration value indicates an event that is fired when the list of devices has been updated. - * - \b DeviceLost (Display string: 'Device Lost'): This enumeration value indicates an event that is raised when the local host looses connection to the physical(remote) device. - * - \b BufferTooSmall (Display string: 'Buffer Too Small'): This enumeration value indicates an event that is raised when the buffer was too small to receive the expected amount of data. - * - \b BuffersDiscarded (Display string: 'Buffers Discarded'): This enumeration value indicates an event that is raised when buffers discared by GenTL or device. This event could optionally carry two numeric child data fields EventBuffersDiscardedDeviceCount and EventBuffersDiscardedProducerCount. - * - \b BuffersDiscardedDeviceCount (Display string: 'Buffers Discarded Device Count'): This enumeration value indicates the number of buffers discarded by the device since last fired instance of this event (the producer would get to know about this for example by observing a gap in the block_id sequence). - * - \b BuffersDiscardedProducerCount (Display string: 'Buffers Discarded Producer Count'): This enumeration value indicates the number of buffers discarded by the producer since last fired instance of this event (this would happen e.g. if there are no free buffers available or if given buffer handling mode requires discarding old buffers etc.). + * - \b LinkSpeedChange (Display string: 'Link Speed Change'): The event will be generated when the link speed has changed. + * - \b LinkTrigger0 (Display string: 'Link Trigger 0'): The event will be generated when a Rising Edge is detected on the LinkTrigger 0. + * - \b LinkTrigger1 (Display string: 'Link Trigger 1'): The event will be generated when a Rising Edge is detected on the LinkTrigger 1. + * - \b PrimaryApplicationSwitch (Display string: 'Primary Application Switch'): The event will be generated when a primary application switchover has been granted (GigE Vision Specific). + * - \b SequencerSetChange (Display string: 'Sequencer Set Change'): Device sequencer set has changed. + * - \b Stream0TransferBlockEnd (Display string: 'Stream 0 Transfer Block End'): Device just completed the transfer of one Block. + * - \b Stream0TransferBlockStart (Display string: 'Stream 0 Transfer Block Start'): Device just started the transfer of one Block. + * - \b Stream0TransferBlockTrigger (Display string: 'Stream 0 Transfer Block Trigger'): Device just received a trigger to start the transfer of one Block. + * - \b Stream0TransferBurstEnd (Display string: 'Stream 0 Transfer Burst End'): Device just completed the transfer of a burst of Blocks. + * - \b Stream0TransferBurstStart (Display string: 'Stream 0 Transfer Burst Start'): Device just started the transfer of a burst of Blocks. + * - \b Stream0TransferEnd (Display string: 'Stream 0 Transfer End'): Device just completed the transfer of one or many Blocks. + * - \b Stream0TransferOverflow (Display string: 'Stream 0 Transfer Overflow'): Device transfer queue overflowed. + * - \b Stream0TransferPause (Display string: 'Stream 0 Transfer Pause'): Device just paused the transfer. + * - \b Stream0TransferResume (Display string: 'Stream 0 Transfer Resume'): Device just resumed the transfer. + * - \b Stream0TransferStart (Display string: 'Stream 0 Transfer Start'): Device just started the transfer of one or many Blocks. + * - \b Test (Display string: 'Test'): The test event will be generated when the device receives the TestEventGenerate command (EventNotification for the Test event is always On). + * - \b Timer0End (Display string: 'Timer 0 End'): The event will be generated when Timer 0 ends counting. + * - \b Timer0Start (Display string: 'Timer 0 Start'): The event will be generated when Timer 0 starts counting. + * - \b Timer1End (Display string: 'Timer 1 End'): The event will be generated when Timer 1 ends counting. + * - \b Timer1Start (Display string: 'Timer 1 Start'): The event will be generated when Timer 1 starts counting. + * - \b Timer2End (Display string: 'Timer 2 End'): The event will be generated when Timer 2 ends counting. + * - \b Timer2Start (Display string: 'Timer 2 Start'): The event will be generated when Timer 2 starts counting. + * - \b Timer3End (Display string: 'Timer 3 End'): The event will be generated when Timer 3 ends counting. + * - \b Timer3Start (Display string: 'Timer 3 Start'): The event will be generated when Timer 3 starts counting. + * - \b Timer4End (Display string: 'Timer 4 End'): The event will be generated when Timer 4 ends counting. + * - \b Timer4Start (Display string: 'Timer 4 Start'): The event will be generated when Timer 4 starts counting. + * - \b Timer5End (Display string: 'Timer 5 End'): The event will be generated when Timer 5 ends counting. + * - \b Timer5Start (Display string: 'Timer 5 Start'): The event will be generated when Timer 5 starts counting. + * - \b Timer6End (Display string: 'Timer 6 End'): The event will be generated when Timer 6 ends counting. + * - \b Timer6Start (Display string: 'Timer 6 Start'): The event will be generated when Timer 6 starts counting. + * - \b Timer7End (Display string: 'Timer 7 End'): The event will be generated when Timer 7 ends counting. + * - \b Timer7Start (Display string: 'Timer 7 Start'): The event will be generated when Timer 7 starts counting. + * - \b Timer8End (Display string: 'Timer 8 End'): The event will be generated when Timer 8 ends counting. + * - \b Timer8Start (Display string: 'Timer 8 Start'): The event will be generated when Timer 8 starts counting. + * - \b Timer9End (Display string: 'Timer 9 End'): The event will be generated when Timer 9 ends counting. + * - \b Timer9Start (Display string: 'Timer 9 Start'): The event will be generated when Timer 9 starts counting. + * - \b Timer10End (Display string: 'Timer 10 End'): The event will be generated when Timer 10 ends counting. + * - \b Timer10Start (Display string: 'Timer 10 Start'): The event will be generated when Timer 10 starts counting. + * - \b Timer11End (Display string: 'Timer 11 End'): The event will be generated when Timer 11 ends counting. + * - \b Timer11Start (Display string: 'Timer 11 Start'): The event will be generated when Timer 11 starts counting. + * - \b Timer12End (Display string: 'Timer 12 End'): The event will be generated when Timer 12 ends counting. + * - \b Timer12Start (Display string: 'Timer 12 Start'): The event will be generated when Timer 12 starts counting. + * - \b Timer13End (Display string: 'Timer 13 End'): The event will be generated when Timer 13 ends counting. + * - \b Timer13Start (Display string: 'Timer 13 Start'): The event will be generated when Timer 13 starts counting. + * - \b Timer14End (Display string: 'Timer 14 End'): The event will be generated when Timer 14 ends counting. + * - \b Timer14Start (Display string: 'Timer 14 Start'): The event will be generated when Timer 14 starts counting. + * - \b Timer15End (Display string: 'Timer 15 End'): The event will be generated when Timer 15 ends counting. + * - \b Timer15Start (Display string: 'Timer 15 Start'): The event will be generated when Timer 15 starts counting. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -17190,6 +17702,7 @@ inline InterfaceModule::InterfaceModule( mvIMPACT::acquire::Device* pDev, int64_ interfaceType(), interfaceTLVersionMajor(), interfaceTLVersionMinor(), + mvInterfaceLicenseFile(), gevInterfaceGatewaySelector(), gevInterfaceGateway(), gevInterfaceMACAddress(), @@ -17212,6 +17725,7 @@ inline InterfaceModule::InterfaceModule( mvIMPACT::acquire::Device* pDev, int64_ deviceLinkSpeed(), deviceAccessStatus(), deviceSerialNumber(), + mvU3VDeviceGUID(), deviceUserID(), deviceTLVersionMajor(), deviceTLVersionMinor(), @@ -17238,6 +17752,8 @@ inline InterfaceModule::InterfaceModule( mvIMPACT::acquire::Device* pDev, int64_ gevDeviceForceSubnetMask(), gevDeviceForceGateway(), mvDeviceUpdateFirmware(), + mvDeviceLicenseValid(), + mvDeviceLicenseDetails(), actionCommand(), actionDeviceKey(), actionGroupKey(), @@ -17245,6 +17761,11 @@ inline InterfaceModule::InterfaceModule( mvIMPACT::acquire::Device* pDev, int64_ actionScheduledTimeEnable(), actionScheduledTime(), gevActionDestinationIPAddress(), + mvActionAcknowledgeEnable(), + mvActionAcknowledgesExpected(), + mvActionAcknowledgeTimeout(), + mvActionAcknowledgesReceived(), + mvActionAcknowledgesFailed(), eventSelector(), eventNotification() //----------------------------------------------------------------------------- @@ -17268,6 +17789,7 @@ inline InterfaceModule::InterfaceModule( int64_type index ) : interfaceType(), interfaceTLVersionMajor(), interfaceTLVersionMinor(), + mvInterfaceLicenseFile(), gevInterfaceGatewaySelector(), gevInterfaceGateway(), gevInterfaceMACAddress(), @@ -17290,6 +17812,7 @@ inline InterfaceModule::InterfaceModule( int64_type index ) : deviceLinkSpeed(), deviceAccessStatus(), deviceSerialNumber(), + mvU3VDeviceGUID(), deviceUserID(), deviceTLVersionMajor(), deviceTLVersionMinor(), @@ -17316,6 +17839,8 @@ inline InterfaceModule::InterfaceModule( int64_type index ) : gevDeviceForceSubnetMask(), gevDeviceForceGateway(), mvDeviceUpdateFirmware(), + mvDeviceLicenseValid(), + mvDeviceLicenseDetails(), actionCommand(), actionDeviceKey(), actionGroupKey(), @@ -17323,6 +17848,11 @@ inline InterfaceModule::InterfaceModule( int64_type index ) : actionScheduledTimeEnable(), actionScheduledTime(), gevActionDestinationIPAddress(), + mvActionAcknowledgeEnable(), + mvActionAcknowledgesExpected(), + mvActionAcknowledgeTimeout(), + mvActionAcknowledgesReceived(), + mvActionAcknowledgesFailed(), eventSelector(), eventNotification() //----------------------------------------------------------------------------- @@ -17371,6 +17901,7 @@ public: deviceModelName(), deviceFamilyName(), deviceVersion(), + mvU3VDeviceGUID(), deviceManufacturerInfo(), deviceType(), deviceDisplayName(), @@ -17388,6 +17919,8 @@ public: genCPVersionMinor(), u3vVersionMajor(), u3vVersionMinor(), + mvDeviceLicenseValid(), + mvDeviceLicenseDetails(), deviceEndianessMechanism(), linkCommandTimeout(), mvLinkCommandTimeoutCheckGranularity(), @@ -17408,6 +17941,7 @@ public: locator.bindComponent( deviceModelName, "DeviceModelName" ); locator.bindComponent( deviceFamilyName, "DeviceFamilyName" ); locator.bindComponent( deviceVersion, "DeviceVersion" ); + locator.bindComponent( mvU3VDeviceGUID, "mvU3VDeviceGUID" ); locator.bindComponent( deviceManufacturerInfo, "DeviceManufacturerInfo" ); locator.bindComponent( deviceType, "DeviceType" ); locator.bindComponent( deviceDisplayName, "DeviceDisplayName" ); @@ -17425,6 +17959,8 @@ public: locator.bindComponent( genCPVersionMinor, "GenCPVersionMinor" ); locator.bindComponent( u3vVersionMajor, "U3vVersionMajor" ); locator.bindComponent( u3vVersionMinor, "U3vVersionMinor" ); + locator.bindComponent( mvDeviceLicenseValid, "mvDeviceLicenseValid" ); + locator.bindComponent( mvDeviceLicenseDetails, "mvDeviceLicenseDetails" ); locator.bindComponent( deviceEndianessMechanism, "DeviceEndianessMechanism" ); locator.bindComponent( linkCommandTimeout, "LinkCommandTimeout" ); locator.bindComponent( mvLinkCommandTimeoutCheckGranularity, "mvLinkCommandTimeoutCheckGranularity" ); @@ -17473,6 +18009,11 @@ public: * Version of the device. */ PropertyS deviceVersion; + /// \brief A string property. Indicates the USB3 Vision GUID of the device. + /** + * This is a read only element. It indicates the USB3 Vision GUID of the device. + */ + PropertyS mvU3VDeviceGUID; /// \brief A string property. Manufacturer information about the device. /** * Manufacturer information about the device. @@ -17603,6 +18144,16 @@ public: * This is a read only element. It indicates the minor version number of the USB3 Vision specification this device complies with. */ PropertyI64 u3vVersionMinor; + /// \brief A boolean property. True if the current device has a valid license. + /** + * True if the current device has a valid license. This is the case for all devices manufactured by the same vendor as this SDK and devices for which a license file has been provided. + */ + PropertyIBoolean mvDeviceLicenseValid; + /// \brief A string property. Details about the granted license. + /** + * This is a read only element. It indicates details whether or not this device can be operated without limitations using this driver stack. + */ + PropertyS mvDeviceLicenseDetails; /// \brief An enumerated integer property. Identifies the endianess mode to be used for this device. /** * This is a read only feature. This enumeration provides a value that indicates the endianess mode to be used for this device. @@ -17645,199 +18196,152 @@ public: * Selects which Event to signal to the host application. * * The following string values might be valid for this feature: - * - \b AcquisitionTrigger (Display string: 'Acquisition Trigger'): Device just received a trigger for the Acquisition of one or many Frames. - * - \b AcquisitionTriggerMissed (Display string: 'Acquisition Trigger Missed'): Device just missed a trigger for the Acquisition of one or many Frames. - * - \b AcquisitionStart (Display string: 'Acquisition Start'): Device just started the Acquisition of one or many Frames. * - \b AcquisitionEnd (Display string: 'Acquisition End'): Device just completed the Acquisition of one or many Frames. - * - \b AcquisitionTransferStart (Display string: 'Acquisition Transfer Start'): Device just started the transfer of one or many Frames. - * - \b AcquisitionTransferEnd (Display string: 'Acquisition Transfer End'): Device just completed the transfer of one or many Frames. * - \b AcquisitionError (Display string: 'Acquisition Error'): Device just detected an error during the active Acquisition. - * - \b FrameBurstStart (Display string: 'Frame Burst Start'): Device just started the capture of a burst of Frames. - * - \b FrameBurstEnd (Display string: 'Frame Burst End'): Device just completed the capture of a burst of Frames. - * - \b FrameTrigger (Display string: 'Frame Trigger'): Device just received a trigger to start the capture of one Frame. - * - \b FrameTriggerMissed (Display string: 'Frame Trigger Missed'): Device just missed a trigger to start the capture of one Frame. - * - \b FrameStart (Display string: 'Frame Start'): Device just started the capture of one Frame. - * - \b FrameEnd (Display string: 'Frame End'): Device just completed the capture of one Frame. - * - \b FrameTransferStart (Display string: 'Frame Transfer Start'): Device just started the transfer of one Frame. - * - \b FrameTransferEnd (Display string: 'Frame Transfer End'): Device just completed the transfer of one Frame. - * - \b LineTrigger (Display string: 'Line Trigger'): Device just received a trigger to start the capture of one Line. - * - \b LineTriggerMissed (Display string: 'Line Trigger Missed'): Device just missed a trigger to start the capture of one Line. - * - \b LineStart (Display string: 'Line Start'): Device just started the capture of one Line. - * - \b LineEnd (Display string: 'Line End'): Device just completed the capture of one Line. - * - \b ExposureStart (Display string: 'Exposure Start'): Device just started the exposure of one Frame (or Line). - * - \b ExposureEnd (Display string: 'Exposure End'): Device just completed the exposure of one Frame (or Line). - * - \b Stream0TransferStart (Display string: 'Stream 0 Transfer Start'): Device just started the transfer of one or many Blocks. - * - \b Stream0TransferEnd (Display string: 'Stream 0 Transfer End'): Device just completed the transfer of one or many Blocks. - * - \b Stream0TransferPause (Display string: 'Stream 0 Transfer Pause'): Device just paused the transfer. - * - \b Stream0TransferResume (Display string: 'Stream 0 Transfer Resume'): Device just resumed the transfer. - * - \b Stream0TransferBlockStart (Display string: 'Stream 0 Transfer Block Start'): Device just started the transfer of one Block. - * - \b Stream0TransferBlockEnd (Display string: 'Stream 0 Transfer Block End'): Device just completed the transfer of one Block. - * - \b Stream0TransferBlockTrigger (Display string: 'Stream 0 Transfer Block Trigger'): Device just received a trigger to start the transfer of one Block. - * - \b Stream0TransferBurstStart (Display string: 'Stream 0 Transfer Burst Start'): Device just started the transfer of a burst of Blocks. - * - \b Stream0TransferBurstEnd (Display string: 'Stream 0 Transfer Burst End'): Device just completed the transfer of a burst of Blocks. - * - \b Stream0TransferOverflow (Display string: 'Stream 0 Transfer Overflow'): Device transfer queue overflowed. - * - \b SequencerSetChange (Display string: 'Sequencer Set Change'): Device sequencer set has changed. - * - \b Counter0Start (Display string: 'Counter 0 Start'): The event will be generated when counter 0 starts counting. - * - \b Counter1Start (Display string: 'Counter 1 Start'): The event will be generated when counter 1 starts counting. - * - \b Counter\#2\#Start (Display string: 'Counter \#2\# Start'): The event will be generated when counter \#2\# starts counting. + * - \b AcquisitionStart (Display string: 'Acquisition Start'): Device just started the Acquisition of one or many Frames. + * - \b AcquisitionTransferEnd (Display string: 'Acquisition Transfer End'): Device just completed the transfer of one or many Frames. + * - \b AcquisitionTransferStart (Display string: 'Acquisition Transfer Start'): Device just started the transfer of one or many Frames. + * - \b AcquisitionTrigger (Display string: 'Acquisition Trigger'): Device just received a trigger for the Acquisition of one or many Frames. + * - \b AcquisitionTriggerMissed (Display string: 'Acquisition Trigger Missed'): Device just missed a trigger for the Acquisition of one or many Frames. + * - \b ActionLate (Display string: 'Action Late'): The event will be generated when a valid scheduled action command is received and is scheduled to be executed at a time that is already past. + * - \b BufferTooSmall (Display string: 'Buffer Too Small'): This enumeration value indicates an event that is raised when the buffer was too small to receive the expected amount of data. + * - \b BuffersDiscarded (Display string: 'Buffers Discarded'): This enumeration value indicates an event that is raised when buffers discared by GenTL or device. This event could optionally carry two numeric child data fields EventBuffersDiscardedDeviceCount and EventBuffersDiscardedProducerCount. + * - \b BuffersDiscardedDeviceCount (Display string: 'Buffers Discarded Device Count'): This enumeration value indicates the number of buffers discarded by the device since last fired instance of this event (the producer would get to know about this for example by observing a gap in the block_id sequence). + * - \b BuffersDiscardedProducerCount (Display string: 'Buffers Discarded Producer Count'): This enumeration value indicates the number of buffers discarded by the producer since last fired instance of this event (this would happen e.g. if there are no free buffers available or if given buffer handling mode requires discarding old buffers etc.). * - \b Counter0End (Display string: 'Counter 0 End'): The event will be generated when counter 0 ends counting. + * - \b Counter0Start (Display string: 'Counter 0 Start'): The event will be generated when counter 0 starts counting. * - \b Counter1End (Display string: 'Counter 1 End'): The event will be generated when counter 1 ends counting. - * - \b Counter\#2\#End (Display string: 'Counter \#2\# End'): The event will be generated when counter \#2\# ends counting. - * - \b Timer0Start (Display string: 'Timer 0 Start'): The event will be generated when Timer 0 starts counting. - * - \b Timer1Start (Display string: 'Timer 1 Start'): The event will be generated when Timer 1 starts counting. - * - \b Timer\#2\#Start (Display string: 'Timer \#2\# Start'): The event will be generated when Timer \#2\# starts counting. - * - \b Timer0End (Display string: 'Timer 0 End'): The event will be generated when Timer 0 ends counting. - * - \b Timer1End (Display string: 'Timer 1 End'): The event will be generated when Timer 1 ends counting. - * - \b Timer\#2\#End (Display string: 'Timer \#2\# End'): The event will be generated when Timer \#2\# ends counting. - * - \b Encoder0Stopped (Display string: 'Encoder 0 Stopped'): The event will be generated when the Encoder 0 stops for longer than EncoderTimeout. - * - \b Encoder1Stopped (Display string: 'Encoder 1 Stopped'): The event will be generated when the Encoder 1 stops for longer than EncoderTimeout. - * - \b Encoder\#2\#Stopped (Display string: 'Encoder \#2\# Stopped'): The event will be generated when the Encoder \#2\# stops for longer than EncoderTimeout. - * - \b Encoder0Restarted (Display string: 'Encoder 0 Restarted'): The event will be generated when the Encoder 0 restarts moving. - * - \b Encoder1Restarted (Display string: 'Encoder 1 Restarted'): The event will be generated when the Encoder 1 restarts moving. - * - \b Encoder\#2\#Restarted (Display string: 'Encoder \#2\# Restarted'): The event will be generated when the Encoder \#2\# restarts moving. - * - \b Line0RisingEdge (Display string: 'Line 0 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 0. - * - \b Line1RisingEdge (Display string: 'Line 1 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 1. - * - \b Line\#2\#RisingEdge (Display string: 'Line \#2\# Rising Edge'): The event will be generated when a Rising Edge is detected on the Line \#2\#. - * - \b Line0FallingEdge (Display string: 'Line 0 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 0. - * - \b Line1FallingEdge (Display string: 'Line 1 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 1. - * - \b Line\#2\#FallingEdge (Display string: 'Line \#2\# Falling Edge'): The event will be generated when a Falling Edge is detected on the Line \#2\#. - * - \b Line0AnyEdge (Display string: 'Line 0 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 0. - * - \b Line1AnyEdge (Display string: 'Line 1 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 1. - * - \b Line\#2\#AnyEdge (Display string: 'Line \#2\# Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line \#2\#. - * - \b LinkTrigger0 (Display string: 'Link Trigger 0'): The event will be generated when a Rising Edge is detected on the LinkTrigger 0. - * - \b LinkTrigger1 (Display string: 'Link Trigger 1'): The event will be generated when a Rising Edge is detected on the LinkTrigger 1. - * - \b LinkTrigger\#2\# (Display string: 'Link Trigger \#2\#'): The event will be generated when a Rising Edge is detected on the LinkTrigger \#2\#. - * - \b LinkSpeedChange (Display string: 'Link Speed Change'): The event will be generated when the link speed has changed. - * - \b ActionLate (Display string: 'Action Late'): The event will be generated when a valid scheduled action command is received and is scheduled to be executed at a time that is already past. - * - \b Error (Display string: 'Error'): Device just detected an error during the active Acquisition. - * - \b Test (Display string: 'Test'): The test event will be generated when the device receives the TestEventGenerate command (EventNotification for the Test event is always On). - * - \b PrimaryApplicationSwitch (Display string: 'Primary Application Switch'): The event will be generated when a primary application switchover has been granted (GigE Vision Specific). - * - \b Counter2Start (Display string: 'Counter 2 Start'): The event will be generated when counter 2 starts counting. - * - \b Counter3Start (Display string: 'Counter 3 Start'): The event will be generated when counter 3 starts counting. - * - \b Counter4Start (Display string: 'Counter 4 Start'): The event will be generated when counter 4 starts counting. - * - \b Counter5Start (Display string: 'Counter 5 Start'): The event will be generated when counter 5 starts counting. - * - \b Counter6Start (Display string: 'Counter 6 Start'): The event will be generated when counter 6 starts counting. - * - \b Counter7Start (Display string: 'Counter 7 Start'): The event will be generated when counter 7 starts counting. - * - \b Counter8Start (Display string: 'Counter 8 Start'): The event will be generated when counter 8 starts counting. - * - \b Counter9Start (Display string: 'Counter 9 Start'): The event will be generated when counter 9 starts counting. - * - \b Counter10Start (Display string: 'Counter 10 Start'): The event will be generated when counter 10 starts counting. - * - \b Counter11Start (Display string: 'Counter 11 Start'): The event will be generated when counter 11 starts counting. - * - \b Counter12Start (Display string: 'Counter 12 Start'): The event will be generated when counter 12 starts counting. - * - \b Counter13Start (Display string: 'Counter 13 Start'): The event will be generated when counter 13 starts counting. - * - \b Counter14Start (Display string: 'Counter 14 Start'): The event will be generated when counter 14 starts counting. - * - \b Counter15Start (Display string: 'Counter 15 Start'): The event will be generated when counter 15 starts counting. + * - \b Counter1Start (Display string: 'Counter 1 Start'): The event will be generated when counter 1 starts counting. * - \b Counter2End (Display string: 'Counter 2 End'): The event will be generated when counter 2 ends counting. + * - \b Counter2Start (Display string: 'Counter 2 Start'): The event will be generated when counter 2 starts counting. * - \b Counter3End (Display string: 'Counter 3 End'): The event will be generated when counter 3 ends counting. + * - \b Counter3Start (Display string: 'Counter 3 Start'): The event will be generated when counter 3 starts counting. * - \b Counter4End (Display string: 'Counter 4 End'): The event will be generated when counter 4 ends counting. + * - \b Counter4Start (Display string: 'Counter 4 Start'): The event will be generated when counter 4 starts counting. * - \b Counter5End (Display string: 'Counter 5 End'): The event will be generated when counter 5 ends counting. + * - \b Counter5Start (Display string: 'Counter 5 Start'): The event will be generated when counter 5 starts counting. * - \b Counter6End (Display string: 'Counter 6 End'): The event will be generated when counter 6 ends counting. + * - \b Counter6Start (Display string: 'Counter 6 Start'): The event will be generated when counter 6 starts counting. * - \b Counter7End (Display string: 'Counter 7 End'): The event will be generated when counter 7 ends counting. + * - \b Counter7Start (Display string: 'Counter 7 Start'): The event will be generated when counter 7 starts counting. * - \b Counter8End (Display string: 'Counter 8 End'): The event will be generated when counter 8 ends counting. + * - \b Counter8Start (Display string: 'Counter 8 Start'): The event will be generated when counter 8 starts counting. * - \b Counter9End (Display string: 'Counter 9 End'): The event will be generated when counter 9 ends counting. + * - \b Counter9Start (Display string: 'Counter 9 Start'): The event will be generated when counter 9 starts counting. * - \b Counter10End (Display string: 'Counter 10 End'): The event will be generated when counter 10 ends counting. + * - \b Counter10Start (Display string: 'Counter 10 Start'): The event will be generated when counter 10 starts counting. * - \b Counter11End (Display string: 'Counter 11 End'): The event will be generated when counter 11 ends counting. + * - \b Counter11Start (Display string: 'Counter 11 Start'): The event will be generated when counter 11 starts counting. * - \b Counter12End (Display string: 'Counter 12 End'): The event will be generated when counter 12 ends counting. + * - \b Counter12Start (Display string: 'Counter 12 Start'): The event will be generated when counter 12 starts counting. * - \b Counter13End (Display string: 'Counter 13 End'): The event will be generated when counter 13 ends counting. + * - \b Counter13Start (Display string: 'Counter 13 Start'): The event will be generated when counter 13 starts counting. * - \b Counter14End (Display string: 'Counter 14 End'): The event will be generated when counter 14 ends counting. + * - \b Counter14Start (Display string: 'Counter 14 Start'): The event will be generated when counter 14 starts counting. * - \b Counter15End (Display string: 'Counter 15 End'): The event will be generated when counter 15 ends counting. - * - \b Timer2Start (Display string: 'Timer 2 Start'): The event will be generated when Timer 2 starts counting. - * - \b Timer3Start (Display string: 'Timer 3 Start'): The event will be generated when Timer 3 starts counting. - * - \b Timer4Start (Display string: 'Timer 4 Start'): The event will be generated when Timer 4 starts counting. - * - \b Timer5Start (Display string: 'Timer 5 Start'): The event will be generated when Timer 5 starts counting. - * - \b Timer6Start (Display string: 'Timer 6 Start'): The event will be generated when Timer 6 starts counting. - * - \b Timer7Start (Display string: 'Timer 7 Start'): The event will be generated when Timer 7 starts counting. - * - \b Timer8Start (Display string: 'Timer 8 Start'): The event will be generated when Timer 8 starts counting. - * - \b Timer9Start (Display string: 'Timer 9 Start'): The event will be generated when Timer 9 starts counting. - * - \b Timer10Start (Display string: 'Timer 10 Start'): The event will be generated when Timer 10 starts counting. - * - \b Timer11Start (Display string: 'Timer 11 Start'): The event will be generated when Timer 11 starts counting. - * - \b Timer12Start (Display string: 'Timer 12 Start'): The event will be generated when Timer 12 starts counting. - * - \b Timer13Start (Display string: 'Timer 13 Start'): The event will be generated when Timer 13 starts counting. - * - \b Timer14Start (Display string: 'Timer 14 Start'): The event will be generated when Timer 14 starts counting. - * - \b Timer15Start (Display string: 'Timer 15 Start'): The event will be generated when Timer 15 starts counting. - * - \b Timer2End (Display string: 'Timer 2 End'): The event will be generated when Timer 2 ends counting. - * - \b Timer3End (Display string: 'Timer 3 End'): The event will be generated when Timer 3 ends counting. - * - \b Timer4End (Display string: 'Timer 4 End'): The event will be generated when Timer 4 ends counting. - * - \b Timer5End (Display string: 'Timer 5 End'): The event will be generated when Timer 5 ends counting. - * - \b Timer6End (Display string: 'Timer 6 End'): The event will be generated when Timer 6 ends counting. - * - \b Timer7End (Display string: 'Timer 7 End'): The event will be generated when Timer 7 ends counting. - * - \b Timer8End (Display string: 'Timer 8 End'): The event will be generated when Timer 8 ends counting. - * - \b Timer9End (Display string: 'Timer 9 End'): The event will be generated when Timer 9 ends counting. - * - \b Timer10End (Display string: 'Timer 10 End'): The event will be generated when Timer 10 ends counting. - * - \b Timer11End (Display string: 'Timer 11 End'): The event will be generated when Timer 11 ends counting. - * - \b Timer12End (Display string: 'Timer 12 End'): The event will be generated when Timer 12 ends counting. - * - \b Timer13End (Display string: 'Timer 13 End'): The event will be generated when Timer 13 ends counting. - * - \b Timer14End (Display string: 'Timer 14 End'): The event will be generated when Timer 14 ends counting. - * - \b Timer15End (Display string: 'Timer 15 End'): The event will be generated when Timer 15 ends counting. - * - \b Encoder2Stopped (Display string: 'Encoder 2 Stopped'): The event will be generated when the Encoder 2 stops for longer than EncoderTimeout. - * - \b Encoder3Stopped (Display string: 'Encoder 3 Stopped'): The event will be generated when the Encoder 3 stops for longer than EncoderTimeout. - * - \b Encoder4Stopped (Display string: 'Encoder 4 Stopped'): The event will be generated when the Encoder 4 stops for longer than EncoderTimeout. - * - \b Encoder5Stopped (Display string: 'Encoder 5 Stopped'): The event will be generated when the Encoder 5 stops for longer than EncoderTimeout. - * - \b Encoder6Stopped (Display string: 'Encoder 6 Stopped'): The event will be generated when the Encoder 6 stops for longer than EncoderTimeout. - * - \b Encoder7Stopped (Display string: 'Encoder 7 Stopped'): The event will be generated when the Encoder 7 stops for longer than EncoderTimeout. - * - \b Encoder8Stopped (Display string: 'Encoder 8 Stopped'): The event will be generated when the Encoder 8 stops for longer than EncoderTimeout. - * - \b Encoder9Stopped (Display string: 'Encoder 9 Stopped'): The event will be generated when the Encoder 9 stops for longer than EncoderTimeout. - * - \b Encoder10Stopped (Display string: 'Encoder 10 Stopped'): The event will be generated when the Encoder 10 stops for longer than EncoderTimeout. - * - \b Encoder11Stopped (Display string: 'Encoder 11 Stopped'): The event will be generated when the Encoder 11 stops for longer than EncoderTimeout. - * - \b Encoder12Stopped (Display string: 'Encoder 12 Stopped'): The event will be generated when the Encoder 12 stops for longer than EncoderTimeout. - * - \b Encoder13Stopped (Display string: 'Encoder 13 Stopped'): The event will be generated when the Encoder 13 stops for longer than EncoderTimeout. - * - \b Encoder14Stopped (Display string: 'Encoder 14 Stopped'): The event will be generated when the Encoder 14 stops for longer than EncoderTimeout. - * - \b Encoder15Stopped (Display string: 'Encoder 15 Stopped'): The event will be generated when the Encoder 15 stops for longer than EncoderTimeout. + * - \b Counter15Start (Display string: 'Counter 15 Start'): The event will be generated when counter 15 starts counting. + * - \b DeviceListChanged (Display string: 'Device List Changed'): This enumeration value indicates an event that is fired when the list of devices has been updated. + * - \b DeviceLost (Display string: 'Device Lost'): This enumeration value indicates an event that is raised when the local host looses connection to the physical(remote) device. + * - \b DeviceTemperatureStateCritical (Display string: 'Device Temperature State Critical') + * - \b DeviceTemperatureStateNormal (Display string: 'Device Temperature State Normal') + * - \b DeviceTemperatureStateOverTemperature (Display string: 'Device Temperature State Over Temperature') + * - \b Encoder0Restarted (Display string: 'Encoder 0 Restarted'): The event will be generated when the Encoder 0 restarts moving. + * - \b Encoder0Stopped (Display string: 'Encoder 0 Stopped'): The event will be generated when the Encoder 0 stops for longer than EncoderTimeout. + * - \b Encoder1Restarted (Display string: 'Encoder 1 Restarted'): The event will be generated when the Encoder 1 restarts moving. + * - \b Encoder1Stopped (Display string: 'Encoder 1 Stopped'): The event will be generated when the Encoder 1 stops for longer than EncoderTimeout. * - \b Encoder2Restarted (Display string: 'Encoder 2 Restarted'): The event will be generated when the Encoder 2 restarts moving. + * - \b Encoder2Stopped (Display string: 'Encoder 2 Stopped'): The event will be generated when the Encoder 2 stops for longer than EncoderTimeout. * - \b Encoder3Restarted (Display string: 'Encoder 3 Restarted'): The event will be generated when the Encoder 3 restarts moving. + * - \b Encoder3Stopped (Display string: 'Encoder 3 Stopped'): The event will be generated when the Encoder 3 stops for longer than EncoderTimeout. * - \b Encoder4Restarted (Display string: 'Encoder 4 Restarted'): The event will be generated when the Encoder 4 restarts moving. + * - \b Encoder4Stopped (Display string: 'Encoder 4 Stopped'): The event will be generated when the Encoder 4 stops for longer than EncoderTimeout. * - \b Encoder5Restarted (Display string: 'Encoder 5 Restarted'): The event will be generated when the Encoder 5 restarts moving. + * - \b Encoder5Stopped (Display string: 'Encoder 5 Stopped'): The event will be generated when the Encoder 5 stops for longer than EncoderTimeout. * - \b Encoder6Restarted (Display string: 'Encoder 6 Restarted'): The event will be generated when the Encoder 6 restarts moving. + * - \b Encoder6Stopped (Display string: 'Encoder 6 Stopped'): The event will be generated when the Encoder 6 stops for longer than EncoderTimeout. * - \b Encoder7Restarted (Display string: 'Encoder 7 Restarted'): The event will be generated when the Encoder 7 restarts moving. + * - \b Encoder7Stopped (Display string: 'Encoder 7 Stopped'): The event will be generated when the Encoder 7 stops for longer than EncoderTimeout. * - \b Encoder8Restarted (Display string: 'Encoder 8 Restarted'): The event will be generated when the Encoder 8 restarts moving. + * - \b Encoder8Stopped (Display string: 'Encoder 8 Stopped'): The event will be generated when the Encoder 8 stops for longer than EncoderTimeout. * - \b Encoder9Restarted (Display string: 'Encoder 9 Restarted'): The event will be generated when the Encoder 9 restarts moving. + * - \b Encoder9Stopped (Display string: 'Encoder 9 Stopped'): The event will be generated when the Encoder 9 stops for longer than EncoderTimeout. * - \b Encoder10Restarted (Display string: 'Encoder 10 Restarted'): The event will be generated when the Encoder 10 restarts moving. + * - \b Encoder10Stopped (Display string: 'Encoder 10 Stopped'): The event will be generated when the Encoder 10 stops for longer than EncoderTimeout. * - \b Encoder11Restarted (Display string: 'Encoder 11 Restarted'): The event will be generated when the Encoder 11 restarts moving. + * - \b Encoder11Stopped (Display string: 'Encoder 11 Stopped'): The event will be generated when the Encoder 11 stops for longer than EncoderTimeout. * - \b Encoder12Restarted (Display string: 'Encoder 12 Restarted'): The event will be generated when the Encoder 12 restarts moving. + * - \b Encoder12Stopped (Display string: 'Encoder 12 Stopped'): The event will be generated when the Encoder 12 stops for longer than EncoderTimeout. * - \b Encoder13Restarted (Display string: 'Encoder 13 Restarted'): The event will be generated when the Encoder 13 restarts moving. + * - \b Encoder13Stopped (Display string: 'Encoder 13 Stopped'): The event will be generated when the Encoder 13 stops for longer than EncoderTimeout. * - \b Encoder14Restarted (Display string: 'Encoder 14 Restarted'): The event will be generated when the Encoder 14 restarts moving. + * - \b Encoder14Stopped (Display string: 'Encoder 14 Stopped'): The event will be generated when the Encoder 14 stops for longer than EncoderTimeout. * - \b Encoder15Restarted (Display string: 'Encoder 15 Restarted'): The event will be generated when the Encoder 15 restarts moving. - * - \b Line2RisingEdge (Display string: 'Line 2 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 2. - * - \b Line3RisingEdge (Display string: 'Line 3 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 3. - * - \b Line4RisingEdge (Display string: 'Line 4 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 4. - * - \b Line5RisingEdge (Display string: 'Line 5 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 5. - * - \b Line6RisingEdge (Display string: 'Line 6 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 6. - * - \b Line7RisingEdge (Display string: 'Line 7 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 7. - * - \b Line8RisingEdge (Display string: 'Line 8 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 8. - * - \b Line9RisingEdge (Display string: 'Line 9 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 9. - * - \b Line10RisingEdge (Display string: 'Line 10 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 10. - * - \b Line11RisingEdge (Display string: 'Line 11 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 11. - * - \b Line12RisingEdge (Display string: 'Line 12 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 12. - * - \b Line13RisingEdge (Display string: 'Line 13 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 13. - * - \b Line14RisingEdge (Display string: 'Line 14 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 14. - * - \b Line15RisingEdge (Display string: 'Line 15 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 15. - * - \b Line2FallingEdge (Display string: 'Line 2 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 2. - * - \b Line3FallingEdge (Display string: 'Line 3 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 3. - * - \b Line4FallingEdge (Display string: 'Line 4 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 4. - * - \b Line5FallingEdge (Display string: 'Line 5 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 5. - * - \b Line6FallingEdge (Display string: 'Line 6 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 6. - * - \b Line7FallingEdge (Display string: 'Line 7 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 7. - * - \b Line8FallingEdge (Display string: 'Line 8 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 8. - * - \b Line9FallingEdge (Display string: 'Line 9 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 9. - * - \b Line10FallingEdge (Display string: 'Line 10 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 10. - * - \b Line11FallingEdge (Display string: 'Line 11 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 11. - * - \b Line12FallingEdge (Display string: 'Line 12 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 12. - * - \b Line13FallingEdge (Display string: 'Line 13 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 13. - * - \b Line14FallingEdge (Display string: 'Line 14 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 14. - * - \b Line15FallingEdge (Display string: 'Line 15 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 15. + * - \b Encoder15Stopped (Display string: 'Encoder 15 Stopped'): The event will be generated when the Encoder 15 stops for longer than EncoderTimeout. + * - \b Error (Display string: 'Error'): Device just detected an error during the active Acquisition. + * - \b ExposureEnd (Display string: 'Exposure End'): Device just completed the exposure of one Frame (or Line). + * - \b ExposureStart (Display string: 'Exposure Start'): Device just started the exposure of one Frame (or Line). + * - \b FrameBurstEnd (Display string: 'Frame Burst End'): Device just completed the capture of a burst of Frames. + * - \b FrameBurstStart (Display string: 'Frame Burst Start'): Device just started the capture of a burst of Frames. + * - \b FrameEnd (Display string: 'Frame End'): Device just completed the capture of one Frame. + * - \b FrameStart (Display string: 'Frame Start'): Device just started the capture of one Frame. + * - \b FrameTransferEnd (Display string: 'Frame Transfer End'): Device just completed the transfer of one Frame. + * - \b FrameTransferStart (Display string: 'Frame Transfer Start'): Device just started the transfer of one Frame. + * - \b FrameTrigger (Display string: 'Frame Trigger'): Device just received a trigger to start the capture of one Frame. + * - \b FrameTriggerMissed (Display string: 'Frame Trigger Missed'): Device just missed a trigger to start the capture of one Frame. + * - \b InterfaceListChanged (Display string: 'Interface List Changed'): This enumeration value indicates an event that is fired when the list of interfaces has been updated. + * - \b InterfaceLost (Display string: 'Interface Lost'): This enumeration value indicates an event that is raised when the interface connection is lost. + * - \b Line0AnyEdge (Display string: 'Line 0 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 0. + * - \b Line0FallingEdge (Display string: 'Line 0 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 0. + * - \b Line0RisingEdge (Display string: 'Line 0 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 0. + * - \b Line1AnyEdge (Display string: 'Line 1 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 1. + * - \b Line1FallingEdge (Display string: 'Line 1 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 1. + * - \b Line1RisingEdge (Display string: 'Line 1 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 1. * - \b Line2AnyEdge (Display string: 'Line 2 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 2. + * - \b Line2FallingEdge (Display string: 'Line 2 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 2. + * - \b Line2RisingEdge (Display string: 'Line 2 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 2. * - \b Line3AnyEdge (Display string: 'Line 3 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 3. + * - \b Line3FallingEdge (Display string: 'Line 3 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 3. + * - \b Line3RisingEdge (Display string: 'Line 3 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 3. * - \b Line4AnyEdge (Display string: 'Line 4 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 4. + * - \b Line4FallingEdge (Display string: 'Line 4 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 4. + * - \b Line4RisingEdge (Display string: 'Line 4 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 4. * - \b Line5AnyEdge (Display string: 'Line 5 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 5. + * - \b Line5FallingEdge (Display string: 'Line 5 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 5. + * - \b Line5RisingEdge (Display string: 'Line 5 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 5. * - \b Line6AnyEdge (Display string: 'Line 6 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 6. + * - \b Line6FallingEdge (Display string: 'Line 6 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 6. + * - \b Line6RisingEdge (Display string: 'Line 6 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 6. * - \b Line7AnyEdge (Display string: 'Line 7 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 7. + * - \b Line7FallingEdge (Display string: 'Line 7 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 7. + * - \b Line7RisingEdge (Display string: 'Line 7 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 7. * - \b Line8AnyEdge (Display string: 'Line 8 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 8. + * - \b Line8FallingEdge (Display string: 'Line 8 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 8. + * - \b Line8RisingEdge (Display string: 'Line 8 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 8. * - \b Line9AnyEdge (Display string: 'Line 9 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 9. + * - \b Line9FallingEdge (Display string: 'Line 9 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 9. + * - \b Line9RisingEdge (Display string: 'Line 9 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 9. * - \b Line10AnyEdge (Display string: 'Line 10 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 10. + * - \b Line10FallingEdge (Display string: 'Line 10 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 10. + * - \b Line10RisingEdge (Display string: 'Line 10 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 10. * - \b Line11AnyEdge (Display string: 'Line 11 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 11. + * - \b Line11FallingEdge (Display string: 'Line 11 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 11. + * - \b Line11RisingEdge (Display string: 'Line 11 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 11. * - \b Line12AnyEdge (Display string: 'Line 12 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 12. + * - \b Line12FallingEdge (Display string: 'Line 12 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 12. + * - \b Line12RisingEdge (Display string: 'Line 12 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 12. * - \b Line13AnyEdge (Display string: 'Line 13 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 13. + * - \b Line13FallingEdge (Display string: 'Line 13 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 13. + * - \b Line13RisingEdge (Display string: 'Line 13 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 13. * - \b Line14AnyEdge (Display string: 'Line 14 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 14. + * - \b Line14FallingEdge (Display string: 'Line 14 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 14. + * - \b Line14RisingEdge (Display string: 'Line 14 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 14. * - \b Line15AnyEdge (Display string: 'Line 15 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 15. + * - \b Line15FallingEdge (Display string: 'Line 15 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 15. + * - \b Line15RisingEdge (Display string: 'Line 15 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 15. + * - \b LineEnd (Display string: 'Line End'): Device just completed the capture of one Line. + * - \b LineStart (Display string: 'Line Start'): Device just started the capture of one Line. + * - \b LineTrigger (Display string: 'Line Trigger'): Device just received a trigger to start the capture of one Line. + * - \b LineTriggerMissed (Display string: 'Line Trigger Missed'): Device just missed a trigger to start the capture of one Line. * - \b Link0Trigger (Display string: 'Link 0 Trigger') * - \b Link1Trigger (Display string: 'Link 1 Trigger') * - \b Link2Trigger (Display string: 'Link 2 Trigger') @@ -17854,14 +18358,54 @@ public: * - \b Link13Trigger (Display string: 'Link 13 Trigger') * - \b Link14Trigger (Display string: 'Link 14 Trigger') * - \b Link15Trigger (Display string: 'Link 15 Trigger') - * - \b InterfaceListChanged (Display string: 'Interface List Changed'): This enumeration value indicates an event that is fired when the list of interfaces has been updated. - * - \b InterfaceLost (Display string: 'Interface Lost'): This enumeration value indicates an event that is raised when the interface connection is lost. - * - \b DeviceListChanged (Display string: 'Device List Changed'): This enumeration value indicates an event that is fired when the list of devices has been updated. - * - \b DeviceLost (Display string: 'Device Lost'): This enumeration value indicates an event that is raised when the local host looses connection to the physical(remote) device. - * - \b BufferTooSmall (Display string: 'Buffer Too Small'): This enumeration value indicates an event that is raised when the buffer was too small to receive the expected amount of data. - * - \b BuffersDiscarded (Display string: 'Buffers Discarded'): This enumeration value indicates an event that is raised when buffers discared by GenTL or device. This event could optionally carry two numeric child data fields EventBuffersDiscardedDeviceCount and EventBuffersDiscardedProducerCount. - * - \b BuffersDiscardedDeviceCount (Display string: 'Buffers Discarded Device Count'): This enumeration value indicates the number of buffers discarded by the device since last fired instance of this event (the producer would get to know about this for example by observing a gap in the block_id sequence). - * - \b BuffersDiscardedProducerCount (Display string: 'Buffers Discarded Producer Count'): This enumeration value indicates the number of buffers discarded by the producer since last fired instance of this event (this would happen e.g. if there are no free buffers available or if given buffer handling mode requires discarding old buffers etc.). + * - \b LinkSpeedChange (Display string: 'Link Speed Change'): The event will be generated when the link speed has changed. + * - \b LinkTrigger0 (Display string: 'Link Trigger 0'): The event will be generated when a Rising Edge is detected on the LinkTrigger 0. + * - \b LinkTrigger1 (Display string: 'Link Trigger 1'): The event will be generated when a Rising Edge is detected on the LinkTrigger 1. + * - \b PrimaryApplicationSwitch (Display string: 'Primary Application Switch'): The event will be generated when a primary application switchover has been granted (GigE Vision Specific). + * - \b SequencerSetChange (Display string: 'Sequencer Set Change'): Device sequencer set has changed. + * - \b Stream0TransferBlockEnd (Display string: 'Stream 0 Transfer Block End'): Device just completed the transfer of one Block. + * - \b Stream0TransferBlockStart (Display string: 'Stream 0 Transfer Block Start'): Device just started the transfer of one Block. + * - \b Stream0TransferBlockTrigger (Display string: 'Stream 0 Transfer Block Trigger'): Device just received a trigger to start the transfer of one Block. + * - \b Stream0TransferBurstEnd (Display string: 'Stream 0 Transfer Burst End'): Device just completed the transfer of a burst of Blocks. + * - \b Stream0TransferBurstStart (Display string: 'Stream 0 Transfer Burst Start'): Device just started the transfer of a burst of Blocks. + * - \b Stream0TransferEnd (Display string: 'Stream 0 Transfer End'): Device just completed the transfer of one or many Blocks. + * - \b Stream0TransferOverflow (Display string: 'Stream 0 Transfer Overflow'): Device transfer queue overflowed. + * - \b Stream0TransferPause (Display string: 'Stream 0 Transfer Pause'): Device just paused the transfer. + * - \b Stream0TransferResume (Display string: 'Stream 0 Transfer Resume'): Device just resumed the transfer. + * - \b Stream0TransferStart (Display string: 'Stream 0 Transfer Start'): Device just started the transfer of one or many Blocks. + * - \b Test (Display string: 'Test'): The test event will be generated when the device receives the TestEventGenerate command (EventNotification for the Test event is always On). + * - \b Timer0End (Display string: 'Timer 0 End'): The event will be generated when Timer 0 ends counting. + * - \b Timer0Start (Display string: 'Timer 0 Start'): The event will be generated when Timer 0 starts counting. + * - \b Timer1End (Display string: 'Timer 1 End'): The event will be generated when Timer 1 ends counting. + * - \b Timer1Start (Display string: 'Timer 1 Start'): The event will be generated when Timer 1 starts counting. + * - \b Timer2End (Display string: 'Timer 2 End'): The event will be generated when Timer 2 ends counting. + * - \b Timer2Start (Display string: 'Timer 2 Start'): The event will be generated when Timer 2 starts counting. + * - \b Timer3End (Display string: 'Timer 3 End'): The event will be generated when Timer 3 ends counting. + * - \b Timer3Start (Display string: 'Timer 3 Start'): The event will be generated when Timer 3 starts counting. + * - \b Timer4End (Display string: 'Timer 4 End'): The event will be generated when Timer 4 ends counting. + * - \b Timer4Start (Display string: 'Timer 4 Start'): The event will be generated when Timer 4 starts counting. + * - \b Timer5End (Display string: 'Timer 5 End'): The event will be generated when Timer 5 ends counting. + * - \b Timer5Start (Display string: 'Timer 5 Start'): The event will be generated when Timer 5 starts counting. + * - \b Timer6End (Display string: 'Timer 6 End'): The event will be generated when Timer 6 ends counting. + * - \b Timer6Start (Display string: 'Timer 6 Start'): The event will be generated when Timer 6 starts counting. + * - \b Timer7End (Display string: 'Timer 7 End'): The event will be generated when Timer 7 ends counting. + * - \b Timer7Start (Display string: 'Timer 7 Start'): The event will be generated when Timer 7 starts counting. + * - \b Timer8End (Display string: 'Timer 8 End'): The event will be generated when Timer 8 ends counting. + * - \b Timer8Start (Display string: 'Timer 8 Start'): The event will be generated when Timer 8 starts counting. + * - \b Timer9End (Display string: 'Timer 9 End'): The event will be generated when Timer 9 ends counting. + * - \b Timer9Start (Display string: 'Timer 9 Start'): The event will be generated when Timer 9 starts counting. + * - \b Timer10End (Display string: 'Timer 10 End'): The event will be generated when Timer 10 ends counting. + * - \b Timer10Start (Display string: 'Timer 10 Start'): The event will be generated when Timer 10 starts counting. + * - \b Timer11End (Display string: 'Timer 11 End'): The event will be generated when Timer 11 ends counting. + * - \b Timer11Start (Display string: 'Timer 11 Start'): The event will be generated when Timer 11 starts counting. + * - \b Timer12End (Display string: 'Timer 12 End'): The event will be generated when Timer 12 ends counting. + * - \b Timer12Start (Display string: 'Timer 12 Start'): The event will be generated when Timer 12 starts counting. + * - \b Timer13End (Display string: 'Timer 13 End'): The event will be generated when Timer 13 ends counting. + * - \b Timer13Start (Display string: 'Timer 13 Start'): The event will be generated when Timer 13 starts counting. + * - \b Timer14End (Display string: 'Timer 14 End'): The event will be generated when Timer 14 ends counting. + * - \b Timer14Start (Display string: 'Timer 14 Start'): The event will be generated when Timer 14 starts counting. + * - \b Timer15End (Display string: 'Timer 15 End'): The event will be generated when Timer 15 ends counting. + * - \b Timer15Start (Display string: 'Timer 15 Start'): The event will be generated when Timer 15 starts counting. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. @@ -17923,10 +18467,14 @@ public: mvResendRequestCredits(), mvResendResponseTimeout(), mvResendsPerTimeout(), - mvMultiCPUStreamProcessingEnable(), - mvMultiCPUStreamProcessingCPUCount(), - mvMultiCPUStreamProcessingFirstCPUIndex(), - mvMultiCPUStreamProcessingSwitchInterval(), + mvMultiCoreAcquisitionEnable(), + mvMultiCoreAcquisitionBaseCore(), + mvMultiCoreAcquisitionCoreCount(), + mvMultiCoreAcquisitionFirstCoreIndex(), + mvMultiCoreAcquisitionCoreSwitchInterval(), + mvV4L2MemoryMode(), + mvMMAPBufferCount(), + mvLowLatencyModeEnable(), streamAnnouncedBufferCount(), streamBufferHandlingMode(), streamAnnounceBufferMinimum(), @@ -17968,10 +18516,30 @@ public: locator.bindComponent( mvResendRequestCredits, "mvResendRequestCredits" ); locator.bindComponent( mvResendResponseTimeout, "mvResendResponseTimeout" ); locator.bindComponent( mvResendsPerTimeout, "mvResendsPerTimeout" ); - locator.bindComponent( mvMultiCPUStreamProcessingEnable, "mvMultiCPUStreamProcessingEnable" ); - locator.bindComponent( mvMultiCPUStreamProcessingCPUCount, "mvMultiCPUStreamProcessingCPUCount" ); - locator.bindComponent( mvMultiCPUStreamProcessingFirstCPUIndex, "mvMultiCPUStreamProcessingFirstCPUIndex" ); - locator.bindComponent( mvMultiCPUStreamProcessingSwitchInterval, "mvMultiCPUStreamProcessingSwitchInterval" ); + locator.bindComponent( mvMultiCoreAcquisitionEnable, "mvMultiCoreAcquisitionEnable" ); + if( !mvMultiCoreAcquisitionEnable.isValid() ) + { + locator.bindComponent( mvMultiCoreAcquisitionEnable, "mvMultiCPUStreamProcessingEnable" ); + } + locator.bindComponent( mvMultiCoreAcquisitionBaseCore, "mvMultiCoreAcquisitionBaseCore" ); + locator.bindComponent( mvMultiCoreAcquisitionCoreCount, "mvMultiCoreAcquisitionCoreCount" ); + if( !mvMultiCoreAcquisitionCoreCount.isValid() ) + { + locator.bindComponent( mvMultiCoreAcquisitionCoreCount, "mvMultiCPUStreamProcessingCPUCount" ); + } + locator.bindComponent( mvMultiCoreAcquisitionFirstCoreIndex, "mvMultiCoreAcquisitionFirstCoreIndex" ); + if( !mvMultiCoreAcquisitionFirstCoreIndex.isValid() ) + { + locator.bindComponent( mvMultiCoreAcquisitionFirstCoreIndex, "mvMultiCPUStreamProcessingFirstCPUIndex" ); + } + locator.bindComponent( mvMultiCoreAcquisitionCoreSwitchInterval, "mvMultiCoreAcquisitionCoreSwitchInterval" ); + if( !mvMultiCoreAcquisitionCoreSwitchInterval.isValid() ) + { + locator.bindComponent( mvMultiCoreAcquisitionCoreSwitchInterval, "mvMultiCPUStreamProcessingSwitchInterval" ); + } + locator.bindComponent( mvV4L2MemoryMode, "mvV4L2MemoryMode" ); + locator.bindComponent( mvMMAPBufferCount, "mvMMAPBufferCount" ); + locator.bindComponent( mvLowLatencyModeEnable, "mvLowLatencyModeEnable" ); locator.bindComponent( streamAnnouncedBufferCount, "StreamAnnouncedBufferCount" ); locator.bindComponent( streamBufferHandlingMode, "StreamBufferHandlingMode" ); locator.bindComponent( streamAnnounceBufferMinimum, "StreamAnnounceBufferMinimum" ); @@ -18045,7 +18613,7 @@ public: PropertyIBoolean mvResendBatchingActive; /// \brief An integer property. Defines the maximum gap between 2 consecutive packets in the stream. /** - * This feature defines the maximum gap between 2 consecutive packets in the stream. If a detected gap larger than 'MaximumGapSize' this block is considered as incomplete. When this parameter is 0 no gap will be considered as too big! + * This feature defines the maximum gap between 2 consecutive packets in the stream. If a detected gap larger than 'MaximumGapSize' this block is considered as incomplete. When this parameter is 0 no gap will be considered as too big. */ PropertyI64 mvResendMaximumGapSize; /// \brief An integer property. Indicates the resend threshold within the capture window. @@ -18073,26 +18641,55 @@ public: * This feature indicates the number of packets to be requested whenever the resend response timeout elapses. */ PropertyI64 mvResendsPerTimeout; - /// \brief A boolean property. This (PRELIMINARY) feature controls whether the host shall process incoming data on multiple CPUs or a single dedicated one. + /// \brief A boolean property. This feature controls whether the host shall process incoming data a single arbitrary CPU core (Off) or one or multiple dedicated ones (On). + /** + * This feature controls whether the host shall process incoming data a single arbitrary CPU core (Off) or one or multiple dedicated ones (On) + */ + PropertyIBoolean mvMultiCoreAcquisitionEnable; + /// \brief An integer property. This feature indicates the base CPU core (as selected by the NIC) that will be used for the processing of network data for this stream. + /** + * This feature indicates the base CPU core (as selected by the NIC) that will be used for the processing of network data for this stream. This value when added to 'mvMultiCoreAcquisitionFirstCoreIndex' will indicate the first of 'mvMultiCoreAcquisitionCoreCount' actual CPUs that will ater be used for the processing of network data for this stream + */ + PropertyI64 mvMultiCoreAcquisitionBaseCore; + /// \brief An integer property. This feature controls how many CPU cores will be used for the processing of network data for this stream. + /** + * This feature controls how many CPU cores will be used for the processing of network data for this stream + */ + PropertyI64 mvMultiCoreAcquisitionCoreCount; + /// \brief An integer property. This feature controls which is the first CPU core to use for processing network data out of the list of CPU cores available for this task for the NIC associated with this stream. + /** + * This feature controls which is the first CPU core to use for processing network data out of the list of CPU cores available for this task for the NIC associated with this stream. Please note that this number does NOT have a 1:1 relationship to the CPU in your system but to the CPUs available for processing on the selected NIC. So if e.g. the corresponding NICs RSS table can access CPUs 6, 8, 10 and 12 then setting 'mvMultiCoreAcquisitionFirstCoreIndex' to 2 will result in CPUs 10 and 12 to be used. + */ + PropertyI64 mvMultiCoreAcquisitionFirstCoreIndex; + /// \brief An integer property. This feature controls after how many network packets the processing shall switch to the next CPU core. Smaller values introduce a higher overhead, values too high might result in loss of data when the network card runs out of buffers. The recommended values are in the range of 32 - 256. /** - * This (PRELIMINARY) feature controls whether the host shall process incoming data on multiple CPUs or a single dedicated one. ATTENTION: CHANGES MAY BE APPLIED TO THIS FEATURE WITHOUT FURTHER NOTICE! USE IT FOR EVALUATION PURPOSES ONLY! + * This feature controls after how many network packets the processing shall switch to the next CPU core. Smaller values introduce a higher overhead, values too high might result in loss of data when the network card runs out of buffers. The recommended values are in the range of 32 - 256 */ - PropertyIBoolean mvMultiCPUStreamProcessingEnable; - /// \brief An integer property. This (PRELIMINARY) feature controls how many CPUs will be used for the processing of network data for this stream. + PropertyI64 mvMultiCoreAcquisitionCoreSwitchInterval; + /// \brief An enumerated integer property. Controls which of the underlying V4L2 specific buffer memory modes will be used. /** - * This (PRELIMINARY) feature controls how many CPUs will be used for the processing of network data for this stream. ATTENTION: CHANGES MAY BE APPLIED TO THIS FEATURE WITHOUT FURTHER NOTICE! USE IT FOR EVALUATION PURPOSES ONLY! + * PRELIMINARY. SUBJECT TO CHANGE WITHOUT FURTHER NOTICE. This feature controls which of the underlying V4L2 specific buffer memory modes will be used. + * + * The following string values might be valid for this feature: + * - \b mvMMAP (Display string: 'mv MMAP'): PRELIMINARY. SUBJECT TO CHANGE WITHOUT FURTHER NOTICE. This enumeration value indicates that the acquisition engine will use the MMAP memory mode. This does NOT result in optimal performance since each image must be copied from the memory mapped buffer from kernel space into the target buffer in user space. + * - \b mvUSERPTR (Display string: 'mv USERPTR'): PRELIMINARY. SUBJECT TO CHANGE WITHOUT FURTHER NOTICE. This enumeration value indicates that the acquisition engine will use the user-pointrr memory mode. + * - \b mvOVERLAY (Display string: 'mv OVERLAY'): PRELIMINARY. SUBJECT TO CHANGE WITHOUT FURTHER NOTICE. This enumeration value indicates that the acquisition engine will use the overlay memory mode. + * - \b mvDMA (Display string: 'mv DMA'): PRELIMINARY. SUBJECT TO CHANGE WITHOUT FURTHER NOTICE. This enumeration value indicates that the acquisition engine will use the DMA memory mode. + * + * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. + * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. */ - PropertyI64 mvMultiCPUStreamProcessingCPUCount; - /// \brief An integer property. This (PRELIMINARY) feature controls which is the first CPU to use for processing network data out of the list of CPUs available for this task for the NIC associated with this stream. + PropertyI64 mvV4L2MemoryMode; + /// \brief An integer property. The number of buffers internally used for the MMAP memory mode. /** - * This (PRELIMINARY) feature controls which is the first CPU to use for processing network data out of the list of CPUs available for this task for the NIC associated with this stream. Please note that this number does NOT have a 1:1 relationship to the CPU in your system but to the CPUs available for processing on the selected NIC. So if e.g. the corresponding NICs RSS table can access CPUs 6, 8, 10 and 12 then setting 'mvMultiCPUStreamProcessingFirstCPUIndex' to 2 will result in CPUs 10 and 12 to be used! ATTENTION: CHANGES MAY BE APPLIED TO THIS FEATURE WITHOUT FURTHER NOTICE! USE IT FOR EVALUATION PURPOSES ONLY! + * PRELIMINARY. SUBJECT TO CHANGE WITHOUT FURTHER NOTICE. This feature defines the number of buffers internally used for the MMAP memory mode. This is NOT to be confused with the value of the 'RequestCount' property. */ - PropertyI64 mvMultiCPUStreamProcessingFirstCPUIndex; - /// \brief An integer property. This (PRELIMINARY) feature controls after how many network packets the processing shall switch to another CPU. Smaller values introduce a higher overhead, values too high might result in loss of data when the network card runs out of buffers. The recommended values are in the range of 32 - 256. + PropertyI64 mvMMAPBufferCount; + /// \brief A boolean property. This feature controls whether the low-latency mode (NVIDIA specific) is active or not. /** - * This (PRELIMINARY) feature controls after how many network packets the processing shall switch to another CPU. Smaller values introduce a higher overhead, values too high might result in loss of data when the network card runs out of buffers. The recommended values are in the range of 32 - 256. ATTENTION: CHANGES MAY BE APPLIED TO THIS FEATURE WITHOUT FURTHER NOTICE! USE IT FOR EVALUATION PURPOSES ONLY! + * PRELIMINARY. SUBJECT TO CHANGE WITHOUT FURTHER NOTICE. This feature controls whether the low-latency mode (NVIDIA specific) is active or not. */ - PropertyI64 mvMultiCPUStreamProcessingSwitchInterval; + PropertyIBoolean mvLowLatencyModeEnable; /// \brief An integer property. Number of announced (known) buffers on this stream. This value is volatile. It may change if additional buffers are announced and/or buffers are revoked by the GenTL Consumer. /** * This is a read-only feature. It indicates the number of announced (known) buffers on this stream. This value is volatile. It may change if additional buffers are announced and/or buffers are revoked by the GenTL Consumer. @@ -18169,199 +18766,152 @@ public: * Selects which Event to signal to the host application. * * The following string values might be valid for this feature: - * - \b AcquisitionTrigger (Display string: 'Acquisition Trigger'): Device just received a trigger for the Acquisition of one or many Frames. - * - \b AcquisitionTriggerMissed (Display string: 'Acquisition Trigger Missed'): Device just missed a trigger for the Acquisition of one or many Frames. - * - \b AcquisitionStart (Display string: 'Acquisition Start'): Device just started the Acquisition of one or many Frames. * - \b AcquisitionEnd (Display string: 'Acquisition End'): Device just completed the Acquisition of one or many Frames. - * - \b AcquisitionTransferStart (Display string: 'Acquisition Transfer Start'): Device just started the transfer of one or many Frames. - * - \b AcquisitionTransferEnd (Display string: 'Acquisition Transfer End'): Device just completed the transfer of one or many Frames. * - \b AcquisitionError (Display string: 'Acquisition Error'): Device just detected an error during the active Acquisition. - * - \b FrameBurstStart (Display string: 'Frame Burst Start'): Device just started the capture of a burst of Frames. - * - \b FrameBurstEnd (Display string: 'Frame Burst End'): Device just completed the capture of a burst of Frames. - * - \b FrameTrigger (Display string: 'Frame Trigger'): Device just received a trigger to start the capture of one Frame. - * - \b FrameTriggerMissed (Display string: 'Frame Trigger Missed'): Device just missed a trigger to start the capture of one Frame. - * - \b FrameStart (Display string: 'Frame Start'): Device just started the capture of one Frame. - * - \b FrameEnd (Display string: 'Frame End'): Device just completed the capture of one Frame. - * - \b FrameTransferStart (Display string: 'Frame Transfer Start'): Device just started the transfer of one Frame. - * - \b FrameTransferEnd (Display string: 'Frame Transfer End'): Device just completed the transfer of one Frame. - * - \b LineTrigger (Display string: 'Line Trigger'): Device just received a trigger to start the capture of one Line. - * - \b LineTriggerMissed (Display string: 'Line Trigger Missed'): Device just missed a trigger to start the capture of one Line. - * - \b LineStart (Display string: 'Line Start'): Device just started the capture of one Line. - * - \b LineEnd (Display string: 'Line End'): Device just completed the capture of one Line. - * - \b ExposureStart (Display string: 'Exposure Start'): Device just started the exposure of one Frame (or Line). - * - \b ExposureEnd (Display string: 'Exposure End'): Device just completed the exposure of one Frame (or Line). - * - \b Stream0TransferStart (Display string: 'Stream 0 Transfer Start'): Device just started the transfer of one or many Blocks. - * - \b Stream0TransferEnd (Display string: 'Stream 0 Transfer End'): Device just completed the transfer of one or many Blocks. - * - \b Stream0TransferPause (Display string: 'Stream 0 Transfer Pause'): Device just paused the transfer. - * - \b Stream0TransferResume (Display string: 'Stream 0 Transfer Resume'): Device just resumed the transfer. - * - \b Stream0TransferBlockStart (Display string: 'Stream 0 Transfer Block Start'): Device just started the transfer of one Block. - * - \b Stream0TransferBlockEnd (Display string: 'Stream 0 Transfer Block End'): Device just completed the transfer of one Block. - * - \b Stream0TransferBlockTrigger (Display string: 'Stream 0 Transfer Block Trigger'): Device just received a trigger to start the transfer of one Block. - * - \b Stream0TransferBurstStart (Display string: 'Stream 0 Transfer Burst Start'): Device just started the transfer of a burst of Blocks. - * - \b Stream0TransferBurstEnd (Display string: 'Stream 0 Transfer Burst End'): Device just completed the transfer of a burst of Blocks. - * - \b Stream0TransferOverflow (Display string: 'Stream 0 Transfer Overflow'): Device transfer queue overflowed. - * - \b SequencerSetChange (Display string: 'Sequencer Set Change'): Device sequencer set has changed. - * - \b Counter0Start (Display string: 'Counter 0 Start'): The event will be generated when counter 0 starts counting. - * - \b Counter1Start (Display string: 'Counter 1 Start'): The event will be generated when counter 1 starts counting. - * - \b Counter\#2\#Start (Display string: 'Counter \#2\# Start'): The event will be generated when counter \#2\# starts counting. + * - \b AcquisitionStart (Display string: 'Acquisition Start'): Device just started the Acquisition of one or many Frames. + * - \b AcquisitionTransferEnd (Display string: 'Acquisition Transfer End'): Device just completed the transfer of one or many Frames. + * - \b AcquisitionTransferStart (Display string: 'Acquisition Transfer Start'): Device just started the transfer of one or many Frames. + * - \b AcquisitionTrigger (Display string: 'Acquisition Trigger'): Device just received a trigger for the Acquisition of one or many Frames. + * - \b AcquisitionTriggerMissed (Display string: 'Acquisition Trigger Missed'): Device just missed a trigger for the Acquisition of one or many Frames. + * - \b ActionLate (Display string: 'Action Late'): The event will be generated when a valid scheduled action command is received and is scheduled to be executed at a time that is already past. + * - \b BufferTooSmall (Display string: 'Buffer Too Small'): This enumeration value indicates an event that is raised when the buffer was too small to receive the expected amount of data. + * - \b BuffersDiscarded (Display string: 'Buffers Discarded'): This enumeration value indicates an event that is raised when buffers discared by GenTL or device. This event could optionally carry two numeric child data fields EventBuffersDiscardedDeviceCount and EventBuffersDiscardedProducerCount. + * - \b BuffersDiscardedDeviceCount (Display string: 'Buffers Discarded Device Count'): This enumeration value indicates the number of buffers discarded by the device since last fired instance of this event (the producer would get to know about this for example by observing a gap in the block_id sequence). + * - \b BuffersDiscardedProducerCount (Display string: 'Buffers Discarded Producer Count'): This enumeration value indicates the number of buffers discarded by the producer since last fired instance of this event (this would happen e.g. if there are no free buffers available or if given buffer handling mode requires discarding old buffers etc.). * - \b Counter0End (Display string: 'Counter 0 End'): The event will be generated when counter 0 ends counting. + * - \b Counter0Start (Display string: 'Counter 0 Start'): The event will be generated when counter 0 starts counting. * - \b Counter1End (Display string: 'Counter 1 End'): The event will be generated when counter 1 ends counting. - * - \b Counter\#2\#End (Display string: 'Counter \#2\# End'): The event will be generated when counter \#2\# ends counting. - * - \b Timer0Start (Display string: 'Timer 0 Start'): The event will be generated when Timer 0 starts counting. - * - \b Timer1Start (Display string: 'Timer 1 Start'): The event will be generated when Timer 1 starts counting. - * - \b Timer\#2\#Start (Display string: 'Timer \#2\# Start'): The event will be generated when Timer \#2\# starts counting. - * - \b Timer0End (Display string: 'Timer 0 End'): The event will be generated when Timer 0 ends counting. - * - \b Timer1End (Display string: 'Timer 1 End'): The event will be generated when Timer 1 ends counting. - * - \b Timer\#2\#End (Display string: 'Timer \#2\# End'): The event will be generated when Timer \#2\# ends counting. - * - \b Encoder0Stopped (Display string: 'Encoder 0 Stopped'): The event will be generated when the Encoder 0 stops for longer than EncoderTimeout. - * - \b Encoder1Stopped (Display string: 'Encoder 1 Stopped'): The event will be generated when the Encoder 1 stops for longer than EncoderTimeout. - * - \b Encoder\#2\#Stopped (Display string: 'Encoder \#2\# Stopped'): The event will be generated when the Encoder \#2\# stops for longer than EncoderTimeout. - * - \b Encoder0Restarted (Display string: 'Encoder 0 Restarted'): The event will be generated when the Encoder 0 restarts moving. - * - \b Encoder1Restarted (Display string: 'Encoder 1 Restarted'): The event will be generated when the Encoder 1 restarts moving. - * - \b Encoder\#2\#Restarted (Display string: 'Encoder \#2\# Restarted'): The event will be generated when the Encoder \#2\# restarts moving. - * - \b Line0RisingEdge (Display string: 'Line 0 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 0. - * - \b Line1RisingEdge (Display string: 'Line 1 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 1. - * - \b Line\#2\#RisingEdge (Display string: 'Line \#2\# Rising Edge'): The event will be generated when a Rising Edge is detected on the Line \#2\#. - * - \b Line0FallingEdge (Display string: 'Line 0 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 0. - * - \b Line1FallingEdge (Display string: 'Line 1 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 1. - * - \b Line\#2\#FallingEdge (Display string: 'Line \#2\# Falling Edge'): The event will be generated when a Falling Edge is detected on the Line \#2\#. - * - \b Line0AnyEdge (Display string: 'Line 0 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 0. - * - \b Line1AnyEdge (Display string: 'Line 1 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 1. - * - \b Line\#2\#AnyEdge (Display string: 'Line \#2\# Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line \#2\#. - * - \b LinkTrigger0 (Display string: 'Link Trigger 0'): The event will be generated when a Rising Edge is detected on the LinkTrigger 0. - * - \b LinkTrigger1 (Display string: 'Link Trigger 1'): The event will be generated when a Rising Edge is detected on the LinkTrigger 1. - * - \b LinkTrigger\#2\# (Display string: 'Link Trigger \#2\#'): The event will be generated when a Rising Edge is detected on the LinkTrigger \#2\#. - * - \b LinkSpeedChange (Display string: 'Link Speed Change'): The event will be generated when the link speed has changed. - * - \b ActionLate (Display string: 'Action Late'): The event will be generated when a valid scheduled action command is received and is scheduled to be executed at a time that is already past. - * - \b Error (Display string: 'Error'): Device just detected an error during the active Acquisition. - * - \b Test (Display string: 'Test'): The test event will be generated when the device receives the TestEventGenerate command (EventNotification for the Test event is always On). - * - \b PrimaryApplicationSwitch (Display string: 'Primary Application Switch'): The event will be generated when a primary application switchover has been granted (GigE Vision Specific). - * - \b Counter2Start (Display string: 'Counter 2 Start'): The event will be generated when counter 2 starts counting. - * - \b Counter3Start (Display string: 'Counter 3 Start'): The event will be generated when counter 3 starts counting. - * - \b Counter4Start (Display string: 'Counter 4 Start'): The event will be generated when counter 4 starts counting. - * - \b Counter5Start (Display string: 'Counter 5 Start'): The event will be generated when counter 5 starts counting. - * - \b Counter6Start (Display string: 'Counter 6 Start'): The event will be generated when counter 6 starts counting. - * - \b Counter7Start (Display string: 'Counter 7 Start'): The event will be generated when counter 7 starts counting. - * - \b Counter8Start (Display string: 'Counter 8 Start'): The event will be generated when counter 8 starts counting. - * - \b Counter9Start (Display string: 'Counter 9 Start'): The event will be generated when counter 9 starts counting. - * - \b Counter10Start (Display string: 'Counter 10 Start'): The event will be generated when counter 10 starts counting. - * - \b Counter11Start (Display string: 'Counter 11 Start'): The event will be generated when counter 11 starts counting. - * - \b Counter12Start (Display string: 'Counter 12 Start'): The event will be generated when counter 12 starts counting. - * - \b Counter13Start (Display string: 'Counter 13 Start'): The event will be generated when counter 13 starts counting. - * - \b Counter14Start (Display string: 'Counter 14 Start'): The event will be generated when counter 14 starts counting. - * - \b Counter15Start (Display string: 'Counter 15 Start'): The event will be generated when counter 15 starts counting. + * - \b Counter1Start (Display string: 'Counter 1 Start'): The event will be generated when counter 1 starts counting. * - \b Counter2End (Display string: 'Counter 2 End'): The event will be generated when counter 2 ends counting. + * - \b Counter2Start (Display string: 'Counter 2 Start'): The event will be generated when counter 2 starts counting. * - \b Counter3End (Display string: 'Counter 3 End'): The event will be generated when counter 3 ends counting. + * - \b Counter3Start (Display string: 'Counter 3 Start'): The event will be generated when counter 3 starts counting. * - \b Counter4End (Display string: 'Counter 4 End'): The event will be generated when counter 4 ends counting. + * - \b Counter4Start (Display string: 'Counter 4 Start'): The event will be generated when counter 4 starts counting. * - \b Counter5End (Display string: 'Counter 5 End'): The event will be generated when counter 5 ends counting. + * - \b Counter5Start (Display string: 'Counter 5 Start'): The event will be generated when counter 5 starts counting. * - \b Counter6End (Display string: 'Counter 6 End'): The event will be generated when counter 6 ends counting. + * - \b Counter6Start (Display string: 'Counter 6 Start'): The event will be generated when counter 6 starts counting. * - \b Counter7End (Display string: 'Counter 7 End'): The event will be generated when counter 7 ends counting. + * - \b Counter7Start (Display string: 'Counter 7 Start'): The event will be generated when counter 7 starts counting. * - \b Counter8End (Display string: 'Counter 8 End'): The event will be generated when counter 8 ends counting. + * - \b Counter8Start (Display string: 'Counter 8 Start'): The event will be generated when counter 8 starts counting. * - \b Counter9End (Display string: 'Counter 9 End'): The event will be generated when counter 9 ends counting. + * - \b Counter9Start (Display string: 'Counter 9 Start'): The event will be generated when counter 9 starts counting. * - \b Counter10End (Display string: 'Counter 10 End'): The event will be generated when counter 10 ends counting. + * - \b Counter10Start (Display string: 'Counter 10 Start'): The event will be generated when counter 10 starts counting. * - \b Counter11End (Display string: 'Counter 11 End'): The event will be generated when counter 11 ends counting. + * - \b Counter11Start (Display string: 'Counter 11 Start'): The event will be generated when counter 11 starts counting. * - \b Counter12End (Display string: 'Counter 12 End'): The event will be generated when counter 12 ends counting. + * - \b Counter12Start (Display string: 'Counter 12 Start'): The event will be generated when counter 12 starts counting. * - \b Counter13End (Display string: 'Counter 13 End'): The event will be generated when counter 13 ends counting. + * - \b Counter13Start (Display string: 'Counter 13 Start'): The event will be generated when counter 13 starts counting. * - \b Counter14End (Display string: 'Counter 14 End'): The event will be generated when counter 14 ends counting. + * - \b Counter14Start (Display string: 'Counter 14 Start'): The event will be generated when counter 14 starts counting. * - \b Counter15End (Display string: 'Counter 15 End'): The event will be generated when counter 15 ends counting. - * - \b Timer2Start (Display string: 'Timer 2 Start'): The event will be generated when Timer 2 starts counting. - * - \b Timer3Start (Display string: 'Timer 3 Start'): The event will be generated when Timer 3 starts counting. - * - \b Timer4Start (Display string: 'Timer 4 Start'): The event will be generated when Timer 4 starts counting. - * - \b Timer5Start (Display string: 'Timer 5 Start'): The event will be generated when Timer 5 starts counting. - * - \b Timer6Start (Display string: 'Timer 6 Start'): The event will be generated when Timer 6 starts counting. - * - \b Timer7Start (Display string: 'Timer 7 Start'): The event will be generated when Timer 7 starts counting. - * - \b Timer8Start (Display string: 'Timer 8 Start'): The event will be generated when Timer 8 starts counting. - * - \b Timer9Start (Display string: 'Timer 9 Start'): The event will be generated when Timer 9 starts counting. - * - \b Timer10Start (Display string: 'Timer 10 Start'): The event will be generated when Timer 10 starts counting. - * - \b Timer11Start (Display string: 'Timer 11 Start'): The event will be generated when Timer 11 starts counting. - * - \b Timer12Start (Display string: 'Timer 12 Start'): The event will be generated when Timer 12 starts counting. - * - \b Timer13Start (Display string: 'Timer 13 Start'): The event will be generated when Timer 13 starts counting. - * - \b Timer14Start (Display string: 'Timer 14 Start'): The event will be generated when Timer 14 starts counting. - * - \b Timer15Start (Display string: 'Timer 15 Start'): The event will be generated when Timer 15 starts counting. - * - \b Timer2End (Display string: 'Timer 2 End'): The event will be generated when Timer 2 ends counting. - * - \b Timer3End (Display string: 'Timer 3 End'): The event will be generated when Timer 3 ends counting. - * - \b Timer4End (Display string: 'Timer 4 End'): The event will be generated when Timer 4 ends counting. - * - \b Timer5End (Display string: 'Timer 5 End'): The event will be generated when Timer 5 ends counting. - * - \b Timer6End (Display string: 'Timer 6 End'): The event will be generated when Timer 6 ends counting. - * - \b Timer7End (Display string: 'Timer 7 End'): The event will be generated when Timer 7 ends counting. - * - \b Timer8End (Display string: 'Timer 8 End'): The event will be generated when Timer 8 ends counting. - * - \b Timer9End (Display string: 'Timer 9 End'): The event will be generated when Timer 9 ends counting. - * - \b Timer10End (Display string: 'Timer 10 End'): The event will be generated when Timer 10 ends counting. - * - \b Timer11End (Display string: 'Timer 11 End'): The event will be generated when Timer 11 ends counting. - * - \b Timer12End (Display string: 'Timer 12 End'): The event will be generated when Timer 12 ends counting. - * - \b Timer13End (Display string: 'Timer 13 End'): The event will be generated when Timer 13 ends counting. - * - \b Timer14End (Display string: 'Timer 14 End'): The event will be generated when Timer 14 ends counting. - * - \b Timer15End (Display string: 'Timer 15 End'): The event will be generated when Timer 15 ends counting. - * - \b Encoder2Stopped (Display string: 'Encoder 2 Stopped'): The event will be generated when the Encoder 2 stops for longer than EncoderTimeout. - * - \b Encoder3Stopped (Display string: 'Encoder 3 Stopped'): The event will be generated when the Encoder 3 stops for longer than EncoderTimeout. - * - \b Encoder4Stopped (Display string: 'Encoder 4 Stopped'): The event will be generated when the Encoder 4 stops for longer than EncoderTimeout. - * - \b Encoder5Stopped (Display string: 'Encoder 5 Stopped'): The event will be generated when the Encoder 5 stops for longer than EncoderTimeout. - * - \b Encoder6Stopped (Display string: 'Encoder 6 Stopped'): The event will be generated when the Encoder 6 stops for longer than EncoderTimeout. - * - \b Encoder7Stopped (Display string: 'Encoder 7 Stopped'): The event will be generated when the Encoder 7 stops for longer than EncoderTimeout. - * - \b Encoder8Stopped (Display string: 'Encoder 8 Stopped'): The event will be generated when the Encoder 8 stops for longer than EncoderTimeout. - * - \b Encoder9Stopped (Display string: 'Encoder 9 Stopped'): The event will be generated when the Encoder 9 stops for longer than EncoderTimeout. - * - \b Encoder10Stopped (Display string: 'Encoder 10 Stopped'): The event will be generated when the Encoder 10 stops for longer than EncoderTimeout. - * - \b Encoder11Stopped (Display string: 'Encoder 11 Stopped'): The event will be generated when the Encoder 11 stops for longer than EncoderTimeout. - * - \b Encoder12Stopped (Display string: 'Encoder 12 Stopped'): The event will be generated when the Encoder 12 stops for longer than EncoderTimeout. - * - \b Encoder13Stopped (Display string: 'Encoder 13 Stopped'): The event will be generated when the Encoder 13 stops for longer than EncoderTimeout. - * - \b Encoder14Stopped (Display string: 'Encoder 14 Stopped'): The event will be generated when the Encoder 14 stops for longer than EncoderTimeout. - * - \b Encoder15Stopped (Display string: 'Encoder 15 Stopped'): The event will be generated when the Encoder 15 stops for longer than EncoderTimeout. + * - \b Counter15Start (Display string: 'Counter 15 Start'): The event will be generated when counter 15 starts counting. + * - \b DeviceListChanged (Display string: 'Device List Changed'): This enumeration value indicates an event that is fired when the list of devices has been updated. + * - \b DeviceLost (Display string: 'Device Lost'): This enumeration value indicates an event that is raised when the local host looses connection to the physical(remote) device. + * - \b DeviceTemperatureStateCritical (Display string: 'Device Temperature State Critical') + * - \b DeviceTemperatureStateNormal (Display string: 'Device Temperature State Normal') + * - \b DeviceTemperatureStateOverTemperature (Display string: 'Device Temperature State Over Temperature') + * - \b Encoder0Restarted (Display string: 'Encoder 0 Restarted'): The event will be generated when the Encoder 0 restarts moving. + * - \b Encoder0Stopped (Display string: 'Encoder 0 Stopped'): The event will be generated when the Encoder 0 stops for longer than EncoderTimeout. + * - \b Encoder1Restarted (Display string: 'Encoder 1 Restarted'): The event will be generated when the Encoder 1 restarts moving. + * - \b Encoder1Stopped (Display string: 'Encoder 1 Stopped'): The event will be generated when the Encoder 1 stops for longer than EncoderTimeout. * - \b Encoder2Restarted (Display string: 'Encoder 2 Restarted'): The event will be generated when the Encoder 2 restarts moving. + * - \b Encoder2Stopped (Display string: 'Encoder 2 Stopped'): The event will be generated when the Encoder 2 stops for longer than EncoderTimeout. * - \b Encoder3Restarted (Display string: 'Encoder 3 Restarted'): The event will be generated when the Encoder 3 restarts moving. + * - \b Encoder3Stopped (Display string: 'Encoder 3 Stopped'): The event will be generated when the Encoder 3 stops for longer than EncoderTimeout. * - \b Encoder4Restarted (Display string: 'Encoder 4 Restarted'): The event will be generated when the Encoder 4 restarts moving. + * - \b Encoder4Stopped (Display string: 'Encoder 4 Stopped'): The event will be generated when the Encoder 4 stops for longer than EncoderTimeout. * - \b Encoder5Restarted (Display string: 'Encoder 5 Restarted'): The event will be generated when the Encoder 5 restarts moving. + * - \b Encoder5Stopped (Display string: 'Encoder 5 Stopped'): The event will be generated when the Encoder 5 stops for longer than EncoderTimeout. * - \b Encoder6Restarted (Display string: 'Encoder 6 Restarted'): The event will be generated when the Encoder 6 restarts moving. + * - \b Encoder6Stopped (Display string: 'Encoder 6 Stopped'): The event will be generated when the Encoder 6 stops for longer than EncoderTimeout. * - \b Encoder7Restarted (Display string: 'Encoder 7 Restarted'): The event will be generated when the Encoder 7 restarts moving. + * - \b Encoder7Stopped (Display string: 'Encoder 7 Stopped'): The event will be generated when the Encoder 7 stops for longer than EncoderTimeout. * - \b Encoder8Restarted (Display string: 'Encoder 8 Restarted'): The event will be generated when the Encoder 8 restarts moving. + * - \b Encoder8Stopped (Display string: 'Encoder 8 Stopped'): The event will be generated when the Encoder 8 stops for longer than EncoderTimeout. * - \b Encoder9Restarted (Display string: 'Encoder 9 Restarted'): The event will be generated when the Encoder 9 restarts moving. + * - \b Encoder9Stopped (Display string: 'Encoder 9 Stopped'): The event will be generated when the Encoder 9 stops for longer than EncoderTimeout. * - \b Encoder10Restarted (Display string: 'Encoder 10 Restarted'): The event will be generated when the Encoder 10 restarts moving. + * - \b Encoder10Stopped (Display string: 'Encoder 10 Stopped'): The event will be generated when the Encoder 10 stops for longer than EncoderTimeout. * - \b Encoder11Restarted (Display string: 'Encoder 11 Restarted'): The event will be generated when the Encoder 11 restarts moving. + * - \b Encoder11Stopped (Display string: 'Encoder 11 Stopped'): The event will be generated when the Encoder 11 stops for longer than EncoderTimeout. * - \b Encoder12Restarted (Display string: 'Encoder 12 Restarted'): The event will be generated when the Encoder 12 restarts moving. + * - \b Encoder12Stopped (Display string: 'Encoder 12 Stopped'): The event will be generated when the Encoder 12 stops for longer than EncoderTimeout. * - \b Encoder13Restarted (Display string: 'Encoder 13 Restarted'): The event will be generated when the Encoder 13 restarts moving. + * - \b Encoder13Stopped (Display string: 'Encoder 13 Stopped'): The event will be generated when the Encoder 13 stops for longer than EncoderTimeout. * - \b Encoder14Restarted (Display string: 'Encoder 14 Restarted'): The event will be generated when the Encoder 14 restarts moving. + * - \b Encoder14Stopped (Display string: 'Encoder 14 Stopped'): The event will be generated when the Encoder 14 stops for longer than EncoderTimeout. * - \b Encoder15Restarted (Display string: 'Encoder 15 Restarted'): The event will be generated when the Encoder 15 restarts moving. - * - \b Line2RisingEdge (Display string: 'Line 2 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 2. - * - \b Line3RisingEdge (Display string: 'Line 3 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 3. - * - \b Line4RisingEdge (Display string: 'Line 4 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 4. - * - \b Line5RisingEdge (Display string: 'Line 5 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 5. - * - \b Line6RisingEdge (Display string: 'Line 6 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 6. - * - \b Line7RisingEdge (Display string: 'Line 7 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 7. - * - \b Line8RisingEdge (Display string: 'Line 8 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 8. - * - \b Line9RisingEdge (Display string: 'Line 9 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 9. - * - \b Line10RisingEdge (Display string: 'Line 10 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 10. - * - \b Line11RisingEdge (Display string: 'Line 11 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 11. - * - \b Line12RisingEdge (Display string: 'Line 12 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 12. - * - \b Line13RisingEdge (Display string: 'Line 13 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 13. - * - \b Line14RisingEdge (Display string: 'Line 14 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 14. - * - \b Line15RisingEdge (Display string: 'Line 15 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 15. - * - \b Line2FallingEdge (Display string: 'Line 2 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 2. - * - \b Line3FallingEdge (Display string: 'Line 3 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 3. - * - \b Line4FallingEdge (Display string: 'Line 4 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 4. - * - \b Line5FallingEdge (Display string: 'Line 5 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 5. - * - \b Line6FallingEdge (Display string: 'Line 6 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 6. - * - \b Line7FallingEdge (Display string: 'Line 7 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 7. - * - \b Line8FallingEdge (Display string: 'Line 8 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 8. - * - \b Line9FallingEdge (Display string: 'Line 9 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 9. - * - \b Line10FallingEdge (Display string: 'Line 10 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 10. - * - \b Line11FallingEdge (Display string: 'Line 11 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 11. - * - \b Line12FallingEdge (Display string: 'Line 12 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 12. - * - \b Line13FallingEdge (Display string: 'Line 13 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 13. - * - \b Line14FallingEdge (Display string: 'Line 14 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 14. - * - \b Line15FallingEdge (Display string: 'Line 15 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 15. + * - \b Encoder15Stopped (Display string: 'Encoder 15 Stopped'): The event will be generated when the Encoder 15 stops for longer than EncoderTimeout. + * - \b Error (Display string: 'Error'): Device just detected an error during the active Acquisition. + * - \b ExposureEnd (Display string: 'Exposure End'): Device just completed the exposure of one Frame (or Line). + * - \b ExposureStart (Display string: 'Exposure Start'): Device just started the exposure of one Frame (or Line). + * - \b FrameBurstEnd (Display string: 'Frame Burst End'): Device just completed the capture of a burst of Frames. + * - \b FrameBurstStart (Display string: 'Frame Burst Start'): Device just started the capture of a burst of Frames. + * - \b FrameEnd (Display string: 'Frame End'): Device just completed the capture of one Frame. + * - \b FrameStart (Display string: 'Frame Start'): Device just started the capture of one Frame. + * - \b FrameTransferEnd (Display string: 'Frame Transfer End'): Device just completed the transfer of one Frame. + * - \b FrameTransferStart (Display string: 'Frame Transfer Start'): Device just started the transfer of one Frame. + * - \b FrameTrigger (Display string: 'Frame Trigger'): Device just received a trigger to start the capture of one Frame. + * - \b FrameTriggerMissed (Display string: 'Frame Trigger Missed'): Device just missed a trigger to start the capture of one Frame. + * - \b InterfaceListChanged (Display string: 'Interface List Changed'): This enumeration value indicates an event that is fired when the list of interfaces has been updated. + * - \b InterfaceLost (Display string: 'Interface Lost'): This enumeration value indicates an event that is raised when the interface connection is lost. + * - \b Line0AnyEdge (Display string: 'Line 0 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 0. + * - \b Line0FallingEdge (Display string: 'Line 0 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 0. + * - \b Line0RisingEdge (Display string: 'Line 0 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 0. + * - \b Line1AnyEdge (Display string: 'Line 1 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 1. + * - \b Line1FallingEdge (Display string: 'Line 1 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 1. + * - \b Line1RisingEdge (Display string: 'Line 1 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 1. * - \b Line2AnyEdge (Display string: 'Line 2 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 2. + * - \b Line2FallingEdge (Display string: 'Line 2 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 2. + * - \b Line2RisingEdge (Display string: 'Line 2 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 2. * - \b Line3AnyEdge (Display string: 'Line 3 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 3. + * - \b Line3FallingEdge (Display string: 'Line 3 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 3. + * - \b Line3RisingEdge (Display string: 'Line 3 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 3. * - \b Line4AnyEdge (Display string: 'Line 4 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 4. + * - \b Line4FallingEdge (Display string: 'Line 4 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 4. + * - \b Line4RisingEdge (Display string: 'Line 4 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 4. * - \b Line5AnyEdge (Display string: 'Line 5 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 5. + * - \b Line5FallingEdge (Display string: 'Line 5 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 5. + * - \b Line5RisingEdge (Display string: 'Line 5 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 5. * - \b Line6AnyEdge (Display string: 'Line 6 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 6. + * - \b Line6FallingEdge (Display string: 'Line 6 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 6. + * - \b Line6RisingEdge (Display string: 'Line 6 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 6. * - \b Line7AnyEdge (Display string: 'Line 7 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 7. + * - \b Line7FallingEdge (Display string: 'Line 7 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 7. + * - \b Line7RisingEdge (Display string: 'Line 7 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 7. * - \b Line8AnyEdge (Display string: 'Line 8 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 8. + * - \b Line8FallingEdge (Display string: 'Line 8 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 8. + * - \b Line8RisingEdge (Display string: 'Line 8 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 8. * - \b Line9AnyEdge (Display string: 'Line 9 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 9. + * - \b Line9FallingEdge (Display string: 'Line 9 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 9. + * - \b Line9RisingEdge (Display string: 'Line 9 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 9. * - \b Line10AnyEdge (Display string: 'Line 10 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 10. + * - \b Line10FallingEdge (Display string: 'Line 10 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 10. + * - \b Line10RisingEdge (Display string: 'Line 10 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 10. * - \b Line11AnyEdge (Display string: 'Line 11 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 11. + * - \b Line11FallingEdge (Display string: 'Line 11 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 11. + * - \b Line11RisingEdge (Display string: 'Line 11 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 11. * - \b Line12AnyEdge (Display string: 'Line 12 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 12. + * - \b Line12FallingEdge (Display string: 'Line 12 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 12. + * - \b Line12RisingEdge (Display string: 'Line 12 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 12. * - \b Line13AnyEdge (Display string: 'Line 13 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 13. + * - \b Line13FallingEdge (Display string: 'Line 13 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 13. + * - \b Line13RisingEdge (Display string: 'Line 13 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 13. * - \b Line14AnyEdge (Display string: 'Line 14 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 14. + * - \b Line14FallingEdge (Display string: 'Line 14 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 14. + * - \b Line14RisingEdge (Display string: 'Line 14 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 14. * - \b Line15AnyEdge (Display string: 'Line 15 Any Edge'): The event will be generated when a Falling or Rising Edge is detected on the Line 15. + * - \b Line15FallingEdge (Display string: 'Line 15 Falling Edge'): The event will be generated when a Falling Edge is detected on the Line 15. + * - \b Line15RisingEdge (Display string: 'Line 15 Rising Edge'): The event will be generated when a Rising Edge is detected on the Line 15. + * - \b LineEnd (Display string: 'Line End'): Device just completed the capture of one Line. + * - \b LineStart (Display string: 'Line Start'): Device just started the capture of one Line. + * - \b LineTrigger (Display string: 'Line Trigger'): Device just received a trigger to start the capture of one Line. + * - \b LineTriggerMissed (Display string: 'Line Trigger Missed'): Device just missed a trigger to start the capture of one Line. * - \b Link0Trigger (Display string: 'Link 0 Trigger') * - \b Link1Trigger (Display string: 'Link 1 Trigger') * - \b Link2Trigger (Display string: 'Link 2 Trigger') @@ -18378,14 +18928,54 @@ public: * - \b Link13Trigger (Display string: 'Link 13 Trigger') * - \b Link14Trigger (Display string: 'Link 14 Trigger') * - \b Link15Trigger (Display string: 'Link 15 Trigger') - * - \b InterfaceListChanged (Display string: 'Interface List Changed'): This enumeration value indicates an event that is fired when the list of interfaces has been updated. - * - \b InterfaceLost (Display string: 'Interface Lost'): This enumeration value indicates an event that is raised when the interface connection is lost. - * - \b DeviceListChanged (Display string: 'Device List Changed'): This enumeration value indicates an event that is fired when the list of devices has been updated. - * - \b DeviceLost (Display string: 'Device Lost'): This enumeration value indicates an event that is raised when the local host looses connection to the physical(remote) device. - * - \b BufferTooSmall (Display string: 'Buffer Too Small'): This enumeration value indicates an event that is raised when the buffer was too small to receive the expected amount of data. - * - \b BuffersDiscarded (Display string: 'Buffers Discarded'): This enumeration value indicates an event that is raised when buffers discared by GenTL or device. This event could optionally carry two numeric child data fields EventBuffersDiscardedDeviceCount and EventBuffersDiscardedProducerCount. - * - \b BuffersDiscardedDeviceCount (Display string: 'Buffers Discarded Device Count'): This enumeration value indicates the number of buffers discarded by the device since last fired instance of this event (the producer would get to know about this for example by observing a gap in the block_id sequence). - * - \b BuffersDiscardedProducerCount (Display string: 'Buffers Discarded Producer Count'): This enumeration value indicates the number of buffers discarded by the producer since last fired instance of this event (this would happen e.g. if there are no free buffers available or if given buffer handling mode requires discarding old buffers etc.). + * - \b LinkSpeedChange (Display string: 'Link Speed Change'): The event will be generated when the link speed has changed. + * - \b LinkTrigger0 (Display string: 'Link Trigger 0'): The event will be generated when a Rising Edge is detected on the LinkTrigger 0. + * - \b LinkTrigger1 (Display string: 'Link Trigger 1'): The event will be generated when a Rising Edge is detected on the LinkTrigger 1. + * - \b PrimaryApplicationSwitch (Display string: 'Primary Application Switch'): The event will be generated when a primary application switchover has been granted (GigE Vision Specific). + * - \b SequencerSetChange (Display string: 'Sequencer Set Change'): Device sequencer set has changed. + * - \b Stream0TransferBlockEnd (Display string: 'Stream 0 Transfer Block End'): Device just completed the transfer of one Block. + * - \b Stream0TransferBlockStart (Display string: 'Stream 0 Transfer Block Start'): Device just started the transfer of one Block. + * - \b Stream0TransferBlockTrigger (Display string: 'Stream 0 Transfer Block Trigger'): Device just received a trigger to start the transfer of one Block. + * - \b Stream0TransferBurstEnd (Display string: 'Stream 0 Transfer Burst End'): Device just completed the transfer of a burst of Blocks. + * - \b Stream0TransferBurstStart (Display string: 'Stream 0 Transfer Burst Start'): Device just started the transfer of a burst of Blocks. + * - \b Stream0TransferEnd (Display string: 'Stream 0 Transfer End'): Device just completed the transfer of one or many Blocks. + * - \b Stream0TransferOverflow (Display string: 'Stream 0 Transfer Overflow'): Device transfer queue overflowed. + * - \b Stream0TransferPause (Display string: 'Stream 0 Transfer Pause'): Device just paused the transfer. + * - \b Stream0TransferResume (Display string: 'Stream 0 Transfer Resume'): Device just resumed the transfer. + * - \b Stream0TransferStart (Display string: 'Stream 0 Transfer Start'): Device just started the transfer of one or many Blocks. + * - \b Test (Display string: 'Test'): The test event will be generated when the device receives the TestEventGenerate command (EventNotification for the Test event is always On). + * - \b Timer0End (Display string: 'Timer 0 End'): The event will be generated when Timer 0 ends counting. + * - \b Timer0Start (Display string: 'Timer 0 Start'): The event will be generated when Timer 0 starts counting. + * - \b Timer1End (Display string: 'Timer 1 End'): The event will be generated when Timer 1 ends counting. + * - \b Timer1Start (Display string: 'Timer 1 Start'): The event will be generated when Timer 1 starts counting. + * - \b Timer2End (Display string: 'Timer 2 End'): The event will be generated when Timer 2 ends counting. + * - \b Timer2Start (Display string: 'Timer 2 Start'): The event will be generated when Timer 2 starts counting. + * - \b Timer3End (Display string: 'Timer 3 End'): The event will be generated when Timer 3 ends counting. + * - \b Timer3Start (Display string: 'Timer 3 Start'): The event will be generated when Timer 3 starts counting. + * - \b Timer4End (Display string: 'Timer 4 End'): The event will be generated when Timer 4 ends counting. + * - \b Timer4Start (Display string: 'Timer 4 Start'): The event will be generated when Timer 4 starts counting. + * - \b Timer5End (Display string: 'Timer 5 End'): The event will be generated when Timer 5 ends counting. + * - \b Timer5Start (Display string: 'Timer 5 Start'): The event will be generated when Timer 5 starts counting. + * - \b Timer6End (Display string: 'Timer 6 End'): The event will be generated when Timer 6 ends counting. + * - \b Timer6Start (Display string: 'Timer 6 Start'): The event will be generated when Timer 6 starts counting. + * - \b Timer7End (Display string: 'Timer 7 End'): The event will be generated when Timer 7 ends counting. + * - \b Timer7Start (Display string: 'Timer 7 Start'): The event will be generated when Timer 7 starts counting. + * - \b Timer8End (Display string: 'Timer 8 End'): The event will be generated when Timer 8 ends counting. + * - \b Timer8Start (Display string: 'Timer 8 Start'): The event will be generated when Timer 8 starts counting. + * - \b Timer9End (Display string: 'Timer 9 End'): The event will be generated when Timer 9 ends counting. + * - \b Timer9Start (Display string: 'Timer 9 Start'): The event will be generated when Timer 9 starts counting. + * - \b Timer10End (Display string: 'Timer 10 End'): The event will be generated when Timer 10 ends counting. + * - \b Timer10Start (Display string: 'Timer 10 Start'): The event will be generated when Timer 10 starts counting. + * - \b Timer11End (Display string: 'Timer 11 End'): The event will be generated when Timer 11 ends counting. + * - \b Timer11Start (Display string: 'Timer 11 Start'): The event will be generated when Timer 11 starts counting. + * - \b Timer12End (Display string: 'Timer 12 End'): The event will be generated when Timer 12 ends counting. + * - \b Timer12Start (Display string: 'Timer 12 Start'): The event will be generated when Timer 12 starts counting. + * - \b Timer13End (Display string: 'Timer 13 End'): The event will be generated when Timer 13 ends counting. + * - \b Timer13Start (Display string: 'Timer 13 Start'): The event will be generated when Timer 13 starts counting. + * - \b Timer14End (Display string: 'Timer 14 End'): The event will be generated when Timer 14 ends counting. + * - \b Timer14Start (Display string: 'Timer 14 Start'): The event will be generated when Timer 14 starts counting. + * - \b Timer15End (Display string: 'Timer 15 End'): The event will be generated when Timer 15 ends counting. + * - \b Timer15Start (Display string: 'Timer 15 Start'): The event will be generated when Timer 15 starts counting. * * \note Depending on the device some of these values might not be supported and especially when working with third party devices there might be custom values which are not listed here. * To get a complete and reliable list of supported values at runtime an application should therefore call mvIMPACT::acquire::EnumPropertyI::getTranslationDictStrings() or one of the other functions dealing with translation dictionaries for enumerated properties. diff --git a/Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire_GenICam_CustomCommands.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire_GenICam_CustomCommands.h similarity index 96% rename from Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire_GenICam_CustomCommands.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire_GenICam_CustomCommands.h index 1b648f43..c997288d 100644 --- a/Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire_GenICam_CustomCommands.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire_GenICam_CustomCommands.h @@ -1,12 +1,15 @@ //----------------------------------------------------------------------------- -// (C) Copyright 2005 - 2021 by MATRIX VISION GmbH +// @description: Impact Acquire +// @copyright: (C) Copyright 2005 - 2023 by Balluff GmbH +// @authors: APIs and drivers development team at Balluff GmbH +// @initial date: 2005 // -// This software is provided by MATRIX VISION GmbH "as is" +// This software is provided by Balluff GmbH "as is" // and any express or implied warranties, including, but not limited to, the // implied warranties of merchantability and fitness for a particular purpose // are disclaimed. // -// In no event shall MATRIX VISION GmbH be liable for any direct, +// In no event shall Balluff GmbH be liable for any direct, // indirect, incidental, special, exemplary, or consequential damages // (including, but not limited to, procurement of substitute goods or services; // loss of use, data, or profits; or business interruption) however caused and @@ -61,7 +64,7 @@ namespace GenICam * supports the mvIMPACT::acquire::GenICam::mvCustomData.mvCustomCommandBuffer feature. If the * feature is not supported an exception will be raised! * - * This class will allow to create various special commands understood by MATRIX VISION GmbH devices. + * This class will allow to create various special commands understood by some MATRIX VISION and Balluff imaging devices. * For example an application can modify parameters in a running sequencer program without stopping the * acquisition engine and/or the sequencer program * (see mvIMPACT::acquire::GenICam::SequencerControl and the corresponding use cases for details). @@ -233,7 +236,7 @@ namespace GenICam * \endcode * \endif * - * Apart from modifying sequencer sets at runtime some MATRIX VISION GmbH devices support the so called Smart Frame Recall feature. + * Apart from modifying sequencer sets at runtime some MATRIX VISION and Balluff imaging devices support the so called Smart Frame Recall feature. * For more information about the feature itself please refer to the corresponding use case in the product documentation. There is also a C++ example * called \b GenICamSmartFrameRecallUsage.cpp which can be read to get a first glimpse. The source code and the documentation of this example can be found in the C++ * version of this documentation. The mvIMPACT::acquire::GenICam::CustomCommandGenerator provides functions to request a full resolution @@ -487,13 +490,16 @@ protected: } return value; } - mvCustomData cd_; + O32HostByteOrderEvaluator O32HostByteOrderEvaluator_; auto_array_ptr commandBuffer_; size_t currentCommandBufferOffset_; int16_type currentCommandRequestID_; int16_type mvCustomCommandInterpreterVersionMajor_; int16_type mvCustomCommandInterpreterVersionMinor_; + PropertyI64 mvCustomCommandInterpreterVersionMajorProperty_; + PropertyI64 mvCustomCommandInterpreterVersionMinorProperty_; + PropertyS mvCustomCommandBufferProperty_; bool checkMinInterpreterVersion( int16_type versionMajor, int16_type versionMinor ) const { @@ -509,7 +515,7 @@ protected: } void prepareCommandBuffer( void ) { - commandBuffer_.realloc( cd_.mvCustomCommandBuffer.binaryDataBufferMaxSize() ); + commandBuffer_.realloc( mvCustomCommandBufferProperty_.binaryDataBufferMaxSize() ); memset( commandBuffer_.get(), 0, commandBuffer_.parCnt() ); currentCommandBufferOffset_ = sizeof( CustomCommandProtocolHeader ); } @@ -557,7 +563,7 @@ protected: const std::string bufS( pBuf, bufSize ); try { - cd_.mvCustomCommandBuffer.writeBinary( bufS ); + mvCustomCommandBufferProperty_.writeBinary( bufS ); } catch( const ImpactAcquireException& e ) { @@ -576,12 +582,20 @@ public: /// mvIMPACT::acquire::FunctionInterface::getAvailableSettings, new /// settings can be created with the function /// mvIMPACT::acquire::FunctionInterface::createSetting - const std::string& settingName = "Base" ) : cd_( pDev, settingName ), - O32HostByteOrderEvaluator_(), commandBuffer_(), currentCommandBufferOffset_( 0 ), + const std::string& settingName = "Base" ) : O32HostByteOrderEvaluator_(), + commandBuffer_(), currentCommandBufferOffset_( 0 ), currentCommandRequestID_( 0 ) { - mvCustomCommandInterpreterVersionMajor_ = static_cast( cd_.mvCustomCommandInterpreterVersionMajor.read() ); - mvCustomCommandInterpreterVersionMinor_ = static_cast( cd_.mvCustomCommandInterpreterVersionMinor.read() ); + pDev->validateInterfaceLayout( dilGenICam ); + mvIMPACT::acquire::DeviceComponentLocator locator( pDev, mvIMPACT::acquire::dltSetting, settingName ); + locator.bindSearchBase( locator.searchbase_id(), "Camera/GenICam/mvCustomData" ); + + locator.bindComponent( mvCustomCommandInterpreterVersionMajorProperty_, "mvCustomCommandInterpreterVersionMajor" ); + locator.bindComponent( mvCustomCommandInterpreterVersionMinorProperty_, "mvCustomCommandInterpreterVersionMinor" ); + locator.bindComponent( mvCustomCommandBufferProperty_, "mvCustomCommandBuffer" ); + + mvCustomCommandInterpreterVersionMajor_ = static_cast( mvCustomCommandInterpreterVersionMajorProperty_.read() ); + mvCustomCommandInterpreterVersionMinor_ = static_cast( mvCustomCommandInterpreterVersionMinorProperty_.read() ); if( mvCustomCommandInterpreterVersionMajor_ > 2 ) { // this interpreter currently does not support versions > 2 @@ -596,9 +610,6 @@ public: * * \since 2.18.0 * - * \return - * - \b mvIMPACT::acquire::DMR_NO_ERROR if successful. - * - A negative error code of type \b mvIMPACT::acquire::TDMR_ERROR otherwise. */ void discardCommandBuffer() { @@ -641,7 +652,7 @@ public: /// See mvIMPACT::acquire::GenICam::ChunkDataControl for details. unsigned int identifier = 0 ) { - if( !cd_.mvCustomCommandBuffer.isValid() ) + if( !mvCustomCommandBufferProperty_.isValid() ) { return DMR_FEATURE_NOT_AVAILABLE; } @@ -1018,7 +1029,7 @@ public: */ unsigned int commandBufferSize( void ) const { - return cd_.mvCustomCommandBuffer.binaryDataBufferMaxSize(); + return mvCustomCommandBufferProperty_.binaryDataBufferMaxSize(); } /// \brief Returns the amount of bytes of the command buffer currently used(thus the amount of bytes that await sending) for this device in bytes. /** diff --git a/Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire_GenICam_FileStream.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire_GenICam_FileStream.h similarity index 96% rename from Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire_GenICam_FileStream.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire_GenICam_FileStream.h index a49f0aec..21b6eae6 100644 --- a/Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire_GenICam_FileStream.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire_GenICam_FileStream.h @@ -1,12 +1,15 @@ //----------------------------------------------------------------------------- -// (C) Copyright 2005 - 2021 by MATRIX VISION GmbH +// @description: Impact Acquire +// @copyright: (C) Copyright 2005 - 2023 by Balluff GmbH +// @authors: APIs and drivers development team at Balluff GmbH +// @initial date: 2005 // -// This software is provided by MATRIX VISION GmbH "as is" +// This software is provided by Balluff GmbH "as is" // and any express or implied warranties, including, but not limited to, the // implied warranties of merchantability and fitness for a particular purpose // are disclaimed. // -// In no event shall MATRIX VISION GmbH be liable for any direct, +// In no event shall Balluff GmbH be liable for any direct, // indirect, incidental, special, exemplary, or consequential damages // (including, but not limited to, procurement of substitute goods or services; // loss of use, data, or profits; or business interruption) however caused and @@ -45,8 +48,8 @@ namespace acquire namespace GenICam { -/** \defgroup GenICamInterfaceFileStream GenICam interface layout(file stream) - * \brief Classes and functions that will be available if the device is used with the \a GenICam interface layout. +/** \defgroup GenICamInterfaceFileStream GenICam Interface Layout (File Stream) + * \brief Classes and functions that will be available if the device is used with the \a %GenICam interface layout. * * This group contains classes and functions that will be available if the device is used * with the mvIMPACT::acquire::dilGenICam interface layout. @@ -788,6 +791,24 @@ public: this->init( &m_streambuf ); this->open( pDev, pFileName, mode ); } +#elif defined (__APPLE__) + /// \brief Constructs a new \b mvIMPACT::acquire::GenICam::IDevFileStreamBase object. + IDevFileStreamBase() : istream_type( 0 ), m_streambuf() + { + this->init( &m_streambuf ); + } + /// \brief Constructs a new \b mvIMPACT::acquire::GenICam::IDevFileStreamBase object. + IDevFileStreamBase( + /// A pointer to a mvIMPACT::acquire::Device object obtained from a mvIMPACT::acquire::DeviceManager object. + mvIMPACT::acquire::Device* pDev, + /// Name of the file to open + const char* pFileName, + /// File open mode + std::ios_base::openmode mode = std::ios_base::in ) : istream_type( 0 ), m_streambuf() + { + this->init( &m_streambuf ); + this->open( pDev, pFileName, mode ); + } #elif defined (__GNUC__) /// \brief Constructs a new \b mvIMPACT::acquire::GenICam::IDevFileStreamBase object. IDevFileStreamBase() : istream_type(), m_streambuf() diff --git a/Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire_GenICam_LensControl.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire_GenICam_LensControl.h similarity index 98% rename from Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire_GenICam_LensControl.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire_GenICam_LensControl.h index 291b0c9b..3e6bd099 100644 --- a/Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire_GenICam_LensControl.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire_GenICam_LensControl.h @@ -1,12 +1,15 @@ //----------------------------------------------------------------------------- -// (C) Copyright 2005 - 2021 by MATRIX VISION GmbH +// @description: Impact Acquire +// @copyright: (C) Copyright 2005 - 2023 by Balluff GmbH +// @authors: APIs and drivers development team at Balluff GmbH +// @initial date: 2005 // -// This software is provided by MATRIX VISION GmbH "as is" +// This software is provided by Balluff GmbH "as is" // and any express or implied warranties, including, but not limited to, the // implied warranties of merchantability and fitness for a particular purpose // are disclaimed. // -// In no event shall MATRIX VISION GmbH be liable for any direct, +// In no event shall Balluff GmbH be liable for any direct, // indirect, incidental, special, exemplary, or consequential damages // (including, but not limited to, procurement of substitute goods or services; // loss of use, data, or profits; or business interruption) however caused and @@ -153,7 +156,7 @@ protected: #if !DOXYGEN_SHOULD_SKIP_THIS /// \brief Returns the result of a command issued to the lens or the lens adapter. /** - * \return The string value which has been send as answer to the issued command. + * \return The string value which has been sent as answer to the issued command. */ std::string getCommandResult( const std::string& cmd, const std::chrono::milliseconds maxPollingTime_ms = std::chrono::milliseconds( 5000 ), const int delimiterCount = 2 ) const { @@ -546,9 +549,6 @@ private: fStopMax = returnValueToFStopValue( seglist[3] ); } /// \brief Reads the current focus value from the device. - /** - * \return The value the focus is currently set to. - */ void readFocusLimits( int& focusMin, int& focusMax, unsigned int timeout_ms ) const { std::string resultToParse = sendCommandAndGetResult( prepareCommand( "fp", delimiter_ ), "OK", std::chrono::milliseconds( timeout_ms ) ); diff --git a/Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire_helper.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire_helper.h similarity index 95% rename from Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire_helper.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire_helper.h index 0bba1221..d2d77bdb 100644 --- a/Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire_helper.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvIMPACT_CPP/mvIMPACT_acquire_helper.h @@ -1,12 +1,15 @@ //----------------------------------------------------------------------------- -// (C) Copyright 2005 - 2021 by MATRIX VISION GmbH +// @description: Impact Acquire +// @copyright: (C) Copyright 2005 - 2023 by Balluff GmbH +// @authors: APIs and drivers development team at Balluff GmbH +// @initial date: 2005 // -// This software is provided by MATRIX VISION GmbH "as is" +// This software is provided by Balluff GmbH "as is" // and any express or implied warranties, including, but not limited to, the // implied warranties of merchantability and fitness for a particular purpose // are disclaimed. // -// In no event shall MATRIX VISION GmbH be liable for any direct, +// In no event shall Balluff GmbH be liable for any direct, // indirect, incidental, special, exemplary, or consequential damages // (including, but not limited to, procurement of substitute goods or services; // loss of use, data, or profits; or business interruption) however caused and @@ -46,6 +49,7 @@ namespace mvIMPACT { namespace acquire { +/// \namespace mvIMPACT::acquire::helper This namespace contains classes and functions providing convenience access to some or the otherwise more complicated API features. A C++11 or higher compliant compiler is required to use them! namespace helper { @@ -382,11 +386,11 @@ private: * * \attention * An application shall \b NEVER store the raw pointer (mvIMPACT::acquire::Request*) to - * requests returned wrapped in std::shared_ptr objects! This would jeopardize + * requests returned wrapped in std::shared_ptr objects! This would jeopardize * auto-unlocking of request and thus more or less the purpose of this class. Instead - * always store the std::shared_ptr objects directly. When no longer needed simply + * always store the std::shared_ptr objects directly. When no longer needed simply * dump them. Keeping them all will result in the acquisition engine to run out of buffers. - * It can only re-use mvIMPACT::acquire::Request when no more std::shared_ptr + * It can only re-use mvIMPACT::acquire::Request when no more std::shared_ptr * references to it exist. On the other hand make sure you did drop all references to requests before * the \b mvIMPACT::acquire::helper::RequestProvider instance that did return them goes out of * scope. Not doing this will result in undefined behavior! @@ -501,12 +505,12 @@ public: * Will start the acquisition by creating an internal thread. To get access to the data that will be acquired from the device an application passes * a callback function and a variable list of arbitrary parameters to this function. Whenever a request becomes ready this function then will be * called (from within the internal thread's context!). What kind of function is passed is completely up to the application. The only restriction - * for the functions signature is that the first parameter must be std::shared_ptr pRequest. + * for the functions signature is that the first parameter must be std::shared_ptr pRequest. * * \attention Unlocking will be done automatically when the last reference to the \c std::shared_ptr goes out of * scope. As a consequence do \b NOT store the raw pointer to the mvIMPACT::acquire::Request object stored by the \c std::shared_ptr but always - * the std::shared_ptr\ itself in order not to break reference counting. Do not call \b mvIMPACT::acquire::Request::unlock - * for requests returned wrapped in a std::shared_ptr\ (you can but it is not necessary). + * the std::shared_ptr\ itself in order not to break reference counting. Do not call \b mvIMPACT::acquire::Request::unlock + * for requests returned wrapped in a std::shared_ptr\ (you can but it is not necessary). * * If the acquisition is already running then calling this function will raise an exception of type \b mvIMPACT::acquire::ImpactAcquireException. * @@ -616,6 +620,18 @@ public: // 'make_unique' was not introduced until C++14 pCaptureThread_ = std::unique_ptr( new std::thread( &RequestProvider::captureThreadStub, this, pFn, params... ) ); } + /// \brief Returns the current state of the acquisition engine. + /** + * \return + * - true when the internal acquisition thread is running + * - false otherwise + * + * \since 2.50.0 + */ + bool isAcquisitionRunning( void ) const + { + return boRunCaptureThread_; + } /// \brief Starts the acquisition. /** * Will start the acquisition by creating an internal thread. To get access to captured blocks of data (typically images) an application can periodically call @@ -713,7 +729,7 @@ public: } /// \brief Waits for the next request to become ready and will return a shared_ptr instance to it. /** - * Waits for the next request to become ready and will return a std::shared_ptr\ instance to it effectively + * Waits for the next request to become ready and will return a std::shared_ptr\ instance to it effectively * removing it from the internal queue. This is a blocking function. It will return not unless either a \b mvIMPACT::acquire::Request * object became ready, the specified timeout did elapse or \b mvIMPACT::acquire::helper::RequestProvider::terminateWaitForNextRequest has been called from a * different thread. @@ -738,7 +754,7 @@ public: } /// \brief Waits for the next request to become ready and will return a shared_ptr instance to it. /** - * Waits for the next request to become ready and will return a std::shared_ptr\ instance to it effectively + * Waits for the next request to become ready and will return a std::shared_ptr\ instance to it effectively * removing it from the internal queue. This is a blocking function. It will return not unless either a mvIMPACT::acquire::Request * object became ready, the specified timeout did elapse or \b mvIMPACT::acquire::helper::RequestProvider::terminateWaitForNextRequest has been called from a * different thread. @@ -747,7 +763,7 @@ public: * \b mvIMPACT::acquire::helper::RequestProvider::acquisitionStart, \n * \b mvIMPACT::acquire::helper::RequestProvider::terminateWaitForNextRequest * - * \return A std::shared_ptr\ either holding a valid pointer to a mvIMPACT::acquire::Request object or \c nullptr if + * \return A std::shared_ptr\ either holding a valid pointer to a mvIMPACT::acquire::Request object or \c nullptr if * no data became ready and either \b mvIMPACT::acquire::helper::RequestProvider::terminateWaitForNextRequest has been called from another * thread or the specified timeout has elapsed. */ @@ -761,7 +777,7 @@ public: } /// \brief Waits for the next request to become ready and will return a shared_ptr instance to it. /** - * Waits for the next request to become ready and will return a std::shared_ptr\ instance to it effectively + * Waits for the next request to become ready and will return a std::shared_ptr\ instance to it effectively * removing it from the internal queue. This is a blocking function. It will return not unless either a mvIMPACT::acquire::Request * object became ready or \b mvIMPACT::acquire::helper::RequestProvider::terminateWaitForNextRequest has been called from a * different thread. @@ -770,7 +786,7 @@ public: * \b mvIMPACT::acquire::helper::RequestProvider::acquisitionStart, \n * \b mvIMPACT::acquire::helper::RequestProvider::terminateWaitForNextRequest * - * \return A std::shared_ptr\ either holding a valid pointer to a mvIMPACT::acquire::Request object or \c nullptr if + * \return A std::shared_ptr\ either holding a valid pointer to a mvIMPACT::acquire::Request object or \c nullptr if * no data became ready and \b mvIMPACT::acquire::helper::RequestProvider::terminateWaitForNextRequest has been called from another * thread. */ diff --git a/Cigarette/MvIMPACT/mvIMPACT_CPP/versionInfo.txt b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvIMPACT_CPP/versionInfo.txt similarity index 93% rename from Cigarette/MvIMPACT/mvIMPACT_CPP/versionInfo.txt rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvIMPACT_CPP/versionInfo.txt index 5f5b5578..cb55d57c 100644 --- a/Cigarette/MvIMPACT/mvIMPACT_CPP/versionInfo.txt +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvIMPACT_CPP/versionInfo.txt @@ -3,11 +3,617 @@ =============================================================================================== Date: Release: Changes: Affected modules, files or packages: -------------------------------------------------------------------------------------------------------------------------------------------- -03.05.2021 2.43.0 +06.12.2023 3.0.2 + NEW FEATURES: + - The Linux installation script is able to compile the Python wrapper during the (install_ImpactAcquire.sh) + installation process, if desired. + + BUGS FIXED: + - Race condition: When a GEV device did disappear and later reappear (e.g. when (mvGenTLProducer.cti) + calling the 'DeviceReset' function ) while keeping the device driver instance open + and calling the 'updateDeviceList' function in parallel could result to write access + to the device not being possible anymore. + - Unplugging an open GenICam device in ImpactControlCenter then selecting another (mvGenTLConsumer-lib) + device and switching back to the unplugged one did result in a crash. + - Devices that don't support the properties 'DeviceModelName' or 'DeviceFamilyName' (DeviceConfigure) + do no longer cause 'DeviceConfigure' to crash + + CHANGED BEHAVIOUR: + - LabVIEW_acquire *.msi packages will no longer be shipped separately but have been (all shipped MSI based packages) + integrated as an optional component into the Impact Acquire installation packages. + Existing previous packages will be removed automatically. + - Due to the new installation mechanism introduced within Python 3.12, the Impact (Python API) + Acquire Python API can only be built for Python versions newer than 3.5. + +22.10.2023 3.0.1 + UPDATES: + - All signed files are signed with an updated DigiCert EV certificate now, reflecting (all shipped MSI-based packages) + the new company name 'Balluff MV GmbH'. Kernel mode drivers will keep using the + previous certificate until actual changes in the sources become necessary. + + CHANGED BEHAVIOUR: + - From this version onwards, there will be a single installation package for all (all shipped packages) + devices supported by this framework. See migration guide for details. + - Color correction (Color+) and gamma are enabled on either the device or the host (ImpactControlCenter) + + BUGS FIXED: + - The NDIS filter driver is installed correctly during the installation for 64-bit (ImpactAcquire*.exe) + versions of Windows 7 or below. + (Bug introduced in 3.0.0) + - Rare assertions (e.g. when updating the device list) stating that a (ImpactControlCenter) + 'wxPropertyGridItem with the name "XYZ" already exists'. + - On Linux hosts with an ARM CPU the performance when converting pixel formats has (Linux packages for ARM hosts) + been improved by (re)enabling OpenMP for the conversion routines. + - Some message dialogs did confuse the dialog's caption with the actual message. (IPConfigure) + (Bug introduced in 2.48.0) + +13.10.2023 3.0.0 + NEW FEATURES: + - New properties 'DeviceModelName' and 'DeviceFamilyName' added to the device class (all shipped packages) + or feature list. These supersede the properties 'Product' and 'Family' which became + invisible for backward compatibility. + - If a network interface has multiple IP addresses in different subnets and a GEV (IPConfigure, mvGenTLProducer.cti) + device resides in one of these subnets, an IP address from that subnet instead of + that from the first subnet will be assigned to the device when performing + "auto-assign IPv4 address". + + UPDATES: + - Updated integrated U3VBootProgrammer to 0.54.3650.2. (mvGenTLProducer.cti) + - The Impact Acquire Python API can now be built for Python 3.12. (Python API) + + CHANGED BEHAVIOUR: + - From this version onwards, various things in the API have been declared deprecated (all shipped packages) + and quite a few other changes have been applied to the SDK. Have a good look at the + corresponding sections in the migration guide! + - From this version onwards, third party GenICam imaging devices require a license when (all shipped packages for GenICam compliant devices) + they shall be used with Impact Acquire. Without a license, an overlay will be added + to each image once 200 have been captured. If you are interested in using third party + imaging devices with this SDK, please get in touch with us. + - The BVS CA-BN (mvBlueNAOS) firmware files have been renamed to reflect the (mvBlueNAOS.*-lib -> BVS_CA-BN.*.lib) + Balluff camera type name. There is no functional or API change for the user. + - From this version onwards, the official support for Python 2.x will stop. This became (Python API) + necessary because more recent Python versions of Python required a different + installation approach and maintaining both seemed not to make sense anymore. + - The deprecated Linux installer options -ogev, -ou3v and -onaos have been removed (install_mvBlueFOX.sh, install_mvBlueFOX_ARM.sh) + (along with their log versions). A new option -r (--remove) has been added to (install_mvGenTL_Acquire.sh, install_mvGenTL_Acquire_ARM.sh) + uninstall a previous installation for ALL devices, if found. (install_mvVirtualDevice.sh) + + BUGS FIXED: + - On Linux hosts, GigE Vision ACTION_CMD responses have not been fetched. (mvGenTLProducer.cti) + - When building the Impact Acquire Python API on Windows, an error indicating that the (Python API) + required Microsoft Visual C++ Compiler is not found might appear even if the + compiler exists on the system. + - In IPConfigure the error -1007 might occure when there are more than one network (IPConfigure) + interfaces on the system. + (Bug introduced in 2.50.0) + - If a network interface has multiple IP addresses, only the first IP address is shown (IPConfigure, mvGenTLProducer.cti) + and can be selected when manually assigning a temporary IPv4 address to a GEV device. + +28.08.2023 2.50.1 + NEW FEATURES: + - Calling DSGetBufferInfo( ..., BUFFER_INFO_DATA_LARGER_THAN_BUFFER, ... ) no longer (mvGenTLProducer.cti) + returns GC_ERR_NOT_IMPLEMENTED but the actual information requested. (mvGenTLProducer.PCIe.cti) + - GenDC data streams in 'GenDC Container Mode' can be captured from U3V devices now. (mvGenTLProducer.cti) + + UPDATES: + - The logs now contain the local time instead of the OS-dependent time stamp in (all shipped packages) + milliseconds that was displayed in previous packages. The previous behavior can be + configured for individual log files in mvDebugFlags.mvd. + - Improved timeout handling when sending GigE Vision ACTION_CMDs and waiting for (mvGenTLProducer.cti) + responses. + - mvBlueNAOS Linux kernel module now compiles and works on aarch64 (mvpci Linux kernel module) + Raspberry Pi OS/Raspbian systems. + + BUGS FIXED: + - BSOD when resend commands were triggered by the receive path either on a LAG (mvGigECapture2.sys, version 3.3.1.76) + group or in combination with various versions of Wireshark or similar network + sniffers. + - When capturing GigE Vision Multipart or Multizone data using the NDIS 6.x based (mvGigECapture2.sys, version 3.3.1.76) + filter driver every request was tagged as being incomplete. + (Bug introduced in 2.50.0) + - Various compilation issues appeared on Ubuntu based distributions older than (all shipped Linux packages) + version 20.04. + - Storage of flat field correction data for an image depth of more than eight bits (all shipped packages) + was corrected. + +28.07.2023 2.50.0 + NEW FEATURES: + - mvIMPACT Acquire is now also delivered for macOS 12 ARM64 platforms. Initially, only (additional macOS package) + GEV devices are supported. + - Initial version with GEV 2.2 support. (mvGenTLProducer.cti) + (mvGigECapture2.sys, version 3.3.0.74) + - Migration to version 1.6 of the GenICam GenTL spec. (mvGenTLProducer.cti) + (mvGenTLConsumer-lib) + - GenDC data streams can be captured from GEV devices now. (mvGenTLProducer.cti) + (mvGenTLConsumer-lib) + - New properties added 'BufferPart::regionID', 'BufferPart::groupID'. (all shipped packages) + - The library learned to display Mono32 buffers. (mvDisplay-lib) + - The application learned to display Mono32 buffers. (wxPropView) + - The library learned to generate test images in ibpfMono32. (mvVirtualDevice-lib) + - In case the network adapter has multiple IP addresses in different subnets, the (mvGenTLProducer.cti) + library will automatically decide and bind the GEV device to the interface subnet + that fits the best. + + CHANGED BEHAVIOUR: + - The enum 'TBufferPartDataType' has been moved from (C/C++ API) + 'DriverBase/Include/mvDriverBaseEnums.h' to 'common/TBufferPartDataType.h'. + Some typedefs have been moved from 'mvPropHandling/Include/mvPropHandlingDatatypes.h' + to 'common/mvCommonDataTypes.h'. + - Internal migration to gcc 5.5.0 / glibc 2.21 for all Linux platforms. (C++ API, all shipped Linux packages) + N.B. In the GCC 5.1 release libstdc++ introduced a new library ABI that includes new + implementations of std::string and std::list. These changes were necessary to + conform to the 2011 C++ standard which forbids Copy-On-Write strings and requires + lists to keep track of their size. The minimum system requirements for using + mvIMPACT Acquire have therefore been changed to include systems built with at + least gcc 5.5 and glibc 2.21. + - Internal migration to Visual Studio 2019 for all Windows platforms. (all shipped Windows packages) + The whole SDK will be built using Visual Studio 2019 now. This might require some + changes for private setup routines. See corresponding sections in the documentation. + - From this version onwards on Windows all the installation packages will be shipped (mvVirtualDevice*.exe) + as an executable package. The underlying technology will still be the same but the (mvBlueFOX*.exe) + is wrapper inside a bootstrapper now. This results in 'per user' installations not + being supported anymore. + - Improved robustness of packet size negotiation for GEV devices, (mvGenTLProducer.cti) + depending on the read back value after packet size request. + - Action Commands can now be sent via limited broadcast address(255.255.255.255) (mvGenTLProducer.cti) + + UPDATES: + - Migration to version 3.4.1 of the GenApi runtime. (all shipped packages for GenICam compliant devices) + + BUGS FIXED: + - mvVirtualDevice instances did report an incorrect payload size when 'BufferPartCount' (mvVirtualDevice-lib) + was greater than 1. + - On some Linux systems in the applications 'mvIPConfigure' and 'wxPropView' some of (Linux: wxPropView, mvIPConfigure) + the text and icon colours were unsuitable when using dark theme. + - Setting up the stream channel for a GEV device now writes the destination (mvGenTLProducer.cti) + port register last since this is a hard requirement in the GigE Vision specification. + - Support for the PFNC format 'Coord3D_C32f' was incomplete while 'Coord3D_A32f' and (mvGenTLConsumer-lib) + 'Coord3D_B32f' could be handled correctly. + - GEV devices streaming multi-part data starting with a non-2D part could cause (mvGenTLConsumer-lib) + crashes. + - When opening a GEV stream channel the destination port is actually the last register (mvGenTLProducer.cti) + written to. + - After accessing a mvBlueFOX3 camera on a Linux host using a producer from another (mvGenTLProducer.cti) + manufacturer the camera was sometimes left in a state where it was no longer + recognizable as a U3V device by the MATRIX VISION producer. This is no longer + the case.. + - Creating a compressed video stream using FFmpeg with a pixel format of YUV422Packed (mvDeviceManager-lib) + for encoding did result in swapped red and blue color components in the resulting + video stream. + (Bug introduced in 2.46.0) + - The BUFFER_INFO_IS_QUEUED query did sometimes return false even though the buffer was (mvGenTLProducer.cti) + indeed inside the acquisition engine. This could even result in deadlocks when 3rd + party consumers used this information to decide whether to re-queue a buffer or not. + - Due to a regression in wxWidgets the file selector editors in wxPropViews property (wxPropView) + grid did contain the file name without the path. + (Bug introduced in 2.49.0) + - Correction of algorithm to convert pixel format YUV422Packed to YUV420P (all shipped packages) + within the 'ContinuousCaptureFFmpeg' example. + +03.03.2023 2.49.0 + NEW FEATURES: + - New C++ and C# example added to all packages: 'FirmwareUpdate'. (all shipped packages) + + CHANGED BEHAVIOUR: + - FirmwareUpdater class (introduced in 2.41.0) moved from mvIMPACT::acquire::labs to (all shipped packages) + mvIMPACT::acquire namespace. + + UPDATES: + - The online version of the documentation for mvIMPACT Acquire as well as product (All Doxygen based HTML documentation) + manuals make use of the 'Doxygen Awesome' project now + (https://jothepro.github.io/doxygen-awesome-css/). + - Internal migration to libexpat 2.5.0. (all shipped packages) + - Migration to wxWidgets 3.2.2.1 (Windows only). All wxWidgets based applications (all shipped MSI based packages) + are built using wxWidgets 3.2.2.1 now. + - mvBlueNAOS Linux kernel module now compiles and works with kernel versions up to + at least 5.19. This kernel version is used, for example, by Ubuntu 22.04.02 LTS. (mvpci Linux kernel module) + - Ships with mvBlueNAOS firmware 2.52.3416.0. (mvBlueNAOS.*-lib) + + BUGS FIXED: + - So far, a call of IFUpdateDeviceList with an infinite timeout would freeze the (mvGenTLProducer.cti) + GEV GenTL producer. The maximum for the timeout is now identical with the maximum + of the Interface's property DeviceUpdateTimeout, which is typically 5 seconds. + - Destroying a 'ComponentCallback' instance that has callbacks registered for features (mvIMPACT_Acquire.h) + that have already been destroyed (e.g. properties of a device instance that has been + closed in the meantime) an exception was generated within the destructor. + (Bug introduced in 2.48.0) + - The 'Update Info' dialog will correctly inform about updates for discontinued (wxPropView) + packages as well now. + - Fixed a bug where an application compiled on Windows using GCC in 64-bit mode (API headers used on Windows) + could crash due to the compiler using a different layout for structs in the API + than those produced by Visual Studio. + +17.01.2023 2.48.0 + NEW FEATURES: + - mvBlueNAOS devices now have preliminary support for the 'mvBlockScan' feature. (mvBlueNAOS.*-lib) + - mvBlueCOUGAR-XT devices are supported by the 'Quick Setup Wizard' now. (wxPropView) + - 'Acquisition Start Time', 'Acquisition Active Time' and 'Last Buffer Received' output (wxPropView) + added to the 'Info Plot' of the 'Analysis Tabs'. + + CHANGED BEHAVIOUR: + - From this version onwards the official support for all frame grabber boards supported (all shipped packages) + by mvIMPACT Acquire will end. This affects the mvHYPERION package on both Linux and + Windows as well as the mvTITAN/mvGAMMA and mvSIGMA/mvDELTA package on Windows. + - Added new parameter to the 'update' function of the FirmwareUpdater class. (all shipped packages) + When leaving the update function successfully the device just updated will be closed. + When this new parameter keeps it's default value the device lists will be updated as + needed as well to refresh the values containing firmware version and GenICam XML file + information during the update process. + - The GigE Vision specific 'All In' mode is no longer enabled by default since this (mvGenTLProducer.cti) + results in buffers that don't fit into a single network packet not being transmitted + completely from devices supporting the 'All In' mode. + - Calling mvIPConfigure won't show any warning once called via command line interface (mvIPConfigure) + using the 'hidden' parameter. + - Slightly improved device detection for MATRIX VISION GEV and U3V devices. (mvGenTLConsumer-lib) + (mvDeviceConfigure) + + UPDATES: + - Added chapter 'Camera support' to all API manuals containing a table that shows the (mvIMPACT_Acquire_API_XXX_manual) + support for camera families and frame grabbers with respect to host platforms. + - All user mode files are signed with a new DigiCert EV certificate now since the old (all shipped MSI-based packages) + one has expired. Newly shipped files (*.exe, *.dll, *.msi) will no longer carry a + SHA1 signature since these certificates are no longer available. Older Windows 7 + installations without the latest security updates might have trouble with this. + Until further notice Windows kernel modules will no longer receive updates for + Windows versions smaller than Windows 10 from this version onwards since driver + signing requirements for these systems have been changed by Microsoft in a way that + makes the release of updates almost impossible. + - The system requirements for mvBlueNAOS have changed: The newly shipped driver and (mvBlueNAOS.sys, version 0.4.3.0) + all future updates will no longer support legacy Windows installations (Windows 7 + or Windows 8.1). The mvBlueNAOS Windows Kernel Driver is signed with a new DigiCert + EV certificate now, since the old one has expired, and no longer carries a SHA1 + signature. + - Internal migration to Doxygen 1.9.6. + - Updated integrated U3VBootProgrammer to 0.52.3345.2. (mvGenTLProducer.cti) + - Ships with mvBlueNAOS firmware 2.52.3348.0. (mvBlueNAOS.*-lib) + + BUGS FIXED: + - Calling 'DSGetBufferInfo( ..., BUFFER_INFO_PIXEL_ENDIANNESS, ...) did not always (mvGenTLProducer.cti) + return correct results for GEV data streams. + - Some errors reported by GEV devices have not been forwarded correctly to upper layers (mvGenTLProducer.cti) + and some slight improvements applied to packet size negotiation. + - The 'All in' formats for GEV data streams have not been processed correctly with (mvGenTLProducer.cti) + 'extended block id' switched off. (mvGigECapture.sys, version 2.4.4.73) + (mvGigECapture2.sys, version 3.2.4.73) + - The 'Force IP' command ('Manually assign temporary IP address') in mvIPConfigure can (mvIPConfigure) + be used without selecting a device again in order to re-configure devices that cannot + be reached otherwise. + (Bug introduced in version 2.12.0) + - When ComponentCallbacks where created, deleted or configured from multiple threads (mvPropHandling-lib) + deadlocks could occur when unregistering a callback that was being executed in + parallel. + - Trying to use a mvBlueNAOS on a Windows system with a very small AOI and very short (mvBlueNAOS.sys, version 0.4.3.0) + exposure time to achieve frame rates of several thousand frames per second could + crash the Windows Driver i.e. a "Bluescreen" showing an IOMMU exception. + - The 'SystemLogicalProcessorCount' property on Windows did contain the number of (all shipped MSI-based packages) + logical processors available to the current process, not the number of processors + available to the system. + - The installation on ARM64 systems which don't use Linux 4 Tegra (l4t) could fail as (install_mvGenTL_Acquire_ARM.sh) + the system always tried to download the wrong kernel headers in order to compile the + mvBlueNAOS kernel module. + - The Multi-Core-Acquisition-Optimizer now works correctly with the Mellanox + ConnectX family network card on Linux. (mvGenTLProducer.cti) + +28.07.2022 2.47.0 + NEW FEATURES: + - The 'GenICam' namespace now contains the full SFNC 2.7 feature set as well as (C++, .NET, Java and Python API) + various rc_visard related properties. + - Added support for all UserData related features (e.g. CreateUserDataEntry, (mvGenTLConsumer-lib) + DeleteUserDataEntry, ...) for the mvBlueFOX3 device family. + - Added support for PFNC formats 'YCbCr422_8', 'YCbCr422_10', 'YCbCr422_10_CbYCrY' and (mvGenTLConsumer-lib) + 'YCbCr601_10_CbYCr'. + - Added more filter presets for firmware update files in the file selection dialog (mvDeviceConfigure) + of the firmware update 'from specific local firmware package'. + - mvBlueNAOS: Preliminary support for Thunderbolt 3 using a Thunderbolt-PCIe adapter. (mvpci Linux kernel module) + (mvBlueNAOS.sys, version 0.4.2.0) + - mvBlueNAOS devices support the value 'Default' for 'AcquisitionStartStopBehaviour' (mvGenTLConsumer-lib) + now. + - Added 'RequestQueue' property to the 'ImageControl' object in order to allow to state (all shipped packages) + to which data stream of a GenICam device supporting multiple streaming channels a + request shall be sent. + + CHANGED BEHAVIOUR: + - mvIMPACT Acquire running on Linux platforms no longer requires 'ip' or 'ifconfig' (all shipped packages) + to be installed in order for network functions to work correctly. + - The structs 'ImageBuffer' and 'ChannelData' have been moved from (C/C++ API) + 'mvDeviceManager/Include/mvDeviceManager.h' into a new header file + 'common/mvImageBuffer.h', the enums 'TImageBufferPixelFormat' and + 'TBayerMosaicParity' have been moved from 'DriverBase/Include/mvDriverBaseEnums.h' + to 'common/TImageBufferPixelFormat.h' and 'common/TBayerMosaicParity.h'. + - Slightly improved 'isDefault' behaviour of GenICam/GenApi properties. (mvGenTLConsumer-lib) + - Firmware validation based on checksums within the firmware archives and the device's (mvDeviceConfigure) + ability to calculate a checksum for the firmware inside the device's non-volatile (mvGenTLConsumer-lib) + memory as added to the firmware update API in version 2.46.0 has been changed! The + validation can now be called as a separate function from the firmware update API and + is no longer done during the actual firmware update. This verification has also been + added as a separate feature to mvDeviceConfigure. + - Calling the 'update' method of the firmware update API for the same GenICam device (all shipped packages) + multiple times using the same updater instance could result in unexpected behaviour. + This has been fixed by closing and re-opening (and rebinding all features) in between + now. + - Removed everything related to the following classes from the C++ interface: (mvIMPACT_acquire.h) + mvIMPACT::acquire::EventSubSystem, mvIMPACT::acquire::EventWaitResults, + mvIMPACT::acquire::EventData. Refer to the C++ API migration guide for details. + - Removed everything related to the following classes from the C interface: (mvDeviceManager.h) + DMR_EventWaitFor(), DMR_EventGetData() and EventData. Refer to the C API migration + guide for details. + + UPDATES: + - Internal migration to CMake 3.23.2. + - Ships with mvBlueNAOS firmware 2.49.3173.0. (mvBlueNAOS.*-lib) + + BUGS FIXED: + - mvBlueNAOS: Buffer corruption for a few AOIs. (mvBlueNAOS.*-lib) + - Allowed compileWrapperCode.bat to use two-digit Python version numbers (Python API) + - Potential crash when using the 'AdaptiveHomogeneityDirected' de-Bayer algorithm on (all shipped packages) + an image with a width or height of 5. + - Images with pixel format 'ibpfRGBx888Packed' and a line pitch that is not a multiple (mvDisplay-lib) + of 4 can be displayed correctly now. + - Potential crash when the height of the image was 1 and the pixel format was either (mvVirtualDevice-lib) + 'ibpfMono12Packed_V1' or 'ibpfMono12Packed_V2'. + - Added security patch for zlib. Zlib version is now 1.2.12 (March 27, 2022) (all shipped packages) + - On Linux systems with just a single processor/CPU core device intialization could (all shipped packages for Unix/Linux systems) + fail with an error message related to the 'ImageProcessingMaximumThreadCount' + property. + (Bug introduced in version 2.41.0) + - Non-GenICam devices will no longer complain about a bootloader firmware if the (wxPropView) + firmware version major is 0. + - mvBlueNAOS: Linux kernel module, if selected, will be built by the installer again. (install_mvGenTL_Acquire_ARM.sh) + (Bug introduced in version 2.46.2) + - mvBlueNAOS: Linux and Windows drivers now work when an IOMMU (e.g. Intel VT-d) is (mvpci Linux kernel module) + being used. The Windows Driver also works when 'DMA Remapping Protection' is turned (mvBlueNAOS.sys, version 0.4.2.0) + on in the BIOS. + - For buffers that did arrive with varying values for 'PaddingX' while all other image (mvGenTLConsumer-lib) + dimension related parameters remained the same sometimes the resulting request did + return invalid line pitch values. + - Fixed a small memory leak when using the FirmwareUpdater API with GenICam devices. (mvGenTLConsumer-lib) + - When calling a version of the 'imageRequestReset' function when working with (all shipped packages) + multiple result queues only result queue 0 got cleared. + - wxPropView: Properties with a text/numeric field and spin button now work correctly (wxPropView) + on Linux systems. The displayed value used to be incremented sometimes when pressing + the 'down' part of the spin button. + - wxPropView: Edit field sliders, if turned on in options, are now visible and usable (wxPropView) + on Linux platforms that use Gtk3. + - mvBlueNAOS: A corrupted image could be returned at the next attempt when an (mvpci Linux kernel module) + application had previously requested a new image during acquisition and then stopped (mvBlueNAOS.sys, version 0.4.2.0) + acquisition immediately, without fetching the image associated with the request. + + - The DirectShow interface did not take the value of the property (DirectShow_acquire.ax) + 'AcquisitionStartStopBehaviour' into account, thus if a device did only support + 'assbUser' the actual acquisition was not started and therefore no images could be + acquired. + - Potential deadlock when calling 'DSStopAcquisition' for a GEV device running with the (mvGenTLProducer.cti) + socket implementation. + (Bug introduced in version 2.40.3) + - A 'TLS Initialization Error' could occasionally occur when multiple instances of (mvGenTLProducer.cti) + mvIMPACT Acquire were used by separate processes with U3V or GEV devices on Windows + systems. + (Bug introduced in version 2.46.0) + +07.03.2022 2.46.2 + CHANGED BEHAVIOUR: + - mvBlueCOUGAR-X(D) devices that are running a BootSection firmware during a firmware (mvGenTLConsumer-lib) + update can corrupt the uploaded firmware if a soft reset (reboot) would be performed (mvDeviceConfigure) + after writing it into the persistent memory. + - Added another callback for the FirmwareUpdater class that is called if the device (mvGenTLConsumer-lib) + needs an external hard reset during the update. + + UPDATES: + - Ships with mvBlueNAOS firmware 2.47.3020.0. (mvBlueNAOS.*-lib) + + BUGS FIXED: + - Writing the same blob of binary data to a GenICam property specifying the cache (mvPropHandling) + attribute 'NoCache' did not result in the data being sent to the device multiple + times but only once every time the data did change. + (Bug introduced in version 2.15.1) + - When an 'ctOnWriteData' callback was attached to a string property containing binary (mvPropHandling) + data and new binary data was written to the property the callback was not fired. + (Bug introduced in version 2.15.1) + - Writing the same blob of binary data to a GenICam property specifying the cache (mvGenTLConsumer-lib) + attribute 'WriteAround' did not result in the data being sent to the device multiple + times but only once every time the data did change. + - Explicitly checking for online updates in wxPropView did only display an info dialog (wxPropView) + when a newer version was available but didn't provide any feedback if not. + (Bug introduced in version 2.43.0) + - An Internet connection was always required for the installation script to succeed if (install_mvBlueFOX_ARM.sh) + additional packages were needed (e.g. wxWidgets). (Bug introduced in 2.12.1) (install_mvGenTL_Acquire_ARM.sh) + - After issuing DeviceReset to a mvBlueNAOS camera on a Windows system: sometimes no (mvBlueNAOS.*-lib) + image data was available until the application was restarted. + - mvBlueNAOS: When 'mvDeviceTimeSync' is set to 'mvSystemTime' (i.e. default value) (mvBlueNAOS.*-lib) + the camera reacts more quickly to changes in the PC's timestamp. + +18.02.2022 2.46.1 + NEW FEATURES + - mvBlueNAOS cameras show the property 'DeviceStreamChannelPacketSize', which is the (mvBlueNAOS*-lib) + packet size being used on the PCIe link. This value affects the efficiency of image + data transfer and may explain differences in the maximum frame rate on different + systems. + + UPDATES: + - Ships with mvBlueNAOS firmware 2.47.3000.0. (mvBlueNAOS.*-lib) + + BUGS FIXED: + - Accessing GenICam remote device registers frequently while also capturing data from (mvGenTLConsumer-lib) + this remote device at high frequencies could result in buffer/request queue + underruns. + - mvBlueNAOS: firmware update using Windows is sometimes not possible when mvBlueNAOS2 (mvGenTLProducer.PCIe.cti, mvBlueNAOS*.dll) + and mvBlueNAOS4 camera types are simultaneously connected to a system. + +02.02.2022 2.46.0 + NEW FEATURES: + - Added color correction matrix for Sony IMX535, IMX536, IMX537 based products. (all shipped packages) + - ibpfRaw became a fully supported pixel format. This will now be used for unknown (all shipped packages) + pixel formats coming from third party devices in order to bypass processing filters + that would otherwise modify or destroy the data and will also make the integration + of GenDC containers a lot easier later. + - mvHYPERION driver became 'updateDeviceList' aware. (mvHYPERIONfg-lib) + - Reduced memory usage for mvBlueNAOS Linux kernel module and Windows driver. (mvBlueNAOS.sys, version 0.3.1.3) + (mvpci Linux kernel module, version 0.3.2) + (mvGenTLProducer.PCIe.cti) + - The number of mvBlueNAOS cameras that may be connected to a system is no longer (mvpci Linux kernel module, version 0.3.2) + restricted to 4. Now only system resources limit how many cameras may be used. (mvGenTLProducer.PCIe.cti) + - Firmware validation based on checksums within the firmware archives and the devices (mvDeviceConfigure) + ability to calculate a checksum for the firmware inside the devices non-volatile (mvGenTLConsumer-lib) + memory added to firmware update API. + - Added support for mvBlueNAOS4 camera BVS CA-BN4-0124BG (IMX535 sensor). (mvBlueNAOS.sys, version 0.3.1.3) + (mvpci Linux kernel module, version 0.3.2) + (mvBlueNAOS.S-lib) + (mvGenTLProducer.PCIe.cti) + - mvBlueNAOS cameras support debounced inputs. The 'mvLineDebounceTime*' (mvBlueNAOS*-lib) + properties can now be used to control the debounce feature. + - mvBlueNAOS cameras support a new 'mvDeviceTimeSync' property to turn on automatic (mvBlueNAOS*-lib) + synchronization of the camera's timestamp with the PC's system time, and this + is turned on by default. Alternatively it is possible to write time values to + 'mvDeviceTimeSyncPushValue' in order to implement a synchronization method within a + user application. + - Added package installation for Linuxmint distribution. (install_mvBlueFOX.sh) + (install_mvGenTL_Acquire.sh) + (install_mvGenTL_Acquire_ARM.sh) + (install_mvHYPERION.sh) + (install_mvVirtualDevice.sh) + - 'Multi-Core Acquisition' related driver features are available on Linux as well now. (mvGenTLProducer.cti) + However the overall behaviour is not yet comparable with Windows. So far only + interrupt routing is implemented. + - The 'InterfaceModule' for GigE Vision cameras now contains additional features for (mvGenTLProducer.cti) + making use of the acknowledge(s) for generated Action commands. + + CHANGED BEHAVIOUR: + - Removed mvBlueCOUGAR-S_technical_manual.chm from installation packages. It will be (mvGenTL_Acquire*.exe) + still available here: https://www.balluff.com/en-de/online-manuals-mv. + - Loading the system's libusb and libudev if they are newer than our minimum (mvGenTLProducer.cti for Linux) + requirement. + - Whenever no more resend credits are available for buffer reconstruction a buffer will (mvGigECapture.sys, version 2.4.3.72) + time out automatically when no more network packets are received for this buffer for (mvGigECapture2.sys, version 3.2.3.72) + a period of 100ms no matter what timeout value has been specified for that particular + buffer. + - Packet size negotiation for GEV devices is now about 20ms faster, in cases where the (mvGenTLProducer.cti) + device rounded the value due to incompatibility with the requested packet size. + + BUGS FIXED: + - The 32-bit version of mvGigEConfigure did try to install a 32-bit kernel driver when (mvGigEConfigure) + executed on a 64-bit version of Windows. + - Starting a second mvIMPACT Acquire application whilst a mvBlueNAOS camera was (mvBlueNAOS.sys, version 0.3.1.3) + streaming images would stop the streaming. + - When opening a GenICam device not supporting a streaming channel in its current (wxPropView) + configuration the property tree has not been created. + (Bug introduced in version 2.42.0) + - When wxPropView is opened the AOI of the selected Analysis Tab was shown once it has (wxPropView) + been disabled in the previous session. + - Reading 'EVENT_NUM_FIRED' for the error event using the 'EventGetInfo' function did (mvGenTLProdu*.cti) + return an incorrect value. + - Starting a second mvIMPACT Acquire application whilst a mvBlueNAOS camera was (mvBlueNAOS*-lib) + streaming images would change the colour shown by the camera's LED. (mvpci Linux kernel module, version 0.3.2) + (mvBlueNAOS.sys, version 0.3.1.3) + (mvGenTLProducer.PCIe.cti) + - Calling mv.impact.acquire.EnumPropertyI64.getTranslationDictString on 32-bit (mv.impact.acquire.dll) + operating systems and mv.impact.acquire.Component.selectingFeatures or + mv.impact.acquire.Component.selectedFeatures on 64-bit operating systems could result + in random crashes. + - When installing the mvIMPACT Acquire driver package on Linux in an attended mode, (install_mvBlueFOX.sh) + installation for g++ compiler, libexpat and wxWidgets were skipped. (install_mvGenTL_Acquire.sh) + (install_mvHYPERION.sh) + (install_mvVirtualDevice.sh) + - Some non-U3V USB composite devices have been incorrectly detected as U3V devices on (mvGenTLProducer.cti) + Linux. + (Bug introduced in version 2.44.0) + - Missing Visual Studio runtime libs required by the GenICam runtime 3.3.0 added to (mvGenTL_Acquire*.exe) + installation. Without them VS 2019 redist packages need to be installed on the + target system. + +07.09.2021 2.45.0 + NEW FEATURES: + - Added support for BinningHorizontal and BinningVertical to CustomCommandGenerator (all shipped packages) + generator class. Might need a firmware update on the device to be usable. + - Linux installers will try to sign the mvBlueNAOS kernel module on x86_64 platforms (mvGenTL Linux installer and mvBlueNAOS manual) + if appropriate keys are found. The manual contains detailed instructions on using + the kernel module on systems with UEFI SecureBoot enabled. + - RGB pixel formats now working for IMX540 mvBlueNAOS camera. (mvBlueNAOS.sys, version 0.1.7.1) + (mvpci Linux kernel module, version 0.1.16) + (mvBlueNAOS*-lib, version 2.44.2754.0) + - 'Multi-Core Acquisition' wizard and related driver features are available for (wxPropView) + mvBlueCOUGAR-X(D) devices with firmware version 2.44.0 or higher as well now. (mvGenTLProducer.cti) + (Windows only) + - Complete overhaul of Internet based firmware update functionality. Now also the new (mvDeviceConfigure) + mvBlueCOUGAR-XT way of performing firmware updates is supported. + Release notes will be displayed in a new viewer. Therefore the additional package + 'webview' for wxWidgets is necessary and will be installed. + - Silent/unattended firmware update is possible for mvHYPERION devices as well now. (mvDeviceConfigure) + + UPDATES: + - Migration to version 3.3.0 of the GenApi runtime. (all shipped packages for GenICam compliant devices) + - On Linux systems, the 'genicam-cache' directory will now be read- and writable (mvGenTLProducer.cti for Linux) + by any system user. + - Internal migration to IPP 2021.2. (all shipped packages) + - MSI packages will be built using WiX 3.11.2 now. (all shipped MSI based packages) + - Improved execution speed of the 'acquisitionStart' and 'acquisitionStop' function (mvGenTLProducer.cti) + for USB3 Vision devices. + - New GUI visualization for setting up and controlling the video stream recording (wxPropView) + via FFmpeg functionality. + - Added check for detecting Visual Studio 2015 or later when building the mvIMPACT (Python API) + Acquire Python package. + + CHANGED BEHAVIOUR: + - From this version onwards specific interface technologies can be assigned for (mvGenTL Linux installer scripts) + installation by using new command line parameters. The old parameters: + "only_gev", "only_u3v", "only_naos" have been declared deprecated for new versions. + - From this version onwards it is possible to combine a minimal and an unattended (all Linux installer scripts) + installation using the '-m' and '-u' parameter of the installation scripts. + + BUGS FIXED: + - Driver update info box will only be shown on program start, if the option for (wxPropView) + 'Auto-Check For Updates Every Week...' is enabled. + - Driver packages will now be downloadable with the 'Update' button within the (wxPropView) + driver update info box. + (Bug introduced in version 2.37.1) + - The Linux installer will try to install Kernel header packages before building the (mvGenTL Linux installer) + mvBlueNAOS kernel module. + - All 3 histogram plots did display incorrect data and pixel sums. (wxPropView) + (Bug introduced in version 2.41.0) + - AGC/AEC/AWB used to stop working on reopening a mvBlueNAOS camera running on (mvBlueNAOS.sys, version 0.1.7.1) + Windows. (mvBlueNAOS*-lib, version 2.44.2754.0) + - Devices not allowing a width smaller than 640 or a height smaller than 480 could not (mvIMPACTAcquire_Cognex_Adapter-lib) + be operated. + - Queuing a single buffer using 'imageRequestSingle' and calling 'SoftwareSignalPulse' (mvGenTLConsumer-lib) + or writing to a UserOutput directly afterwards to trigger an image could result in + lost buffers for GEV devices. + +22.06.2021 2.44.0 + NEW FEATURES: + - Initial support for the new mvBlueNAOS camera family (PCIe) added. (mvGenTLProducer.PCIe.cti) + (mvBlueNAOS.sys, version 0.1.6.0) + (mvBlueNAOS*-lib, version 2.42.2698.1) + - Added new C# example: ContinuousSaveImage. (all shipped MSI based packages) + - Added the properties 'SystemPhysicalProcessorCount' and'SystemLogicalProcessorCount' (all shipped packages) + to the Info list. + - Added 'mvMultiCoreAcquisition' related features to the nodemap of the (mvGenTLProducer.cti) + 'DataStreamModule'. + (Windows only, mvBlueCOUGAR-XT only) + - Added 'Multi-Core Acquisition' wizard. (wxPropView) + (Windows only, mvBlueCOUGAR-XT only) + - Added color correction matrix for Sony IMX545, IMX546, IMX547 based products. (all shipped packages) + + NEW FIRMWARE: + - Firmware version 0x35(53) for mvBlueFOX devices added. (mvBlueFOX-lib) + Changes: + - The I2C interface of mvBlueFOX-MLC devices did always return success on read even + if no external device was connected and no sub-address was specified. + + UPDATES: + - Once the cursor is placed over a scrollbar of the image canvas, using the mouse wheel (wxPropView) + will cause scrolling into the corresponding orientation of the scrollbar instead of + zooming now. + - Internal migration to CMake 3.20.2. + + BUGS FIXED: + - USB composite devices that are a U3V device as well as something else (e.g. a UVC) (mvGenTLProducer.cti) + could only be used if the IAD describing the U3V device was described by the last IAD + (on Windows) or the first IAD (on Linux). + +04.05.2021 2.43.0 NEW FEATURES: - If an image is loaded into wxPropView, the file name will now be visible in the (wxPropView) status bar and also with the 'Request Info' overlay. - - On Linux systems, all mvIMPACT Acquire log files are now read- and writable by any (all shipped Linux packages) + - On Linux systems, all mvIMPACT Acquire log files are now read- and writable by any (all shipped packages for Unix/Linux systems) system user, no matter which user created them first. - Linux installation scripts will install dependencies (e.g. wxWidgets, ...) on x86_64 (all shipped Linux x86_64 packages) Red Hat Linux and Fedora systems now. @@ -26,7 +632,7 @@ Date: Release: Changes: 09.04.2021 2.42.0 NEW FEATURES: - - It is now possible to choose, if image meta data is saved beside the image data, (wxPropView) + - It is now possible to choose, if image meta data is saved beside the image data, (wxPropView) when the 'Save Image...' or 'Save All Recorded Images' feature is used - Support for mvBlueFOX-ML/IGC202vG devices added. (mvBlueFOX-lib) - Support for permanent Unicast device discoveries added. (mvGenTLProducer.cti) @@ -177,7 +783,7 @@ Date: Release: Changes: - Using the 'Quick Setup Wizard' on ARM based platforms could result in crashes. (wxPropView) - The 'Quick Setup Wizard' did not always configure the highest possible frame rate (wxPropView) when the 'Highest Speed' option was selected. - - In some cases the 'Quick Setup Wizard' disabled the the camera's AEC once it was (wxPropView) + - In some cases the 'Quick Setup Wizard' disabled the camera's AEC once it was (wxPropView) enabled in the wizard before. - On Linux 'Update firmware from online package' did use a wrong directory to store (mvDeviceConfigure) the package and therefore the update did not work. @@ -284,7 +890,7 @@ Date: Release: Changes: 03.03.2020 2.37.0 NEW FEATURES: - Initial version of the Python API manual for mvIMPACT Acquire added. See (all shipped packages) - mvIMPACT_Acquire_API_PYTHON_manual.chm or https://www.matrix-vision.com/manuals/ + mvIMPACT_Acquire_API_PYTHON_manual.chm or https://www.balluff.com/en-de/online-manuals-mv for additional details. - Ported all code snippets from the C++ documentation to Java and Python. (all shipped packages) - The Java wrapper for mvIMPACT Acquire added in version 2.36.0 is now shipped for (all shipped packages) @@ -376,7 +982,7 @@ Date: Release: Changes: NEW FEATURES: - Initial version of a full Java wrapper for mvIMPACT Acquire added. See product (all shipped packages) specific manuals as well as the mvIMPACT_Acquire_API_JAVA_manual.chm or - https://www.matrix-vision.com/manuals/ for additional details. + https://www.balluff.com/en-de/online-manuals-mv for additional details. - The mvIMPACT Acquire Python wrapper now exposes the same exception class hierarchy (Python API) as the C++/C# API thus not only 'acquire.ImpactAcquireException' objects but also all the derived types can be caught. @@ -399,7 +1005,7 @@ Date: Release: Changes: CHANGED BEHAVIOUR: - Some incompatible changes have been applied to the Python interface. Please refer (Python API) to the migration guide in the 'Python developers' chapter of your product. E.g.: - https://www.matrix-vision.com/manuals/mvBlueCOUGAR-X/Python_page_0.html + https://www.balluff.com/en-de/online-manuals-mv/mvBlueCOUGAR-X/Python_page_0.html - The directory containing the Python interface moved from 'mvIMPACT_Python' to (Python API) 'LanguageBindings/Python'. - The C++ member mvIMPACT::acquire::CameraSettingsBlueDevice::autoControlParameters (mvIMPACT_acquire.h) @@ -505,7 +1111,7 @@ Date: Release: Changes: inform the user. - Some incompatible changes have been applied to the Python interface. Please refer (Python API) to the migration guide in the 'Python developers' chapter of your product. E.g.: - https://www.matrix-vision.com/manuals/mvBlueCOUGAR-X/Python_page_0.html + https://www.balluff.com/en-de/online-manuals-mv/mvBlueCOUGAR-X/Python_page_0.html BUGS FIXED: - Calling 'GCGetInfo' without calling 'TLOpen' before did result in a crash! (mvGenTLProducer.cti) @@ -654,7 +1260,7 @@ Date: Release: Changes: enumerated. Therefore it seems like no devices are connected to the system. UPDATES: - - Internal migration from (all shipped Linux packages) + - Internal migration from (all shipped packages for Unix/Linux systems) - gcc 4.2.4 to gcc 4.8.5 for x64 and x86_64 packages. - gcc 4.6.3 to gcc 4.9.4 for ARMsf and ARMhf packages. - gcc 4.8.3 to gcc 4.9.4 for ARM64 packages. @@ -700,10 +1306,10 @@ Date: Release: Changes: - In order to increase the awareness for the 'ImageRequestTimeout_ms' property (wxPropView) wxPropView will warn when buffer timeouts occur and will recommend to adjust the timeout property then. - - All files (kernel mode and user mode) are signed with a DigiCert EV certificate now + - All files (kernel mode and user mode) are signed with a DigiCert EV certificate now (all shipped MSI-based packages) as the new COMODO certificate still resulted in Windows SmartScreen warnings. (Windows only) - - All installer scripts report errors and warnings in case of issues during (all shipped Linux packages) + - All installer scripts report errors and warnings in case of issues during (all shipped packages for Unix/Linux systems) installation and their result at the end of the installation. CHANGED BEHAVIOUR: @@ -873,6 +1479,7 @@ Date: Release: Changes: - Internal migration to CMake. All Linux based builds are generated using CMake now. (all shipped packages for Unix/Linux systems) - Internal migration to IPP 2019.0. (all shipped packages) (Windows only) + - MSI packages will be built using WiX 3.11.1 now. (all shipped MSI based packages) CHANGED BEHAVIOUR: - From this version onwards ppc603e based platforms will no longer be supported. (all shipped packages for GenICam compliant devices) @@ -1066,7 +1673,7 @@ Date: Release: Changes: - Moving Mono12 packed Bayer test images with an odd width have not been created (mvVirtualDevice-lib) correctly. - For test images with a an odd width AND height using the pixel format (mvVirtualDevice-lib) - ibpfMono12Packed_V1 the last pixel of the last row of the image was incorrect. + 'ibpfMono12Packed_V1' the last pixel of the last row of the image was incorrect. - Images with a height of 1 could result in a crash when the defective pixel filter was (all shipped packages) configured to perform calibration on the next image. @@ -1096,7 +1703,7 @@ Date: Release: Changes: of Linux systems when plugging in the camera. NEW FEATURES: - - On Linux systems the priority of certain threads has been adjusted. All Linux (all shipped Linux packages) + - On Linux systems the priority of certain threads has been adjusted. All Linux (all shipped packages for Unix/Linux systems) installer scripts take care of the necessary settings automatically. - 'AdaptiveHomogeneityDirected' Bayer conversion mode added for very high quality (all shipped packages except ARM platforms) debayering. @@ -1140,7 +1747,7 @@ Date: Release: Changes: the channel bit depth did change from one request to the next. - Moving Mono12 packed test images did use a different start pixel value for each color (mvVirtualDevice-lib) color bar. - - Network interfaces with more than one IP address could lead to error messages (all shipped Linux packages) + - Network interfaces with more than one IP address could lead to error messages (all shipped packages for Unix/Linux systems) appearing on the console. - Updating the DirectShow interface without uninstalling all previous versions of (DirectShow_acquire.ax) mvIMPACT Acquire did not install the latest version since version 2.17.0. @@ -1197,7 +1804,7 @@ Date: Release: Changes: class of the GenICam namespace. (mv.impact.acquire.dll) - Added a checkbox to allow to configure whether wxPropView shall automatically check (all shipped MSI based packages) for updates or not. - - All Linux installer scripts now support a minimal installation option, which can be (all shipped Linux packages) + - All Linux installer scripts now support a minimal installation option, which can be (all shipped packages for Unix/Linux systems) achieved with the '-m' or '--minimal' command line argument. - The sequencer wizard can now cope with multiple sequencer paths per sequencer set. (wxPropView) - 'AdaptiveEdgeSensingPlus' Bayer conversion mode added for high quality debayering. (all shipped packages) @@ -1691,7 +2298,7 @@ Date: Release: Changes: e.g. 'Once' to 'Off' once the calibration has been performed. - mvBlueFOX3: Added command to reset the PHY and LINK error counters. - mvBlueFOX3, mvBlueCOUGAR-X(D): Added possibility to calculate SHA1 - hash of firmware file currently saved in camera. + hash of firmware file currently saved in camera. Changed behaviour: - mvBlueCOUGAR-X105G/C: Minimum width changed from 16 to 80. - mvBlueCOUGAR-X, mvBlueCOUGAR-XD, mvBlueFOX3: cameras start with @@ -1886,12 +2493,12 @@ Date: Release: Changes: - New command line parameter added: 'fullscreen' or 'fs'. (wxPropView) BUGS FIXED: - - Running the ColorTwist filter on Linux with RGB planar formats could result in (all shipped Linux packages) + - Running the ColorTwist filter on Linux with RGB planar formats could result in (all shipped packages for Unix/Linux systems) crashes. (Bug introduced in version 2.13.6) - On some occasions when a mvBlueFOX camera would come out of the powered down state (mvBlueFOX-lib) the driver would fail to acquire images. - - Linux installer scripts now take unused memory into account before spawning multiple (all shipped Linux packages) + - Linux installer scripts now take unused memory into account before spawning multiple (all shipped packages for Unix/Linux systems) threads for parallel compilation of mv sources during installation. This eliminates potential hangs during installation of MATRIX VISION Linux drivers due to lack of free memory on the target platform. @@ -2317,7 +2924,7 @@ Date: Release: Changes: - Removing the GigE Vision filter driver when uninstalling the mvIMPACT Acquire package (mvGenTL_Acquire*.msi) did not work. (Bug introduced in version 2.6.3) - - downgrading the GigE Vision filter driver from the NDIS 6.x back to the NDIS 5.x (mvGigECapture2.sys, version 3.0.2.56) + - Downgrading the GigE Vision filter driver from the NDIS 6.x back to the NDIS 5.x (mvGigECapture2.sys, version 3.0.2.56) version did not work properly. (mvGenTLProducer.cti) (mvGigEConfigure) @@ -2455,7 +3062,7 @@ Date: Release: Changes: - The display update frame rate can be configured via 'Settings -> Set Update (wxPropView) Frequency' now. This fixes the problem of a freezing GUI or missing status bar updates at high frame rates. - - The 'Detailed Feature Information' dialogue contains informations about the binary (wxPropView) + - The 'Detailed Feature Information' dialogue contains information about the binary (wxPropView) data size and the max. binary data size for properties specifying the 'cfContainsBinaryData' flag now. - 'Show Feature Change Time Consumption' option added to 'Settings -> Property Grid'. (wxPropView) @@ -2661,7 +3268,7 @@ Date: Release: Changes: CounterValueAtReset didn't yield the right value BUGS FIXED: - - In Linux systems, mknewappl.sh script no longer generates deprecated code. (all shipped Linux packages) + - In Linux systems, mknewappl.sh script no longer generates deprecated code. (all shipped packages for Unix/Linux systems) - 'mvIMPACT::acquire::GenICam::ImageFormatControl::mvDigitizationMode' became (mvIMPACT_acquire_GenICam.h) 'mvIMPACT::acquire::GenICam::ImageFormatControl::mvSensorDigitizationBitDepth' in (mv.impact.acquire.dll) the public API. The Firmware did use that name anyway, thus the features in the API @@ -2919,7 +3526,7 @@ Date: Release: Changes: NEW FEATURES: - Gamma filter in Windows and Linux systems has been optimized to run on multiple (all shipped packages) threads - - In Linux systems, the ColorTwist Filter now uses the internal thread pool (all shipped Linux packages) + - In Linux systems, the ColorTwist Filter now uses the internal thread pool (all shipped packages for Unix/Linux systems) optimization, introduced in version 2.12.3 UPDATES: @@ -2930,7 +3537,7 @@ Date: Release: Changes: control wizard. BUGS FIXED: - - Debayering to Mono formats in Linux systems, now correctly use the internal (all shipped Linux packages) + - Debayering to Mono formats in Linux systems, now correctly use the internal (all shipped packages for Unix/Linux systems) thread pool optimization, introduced in version 2.12.3 - Firmware update for mvBlueCOUGAR-S devices is working again. (mvGenTLConsumer-lib) (Bug introduced in version 2.12.3) @@ -2961,7 +3568,7 @@ Date: Release: Changes: - mvBlueFOX3: UserFile can be up- and downloaded correctly now. - AWB sometimes did not work correctly if binning or decimation was enabled. - The Properties 'Aoi/X' and 'Aoi/Y' also affect the file import mode now. Therefore (mvVirtualDevice-lib) - now AOIs can be extracted from images loaded from disc. + now AOIs can be extracted from images loaded from disk. - The 'Quick Setup' wizard now provides color and greyscale pre-sets, tuned for quality (wxPropView) or speed. @@ -3068,7 +3675,7 @@ Date: Release: Changes: 29.07.2015 2.13.2 UPDATES: - - mvIMPACT Acquire applications can be compiled with C++ 11 support now. (all shipped Linux packages) + - mvIMPACT Acquire applications can be compiled with C++ 11 support now. (all shipped packages for Unix/Linux systems) CHANGED BEHAVIOUR: - The 'Quick Setup' wizard display window no longer hides the status bar of wxPropView. (wxPropView) @@ -3218,7 +3825,7 @@ Date: Release: Changes: since Windows 8 nested folders in the start menus are no longer allowed. NEW FEATURES: - - On Linux an internal thread pool is now used to speed up de-bayer processing time. (all shipped Linux packages) + - On Linux an internal thread pool is now used to speed up de-bayer processing time. (all shipped packages for Unix/Linux systems) This will increase the number of threads created by the number of processors per initialised device in a process. - New properties published: mvIMPACT::acquire::Request::chunkSequencerSetActive, (mvIMPACT_acquire.h) @@ -3323,8 +3930,8 @@ Date: Release: Changes: which is not configured properly. The user no longer has to enter it manually. - The 'GenICam' namespace now contains the full SFNC 2.2 feature set. (mvIMPACT_acquire_GenICam.h) (mv.impact.acquire.dll) - - MATRIX VISION Linux installation scripts now support an unattended installation mode. (all shipped Linux packages) - - Linux installation script for mvVirtualDevices is available now. (all shipped Linux packages) + - MATRIX VISION Linux installation scripts now support an unattended installation mode. (all shipped packages for Unix/Linux systems) + - Linux installation script for mvVirtualDevices is available now. (all shipped packages for Unix/Linux systems) BUGS FIXED: - Unplugging and the re-inserting mvBlueFOX USB2 devices to a USB3 host controller (mvBlueFOX-lib) @@ -3413,11 +4020,11 @@ Date: Release: Changes: NEW FEATURES: - Initial version of the 'Quick Setup' wizard for mvBlueFOX devices added. (wxPropView) - - On Windows wxPropView has now three new help menu options which (wxPropView) + - On Windows wxPropView has now three new help menu options which (wxPropView) - directly open the logs folder - create a zip file with all the logs - open the systems default email client to send an email to - support@matrix-vision.com. + support.de@balluff.de. - New color correction matrix added: 'cticmmBlueCOUGAR_Xx010C_WPPLS' This will be used (all shipped packages) by 'mvBlueCOUGAR-x010C' devices. - The DirectShow interface supports the 'IAMVideoProcAmp' and the 'IAMCameraControl' (DirectShow_acquire.ax) @@ -3513,7 +4120,7 @@ Date: Release: Changes: NEW FEATURES: - Initial version of the 'Quick Setup' wizard added. (wxPropView) - New command line parameter added: 'custom_genicam_file'. (mvDeviceConfigure) - - 'FirmwareUpgrade' on Linux can now be used to update the firmware of mvHYPERION (all shipped Linux packages) + - 'FirmwareUpgrade' on Linux can now be used to update the firmware of mvHYPERION (all shipped packages for Unix/Linux systems) devices from a console window as well. This might be useful on systems without a graphical user interface. - New property published in C++ and .NET interface: Device::manufacturer. (mvIMPACT_acquire.h) @@ -3764,7 +4371,7 @@ Date: Release: Changes: BUGS FIXED: - '\n' and '\t' characters in string property values will be stored into and restored (mvPropHandling-lib) from XML settings correctly now. - - Installing MATRIX VISION Linux drivers on trusty tahr (Ubuntu 14.04 LTS) systems no (all shipped Linux packages) + - Installing MATRIX VISION Linux drivers on trusty tahr (Ubuntu 14.04 LTS) systems no (all shipped packages for Unix/Linux systems) longer generates warnings/errors when building SingleSnap and mvDeviceConfigure. - Load settings from XML file now works properly. This change brings some compatibility (all shipped packages) issues. XML files created from now on will not be usable with mvIMPACT Acquire @@ -4440,7 +5047,7 @@ Date: Release: Changes: BUGS FIXED: - Setting 'GenICam::InterfaceModule::mvDeviceCommandChannelRetryCount' to 0 did result (mvGenTLProducer.cti) in no commands being sent at all. - - Some newly introduced header files were missing in the Linux packages. (all shipped Linux packages) + - Some newly introduced header files were missing in the Linux packages. (all shipped packages for Unix/Linux systems) (Bug introduced in version 2.5.7) - Creating instances of the classes 'mv.impact.acquire.GenICam.SystemModule' (mv.impact.acquire.dll) or 'mv.impact.acquire.GenICam.InterfaceModule' do no longer open the device passed @@ -4604,7 +5211,7 @@ Date: Release: Changes: CHANGED BEHAVIOUR: - The method 'mvIMPACT::acquire::Request::getComponentLocator' became public. (mvIMPACT_acquire.h) - The method 'mv.impact.acquire.Request.getComponentLocator' became public. (mv.impact.acquire.dll) - - Internally a monotonic clock is used wherever possible (Linux only). (all shipped Linux packages) + - Internally a monotonic clock is used wherever possible (Linux only). (all shipped packages for Unix/Linux systems) BUGS FIXED: - The palette of the 'System.Drawing.Bitmap' instance returned by (mv.impact.acquire.dll) @@ -4764,7 +5371,7 @@ Date: Release: Changes: - 'Statistics/FramesPerSecond' property converges towards the actual value with (all shipped packages) 'normal' speed again. (Bug introduced in version 2.4.0) - - 'GenICamInterfaceLayout' example does no longer crash on Linux. (all shipped Linux packages) + - 'GenICamInterfaceLayout' example does no longer crash on Linux. (all shipped packages for Unix/Linux systems) - The 'mvUserData' property of an mvBlueCOUGAR-X or mvBlueCOUGAR-XD device is no longer (mvGenTLConsumer-lib) stored in a setting/restored from a setting. As this feature is stored in non-volatile device memory restoring this value would modify the data in the device @@ -4822,7 +5429,7 @@ Date: Release: Changes: - Capturing to user supplied memory with 'InterfaceLayout' set to 'dilDeviceSpecific' (mvGenTLConsumer-lib) did not work with mvBlueCOUGAR-X devices that came up with a GEV pixel format that was using more than one channel. - - In rare cases (when the current working directory on Linux became invalid) (all shipped Linux packages) + - In rare cases (when the current working directory on Linux became invalid) (all shipped packages for Unix/Linux systems) starting a mvIMPACT Acquire based application could crash. - When Bayer images where generated by setting the properties 'Camera/PixelFormat' and (mvVirtualDevice-lib) 'Camera/BayerMosaicParity' the driver internal de-Bayer filter did not process the @@ -6204,7 +6811,7 @@ Date: Release: Changes: 'SystemSettings/FeaturePollingInterval_ms' added. BUGS FIXED: - - Missing newly introduced '$MVIMPACT_ACQUIRE_DIR/common/System/Linux/version.inc' (all shipped Linux packages) + - Missing newly introduced '$MVIMPACT_ACQUIRE_DIR/common/System/Linux/version.inc' (all shipped packages for Unix/Linux systems) added to TGZ archives. - Error messages about invalid access to certain HDR related feature upon init for (mvBlueFOX-lib) mvBlueFOX-202dG, mvBlueFOX-M202dG and mvBlueFOX-ML/IGC202dG devices. @@ -6584,7 +7191,7 @@ Date: Release: Changes: UPDATES: - Number of default debug writer tags increased from 8 to 16 for all USB and GEV (all shipped packages) devices. - - Some gcc 4.5 related crashes fixed by moving around some code and changing the name (all shipped Linux packages) + - Some gcc 4.5 related crashes fixed by moving around some code and changing the name (all shipped packages for Unix/Linux systems) of some internal classes. BUGS FIXED: @@ -6845,7 +7452,7 @@ Date: Release: Changes: - Crashes when working with GEV devices supporting chunk mode under .NET. Memory (mvIMPACT_acquire.h) corruptions where reported by the garbage collector in Request::Dispose. (Bug introduced in version 1.11.29) - - Display can deal with images in ibpfMono12Packed_V2 that have an odd width now. (mvDisplay-lib) + - Display can deal with images in 'ibpfMono12Packed_V2' that have an odd width now. (mvDisplay-lib) - Binning is working correctly now for mvBlueFOX-x02xx devices. (mvBlueFOX-lib) 07.01.2011 1.11.45 @@ -6872,7 +7479,7 @@ Date: Release: Changes: anyway. NEW FEATURES: - - 2 new samples added to Linux packages: 'CaptureToUserMemory_C' and (all shipped Linux packages) + - 2 new samples added to Linux packages: 'CaptureToUserMemory_C' and (all shipped packages for Unix/Linux systems) 'ContinuousCapture_C'. - Log files can be moved around in the file system and still be viewed with (all shipped packages) mvLogFileViewer.html without changing files.mvloglist afterwards. @@ -6935,7 +7542,7 @@ Date: Release: Changes: 01.12.2010 1.11.41 NEW FEATURES: - - Support for Bayer versions of ibpfMono12Packed_V2 added. (all shipped packages) + - Support for Bayer versions of 'ibpfMono12Packed_V2' added. (all shipped packages) BUGS FIXED: - Continuous calls to 'DMR_Init' and 'DMR_Close' did cause an error code -2100 (mvBlueFOX-lib) @@ -7382,7 +7989,7 @@ Date: Release: Changes: stream now. - Some return values changed from 'GC_ERR_ERROR' to 'GC_ERR_IO' where appropriate. (mvTLIClientGigE-lib) - 'PORT_INFO_MODEL' returns a unique name per module now. (mvTLIClientGigE-lib) - - Checking for sufficient disc space will be done AFTER selecting the components to be (all shipped MSI based packages) + - Checking for sufficient disk space will be done AFTER selecting the components to be (all shipped MSI based packages) installed. - 'LastResult' property of the code generation section became read-only. (mvBlueCOUGAR-lib) @@ -7610,7 +8217,7 @@ Date: Release: Changes: Use mvIMPACT::acquire::HDRControl::kneePointCount instead. NEW FEATURES: - - Handling for buffers with an odd width for ibpfMono12Packed_V2 improved. (all shipped packages) + - Handling for buffers with an odd width for 'ibpfMono12Packed_V2' improved. (all shipped packages) - Adaptive edge sensing de-Bayer algorithm is fully integrated but not yet published (all shipped packages) in the user interface. @@ -7700,7 +8307,7 @@ Date: Release: Changes: integer representation was different from 0. - The C++ interface is compatible with Visual Studio 6.0 again (mvIMPACT_acquire.h) (Bug introduced in version 1.11.6) - - ibpfMono12Packed_V2 buffers can be converted into a mvIMPACT image buffer correctly (mvDeviceManager-lib) + - 'ibpfMono12Packed_V2' buffers can be converted into a mvIMPACT image buffer correctly (mvDeviceManager-lib) now. - 'Dark current filter' is working again. (all shipped packages) (Bug introduced in version 1.11.6) @@ -7847,7 +8454,7 @@ Date: Release: Changes: - Migration to version 2.0.1 of the GenApi runtime. (mvBlueCOUGAR installer) NEW FEATURES: - - New pixel format introduced: ibpfMono12Packed_V2. (all shipped packages) + - New pixel format introduced: 'ibpfMono12Packed_V2'. (all shipped packages) - New property 'PixelFormat' added to 'Camera' parameter list of the device. This (all shipped packages) property can be used to explicitly define the pixel format used for the transfer between the capture device and the host systems memory. This can differ from the @@ -7870,7 +8477,7 @@ Date: Release: Changes: - Property 'TapSortEnable' published. (mvIMPACT_acquire.h) - A default interface layout that will be used for all devices supporting it can be (wxPropView) selected and is stored when closing the application now. - - Very simple hard disc recording mechanism added. (wxPropView) + - Very simple hard disk recording mechanism added. (wxPropView) - A driver will offer more than one result queue now. The number of result queues can (all shipped packages) be defined by writing to the 'ResultQueueCount' property before opening a device. - HDR control features added for mvBlueFOX-x00w devices. (mvBlueFOX-lib) @@ -10674,7 +11281,7 @@ Date: Release: Changes: NEW FEATURE: Property 'flashType'. (mvBlueFOX-lib) - NEW FEATURE: wxPropView can be used to store a recorded sequence to disc (wxPropView) + NEW FEATURE: wxPropView can be used to store a recorded sequence to disk (wxPropView) NEW BEHAVIOUR: The default doc-string is an empty string now. (mvPropHandling-lib) @@ -11723,4 +12330,3 @@ Date: Release: Changes: BUGFIX: Wrong colours in Bayer converted images for 1024*768 sensor. (mvBlueFOX-lib) < 11.03.2005 previous versions - diff --git a/Cigarette/MvIMPACT/mvPropHandling/Include/mvPropHandlingDatatypes.h b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvPropHandling/Include/mvPropHandlingDatatypes.h similarity index 93% rename from Cigarette/MvIMPACT/mvPropHandling/Include/mvPropHandlingDatatypes.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvPropHandling/Include/mvPropHandlingDatatypes.h index d5a92269..9bd0bbc3 100644 --- a/Cigarette/MvIMPACT/mvPropHandling/Include/mvPropHandlingDatatypes.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/MvIMPACT/mvPropHandling/Include/mvPropHandlingDatatypes.h @@ -1,12 +1,15 @@ //----------------------------------------------------------------------------- -// (C) Copyright 2005 - 2021 by MATRIX VISION GmbH +// @description: Impact Acquire +// @copyright: (C) Copyright 2005 - 2023 by Balluff GmbH +// @authors: APIs and drivers development team at Balluff GmbH +// @initial date: 2005 // -// This software is provided by MATRIX VISION GmbH "as is" +// This software is provided by Balluff GmbH "as is" // and any express or implied warranties, including, but not limited to, the // implied warranties of merchantability and fitness for a particular purpose // are disclaimed. // -// In no event shall MATRIX VISION GmbH be liable for any direct, +// In no event shall Balluff GmbH be liable for any direct, // indirect, incidental, special, exemplary, or consequential damages // (including, but not limited to, procurement of substitute goods or services; // loss of use, data, or profits; or business interruption) however caused and @@ -34,22 +37,23 @@ namespace acquire #if !defined(DOXYGEN_SHOULD_SKIP_THIS) && !defined(WRAP_ANY) # if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) -typedef __int64 int64_type; -typedef unsigned __int64 uint64_type; # ifdef __BORLANDC__ // is Borland compiler? # pragma option push -b // force enums to the size of integer # endif // __BORLANDC__ -# elif defined(linux) || defined(__linux) || defined(__linux__) -# ifndef WRAP_ANY -# include -# endif // #ifndef WRAP_ANY -typedef int64_t int64_type; -typedef uint64_t uint64_type; -# else -# error "unsupported target environment" # endif // #if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) #endif // #if !defined(DOXYGEN_SHOULD_SKIP_THIS) && !defined(WRAP_ANY) +#include + +/** + * \if DOXYGEN_CPP_DOCUMENTATION + * \addtogroup CommonInterface + * \else + * \addtogroup FeatureAccess + * \endif + * @{ + */ + //============================================================================= //========================= constants ========================================= //============================================================================= @@ -122,7 +126,6 @@ const unsigned int smIgnoreProperties = 0x8; //============================================================================= //----------------------------------------------------------------------------- /// \brief Defines the type of callback to register. -/// \ingroup CommonInterface enum TCallbackType //----------------------------------------------------------------------------- { @@ -140,12 +143,10 @@ enum TCallbackType }; //----------------------------------------------------------------------------- -/// \enum TComponentFlag /// \brief Flags defining access rights and other component properties /** * Flags defining access rights and other component properties */ -/// \ingroup CommonInterface enum TComponentFlag // flags_attribute, uint_type //----------------------------------------------------------------------------- { @@ -259,15 +260,17 @@ enum TComponentFlag // flags_attribute, uint_type */ cfShouldBeDisplayedAsEnumeration = 0x1000, /// \brief This feature will \b ALWAYS execute internal update callbacks and will treat each write attempt to this feature as a value different from the current one. + /** + * \since 2.0.11 + */ cfAlwaysForceUpdate = 0x2000 #if !defined(DOXYGEN_SHOULD_SKIP_THIS) && !defined(WRAP_ANY) - , cfLast = cfShouldBeDisplayedAsEnumeration + , cfLast #endif // #if !defined(DOXYGEN_SHOULD_SKIP_THIS) && !defined(WRAP_ANY) }; //----------------------------------------------------------------------------- /// \brief Allowed values types for property objects -/// \ingroup CommonInterface enum TValueType // flags_attribute, uint_type, internal_attribute //----------------------------------------------------------------------------- { @@ -290,7 +293,6 @@ enum TValueType // flags_attribute, uint_type, internal_attribute * * \since 2.14.0 */ -/// \ingroup CommonInterface enum TComponentRepresentation //----------------------------------------------------------------------------- { @@ -320,7 +322,6 @@ enum TComponentRepresentation /** * This module can handle the types listed in this enumeration only. */ -/// \ingroup CommonInterface enum TComponentType // flags_attribute, uint_type //----------------------------------------------------------------------------- { @@ -361,7 +362,6 @@ enum TComponentType // flags_attribute, uint_type * These visibilities can be used to create GUIs in which the user can select the * amount of features he wants to access. */ -/// \ingroup CommonInterface enum TComponentVisibility //----------------------------------------------------------------------------- { @@ -377,53 +377,39 @@ enum TComponentVisibility //----------------------------------------------------------------------------- /// \brief Error codes of the module handling everything related to properties. -/// \ingroup CommonInterface enum TPROPHANDLING_ERROR //----------------------------------------------------------------------------- { /// \brief The operation has been executed successfully. - /** - * \b [0] - */ PROPHANDLING_NO_ERROR = 0, /// \brief This component is not a list. /** * A list operation for this component has been called but this * component does not reference a list. - * - * \n \b [-2000] */ PROPHANDLING_NOT_A_LIST = -2000, /// \brief This component is not a property. /** * A property operation for this component has been called but * this component does not reference a property. - * - * \n \b [-2001] */ PROPHANDLING_NOT_A_PROPERTY = -2001, /// \brief This component is not a method. /** * A method operation for this component has been called but * this component does not reference a method. - * - * \n \b [-2002] */ PROPHANDLING_NOT_A_METHOD = -2002, /// \brief The caller has no read rights for this component. /** * It has been tried to read data from this component, but the * caller has no read rights for this component. - * - * \n \b [-2003] */ PROPHANDLING_NO_READ_RIGHTS = -2003, /// \brief The caller has no write rights for this component. /** * It has been tried to modify data of this component, but the * caller has no write rights for this component. - * - * \n \b [-2004] */ PROPHANDLING_NO_WRITE_RIGHTS = -2004, /// \brief The caller can't modify the size of this component. @@ -437,16 +423,12 @@ enum TPROPHANDLING_ERROR * of values it can handle. Therefore before resizing a property * check if the new size might exceeds this maximum value by calling * the appropriate function. - * - * \n \b [-2005] */ PROPHANDLING_NO_MODIFY_SIZE_RIGHTS = -2005, /// \brief The two involved components are not compatible. /** * An operation requiring two compatible components has been * called with two components, which are not compatible. - * - * \n \b [-2006] */ PROPHANDLING_INCOMPATIBLE_COMPONENTS = -2006, //PROPHANDLING_NO_USER_ALLOCATED_MEMORY = -2007, // no longer supported @@ -454,8 +436,6 @@ enum TPROPHANDLING_ERROR /** * This error might also be generated if a certain feature is not available on the current * platform. - * - * \n \b [-2008] */ PROPHANDLING_UNSUPPORTED_PARAMETER = -2008, /// \brief Different sized value buffers have been passed. @@ -463,8 +443,6 @@ enum TPROPHANDLING_ERROR * While trying to read value pairs the caller passed two different * sized value buffers to a function while one is too small to hold * all the information. - * - * \n \b [-2009] */ PROPHANDLING_SIZE_MISMATCH = -2009, /// \brief A feature that is not implemented so far has been requested. @@ -472,19 +450,15 @@ enum TPROPHANDLING_ERROR * The caller requested a feature, that hasn't been implemented so * far. This error code is only provided for compatibility and will be * set in very rare cases only. - * - * \n \b [-2010] */ PROPHANDLING_IMPLEMENTATION_MISSING = -2010, /// \brief An access token object couldn't be created. /** * This can either happen, because the caller has not the rights required - * to create an access token or because the system runs very low on memory. + * to create an access token or because the system runs very low on memory. \n * - * \deprecated This error code currently is not used anywhere within this framework. + * \b Deprecated: This error code currently is not used anywhere within this framework. * It might be removed in a future version. - * - * \n \b [-2011] */ PROPHANDLING_ACCESSTOKEN_CREATION_FAILED = -2011, /// \brief It has been tried to assign an invalid value to a property. @@ -492,24 +466,20 @@ enum TPROPHANDLING_ERROR * This can either happen if the value lies above or below the * min. or max. value for a property or when it has been tried to * write a value to a property, which is not in the properties translation - * dictionary (if it defines one). + * dictionary (if it defines one). \n * * To find out, which values are allowed for the property in question - * the user should + * the user should \n * - * • check if the property defines a translation dictionary \n - * • check the allowed values within a translation dictionary if one is defined \n - * • check the min and max value for properties, that define limits \n - * - * \n \b [-2012] + * • Check if the property defines a translation dictionary. \n + * • Check the allowed values within a translation dictionary if one is defined. \n + * • Check the min and max value for properties, that define limits. \n */ PROPHANDLING_INVALID_PROP_VALUE = -2012, /// \brief The properties translation table has been corrupted. /** * The properties translation table has been corrupted for an unknown * reason and can't be used anymore. - * - * \n \b [-2013] */ PROPHANDLING_PROP_TRANSLATION_TABLE_CORRUPTED = -2013, /// \brief Invalid value index. @@ -523,16 +493,12 @@ enum TPROPHANDLING_ERROR * of a property minus one for properties with the mvIMPACT::acquire::cfFixedSize * flag set. Other properties will automatically adjust the size once the user * writes to an index out of bounds. - * - * \n \b [-2014] */ PROPHANDLING_PROP_VAL_ID_OUT_OF_BOUNDS = -2014, /// \brief This property doesn't define a translation table. /** * The caller tried to modify a translation table, that hasn't been * defined for this property. - * - * \n \b [-2015] */ PROPHANDLING_PROP_TRANSLATION_TABLE_NOT_DEFINED = -2015, /// \brief An invalid value has been passed to the property. @@ -540,52 +506,35 @@ enum TPROPHANDLING_ERROR * Although properties are quite tolerant regarding the allowed assignment * for them some value types can't be used to write all properties. * As an example assigning a float value to an integer property would - * result in this error. + * result in this error. \n * * Another reason for this error might be when a user tried to access e.g. a * float property with functions meant to be used for int properties. - * - * \n \b [-2016] */ PROPHANDLING_INVALID_PROP_VALUE_TYPE = -2016, /// \brief A too large value has been passed. /** * One or more of the values the caller tried to write to the * property are larger than the max. allowed value for this property. - * - * \n \b [-2017] */ PROPHANDLING_PROP_VAL_TOO_LARGE = -2017, /// \brief A too small value has been passed. /** * One or more of the values the caller tried to write to the * property are smaller than the min. allowed value for this property. - * - * \n \b [-2018] */ PROPHANDLING_PROP_VAL_TOO_SMALL = -2018, /// \brief The specified component could not be found. - /** - * \n \b [-2019] - */ PROPHANDLING_COMPONENT_NOT_FOUND = -2019, /// \brief An invalid list has been referenced. - /** - * \n \b [-2020] - */ PROPHANDLING_LIST_ID_INVALID = -2020, /// \brief An invalid component within a list has been referenced. - /** - * \n \b [-2021] - */ PROPHANDLING_COMPONENT_ID_INVALID = -2021, /// \brief The specified list index is occupied. /** * During the creation of a new component the caller tried * the insert the newly created component into a list at a position * already used to store another component. - * - * \n \b [-2022] */ PROPHANDLING_LIST_ENTRY_OCCUPIED = -2022, /// \brief The specified component already has an owner. @@ -593,14 +542,9 @@ enum TPROPHANDLING_ERROR * The caller tried to assign an owner to a component that * already has an owner. An owner once defined can't be modified * anymore. - * - * \n \b [-2023] */ PROPHANDLING_COMPONENT_HAS_OWNER_ALREADY = -2023, /// \brief It has been tried to register the same component at twice in the same list. - /** - * \n \b [-2024] - */ PROPHANDLING_COMPONENT_ALREADY_REGISTERED = -2024, /// \brief The desired data can't be accessed or found. /** @@ -610,84 +554,51 @@ enum TPROPHANDLING_ERROR * be that the current user is not allowed to perform a certain operation on the * desired data (e.g. a user tries to delete a setting that is stored with * global scope but does not have elevated access rights). - * - * \n \b [-2025] */ PROPHANDLING_LIST_CANT_ACCESS_DATA = -2025, /// \brief The function pointer of the referenced method object is invalid. - /** - * \n \b [-2026] - */ PROPHANDLING_METHOD_PTR_INVALID = -2026, /// \brief A method object has an invalid parameter list. - /** - * \n \b [-2027] - */ PROPHANDLING_METHOD_INVALID_PARAM_LIST = -2027, /// \brief This indicates an internal error occurred within the SWIG generated wrapper code, when working under Python. - /** - * \n \b [-2028] - */ PROPHANDLING_SWIG_ERROR = -2028, /// \brief A invalid input parameter has been passed to a function of this module. /** * In most cases this might be a unassigned pointer, where a valid pointer * to a user defined storage location was expected. - * - * \n \b [-2029] */ PROPHANDLING_INVALID_INPUT_PARAMETER = -2029, /// \brief The user tried to modify a registered callback, but no callback has been registered for this component. - /** - * \n \b [-2030] - */ PROPHANDLING_COMPONENT_NO_CALLBACK_REGISTERED = -2030, /// \brief The user tried to read data into a user supplied storage location, but the buffer was too small to accommodate the result. - /** - * \n \b [-2031] - */ PROPHANDLING_INPUT_BUFFER_TOO_SMALL = -2031, /// \brief The number of parameters is incorrect. /** * This error might occur if the user called a function with a variable number of input or output * parameters and the number of parameters passed to the function does not match the * number of required parameters. - * - * \n \b [-2032] */ PROPHANDLING_WRONG_PARAM_COUNT = -2032, /// \brief The user tried to execute an operation, which is not supported by the component he is referring to. - /** - * \n \b [-2033] - */ PROPHANDLING_UNSUPPORTED_OPERATION = -2033, /// \brief The user tried to save(serialize) a property list without having the right to do this. - /** - * \n \b [-2034] - */ PROPHANDLING_CANT_SERIALIZE_DATA = -2034, /// \brief The user tried to use a file to update or create a component list, that does not contain valid data for this operation. /** * This e.g. might happen, if the file does not contain valid XML data or XML data that is not * well formed. - * - * \n \b [-2035] */ PROPHANDLING_INVALID_FILE_CONTENT = -2035, /// \brief This error will occur when the modules internal representation of the tree structure does not allow the allocation of a new list. /** * In this case either new list can't be allocated. The only way to solve this problem is to delete * another list. - * - * \n \b [-2036] */ PROPHANDLING_CANT_ALLOCATE_LIST = -2036, /// \brief The referenced list has no space left to register this component at the desired position. /** * There might however be an empty space within the list where this element could be registered, but * no more components can be registered at the end of this list. - * - * \n \b [-2037] */ PROPHANDLING_CANT_REGISTER_COMPONENT = -2037, /// \brief The user tried to assign a value to a property, that is invalid. @@ -695,8 +606,6 @@ enum TPROPHANDLING_ERROR * This will result in a detailed error message in the log-file. This error might * arise e.g. when a string property doesn't allow the string to contain numbers. In this * case trying to set the properties value to 'blabla7bla' would cause this error. - * - * \n \b [-2038] */ PROPHANDLING_PROP_VALIDATION_FAILED = -2038, // If new error codes must be added this happens HERE! @@ -708,9 +617,6 @@ enum TPROPHANDLING_ERROR PROPHANDLING_LAST_ASSIGNED_ERROR_CODE = PROPHANDLING_PSEUDO_LAST_ASSIGNED_ERROR_CODE - 2, #endif // #if !defined(DOXYGEN_SHOULD_SKIP_THIS) && !defined(WRAP_ANY) /// \brief Defines the last valid error code value for the property module. - /** - * \n \b [-2099] - */ PROPHANDLING_LAST_VALID_ERROR_CODE = -2099 }; @@ -721,7 +627,6 @@ enum TPROPHANDLING_ERROR * (under Windows©) from/into the Registry. These flags define how * this is done. */ -/// \ingroup CommonInterface enum TStorageFlag // flags_attribute, uint_type //----------------------------------------------------------------------------- { @@ -866,7 +771,7 @@ enum TStorageFlag // flags_attribute, uint_type /// \brief Stores/loads the setting in/from RAM file. /** * If this flag is specified the data will be imported/exported from/to RAM. Data stored this way should be - * freed when no longer needed to avoid a waste of memory. However when shutting down mvIMPACT Acquire completely + * freed when no longer needed to avoid a waste of memory. However when shutting down Impact Acquire completely * (e.g. when unloading the mvPropHandling library from memory all memory allocated by settings stored this way will be * freed automatically). * @@ -890,14 +795,14 @@ enum TStorageFlag // flags_attribute, uint_type /// \brief Processes GenICam sequencer set related data during a storage operation. /** * \note This flag will affect devices operated in GenICam interface layout only! - * \warning Settings stored this way cannot be loaded on systems running mvIMPACT Acquire versions smaller than 2.28.0. + * \attention Settings stored this way cannot be loaded on systems running Impact Acquire versions smaller than 2.28.0. * \since 2.28.0 */ sfProcessGenICamSequencerData = 0x00040000, /// \brief Processes GenICam user set related data during a storage operation. /** * \note This flag will affect devices operated in GenICam interface layout only! - * \warning Settings stored this way cannot be loaded on systems running mvIMPACT Acquire versions smaller than 2.28.0. + * \attention Settings stored this way cannot be loaded on systems running Impact Acquire versions smaller than 2.28.0. * \since 2.28.0 */ sfProcessGenICamUserSetData = 0x00080000 @@ -911,7 +816,6 @@ enum TStorageFlag // flags_attribute, uint_type * * \since 2.19.0 */ -/// \ingroup CommonInterface enum TStorageLocation // uint_type //----------------------------------------------------------------------------- { @@ -952,7 +856,7 @@ enum TStorageLocation // uint_type /// \brief Stores/loads the setting in/from RAM file /** * Setting data will be stored in the RAM of the current process. Data stored this way should be - * freed when no longer needed to avoid a waste of memory. However when shutting down mvIMPACT Acquire completely + * freed when no longer needed to avoid a waste of memory. However when shutting down Impact Acquire completely * (e.g. when unloading the mvPropHandling library from memory all memory allocated by settings stored this way will be * freed automatically). */ @@ -961,7 +865,6 @@ enum TStorageLocation // uint_type //----------------------------------------------------------------------------- /// \brief Defines the scope for data import/export operations. -/// \ingroup CommonInterface enum TScope //----------------------------------------------------------------------------- { @@ -990,6 +893,8 @@ typedef enum TScope TScope; */ typedef void* CallbackHandle; +/// @} + // restore Borland compiler switch 'force enums to the size of integer' #if !defined(DOXYGEN_SHOULD_SKIP_THIS) && !defined(WRAP_ANY) # ifdef _WIN32 diff --git a/Cigarette/OpenCV455Simple/include/opencv2/calib3d.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/calib3d.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/calib3d.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/calib3d.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/calib3d/calib3d.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/calib3d/calib3d.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/calib3d/calib3d.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/calib3d/calib3d.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/calib3d/calib3d_c.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/calib3d/calib3d_c.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/calib3d/calib3d_c.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/calib3d/calib3d_c.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/affine.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/affine.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/affine.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/affine.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/async.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/async.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/async.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/async.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/base.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/base.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/base.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/base.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/bindings_utils.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/bindings_utils.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/bindings_utils.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/bindings_utils.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/bufferpool.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/bufferpool.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/bufferpool.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/bufferpool.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/check.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/check.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/check.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/check.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/core.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/core.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/core.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/core.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/core_c.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/core_c.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/core_c.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/core_c.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cuda.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cuda.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cuda.inl.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda.inl.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cuda.inl.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda.inl.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/block.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/block.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cuda/block.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/block.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/border_interpolate.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/border_interpolate.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cuda/border_interpolate.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/border_interpolate.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/color.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/color.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cuda/color.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/color.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/common.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/common.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cuda/common.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/common.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/datamov_utils.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/datamov_utils.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cuda/datamov_utils.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/datamov_utils.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/detail/color_detail.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/detail/color_detail.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cuda/detail/color_detail.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/detail/color_detail.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/detail/reduce.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/detail/reduce.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cuda/detail/reduce.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/detail/reduce.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/detail/reduce_key_val.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/detail/reduce_key_val.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cuda/detail/reduce_key_val.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/detail/reduce_key_val.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/detail/transform_detail.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/detail/transform_detail.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cuda/detail/transform_detail.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/detail/transform_detail.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/detail/type_traits_detail.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/detail/type_traits_detail.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cuda/detail/type_traits_detail.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/detail/type_traits_detail.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/detail/vec_distance_detail.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/detail/vec_distance_detail.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cuda/detail/vec_distance_detail.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/detail/vec_distance_detail.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/dynamic_smem.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/dynamic_smem.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cuda/dynamic_smem.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/dynamic_smem.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/emulation.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/emulation.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cuda/emulation.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/emulation.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/filters.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/filters.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cuda/filters.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/filters.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/funcattrib.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/funcattrib.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cuda/funcattrib.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/funcattrib.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/functional.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/functional.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cuda/functional.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/functional.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/limits.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/limits.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cuda/limits.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/limits.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/reduce.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/reduce.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cuda/reduce.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/reduce.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/saturate_cast.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/saturate_cast.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cuda/saturate_cast.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/saturate_cast.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/scan.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/scan.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cuda/scan.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/scan.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/simd_functions.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/simd_functions.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cuda/simd_functions.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/simd_functions.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/transform.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/transform.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cuda/transform.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/transform.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/type_traits.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/type_traits.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cuda/type_traits.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/type_traits.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/utility.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/utility.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cuda/utility.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/utility.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/vec_distance.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/vec_distance.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cuda/vec_distance.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/vec_distance.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/vec_math.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/vec_math.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cuda/vec_math.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/vec_math.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/vec_traits.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/vec_traits.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cuda/vec_traits.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/vec_traits.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/warp.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/warp.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cuda/warp.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/warp.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/warp_reduce.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/warp_reduce.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cuda/warp_reduce.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/warp_reduce.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/warp_shuffle.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/warp_shuffle.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cuda/warp_shuffle.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda/warp_shuffle.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cuda_stream_accessor.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda_stream_accessor.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cuda_stream_accessor.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda_stream_accessor.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cuda_types.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda_types.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cuda_types.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cuda_types.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cv_cpu_dispatch.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cv_cpu_dispatch.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cv_cpu_dispatch.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cv_cpu_dispatch.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cv_cpu_helper.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cv_cpu_helper.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cv_cpu_helper.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cv_cpu_helper.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cvdef.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cvdef.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cvdef.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cvdef.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cvstd.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cvstd.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cvstd.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cvstd.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cvstd.inl.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cvstd.inl.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cvstd.inl.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cvstd.inl.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/cvstd_wrapper.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cvstd_wrapper.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/cvstd_wrapper.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/cvstd_wrapper.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/detail/async_promise.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/detail/async_promise.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/detail/async_promise.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/detail/async_promise.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/detail/dispatch_helper.impl.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/detail/dispatch_helper.impl.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/detail/dispatch_helper.impl.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/detail/dispatch_helper.impl.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/detail/exception_ptr.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/detail/exception_ptr.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/detail/exception_ptr.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/detail/exception_ptr.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/directx.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/directx.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/directx.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/directx.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/dualquaternion.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/dualquaternion.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/dualquaternion.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/dualquaternion.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/dualquaternion.inl.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/dualquaternion.inl.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/dualquaternion.inl.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/dualquaternion.inl.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/eigen.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/eigen.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/eigen.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/eigen.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/fast_math.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/fast_math.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/fast_math.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/fast_math.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/hal/hal.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/hal/hal.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/hal/hal.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/hal/hal.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/hal/interface.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/hal/interface.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/hal/interface.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/hal/interface.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_avx.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_avx.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_avx.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_avx.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_avx512.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_avx512.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_avx512.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_avx512.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_cpp.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_cpp.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_cpp.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_cpp.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_forward.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_forward.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_forward.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_forward.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_msa.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_msa.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_msa.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_msa.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_neon.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_neon.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_neon.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_neon.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_rvv.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_rvv.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_rvv.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_rvv.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_rvv071.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_rvv071.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_rvv071.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_rvv071.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_sse.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_sse.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_sse.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_sse.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_sse_em.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_sse_em.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_sse_em.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_sse_em.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_vsx.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_vsx.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_vsx.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_vsx.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_wasm.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_wasm.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_wasm.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/hal/intrin_wasm.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/hal/msa_macros.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/hal/msa_macros.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/hal/msa_macros.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/hal/msa_macros.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/hal/simd_utils.impl.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/hal/simd_utils.impl.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/hal/simd_utils.impl.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/hal/simd_utils.impl.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/mat.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/mat.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/mat.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/mat.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/mat.inl.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/mat.inl.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/mat.inl.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/mat.inl.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/matx.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/matx.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/matx.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/matx.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/neon_utils.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/neon_utils.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/neon_utils.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/neon_utils.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/ocl.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/ocl.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/ocl.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/ocl.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/ocl_genbase.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/ocl_genbase.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/ocl_genbase.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/ocl_genbase.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/ocl_defs.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/ocl_defs.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/opencl/ocl_defs.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/ocl_defs.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/opencl_info.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/opencl_info.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/opencl/opencl_info.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/opencl_info.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/opencl_svm.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/opencl_svm.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/opencl/opencl_svm.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/opencl_svm.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/autogenerated/opencl_clblas.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/autogenerated/opencl_clblas.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/autogenerated/opencl_clblas.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/autogenerated/opencl_clblas.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/autogenerated/opencl_clfft.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/autogenerated/opencl_clfft.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/autogenerated/opencl_clfft.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/autogenerated/opencl_clfft.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/autogenerated/opencl_core.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/autogenerated/opencl_core.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/autogenerated/opencl_core.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/autogenerated/opencl_core.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/autogenerated/opencl_core_wrappers.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/autogenerated/opencl_core_wrappers.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/autogenerated/opencl_core_wrappers.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/autogenerated/opencl_core_wrappers.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/autogenerated/opencl_gl.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/autogenerated/opencl_gl.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/autogenerated/opencl_gl.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/autogenerated/opencl_gl.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/autogenerated/opencl_gl_wrappers.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/autogenerated/opencl_gl_wrappers.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/autogenerated/opencl_gl_wrappers.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/autogenerated/opencl_gl_wrappers.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_clblas.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_clblas.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_clblas.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_clblas.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_clfft.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_clfft.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_clfft.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_clfft.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_core.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_core.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_core.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_core.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_core_wrappers.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_core_wrappers.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_core_wrappers.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_core_wrappers.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_gl.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_gl.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_gl.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_gl.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_gl_wrappers.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_gl_wrappers.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_gl_wrappers.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_gl_wrappers.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_svm_20.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_svm_20.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_svm_20.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_svm_20.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_svm_definitions.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_svm_definitions.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_svm_definitions.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_svm_definitions.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_svm_hsa_extension.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_svm_hsa_extension.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_svm_hsa_extension.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opencl/runtime/opencl_svm_hsa_extension.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/opengl.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opengl.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/opengl.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/opengl.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/operations.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/operations.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/operations.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/operations.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/optim.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/optim.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/optim.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/optim.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/ovx.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/ovx.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/ovx.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/ovx.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/parallel/backend/parallel_for.openmp.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/parallel/backend/parallel_for.openmp.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/parallel/backend/parallel_for.openmp.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/parallel/backend/parallel_for.openmp.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/parallel/backend/parallel_for.tbb.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/parallel/backend/parallel_for.tbb.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/parallel/backend/parallel_for.tbb.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/parallel/backend/parallel_for.tbb.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/parallel/parallel_backend.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/parallel/parallel_backend.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/parallel/parallel_backend.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/parallel/parallel_backend.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/persistence.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/persistence.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/persistence.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/persistence.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/quaternion.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/quaternion.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/quaternion.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/quaternion.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/quaternion.inl.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/quaternion.inl.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/quaternion.inl.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/quaternion.inl.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/saturate.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/saturate.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/saturate.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/saturate.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/simd_intrinsics.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/simd_intrinsics.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/simd_intrinsics.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/simd_intrinsics.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/softfloat.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/softfloat.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/softfloat.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/softfloat.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/sse_utils.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/sse_utils.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/sse_utils.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/sse_utils.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/traits.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/traits.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/traits.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/traits.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/types.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/types.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/types.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/types.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/types_c.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/types_c.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/types_c.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/types_c.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/utility.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/utility.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/utility.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/utility.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/utils/allocator_stats.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/utils/allocator_stats.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/utils/allocator_stats.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/utils/allocator_stats.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/utils/allocator_stats.impl.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/utils/allocator_stats.impl.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/utils/allocator_stats.impl.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/utils/allocator_stats.impl.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/utils/filesystem.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/utils/filesystem.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/utils/filesystem.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/utils/filesystem.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/utils/instrumentation.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/utils/instrumentation.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/utils/instrumentation.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/utils/instrumentation.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/utils/logger.defines.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/utils/logger.defines.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/utils/logger.defines.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/utils/logger.defines.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/utils/logger.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/utils/logger.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/utils/logger.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/utils/logger.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/utils/logtag.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/utils/logtag.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/utils/logtag.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/utils/logtag.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/utils/tls.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/utils/tls.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/utils/tls.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/utils/tls.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/utils/trace.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/utils/trace.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/utils/trace.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/utils/trace.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/va_intel.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/va_intel.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/va_intel.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/va_intel.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/version.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/version.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/version.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/version.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/core/vsx_utils.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/vsx_utils.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/core/vsx_utils.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/core/vsx_utils.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/cvconfig.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/cvconfig.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/cvconfig.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/cvconfig.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/dnn.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/dnn.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/dnn.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/dnn.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/dnn/all_layers.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/dnn/all_layers.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/dnn/all_layers.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/dnn/all_layers.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/dnn/dict.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/dnn/dict.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/dnn/dict.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/dnn/dict.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/dnn/dnn.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/dnn/dnn.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/dnn/dnn.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/dnn/dnn.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/dnn/dnn.inl.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/dnn/dnn.inl.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/dnn/dnn.inl.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/dnn/dnn.inl.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/dnn/layer.details.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/dnn/layer.details.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/dnn/layer.details.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/dnn/layer.details.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/dnn/layer.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/dnn/layer.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/dnn/layer.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/dnn/layer.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/dnn/shape_utils.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/dnn/shape_utils.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/dnn/shape_utils.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/dnn/shape_utils.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/dnn/utils/debug_utils.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/dnn/utils/debug_utils.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/dnn/utils/debug_utils.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/dnn/utils/debug_utils.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/dnn/utils/inference_engine.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/dnn/utils/inference_engine.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/dnn/utils/inference_engine.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/dnn/utils/inference_engine.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/dnn/version.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/dnn/version.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/dnn/version.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/dnn/version.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/features2d.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/features2d.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/features2d.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/features2d.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/features2d/features2d.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/features2d/features2d.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/features2d/features2d.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/features2d/features2d.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/features2d/hal/interface.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/features2d/hal/interface.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/features2d/hal/interface.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/features2d/hal/interface.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/all_indices.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/all_indices.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/all_indices.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/all_indices.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/allocator.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/allocator.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/allocator.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/allocator.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/any.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/any.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/any.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/any.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/autotuned_index.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/autotuned_index.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/autotuned_index.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/autotuned_index.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/composite_index.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/composite_index.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/composite_index.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/composite_index.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/config.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/config.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/config.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/config.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/defines.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/defines.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/defines.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/defines.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/dist.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/dist.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/dist.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/dist.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/dummy.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/dummy.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/dummy.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/dummy.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/dynamic_bitset.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/dynamic_bitset.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/dynamic_bitset.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/dynamic_bitset.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/flann.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/flann.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/flann.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/flann.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/flann_base.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/flann_base.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/flann_base.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/flann_base.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/general.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/general.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/general.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/general.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/ground_truth.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/ground_truth.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/ground_truth.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/ground_truth.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/hdf5.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/hdf5.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/hdf5.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/hdf5.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/heap.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/heap.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/heap.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/heap.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/hierarchical_clustering_index.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/hierarchical_clustering_index.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/hierarchical_clustering_index.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/hierarchical_clustering_index.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/index_testing.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/index_testing.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/index_testing.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/index_testing.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/kdtree_index.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/kdtree_index.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/kdtree_index.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/kdtree_index.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/kdtree_single_index.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/kdtree_single_index.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/kdtree_single_index.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/kdtree_single_index.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/kmeans_index.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/kmeans_index.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/kmeans_index.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/kmeans_index.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/linear_index.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/linear_index.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/linear_index.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/linear_index.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/logger.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/logger.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/logger.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/logger.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/lsh_index.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/lsh_index.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/lsh_index.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/lsh_index.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/lsh_table.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/lsh_table.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/lsh_table.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/lsh_table.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/matrix.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/matrix.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/matrix.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/matrix.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/miniflann.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/miniflann.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/miniflann.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/miniflann.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/nn_index.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/nn_index.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/nn_index.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/nn_index.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/object_factory.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/object_factory.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/object_factory.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/object_factory.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/params.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/params.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/params.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/params.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/random.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/random.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/random.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/random.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/result_set.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/result_set.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/result_set.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/result_set.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/sampling.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/sampling.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/sampling.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/sampling.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/saving.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/saving.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/saving.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/saving.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/simplex_downhill.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/simplex_downhill.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/simplex_downhill.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/simplex_downhill.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/flann/timer.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/timer.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/flann/timer.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/flann/timer.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/core.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/core.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/core.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/core.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/cpu/core.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/cpu/core.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/cpu/core.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/cpu/core.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/cpu/gcpukernel.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/cpu/gcpukernel.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/cpu/gcpukernel.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/cpu/gcpukernel.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/cpu/imgproc.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/cpu/imgproc.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/cpu/imgproc.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/cpu/imgproc.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/cpu/stereo.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/cpu/stereo.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/cpu/stereo.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/cpu/stereo.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/cpu/video.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/cpu/video.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/cpu/video.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/cpu/video.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/fluid/core.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/fluid/core.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/fluid/core.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/fluid/core.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/fluid/gfluidbuffer.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/fluid/gfluidbuffer.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/fluid/gfluidbuffer.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/fluid/gfluidbuffer.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/fluid/gfluidkernel.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/fluid/gfluidkernel.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/fluid/gfluidkernel.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/fluid/gfluidkernel.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/fluid/imgproc.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/fluid/imgproc.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/fluid/imgproc.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/fluid/imgproc.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/garg.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/garg.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/garg.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/garg.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/garray.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/garray.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/garray.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/garray.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/gasync_context.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gasync_context.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/gasync_context.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gasync_context.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/gcall.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gcall.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/gcall.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gcall.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/gcommon.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gcommon.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/gcommon.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gcommon.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/gcompiled.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gcompiled.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/gcompiled.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gcompiled.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/gcompiled_async.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gcompiled_async.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/gcompiled_async.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gcompiled_async.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/gcompoundkernel.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gcompoundkernel.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/gcompoundkernel.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gcompoundkernel.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/gcomputation.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gcomputation.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/gcomputation.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gcomputation.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/gcomputation_async.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gcomputation_async.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/gcomputation_async.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gcomputation_async.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/gframe.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gframe.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/gframe.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gframe.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/gkernel.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gkernel.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/gkernel.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gkernel.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/gmat.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gmat.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/gmat.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gmat.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/gmetaarg.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gmetaarg.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/gmetaarg.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gmetaarg.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/gopaque.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gopaque.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/gopaque.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gopaque.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/gproto.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gproto.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/gproto.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gproto.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/gpu/core.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gpu/core.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/gpu/core.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gpu/core.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/gpu/ggpukernel.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gpu/ggpukernel.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/gpu/ggpukernel.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gpu/ggpukernel.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/gpu/imgproc.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gpu/imgproc.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/gpu/imgproc.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gpu/imgproc.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/gscalar.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gscalar.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/gscalar.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gscalar.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/gstreaming.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gstreaming.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/gstreaming.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gstreaming.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/gtransform.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gtransform.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/gtransform.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gtransform.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/gtype_traits.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gtype_traits.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/gtype_traits.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gtype_traits.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/gtyped.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gtyped.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/gtyped.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/gtyped.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/imgproc.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/imgproc.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/imgproc.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/imgproc.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/infer.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/infer.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/infer.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/infer.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/infer/bindings_ie.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/infer/bindings_ie.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/infer/bindings_ie.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/infer/bindings_ie.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/infer/ie.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/infer/ie.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/infer/ie.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/infer/ie.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/infer/onnx.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/infer/onnx.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/infer/onnx.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/infer/onnx.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/infer/parsers.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/infer/parsers.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/infer/parsers.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/infer/parsers.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/media.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/media.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/media.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/media.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/ocl/core.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/ocl/core.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/ocl/core.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/ocl/core.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/ocl/goclkernel.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/ocl/goclkernel.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/ocl/goclkernel.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/ocl/goclkernel.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/ocl/imgproc.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/ocl/imgproc.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/ocl/imgproc.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/ocl/imgproc.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/opencv_includes.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/opencv_includes.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/opencv_includes.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/opencv_includes.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/operators.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/operators.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/operators.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/operators.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/own/assert.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/own/assert.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/own/assert.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/own/assert.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/own/convert.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/own/convert.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/own/convert.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/own/convert.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/own/cvdefs.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/own/cvdefs.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/own/cvdefs.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/own/cvdefs.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/own/exports.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/own/exports.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/own/exports.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/own/exports.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/own/mat.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/own/mat.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/own/mat.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/own/mat.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/own/saturate.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/own/saturate.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/own/saturate.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/own/saturate.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/own/scalar.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/own/scalar.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/own/scalar.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/own/scalar.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/own/types.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/own/types.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/own/types.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/own/types.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/plaidml/core.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/plaidml/core.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/plaidml/core.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/plaidml/core.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/plaidml/gplaidmlkernel.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/plaidml/gplaidmlkernel.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/plaidml/gplaidmlkernel.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/plaidml/gplaidmlkernel.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/plaidml/plaidml.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/plaidml/plaidml.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/plaidml/plaidml.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/plaidml/plaidml.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/python/python.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/python/python.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/python/python.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/python/python.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/render.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/render.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/render.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/render.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/render/render.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/render/render.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/render/render.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/render/render.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/render/render_types.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/render/render_types.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/render/render_types.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/render/render_types.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/rmat.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/rmat.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/rmat.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/rmat.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/s11n.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/s11n.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/s11n.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/s11n.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/s11n/base.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/s11n/base.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/s11n/base.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/s11n/base.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/stereo.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/stereo.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/stereo.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/stereo.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/cap.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/cap.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/cap.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/cap.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/desync.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/desync.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/desync.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/desync.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/format.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/format.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/format.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/format.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/gstreamer/gstreamerpipeline.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/gstreamer/gstreamerpipeline.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/gstreamer/gstreamerpipeline.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/gstreamer/gstreamerpipeline.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/gstreamer/gstreamersource.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/gstreamer/gstreamersource.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/gstreamer/gstreamersource.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/gstreamer/gstreamersource.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/meta.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/meta.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/meta.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/meta.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/onevpl/cfg_params.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/onevpl/cfg_params.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/onevpl/cfg_params.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/onevpl/cfg_params.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/onevpl/data_provider_interface.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/onevpl/data_provider_interface.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/onevpl/data_provider_interface.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/onevpl/data_provider_interface.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/onevpl/device_selector_interface.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/onevpl/device_selector_interface.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/onevpl/device_selector_interface.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/onevpl/device_selector_interface.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/onevpl/source.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/onevpl/source.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/onevpl/source.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/onevpl/source.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/source.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/source.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/source.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/source.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/sync.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/sync.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/sync.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/streaming/sync.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/util/any.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/util/any.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/util/any.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/util/any.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/util/compiler_hints.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/util/compiler_hints.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/util/compiler_hints.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/util/compiler_hints.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/util/copy_through_move.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/util/copy_through_move.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/util/copy_through_move.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/util/copy_through_move.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/util/optional.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/util/optional.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/util/optional.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/util/optional.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/util/throw.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/util/throw.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/util/throw.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/util/throw.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/util/type_traits.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/util/type_traits.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/util/type_traits.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/util/type_traits.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/util/util.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/util/util.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/util/util.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/util/util.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/util/variant.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/util/variant.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/util/variant.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/util/variant.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/gapi/video.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/video.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/gapi/video.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/gapi/video.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/highgui.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/highgui.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/highgui.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/highgui.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/highgui/highgui.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/highgui/highgui.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/highgui/highgui.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/highgui/highgui.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/highgui/highgui_c.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/highgui/highgui_c.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/highgui/highgui_c.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/highgui/highgui_c.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/imgcodecs.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/imgcodecs.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/imgcodecs.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/imgcodecs.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/imgcodecs/imgcodecs.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/imgcodecs/imgcodecs.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/imgcodecs/imgcodecs.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/imgcodecs/imgcodecs.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/imgcodecs/imgcodecs_c.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/imgcodecs/imgcodecs_c.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/imgcodecs/imgcodecs_c.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/imgcodecs/imgcodecs_c.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/imgcodecs/ios.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/imgcodecs/ios.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/imgcodecs/ios.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/imgcodecs/ios.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/imgcodecs/legacy/constants_c.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/imgcodecs/legacy/constants_c.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/imgcodecs/legacy/constants_c.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/imgcodecs/legacy/constants_c.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/imgcodecs/macosx.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/imgcodecs/macosx.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/imgcodecs/macosx.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/imgcodecs/macosx.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/imgproc.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/imgproc.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/imgproc.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/imgproc.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/imgproc/bindings.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/imgproc/bindings.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/imgproc/bindings.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/imgproc/bindings.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/imgproc/detail/gcgraph.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/imgproc/detail/gcgraph.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/imgproc/detail/gcgraph.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/imgproc/detail/gcgraph.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/imgproc/hal/hal.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/imgproc/hal/hal.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/imgproc/hal/hal.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/imgproc/hal/hal.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/imgproc/hal/interface.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/imgproc/hal/interface.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/imgproc/hal/interface.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/imgproc/hal/interface.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/imgproc/imgproc.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/imgproc/imgproc.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/imgproc/imgproc.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/imgproc/imgproc.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/imgproc/imgproc_c.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/imgproc/imgproc_c.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/imgproc/imgproc_c.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/imgproc/imgproc_c.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/imgproc/segmentation.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/imgproc/segmentation.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/imgproc/segmentation.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/imgproc/segmentation.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/imgproc/types_c.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/imgproc/types_c.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/imgproc/types_c.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/imgproc/types_c.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/ml.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/ml.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/ml.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/ml.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/ml/ml.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/ml/ml.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/ml/ml.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/ml/ml.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/ml/ml.inl.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/ml/ml.inl.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/ml/ml.inl.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/ml/ml.inl.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/objdetect.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/objdetect.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/objdetect.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/objdetect.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/objdetect/detection_based_tracker.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/objdetect/detection_based_tracker.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/objdetect/detection_based_tracker.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/objdetect/detection_based_tracker.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/objdetect/face.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/objdetect/face.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/objdetect/face.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/objdetect/face.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/objdetect/objdetect.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/objdetect/objdetect.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/objdetect/objdetect.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/objdetect/objdetect.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/opencv.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/opencv.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/opencv.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/opencv.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/opencv_modules.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/opencv_modules.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/opencv_modules.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/opencv_modules.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/photo.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/photo.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/photo.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/photo.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/photo/cuda.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/photo/cuda.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/photo/cuda.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/photo/cuda.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/photo/legacy/constants_c.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/photo/legacy/constants_c.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/photo/legacy/constants_c.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/photo/legacy/constants_c.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/photo/photo.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/photo/photo.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/photo/photo.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/photo/photo.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/stitching.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/stitching.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/stitching.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/stitching.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/autocalib.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/autocalib.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/autocalib.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/autocalib.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/blenders.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/blenders.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/blenders.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/blenders.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/camera.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/camera.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/camera.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/camera.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/exposure_compensate.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/exposure_compensate.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/exposure_compensate.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/exposure_compensate.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/matchers.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/matchers.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/matchers.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/matchers.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/motion_estimators.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/motion_estimators.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/motion_estimators.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/motion_estimators.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/seam_finders.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/seam_finders.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/seam_finders.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/seam_finders.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/timelapsers.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/timelapsers.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/timelapsers.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/timelapsers.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/util.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/util.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/util.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/util.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/util_inl.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/util_inl.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/util_inl.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/util_inl.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/warpers.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/warpers.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/warpers.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/warpers.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/warpers_inl.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/warpers_inl.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/warpers_inl.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/stitching/detail/warpers_inl.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/stitching/warpers.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/stitching/warpers.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/stitching/warpers.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/stitching/warpers.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/video.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/video.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/video.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/video.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/video/background_segm.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/video/background_segm.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/video/background_segm.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/video/background_segm.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/video/detail/tracking.detail.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/video/detail/tracking.detail.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/video/detail/tracking.detail.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/video/detail/tracking.detail.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/video/legacy/constants_c.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/video/legacy/constants_c.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/video/legacy/constants_c.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/video/legacy/constants_c.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/video/tracking.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/video/tracking.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/video/tracking.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/video/tracking.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/video/video.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/video/video.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/video/video.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/video/video.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/videoio.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/videoio.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/videoio.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/videoio.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/videoio/cap_ios.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/videoio/cap_ios.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/videoio/cap_ios.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/videoio/cap_ios.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/videoio/legacy/constants_c.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/videoio/legacy/constants_c.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/videoio/legacy/constants_c.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/videoio/legacy/constants_c.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/videoio/registry.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/videoio/registry.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/videoio/registry.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/videoio/registry.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/videoio/videoio.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/videoio/videoio.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/videoio/videoio.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/videoio/videoio.hpp diff --git a/Cigarette/OpenCV455Simple/include/opencv2/videoio/videoio_c.h b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/videoio/videoio_c.h similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/videoio/videoio_c.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/videoio/videoio_c.h diff --git a/Cigarette/OpenCV455Simple/include/opencv2/world.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/world.hpp similarity index 100% rename from Cigarette/OpenCV455Simple/include/opencv2/world.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/include/opencv2/world.hpp diff --git a/Cigarette/OpenCV455Simple/win64/vc14/lib/OpenCVConfig-version.cmake b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/win64/vc14/lib/OpenCVConfig-version.cmake similarity index 100% rename from Cigarette/OpenCV455Simple/win64/vc14/lib/OpenCVConfig-version.cmake rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/win64/vc14/lib/OpenCVConfig-version.cmake diff --git a/Cigarette/OpenCV455Simple/win64/vc14/lib/OpenCVConfig.cmake b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/win64/vc14/lib/OpenCVConfig.cmake similarity index 100% rename from Cigarette/OpenCV455Simple/win64/vc14/lib/OpenCVConfig.cmake rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/win64/vc14/lib/OpenCVConfig.cmake diff --git a/Cigarette/OpenCV455Simple/win64/vc14/lib/OpenCVModules-debug.cmake b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/win64/vc14/lib/OpenCVModules-debug.cmake similarity index 100% rename from Cigarette/OpenCV455Simple/win64/vc14/lib/OpenCVModules-debug.cmake rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/win64/vc14/lib/OpenCVModules-debug.cmake diff --git a/Cigarette/OpenCV455Simple/win64/vc14/lib/OpenCVModules-release.cmake b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/win64/vc14/lib/OpenCVModules-release.cmake similarity index 100% rename from Cigarette/OpenCV455Simple/win64/vc14/lib/OpenCVModules-release.cmake rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/win64/vc14/lib/OpenCVModules-release.cmake diff --git a/Cigarette/OpenCV455Simple/win64/vc14/lib/OpenCVModules.cmake b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/win64/vc14/lib/OpenCVModules.cmake similarity index 100% rename from Cigarette/OpenCV455Simple/win64/vc14/lib/OpenCVModules.cmake rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/win64/vc14/lib/OpenCVModules.cmake diff --git a/Cigarette/OpenCV455Simple/win64/vc14/lib/opencv_world455.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/win64/vc14/lib/opencv_world455.lib similarity index 100% rename from Cigarette/OpenCV455Simple/win64/vc14/lib/opencv_world455.lib rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/win64/vc14/lib/opencv_world455.lib diff --git a/Cigarette/OpenCV455Simple/win64/vc14/lib/opencv_world455d.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/win64/vc14/lib/opencv_world455d.lib similarity index 100% rename from Cigarette/OpenCV455Simple/win64/vc14/lib/opencv_world455d.lib rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/win64/vc14/lib/opencv_world455d.lib diff --git a/Cigarette/OpenCV455Simple/win64/vc15/lib/OpenCVConfig-version.cmake b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/win64/vc15/lib/OpenCVConfig-version.cmake similarity index 100% rename from Cigarette/OpenCV455Simple/win64/vc15/lib/OpenCVConfig-version.cmake rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/win64/vc15/lib/OpenCVConfig-version.cmake diff --git a/Cigarette/OpenCV455Simple/win64/vc15/lib/OpenCVConfig.cmake b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/win64/vc15/lib/OpenCVConfig.cmake similarity index 100% rename from Cigarette/OpenCV455Simple/win64/vc15/lib/OpenCVConfig.cmake rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/win64/vc15/lib/OpenCVConfig.cmake diff --git a/Cigarette/OpenCV455Simple/win64/vc15/lib/OpenCVModules-debug.cmake b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/win64/vc15/lib/OpenCVModules-debug.cmake similarity index 100% rename from Cigarette/OpenCV455Simple/win64/vc15/lib/OpenCVModules-debug.cmake rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/win64/vc15/lib/OpenCVModules-debug.cmake diff --git a/Cigarette/OpenCV455Simple/win64/vc15/lib/OpenCVModules-release.cmake b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/win64/vc15/lib/OpenCVModules-release.cmake similarity index 100% rename from Cigarette/OpenCV455Simple/win64/vc15/lib/OpenCVModules-release.cmake rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/win64/vc15/lib/OpenCVModules-release.cmake diff --git a/Cigarette/OpenCV455Simple/win64/vc15/lib/OpenCVModules.cmake b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/win64/vc15/lib/OpenCVModules.cmake similarity index 100% rename from Cigarette/OpenCV455Simple/win64/vc15/lib/OpenCVModules.cmake rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/win64/vc15/lib/OpenCVModules.cmake diff --git a/Cigarette/OpenCV455Simple/win64/vc15/lib/opencv_world455.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/win64/vc15/lib/opencv_world455.lib similarity index 100% rename from Cigarette/OpenCV455Simple/win64/vc15/lib/opencv_world455.lib rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/win64/vc15/lib/opencv_world455.lib diff --git a/Cigarette/OpenCV455Simple/win64/vc15/lib/opencv_world455d.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/win64/vc15/lib/opencv_world455d.lib similarity index 100% rename from Cigarette/OpenCV455Simple/win64/vc15/lib/opencv_world455d.lib rename to 240510-常德GDX1-1相机-1280x800/Cigarette/OpenCV455Simple/win64/vc15/lib/opencv_world455d.lib diff --git a/Cigarette/PLC/PLCDevice.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/PLC/PLCDevice.cpp similarity index 66% rename from Cigarette/PLC/PLCDevice.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/PLC/PLCDevice.cpp index 6bbe89bb..58a23f2e 100644 --- a/Cigarette/PLC/PLCDevice.cpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/PLC/PLCDevice.cpp @@ -2,31 +2,49 @@ #include "PLCDevice.h" #include "modbus.h" #include +#include +#include -modbus_t * g_modbus; //Modbus TCP +extern SysConf g_sys_conf; + +modbus_t * g_modbus = NULL; //Modbus TCP bool PLCDevice::init_plc(PLCDevice* PLCptr) { + // modbus_connect() 建立连接,成功返回0,错误返回-1 + // modbus_new_rtu 生成RTU的连接,建立成功则返回指向modbus_t结构的指针,否则将返回NULL/0 + + const char* comport = g_sys_conf.ComPort.data(); + qDebug() << "COM:" << comport; //连接PLC - g_modbus = modbus_new_rtu("COM1", 9600, 'N', 8, 1); - modbus_set_debug(g_modbus, 0); + g_modbus = modbus_new_rtu(comport, 9600, 'N', 8, 1); + modbus_set_debug(g_modbus, 0); // 用flag设置debug调试标志位,flag=1时显示modbus消息的字节 + modbus_set_response_timeout(g_modbus, 1, 0); // 设置响应超时 + modbus_connect(g_modbus); + modbus_set_slave(g_modbus, 1); // 设置从站id - modbus_set_response_timeout(g_modbus, 1, 0); - if (g_modbus && modbus_connect(g_modbus) == -1) { + uint8_t data; + int ret = modbus_read_bits(g_modbus, 30000, 1, &data); + if (g_modbus && ret == -1) { PLCptr->g_plc_ok = false; } else { - modbus_set_slave(g_modbus, 1); + PLCptr->g_plc_ok = true; } return true; } + bool PLCDevice::disconnect_plc(void) { - modbus_close(g_modbus); - modbus_free(g_modbus); + if(g_modbus) + { + modbus_close(g_modbus); + modbus_free(g_modbus); + } return true; } + int PLCDevice::write_bit_2_plc(int addr, int value) { if (g_plc_ok) diff --git a/Cigarette/PLC/PLCDevice.h b/240510-常德GDX1-1相机-1280x800/Cigarette/PLC/PLCDevice.h similarity index 88% rename from Cigarette/PLC/PLCDevice.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/PLC/PLCDevice.h index 7366286f..e9bc1618 100644 --- a/Cigarette/PLC/PLCDevice.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/PLC/PLCDevice.h @@ -7,6 +7,9 @@ public: bool g_plc_ok; + //[0]:1=连接,0=断开 + uint8_t g_plc_status; + static bool init_plc(PLCDevice *PLCptr); int write_bit_2_plc(int addr, int value); diff --git a/Cigarette/Pylon6.2/include/Base/GCArray.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/Base/GCArray.h similarity index 100% rename from Cigarette/Pylon6.2/include/Base/GCArray.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/Base/GCArray.h diff --git a/Cigarette/Pylon6.2/include/Base/GCBase.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/Base/GCBase.h similarity index 100% rename from Cigarette/Pylon6.2/include/Base/GCBase.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/Base/GCBase.h diff --git a/Cigarette/Pylon6.2/include/Base/GCError.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/Base/GCError.h similarity index 100% rename from Cigarette/Pylon6.2/include/Base/GCError.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/Base/GCError.h diff --git a/Cigarette/Pylon6.2/include/Base/GCException.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/Base/GCException.h similarity index 100% rename from Cigarette/Pylon6.2/include/Base/GCException.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/Base/GCException.h diff --git a/Cigarette/Pylon6.2/include/Base/GCLinkage.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/Base/GCLinkage.h similarity index 100% rename from Cigarette/Pylon6.2/include/Base/GCLinkage.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/Base/GCLinkage.h diff --git a/Cigarette/Pylon6.2/include/Base/GCNamespace.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/Base/GCNamespace.h similarity index 100% rename from Cigarette/Pylon6.2/include/Base/GCNamespace.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/Base/GCNamespace.h diff --git a/Cigarette/Pylon6.2/include/Base/GCRTSSUtilities.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/Base/GCRTSSUtilities.h similarity index 100% rename from Cigarette/Pylon6.2/include/Base/GCRTSSUtilities.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/Base/GCRTSSUtilities.h diff --git a/Cigarette/Pylon6.2/include/Base/GCString.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/Base/GCString.h similarity index 100% rename from Cigarette/Pylon6.2/include/Base/GCString.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/Base/GCString.h diff --git a/Cigarette/Pylon6.2/include/Base/GCStringVector.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/Base/GCStringVector.h similarity index 100% rename from Cigarette/Pylon6.2/include/Base/GCStringVector.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/Base/GCStringVector.h diff --git a/Cigarette/Pylon6.2/include/Base/GCSynch.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/Base/GCSynch.h similarity index 100% rename from Cigarette/Pylon6.2/include/Base/GCSynch.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/Base/GCSynch.h diff --git a/Cigarette/Pylon6.2/include/Base/GCTypes.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/Base/GCTypes.h similarity index 100% rename from Cigarette/Pylon6.2/include/Base/GCTypes.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/Base/GCTypes.h diff --git a/Cigarette/Pylon6.2/include/Base/GCUtilities.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/Base/GCUtilities.h similarity index 100% rename from Cigarette/Pylon6.2/include/Base/GCUtilities.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/Base/GCUtilities.h diff --git a/Cigarette/Pylon6.2/include/GenApi/Autovector.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/Autovector.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/Autovector.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/Autovector.h diff --git a/Cigarette/Pylon6.2/include/GenApi/ChunkAdapter.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/ChunkAdapter.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/ChunkAdapter.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/ChunkAdapter.h diff --git a/Cigarette/Pylon6.2/include/GenApi/ChunkAdapterDcam.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/ChunkAdapterDcam.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/ChunkAdapterDcam.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/ChunkAdapterDcam.h diff --git a/Cigarette/Pylon6.2/include/GenApi/ChunkAdapterGEV.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/ChunkAdapterGEV.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/ChunkAdapterGEV.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/ChunkAdapterGEV.h diff --git a/Cigarette/Pylon6.2/include/GenApi/ChunkAdapterGeneric.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/ChunkAdapterGeneric.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/ChunkAdapterGeneric.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/ChunkAdapterGeneric.h diff --git a/Cigarette/Pylon6.2/include/GenApi/ChunkAdapterU3V.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/ChunkAdapterU3V.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/ChunkAdapterU3V.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/ChunkAdapterU3V.h diff --git a/Cigarette/Pylon6.2/include/GenApi/ChunkPort.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/ChunkPort.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/ChunkPort.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/ChunkPort.h diff --git a/Cigarette/Pylon6.2/include/GenApi/Compatibility.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/Compatibility.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/Compatibility.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/Compatibility.h diff --git a/Cigarette/Pylon6.2/include/GenApi/Container.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/Container.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/Container.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/Container.h diff --git a/Cigarette/Pylon6.2/include/GenApi/Counter.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/Counter.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/Counter.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/Counter.h diff --git a/Cigarette/Pylon6.2/include/GenApi/DLLLoad.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/DLLLoad.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/DLLLoad.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/DLLLoad.h diff --git a/Cigarette/Pylon6.2/include/GenApi/EnumClasses.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/EnumClasses.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/EnumClasses.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/EnumClasses.h diff --git a/Cigarette/Pylon6.2/include/GenApi/EventAdapter.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/EventAdapter.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/EventAdapter.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/EventAdapter.h diff --git a/Cigarette/Pylon6.2/include/GenApi/EventAdapter1394.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/EventAdapter1394.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/EventAdapter1394.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/EventAdapter1394.h diff --git a/Cigarette/Pylon6.2/include/GenApi/EventAdapterCL.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/EventAdapterCL.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/EventAdapterCL.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/EventAdapterCL.h diff --git a/Cigarette/Pylon6.2/include/GenApi/EventAdapterGEV.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/EventAdapterGEV.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/EventAdapterGEV.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/EventAdapterGEV.h diff --git a/Cigarette/Pylon6.2/include/GenApi/EventAdapterGeneric.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/EventAdapterGeneric.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/EventAdapterGeneric.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/EventAdapterGeneric.h diff --git a/Cigarette/Pylon6.2/include/GenApi/EventAdapterU3V.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/EventAdapterU3V.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/EventAdapterU3V.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/EventAdapterU3V.h diff --git a/Cigarette/Pylon6.2/include/GenApi/EventPort.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/EventPort.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/EventPort.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/EventPort.h diff --git a/Cigarette/Pylon6.2/include/GenApi/Filestream.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/Filestream.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/Filestream.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/Filestream.h diff --git a/Cigarette/Pylon6.2/include/GenApi/GenApi.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/GenApi.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/GenApi.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/GenApi.h diff --git a/Cigarette/Pylon6.2/include/GenApi/GenApiDll.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/GenApiDll.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/GenApiDll.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/GenApiDll.h diff --git a/Cigarette/Pylon6.2/include/GenApi/GenApiLinkage.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/GenApiLinkage.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/GenApiLinkage.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/GenApiLinkage.h diff --git a/Cigarette/Pylon6.2/include/GenApi/GenApiNamespace.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/GenApiNamespace.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/GenApiNamespace.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/GenApiNamespace.h diff --git a/Cigarette/Pylon6.2/include/GenApi/GenApiVersion.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/GenApiVersion.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/GenApiVersion.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/GenApiVersion.h diff --git a/Cigarette/Pylon6.2/include/GenApi/IBase.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/IBase.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/IBase.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/IBase.h diff --git a/Cigarette/Pylon6.2/include/GenApi/IBoolean.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/IBoolean.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/IBoolean.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/IBoolean.h diff --git a/Cigarette/Pylon6.2/include/GenApi/ICategory.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/ICategory.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/ICategory.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/ICategory.h diff --git a/Cigarette/Pylon6.2/include/GenApi/IChunkPort.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/IChunkPort.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/IChunkPort.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/IChunkPort.h diff --git a/Cigarette/Pylon6.2/include/GenApi/ICommand.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/ICommand.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/ICommand.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/ICommand.h diff --git a/Cigarette/Pylon6.2/include/GenApi/IDestroy.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/IDestroy.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/IDestroy.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/IDestroy.h diff --git a/Cigarette/Pylon6.2/include/GenApi/IDeviceInfo.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/IDeviceInfo.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/IDeviceInfo.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/IDeviceInfo.h diff --git a/Cigarette/Pylon6.2/include/GenApi/IEnumEntry.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/IEnumEntry.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/IEnumEntry.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/IEnumEntry.h diff --git a/Cigarette/Pylon6.2/include/GenApi/IEnumeration.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/IEnumeration.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/IEnumeration.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/IEnumeration.h diff --git a/Cigarette/Pylon6.2/include/GenApi/IEnumerationT.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/IEnumerationT.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/IEnumerationT.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/IEnumerationT.h diff --git a/Cigarette/Pylon6.2/include/GenApi/IFloat.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/IFloat.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/IFloat.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/IFloat.h diff --git a/Cigarette/Pylon6.2/include/GenApi/IInteger.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/IInteger.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/IInteger.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/IInteger.h diff --git a/Cigarette/Pylon6.2/include/GenApi/INode.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/INode.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/INode.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/INode.h diff --git a/Cigarette/Pylon6.2/include/GenApi/INodeMap.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/INodeMap.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/INodeMap.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/INodeMap.h diff --git a/Cigarette/Pylon6.2/include/GenApi/INodeMapDyn.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/INodeMapDyn.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/INodeMapDyn.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/INodeMapDyn.h diff --git a/Cigarette/Pylon6.2/include/GenApi/IPort.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/IPort.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/IPort.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/IPort.h diff --git a/Cigarette/Pylon6.2/include/GenApi/IPortConstruct.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/IPortConstruct.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/IPortConstruct.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/IPortConstruct.h diff --git a/Cigarette/Pylon6.2/include/GenApi/IPortRecorder.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/IPortRecorder.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/IPortRecorder.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/IPortRecorder.h diff --git a/Cigarette/Pylon6.2/include/GenApi/IRegister.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/IRegister.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/IRegister.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/IRegister.h diff --git a/Cigarette/Pylon6.2/include/GenApi/ISelector.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/ISelector.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/ISelector.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/ISelector.h diff --git a/Cigarette/Pylon6.2/include/GenApi/ISelectorDigit.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/ISelectorDigit.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/ISelectorDigit.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/ISelectorDigit.h diff --git a/Cigarette/Pylon6.2/include/GenApi/IString.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/IString.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/IString.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/IString.h diff --git a/Cigarette/Pylon6.2/include/GenApi/IUserData.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/IUserData.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/IUserData.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/IUserData.h diff --git a/Cigarette/Pylon6.2/include/GenApi/IValue.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/IValue.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/IValue.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/IValue.h diff --git a/Cigarette/Pylon6.2/include/GenApi/NodeCallback.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/NodeCallback.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/NodeCallback.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/NodeCallback.h diff --git a/Cigarette/Pylon6.2/include/GenApi/NodeMapFactory.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/NodeMapFactory.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/NodeMapFactory.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/NodeMapFactory.h diff --git a/Cigarette/Pylon6.2/include/GenApi/NodeMapRef.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/NodeMapRef.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/NodeMapRef.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/NodeMapRef.h diff --git a/Cigarette/Pylon6.2/include/GenApi/Persistence.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/Persistence.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/Persistence.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/Persistence.h diff --git a/Cigarette/Pylon6.2/include/GenApi/Pointer.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/Pointer.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/Pointer.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/Pointer.h diff --git a/Cigarette/Pylon6.2/include/GenApi/PortImpl.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/PortImpl.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/PortImpl.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/PortImpl.h diff --git a/Cigarette/Pylon6.2/include/GenApi/PortWriteList.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/PortWriteList.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/PortWriteList.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/PortWriteList.h diff --git a/Cigarette/Pylon6.2/include/GenApi/Reference.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/Reference.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/Reference.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/Reference.h diff --git a/Cigarette/Pylon6.2/include/GenApi/RegisterSetHelper.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/RegisterSetHelper.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/RegisterSetHelper.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/RegisterSetHelper.h diff --git a/Cigarette/Pylon6.2/include/GenApi/SelectorSet.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/SelectorSet.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/SelectorSet.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/SelectorSet.h diff --git a/Cigarette/Pylon6.2/include/GenApi/StructPort.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/StructPort.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/StructPort.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/StructPort.h diff --git a/Cigarette/Pylon6.2/include/GenApi/Synch.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/Synch.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/Synch.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/Synch.h diff --git a/Cigarette/Pylon6.2/include/GenApi/Types.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/Types.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenApi/Types.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenApi/Types.h diff --git a/Cigarette/Pylon6.2/include/GenICam.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenICam.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenICam.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenICam.h diff --git a/Cigarette/Pylon6.2/include/GenICamFwd.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenICamFwd.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenICamFwd.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenICamFwd.h diff --git a/Cigarette/Pylon6.2/include/GenICamVersion.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenICamVersion.h similarity index 100% rename from Cigarette/Pylon6.2/include/GenICamVersion.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/GenICamVersion.h diff --git a/Cigarette/Pylon6.2/include/_GenICamVersion.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/_GenICamVersion.h similarity index 100% rename from Cigarette/Pylon6.2/include/_GenICamVersion.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/_GenICamVersion.h diff --git a/Cigarette/Pylon6.2/include/genapic/GenApiC.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/genapic/GenApiC.h similarity index 100% rename from Cigarette/Pylon6.2/include/genapic/GenApiC.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/genapic/GenApiC.h diff --git a/Cigarette/Pylon6.2/include/genapic/GenApiC32BitMethods.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/genapic/GenApiC32BitMethods.h similarity index 100% rename from Cigarette/Pylon6.2/include/genapic/GenApiC32BitMethods.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/genapic/GenApiC32BitMethods.h diff --git a/Cigarette/Pylon6.2/include/genapic/GenApiCDefines.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/genapic/GenApiCDefines.h similarity index 100% rename from Cigarette/Pylon6.2/include/genapic/GenApiCDefines.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/genapic/GenApiCDefines.h diff --git a/Cigarette/Pylon6.2/include/genapic/GenApiCEnums.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/genapic/GenApiCEnums.h similarity index 100% rename from Cigarette/Pylon6.2/include/genapic/GenApiCEnums.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/genapic/GenApiCEnums.h diff --git a/Cigarette/Pylon6.2/include/genapic/GenApiCError.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/genapic/GenApiCError.h similarity index 100% rename from Cigarette/Pylon6.2/include/genapic/GenApiCError.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/genapic/GenApiCError.h diff --git a/Cigarette/Pylon6.2/include/genapic/GenApiCTypes.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/genapic/GenApiCTypes.h similarity index 100% rename from Cigarette/Pylon6.2/include/genapic/GenApiCTypes.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/genapic/GenApiCTypes.h diff --git a/Cigarette/Pylon6.2/include/pylon/AcquireContinuousConfiguration.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/AcquireContinuousConfiguration.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/AcquireContinuousConfiguration.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/AcquireContinuousConfiguration.h diff --git a/Cigarette/Pylon6.2/include/pylon/AcquireSingleFrameConfiguration.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/AcquireSingleFrameConfiguration.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/AcquireSingleFrameConfiguration.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/AcquireSingleFrameConfiguration.h diff --git a/Cigarette/Pylon6.2/include/pylon/ArrayParameter.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/ArrayParameter.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/ArrayParameter.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/ArrayParameter.h diff --git a/Cigarette/Pylon6.2/include/pylon/AviCompressionOptions.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/AviCompressionOptions.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/AviCompressionOptions.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/AviCompressionOptions.h diff --git a/Cigarette/Pylon6.2/include/pylon/AviWriter.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/AviWriter.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/AviWriter.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/AviWriter.h diff --git a/Cigarette/Pylon6.2/include/pylon/BaslerUniversalCameraEventHandler.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/BaslerUniversalCameraEventHandler.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/BaslerUniversalCameraEventHandler.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/BaslerUniversalCameraEventHandler.h diff --git a/Cigarette/Pylon6.2/include/pylon/BaslerUniversalConfigurationEventHandler.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/BaslerUniversalConfigurationEventHandler.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/BaslerUniversalConfigurationEventHandler.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/BaslerUniversalConfigurationEventHandler.h diff --git a/Cigarette/Pylon6.2/include/pylon/BaslerUniversalGrabResultData.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/BaslerUniversalGrabResultData.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/BaslerUniversalGrabResultData.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/BaslerUniversalGrabResultData.h diff --git a/Cigarette/Pylon6.2/include/pylon/BaslerUniversalGrabResultPtr.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/BaslerUniversalGrabResultPtr.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/BaslerUniversalGrabResultPtr.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/BaslerUniversalGrabResultPtr.h diff --git a/Cigarette/Pylon6.2/include/pylon/BaslerUniversalImageEventHandler.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/BaslerUniversalImageEventHandler.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/BaslerUniversalImageEventHandler.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/BaslerUniversalImageEventHandler.h diff --git a/Cigarette/Pylon6.2/include/pylon/BaslerUniversalInstantCamera.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/BaslerUniversalInstantCamera.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/BaslerUniversalInstantCamera.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/BaslerUniversalInstantCamera.h diff --git a/Cigarette/Pylon6.2/include/pylon/BaslerUniversalInstantCameraArray.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/BaslerUniversalInstantCameraArray.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/BaslerUniversalInstantCameraArray.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/BaslerUniversalInstantCameraArray.h diff --git a/Cigarette/Pylon6.2/include/pylon/BooleanParameter.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/BooleanParameter.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/BooleanParameter.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/BooleanParameter.h diff --git a/Cigarette/Pylon6.2/include/pylon/BufferFactory.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/BufferFactory.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/BufferFactory.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/BufferFactory.h diff --git a/Cigarette/Pylon6.2/include/pylon/Callback.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/Callback.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/Callback.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/Callback.h diff --git a/Cigarette/Pylon6.2/include/pylon/CameraEventHandler.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/CameraEventHandler.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/CameraEventHandler.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/CameraEventHandler.h diff --git a/Cigarette/Pylon6.2/include/pylon/ChunkParser.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/ChunkParser.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/ChunkParser.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/ChunkParser.h diff --git a/Cigarette/Pylon6.2/include/pylon/CommandParameter.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/CommandParameter.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/CommandParameter.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/CommandParameter.h diff --git a/Cigarette/Pylon6.2/include/pylon/ConfigurationEventHandler.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/ConfigurationEventHandler.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/ConfigurationEventHandler.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/ConfigurationEventHandler.h diff --git a/Cigarette/Pylon6.2/include/pylon/ConfigurationHelper.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/ConfigurationHelper.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/ConfigurationHelper.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/ConfigurationHelper.h diff --git a/Cigarette/Pylon6.2/include/pylon/Container.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/Container.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/Container.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/Container.h diff --git a/Cigarette/Pylon6.2/include/pylon/Device.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/Device.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/Device.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/Device.h diff --git a/Cigarette/Pylon6.2/include/pylon/DeviceAccessMode.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/DeviceAccessMode.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/DeviceAccessMode.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/DeviceAccessMode.h diff --git a/Cigarette/Pylon6.2/include/pylon/DeviceClass.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/DeviceClass.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/DeviceClass.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/DeviceClass.h diff --git a/Cigarette/Pylon6.2/include/pylon/DeviceFactory.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/DeviceFactory.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/DeviceFactory.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/DeviceFactory.h diff --git a/Cigarette/Pylon6.2/include/pylon/DeviceInfo.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/DeviceInfo.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/DeviceInfo.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/DeviceInfo.h diff --git a/Cigarette/Pylon6.2/include/pylon/EnumParameter.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/EnumParameter.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/EnumParameter.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/EnumParameter.h diff --git a/Cigarette/Pylon6.2/include/pylon/EnumParameterT.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/EnumParameterT.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/EnumParameterT.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/EnumParameterT.h diff --git a/Cigarette/Pylon6.2/include/pylon/EventAdapter.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/EventAdapter.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/EventAdapter.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/EventAdapter.h diff --git a/Cigarette/Pylon6.2/include/pylon/EventGrabber.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/EventGrabber.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/EventGrabber.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/EventGrabber.h diff --git a/Cigarette/Pylon6.2/include/pylon/EventGrabberProxy.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/EventGrabberProxy.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/EventGrabberProxy.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/EventGrabberProxy.h diff --git a/Cigarette/Pylon6.2/include/pylon/FeaturePersistence.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/FeaturePersistence.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/FeaturePersistence.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/FeaturePersistence.h diff --git a/Cigarette/Pylon6.2/include/pylon/FloatParameter.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/FloatParameter.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/FloatParameter.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/FloatParameter.h diff --git a/Cigarette/Pylon6.2/include/pylon/GrabResultData.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/GrabResultData.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/GrabResultData.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/GrabResultData.h diff --git a/Cigarette/Pylon6.2/include/pylon/GrabResultPtr.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/GrabResultPtr.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/GrabResultPtr.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/GrabResultPtr.h diff --git a/Cigarette/Pylon6.2/include/pylon/Image.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/Image.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/Image.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/Image.h diff --git a/Cigarette/Pylon6.2/include/pylon/ImageDecompressor.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/ImageDecompressor.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/ImageDecompressor.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/ImageDecompressor.h diff --git a/Cigarette/Pylon6.2/include/pylon/ImageEventHandler.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/ImageEventHandler.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/ImageEventHandler.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/ImageEventHandler.h diff --git a/Cigarette/Pylon6.2/include/pylon/ImageFormatConverter.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/ImageFormatConverter.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/ImageFormatConverter.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/ImageFormatConverter.h diff --git a/Cigarette/Pylon6.2/include/pylon/ImagePersistence.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/ImagePersistence.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/ImagePersistence.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/ImagePersistence.h diff --git a/Cigarette/Pylon6.2/include/pylon/Info.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/Info.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/Info.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/Info.h diff --git a/Cigarette/Pylon6.2/include/pylon/InstantCamera.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/InstantCamera.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/InstantCamera.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/InstantCamera.h diff --git a/Cigarette/Pylon6.2/include/pylon/InstantCameraArray.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/InstantCameraArray.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/InstantCameraArray.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/InstantCameraArray.h diff --git a/Cigarette/Pylon6.2/include/pylon/InstantInterface.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/InstantInterface.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/InstantInterface.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/InstantInterface.h diff --git a/Cigarette/Pylon6.2/include/pylon/IntegerParameter.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/IntegerParameter.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/IntegerParameter.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/IntegerParameter.h diff --git a/Cigarette/Pylon6.2/include/pylon/Interface.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/Interface.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/Interface.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/Interface.h diff --git a/Cigarette/Pylon6.2/include/pylon/InterfaceInfo.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/InterfaceInfo.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/InterfaceInfo.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/InterfaceInfo.h diff --git a/Cigarette/Pylon6.2/include/pylon/NodeMapProxy.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/NodeMapProxy.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/NodeMapProxy.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/NodeMapProxy.h diff --git a/Cigarette/Pylon6.2/include/pylon/Parameter.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/Parameter.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/Parameter.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/Parameter.h diff --git a/Cigarette/Pylon6.2/include/pylon/ParameterIncludes.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/ParameterIncludes.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/ParameterIncludes.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/ParameterIncludes.h diff --git a/Cigarette/Pylon6.2/include/pylon/PayloadType.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PayloadType.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/PayloadType.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PayloadType.h diff --git a/Cigarette/Pylon6.2/include/pylon/Pixel.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/Pixel.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/Pixel.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/Pixel.h diff --git a/Cigarette/Pylon6.2/include/pylon/PixelData.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PixelData.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/PixelData.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PixelData.h diff --git a/Cigarette/Pylon6.2/include/pylon/PixelType.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PixelType.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/PixelType.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PixelType.h diff --git a/Cigarette/Pylon6.2/include/pylon/PixelTypeMapper.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PixelTypeMapper.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/PixelTypeMapper.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PixelTypeMapper.h diff --git a/Cigarette/Pylon6.2/include/pylon/Platform.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/Platform.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/Platform.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/Platform.h diff --git a/Cigarette/Pylon6.2/include/pylon/PylonBase.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PylonBase.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/PylonBase.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PylonBase.h diff --git a/Cigarette/Pylon6.2/include/pylon/PylonBitmapImage.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PylonBitmapImage.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/PylonBitmapImage.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PylonBitmapImage.h diff --git a/Cigarette/Pylon6.2/include/pylon/PylonDataComponent.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PylonDataComponent.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/PylonDataComponent.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PylonDataComponent.h diff --git a/Cigarette/Pylon6.2/include/pylon/PylonDataContainer.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PylonDataContainer.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/PylonDataContainer.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PylonDataContainer.h diff --git a/Cigarette/Pylon6.2/include/pylon/PylonDeviceProxy.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PylonDeviceProxy.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/PylonDeviceProxy.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PylonDeviceProxy.h diff --git a/Cigarette/Pylon6.2/include/pylon/PylonGUI.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PylonGUI.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/PylonGUI.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PylonGUI.h diff --git a/Cigarette/Pylon6.2/include/pylon/PylonGUIIncludes.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PylonGUIIncludes.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/PylonGUIIncludes.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PylonGUIIncludes.h diff --git a/Cigarette/Pylon6.2/include/pylon/PylonImage.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PylonImage.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/PylonImage.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PylonImage.h diff --git a/Cigarette/Pylon6.2/include/pylon/PylonImageBase.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PylonImageBase.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/PylonImageBase.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PylonImageBase.h diff --git a/Cigarette/Pylon6.2/include/pylon/PylonImageUserBufferEventHandler.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PylonImageUserBufferEventHandler.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/PylonImageUserBufferEventHandler.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PylonImageUserBufferEventHandler.h diff --git a/Cigarette/Pylon6.2/include/pylon/PylonIncludes.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PylonIncludes.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/PylonIncludes.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PylonIncludes.h diff --git a/Cigarette/Pylon6.2/include/pylon/PylonLinkage.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PylonLinkage.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/PylonLinkage.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PylonLinkage.h diff --git a/Cigarette/Pylon6.2/include/pylon/PylonUtility.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PylonUtility.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/PylonUtility.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PylonUtility.h diff --git a/Cigarette/Pylon6.2/include/pylon/PylonUtilityIncludes.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PylonUtilityIncludes.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/PylonUtilityIncludes.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PylonUtilityIncludes.h diff --git a/Cigarette/Pylon6.2/include/pylon/PylonVersion.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PylonVersion.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/PylonVersion.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PylonVersion.h diff --git a/Cigarette/Pylon6.2/include/pylon/PylonVersionInfo.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PylonVersionInfo.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/PylonVersionInfo.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PylonVersionInfo.h diff --git a/Cigarette/Pylon6.2/include/pylon/PylonVersionNumber.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PylonVersionNumber.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/PylonVersionNumber.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/PylonVersionNumber.h diff --git a/Cigarette/Pylon6.2/include/pylon/Result.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/Result.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/Result.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/Result.h diff --git a/Cigarette/Pylon6.2/include/pylon/ResultImage.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/ResultImage.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/ResultImage.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/ResultImage.h diff --git a/Cigarette/Pylon6.2/include/pylon/ReusableImage.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/ReusableImage.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/ReusableImage.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/ReusableImage.h diff --git a/Cigarette/Pylon6.2/include/pylon/SfncVersion.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/SfncVersion.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/SfncVersion.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/SfncVersion.h diff --git a/Cigarette/Pylon6.2/include/pylon/SoftwareTriggerConfiguration.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/SoftwareTriggerConfiguration.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/SoftwareTriggerConfiguration.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/SoftwareTriggerConfiguration.h diff --git a/Cigarette/Pylon6.2/include/pylon/StreamGrabber.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/StreamGrabber.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/StreamGrabber.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/StreamGrabber.h diff --git a/Cigarette/Pylon6.2/include/pylon/StreamGrabberProxy.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/StreamGrabberProxy.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/StreamGrabberProxy.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/StreamGrabberProxy.h diff --git a/Cigarette/Pylon6.2/include/pylon/StringParameter.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/StringParameter.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/StringParameter.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/StringParameter.h diff --git a/Cigarette/Pylon6.2/include/pylon/ThreadPriority.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/ThreadPriority.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/ThreadPriority.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/ThreadPriority.h diff --git a/Cigarette/Pylon6.2/include/pylon/TlFactory.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/TlFactory.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/TlFactory.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/TlFactory.h diff --git a/Cigarette/Pylon6.2/include/pylon/TlInfo.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/TlInfo.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/TlInfo.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/TlInfo.h diff --git a/Cigarette/Pylon6.2/include/pylon/TransportLayer.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/TransportLayer.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/TransportLayer.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/TransportLayer.h diff --git a/Cigarette/Pylon6.2/include/pylon/TypeMappings.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/TypeMappings.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/TypeMappings.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/TypeMappings.h diff --git a/Cigarette/Pylon6.2/include/pylon/VideoWriter.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/VideoWriter.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/VideoWriter.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/VideoWriter.h diff --git a/Cigarette/Pylon6.2/include/pylon/WaitObject.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/WaitObject.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/WaitObject.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/WaitObject.h diff --git a/Cigarette/Pylon6.2/include/pylon/WaitObjects.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/WaitObjects.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/WaitObjects.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/WaitObjects.h diff --git a/Cigarette/Pylon6.2/include/pylon/XmlFileProvider.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/XmlFileProvider.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/XmlFileProvider.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/XmlFileProvider.h diff --git a/Cigarette/Pylon6.2/include/pylon/_BaslerUniversalCameraParams.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/_BaslerUniversalCameraParams.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/_BaslerUniversalCameraParams.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/_BaslerUniversalCameraParams.h diff --git a/Cigarette/Pylon6.2/include/pylon/_BaslerUniversalChunkDataParams.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/_BaslerUniversalChunkDataParams.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/_BaslerUniversalChunkDataParams.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/_BaslerUniversalChunkDataParams.h diff --git a/Cigarette/Pylon6.2/include/pylon/_BaslerUniversalEventParams.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/_BaslerUniversalEventParams.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/_BaslerUniversalEventParams.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/_BaslerUniversalEventParams.h diff --git a/Cigarette/Pylon6.2/include/pylon/_BaslerUniversalInterfaceParams.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/_BaslerUniversalInterfaceParams.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/_BaslerUniversalInterfaceParams.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/_BaslerUniversalInterfaceParams.h diff --git a/Cigarette/Pylon6.2/include/pylon/_BaslerUniversalStreamParams.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/_BaslerUniversalStreamParams.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/_BaslerUniversalStreamParams.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/_BaslerUniversalStreamParams.h diff --git a/Cigarette/Pylon6.2/include/pylon/_BaslerUniversalTLParams.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/_BaslerUniversalTLParams.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/_BaslerUniversalTLParams.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/_BaslerUniversalTLParams.h diff --git a/Cigarette/Pylon6.2/include/pylon/_ImageFormatConverterParams.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/_ImageFormatConverterParams.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/_ImageFormatConverterParams.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/_ImageFormatConverterParams.h diff --git a/Cigarette/Pylon6.2/include/pylon/_InstantCameraParams.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/_InstantCameraParams.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/_InstantCameraParams.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/_InstantCameraParams.h diff --git a/Cigarette/Pylon6.2/include/pylon/_VideoWriterParams.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/_VideoWriterParams.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/_VideoWriterParams.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/_VideoWriterParams.h diff --git a/Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkCamera.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkCamera.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkCamera.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkCamera.h diff --git a/Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkCameraEventHandler.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkCameraEventHandler.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkCameraEventHandler.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkCameraEventHandler.h diff --git a/Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkConfigurationEventHandler.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkConfigurationEventHandler.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkConfigurationEventHandler.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkConfigurationEventHandler.h diff --git a/Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkDeviceInfo.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkDeviceInfo.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkDeviceInfo.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkDeviceInfo.h diff --git a/Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkGrabResultData.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkGrabResultData.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkGrabResultData.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkGrabResultData.h diff --git a/Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkGrabResultPtr.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkGrabResultPtr.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkGrabResultPtr.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkGrabResultPtr.h diff --git a/Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkImageEventHandler.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkImageEventHandler.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkImageEventHandler.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkImageEventHandler.h diff --git a/Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkInstantCamera.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkInstantCamera.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkInstantCamera.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkInstantCamera.h diff --git a/Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkInstantCameraArray.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkInstantCameraArray.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkInstantCameraArray.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/cameralink/BaslerCameraLinkInstantCameraArray.h diff --git a/Cigarette/Pylon6.2/include/pylon/cameralink/PylonCLSerDefs.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/cameralink/PylonCLSerDefs.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/cameralink/PylonCLSerDefs.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/cameralink/PylonCLSerDefs.h diff --git a/Cigarette/Pylon6.2/include/pylon/cameralink/PylonCLSerDeviceInfo.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/cameralink/PylonCLSerDeviceInfo.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/cameralink/PylonCLSerDeviceInfo.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/cameralink/PylonCLSerDeviceInfo.h diff --git a/Cigarette/Pylon6.2/include/pylon/cameralink/PylonCLSerIncludes.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/cameralink/PylonCLSerIncludes.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/cameralink/PylonCLSerIncludes.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/cameralink/PylonCLSerIncludes.h diff --git a/Cigarette/Pylon6.2/include/pylon/cameralink/PylonCameraLinkCamera.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/cameralink/PylonCameraLinkCamera.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/cameralink/PylonCameraLinkCamera.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/cameralink/PylonCameraLinkCamera.h diff --git a/Cigarette/Pylon6.2/include/pylon/cameralink/PylonCameraLinkIncludes.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/cameralink/PylonCameraLinkIncludes.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/cameralink/PylonCameraLinkIncludes.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/cameralink/PylonCameraLinkIncludes.h diff --git a/Cigarette/Pylon6.2/include/pylon/cameralink/_BaslerCameraLinkCameraParams.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/cameralink/_BaslerCameraLinkCameraParams.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/cameralink/_BaslerCameraLinkCameraParams.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/cameralink/_BaslerCameraLinkCameraParams.h diff --git a/Cigarette/Pylon6.2/include/pylon/gige/ActionTriggerConfiguration.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/ActionTriggerConfiguration.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/gige/ActionTriggerConfiguration.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/ActionTriggerConfiguration.h diff --git a/Cigarette/Pylon6.2/include/pylon/gige/BaslerGigECamera.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/BaslerGigECamera.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/gige/BaslerGigECamera.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/BaslerGigECamera.h diff --git a/Cigarette/Pylon6.2/include/pylon/gige/BaslerGigECameraEventHandler.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/BaslerGigECameraEventHandler.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/gige/BaslerGigECameraEventHandler.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/BaslerGigECameraEventHandler.h diff --git a/Cigarette/Pylon6.2/include/pylon/gige/BaslerGigEConfigurationEventHandler.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/BaslerGigEConfigurationEventHandler.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/gige/BaslerGigEConfigurationEventHandler.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/BaslerGigEConfigurationEventHandler.h diff --git a/Cigarette/Pylon6.2/include/pylon/gige/BaslerGigEDeviceInfo.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/BaslerGigEDeviceInfo.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/gige/BaslerGigEDeviceInfo.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/BaslerGigEDeviceInfo.h diff --git a/Cigarette/Pylon6.2/include/pylon/gige/BaslerGigEGrabResultData.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/BaslerGigEGrabResultData.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/gige/BaslerGigEGrabResultData.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/BaslerGigEGrabResultData.h diff --git a/Cigarette/Pylon6.2/include/pylon/gige/BaslerGigEGrabResultPtr.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/BaslerGigEGrabResultPtr.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/gige/BaslerGigEGrabResultPtr.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/BaslerGigEGrabResultPtr.h diff --git a/Cigarette/Pylon6.2/include/pylon/gige/BaslerGigEImageEventHandler.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/BaslerGigEImageEventHandler.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/gige/BaslerGigEImageEventHandler.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/BaslerGigEImageEventHandler.h diff --git a/Cigarette/Pylon6.2/include/pylon/gige/BaslerGigEInstantCamera.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/BaslerGigEInstantCamera.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/gige/BaslerGigEInstantCamera.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/BaslerGigEInstantCamera.h diff --git a/Cigarette/Pylon6.2/include/pylon/gige/BaslerGigEInstantCameraArray.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/BaslerGigEInstantCameraArray.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/gige/BaslerGigEInstantCameraArray.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/BaslerGigEInstantCameraArray.h diff --git a/Cigarette/Pylon6.2/include/pylon/gige/GigETransportLayer.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/GigETransportLayer.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/gige/GigETransportLayer.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/GigETransportLayer.h diff --git a/Cigarette/Pylon6.2/include/pylon/gige/PylonGigE.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/PylonGigE.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/gige/PylonGigE.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/PylonGigE.h diff --git a/Cigarette/Pylon6.2/include/pylon/gige/PylonGigECamera.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/PylonGigECamera.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/gige/PylonGigECamera.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/PylonGigECamera.h diff --git a/Cigarette/Pylon6.2/include/pylon/gige/PylonGigEDevice.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/PylonGigEDevice.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/gige/PylonGigEDevice.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/PylonGigEDevice.h diff --git a/Cigarette/Pylon6.2/include/pylon/gige/PylonGigEDeviceProxy.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/PylonGigEDeviceProxy.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/gige/PylonGigEDeviceProxy.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/PylonGigEDeviceProxy.h diff --git a/Cigarette/Pylon6.2/include/pylon/gige/PylonGigEIncludes.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/PylonGigEIncludes.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/gige/PylonGigEIncludes.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/PylonGigEIncludes.h diff --git a/Cigarette/Pylon6.2/include/pylon/gige/_BaslerGigECameraParams.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/_BaslerGigECameraParams.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/gige/_BaslerGigECameraParams.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/_BaslerGigECameraParams.h diff --git a/Cigarette/Pylon6.2/include/pylon/gige/_GigEChunkData.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/_GigEChunkData.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/gige/_GigEChunkData.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/_GigEChunkData.h diff --git a/Cigarette/Pylon6.2/include/pylon/gige/_GigEEventParams.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/_GigEEventParams.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/gige/_GigEEventParams.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/_GigEEventParams.h diff --git a/Cigarette/Pylon6.2/include/pylon/gige/_GigEStreamParams.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/_GigEStreamParams.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/gige/_GigEStreamParams.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/_GigEStreamParams.h diff --git a/Cigarette/Pylon6.2/include/pylon/gige/_GigETLParams.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/_GigETLParams.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/gige/_GigETLParams.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/gige/_GigETLParams.h diff --git a/Cigarette/Pylon6.2/include/pylon/private/DeviceSpecificCameraEventHandlerTie.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/private/DeviceSpecificCameraEventHandlerTie.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/private/DeviceSpecificCameraEventHandlerTie.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/private/DeviceSpecificCameraEventHandlerTie.h diff --git a/Cigarette/Pylon6.2/include/pylon/private/DeviceSpecificConfigurationEventHandlerTie.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/private/DeviceSpecificConfigurationEventHandlerTie.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/private/DeviceSpecificConfigurationEventHandlerTie.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/private/DeviceSpecificConfigurationEventHandlerTie.h diff --git a/Cigarette/Pylon6.2/include/pylon/private/DeviceSpecificGrabResultPtr.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/private/DeviceSpecificGrabResultPtr.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/private/DeviceSpecificGrabResultPtr.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/private/DeviceSpecificGrabResultPtr.h diff --git a/Cigarette/Pylon6.2/include/pylon/private/DeviceSpecificImageEventHandlerTie.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/private/DeviceSpecificImageEventHandlerTie.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/private/DeviceSpecificImageEventHandlerTie.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/private/DeviceSpecificImageEventHandlerTie.h diff --git a/Cigarette/Pylon6.2/include/pylon/private/DeviceSpecificInstantCamera.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/private/DeviceSpecificInstantCamera.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/private/DeviceSpecificInstantCamera.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/private/DeviceSpecificInstantCamera.h diff --git a/Cigarette/Pylon6.2/include/pylon/private/DeviceSpecificInstantCameraArray.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/private/DeviceSpecificInstantCameraArray.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/private/DeviceSpecificInstantCameraArray.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/private/DeviceSpecificInstantCameraArray.h diff --git a/Cigarette/Pylon6.2/include/pylon/stdinclude.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/stdinclude.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/stdinclude.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/stdinclude.h diff --git a/Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbCamera.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbCamera.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbCamera.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbCamera.h diff --git a/Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbCameraEventHandler.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbCameraEventHandler.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbCameraEventHandler.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbCameraEventHandler.h diff --git a/Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbConfigurationEventHandler.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbConfigurationEventHandler.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbConfigurationEventHandler.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbConfigurationEventHandler.h diff --git a/Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbDeviceInfo.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbDeviceInfo.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbDeviceInfo.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbDeviceInfo.h diff --git a/Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbGrabResultData.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbGrabResultData.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbGrabResultData.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbGrabResultData.h diff --git a/Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbGrabResultPtr.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbGrabResultPtr.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbGrabResultPtr.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbGrabResultPtr.h diff --git a/Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbImageEventHandler.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbImageEventHandler.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbImageEventHandler.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbImageEventHandler.h diff --git a/Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbInstantCamera.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbInstantCamera.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbInstantCamera.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbInstantCamera.h diff --git a/Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbInstantCameraArray.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbInstantCameraArray.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbInstantCameraArray.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/usb/BaslerUsbInstantCameraArray.h diff --git a/Cigarette/Pylon6.2/include/pylon/usb/PylonUsbCamera.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/usb/PylonUsbCamera.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/usb/PylonUsbCamera.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/usb/PylonUsbCamera.h diff --git a/Cigarette/Pylon6.2/include/pylon/usb/PylonUsbDefs.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/usb/PylonUsbDefs.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/usb/PylonUsbDefs.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/usb/PylonUsbDefs.h diff --git a/Cigarette/Pylon6.2/include/pylon/usb/PylonUsbIncludes.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/usb/PylonUsbIncludes.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/usb/PylonUsbIncludes.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/usb/PylonUsbIncludes.h diff --git a/Cigarette/Pylon6.2/include/pylon/usb/_BaslerUsbCameraParams.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/usb/_BaslerUsbCameraParams.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/usb/_BaslerUsbCameraParams.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/usb/_BaslerUsbCameraParams.h diff --git a/Cigarette/Pylon6.2/include/pylon/usb/_UsbChunkData.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/usb/_UsbChunkData.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/usb/_UsbChunkData.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/usb/_UsbChunkData.h diff --git a/Cigarette/Pylon6.2/include/pylon/usb/_UsbEventParams.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/usb/_UsbEventParams.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/usb/_UsbEventParams.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/usb/_UsbEventParams.h diff --git a/Cigarette/Pylon6.2/include/pylon/usb/_UsbStreamParams.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/usb/_UsbStreamParams.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/usb/_UsbStreamParams.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/usb/_UsbStreamParams.h diff --git a/Cigarette/Pylon6.2/include/pylon/usb/_UsbTLParams.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/usb/_UsbTLParams.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylon/usb/_UsbTLParams.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylon/usb/_UsbTLParams.h diff --git a/Cigarette/Pylon6.2/include/pylonc/GenDC.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylonc/GenDC.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylonc/GenDC.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylonc/GenDC.h diff --git a/Cigarette/Pylon6.2/include/pylonc/PFNC.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylonc/PFNC.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylonc/PFNC.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylonc/PFNC.h diff --git a/Cigarette/Pylon6.2/include/pylonc/PylonAviCompressionOptions.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylonc/PylonAviCompressionOptions.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylonc/PylonAviCompressionOptions.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylonc/PylonAviCompressionOptions.h diff --git a/Cigarette/Pylon6.2/include/pylonc/PylonC.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylonc/PylonC.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylonc/PylonC.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylonc/PylonC.h diff --git a/Cigarette/Pylon6.2/include/pylonc/PylonC32BitMethods.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylonc/PylonC32BitMethods.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylonc/PylonC32BitMethods.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylonc/PylonC32BitMethods.h diff --git a/Cigarette/Pylon6.2/include/pylonc/PylonCDefines.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylonc/PylonCDefines.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylonc/PylonCDefines.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylonc/PylonCDefines.h diff --git a/Cigarette/Pylon6.2/include/pylonc/PylonCEnums.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylonc/PylonCEnums.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylonc/PylonCEnums.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylonc/PylonCEnums.h diff --git a/Cigarette/Pylon6.2/include/pylonc/PylonCError.h b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylonc/PylonCError.h similarity index 100% rename from Cigarette/Pylon6.2/include/pylonc/PylonCError.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/include/pylonc/PylonCError.h diff --git a/Cigarette/Pylon6.2/lib/Win32/GCBase_MD_VC141_v3_1_Basler_pylon.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/lib/Win32/GCBase_MD_VC141_v3_1_Basler_pylon.lib similarity index 100% rename from Cigarette/Pylon6.2/lib/Win32/GCBase_MD_VC141_v3_1_Basler_pylon.lib rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/lib/Win32/GCBase_MD_VC141_v3_1_Basler_pylon.lib diff --git a/Cigarette/Pylon6.2/lib/Win32/GenApi_MD_VC141_v3_1_Basler_pylon.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/lib/Win32/GenApi_MD_VC141_v3_1_Basler_pylon.lib similarity index 100% rename from Cigarette/Pylon6.2/lib/Win32/GenApi_MD_VC141_v3_1_Basler_pylon.lib rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/lib/Win32/GenApi_MD_VC141_v3_1_Basler_pylon.lib diff --git a/Cigarette/Pylon6.2/lib/Win32/PylonBase_v6_2.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/lib/Win32/PylonBase_v6_2.lib similarity index 100% rename from Cigarette/Pylon6.2/lib/Win32/PylonBase_v6_2.lib rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/lib/Win32/PylonBase_v6_2.lib diff --git a/Cigarette/Pylon6.2/lib/Win32/PylonC.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/lib/Win32/PylonC.lib similarity index 100% rename from Cigarette/Pylon6.2/lib/Win32/PylonC.lib rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/lib/Win32/PylonC.lib diff --git a/Cigarette/Pylon6.2/lib/Win32/PylonC_BCC55.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/lib/Win32/PylonC_BCC55.lib similarity index 100% rename from Cigarette/Pylon6.2/lib/Win32/PylonC_BCC55.lib rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/lib/Win32/PylonC_BCC55.lib diff --git a/Cigarette/Pylon6.2/lib/Win32/PylonGUI_v6_2.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/lib/Win32/PylonGUI_v6_2.lib similarity index 100% rename from Cigarette/Pylon6.2/lib/Win32/PylonGUI_v6_2.lib rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/lib/Win32/PylonGUI_v6_2.lib diff --git a/Cigarette/Pylon6.2/lib/Win32/PylonUtility_v6_2.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/lib/Win32/PylonUtility_v6_2.lib similarity index 100% rename from Cigarette/Pylon6.2/lib/Win32/PylonUtility_v6_2.lib rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/lib/Win32/PylonUtility_v6_2.lib diff --git a/Cigarette/Pylon6.2/lib/Win64/GCBase_MD_VC141_v3_1_Basler_pylon.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/lib/Win64/GCBase_MD_VC141_v3_1_Basler_pylon.lib similarity index 100% rename from Cigarette/Pylon6.2/lib/Win64/GCBase_MD_VC141_v3_1_Basler_pylon.lib rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/lib/Win64/GCBase_MD_VC141_v3_1_Basler_pylon.lib diff --git a/Cigarette/Pylon6.2/lib/Win64/GenApi_MD_VC141_v3_1_Basler_pylon.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/lib/Win64/GenApi_MD_VC141_v3_1_Basler_pylon.lib similarity index 100% rename from Cigarette/Pylon6.2/lib/Win64/GenApi_MD_VC141_v3_1_Basler_pylon.lib rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/lib/Win64/GenApi_MD_VC141_v3_1_Basler_pylon.lib diff --git a/Cigarette/Pylon6.2/lib/Win64/PylonBase_v6_2.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/lib/Win64/PylonBase_v6_2.lib similarity index 100% rename from Cigarette/Pylon6.2/lib/Win64/PylonBase_v6_2.lib rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/lib/Win64/PylonBase_v6_2.lib diff --git a/Cigarette/Pylon6.2/lib/Win64/PylonC.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/lib/Win64/PylonC.lib similarity index 100% rename from Cigarette/Pylon6.2/lib/Win64/PylonC.lib rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/lib/Win64/PylonC.lib diff --git a/Cigarette/Pylon6.2/lib/Win64/PylonGUI_v6_2.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/lib/Win64/PylonGUI_v6_2.lib similarity index 100% rename from Cigarette/Pylon6.2/lib/Win64/PylonGUI_v6_2.lib rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/lib/Win64/PylonGUI_v6_2.lib diff --git a/Cigarette/Pylon6.2/lib/Win64/PylonUtility_v6_2.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/lib/Win64/PylonUtility_v6_2.lib similarity index 100% rename from Cigarette/Pylon6.2/lib/Win64/PylonUtility_v6_2.lib rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Pylon6.2/lib/Win64/PylonUtility_v6_2.lib diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/Qt5Ftp.pdb b/240510-常德GDX1-1相机-1280x800/Cigarette/Qt5Ftp.pdb new file mode 100644 index 00000000..1911babb Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/Qt5Ftp.pdb differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/Release/Cigarette.log b/240510-常德GDX1-1相机-1280x800/Cigarette/Release/Cigarette.log new file mode 100644 index 00000000..31db8d1f --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/Release/Cigarette.log @@ -0,0 +1,61 @@ + Moc'ing cigarette.h... + 系统找不到指定的路径。 + Uic'ing cigarette.ui... + 系统找不到指定的路径。 + Moc'ing threadReceive.h... + 系统找不到指定的路径。 + Moc'ing workthread.h... + 系统找不到指定的路径。 + Moc'ing alarmdialog.hpp... + 系统找不到指定的路径。 + Moc'ing CaptureThread.h... + 系统找不到指定的路径。 + Moc'ing CaptureThreadBasler.h... + 系统找不到指定的路径。 + Moc'ing CaptureThreadHIK.h... + 系统找不到指定的路径。 + Moc'ing camera_glue.h... + 系统找不到指定的路径。 + Moc'ing change_shift.h... + 系统找不到指定的路径。 + Moc'ing Cleanthread.h... + 系统找不到指定的路径。 + Moc'ing plcsetup.hpp... + 系统找不到指定的路径。 + Moc'ing db_label.h... + 系统找不到指定的路径。 + Moc'ing debugthread.h... + 系统找不到指定的路径。 + Moc'ing dialogin.hpp... + 系统找不到指定的路径。 + Moc'ing exportData.h... + 系统找不到指定的路径。 + Moc'ing output_statistic.h... + 系统找不到指定的路径。 + Moc'ing Logthread.h... + 系统找不到指定的路径。 + Moc'ing savethread.h... + 系统找不到指定的路径。 + Moc'ing dialogsetuppasswd.hpp... + 系统找不到指定的路径。 + Moc'ing dialogsetup.hpp... + 系统找不到指定的路径。 + Rcc'ing cigarette.qrc... + 系统找不到指定的路径。 + Uic'ing dialogsetuppasswd.ui... + 系统找不到指定的路径。 + Uic'ing dialogsetup.ui... + 系统找不到指定的路径。 + Uic'ing plcsetup.ui... + 系统找不到指定的路径。 + Uic'ing alarmdialog.ui... + 系统找不到指定的路径。 + Uic'ing dialogin.ui... + 系统找不到指定的路径。 + Uic'ing camera_glue.ui... + 系统找不到指定的路径。 + Uic'ing change_shift.ui... + 系统找不到指定的路径。 + Uic'ing output_statistic.ui... + 系统找不到指定的路径。 +D:\VS\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(248,5): error MSB8066: “cigarette.h;cigarette.ui;threadReceive.h;workthread.h;alarmdialog.hpp;CaptureThread.h;CaptureThreadBasler.h;CaptureThreadHIK.h;camera_glue.h;change_shift.h;Cleanthread.h;plcsetup.hpp;db_label.h;debugthread.h;dialogin.hpp;exportData.h;output_statistic.h;Logthread.h;savethread.h;dialogsetuppasswd.hpp;dialogsetup.hpp;cigarette.qrc;dialogsetuppasswd.ui;dialogsetup.ui;plcsetup.ui;alarmdialog.ui;dialogin.ui;camera_glue.ui;change_shift.ui;output_statistic.ui”的自定义生成已退出,代码为 3。 diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/Release/Cigarette.tlog/Cigarette.lastbuildstate b/240510-常德GDX1-1相机-1280x800/Cigarette/Release/Cigarette.tlog/Cigarette.lastbuildstate new file mode 100644 index 00000000..09b9b31d --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/Release/Cigarette.tlog/Cigarette.lastbuildstate @@ -0,0 +1,2 @@ +PlatformToolSet=v143:VCToolArchitecture=Native32Bit:VCToolsVersion=14.36.32532:TargetPlatformVersion=10.0.22621.0:VcpkgTriplet=x86-windows: +Release|Win32|D:\cameras8\cigarette-8-1\| diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/Release/Cigarette.tlog/CustomBuild.command.1.tlog b/240510-常德GDX1-1相机-1280x800/Cigarette/Release/Cigarette.tlog/CustomBuild.command.1.tlog new file mode 100644 index 00000000..58174318 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/Release/Cigarette.tlog/CustomBuild.command.1.tlog @@ -0,0 +1,60 @@ +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\CIGARETTE.H +"\bin\moc.exe" "D:\cameras8\cigarette-8-1\Cigarette\cigarette.h" -o ".\GeneratedFiles\Release\moc_cigarette.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-I\include" "-I.\GeneratedFiles\Release" "-I\include\QtCore" "-I\include\QtWidgets" "-I\include\QtGui" "-I\include\QtANGLE" "-I\include\QtNetwork" +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\CIGARETTE.UI +"\bin\uic.exe" -o ".\GeneratedFiles\ui_cigarette.h" "D:\cameras8\cigarette-8-1\Cigarette\cigarette.ui" +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\THREADRECEIVE.H +"\bin\moc.exe" "D:\cameras8\cigarette-8-1\Cigarette\threadReceive.h" -o ".\GeneratedFiles\Release\moc_threadReceive.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-I\include" "-I.\GeneratedFiles\Release" "-I\include\QtCore" "-I\include\QtWidgets" "-I\include\QtGui" "-I\include\QtANGLE" "-I\include\QtNetwork" +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\WORKTHREAD.H +"\bin\moc.exe" "D:\cameras8\cigarette-8-1\Cigarette\workthread.h" -o ".\GeneratedFiles\Release\moc_workthread.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-I\include" "-I.\GeneratedFiles\Release" "-I\include\QtCore" "-I\include\QtWidgets" "-I\include\QtGui" "-I\include\QtANGLE" "-I\include\QtNetwork" +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\ALARMDIALOG.HPP +"\bin\moc.exe" "D:\cameras8\cigarette-8-1\Cigarette\alarmdialog.hpp" -o ".\GeneratedFiles\Release\moc_alarmdialog.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-I\include" "-I.\GeneratedFiles\Release" "-I\include\QtCore" "-I\include\QtWidgets" "-I\include\QtGui" "-I\include\QtANGLE" "-I\include\QtNetwork" +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\CAPTURETHREAD.H +"\bin\moc.exe" "D:\cameras8\cigarette-8-1\Cigarette\CaptureThread.h" -o ".\GeneratedFiles\Release\moc_CaptureThread.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-I\include" "-I.\GeneratedFiles\Release" "-I\include\QtCore" "-I\include\QtWidgets" "-I\include\QtGui" "-I\include\QtANGLE" "-I\include\QtNetwork" +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\CAPTURETHREADBASLER.H +"\bin\moc.exe" "D:\cameras8\cigarette-8-1\Cigarette\CaptureThreadBasler.h" -o ".\GeneratedFiles\Release\moc_CaptureThreadBasler.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-I\include" "-I.\GeneratedFiles\Release" "-I\include\QtCore" "-I\include\QtWidgets" "-I\include\QtGui" "-I\include\QtANGLE" "-I\include\QtNetwork" +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\CAPTURETHREADHIK.H +"\bin\moc.exe" "D:\cameras8\cigarette-8-1\Cigarette\CaptureThreadHIK.h" -o ".\GeneratedFiles\Release\moc_CaptureThreadHIK.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-I\include" "-I.\GeneratedFiles\Release" "-I\include\QtCore" "-I\include\QtWidgets" "-I\include\QtGui" "-I\include\QtANGLE" "-I\include\QtNetwork" +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\CAMERA_GLUE.H +"\bin\moc.exe" "D:\cameras8\cigarette-8-1\Cigarette\camera_glue.h" -o ".\GeneratedFiles\Release\moc_camera_glue.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-I\include" "-I.\GeneratedFiles\Release" "-I\include\QtCore" "-I\include\QtWidgets" "-I\include\QtGui" "-I\include\QtANGLE" "-I\include\QtNetwork" +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\CHANGE_SHIFT.H +"\bin\moc.exe" "D:\cameras8\cigarette-8-1\Cigarette\change_shift.h" -o ".\GeneratedFiles\Release\moc_change_shift.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-I\include" "-I.\GeneratedFiles\Release" "-I\include\QtCore" "-I\include\QtWidgets" "-I\include\QtGui" "-I\include\QtANGLE" "-I\include\QtNetwork" +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\CLEANTHREAD.H +"\bin\moc.exe" "D:\cameras8\cigarette-8-1\Cigarette\Cleanthread.h" -o ".\GeneratedFiles\Release\moc_Cleanthread.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-I\include" "-I.\GeneratedFiles\Release" "-I\include\QtCore" "-I\include\QtWidgets" "-I\include\QtGui" "-I\include\QtANGLE" "-I\include\QtNetwork" +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\PLCSETUP.HPP +"\bin\moc.exe" "D:\cameras8\cigarette-8-1\Cigarette\plcsetup.hpp" -o ".\GeneratedFiles\Release\moc_plcsetup.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-I\include" "-I.\GeneratedFiles\Release" "-I\include\QtCore" "-I\include\QtWidgets" "-I\include\QtGui" "-I\include\QtANGLE" "-I\include\QtNetwork" +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\DB_LABEL.H +"\bin\moc.exe" "D:\cameras8\cigarette-8-1\Cigarette\db_label.h" -o ".\GeneratedFiles\Release\moc_db_label.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-I\include" "-I.\GeneratedFiles\Release" "-I\include\QtCore" "-I\include\QtWidgets" "-I\include\QtGui" "-I\include\QtANGLE" "-I\include\QtNetwork" +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\DEBUGTHREAD.H +"\bin\moc.exe" "D:\cameras8\cigarette-8-1\Cigarette\debugthread.h" -o ".\GeneratedFiles\Release\moc_debugthread.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-I\include" "-I.\GeneratedFiles\Release" "-I\include\QtCore" "-I\include\QtWidgets" "-I\include\QtGui" "-I\include\QtANGLE" "-I\include\QtNetwork" +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\DIALOGIN.HPP +"\bin\moc.exe" "D:\cameras8\cigarette-8-1\Cigarette\dialogin.hpp" -o ".\GeneratedFiles\Release\moc_dialogin.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-I\include" "-I.\GeneratedFiles\Release" "-I\include\QtCore" "-I\include\QtWidgets" "-I\include\QtGui" "-I\include\QtANGLE" "-I\include\QtNetwork" +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\EXPORTDATA.H +"\bin\moc.exe" "D:\cameras8\cigarette-8-1\Cigarette\exportData.h" -o ".\GeneratedFiles\Release\moc_exportData.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-I\include" "-I.\GeneratedFiles\Release" "-I\include\QtCore" "-I\include\QtWidgets" "-I\include\QtGui" "-I\include\QtANGLE" "-I\include\QtNetwork" +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\OUTPUT_STATISTIC.H +"\bin\moc.exe" "D:\cameras8\cigarette-8-1\Cigarette\output_statistic.h" -o ".\GeneratedFiles\Release\moc_output_statistic.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-I\include" "-I.\GeneratedFiles\Release" "-I\include\QtCore" "-I\include\QtWidgets" "-I\include\QtGui" "-I\include\QtANGLE" "-I\include\QtNetwork" +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\LOGTHREAD.H +"\bin\moc.exe" "D:\cameras8\cigarette-8-1\Cigarette\Logthread.h" -o ".\GeneratedFiles\Release\moc_Logthread.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-I\include" "-I.\GeneratedFiles\Release" "-I\include\QtCore" "-I\include\QtWidgets" "-I\include\QtGui" "-I\include\QtANGLE" "-I\include\QtNetwork" +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\SAVETHREAD.H +"\bin\moc.exe" "D:\cameras8\cigarette-8-1\Cigarette\savethread.h" -o ".\GeneratedFiles\Release\moc_savethread.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-I\include" "-I.\GeneratedFiles\Release" "-I\include\QtCore" "-I\include\QtWidgets" "-I\include\QtGui" "-I\include\QtANGLE" "-I\include\QtNetwork" +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\DIALOGSETUPPASSWD.HPP +"\bin\moc.exe" "D:\cameras8\cigarette-8-1\Cigarette\dialogsetuppasswd.hpp" -o ".\GeneratedFiles\Release\moc_dialogsetuppasswd.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-I\include" "-I.\GeneratedFiles\Release" "-I\include\QtCore" "-I\include\QtWidgets" "-I\include\QtGui" "-I\include\QtANGLE" "-I\include\QtNetwork" +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\DIALOGSETUP.HPP +"\bin\moc.exe" "D:\cameras8\cigarette-8-1\Cigarette\dialogsetup.hpp" -o ".\GeneratedFiles\Release\moc_dialogsetup.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-I\include" "-I.\GeneratedFiles\Release" "-I\include\QtCore" "-I\include\QtWidgets" "-I\include\QtGui" "-I\include\QtANGLE" "-I\include\QtNetwork" +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\CIGARETTE.QRC +"\bin\rcc.exe" -name "cigarette" -no-compress "D:\cameras8\cigarette-8-1\Cigarette\cigarette.qrc" -o .\GeneratedFiles\qrc_cigarette.cpp +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\DIALOGSETUPPASSWD.UI +"\bin\uic.exe" -o ".\GeneratedFiles\ui_dialogsetuppasswd.h" "D:\cameras8\cigarette-8-1\Cigarette\dialogsetuppasswd.ui" +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\DIALOGSETUP.UI +"\bin\uic.exe" -o ".\GeneratedFiles\ui_dialogsetup.h" "D:\cameras8\cigarette-8-1\Cigarette\dialogsetup.ui" +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\PLCSETUP.UI +"\bin\uic.exe" -o ".\GeneratedFiles\ui_plcsetup.h" "D:\cameras8\cigarette-8-1\Cigarette\plcsetup.ui" +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\ALARMDIALOG.UI +"\bin\uic.exe" -o ".\GeneratedFiles\ui_alarmdialog.h" "D:\cameras8\cigarette-8-1\Cigarette\alarmdialog.ui" +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\DIALOGIN.UI +"\bin\uic.exe" -o ".\GeneratedFiles\ui_dialogin.h" "D:\cameras8\cigarette-8-1\Cigarette\dialogin.ui" +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\CAMERA_GLUE.UI +"\bin\uic.exe" -o ".\GeneratedFiles\ui_camera_glue.h" "D:\cameras8\cigarette-8-1\Cigarette\camera_glue.ui" +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\CHANGE_SHIFT.UI +"\bin\uic.exe" -o ".\GeneratedFiles\ui_change_shift.h" "D:\cameras8\cigarette-8-1\Cigarette\change_shift.ui" +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\OUTPUT_STATISTIC.UI +"\bin\uic.exe" -o ".\GeneratedFiles\ui_output_statistic.h" "D:\cameras8\cigarette-8-1\Cigarette\output_statistic.ui" diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/Release/Cigarette.tlog/CustomBuild.read.1.tlog b/240510-常德GDX1-1相机-1280x800/Cigarette/Release/Cigarette.tlog/CustomBuild.read.1.tlog new file mode 100644 index 00000000..4bb71a54 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/Release/Cigarette.tlog/CustomBuild.read.1.tlog @@ -0,0 +1,59 @@ +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\CIGARETTE.H +D:\BIN\MOC.EXE +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\CIGARETTE.UI +D:\BIN\UIC.EXE +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\THREADRECEIVE.H +D:\BIN\MOC.EXE +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\WORKTHREAD.H +D:\BIN\MOC.EXE +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\ALARMDIALOG.HPP +D:\BIN\MOC.EXE +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\CAPTURETHREAD.H +D:\BIN\MOC.EXE +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\CAPTURETHREADBASLER.H +D:\BIN\MOC.EXE +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\CAPTURETHREADHIK.H +D:\BIN\MOC.EXE +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\CAMERA_GLUE.H +D:\BIN\MOC.EXE +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\CHANGE_SHIFT.H +D:\BIN\MOC.EXE +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\CLEANTHREAD.H +D:\BIN\MOC.EXE +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\PLCSETUP.HPP +D:\BIN\MOC.EXE +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\DB_LABEL.H +D:\BIN\MOC.EXE +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\DEBUGTHREAD.H +D:\BIN\MOC.EXE +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\DIALOGIN.HPP +D:\BIN\MOC.EXE +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\EXPORTDATA.H +D:\BIN\MOC.EXE +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\OUTPUT_STATISTIC.H +D:\BIN\MOC.EXE +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\LOGTHREAD.H +D:\BIN\MOC.EXE +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\SAVETHREAD.H +D:\BIN\MOC.EXE +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\DIALOGSETUPPASSWD.HPP +D:\BIN\MOC.EXE +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\DIALOGSETUP.HPP +D:\BIN\MOC.EXE +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\CIGARETTE.QRC +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\DIALOGSETUPPASSWD.UI +D:\BIN\UIC.EXE +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\DIALOGSETUP.UI +D:\BIN\UIC.EXE +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\PLCSETUP.UI +D:\BIN\UIC.EXE +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\ALARMDIALOG.UI +D:\BIN\UIC.EXE +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\DIALOGIN.UI +D:\BIN\UIC.EXE +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\CAMERA_GLUE.UI +D:\BIN\UIC.EXE +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\CHANGE_SHIFT.UI +D:\BIN\UIC.EXE +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\OUTPUT_STATISTIC.UI +D:\BIN\UIC.EXE diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/Release/Cigarette.tlog/CustomBuild.write.1.tlog b/240510-常德GDX1-1相机-1280x800/Cigarette/Release/Cigarette.tlog/CustomBuild.write.1.tlog new file mode 100644 index 00000000..76e083a9 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/Release/Cigarette.tlog/CustomBuild.write.1.tlog @@ -0,0 +1,60 @@ +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\CIGARETTE.H +D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\GENERATEDFILES\RELEASE\MOC_CIGARETTE.CPP +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\CIGARETTE.UI +D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\GENERATEDFILES\UI_CIGARETTE.H +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\THREADRECEIVE.H +D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\GENERATEDFILES\RELEASE\MOC_THREADRECEIVE.CPP +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\WORKTHREAD.H +D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\GENERATEDFILES\RELEASE\MOC_WORKTHREAD.CPP +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\ALARMDIALOG.HPP +D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\GENERATEDFILES\RELEASE\MOC_ALARMDIALOG.CPP +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\CAPTURETHREAD.H +D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\GENERATEDFILES\RELEASE\MOC_CAPTURETHREAD.CPP +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\CAPTURETHREADBASLER.H +D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\GENERATEDFILES\RELEASE\MOC_CAPTURETHREADBASLER.CPP +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\CAPTURETHREADHIK.H +D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\GENERATEDFILES\RELEASE\MOC_CAPTURETHREADHIK.CPP +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\CAMERA_GLUE.H +D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\GENERATEDFILES\RELEASE\MOC_CAMERA_GLUE.CPP +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\CHANGE_SHIFT.H +D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\GENERATEDFILES\RELEASE\MOC_CHANGE_SHIFT.CPP +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\CLEANTHREAD.H +D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\GENERATEDFILES\RELEASE\MOC_CLEANTHREAD.CPP +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\PLCSETUP.HPP +D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\GENERATEDFILES\RELEASE\MOC_PLCSETUP.CPP +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\DB_LABEL.H +D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\GENERATEDFILES\RELEASE\MOC_DB_LABEL.CPP +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\DEBUGTHREAD.H +D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\GENERATEDFILES\RELEASE\MOC_DEBUGTHREAD.CPP +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\DIALOGIN.HPP +D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\GENERATEDFILES\RELEASE\MOC_DIALOGIN.CPP +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\EXPORTDATA.H +D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\GENERATEDFILES\RELEASE\MOC_EXPORTDATA.CPP +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\OUTPUT_STATISTIC.H +D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\GENERATEDFILES\RELEASE\MOC_OUTPUT_STATISTIC.CPP +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\LOGTHREAD.H +D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\GENERATEDFILES\RELEASE\MOC_LOGTHREAD.CPP +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\SAVETHREAD.H +D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\GENERATEDFILES\RELEASE\MOC_SAVETHREAD.CPP +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\DIALOGSETUPPASSWD.HPP +D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\GENERATEDFILES\RELEASE\MOC_DIALOGSETUPPASSWD.CPP +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\DIALOGSETUP.HPP +D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\GENERATEDFILES\RELEASE\MOC_DIALOGSETUP.CPP +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\CIGARETTE.QRC +D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\GENERATEDFILES\QRC_CIGARETTE.CPP +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\DIALOGSETUPPASSWD.UI +D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\GENERATEDFILES\UI_DIALOGSETUPPASSWD.H +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\DIALOGSETUP.UI +D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\GENERATEDFILES\UI_DIALOGSETUP.H +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\PLCSETUP.UI +D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\GENERATEDFILES\UI_PLCSETUP.H +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\ALARMDIALOG.UI +D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\GENERATEDFILES\UI_ALARMDIALOG.H +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\DIALOGIN.UI +D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\GENERATEDFILES\UI_DIALOGIN.H +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\CAMERA_GLUE.UI +D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\GENERATEDFILES\UI_CAMERA_GLUE.H +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\CHANGE_SHIFT.UI +D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\GENERATEDFILES\UI_CHANGE_SHIFT.H +^D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\OUTPUT_STATISTIC.UI +D:\CAMERAS8\CIGARETTE-8-1\CIGARETTE\GENERATEDFILES\UI_OUTPUT_STATISTIC.H diff --git a/Cigarette/x64/Release/Cigarette.vcxproj.FileListAbsolute.txt b/240510-常德GDX1-1相机-1280x800/Cigarette/Release/Cigarette.tlog/unsuccessfulbuild similarity index 100% rename from Cigarette/x64/Release/Cigarette.vcxproj.FileListAbsolute.txt rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Release/Cigarette.tlog/unsuccessfulbuild diff --git a/Cigarette/Resources/alarm.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/alarm.png similarity index 100% rename from Cigarette/Resources/alarm.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/alarm.png diff --git a/Cigarette/Resources/cam1.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam1.png similarity index 100% rename from Cigarette/Resources/cam1.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam1.png diff --git a/Cigarette/Resources/cam1_no.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam1_no.png similarity index 100% rename from Cigarette/Resources/cam1_no.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam1_no.png diff --git a/Cigarette/Resources/cam1_yes.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam1_yes.png similarity index 100% rename from Cigarette/Resources/cam1_yes.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam1_yes.png diff --git a/Cigarette/Resources/cam2.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam2.png similarity index 100% rename from Cigarette/Resources/cam2.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam2.png diff --git a/Cigarette/Resources/cam2_no.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam2_no.png similarity index 100% rename from Cigarette/Resources/cam2_no.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam2_no.png diff --git a/Cigarette/Resources/cam2_yes.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam2_yes.png similarity index 100% rename from Cigarette/Resources/cam2_yes.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam2_yes.png diff --git a/Cigarette/Resources/cam3.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam3.png similarity index 100% rename from Cigarette/Resources/cam3.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam3.png diff --git a/Cigarette/Resources/cam3_no.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam3_no.png similarity index 100% rename from Cigarette/Resources/cam3_no.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam3_no.png diff --git a/Cigarette/Resources/cam3_yes.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam3_yes.png similarity index 100% rename from Cigarette/Resources/cam3_yes.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam3_yes.png diff --git a/Cigarette/Resources/cam4.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam4.png similarity index 100% rename from Cigarette/Resources/cam4.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam4.png diff --git a/Cigarette/Resources/cam4_no.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam4_no.png similarity index 100% rename from Cigarette/Resources/cam4_no.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam4_no.png diff --git a/Cigarette/Resources/cam4_yes.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam4_yes.png similarity index 100% rename from Cigarette/Resources/cam4_yes.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam4_yes.png diff --git a/Cigarette/Resources/cam5.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam5.png similarity index 100% rename from Cigarette/Resources/cam5.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam5.png diff --git a/Cigarette/Resources/cam5_no.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam5_no.png similarity index 100% rename from Cigarette/Resources/cam5_no.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam5_no.png diff --git a/Cigarette/Resources/cam5_yes.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam5_yes.png similarity index 100% rename from Cigarette/Resources/cam5_yes.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam5_yes.png diff --git a/Cigarette/Resources/cam6.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam6.png similarity index 100% rename from Cigarette/Resources/cam6.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam6.png diff --git a/Cigarette/Resources/cam6_no.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam6_no.png similarity index 100% rename from Cigarette/Resources/cam6_no.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam6_no.png diff --git a/Cigarette/Resources/cam6_yes.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam6_yes.png similarity index 100% rename from Cigarette/Resources/cam6_yes.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam6_yes.png diff --git a/Cigarette/Resources/cam7.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam7.png similarity index 100% rename from Cigarette/Resources/cam7.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam7.png diff --git a/Cigarette/Resources/cam7_no.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam7_no.png similarity index 100% rename from Cigarette/Resources/cam7_no.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam7_no.png diff --git a/Cigarette/Resources/cam7_yes.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam7_yes.png similarity index 100% rename from Cigarette/Resources/cam7_yes.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam7_yes.png diff --git a/Cigarette/Resources/cam8.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam8.png similarity index 100% rename from Cigarette/Resources/cam8.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam8.png diff --git a/Cigarette/Resources/cam8_no.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam8_no.png similarity index 100% rename from Cigarette/Resources/cam8_no.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam8_no.png diff --git a/Cigarette/Resources/cam8_yes.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam8_yes.png similarity index 100% rename from Cigarette/Resources/cam8_yes.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/cam8_yes.png diff --git a/Cigarette/Resources/exit.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/exit.png similarity index 100% rename from Cigarette/Resources/exit.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/exit.png diff --git a/Cigarette/Resources/keyboard.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/keyboard.png similarity index 100% rename from Cigarette/Resources/keyboard.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/keyboard.png diff --git a/Cigarette/Resources/lock.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/lock.png similarity index 100% rename from Cigarette/Resources/lock.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/lock.png diff --git a/Cigarette/Resources/logo.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/logo.png similarity index 100% rename from Cigarette/Resources/logo.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/logo.png diff --git a/Cigarette/Resources/pause.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/pause.png similarity index 100% rename from Cigarette/Resources/pause.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/pause.png diff --git a/Cigarette/Resources/plc.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/plc.png similarity index 100% rename from Cigarette/Resources/plc.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/plc.png diff --git a/Cigarette/Resources/rotate.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/rotate.png similarity index 100% rename from Cigarette/Resources/rotate.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/rotate.png diff --git a/Cigarette/Resources/setup.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/setup.png similarity index 100% rename from Cigarette/Resources/setup.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/setup.png diff --git a/Cigarette/Resources/start.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/start.png similarity index 100% rename from Cigarette/Resources/start.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/start.png diff --git a/Cigarette/Resources/unlock.png b/240510-常德GDX1-1相机-1280x800/Cigarette/Resources/unlock.png similarity index 100% rename from Cigarette/Resources/unlock.png rename to 240510-常德GDX1-1相机-1280x800/Cigarette/Resources/unlock.png diff --git a/Cigarette/SyncQueue.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/SyncQueue.cpp similarity index 100% rename from Cigarette/SyncQueue.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/SyncQueue.cpp diff --git a/Cigarette/SyncQueue.h b/240510-常德GDX1-1相机-1280x800/Cigarette/SyncQueue.h similarity index 100% rename from Cigarette/SyncQueue.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/SyncQueue.h diff --git a/Cigarette/alarmdialog.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/alarmdialog.cpp similarity index 100% rename from Cigarette/alarmdialog.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/alarmdialog.cpp diff --git a/Cigarette/alarmdialog.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/alarmdialog.hpp similarity index 100% rename from Cigarette/alarmdialog.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/alarmdialog.hpp diff --git a/Cigarette/alarmdialog.ui b/240510-常德GDX1-1相机-1280x800/Cigarette/alarmdialog.ui similarity index 100% rename from Cigarette/alarmdialog.ui rename to 240510-常德GDX1-1相机-1280x800/Cigarette/alarmdialog.ui diff --git a/Cigarette/alg_jd.bak.jpg b/240510-常德GDX1-1相机-1280x800/Cigarette/alg_jd.bak.jpg similarity index 100% rename from Cigarette/alg_jd.bak.jpg rename to 240510-常德GDX1-1相机-1280x800/Cigarette/alg_jd.bak.jpg diff --git a/Cigarette/alg_jd.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/alg_jd.cpp similarity index 63% rename from Cigarette/alg_jd.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/alg_jd.cpp index 66706e47..3f054645 100644 --- a/Cigarette/alg_jd.cpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/alg_jd.cpp @@ -1,28 +1,39 @@ #include "alg_jd.h" -#include "common.h" -// Remove the bounding boxes with low confidence using non-maxima suppression -static void post_process(cv::Mat& frame, std::vector& outs, std::vector > &results); +#include //Ŀļ -static void post_process_batch(std::vector& vec_frame, std::vector& outs, std::vector > > &vec_results); - -// Get the names of the output layers -static std::vector getOutputsNames(const cv::dnn::Net& net); - -// Draw the predicted bounding box -static void drawPred(int classId, float conf, int left, int top, int right, int bottom, cv::Mat& frame); +extern SysConf g_sys_conf; // Initialize the parameters -static float confThreshold = 0.1; // Confidence threshold +static float confThreshold = g_sys_conf.ConfThreshold*0.01; // Confidence threshold static float nmsThreshold = 0.4; // Non-maximum suppression threshold static int inpWidth = 416; // Width of network's input image static int inpHeight = 416; // Height of network's input image static std::vector classes; -bool AlgJd::init() +bool AlgJd::init(QString model_path, QString model_name) { - // Load names of classes - std::string classesFile = "../model/jd.names"; + // Load names of classes + std::string classesFile; + cv::String modelConfiguration; + cv::String modelWeights; + QString image_path; + + if (model_path.length() > 0 && model_name.length() > 0) { + // ƴյģļ· + modelWeights = model_path.toStdString() + "/" + model_name.toStdString(); + modelConfiguration = model_path.toStdString() + "/jd.cfg"; + classesFile = model_path.toStdString() + "/jd.names"; + image_path = model_path + "/" + "alg_jd.bmp"; + } + else { + modelWeights = "D:/model/jd.weights"; + classesFile = "D:/model/jd.names"; + // Give the configuration and weight files for the model + modelConfiguration = "D:/model/jd.cfg"; + image_path = "D:/model/alg_jd.bmp"; + } + std::ifstream classNamesFile(classesFile.c_str()); if (classNamesFile.is_open()) { @@ -34,17 +45,21 @@ bool AlgJd::init() return false; } - // Give the configuration and weight files for the model - cv::String modelConfiguration = "../model/jd.cfg"; - cv::String modelWeights = "../model/jd.weights"; - // Load the network net = cv::dnn::readNetFromDarknet(modelConfiguration, modelWeights); - net.setPreferableBackend(cv::dnn::DNN_BACKEND_OPENCV); - net.setPreferableTarget(cv::dnn::DNN_TARGET_CPU); + net.setPreferableBackend(cv::dnn::DNN_BACKEND_CUDA); + net.setPreferableTarget(cv::dnn::DNN_TARGET_CUDA); + + //cv::Mat image = cv::imread("alg_jd.bmp"); + cv::Mat image = cv::imread(image_path.toStdString()); + /*if (g_sys_conf.model_jpg_path.length() > 0) { + image = cv::imread(g_sys_conf.model_jpg_path.toStdString()); + } + else { + image = cv::imread("D:/Release/alg_jd.bmp"); + }*/ - cv::Mat image = cv::imread("alg_jd.bmp"); //ʶһͼģǷȷGPUݼ if (!image.data) return false; //жϲͼƬǷȡ std::vector > results; @@ -72,10 +87,12 @@ bool AlgJd::test_detect_batcht(int shoot) std::vector vec_in; std::vector vec_out; std::vector > > vec_results; - cv::Mat m1, m2, m3; + cv::Mat m1, m2, m3, m4, m5; m1 = cv::Mat(544, 728, CV_8UC3, cv::Scalar(0, 0, 0)); m2 = cv::Mat(544, 728, CV_8UC3, cv::Scalar(0, 0, 0)); m3 = cv::Mat(544, 728, CV_8UC3, cv::Scalar(0, 0, 0)); + m4 = cv::Mat(544, 728, CV_8UC3, cv::Scalar(0, 0, 0)); + m5 = cv::Mat(544, 728, CV_8UC3, cv::Scalar(0, 0, 0)); double t = (double)cv::getTickCount(); switch(shoot){ @@ -86,6 +103,8 @@ bool AlgJd::test_detect_batcht(int shoot) } case 3:vec_in.push_back(m3); case 2:vec_in.push_back(m2); + case 4:vec_in.push_back(m4); + case 5:vec_in.push_back(m5); default:{ vec_in.push_back(m1); detect_batch(vec_in, vec_out, vec_results); @@ -126,10 +145,24 @@ int AlgJd::detect(cv::Mat& _frame, cv::Mat &out, std::vector >& vec_results) +{ + for (int i = 0; i < vec_results.size(); i++) + { + std::pair element; + cv::Rect TempRect = vec_results[i].second; + cv::Point position = cv::Point(TempRect.x + (TempRect.width / 2), TempRect.y + (TempRect.height / 2)); + cv::Mat topography = vec_in(TempRect); + cv::imshow("analyse", topography); + cv::waitKey(1); + } + +} + // Get the names of the output layers -static std::vector getOutputsNames(const cv::dnn::Net& net) +std::vector AlgJd::getOutputsNames(const cv::dnn::Net& net) { - static std::vector names; + std::vector names; if (names.empty()) { //Get the indices of the output layers, i.e. the layers with unconnected outputs @@ -146,12 +179,11 @@ static std::vector getOutputsNames(const cv::dnn::Net& net) return names; } -static void post_process(cv::Mat& frame, std::vector& outs, std::vector > &results) +void AlgJd::post_process(cv::Mat& frame, std::vector& outs, std::vector > &results) { - std::vector classIds; - std::vector confidences; - std::vector boxes; - + std::vector < std::vector> classIds(classes.size()); + std::vector < std::vector> confidences(classes.size()); + std::vector < std::vector> boxes(classes.size()); for (size_t i = 0; i < outs.size(); ++i) { // Scan through all the bounding boxes output from the network and keep only the @@ -175,9 +207,9 @@ static void post_process(cv::Mat& frame, std::vector& outs, std::vector int left = centerX - width / 2; int top = centerY - height / 2; - classIds.push_back(classIdPoint.x); - confidences.push_back((float)confidence); - boxes.push_back(cv::Rect(left, top, width, height)); + classIds[classIdPoint.x].push_back(classIdPoint.x); + confidences[classIdPoint.x].push_back((float)confidence); + boxes[classIdPoint.x].push_back(cv::Rect(left, top, width, height)); } } } @@ -185,21 +217,24 @@ static void post_process(cv::Mat& frame, std::vector& outs, std::vector // Perform non maximum suppression to eliminate redundant overlapping boxes with // lower confidences - std::vector indices; - cv::dnn::NMSBoxes(boxes, confidences, confThreshold, nmsThreshold, indices); - for (size_t i = 0; i < indices.size(); ++i) + for (size_t i = 0; i < classes.size(); ++i) { - int idx = indices[i]; - cv::Rect box = boxes[idx]; - drawPred(classIds[idx], confidences[idx], box.x, box.y, - box.x + box.width, box.y + box.height, frame); - results.push_back(std::make_pair(classIds[idx], box)); + std::vector indices; + cv::dnn::NMSBoxes(boxes[i], confidences[i], confThreshold, nmsThreshold, indices); + for (size_t j = 0; j < indices.size(); ++j) + { + int idx = indices[j]; + cv::Rect box = boxes[i][idx]; + drawPred(classIds[i][idx], confidences[i][idx], box.x, box.y, + box.x + box.width, box.y + box.height, frame); + results.push_back(std::make_pair(classIds[i][idx], box)); + } } } // Draw the predicted bounding box -static void drawPred(int classId, float conf, int left, int top, int right, int bottom, cv::Mat& frame) +void AlgJd::drawPred(int classId, float conf, int left, int top, int right, int bottom, cv::Mat& frame) { cv::Scalar color; if(classId==0) @@ -212,7 +247,7 @@ static void drawPred(int classId, float conf, int left, int top, int right, int cv::rectangle(frame, cv::Point(left, top), cv::Point(right, bottom), color, 4); //Get the label for the class name and its confidence - std::string label = cv::format("%.2f%%", (conf*100)); + std::string label = cv::format("%.2f%%", (conf*100));/// if (!classes.empty()) { CV_Assert(classId < (int)classes.size()); @@ -263,15 +298,17 @@ void AlgJd::detect_batch(std::vector& vec_in, std::vector &vec } } -static void post_process_batch(std::vector& vec_frame, std::vector& outs, std::vector > > &vec_results) +void AlgJd::post_process_batch(std::vector& vec_frame, std::vector& outs, std::vector > > &vec_results) { int batch = vec_frame.size(); + double confidence;/// for (int k = 0; k < batch; k++) { - std::vector classIds; - std::vector confidences; - std::vector boxes; - //std::cout << "outs.size()\t" << outs.size() << std::endl; + std::vector < std::vector> classIds(classes.size()); + std::vector < std::vector> confidences(classes.size()); + std::vector < std::vector> boxes(classes.size()); + + //std::cout << "outs.size()\t" << outs.size() << std::endl; //std::cout << "Type\t" << outs[0].type() << std::endl; for (size_t i = 0; i < outs.size(); ++i) @@ -290,7 +327,7 @@ static void post_process_batch(std::vector& vec_frame, std::vector& vec_frame, std::vector indices; - cv::dnn::NMSBoxes(boxes, confidences, confThreshold, nmsThreshold, indices); - std::vector > results; - for (size_t i = 0; i < indices.size(); ++i) - { - int idx = indices[i]; - cv::Rect box = boxes[idx]; - //ʶȴ15ʾʶСΪ޽㣬NG - if (box.width > 15) + // Perform non maximum suppression to eliminate redundant overlapping boxes with + // lower confidences + for (size_t i = 0; i < classes.size(); ++i) + { + std::vector indices; + cv::dnn::NMSBoxes(boxes[i], confidences[i], confThreshold, nmsThreshold, indices); + for (size_t j = 0; j < indices.size(); ++j) { - //ʶ - drawPred(classIds[idx], confidences[idx], box.x, box.y, - box.x + box.width, box.y + box.height, vec_frame[k]); - results.push_back(std::make_pair(classIds[idx], box)); + int idx = indices[j]; + cv::Rect box = boxes[i][idx]; + if (confidences[i][idx] > g_sys_conf.ConfThreshold * 0.01)///ʶȵֵNG + { + if (box.width > 15) + {//ʶȴ15ʾʶСΪ޽㣬NG + drawPred(classIds[i][idx], confidences[i][idx], box.x, box.y, + box.x + box.width, box.y + box.height, vec_frame[k]); + results.push_back(std::make_pair(classIds[i][idx], box)); + } + } } - } vec_results.push_back(results); } diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/alg_jd.h b/240510-常德GDX1-1相机-1280x800/Cigarette/alg_jd.h new file mode 100644 index 00000000..36e42593 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/alg_jd.h @@ -0,0 +1,35 @@ +#ifndef _CIGARETTE_JD +#define _CIGARETTE_JD + +#include +#include +#include +#include +#include +#include +#include +#include "common.h" +class AlgJd +{ + public: + bool init(QString model_path, QString model_name); + bool test_detect(); + bool test_detect_batcht(int shoot); + int detect(cv::Mat& in, cv::Mat &out, std::vector > &results); + // Remove the bounding boxes with low confidence using non-maxima suppression + void post_process(cv::Mat& frame, std::vector& outs, std::vector > &results); + void CircleImagePro(cv::Mat src, cv::Mat dst, std::vector radius); + void detect_batch(std::vector& vec_in, std::vector &vec_out, std::vector > > &vec_results); + // Remove the bounding boxes with low confidence using non-maxima suppression + void post_process_batch(std::vector& vec_frame, std::vector& outs, std::vector > > &vec_results); + void analyse(cv::Mat vec_in, std::vector > & vec_results); + // Get the names of the output layers + std::vector getOutputsNames(const cv::dnn::Net& net); + // Draw the predicted bounding box + void drawPred(int classId, float conf, int left, int top, int right, int bottom, cv::Mat& frame); + private: + cv::dnn::Net net; + std::vector classes; +}; + +#endif //end of _CIGARETTE_JD diff --git a/Cigarette/alg_jd.jpg b/240510-常德GDX1-1相机-1280x800/Cigarette/alg_jd.jpg similarity index 100% rename from Cigarette/alg_jd.jpg rename to 240510-常德GDX1-1相机-1280x800/Cigarette/alg_jd.jpg diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/alg_jd_ng.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/alg_jd_ng.cpp new file mode 100644 index 00000000..67ad154e --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/alg_jd_ng.cpp @@ -0,0 +1,517 @@ +#include "alg_jd_ng.h" +#include //Ŀļ + +extern SysConf g_sys_conf; + +// Initialize the parameters +static float confThreshold = 0.01; // Confidence threshold +static float nmsThreshold = 0.4; // Non-maximum suppression threshold +static int inpWidth = 416; // Width of network's input image +static int inpHeight = 416; // Height of network's input image + +static std::vector classes; + +bool AlgJd_ng::init_ng(QString model_path, QString model_name) +{ + // Load names of classes + std::string classesFile; + cv::String modelConfiguration; + cv::String modelWeights; + QString image_path; + + modelWeights = model_path.toStdString() + "/" + model_name.toStdString(); + modelConfiguration = model_path.toStdString() + "/jd_ng.cfg"; + classesFile = model_path.toStdString() + "/jd_ng.names"; + image_path = model_path + "/" + "alg_jd_ng.bmp"; + + std::ifstream classNamesFile(classesFile.c_str()); + if (classNamesFile.is_open()) + { + std::string className = ""; + while (std::getline(classNamesFile, className)) + classes.push_back(className); + } + else{ + return false; + } + + // Load the network + net_ng = cv::dnn::readNetFromDarknet(modelConfiguration, modelWeights); + net_ng.setPreferableBackend(cv::dnn::DNN_BACKEND_CUDA); + net_ng.setPreferableTarget(cv::dnn::DNN_TARGET_CUDA); + + //cv::Mat image = cv::imread("alg_jd.bmp"); + cv::Mat image = cv::imread(image_path.toStdString()); + + //ʶһͼģǷȷGPUݼ + if (!image.data) return false; //жϲͼƬǷȡ + std::vector > results; + detect_ng(image, image, results); + if (results.size() > 0) + return true; //⵽Ŀ꣬ʼɹ + else + return false; //ʼʧ +} + +bool AlgJd_ng::test_detect_ng() +{ + cv::Mat m1; + m1 = cv::Mat(544, 728, CV_8UC3, cv::Scalar(0, 0, 0)); + std::vector > results; + double t = (double)cv::getTickCount(); + detect_ng(m1, m1, results); + t = ((double)cv::getTickCount() - t) / cv::getTickFrequency(); + DEBUG(" test_detect time process:%f\n", t); + return true; +} + +bool AlgJd_ng::test_detect_batcht_ng(int shoot) +{ + std::vector vec_in; + std::vector vec_out; + std::vector > > vec_results; + cv::Mat m1, m2, m3; + m1 = cv::Mat(544, 728, CV_8UC3, cv::Scalar(0, 0, 0)); + m2 = cv::Mat(544, 728, CV_8UC3, cv::Scalar(0, 0, 0)); + m3 = cv::Mat(544, 728, CV_8UC3, cv::Scalar(0, 0, 0)); + + double t = (double)cv::getTickCount(); + switch(shoot){ + case 1:{ + std::vector > results; + detect_ng(m1, m1, results); + break; + } + case 3:vec_in.push_back(m3); + case 2:vec_in.push_back(m2); + default:{ + vec_in.push_back(m1); + detect_batch_ng(vec_in, vec_out, vec_results); + } + } + t = ((double)cv::getTickCount() - t) / cv::getTickFrequency(); + DEBUG(" test_detect_batcht time process:%f\n", t); + return true; +} + +int AlgJd_ng::detect_ng(cv::Mat& _frame, cv::Mat &out, std::vector > &results) +{ + cv::Mat frame = _frame.clone(); + cv::Mat image_clone=frame.clone(); + // Process frames. + // Create a 4D blob from a frame. + cv::Mat blob; + cv::dnn::blobFromImage(frame, blob, 1/255.0, cv::Size(inpWidth, inpHeight), cv::Scalar(0,0,0), true, false); + + //Sets the input to the network + net_ng.setInput(blob); + + + // Runs the forward pass to get output of the output layers + std::vector outs; + net_ng.forward(outs, getOutputsNames_ng(net_ng)); + + + // Remove the bounding boxes with low confidence + post_process_ng(frame, outs, results); + + + // Write the frame with the detection boxes + cv::Mat detectedFrame; + frame.convertTo(detectedFrame, CV_8U); + //show detectedFrame + out=detectedFrame.clone(); + return results.size(); +} + +int AlgJd_ng::detect_ng(cv::Mat& _frame, cv::Mat& draw_frame, cv::Mat& out, std::vector>& results) +{ + cv::Mat frame = _frame.clone(); + + // Process frames. + // Create a 4D blob from a frame. + // 4Dblob + cv::Mat blob; + cv::dnn::blobFromImage(frame, blob, 1 / 255.0, cv::Size(inpWidth, inpHeight), cv::Scalar(0, 0, 0), true, false); + + //Sets the input to the network + net_ng.setInput(blob); + + + // Runs the forward pass to get output of the output layers + std::vector outs; + net_ng.forward(outs, getOutputsNames_ng(net_ng)); + + + // Remove the bounding boxes with low confidence + // ɾŶȵı߽ + post_process_ng(draw_frame, outs, results); + + // Write the frame with the detection boxes + cv::Mat detectedFrame; + draw_frame.convertTo(detectedFrame, CV_8U); + + //show detectedFrame + out = detectedFrame.clone(); + return results.size(); +} + +void AlgJd_ng::CircleImagePro_ng(cv::Mat src, cv::Mat dst, std::vector radius) { + QStringList TestData; + src.copyTo(dst); + float c = float(20.5) / float(68.9); + std::vector> contours; + // ͼԤ + cv::Mat img; + cv::cvtColor(dst, img, cv::COLOR_BGR2GRAY); + GaussianBlur(img, img, cv::Size(3, 3), 1); + Canny(img, img, 50, 150, 3); + imshow("img", img); + + cv::Mat kernel = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3, 3)); // ȡ + dilate(img, img, kernel, cv::Point(-1, -1), 2); + findContours(img, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE); + img.release(); + + std::vector center(contours.size()); + std::vector rad(contours.size()); + if (contours.size() == 0) { + std::cout << "δҵ" << std::endl; + return; + } + for (size_t i = 0; i < contours.size(); ++i) { + minEnclosingCircle(contours[i], center[i], rad[i]); + radius.push_back(rad[i] * c); + } + + for (size_t j = 0; j < center.size(); ++j) { + std::string str = "radius: "; + std::string str1; + float r = 0.0; + circle(dst, center[j], rad[j], cv::Scalar(0, 0, 255), 1); + r = rad[j] * c; + str1 = format("%.4f", r); + str.insert(str.end(), str1.begin(), str1.end()); + TestData.append(QString::fromStdString(str)); + cv::imshow("dst", dst); + cv::putText(dst, str, center[j], 1, 2, cv::Scalar(0, 255, 0), 2, 8); + cv::waitKey(1); + } + TestData.clear(); +} + +void AlgJd_ng::analyse_ng(cv::Mat vec_in, std::vector>& vec_results) +{ + bool IsNG = false; + std::vector vec_jd_results; // 0 + std::vector vec_kz_results; // 1 ֽ + + for (int i = 0; i < vec_results.size(); i++) + { + if (vec_results[i].first == 0) // jd + { + vec_jd_results.push_back(vec_results[i].second); + } + else if (vec_results[i].first == 1) // ֽ + { + vec_kz_results.push_back(vec_results[i].second); + } + } + std::sort(vec_jd_results.begin(), vec_jd_results.end(), sort_rect_by_y_center_ng);//У//jinhuan+ + + //jinhuan+ + if (vec_jd_results.size() && vec_kz_results.size()) + { + //µһyֵ + int top_jd_y = vec_jd_results[0].y + vec_jd_results[0].height / 2; + //һyֵ + int bottom_jd_y = vec_jd_results[vec_jd_results.size()-1].y + vec_jd_results[vec_jd_results.size()-1].height / 2; + //ֽϱyֵ + int top_kz_y = vec_kz_results[0].tl().y; + //ֽ±yֵ + int bottom_kz_y = vec_kz_results[0].br().y; + + //if(abs(top_jd_y- top_kz_y)>50);//50 + //if (abs(bottom_kz_y - bottom_jd_y)>40);//40 + } else { + IsNG = true;//ֽͽ + } + //if (vec_kz_results.size() != 1) {//ֽ + // IsNG = true; + //} + + //jinhuan- + cv::waitKey(1); +} + +// Get the names of the output layers +std::vector AlgJd_ng::getOutputsNames_ng(const cv::dnn::Net& net) +{ + std::vector names; + if (names.empty()) + { + //Get the indices of the output layers, i.e. the layers with unconnected outputs + std::vector outLayers = net.getUnconnectedOutLayers(); + + //get the names of all the layers in the network + std::vector layersNames = net.getLayerNames(); + + // Get the names of the output layers in names + names.resize(outLayers.size()); + for (size_t i = 0; i < outLayers.size(); ++i) + names[i] = layersNames[outLayers[i] - 1]; + } + return names; +} + +void AlgJd_ng::post_process_ng(cv::Mat& frame, std::vector& outs, std::vector > &results) +{ + std::vector < std::vector> classIds(classes.size()); + std::vector < std::vector> confidences(classes.size()); + std::vector < std::vector> boxes(classes.size()); + for (size_t i = 0; i < outs.size(); ++i) + { + // Scan through all the bounding boxes output from the network and keep only the + // ones with high confidence scores. Assign the box's class label as the class + // with the highest score for the box. + // õÿ + float* data = (float*)outs[i].data; + for (int j = 0; j < outs[i].rows; ++j, data += outs[i].cols) + { + // õÿķ + cv::Mat scores = outs[i].row(j).colRange(5, outs[i].cols); + cv::Point classIdPoint; + double confidence; + // Get the value and location of the maximum score + cv::minMaxLoc(scores, 0, &confidence, 0, &classIdPoint); + + //if (confidence > g_sys_conf.ConfThresholds[classIdPoint.x]*0.0001) + if (confidence > confThreshold) + { + int centerX = (int)(data[0] * frame.cols); + int centerY = (int)(data[1] * frame.rows); + int width = (int)(data[2] * frame.cols); + int height = (int)(data[3] * frame.rows); + int left = centerX - width / 2; + int top = centerY - height / 2; + + classIds[classIdPoint.x].push_back(classIdPoint.x); + confidences[classIdPoint.x].push_back((float)confidence); + boxes[classIdPoint.x].push_back(cv::Rect(left, top, width, height)); + } + } + } + + + // Perform non maximum suppression to eliminate redundant overlapping boxes with + // lower confidences + + for (size_t i = 0; i < classes.size(); ++i) + { + std::vector indices; + cv::dnn::NMSBoxes(boxes[i], confidences[i], confThreshold, nmsThreshold, indices); + for (size_t j = 0; j < indices.size(); ++j) + { + int idx = indices[j]; + cv::Rect box = boxes[i][idx]; + //if (classIds[i][idx] == 2) continue; + //else if (classIds[i][idx] == 3) continue; + + drawPred_ng(classIds[i][idx], confidences[i][idx], box.x, box.y, + box.x + box.width, box.y + box.height, frame); + results.push_back(std::make_pair(classIds[i][idx], box)); + } + } +} + +// Draw the predicted bounding box +void AlgJd_ng::drawPred_ng(int classId, float conf, int left, int top, int right, int bottom, cv::Mat& frame) +{ + cv::Scalar color; + if (classId == 0) //jd + color = cv::Scalar(0, 0, 255); // ɫ + else if (classId == 1) // kz + color = cv::Scalar(0, 255, 0); // + else if (classId == 2) // bm + color = cv::Scalar(0, 255, 0); + else if (classId == 3) // kzx + color = cv::Scalar(0, 255, 0); + else + color = cv::Scalar(255, 255, 255); // ɫ + + //Draw a rectangle displaying the bounding box + cv::rectangle(frame, cv::Point(left, top), cv::Point(right, bottom), color, 4); + + //Get the label for the class name and its confidence + std::string label = cv::format("%.2f%%", (conf*100));/// + if (!classes.empty()) + { + CV_Assert(classId < (int)classes.size()); + label = classes[classId] + ": " + label; + } + else + { + std::cout<<"classes is empty..."<& vec_in, std::vector &vec_out, std::vector>> &vec_results) +{ + cv::Mat blobs; + std::vector image; + + cv::dnn::blobFromImages(vec_in, blobs, 1 / 255.0, cv::Size(inpWidth, inpHeight), cv::Scalar(0, 0, 0), true, false); + + //Sets the input to the network + net_ng.setInput(blobs); + + // Runs the forward pass to get output of the output layers + std::vector outs; + net_ng.forward(outs, getOutputsNames_ng(net_ng)); + + for (int i = 0; i < vec_in.size(); i++) + { + image.push_back(vec_in[i].clone()); + } + + // Remove the bounding boxes with low confidence + post_process_batch_ng(image, outs, vec_results); + + + // Write the frame with the detection boxes + for (int i = 0; i < vec_in.size(); i++) + { + cv::Mat detectedFrame, out; + image[i].convertTo(detectedFrame, CV_8U); + out = detectedFrame.clone(); + vec_out.push_back(out); + } +} + +void AlgJd_ng::detect_batch_ng(std::vector& vec_in, std::vector& transits, std::vector& vec_out, std::vector > >& vec_results) +{ + cv::Mat blobs; + //std::vector image= transits; + + cv::dnn::blobFromImages(vec_in, blobs, 1 / 255.0, cv::Size(inpWidth, inpHeight), cv::Scalar(0, 0, 0), true, false); + + //Sets the input to the network + net_ng.setInput(blobs); + + // Runs the forward pass to get output of the output layers + std::vector outs; + net_ng.forward(outs, getOutputsNames_ng(net_ng)); + //for (int i = 0; i < vec_in.size(); i++) + //{ + // //image.push_back(vec_in[i].clone()); + // transits.push_back(vec_in[i].clone()); + //} + + // Remove the bounding boxes with low confidence + //post_process_batch_ng(image, outs, vec_results); + post_process_batch_ng(transits, outs, vec_results); + + // Write the frame with the detection boxes + for (int i = 0; i < vec_in.size(); i++) + { + cv::Mat detectedFrame, out; + //image[i].convertTo(detectedFrame, CV_8U); + transits[i].convertTo(detectedFrame, CV_8U); + out = detectedFrame.clone(); + vec_out.push_back(out); + } +} + +void AlgJd_ng::post_process_batch_ng(std::vector& vec_frame, std::vector& outs, std::vector > > &vec_results) +{ + int batch = vec_frame.size(); + double confidence;/// + for (int k = 0; k < batch; k++) + { + std::vector < std::vector> classIds(classes.size()); + std::vector < std::vector> confidences(classes.size()); + std::vector < std::vector> boxes(classes.size()); + + //std::cout << "outs.size()\t" << outs.size() << std::endl; + //std::cout << "Type\t" << outs[0].type() << std::endl; + + for (size_t i = 0; i < outs.size(); ++i) + { + //std::cout << "outs.dims\t" << outs[i].dims << std::endl; + //std::cout << "outs[" << i << "].rows\t" << outs[i].size[0] << std::endl; + //std::cout << "outs[" << i << "].cols\t" << outs[i].size[1] << std::endl; + //std::cout << "outs[" << i << "].cols\t" << outs[i].size[2] << std::endl; + // Scan through all the bounding boxes output from the network and keep only the + // ones with high confidence scores. Assign the box's class label as the class + // + cv::Mat m0(outs[i].size[1], outs[i].size[2], CV_32F, outs[i].data + outs[i].step[0] * k); + // with the highest score for the box. + float* data = (float*)m0.data; + for (int j = 0; j < m0.rows; ++j, data += m0.cols) + { + cv::Mat scores = m0.row(j).colRange(5, m0.cols); + cv::Point classIdPoint; + //double confidence; + // Get the value and location of the maximum score + cv::minMaxLoc(scores, 0, &confidence, 0, &classIdPoint); + + //if (confidence > g_sys_conf.ConfThresholds[classIdPoint.x]*0.0001) + if (confidence > confThreshold) + { + int centerX = (int)(data[0] * vec_frame[k].cols); + int centerY = (int)(data[1] * vec_frame[k].rows); + int width = (int)(data[2] * vec_frame[k].cols); + int height = (int)(data[3] * vec_frame[k].rows); + int left = centerX - width / 2; + int top = centerY - height / 2; + + classIds[classIdPoint.x].push_back(classIdPoint.x); + confidences[classIdPoint.x].push_back((float)confidence); + boxes[classIdPoint.x].push_back(cv::Rect(left, top, width, height)); + } + } + } + std::vector > results; + // Perform non maximum suppression to eliminate redundant overlapping boxes with + // lower confidences + for (size_t i = 0; i < classes.size(); ++i) + { + std::vector indices; + cv::dnn::NMSBoxes(boxes[i], confidences[i], confThreshold, nmsThreshold, indices); + for (size_t j = 0; j < indices.size(); ++j) + { + int idx = indices[j]; + cv::Rect box = boxes[i][idx]; + drawPred_ng(classIds[i][idx], confidences[i][idx], box.x, box.y, + box.x + box.width, box.y + box.height, vec_frame[k]); + results.push_back(std::make_pair(classIds[i][idx], box)); + } + } + vec_results.push_back(results); + } +} + +//jinhuan+ +bool sort_rect_by_x_center_ng(cv::Rect r1, cv::Rect r2) +{ + return (r1.x + r1.width / 2) < (r2.x + r2.width / 2); +} +bool sort_rect_by_y_center_ng(cv::Rect r1, cv::Rect r2) +{ + return (r1.y + r1.height / 2) < (r2.y + r2.height / 2); +} +bool sort_rect_by_height_ng(cv::Rect r1, cv::Rect r2) +{ + return (r1.height) < (r2.height); +} +bool sort_rect_by_width_ng(cv::Rect r1, cv::Rect r2) +{ + return (r1.width) < (r2.width); +} +//jinhuan- \ No newline at end of file diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/alg_jd_ng.h b/240510-常德GDX1-1相机-1280x800/Cigarette/alg_jd_ng.h new file mode 100644 index 00000000..58f8fd65 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/alg_jd_ng.h @@ -0,0 +1,42 @@ +#ifndef _CIGARETTE_JD_ng +#define _CIGARETTE_JD_ng + +#include +#include +#include +#include +#include +#include +#include +#include "common.h" +class AlgJd_ng +{ + public: + bool init_ng(QString model_path, QString model_name); + bool test_detect_ng(); + bool test_detect_batcht_ng(int shoot); + int detect_ng(cv::Mat& in, cv::Mat &draw_frame, cv::Mat &out, std::vector> &results); + int detect_ng(cv::Mat& in, cv::Mat &out, std::vector > &results); + // Remove the bounding boxes with low confidence using non-maxima suppression + void post_process_ng(cv::Mat& frame, std::vector& outs, std::vector> &results); + void CircleImagePro_ng(cv::Mat src, cv::Mat dst, std::vector radius); + void detect_batch_ng(std::vector& vec_in, std::vector &vec_out, std::vector > > &vec_results); + void detect_batch_ng(std::vector& vec_in, std::vector &transits, std::vector &vec_out, std::vector>> &vec_results); + // Remove the bounding boxes with low confidence using non-maxima suppression + void post_process_batch_ng(std::vector& vec_frame, std::vector& outs, std::vector>> &vec_results); + void analyse_ng(cv::Mat vec_in, std::vector > & vec_results); + // Get the names of the output layers + std::vector getOutputsNames_ng(const cv::dnn::Net& net); + // Draw the predicted bounding box + void drawPred_ng(int classId, float conf, int left, int top, int right, int bottom, cv::Mat& frame); + private: + cv::dnn::Net net_ng; + std::vector classes_ng; +}; +//jinhuan+ +bool sort_rect_by_x_center_ng(cv::Rect r1, cv::Rect r2); +bool sort_rect_by_y_center_ng(cv::Rect r1, cv::Rect r2); +bool sort_rect_by_height_ng(cv::Rect r1, cv::Rect r2); +bool sort_rect_by_width_ng(cv::Rect r1, cv::Rect r2); +//jinhuan- +#endif //end of _CIGARETTE_JD diff --git a/Cigarette/balluffcamera.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/balluffcamera.cpp similarity index 100% rename from Cigarette/balluffcamera.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/balluffcamera.cpp diff --git a/Cigarette/balluffcamera.h b/240510-常德GDX1-1相机-1280x800/Cigarette/balluffcamera.h similarity index 100% rename from Cigarette/balluffcamera.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/balluffcamera.h diff --git a/Cigarette/basecamera.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/basecamera.cpp similarity index 100% rename from Cigarette/basecamera.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/basecamera.cpp diff --git a/Cigarette/basecamera.h b/240510-常德GDX1-1相机-1280x800/Cigarette/basecamera.h similarity index 80% rename from Cigarette/basecamera.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/basecamera.h index d3f3bad8..f8e7b1be 100644 --- a/Cigarette/basecamera.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/basecamera.h @@ -2,7 +2,8 @@ #include -#define NumberOfSupportedCameras 4 +#define NumberOfSupportedCameras 1 +#define NumberOfidentifyCameras 8 //ʶ #define EdgeEvent 1 #define ImageCap 2 diff --git a/Cigarette/baslercamera.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/baslercamera.cpp similarity index 100% rename from Cigarette/baslercamera.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/baslercamera.cpp diff --git a/Cigarette/baslercamera.h b/240510-常德GDX1-1相机-1280x800/Cigarette/baslercamera.h similarity index 100% rename from Cigarette/baslercamera.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/baslercamera.h diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/camera_glue.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/camera_glue.cpp new file mode 100644 index 00000000..8242a0c9 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/camera_glue.cpp @@ -0,0 +1,61 @@ +#include "camera_glue.h" + +#define camera_glue_init(a,b)\ + spinBox[a][0] = ui.spinBox_##b##1;\ + spinBox[a][1] = ui.spinBox_##b##2;\ + spinBox[a][2] = ui.spinBox_##b##3;\ + spinBox[a][3] = ui.spinBox_##b##4;\ + spinBox[a][4] = ui.spinBox_##b##5; + +camera_glue::camera_glue(QDialog *parent) + : QDialog(parent) +{ + ui.setupUi(this); + this->setWindowFlags(windowFlags()&~Qt::WindowContextHelpButtonHint); +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>0) + camera_glue_init(0,1) +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>1) + camera_glue_init(1,2) +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>2) + camera_glue_init(2,3) +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>3) + camera_glue_init(3,4) +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>4) + camera_glue_init(4,5) +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>5) + camera_glue_init(5,6) +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>6) + camera_glue_init(6,7) +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>7) + camera_glue_init(7,8) +#endif +} + +camera_glue::~camera_glue() +{ + +} + +void camera_glue::recMsgFromDialogSetup(int ptr[][5]) +{ + for(int i=0;isetValue(ptr[i][j]); +} + +void camera_glue::on_pushButton_take_released(void) +{ + int mat[NumberOfSupportedCameras][5]; + for(int i=0;ivalue(); + emit sendMsgToDialogSetup(mat); + this->close(); +} \ No newline at end of file diff --git a/Cigarette/camera_glue.h b/240510-常德GDX1-1相机-1280x800/Cigarette/camera_glue.h similarity index 71% rename from Cigarette/camera_glue.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/camera_glue.h index d0b500b2..aeac9ba7 100644 --- a/Cigarette/camera_glue.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/camera_glue.h @@ -12,14 +12,14 @@ public: camera_glue(QDialog *parent = Q_NULLPTR); ~camera_glue(); signals: - void sendMsgToDialogSetup(int ptr[][3]); + void sendMsgToDialogSetup(int ptr[][5]); public slots: - void recMsgFromDialogSetup(int ptr[][3]); + void recMsgFromDialogSetup(int ptr[][5]); void on_pushButton_take_released(void); private: Ui::camera_glue ui; - QSpinBox *spinBox[NumberOfSupportedCameras][3]; + QSpinBox *spinBox[NumberOfSupportedCameras][5]; SysConf local_SysConf; }; diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/camera_glue.ui b/240510-常德GDX1-1相机-1280x800/Cigarette/camera_glue.ui new file mode 100644 index 00000000..8f535857 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/camera_glue.ui @@ -0,0 +1,1293 @@ + + + camera_glue + + + + 0 + 0 + 289 + 374 + + + + 配方设置 + + + + + 190 + 1740 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 290 + 1740 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 390 + 1740 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 290 + 1790 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 190 + 1790 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 390 + 1790 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 290 + 1840 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 190 + 1840 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 390 + 1840 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 130 + 100 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 130 + 50 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 130 + 150 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 50 + 53 + 61 + 21 + + + + + 微软雅黑 + 12 + 75 + true + + + + 第一张 + + + + + + 50 + 105 + 61 + 21 + + + + + 微软雅黑 + 12 + 75 + true + + + + 第二张 + + + + + + 50 + 155 + 61 + 21 + + + + + 微软雅黑 + 12 + 75 + true + + + + 第三张 + + + + + + 130 + 20 + 70 + 20 + + + + + 微软雅黑 + 12 + 75 + true + + + + 1号相机 + + + + + + 190 + 1710 + 70 + 20 + + + + + 微软雅黑 + 12 + 75 + true + + + + 2号相机 + + + + + + 290 + 1710 + 70 + 20 + + + + + 微软雅黑 + 12 + 75 + true + + + + 3号相机 + + + + + + 390 + 1710 + 70 + 20 + + + + + 微软雅黑 + 12 + 75 + true + + + + 4号相机 + + + + + + 30 + 290 + 285 + 25 + + + + + 微软雅黑 + 10 + + + + 若要保存参数请返回上一级点击保存 + + + + + + 70 + 330 + 141 + 31 + + + + + 微软雅黑 + 12 + 75 + true + + + + 应用 + + + + + + 490 + 1840 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 490 + 1710 + 70 + 20 + + + + + 微软雅黑 + 12 + 75 + true + + + + 5号相机 + + + + + + 490 + 1790 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 490 + 1740 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 590 + 1840 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 590 + 1710 + 70 + 20 + + + + + 微软雅黑 + 12 + 75 + true + + + + 6号相机 + + + + + + 590 + 1790 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 590 + 1740 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 690 + 1840 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 690 + 1710 + 70 + 20 + + + + + 微软雅黑 + 12 + 75 + true + + + + 7号相机 + + + + + + 690 + 1790 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 690 + 1740 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 790 + 1840 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 790 + 1710 + 70 + 20 + + + + + 微软雅黑 + 12 + 75 + true + + + + 8号相机 + + + + + + 790 + 1790 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 790 + 1740 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 130 + 195 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 50 + 200 + 61 + 21 + + + + + 微软雅黑 + 12 + 75 + true + + + + 第四张 + + + + + + 130 + 245 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 50 + 250 + 61 + 21 + + + + + 微软雅黑 + 12 + 75 + true + + + + 第五张 + + + + + + 190 + 1890 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 190 + 1940 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 290 + 1890 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 290 + 1940 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 390 + 1890 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 390 + 1940 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 490 + 1890 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 490 + 1940 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 590 + 1890 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 590 + 1930 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 690 + 1890 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 690 + 1930 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 790 + 1890 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + 790 + 1930 + 70 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + true + + + 10 + + + + + + + diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/change_shift.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/change_shift.cpp new file mode 100644 index 00000000..6950b510 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/change_shift.cpp @@ -0,0 +1,90 @@ +#include "change_shift.h" +#include +#include + +extern SysConf g_sys_conf; +change_shift::change_shift(QDialog *parent) + : QDialog(parent) +{ + ui.setupUi(this); + this->setWindowFlags(windowFlags()&~Qt::WindowContextHelpButtonHint); + + if (g_sys_conf.auto_shift == 1) { + ui.radioButton_auto->setChecked(true); + } + else { + ui.radioButton_auto->setChecked(false); + } + if (g_sys_conf.shift_byhand == 1) { + ui.radioButton_byhand->setChecked(true); + } + else { + ui.radioButton_byhand->setChecked(false); + } + if (g_sys_conf.timing_shift == 1) { + ui.radioButton_time->setChecked(true); + } + else { + ui.radioButton_time->setChecked(false); + } +} + +change_shift::~change_shift() +{ +} + +void change_shift::on_pushButton_apply_released() +{ + QTime timeA; + QTime timeB; + QTime timeC; + if (ui.radioButton_auto->isChecked()) { /// + g_sys_conf.auto_shift = 1; + g_sys_conf.timing_shift = 0; + g_sys_conf.shift_byhand = 0; + + timeA.setHMS(ui.A_hour->minimum(), ui.A_minute->minimum(), 0); + timeB.setHMS(ui.B_hour->minimum(), ui.B_minute->minimum(), 0); + timeC.setHMS(ui.C_hour->minimum(), ui.C_minute->minimum(), 0); + //emit sendMsgToDialogSetup(timeA, timeB, timeC); + //this->close(); + } + else if (ui.radioButton_time->isChecked()) { + g_sys_conf.auto_shift = 0; + g_sys_conf.timing_shift = 1; + g_sys_conf.shift_byhand = 0; + + timeA.setHMS(ui.A_hour->text().toInt(), ui.A_minute->text().toInt(), 0); + timeB.setHMS(ui.B_hour->text().toInt(), ui.B_minute->text().toInt(), 0); + timeC.setHMS(ui.C_hour->text().toInt(), ui.C_minute->text().toInt(), 0); + //emit sendMsgToDialogSetup(timeA, timeB, timeC); + //this->close(); + } + else if (ui.radioButton_byhand->isChecked()) { + g_sys_conf.auto_shift = 0; + g_sys_conf.timing_shift = 0; + g_sys_conf.shift_byhand = 1; + + timeA.setHMS(ui.A_hour->minimum(), ui.A_minute->minimum(), 0); + timeB.setHMS(ui.B_hour->minimum(), ui.B_minute->minimum(), 0); + timeC.setHMS(ui.C_hour->minimum(), ui.C_minute->minimum(), 0); + + } + emit sendMsgToDialogSetup(timeA, timeB, timeC); + this->close(); + DialogSetup::write_config(); +} + +void change_shift::recMsgFromDialogSetup(QTime timeA, QTime timeB, QTime timeC) +{ + ui.A_hour->setValue(timeA.hour()); + ui.A_minute->setValue(timeA.minute()); + + ui.B_hour->setValue(timeB.hour()); + ui.B_minute->setValue(timeB.minute()); + + ui.C_hour->setValue(timeC.hour()); + ui.C_minute->setValue(timeC.minute()); + + this->show(); +} \ No newline at end of file diff --git a/Cigarette/change_shift.h b/240510-常德GDX1-1相机-1280x800/Cigarette/change_shift.h similarity index 91% rename from Cigarette/change_shift.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/change_shift.h index a9150dd9..00c64515 100644 --- a/Cigarette/change_shift.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/change_shift.h @@ -16,7 +16,7 @@ private: Ui::change_shift ui; private slots: - void on_pushButton_released(); + void on_pushButton_apply_released(); public slots: void recMsgFromDialogSetup(QTime timeA, QTime timeB, QTime timeC); diff --git a/Cigarette/camera_glue.ui b/240510-常德GDX1-1相机-1280x800/Cigarette/change_shift.ui similarity index 50% rename from Cigarette/camera_glue.ui rename to 240510-常德GDX1-1相机-1280x800/Cigarette/change_shift.ui index 1c96a0d7..44f3bfb2 100644 --- a/Cigarette/camera_glue.ui +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/change_shift.ui @@ -1,485 +1,398 @@ - camera_glue - + change_shift + 0 0 456 - 256 + 360 - 配方设置 + 换班设置 - + - 280 - 50 - 71 - 31 + 170 + 250 + 110 + 30 微软雅黑 - 12 + 10 75 true - - true - - - 10 + + 应用 - + - 140 - 720 - 71 - 31 + 70 + 300 + 331 + 30 微软雅黑 12 - 75 - true - - true - - - 10 + + 若要保存参数请返回上一级点击保存 - + - 240 - 720 - 71 - 31 + 30 + 810 + 140 + 30 微软雅黑 - 12 - 75 - true + 16 - - true - - - 10 + + 自动换班 - + - 140 - 770 - 71 - 31 + 250 + 200 + 60 + 30 微软雅黑 12 - 75 - true - - true - - 10 + 59 - + - 280 - 100 - 71 - 31 + 220 + 120 + 20 + 30 微软雅黑 12 - 75 - true - - true - - - 10 + + - + - 240 - 770 - 71 - 31 + 310 + 200 + 20 + 30 微软雅黑 12 - 75 - true - - true - - - 10 + + - + - 140 - 820 - 71 - 31 + 160 + 120 + 60 + 30 微软雅黑 12 - 75 - true - - true - - 10 + 23 - + - 280 - 639 - 71 - 31 + 110 + 160 + 50 + 30 微软雅黑 12 - 75 - true - - true - - - 10 + + B班 - + - 240 - 820 - 71 - 31 + 110 + 200 + 50 + 30 微软雅黑 12 - 75 - true - - true - - - 10 + + C班 - + - 130 - 100 - 71 - 31 + 110 + 120 + 50 + 30 微软雅黑 12 - 75 - true - - true - - - 10 + + A班 - + - 130 - 50 - 71 - 31 + 250 + 120 + 60 + 30 微软雅黑 12 - 75 - true - - true - - 10 + 59 - + - 130 - 639 - 71 - 31 + 310 + 120 + 20 + 30 微软雅黑 12 - 75 - true - - true - - - 10 + + - + - 10 - 53 - 61 - 21 + 160 + 200 + 60 + 30 微软雅黑 12 - 75 - true - - 第一张 + + 23 - + - 10 - 101 - 61 - 21 + 280 + 60 + 140 + 30 微软雅黑 - 12 - 75 - true + 16 - 第二张 + 定时换班 - + - 10 - 640 - 61 - 21 + 250 + 160 + 60 + 30 微软雅黑 12 - 75 - true - - 第三张 + + 59 - + - 130 - 20 - 71 - 21 + 310 + 160 + 20 + 30 微软雅黑 12 - 75 - true - 1号相机 + - + - 280 - 20 - 71 - 21 + 220 + 200 + 20 + 30 微软雅黑 12 - 75 - true - 2号相机 + - + - 140 - 690 - 61 - 21 + 160 + 160 + 60 + 30 微软雅黑 12 - 75 - true - - 3号相机 + + 23 - + - 240 - 690 - 61 - 21 + 220 + 160 + 20 + 30 微软雅黑 12 - 75 - true - 4号相机 + - + - 130 - 160 - 241 - 21 - - - - 若要保存参数请返回上一级点击保存 - - - - - - 170 - 190 - 111 - 31 + 40 + 60 + 140 + 30 微软雅黑 - 12 - 75 - true + 16 - 应用 + 手动换班 diff --git a/Cigarette/cigarette.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/cigarette.cpp similarity index 64% rename from Cigarette/cigarette.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/cigarette.cpp index b39cbccb..d6e9461f 100644 --- a/Cigarette/cigarette.cpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/cigarette.cpp @@ -6,38 +6,32 @@ #include #include #include +#include "exportData.h" +#include +int g_op_time; //ԱȨʱĬ300룩 +int g_admin_time; //ԱȨʱĬ300룩 -#define CONFIGURE_FILE "../conf/conf.txt" -#define ROTATE_FILE "../conf/rotate.txt" -#define MODBUS_CONFIGURE_FILE "../conf/modbus.txt" -#define PLC_CONFIG_FILE "../conf/plc.txt" -#define ALARM_RECORD_FILE "alarm.txt" - -#define OUTPUT_HIGH_WIDTH 20000 //źŵȣ΢ - -#define OP_TIME 300 //OPȨʱĬ300룩 - -#define ADMIN_TIME 600 //ADMINȨʱĬ300룩 - -#define STOP_SECONDS 3 //ٴβ䴥Զ +int rotationAngle[NumberOfSupportedCameras]; //ͼƬתǶ +bool isNeedRotate[NumberOfSupportedCameras]; -int g_op_time; //OPȨʱĬ300룩 +DisplayLabelConf g_display_label_conf[NumberOfSupportedCameras]; -int g_admin_time; //ADMINOPȨʱĬ300룩 +ConfPath g_conf_path; +SysConf g_sys_conf; //ϵͳò +ModbusConf g_modbus_conf; //modbusַ -int rotationAngle[NumberOfSupportedCameras]; //ͼƬתǶ -bool isNeddRotate[NumberOfSupportedCameras]; +PLCDevice* m_PLCDevice; +bool g_plc_dialog_open; //ǷplcöԻ -SysConf g_sys_conf; //ϵͳò -ModbusConf g_modbus_conf; //modbusַ -PLCDevice * m_PLCDevice; QDateTime g_ts_start; extern SingleCamInfoStruct SingleCamInfo[NumberOfSupportedCameras]; AlgJd alg_jd[NumberOfSupportedCameras]; //⽺AI㷨 - +#ifdef __DEBUG +AlgJd alg_test;//test AI㷨 +#endif QThread* pThread[NumberOfSupportedCameras]; //³ @@ -53,15 +47,19 @@ Pylon::CBaslerUniversalInstantCamera* BaslerCamHandle[NumberOfSupportedCameras]; void *HIKCamHandle[NumberOfSupportedCameras]; CaptureThreadHIK* pHIKCaptureThread[NumberOfSupportedCameras]; -SyncQueue > *g_save_queue; //ͼƬ +SyncQueue> *g_save_queue; //ͼƬ SyncQueue > *g_image_queue[NumberOfSupportedCameras]; //intʾһĿ˼ ASyncQueue *g_shooted_queue[NumberOfSupportedCameras]; // ASyncQueue *g_result_wait_queue[NumberOfSupportedCameras]; // ASyncQueue *g_double_queue[NumberOfSupportedCameras]; // ASyncQueue *g_result_queue[NumberOfSupportedCameras]; // -bool g_debug_mode; //ģʽģʽͣ״̬ܴ +bool g_debug_mode; //ģʽģʽͣ״̬ܴ SyncQueue *g_debug_queue[NumberOfSupportedCameras]; //ģʽͼ -SyncQueue<_UDPSendInfo> *UDP_Info_queue; + +SyncQueue<_UDPSendInfo>* UDP_Info_queue; +//SyncQueue<_ExportDataInfo> *export_Data_Info_queue; +SyncQueue<_XMLExportDataInfo>* export_XMLData_Info_queue; +ExportDataThread exportDataThread; bool g_admin_mode; //ǷԱģʽ @@ -71,21 +69,20 @@ bool g_op_mode; // QString g_op_pswd; //Ա -bool g_plc_dialog_open; //ǷplcöԻ - -bool g_working; //true ʼ״̬ false ͣ״̬ +bool g_working; //true ʼ״̬ false ֹͣ״̬ int last_shift; //¼һΰ QStringList g_alarm_msg; - std::vector g_vec_alarm; - int g_last_alarm_code; int g_lst_quantiy; //һIJ int quantity_stop_count; // int g_seconds; +int CurOpLabel; +bool onrestart = false; +bool flag = false; VOID BeforeWork(int shoot[]) { @@ -107,6 +104,21 @@ Cigarette::Cigarette(QWidget *parent) { ui.setupUi(this); InitPtrMat(); + read_conf(g_conf_path); + + if (!g_conf_path.config_path.isEmpty()) { + // ǿ + QDir* dirinfo = new QDir(g_conf_path.config_path); + if (!dirinfo->exists()) { + // ļϢ + delete dirinfo, dirinfo = nullptr; + g_conf_path.config_path = "D:/conf"; + } + delete dirinfo, dirinfo = nullptr; + } + else + g_conf_path.config_path = "D:/conf"; + bool update_rotate = false; if (!read_rotate_message()) { update_rotate = true; @@ -126,6 +138,12 @@ Cigarette::Cigarette(QWidget *parent) g_save_queue->name = "save queue"; UDP_Info_queue = new SyncQueue<_UDPSendInfo>(Queue_Size); UDP_Info_queue->name = "UDP Info queue"; + + //export_Data_Info_queue = new SyncQueue<_ExportDataInfo>(Queue_Size); + //export_Data_Info_queue->name = "Export Data Info queue"; + export_XMLData_Info_queue = new SyncQueue<_XMLExportDataInfo>(Queue_Size); + export_XMLData_Info_queue->name = "Export Data Info queue"; + last_shift = 256; for(int i=0;iname = format("debug_%d", i); if (update_rotate) { rotationAngle[i] = cv::ROTATE_90_COUNTERCLOCKWISE + 1; - isNeddRotate[i] = false; + isNeedRotate[i] = false; } } if (update_rotate) { @@ -165,30 +183,38 @@ Cigarette::Cigarette(QWidget *parent) g_working = false; - g_alarm_msg << QStringLiteral("ޱ") - << QStringLiteral("1#") - << QStringLiteral("2#") - << QStringLiteral("1#޳") - << QStringLiteral("2#޳") - << QStringLiteral("1#ͨѶ") - << QStringLiteral("2#ͨѶ"); + g_alarm_msg << QStringLiteral("ޱ") /// 0 + << QStringLiteral("1#") /// 1 + << QStringLiteral("2#") /// 2 + << QStringLiteral("1#޳") /// 3 + << QStringLiteral("2#޳") /// 4 + << QStringLiteral("1#ͨѶ") /// 5 + << QStringLiteral("2#ͨѶ") /// 6 + << QStringLiteral("3#ͨѶ") /// 7 + << QStringLiteral("4#ͨѶ") /// 8 + << QStringLiteral("5#ͨѶ") /// 9 + << QStringLiteral("6#ͨѶ") /// 10 + << QStringLiteral("7#ͨѶ") /// 11 + << QStringLiteral("8#ͨѶ"); /// 12 g_last_alarm_code = 0; - g_ts_start = QDateTime::currentDateTime(); for(int i=0;idisplay(production_number[i]); ok[i] = 0; ng[i] = 0; - g_last_mat[i][0] = cv::Mat::zeros(20, 20, CV_8UC3); - g_last_mat[i][1] = cv::Mat::zeros(20, 20, CV_8UC3); + g_display_label_conf[i].g_last_mat[0] = cv::Mat::zeros(20, 20, CV_8UC3); + g_display_label_conf[i].g_last_mat[1] = cv::Mat::zeros(20, 20, CV_8UC3); +#ifdef DRAW_RECT + DrawRect_init(i); +#endif } ui.lcdNumber_total_no->display(0); ui.lcdNumber_total_no_last->display(0); @@ -199,12 +225,14 @@ Cigarette::Cigarette(QWidget *parent) quantity_stop_count = 0; g_seconds = 0; - read_sys_config(g_sys_conf); //ʼϵͳ + QString config_path = g_conf_path.config_path + "/conf.txt"; + read_sys_config(g_sys_conf, config_path); //ʼϵͳ - g_modbus_conf.kick1 = 0; - g_modbus_conf.kick2 = 0; - g_modbus_conf.kick3 = 0; - g_modbus_conf.kick4 = 0; + for (int i = 0; i < NumberOfSupportedCameras; i++) { +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras > i) + g_modbus_conf.kick[i] = 0; +#endif + } g_modbus_conf.quantity = 0; g_modbus_conf.shift = 0; g_modbus_conf.work = 0; @@ -216,30 +244,34 @@ Cigarette::Cigarette(QWidget *parent) //ͼƬ߳ saveThread.init(); +#ifdef __ExportData + connect(&saveThread, &SaveThread::sendDataToExport, &exportDataThread, &ExportDataThread::GetDataFromSaveThread); +#endif saveThread.start_work(); #ifdef __UDPSend - sThread.init(UDP_Info_queue,g_sys_conf.MonitorIP ,g_sys_conf.MonitorPort); + sThread.init(UDP_Info_queue, g_sys_conf.MonitorIP, g_sys_conf.MonitorPort); sThread.start_work(); rThread = new threadReceive(); - rThread->init(g_sys_conf.MonitorIP ,g_sys_conf.MonitorPort); + rThread->init(g_sys_conf.MonitorIP, g_sys_conf.MonitorPort); connect(rThread, &threadReceive::sendMsgToCigratte, this, &Cigarette::recMsgFromUdp); rThread->start_work(); +#endif - sThread.sendData("ReStartOk", g_sys_conf.FeedbackPort); - sThread.sendData("DebugDis", g_sys_conf.FeedbackPort); - sThread.sendData("LockOk", g_sys_conf.FeedbackPort); - +#ifdef __ExportData + exportDataThread.init(); + connect(this, &Cigarette::sendMsgToExportData, &exportDataThread, &ExportDataThread::EDrecMsgFromCigarette); + exportDataThread.start_work(); #endif m_PLCDevice = new PLCDevice; PLCDevice::init_plc(m_PLCDevice); - if(m_PLCDevice->g_plc_ok) { printf("Connected to dev!\n"); ui.label_plc->setText(QStringLiteral("PLC")); ui.label_plc->setStyleSheet(tr("background-color: rgb(0, 170, 0);")); + m_PLCDevice->g_plc_status|=(0x01); uint8_t Data8; m_PLCDevice->read_bits_from_plc( g_modbus_conf.no_kick, 1 ,&Data8); ui.checkBox_unkick->setChecked(Data8); @@ -256,30 +288,90 @@ Cigarette::Cigarette(QWidget *parent) printf("\nSorry,fail to connect ttyS0,please check your device's state.\n"); ui.label_plc->setText(QStringLiteral("PLCϿ")); ui.label_plc->setStyleSheet(tr("background-color: rgb(255, 255, 0);")); + m_PLCDevice->g_plc_status&=~(0x01); } std::cout << " Enumerate Cameras..."<< std::endl; - EnumerateCameras((SingleCamInfoStruct*)&SingleCamInfo,true,g_sys_conf); + EnumerateCameras((SingleCamInfoStruct*)&SingleCamInfo, true, g_sys_conf); - /*if (!license_pass) Ȩʧ - { - QMessageBox::information(NULL, QStringLiteral("Ȩʧ"), QStringLiteral("ȨʧܣϵϵͳӦ̣"), QMessageBox::Ok); - exit(0); - }*/ + + // ޳ֵ0 + int ret = m_PLCDevice->write_bit_2_plc(g_modbus_conf.shift, 1);//PLCͻϢ //߳ for (int i = 0; i < NumberOfSupportedCameras; i++) { if(SingleCamInfo[i].Detect){ cam_status_mat[i]->setStyleSheet(tr("background-color: rgb(0, 170, 0);")); - CreatWorkThread(SingleCamInfo[i].CamClass,i,this); - if (!alg_jd[i].init()) + QString model_path, model_name; + if (g_sys_conf.model_path.isEmpty()) { + model_path = "D:/model"; + g_sys_conf.model_path = "D:/model"; + } + else + model_path = g_sys_conf.model_path; + + if (g_sys_conf.model_name.isEmpty()) { + model_name = "jd.weights"; + g_sys_conf.model_name = "jd.weights"; + } + else + model_name = g_sys_conf.model_name; + + if (!alg_jd[i].init(model_path, model_name)) { QMessageBox::information(NULL, QStringLiteral("ϵͳԼʧ"), QStringLiteral("AIģ1ʼʧܣ"), QMessageBox::Ok); exit(-1); } + CreatWorkThread(SingleCamInfo[i].CamClass, i, this); + } + else { + QDateTime ts_start = QDateTime::currentDateTime(); + QTime time = QTime::currentTime(); + QDateTime local(ts_start); + QString localTime = local.toString("yyyy-MM-dd hh:mm:ss"); + + if (g_modbus_conf.alarm > 0) + { + uint16_t dest16[2] = { 5+i,0 }; + int ret = m_PLCDevice->write_short_2_plc(g_modbus_conf.alarm, 2, dest16); + //if (ret > 0) SingleCamInfo[0].OffLine = false; + + if (ret > 0) + { + AlarmInfo alarm_info; + alarm_info.alarm_code = dest16[0]; + if ((alarm_info.alarm_code > 0) && (alarm_info.alarm_code <= 12)) + { + alarm_info.alarm_msg = (g_alarm_msg[alarm_info.alarm_code]).toStdString(); + alarm_info.alarm_start = localTime.toStdString(); + ui.label_alarm->setText(g_alarm_msg[alarm_info.alarm_code]); + ui.label_alarm->setStyleSheet(tr("background-color: rgb(255, 0, 0);")); + if (g_last_alarm_code != alarm_info.alarm_code) + { + g_vec_alarm.push_back(alarm_info); + g_last_alarm_code = alarm_info.alarm_code; + } + } + else if (alarm_info.alarm_code == 0) { + ui.label_alarm->setStyleSheet(tr("background-color: rgb(0, 170, 0);")); + ui.label_alarm->setText(QStringLiteral("ޱ")); + } +#ifdef __UDPSend + QString str; + str = QString("alarm") + '_' + QString::number(alarm_info.alarm_code); + sThread.sendData(str, g_sys_conf.FeedbackPort); +#endif + } + } } + } + +#ifdef __DEBUG + alg_test.init(g_sys_conf.model_path, g_sys_conf.model_name);//test AI㷨 +#endif + //Զ if (g_sys_conf.auto_open == 1) { @@ -296,6 +388,11 @@ Cigarette::Cigarette(QWidget *parent) } } } +#ifdef __UDPSend + sThread.sendData("ReStartOk", g_sys_conf.FeedbackPort); + sThread.sendData("DebugDis", g_sys_conf.FeedbackPort); + sThread.sendData("LockOk", g_sys_conf.FeedbackPort); +#endif DisableDebugMode(); m_pTimer = new QTimer(this); @@ -305,6 +402,9 @@ Cigarette::Cigarette(QWidget *parent) m_delay = new QTimer(this);// connect(m_delay, SIGNAL(timeout()), this, SLOT(enable_shift())); + m_sendMsg_delay = new QTimer(this); + connect(m_sendMsg_delay, SIGNAL(timeout()), this, SLOT(sendLatestData())); + m_op_delay = new QTimer(this); connect(m_op_delay, SIGNAL(timeout()), this, SLOT(op_timeout())); @@ -317,8 +417,10 @@ Cigarette::Cigarette(QWidget *parent) connect(ui.label_alarm, SIGNAL(QlabelDoubleClick()), this, SLOT(OnCancelAlarm()));//ǩ˫ - image_lable_signalMapper0 = new QSignalMapper(this); - image_lable_signalMapper1 = new QSignalMapper(this); + image_lable_DBsignalMapper0 = new QSignalMapper(this); + image_lable_DBsignalMapper1 = new QSignalMapper(this); + image_lable_TPsignalMapper0 = new QSignalMapper(this); + image_lable_TPsignalMapper1 = new QSignalMapper(this); label_ng_signalMapper = new QSignalMapper(this); pTimer_Cam_signalMapper = new QSignalMapper(this); toolButton_cam_signalMapper = new QSignalMapper(this); @@ -329,11 +431,17 @@ Cigarette::Cigarette(QWidget *parent) connect(m_pTimer_Cam_mat[i], SIGNAL(timeout()), pTimer_Cam_signalMapper, SLOT(map())); pTimer_Cam_signalMapper->setMapping(m_pTimer_Cam_mat[i], i); - connect(display_lable_mat[i][0], SIGNAL(QlabelDoubleClick()), image_lable_signalMapper0, SLOT(map())); - image_lable_signalMapper0->setMapping(display_lable_mat[i][0], i << 4 | 0); + connect(display_lable_mat[i][0], SIGNAL(QlabelDoubleClick()), image_lable_DBsignalMapper0, SLOT(map())); + image_lable_DBsignalMapper0->setMapping(display_lable_mat[i][0], i << 4 | 0); + + connect(display_lable_mat[i][1], SIGNAL(QlabelDoubleClick()), image_lable_DBsignalMapper1, SLOT(map())); + image_lable_DBsignalMapper1->setMapping(display_lable_mat[i][1], i << 4 | 1); - connect(display_lable_mat[i][1], SIGNAL(QlabelDoubleClick()), image_lable_signalMapper1, SLOT(map())); - image_lable_signalMapper1->setMapping(display_lable_mat[i][1], i << 4 | 1); + connect(display_lable_mat[i][0], SIGNAL(QlabelTripleClick()), image_lable_TPsignalMapper0, SLOT(map())); + image_lable_TPsignalMapper0->setMapping(display_lable_mat[i][0], i << 4 | 0); + + connect(display_lable_mat[i][1], SIGNAL(QlabelTripleClick()), image_lable_TPsignalMapper1, SLOT(map())); + image_lable_TPsignalMapper1->setMapping(display_lable_mat[i][1], i << 4 | 1); connect(label_ng_mat[i], SIGNAL(QlabelDoubleClick()), label_ng_signalMapper, SLOT(map())); label_ng_signalMapper->setMapping(label_ng_mat[i], i); @@ -347,8 +455,12 @@ Cigarette::Cigarette(QWidget *parent) } connect(toolButton_cam_signalMapper, SIGNAL(mapped(int)), this, SLOT(OnToolButtonCamReleasedHub(int))); connect(pTimer_Cam_signalMapper, SIGNAL(mapped(int)), this, SLOT(OpenCamTimeoutHub(int))); - connect(image_lable_signalMapper0, SIGNAL(mapped(int)), this, SLOT(OnDBClickHub(int))); - connect(image_lable_signalMapper1, SIGNAL(mapped(int)), this, SLOT(OnDBClickHub(int))); + connect(image_lable_DBsignalMapper0, SIGNAL(mapped(int)), this, SLOT(OnDBClickHub(int))); + connect(image_lable_DBsignalMapper1, SIGNAL(mapped(int)), this, SLOT(OnDBClickHub(int))); +#ifdef DRAW_RECT + connect(image_lable_TPsignalMapper0, SIGNAL(mapped(int)), this, SLOT(OnTPClickHub(int))); + connect(image_lable_TPsignalMapper1, SIGNAL(mapped(int)), this, SLOT(OnTPClickHub(int))); +#endif connect(label_ng_signalMapper, SIGNAL(mapped(int)), this, SLOT(OnDBClickNGHub(int))); connect(RotateReleased_signalMapper, SIGNAL(mapped(int)), this, SLOT(OnRotateReleasedHub(int))); @@ -384,8 +496,8 @@ Cigarette::Cigarette(QWidget *parent) BeforeWork(g_sys_conf.shoot); int ret = m_PLCDevice->write_bit_2_plc( g_modbus_conf.work, 1); ui.label_title->setStyleSheet(tr("background-color: rgb(0, 170, 0);")); - ui.label_title_2->setStyleSheet(tr("background-color: rgb(0, 170, 0);")); - ui.label_title_2->setText(QStringLiteral("")); + /*ui.label_title_2->setStyleSheet(tr("background-color: rgb(0, 170, 0);")); + ui.label_title_2->setText(QStringLiteral(""));*/ #ifdef __UDPSend sThread.sendData("Work", g_sys_conf.FeedbackPort); #endif @@ -399,13 +511,75 @@ Cigarette::Cigarette(QWidget *parent) } } } + //connect(ui.btn_pause, SIGNAL(clicked()), this, SLOT(sendLatestData())); } Cigarette::~Cigarette() { emit sengMsgToClog("Application exited."); + Exit(); + exit(-1); } +void Cigarette::start_work() +{ + //ɼʱл + for (int i = 0; i < NumberOfSupportedCameras; i++) + { + if(SingleCamInfo[i].Detect && SingleCamInfo[i].IsOpen){ + if(SingleCamInfo[i].CamClass == BalluffClassID){ + if(pCaptureThread[i]) + { + pCaptureThread[i]->p_result_queue->clear(); + pCaptureThread[i]->p_unit_queue->clear(); + pCaptureThread[i]->p_result_wait_queue->clear(); + pCaptureThread[i]->p_shooted_queue->clear(); + } + } + else if (SingleCamInfo[i].CamClass == BaslerClassID) { + if(pBaslerCaptureThread[i]) + { + pBaslerCaptureThread[i]->p_result_queue->clear(); + pBaslerCaptureThread[i]->p_unit_queue->clear(); + pBaslerCaptureThread[i]->p_result_wait_queue->clear(); + pBaslerCaptureThread[i]->p_shooted_queue->clear(); + } + } + else if (SingleCamInfo[i].CamClass == HIKClassID) { + if(pHIKCaptureThread[i]) + { + pHIKCaptureThread[i]->p_result_queue->clear(); + pHIKCaptureThread[i]->p_unit_queue->clear(); + pHIKCaptureThread[i]->p_result_wait_queue->clear(); + pHIKCaptureThread[i]->p_shooted_queue->clear(); + } + } + } + } + + BeforeWork(g_sys_conf.shoot); + int ret = m_PLCDevice->write_bit_2_plc( g_modbus_conf.work, 1); + /*::Sleep(5000); + ret = m_PLCDevice->write_bit_2_plc( g_modbus_conf.work, 0); + ::Sleep(5000); + ret = m_PLCDevice->write_bit_2_plc( g_modbus_conf.work, 1);*/ + //printf("write:\t%d\n", ret); + ui.label_title->setStyleSheet(tr("background-color: rgb(0, 170, 0);")); + /*ui.label_title_2->setStyleSheet(tr("background-color: rgb(0, 170, 0);")); + ui.label_title_2->setText(QStringLiteral(""));*/ +#ifdef __UDPSend + sThread.sendData("Work", g_sys_conf.FeedbackPort); +#endif + g_working = true; + ui.checkBox_debug->setChecked(false); //ȡģʽ + ui.checkBox_debug->setEnabled(false); //Բ + //ʾOK/NGť + for (int i = 0; i < NumberOfSupportedCameras; i++) + { + //ʾOK/NGť + label_reslut_mat[i]->setVisible(true); + } +} //ʼť void Cigarette::on_btn_start_released() { @@ -431,67 +605,84 @@ void Cigarette::on_btn_start_released() } if (!g_working) { - //ɼʱл - for (int i = 0; i < NumberOfSupportedCameras; i++) - { - if(SingleCamInfo[i].Detect && SingleCamInfo[i].IsOpen){ - if(SingleCamInfo[i].CamClass == BalluffClassID){ - if(pCaptureThread[i]) - { - pCaptureThread[i]->p_result_queue->clear(); - pCaptureThread[i]->p_unit_queue->clear(); - pCaptureThread[i]->p_result_wait_queue->clear(); - pCaptureThread[i]->p_shooted_queue->clear(); - } - } - else if (SingleCamInfo[i].CamClass == BaslerClassID) { - if(pBaslerCaptureThread[i]) - { - pBaslerCaptureThread[i]->p_result_queue->clear(); - pBaslerCaptureThread[i]->p_unit_queue->clear(); - pBaslerCaptureThread[i]->p_result_wait_queue->clear(); - pBaslerCaptureThread[i]->p_shooted_queue->clear(); - } - } - else if (SingleCamInfo[i].CamClass == HIKClassID) { - if(pHIKCaptureThread[i]) - { - pHIKCaptureThread[i]->p_result_queue->clear(); - pHIKCaptureThread[i]->p_unit_queue->clear(); - pHIKCaptureThread[i]->p_result_wait_queue->clear(); - pHIKCaptureThread[i]->p_shooted_queue->clear(); - } - } - } - } + start_work(); + } + } + g_op_time = OP_TIME; + //ui.checkBox_debug->setEnabled(true); //ʹcheckBox +} - BeforeWork(g_sys_conf.shoot); - int ret = m_PLCDevice->write_bit_2_plc( g_modbus_conf.work, 1); - /*::Sleep(5000); - ret = m_PLCDevice->write_bit_2_plc( g_modbus_conf.work, 0); - ::Sleep(5000); - ret = m_PLCDevice->write_bit_2_plc( g_modbus_conf.work, 1);*/ - //printf("write:\t%d\n", ret); - ui.label_title->setStyleSheet(tr("background-color: rgb(0, 170, 0);")); - ui.label_title_2->setStyleSheet(tr("background-color: rgb(0, 170, 0);")); - ui.label_title_2->setText(QStringLiteral("")); +void Cigarette::pause_work() +{ + int ret = m_PLCDevice->write_bit_2_plc( g_modbus_conf.work, 0 ); + //printf("write:\t%d\n", ret); + ui.label_title->setStyleSheet(tr("background-color: rgb(255, 255, 0);")); + /*ui.label_title_2->setStyleSheet(tr("background-color: rgb(255, 255, 0);")); + ui.label_title_2->setText(QStringLiteral("δ"));*/ #ifdef __UDPSend - sThread.sendData("Work", g_sys_conf.FeedbackPort); + sThread.sendData("NoWork", g_sys_conf.FeedbackPort); #endif - g_working = true; - ui.checkBox_debug->setChecked(false); //ȡģʽ - ui.checkBox_debug->setEnabled(false); //Բ - //ʾOK/NGť - for (int i = 0; i < NumberOfSupportedCameras; i++) + g_working = false; + ui.checkBox_debug->setEnabled(true); //ʹcheckBox + //OK/NGť + for (int i = 0; i < NumberOfSupportedCameras; i++) + { + //ʾOK/NGť + label_reslut_mat[i]->setVisible(false); + } + + m_sendMsg_delay->setSingleShot(true); + m_sendMsg_delay->start(1000); +} + +void Cigarette::Exit() +{ + this->on_btn_pause_released(); + for(int i=0;isetVisible(true); + qDebug() << "Close device " << i; + cam_work_mat[i]->setStyleSheet(tr("background-color: rgb(255, 255, 0);")); } } + work_thread[i].stop(); + debug_thread[i].stop(); + delete g_image_queue[i]; + delete g_result_queue[i]; + delete g_result_wait_queue[i]; + delete g_double_queue[i]; + delete g_shooted_queue[i]; + delete g_debug_queue[i]; + qDebug() << "Close capture thread " << i; } - g_op_time = OP_TIME; + saveThread.stop(); + delete g_save_queue; +#ifdef __UDPSend + sThread.stop(); + rThread->stop(); + delete rThread; +#endif + +#ifdef __ExportData + exportDataThread.stop(); + // delete export_Data_Info_queue; +#endif + qDebug() << "Close thread "; + + if(m_PLCDevice) { + m_PLCDevice->disconnect_plc(); + delete m_PLCDevice; + } + qApp->quit(); + this->close(); + + Pylon::PylonTerminate(); + + } -//ͣť +//ֹͣť void Cigarette::on_btn_pause_released() { emit sengMsgToClog("Pause the application."); @@ -509,28 +700,13 @@ void Cigarette::on_btn_pause_released() } } if (m_PLCDevice->g_plc_ok) { - if (g_working) - { - int ret = m_PLCDevice->write_bit_2_plc( g_modbus_conf.work, 0 ); - //printf("write:\t%d\n", ret); - ui.label_title->setStyleSheet(tr("background-color: rgb(255, 255, 0);")); - ui.label_title_2->setStyleSheet(tr("background-color: rgb(255, 255, 0);")); - ui.label_title_2->setText(QStringLiteral("δ")); -#ifdef __UDPSend - sThread.sendData("NoWork", g_sys_conf.FeedbackPort); -#endif - g_working = false; - ui.checkBox_debug->setEnabled(true); //ʹcheckBox - //OK/NGť - for (int i = 0; i < NumberOfSupportedCameras; i++) - { - //ʾOK/NGť - label_reslut_mat[i]->setVisible(false); - } + if (g_working){ + pause_work(); } } g_op_time = OP_TIME; } + ///ť void Cigarette::on_btn_lock_released() { @@ -573,15 +749,83 @@ void Cigarette::on_btn_setup_released() { dialog_setup = new DialogSetup(this); connect(dialog_setup, SIGNAL(system_exit()), this, SLOT(OnExit())); +#ifdef __DEBUG + connect(dialog_setup, SIGNAL(_testimg()), this, SLOT(TestImg())); + connect(dialog_setup, SIGNAL(_testimgs()), this, SLOT(TestImgs())); +#endif dialog_setup->setModal(true); dialog_setup->show(); dialog_setup->move((this->width() - dialog_setup->width()) / 2, (this->height() - dialog_setup->height()) / 2); + } else { QMessageBox::information(NULL, QStringLiteral("Ȩ޼"), QStringLiteral("ȵťԱģʽ"), QMessageBox::Ok); } } +#ifdef __DEBUG +void Cigarette::TestImg() +{ + QString srcDirPath = QString::fromStdString(SelectFileOFN()); + + //ͼ + std::cout << "open file------ " << srcDirPath.toStdString() << std::endl; + cv::Mat imagein = cv::imread(srcDirPath.toStdString(), cv::IMREAD_COLOR); + if (!imagein.data) + { + return; + } + std::vector > results; + cv::Mat output; + alg_test.detect(imagein, output,results); + std::string WindowName = "TestImg"; + cv::namedWindow(WindowName, cv::WINDOW_NORMAL); + cv::imshow(WindowName, output); + cv::waitKeyEx(1); +#ifdef __ExportData + alg_test.analyse(imagein, results); +#endif +} +void Cigarette::TestImgs() +{ + QString srcDirPath = QString::fromStdString(SelectDirIFD()); + + vector files; + std::cout << "srcDirPath=" << srcDirPath.toStdString() << std::endl; + srcDirPath += "/"; + //ȡ·µļ + getFiles(srcDirPath.toStdString() + "*.bmp", files); + if (files.size() == 0) + { + QMessageBox::StandardButton result = QMessageBox::information(NULL, QStringLiteral("ʾ"), QStringLiteral("ûҵͼƬ")); + return; + } + + for (int index = 0; index < files.size(); index++) + { + //ͼ + std::cout << "open file------ " << files[index] << std::endl; + cv::Mat imagein = cv::imread(srcDirPath.toStdString() + files[index], cv::IMREAD_COLOR); + if (!imagein.data) + { + break; + } + + cv::Mat output; + std::vector > results; + alg_test.detect(imagein, output,results); + std::string WindowName = "TestImg"; + cv::namedWindow(WindowName, cv::WINDOW_NORMAL); + cv::imshow(WindowName, output); + int k = cv::waitKeyEx(1); + if (k == 27)break;//ESC +#ifdef __ExportData + alg_test.analyse(imagein, results); +#endif + QCoreApplication::processEvents(); + } +} +#endif //Ա½ void Cigarette::OnAdmin() { @@ -613,83 +857,14 @@ void Cigarette::OnOp() //˳ǰִ void Cigarette::OnExit() { - //emit sengMsgToClog("Close the Application."); - this->on_btn_pause_released(); - Pylon::PylonTerminate(); - delete g_save_queue; - for(int i=0;isetStyleSheet(tr("background-color: rgb(255, 255, 0);")); - } - } - work_thread[i].stop(); - debug_thread[i].stop(); - } - saveThread.stop(); -#ifdef __UDPSend - sThread.stop(); - rThread->stop(); - delete rThread; -#endif - - - if(m_PLCDevice) { - m_PLCDevice->disconnect_plc(); - delete m_PLCDevice; - } - qApp->quit(); - this->close(); - exit(1);/// + emit sengMsgToClog("Close the Application."); + Exit(); + exit(-1); } void Cigarette::OnRestart() { - this->on_btn_pause_released(); - Pylon::PylonTerminate(); - delete g_save_queue; - for (int i = 0; i < NumberOfSupportedCameras; i++) - { - if (SingleCamInfo[i].Detect) { - if (ControlCamOpenOrClose(i, CLOSE)) - { - qDebug() << "Close device " << i; - cam_work_mat[i]->setStyleSheet(tr("background-color: rgb(255, 255, 0);")); - } - } - delete g_image_queue[i]; - delete g_result_queue[i]; - delete g_result_wait_queue[i]; - delete g_double_queue[i]; - delete g_shooted_queue[i]; - delete g_debug_queue[i]; - work_thread[i].stop(); - debug_thread[i].stop(); - } - - saveThread.stop(); -#ifdef __UDPSend - sThread.stop(); - rThread->stop(); - delete rThread; -#endif - - if(m_PLCDevice) { - m_PLCDevice->disconnect_plc(); - delete m_PLCDevice; - } - - this->close(); - qApp->quit(); + Exit(); QProcess::startDetached(qApp->applicationFilePath(), QStringList()); } // @@ -698,16 +873,41 @@ void Cigarette::enable_shift() ui.pushButton_clear->setEnabled(true); } -void Cigarette::OnRotateReleasedHub(int Num) +void Cigarette::sendLatestData() { + // UDPµ + int dataport = g_sys_conf.MonitorPort; + _UDPSendInfo UDPSendInfo; + + for (int i = 0; i < NumberOfSupportedCameras; i++) + { + UDPSendInfo.index = i; + UDPSendInfo.FrameID = ok_frame; + UDPSendInfo.ok[i] = ok[i]; +#ifdef __UDPSend + UDP_Info_queue->put(UDPSendInfo); +#endif + UDPSendInfo.FrameID = ng_frame; + UDPSendInfo.ng[i] = ng[i]; +#ifdef __UDPSend + UDP_Info_queue->put(UDPSendInfo); +#endif + UDPSendInfo.FrameID = total_frame; + UDPSendInfo.Total = production_number[i]; +#ifdef __UDPSend + UDP_Info_queue->put(UDPSendInfo); +#endif + } +} + +void Cigarette::OnRotateReleasedHub(int Num)//תť { QString str = "Start to rotate picture " + QString::number(90 * ((rotationAngle[Num] + 1) % 4)) + " degrees of camera " + QString::number(Num) + "."; emit sengMsgToClog(str); - if(isNeddRotate[Num] == true) + if(isNeedRotate[Num] == true) { rotationAngle[Num] = (rotationAngle[Num] + 1) % 4; save_rotate_message(); } - } ///ر @@ -722,8 +922,8 @@ void Cigarette::OnToolButtonCamReleasedHub(int Num) emit sengMsgToClog("Start open camera " + QString::number(Num) + "."); if(ControlCamOpenOrClose(Num,OPEN)) { - cam_work_mat[Num]->setStyleSheet(tr("background-color: rgb(0, 170, 0);")); - cam_status_mat[Num]->setStyleSheet(tr("background-color: rgb(0, 170, 0);")); + cam_work_mat[Num]->setStyleSheet(tr("background-color: rgb(0, 170, 0);"));//ʾ + cam_status_mat[Num]->setStyleSheet(tr("background-color: rgb(0,170,0);"));//ָʾ QString str = QString("border-image: url(:/Cigarette/Resources/cam%1_yes.png);").arg(Num+1); QByteArray ba = str.toLatin1(); cam_toolButton_mat[Num]->setStyleSheet(tr(ba.data())); @@ -748,12 +948,12 @@ void Cigarette::OnToolButtonCamReleasedHub(int Num) } } else { - emit sengMsgToClog("Close orReconnectCamHub open camera " + QString::number(Num) + " fail, because of authorization check fail."); + emit sengMsgToClog("Close or open camera " + QString::number(Num) + " fail, because of authorization check fail."); QMessageBox::information(NULL, QStringLiteral("Ȩ޼"), QStringLiteral("ȵťԱģʽ"), QMessageBox::Ok); } } -void Cigarette::ReconnectCamHub(int Num)// +void Cigarette::ReconnectCamHub(int Num) { //close if(SingleCamInfo[Num].Detect) @@ -776,92 +976,256 @@ void Cigarette::OpenCamTimeoutHub(int Num) // } } +void Cigarette::OnKey(QKeyEvent* event) +{ + int Num = CurOpLabel >> 4; + int Cnt = CurOpLabel & 0x0f; + + std::lock_guard locker(g_display_label_conf[Num].lock); + if (event->key() == Qt::Key_Escape && event->isAutoRepeat()==false) + { + if (g_display_label_conf[Num].RectVet[Cnt].size()) + { + g_display_label_conf[Num].RectVet[Cnt].pop_back(); + } + } + else if (event->key() == Qt::Key_Return && event->isAutoRepeat()==false) + { + std::fstream cfg_file; + char buf[256]; + memset(buf, 0, 256); + sprintf(buf, SELECT_RECTS_FILE, Num,Cnt); + QString rects_file = g_conf_path.config_path + "/" + buf; + cfg_file.open(rects_file.toLocal8Bit().constData(), ios::trunc | ofstream::out); + if (!cfg_file.is_open()) + { + std::cout << "Error: Open config file SelectRects.txt" << std::endl; + return; + } + for (int i = 0; i < g_display_label_conf[Num].RectVet[Cnt].size(); i++) + { + char buf[256]; + memset(buf, 0, 256); + sprintf(buf, + "%03f,%03f,%03f,%03f\n", + g_display_label_conf[Num].RectVet[Cnt][i].TL.x, + g_display_label_conf[Num].RectVet[Cnt][i].TL.y, + g_display_label_conf[Num].RectVet[Cnt][i].BR.x, + g_display_label_conf[Num].RectVet[Cnt][i].BR.y + ); + cfg_file.write(buf, strlen(buf)); + } + } +} +//ص +void Cigarette::OnMouse(QMouseEvent* event) +{ + int Num = CurOpLabel>>4; + int Cnt = CurOpLabel&0x0f; + + int CurWidgetWidth = display_lable_mat[Num][Cnt]->width(); + int CurWidgetHeight = display_lable_mat[Num][Cnt]->height(); + + std::lock_guard locker(g_display_label_conf[Num].lock); + if (event->type() == QEvent::MouseButtonPress) + { + g_display_label_conf[Num].leftButtonDownFlag = true; //־λ + g_display_label_conf[Num].originalPoint = cv::Point2f( + event->x() * 1.0 / CurWidgetWidth, + event->y() * 1.0 / CurWidgetHeight + ); //µľ + g_display_label_conf[Num].processPoint = g_display_label_conf[Num].originalPoint; + } + if (event->type() == QEvent::MouseMove && g_display_label_conf[Num].leftButtonDownFlag) + { + g_display_label_conf[Num].processPoint = cv::Point2f( + event->x() * 1.0 / CurWidgetWidth, + event->y() * 1.0 / CurWidgetHeight + ); + } + if (event->type() == QEvent::MouseButtonRelease) + { + g_display_label_conf[Num].leftButtonDownFlag = false; + RectRatio m_RectRatio = RectRatio( + cv::Point2f(g_display_label_conf[Num].originalPoint.x * 1.0, + g_display_label_conf[Num].originalPoint.y * 1.0 + ), + cv::Point2f(event->x() * 1.0 / CurWidgetWidth, + event->y() * 1.0 / CurWidgetHeight + ) + ); + float tempx = abs((m_RectRatio.TL - m_RectRatio.BR).x); + float tempy = abs((m_RectRatio.TL - m_RectRatio.BR).y); + if(tempx >0.05) + g_display_label_conf[Num].RectVet[Cnt].push_back(m_RectRatio); + } +} + //˫ͼ1 void Cigarette::OnDBClickHub(int Num_Cnt) { int Num = Num_Cnt>>4; int Cnt = Num_Cnt&0x0f; - if (g_max[Num][Cnt]) - { + CurOpLabel = Num_Cnt; + std::lock_guard locker(g_display_label_conf[Num].lock); + if (g_display_label_conf[Num].g_max[Cnt]) + { /// ȫ״̬ ˫ȡȫ emit sengMsgToClog("Cancel the picture of camera " + QString::number(Num) + " to full screen."); - g_max[Num][Cnt] = false; - for(int i=0;isetGeometry( + display_lable_info[Num][Cnt].x, + display_lable_info[Num][Cnt].y, + display_lable_info[Num][Cnt].width, + display_lable_info[Num][Cnt].height + ); + rotate_mat[Num]->setGeometry( + rotate_info[Num].x, + rotate_info[Num].y, + rotate_info[Num].width, + rotate_info[Num].height + ); + if(g_display_label_conf[Num].Flag[Cnt] & DisplayLabel_Type_Bit) + { + g_display_label_conf[Num].Flag[Cnt] &= ~DisplayLabel_Conf_Bit; + disconnect(display_lable_mat[Num][Cnt], SIGNAL(SignalmousePressEvent(QMouseEvent*)), this, SLOT(OnMouse(QMouseEvent*))); + disconnect(display_lable_mat[Num][Cnt], SIGNAL(SignalmouseMoveEvent(QMouseEvent*)), this, SLOT(OnMouse(QMouseEvent*))); + disconnect(display_lable_mat[Num][Cnt], SIGNAL(SignalmouseReleaseEvent(QMouseEvent*)), this, SLOT(OnMouse(QMouseEvent*))); + disconnect(display_lable_mat[Num][Cnt], SIGNAL(SignalkeyReleaseEvent(QKeyEvent*)), this, SLOT(OnKey(QKeyEvent*))); + } + } + else + { // ˫ȫ + emit sengMsgToClog("Set the picture of camera " + QString::number(Num) + " to full screen."); + g_display_label_conf[Num].g_max[Cnt] = true; + display_lable_mat[Num][Cnt]->setGeometry(0, 0, 1280, 800); + + //rotate_mat[Num]->setGeometry(1230, 10, 40, 40); + + if (g_debug_mode)//ǷΪģʽ + { + rotate_mat[Num]->setGeometry(1230, 10, 40, 40); + } + else + { + rotate_mat[Num]->setGeometry(1230, 10, 0, 0); + } + + display_lable_mat[Num][Cnt]->raise(); + rotate_mat[Num]->raise(); + + if(g_display_label_conf[Num].Flag[Cnt] & DisplayLabel_Type_Bit) + { + g_display_label_conf[Num].Flag[Cnt] |= DisplayLabel_Conf_Bit; + connect(display_lable_mat[Num][Cnt], SIGNAL(SignalmousePressEvent(QMouseEvent*)), this, SLOT(OnMouse(QMouseEvent*))); + connect(display_lable_mat[Num][Cnt], SIGNAL(SignalmouseMoveEvent(QMouseEvent*)), this, SLOT(OnMouse(QMouseEvent*))); + connect(display_lable_mat[Num][Cnt], SIGNAL(SignalmouseReleaseEvent(QMouseEvent*)), this, SLOT(OnMouse(QMouseEvent*))); + connect(display_lable_mat[Num][Cnt], SIGNAL(SignalkeyReleaseEvent(QKeyEvent*)), this, SLOT(OnKey(QKeyEvent*))); + } + } + OnNotifyHub(Num,Cnt,g_display_label_conf[Num].g_last_mat[Cnt]); +} + +void Cigarette::DrawRect_init(int Num_Cnt) { + //int Num = Num_Cnt >> 4; + //int Cnt = Num_Cnt & 0x0f; + + int Num = Num_Cnt & 0x0f; + int Cnt = Num_Cnt >> 4; + if (g_display_label_conf[Num].Flag[Cnt] & DisplayLabel_Type_Bit) + { + g_display_label_conf[Num].Flag[Cnt] &= ~DisplayLabel_Type_Bit; + g_display_label_conf[Num].Flag[Cnt] &= ~DisplayLabel_Conf_Bit; + } + else { + g_display_label_conf[Num].Flag[Cnt] |= DisplayLabel_Type_Bit; + std::fstream cfg_file; + char buf[256]; + memset(buf, 0, 256); + sprintf(buf, SELECT_RECTS_FILE, Num, Cnt); + QString rects_file = g_conf_path.config_path + "/" + buf; + cfg_file.open(rects_file.toLocal8Bit().constData()); + if (!cfg_file.is_open()) + { + std::cout << "Error: Open config file SelectRects"<setGeometry(190, 90, 691, 551); - else - display_lable_mat[i][Cnt]->setGeometry(360, 90, 161, 251); - rotate_mat[i]->setGeometry(690, 100, 0, 0); - } - else if(Num == 1) - { - if (!Cnt) - display_lable_mat[i][Cnt]->setGeometry(890, 90, 691, 551); - else - display_lable_mat[i][Cnt]->setGeometry(900, 90, 161, 251); - rotate_mat[i]->setGeometry(1230, 100, 0, 0); - } - else if (Num == 2) - { - if (!Cnt) - display_lable_mat[i][Cnt]->setGeometry(190, 420, 161, 251); - else - display_lable_mat[i][Cnt]->setGeometry(360, 420, 161, 251); - rotate_mat[i]->setGeometry(490, 430, 0, 0); - } - else if (Num == 3) - { - if (!Cnt) - display_lable_mat[i][Cnt]->setGeometry(732, 420, 161, 251); - else - display_lable_mat[i][Cnt]->setGeometry(900, 420, 161, 251); - rotate_mat[i]->setGeometry(1030, 430, 0, 0); - } + RectRatio m_RectRatio = RectRatio( + cv::Point2f(dataList[0].toFloat(), dataList[1].toFloat()), + cv::Point2f(dataList[2].toFloat(), dataList[3].toFloat()) + ); + g_display_label_conf[Num].RectVet[Cnt].push_back(m_RectRatio); } } - OnNotifyHub(Num,Cnt,g_last_mat[Num][Cnt]); + } +} + +void Cigarette::OnTPClickHub(int Num_Cnt) +{ + int Num = Num_Cnt >> 4; + int Cnt = Num_Cnt & 0x0f; + + std::lock_guard locker(g_display_label_conf[Num].lock); + if (g_display_label_conf[Num].Flag[Cnt] & DisplayLabel_Type_Bit) + { + g_display_label_conf[Num].Flag[Cnt] &= ~DisplayLabel_Type_Bit; + g_display_label_conf[Num].Flag[Cnt] &= ~DisplayLabel_Conf_Bit; + disconnect(display_lable_mat[Num][Cnt], SIGNAL(SignalmousePressEvent(QMouseEvent*)), this, SLOT(OnMouse(QMouseEvent*))); + disconnect(display_lable_mat[Num][Cnt], SIGNAL(SignalmouseMoveEvent(QMouseEvent*)), this, SLOT(OnMouse(QMouseEvent*))); + disconnect(display_lable_mat[Num][Cnt], SIGNAL(SignalmouseReleaseEvent(QMouseEvent*)), this, SLOT(OnMouse(QMouseEvent*))); + disconnect(display_lable_mat[Num][Cnt], SIGNAL(SignalkeyReleaseEvent(QKeyEvent*)), this, SLOT(OnKey(QKeyEvent*))); } else { - emit sengMsgToClog("Set the picture of camera " + QString::number(Num) + " to full screen."); - g_max[Num][Cnt] = true; - for(int i=0;isetGeometry(0, 0, 1600, 900); - - if (g_debug_mode) - { - rotate_mat[i]->setGeometry(1540, 10, 40, 40); - } - else - { - rotate_mat[i]->setGeometry(1240, 10, 0, 0); - } - - + RectRatio m_RectRatio = RectRatio( + cv::Point2f(dataList[0].toFloat(),dataList[1].toFloat()), + cv::Point2f(dataList[2].toFloat(),dataList[3].toFloat()) + ); + g_display_label_conf[Num].RectVet[Cnt].push_back(m_RectRatio); } } - display_lable_mat[Num][Cnt]->raise(); - rotate_mat[Num]->raise(); - OnNotifyHub(Num,Cnt,g_last_mat[Num][Cnt]); } } - //˫NG void Cigarette::OnDBClickNGHub(int Num) { emit sengMsgToClog("Double click NG."); QDateTime now_ts = QDateTime::currentDateTime(); std::ostringstream ostr; - ostr << "explorer D:\\image\\" << (now_ts.toString("yyyy-MM-dd")).toStdString()<< "\\" << Num+1 << "\\ng_result"; + QString file_path = g_conf_path.save_pics_path; + + std::replace(file_path.begin(), file_path.end(), '/', '\\'); + ostr << "explorer "<< file_path.toLocal8Bit().constData() << "\\ng\\" << (now_ts.toString("yyyy-MM-dd")).toStdString()<< "\\" << Num+1; std::string str = ostr.str(); + //std::cout << "===>" << str << std::endl; system(str.c_str()); } @@ -873,7 +1237,7 @@ void Cigarette::OnNotifyHub(int Num, int Cnt,cv::Mat m) QImage tempImage = Cigarette::cvMatToQImage(m); display_lable_mat[Num][Cnt]->setPixmap(QPixmap::fromImage(tempImage)); - g_last_mat[Num][Cnt] = m; + g_display_label_conf[Num].g_last_mat[Cnt] = m; _UDPSendInfo UDPSendInfo; UDPSendInfo.FrameID = image_frame; @@ -888,6 +1252,9 @@ void Cigarette::OnNotifyHub(int Num, int Cnt,cv::Mat m) void Cigarette::OnDisplayTimeCostHub(int Num, int ms) { label_timecost_mat[Num]->setText(QString::number(ms) + "ms"); +#ifdef __ExportData + exportData[Num].detectTime = QString::number(ms) + "ms"; +#endif } void Cigarette::OnDisplayCheckNumberHub(int Num, long no) @@ -901,11 +1268,18 @@ void Cigarette::OnDisplayCheckNumberHub(int Num, long no) #ifdef __UDPSend UDP_Info_queue->put(UDPSendInfo); #endif +#ifdef __ExportData + exportData[Num].checkNum = production_number[Num]; +#endif } void Cigarette::OnDisplayJdNoHub(int Num, QString jd_no) { label_jd_no_mat[Num]->setText(jd_no); +#ifdef __ExportData + exportData[Num].cameraId = Num; + exportData[Num].jdNum = jd_no; +#endif } void Cigarette::OnOKHub(int Num) @@ -914,13 +1288,16 @@ void Cigarette::OnOKHub(int Num) _UDPSendInfo UDPSendInfo; UDPSendInfo.FrameID = ok_frame; UDPSendInfo.index = Num; - UDPSendInfo.ok = ok[Num]; + UDPSendInfo.ok[Num] = ok[Num]; #ifdef __UDPSend UDP_Info_queue->put(UDPSendInfo); #endif lcdNumber_ok_mat[Num]->display(ok[Num]); label_reslut_mat[Num]->setText("OK"); label_reslut_mat[Num]->setStyleSheet(tr("background-color: rgb(0, 255, 0);")); +#ifdef __ExportData + exportData[Num].okNum = ok[Num]; +#endif } void Cigarette::OnNGHub(int Num) @@ -929,19 +1306,20 @@ void Cigarette::OnNGHub(int Num) _UDPSendInfo UDPSendInfo; UDPSendInfo.FrameID = ng_frame; UDPSendInfo.index = Num; - UDPSendInfo.ng = ng[Num]; + UDPSendInfo.ng[Num] = ng[Num]; #ifdef __UDPSend UDP_Info_queue->put(UDPSendInfo); #endif lcdNumber_ng_mat[Num]->display(ng[Num]); label_reslut_mat[Num]->setText("NG"); label_reslut_mat[Num]->setStyleSheet(tr("background-color: rgb(255, 0, 0);")); +#ifdef __ExportData + exportData[Num].ngNum = ng[Num]; +#endif } -void Cigarette::updateStatisticsHub(const QString& statisticalData, int Num) -{ +void Cigarette::updateStatisticsHub(const QString& statisticalData, int Num) { label_cap_speed_mat[Num]->setText(statisticalData + QStringLiteral("/")); - _UDPSendInfo UDPSendInfo; UDPSendInfo.FrameID = speed_frame; UDPSendInfo.index = Num; @@ -949,6 +1327,9 @@ void Cigarette::updateStatisticsHub(const QString& statisticalData, int Num) #ifdef __UDPSend UDP_Info_queue->put(UDPSendInfo); #endif +#ifdef __ExportData + exportData[Num].acquisitionTime = statisticalData + QStringLiteral("/"); +#endif } //޳ģʽ @@ -1013,8 +1394,9 @@ void Cigarette::on_checkBox_debug_clicked(bool checked) { if (g_working) { - QMessageBox::information(NULL, QStringLiteral("˳ "), QStringLiteral("ȵͣťܽģʽ"), QMessageBox::Ok); + QMessageBox::information(NULL, QStringLiteral("˳ "), QStringLiteral("ȵֹͣťܽģʽ"), QMessageBox::Ok); ui.checkBox_debug->setChecked(false); + //return; } else { @@ -1030,12 +1412,40 @@ void Cigarette::on_checkBox_debug_clicked(bool checked) { emit sengMsgToClog("Exit debug mode."); DisableDebugMode(); + //on_pushButton_clear_released(); // ui.checkBox_debug->setChecked(false); + //ui.checkBox_debug->setEnabled(true); #ifdef __UDPSend sThread.sendData("DebugDis", g_sys_conf.FeedbackPort); #endif } } +//ͼť +//void Cigarette::on_pushButton_wintab_clicked(bool checked) { +// INPUT inputs[4] = {}; +// ZeroMemory(inputs, sizeof(inputs)); +// +// inputs[0].type = INPUT_KEYBOARD; +// inputs[0].ki.wVk = VK_LWIN; +// +// inputs[1].type = INPUT_KEYBOARD; +// inputs[1].ki.wVk = VK_TAB; +// +// inputs[2].type = INPUT_KEYBOARD; +// inputs[2].ki.wVk = VK_TAB; +// inputs[2].ki.dwFlags = KEYEVENTF_KEYUP; +// +// inputs[3].type = INPUT_KEYBOARD; +// inputs[3].ki.wVk = VK_LWIN; +// inputs[3].ki.dwFlags = KEYEVENTF_KEYUP; +// +// UINT uSent = SendInput(ARRAYSIZE(inputs), inputs, sizeof(INPUT)); +// if (uSent != ARRAYSIZE(inputs)) +// { +// qDebug() << "SendInput failed" << HRESULT_FROM_WIN32(GetLastError()); +// } +//} + //PLCöԻ void Cigarette::on_toolButton_plc_released() { @@ -1101,28 +1511,72 @@ void Cigarette::handleTimeout() QString run_stat = QString(QStringLiteral("%1%2ʱ%3%4")) .arg(days).arg(hours).arg(minutes).arg(second); ui.label_run_stat->setText(run_stat); + int Kick[NumberOfSupportedCameras] = { 0 }; - //õPLCַжȡ if (m_PLCDevice->g_plc_ok) { if (!g_plc_dialog_open) //PLCöԻûд { + //õPLCַжȡ if (g_modbus_conf.quantity > 0) { + // ȡ޳ֵ + for (int i = 0; i < NumberOfSupportedCameras; i++) { +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras > i) + if (g_modbus_conf.kick[i] > 0) { + uint16_t dest16[2]; + int ret = m_PLCDevice->read_short_from_plc(g_modbus_conf.kick[i], 2, dest16); + if (ret == 2) { + Kick[i] = dest16[0] + (dest16[1] << 16); + lcdNumber_kick_mat[i]->display(dest16[0] + (dest16[1] << 16)); +#ifdef __UDPSend + _UDPSendInfo UDPSendInfo; + UDPSendInfo.FrameID = kick_frame; + UDPSendInfo.index = i; + UDPSendInfo.Kick[UDPSendInfo.index] = dest16[0] + (dest16[1] << 16); + UDP_Info_queue->put(UDPSendInfo); +#endif +#ifdef __ExportData + exportData[i].kick = dest16[0] + (dest16[1] << 16); +#endif + } + } +#endif + } + + // ȡֵ uint16_t dest16[2]; - int ret = m_PLCDevice->read_short_from_plc( g_modbus_conf.quantity, 2, dest16); + int ret = m_PLCDevice->read_short_from_plc(g_modbus_conf.quantity, 2, dest16); if (ret == 2) { int cur_quantity = dest16[0] + (dest16[1] << 16); ui.lcdNumber_total_no->display(cur_quantity); #ifdef __UDPSend sThread.sendData("total_" + QString::number(cur_quantity), g_sys_conf.FeedbackPort); - sThread.sendData("totallast_" + QString::number(ui.lcdNumber_total_no_last->intValue()), g_sys_conf.FeedbackPort);//ϰ + sThread.sendData("totallast_" + QString::number(ui.lcdNumber_total_no_last->intValue()), g_sys_conf.FeedbackPort); #endif ui.label_plc->setText(QStringLiteral("PLC")); ui.label_plc->setStyleSheet(tr("background-color: rgb(0, 170, 0);")); + if (!(m_PLCDevice->g_plc_status & 0x01)) + { + init_plc_value(); + if (g_working) + { + if (g_debug_mode) + { + QMessageBox::information(NULL, QStringLiteral("˳"), QStringLiteral("ȵģʽѡȡģʽſԿʼ"), QMessageBox::Ok); + return; + } + start_work(); + } + else if (!g_working) + { + pause_work(); + } + m_PLCDevice->g_plc_status |= (0x01); + } //Զ - if (g_sys_conf.auto_shift&&g_working) + if (g_sys_conf.auto_shift && g_working) { g_seconds++; if (g_seconds % 10 == 0) @@ -1137,7 +1591,7 @@ void Cigarette::handleTimeout() if (quantity_stop_count == STOP_SECONDS) //һλ { g_op_mode = true; //Աģʽ - on_btn_pause_released(); //ͣ + on_btn_pause_released(); //ֹͣ on_pushButton_clear_released(); // on_btn_start_released(); //ʼ g_op_mode = false; //˳Աģʽ @@ -1153,8 +1607,8 @@ void Cigarette::handleTimeout() if (secA == 0) { g_op_mode = true; //Աģʽ - on_btn_pause_released(); //ͣ - record_output_statistic(cur_quantity, 0); + on_btn_pause_released(); //ֹͣ + record_output_statistic(cur_quantity, Kick, 0); on_pushButton_clear_released(); // on_btn_start_released(); //ʼ g_op_mode = false; //˳Աģʽ @@ -1162,8 +1616,8 @@ void Cigarette::handleTimeout() else if (secB == 0) { g_op_mode = true; //Աģʽ - on_btn_pause_released(); //ͣ - record_output_statistic(cur_quantity, 1); + on_btn_pause_released(); //ֹͣ + record_output_statistic(cur_quantity, Kick, 1); on_pushButton_clear_released(); // on_btn_start_released(); //ʼ g_op_mode = false; //˳Աģʽ @@ -1171,8 +1625,8 @@ void Cigarette::handleTimeout() else if (secC == 0) { g_op_mode = true; //Աģʽ - on_btn_pause_released(); //ͣ - record_output_statistic(cur_quantity, 2); + on_btn_pause_released(); //ֹͣ + record_output_statistic(cur_quantity, Kick, 2); on_pushButton_clear_released(); // on_btn_start_released(); //ʼ g_op_mode = false; //˳Աģʽ @@ -1183,119 +1637,141 @@ void Cigarette::handleTimeout() { ui.label_plc->setText(QStringLiteral("PLCϿ")); ui.label_plc->setStyleSheet(tr("background-color: rgb(255, 255, 0);")); - //m_PLCDevice->g_plc_ok = false; + m_PLCDevice->g_plc_status &= ~(0x01); } } } } - //޳ - if (m_PLCDevice->g_plc_ok) + //߼ +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>0) + if (SingleCamInfo[0].OffLine) //1# { - if (!g_plc_dialog_open) //PLCöԻûд + //SingleCamInfo[0] = false; + ui.cam_status_1->setStyleSheet(tr("background-color: rgb(255, 255, 0);")); + ui.cam_work_1->setStyleSheet(tr("background-color: rgb(255, 255, 0);")); + ui.toolButton_cam_1->setStyleSheet(tr("border-image: url(:/Cigarette/Resources/cam1_no.png);")); + ui.label_reslut_1->setVisible(true); + if (g_modbus_conf.alarm > 0) { -#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>0) - if (g_modbus_conf.kick1 > 0) - { - uint16_t dest16[2]; - int ret = m_PLCDevice->read_short_from_plc( g_modbus_conf.kick1, 2, dest16); - if (ret == 2) - { - ui.lcdNumber_kick_1->display(dest16[0] + (dest16[1] << 16)); -#ifdef __UDPSend - _UDPSendInfo UDPSendInfo; - UDPSendInfo.FrameID = kick_frame; - UDPSendInfo.index = 0; - UDPSendInfo.Kick[UDPSendInfo.index] = dest16[0] + (dest16[1] << 16); - UDP_Info_queue->put(UDPSendInfo); -#endif - } - } + uint16_t dest16[2] = {5,0}; + int ret = m_PLCDevice->write_short_2_plc(g_modbus_conf.alarm, 2, dest16); + if (ret > 0) SingleCamInfo[0].OffLine = false; + } + } #endif #if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>1) - if (g_modbus_conf.kick2 > 0) - { - uint16_t dest16[2]; - int ret = m_PLCDevice->read_short_from_plc( g_modbus_conf.kick2, 2, dest16); - if (ret == 2) - { - ui.lcdNumber_kick_2->display(dest16[0] + (dest16[1] << 16)); -#ifdef __UDPSend - _UDPSendInfo UDPSendInfo; - UDPSendInfo.FrameID = kick_frame; - UDPSendInfo.index = 1; - UDPSendInfo.Kick[UDPSendInfo.index] = dest16[0] + (dest16[1] << 16); - UDP_Info_queue->put(UDPSendInfo); -#endif - } - } + if (SingleCamInfo[1].OffLine) //2# + { + //SingleCamInfo[1] = false; + ui.cam_status_2->setStyleSheet(tr("background-color: rgb(255, 255, 0);")); + ui.cam_work_2->setStyleSheet(tr("background-color: rgb(255, 255, 0);")); + ui.toolButton_cam_2->setStyleSheet(tr("border-image: url(:/Cigarette/Resources/cam2_no.png);")); + ui.label_reslut_2->setVisible(true); + if (g_modbus_conf.alarm > 0) + { + uint16_t dest16[2] = {6,0}; + int ret = m_PLCDevice->write_short_2_plc(g_modbus_conf.alarm, 2, dest16); + if(ret > 0) SingleCamInfo[1].OffLine = false; + } + } #endif #if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>2) - if (g_modbus_conf.kick3 > 0) - { - uint16_t dest16[2]; - int ret = m_PLCDevice->read_short_from_plc(g_modbus_conf.kick3, 2, dest16); - if (ret == 2) - { - ui.lcdNumber_kick_3->display(dest16[0] + (dest16[1] << 16)); -#ifdef __UDPSend - _UDPSendInfo UDPSendInfo; - UDPSendInfo.FrameID = kick_frame; - UDPSendInfo.index = 2; - UDPSendInfo.Kick[UDPSendInfo.index] = dest16[0] + (dest16[1] << 16); - UDP_Info_queue->put(UDPSendInfo); -#endif - } - } + if (SingleCamInfo[2].OffLine) //3# + { + //SingleCamInfo[2] = false; + ui.cam_status_3->setStyleSheet(tr("background-color: rgb(255, 255, 0);")); + ui.cam_work_3->setStyleSheet(tr("background-color: rgb(255, 255, 0);")); + ui.toolButton_cam_3->setStyleSheet(tr("border-image: url(:/Cigarette/Resources/cam3_no.png);")); + ui.label_reslut_3->setVisible(true); + if (g_modbus_conf.alarm > 0) + { + uint16_t dest16[2] = { 7,0 }; + int ret = m_PLCDevice->write_short_2_plc(g_modbus_conf.alarm, 2, dest16); + if (ret > 0) SingleCamInfo[2].OffLine = false; + } + } #endif #if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>3) - if (g_modbus_conf.kick4 > 0) - { - uint16_t dest16[2]; - int ret = m_PLCDevice->read_short_from_plc(g_modbus_conf.kick4, 2, dest16); - if (ret == 2) - { - ui.lcdNumber_kick_4->display(dest16[0] + (dest16[1] << 16)); -#ifdef __UDPSend - _UDPSendInfo UDPSendInfo; - UDPSendInfo.FrameID = kick_frame; - UDPSendInfo.index = 3; - UDPSendInfo.Kick[UDPSendInfo.index] = dest16[0] + (dest16[1] << 16); - UDP_Info_queue->put(UDPSendInfo); + if (SingleCamInfo[3].OffLine) //4# + { + //SingleCamInfo[3] = false; + ui.cam_status_4->setStyleSheet(tr("background-color: rgb(255, 255, 0);")); + ui.cam_work_4->setStyleSheet(tr("background-color: rgb(255, 255, 0);")); + ui.toolButton_cam_4->setStyleSheet(tr("border-image: url(:/Cigarette/Resources/cam4_no.png);")); + ui.label_reslut_4->setVisible(true); + if (g_modbus_conf.alarm > 0) + { + uint16_t dest16[2] = { 8,0 }; + int ret = m_PLCDevice->write_short_2_plc(g_modbus_conf.alarm, 2, dest16); + if (ret > 0) SingleCamInfo[3].OffLine = false; + } + } #endif - } - } +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>4) + if (SingleCamInfo[4].OffLine) //5# + { + //SingleCamInfo[4] = false; + ui.cam_status_5->setStyleSheet(tr("background-color: rgb(255, 255, 0);")); + ui.cam_work_5->setStyleSheet(tr("background-color: rgb(255, 255, 0);")); + ui.toolButton_cam_5->setStyleSheet(tr("border-image: url(:/Cigarette/Resources/cam5_no.png);")); + ui.label_reslut_5->setVisible(true); + if (g_modbus_conf.alarm > 0) + { + uint16_t dest16[2] = { 9,0 }; + int ret = m_PLCDevice->write_short_2_plc(g_modbus_conf.alarm, 2, dest16); + if (ret > 0) SingleCamInfo[4].OffLine = false; + } + } #endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>5) + if (SingleCamInfo[5].OffLine) //6# + { + //SingleCamInfo[5] = false; + ui.cam_status_6->setStyleSheet(tr("background-color: rgb(255, 255, 0);")); + ui.cam_work_6->setStyleSheet(tr("background-color: rgb(255, 255, 0);")); + ui.toolButton_cam_6->setStyleSheet(tr("border-image: url(:/Cigarette/Resources/cam6_no.png);")); + ui.label_reslut_6->setVisible(true); + if (g_modbus_conf.alarm > 0) + { + uint16_t dest16[2] = { 10,0 }; + int ret = m_PLCDevice->write_short_2_plc(g_modbus_conf.alarm, 2, dest16); + if (ret > 0) SingleCamInfo[5].OffLine = false; } } - //߼ - //if (SingleCamInfo[0].OffLine) //1# - //{ - // //SingleCamInfo[0] = false; - // ui.cam_status_1->setStyleSheet(tr("background-color: rgb(255, 255, 0);")); - // ui.cam_work_1->setStyleSheet(tr("background-color: rgb(255, 255, 0);")); - // ui.toolButton_cam_1->setStyleSheet(tr("border-image: url(:/Cigarette/Resources/cam1_no.png);")); - // ui.label_reslut_1->setVisible(true); - // if (g_modbus_conf.alarm > 0) - // { - // uint16_t dest16[2] = {5,0}; - // int ret = m_PLCDevice->write_short_2_plc(g_modbus_conf.alarm, 2, dest16); - // if (ret > 0) SingleCamInfo[0].OffLine = false; - // } - //} - //if (SingleCamInfo[1].OffLine) //2# - //{ - // //SingleCamInfo[1] = false; - // ui.cam_status_2->setStyleSheet(tr("background-color: rgb(255, 255, 0);")); - // ui.cam_work_2->setStyleSheet(tr("background-color: rgb(255, 255, 0);")); - // ui.toolButton_cam_2->setStyleSheet(tr("border-image: url(:/Cigarette/Resources/cam2_no.png);")); - // ui.label_reslut_2->setVisible(true); - // if (g_modbus_conf.alarm > 0) - // { - // uint16_t dest16[2] = {6,0}; - // int ret = m_PLCDevice->write_short_2_plc(g_modbus_conf.alarm, 2, dest16); - // if(ret > 0) SingleCamInfo[1].OffLine = false; - // } - //} +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>6) + if (SingleCamInfo[6].OffLine) //7# + { + //SingleCamInfo[6] = false; + ui.cam_status_7->setStyleSheet(tr("background-color: rgb(255, 255, 0);")); + ui.cam_work_7->setStyleSheet(tr("background-color: rgb(255, 255, 0);")); + ui.toolButton_cam_7->setStyleSheet(tr("border-image: url(:/Cigarette/Resources/cam7_no.png);")); + ui.label_reslut_7->setVisible(true); + if (g_modbus_conf.alarm > 0) + { + uint16_t dest16[2] = { 11,0 }; + int ret = m_PLCDevice->write_short_2_plc(g_modbus_conf.alarm, 2, dest16); + if (ret > 0) SingleCamInfo[6].OffLine = false; + } + } +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>7) + if (SingleCamInfo[7].OffLine) //8# + { + //SingleCamInfo[7] = false; + ui.cam_status_8->setStyleSheet(tr("background-color: rgb(255, 255, 0);")); + ui.cam_work_8->setStyleSheet(tr("background-color: rgb(255, 255, 0);")); + ui.toolButton_cam_8->setStyleSheet(tr("border-image: url(:/Cigarette/Resources/cam8_no.png);")); + ui.label_reslut_8->setVisible(true); + if (g_modbus_conf.alarm > 0) + { + uint16_t dest16[2] = { 12,0 }; + int ret = m_PLCDevice->write_short_2_plc(g_modbus_conf.alarm, 2, dest16); + if (ret > 0) SingleCamInfo[7].OffLine = false; + } + } +#endif + //ȡϢ if (m_PLCDevice->g_plc_ok) { @@ -1309,7 +1785,7 @@ void Cigarette::handleTimeout() { AlarmInfo alarm_info; alarm_info.alarm_code = dest16[0]; - if ((alarm_info.alarm_code > 0) && (alarm_info.alarm_code <= 6)) + if ((alarm_info.alarm_code > 0) && (alarm_info.alarm_code <= 12)) { alarm_info.alarm_msg = (g_alarm_msg[alarm_info.alarm_code]).toStdString(); alarm_info.alarm_start = localTime.toStdString(); @@ -1320,35 +1796,18 @@ void Cigarette::handleTimeout() g_vec_alarm.push_back(alarm_info); g_last_alarm_code = alarm_info.alarm_code; } + else { + if (g_vec_alarm.empty()) { + g_vec_alarm.push_back(alarm_info); + g_last_alarm_code = alarm_info.alarm_code; + } + } } else if (alarm_info.alarm_code == 0) { ui.label_alarm->setStyleSheet(tr("background-color: rgb(0, 170, 0);")); ui.label_alarm->setText(QStringLiteral("ޱ")); } - if (alarm_info.alarm_code == 7) { - ui.label_alarm->setStyleSheet(tr("background-color: rgb(0, 170, 0);")); - ui.label_alarm->setText(QStringLiteral("1#")); - //1# - ReconnectCamHub(0); - //־ - if (g_modbus_conf.alarm > 0) - { - uint16_t dest16[2] = {0,0}; - int ret = m_PLCDevice->write_short_2_plc(g_modbus_conf.alarm, 2, dest16); - } - } - if (alarm_info.alarm_code == 8) { - ui.label_alarm->setStyleSheet(tr("background-color: rgb(0, 170, 0);")); - ui.label_alarm->setText(QStringLiteral("2#")); - //2# - ReconnectCamHub(1); - //־ - if (g_modbus_conf.alarm > 0) - { - uint16_t dest16[2] = {0,0}; - int ret = m_PLCDevice->write_short_2_plc(g_modbus_conf.alarm, 2, dest16); - } - } + #ifdef __UDPSend QString str; str = QString("alarm") + '_' + QString::number(alarm_info.alarm_code); @@ -1362,9 +1821,9 @@ void Cigarette::handleTimeout() void Cigarette::on_pushButton_reset_released()///λť { int ret = m_PLCDevice->write_bit_2_plc(g_modbus_conf.reset, 1); - Sleep(1000); - if(g_modbus_conf.reset>0) - int ret = m_PLCDevice->write_bit_2_plc(g_modbus_conf.reset, 0); + //Sleep(1000); + if (g_modbus_conf.reset > 0) + int ret = m_PLCDevice->write_bit_2_plc(g_modbus_conf.reset, 0); } void Cigarette::OnCancelAlarm() //˫ { @@ -1431,6 +1890,8 @@ void Cigarette::on_toolButton_alarm_released() void Cigarette::on_pushButton_clear_released()// { emit sengMsgToClog("Change shift."); + emit sendMsgToExportData(); + if (!g_admin_mode) { if (!g_op_mode) @@ -1445,51 +1906,10 @@ void Cigarette::on_pushButton_clear_released()// } if(g_working) { - QMessageBox::information(NULL, QStringLiteral("״̬"), QStringLiteral("ȵͣťͣģʽſԽл"), QMessageBox::Ok); + QMessageBox::information(NULL, QStringLiteral("״̬"), QStringLiteral("ȵֹͣťſԽл "), QMessageBox::Ok); return; } - ui.pushButton_clear->setEnabled(false); - m_delay->setSingleShot(true); - m_delay->start(5000); - Sleep(500); - for(int i=0;idisplay(production_number[i]); - ok[i] = 0; - lcdNumber_ok_mat[i]->display(ok[i]); - ng[i] = 0; - lcdNumber_ng_mat[i]->display(ng[i]); - - _UDPSendInfo UDPSendInfo; - UDPSendInfo.index = i; - - UDPSendInfo.FrameID = ok_frame; - UDPSendInfo.ok = ok[i]; -#ifdef __UDPSend - UDP_Info_queue->put(UDPSendInfo); -#endif - UDPSendInfo.FrameID = ng_frame; - UDPSendInfo.ok = ng[i]; -#ifdef __UDPSend - UDP_Info_queue->put(UDPSendInfo); -#endif - UDPSendInfo.FrameID = info_frame; - UDPSendInfo.timecost = QString::number(0); - UDPSendInfo.JD = QString("0,0,0"); -#ifdef __UDPSend - UDP_Info_queue->put(UDPSendInfo); -#endif - UDPSendInfo.FrameID = total_frame; - UDPSendInfo.Total = 0; -#ifdef __UDPSend - UDP_Info_queue->put(UDPSendInfo); -#endif - } - ui.lcdNumber_total_no->display(0); -#ifdef __UDPSend - sThread.sendData("total_" + QString::number(0), g_sys_conf.FeedbackPort); -#endif + //ͨPLCȡʾϰ if (m_PLCDevice->g_plc_ok) { @@ -1499,16 +1919,66 @@ void Cigarette::on_pushButton_clear_released()// { uint16_t dest16[2]; int ret = m_PLCDevice->read_short_from_plc( g_modbus_conf.quantity, 2, dest16); - std::cout << ret << std::endl; + //std::cout << ret << std::endl; if (ret > 0) { int cur_quantity = dest16[0] + (dest16[1] << 16); ui.lcdNumber_total_no_last->display(cur_quantity); +#ifdef __ExportData + exportData->totalCheckNum = cur_quantity; +#endif #ifdef __UDPSend sThread.sendData("totallast_" + QString::number(cur_quantity), g_sys_conf.FeedbackPort); #endif } } + +#ifdef __ExportData + for (int i = 0; i < NumberOfSupportedCameras; i++) { + _XMLExportDataInfo exportXMLDataInfo; + exportXMLDataInfo.cameraTotal = NumberOfSupportedCameras; + exportXMLDataInfo.cameraId = exportData[i].cameraId; + exportXMLDataInfo.TotalCheckNum = exportData->totalCheckNum; + exportXMLDataInfo.shotCounts = g_sys_conf.shoot[i]; + exportXMLDataInfo.DetectSpeed = exportData[i].detectTime; + exportXMLDataInfo.AcquisitionSpeed = exportData[i].acquisitionTime; + exportXMLDataInfo.checkNum = exportData[i].checkNum; + exportXMLDataInfo.jdNum = exportData[i].jdNum; + exportXMLDataInfo.okNum = exportData[i].okNum; + exportXMLDataInfo.ngNum = exportData[i].ngNum; + exportXMLDataInfo.kickNum = exportData[i].kick; + if (exportXMLDataInfo.kickNum == 0) + exportXMLDataInfo.KickRate = 0; + else + exportXMLDataInfo.KickRate = (double)exportXMLDataInfo.kickNum / exportXMLDataInfo.checkNum; + double ng_rate; + if (exportData[i].ngNum > 0) + ng_rate = double(exportData[i].ngNum) / exportData[i].checkNum; + else + ng_rate = 0; + exportXMLDataInfo.PassRate = 1.0 - ng_rate; + + int flag = 0; + for (int i = 1; i < NumberOfSupportedCameras; i++) { + if (exportData[i].kick != exportData[0].kick) { + flag = 1; + break; + } + } + if (flag == 1) { + // Kickֵһ + for (int i = 0; i < NumberOfSupportedCameras; i++) { + exportXMLDataInfo.TotalKickNum += exportData[i].kick; + } + } + else + exportXMLDataInfo.TotalKickNum = exportData[0].kick; + + export_XMLData_Info_queue->put(exportXMLDataInfo); + } + flag = false; +#endif + //ͻϢPLC if (g_modbus_conf.shift > 0) { @@ -1516,138 +1986,62 @@ void Cigarette::on_pushButton_clear_released()// if (g_modbus_conf.alarm >0)///ַalarmӦPLCַ { uint16_t dest16[2] = { 0,0 }; - int ret = m_PLCDevice->write_short_2_plc(g_modbus_conf.alarm, 2, dest16); - } - } - } - } - g_op_time = OP_TIME; -} -void Cigarette::on_pushButton_Clear_Pic_released() -{ - emit sengMsgToClog("Clean images."); - CleanThreadStart(); -} -void Cigarette::FindFileForDelete(const QString& path) -{ - QDir dir(path); - QFileInfoList list; - QFileInfo curFile; - if (!dir.exists()) { return; }//ļ棬򷵻false - dir.setFilter(QDir::Dirs | QDir::Files); - list = dir.entryInfoList(QDir::Dirs | QDir::Files - | QDir::Readable | QDir::Writable - | QDir::Hidden | QDir::NoDotAndDotDot - , QDir::Time); - if (list.isEmpty()) { return; }//ļΪգ򷵻false - int i = list.size() - 1; - QDateTime delDateTime; - QDate delDate; - do { - QFileInfo fileInfo = list.at(i); - while (fileInfo.fileName() == "." || fileInfo.fileName() == ".." && i >= 0) - { - i--; - } - if (i < 0) { - break; - } - bool bisDir = fileInfo.isDir(); - if (bisDir) - { - QRegExp rx("\\d{4}-\\d{2}-\\d{2}"); - QRegExpValidator v(rx, 0); - int pos = 0; - int match; - match = v.validate(fileInfo.fileName(), pos); - if (match == 2) - { - QString qstrSubFilePath = fileInfo.absoluteFilePath(); - QDir qdrSubPath(qstrSubFilePath); - qdrSubPath.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot | QDir::Hidden); - QFileInfoList qlstFileInfo = qdrSubPath.entryInfoList(); - if (qlstFileInfo.count() <= 0) - { - qdrSubPath.rmdir(qstrSubFilePath); - i--; - list = dir.entryInfoList(QDir::Dirs | QDir::Files - | QDir::Readable | QDir::Writable - | QDir::Hidden | QDir::NoDotAndDotDot - , QDir::Time); - if (list.isEmpty()) { return; }//ļΪգ򷵻false - int i = list.size() - 1; - continue; - } - if (i == (list.size() - 1)) { - delDate = QDate::currentDate().addDays(-60); - } - - // QDate delDate = QDate::currentDate().addDays(-60); - QDate dirDate; - dirDate = QDate::fromString(fileInfo.fileName(), "yyyy-MM-dd"); - qint64 nDays = delDate.daysTo(dirDate); - if (nDays <= 0) - { - qdrSubPath.removeRecursively(); - i--; - list = dir.entryInfoList(QDir::Dirs | QDir::Files - | QDir::Readable | QDir::Writable - | QDir::Hidden | QDir::NoDotAndDotDot - , QDir::Time); - if (list.isEmpty()) { return; }//ļΪգ򷵻false - int i = list.size() - 1; - continue; - } - i--; - continue; - } - FindFileForDelete(fileInfo.filePath()); - i--; - } - else { - if (2) //g_sys_conf.save == - { - // ļжļ ĿǰĬ60졣 - if (i == (list.size() - 1)) { - delDateTime = fileInfo.birthTime().addDays(60); - } - qint64 nDays = delDateTime.daysTo(fileInfo.birthTime()); - nDays = fileInfo.birthTime().daysTo(delDateTime); - if (nDays <= 0) - { - // ɾ60ļ - fileInfo.dir().remove(fileInfo.fileName()); + int ret = m_PLCDevice->write_short_2_plc(g_modbus_conf.alarm, 2, dest16); } } - i--; } - } while (i >= 0); -} - -void Cigarette::autoCleanImage() -{ - int64 size; - QString iDriver = "D:/"; - LPCWSTR strDriver = (LPCWSTR)iDriver.utf16(); - ULARGE_INTEGER freeDiskSpaceAvailable, totalDiskSpace, totalFreeDiskSpace; - int64 gb = (1024 * 1024 * 1024); + } + g_op_time = OP_TIME; + + ui.pushButton_clear->setEnabled(false); + m_delay->setSingleShot(true); + m_delay->start(5000); + Sleep(500); + for (int i = 0; i < NumberOfSupportedCameras; i++) + { + production_number[i] = 0; + lcdNumber_total_mat[i]->display(production_number[i]); + ok[i] = 0; + lcdNumber_ok_mat[i]->display(ok[i]); + ng[i] = 0; + lcdNumber_ng_mat[i]->display(ng[i]); - //úȡ̲(λΪֽByte),תΪGBҪ(1024*1024*1024) - GetDiskFreeSpaceEx(strDriver, &freeDiskSpaceAvailable, &totalDiskSpace, &totalFreeDiskSpace); - size = (quint64)totalFreeDiskSpace.QuadPart / gb; + _UDPSendInfo UDPSendInfo; + UDPSendInfo.index = i; - if (size < 10) { //ʣռС10g - QString dir("D:/image/"); - FindFileForDelete(dir); + UDPSendInfo.FrameID = ok_frame; + UDPSendInfo.ok[i] = ok[i]; +#ifdef __UDPSend + UDP_Info_queue->put(UDPSendInfo); +#endif + UDPSendInfo.FrameID = ng_frame; + UDPSendInfo.ng[i] = ng[i]; +#ifdef __UDPSend + UDP_Info_queue->put(UDPSendInfo); +#endif + UDPSendInfo.FrameID = info_frame; + UDPSendInfo.timecost = QString::number(0); + UDPSendInfo.JD = QString("0,0,0"); +#ifdef __UDPSend + UDP_Info_queue->put(UDPSendInfo); +#endif + UDPSendInfo.FrameID = total_frame; + UDPSendInfo.Total = 0; +#ifdef __UDPSend + UDP_Info_queue->put(UDPSendInfo); +#endif } - + ui.lcdNumber_total_no->display(0); +#ifdef __UDPSend + sThread.sendData("total_" + QString::number(0), g_sys_conf.FeedbackPort); +#endif } //ȡϵͳԱ QString Cigarette::read_pswd() { std::fstream cfg_file; - cfg_file.open("pswd.txt"); + cfg_file.open("D:/Release/pswd.txt"); if (!cfg_file.is_open()) { std::cout << "Error: Open config file pswd.txt"<< std::endl; @@ -1679,7 +2073,7 @@ QString Cigarette::read_pswd() QString Cigarette::read_op_pswd() { std::fstream cfg_file; - cfg_file.open("pswd_op.txt"); + cfg_file.open("D:/Release/pswd_op.txt"); if (!cfg_file.is_open()) { std::cout << "Error: Open config file pswd_op.txt" << std::endl; @@ -1707,13 +2101,46 @@ QString Cigarette::read_op_pswd() cfg_file.close(); } -bool Cigarette::read_sys_config(SysConf &conf) +bool Cigarette::read_conf(ConfPath &conf_path) { + std::fstream conf_file; + conf_file.open(CONFPATH); + if (!conf_file.is_open()) { + std::cout << "Error: Open conf path file " << CONFPATH << std::endl; + return false; + } + while (!conf_file.eof()) { + char tmp[256] = ""; + conf_file.getline(tmp, 256); + std::string line(tmp); + if (line.length() > 0) { + size_t pos = line.find('='); + std::string tmp_key = line.substr(0, pos); + if (tmp_key == "CONF_PATH") { + std::string str = line.substr(pos + 1).c_str(); + std::wstring w_str = String2WString(str); + conf_path.config_path = QString::fromStdWString(w_str); + } + //else if (tmp_key == "CONF_NAME") { + // conf_path.config_name = line.substr(pos + 1).c_str(); + //} + else if (tmp_key == "SAVE_PICS_PATH") { + std::string str = line.substr(pos + 1).c_str(); + std::wstring w_str = String2WString(str); + conf_path.save_pics_path = QString::fromStdWString(w_str); + } + } + } + conf_file.close(); + return true; +} + +bool Cigarette::read_sys_config(SysConf &conf, QString conf_path) { std::fstream cfg_file; - cfg_file.open(CONFIGURE_FILE); + cfg_file.open(conf_path.toLocal8Bit().constData()); if (!cfg_file.is_open()) { - std::cout << "Error: Open config file " << CONFIGURE_FILE << std::endl; + std::cout << "Error: Open config file " << conf_path.toStdString() << std::endl; return false; } while (!cfg_file.eof()) @@ -1723,34 +2150,49 @@ bool Cigarette::read_sys_config(SysConf &conf) std::string line(tmp); if (line.length() > 0) { + /// atoiֵsubstrӴc_str()ַָ׵ַ size_t pos = line.find('='); std::string tmp_key = line.substr(0, pos); - if (tmp_key == "SAVE") - { - conf.save = atoi(line.substr(pos + 1).c_str()); + + if (tmp_key == "SAVE") + { /// ͼã0棻1NG2ȫ + conf.save = atoi(line.substr(pos + 1).c_str()); } else if (tmp_key == "MISMATCHACT") - { + { /// λΪ1NG0OK conf.MisMatchAct = atoi(line.substr(pos + 1).c_str()); } - else if (tmp_key == "SAVE_DAYS")/// - { + else if (tmp_key == "SAVE_DAYS") + { /// Ƭ conf.save_days = atoi(line.substr(pos + 1).c_str()); } - else if (tmp_key == "AUTO_OPEN") + else if (tmp_key == "FREESIZE") { + /// ͼƬ趨Сռֵ + conf.freesize = atoi(line.substr(pos + 1).c_str()); + } + else if (tmp_key == "ComPort") + { /// COM + conf.ComPort = line.substr(pos + 1); + } + else if (tmp_key == "CONFTHRESHOLD") + { ///ƶ + conf.ConfThreshold = atoi(line.substr(pos + 1).c_str()); + } + else if (tmp_key == "AUTO_OPEN") + { /// ǷԶ01 conf.auto_open = atoi(line.substr(pos + 1).c_str()); } else if (tmp_key == "AUTO_WORK") - { + { /// ǷԶʼ01 conf.auto_work = atoi(line.substr(pos + 1).c_str()); } else if (tmp_key == "AUTO_SHIFT") - { + { /// ǷԶࣺ01 conf.auto_shift = atoi(line.substr(pos + 1).c_str()); } else if (tmp_key == "TIMING_SHIFT") - { + { /// Ƿʱࣺ01 conf.timing_shift = atoi(line.substr(pos + 1).c_str()); } else if (tmp_key == "SHIFT_A") @@ -1780,6 +2222,22 @@ bool Cigarette::read_sys_config(SysConf &conf) conf.shiftC.setHMS(atoi(vec_info[0].c_str())%24, atoi(vec_info[1].c_str()), 0);/// } } + else if (tmp_key == "LOCATION") + { + conf.location = line.substr(pos + 1).c_str(); + } + else if (tmp_key == "MODELPATH") + { + conf.model_path = line.substr(pos + 1).c_str(); + } + else if (tmp_key == "MODELNAME") + { + conf.model_name = line.substr(pos + 1).c_str(); + } + else if (tmp_key == "JPGPATH") + { + conf.model_jpg_path = line.substr(pos + 1).c_str(); + } #if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>0) else if (tmp_key == "EXPO1") { @@ -1801,11 +2259,13 @@ bool Cigarette::read_sys_config(SysConf &conf) { std::vector vec_info; string_split(line.substr(pos + 1), "|",vec_info); - if (vec_info.size() == 3) + if (vec_info.size() == 5) { conf.no[0][0] = atoi(vec_info[0].c_str()); conf.no[0][1] = atoi(vec_info[1].c_str()); conf.no[0][2] = atoi(vec_info[2].c_str()); + conf.no[0][3] = atoi(vec_info[3].c_str()); + conf.no[0][4] = atoi(vec_info[4].c_str()); } } else if (tmp_key == "SHOOT1") @@ -1911,6 +2371,138 @@ bool Cigarette::read_sys_config(SysConf &conf) { conf.shoot[3] = atoi(line.substr(pos + 1).c_str()); } +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>4) + else if (tmp_key == "EXPO5") + { + conf.expo[4] = atoi(line.substr(pos + 1).c_str()); + } + else if (tmp_key == "GAIN5") + { + conf.gain[4] = atoi(line.substr(pos + 1).c_str()); + } + else if (tmp_key == "FILTER5") + { + conf.filter[4] = atoi(line.substr(pos + 1).c_str()); + } + else if (tmp_key == "USERID5") + { + conf.UserID[4] = atoi(line.substr(pos + 1).c_str()); + } + else if (tmp_key == "NO5") + { + std::vector vec_info; + string_split(line.substr(pos + 1), "|", vec_info); + if (vec_info.size() == 3) + { + conf.no[4][0] = atoi(vec_info[0].c_str()); + conf.no[4][1] = atoi(vec_info[1].c_str()); + conf.no[4][2] = atoi(vec_info[2].c_str()); + } + } + else if (tmp_key == "SHOOT5") + { + conf.shoot[4] = atoi(line.substr(pos + 1).c_str()); + } +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>5) + else if (tmp_key == "EXPO6") + { + conf.expo[5] = atoi(line.substr(pos + 1).c_str()); + } + else if (tmp_key == "GAIN6") + { + conf.gain[5] = atoi(line.substr(pos + 1).c_str()); + } + else if (tmp_key == "FILTER6") + { + conf.filter[5] = atoi(line.substr(pos + 1).c_str()); + } + else if (tmp_key == "USERID6") + { + conf.UserID[5] = atoi(line.substr(pos + 1).c_str()); + } + else if (tmp_key == "NO6") + { + std::vector vec_info; + string_split(line.substr(pos + 1), "|", vec_info); + if (vec_info.size() == 3) + { + conf.no[5][0] = atoi(vec_info[0].c_str()); + conf.no[5][1] = atoi(vec_info[1].c_str()); + conf.no[5][2] = atoi(vec_info[2].c_str()); + } + } + else if (tmp_key == "SHOOT6") + { + conf.shoot[5] = atoi(line.substr(pos + 1).c_str()); + } +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>6) + else if (tmp_key == "EXPO7") + { + conf.expo[6] = atoi(line.substr(pos + 1).c_str()); + } + else if (tmp_key == "GAIN7") + { + conf.gain[6] = atoi(line.substr(pos + 1).c_str()); + } + else if (tmp_key == "FILTER7") + { + conf.filter[6] = atoi(line.substr(pos + 1).c_str()); + } + else if (tmp_key == "USERID7") + { + conf.UserID[6] = atoi(line.substr(pos + 1).c_str()); + } + else if (tmp_key == "NO7") + { + std::vector vec_info; + string_split(line.substr(pos + 1), "|", vec_info); + if (vec_info.size() == 3) + { + conf.no[6][0] = atoi(vec_info[0].c_str()); + conf.no[6][1] = atoi(vec_info[1].c_str()); + conf.no[6][2] = atoi(vec_info[2].c_str()); + } + } + else if (tmp_key == "SHOOT7") + { + conf.shoot[6] = atoi(line.substr(pos + 1).c_str()); + } +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>7) + else if (tmp_key == "EXPO8") + { + conf.expo[7] = atoi(line.substr(pos + 1).c_str()); + } + else if (tmp_key == "GAIN8") + { + conf.gain[7] = atoi(line.substr(pos + 1).c_str()); + } + else if (tmp_key == "FILTER8") + { + conf.filter[7] = atoi(line.substr(pos + 1).c_str()); + } + else if (tmp_key == "USERID8") + { + conf.UserID[7] = atoi(line.substr(pos + 1).c_str()); + } + else if (tmp_key == "NO8") + { + std::vector vec_info; + string_split(line.substr(pos + 1), "|", vec_info); + if (vec_info.size() == 3) + { + conf.no[7][0] = atoi(vec_info[0].c_str()); + conf.no[7][1] = atoi(vec_info[1].c_str()); + conf.no[7][2] = atoi(vec_info[2].c_str()); + } + } + else if (tmp_key == "SHOOT8") + { + conf.shoot[7] = atoi(line.substr(pos + 1).c_str()); + } #endif else if (tmp_key == "MonitorIP") { @@ -1924,14 +2516,18 @@ bool Cigarette::read_sys_config(SysConf &conf) } } } + cfg_file.close(); + ui.location->setText(g_sys_conf.location); return true; } bool Cigarette::read_modbus_config(ModbusConf &conf) { + QString str_kick; std::fstream cfg_file; - cfg_file.open(MODBUS_CONFIGURE_FILE); + QString modbus_file = g_conf_path.config_path + "/" + MODBUS_CONFIGURE_FILE; + cfg_file.open(modbus_file.toLocal8Bit().constData()); if (!cfg_file.is_open()) { std::cout << "Error: Open config file " << MODBUS_CONFIGURE_FILE << std::endl; @@ -1946,23 +2542,12 @@ bool Cigarette::read_modbus_config(ModbusConf &conf) { size_t pos = line.find('='); std::string tmp_key = line.substr(0, pos); - if (tmp_key == "KICK1") - { - conf.kick1 = atoi(line.substr(pos + 1).c_str()); - } - else if (tmp_key == "KICK2") - { - conf.kick2 = atoi(line.substr(pos + 1).c_str()); - } - else if (tmp_key == "KICK3") - { - conf.kick3 = atoi(line.substr(pos + 1).c_str()); - } - else if (tmp_key == "KICK4") - { - conf.kick4 = atoi(line.substr(pos + 1).c_str()); + for (int i = 0; i < NumberOfSupportedCameras; i++) { + str_kick = QString("KICK%1").arg(i+1); + if (tmp_key == str_kick.toStdString()) + conf.kick[i] = atoi(line.substr(pos + 1).c_str()); } - else if (tmp_key == "QUANTITY") + if (tmp_key == "QUANTITY") { conf.quantity = atoi(line.substr(pos + 1).c_str()); } @@ -2000,7 +2585,8 @@ bool Cigarette::read_modbus_config(ModbusConf &conf) bool Cigarette::read_rotate_message() { std::fstream cfg_file; - cfg_file.open(ROTATE_FILE); + QString rotate_file = g_conf_path.config_path + "/" + ROTATE_FILE; + cfg_file.open(rotate_file.toLocal8Bit().constData()); if (!cfg_file.is_open()) { std::cout << "Error: Open config file rotate.txt" << std::endl; @@ -2015,7 +2601,7 @@ bool Cigarette::read_rotate_message() if (rotate_message.length() > NumberOfSupportedCameras*2) { for (int i = 0; i < NumberOfSupportedCameras; i++) { - isNeddRotate[i] = rotate_message[i * 2].toInt(); + isNeedRotate[i] = rotate_message[i * 2].toInt(); rotationAngle[i] = rotate_message[i * 2 + 1].toInt(); } } @@ -2036,7 +2622,8 @@ bool Cigarette::read_rotate_message() bool Cigarette::save_rotate_message() { std::fstream cfg_file; - cfg_file.open(ROTATE_FILE, ios::trunc | ofstream::out); + QString rotate_file = g_conf_path.config_path + "/" + ROTATE_FILE; + cfg_file.open(rotate_file.toLocal8Bit().constData(), ios::trunc | ofstream::out); if (!cfg_file.is_open()) { std::cout << "Error: Open config file rotate.txt" << std::endl; @@ -2045,7 +2632,7 @@ bool Cigarette::save_rotate_message() for (int i = 0; i < NumberOfSupportedCameras; i++) { char tmp[8]; memset(tmp, 0, 8); - itoa(isNeddRotate[i], tmp, 10); + itoa(isNeedRotate[i], tmp, 10); cfg_file.write(tmp, 1); cfg_file.write(",", 1); memset(tmp, 0, 8); @@ -2118,12 +2705,15 @@ QImage Cigarette::cvMatToQImage(const cv::Mat& mat) void Cigarette::read_plc_items() { std::fstream cfg_file; - cfg_file.open(PLC_CONFIG_FILE); + QString plc_file = g_conf_path.config_path + "/" + PLC_CONFIG_FILE; + cfg_file.open(plc_file.toLocal8Bit().constData()); + if (!cfg_file.is_open()) { std::cout << "Error: Open production file " << PLC_CONFIG_FILE << std::endl; return; } + while (!cfg_file.eof()) { char tmp[1024] = ""; @@ -2191,72 +2781,63 @@ void Cigarette::CreatWorkThread(int classid,int Num,Cigarette* classptr) debug_thread[Num].start_work(); } +#define InitPtrMat_init(a,b)\ +cam_status_mat[a]=ui.cam_status_##b;\ +cam_work_mat[a]=ui.cam_work_##b;\ +cam_toolButton_mat[a]=ui.toolButton_cam_##b;\ +label_cap_speed_mat[a]=ui.label_cap_speed_##b;\ +display_lable_mat[a][0]=ui.image_label_##b##1;\ +display_lable_mat[a][1]=ui.image_label_##b##2;\ +label_timecost_mat[a]=ui.label_timecost_##b;\ +lcdNumber_total_mat[a]=ui.lcdNumber_total_##b;\ +label_jd_no_mat[a]=ui.label_jd_no_##b;\ +lcdNumber_ok_mat[a]=ui.lcdNumber_ok_##b;\ +lcdNumber_ng_mat[a]=ui.lcdNumber_ng_##b;\ +lcdNumber_kick_mat[a]=ui.lcdNumber_kick_##b;\ +label_reslut_mat[a]=ui.label_reslut_##b;\ +rotate_mat[a]=ui.rotate_##b;\ +label_ng_mat[a]=ui.label_ng_##b; void Cigarette::InitPtrMat() { #if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>0) - cam_status_mat[0]=ui.cam_status_1; - cam_work_mat[0]=ui.cam_work_1; - cam_toolButton_mat[0]=ui.toolButton_cam_1; - label_cap_speed_mat[0]=ui.label_cap_speed_1; - display_lable_mat[0][0]=ui.image_label_11; - display_lable_mat[0][1]=ui.image_label_12; - label_timecost_mat[0]=ui.label_timecost_1; - lcdNumber_total_mat[0]=ui.lcdNumber_total_1; - label_jd_no_mat[0]=ui.label_jd_no_1; - lcdNumber_ok_mat[0]=ui.lcdNumber_ok_1; - lcdNumber_ng_mat[0]=ui.lcdNumber_ng_1; - label_reslut_mat[0]=ui.label_reslut_1; - rotate_mat[0]=ui.rotate_1; - label_ng_mat[0]=ui.label_ng_1; + InitPtrMat_init(0,1) #endif #if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>1) - cam_status_mat[1]=ui.cam_status_2; - cam_work_mat[1]=ui.cam_work_2; - cam_toolButton_mat[1]=ui.toolButton_cam_2; - label_cap_speed_mat[1]=ui.label_cap_speed_2; - display_lable_mat[1][0]=ui.image_label_21; - display_lable_mat[1][1]=ui.image_label_22; - label_timecost_mat[1]=ui.label_timecost_2; - lcdNumber_total_mat[1]=ui.lcdNumber_total_2;//lcdNumber_total_mat[1]=ui.lcdNumber_total_2; - label_jd_no_mat[1]=ui.label_jd_no_2; - lcdNumber_ok_mat[1]=ui.lcdNumber_ok_2; - lcdNumber_ng_mat[1]=ui.lcdNumber_ng_2; - label_reslut_mat[1]=ui.label_reslut_2; - rotate_mat[1]=ui.rotate_2; - label_ng_mat[1]=ui.label_ng_2; + InitPtrMat_init(1,2) #endif #if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>2) - cam_status_mat[2]=ui.cam_status_3; - cam_work_mat[2]=ui.cam_work_3; - cam_toolButton_mat[2]=ui.toolButton_cam_3; - label_cap_speed_mat[2]=ui.label_cap_speed_3; - display_lable_mat[2][0]=ui.image_label_31; - display_lable_mat[2][1]=ui.image_label_32; - label_timecost_mat[2]=ui.label_timecost_3; - lcdNumber_total_mat[2]=ui.lcdNumber_total_3; - label_jd_no_mat[2]=ui.label_jd_no_3; - lcdNumber_ok_mat[2]=ui.lcdNumber_ok_3; - lcdNumber_ng_mat[2]=ui.lcdNumber_ng_3; - label_reslut_mat[2]=ui.label_reslut_3; - rotate_mat[2]=ui.rotate_3; - label_ng_mat[2]=ui.label_ng_3; + InitPtrMat_init(2,3) #endif #if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>3) - cam_status_mat[3]=ui.cam_status_4; - cam_work_mat[3]=ui.cam_work_4; - cam_toolButton_mat[3]=ui.toolButton_cam_4; - label_cap_speed_mat[3]=ui.label_cap_speed_4; - display_lable_mat[3][0]=ui.image_label_41; - display_lable_mat[3][1]=ui.image_label_42; - label_timecost_mat[3]=ui.label_timecost_4; - lcdNumber_total_mat[3]=ui.lcdNumber_total_4; - label_jd_no_mat[3]=ui.label_jd_no_4; - lcdNumber_ok_mat[3]=ui.lcdNumber_ok_4; - lcdNumber_ng_mat[3]=ui.lcdNumber_ng_4; - label_reslut_mat[3]=ui.label_reslut_4; - rotate_mat[3]=ui.rotate_4; - label_ng_mat[3]=ui.label_ng_4; + InitPtrMat_init(3,4) +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>4) + InitPtrMat_init(4,5) +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>5) + InitPtrMat_init(5,6) #endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>6) + InitPtrMat_init(6,7) +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>7) + InitPtrMat_init(7,8) +#endif + for(int i=0;igeometry().x(); + display_lable_info[i][j].y = display_lable_mat[i][j]->geometry().y(); + display_lable_info[i][j].width = display_lable_mat[i][j]->geometry().width(); + display_lable_info[i][j].height = display_lable_mat[i][j]->geometry().height(); + } + rotate_info[i].x = rotate_mat[i]->geometry().x(); + rotate_info[i].y = rotate_mat[i]->geometry().y(); + rotate_info[i].width = rotate_mat[i]->geometry().width(); + rotate_info[i].height = rotate_mat[i]->geometry().height(); + } + } bool Cigarette::ControlCamOpenOrClose(int Num,bool OpenOrClose) @@ -2325,7 +2906,6 @@ bool Cigarette::ControlCamOpenOrClose(int Num,bool OpenOrClose) pCaptureThread[Num]->p_result_wait_queue = g_result_wait_queue[Num]; pCaptureThread[Num]->p_double_queue = g_double_queue[Num]; pCaptureThread[Num]->p_shooted_queue = g_shooted_queue[Num]; - pCaptureThread[Num]->p_debug_queue = g_debug_queue[Num]; pThread[Num] = new QThread; @@ -2336,7 +2916,8 @@ bool Cigarette::ControlCamOpenOrClose(int Num,bool OpenOrClose) //connect(pCaptureThread[Num], SIGNAL(error(QString)), this, SLOT(errorString(QString))); connect(pCaptureThread[Num], SIGNAL(finished()), pThread[Num], SLOT(quit())); connect(pCaptureThread[Num], SIGNAL(finished()), pCaptureThread[Num], SLOT(deleteLater())); - connect(pCaptureThread[Num], SIGNAL(updateStatistics(const QString&,int)), this, SLOT(updateStatisticsHub(const QString&,int))); + if(!g_debug_mode) + connect(pCaptureThread[Num], SIGNAL(updateStatistics(const QString&,int)), this, SLOT(updateStatisticsHub(const QString&,int))); pThread[Num]->start(); if (pThread[Num]->isRunning()) @@ -2452,7 +3033,8 @@ bool Cigarette::ControlCamOpenOrClose(int Num,bool OpenOrClose) //connect(pBaslerCaptureThread[Num], SIGNAL(error(QString)), this, SLOT(errorString(QString))); connect(pBaslerCaptureThread[Num], SIGNAL(finished()), pThread[Num], SLOT(quit())); connect(pBaslerCaptureThread[Num], SIGNAL(finished()), pBaslerCaptureThread[Num], SLOT(deleteLater())); - connect(pBaslerCaptureThread[Num], SIGNAL(updateStatistics(const QString&, int)), this, SLOT(updateStatisticsHub(const QString&, int))); + if(!g_debug_mode) + connect(pBaslerCaptureThread[Num], SIGNAL(updateStatistics(const QString&, int)), this, SLOT(updateStatisticsHub(const QString&, int))); pThread[Num]->start(); if (pThread[Num]->isRunning()) @@ -2575,7 +3157,8 @@ bool Cigarette::ControlCamOpenOrClose(int Num,bool OpenOrClose) //connect(pHIKCaptureThread[Num], SIGNAL(error(QString)), this, SLOT(errorString(QString))); connect(pHIKCaptureThread[Num], SIGNAL(finished()), pThread[Num], SLOT(quit())); connect(pHIKCaptureThread[Num], SIGNAL(finished()), pHIKCaptureThread[Num], SLOT(deleteLater())); - connect(pHIKCaptureThread[Num], SIGNAL(updateStatistics(const QString&,int)), this, SLOT(updateStatisticsHub(const QString&,int))); + if (!g_debug_mode) + connect(pHIKCaptureThread[Num], SIGNAL(updateStatistics(const QString&,int)), this, SLOT(updateStatisticsHub(const QString&,int))); pThread[Num]->start(); if (pThread[Num]->isRunning()) { @@ -2635,11 +3218,11 @@ bool Cigarette::ControlCamOpenOrClose(int Num,bool OpenOrClose) } } Pylon::CBaslerUniversalInstantCamera* baslerCamera = BaslerCamHandle[Num]; - if(baslerCamera && baslerCamera->IsOpen()) + /*if(baslerCamera && baslerCamera->IsOpen()) { baslerCamera->Close(); baslerCamera->GrabCameraEvents = false; - } + }*/ DeleteElement(pBaslerCaptureThread[Num]); DeleteElement(pThread[Num]); SingleCamInfo[Num].IsOpen = false; @@ -2687,7 +3270,8 @@ void Cigarette::EnumerateCameras(SingleCamInfoStruct *TempSingleCamInfoStruct,bo filtered = BaslerCamera::Enumerate(); Pylon::CInstantCameraArray cameras(filtered); Pylon::CTlFactory& tlFactory = Pylon::CTlFactory::GetInstance(); - for (int i = 0; i < min(filtered, NumberOfSupportedCameras); i++) + + for (int i = 0; i < min(filtered, NumberOfidentifyCameras); i++) { SingleCamInfoStruct CamInfo; //cameras[i].Attach(tlFactory.CreateDevice(BaslerCamera::devices[i])); @@ -2703,7 +3287,6 @@ void Cigarette::EnumerateCameras(SingleCamInfoStruct *TempSingleCamInfoStruct,bo baslerCamera->Close(); delete baslerCamera; if(showinfo)std::cout << "Basler user ID = " << UserID << std::endl; - CamInfo.UserID = atoi(UserID.c_str()); CamInfo.CamClass = BaslerClassID; CamInfo.filtered_num = i; @@ -2719,7 +3302,7 @@ void Cigarette::EnumerateCameras(SingleCamInfoStruct *TempSingleCamInfoStruct,bo int hik_cnt = 0; int unfiltered = 0; unfiltered = HIKCamera::Enumerate(); - for (int i = 0; i < min(unfiltered, NumberOfSupportedCameras); i++) + for (int i = 0; i < min(unfiltered, NumberOfidentifyCameras); i++) { MV_CC_DEVICE_INFO* pDeviceInfo = HIKCamera::stDeviceList.pDeviceInfo[i]; std::string manufacture; @@ -2741,18 +3324,34 @@ void Cigarette::EnumerateCameras(SingleCamInfoStruct *TempSingleCamInfoStruct,bo continue; } - if(showinfo)std::cout << "Camera:" << i << ",vendor = " << manufacture << std::endl; + if (manufacture == "U3V" || manufacture == "Hikrobot") + { + if (showinfo)std::cout << "Camera:" << i << ",vendor = " << manufacture << std::endl; + } transform(manufacture.begin(), manufacture.end(), manufacture.begin(), ::toupper); SingleCamInfoStruct CamInfo; if ((!manufacture.compare(0, 3, "HIK")) || (!manufacture.compare(0, 3, "U3V"))) { void* camhandle; MVCC_STRINGVALUE UserID; + MVCC_STRINGVALUE YSXID; + MVCC_STRINGVALUE YSXID2; + string id; MV_CC_CreateHandle(&camhandle, HIKCamera::stDeviceList.pDeviceInfo[i]); if (!MV_CC_OpenDevice(camhandle)) { MV_CC_GetDeviceUserID(camhandle, &UserID); - if(showinfo)std::cout << "Hikrobot user ID = " << UserID.chCurValue << std::endl; + MV_CC_GetStringValue(camhandle, "DeviceYSXID", &YSXID); + if(showinfo)std::cout << "Hik user ID = " << UserID.chCurValue << std::endl; + id = YSXID.chCurValue; +#ifdef identify_Hik_YSXID + if (id!="YSX9256") + { + QMessageBox::information(NULL, QStringLiteral("ϵͳԼʧ"), QStringLiteral("ƥʧܣͺ"), QMessageBox::Ok); + exit(-1); + } + YSXID = YSXID2;// +#endif MV_CC_CloseDevice(camhandle); } MV_CC_DestroyHandle(camhandle); @@ -2769,27 +3368,30 @@ void Cigarette::EnumerateCameras(SingleCamInfoStruct *TempSingleCamInfoStruct,bo int balluff_cnt = 0; unfiltered = BalluffCamera::Enumerate(); - for (int i = 0; i < min(unfiltered, NumberOfSupportedCameras); i++) + for (int i = 0; i < min(unfiltered, NumberOfidentifyCameras); i++) { Device* pDev = BalluffCamera::devMgr[i]; - std::string manufacture = pDev->manufacturer.read(); - if(showinfo)std::cout << "Camera:" << i << ",vendor = " << manufacture << std::endl; - transform(manufacture.begin(), manufacture.end(), manufacture.begin(), ::toupper); - SingleCamInfoStruct CamInfo; - if (!manufacture.compare(0, 7, "BALLUFF")) - { - mvIMPACT::acquire::GenICam::DeviceControl dc(pDev); - std::string UserID = dc.deviceUserID.read(); - pDev->close(); - if(showinfo)std::cout << "Balluff user ID = " << UserID << std::endl; - CamInfo.UserID = atoi(UserID.c_str()); - CamInfo.CamClass = BalluffClassID; - CamInfo.unfiltered_num = i; - CamInfo.Detect = false; - CamInfo.IsOpen = false; - CamInfo.OffLine = false; - TempSingleCamInfo.push_back(CamInfo); - balluff_cnt++; + if (!pDev->isInUse()) + { + std::string manufacture = pDev->manufacturer.read(); + if (showinfo)std::cout << "Camera:" << i << ",vendor = " << manufacture << std::endl; + transform(manufacture.begin(), manufacture.end(), manufacture.begin(), ::toupper); + SingleCamInfoStruct CamInfo; + if ((!manufacture.compare(0, 7, "BALLUFF")) || (!manufacture.compare(0, 13, "MATRIX VISION"))) + { + mvIMPACT::acquire::GenICam::DeviceControl dc(pDev); + std::string UserID = dc.deviceUserID.read(); + pDev->close(); + if (showinfo)std::cout << "Balluff user ID = " << UserID << std::endl; + CamInfo.UserID = atoi(UserID.c_str()); + CamInfo.CamClass = BalluffClassID; + CamInfo.unfiltered_num = i; + CamInfo.Detect = false; + CamInfo.IsOpen = false; + CamInfo.OffLine = false; + TempSingleCamInfo.push_back(CamInfo); + balluff_cnt++; + } } } @@ -2801,7 +3403,7 @@ void Cigarette::EnumerateCameras(SingleCamInfoStruct *TempSingleCamInfoStruct,bo } //userid򿪵߼----start - for (int i = 0; i < NumberOfSupportedCameras; i++) + for (int i = 0; i < NumberOfidentifyCameras; i++) { for (int j = 0; j < TempSingleCamInfo.size(); j++) { @@ -2839,36 +3441,36 @@ void Cigarette::EnableDebugMode() else if(SingleCamInfo[i].CamClass == HIKClassID) { int nRet = MV_OK; - MV_CC_SetFrameRate(HIKCamHandle[i], 10.0); nRet = MV_CC_SetBoolValue(HIKCamHandle[i], "AcquisitionFrameRateEnable",true); - if (nRet) { std::cout << "can not set AcquisitionFrameRateEnable" << std::endl;} + if (nRet) { std::cout << "can not set Hik's AcquisitionFrameRateEnable" << std::endl;} nRet = MV_CC_SetEnumValue(HIKCamHandle[i], "TriggerMode", MV_TRIGGER_MODE_OFF); - if (nRet) { std::cout << "can not set TriggerMode" << std::endl;} + if (nRet) { std::cout << "can not set Hik's TriggerMode" << std::endl;} } else if(SingleCamInfo[i].CamClass == BaslerClassID) { bool nRet = false; + nRet = BaslerCamHandle[i]->AcquisitionFrameRate.TrySetValue(10); + if (!nRet) { std::cout << "can not set Basler's AcquisitionFrameRate" << std::endl; } + nRet = BaslerCamHandle[i]->AcquisitionFrameRateEnable.TrySetValue(true); + if (!nRet) { std::cout << "can not set Basler's AcquisitionFrameRateEnable" << std::endl; } + nRet = BaslerCamHandle[i]->TriggerSelector.TrySetValue(Basler_UniversalCameraParams::TriggerSelector_FrameStart); + if (!nRet) { std::cout << "can not set Basler's TriggerSelector_FrameStart" << std::endl; } + nRet = BaslerCamHandle[i]->TriggerMode.TrySetValue(Basler_UniversalCameraParams::TriggerMode_Off); + if (!nRet) { std::cout << "can not set Basler's TriggerMode_Off" << std::endl; } #ifndef USB_BASLER_NEW_FW - BaslerCamHandle[i]->TriggerSelector.SetValue(Basler_UniversalCameraParams::TriggerSelector_FrameBurstStart); - if (!nRet) { std::cout << "can not set TriggerSelector_FrameBurstStart" << std::endl;} - BaslerCamHandle[i]->TriggerMode.SetValue(Basler_UniversalCameraParams::TriggerMode_Off); - if (!nRet) { std::cout << "can not set TriggerMode_Off" << std::endl;} + nRet = BaslerCamHandle[i]->TriggerSelector.TrySetValue(Basler_UniversalCameraParams::TriggerSelector_FrameBurstStart); + if (!nRet) { std::cout << "can not set Basler's TriggerSelector_FrameBurstStart" << std::endl;} + nRet = BaslerCamHandle[i]->TriggerMode.TrySetValue(Basler_UniversalCameraParams::TriggerMode_Off); + if (!nRet) { std::cout << "can not set Basler's TriggerMode_Off" << std::endl;} #endif - BaslerCamHandle[i]->TriggerSelector.SetValue(Basler_UniversalCameraParams::TriggerSelector_FrameStart); - if (!nRet) { std::cout << "can not set TriggerSelector_FrameStart" << std::endl;} - BaslerCamHandle[i]->TriggerMode.SetValue(Basler_UniversalCameraParams::TriggerMode_Off); - if (!nRet) { std::cout << "can not set TriggerMode_Off" << std::endl;} - BaslerCamHandle[i]->AcquisitionFrameRateEnable.SetValue(true); - if (!nRet) { std::cout << "can not set AcquisitionFrameRateEnable" << std::endl;} - BaslerCamHandle[i]->AcquisitionFrameRate.SetValue(10); - if (!nRet) { std::cout << "can not set AcquisitionFrameRate" << std::endl;} } } } g_debug_mode = true; } + void Cigarette::DisableDebugMode() { for(int i=0;iTriggerSelector.TrySetValue(Basler_UniversalCameraParams::TriggerSelector_FrameBurstStart); - if (!nRet) { std::cout << "can not set TriggerSelector_FrameBurstStart" << std::endl;} + if (!nRet) { std::cout << "can not set Basler's TriggerSelector_FrameBurstStart" << std::endl;} nRet = BaslerCamHandle[i]->TriggerMode.TrySetValue(Basler_UniversalCameraParams::TriggerMode_On); + if (!nRet) { std::cout << "can not set Basler's TriggerMode_On" << std::endl; } #endif - if (!nRet) { std::cout << "can not set TriggerMode_On" << std::endl;} nRet = BaslerCamHandle[i]->TriggerSelector.TrySetValue(Basler_UniversalCameraParams::TriggerSelector_FrameStart); - if (!nRet) { std::cout << "can not set TriggerSelector_FrameStart" << std::endl;} + if (!nRet) { std::cout << "can not set Basler's TriggerSelector_FrameStart" << std::endl;} nRet = BaslerCamHandle[i]->TriggerMode.TrySetValue(Basler_UniversalCameraParams::TriggerMode_On); - if (!nRet) { std::cout << "can not set TriggerMode_On" << std::endl;} + if (!nRet) { std::cout << "can not set Basler's TriggerMode_On" << std::endl;} nRet = BaslerCamHandle[i]->AcquisitionFrameRateEnable.TrySetValue(false); - if (!nRet) { std::cout << "can not set AcquisitionFrameRateEnable" << std::endl;} + if (!nRet) { std::cout << "can not set Basler's AcquisitionFrameRateEnable" << std::endl;} } } } @@ -2950,67 +3552,20 @@ void Cigarette::CleanThreadStartAuto() handleThread->start(); } -void Cigarette::record_output_statistic(qint64 quantity, int shift) +void Cigarette::record_output_statistic(qint64 quantity, int Kick[NumberOfSupportedCameras], int shift) { - float Kick[NumberOfSupportedCameras] = {0}; - if (m_PLCDevice->g_plc_ok) - { - if (!g_plc_dialog_open) //PLCöԻûд - { -#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>0) - if (g_modbus_conf.kick1 > 0) - { - uint16_t dest16[2]; - int ret = m_PLCDevice->read_short_from_plc(g_modbus_conf.kick1, 2, dest16); - if (ret == 2) - { - Kick[0] = dest16[0] + (dest16[1] << 16); - } - } -#endif -#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>1) - if (g_modbus_conf.kick2 > 0) - { - uint16_t dest16[2]; - int ret = m_PLCDevice->read_short_from_plc(g_modbus_conf.kick2, 2, dest16); - if (ret == 2) - { - Kick[1] = dest16[0] + (dest16[1] << 16); - } - } -#endif -#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>2) - if (g_modbus_conf.kick3 > 0) - { - uint16_t dest16[2]; - int ret = m_PLCDevice->read_short_from_plc(g_modbus_conf.kick3, 2, dest16); - if (ret == 2) - { - Kick[2] = dest16[0] + (dest16[1] << 16); - } - } -#endif -#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>3) - if (g_modbus_conf.kick4 > 0) - { - uint16_t dest16[2]; - int ret = m_PLCDevice->read_short_from_plc(g_modbus_conf.kick4, 2, dest16); - if (ret == 2) - { - Kick[3] = dest16[0] + (dest16[1] << 16); - } - } -#endif - } - } - + QString file_name, file_path; for (int i = 0; i < NumberOfSupportedCameras; i++) { if (SingleCamInfo[i].IsOpen && quantity > 0) { std::fstream cfg_file; + file_name = QString(STATISTIC_FILE).arg(i); + file_path = g_conf_path.config_path + "/" + file_name; + char buf[256]; memset(buf, 0, 256); - sprintf(buf, "../conf/camera%d_statistic.txt", i); + sprintf(buf, "%s", file_path.toLocal8Bit().constData()); + cfg_file.open(buf, std::ios::app); if (cfg_file.good()) { @@ -3024,10 +3579,14 @@ void Cigarette::record_output_statistic(qint64 quantity, int shift) cfg_file.write(buf, strlen(buf)); } memset(buf, 0, 256); - sprintf(buf, "%c ܲ:%010I64d ޳:%02.5f%% ϸ:%2.5f%% \n", (shift == 0) ? 'A' : ((shift == 1) ? 'B' : 'C'), quantity, (Kick[i] / quantity) * 100, (1.0 - (Kick[i] / quantity)) * 100); + double ng_rate; + if (ng[i] > 0) + ng_rate = double(ng[i]) / production_number[i]; + else + ng_rate = 0; + sprintf(buf, "%c ܲ:%010I64d ޳:%02.5f%% ϸ:%02.5f%% NG:%02.5f%%\n", (shift == 0) ? 'A' : ((shift == 1) ? 'B' : 'C'), quantity, ((double)Kick[i] / quantity) * 100, (1.0 - ng_rate) * 100, ng_rate * 100); cfg_file.write(buf, strlen(buf)); memset(buf, 0, 256); - } cfg_file.close(); } @@ -3037,6 +3596,7 @@ void Cigarette::record_output_statistic(qint64 quantity, int shift) void Cigarette::recMsgFromUdp(QString data) { + //std::cout << data.toStdString() << std::endl; #ifdef __UDPSend if (data == "START") { @@ -3071,6 +3631,39 @@ void Cigarette::recMsgFromUdp(QString data) } on_btn_pause_released(); } + + else if (data == "0") + { + OnRotateReleasedHub(0); + } + else if (data == "1") + { + OnRotateReleasedHub(1); + } + else if (data == "2") + { + OnRotateReleasedHub(2); + } + else if (data == "3") + { + OnRotateReleasedHub(3); + } + else if (data == "4") + { + OnRotateReleasedHub(4); + } + else if (data == "5") + { + OnRotateReleasedHub(5); + } + else if (data == "6") + { + OnRotateReleasedHub(6); + } + else if (data == "7") + { + OnRotateReleasedHub(7); + } else if (data == "LOCK") { if (!g_admin_mode) @@ -3101,7 +3694,8 @@ void Cigarette::recMsgFromUdp(QString data) } else if (data == "CLEARNIMAGE") { - on_pushButton_Clear_Pic_released(); + emit sengMsgToClog("Clean images."); + CleanThreadStart(); } else if (data == "DEBUGEN") { @@ -3173,11 +3767,20 @@ void Cigarette::recMsgFromUdp(QString data) } else if (data == "GETCONF") { - sThread.sendFile(CONFIGURE_FILE,g_sys_conf.FilePort); - sThread.sendFile("../conf/camera0_statistic.txt", g_sys_conf.FilePort); - sThread.sendFile("../conf/camera1_statistic.txt", g_sys_conf.FilePort); - sThread.sendFile("../conf/camera2_statistic.txt", g_sys_conf.FilePort); - sThread.sendFile("../conf/camera3_statistic.txt", g_sys_conf.FilePort); + QString file_name, file_path; + sThread.sendFile(g_conf_path.config_path, g_sys_conf.FilePort); + for(int i=0;i to UDP: " << str.toStdString() << std::endl; } else if (dataList[0] == "UPDSETTING") { + // Զ̶˶1 int index =0; int camcnt = atoi(dataList[1].toStdString().c_str()); g_sys_conf.auto_open = dataList[2].toStdString() == "True" ? 1 : 0; @@ -3342,16 +3952,20 @@ void Cigarette::recMsgFromUdp(QString data) g_sys_conf.filter[index] = atoi(dataList[7+index*3].toStdString().c_str()); } index = 5+camcnt*3; + g_sys_conf.shift_byhand = dataList[index].toInt(); + g_sys_conf.timing_shift = dataList[index + 1].toInt(); + index = index + 2; g_sys_conf.shiftA.setHMS(atoi(dataList[index].toStdString().c_str()), atoi(dataList[index+1].toStdString().c_str()), 0); g_sys_conf.shiftB.setHMS(atoi(dataList[index+2].toStdString().c_str()), atoi(dataList[index+3].toStdString().c_str()), 0); g_sys_conf.shiftC.setHMS(atoi(dataList[index+4].toStdString().c_str()), atoi(dataList[index+5].toStdString().c_str()), 0); - index = index +6; + index = index+6; for (int i = 0; i < camcnt; i++) { g_sys_conf.no[i][0] = atoi(dataList[index+i*3].toStdString().c_str()); g_sys_conf.no[i][1] = atoi(dataList[index+i*3+1].toStdString().c_str()); g_sys_conf.no[i][2] = atoi(dataList[index+i*3+2].toStdString().c_str()); } + DialogSetup::write_config(); sThread.sendData("UpSettingOk", g_sys_conf.FeedbackPort); // QMessageBox::information(NULL, QStringLiteral("ʾ"), QStringLiteral("ɹ,ҪЧ"), QMessageBox::Ok); diff --git a/Cigarette/cigarette.h b/240510-常德GDX1-1相机-1280x800/Cigarette/cigarette.h similarity index 69% rename from Cigarette/cigarette.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/cigarette.h index 6344ee95..83b409bc 100644 --- a/Cigarette/cigarette.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/cigarette.h @@ -42,10 +42,9 @@ #include #include #include - - #include +#include class QTimer; #define OPEN true @@ -63,7 +62,8 @@ public: QString read_pswd(); QString read_op_pswd(); - bool read_sys_config(SysConf &conf); + bool read_conf(ConfPath &conf_path); + bool read_sys_config(SysConf &conf, QString conf_path); bool read_modbus_config(ModbusConf &conf); void read_plc_items(); bool save_rotate_message(); @@ -74,19 +74,24 @@ public: void InitPtrMat(); bool ControlCamOpenOrClose(int Num,bool OpenOrClose); void EnumerateCameras(SingleCamInfoStruct *TempSingleCamInfo,bool showinfo,SysConf &conf); + void start_work(); + void pause_work(); + void CleanThreadStart(); + void Exit(); private slots : void on_btn_start_released(); void on_btn_pause_released(); + //void on_btn_pause_clicked(bool checked); void on_btn_lock_released(); void on_btn_setup_released(); void on_checkBox_debug_clicked(bool checked); void on_checkBox_unkick_clicked(bool checked); + //void on_pushButton_wintab_clicked(bool checked); void on_toolButton_plc_released(); void on_toolButton_alarm_released(); void on_pushButton_clear_released(); - void on_pushButton_Clear_Pic_released(); - void enable_shift(); + void sendLatestData(); void OnNotifyHub(int Num, int Cnt, cv::Mat m); void OnDisplayTimeCostHub(int Num, int ms); void OnDisplayCheckNumberHub(int Num, long no); @@ -98,25 +103,29 @@ private slots : void OnToolButtonCamReleasedHub(int Num); void OpenCamTimeoutHub(int Num); void OnDBClickHub(int Num_Cnt); + void DrawRect_init(int Num_Cnt); + void OnTPClickHub(int Num_Cnt); void OnDBClickNGHub(int Num); void ReconnectCamHub(int Num); - - void handleTimeout(); //ʱÿһ - void op_timeout(); //Աʣʱ - void admin_timeout(); //ԱȨʣʱ - void FindFileForDelete(const QString& path); - void autoCleanImage(); + void OnMouse(QMouseEvent* event); + void OnKey(QKeyEvent* event); + void handleTimeout(); //定时任务,每秒运行一次 + void op_timeout(); //操作员剩余时间 + void admin_timeout(); //管理员权限剩余时间 void EnableDebugMode(); void DisableDebugMode(); - void OnCancelAlarm(); //˫ - void on_pushButton_reset_released();//λ + void OnCancelAlarm(); //双击消警 + void on_pushButton_reset_released();//复位 void OnOp(); void OnExit(); void OnRestart(); - void OnAdmin(); +#ifdef __DEBUG + void TestImg(); + void TestImgs(); +#endif private: Ui::CigaretteClass ui; DialogSetupPasswd *dialog_setup_passwd; @@ -125,7 +134,7 @@ private: PlcSetup * dialog_plc_setup; std::vector m_plc_items; public: - QTimer *m_pTimer_Cam_mat[NumberOfSupportedCameras]; //ʱ + QTimer *m_pTimer_Cam_mat[NumberOfSupportedCameras]; //相机重启定时器 QLabel *label_cap_speed_mat[NumberOfSupportedCameras]; QLabel *cam_status_mat[NumberOfSupportedCameras]; QLabel *cam_work_mat[NumberOfSupportedCameras]; @@ -136,25 +145,52 @@ public: QLabel *label_jd_no_mat[NumberOfSupportedCameras]; QLCDNumber *lcdNumber_ok_mat[NumberOfSupportedCameras]; QLCDNumber *lcdNumber_ng_mat[NumberOfSupportedCameras]; + QLCDNumber* lcdNumber_kick_mat[NumberOfSupportedCameras]; QLabel *label_reslut_mat[NumberOfSupportedCameras]; QToolButton *rotate_mat[NumberOfSupportedCameras]; QLabel *label_ng_mat[NumberOfSupportedCameras]; + struct widget_info + { + UINT32 x; + UINT32 y; + UINT32 width; + UINT32 height; + }; + widget_info display_lable_info[NumberOfSupportedCameras][2]; + widget_info rotate_info[NumberOfSupportedCameras]; + WorkThread work_thread[NumberOfSupportedCameras]; - DebugThread debug_thread[NumberOfSupportedCameras]; + struct export_info { + int cameraId = -1; + int totalCheckNum = 0; + int totalKickNum = 0; + int kick = 0; + int checkNum = 0; + QString detectTime = "0"; + QString acquisitionTime = "0"; + QString jdNum = QString("0,0,0"); + int okNum = 0; + int ngNum = 0; + }; + export_info exportData[NumberOfSupportedCameras]; + SaveThread saveThread; - void record_output_statistic(qint64 cur_quantity, int shift); + void record_output_statistic(qint64 cur_quantity, int Kick[NumberOfSupportedCameras], int shift); QTimer *m_pTimer; - QTimer *m_delay; //ֹ - QTimer *m_op_delay; //ԱȨʣʱ - QTimer *m_admin_delay; //ԱȨʣʱ - QTimer *clean_pTimer; //ʱ - - QSignalMapper *image_lable_signalMapper0; - QSignalMapper *image_lable_signalMapper1; + QTimer *m_delay; //换班防止连击 + QTimer* m_sendMsg_delay; // 停止工作后发送最新数据给远程端 + QTimer *m_op_delay; //操作员权限剩余时间 + QTimer *m_admin_delay; //操作员权限剩余时间 + QTimer *clean_pTimer; //定时清理任务 + + QSignalMapper *image_lable_DBsignalMapper0; + QSignalMapper *image_lable_DBsignalMapper1; + QSignalMapper *image_lable_TPsignalMapper0; + QSignalMapper *image_lable_TPsignalMapper1; QSignalMapper *label_ng_signalMapper; QSignalMapper *pTimer_Cam_signalMapper; QSignalMapper *toolButton_cam_signalMapper; @@ -163,21 +199,19 @@ public: int production_number[NumberOfSupportedCameras]; int OpenWithUserID[NumberOfSupportedCameras]; int ok[NumberOfSupportedCameras], ng[NumberOfSupportedCameras]; - cv::Mat g_last_mat[NumberOfSupportedCameras][2]; - bool g_max[NumberOfSupportedCameras][2]; //ͼǷ #ifdef __UDPSend private: threadSend sThread; threadReceive *rThread; #endif public slots: - void CleanThreadStart(); void CleanThreadStartAuto(); void recMsgFromUdp(QString data); //void ClogThreadStart(); signals: void sengMsgToClog(QString); + void sendMsgToExportData(); }; #endif // CIGARETTE_H diff --git a/Cigarette/cigarette.qrc b/240510-常德GDX1-1相机-1280x800/Cigarette/cigarette.qrc similarity index 66% rename from Cigarette/cigarette.qrc rename to 240510-常德GDX1-1相机-1280x800/Cigarette/cigarette.qrc index 79a7a0af..b0f1e750 100644 --- a/Cigarette/cigarette.qrc +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/cigarette.qrc @@ -1,6 +1,5 @@ - Resources/logo.png Resources/rotate.png Resources/exit.png Resources/setup.png @@ -23,5 +22,18 @@ Resources/lock.png Resources/unlock.png Resources/pause.png + Resources/cam5.png + Resources/cam5_no.png + Resources/cam5_yes.png + Resources/cam6.png + Resources/cam6_no.png + Resources/cam6_yes.png + Resources/cam7.png + Resources/cam7_no.png + Resources/cam7_yes.png + Resources/cam8.png + Resources/cam8_no.png + Resources/cam8_yes.png + Resources/logo.png diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/cigarette.ui b/240510-常德GDX1-1相机-1280x800/Cigarette/cigarette.ui new file mode 100644 index 00000000..fd0a5621 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/cigarette.ui @@ -0,0 +1,4586 @@ + + + CigaretteClass + + + + 0 + 0 + 1280 + 800 + + + + Cigarette + + + background-color: rgb(55, 55, 55); + + + + + + 430 + 10 + 441 + 61 + + + + + 微软雅黑 + 24 + + + + background-color: rgb(255, 255, 0); + + + 商标纸胶点检测系统 + + + Qt::AlignCenter + + + + + + 10 + 70 + 111 + 411 + + + + + 微软雅黑 + 14 + 75 + true + + + + color:white + + + 操作区 + + + + + 20 + 34 + 72 + 96 + + + + + 微软雅黑 + + + + border-image: url(:/Cigarette/Resources/start.png); + + + + + + false + + + + + + 20 + 120 + 72 + 96 + + + + + 微软雅黑 + + + + border-image: url(:/Cigarette/Resources/pause.png); + + + + + + + false + + + + + + 20 + 215 + 72 + 91 + + + + + 微软雅黑 + + + + border-image: url(:/Cigarette/Resources/unlock.png); + + + + + + false + + + + + + 20 + 310 + 72 + 96 + + + + + 微软雅黑 + + + + border-image: url(:/Cigarette/Resources/setup.png); + + + + + + + false + + + + + + + 10 + 500 + 111 + 241 + + + + + 微软雅黑 + 14 + 75 + true + + + + color:white + + + 设备区 + + + + + 20 + 30 + 71 + 71 + + + + border-image: url(:/Cigarette/Resources/cam1_no.png); + + + + + + + + + 20 + 1280 + 41 + 41 + + + + border-image: url(:/Cigarette/Resources/cam2_no.png); + + + + + + + + + 10 + 1330 + 61 + 16 + + + + + 微软雅黑 + 10 + 75 + true + + + + background-color: rgb(255, 255, 0); + + + 联机 + + + Qt::AlignCenter + + + + + + 10 + 1350 + 61 + 16 + + + + + 微软雅黑 + 10 + 75 + true + + + + background-color: rgb(255, 255, 0); + + + 工作 + + + Qt::AlignCenter + + + + + + 20 + 145 + 71 + 31 + + + + + 微软雅黑 + 18 + 75 + true + + + + background-color: rgb(255, 255, 0); + + + 工作 + + + Qt::AlignCenter + + + + + + 10 + 180 + 91 + 21 + + + + + 微软雅黑 + 12 + 75 + true + + + + color:white + + + 调试模式 + + + + + + 10 + 210 + 71 + 21 + + + + + 微软雅黑 + 12 + 75 + true + + + + color:white + + + 不剔除 + + + + + + 10 + 1530 + 61 + 16 + + + + + 微软雅黑 + 10 + 75 + true + + + + background-color: rgb(255, 255, 0); + + + 工作 + + + Qt::AlignCenter + + + + + + 20 + 1460 + 41 + 41 + + + + border-image: url(:/Cigarette/Resources/cam4_no.png); + + + + + + + + + 100 + 1280 + 41 + 41 + + + + border-image: url(:/Cigarette/Resources/cam6_no.png); + + + + + + + + + 100 + 1460 + 41 + 41 + + + + border-image: url(:/Cigarette/Resources/cam8_no.png); + + + + + + + + + 90 + 1510 + 61 + 16 + + + + + 微软雅黑 + 10 + 75 + true + + + + background-color: rgb(255, 255, 0); + + + 联机 + + + Qt::AlignCenter + + + + + + 90 + 1530 + 61 + 16 + + + + + 微软雅黑 + 10 + 75 + true + + + + background-color: rgb(255, 255, 0); + + + 工作 + + + Qt::AlignCenter + + + + + + 20 + 1370 + 41 + 41 + + + + border-image: url(:/Cigarette/Resources/cam3_no.png); + + + + + + + + + 100 + 1190 + 41 + 41 + + + + border-image: url(:/Cigarette/Resources/cam5_no.png); + + + + + + + + + 100 + 1370 + 41 + 41 + + + + border-image: url(:/Cigarette/Resources/cam7_no.png); + + + + + + + + + 90 + 1240 + 61 + 16 + + + + + 微软雅黑 + 10 + 75 + true + + + + background-color: rgb(255, 255, 0); + + + 联机 + + + Qt::AlignCenter + + + + + + 10 + 1420 + 61 + 16 + + + + + 微软雅黑 + 10 + 75 + true + + + + background-color: rgb(255, 255, 0); + + + 联机 + + + Qt::AlignCenter + + + + + + 90 + 1420 + 61 + 16 + + + + + 微软雅黑 + 10 + 75 + true + + + + background-color: rgb(255, 255, 0); + + + 联机 + + + Qt::AlignCenter + + + + + + 90 + 1330 + 61 + 16 + + + + + 微软雅黑 + 10 + 75 + true + + + + background-color: rgb(255, 255, 0); + + + 联机 + + + Qt::AlignCenter + + + + + + 10 + 1510 + 61 + 16 + + + + + 微软雅黑 + 10 + 75 + true + + + + background-color: rgb(255, 255, 0); + + + 联机 + + + Qt::AlignCenter + + + + + + 10 + 1440 + 61 + 16 + + + + + 微软雅黑 + 10 + 75 + true + + + + background-color: rgb(255, 255, 0); + + + 工作 + + + Qt::AlignCenter + + + + + + 90 + 1260 + 61 + 16 + + + + + 微软雅黑 + 10 + 75 + true + + + + background-color: rgb(255, 255, 0); + + + 工作 + + + Qt::AlignCenter + + + + + + 90 + 1350 + 61 + 16 + + + + + 微软雅黑 + 10 + 75 + true + + + + background-color: rgb(255, 255, 0); + + + 工作 + + + Qt::AlignCenter + + + + + + 90 + 1440 + 61 + 16 + + + + + 微软雅黑 + 10 + 75 + true + + + + background-color: rgb(255, 255, 0); + + + 工作 + + + Qt::AlignCenter + + + + + + 20 + 110 + 71 + 31 + + + + + 微软雅黑 + 18 + 75 + true + + + + background-color: rgb(255, 255, 0); + + + 联机 + + + Qt::AlignCenter + + + toolButton_cam_1 + cam_work_1 + checkBox_debug + checkBox_unkick + cam_status_1 + cam_work_5 + cam_work_7 + toolButton_cam_4 + toolButton_cam_6 + toolButton_cam_7 + toolButton_cam_8 + cam_status_3 + cam_work_2 + toolButton_cam_3 + cam_status_5 + cam_work_6 + cam_status_4 + cam_work_8 + cam_work_4 + toolButton_cam_5 + cam_status_2 + toolButton_cam_2 + cam_status_7 + cam_status_8 + cam_work_3 + cam_status_6 + + + + + 10 + 745 + 1264 + 53 + + + + + 微软雅黑 + 12 + 75 + true + + + + + + + + + 919 + 10 + 71 + 31 + + + + + 微软雅黑 + 12 + 75 + true + + + + color:white + + + 无报警 + + + Qt::AlignCenter + + + + + + 410 + 10 + 41 + 31 + + + + + 微软雅黑 + 12 + 75 + true + + + + color:white + + + 当班 + + + + + + 740 + 10 + 81 + 31 + + + + + 微软雅黑 + 12 + 75 + true + + + + color:white + + + PLC正常 + + + Qt::AlignCenter + + + + + + 450 + 5 + 171 + 41 + + + + color:white + + + 8 + + + + + + 880 + 5 + 41 + 41 + + + + border-image: url(:/Cigarette/Resources/alarm.png); + + + + + + + + + 690 + 5 + 51 + 41 + + + + border-image: url(:/Cigarette/Resources/plc.png); + + + + + + + + + 630 + 5 + 51 + 41 + + + + + 微软雅黑 + 12 + + + + color:white + + + 换班 + + + + + + 1000 + 16 + 250 + 20 + + + + + 微软雅黑 + 12 + 75 + true + + + + color:white + + + 运行1年10月25天9时15分 + + + Qt::AlignCenter + + + + + + 10 + 10 + 101 + 31 + + + + + 微软雅黑 + 12 + 75 + true + + + + color:white + + + 登陆用户: + + + Qt::AlignCenter + + + + + + 110 + 10 + 71 + 31 + + + + + 微软雅黑 + 12 + 50 + false + + + + color:white + + + 操作员 + + + + + + 190 + 10 + 41 + 31 + + + + + 微软雅黑 + 12 + 75 + true + + + + color:white + + + 上班 + + + + + + 230 + 5 + 171 + 41 + + + + color:white + + + 8 + + + + + + 825 + 5 + 51 + 41 + + + + + 微软雅黑 + 12 + + + + color:white + + + 复位 + + + + + + + 140 + 80 + 861 + 651 + + + + background-color: rgb(0, 0, 0); + + + + + + + + + 1020 + 80 + 251 + 651 + + + + + 微软雅黑 + 14 + + + + color:white + + + 相机分析结果 + + + + + 20 + 370 + 70 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + 采集速度: + + + + + + 100 + 370 + 71 + 20 + + + + + 微软雅黑 + 11 + + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 90 + 440 + 81 + 20 + + + + + 微软雅黑 + 11 + + + + Qt::LeftToRight + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 20 + 440 + 70 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + 胶点个数: + + + + + + 20 + 510 + 70 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + 识别时间: + + + + + + 90 + 510 + 61 + 20 + + + + + 微软雅黑 + 11 + + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 20 + 560 + 121 + 81 + + + + + SimSun + 18 + 75 + true + + + + background-color: rgb(0, 255, 0); + + + OK + + + Qt::AlignCenter + + + + + + 110 + 280 + 131 + 41 + + + + + 10 + + + + color:white + + + 10 + + + + + + 15 + 40 + 91 + 31 + + + + + 微软雅黑 + 10 + 75 + true + + + + color:white + + + 检测个数 + + + + + + 110 + 200 + 131 + 41 + + + + + 10 + + + + color:white + + + 10 + + + + + + 110 + 40 + 131 + 41 + + + + + 10 + + + + color:white + + + 10 + + + + + + 15 + 120 + 91 + 31 + + + + + 微软雅黑 + 10 + 75 + true + + + + color:white + + + OK次数 + + + + + + 15 + 290 + 91 + 31 + + + + + 微软雅黑 + 10 + 75 + true + + + + color:white + + + 剔除次数 + + + + + + 110 + 120 + 131 + 41 + + + + + 10 + + + + color:white + + + 10 + + + + + + 15 + 200 + 91 + 31 + + + + + 微软雅黑 + 10 + 75 + true + + + + color:white + + + NG次数 + + + + + + + 484 + 65 + 0 + 0 + + + + Qt::ClickFocus + + + false + + + ... + + + + :/Cigarette/Resources/rotate.png:/Cigarette/Resources/rotate.png + + + + 40 + 40 + + + + + + + 80 + 2470 + 341 + 16 + + + + + 微软雅黑 + 10 + + + + color:white + + + SHANGHAI TOBACCO MACHINERY CO.,LTD + + + Qt::AlignCenter + + + + + + 80 + 2427 + 271 + 31 + + + + + 微软雅黑 + 13 + + + + color:white + + + 上海烟草机械有限责任公司 + + + Qt::AlignCenter + + + + + + 10 + 2425 + 70 + 61 + + + + border-image: url(:/Cigarette/Resources/logo.png); + + + + + + + + + + 1020 + 10 + 191 + 21 + + + + + 微软雅黑 + 12 + 50 + false + + + + color:white + + + Tel:87907256(0532) + + + + + + 1170 + 10 + 81 + 21 + + + + + 微软雅黑 + 12 + 50 + false + + + + color:white + + + 青岛维克 + + + + + + 990 + 30 + 211 + 31 + + + + + 微软雅黑 + 12 + 50 + false + + + + color:white + + + 2020-10-10 13:15:39 + + + Qt::AlignCenter + + + + + + 10 + 1890 + 160 + 110 + + + + background-color: rgb(0, 0, 0); + + + + + + + + + 170 + 1890 + 160 + 110 + + + + background-color: rgb(0, 0, 0); + + + + + + + + + 484 + 230 + 0 + 0 + + + + Qt::ClickFocus + + + false + + + ... + + + + :/Cigarette/Resources/rotate.png:/Cigarette/Resources/rotate.png + + + + 40 + 40 + + + + + + + 185 + 1390 + 320 + 110 + + + + background-color: rgb(0, 0, 0); + + + + + + + + + 610 + 1755 + 90 + 20 + + + + color:white + + + 10 + + + + + + 490 + 1890 + 160 + 110 + + + + background-color: rgb(0, 0, 0); + + + + + + + + + 610 + 1785 + 90 + 20 + + + + color:white + + + 10 + + + + + + 610 + 1725 + 90 + 20 + + + + color:white + + + 10 + + + + + + 484 + 565 + 0 + 0 + + + + Qt::ClickFocus + + + false + + + ... + + + + :/Cigarette/Resources/rotate.png:/Cigarette/Resources/rotate.png + + + + 40 + 40 + + + + + + + 515 + 1725 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + color:white + + + 4#检测个数 + + + + + + 515 + 1755 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + color:white + + + 4#OK次数 + + + + + + 515 + 1815 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + color:white + + + 4#剔除次数 + + + + + + 185 + 1835 + 511 + 51 + + + + + 微软雅黑 + 10 + + + + color:white + + + 4#相机分析结果 + + + + + 10 + 20 + 70 + 20 + + + + + 微软雅黑 + 10 + + + + 采集速度: + + + + + + 80 + 20 + 50 + 20 + + + + + 微软雅黑 + 11 + + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 220 + 20 + 50 + 20 + + + + + 微软雅黑 + 11 + + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 150 + 20 + 70 + 20 + + + + + 微软雅黑 + 10 + + + + 胶点个数: + + + + + + 290 + 20 + 70 + 20 + + + + + 微软雅黑 + 10 + + + + 识别时间: + + + + + + 360 + 20 + 50 + 20 + + + + + 微软雅黑 + 11 + + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 430 + 20 + 60 + 25 + + + + + SimSun + 18 + 75 + true + + + + background-color: rgb(0, 255, 0); + + + OK + + + Qt::AlignCenter + + + + + + + 185 + 1725 + 320 + 110 + + + + background-color: rgb(0, 0, 0); + + + + + + + + + 610 + 1815 + 90 + 20 + + + + color:white + + + 10 + + + + + + 515 + 1785 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + color:white + + + 4#NG次数 + + + + + + 515 + 1480 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + color:white + + + 2#剔除次数 + + + + + + 610 + 1480 + 90 + 20 + + + + color:white + + + 10 + + + + + + 515 + 1420 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + color:white + + + 2#OK次数 + + + + + + 610 + 1420 + 90 + 20 + + + + color:white + + + 10 + + + + + + 610 + 1390 + 90 + 20 + + + + color:white + + + 10 + + + + + + 515 + 1390 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + color:white + + + 2#检测个数 + + + + + + 515 + 1450 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + color:white + + + 2#NG次数 + + + + + + 610 + 1450 + 90 + 20 + + + + color:white + + + 10 + + + + + + 185 + 1505 + 510 + 50 + + + + + 微软雅黑 + 10 + + + + color:white + + + 2#相机分析结果 + + + + + 10 + 20 + 70 + 20 + + + + + 微软雅黑 + 10 + + + + 采集速度: + + + + + + 80 + 20 + 50 + 20 + + + + + 微软雅黑 + 11 + + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 220 + 20 + 50 + 20 + + + + + 微软雅黑 + 11 + + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 150 + 20 + 70 + 20 + + + + + 微软雅黑 + 10 + + + + 胶点个数: + + + + + + 290 + 20 + 70 + 20 + + + + + 微软雅黑 + 10 + + + + 识别时间: + + + + + + 360 + 20 + 50 + 20 + + + + + 微软雅黑 + 11 + + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 430 + 20 + 60 + 25 + + + + + SimSun + 18 + 75 + true + + + + background-color: rgb(0, 255, 0); + + + OK + + + Qt::AlignCenter + + + + + + + 610 + 1620 + 90 + 20 + + + + color:white + + + 10 + + + + + + 515 + 1650 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + color:white + + + 3#剔除次数 + + + + + + 515 + 1560 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + color:white + + + 3#检测个数 + + + + + + 610 + 1650 + 90 + 20 + + + + color:white + + + 10 + + + + + + 484 + 400 + 0 + 0 + + + + Qt::ClickFocus + + + false + + + ... + + + + :/Cigarette/Resources/rotate.png:/Cigarette/Resources/rotate.png + + + + 40 + 40 + + + + + + + 185 + 1670 + 510 + 50 + + + + + 微软雅黑 + 10 + + + + color:white + + + 3#相机分析结果 + + + + + 10 + 20 + 70 + 20 + + + + + 微软雅黑 + 10 + + + + 采集速度: + + + + + + 80 + 20 + 50 + 20 + + + + + 微软雅黑 + 11 + + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 220 + 20 + 50 + 20 + + + + + 微软雅黑 + 11 + + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 150 + 20 + 70 + 20 + + + + + 微软雅黑 + 10 + + + + 胶点个数: + + + + + + 290 + 20 + 70 + 20 + + + + + 微软雅黑 + 10 + + + + 识别时间: + + + + + + 360 + 20 + 50 + 20 + + + + + 微软雅黑 + 11 + + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 430 + 20 + 60 + 25 + + + + + SimSun + 18 + 75 + true + + + + background-color: rgb(0, 255, 0); + + + OK + + + Qt::AlignCenter + + + + + + + 515 + 1620 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + color:white + + + 3#NG次数 + + + + + + 185 + 1560 + 320 + 110 + + + + background-color: rgb(0, 0, 0); + + + + + + + + + 515 + 1590 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + color:white + + + 3#OK次数 + + + + + + 610 + 1590 + 90 + 20 + + + + color:white + + + 10 + + + + + + 610 + 1560 + 90 + 20 + + + + color:white + + + 10 + + + + + + 330 + 1890 + 160 + 110 + + + + background-color: rgb(0, 0, 0); + + + + + + + + + 1175 + 1380 + 90 + 20 + + + + color:white + + + 10 + + + + + + 1175 + 1275 + 90 + 20 + + + + color:white + + + 10 + + + + + + 750 + 1380 + 320 + 110 + + + + background-color: rgb(0, 0, 0); + + + + + + + + + 1080 + 1470 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + color:white + + + 6#剔除次数 + + + + + + 1080 + 1215 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + color:white + + + 5#检测个数 + + + + + + 1080 + 1715 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + color:white + + + 8#检测个数 + + + + + + 1034 + 65 + 0 + 0 + + + + Qt::ClickFocus + + + false + + + ... + + + + :/Cigarette/Resources/rotate.png:/Cigarette/Resources/rotate.png + + + + 40 + 40 + + + + + + + 1080 + 1805 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + color:white + + + 8#剔除次数 + + + + + + 1080 + 1550 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + color:white + + + 7#检测个数 + + + + + + 1080 + 1440 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + color:white + + + 6#NG次数 + + + + + + 1034 + 230 + 0 + 0 + + + + Qt::ClickFocus + + + false + + + ... + + + + :/Cigarette/Resources/rotate.png:/Cigarette/Resources/rotate.png + + + + 40 + 40 + + + + + + + 1080 + 1275 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + color:white + + + 5#NG次数 + + + + + + 1175 + 1610 + 90 + 20 + + + + color:white + + + 10 + + + + + + 1080 + 1580 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + color:white + + + 7#OK次数 + + + + + + 970 + 1890 + 160 + 110 + + + + background-color: rgb(0, 0, 0); + + + + + + + + + 750 + 1495 + 510 + 50 + + + + + 微软雅黑 + 10 + + + + color:white + + + 6#相机分析结果 + + + + + 10 + 20 + 70 + 20 + + + + + 微软雅黑 + 10 + + + + 采集速度: + + + + + + 80 + 20 + 50 + 20 + + + + + 微软雅黑 + 11 + + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 220 + 20 + 50 + 20 + + + + + 微软雅黑 + 11 + + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 150 + 20 + 70 + 20 + + + + + 微软雅黑 + 10 + + + + 胶点个数: + + + + + + 290 + 20 + 70 + 20 + + + + + 微软雅黑 + 10 + + + + 识别时间: + + + + + + 360 + 20 + 50 + 20 + + + + + 微软雅黑 + 11 + + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 430 + 20 + 60 + 25 + + + + + SimSun + 18 + 75 + true + + + + background-color: rgb(0, 255, 0); + + + OK + + + Qt::AlignCenter + + + + + + + 1175 + 1440 + 90 + 20 + + + + color:white + + + 10 + + + + + + 750 + 1715 + 320 + 110 + + + + background-color: rgb(0, 0, 0); + + + + + + + + + 1175 + 1715 + 90 + 20 + + + + color:white + + + 10 + + + + + + 750 + 1825 + 511 + 51 + + + + + 微软雅黑 + 10 + + + + color:white + + + 8#相机分析结果 + + + + + 10 + 20 + 70 + 20 + + + + + 微软雅黑 + 10 + + + + 采集速度: + + + + + + 80 + 20 + 50 + 20 + + + + + 微软雅黑 + 11 + + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 220 + 20 + 50 + 20 + + + + + 微软雅黑 + 11 + + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 150 + 20 + 70 + 20 + + + + + 微软雅黑 + 10 + + + + 胶点个数: + + + + + + 290 + 20 + 70 + 20 + + + + + 微软雅黑 + 10 + + + + 识别时间: + + + + + + 360 + 20 + 50 + 20 + + + + + 微软雅黑 + 11 + + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 430 + 20 + 60 + 25 + + + + + SimSun + 18 + 75 + true + + + + background-color: rgb(0, 255, 0); + + + OK + + + Qt::AlignCenter + + + + + + + 750 + 1660 + 510 + 50 + + + + + 微软雅黑 + 10 + + + + color:white + + + 7#相机分析结果 + + + + + 10 + 20 + 70 + 20 + + + + + 微软雅黑 + 10 + + + + 采集速度: + + + + + + 80 + 20 + 50 + 20 + + + + + 微软雅黑 + 11 + + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 220 + 20 + 50 + 20 + + + + + 微软雅黑 + 11 + + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 150 + 20 + 70 + 20 + + + + + 微软雅黑 + 10 + + + + 胶点个数: + + + + + + 290 + 20 + 70 + 20 + + + + + 微软雅黑 + 10 + + + + 识别时间: + + + + + + 360 + 20 + 50 + 20 + + + + + 微软雅黑 + 11 + + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 430 + 20 + 60 + 25 + + + + + SimSun + 18 + 75 + true + + + + background-color: rgb(0, 255, 0); + + + OK + + + Qt::AlignCenter + + + + + + + 1080 + 1305 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + color:white + + + 5#剔除次数 + + + + + + 1175 + 1775 + 90 + 20 + + + + color:white + + + 10 + + + + + + 1175 + 1305 + 90 + 20 + + + + color:white + + + 10 + + + + + + 1080 + 1640 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + color:white + + + 7#剔除次数 + + + + + + 1175 + 1410 + 90 + 20 + + + + color:white + + + 10 + + + + + + 750 + 1325 + 510 + 50 + + + + + 微软雅黑 + 10 + + + + color:white + + + 5#相机分析结果 + + + + + 10 + 20 + 70 + 20 + + + + + 微软雅黑 + 10 + + + + 采集速度: + + + + + + 80 + 20 + 50 + 20 + + + + + 微软雅黑 + 11 + + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 220 + 20 + 50 + 20 + + + + + 微软雅黑 + 11 + + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 150 + 20 + 70 + 20 + + + + + 微软雅黑 + 10 + + + + 胶点个数: + + + + + + 290 + 20 + 70 + 20 + + + + + 微软雅黑 + 10 + + + + 识别时间: + + + + + + 360 + 20 + 50 + 20 + + + + + 微软雅黑 + 11 + + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 430 + 20 + 60 + 25 + + + + + SimSun + 18 + 75 + true + + + + background-color: rgb(0, 255, 0); + + + OK + + + Qt::AlignCenter + + + + + + + 1175 + 1640 + 90 + 20 + + + + color:white + + + 10 + + + + + + 750 + 1215 + 320 + 110 + + + + background-color: rgb(0, 0, 0); + + + + + + + + + 1080 + 1245 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + color:white + + + 5#OK次数 + + + + + + 1080 + 1380 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + color:white + + + 6#检测个数 + + + + + + 1080 + 1745 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + color:white + + + 8#OK次数 + + + + + + 1175 + 1745 + 90 + 20 + + + + color:white + + + 10 + + + + + + 1175 + 1245 + 90 + 20 + + + + color:white + + + 10 + + + + + + 1080 + 1775 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + color:white + + + 8#NG次数 + + + + + + 1175 + 1550 + 90 + 20 + + + + color:white + + + 10 + + + + + + 1175 + 1470 + 90 + 20 + + + + color:white + + + 10 + + + + + + 1080 + 1610 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + color:white + + + 7#NG次数 + + + + + + 1175 + 1215 + 90 + 20 + + + + color:white + + + 10 + + + + + + 650 + 1890 + 160 + 110 + + + + background-color: rgb(0, 0, 0); + + + + + + + + + 1130 + 1890 + 160 + 110 + + + + background-color: rgb(0, 0, 0); + + + + + + + + + 1175 + 1580 + 90 + 20 + + + + color:white + + + 10 + + + + + + 1080 + 1410 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + color:white + + + 6#OK次数 + + + + + + 810 + 1890 + 160 + 110 + + + + background-color: rgb(0, 0, 0); + + + + + + + + + 1175 + 1805 + 90 + 20 + + + + color:white + + + 10 + + + + + + 1034 + 565 + 0 + 0 + + + + Qt::ClickFocus + + + false + + + ... + + + + :/Cigarette/Resources/rotate.png:/Cigarette/Resources/rotate.png + + + + 40 + 40 + + + + + + + 1034 + 400 + 0 + 0 + + + + Qt::ClickFocus + + + false + + + ... + + + + :/Cigarette/Resources/rotate.png:/Cigarette/Resources/rotate.png + + + + 40 + 40 + + + + + + + 750 + 1550 + 320 + 110 + + + + background-color: rgb(0, 0, 0); + + + + + + + + + 1180 + 35 + 91 + 21 + + + + + 微软雅黑 + 12 + 50 + false + + + + color:white + + + CDTH + + + rotate_1 + groupBox_status + label_title + groupBox_op + groupBox_dev + image_label_11 + groupBox_a_1 + label_title_7 + label_title_6 + toolButton_4 + label_17 + label_18 + label_cur_time + rotate_2 + image_label_21 + lcdNumber_ok_4 + lcdNumber_ng_4 + lcdNumber_total_4 + rotate_4 + label_check_4 + label_ok_4 + label_kick_4 + groupBox_a_4 + image_label_41 + lcdNumber_kick_4 + label_ng_4 + label_kick_2 + lcdNumber_kick_2 + label_ok_2 + lcdNumber_ok_2 + lcdNumber_total_2 + label_check_2 + label_ng_2 + lcdNumber_ng_2 + groupBox_a_2 + lcdNumber_ng_3 + label_kick_3 + label_check_3 + lcdNumber_kick_3 + groupBox_a_3 + label_ng_3 + image_label_31 + label_ok_3 + lcdNumber_ok_3 + lcdNumber_total_3 + rotate_3 + lcdNumber_total_6 + lcdNumber_ng_5 + image_label_61 + label_kick_6 + label_check_5 + label_check_8 + rotate_5 + label_kick_8 + label_check_7 + label_ng_6 + rotate_6 + label_ng_5 + lcdNumber_ng_7 + label_ok_7 + groupBox_a_6 + lcdNumber_ng_6 + image_label_81 + lcdNumber_total_8 + groupBox_a_8 + groupBox_a_7 + label_kick_5 + lcdNumber_ng_8 + lcdNumber_kick_5 + label_kick_7 + lcdNumber_ok_6 + groupBox_a_5 + lcdNumber_kick_7 + image_label_51 + label_ok_5 + label_check_6 + label_ok_8 + lcdNumber_ok_8 + lcdNumber_ok_5 + label_ng_8 + lcdNumber_total_7 + lcdNumber_kick_6 + label_ng_7 + lcdNumber_total_5 + lcdNumber_ok_7 + label_ok_6 + lcdNumber_kick_8 + rotate_8 + rotate_7 + image_label_71 + image_label_22 + image_label_32 + image_label_42 + image_label_52 + image_label_62 + image_label_72 + image_label_82 + image_label_12 + location + + + + + + db_label + QLabel +
db_label.h
+
+
+ + + + +
diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/common.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/common.cpp new file mode 100644 index 00000000..469ad5a7 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/common.cpp @@ -0,0 +1,425 @@ +#include "common.h" +#include +#include "stdarg.h" +#include +#include +#include +#include +#include + +int string_split(std::string str, std::string pattern,std::vector &out) +{ + std::string::size_type pos; + int cnt = 0; + str += pattern; + int size = str.size(); + + for (int i = 0; i chars(nLength); + _vsnprintf(chars.data(), nLength, pszFmt, args); + str.assign(chars.data()); + } + va_end(args); + return str; +} + +void DrawSelectRects(cv::Mat input,DisplayLabelConf &t_DisplayLabelConf,int Cnt) +{ + if (t_DisplayLabelConf.Flag[Cnt] & DisplayLabel_Type_Bit) { + if (t_DisplayLabelConf.leftButtonDownFlag) { + cv::rectangle( + input, + cv::Point( + t_DisplayLabelConf.originalPoint.x * input.cols, + t_DisplayLabelConf.originalPoint.y * input.rows), + cv::Point( + t_DisplayLabelConf.processPoint.x * input.cols, + t_DisplayLabelConf.processPoint.y * input.rows), + cv::Scalar(127, 255, 0), + 4); + } + for (int i = 0; i < t_DisplayLabelConf.RectVet[Cnt].size(); i++) { + cv::rectangle( + input, + cv::Point( + t_DisplayLabelConf.RectVet[Cnt][i].TL.x * input.cols, + t_DisplayLabelConf.RectVet[Cnt][i].TL.y * input.rows), + cv::Point( + t_DisplayLabelConf.RectVet[Cnt][i].BR.x * input.cols, + t_DisplayLabelConf.RectVet[Cnt][i].BR.y * input.rows), + cv::Scalar(127, 255, 0), + 4); + } + } +} + +bool CheckSelectRects( + cv::Mat input, + std::vector > > &VecRects, + int VecCnt, + DisplayLabelConf &t_DisplayLabelConf, + int LabelCnt +) +{ + bool find; + if (!(t_DisplayLabelConf.Flag[LabelCnt] & DisplayLabel_Type_Bit)) + { + return false; + } + if (VecCnt < VecRects.size()) + { + for (int i = 0; i < VecRects[VecCnt].size(); i++) + { + find = false; + for(int j = 0; j < t_DisplayLabelConf.RectVet[LabelCnt].size(); j++) + { + cv::Rect LocalRect = VecRects[VecCnt][i].second; + cv::Rect CheckRect = cv::Rect( + cv::Point( + t_DisplayLabelConf.RectVet[LabelCnt][j].TL.x* input.cols, + t_DisplayLabelConf.RectVet[LabelCnt][j].TL.y* input.rows + ), + cv::Point( + t_DisplayLabelConf.RectVet[LabelCnt][j].BR.x* input.cols, + t_DisplayLabelConf.RectVet[LabelCnt][j].BR.y* input.rows + ) + ); + + cv::Rect tempRect = (LocalRect & CheckRect); + if(LocalRect == tempRect) + { + find = true; + } + } + if(!find) + { + return true; + } + } + } + return false; +} + +void getFiles(std::string path, std::vector& files) +{ + //文件句柄 + intptr_t hFile = 0; + //文件信息 + struct _finddata_t fileinfo; + std::string p; + if ((hFile = _findfirst(p.assign(path).c_str(), &fileinfo)) != -1) + { + do + { + if (!(fileinfo.attrib & _A_SUBDIR)) + { + files.push_back(fileinfo.name); + } + } while (_findnext(hFile, &fileinfo) == 0); + _findclose(hFile); + } +} + +std::string WstringToString(std::wstring wstr) +{ + int nLen = wcslen(wstr.c_str()); + std::string str; + str.resize(nLen * 2, ' '); + int nResult = WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)wstr.c_str(), -1, (LPSTR)str.c_str(), nLen * 2, NULL, NULL); + return str; +} + +/* +TCHAR*转char* +*/ +char* LPWSTR2LPSTR(LPWSTR lpwszStrIn) +{ + LPSTR pszOut = NULL; + if (lpwszStrIn != NULL) { + int nInputStrLen = wcslen(lpwszStrIn); + int nOutputStrLen = WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2; + pszOut = new char[nOutputStrLen]; + if (pszOut != NULL) { + memset(pszOut, 0x00, nOutputStrLen); + WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0); + } + } + return pszOut; +} + +//从string s的位置pos开始,向后找,找到第一个等于x的位置返回其位置 +//找到,返回找到的位置,找不到返回-1 +int __find(const std::string s, const int start, const char x) { + if (start >= s.length())return -1; + for (int i = start; i < s.length(); ++i) { + if (s[i] == x) return i; + } + return -1; +} +//双斜杠转单斜杠 +void pathConvert_Double2Single(std::string& s) { + int start = 0; + while (start < s.length()) { + int pos = s.find('\\', start); + if (pos == -1)break; + s.replace(pos, 1,"/"); + start = pos + 1; + } +} + +int CALLBACK BrowseCallbackProc( + HWND hwnd, UINT uMsg, LPARAM /*lParam*/, LPARAM lpData) +{ + LPWSTR buf[1000]; + GetCurrentDirectory(1000, (LPWSTR)buf); + if (uMsg == BFFM_INITIALIZED) + { + SendMessage(hwnd, BFFM_SETSELECTION, (WPARAM)TRUE, (LPARAM)buf); + } + + return 0; +} + +std::string SelectDirBRI() +{ + BROWSEINFO bi; + bi.hwndOwner = NULL; + bi.pidlRoot = CSIDL_DESKTOP; + bi.pszDisplayName = NULL; + bi.lpszTitle = NULL;//显?位于对话框左上部的提?信息 + bi.ulFlags = BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE;//有新建?件夹按钮 + bi.lpfn = BrowseCallbackProc; + bi.iImage = 0; + LPITEMIDLIST pidl = SHBrowseForFolder(&bi);//调?选择对话框 + if (pidl == NULL) + { + std::cout << "没有选择目录" << std::endl; + return ""; + } + TCHAR strFolder[MAX_PATH]; + SHGetPathFromIDList(pidl, strFolder); + std::string sFolder = ""; + sFolder = WstringToString(strFolder); + int pos = sFolder.find('\0'); + if (pos) + { + sFolder = sFolder.substr(0, pos); + } + return sFolder; +} + +std::string SelectFileOFN() +{ + OPENFILENAME ofn;//#include + TCHAR szOpenFileNames[80 * MAX_PATH] = { 0 }; + TCHAR szPath[MAX_PATH]; + TCHAR szFileName[80 * MAX_PATH]; + + int nLen = 0; + TCHAR* p = NULL; + ZeroMemory(&ofn, sizeof(ofn)); + + // 结构体大小 + ofn.lStructSize = sizeof(ofn); + // 拥有着窗口句柄 + ofn.hwndOwner = NULL; + // 接收返回的文件名,注意第一个字符需要为NULL + ofn.lpstrFile = szOpenFileNames; + // 缓冲区长度 + ofn.nMaxFile = sizeof(szOpenFileNames); + // _T可替换为TEXT,使用_T需要引tchar.h + ofn.lpstrFile[0] = _T('\0'); + // 设置过滤 + ofn.lpstrFilter = _T("All\0*.*\0.mp4\0*.mp4\0.avi\0*.avi\0.mkv\0*.mkv\0.rmvb\0*.rmvb\0.f4v\0*.f4v\0.flv\0*.flv\0.m4v\0*.m4v\0.mpg\0*.mpg\0\0"); + // 过滤器索引 + ofn.nFilterIndex = 1; + // 窗口标题 + ofn.lpstrTitle = _T("请选择图片"); + + // 文件必须存在、允许多选、隐藏只读选项、对话框使用资源管理器风格的用户界面 + // 官方文档:https://docs.microsoft.com/en-us/windows/win32/api/commdlg/ns-commdlg-openfilenamea + ofn.Flags = OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT | OFN_HIDEREADONLY | OFN_EXPLORER; + + // 如果打开文件失败,则不操作 + if (!::GetOpenFileName(&ofn)) { + return ""; + } + + // 把第一个文件名前的复制到szPath,即: + // 如果只选了一个文件,就复制到最后一个'/' + // 如果选了多个文件,就复制到第一个NULL字符 + lstrcpyn(szPath, szOpenFileNames, ofn.nFileOffset); + + // 当只选了一个文件时,下面这个NULL字符是必需的. + // 这里不区别对待选了一个和多个文件的情况 + szPath[ofn.nFileOffset] = '\0'; + nLen = lstrlen(szPath); + + // 如果选了多个文件,则必须加上'//' + if (szPath[nLen - 1] != '\\') { + lstrcat(szPath, _T("\\")); + } + + // 把指针移到第一个文件 + p = szOpenFileNames + ofn.nFileOffset; + + // 对szFileName进行清零 + ZeroMemory(szFileName, sizeof(szFileName)); + + // 定义字符串,用于拼接所选的所有文件的完整路径 + std::string str = ""; + + while (*p) { + // 读取文件名 + std::string fileName = LPWSTR2LPSTR(p); + // 读取文件所在文件夹路径 + std::string filePath = LPWSTR2LPSTR(szPath); + // 拼接文件完整路径 + std::string completePath = filePath + fileName; + // 拼接字符串 + str += completePath; + //移至下一个文件 + p += lstrlen(p) + 1; + } + + return str; + // 将string转为char* + //char* strc = new char[strlen(str.c_str()) + 1]; + //const char* cc = str.c_str(); + //strcpy_s(strc, str.size() + 1, cc); +} + +//https://learn.microsoft.com/en-us/windows/win32/shell/common-file-dialog?redirectedfrom=MSDN +std::string SelectDirIFD() +{ + std::string folderpath = ""; + // CoCreate the File Open Dialog object. + IFileDialog* pfd = NULL; + HRESULT hr = CoCreateInstance(CLSID_FileOpenDialog, + NULL, + CLSCTX_INPROC_SERVER, + IID_PPV_ARGS(&pfd)); + if (SUCCEEDED(hr)) + { + // Set the options on the dialog. + DWORD dwFlags; + + // Before setting, always get the options first in order + // not to override existing options. + hr = pfd->GetOptions(&dwFlags); + if (SUCCEEDED(hr)) + { + // In this case, get shell items only for file system items. + hr = pfd->SetOptions(dwFlags | FOS_PICKFOLDERS); + if (SUCCEEDED(hr)) + { + // Show the dialog + hr = pfd->Show(NULL); + if (SUCCEEDED(hr)) + { + // Obtain the result once the user clicks + // the 'Open' button. + // The result is an IShellItem object. + IShellItem* psiResult; + hr = pfd->GetResult(&psiResult); + if (SUCCEEDED(hr)) + { + // We are just going to print out the + // name of the file for sample sake. + PWSTR pszFilePath = NULL; + hr = psiResult->GetDisplayName(SIGDN_FILESYSPATH,&pszFilePath); + if (SUCCEEDED(hr)) + { + folderpath = LPWSTR2LPSTR(pszFilePath); + CoTaskMemFree(pszFilePath); + } + psiResult->Release(); + } + } + } + } + pfd->Release(); + } + return folderpath; +} + +std::string UTF8ToGBK(std::string utf8_str) { + // 获得临时变量的大小 + int wchar_len = MultiByteToWideChar(CP_UTF8, 0, utf8_str.c_str(), -1, NULL, 0); + wchar_t *wchar_buf = new wchar_t[wchar_len]; + MultiByteToWideChar(CP_UTF8, 0, utf8_str.c_str(), -1, wchar_buf, wchar_len); + + // 获得临时变量的大小 + int char_len = WideCharToMultiByte(CP_ACP, 0, wchar_buf, -1, NULL, 0, NULL, NULL); + char* char_buf = new char[char_len]; + WideCharToMultiByte(CP_ACP, 0, wchar_buf, -1, char_buf, char_len, NULL, NULL); + + std::string gbk_str(char_buf); + delete[] wchar_buf; + delete[] char_buf; + + return gbk_str; +} + +void stdString2QString(std::string str, QString& qs) { + qs = QString::fromLocal8Bit(QByteArray::fromRawData(str.c_str(), str.size())); +} +void QString2stdString(QString qs, std::string& str) { + str = qs.toLocal8Bit().constData(); +} + +std::string WString2String(const std::wstring& ws) { + // 进行地域设置,"" 表示当前OS默认的地域设置,成功则返回当前地域设置的名称 + std::string strLocate = setlocale(LC_ALL, ""); + const wchar_t* wchSrc = ws.c_str(); + size_t nDestSize = wcstombs(NULL, wchSrc, 0) + 1; + char* chDest = new char[nDestSize]; + memset(chDest, 0, nDestSize); + wcstombs(chDest, wchSrc, nDestSize); + std::string strResult = chDest; + delete[] chDest; + setlocale(LC_ALL, strLocate.c_str()); + return strResult; +} + +std::wstring String2WString(const std::string& str) { + std::wstring wContext = L""; + int len = MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.size(), NULL, 0); + WCHAR* buffer = new WCHAR[len + 1]; + MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.size(), buffer, len); + buffer[len] = '\0'; + wContext.append(buffer); + delete[] buffer; + return wContext; +} + +std::vector SpiteStringCharacter(std::string context) { + std::vector res; + std::wstring wContext = String2WString(context); + for (int i = 0; i < wContext.length(); i++) { + std::wstring tmp = wContext.substr(i, 1); + res.push_back(WString2String(tmp)); + } + return res; +} \ No newline at end of file diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/common.h b/240510-常德GDX1-1相机-1280x800/Cigarette/common.h new file mode 100644 index 00000000..ee1ea253 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/common.h @@ -0,0 +1,209 @@ +#pragma once + +#include +#include +#include +#include "basecamera.h" +#include "QtCore\qdatetime.h" + +//#define __DEBUG //debugϢ +//#define __UDPSend //緢͹ +#define USB_BASLER_NEW_FW //ʹbaslerƹ̼ +//#define IMM_PROCESS //պУź +//#define IMM_FEED_BACK //Уź +//#define ONE_TIME_SHIFT //һķͷ(Ĭϴ) +#define AI_WARM_UP //AIʶʼǰ +#define LICENSE_VERIFY //licenseļУ +//CAP_FEED_BACKDOUBLE_FEED_BACKҪһ +#if defined (ONE_TIME_SHIFT) + //#define CAP_FEED_BACK //ʱҲûвԽеĻͷ + //#define DOUBLE_FEED_BACK //һngηngź +#endif +#define identify_Hik_YSXID//ʶ𺣿YSXID +//#define __ExportData // ݵXMLĵ +//#define DRAW_RECT // 껭 + +#define Queue_Size 15 +#define Unit_Queue_Size Queue_Size*3 +#define StrobeLineTime 10000 + +#ifdef __DEBUG +#define DEBUG(format, ...) printf (format, ##__VA_ARGS__) +#else +#define DEBUG(format, ...) +#endif + +// ļ +#define CONFPATH "D:/Release/conf_path2.txt" +//#define CONFIGURE_FILE "D:/conf/conf.txt" +// תǶļ +#define ROTATE_FILE "rotate.txt" +#define MODBUS_CONFIGURE_FILE "modbus.txt" +#define PLC_CONFIG_FILE "plc.txt" +#define SELECT_RECTS_FILE "SelectRects%d%d.txt" +#define STATISTIC_FILE "camera%1_statistic.txt" +#define ALARM_RECORD_FILE "alarm.txt" + +#define OUTPUT_HIGH_WIDTH 20000 //źŵȣ΢ + +#define OP_TIME 300 //OPȨʱĬ300룩 + +#define ADMIN_TIME 600 //ADMINȨʱĬ300룩 + +#define STOP_SECONDS 3 //ٴβ䴥Զ + +int string_split(std::string str, std::string pattern,std::vector &out); +std::string format(const char *pszFmt, ...); +void getFiles(std::string path, std::vector& files); +std::string SelectDirBRI(); +std::string SelectFileOFN(); +std::string SelectDirIFD(); +std::string UTF8ToGBK(std::string utf8_str); +std::string WString2String(const std::wstring& ws); +std::wstring String2WString(const std::string& str); +std::vector SpiteStringCharacter(std::string context); + +class ConfPath { +public: + QString config_path; // ļ· + //QString config_name; // ļ + QString save_pics_path; // ͼƬ洢· + + ConfPath(){ + config_path = ""; + //config_name = ""; + save_pics_path = ""; + } +}; + +class SysConf +{ +public: + std::mutex lock; + int save; //ͼƬǷ񱣴棬0棬1NG, 2ȫ + int MisMatchAct; //λΪ1NG,0ok + int save_days; ///Ƭ + int freesize; /// 趨ͼƬСռ + std::string ComPort; ///COM + int ConfThreshold; //ʶ + int auto_open; //ǷԶ01 + int auto_work; //ǷԶʼ01 + int auto_shift; //ǷԶ࣬01 + int shift_byhand; // Ƿֶ࣬01 + QTime shiftA; //Aʱ + QTime shiftB; //Bʱ + QTime shiftC; //Cʱ + QString location; // ڵ + QString model_path; // ģļ· + QString model_name; // ģ + QString model_jpg_path; // ģͼƬ· + int timing_shift; //Ƿʱ࣬01 + int expo[NumberOfSupportedCameras]; //عʱ䣬λ΢ + int gain[NumberOfSupportedCameras]; //ģ棬Χ0~64 + int filter[NumberOfSupportedCameras];//˲ʱ + int UserID[NumberOfSupportedCameras]; + int no[NumberOfSupportedCameras][5];//ͼƬٺϸ񽺵 + int shoot[NumberOfSupportedCameras];// + std::string MonitorIP; //Զ̼ض˵IP + int MonitorPort; + int FeedbackPort; + int FilePort; + //MonitorPortΪݶ˿ + //MonitorPort+NumberOfSupportedCamerasΪͼ˿ + //MonitorPort+NumberOfSupportedCameras*2Ϊ˿,ҲFeedbackPort + //MonitorPort+NumberOfSupportedCameras*2+1Ϊ˿ + + SysConf() + { + save=0; //ͼƬǷ񱣴棬0棬1NG, 2ȫ + MisMatchAct=1; //λΪ1NG,0ok + save_days = 1; ///Ƭ + freesize = 10; /// 趨ͼƬСռ + ComPort = "COM1"; ///COM + ConfThreshold = 1; ///ٷֱʶ + auto_open=1; //ǷԶ01 + auto_work=1; //ǷԶʼ01 + auto_shift=0; //ǷԶ࣬01 + shift_byhand = 1; //Ƿֶ࣬01 + timing_shift = 0; //Ƿʱ࣬01 + location = ""; + model_path = ""; + model_name = ""; + model_jpg_path = ""; + shiftA.setHMS(0, 0, 0); + shiftB.setHMS(0, 0, 0); + shiftC.setHMS(0, 0, 0); + for(int i=0;i i) + kick[i] = 0; +#endif + } + quantity=0; //ַ + shift=0; //ַ + work=0; //ʼ/ֹͣ + no_kick=0; //ֻղ޳ģʽ + debug=0; //ģʽPLCģline4ź + reset=0; //λ + alarm=0; // + } +}; + +#define DisplayLabel_Type_Bit 0x01 //1:򿪷Χʶܣ0:رշΧʶ +#define DisplayLabel_Conf_Bit 0x02 //1:Իƾο0:ܻƾο +class RectRatio +{ +public: + RectRatio(cv::Point2f tl, cv::Point2f br) :TL(tl), BR(br) {}; + cv::Point2f TL; + cv::Point2f BR; +}; + +class DisplayLabelConf +{ +public: + std::mutex lock; + bool leftButtonDownFlag = false; //Ƶͣŵı־λ + cv::Point2f originalPoint; //ο + cv::Point2f processPoint; //οյ + + cv::Mat g_last_mat[2]; + bool g_max[2] = {false}; //ͼǷ + uint8_t Flag[2] = {0}; + std::vector RectVet[2]; +}; +void DrawSelectRects(cv::Mat input, DisplayLabelConf& t_DisplayLabelConf, int Cnt); +bool CheckSelectRects(cv::Mat input, std::vector > >& VecRects, int VecCnt, DisplayLabelConf& t_DisplayLabelConf, int LabelCnt); diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/conf_path.txt b/240510-常德GDX1-1相机-1280x800/Cigarette/conf_path.txt new file mode 100644 index 00000000..fd2a51b8 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/conf_path.txt @@ -0,0 +1,2 @@ +CONF_PATH=D:/conf-ģ1 +SAVE_PICS_PATH=D:/image-IJ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/db_label.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/db_label.cpp new file mode 100644 index 00000000..d6eaad25 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/db_label.cpp @@ -0,0 +1,46 @@ +//qlabel_doubleclick.cpp +#include "db_label.h" +#include +db_label::db_label(QWidget *parent) : QLabel(parent){ + setFocusPolicy(Qt::StrongFocus); + connect(&timer, SIGNAL(timeout()), this, SLOT(TimeOutNotify())); +} + +db_label::~db_label(){} + +void db_label::mouseDoubleClickEvent(QMouseEvent* event) { + emit SignalmouseDoubleClickEvent(event); +} + +void db_label::mouseReleaseEvent(QMouseEvent* event) { + emit SignalmouseReleaseEvent(event); + cnt++; + timer.setSingleShot(true); + timer.start(300); +} + +void db_label::mousePressEvent(QMouseEvent* event) { + emit SignalmousePressEvent(event); +} + +void db_label::mouseMoveEvent(QMouseEvent* event) { + emit SignalmouseMoveEvent(event); +} + +void db_label::keyReleaseEvent(QKeyEvent* event) +{ + emit SignalkeyReleaseEvent(event); +} + +void db_label::TimeOutNotify(void) { + timer.stop(); + switch(cnt) { + case 1:emit QlabelClick(); break; + case 2:emit QlabelDoubleClick(); break; + case 3:emit QlabelTripleClick(); break; + default:break; + } + cnt = 0; +} + + diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/db_label.h b/240510-常德GDX1-1相机-1280x800/Cigarette/db_label.h new file mode 100644 index 00000000..db3d3486 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/db_label.h @@ -0,0 +1,38 @@ +//qlabel_doubleclick.h +#ifndef QLABEL_DOUBLECLICK_H_ +#define QLABEL_DOUBLECLICK_H_ + +#include +#include +#include +#include + +class db_label : public QLabel +{ + Q_OBJECT + +public: + db_label(QWidget *parent = 0); + ~db_label(); + + void mouseDoubleClickEvent(QMouseEvent *event); + void mousePressEvent(QMouseEvent* event); + void mouseReleaseEvent(QMouseEvent* event); + void mouseMoveEvent(QMouseEvent* event); + void keyReleaseEvent(QKeyEvent* event); + QTimer timer; + int cnt = 0; +signals: + void QlabelClick(); + void QlabelDoubleClick(); + void QlabelTripleClick(); + void SignalmouseDoubleClickEvent(QMouseEvent* event); + void SignalmousePressEvent(QMouseEvent* event); + void SignalmouseReleaseEvent(QMouseEvent* event); + void SignalmouseMoveEvent(QMouseEvent* event); + void SignalkeyReleaseEvent(QKeyEvent* event); +private slots: + void TimeOutNotify(); +}; + +#endif // QLABEL_DOUBLECLICK_H_ \ No newline at end of file diff --git a/Cigarette/debugthread.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/debugthread.cpp similarity index 100% rename from Cigarette/debugthread.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/debugthread.cpp diff --git a/Cigarette/debugthread.h b/240510-常德GDX1-1相机-1280x800/Cigarette/debugthread.h similarity index 50% rename from Cigarette/debugthread.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/debugthread.h index 74098f66..cdf31afc 100644 --- a/Cigarette/debugthread.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/debugthread.h @@ -8,10 +8,15 @@ #include "SyncQueue.h" #include "basecamera.h" #include "common.h" +#include "balluffcamera.h" +#include "hikcamera.h" + extern SyncQueue *g_debug_queue[NumberOfSupportedCameras]; //相机调试模式图像队列 +extern DisplayLabelConf g_display_label_conf[NumberOfSupportedCameras]; +extern SingleCamInfoStruct SingleCamInfo[NumberOfSupportedCameras]; extern int rotationAngle[NumberOfSupportedCameras]; //图片旋转角度 -extern bool isNeddRotate[NumberOfSupportedCameras]; +extern bool isNeedRotate[NumberOfSupportedCameras]; class DebugThread : public QThread { Q_OBJECT @@ -51,15 +56,33 @@ protected: p_debug_queue->take(image); if (image.data) { - cv::cvtColor(image, image, CV_BGR2RGB); //灰度图像转为彩色图像 - if (isNeddRotate[local_camera_number]) { + //cv::cvtColor(image, image, CV_BGR2RGB); //灰度图像转为彩色图像 + // 解决进入调试模式海康彩色相机变色,关闭色彩调整巴鲁夫相机变黑的问题 + if (image.channels() == 1) + { + cv::cvtColor(image, image, CV_BGR2RGB); //灰度图像转为彩色图像 + } + if (isNeedRotate[local_camera_number]) { if(rotationAngle[local_camera_number] != (cv::ROTATE_90_COUNTERCLOCKWISE + 1)) { cv::rotate(image, image, rotationAngle[local_camera_number]); } } + //sleep(100); emit notify(local_camera_number,0,image); } +#ifdef DRAW_RECT + std::lock_guard locker2(g_display_label_conf[local_camera_number].lock); + local_DisplayLabelConf.leftButtonDownFlag = g_display_label_conf[local_camera_number].leftButtonDownFlag; + local_DisplayLabelConf.Flag[0] = g_display_label_conf[local_camera_number].Flag[0]; + local_DisplayLabelConf.Flag[1] = g_display_label_conf[local_camera_number].Flag[1]; + local_DisplayLabelConf.originalPoint = g_display_label_conf[local_camera_number].originalPoint; + local_DisplayLabelConf.processPoint = g_display_label_conf[local_camera_number].processPoint; + local_DisplayLabelConf.RectVet[0] = g_display_label_conf[local_camera_number].RectVet[0]; + local_DisplayLabelConf.RectVet[1] = g_display_label_conf[local_camera_number].RectVet[1]; + + DrawSelectRects(image, local_DisplayLabelConf, 0); +#endif } } public: @@ -67,6 +90,7 @@ public: int local_classid; bool b_quit; SyncQueue *p_debug_queue; + DisplayLabelConf local_DisplayLabelConf; }; #endif //end of _DEBUGTHREAD_H diff --git a/Cigarette/dialogin.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/dialogin.cpp similarity index 100% rename from Cigarette/dialogin.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/dialogin.cpp diff --git a/Cigarette/dialogin.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/dialogin.hpp similarity index 100% rename from Cigarette/dialogin.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/dialogin.hpp diff --git a/Cigarette/dialogin.ui b/240510-常德GDX1-1相机-1280x800/Cigarette/dialogin.ui similarity index 100% rename from Cigarette/dialogin.ui rename to 240510-常德GDX1-1相机-1280x800/Cigarette/dialogin.ui diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/dialogsetup.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/dialogsetup.cpp new file mode 100644 index 00000000..5bcadcca --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/dialogsetup.cpp @@ -0,0 +1,850 @@ +#include "dialogsetup.hpp" +#include +#include +#include +#include +#include +#include "common.h" +#include +#include +#include +#include +#include "basecamera.h" +#include //用于显示桌面 +#include //用于显示桌面 + +#include +#include "Cleanthread.h" + +extern ConfPath g_conf_path; +extern SysConf g_sys_conf; //系统配置参数 +extern QString g_admin_pswd; //管理员密码 +extern QString g_op_pswd; //操作员密码 + +void task_osk() +{ + system("start /b C:\\Windows\\system32\\osk.exe"); +} + +DialogSetup::DialogSetup(QWidget * parent) : QDialog(parent) { + ui.setupUi(this); + InitPtrMat(); + this->setWindowFlags(Qt::FramelessWindowHint);//窗口可移动 + + for(int i=0;isetValidator(new QIntValidator(0, 1000000, this)); + lineEdit_expo_mat[i]->setText(QString::number(g_sys_conf.expo[i])); + lineEdit_gain_mat[i]->setValidator(new QIntValidator(0, 64, this)); + lineEdit_gain_mat[i]->setText(QString::number(g_sys_conf.gain[i])); + lineEdit_filter_mat[i]->setValidator(new QIntValidator(0, 1000000, this)); + lineEdit_filter_mat[i]->setText(QString::number(g_sys_conf.filter[i])); + } + + if (g_sys_conf.auto_open == 1) + { + ui.checkBox_auto_open->setChecked(true); + } + else { + ui.checkBox_auto_open->setChecked(false); + } + if (g_sys_conf.auto_work == 1) + { + ui.checkBox_auto_work->setChecked(true); + } + else { + ui.checkBox_auto_work->setChecked(false); + } + + if (!g_conf_path.config_path.isEmpty()) { + // 如果配置文件存储路径非空 + QDir* dirinfo = new QDir(g_conf_path.config_path); + if (!dirinfo->exists()) { + // 如果文件夹信息不存在 + delete dirinfo, dirinfo = nullptr; + g_conf_path.config_path = "D:/conf"; + } + dirinfo->setNameFilters(QStringList("conf.txt")); + QStringList fileList = dirinfo->entryList(QDir::Files); + fileList.removeOne("."); + fileList.removeOne(".."); + delete dirinfo, dirinfo = nullptr; + } + else { + // 如果路径空 + g_conf_path.config_path = "D:/conf"; + } + ui.comboBox_config_path->addItem(g_conf_path.config_path); + // 更换选择文件 + connect(ui.comboBox_config_path, SIGNAL(currentIndexChanged(int)), this, SLOT(onComboBoxConfSelect(int))); + + if (!g_sys_conf.model_path.isEmpty()) { + // 如果曾经选择过模型文件夹 + // 查看model_path路径下文件夹详情 + QDir* dirinfo = new QDir(g_sys_conf.model_path); + if (!dirinfo->exists()) + delete dirinfo, dirinfo = nullptr; + dirinfo->setNameFilters(QStringList("*.weights")); // 设置过滤器 + QStringList fileList = dirinfo->entryList(QDir::Files); + fileList.removeOne("."); + fileList.removeOne(".."); + ui.comboBox_model_path->clear(); + ui.comboBox_model_path->addItems(fileList); + if (!g_sys_conf.model_name.isEmpty()) { + // 如果曾选择过模型,则在comboBox显示选择模型的文件名 + ui.comboBox_model_path->setCurrentText(g_sys_conf.model_name); + } + delete dirinfo, dirinfo = nullptr; + } + else { + // 如果未曾选择过模型文件夹 + if (!g_sys_conf.model_name.isEmpty()) { + // 如果曾经选择过模型文件 + ui.comboBox_model_path->addItem(g_sys_conf.model_name); + } + } + // 更换模型事件 + connect(ui.comboBox_model_path, SIGNAL(currentIndexChanged(int)), this, SLOT(onComboBoxSelect(int))); + + if (!g_conf_path.save_pics_path.isEmpty()) { + // 如果配置文件里保存图片路径非空 + QDir* dirinfo = new QDir(g_conf_path.save_pics_path); + if (!dirinfo->exists()) { + //delete dirinfo, dirinfo = nullptr; + dirinfo->mkdir(g_conf_path.save_pics_path); + } + + //ui.comboBox_save_pics_path->clear(); + ui.comboBox_save_pics_path->addItem(g_conf_path.save_pics_path); + delete dirinfo, dirinfo = nullptr; + } + else { + QString dirPath = "D:/image"; + QDir *dirinfo = new QDir(dirPath); + if (!dirinfo->exists()) + delete dirinfo, dirinfo = nullptr; + //ui.comboBox_save_pics_path->clear(); + ui.comboBox_save_pics_path->setCurrentText(dirPath); + g_conf_path.save_pics_path = dirPath; + } + // 更换选择文件 + connect(ui.comboBox_save_pics_path, SIGNAL(currentIndexChanged(int)), this, SLOT(onComboBoxPicsPathSelect(int))); + + + switch (g_sys_conf.save) + { + case 0: + ui.radioButton_none->setChecked(true); + break; + case 1: + ui.radioButton_ng->setChecked(true); + break; + case 2: + ui.radioButton_all->setChecked(true); + break; + default: + break; + } + // +#ifndef __DEBUG + ui.pushButton_testimg->setVisible(false); + ui.pushButton_testimgs->setVisible(false); +#endif +} + +DialogSetup::~DialogSetup() { + +} + +void DialogSetup::onComboBoxPicsPathSelect(int index) { + QString cp = ui.comboBox_save_pics_path->currentText(); + //QMessageBox::information(this, QStringLiteral("提示"), QStringLiteral("您选择的项为") + cp, NULL); + g_conf_path.save_pics_path = cp; + write_conf_path(); +} + +void DialogSetup::onComboBoxConfSelect(int index) { + QString cp = ui.comboBox_config_path->currentText(); + //QMessageBox::information(this, QStringLiteral("提示"), QStringLiteral("您选择的项为") + cp, NULL); + g_conf_path.config_path = cp; + write_conf_path(); +} + +void DialogSetup::onComboBoxSelect(int index) { + // 获取comboBox当前内容 + QString ct = ui.comboBox_model_path->currentText(); + // 保存到配置文件中 + g_sys_conf.model_name = ct; +} + +void DialogSetup::on_toolButton_keyboard_released() +{ + std::thread osk_thread = std::thread(task_osk); + osk_thread.detach(); +} +void DialogSetup::on_pushButton_exit_released() +{ + if (QMessageBox::Yes == QMessageBox::critical(NULL, QStringLiteral("退出系统"), QStringLiteral("确定退出系统?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes)) + { + emit system_exit(); + this->close(); + } +} + +void DialogSetup::on_pushButton_desktop_released() +{ + CoInitialize(0); + IShellDispatch4 * pdisp = NULL; + CoCreateInstance(CLSID_Shell, NULL, CLSCTX_ALL, __uuidof(IShellDispatch4), (void **)&pdisp); + pdisp->ToggleDesktop(); // 这句是用来切换桌面的 + pdisp->Release(); + CoUninitialize(); +} + +void DialogSetup::on_pushButton_expo_released() +{ + for(int i=0;itext()).toInt(); + g_sys_conf.gain[i] = (lineEdit_gain_mat[i]->text()).toInt(); + } + QMessageBox::information(NULL, QStringLiteral("提示"), QStringLiteral("设置成功"), QMessageBox::Ok); +} + +void DialogSetup::on_checkBox_auto_open_clicked(bool checked) +{ + if (checked) + { + g_sys_conf.auto_open = 1; + } + else + { + g_sys_conf.auto_open = 0; + } +} + +void DialogSetup::on_checkBox_auto_work_clicked(bool checked) +{ + if (checked) + { + g_sys_conf.auto_work = 1; + } + else + { + g_sys_conf.auto_work = 0; + } +} + +void DialogSetup::on_pushButton_filter_released() +{ + for(int i=0;itext()).toInt(); + } + QMessageBox::information(NULL, QStringLiteral("提示"), QStringLiteral("设置成功"), QMessageBox::Ok); +} + +void DialogSetup::on_pushButton_image_released() +{ + if (ui.radioButton_none->isChecked()) + { + g_sys_conf.save = 0; + } + if (ui.radioButton_ng->isChecked()) + { + g_sys_conf.save = 1; + } + if (ui.radioButton_all->isChecked()) + { + g_sys_conf.save = 2; + } + QMessageBox::information(NULL, QStringLiteral("提示"), QStringLiteral("设置成功"), QMessageBox::Ok); +} + +void DialogSetup::on_pushButton_pswd_released() +{ + QString md5Str = QCryptographicHash::hash((ui.lineEdit_old->text()).toLatin1(), QCryptographicHash::Md5).toHex(); + if (md5Str.compare(g_admin_pswd, Qt::CaseInsensitive) == 0) + { + QString pswd_new = ui.lineEdit_new->text(); + QString pswd_confirm = ui.lineEdit_confirm->text(); + if (pswd_new.compare(pswd_confirm, Qt::CaseInsensitive) == 0) + { + g_admin_pswd = QCryptographicHash::hash(pswd_new.toLatin1(), QCryptographicHash::Md5).toHex(); + write_pswd(); + QMessageBox::information(NULL, QStringLiteral("提示"), QStringLiteral("管理员密码修改成功"), QMessageBox::Ok); + } + else { + QMessageBox::information(NULL, QStringLiteral("提示消息"), QStringLiteral("新密码两次输入不一致,请重新输入"), QMessageBox::Ok); + } + } + else { + QMessageBox::information(NULL, QStringLiteral("提示消息"), QStringLiteral("原密码错误,请重新输入"), QMessageBox::Ok); + } +} +void DialogSetup::on_pushButton_pswd_op_released() +{ + QString md5Str = QCryptographicHash::hash((ui.lineEdit_old_op->text()).toLatin1(), QCryptographicHash::Md5).toHex(); + if (md5Str.compare(g_op_pswd, Qt::CaseInsensitive) == 0) + { + QString pswd_new = ui.lineEdit_new_op->text(); + QString pswd_confirm = ui.lineEdit_confirm_op->text(); + if (pswd_new.compare(pswd_confirm, Qt::CaseInsensitive) == 0) + { + g_op_pswd = QCryptographicHash::hash(pswd_new.toLatin1(), QCryptographicHash::Md5).toHex(); + write_pswd_op(); + QMessageBox::information(NULL, QStringLiteral("提示"), QStringLiteral("操作员密码修改成功"), QMessageBox::Ok); + } + else { + QMessageBox::information(NULL, QStringLiteral("提示消息"), QStringLiteral("新密码两次输入不一致,请重新输入"), QMessageBox::Ok); + } + } + else { + QMessageBox::information(NULL, QStringLiteral("提示消息"), QStringLiteral("原密码错误,请重新输入"), QMessageBox::Ok); + } +} +void DialogSetup::on_pushButton_save_released() +{ + //存图设置 + if (ui.radioButton_none->isChecked()) + { + g_sys_conf.save = 0; + } + if (ui.radioButton_ng->isChecked()) + { + g_sys_conf.save = 1; + } + if (ui.radioButton_all->isChecked()) + { + g_sys_conf.save = 2; + } + for(int i=0;itext()).toInt(); + g_sys_conf.gain[i] = (lineEdit_gain_mat[i]->text()).toInt(); + g_sys_conf.filter[i] = (lineEdit_filter_mat[i]->text()).toInt(); + } + + write_config(); + QMessageBox::information(NULL, QStringLiteral("提示"), QStringLiteral("保存参数成功,部分配置需要重启程序后生效"), QMessageBox::Ok); +} + +void DialogSetup::on_pushButton_close_released() +{ + this->close(); +} + +void DialogSetup::on_pushButton_clear_pic_released() +{ + QThread* handleThread = new QThread(); + CleanWorkThread* cleanWorkThread = new CleanWorkThread(); + + cleanWorkThread->moveToThread(handleThread); + + connect(handleThread, &QThread::started, cleanWorkThread, &CleanWorkThread::startWork); + connect(cleanWorkThread, &CleanWorkThread::workStart, cleanWorkThread, &CleanWorkThread::setSel); + connect(cleanWorkThread, &CleanWorkThread::workFinished, cleanWorkThread, &CleanWorkThread::deleteLater); + connect(cleanWorkThread, &CleanWorkThread::destroyed, handleThread, &QThread::quit); + connect(handleThread, &QThread::finished, handleThread, &QThread::deleteLater); + handleThread->start(); +} + +void DialogSetup::on_toolButton_choose_config_path_released() { + QString dirName = QFileDialog::getExistingDirectory(this, QStringLiteral("请选择配置文件所在文件夹"), "./"); + if (dirName.isEmpty()) { + // 点击取消按钮 + if (g_conf_path.config_path.isEmpty()) + dirName = "D:/conf"; + else + dirName = g_conf_path.config_path; + } + + QDir* dirinfo = new QDir(dirName); + if (!dirinfo->exists()) + delete dirinfo, dirinfo = nullptr; + + dirinfo->setNameFilters(QStringList("conf.txt")); + QStringList fileList = dirinfo->entryList(QDir::Files); + + if (fileList.count() == 0) { + dirName = "D:/conf"; + } + + //fileList.removeOne("."); + //fileList.removeOne(".."); + + QFileInfo fileInfo(dirName); + + if (fileInfo.isDir() && ui.comboBox_config_path->findText(fileInfo.absoluteFilePath())) { + ui.comboBox_config_path->addItem(fileInfo.absoluteFilePath()); + ui.comboBox_config_path->setCurrentText(fileInfo.absoluteFilePath()); + } + + g_conf_path.config_path = dirName; + connect(ui.comboBox_config_path, SIGNAL(currentIndexChanged(int)), this, SLOT(onComboBoxConfSelect(int))); + write_conf_path(); + delete dirinfo, dirinfo = nullptr; +} + +void DialogSetup::on_toolButton_choose_model_path_released() { + // 点击浏览文件按钮后触发的事件 + QString dirName = QFileDialog::getExistingDirectory(this, QStringLiteral("请选择模型所在文件夹"), "./"); + //std::cout << "dirName is " << dirName.toStdString().c_str() << std::endl; + //std::cout << "g_sys_conf.dir_path is " << g_sys_conf.dir_path.toStdString().c_str() << std::endl; + //std::cout << "g_sys_conf.model_name is " << g_sys_conf.model_name.toStdString().c_str() << std::endl; + + if (dirName.isEmpty()) { + if (g_sys_conf.model_path.isEmpty()) + dirName = "D:/model"; + else + dirName = g_sys_conf.model_path; + + ui.comboBox_model_path->addItem(dirName); + g_sys_conf.model_path = dirName; + g_sys_conf.model_name = "jd.weights"; + } + QDir* dirinfo = new QDir(dirName); + if (!dirinfo->exists()) + delete dirinfo, dirinfo = nullptr; + dirinfo->setNameFilters(QStringList("*.weights")); + QStringList fileList = dirinfo->entryList(QDir::Files); + if (fileList.count() == 0) { + g_sys_conf.model_path = "D:/model"; + g_sys_conf.model_name = "jd.weights"; + } + else + g_sys_conf.model_path = dirName; + + fileList.removeOne("."); + fileList.removeOne(".."); + + ui.comboBox_model_path->clear(); + ui.comboBox_model_path->addItems(fileList); + //g_sys_conf.model_name = ui.comboBox_model_path->currentText(); + connect(ui.comboBox_model_path, SIGNAL(currentIndexChanged(int)), this, SLOT(onComboBoxSelect(int))); + + delete dirinfo, dirinfo = nullptr; +} + +void DialogSetup::on_toolButton_choose_save_pics_path_released() { + // 改变图片的存储路径 + QString dirName = QFileDialog::getExistingDirectory(this, QStringLiteral("请选择图片存储路径"), "./"); + // 如果没有选择路径 + if (dirName.isEmpty()) { + if (g_conf_path.save_pics_path.isEmpty()) + dirName = "D:/image"; + else + dirName = g_conf_path.save_pics_path; + //ui.comboBox_save_pics_path->addItem(dirName); + //return; + } + + QDir* dirinfo = new QDir(dirName); + if (!dirinfo->exists()) + delete dirinfo, dirinfo = nullptr; + + QFileInfo fileInfo(dirName); + if (fileInfo.isDir() && ui.comboBox_save_pics_path->findText(fileInfo.absoluteFilePath())) { + ui.comboBox_save_pics_path->addItem(fileInfo.absoluteFilePath()); + ui.comboBox_save_pics_path->setCurrentText(fileInfo.absoluteFilePath()); + } + + g_conf_path.save_pics_path = dirName; + + connect(ui.comboBox_save_pics_path, SIGNAL(currentIndexChanged(int)), this, SLOT(onComboBoxPicsPathSelect(int))); + write_conf_path(); + delete dirinfo, dirinfo = nullptr; +} + +void DialogSetup::on_toolButton_choose_path_jpg_released() { + QString JpgPath = QFileDialog::getOpenFileName(this, "选择jpg文件", "/", "jpg files(*.jpg)"); + if (JpgPath.isEmpty()) { + return; + } + else { + if (ui.comboBox_2->findText(JpgPath) == -1) { + ui.comboBox_2->addItem(JpgPath); // 在comboBox中显示文件路径 + g_sys_conf.model_jpg_path = JpgPath; // 将选择的路径写入conf配置文件中 + } + } +} + +void DialogSetup::write_pswd() +{ + std::fstream cfg_file; + cfg_file.open("D:/Release/pswd.txt", std::ios::out | std::ios::trunc); + if (cfg_file.good()) + { + char buf[256]; + memset(buf, 0, 256); + sprintf(buf, "%s", g_admin_pswd.toStdString().c_str()); + cfg_file.write(buf, strlen(buf)); + } + cfg_file.close(); +} +void DialogSetup::write_pswd_op() +{ + std::fstream cfg_file; + cfg_file.open("D:/Release/pswd_op.txt", std::ios::out | std::ios::trunc); + if (cfg_file.good()) + { + char buf[256]; + memset(buf, 0, 256); + sprintf(buf, "%s", g_op_pswd.toStdString().c_str()); + cfg_file.write(buf, strlen(buf)); + } + cfg_file.close(); +} +void DialogSetup::write_conf_path() { + std::fstream cfg_file; + cfg_file.open(CONFPATH, std::ios::out | std::ios::trunc); + if (cfg_file.good()) { + char buf[256]; + memset(buf, 0, 256); + sprintf(buf, "CONF_PATH=%s\n", g_conf_path.config_path.toLocal8Bit().constData()); + cfg_file.write(buf, strlen(buf)); + //memset(buf, 0, 256); + //sprintf(buf, "CONF_NAME=%s\n", g_conf_path.config_name.toStdString().c_str()); + //cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "SAVE_PICS_PATH=%s\n", g_conf_path.save_pics_path.toLocal8Bit().constData()); + cfg_file.write(buf, strlen(buf)); + } + cfg_file.close(); +} +void DialogSetup::write_config() +{ + std::fstream cfg_file; + QString cfg_path = g_conf_path.config_path + "/conf.txt"; + cfg_file.open(cfg_path.toLocal8Bit().constData(), std::ios::out | std::ios::trunc); + if (cfg_file.good()) + { + char buf[256]; + memset(buf, 0, 256); + sprintf(buf, "SAVE=%d\n", g_sys_conf.save); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "MISMATCHACT=%d\n", g_sys_conf.MisMatchAct); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256);/// + sprintf(buf, "SAVE_DAYS=%d\n", g_sys_conf.save_days); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256);/// + sprintf(buf, "FREESIZE=%d\n", g_sys_conf.freesize); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256);/// + sprintf(buf, "ComPort=%s\n", g_sys_conf.ComPort); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256);/// + sprintf(buf, "CONFTHRESHOLD=%d\n", g_sys_conf.ConfThreshold); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "AUTO_OPEN=%d\n", g_sys_conf.auto_open); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "AUTO_WORK=%d\n", g_sys_conf.auto_work); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "AUTO_SHIFT=%d\n", g_sys_conf.auto_shift); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "TIMING_SHIFT=%d\n", g_sys_conf.timing_shift); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "SHIFT_BYHAND=%d\n", g_sys_conf.shift_byhand); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "SHIFT_A=%d|%d\n", g_sys_conf.shiftA.hour(), g_sys_conf.shiftA.minute()); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "SHIFT_B=%d|%d\n", g_sys_conf.shiftB.hour(), g_sys_conf.shiftB.minute()); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "SHIFT_C=%d|%d\n", g_sys_conf.shiftC.hour(), g_sys_conf.shiftC.minute()); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "LOCATION=%s\n", g_sys_conf.location.toStdString().c_str()); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "MODELPATH=%s\n", g_sys_conf.model_path.toStdString().c_str()); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "MODELNAME=%s\n", g_sys_conf.model_name.toStdString().c_str()); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "JPGPATH=%s\n", g_sys_conf.model_jpg_path.toStdString().c_str()); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "*****************************************\n"); + cfg_file.write(buf, strlen(buf)); +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>0) + memset(buf, 0, 256); + sprintf(buf, "EXPO1=%d\n", g_sys_conf.expo[0]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "GAIN1=%d\n", g_sys_conf.gain[0]); + cfg_file.write(buf, strlen(buf)); + sprintf(buf, "FILTER1=%d\n", g_sys_conf.filter[0]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "USERID1=%d\n", g_sys_conf.UserID[0]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "NO1=%d|%d|%d|%d|%d\n", g_sys_conf.no[0][0],g_sys_conf.no[0][1],g_sys_conf.no[0][2], g_sys_conf.no[0][3], g_sys_conf.no[0][4]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "SHOOT1=%d\n", g_sys_conf.shoot[0]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "*****************************************\n"); + cfg_file.write(buf, strlen(buf)); +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>1) + memset(buf, 0, 256); + sprintf(buf, "EXPO2=%d\n", g_sys_conf.expo[1]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "GAIN2=%d\n", g_sys_conf.gain[1]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "FILTER2=%d\n", g_sys_conf.filter[1]); + cfg_file.write(buf, strlen(buf)); + sprintf(buf, "USERID2=%d\n", g_sys_conf.UserID[1]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "NO2=%d|%d|%d\n", g_sys_conf.no[1][0],g_sys_conf.no[1][1],g_sys_conf.no[1][2]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "SHOOT2=%d\n", g_sys_conf.shoot[1]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "*****************************************\n"); + cfg_file.write(buf, strlen(buf)); +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>2) + memset(buf, 0, 256); + sprintf(buf, "EXPO3=%d\n", g_sys_conf.expo[2]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "GAIN3=%d\n", g_sys_conf.gain[2]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "FILTER3=%d\n", g_sys_conf.filter[2]); + cfg_file.write(buf, strlen(buf)); + sprintf(buf, "USERID3=%d\n", g_sys_conf.UserID[2]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "NO3=%d|%d|%d\n", g_sys_conf.no[2][0],g_sys_conf.no[2][1],g_sys_conf.no[2][2]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "SHOOT3=%d\n", g_sys_conf.shoot[2]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "*****************************************\n"); + cfg_file.write(buf, strlen(buf)); +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>3) + memset(buf, 0, 256); + sprintf(buf, "EXPO4=%d\n", g_sys_conf.expo[3]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "GAIN4=%d\n", g_sys_conf.gain[3]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "FILTER4=%d\n", g_sys_conf.filter[3]); + cfg_file.write(buf, strlen(buf)); + sprintf(buf, "USERID4=%d\n", g_sys_conf.UserID[3]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "NO4=%d|%d|%d\n", g_sys_conf.no[3][0],g_sys_conf.no[3][1],g_sys_conf.no[3][2]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "SHOOT4=%d\n", g_sys_conf.shoot[3]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "*****************************************\n"); + cfg_file.write(buf, strlen(buf)); +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>4) + memset(buf, 0, 256); + sprintf(buf, "EXPO5=%d\n", g_sys_conf.expo[4]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "GAIN5=%d\n", g_sys_conf.gain[4]); + cfg_file.write(buf, strlen(buf)); + sprintf(buf, "FILTER5=%d\n", g_sys_conf.filter[4]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "USERID5=%d\n", g_sys_conf.UserID[4]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "NO5=%d|%d|%d\n", g_sys_conf.no[4][0],g_sys_conf.no[4][1],g_sys_conf.no[4][2]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "SHOOT5=%d\n", g_sys_conf.shoot[4]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "*****************************************\n"); + cfg_file.write(buf, strlen(buf)); +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>5) + memset(buf, 0, 256); + sprintf(buf, "EXPO6=%d\n", g_sys_conf.expo[5]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "GAIN6=%d\n", g_sys_conf.gain[5]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "FILTER6=%d\n", g_sys_conf.filter[5]); + cfg_file.write(buf, strlen(buf)); + sprintf(buf, "USERID6=%d\n", g_sys_conf.UserID[5]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "NO6=%d|%d|%d\n", g_sys_conf.no[5][0],g_sys_conf.no[5][1],g_sys_conf.no[5][2]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "SHOOT6=%d\n", g_sys_conf.shoot[5]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "*****************************************\n"); + cfg_file.write(buf, strlen(buf)); +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>6) + memset(buf, 0, 256); + sprintf(buf, "EXPO7=%d\n", g_sys_conf.expo[6]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "GAIN7=%d\n", g_sys_conf.gain[6]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "FILTER7=%d\n", g_sys_conf.filter[6]); + cfg_file.write(buf, strlen(buf)); + sprintf(buf, "USERID7=%d\n", g_sys_conf.UserID[6]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "NO7=%d|%d|%d\n", g_sys_conf.no[6][0],g_sys_conf.no[6][1],g_sys_conf.no[6][2]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "SHOOT7=%d\n", g_sys_conf.shoot[6]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "*****************************************\n"); + cfg_file.write(buf, strlen(buf)); +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>7) + memset(buf, 0, 256); + sprintf(buf, "EXPO8=%d\n", g_sys_conf.expo[7]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "GAIN8=%d\n", g_sys_conf.gain[7]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "FILTER8=%d\n", g_sys_conf.filter[7]); + cfg_file.write(buf, strlen(buf)); + sprintf(buf, "USERID8=%d\n", g_sys_conf.UserID[7]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "NO8=%d|%d|%d\n", g_sys_conf.no[7][0],g_sys_conf.no[7][1],g_sys_conf.no[7][2]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "SHOOT8=%d\n", g_sys_conf.shoot[7]); + cfg_file.write(buf, strlen(buf)); + memset(buf, 0, 256); + sprintf(buf, "*****************************************\n"); + cfg_file.write(buf, strlen(buf)); +#endif + memset(buf, 0, 256); + sprintf(buf, "MonitorIP=%s\n", g_sys_conf.MonitorIP.c_str()); + cfg_file.write(buf, strlen(buf)); + + memset(buf, 0, 256); + cfg_file.write(buf, strlen(buf)); + sprintf(buf, "MonitorPort=%d\n", g_sys_conf.MonitorPort); + cfg_file.write(buf, strlen(buf)); + } + cfg_file.close(); +} + +#define InitPtrMatDef(a,b)\ + lineEdit_expo_mat[a]=ui.lineEdit_expo_##b; \ + lineEdit_gain_mat[a]=ui.lineEdit_gain_##b; \ + lineEdit_filter_mat[a]=ui.lineEdit_filter_##b; +void DialogSetup::InitPtrMat() +{ +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>0) + InitPtrMatDef(0, 1); +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>1) + InitPtrMatDef(1, 2); +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>2) + InitPtrMatDef(2, 3); +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>3) + InitPtrMatDef(3, 4); +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>4) + InitPtrMatDef(4, 5); +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>5) + InitPtrMatDef(5, 6); +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>6) + InitPtrMatDef(6, 7); +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>7) + InitPtrMatDef(7, 8); +#endif +} + +void DialogSetup::on_pushButton_config_released() +{ + if (m_camera_glue)delete m_camera_glue; + m_camera_glue = new camera_glue(this); + connect(m_camera_glue, &camera_glue::sendMsgToDialogSetup,this, &DialogSetup::recMsgFromDialogConfig); + connect(this, &DialogSetup::sendMsgToConfig,m_camera_glue, &camera_glue::recMsgFromDialogSetup); + m_camera_glue->show(); + m_camera_glue->move(this->geometry().center() - m_camera_glue->rect().center());//移动父窗口中心位置 + emit sendMsgToConfig(g_sys_conf.no); +} +void DialogSetup::recMsgFromDialogConfig(int ptr[][5]) +{ + for(int i=0;ishow(); + m_change_shift->move(this->geometry().center() - m_change_shift->rect().center()); + emit sendMsgToShift (g_sys_conf.shiftA, g_sys_conf.shiftB, g_sys_conf.shiftC); +} +void DialogSetup::on_pushButton_statistic_released() +{ + if (m_output_statistic)delete m_output_statistic; + m_output_statistic = new output_statistic(this); + connect(this, &DialogSetup::sendMsgToOutput, m_output_statistic, &output_statistic::recMsgFromDialogSetup); + m_output_statistic->show(); + m_output_statistic->move(this->geometry().center() - m_output_statistic->rect().center()); + emit sendMsgToOutput(); +} +void DialogSetup::recMsgFromChangeShift(QTime timeA, QTime timeB, QTime timeC) +{ + g_sys_conf.shiftA.setHMS(timeA.hour(), timeA.minute(), 0); + g_sys_conf.shiftB.setHMS(timeB.hour(), timeB.minute(), 0); + g_sys_conf.shiftC.setHMS(timeC.hour(), timeC.minute(), 0); +} +#ifdef __DEBUG +void DialogSetup::on_pushButton_testimg_released() +{ + emit _testimg(); +} +void DialogSetup::on_pushButton_testimgs_released() +{ + emit _testimgs(); +} +#endif \ No newline at end of file diff --git a/Cigarette/dialogsetup.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/dialogsetup.hpp similarity index 69% rename from Cigarette/dialogsetup.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/dialogsetup.hpp index da0fa4cf..18b0e85f 100644 --- a/Cigarette/dialogsetup.hpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/dialogsetup.hpp @@ -2,7 +2,8 @@ #include #include "ui_dialogsetup.h" #include "basecamera.h" - +#include +#include #include #include #include @@ -13,20 +14,27 @@ signals : void system_exit(); void sendMsgToShift(QTime timeA, QTime timeB, QTime timeC); void sendMsgToOutput(); - void sendMsgToConfig(int ptr[][3]); + void sendMsgToConfig(int ptr[][5]); +#ifdef __DEBUG + void _testimg(); + void _testimgs(); +#endif private slots : void on_toolButton_keyboard_released(); void on_pushButton_exit_released(); void on_pushButton_save_released(); void on_pushButton_close_released(); + void on_toolButton_choose_config_path_released(); + void on_toolButton_choose_model_path_released(); + void on_toolButton_choose_path_jpg_released(); + void on_toolButton_choose_save_pics_path_released(); void on_pushButton_desktop_released(); - void on_pushButton_image_released(); void on_pushButton_pswd_released(); void on_pushButton_pswd_op_released(); - void on_pushButton_expo_released(); void on_pushButton_filter_released(); + void on_pushButton_clear_pic_released(); void on_pushButton_config_released(); void on_pushButton_change_released(); @@ -35,8 +43,15 @@ private slots : void on_checkBox_auto_open_clicked(bool checked); void on_checkBox_auto_work_clicked(bool checked); - void recMsgFromDialogConfig(int ptr[][3]); + void recMsgFromDialogConfig(int ptr[][5]); void recMsgFromChangeShift(QTime timeA, QTime timeB, QTime timeC); + void onComboBoxSelect(int index); + void onComboBoxConfSelect(int index); + void onComboBoxPicsPathSelect(int index); +#ifdef __DEBUG + void on_pushButton_testimg_released(); + void on_pushButton_testimgs_released(); +#endif public: DialogSetup(QWidget * parent = Q_NULLPTR); ~DialogSetup(); @@ -47,6 +62,7 @@ public: static void write_pswd(); static void write_pswd_op(); static void write_config(); + static void write_conf_path(); public: camera_glue *m_camera_glue=NULL; diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/dialogsetup.ui b/240510-常德GDX1-1相机-1280x800/Cigarette/dialogsetup.ui new file mode 100644 index 00000000..026dd21c --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/dialogsetup.ui @@ -0,0 +1,2174 @@ + + + DialogSetup + + + + 0 + 0 + 661 + 716 + + + + + 微软雅黑 + 14 + 75 + true + + + + DialogSetup + + + background-color: rgb(240, 240, 240); + + + + + 0 + 0 + 731 + 1091 + + + + + 0 + 0 + + + + + 0 + 0 + + + + true + + + + + 0 + 0 + 729 + 1089 + + + + + 0 + 0 + + + + + 670 + 900 + + + + + + 10 + 60 + 641 + 61 + + + + + 微软雅黑 + 12 + 75 + true + + + + 启动设置 + + + + + 30 + 30 + 220 + 22 + + + + + 微软雅黑 + 12 + 75 + true + + + + 自动打开所有相机 + + + + + + 380 + 30 + 261 + 21 + + + + + 微软雅黑 + 12 + 75 + true + + + + 程序启动后自动开始工作 + + + + + + + 10 + 410 + 641 + 81 + + + + + 微软雅黑 + 12 + 75 + true + + + + 管理员密码修改 + + + + + 540 + 20 + 91 + 51 + + + + + 微软雅黑 + 12 + 75 + true + + + + 确定 + + + + + + 190 + 30 + 61 + 31 + + + + + 微软雅黑 + 12 + 75 + true + + + + 新密码: + + + + + + 440 + 32 + 91 + 31 + + + + + 微软雅黑 + 12 + 75 + true + + + + + + + QLineEdit::Password + + + + + + 250 + 30 + 101 + 31 + + + + + 微软雅黑 + 12 + 75 + true + + + + + + + QLineEdit::Password + + + + + + 360 + 30 + 81 + 31 + + + + + 微软雅黑 + 12 + 75 + true + + + + 确认密码: + + + + + + 90 + 30 + 91 + 31 + + + + + 微软雅黑 + 12 + 75 + true + + + + + + + QLineEdit::Password + + + + + + 20 + 30 + 61 + 31 + + + + + 微软雅黑 + 12 + 75 + true + + + + 原密码: + + + + + + + 10 + 180 + 640 + 71 + + + + + 微软雅黑 + 12 + 75 + true + + + + 相机参数 + + + + + 20 + 40 + 180 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + 1#相机曝光时间(微秒): + + + + + + 210 + 40 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + + + + + + + 210 + 2170 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + + + + + + + 20 + 2170 + 180 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + 2#相机曝光时间(微秒): + + + + + + 510 + 2170 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + + + + + + + 320 + 40 + 180 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + 1#相机模拟增益(0~64): + + + + + + 320 + 2170 + 180 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + 2#相机模拟增益(0~64): + + + + + + 510 + 40 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + + + + + + + 210 + 2200 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + + + + + + + 20 + 1680 + 180 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + 4#相机曝光时间(微秒): + + + + + + 210 + 1680 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + + + + + + + 20 + 2200 + 180 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + 3#相机曝光时间(微秒): + + + + + + 510 + 1680 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + + + + + + + 320 + 2200 + 180 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + 3#相机模拟增益(0~64): + + + + + + 320 + 1680 + 180 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + 4#相机模拟增益(0~64): + + + + + + 510 + 2200 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + + + + + + + 680 + 90 + 91 + 51 + + + + + 微软雅黑 + 12 + 75 + true + + + + 确定 + + + + + + 20 + 1220 + 180 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + 5#相机曝光时间(微秒): + + + + + + 20 + 1250 + 180 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + 6#相机曝光时间(微秒): + + + + + + 20 + 1280 + 180 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + 7#相机曝光时间(微秒): + + + + + + 210 + 1220 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + + + + + + + 210 + 1250 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + + + + + + + 210 + 1280 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + + + + + + + 320 + 1220 + 180 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + 5#相机模拟增益(0~64): + + + + + + 320 + 1250 + 180 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + 6#相机模拟增益(0~64): + + + + + + 320 + 1280 + 180 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + 7#相机模拟增益(0~64): + + + + + + 510 + 1220 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + + + + + + + 510 + 1250 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + + + + + + + 510 + 1280 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + + + + + + + 20 + 1310 + 180 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + 8#相机曝光时间(微秒): + + + + + + 210 + 1310 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + + + + + + + 320 + 1310 + 180 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + 8#相机模拟增益(0~64): + + + + + + 510 + 1310 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + + + + + + + + 10 + 570 + 641 + 61 + + + + + 微软雅黑 + 12 + 75 + true + + + + 滤波设置 + + + + + 20 + 30 + 180 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + 1#相机滤波时间(微秒): + + + + + + 210 + 30 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + + + + + + + 510 + 2130 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + + + + + + + 320 + 2130 + 180 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + 2#相机滤波时间(微秒): + + + + + + 510 + 1610 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + + + + + + + 20 + 2160 + 180 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + 3#相机滤波时间(微秒): + + + + + + 210 + 2160 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + + + + + + + 320 + 1610 + 180 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + 4#相机滤波时间(微秒): + + + + + + 680 + 50 + 91 + 51 + + + + + 微软雅黑 + 12 + 75 + true + + + + 确定 + + + + + + 20 + 1150 + 180 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + 5#相机滤波时间(微秒): + + + + + + 320 + 1150 + 180 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + 6#相机滤波时间(微秒): + + + + + + 20 + 1180 + 180 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + 7#相机滤波时间(微秒): + + + + + + 320 + 1180 + 180 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + 8#相机滤波时间(微秒): + + + + + + 210 + 1150 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + + + + + + + 210 + 1180 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + + + + + + + 510 + 1150 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + + + + + + + 510 + 1180 + 90 + 20 + + + + + 微软雅黑 + 10 + 75 + true + + + + + + + + + + + 10 + 120 + 641 + 61 + + + + + 微软雅黑 + 12 + 75 + true + + + + 存图设置 + + + + + 30 + 30 + 90 + 21 + + + + + 微软雅黑 + 12 + 75 + true + + + + 不存 + + + + + + 230 + 30 + 90 + 21 + + + + + 微软雅黑 + 12 + 75 + true + + + + 存NG + + + + + + 440 + 30 + 90 + 21 + + + + + 微软雅黑 + 12 + 75 + true + + + + 全存 + + + + + + 570 + 25 + 50 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + 确定 + + + + + + + 110 + 650 + 131 + 51 + + + + + 微软雅黑 + 12 + 75 + true + + + + 保存参数 + + + + + + 520 + 10 + 130 + 50 + + + + + 微软雅黑 + 12 + 75 + true + + + + 退出系统 + + + + + + 10 + 490 + 641 + 81 + + + + + 微软雅黑 + 12 + 75 + true + + + + 操作员密码修改 + + + + + 190 + 30 + 61 + 31 + + + + + 微软雅黑 + 12 + 75 + true + + + + 新密码: + + + + + + 440 + 32 + 91 + 31 + + + + + 微软雅黑 + 12 + 75 + true + + + + + + + QLineEdit::Password + + + + + + 250 + 30 + 101 + 31 + + + + + 微软雅黑 + 12 + 75 + true + + + + + + + QLineEdit::Password + + + + + + 360 + 30 + 81 + 31 + + + + + 微软雅黑 + 12 + 75 + true + + + + 确认密码: + + + + + + 90 + 30 + 91 + 31 + + + + + 微软雅黑 + 12 + 75 + true + + + + + + + QLineEdit::Password + + + + + + 20 + 30 + 61 + 31 + + + + + 微软雅黑 + 12 + 75 + true + + + + 原密码: + + + + + + 540 + 20 + 91 + 51 + + + + + 微软雅黑 + 12 + 75 + true + + + + 确定 + + + + + + + 370 + 650 + 131 + 51 + + + + + 微软雅黑 + 12 + 75 + true + + + + 关闭窗口 + + + + + + 220 + 10 + 130 + 50 + + + + + 微软雅黑 + 12 + 75 + true + + + + 显示桌面 + + + + + + 110 + 10 + 91 + 41 + + + + + 微软雅黑 + 12 + 75 + true + + + + border-image: url(:/Cigarette/Resources/keyboard.png); + + + + + + + + + 20 + 20 + 81 + 21 + + + + + 微软雅黑 + 12 + 75 + true + + + + 系统设置 + + + + + + 40 + 260 + 101 + 41 + + + + + 微软雅黑 + 12 + 75 + true + + + + 配方设置 + + + + + + 40 + 360 + 101 + 41 + + + + + 微软雅黑 + 12 + 75 + true + + + + 换班设置 + + + + + + 40 + 310 + 101 + 41 + + + + + 微软雅黑 + 12 + 75 + true + + + + 产量统计 + + + + + + 620 + 1610 + 27 + 25 + + + + + 微软雅黑 + + + + ... + + + + + + 190 + 1610 + 171 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + 模型存储路径 + + + Qt::AlignCenter + + + + + + 370 + 1610 + 241 + 30 + + + + + 微软雅黑 + 10 + + + + + + + 340 + 1020 + 91 + 21 + + + + + 微软雅黑 + 75 + true + + + + 图片存储路径 + + + + + + 440 + 1020 + 171 + 25 + + + + + 微软雅黑 + + + + + + + 620 + 1020 + 27 + 26 + + + + + 微软雅黑 + + + + ... + + + + + + 370 + 10 + 130 + 50 + + + + + 微软雅黑 + 12 + 75 + true + + + + 清理图片 + + + + + + 520 + 650 + 131 + 21 + + + + + 微软雅黑 + 75 + true + + + + 测试单张图片 + + + + + + 520 + 680 + 131 + 21 + + + + + 微软雅黑 + 75 + true + + + + 测试多张图片 + + + + + + 190 + 280 + 171 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + 配置文件存储路径 + + + Qt::AlignCenter + + + + + + 370 + 280 + 241 + 30 + + + + + 微软雅黑 + 10 + + + + + + + 620 + 280 + 27 + 25 + + + + + 微软雅黑 + + + + ... + + + + + + 190 + 350 + 171 + 30 + + + + + 微软雅黑 + 12 + 75 + true + + + + 图片存储路径 + + + Qt::AlignCenter + + + + + + 370 + 350 + 241 + 30 + + + + + 微软雅黑 + 10 + + + + + + + 620 + 350 + 27 + 25 + + + + + 微软雅黑 + + + + ... + + + + + + + + + + + diff --git a/Cigarette/dialogsetuppasswd.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/dialogsetuppasswd.cpp similarity index 100% rename from Cigarette/dialogsetuppasswd.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/dialogsetuppasswd.cpp diff --git a/Cigarette/dialogsetuppasswd.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/dialogsetuppasswd.hpp similarity index 100% rename from Cigarette/dialogsetuppasswd.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/dialogsetuppasswd.hpp diff --git a/Cigarette/dialogsetuppasswd.ui b/240510-常德GDX1-1相机-1280x800/Cigarette/dialogsetuppasswd.ui similarity index 100% rename from Cigarette/dialogsetuppasswd.ui rename to 240510-常德GDX1-1相机-1280x800/Cigarette/dialogsetuppasswd.ui diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/exportData.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/exportData.cpp new file mode 100644 index 00000000..d05cb144 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/exportData.cpp @@ -0,0 +1,342 @@ +#include "exportData.h" +#include "QtCore\qfile.h" +#include "QtCore\qtextstream.h" +#include +//#include +#include +#include +#include +#include +#pragma comment(lib, "Wininet.lib") + +Cigarette* cg; +extern SyncQueue<_XMLExportDataInfo>* export_XMLData_Info_queue; +extern ConfPath g_conf_path; +extern bool flag; + +ExportDataThread::ExportDataThread(QObject* parent) : QThread(parent) +{ + cg->read_conf(g_conf_path); + for (int index = 0; index < NumberOfSupportedCameras; index++) + { + XMLError error; + pDocument[index] = new tinyxml2::XMLDocument(); + QString xmlPath = QString(EXPORTDATA_FILE).arg(index); + QString filePath = g_conf_path.config_path + "/" + xmlPath; + + error = pDocument[index]->LoadFile(filePath.toLocal8Bit().constData()); + if (error != XML_SUCCESS) { + XMLDeclaration* declaration = pDocument[index]->NewDeclaration(); + pDocument[index]->InsertFirstChild(declaration); + } + } + + hint = InternetOpen(0, INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0); + if (hint == NULL) { + return; + } + + // FTPַ + string ftpServer = "192.168.1.170"; + /* ˿ںţһΪ21 */ + int port = 666; + /* û */ + string userName = "FTP2"; + /* */ + string pwd = "123"; + // ftp + /*hftp = InternetConnectA(hint, ftpServer.c_str(), port, userName.c_str(), pwd.c_str(), INTERNET_SERVICE_FTP, 0, 0); + if (hftp == NULL) { + qDebug() << "ftp connect failed"; + return; + }*/ +} + +void ExportDataThread::init() +{ + b_quit = false; + flag = false; +} + +void ExportDataThread::start_work() +{ + start(HighestPriority); +} + +void ExportDataThread::stop() +{ + b_quit = true; + _XMLExportDataInfo data; + export_XMLData_Info_queue->put(data); + InternetCloseHandle(hftp); + InternetCloseHandle(hint); +} + +bool _ExportDataInfo::getAverageData(map &averageData, int index) +{ + tinyxml2::XMLDocument doc; + //char xmlPath[256]; + XMLError error; + map data; + //memset(xmlPath, 0, 256); + QString xmlPath = QString(EXPORTDATA_FILE).arg(index); + //sprintf(xmlPath, EXPORTDATA_FILE, index); + QString filePath = g_conf_path.config_path + "/" + xmlPath; + error = doc.LoadFile(filePath.toLocal8Bit().constData()); + if (error != XML_SUCCESS) + if (doc.LoadFile(filePath.toLocal8Bit().constData()) != 0) + { + cout << "load xml file failed" << endl; + return false; + } + XMLElement* root = doc.RootElement(); + XMLElement* userNode = root->FirstChildElement("Camera"); + data["CameraId"] = index; + data["IsNG"] = 0; + data["IsJdExist"] = 0; + data["Total"] = 0; + while (userNode != NULL) + { + if (atoi(userNode->Attribute("Id")) == index) { + data["IsNG"]++; + data["IsJdExist"]++; + data["Total"]++; + XMLElement* IsNgNode = userNode->FirstChildElement("IsNG"); + data["IsNg"] = strcmp(IsNgNode->GetText(), "TRUE"); + XMLElement* IsJdExistNode = userNode->FirstChildElement("IsJdExist"); + if (strcmp(IsJdExistNode->GetText(), "TRUE") == 0) + data["IsJdExist"]++; + XMLElement* TimeCostNode = userNode->FirstChildElement("TimeCost"); + data["TimeCost"] += stof(TimeCostNode->GetText()); + } + userNode = userNode->NextSiblingElement();//һֵܽڵ + } + if (data["Total"] == 0) + return false; + data["TimeCost"] = data["TimeCost"] / data["Total"]; + + averageData = data; + + return true; +} + +int ExportDataThread::insertXMLNode(const char* xmlPath, _XMLExportDataInfo& data) +{ + XMLElement* root = pDocument[data.cameraId]->RootElement(); + + if (root == NULL) { + root = pDocument[data.cameraId]->NewElement("Root"); + pDocument[data.cameraId]->InsertEndChild(root); + pDocument[data.cameraId]->SaveFile(xmlPath); + //return 0; + } + + /// ͳ + // ܼ + XMLElement* Total= pDocument[data.cameraId]->NewElement("TotalDatas"); + + XMLElement* time = pDocument[data.cameraId]->NewElement("CurrentTime"); + QString currentTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"); + time->InsertEndChild(pDocument[data.cameraId]->NewText(currentTime.toStdString().c_str())); + Total->InsertEndChild(time); + + XMLElement* TotalCheckNum = pDocument[data.cameraId]->NewElement("TotalCheckNum"); + char s[20]; + TotalCheckNum->InsertEndChild(pDocument[data.cameraId]->NewText(itoa(data.TotalCheckNum, s, 10))); + Total->InsertEndChild(TotalCheckNum); + + // ޳ + XMLElement* TotalKickNum = pDocument[data.cameraId]->NewElement("TotalKickNum"); + TotalKickNum->InsertEndChild(pDocument[data.cameraId]->NewText(itoa(data.TotalKickNum, s, 10))); + Total->InsertEndChild(TotalKickNum); + + root->InsertEndChild(Total); + + /// + // id & + XMLElement* CameraNode = pDocument[data.cameraId]->NewElement("Camera"); + CameraNode->SetAttribute("Count ", data.cameraTotal); + CameraNode->SetAttribute("Id", data.cameraId); + + XMLElement* JudgeNum = pDocument[data.cameraId]->NewElement("JudgeNum"); + // + XMLElement* checkNum = pDocument[data.cameraId]->NewElement("CheckNum"); + checkNum->InsertEndChild(pDocument[data.cameraId]->NewText(itoa(data.checkNum, s, 10))); + JudgeNum->InsertEndChild(checkNum); + // ok + XMLElement* okNum = pDocument[data.cameraId]->NewElement("OkNum"); + okNum->InsertEndChild(pDocument[data.cameraId]->NewText(itoa(data.okNum, s, 10))); + JudgeNum->InsertEndChild(okNum); + // ng + XMLElement* ngNum = pDocument[data.cameraId]->NewElement("NgNum"); + ngNum->InsertEndChild(pDocument[data.cameraId]->NewText(itoa(data.ngNum, s, 10))); + JudgeNum->InsertEndChild(ngNum); + // ʵ޳ͨ޳ʱΪ޳ + XMLElement* kickNum = pDocument[data.cameraId]->NewElement("KickNum"); + kickNum->InsertEndChild(pDocument[data.cameraId]->NewText(itoa(data.kickNum, s, 10))); + JudgeNum->InsertEndChild(kickNum); + + // ϸ + XMLElement* PassRate = pDocument[data.cameraId]->NewElement("PassRate"); + std::string temp_str = std::to_string(data.PassRate * 100); + const char* temp_char = temp_str.c_str(); + PassRate->InsertEndChild(pDocument[data.cameraId]->NewText(temp_char)); + JudgeNum->InsertEndChild(PassRate); + + // ޳ + XMLElement* KickRate = pDocument[data.cameraId]->NewElement("KickRate"); + temp_str = std::to_string(data.KickRate * 100); + temp_char = temp_str.c_str(); + KickRate->InsertEndChild(pDocument[data.cameraId]->NewText(temp_char)); + JudgeNum->InsertEndChild(KickRate); + + // ʶ + XMLElement* JdNum = pDocument[data.cameraId]->NewElement("JdNum"); + JdNum->InsertEndChild(pDocument[data.cameraId]->NewText(data.jdNum.toStdString().c_str())); + JudgeNum->InsertEndChild(JdNum); + + XMLElement* shotCounts = pDocument[data.cameraId]->NewElement("ShotCounts"); + shotCounts->InsertEndChild(pDocument[data.cameraId]->NewText(itoa(data.shotCounts, s, 10))); + JudgeNum->InsertEndChild(shotCounts); + + CameraNode->InsertEndChild(JudgeNum); + + // ɼٶ + XMLElement* speed = pDocument[data.cameraId]->NewElement("Speed"); + + XMLElement* AcquisitionSpeed = pDocument[data.cameraId]->NewElement("AcquisitionSpeed"); + AcquisitionSpeed->InsertEndChild(pDocument[data.cameraId]->NewText(data.AcquisitionSpeed.toStdString().c_str())); + speed->InsertEndChild(AcquisitionSpeed); + // ٶ + XMLElement* DetectSpeed = pDocument[data.cameraId]->NewElement("DetectSpeed"); + DetectSpeed->InsertEndChild(pDocument[data.cameraId]->NewText(data.DetectSpeed.toStdString().c_str())); + speed->InsertEndChild(DetectSpeed); + CameraNode->InsertEndChild(speed); + + root->InsertEndChild(CameraNode); + + return pDocument[data.cameraId]->SaveFile(xmlPath); +} + +void ExportDataThread::run() +{ + while (!b_quit) { + _XMLExportDataInfo element; + export_XMLData_Info_queue->take(element); + + if (element.cameraId != -1 && flag == true) { + char buf[256]; + memset(buf, 0, 256); + QString xmlPath = QString(EXPORTDATA_FILE).arg(element.cameraId); + QString filePath = g_conf_path.config_path + "/" + xmlPath; + sprintf(buf, filePath.toLocal8Bit().constData(), element.cameraId); + insertXMLNode(buf, element); + QString remotePath = "/tmp/" + xmlPath; + ConnectServer(filePath, remotePath); + } + } + + for (int index = 0; index < NumberOfSupportedCameras; index++) { + pDocument[index]->~XMLDocument(); + } +} + +//*****************************************ѾԺãû߼ǰҪ********************** +void ExportDataThread::check_save_dir(std::string dir_path) +{ + // Ŀ·ڣһһ + // Ŀ·ʽΪ:"./dir/dir1/.../" + + if (FALSE == FtpSetCurrentDirectoryA(hftp, dir_path.c_str())) { + FtpSetCurrentDirectoryA(hftp, "/"); + int pos = 1; + while (pos > 0) { + // ӵڶ/ʼҵĿ·еġ/λ + pos = dir_path.find_first_of('/', pos + 1); + if (pos == -1) + break; + string tempPath = dir_path.substr(0, pos + 1); + FtpCreateDirectoryA(hftp, tempPath.c_str()); + } + //FtpSetCurrentDirectoryA(hftp, dir_path.c_str()); + } +} + +void ExportDataThread::EDrecMsgFromCigarette(){ + flag = true; +} + +void ExportDataThread::ConnectServer(QString srcPath, QString destPath) { + string filePath = srcPath.toLocal8Bit().constData(); + string remotePath = destPath.toLocal8Bit().constData(); + + std::vector files; + // жϴļļбʶ + int size = 0; + struct stat st; + stat(filePath.c_str(), &st); + if (st.st_mode & S_IFDIR) { + //qDebug() << "filePath is Directory"; + // ȡļļ + GetFiles(filePath, files); + size = files.size(); + } + + DWORD dw = GetLastError(); + + // ϴļԴΪһļ + if (size == 0) { + int pos = remotePath.find_last_of('/'); + string destFileName = remotePath.substr(pos + 1); + string tempPath = remotePath.substr(0, pos + 1); + check_save_dir(tempPath); + if (!FtpPutFileA(hftp, filePath.c_str(), remotePath.c_str(), FTP_TRANSFER_TYPE_BINARY, 0)) + qDebug() << "ftp put file failed because" << dw; + } + // ϴԴΪһļ + else{ + for (int i = 0; i < size; i++) { + string tempFilePath = (string(files[i]).erase(0, filePath.length() + 1)).c_str(); + // ȡϴ·еļ + int pos = tempFilePath.find_last_of('/'); + string destFileName = tempFilePath.substr(pos + 1); + check_save_dir(remotePath + tempFilePath.substr(0, pos + 1)); + if(!FtpPutFileA(hftp, files[i].c_str(), destFileName.c_str(), FTP_TRANSFER_TYPE_BINARY, 0)) + qDebug() << "ftp put files failed because " << dw; + } + } +} + +void ExportDataThread::GetDataFromSaveThread(QString filePath) { + QString remotePath; + remotePath = filePath.mid(filePath.indexOf("image") - 1); + ConnectServer(filePath, remotePath); +} + +//*****************************************ѾԺãû߼ǰҪ********************** +void ExportDataThread::GetFiles(string path, std::vector& files) { + //ļ + intptr_t hFile = 0; + //ļϢĽṹ + struct _finddata_t fileinfo; + string p; + if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1) + { + // "\\*"ָȡļµ͵ļ + do + { + //Ŀ¼,֮ + //,б + if ((fileinfo.attrib & _A_SUBDIR)) + { + if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0) + GetFiles(p.assign(path).append("/").append(fileinfo.name), files); + } + else + { + files.push_back(p.assign(path).append("/").append(fileinfo.name)); + } + } while (_findnext(hFile, &fileinfo) == 0); + _findclose(hFile); + } +} \ No newline at end of file diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/exportData.h b/240510-常德GDX1-1相机-1280x800/Cigarette/exportData.h new file mode 100644 index 00000000..9a3f2688 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/exportData.h @@ -0,0 +1,139 @@ +#pragma once +#include +#include "ui_output_statistic.h" +#include +#include +#include +#include +#include +#include "basecamera.h" +#include "tinyxml2.h" +#include "common.h" +#include "cigarette.h" +#include "qdebug.h" +#define EXPORTDATA_FILE "camera%1_data_info.xml" +#include + +using namespace tinyxml2; + +class _XMLExportDataInfo { +public: + // ܵͳ + long long cameraTotal; + int TotalCheckNum; // ܼ + int TotalKickNum; // ޳ + double PassRate; // ϸ + double KickRate; // ޳ + // + int cameraId; + int shotCounts; // + int checkNum; // + int okNum; // ok + int ngNum; // ng + int kickNum; // ʵ޳ͨ޳ʱΪ޳ + QString AcquisitionSpeed; // ɼٶ + QString jdNum; // ʶ + QString DetectSpeed; // ٶ(ʶʱ) + + _XMLExportDataInfo() { + // ܵͳ + TotalCheckNum = 0; // ܼ + TotalKickNum = 0; // ޳ + PassRate = 0.0; // ϸ + KickRate = 0.0; // ޳ + cameraId = -1; + jdNum = QString("0,0,0"); + // + shotCounts = 0; + checkNum = 0; + okNum = 0; + ngNum = 0; + kickNum = 0; // ʵ޳ͨ޳ʱΪ޳ + AcquisitionSpeed = "0"; // ɼٶ + DetectSpeed = "0"; // ٶ + } +}; + +class _ExportDataInfo +{ + struct JdPoint // + { + string x; + string y; + }; + +public: + int cameraId; + int shotCounts; + int jd[20]; + string timeCost; + float jdInterval; + bool isNg; + bool isJdExist[20]; + long long cameraTotal; + std::vector jdPointsLocation; + float jdSize[20]; + + bool getAverageData(map& averageData, int index); + + string getPoint(int index) { + string point = "("; + point += jdPointsLocation.at(index).x + ',' + jdPointsLocation.at(index).y + ')'; + return point; + } + + _ExportDataInfo() + { + cameraId = -1; + jdInterval = 0.0; + isNg = false; + for (int i = 0; i < 20; i++)isJdExist[i] = false; + for (int i = 0; i < 20; i++)jd[i] = 0; + timeCost = "0ms"; + for (int i = 0; i < 20; i++)jdSize[i] = 0.0; + shotCounts = 0; + } +}; + +//extern SyncQueue<_ExportDataInfo>* export_Data_Info_queue; +extern SyncQueue<_XMLExportDataInfo>* export_XMLData_Info_queue; + +class ExportDataThread : public QThread +{ + Q_OBJECT +signals: + + +public: + ExportDataThread(QObject* parent = 0); + ~ExportDataThread() + { + stop(); + //export_Data_Info_queue->put(data); + quit(); + wait(); + } + + void init(); + void start_work(); + void stop(); + //int insertXMLNode(const char* xmlPath, _ExportDataInfo& data); + int insertXMLNode(const char* xmlPath, _XMLExportDataInfo& data); + void ConnectServer(QString srcPath, QString destPath); + void GetFiles(string path, std::vector& files); + +protected: + void run(); + void check_save_dir(std::string dir_path); +public: + bool b_quit; + tinyxml2::XMLDocument *pDocument[NumberOfSupportedCameras]; + //int flag; + + HINTERNET hint; + HINTERNET hftp; + +public slots: + void EDrecMsgFromCigarette(); + void GetDataFromSaveThread(QString filePath); +}; diff --git a/Cigarette/hikcamera.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/hikcamera.cpp similarity index 84% rename from Cigarette/hikcamera.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/hikcamera.cpp index 1405ba55..54541ac1 100644 --- a/Cigarette/hikcamera.cpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/hikcamera.cpp @@ -21,10 +21,10 @@ int HIKCamera::Enumerate() int status = 0; // ch:枚举设备 | Enum device - + memset(&stDeviceList, 0, sizeof(MV_CC_DEVICE_INFO_LIST)); - status = MV_CC_EnumDevices(MV_GIGE_DEVICE| MV_USB_DEVICE, &stDeviceList); + status = MV_CC_EnumDevices(MV_GIGE_DEVICE | MV_USB_DEVICE, &stDeviceList); if (MV_OK == status) { @@ -34,5 +34,4 @@ int HIKCamera::Enumerate() { return 0; } - } diff --git a/Cigarette/hikcamera.h b/240510-常德GDX1-1相机-1280x800/Cigarette/hikcamera.h similarity index 100% rename from Cigarette/hikcamera.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/hikcamera.h diff --git a/Cigarette/main.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/main.cpp similarity index 85% rename from Cigarette/main.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/main.cpp index e4b551de..017e33c1 100644 --- a/Cigarette/main.cpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/main.cpp @@ -6,22 +6,24 @@ #pragma comment(lib,"CryptoToolLib.lib") #include "CryptoToolLib.h" #endif + int main(int argc, char *argv[]) { #if defined LICENSE_VERIFY - if(!VerifyLicense(addtime)) + if(!VerifyLicense()) { exit(0); } #endif qRegisterMetaType("cv::Mat"); QApplication a(argc, argv); - QPixmap pixmap("splash.jpg"); + QPixmap pixmap("D:/Release/splash.jpg"); QSplashScreen splash(pixmap); splash.show(); a.processEvents(); Cigarette w; //w.show(); + //w.showMaximized(); w.showFullScreen(); splash.finish(&w); return a.exec(); diff --git a/Cigarette/modbus/modbus-private.h b/240510-常德GDX1-1相机-1280x800/Cigarette/modbus/modbus-private.h similarity index 100% rename from Cigarette/modbus/modbus-private.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/modbus/modbus-private.h diff --git a/Cigarette/modbus/modbus-rtu-private.h b/240510-常德GDX1-1相机-1280x800/Cigarette/modbus/modbus-rtu-private.h similarity index 100% rename from Cigarette/modbus/modbus-rtu-private.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/modbus/modbus-rtu-private.h diff --git a/Cigarette/modbus/modbus-rtu.h b/240510-常德GDX1-1相机-1280x800/Cigarette/modbus/modbus-rtu.h similarity index 100% rename from Cigarette/modbus/modbus-rtu.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/modbus/modbus-rtu.h diff --git a/Cigarette/modbus/modbus-tcp-private.h b/240510-常德GDX1-1相机-1280x800/Cigarette/modbus/modbus-tcp-private.h similarity index 100% rename from Cigarette/modbus/modbus-tcp-private.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/modbus/modbus-tcp-private.h diff --git a/Cigarette/modbus/modbus-tcp.h b/240510-常德GDX1-1相机-1280x800/Cigarette/modbus/modbus-tcp.h similarity index 100% rename from Cigarette/modbus/modbus-tcp.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/modbus/modbus-tcp.h diff --git a/Cigarette/modbus/modbus-version.h b/240510-常德GDX1-1相机-1280x800/Cigarette/modbus/modbus-version.h similarity index 100% rename from Cigarette/modbus/modbus-version.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/modbus/modbus-version.h diff --git a/Cigarette/modbus/modbus.h b/240510-常德GDX1-1相机-1280x800/Cigarette/modbus/modbus.h similarity index 100% rename from Cigarette/modbus/modbus.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/modbus/modbus.h diff --git a/Cigarette/modbus/modbus.lib b/240510-常德GDX1-1相机-1280x800/Cigarette/modbus/modbus.lib similarity index 100% rename from Cigarette/modbus/modbus.lib rename to 240510-常德GDX1-1相机-1280x800/Cigarette/modbus/modbus.lib diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/output_statistic.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/output_statistic.cpp new file mode 100644 index 00000000..b2471495 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/output_statistic.cpp @@ -0,0 +1,100 @@ +#include "output_statistic.h" +#include "QtCore\qfile.h" +#include "QtCore\qtextstream.h" +#include "exportData.h" +#include + +extern ConfPath g_conf_path; + +#define output_init(a, b)\ +textBrowser_mat[a] = ui.textBrowser_##b; + +output_statistic::output_statistic(QDialog *parent) + : QDialog(parent) +{ + ui.setupUi(this); + this->setWindowFlags(windowFlags()&~Qt::WindowContextHelpButtonHint); + +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras > 0) + output_init(0, 1); +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras > 1) + output_init(1, 2); +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras > 2) + output_init(2, 3); +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras > 3) + output_init(3, 4); +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras > 4) + output_init(4, 5); +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras > 5) + output_init(5, 6); +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras > 6) + output_init(6, 7); +#endif +#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras > 7) + output_init(7, 8); +#endif +} + +output_statistic::~output_statistic() +{ +} + +void output_statistic::recMsgFromDialogSetup() +{ +#ifdef __ExportData + _ExportDataInfo data; + map averageData[NumberOfSupportedCameras]; + + ui.tabWidget->setTabVisible(1, false); + ui.tabWidget->setTabVisible(2, false); + ui.tabWidget->setTabVisible(3, false); + ui.tabWidget->setTabVisible(4, false); + ui.tabWidget->setTabVisible(5, false); + ui.tabWidget->setTabVisible(6, false); + ui.tabWidget->setTabVisible(7, false); + ui.tabWidget->setTabText(0, "Statistical data"); + + + for (int index = 0; index < NumberOfSupportedCameras; index++) { + data.getAverageData(averageData[index], index); + QString text; + text.append(" CameraId: "); + text.append(std::to_string((int)averageData[index]["CameraId"]).c_str()); + text.append("\n IsNG: "); + text.append(std::to_string((int)averageData[index]["IsNG"]).c_str()); + text.append("\n IsJdExist: "); + text.append(std::to_string((int)averageData[index]["IsJdExist"]).c_str()); + text.append("\n TimeCost: "); + text.append(std::to_string(averageData[index]["TimeCost"]).c_str()); + text.append("\n*************************************************\n"); + ui.textBrowser_1->insertPlainText(text); + } + +#else + QString file_path, file_name; + QFile file; + for (int i = 0; i < NumberOfSupportedCameras; i++) { + file_name = QString(STATISTIC_FILE).arg(i); + file_path = g_conf_path.config_path + "/" + file_name; + file.setFileName(file_path); + if (file.open(QIODevice::ReadOnly | QIODevice::Text)) + { + QTextStream in(&file); + //in.setCodec("UTF-8"); + textBrowser_mat[i]->setText(in.readAll()); + } + else { + std::cout << "can not open statistic file" << std::endl; + } + file.close(); + this->show(); + } +#endif + //this->show(); +} \ No newline at end of file diff --git a/Cigarette/output_statistic.h b/240510-常德GDX1-1相机-1280x800/Cigarette/output_statistic.h similarity index 78% rename from Cigarette/output_statistic.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/output_statistic.h index c13bafab..3738d3db 100644 --- a/Cigarette/output_statistic.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/output_statistic.h @@ -1,6 +1,7 @@ #pragma once #include +#include "common.h" #include "ui_output_statistic.h" class output_statistic : public QDialog @@ -13,6 +14,7 @@ public: private: Ui::output_statistic ui; + QTextBrowser* textBrowser_mat[NumberOfSupportedCameras]; public slots: void recMsgFromDialogSetup(); diff --git a/Cigarette/output_statistic.ui b/240510-常德GDX1-1相机-1280x800/Cigarette/output_statistic.ui similarity index 72% rename from Cigarette/output_statistic.ui rename to 240510-常德GDX1-1相机-1280x800/Cigarette/output_statistic.ui index 93f9afb0..a4a0cfd9 100644 --- a/Cigarette/output_statistic.ui +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/output_statistic.ui @@ -6,7 +6,7 @@ 0 0 - 573 + 810 390 @@ -22,9 +22,14 @@ QFrame::Raised - + + + + 微软雅黑 + + 0 @@ -32,22 +37,12 @@ Camera1 - + - - - Camera2 - - - - - - -
diff --git a/Cigarette/plc_item.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/plc_item.cpp similarity index 100% rename from Cigarette/plc_item.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/plc_item.cpp diff --git a/Cigarette/plc_item.h b/240510-常德GDX1-1相机-1280x800/Cigarette/plc_item.h similarity index 100% rename from Cigarette/plc_item.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/plc_item.h diff --git a/Cigarette/plcsetup.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/plcsetup.cpp similarity index 96% rename from Cigarette/plcsetup.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/plcsetup.cpp index 67c73d37..1d4928c0 100644 --- a/Cigarette/plcsetup.cpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/plcsetup.cpp @@ -8,10 +8,10 @@ #include #include #include "PLCDevice.h" -#define PLC_ITEM_FILE "../conf/plc.txt" +#define PLC_ITEM_FILE "plc.txt" extern PLCDevice * m_PLCDevice; - +extern ConfPath g_conf_path; extern bool g_plc_dialog_open; //是否打开plc配置对话框 void task_osk_() @@ -244,7 +244,10 @@ void PlcSetup::handleTimeout() void PlcSetup::read_plc_items() { std::fstream cfg_file; - cfg_file.open(PLC_ITEM_FILE); + QString plc_file = g_conf_path.config_path + "/" + PLC_CONFIG_FILE; + + cfg_file.open(plc_file.toLocal8Bit().constData()); + if (!cfg_file.is_open()) { std::cout << "Error: Open production file " << PLC_ITEM_FILE << std::endl; @@ -277,7 +280,8 @@ void PlcSetup::read_plc_items() void PlcSetup::save_plc_items() { std::fstream cfg_file; - cfg_file.open(PLC_ITEM_FILE, std::ios::out | std::ios::trunc); + QString plc_file = g_conf_path.config_path + "/" + PLC_CONFIG_FILE; + cfg_file.open(plc_file.toLocal8Bit().constData(), std::ios::out | std::ios::trunc); if (cfg_file.good()) { for (int i = 0; i < m_plc_items.size(); i++) diff --git a/Cigarette/plcsetup.hpp b/240510-常德GDX1-1相机-1280x800/Cigarette/plcsetup.hpp similarity index 100% rename from Cigarette/plcsetup.hpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/plcsetup.hpp diff --git a/Cigarette/plcsetup.ui b/240510-常德GDX1-1相机-1280x800/Cigarette/plcsetup.ui similarity index 100% rename from Cigarette/plcsetup.ui rename to 240510-常德GDX1-1相机-1280x800/Cigarette/plcsetup.ui diff --git a/Cigarette/pswd.txt b/240510-常德GDX1-1相机-1280x800/Cigarette/pswd.txt similarity index 100% rename from Cigarette/pswd.txt rename to 240510-常德GDX1-1相机-1280x800/Cigarette/pswd.txt diff --git a/Cigarette/pswd_op.txt b/240510-常德GDX1-1相机-1280x800/Cigarette/pswd_op.txt similarity index 100% rename from Cigarette/pswd_op.txt rename to 240510-常德GDX1-1相机-1280x800/Cigarette/pswd_op.txt diff --git a/Cigarette/savethread.h b/240510-常德GDX1-1相机-1280x800/Cigarette/savethread.h similarity index 79% rename from Cigarette/savethread.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/savethread.h index 1775e25d..057f2fb8 100644 --- a/Cigarette/savethread.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/savethread.h @@ -8,9 +8,7 @@ #include #include #include - #include - #include #include @@ -20,7 +18,7 @@ class SaveThread : public QThread { Q_OBJECT signals: - + void sendDataToExport(QString filePath); public: SaveThread(QObject *parent = 0): QThread(parent) @@ -47,6 +45,7 @@ public: { b_quit = true; } + protected: void run() { @@ -55,7 +54,6 @@ protected: std::pair element; g_save_queue->take(element); std::string file_name = element.first; - //std::cout << file_name << std::endl; image = element.second; if (image.data) { @@ -63,6 +61,12 @@ protected: std::string dir_path = file_name.substr(0, found); check_save_dir(dir_path); bool b_save = cv::imwrite(file_name, image); + if (b_save) + { + //sendDataToExport(QString::fromStdString(file_name)); + sendDataToExport(QString::fromLocal8Bit(QByteArray::fromRawData(file_name.c_str(), file_name.size()))); + //qDebug() << "Save pic successfully"; + } } } } @@ -78,7 +82,9 @@ protected: } if (!b_find) { - QString dir_str = QString::fromStdString(dir_path); + //QString dir_str = QString::fromStdString(dir_path); + QString dir_str = QString::fromLocal8Bit(QByteArray::fromRawData(dir_path.c_str(), dir_path.size())); + QDir dir; if (!dir.exists(dir_str)) { diff --git a/Cigarette/splash.jpg b/240510-常德GDX1-1相机-1280x800/Cigarette/splash.jpg similarity index 100% rename from Cigarette/splash.jpg rename to 240510-常德GDX1-1相机-1280x800/Cigarette/splash.jpg diff --git a/Cigarette/threadReceive.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/threadReceive.cpp similarity index 100% rename from Cigarette/threadReceive.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/threadReceive.cpp diff --git a/Cigarette/threadReceive.h b/240510-常德GDX1-1相机-1280x800/Cigarette/threadReceive.h similarity index 100% rename from Cigarette/threadReceive.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/threadReceive.h diff --git a/Cigarette/threadSend.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/threadSend.cpp similarity index 94% rename from Cigarette/threadSend.cpp rename to 240510-常德GDX1-1相机-1280x800/Cigarette/threadSend.cpp index 0fb11441..2550e663 100644 --- a/Cigarette/threadSend.cpp +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/threadSend.cpp @@ -82,7 +82,8 @@ void threadSend::sendImage(_UDPSendInfo *UDPSendInfo,int port) cv::Mat mat = UDPSendInfo->image; char cnt = UDPSendInfo->cnt; - cv::resize(mat, mat, cv::Size(image_width, image_heigh)); + //cv::resize(mat, mat, cv::Size(image_width, image_heigh)); + cv::resize(mat, mat, cv::Size(image_width, image_heigh),4,4,2); int length = image_width * image_heigh * 3; char* data = (char*)malloc(sizeof(char) * length + 1); @@ -115,7 +116,7 @@ void threadSend::sendOK(_UDPSendInfo *UDPSendInfo,int port) { QString res = QString("%1_%2") .arg(QString::number(UDPSendInfo->FrameID)) - .arg(QString::number(UDPSendInfo->ok)); + .arg(QString::number(UDPSendInfo->ok[UDPSendInfo->index])); mSocket.writeDatagram(res.toUtf8(), QHostAddress(ip), port + UDPSendInfo->index); } @@ -123,7 +124,7 @@ void threadSend::sendNG(_UDPSendInfo *UDPSendInfo,int port) { QString res = QString("%1_%2") .arg(QString::number(UDPSendInfo->FrameID)) - .arg(QString::number(UDPSendInfo->ng)); + .arg(QString::number(UDPSendInfo->ng[UDPSendInfo->index])); mSocket.writeDatagram(res.toUtf8(), QHostAddress(ip), port + UDPSendInfo->index); } diff --git a/Cigarette/threadSend.h b/240510-常德GDX1-1相机-1280x800/Cigarette/threadSend.h similarity index 88% rename from Cigarette/threadSend.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/threadSend.h index b7c89245..ac4ff346 100644 --- a/Cigarette/threadSend.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/threadSend.h @@ -11,8 +11,8 @@ #include -#define image_width 80 -#define image_heigh 60 +#define image_width 160 +#define image_heigh 120 #define info_frame 1 #define speed_frame 2 @@ -32,8 +32,8 @@ public: long Total; QString JD; QString timecost; - int ok; - int ng; + int ok[NumberOfSupportedCameras]; + int ng[NumberOfSupportedCameras]; QString speed; int Kick[NumberOfSupportedCameras]; @@ -45,8 +45,8 @@ public: Total = 0; JD = QString("0,0,0"); timecost = QString("0ms");; - ok = false; - ng = false; + for (int i = 0; i < NumberOfSupportedCameras; i++)ok[i] = 0; + for (int i = 0; i < NumberOfSupportedCameras; i++)ng[i] = 0; speed = QString(" "); for(int i=0;i // yes, this one new style header, is in the Android SDK. +#if defined(ANDROID_NDK) || defined(__BORLANDC__) || defined(__QNXNTO__) +# include +# include +#else +# include +# include +#endif + +#if defined(_MSC_VER) && (_MSC_VER >= 1400 ) && (!defined WINCE) + // Microsoft Visual Studio, version 2005 and higher. Not WinCE. + /*int _snprintf_s( + char *buffer, + size_t sizeOfBuffer, + size_t count, + const char *format [, + argument] ... + );*/ + static inline int TIXML_SNPRINTF( char* buffer, size_t size, const char* format, ... ) + { + va_list va; + va_start( va, format ); + const int result = vsnprintf_s( buffer, size, _TRUNCATE, format, va ); + va_end( va ); + return result; + } + + static inline int TIXML_VSNPRINTF( char* buffer, size_t size, const char* format, va_list va ) + { + const int result = vsnprintf_s( buffer, size, _TRUNCATE, format, va ); + return result; + } + + #define TIXML_VSCPRINTF _vscprintf + #define TIXML_SSCANF sscanf_s +#elif defined _MSC_VER + // Microsoft Visual Studio 2003 and earlier or WinCE + #define TIXML_SNPRINTF _snprintf + #define TIXML_VSNPRINTF _vsnprintf + #define TIXML_SSCANF sscanf + #if (_MSC_VER < 1400 ) && (!defined WINCE) + // Microsoft Visual Studio 2003 and not WinCE. + #define TIXML_VSCPRINTF _vscprintf // VS2003's C runtime has this, but VC6 C runtime or WinCE SDK doesn't have. + #else + // Microsoft Visual Studio 2003 and earlier or WinCE. + static inline int TIXML_VSCPRINTF( const char* format, va_list va ) + { + int len = 512; + for (;;) { + len = len*2; + char* str = new char[len](); + const int required = _vsnprintf(str, len, format, va); + delete[] str; + if ( required != -1 ) { + TIXMLASSERT( required >= 0 ); + len = required; + break; + } + } + TIXMLASSERT( len >= 0 ); + return len; + } + #endif +#else + // GCC version 3 and higher + //#warning( "Using sn* functions." ) + #define TIXML_SNPRINTF snprintf + #define TIXML_VSNPRINTF vsnprintf + static inline int TIXML_VSCPRINTF( const char* format, va_list va ) + { + int len = vsnprintf( 0, 0, format, va ); + TIXMLASSERT( len >= 0 ); + return len; + } + #define TIXML_SSCANF sscanf +#endif + +#if defined(_WIN64) + #define TIXML_FSEEK _fseeki64 + #define TIXML_FTELL _ftelli64 +#elif defined(__APPLE__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__DragonFly__) || (__CYGWIN__) + #define TIXML_FSEEK fseeko + #define TIXML_FTELL ftello +#elif defined(__ANDROID__) + #if __ANDROID_API__ > 24 + #define TIXML_FSEEK fseeko64 + #define TIXML_FTELL ftello64 + #else + #define TIXML_FSEEK fseeko + #define TIXML_FTELL ftello + #endif +#elif defined(__unix__) && defined(__x86_64__) + #define TIXML_FSEEK fseeko64 + #define TIXML_FTELL ftello64 +#else + #define TIXML_FSEEK fseek + #define TIXML_FTELL ftell +#endif + + +static const char LINE_FEED = static_cast(0x0a); // all line endings are normalized to LF +static const char LF = LINE_FEED; +static const char CARRIAGE_RETURN = static_cast(0x0d); // CR gets filtered out +static const char CR = CARRIAGE_RETURN; +static const char SINGLE_QUOTE = '\''; +static const char DOUBLE_QUOTE = '\"'; + +// Bunch of unicode info at: +// http://www.unicode.org/faq/utf_bom.html +// ef bb bf (Microsoft "lead bytes") - designates UTF-8 + +static const unsigned char TIXML_UTF_LEAD_0 = 0xefU; +static const unsigned char TIXML_UTF_LEAD_1 = 0xbbU; +static const unsigned char TIXML_UTF_LEAD_2 = 0xbfU; + +namespace tinyxml2 +{ + +struct Entity { + const char* pattern; + int length; + char value; +}; + +static const int NUM_ENTITIES = 5; +static const Entity entities[NUM_ENTITIES] = { + { "quot", 4, DOUBLE_QUOTE }, + { "amp", 3, '&' }, + { "apos", 4, SINGLE_QUOTE }, + { "lt", 2, '<' }, + { "gt", 2, '>' } +}; + + +StrPair::~StrPair() +{ + Reset(); +} + + +void StrPair::TransferTo( StrPair* other ) +{ + if ( this == other ) { + return; + } + // This in effect implements the assignment operator by "moving" + // ownership (as in auto_ptr). + + TIXMLASSERT( other != 0 ); + TIXMLASSERT( other->_flags == 0 ); + TIXMLASSERT( other->_start == 0 ); + TIXMLASSERT( other->_end == 0 ); + + other->Reset(); + + other->_flags = _flags; + other->_start = _start; + other->_end = _end; + + _flags = 0; + _start = 0; + _end = 0; +} + + +void StrPair::Reset() +{ + if ( _flags & NEEDS_DELETE ) { + delete [] _start; + } + _flags = 0; + _start = 0; + _end = 0; +} + + +void StrPair::SetStr( const char* str, int flags ) +{ + TIXMLASSERT( str ); + Reset(); + size_t len = strlen( str ); + TIXMLASSERT( _start == 0 ); + _start = new char[ len+1 ]; + memcpy( _start, str, len+1 ); + _end = _start + len; + _flags = flags | NEEDS_DELETE; +} + + +char* StrPair::ParseText( char* p, const char* endTag, int strFlags, int* curLineNumPtr ) +{ + TIXMLASSERT( p ); + TIXMLASSERT( endTag && *endTag ); + TIXMLASSERT(curLineNumPtr); + + char* start = p; + const char endChar = *endTag; + size_t length = strlen( endTag ); + + // Inner loop of text parsing. + while ( *p ) { + if ( *p == endChar && strncmp( p, endTag, length ) == 0 ) { + Set( start, p, strFlags ); + return p + length; + } else if (*p == '\n') { + ++(*curLineNumPtr); + } + ++p; + TIXMLASSERT( p ); + } + return 0; +} + + +char* StrPair::ParseName( char* p ) +{ + if ( !p || !(*p) ) { + return 0; + } + if ( !XMLUtil::IsNameStartChar( (unsigned char) *p ) ) { + return 0; + } + + char* const start = p; + ++p; + while ( *p && XMLUtil::IsNameChar( (unsigned char) *p ) ) { + ++p; + } + + Set( start, p, 0 ); + return p; +} + + +void StrPair::CollapseWhitespace() +{ + // Adjusting _start would cause undefined behavior on delete[] + TIXMLASSERT( ( _flags & NEEDS_DELETE ) == 0 ); + // Trim leading space. + _start = XMLUtil::SkipWhiteSpace( _start, 0 ); + + if ( *_start ) { + const char* p = _start; // the read pointer + char* q = _start; // the write pointer + + while( *p ) { + if ( XMLUtil::IsWhiteSpace( *p )) { + p = XMLUtil::SkipWhiteSpace( p, 0 ); + if ( *p == 0 ) { + break; // don't write to q; this trims the trailing space. + } + *q = ' '; + ++q; + } + *q = *p; + ++q; + ++p; + } + *q = 0; + } +} + + +const char* StrPair::GetStr() +{ + TIXMLASSERT( _start ); + TIXMLASSERT( _end ); + if ( _flags & NEEDS_FLUSH ) { + *_end = 0; + _flags ^= NEEDS_FLUSH; + + if ( _flags ) { + const char* p = _start; // the read pointer + char* q = _start; // the write pointer + + while( p < _end ) { + if ( (_flags & NEEDS_NEWLINE_NORMALIZATION) && *p == CR ) { + // CR-LF pair becomes LF + // CR alone becomes LF + // LF-CR becomes LF + if ( *(p+1) == LF ) { + p += 2; + } + else { + ++p; + } + *q = LF; + ++q; + } + else if ( (_flags & NEEDS_NEWLINE_NORMALIZATION) && *p == LF ) { + if ( *(p+1) == CR ) { + p += 2; + } + else { + ++p; + } + *q = LF; + ++q; + } + else if ( (_flags & NEEDS_ENTITY_PROCESSING) && *p == '&' ) { + // Entities handled by tinyXML2: + // - special entities in the entity table [in/out] + // - numeric character reference [in] + // 中 or 中 + + if ( *(p+1) == '#' ) { + const int buflen = 10; + char buf[buflen] = { 0 }; + int len = 0; + const char* adjusted = const_cast( XMLUtil::GetCharacterRef( p, buf, &len ) ); + if ( adjusted == 0 ) { + *q = *p; + ++p; + ++q; + } + else { + TIXMLASSERT( 0 <= len && len <= buflen ); + TIXMLASSERT( q + len <= adjusted ); + p = adjusted; + memcpy( q, buf, len ); + q += len; + } + } + else { + bool entityFound = false; + for( int i = 0; i < NUM_ENTITIES; ++i ) { + const Entity& entity = entities[i]; + if ( strncmp( p + 1, entity.pattern, entity.length ) == 0 + && *( p + entity.length + 1 ) == ';' ) { + // Found an entity - convert. + *q = entity.value; + ++q; + p += entity.length + 2; + entityFound = true; + break; + } + } + if ( !entityFound ) { + // fixme: treat as error? + ++p; + ++q; + } + } + } + else { + *q = *p; + ++p; + ++q; + } + } + *q = 0; + } + // The loop below has plenty going on, and this + // is a less useful mode. Break it out. + if ( _flags & NEEDS_WHITESPACE_COLLAPSING ) { + CollapseWhitespace(); + } + _flags = (_flags & NEEDS_DELETE); + } + TIXMLASSERT( _start ); + return _start; +} + + + + +// --------- XMLUtil ----------- // + +const char* XMLUtil::writeBoolTrue = "true"; +const char* XMLUtil::writeBoolFalse = "false"; + +void XMLUtil::SetBoolSerialization(const char* writeTrue, const char* writeFalse) +{ + static const char* defTrue = "true"; + static const char* defFalse = "false"; + + writeBoolTrue = (writeTrue) ? writeTrue : defTrue; + writeBoolFalse = (writeFalse) ? writeFalse : defFalse; +} + + +const char* XMLUtil::ReadBOM( const char* p, bool* bom ) +{ + TIXMLASSERT( p ); + TIXMLASSERT( bom ); + *bom = false; + const unsigned char* pu = reinterpret_cast(p); + // Check for BOM: + if ( *(pu+0) == TIXML_UTF_LEAD_0 + && *(pu+1) == TIXML_UTF_LEAD_1 + && *(pu+2) == TIXML_UTF_LEAD_2 ) { + *bom = true; + p += 3; + } + TIXMLASSERT( p ); + return p; +} + + +void XMLUtil::ConvertUTF32ToUTF8( unsigned long input, char* output, int* length ) +{ + const unsigned long BYTE_MASK = 0xBF; + const unsigned long BYTE_MARK = 0x80; + const unsigned long FIRST_BYTE_MARK[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC }; + + if (input < 0x80) { + *length = 1; + } + else if ( input < 0x800 ) { + *length = 2; + } + else if ( input < 0x10000 ) { + *length = 3; + } + else if ( input < 0x200000 ) { + *length = 4; + } + else { + *length = 0; // This code won't convert this correctly anyway. + return; + } + + output += *length; + + // Scary scary fall throughs are annotated with carefully designed comments + // to suppress compiler warnings such as -Wimplicit-fallthrough in gcc + switch (*length) { + case 4: + --output; + *output = static_cast((input | BYTE_MARK) & BYTE_MASK); + input >>= 6; + //fall through + case 3: + --output; + *output = static_cast((input | BYTE_MARK) & BYTE_MASK); + input >>= 6; + //fall through + case 2: + --output; + *output = static_cast((input | BYTE_MARK) & BYTE_MASK); + input >>= 6; + //fall through + case 1: + --output; + *output = static_cast(input | FIRST_BYTE_MARK[*length]); + break; + default: + TIXMLASSERT( false ); + } +} + + +const char* XMLUtil::GetCharacterRef( const char* p, char* value, int* length ) +{ + // Presume an entity, and pull it out. + *length = 0; + + if ( *(p+1) == '#' && *(p+2) ) { + unsigned long ucs = 0; + TIXMLASSERT( sizeof( ucs ) >= 4 ); + ptrdiff_t delta = 0; + unsigned mult = 1; + static const char SEMICOLON = ';'; + + if ( *(p+2) == 'x' ) { + // Hexadecimal. + const char* q = p+3; + if ( !(*q) ) { + return 0; + } + + q = strchr( q, SEMICOLON ); + + if ( !q ) { + return 0; + } + TIXMLASSERT( *q == SEMICOLON ); + + delta = q-p; + --q; + + while ( *q != 'x' ) { + unsigned int digit = 0; + + if ( *q >= '0' && *q <= '9' ) { + digit = *q - '0'; + } + else if ( *q >= 'a' && *q <= 'f' ) { + digit = *q - 'a' + 10; + } + else if ( *q >= 'A' && *q <= 'F' ) { + digit = *q - 'A' + 10; + } + else { + return 0; + } + TIXMLASSERT( digit < 16 ); + TIXMLASSERT( digit == 0 || mult <= UINT_MAX / digit ); + const unsigned int digitScaled = mult * digit; + TIXMLASSERT( ucs <= ULONG_MAX - digitScaled ); + ucs += digitScaled; + TIXMLASSERT( mult <= UINT_MAX / 16 ); + mult *= 16; + --q; + } + } + else { + // Decimal. + const char* q = p+2; + if ( !(*q) ) { + return 0; + } + + q = strchr( q, SEMICOLON ); + + if ( !q ) { + return 0; + } + TIXMLASSERT( *q == SEMICOLON ); + + delta = q-p; + --q; + + while ( *q != '#' ) { + if ( *q >= '0' && *q <= '9' ) { + const unsigned int digit = *q - '0'; + TIXMLASSERT( digit < 10 ); + TIXMLASSERT( digit == 0 || mult <= UINT_MAX / digit ); + const unsigned int digitScaled = mult * digit; + TIXMLASSERT( ucs <= ULONG_MAX - digitScaled ); + ucs += digitScaled; + } + else { + return 0; + } + TIXMLASSERT( mult <= UINT_MAX / 10 ); + mult *= 10; + --q; + } + } + // convert the UCS to UTF-8 + ConvertUTF32ToUTF8( ucs, value, length ); + return p + delta + 1; + } + return p+1; +} + + +void XMLUtil::ToStr( int v, char* buffer, int bufferSize ) +{ + TIXML_SNPRINTF( buffer, bufferSize, "%d", v ); +} + + +void XMLUtil::ToStr( unsigned v, char* buffer, int bufferSize ) +{ + TIXML_SNPRINTF( buffer, bufferSize, "%u", v ); +} + + +void XMLUtil::ToStr( bool v, char* buffer, int bufferSize ) +{ + TIXML_SNPRINTF( buffer, bufferSize, "%s", v ? writeBoolTrue : writeBoolFalse); +} + +/* + ToStr() of a number is a very tricky topic. + https://github.com/leethomason/tinyxml2/issues/106 +*/ +void XMLUtil::ToStr( float v, char* buffer, int bufferSize ) +{ + TIXML_SNPRINTF( buffer, bufferSize, "%.8g", v ); +} + + +void XMLUtil::ToStr( double v, char* buffer, int bufferSize ) +{ + TIXML_SNPRINTF( buffer, bufferSize, "%.17g", v ); +} + + +void XMLUtil::ToStr( int64_t v, char* buffer, int bufferSize ) +{ + // horrible syntax trick to make the compiler happy about %lld + TIXML_SNPRINTF(buffer, bufferSize, "%lld", static_cast(v)); +} + +void XMLUtil::ToStr( uint64_t v, char* buffer, int bufferSize ) +{ + // horrible syntax trick to make the compiler happy about %llu + TIXML_SNPRINTF(buffer, bufferSize, "%llu", (long long)v); +} + +bool XMLUtil::ToInt(const char* str, int* value) +{ + if (IsPrefixHex(str)) { + unsigned v; + if (TIXML_SSCANF(str, "%x", &v) == 1) { + *value = static_cast(v); + return true; + } + } + else { + if (TIXML_SSCANF(str, "%d", value) == 1) { + return true; + } + } + return false; +} + +bool XMLUtil::ToUnsigned(const char* str, unsigned* value) +{ + if (TIXML_SSCANF(str, IsPrefixHex(str) ? "%x" : "%u", value) == 1) { + return true; + } + return false; +} + +bool XMLUtil::ToBool( const char* str, bool* value ) +{ + int ival = 0; + if ( ToInt( str, &ival )) { + *value = (ival==0) ? false : true; + return true; + } + static const char* TRUE_VALS[] = { "true", "True", "TRUE", 0 }; + static const char* FALSE_VALS[] = { "false", "False", "FALSE", 0 }; + + for (int i = 0; TRUE_VALS[i]; ++i) { + if (StringEqual(str, TRUE_VALS[i])) { + *value = true; + return true; + } + } + for (int i = 0; FALSE_VALS[i]; ++i) { + if (StringEqual(str, FALSE_VALS[i])) { + *value = false; + return true; + } + } + return false; +} + + +bool XMLUtil::ToFloat( const char* str, float* value ) +{ + if ( TIXML_SSCANF( str, "%f", value ) == 1 ) { + return true; + } + return false; +} + + +bool XMLUtil::ToDouble( const char* str, double* value ) +{ + if ( TIXML_SSCANF( str, "%lf", value ) == 1 ) { + return true; + } + return false; +} + + +bool XMLUtil::ToInt64(const char* str, int64_t* value) +{ + if (IsPrefixHex(str)) { + unsigned long long v = 0; // horrible syntax trick to make the compiler happy about %llx + if (TIXML_SSCANF(str, "%llx", &v) == 1) { + *value = static_cast(v); + return true; + } + } + else { + long long v = 0; // horrible syntax trick to make the compiler happy about %lld + if (TIXML_SSCANF(str, "%lld", &v) == 1) { + *value = static_cast(v); + return true; + } + } + return false; +} + + +bool XMLUtil::ToUnsigned64(const char* str, uint64_t* value) { + unsigned long long v = 0; // horrible syntax trick to make the compiler happy about %llu + if(TIXML_SSCANF(str, IsPrefixHex(str) ? "%llx" : "%llu", &v) == 1) { + *value = (uint64_t)v; + return true; + } + return false; +} + + +char* XMLDocument::Identify( char* p, XMLNode** node ) +{ + TIXMLASSERT( node ); + TIXMLASSERT( p ); + char* const start = p; + int const startLine = _parseCurLineNum; + p = XMLUtil::SkipWhiteSpace( p, &_parseCurLineNum ); + if( !*p ) { + *node = 0; + TIXMLASSERT( p ); + return p; + } + + // These strings define the matching patterns: + static const char* xmlHeader = { "( _commentPool ); + returnNode->_parseLineNum = _parseCurLineNum; + p += xmlHeaderLen; + } + else if ( XMLUtil::StringEqual( p, commentHeader, commentHeaderLen ) ) { + returnNode = CreateUnlinkedNode( _commentPool ); + returnNode->_parseLineNum = _parseCurLineNum; + p += commentHeaderLen; + } + else if ( XMLUtil::StringEqual( p, cdataHeader, cdataHeaderLen ) ) { + XMLText* text = CreateUnlinkedNode( _textPool ); + returnNode = text; + returnNode->_parseLineNum = _parseCurLineNum; + p += cdataHeaderLen; + text->SetCData( true ); + } + else if ( XMLUtil::StringEqual( p, dtdHeader, dtdHeaderLen ) ) { + returnNode = CreateUnlinkedNode( _commentPool ); + returnNode->_parseLineNum = _parseCurLineNum; + p += dtdHeaderLen; + } + else if ( XMLUtil::StringEqual( p, elementHeader, elementHeaderLen ) ) { + returnNode = CreateUnlinkedNode( _elementPool ); + returnNode->_parseLineNum = _parseCurLineNum; + p += elementHeaderLen; + } + else { + returnNode = CreateUnlinkedNode( _textPool ); + returnNode->_parseLineNum = _parseCurLineNum; // Report line of first non-whitespace character + p = start; // Back it up, all the text counts. + _parseCurLineNum = startLine; + } + + TIXMLASSERT( returnNode ); + TIXMLASSERT( p ); + *node = returnNode; + return p; +} + + +bool XMLDocument::Accept( XMLVisitor* visitor ) const +{ + TIXMLASSERT( visitor ); + if ( visitor->VisitEnter( *this ) ) { + for ( const XMLNode* node=FirstChild(); node; node=node->NextSibling() ) { + if ( !node->Accept( visitor ) ) { + break; + } + } + } + return visitor->VisitExit( *this ); +} + + +// --------- XMLNode ----------- // + +XMLNode::XMLNode( XMLDocument* doc ) : + _document( doc ), + _parent( 0 ), + _value(), + _parseLineNum( 0 ), + _firstChild( 0 ), _lastChild( 0 ), + _prev( 0 ), _next( 0 ), + _userData( 0 ), + _memPool( 0 ) +{ +} + + +XMLNode::~XMLNode() +{ + DeleteChildren(); + if ( _parent ) { + _parent->Unlink( this ); + } +} + +const char* XMLNode::Value() const +{ + // Edge case: XMLDocuments don't have a Value. Return null. + if ( this->ToDocument() ) + return 0; + return _value.GetStr(); +} + +void XMLNode::SetValue( const char* str, bool staticMem ) +{ + if ( staticMem ) { + _value.SetInternedStr( str ); + } + else { + _value.SetStr( str ); + } +} + +XMLNode* XMLNode::DeepClone(XMLDocument* target) const +{ + XMLNode* clone = this->ShallowClone(target); + if (!clone) return 0; + + for (const XMLNode* child = this->FirstChild(); child; child = child->NextSibling()) { + XMLNode* childClone = child->DeepClone(target); + TIXMLASSERT(childClone); + clone->InsertEndChild(childClone); + } + return clone; +} + +void XMLNode::DeleteChildren() +{ + while( _firstChild ) { + TIXMLASSERT( _lastChild ); + DeleteChild( _firstChild ); + } + _firstChild = _lastChild = 0; +} + + +void XMLNode::Unlink( XMLNode* child ) +{ + TIXMLASSERT( child ); + TIXMLASSERT( child->_document == _document ); + TIXMLASSERT( child->_parent == this ); + if ( child == _firstChild ) { + _firstChild = _firstChild->_next; + } + if ( child == _lastChild ) { + _lastChild = _lastChild->_prev; + } + + if ( child->_prev ) { + child->_prev->_next = child->_next; + } + if ( child->_next ) { + child->_next->_prev = child->_prev; + } + child->_next = 0; + child->_prev = 0; + child->_parent = 0; +} + + +void XMLNode::DeleteChild( XMLNode* node ) +{ + TIXMLASSERT( node ); + TIXMLASSERT( node->_document == _document ); + TIXMLASSERT( node->_parent == this ); + Unlink( node ); + TIXMLASSERT(node->_prev == 0); + TIXMLASSERT(node->_next == 0); + TIXMLASSERT(node->_parent == 0); + DeleteNode( node ); +} + + +XMLNode* XMLNode::InsertEndChild( XMLNode* addThis ) +{ + TIXMLASSERT( addThis ); + if ( addThis->_document != _document ) { + TIXMLASSERT( false ); + return 0; + } + InsertChildPreamble( addThis ); + + if ( _lastChild ) { + TIXMLASSERT( _firstChild ); + TIXMLASSERT( _lastChild->_next == 0 ); + _lastChild->_next = addThis; + addThis->_prev = _lastChild; + _lastChild = addThis; + + addThis->_next = 0; + } + else { + TIXMLASSERT( _firstChild == 0 ); + _firstChild = _lastChild = addThis; + + addThis->_prev = 0; + addThis->_next = 0; + } + addThis->_parent = this; + return addThis; +} + + +XMLNode* XMLNode::InsertFirstChild( XMLNode* addThis ) +{ + TIXMLASSERT( addThis ); + if ( addThis->_document != _document ) { + TIXMLASSERT( false ); + return 0; + } + InsertChildPreamble( addThis ); + + if ( _firstChild ) { + TIXMLASSERT( _lastChild ); + TIXMLASSERT( _firstChild->_prev == 0 ); + + _firstChild->_prev = addThis; + addThis->_next = _firstChild; + _firstChild = addThis; + + addThis->_prev = 0; + } + else { + TIXMLASSERT( _lastChild == 0 ); + _firstChild = _lastChild = addThis; + + addThis->_prev = 0; + addThis->_next = 0; + } + addThis->_parent = this; + return addThis; +} + + +XMLNode* XMLNode::InsertAfterChild( XMLNode* afterThis, XMLNode* addThis ) +{ + TIXMLASSERT( addThis ); + if ( addThis->_document != _document ) { + TIXMLASSERT( false ); + return 0; + } + + TIXMLASSERT( afterThis ); + + if ( afterThis->_parent != this ) { + TIXMLASSERT( false ); + return 0; + } + if ( afterThis == addThis ) { + // Current state: BeforeThis -> AddThis -> OneAfterAddThis + // Now AddThis must disappear from it's location and then + // reappear between BeforeThis and OneAfterAddThis. + // So just leave it where it is. + return addThis; + } + + if ( afterThis->_next == 0 ) { + // The last node or the only node. + return InsertEndChild( addThis ); + } + InsertChildPreamble( addThis ); + addThis->_prev = afterThis; + addThis->_next = afterThis->_next; + afterThis->_next->_prev = addThis; + afterThis->_next = addThis; + addThis->_parent = this; + return addThis; +} + + + + +const XMLElement* XMLNode::FirstChildElement( const char* name ) const +{ + for( const XMLNode* node = _firstChild; node; node = node->_next ) { + const XMLElement* element = node->ToElementWithName( name ); + if ( element ) { + return element; + } + } + return 0; +} + + +const XMLElement* XMLNode::LastChildElement( const char* name ) const +{ + for( const XMLNode* node = _lastChild; node; node = node->_prev ) { + const XMLElement* element = node->ToElementWithName( name ); + if ( element ) { + return element; + } + } + return 0; +} + + +const XMLElement* XMLNode::NextSiblingElement( const char* name ) const +{ + for( const XMLNode* node = _next; node; node = node->_next ) { + const XMLElement* element = node->ToElementWithName( name ); + if ( element ) { + return element; + } + } + return 0; +} + + +const XMLElement* XMLNode::PreviousSiblingElement( const char* name ) const +{ + for( const XMLNode* node = _prev; node; node = node->_prev ) { + const XMLElement* element = node->ToElementWithName( name ); + if ( element ) { + return element; + } + } + return 0; +} + + +char* XMLNode::ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr ) +{ + // This is a recursive method, but thinking about it "at the current level" + // it is a pretty simple flat list: + // + // + // + // With a special case: + // + // + // + // + // Where the closing element (/foo) *must* be the next thing after the opening + // element, and the names must match. BUT the tricky bit is that the closing + // element will be read by the child. + // + // 'endTag' is the end tag for this node, it is returned by a call to a child. + // 'parentEnd' is the end tag for the parent, which is filled in and returned. + + XMLDocument::DepthTracker tracker(_document); + if (_document->Error()) + return 0; + + while( p && *p ) { + XMLNode* node = 0; + + p = _document->Identify( p, &node ); + TIXMLASSERT( p ); + if ( node == 0 ) { + break; + } + + const int initialLineNum = node->_parseLineNum; + + StrPair endTag; + p = node->ParseDeep( p, &endTag, curLineNumPtr ); + if ( !p ) { + _document->DeleteNode( node ); + if ( !_document->Error() ) { + _document->SetError( XML_ERROR_PARSING, initialLineNum, 0); + } + break; + } + + const XMLDeclaration* const decl = node->ToDeclaration(); + if ( decl ) { + // Declarations are only allowed at document level + // + // Multiple declarations are allowed but all declarations + // must occur before anything else. + // + // Optimized due to a security test case. If the first node is + // a declaration, and the last node is a declaration, then only + // declarations have so far been added. + bool wellLocated = false; + + if (ToDocument()) { + if (FirstChild()) { + wellLocated = + FirstChild() && + FirstChild()->ToDeclaration() && + LastChild() && + LastChild()->ToDeclaration(); + } + else { + wellLocated = true; + } + } + if ( !wellLocated ) { + _document->SetError( XML_ERROR_PARSING_DECLARATION, initialLineNum, "XMLDeclaration value=%s", decl->Value()); + _document->DeleteNode( node ); + break; + } + } + + XMLElement* ele = node->ToElement(); + if ( ele ) { + // We read the end tag. Return it to the parent. + if ( ele->ClosingType() == XMLElement::CLOSING ) { + if ( parentEndTag ) { + ele->_value.TransferTo( parentEndTag ); + } + node->_memPool->SetTracked(); // created and then immediately deleted. + DeleteNode( node ); + return p; + } + + // Handle an end tag returned to this level. + // And handle a bunch of annoying errors. + bool mismatch = false; + if ( endTag.Empty() ) { + if ( ele->ClosingType() == XMLElement::OPENED ) { + mismatch = true; + } + } + else { + if ( ele->ClosingType() != XMLElement::OPENED ) { + mismatch = true; + } + else if ( !XMLUtil::StringEqual( endTag.GetStr(), ele->Name() ) ) { + mismatch = true; + } + } + if ( mismatch ) { + _document->SetError( XML_ERROR_MISMATCHED_ELEMENT, initialLineNum, "XMLElement name=%s", ele->Name()); + _document->DeleteNode( node ); + break; + } + } + InsertEndChild( node ); + } + return 0; +} + +/*static*/ void XMLNode::DeleteNode( XMLNode* node ) +{ + if ( node == 0 ) { + return; + } + TIXMLASSERT(node->_document); + if (!node->ToDocument()) { + node->_document->MarkInUse(node); + } + + MemPool* pool = node->_memPool; + node->~XMLNode(); + pool->Free( node ); +} + +void XMLNode::InsertChildPreamble( XMLNode* insertThis ) const +{ + TIXMLASSERT( insertThis ); + TIXMLASSERT( insertThis->_document == _document ); + + if (insertThis->_parent) { + insertThis->_parent->Unlink( insertThis ); + } + else { + insertThis->_document->MarkInUse(insertThis); + insertThis->_memPool->SetTracked(); + } +} + +const XMLElement* XMLNode::ToElementWithName( const char* name ) const +{ + const XMLElement* element = this->ToElement(); + if ( element == 0 ) { + return 0; + } + if ( name == 0 ) { + return element; + } + if ( XMLUtil::StringEqual( element->Name(), name ) ) { + return element; + } + return 0; +} + +// --------- XMLText ---------- // +char* XMLText::ParseDeep( char* p, StrPair*, int* curLineNumPtr ) +{ + if ( this->CData() ) { + p = _value.ParseText( p, "]]>", StrPair::NEEDS_NEWLINE_NORMALIZATION, curLineNumPtr ); + if ( !p ) { + _document->SetError( XML_ERROR_PARSING_CDATA, _parseLineNum, 0 ); + } + return p; + } + else { + int flags = _document->ProcessEntities() ? StrPair::TEXT_ELEMENT : StrPair::TEXT_ELEMENT_LEAVE_ENTITIES; + if ( _document->WhitespaceMode() == COLLAPSE_WHITESPACE ) { + flags |= StrPair::NEEDS_WHITESPACE_COLLAPSING; + } + + p = _value.ParseText( p, "<", flags, curLineNumPtr ); + if ( p && *p ) { + return p-1; + } + if ( !p ) { + _document->SetError( XML_ERROR_PARSING_TEXT, _parseLineNum, 0 ); + } + } + return 0; +} + + +XMLNode* XMLText::ShallowClone( XMLDocument* doc ) const +{ + if ( !doc ) { + doc = _document; + } + XMLText* text = doc->NewText( Value() ); // fixme: this will always allocate memory. Intern? + text->SetCData( this->CData() ); + return text; +} + + +bool XMLText::ShallowEqual( const XMLNode* compare ) const +{ + TIXMLASSERT( compare ); + const XMLText* text = compare->ToText(); + return ( text && XMLUtil::StringEqual( text->Value(), Value() ) ); +} + + +bool XMLText::Accept( XMLVisitor* visitor ) const +{ + TIXMLASSERT( visitor ); + return visitor->Visit( *this ); +} + + +// --------- XMLComment ---------- // + +XMLComment::XMLComment( XMLDocument* doc ) : XMLNode( doc ) +{ +} + + +XMLComment::~XMLComment() +{ +} + + +char* XMLComment::ParseDeep( char* p, StrPair*, int* curLineNumPtr ) +{ + // Comment parses as text. + p = _value.ParseText( p, "-->", StrPair::COMMENT, curLineNumPtr ); + if ( p == 0 ) { + _document->SetError( XML_ERROR_PARSING_COMMENT, _parseLineNum, 0 ); + } + return p; +} + + +XMLNode* XMLComment::ShallowClone( XMLDocument* doc ) const +{ + if ( !doc ) { + doc = _document; + } + XMLComment* comment = doc->NewComment( Value() ); // fixme: this will always allocate memory. Intern? + return comment; +} + + +bool XMLComment::ShallowEqual( const XMLNode* compare ) const +{ + TIXMLASSERT( compare ); + const XMLComment* comment = compare->ToComment(); + return ( comment && XMLUtil::StringEqual( comment->Value(), Value() )); +} + + +bool XMLComment::Accept( XMLVisitor* visitor ) const +{ + TIXMLASSERT( visitor ); + return visitor->Visit( *this ); +} + + +// --------- XMLDeclaration ---------- // + +XMLDeclaration::XMLDeclaration( XMLDocument* doc ) : XMLNode( doc ) +{ +} + + +XMLDeclaration::~XMLDeclaration() +{ + //printf( "~XMLDeclaration\n" ); +} + + +char* XMLDeclaration::ParseDeep( char* p, StrPair*, int* curLineNumPtr ) +{ + // Declaration parses as text. + p = _value.ParseText( p, "?>", StrPair::NEEDS_NEWLINE_NORMALIZATION, curLineNumPtr ); + if ( p == 0 ) { + _document->SetError( XML_ERROR_PARSING_DECLARATION, _parseLineNum, 0 ); + } + return p; +} + + +XMLNode* XMLDeclaration::ShallowClone( XMLDocument* doc ) const +{ + if ( !doc ) { + doc = _document; + } + XMLDeclaration* dec = doc->NewDeclaration( Value() ); // fixme: this will always allocate memory. Intern? + return dec; +} + + +bool XMLDeclaration::ShallowEqual( const XMLNode* compare ) const +{ + TIXMLASSERT( compare ); + const XMLDeclaration* declaration = compare->ToDeclaration(); + return ( declaration && XMLUtil::StringEqual( declaration->Value(), Value() )); +} + + + +bool XMLDeclaration::Accept( XMLVisitor* visitor ) const +{ + TIXMLASSERT( visitor ); + return visitor->Visit( *this ); +} + +// --------- XMLUnknown ---------- // + +XMLUnknown::XMLUnknown( XMLDocument* doc ) : XMLNode( doc ) +{ +} + + +XMLUnknown::~XMLUnknown() +{ +} + + +char* XMLUnknown::ParseDeep( char* p, StrPair*, int* curLineNumPtr ) +{ + // Unknown parses as text. + p = _value.ParseText( p, ">", StrPair::NEEDS_NEWLINE_NORMALIZATION, curLineNumPtr ); + if ( !p ) { + _document->SetError( XML_ERROR_PARSING_UNKNOWN, _parseLineNum, 0 ); + } + return p; +} + + +XMLNode* XMLUnknown::ShallowClone( XMLDocument* doc ) const +{ + if ( !doc ) { + doc = _document; + } + XMLUnknown* text = doc->NewUnknown( Value() ); // fixme: this will always allocate memory. Intern? + return text; +} + + +bool XMLUnknown::ShallowEqual( const XMLNode* compare ) const +{ + TIXMLASSERT( compare ); + const XMLUnknown* unknown = compare->ToUnknown(); + return ( unknown && XMLUtil::StringEqual( unknown->Value(), Value() )); +} + + +bool XMLUnknown::Accept( XMLVisitor* visitor ) const +{ + TIXMLASSERT( visitor ); + return visitor->Visit( *this ); +} + +// --------- XMLAttribute ---------- // + +const char* XMLAttribute::Name() const +{ + return _name.GetStr(); +} + +const char* XMLAttribute::Value() const +{ + return _value.GetStr(); +} + +char* XMLAttribute::ParseDeep( char* p, bool processEntities, int* curLineNumPtr ) +{ + // Parse using the name rules: bug fix, was using ParseText before + p = _name.ParseName( p ); + if ( !p || !*p ) { + return 0; + } + + // Skip white space before = + p = XMLUtil::SkipWhiteSpace( p, curLineNumPtr ); + if ( *p != '=' ) { + return 0; + } + + ++p; // move up to opening quote + p = XMLUtil::SkipWhiteSpace( p, curLineNumPtr ); + if ( *p != '\"' && *p != '\'' ) { + return 0; + } + + const char endTag[2] = { *p, 0 }; + ++p; // move past opening quote + + p = _value.ParseText( p, endTag, processEntities ? StrPair::ATTRIBUTE_VALUE : StrPair::ATTRIBUTE_VALUE_LEAVE_ENTITIES, curLineNumPtr ); + return p; +} + + +void XMLAttribute::SetName( const char* n ) +{ + _name.SetStr( n ); +} + + +XMLError XMLAttribute::QueryIntValue( int* value ) const +{ + if ( XMLUtil::ToInt( Value(), value )) { + return XML_SUCCESS; + } + return XML_WRONG_ATTRIBUTE_TYPE; +} + + +XMLError XMLAttribute::QueryUnsignedValue( unsigned int* value ) const +{ + if ( XMLUtil::ToUnsigned( Value(), value )) { + return XML_SUCCESS; + } + return XML_WRONG_ATTRIBUTE_TYPE; +} + + +XMLError XMLAttribute::QueryInt64Value(int64_t* value) const +{ + if (XMLUtil::ToInt64(Value(), value)) { + return XML_SUCCESS; + } + return XML_WRONG_ATTRIBUTE_TYPE; +} + + +XMLError XMLAttribute::QueryUnsigned64Value(uint64_t* value) const +{ + if(XMLUtil::ToUnsigned64(Value(), value)) { + return XML_SUCCESS; + } + return XML_WRONG_ATTRIBUTE_TYPE; +} + + +XMLError XMLAttribute::QueryBoolValue( bool* value ) const +{ + if ( XMLUtil::ToBool( Value(), value )) { + return XML_SUCCESS; + } + return XML_WRONG_ATTRIBUTE_TYPE; +} + + +XMLError XMLAttribute::QueryFloatValue( float* value ) const +{ + if ( XMLUtil::ToFloat( Value(), value )) { + return XML_SUCCESS; + } + return XML_WRONG_ATTRIBUTE_TYPE; +} + + +XMLError XMLAttribute::QueryDoubleValue( double* value ) const +{ + if ( XMLUtil::ToDouble( Value(), value )) { + return XML_SUCCESS; + } + return XML_WRONG_ATTRIBUTE_TYPE; +} + + +void XMLAttribute::SetAttribute( const char* v ) +{ + _value.SetStr( v ); +} + + +void XMLAttribute::SetAttribute( int v ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( v, buf, BUF_SIZE ); + _value.SetStr( buf ); +} + + +void XMLAttribute::SetAttribute( unsigned v ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( v, buf, BUF_SIZE ); + _value.SetStr( buf ); +} + + +void XMLAttribute::SetAttribute(int64_t v) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr(v, buf, BUF_SIZE); + _value.SetStr(buf); +} + +void XMLAttribute::SetAttribute(uint64_t v) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr(v, buf, BUF_SIZE); + _value.SetStr(buf); +} + + +void XMLAttribute::SetAttribute( bool v ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( v, buf, BUF_SIZE ); + _value.SetStr( buf ); +} + +void XMLAttribute::SetAttribute( double v ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( v, buf, BUF_SIZE ); + _value.SetStr( buf ); +} + +void XMLAttribute::SetAttribute( float v ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( v, buf, BUF_SIZE ); + _value.SetStr( buf ); +} + + +// --------- XMLElement ---------- // +XMLElement::XMLElement( XMLDocument* doc ) : XMLNode( doc ), + _closingType( OPENED ), + _rootAttribute( 0 ) +{ +} + + +XMLElement::~XMLElement() +{ + while( _rootAttribute ) { + XMLAttribute* next = _rootAttribute->_next; + DeleteAttribute( _rootAttribute ); + _rootAttribute = next; + } +} + + +const XMLAttribute* XMLElement::FindAttribute( const char* name ) const +{ + for( XMLAttribute* a = _rootAttribute; a; a = a->_next ) { + if ( XMLUtil::StringEqual( a->Name(), name ) ) { + return a; + } + } + return 0; +} + + +const char* XMLElement::Attribute( const char* name, const char* value ) const +{ + const XMLAttribute* a = FindAttribute( name ); + if ( !a ) { + return 0; + } + if ( !value || XMLUtil::StringEqual( a->Value(), value )) { + return a->Value(); + } + return 0; +} + +int XMLElement::IntAttribute(const char* name, int defaultValue) const +{ + int i = defaultValue; + QueryIntAttribute(name, &i); + return i; +} + +unsigned XMLElement::UnsignedAttribute(const char* name, unsigned defaultValue) const +{ + unsigned i = defaultValue; + QueryUnsignedAttribute(name, &i); + return i; +} + +int64_t XMLElement::Int64Attribute(const char* name, int64_t defaultValue) const +{ + int64_t i = defaultValue; + QueryInt64Attribute(name, &i); + return i; +} + +uint64_t XMLElement::Unsigned64Attribute(const char* name, uint64_t defaultValue) const +{ + uint64_t i = defaultValue; + QueryUnsigned64Attribute(name, &i); + return i; +} + +bool XMLElement::BoolAttribute(const char* name, bool defaultValue) const +{ + bool b = defaultValue; + QueryBoolAttribute(name, &b); + return b; +} + +double XMLElement::DoubleAttribute(const char* name, double defaultValue) const +{ + double d = defaultValue; + QueryDoubleAttribute(name, &d); + return d; +} + +float XMLElement::FloatAttribute(const char* name, float defaultValue) const +{ + float f = defaultValue; + QueryFloatAttribute(name, &f); + return f; +} + +const char* XMLElement::GetText() const +{ + /* skip comment node */ + const XMLNode* node = FirstChild(); + while (node) { + if (node->ToComment()) { + node = node->NextSibling(); + continue; + } + break; + } + + if ( node && node->ToText() ) { + return node->Value(); + } + return 0; +} + + +void XMLElement::SetText( const char* inText ) +{ + if ( FirstChild() && FirstChild()->ToText() ) + FirstChild()->SetValue( inText ); + else { + XMLText* theText = GetDocument()->NewText( inText ); + InsertFirstChild( theText ); + } +} + + +void XMLElement::SetText( int v ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( v, buf, BUF_SIZE ); + SetText( buf ); +} + + +void XMLElement::SetText( unsigned v ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( v, buf, BUF_SIZE ); + SetText( buf ); +} + + +void XMLElement::SetText(int64_t v) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr(v, buf, BUF_SIZE); + SetText(buf); +} + +void XMLElement::SetText(uint64_t v) { + char buf[BUF_SIZE]; + XMLUtil::ToStr(v, buf, BUF_SIZE); + SetText(buf); +} + + +void XMLElement::SetText( bool v ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( v, buf, BUF_SIZE ); + SetText( buf ); +} + + +void XMLElement::SetText( float v ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( v, buf, BUF_SIZE ); + SetText( buf ); +} + + +void XMLElement::SetText( double v ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( v, buf, BUF_SIZE ); + SetText( buf ); +} + + +XMLError XMLElement::QueryIntText( int* ival ) const +{ + if ( FirstChild() && FirstChild()->ToText() ) { + const char* t = FirstChild()->Value(); + if ( XMLUtil::ToInt( t, ival ) ) { + return XML_SUCCESS; + } + return XML_CAN_NOT_CONVERT_TEXT; + } + return XML_NO_TEXT_NODE; +} + + +XMLError XMLElement::QueryUnsignedText( unsigned* uval ) const +{ + if ( FirstChild() && FirstChild()->ToText() ) { + const char* t = FirstChild()->Value(); + if ( XMLUtil::ToUnsigned( t, uval ) ) { + return XML_SUCCESS; + } + return XML_CAN_NOT_CONVERT_TEXT; + } + return XML_NO_TEXT_NODE; +} + + +XMLError XMLElement::QueryInt64Text(int64_t* ival) const +{ + if (FirstChild() && FirstChild()->ToText()) { + const char* t = FirstChild()->Value(); + if (XMLUtil::ToInt64(t, ival)) { + return XML_SUCCESS; + } + return XML_CAN_NOT_CONVERT_TEXT; + } + return XML_NO_TEXT_NODE; +} + + +XMLError XMLElement::QueryUnsigned64Text(uint64_t* uval) const +{ + if(FirstChild() && FirstChild()->ToText()) { + const char* t = FirstChild()->Value(); + if(XMLUtil::ToUnsigned64(t, uval)) { + return XML_SUCCESS; + } + return XML_CAN_NOT_CONVERT_TEXT; + } + return XML_NO_TEXT_NODE; +} + + +XMLError XMLElement::QueryBoolText( bool* bval ) const +{ + if ( FirstChild() && FirstChild()->ToText() ) { + const char* t = FirstChild()->Value(); + if ( XMLUtil::ToBool( t, bval ) ) { + return XML_SUCCESS; + } + return XML_CAN_NOT_CONVERT_TEXT; + } + return XML_NO_TEXT_NODE; +} + + +XMLError XMLElement::QueryDoubleText( double* dval ) const +{ + if ( FirstChild() && FirstChild()->ToText() ) { + const char* t = FirstChild()->Value(); + if ( XMLUtil::ToDouble( t, dval ) ) { + return XML_SUCCESS; + } + return XML_CAN_NOT_CONVERT_TEXT; + } + return XML_NO_TEXT_NODE; +} + + +XMLError XMLElement::QueryFloatText( float* fval ) const +{ + if ( FirstChild() && FirstChild()->ToText() ) { + const char* t = FirstChild()->Value(); + if ( XMLUtil::ToFloat( t, fval ) ) { + return XML_SUCCESS; + } + return XML_CAN_NOT_CONVERT_TEXT; + } + return XML_NO_TEXT_NODE; +} + +int XMLElement::IntText(int defaultValue) const +{ + int i = defaultValue; + QueryIntText(&i); + return i; +} + +unsigned XMLElement::UnsignedText(unsigned defaultValue) const +{ + unsigned i = defaultValue; + QueryUnsignedText(&i); + return i; +} + +int64_t XMLElement::Int64Text(int64_t defaultValue) const +{ + int64_t i = defaultValue; + QueryInt64Text(&i); + return i; +} + +uint64_t XMLElement::Unsigned64Text(uint64_t defaultValue) const +{ + uint64_t i = defaultValue; + QueryUnsigned64Text(&i); + return i; +} + +bool XMLElement::BoolText(bool defaultValue) const +{ + bool b = defaultValue; + QueryBoolText(&b); + return b; +} + +double XMLElement::DoubleText(double defaultValue) const +{ + double d = defaultValue; + QueryDoubleText(&d); + return d; +} + +float XMLElement::FloatText(float defaultValue) const +{ + float f = defaultValue; + QueryFloatText(&f); + return f; +} + + +XMLAttribute* XMLElement::FindOrCreateAttribute( const char* name ) +{ + XMLAttribute* last = 0; + XMLAttribute* attrib = 0; + for( attrib = _rootAttribute; + attrib; + last = attrib, attrib = attrib->_next ) { + if ( XMLUtil::StringEqual( attrib->Name(), name ) ) { + break; + } + } + if ( !attrib ) { + attrib = CreateAttribute(); + TIXMLASSERT( attrib ); + if ( last ) { + TIXMLASSERT( last->_next == 0 ); + last->_next = attrib; + } + else { + TIXMLASSERT( _rootAttribute == 0 ); + _rootAttribute = attrib; + } + attrib->SetName( name ); + } + return attrib; +} + + +void XMLElement::DeleteAttribute( const char* name ) +{ + XMLAttribute* prev = 0; + for( XMLAttribute* a=_rootAttribute; a; a=a->_next ) { + if ( XMLUtil::StringEqual( name, a->Name() ) ) { + if ( prev ) { + prev->_next = a->_next; + } + else { + _rootAttribute = a->_next; + } + DeleteAttribute( a ); + break; + } + prev = a; + } +} + + +char* XMLElement::ParseAttributes( char* p, int* curLineNumPtr ) +{ + XMLAttribute* prevAttribute = 0; + + // Read the attributes. + while( p ) { + p = XMLUtil::SkipWhiteSpace( p, curLineNumPtr ); + if ( !(*p) ) { + _document->SetError( XML_ERROR_PARSING_ELEMENT, _parseLineNum, "XMLElement name=%s", Name() ); + return 0; + } + + // attribute. + if (XMLUtil::IsNameStartChar( (unsigned char) *p ) ) { + XMLAttribute* attrib = CreateAttribute(); + TIXMLASSERT( attrib ); + attrib->_parseLineNum = _document->_parseCurLineNum; + + const int attrLineNum = attrib->_parseLineNum; + + p = attrib->ParseDeep( p, _document->ProcessEntities(), curLineNumPtr ); + if ( !p || Attribute( attrib->Name() ) ) { + DeleteAttribute( attrib ); + _document->SetError( XML_ERROR_PARSING_ATTRIBUTE, attrLineNum, "XMLElement name=%s", Name() ); + return 0; + } + // There is a minor bug here: if the attribute in the source xml + // document is duplicated, it will not be detected and the + // attribute will be doubly added. However, tracking the 'prevAttribute' + // avoids re-scanning the attribute list. Preferring performance for + // now, may reconsider in the future. + if ( prevAttribute ) { + TIXMLASSERT( prevAttribute->_next == 0 ); + prevAttribute->_next = attrib; + } + else { + TIXMLASSERT( _rootAttribute == 0 ); + _rootAttribute = attrib; + } + prevAttribute = attrib; + } + // end of the tag + else if ( *p == '>' ) { + ++p; + break; + } + // end of the tag + else if ( *p == '/' && *(p+1) == '>' ) { + _closingType = CLOSED; + return p+2; // done; sealed element. + } + else { + _document->SetError( XML_ERROR_PARSING_ELEMENT, _parseLineNum, 0 ); + return 0; + } + } + return p; +} + +void XMLElement::DeleteAttribute( XMLAttribute* attribute ) +{ + if ( attribute == 0 ) { + return; + } + MemPool* pool = attribute->_memPool; + attribute->~XMLAttribute(); + pool->Free( attribute ); +} + +XMLAttribute* XMLElement::CreateAttribute() +{ + TIXMLASSERT( sizeof( XMLAttribute ) == _document->_attributePool.ItemSize() ); + XMLAttribute* attrib = new (_document->_attributePool.Alloc() ) XMLAttribute(); + TIXMLASSERT( attrib ); + attrib->_memPool = &_document->_attributePool; + attrib->_memPool->SetTracked(); + return attrib; +} + + +XMLElement* XMLElement::InsertNewChildElement(const char* name) +{ + XMLElement* node = _document->NewElement(name); + return InsertEndChild(node) ? node : 0; +} + +XMLComment* XMLElement::InsertNewComment(const char* comment) +{ + XMLComment* node = _document->NewComment(comment); + return InsertEndChild(node) ? node : 0; +} + +XMLText* XMLElement::InsertNewText(const char* text) +{ + XMLText* node = _document->NewText(text); + return InsertEndChild(node) ? node : 0; +} + +XMLDeclaration* XMLElement::InsertNewDeclaration(const char* text) +{ + XMLDeclaration* node = _document->NewDeclaration(text); + return InsertEndChild(node) ? node : 0; +} + +XMLUnknown* XMLElement::InsertNewUnknown(const char* text) +{ + XMLUnknown* node = _document->NewUnknown(text); + return InsertEndChild(node) ? node : 0; +} + + + +// +// +// foobar +// +char* XMLElement::ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr ) +{ + // Read the element name. + p = XMLUtil::SkipWhiteSpace( p, curLineNumPtr ); + + // The closing element is the form. It is + // parsed just like a regular element then deleted from + // the DOM. + if ( *p == '/' ) { + _closingType = CLOSING; + ++p; + } + + p = _value.ParseName( p ); + if ( _value.Empty() ) { + return 0; + } + + p = ParseAttributes( p, curLineNumPtr ); + if ( !p || !*p || _closingType != OPENED ) { + return p; + } + + p = XMLNode::ParseDeep( p, parentEndTag, curLineNumPtr ); + return p; +} + + + +XMLNode* XMLElement::ShallowClone( XMLDocument* doc ) const +{ + if ( !doc ) { + doc = _document; + } + XMLElement* element = doc->NewElement( Value() ); // fixme: this will always allocate memory. Intern? + for( const XMLAttribute* a=FirstAttribute(); a; a=a->Next() ) { + element->SetAttribute( a->Name(), a->Value() ); // fixme: this will always allocate memory. Intern? + } + return element; +} + + +bool XMLElement::ShallowEqual( const XMLNode* compare ) const +{ + TIXMLASSERT( compare ); + const XMLElement* other = compare->ToElement(); + if ( other && XMLUtil::StringEqual( other->Name(), Name() )) { + + const XMLAttribute* a=FirstAttribute(); + const XMLAttribute* b=other->FirstAttribute(); + + while ( a && b ) { + if ( !XMLUtil::StringEqual( a->Value(), b->Value() ) ) { + return false; + } + a = a->Next(); + b = b->Next(); + } + if ( a || b ) { + // different count + return false; + } + return true; + } + return false; +} + + +bool XMLElement::Accept( XMLVisitor* visitor ) const +{ + TIXMLASSERT( visitor ); + if ( visitor->VisitEnter( *this, _rootAttribute ) ) { + for ( const XMLNode* node=FirstChild(); node; node=node->NextSibling() ) { + if ( !node->Accept( visitor ) ) { + break; + } + } + } + return visitor->VisitExit( *this ); +} + + +// --------- XMLDocument ----------- // + +// Warning: List must match 'enum XMLError' +const char* XMLDocument::_errorNames[XML_ERROR_COUNT] = { + "XML_SUCCESS", + "XML_NO_ATTRIBUTE", + "XML_WRONG_ATTRIBUTE_TYPE", + "XML_ERROR_FILE_NOT_FOUND", + "XML_ERROR_FILE_COULD_NOT_BE_OPENED", + "XML_ERROR_FILE_READ_ERROR", + "XML_ERROR_PARSING_ELEMENT", + "XML_ERROR_PARSING_ATTRIBUTE", + "XML_ERROR_PARSING_TEXT", + "XML_ERROR_PARSING_CDATA", + "XML_ERROR_PARSING_COMMENT", + "XML_ERROR_PARSING_DECLARATION", + "XML_ERROR_PARSING_UNKNOWN", + "XML_ERROR_EMPTY_DOCUMENT", + "XML_ERROR_MISMATCHED_ELEMENT", + "XML_ERROR_PARSING", + "XML_CAN_NOT_CONVERT_TEXT", + "XML_NO_TEXT_NODE", + "XML_ELEMENT_DEPTH_EXCEEDED" +}; + + +XMLDocument::XMLDocument( bool processEntities, Whitespace whitespaceMode ) : + XMLNode( 0 ), + _writeBOM( false ), + _processEntities( processEntities ), + _errorID(XML_SUCCESS), + _whitespaceMode( whitespaceMode ), + _errorStr(), + _errorLineNum( 0 ), + _charBuffer( 0 ), + _parseCurLineNum( 0 ), + _parsingDepth(0), + _unlinked(), + _elementPool(), + _attributePool(), + _textPool(), + _commentPool() +{ + // avoid VC++ C4355 warning about 'this' in initializer list (C4355 is off by default in VS2012+) + _document = this; +} + + +XMLDocument::~XMLDocument() +{ + Clear(); +} + + +void XMLDocument::MarkInUse(const XMLNode* const node) +{ + TIXMLASSERT(node); + TIXMLASSERT(node->_parent == 0); + + for (int i = 0; i < _unlinked.Size(); ++i) { + if (node == _unlinked[i]) { + _unlinked.SwapRemove(i); + break; + } + } +} + +void XMLDocument::Clear() +{ + DeleteChildren(); + while( _unlinked.Size()) { + DeleteNode(_unlinked[0]); // Will remove from _unlinked as part of delete. + } + +#ifdef TINYXML2_DEBUG + const bool hadError = Error(); +#endif + ClearError(); + + delete [] _charBuffer; + _charBuffer = 0; + _parsingDepth = 0; + +#if 0 + _textPool.Trace( "text" ); + _elementPool.Trace( "element" ); + _commentPool.Trace( "comment" ); + _attributePool.Trace( "attribute" ); +#endif + +#ifdef TINYXML2_DEBUG + if ( !hadError ) { + TIXMLASSERT( _elementPool.CurrentAllocs() == _elementPool.Untracked() ); + TIXMLASSERT( _attributePool.CurrentAllocs() == _attributePool.Untracked() ); + TIXMLASSERT( _textPool.CurrentAllocs() == _textPool.Untracked() ); + TIXMLASSERT( _commentPool.CurrentAllocs() == _commentPool.Untracked() ); + } +#endif +} + + +void XMLDocument::DeepCopy(XMLDocument* target) const +{ + TIXMLASSERT(target); + if (target == this) { + return; // technically success - a no-op. + } + + target->Clear(); + for (const XMLNode* node = this->FirstChild(); node; node = node->NextSibling()) { + target->InsertEndChild(node->DeepClone(target)); + } +} + +XMLElement* XMLDocument::NewElement( const char* name ) +{ + XMLElement* ele = CreateUnlinkedNode( _elementPool ); + ele->SetName( name ); + return ele; +} + + +XMLComment* XMLDocument::NewComment( const char* str ) +{ + XMLComment* comment = CreateUnlinkedNode( _commentPool ); + comment->SetValue( str ); + return comment; +} + + +XMLText* XMLDocument::NewText( const char* str ) +{ + XMLText* text = CreateUnlinkedNode( _textPool ); + text->SetValue( str ); + return text; +} + + +XMLDeclaration* XMLDocument::NewDeclaration( const char* str ) +{ + XMLDeclaration* dec = CreateUnlinkedNode( _commentPool ); + dec->SetValue( str ? str : "xml version=\"1.0\" encoding=\"UTF-8\"" ); + return dec; +} + + +XMLUnknown* XMLDocument::NewUnknown( const char* str ) +{ + XMLUnknown* unk = CreateUnlinkedNode( _commentPool ); + unk->SetValue( str ); + return unk; +} + +static FILE* callfopen( const char* filepath, const char* mode ) +{ + TIXMLASSERT( filepath ); + TIXMLASSERT( mode ); +#if defined(_MSC_VER) && (_MSC_VER >= 1400 ) && (!defined WINCE) + FILE* fp = 0; + const errno_t err = fopen_s( &fp, filepath, mode ); + if ( err ) { + return 0; + } +#else + FILE* fp = fopen( filepath, mode ); +#endif + return fp; +} + +void XMLDocument::DeleteNode( XMLNode* node ) { + TIXMLASSERT( node ); + TIXMLASSERT(node->_document == this ); + if (node->_parent) { + node->_parent->DeleteChild( node ); + } + else { + // Isn't in the tree. + // Use the parent delete. + // Also, we need to mark it tracked: we 'know' + // it was never used. + node->_memPool->SetTracked(); + // Call the static XMLNode version: + XMLNode::DeleteNode(node); + } +} + + +XMLError XMLDocument::LoadFile( const char* filename ) +{ + if ( !filename ) { + TIXMLASSERT( false ); + SetError( XML_ERROR_FILE_COULD_NOT_BE_OPENED, 0, "filename=" ); + return _errorID; + } + + Clear(); + FILE* fp = callfopen( filename, "rb" ); + if ( !fp ) { + SetError( XML_ERROR_FILE_NOT_FOUND, 0, "filename=%s", filename ); + return _errorID; + } + LoadFile( fp ); + fclose( fp ); + return _errorID; +} + +XMLError XMLDocument::LoadFile( FILE* fp ) +{ + Clear(); + + TIXML_FSEEK( fp, 0, SEEK_SET ); + if ( fgetc( fp ) == EOF && ferror( fp ) != 0 ) { + SetError( XML_ERROR_FILE_READ_ERROR, 0, 0 ); + return _errorID; + } + + TIXML_FSEEK( fp, 0, SEEK_END ); + + unsigned long long filelength; + { + const long long fileLengthSigned = TIXML_FTELL( fp ); + TIXML_FSEEK( fp, 0, SEEK_SET ); + if ( fileLengthSigned == -1L ) { + SetError( XML_ERROR_FILE_READ_ERROR, 0, 0 ); + return _errorID; + } + TIXMLASSERT( fileLengthSigned >= 0 ); + filelength = static_cast(fileLengthSigned); + } + + const size_t maxSizeT = static_cast(-1); + // We'll do the comparison as an unsigned long long, because that's guaranteed to be at + // least 8 bytes, even on a 32-bit platform. + if ( filelength >= static_cast(maxSizeT) ) { + // Cannot handle files which won't fit in buffer together with null terminator + SetError( XML_ERROR_FILE_READ_ERROR, 0, 0 ); + return _errorID; + } + + if ( filelength == 0 ) { + SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 ); + return _errorID; + } + + const size_t size = static_cast(filelength); + TIXMLASSERT( _charBuffer == 0 ); + _charBuffer = new char[size+1]; + const size_t read = fread( _charBuffer, 1, size, fp ); + if ( read != size ) { + SetError( XML_ERROR_FILE_READ_ERROR, 0, 0 ); + return _errorID; + } + + _charBuffer[size] = 0; + + Parse(); + return _errorID; +} + + +XMLError XMLDocument::SaveFile( const char* filename, bool compact ) +{ + if ( !filename ) { + TIXMLASSERT( false ); + SetError( XML_ERROR_FILE_COULD_NOT_BE_OPENED, 0, "filename=" ); + return _errorID; + } + + FILE* fp = callfopen( filename, "w" ); + if ( !fp ) { + SetError( XML_ERROR_FILE_COULD_NOT_BE_OPENED, 0, "filename=%s", filename ); + return _errorID; + } + SaveFile(fp, compact); + fclose( fp ); + return _errorID; +} + + +XMLError XMLDocument::SaveFile( FILE* fp, bool compact ) +{ + // Clear any error from the last save, otherwise it will get reported + // for *this* call. + ClearError(); + XMLPrinter stream( fp, compact ); + Print( &stream ); + return _errorID; +} + + +XMLError XMLDocument::Parse( const char* xml, size_t nBytes ) +{ + Clear(); + + if ( nBytes == 0 || !xml || !*xml ) { + SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 ); + return _errorID; + } + if ( nBytes == static_cast(-1) ) { + nBytes = strlen( xml ); + } + TIXMLASSERT( _charBuffer == 0 ); + _charBuffer = new char[ nBytes+1 ]; + memcpy( _charBuffer, xml, nBytes ); + _charBuffer[nBytes] = 0; + + Parse(); + if ( Error() ) { + // clean up now essentially dangling memory. + // and the parse fail can put objects in the + // pools that are dead and inaccessible. + DeleteChildren(); + _elementPool.Clear(); + _attributePool.Clear(); + _textPool.Clear(); + _commentPool.Clear(); + } + return _errorID; +} + + +void XMLDocument::Print( XMLPrinter* streamer ) const +{ + if ( streamer ) { + Accept( streamer ); + } + else { + XMLPrinter stdoutStreamer( stdout ); + Accept( &stdoutStreamer ); + } +} + + +void XMLDocument::ClearError() { + _errorID = XML_SUCCESS; + _errorLineNum = 0; + _errorStr.Reset(); +} + + +void XMLDocument::SetError( XMLError error, int lineNum, const char* format, ... ) +{ + TIXMLASSERT( error >= 0 && error < XML_ERROR_COUNT ); + _errorID = error; + _errorLineNum = lineNum; + _errorStr.Reset(); + + const size_t BUFFER_SIZE = 1000; + char* buffer = new char[BUFFER_SIZE]; + + TIXMLASSERT(sizeof(error) <= sizeof(int)); + TIXML_SNPRINTF(buffer, BUFFER_SIZE, "Error=%s ErrorID=%d (0x%x) Line number=%d", ErrorIDToName(error), int(error), int(error), lineNum); + + if (format) { + size_t len = strlen(buffer); + TIXML_SNPRINTF(buffer + len, BUFFER_SIZE - len, ": "); + len = strlen(buffer); + + va_list va; + va_start(va, format); + TIXML_VSNPRINTF(buffer + len, BUFFER_SIZE - len, format, va); + va_end(va); + } + _errorStr.SetStr(buffer); + delete[] buffer; +} + + +/*static*/ const char* XMLDocument::ErrorIDToName(XMLError errorID) +{ + TIXMLASSERT( errorID >= 0 && errorID < XML_ERROR_COUNT ); + const char* errorName = _errorNames[errorID]; + TIXMLASSERT( errorName && errorName[0] ); + return errorName; +} + +const char* XMLDocument::ErrorStr() const +{ + return _errorStr.Empty() ? "" : _errorStr.GetStr(); +} + + +void XMLDocument::PrintError() const +{ + printf("%s\n", ErrorStr()); +} + +const char* XMLDocument::ErrorName() const +{ + return ErrorIDToName(_errorID); +} + +void XMLDocument::Parse() +{ + TIXMLASSERT( NoChildren() ); // Clear() must have been called previously + TIXMLASSERT( _charBuffer ); + _parseCurLineNum = 1; + _parseLineNum = 1; + char* p = _charBuffer; + p = XMLUtil::SkipWhiteSpace( p, &_parseCurLineNum ); + p = const_cast( XMLUtil::ReadBOM( p, &_writeBOM ) ); + if ( !*p ) { + SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 ); + return; + } + ParseDeep(p, 0, &_parseCurLineNum ); +} + +void XMLDocument::PushDepth() +{ + _parsingDepth++; + if (_parsingDepth == TINYXML2_MAX_ELEMENT_DEPTH) { + SetError(XML_ELEMENT_DEPTH_EXCEEDED, _parseCurLineNum, "Element nesting is too deep." ); + } +} + +void XMLDocument::PopDepth() +{ + TIXMLASSERT(_parsingDepth > 0); + --_parsingDepth; +} + +XMLPrinter::XMLPrinter( FILE* file, bool compact, int depth ) : + _elementJustOpened( false ), + _stack(), + _firstElement( true ), + _fp( file ), + _depth( depth ), + _textDepth( -1 ), + _processEntities( true ), + _compactMode( compact ), + _buffer() +{ + for( int i=0; i(entityValue); + TIXMLASSERT( flagIndex < ENTITY_RANGE ); + _entityFlag[flagIndex] = true; + } + _restrictedEntityFlag[static_cast('&')] = true; + _restrictedEntityFlag[static_cast('<')] = true; + _restrictedEntityFlag[static_cast('>')] = true; // not required, but consistency is nice + _buffer.Push( 0 ); +} + + +void XMLPrinter::Print( const char* format, ... ) +{ + va_list va; + va_start( va, format ); + + if ( _fp ) { + vfprintf( _fp, format, va ); + } + else { + const int len = TIXML_VSCPRINTF( format, va ); + // Close out and re-start the va-args + va_end( va ); + TIXMLASSERT( len >= 0 ); + va_start( va, format ); + TIXMLASSERT( _buffer.Size() > 0 && _buffer[_buffer.Size() - 1] == 0 ); + char* p = _buffer.PushArr( len ) - 1; // back up over the null terminator. + TIXML_VSNPRINTF( p, len+1, format, va ); + } + va_end( va ); +} + + +void XMLPrinter::Write( const char* data, size_t size ) +{ + if ( _fp ) { + fwrite ( data , sizeof(char), size, _fp); + } + else { + char* p = _buffer.PushArr( static_cast(size) ) - 1; // back up over the null terminator. + memcpy( p, data, size ); + p[size] = 0; + } +} + + +void XMLPrinter::Putc( char ch ) +{ + if ( _fp ) { + fputc ( ch, _fp); + } + else { + char* p = _buffer.PushArr( sizeof(char) ) - 1; // back up over the null terminator. + p[0] = ch; + p[1] = 0; + } +} + + +void XMLPrinter::PrintSpace( int depth ) +{ + for( int i=0; i 0 && *q < ENTITY_RANGE ) { + // Check for entities. If one is found, flush + // the stream up until the entity, write the + // entity, and keep looking. + if ( flag[static_cast(*q)] ) { + while ( p < q ) { + const size_t delta = q - p; + const int toPrint = ( INT_MAX < delta ) ? INT_MAX : static_cast(delta); + Write( p, toPrint ); + p += toPrint; + } + bool entityPatternPrinted = false; + for( int i=0; i(delta); + Write( p, toPrint ); + } + } + else { + Write( p ); + } +} + + +void XMLPrinter::PushHeader( bool writeBOM, bool writeDec ) +{ + if ( writeBOM ) { + static const unsigned char bom[] = { TIXML_UTF_LEAD_0, TIXML_UTF_LEAD_1, TIXML_UTF_LEAD_2, 0 }; + Write( reinterpret_cast< const char* >( bom ) ); + } + if ( writeDec ) { + PushDeclaration( "xml version=\"1.0\"" ); + } +} + +void XMLPrinter::PrepareForNewNode( bool compactMode ) +{ + SealElementIfJustOpened(); + + if ( compactMode ) { + return; + } + + if ( _firstElement ) { + PrintSpace (_depth); + } else if ( _textDepth < 0) { + Putc( '\n' ); + PrintSpace( _depth ); + } + + _firstElement = false; +} + +void XMLPrinter::OpenElement( const char* name, bool compactMode ) +{ + PrepareForNewNode( compactMode ); + _stack.Push( name ); + + Write ( "<" ); + Write ( name ); + + _elementJustOpened = true; + ++_depth; +} + + +void XMLPrinter::PushAttribute( const char* name, const char* value ) +{ + TIXMLASSERT( _elementJustOpened ); + Putc ( ' ' ); + Write( name ); + Write( "=\"" ); + PrintString( value, false ); + Putc ( '\"' ); +} + + +void XMLPrinter::PushAttribute( const char* name, int v ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( v, buf, BUF_SIZE ); + PushAttribute( name, buf ); +} + + +void XMLPrinter::PushAttribute( const char* name, unsigned v ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( v, buf, BUF_SIZE ); + PushAttribute( name, buf ); +} + + +void XMLPrinter::PushAttribute(const char* name, int64_t v) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr(v, buf, BUF_SIZE); + PushAttribute(name, buf); +} + + +void XMLPrinter::PushAttribute(const char* name, uint64_t v) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr(v, buf, BUF_SIZE); + PushAttribute(name, buf); +} + + +void XMLPrinter::PushAttribute( const char* name, bool v ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( v, buf, BUF_SIZE ); + PushAttribute( name, buf ); +} + + +void XMLPrinter::PushAttribute( const char* name, double v ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( v, buf, BUF_SIZE ); + PushAttribute( name, buf ); +} + + +void XMLPrinter::CloseElement( bool compactMode ) +{ + --_depth; + const char* name = _stack.Pop(); + + if ( _elementJustOpened ) { + Write( "/>" ); + } + else { + if ( _textDepth < 0 && !compactMode) { + Putc( '\n' ); + PrintSpace( _depth ); + } + Write ( "" ); + } + + if ( _textDepth == _depth ) { + _textDepth = -1; + } + if ( _depth == 0 && !compactMode) { + Putc( '\n' ); + } + _elementJustOpened = false; +} + + +void XMLPrinter::SealElementIfJustOpened() +{ + if ( !_elementJustOpened ) { + return; + } + _elementJustOpened = false; + Putc( '>' ); +} + + +void XMLPrinter::PushText( const char* text, bool cdata ) +{ + _textDepth = _depth-1; + + SealElementIfJustOpened(); + if ( cdata ) { + Write( "" ); + } + else { + PrintString( text, true ); + } +} + + +void XMLPrinter::PushText( int64_t value ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( value, buf, BUF_SIZE ); + PushText( buf, false ); +} + + +void XMLPrinter::PushText( uint64_t value ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr(value, buf, BUF_SIZE); + PushText(buf, false); +} + + +void XMLPrinter::PushText( int value ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( value, buf, BUF_SIZE ); + PushText( buf, false ); +} + + +void XMLPrinter::PushText( unsigned value ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( value, buf, BUF_SIZE ); + PushText( buf, false ); +} + + +void XMLPrinter::PushText( bool value ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( value, buf, BUF_SIZE ); + PushText( buf, false ); +} + + +void XMLPrinter::PushText( float value ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( value, buf, BUF_SIZE ); + PushText( buf, false ); +} + + +void XMLPrinter::PushText( double value ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( value, buf, BUF_SIZE ); + PushText( buf, false ); +} + + +void XMLPrinter::PushComment( const char* comment ) +{ + PrepareForNewNode( _compactMode ); + + Write( "" ); +} + + +void XMLPrinter::PushDeclaration( const char* value ) +{ + PrepareForNewNode( _compactMode ); + + Write( "" ); +} + + +void XMLPrinter::PushUnknown( const char* value ) +{ + PrepareForNewNode( _compactMode ); + + Write( "' ); +} + + +bool XMLPrinter::VisitEnter( const XMLDocument& doc ) +{ + _processEntities = doc.ProcessEntities(); + if ( doc.HasBOM() ) { + PushHeader( true, false ); + } + return true; +} + + +bool XMLPrinter::VisitEnter( const XMLElement& element, const XMLAttribute* attribute ) +{ + const XMLElement* parentElem = 0; + if ( element.Parent() ) { + parentElem = element.Parent()->ToElement(); + } + const bool compactMode = parentElem ? CompactMode( *parentElem ) : _compactMode; + OpenElement( element.Name(), compactMode ); + while ( attribute ) { + PushAttribute( attribute->Name(), attribute->Value() ); + attribute = attribute->Next(); + } + return true; +} + + +bool XMLPrinter::VisitExit( const XMLElement& element ) +{ + CloseElement( CompactMode(element) ); + return true; +} + + +bool XMLPrinter::Visit( const XMLText& text ) +{ + PushText( text.Value(), text.CData() ); + return true; +} + + +bool XMLPrinter::Visit( const XMLComment& comment ) +{ + PushComment( comment.Value() ); + return true; +} + +bool XMLPrinter::Visit( const XMLDeclaration& declaration ) +{ + PushDeclaration( declaration.Value() ); + return true; +} + + +bool XMLPrinter::Visit( const XMLUnknown& unknown ) +{ + PushUnknown( unknown.Value() ); + return true; +} + +} // namespace tinyxml2 diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/tinyxml2.h b/240510-常德GDX1-1相机-1280x800/Cigarette/tinyxml2.h new file mode 100644 index 00000000..02c0d40a --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/tinyxml2.h @@ -0,0 +1,2380 @@ +/* +Original code by Lee Thomason (www.grinninglizard.com) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must +not claim that you wrote the original software. If you use this +software in a product, an acknowledgment in the product documentation +would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. +*/ + +#ifndef TINYXML2_INCLUDED +#define TINYXML2_INCLUDED + +#if defined(ANDROID_NDK) || defined(__BORLANDC__) || defined(__QNXNTO__) +# include +# include +# include +# include +# include +# if defined(__PS3__) +# include +# endif +#else +# include +# include +# include +# include +# include +#endif +#include + +/* + TODO: intern strings instead of allocation. +*/ +/* + gcc: + g++ -Wall -DTINYXML2_DEBUG tinyxml2.cpp xmltest.cpp -o gccxmltest.exe + + Formatting, Artistic Style: + AStyle.exe --style=1tbs --indent-switches --break-closing-brackets --indent-preprocessor tinyxml2.cpp tinyxml2.h +*/ + +#if defined( _DEBUG ) || defined (__DEBUG__) +# ifndef TINYXML2_DEBUG +# define TINYXML2_DEBUG +# endif +#endif + +#ifdef _MSC_VER +# pragma warning(push) +# pragma warning(disable: 4251) +#endif + +#ifdef _WIN32 +# ifdef TINYXML2_EXPORT +# define TINYXML2_LIB __declspec(dllexport) +# elif defined(TINYXML2_IMPORT) +# define TINYXML2_LIB __declspec(dllimport) +# else +# define TINYXML2_LIB +# endif +#elif __GNUC__ >= 4 +# define TINYXML2_LIB __attribute__((visibility("default"))) +#else +# define TINYXML2_LIB +#endif + + +#if !defined(TIXMLASSERT) +#if defined(TINYXML2_DEBUG) +# if defined(_MSC_VER) +# // "(void)0," is for suppressing C4127 warning in "assert(false)", "assert(true)" and the like +# define TIXMLASSERT( x ) do { if ( !((void)0,(x))) { __debugbreak(); } } while(false) +# elif defined (ANDROID_NDK) +# include +# define TIXMLASSERT( x ) do { if ( !(x)) { __android_log_assert( "assert", "grinliz", "ASSERT in '%s' at %d.", __FILE__, __LINE__ ); } } while(false) +# else +# include +# define TIXMLASSERT assert +# endif +#else +# define TIXMLASSERT( x ) do {} while(false) +#endif +#endif + +/* Versioning, past 1.0.14: + http://semver.org/ +*/ +static const int TIXML2_MAJOR_VERSION = 9; +static const int TIXML2_MINOR_VERSION = 0; +static const int TIXML2_PATCH_VERSION = 0; + +#define TINYXML2_MAJOR_VERSION 9 +#define TINYXML2_MINOR_VERSION 0 +#define TINYXML2_PATCH_VERSION 0 + +// A fixed element depth limit is problematic. There needs to be a +// limit to avoid a stack overflow. However, that limit varies per +// system, and the capacity of the stack. On the other hand, it's a trivial +// attack that can result from ill, malicious, or even correctly formed XML, +// so there needs to be a limit in place. +static const int TINYXML2_MAX_ELEMENT_DEPTH = 500; + +namespace tinyxml2 +{ +class XMLDocument; +class XMLElement; +class XMLAttribute; +class XMLComment; +class XMLText; +class XMLDeclaration; +class XMLUnknown; +class XMLPrinter; + +/* + A class that wraps strings. Normally stores the start and end + pointers into the XML file itself, and will apply normalization + and entity translation if actually read. Can also store (and memory + manage) a traditional char[] + + Isn't clear why TINYXML2_LIB is needed; but seems to fix #719 +*/ +class TINYXML2_LIB StrPair +{ +public: + enum Mode { + NEEDS_ENTITY_PROCESSING = 0x01, + NEEDS_NEWLINE_NORMALIZATION = 0x02, + NEEDS_WHITESPACE_COLLAPSING = 0x04, + + TEXT_ELEMENT = NEEDS_ENTITY_PROCESSING | NEEDS_NEWLINE_NORMALIZATION, + TEXT_ELEMENT_LEAVE_ENTITIES = NEEDS_NEWLINE_NORMALIZATION, + ATTRIBUTE_NAME = 0, + ATTRIBUTE_VALUE = NEEDS_ENTITY_PROCESSING | NEEDS_NEWLINE_NORMALIZATION, + ATTRIBUTE_VALUE_LEAVE_ENTITIES = NEEDS_NEWLINE_NORMALIZATION, + COMMENT = NEEDS_NEWLINE_NORMALIZATION + }; + + StrPair() : _flags( 0 ), _start( 0 ), _end( 0 ) {} + ~StrPair(); + + void Set( char* start, char* end, int flags ) { + TIXMLASSERT( start ); + TIXMLASSERT( end ); + Reset(); + _start = start; + _end = end; + _flags = flags | NEEDS_FLUSH; + } + + const char* GetStr(); + + bool Empty() const { + return _start == _end; + } + + void SetInternedStr( const char* str ) { + Reset(); + _start = const_cast(str); + } + + void SetStr( const char* str, int flags=0 ); + + char* ParseText( char* in, const char* endTag, int strFlags, int* curLineNumPtr ); + char* ParseName( char* in ); + + void TransferTo( StrPair* other ); + void Reset(); + +private: + void CollapseWhitespace(); + + enum { + NEEDS_FLUSH = 0x100, + NEEDS_DELETE = 0x200 + }; + + int _flags; + char* _start; + char* _end; + + StrPair( const StrPair& other ); // not supported + void operator=( const StrPair& other ); // not supported, use TransferTo() +}; + + +/* + A dynamic array of Plain Old Data. Doesn't support constructors, etc. + Has a small initial memory pool, so that low or no usage will not + cause a call to new/delete +*/ +template +class DynArray +{ +public: + DynArray() : + _mem( _pool ), + _allocated( INITIAL_SIZE ), + _size( 0 ) + { + } + + ~DynArray() { + if ( _mem != _pool ) { + delete [] _mem; + } + } + + void Clear() { + _size = 0; + } + + void Push( T t ) { + TIXMLASSERT( _size < INT_MAX ); + EnsureCapacity( _size+1 ); + _mem[_size] = t; + ++_size; + } + + T* PushArr( int count ) { + TIXMLASSERT( count >= 0 ); + TIXMLASSERT( _size <= INT_MAX - count ); + EnsureCapacity( _size+count ); + T* ret = &_mem[_size]; + _size += count; + return ret; + } + + T Pop() { + TIXMLASSERT( _size > 0 ); + --_size; + return _mem[_size]; + } + + void PopArr( int count ) { + TIXMLASSERT( _size >= count ); + _size -= count; + } + + bool Empty() const { + return _size == 0; + } + + T& operator[](int i) { + TIXMLASSERT( i>= 0 && i < _size ); + return _mem[i]; + } + + const T& operator[](int i) const { + TIXMLASSERT( i>= 0 && i < _size ); + return _mem[i]; + } + + const T& PeekTop() const { + TIXMLASSERT( _size > 0 ); + return _mem[ _size - 1]; + } + + int Size() const { + TIXMLASSERT( _size >= 0 ); + return _size; + } + + int Capacity() const { + TIXMLASSERT( _allocated >= INITIAL_SIZE ); + return _allocated; + } + + void SwapRemove(int i) { + TIXMLASSERT(i >= 0 && i < _size); + TIXMLASSERT(_size > 0); + _mem[i] = _mem[_size - 1]; + --_size; + } + + const T* Mem() const { + TIXMLASSERT( _mem ); + return _mem; + } + + T* Mem() { + TIXMLASSERT( _mem ); + return _mem; + } + +private: + DynArray( const DynArray& ); // not supported + void operator=( const DynArray& ); // not supported + + void EnsureCapacity( int cap ) { + TIXMLASSERT( cap > 0 ); + if ( cap > _allocated ) { + TIXMLASSERT( cap <= INT_MAX / 2 ); + const int newAllocated = cap * 2; + T* newMem = new T[newAllocated]; + TIXMLASSERT( newAllocated >= _size ); + memcpy( newMem, _mem, sizeof(T)*_size ); // warning: not using constructors, only works for PODs + if ( _mem != _pool ) { + delete [] _mem; + } + _mem = newMem; + _allocated = newAllocated; + } + } + + T* _mem; + T _pool[INITIAL_SIZE]; + int _allocated; // objects allocated + int _size; // number objects in use +}; + + +/* + Parent virtual class of a pool for fast allocation + and deallocation of objects. +*/ +class MemPool +{ +public: + MemPool() {} + virtual ~MemPool() {} + + virtual int ItemSize() const = 0; + virtual void* Alloc() = 0; + virtual void Free( void* ) = 0; + virtual void SetTracked() = 0; +}; + + +/* + Template child class to create pools of the correct type. +*/ +template< int ITEM_SIZE > +class MemPoolT : public MemPool +{ +public: + MemPoolT() : _blockPtrs(), _root(0), _currentAllocs(0), _nAllocs(0), _maxAllocs(0), _nUntracked(0) {} + ~MemPoolT() { + MemPoolT< ITEM_SIZE >::Clear(); + } + + void Clear() { + // Delete the blocks. + while( !_blockPtrs.Empty()) { + Block* lastBlock = _blockPtrs.Pop(); + delete lastBlock; + } + _root = 0; + _currentAllocs = 0; + _nAllocs = 0; + _maxAllocs = 0; + _nUntracked = 0; + } + + virtual int ItemSize() const { + return ITEM_SIZE; + } + int CurrentAllocs() const { + return _currentAllocs; + } + + virtual void* Alloc() { + if ( !_root ) { + // Need a new block. + Block* block = new Block; + _blockPtrs.Push( block ); + + Item* blockItems = block->items; + for( int i = 0; i < ITEMS_PER_BLOCK - 1; ++i ) { + blockItems[i].next = &(blockItems[i + 1]); + } + blockItems[ITEMS_PER_BLOCK - 1].next = 0; + _root = blockItems; + } + Item* const result = _root; + TIXMLASSERT( result != 0 ); + _root = _root->next; + + ++_currentAllocs; + if ( _currentAllocs > _maxAllocs ) { + _maxAllocs = _currentAllocs; + } + ++_nAllocs; + ++_nUntracked; + return result; + } + + virtual void Free( void* mem ) { + if ( !mem ) { + return; + } + --_currentAllocs; + Item* item = static_cast( mem ); +#ifdef TINYXML2_DEBUG + memset( item, 0xfe, sizeof( *item ) ); +#endif + item->next = _root; + _root = item; + } + void Trace( const char* name ) { + printf( "Mempool %s watermark=%d [%dk] current=%d size=%d nAlloc=%d blocks=%d\n", + name, _maxAllocs, _maxAllocs * ITEM_SIZE / 1024, _currentAllocs, + ITEM_SIZE, _nAllocs, _blockPtrs.Size() ); + } + + void SetTracked() { + --_nUntracked; + } + + int Untracked() const { + return _nUntracked; + } + + // This number is perf sensitive. 4k seems like a good tradeoff on my machine. + // The test file is large, 170k. + // Release: VS2010 gcc(no opt) + // 1k: 4000 + // 2k: 4000 + // 4k: 3900 21000 + // 16k: 5200 + // 32k: 4300 + // 64k: 4000 21000 + // Declared public because some compilers do not accept to use ITEMS_PER_BLOCK + // in private part if ITEMS_PER_BLOCK is private + enum { ITEMS_PER_BLOCK = (4 * 1024) / ITEM_SIZE }; + +private: + MemPoolT( const MemPoolT& ); // not supported + void operator=( const MemPoolT& ); // not supported + + union Item { + Item* next; + char itemData[ITEM_SIZE]; + }; + struct Block { + Item items[ITEMS_PER_BLOCK]; + }; + DynArray< Block*, 10 > _blockPtrs; + Item* _root; + + int _currentAllocs; + int _nAllocs; + int _maxAllocs; + int _nUntracked; +}; + + + +/** + Implements the interface to the "Visitor pattern" (see the Accept() method.) + If you call the Accept() method, it requires being passed a XMLVisitor + class to handle callbacks. For nodes that contain other nodes (Document, Element) + you will get called with a VisitEnter/VisitExit pair. Nodes that are always leafs + are simply called with Visit(). + + If you return 'true' from a Visit method, recursive parsing will continue. If you return + false, no children of this node or its siblings will be visited. + + All flavors of Visit methods have a default implementation that returns 'true' (continue + visiting). You need to only override methods that are interesting to you. + + Generally Accept() is called on the XMLDocument, although all nodes support visiting. + + You should never change the document from a callback. + + @sa XMLNode::Accept() +*/ +class TINYXML2_LIB XMLVisitor +{ +public: + virtual ~XMLVisitor() {} + + /// Visit a document. + virtual bool VisitEnter( const XMLDocument& /*doc*/ ) { + return true; + } + /// Visit a document. + virtual bool VisitExit( const XMLDocument& /*doc*/ ) { + return true; + } + + /// Visit an element. + virtual bool VisitEnter( const XMLElement& /*element*/, const XMLAttribute* /*firstAttribute*/ ) { + return true; + } + /// Visit an element. + virtual bool VisitExit( const XMLElement& /*element*/ ) { + return true; + } + + /// Visit a declaration. + virtual bool Visit( const XMLDeclaration& /*declaration*/ ) { + return true; + } + /// Visit a text node. + virtual bool Visit( const XMLText& /*text*/ ) { + return true; + } + /// Visit a comment node. + virtual bool Visit( const XMLComment& /*comment*/ ) { + return true; + } + /// Visit an unknown node. + virtual bool Visit( const XMLUnknown& /*unknown*/ ) { + return true; + } +}; + +// WARNING: must match XMLDocument::_errorNames[] +enum XMLError { + XML_SUCCESS = 0, + XML_NO_ATTRIBUTE, + XML_WRONG_ATTRIBUTE_TYPE, + XML_ERROR_FILE_NOT_FOUND, + XML_ERROR_FILE_COULD_NOT_BE_OPENED, + XML_ERROR_FILE_READ_ERROR, + XML_ERROR_PARSING_ELEMENT, + XML_ERROR_PARSING_ATTRIBUTE, + XML_ERROR_PARSING_TEXT, + XML_ERROR_PARSING_CDATA, + XML_ERROR_PARSING_COMMENT, + XML_ERROR_PARSING_DECLARATION, + XML_ERROR_PARSING_UNKNOWN, + XML_ERROR_EMPTY_DOCUMENT, + XML_ERROR_MISMATCHED_ELEMENT, + XML_ERROR_PARSING, + XML_CAN_NOT_CONVERT_TEXT, + XML_NO_TEXT_NODE, + XML_ELEMENT_DEPTH_EXCEEDED, + + XML_ERROR_COUNT +}; + + +/* + Utility functionality. +*/ +class TINYXML2_LIB XMLUtil +{ +public: + static const char* SkipWhiteSpace( const char* p, int* curLineNumPtr ) { + TIXMLASSERT( p ); + + while( IsWhiteSpace(*p) ) { + if (curLineNumPtr && *p == '\n') { + ++(*curLineNumPtr); + } + ++p; + } + TIXMLASSERT( p ); + return p; + } + static char* SkipWhiteSpace( char* const p, int* curLineNumPtr ) { + return const_cast( SkipWhiteSpace( const_cast(p), curLineNumPtr ) ); + } + + // Anything in the high order range of UTF-8 is assumed to not be whitespace. This isn't + // correct, but simple, and usually works. + static bool IsWhiteSpace( char p ) { + return !IsUTF8Continuation(p) && isspace( static_cast(p) ); + } + + inline static bool IsNameStartChar( unsigned char ch ) { + if ( ch >= 128 ) { + // This is a heuristic guess in attempt to not implement Unicode-aware isalpha() + return true; + } + if ( isalpha( ch ) ) { + return true; + } + return ch == ':' || ch == '_'; + } + + inline static bool IsNameChar( unsigned char ch ) { + return IsNameStartChar( ch ) + || isdigit( ch ) + || ch == '.' + || ch == '-'; + } + + inline static bool IsPrefixHex( const char* p) { + p = SkipWhiteSpace(p, 0); + return p && *p == '0' && ( *(p + 1) == 'x' || *(p + 1) == 'X'); + } + + inline static bool StringEqual( const char* p, const char* q, int nChar=INT_MAX ) { + if ( p == q ) { + return true; + } + TIXMLASSERT( p ); + TIXMLASSERT( q ); + TIXMLASSERT( nChar >= 0 ); + return strncmp( p, q, nChar ) == 0; + } + + inline static bool IsUTF8Continuation( const char p ) { + return ( p & 0x80 ) != 0; + } + + static const char* ReadBOM( const char* p, bool* hasBOM ); + // p is the starting location, + // the UTF-8 value of the entity will be placed in value, and length filled in. + static const char* GetCharacterRef( const char* p, char* value, int* length ); + static void ConvertUTF32ToUTF8( unsigned long input, char* output, int* length ); + + // converts primitive types to strings + static void ToStr( int v, char* buffer, int bufferSize ); + static void ToStr( unsigned v, char* buffer, int bufferSize ); + static void ToStr( bool v, char* buffer, int bufferSize ); + static void ToStr( float v, char* buffer, int bufferSize ); + static void ToStr( double v, char* buffer, int bufferSize ); + static void ToStr(int64_t v, char* buffer, int bufferSize); + static void ToStr(uint64_t v, char* buffer, int bufferSize); + + // converts strings to primitive types + static bool ToInt( const char* str, int* value ); + static bool ToUnsigned( const char* str, unsigned* value ); + static bool ToBool( const char* str, bool* value ); + static bool ToFloat( const char* str, float* value ); + static bool ToDouble( const char* str, double* value ); + static bool ToInt64(const char* str, int64_t* value); + static bool ToUnsigned64(const char* str, uint64_t* value); + // Changes what is serialized for a boolean value. + // Default to "true" and "false". Shouldn't be changed + // unless you have a special testing or compatibility need. + // Be careful: static, global, & not thread safe. + // Be sure to set static const memory as parameters. + static void SetBoolSerialization(const char* writeTrue, const char* writeFalse); + +private: + static const char* writeBoolTrue; + static const char* writeBoolFalse; +}; + + +/** XMLNode is a base class for every object that is in the + XML Document Object Model (DOM), except XMLAttributes. + Nodes have siblings, a parent, and children which can + be navigated. A node is always in a XMLDocument. + The type of a XMLNode can be queried, and it can + be cast to its more defined type. + + A XMLDocument allocates memory for all its Nodes. + When the XMLDocument gets deleted, all its Nodes + will also be deleted. + + @verbatim + A Document can contain: Element (container or leaf) + Comment (leaf) + Unknown (leaf) + Declaration( leaf ) + + An Element can contain: Element (container or leaf) + Text (leaf) + Attributes (not on tree) + Comment (leaf) + Unknown (leaf) + + @endverbatim +*/ +class TINYXML2_LIB XMLNode +{ + friend class XMLDocument; + friend class XMLElement; +public: + + /// Get the XMLDocument that owns this XMLNode. + const XMLDocument* GetDocument() const { + TIXMLASSERT( _document ); + return _document; + } + /// Get the XMLDocument that owns this XMLNode. + XMLDocument* GetDocument() { + TIXMLASSERT( _document ); + return _document; + } + + /// Safely cast to an Element, or null. + virtual XMLElement* ToElement() { + return 0; + } + /// Safely cast to Text, or null. + virtual XMLText* ToText() { + return 0; + } + /// Safely cast to a Comment, or null. + virtual XMLComment* ToComment() { + return 0; + } + /// Safely cast to a Document, or null. + virtual XMLDocument* ToDocument() { + return 0; + } + /// Safely cast to a Declaration, or null. + virtual XMLDeclaration* ToDeclaration() { + return 0; + } + /// Safely cast to an Unknown, or null. + virtual XMLUnknown* ToUnknown() { + return 0; + } + + virtual const XMLElement* ToElement() const { + return 0; + } + virtual const XMLText* ToText() const { + return 0; + } + virtual const XMLComment* ToComment() const { + return 0; + } + virtual const XMLDocument* ToDocument() const { + return 0; + } + virtual const XMLDeclaration* ToDeclaration() const { + return 0; + } + virtual const XMLUnknown* ToUnknown() const { + return 0; + } + + /** The meaning of 'value' changes for the specific type. + @verbatim + Document: empty (NULL is returned, not an empty string) + Element: name of the element + Comment: the comment text + Unknown: the tag contents + Text: the text string + @endverbatim + */ + const char* Value() const; + + /** Set the Value of an XML node. + @sa Value() + */ + void SetValue( const char* val, bool staticMem=false ); + + /// Gets the line number the node is in, if the document was parsed from a file. + int GetLineNum() const { return _parseLineNum; } + + /// Get the parent of this node on the DOM. + const XMLNode* Parent() const { + return _parent; + } + + XMLNode* Parent() { + return _parent; + } + + /// Returns true if this node has no children. + bool NoChildren() const { + return !_firstChild; + } + + /// Get the first child node, or null if none exists. + const XMLNode* FirstChild() const { + return _firstChild; + } + + XMLNode* FirstChild() { + return _firstChild; + } + + /** Get the first child element, or optionally the first child + element with the specified name. + */ + const XMLElement* FirstChildElement( const char* name = 0 ) const; + + XMLElement* FirstChildElement( const char* name = 0 ) { + return const_cast(const_cast(this)->FirstChildElement( name )); + } + + /// Get the last child node, or null if none exists. + const XMLNode* LastChild() const { + return _lastChild; + } + + XMLNode* LastChild() { + return _lastChild; + } + + /** Get the last child element or optionally the last child + element with the specified name. + */ + const XMLElement* LastChildElement( const char* name = 0 ) const; + + XMLElement* LastChildElement( const char* name = 0 ) { + return const_cast(const_cast(this)->LastChildElement(name) ); + } + + /// Get the previous (left) sibling node of this node. + const XMLNode* PreviousSibling() const { + return _prev; + } + + XMLNode* PreviousSibling() { + return _prev; + } + + /// Get the previous (left) sibling element of this node, with an optionally supplied name. + const XMLElement* PreviousSiblingElement( const char* name = 0 ) const ; + + XMLElement* PreviousSiblingElement( const char* name = 0 ) { + return const_cast(const_cast(this)->PreviousSiblingElement( name ) ); + } + + /// Get the next (right) sibling node of this node. + const XMLNode* NextSibling() const { + return _next; + } + + XMLNode* NextSibling() { + return _next; + } + + /// Get the next (right) sibling element of this node, with an optionally supplied name. + const XMLElement* NextSiblingElement( const char* name = 0 ) const; + + XMLElement* NextSiblingElement( const char* name = 0 ) { + return const_cast(const_cast(this)->NextSiblingElement( name ) ); + } + + /** + Add a child node as the last (right) child. + If the child node is already part of the document, + it is moved from its old location to the new location. + Returns the addThis argument or 0 if the node does not + belong to the same document. + */ + XMLNode* InsertEndChild( XMLNode* addThis ); + + XMLNode* LinkEndChild( XMLNode* addThis ) { + return InsertEndChild( addThis ); + } + /** + Add a child node as the first (left) child. + If the child node is already part of the document, + it is moved from its old location to the new location. + Returns the addThis argument or 0 if the node does not + belong to the same document. + */ + XMLNode* InsertFirstChild( XMLNode* addThis ); + /** + Add a node after the specified child node. + If the child node is already part of the document, + it is moved from its old location to the new location. + Returns the addThis argument or 0 if the afterThis node + is not a child of this node, or if the node does not + belong to the same document. + */ + XMLNode* InsertAfterChild( XMLNode* afterThis, XMLNode* addThis ); + + /** + Delete all the children of this node. + */ + void DeleteChildren(); + + /** + Delete a child of this node. + */ + void DeleteChild( XMLNode* node ); + + /** + Make a copy of this node, but not its children. + You may pass in a Document pointer that will be + the owner of the new Node. If the 'document' is + null, then the node returned will be allocated + from the current Document. (this->GetDocument()) + + Note: if called on a XMLDocument, this will return null. + */ + virtual XMLNode* ShallowClone( XMLDocument* document ) const = 0; + + /** + Make a copy of this node and all its children. + + If the 'target' is null, then the nodes will + be allocated in the current document. If 'target' + is specified, the memory will be allocated is the + specified XMLDocument. + + NOTE: This is probably not the correct tool to + copy a document, since XMLDocuments can have multiple + top level XMLNodes. You probably want to use + XMLDocument::DeepCopy() + */ + XMLNode* DeepClone( XMLDocument* target ) const; + + /** + Test if 2 nodes are the same, but don't test children. + The 2 nodes do not need to be in the same Document. + + Note: if called on a XMLDocument, this will return false. + */ + virtual bool ShallowEqual( const XMLNode* compare ) const = 0; + + /** Accept a hierarchical visit of the nodes in the TinyXML-2 DOM. Every node in the + XML tree will be conditionally visited and the host will be called back + via the XMLVisitor interface. + + This is essentially a SAX interface for TinyXML-2. (Note however it doesn't re-parse + the XML for the callbacks, so the performance of TinyXML-2 is unchanged by using this + interface versus any other.) + + The interface has been based on ideas from: + + - http://www.saxproject.org/ + - http://c2.com/cgi/wiki?HierarchicalVisitorPattern + + Which are both good references for "visiting". + + An example of using Accept(): + @verbatim + XMLPrinter printer; + tinyxmlDoc.Accept( &printer ); + const char* xmlcstr = printer.CStr(); + @endverbatim + */ + virtual bool Accept( XMLVisitor* visitor ) const = 0; + + /** + Set user data into the XMLNode. TinyXML-2 in + no way processes or interprets user data. + It is initially 0. + */ + void SetUserData(void* userData) { _userData = userData; } + + /** + Get user data set into the XMLNode. TinyXML-2 in + no way processes or interprets user data. + It is initially 0. + */ + void* GetUserData() const { return _userData; } + +protected: + explicit XMLNode( XMLDocument* ); + virtual ~XMLNode(); + + virtual char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr); + + XMLDocument* _document; + XMLNode* _parent; + mutable StrPair _value; + int _parseLineNum; + + XMLNode* _firstChild; + XMLNode* _lastChild; + + XMLNode* _prev; + XMLNode* _next; + + void* _userData; + +private: + MemPool* _memPool; + void Unlink( XMLNode* child ); + static void DeleteNode( XMLNode* node ); + void InsertChildPreamble( XMLNode* insertThis ) const; + const XMLElement* ToElementWithName( const char* name ) const; + + XMLNode( const XMLNode& ); // not supported + XMLNode& operator=( const XMLNode& ); // not supported +}; + + +/** XML text. + + Note that a text node can have child element nodes, for example: + @verbatim + This is bold + @endverbatim + + A text node can have 2 ways to output the next. "normal" output + and CDATA. It will default to the mode it was parsed from the XML file and + you generally want to leave it alone, but you can change the output mode with + SetCData() and query it with CData(). +*/ +class TINYXML2_LIB XMLText : public XMLNode +{ + friend class XMLDocument; +public: + virtual bool Accept( XMLVisitor* visitor ) const; + + virtual XMLText* ToText() { + return this; + } + virtual const XMLText* ToText() const { + return this; + } + + /// Declare whether this should be CDATA or standard text. + void SetCData( bool isCData ) { + _isCData = isCData; + } + /// Returns true if this is a CDATA text element. + bool CData() const { + return _isCData; + } + + virtual XMLNode* ShallowClone( XMLDocument* document ) const; + virtual bool ShallowEqual( const XMLNode* compare ) const; + +protected: + explicit XMLText( XMLDocument* doc ) : XMLNode( doc ), _isCData( false ) {} + virtual ~XMLText() {} + + char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr ); + +private: + bool _isCData; + + XMLText( const XMLText& ); // not supported + XMLText& operator=( const XMLText& ); // not supported +}; + + +/** An XML Comment. */ +class TINYXML2_LIB XMLComment : public XMLNode +{ + friend class XMLDocument; +public: + virtual XMLComment* ToComment() { + return this; + } + virtual const XMLComment* ToComment() const { + return this; + } + + virtual bool Accept( XMLVisitor* visitor ) const; + + virtual XMLNode* ShallowClone( XMLDocument* document ) const; + virtual bool ShallowEqual( const XMLNode* compare ) const; + +protected: + explicit XMLComment( XMLDocument* doc ); + virtual ~XMLComment(); + + char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr); + +private: + XMLComment( const XMLComment& ); // not supported + XMLComment& operator=( const XMLComment& ); // not supported +}; + + +/** In correct XML the declaration is the first entry in the file. + @verbatim + + @endverbatim + + TinyXML-2 will happily read or write files without a declaration, + however. + + The text of the declaration isn't interpreted. It is parsed + and written as a string. +*/ +class TINYXML2_LIB XMLDeclaration : public XMLNode +{ + friend class XMLDocument; +public: + virtual XMLDeclaration* ToDeclaration() { + return this; + } + virtual const XMLDeclaration* ToDeclaration() const { + return this; + } + + virtual bool Accept( XMLVisitor* visitor ) const; + + virtual XMLNode* ShallowClone( XMLDocument* document ) const; + virtual bool ShallowEqual( const XMLNode* compare ) const; + +protected: + explicit XMLDeclaration( XMLDocument* doc ); + virtual ~XMLDeclaration(); + + char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr ); + +private: + XMLDeclaration( const XMLDeclaration& ); // not supported + XMLDeclaration& operator=( const XMLDeclaration& ); // not supported +}; + + +/** Any tag that TinyXML-2 doesn't recognize is saved as an + unknown. It is a tag of text, but should not be modified. + It will be written back to the XML, unchanged, when the file + is saved. + + DTD tags get thrown into XMLUnknowns. +*/ +class TINYXML2_LIB XMLUnknown : public XMLNode +{ + friend class XMLDocument; +public: + virtual XMLUnknown* ToUnknown() { + return this; + } + virtual const XMLUnknown* ToUnknown() const { + return this; + } + + virtual bool Accept( XMLVisitor* visitor ) const; + + virtual XMLNode* ShallowClone( XMLDocument* document ) const; + virtual bool ShallowEqual( const XMLNode* compare ) const; + +protected: + explicit XMLUnknown( XMLDocument* doc ); + virtual ~XMLUnknown(); + + char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr ); + +private: + XMLUnknown( const XMLUnknown& ); // not supported + XMLUnknown& operator=( const XMLUnknown& ); // not supported +}; + + + +/** An attribute is a name-value pair. Elements have an arbitrary + number of attributes, each with a unique name. + + @note The attributes are not XMLNodes. You may only query the + Next() attribute in a list. +*/ +class TINYXML2_LIB XMLAttribute +{ + friend class XMLElement; +public: + /// The name of the attribute. + const char* Name() const; + + /// The value of the attribute. + const char* Value() const; + + /// Gets the line number the attribute is in, if the document was parsed from a file. + int GetLineNum() const { return _parseLineNum; } + + /// The next attribute in the list. + const XMLAttribute* Next() const { + return _next; + } + + /** IntValue interprets the attribute as an integer, and returns the value. + If the value isn't an integer, 0 will be returned. There is no error checking; + use QueryIntValue() if you need error checking. + */ + int IntValue() const { + int i = 0; + QueryIntValue(&i); + return i; + } + + int64_t Int64Value() const { + int64_t i = 0; + QueryInt64Value(&i); + return i; + } + + uint64_t Unsigned64Value() const { + uint64_t i = 0; + QueryUnsigned64Value(&i); + return i; + } + + /// Query as an unsigned integer. See IntValue() + unsigned UnsignedValue() const { + unsigned i=0; + QueryUnsignedValue( &i ); + return i; + } + /// Query as a boolean. See IntValue() + bool BoolValue() const { + bool b=false; + QueryBoolValue( &b ); + return b; + } + /// Query as a double. See IntValue() + double DoubleValue() const { + double d=0; + QueryDoubleValue( &d ); + return d; + } + /// Query as a float. See IntValue() + float FloatValue() const { + float f=0; + QueryFloatValue( &f ); + return f; + } + + /** QueryIntValue interprets the attribute as an integer, and returns the value + in the provided parameter. The function will return XML_SUCCESS on success, + and XML_WRONG_ATTRIBUTE_TYPE if the conversion is not successful. + */ + XMLError QueryIntValue( int* value ) const; + /// See QueryIntValue + XMLError QueryUnsignedValue( unsigned int* value ) const; + /// See QueryIntValue + XMLError QueryInt64Value(int64_t* value) const; + /// See QueryIntValue + XMLError QueryUnsigned64Value(uint64_t* value) const; + /// See QueryIntValue + XMLError QueryBoolValue( bool* value ) const; + /// See QueryIntValue + XMLError QueryDoubleValue( double* value ) const; + /// See QueryIntValue + XMLError QueryFloatValue( float* value ) const; + + /// Set the attribute to a string value. + void SetAttribute( const char* value ); + /// Set the attribute to value. + void SetAttribute( int value ); + /// Set the attribute to value. + void SetAttribute( unsigned value ); + /// Set the attribute to value. + void SetAttribute(int64_t value); + /// Set the attribute to value. + void SetAttribute(uint64_t value); + /// Set the attribute to value. + void SetAttribute( bool value ); + /// Set the attribute to value. + void SetAttribute( double value ); + /// Set the attribute to value. + void SetAttribute( float value ); + +private: + enum { BUF_SIZE = 200 }; + + XMLAttribute() : _name(), _value(),_parseLineNum( 0 ), _next( 0 ), _memPool( 0 ) {} + virtual ~XMLAttribute() {} + + XMLAttribute( const XMLAttribute& ); // not supported + void operator=( const XMLAttribute& ); // not supported + void SetName( const char* name ); + + char* ParseDeep( char* p, bool processEntities, int* curLineNumPtr ); + + mutable StrPair _name; + mutable StrPair _value; + int _parseLineNum; + XMLAttribute* _next; + MemPool* _memPool; +}; + + +/** The element is a container class. It has a value, the element name, + and can contain other elements, text, comments, and unknowns. + Elements also contain an arbitrary number of attributes. +*/ +class TINYXML2_LIB XMLElement : public XMLNode +{ + friend class XMLDocument; +public: + /// Get the name of an element (which is the Value() of the node.) + const char* Name() const { + return Value(); + } + /// Set the name of the element. + void SetName( const char* str, bool staticMem=false ) { + SetValue( str, staticMem ); + } + + virtual XMLElement* ToElement() { + return this; + } + virtual const XMLElement* ToElement() const { + return this; + } + virtual bool Accept( XMLVisitor* visitor ) const; + + /** Given an attribute name, Attribute() returns the value + for the attribute of that name, or null if none + exists. For example: + + @verbatim + const char* value = ele->Attribute( "foo" ); + @endverbatim + + The 'value' parameter is normally null. However, if specified, + the attribute will only be returned if the 'name' and 'value' + match. This allow you to write code: + + @verbatim + if ( ele->Attribute( "foo", "bar" ) ) callFooIsBar(); + @endverbatim + + rather than: + @verbatim + if ( ele->Attribute( "foo" ) ) { + if ( strcmp( ele->Attribute( "foo" ), "bar" ) == 0 ) callFooIsBar(); + } + @endverbatim + */ + const char* Attribute( const char* name, const char* value=0 ) const; + + /** Given an attribute name, IntAttribute() returns the value + of the attribute interpreted as an integer. The default + value will be returned if the attribute isn't present, + or if there is an error. (For a method with error + checking, see QueryIntAttribute()). + */ + int IntAttribute(const char* name, int defaultValue = 0) const; + /// See IntAttribute() + unsigned UnsignedAttribute(const char* name, unsigned defaultValue = 0) const; + /// See IntAttribute() + int64_t Int64Attribute(const char* name, int64_t defaultValue = 0) const; + /// See IntAttribute() + uint64_t Unsigned64Attribute(const char* name, uint64_t defaultValue = 0) const; + /// See IntAttribute() + bool BoolAttribute(const char* name, bool defaultValue = false) const; + /// See IntAttribute() + double DoubleAttribute(const char* name, double defaultValue = 0) const; + /// See IntAttribute() + float FloatAttribute(const char* name, float defaultValue = 0) const; + + /** Given an attribute name, QueryIntAttribute() returns + XML_SUCCESS, XML_WRONG_ATTRIBUTE_TYPE if the conversion + can't be performed, or XML_NO_ATTRIBUTE if the attribute + doesn't exist. If successful, the result of the conversion + will be written to 'value'. If not successful, nothing will + be written to 'value'. This allows you to provide default + value: + + @verbatim + int value = 10; + QueryIntAttribute( "foo", &value ); // if "foo" isn't found, value will still be 10 + @endverbatim + */ + XMLError QueryIntAttribute( const char* name, int* value ) const { + const XMLAttribute* a = FindAttribute( name ); + if ( !a ) { + return XML_NO_ATTRIBUTE; + } + return a->QueryIntValue( value ); + } + + /// See QueryIntAttribute() + XMLError QueryUnsignedAttribute( const char* name, unsigned int* value ) const { + const XMLAttribute* a = FindAttribute( name ); + if ( !a ) { + return XML_NO_ATTRIBUTE; + } + return a->QueryUnsignedValue( value ); + } + + /// See QueryIntAttribute() + XMLError QueryInt64Attribute(const char* name, int64_t* value) const { + const XMLAttribute* a = FindAttribute(name); + if (!a) { + return XML_NO_ATTRIBUTE; + } + return a->QueryInt64Value(value); + } + + /// See QueryIntAttribute() + XMLError QueryUnsigned64Attribute(const char* name, uint64_t* value) const { + const XMLAttribute* a = FindAttribute(name); + if(!a) { + return XML_NO_ATTRIBUTE; + } + return a->QueryUnsigned64Value(value); + } + + /// See QueryIntAttribute() + XMLError QueryBoolAttribute( const char* name, bool* value ) const { + const XMLAttribute* a = FindAttribute( name ); + if ( !a ) { + return XML_NO_ATTRIBUTE; + } + return a->QueryBoolValue( value ); + } + /// See QueryIntAttribute() + XMLError QueryDoubleAttribute( const char* name, double* value ) const { + const XMLAttribute* a = FindAttribute( name ); + if ( !a ) { + return XML_NO_ATTRIBUTE; + } + return a->QueryDoubleValue( value ); + } + /// See QueryIntAttribute() + XMLError QueryFloatAttribute( const char* name, float* value ) const { + const XMLAttribute* a = FindAttribute( name ); + if ( !a ) { + return XML_NO_ATTRIBUTE; + } + return a->QueryFloatValue( value ); + } + + /// See QueryIntAttribute() + XMLError QueryStringAttribute(const char* name, const char** value) const { + const XMLAttribute* a = FindAttribute(name); + if (!a) { + return XML_NO_ATTRIBUTE; + } + *value = a->Value(); + return XML_SUCCESS; + } + + + + /** Given an attribute name, QueryAttribute() returns + XML_SUCCESS, XML_WRONG_ATTRIBUTE_TYPE if the conversion + can't be performed, or XML_NO_ATTRIBUTE if the attribute + doesn't exist. It is overloaded for the primitive types, + and is a generally more convenient replacement of + QueryIntAttribute() and related functions. + + If successful, the result of the conversion + will be written to 'value'. If not successful, nothing will + be written to 'value'. This allows you to provide default + value: + + @verbatim + int value = 10; + QueryAttribute( "foo", &value ); // if "foo" isn't found, value will still be 10 + @endverbatim + */ + XMLError QueryAttribute( const char* name, int* value ) const { + return QueryIntAttribute( name, value ); + } + + XMLError QueryAttribute( const char* name, unsigned int* value ) const { + return QueryUnsignedAttribute( name, value ); + } + + XMLError QueryAttribute(const char* name, int64_t* value) const { + return QueryInt64Attribute(name, value); + } + + XMLError QueryAttribute(const char* name, uint64_t* value) const { + return QueryUnsigned64Attribute(name, value); + } + + XMLError QueryAttribute( const char* name, bool* value ) const { + return QueryBoolAttribute( name, value ); + } + + XMLError QueryAttribute( const char* name, double* value ) const { + return QueryDoubleAttribute( name, value ); + } + + XMLError QueryAttribute( const char* name, float* value ) const { + return QueryFloatAttribute( name, value ); + } + + XMLError QueryAttribute(const char* name, const char** value) const { + return QueryStringAttribute(name, value); + } + + /// Sets the named attribute to value. + void SetAttribute( const char* name, const char* value ) { + XMLAttribute* a = FindOrCreateAttribute( name ); + a->SetAttribute( value ); + } + /// Sets the named attribute to value. + void SetAttribute( const char* name, int value ) { + XMLAttribute* a = FindOrCreateAttribute( name ); + a->SetAttribute( value ); + } + /// Sets the named attribute to value. + void SetAttribute( const char* name, unsigned value ) { + XMLAttribute* a = FindOrCreateAttribute( name ); + a->SetAttribute( value ); + } + + /// Sets the named attribute to value. + void SetAttribute(const char* name, int64_t value) { + XMLAttribute* a = FindOrCreateAttribute(name); + a->SetAttribute(value); + } + + /// Sets the named attribute to value. + void SetAttribute(const char* name, uint64_t value) { + XMLAttribute* a = FindOrCreateAttribute(name); + a->SetAttribute(value); + } + + /// Sets the named attribute to value. + void SetAttribute( const char* name, bool value ) { + XMLAttribute* a = FindOrCreateAttribute( name ); + a->SetAttribute( value ); + } + /// Sets the named attribute to value. + void SetAttribute( const char* name, double value ) { + XMLAttribute* a = FindOrCreateAttribute( name ); + a->SetAttribute( value ); + } + /// Sets the named attribute to value. + void SetAttribute( const char* name, float value ) { + XMLAttribute* a = FindOrCreateAttribute( name ); + a->SetAttribute( value ); + } + + /** + Delete an attribute. + */ + void DeleteAttribute( const char* name ); + + /// Return the first attribute in the list. + const XMLAttribute* FirstAttribute() const { + return _rootAttribute; + } + /// Query a specific attribute in the list. + const XMLAttribute* FindAttribute( const char* name ) const; + + /** Convenience function for easy access to the text inside an element. Although easy + and concise, GetText() is limited compared to getting the XMLText child + and accessing it directly. + + If the first child of 'this' is a XMLText, the GetText() + returns the character string of the Text node, else null is returned. + + This is a convenient method for getting the text of simple contained text: + @verbatim + This is text + const char* str = fooElement->GetText(); + @endverbatim + + 'str' will be a pointer to "This is text". + + Note that this function can be misleading. If the element foo was created from + this XML: + @verbatim + This is text + @endverbatim + + then the value of str would be null. The first child node isn't a text node, it is + another element. From this XML: + @verbatim + This is text + @endverbatim + GetText() will return "This is ". + */ + const char* GetText() const; + + /** Convenience function for easy access to the text inside an element. Although easy + and concise, SetText() is limited compared to creating an XMLText child + and mutating it directly. + + If the first child of 'this' is a XMLText, SetText() sets its value to + the given string, otherwise it will create a first child that is an XMLText. + + This is a convenient method for setting the text of simple contained text: + @verbatim + This is text + fooElement->SetText( "Hullaballoo!" ); + Hullaballoo! + @endverbatim + + Note that this function can be misleading. If the element foo was created from + this XML: + @verbatim + This is text + @endverbatim + + then it will not change "This is text", but rather prefix it with a text element: + @verbatim + Hullaballoo!This is text + @endverbatim + + For this XML: + @verbatim + + @endverbatim + SetText() will generate + @verbatim + Hullaballoo! + @endverbatim + */ + void SetText( const char* inText ); + /// Convenience method for setting text inside an element. See SetText() for important limitations. + void SetText( int value ); + /// Convenience method for setting text inside an element. See SetText() for important limitations. + void SetText( unsigned value ); + /// Convenience method for setting text inside an element. See SetText() for important limitations. + void SetText(int64_t value); + /// Convenience method for setting text inside an element. See SetText() for important limitations. + void SetText(uint64_t value); + /// Convenience method for setting text inside an element. See SetText() for important limitations. + void SetText( bool value ); + /// Convenience method for setting text inside an element. See SetText() for important limitations. + void SetText( double value ); + /// Convenience method for setting text inside an element. See SetText() for important limitations. + void SetText( float value ); + + /** + Convenience method to query the value of a child text node. This is probably best + shown by example. Given you have a document is this form: + @verbatim + + 1 + 1.4 + + @endverbatim + + The QueryIntText() and similar functions provide a safe and easier way to get to the + "value" of x and y. + + @verbatim + int x = 0; + float y = 0; // types of x and y are contrived for example + const XMLElement* xElement = pointElement->FirstChildElement( "x" ); + const XMLElement* yElement = pointElement->FirstChildElement( "y" ); + xElement->QueryIntText( &x ); + yElement->QueryFloatText( &y ); + @endverbatim + + @returns XML_SUCCESS (0) on success, XML_CAN_NOT_CONVERT_TEXT if the text cannot be converted + to the requested type, and XML_NO_TEXT_NODE if there is no child text to query. + + */ + XMLError QueryIntText( int* ival ) const; + /// See QueryIntText() + XMLError QueryUnsignedText( unsigned* uval ) const; + /// See QueryIntText() + XMLError QueryInt64Text(int64_t* uval) const; + /// See QueryIntText() + XMLError QueryUnsigned64Text(uint64_t* uval) const; + /// See QueryIntText() + XMLError QueryBoolText( bool* bval ) const; + /// See QueryIntText() + XMLError QueryDoubleText( double* dval ) const; + /// See QueryIntText() + XMLError QueryFloatText( float* fval ) const; + + int IntText(int defaultValue = 0) const; + + /// See QueryIntText() + unsigned UnsignedText(unsigned defaultValue = 0) const; + /// See QueryIntText() + int64_t Int64Text(int64_t defaultValue = 0) const; + /// See QueryIntText() + uint64_t Unsigned64Text(uint64_t defaultValue = 0) const; + /// See QueryIntText() + bool BoolText(bool defaultValue = false) const; + /// See QueryIntText() + double DoubleText(double defaultValue = 0) const; + /// See QueryIntText() + float FloatText(float defaultValue = 0) const; + + /** + Convenience method to create a new XMLElement and add it as last (right) + child of this node. Returns the created and inserted element. + */ + XMLElement* InsertNewChildElement(const char* name); + /// See InsertNewChildElement() + XMLComment* InsertNewComment(const char* comment); + /// See InsertNewChildElement() + XMLText* InsertNewText(const char* text); + /// See InsertNewChildElement() + XMLDeclaration* InsertNewDeclaration(const char* text); + /// See InsertNewChildElement() + XMLUnknown* InsertNewUnknown(const char* text); + + + // internal: + enum ElementClosingType { + OPENED, // + CLOSED, // + CLOSING // + }; + ElementClosingType ClosingType() const { + return _closingType; + } + virtual XMLNode* ShallowClone( XMLDocument* document ) const; + virtual bool ShallowEqual( const XMLNode* compare ) const; + +protected: + char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr ); + +private: + XMLElement( XMLDocument* doc ); + virtual ~XMLElement(); + XMLElement( const XMLElement& ); // not supported + void operator=( const XMLElement& ); // not supported + + XMLAttribute* FindOrCreateAttribute( const char* name ); + char* ParseAttributes( char* p, int* curLineNumPtr ); + static void DeleteAttribute( XMLAttribute* attribute ); + XMLAttribute* CreateAttribute(); + + enum { BUF_SIZE = 200 }; + ElementClosingType _closingType; + // The attribute list is ordered; there is no 'lastAttribute' + // because the list needs to be scanned for dupes before adding + // a new attribute. + XMLAttribute* _rootAttribute; +}; + + +enum Whitespace { + PRESERVE_WHITESPACE, + COLLAPSE_WHITESPACE +}; + + +/** A Document binds together all the functionality. + It can be saved, loaded, and printed to the screen. + All Nodes are connected and allocated to a Document. + If the Document is deleted, all its Nodes are also deleted. +*/ +class TINYXML2_LIB XMLDocument : public XMLNode +{ + friend class XMLElement; + // Gives access to SetError and Push/PopDepth, but over-access for everything else. + // Wishing C++ had "internal" scope. + friend class XMLNode; + friend class XMLText; + friend class XMLComment; + friend class XMLDeclaration; + friend class XMLUnknown; +public: + /// constructor + XMLDocument( bool processEntities = true, Whitespace whitespaceMode = PRESERVE_WHITESPACE ); + ~XMLDocument(); + + virtual XMLDocument* ToDocument() { + TIXMLASSERT( this == _document ); + return this; + } + virtual const XMLDocument* ToDocument() const { + TIXMLASSERT( this == _document ); + return this; + } + + /** + Parse an XML file from a character string. + Returns XML_SUCCESS (0) on success, or + an errorID. + + You may optionally pass in the 'nBytes', which is + the number of bytes which will be parsed. If not + specified, TinyXML-2 will assume 'xml' points to a + null terminated string. + */ + XMLError Parse( const char* xml, size_t nBytes=static_cast(-1) ); + + /** + Load an XML file from disk. + Returns XML_SUCCESS (0) on success, or + an errorID. + */ + XMLError LoadFile( const char* filename ); + + /** + Load an XML file from disk. You are responsible + for providing and closing the FILE*. + + NOTE: The file should be opened as binary ("rb") + not text in order for TinyXML-2 to correctly + do newline normalization. + + Returns XML_SUCCESS (0) on success, or + an errorID. + */ + XMLError LoadFile( FILE* ); + + /** + Save the XML file to disk. + Returns XML_SUCCESS (0) on success, or + an errorID. + */ + XMLError SaveFile( const char* filename, bool compact = false ); + + /** + Save the XML file to disk. You are responsible + for providing and closing the FILE*. + + Returns XML_SUCCESS (0) on success, or + an errorID. + */ + XMLError SaveFile( FILE* fp, bool compact = false ); + + bool ProcessEntities() const { + return _processEntities; + } + Whitespace WhitespaceMode() const { + return _whitespaceMode; + } + + /** + Returns true if this document has a leading Byte Order Mark of UTF8. + */ + bool HasBOM() const { + return _writeBOM; + } + /** Sets whether to write the BOM when writing the file. + */ + void SetBOM( bool useBOM ) { + _writeBOM = useBOM; + } + + /** Return the root element of DOM. Equivalent to FirstChildElement(). + To get the first node, use FirstChild(). + */ + XMLElement* RootElement() { + return FirstChildElement(); + } + const XMLElement* RootElement() const { + return FirstChildElement(); + } + + /** Print the Document. If the Printer is not provided, it will + print to stdout. If you provide Printer, this can print to a file: + @verbatim + XMLPrinter printer( fp ); + doc.Print( &printer ); + @endverbatim + + Or you can use a printer to print to memory: + @verbatim + XMLPrinter printer; + doc.Print( &printer ); + // printer.CStr() has a const char* to the XML + @endverbatim + */ + void Print( XMLPrinter* streamer=0 ) const; + virtual bool Accept( XMLVisitor* visitor ) const; + + /** + Create a new Element associated with + this Document. The memory for the Element + is managed by the Document. + */ + XMLElement* NewElement( const char* name ); + /** + Create a new Comment associated with + this Document. The memory for the Comment + is managed by the Document. + */ + XMLComment* NewComment( const char* comment ); + /** + Create a new Text associated with + this Document. The memory for the Text + is managed by the Document. + */ + XMLText* NewText( const char* text ); + /** + Create a new Declaration associated with + this Document. The memory for the object + is managed by the Document. + + If the 'text' param is null, the standard + declaration is used.: + @verbatim + + @endverbatim + */ + XMLDeclaration* NewDeclaration( const char* text=0 ); + /** + Create a new Unknown associated with + this Document. The memory for the object + is managed by the Document. + */ + XMLUnknown* NewUnknown( const char* text ); + + /** + Delete a node associated with this document. + It will be unlinked from the DOM. + */ + void DeleteNode( XMLNode* node ); + + /// Clears the error flags. + void ClearError(); + + /// Return true if there was an error parsing the document. + bool Error() const { + return _errorID != XML_SUCCESS; + } + /// Return the errorID. + XMLError ErrorID() const { + return _errorID; + } + const char* ErrorName() const; + static const char* ErrorIDToName(XMLError errorID); + + /** Returns a "long form" error description. A hopefully helpful + diagnostic with location, line number, and/or additional info. + */ + const char* ErrorStr() const; + + /// A (trivial) utility function that prints the ErrorStr() to stdout. + void PrintError() const; + + /// Return the line where the error occurred, or zero if unknown. + int ErrorLineNum() const + { + return _errorLineNum; + } + + /// Clear the document, resetting it to the initial state. + void Clear(); + + /** + Copies this document to a target document. + The target will be completely cleared before the copy. + If you want to copy a sub-tree, see XMLNode::DeepClone(). + + NOTE: that the 'target' must be non-null. + */ + void DeepCopy(XMLDocument* target) const; + + // internal + char* Identify( char* p, XMLNode** node ); + + // internal + void MarkInUse(const XMLNode* const); + + virtual XMLNode* ShallowClone( XMLDocument* /*document*/ ) const { + return 0; + } + virtual bool ShallowEqual( const XMLNode* /*compare*/ ) const { + return false; + } + +private: + XMLDocument( const XMLDocument& ); // not supported + void operator=( const XMLDocument& ); // not supported + + bool _writeBOM; + bool _processEntities; + XMLError _errorID; + Whitespace _whitespaceMode; + mutable StrPair _errorStr; + int _errorLineNum; + char* _charBuffer; + int _parseCurLineNum; + int _parsingDepth; + // Memory tracking does add some overhead. + // However, the code assumes that you don't + // have a bunch of unlinked nodes around. + // Therefore it takes less memory to track + // in the document vs. a linked list in the XMLNode, + // and the performance is the same. + DynArray _unlinked; + + MemPoolT< sizeof(XMLElement) > _elementPool; + MemPoolT< sizeof(XMLAttribute) > _attributePool; + MemPoolT< sizeof(XMLText) > _textPool; + MemPoolT< sizeof(XMLComment) > _commentPool; + + static const char* _errorNames[XML_ERROR_COUNT]; + + void Parse(); + + void SetError( XMLError error, int lineNum, const char* format, ... ); + + // Something of an obvious security hole, once it was discovered. + // Either an ill-formed XML or an excessively deep one can overflow + // the stack. Track stack depth, and error out if needed. + class DepthTracker { + public: + explicit DepthTracker(XMLDocument * document) { + this->_document = document; + document->PushDepth(); + } + ~DepthTracker() { + _document->PopDepth(); + } + private: + XMLDocument * _document; + }; + void PushDepth(); + void PopDepth(); + + template + NodeType* CreateUnlinkedNode( MemPoolT& pool ); +}; + +template +inline NodeType* XMLDocument::CreateUnlinkedNode( MemPoolT& pool ) +{ + TIXMLASSERT( sizeof( NodeType ) == PoolElementSize ); + TIXMLASSERT( sizeof( NodeType ) == pool.ItemSize() ); + NodeType* returnNode = new (pool.Alloc()) NodeType( this ); + TIXMLASSERT( returnNode ); + returnNode->_memPool = &pool; + + _unlinked.Push(returnNode); + return returnNode; +} + +/** + A XMLHandle is a class that wraps a node pointer with null checks; this is + an incredibly useful thing. Note that XMLHandle is not part of the TinyXML-2 + DOM structure. It is a separate utility class. + + Take an example: + @verbatim + + + + + + + @endverbatim + + Assuming you want the value of "attributeB" in the 2nd "Child" element, it's very + easy to write a *lot* of code that looks like: + + @verbatim + XMLElement* root = document.FirstChildElement( "Document" ); + if ( root ) + { + XMLElement* element = root->FirstChildElement( "Element" ); + if ( element ) + { + XMLElement* child = element->FirstChildElement( "Child" ); + if ( child ) + { + XMLElement* child2 = child->NextSiblingElement( "Child" ); + if ( child2 ) + { + // Finally do something useful. + @endverbatim + + And that doesn't even cover "else" cases. XMLHandle addresses the verbosity + of such code. A XMLHandle checks for null pointers so it is perfectly safe + and correct to use: + + @verbatim + XMLHandle docHandle( &document ); + XMLElement* child2 = docHandle.FirstChildElement( "Document" ).FirstChildElement( "Element" ).FirstChildElement().NextSiblingElement(); + if ( child2 ) + { + // do something useful + @endverbatim + + Which is MUCH more concise and useful. + + It is also safe to copy handles - internally they are nothing more than node pointers. + @verbatim + XMLHandle handleCopy = handle; + @endverbatim + + See also XMLConstHandle, which is the same as XMLHandle, but operates on const objects. +*/ +class TINYXML2_LIB XMLHandle +{ +public: + /// Create a handle from any node (at any depth of the tree.) This can be a null pointer. + explicit XMLHandle( XMLNode* node ) : _node( node ) { + } + /// Create a handle from a node. + explicit XMLHandle( XMLNode& node ) : _node( &node ) { + } + /// Copy constructor + XMLHandle( const XMLHandle& ref ) : _node( ref._node ) { + } + /// Assignment + XMLHandle& operator=( const XMLHandle& ref ) { + _node = ref._node; + return *this; + } + + /// Get the first child of this handle. + XMLHandle FirstChild() { + return XMLHandle( _node ? _node->FirstChild() : 0 ); + } + /// Get the first child element of this handle. + XMLHandle FirstChildElement( const char* name = 0 ) { + return XMLHandle( _node ? _node->FirstChildElement( name ) : 0 ); + } + /// Get the last child of this handle. + XMLHandle LastChild() { + return XMLHandle( _node ? _node->LastChild() : 0 ); + } + /// Get the last child element of this handle. + XMLHandle LastChildElement( const char* name = 0 ) { + return XMLHandle( _node ? _node->LastChildElement( name ) : 0 ); + } + /// Get the previous sibling of this handle. + XMLHandle PreviousSibling() { + return XMLHandle( _node ? _node->PreviousSibling() : 0 ); + } + /// Get the previous sibling element of this handle. + XMLHandle PreviousSiblingElement( const char* name = 0 ) { + return XMLHandle( _node ? _node->PreviousSiblingElement( name ) : 0 ); + } + /// Get the next sibling of this handle. + XMLHandle NextSibling() { + return XMLHandle( _node ? _node->NextSibling() : 0 ); + } + /// Get the next sibling element of this handle. + XMLHandle NextSiblingElement( const char* name = 0 ) { + return XMLHandle( _node ? _node->NextSiblingElement( name ) : 0 ); + } + + /// Safe cast to XMLNode. This can return null. + XMLNode* ToNode() { + return _node; + } + /// Safe cast to XMLElement. This can return null. + XMLElement* ToElement() { + return ( _node ? _node->ToElement() : 0 ); + } + /// Safe cast to XMLText. This can return null. + XMLText* ToText() { + return ( _node ? _node->ToText() : 0 ); + } + /// Safe cast to XMLUnknown. This can return null. + XMLUnknown* ToUnknown() { + return ( _node ? _node->ToUnknown() : 0 ); + } + /// Safe cast to XMLDeclaration. This can return null. + XMLDeclaration* ToDeclaration() { + return ( _node ? _node->ToDeclaration() : 0 ); + } + +private: + XMLNode* _node; +}; + + +/** + A variant of the XMLHandle class for working with const XMLNodes and Documents. It is the + same in all regards, except for the 'const' qualifiers. See XMLHandle for API. +*/ +class TINYXML2_LIB XMLConstHandle +{ +public: + explicit XMLConstHandle( const XMLNode* node ) : _node( node ) { + } + explicit XMLConstHandle( const XMLNode& node ) : _node( &node ) { + } + XMLConstHandle( const XMLConstHandle& ref ) : _node( ref._node ) { + } + + XMLConstHandle& operator=( const XMLConstHandle& ref ) { + _node = ref._node; + return *this; + } + + const XMLConstHandle FirstChild() const { + return XMLConstHandle( _node ? _node->FirstChild() : 0 ); + } + const XMLConstHandle FirstChildElement( const char* name = 0 ) const { + return XMLConstHandle( _node ? _node->FirstChildElement( name ) : 0 ); + } + const XMLConstHandle LastChild() const { + return XMLConstHandle( _node ? _node->LastChild() : 0 ); + } + const XMLConstHandle LastChildElement( const char* name = 0 ) const { + return XMLConstHandle( _node ? _node->LastChildElement( name ) : 0 ); + } + const XMLConstHandle PreviousSibling() const { + return XMLConstHandle( _node ? _node->PreviousSibling() : 0 ); + } + const XMLConstHandle PreviousSiblingElement( const char* name = 0 ) const { + return XMLConstHandle( _node ? _node->PreviousSiblingElement( name ) : 0 ); + } + const XMLConstHandle NextSibling() const { + return XMLConstHandle( _node ? _node->NextSibling() : 0 ); + } + const XMLConstHandle NextSiblingElement( const char* name = 0 ) const { + return XMLConstHandle( _node ? _node->NextSiblingElement( name ) : 0 ); + } + + + const XMLNode* ToNode() const { + return _node; + } + const XMLElement* ToElement() const { + return ( _node ? _node->ToElement() : 0 ); + } + const XMLText* ToText() const { + return ( _node ? _node->ToText() : 0 ); + } + const XMLUnknown* ToUnknown() const { + return ( _node ? _node->ToUnknown() : 0 ); + } + const XMLDeclaration* ToDeclaration() const { + return ( _node ? _node->ToDeclaration() : 0 ); + } + +private: + const XMLNode* _node; +}; + + +/** + Printing functionality. The XMLPrinter gives you more + options than the XMLDocument::Print() method. + + It can: + -# Print to memory. + -# Print to a file you provide. + -# Print XML without a XMLDocument. + + Print to Memory + + @verbatim + XMLPrinter printer; + doc.Print( &printer ); + SomeFunction( printer.CStr() ); + @endverbatim + + Print to a File + + You provide the file pointer. + @verbatim + XMLPrinter printer( fp ); + doc.Print( &printer ); + @endverbatim + + Print without a XMLDocument + + When loading, an XML parser is very useful. However, sometimes + when saving, it just gets in the way. The code is often set up + for streaming, and constructing the DOM is just overhead. + + The Printer supports the streaming case. The following code + prints out a trivially simple XML file without ever creating + an XML document. + + @verbatim + XMLPrinter printer( fp ); + printer.OpenElement( "foo" ); + printer.PushAttribute( "foo", "bar" ); + printer.CloseElement(); + @endverbatim +*/ +class TINYXML2_LIB XMLPrinter : public XMLVisitor +{ +public: + /** Construct the printer. If the FILE* is specified, + this will print to the FILE. Else it will print + to memory, and the result is available in CStr(). + If 'compact' is set to true, then output is created + with only required whitespace and newlines. + */ + XMLPrinter( FILE* file=0, bool compact = false, int depth = 0 ); + virtual ~XMLPrinter() {} + + /** If streaming, write the BOM and declaration. */ + void PushHeader( bool writeBOM, bool writeDeclaration ); + /** If streaming, start writing an element. + The element must be closed with CloseElement() + */ + void OpenElement( const char* name, bool compactMode=false ); + /// If streaming, add an attribute to an open element. + void PushAttribute( const char* name, const char* value ); + void PushAttribute( const char* name, int value ); + void PushAttribute( const char* name, unsigned value ); + void PushAttribute( const char* name, int64_t value ); + void PushAttribute( const char* name, uint64_t value ); + void PushAttribute( const char* name, bool value ); + void PushAttribute( const char* name, double value ); + /// If streaming, close the Element. + virtual void CloseElement( bool compactMode=false ); + + /// Add a text node. + void PushText( const char* text, bool cdata=false ); + /// Add a text node from an integer. + void PushText( int value ); + /// Add a text node from an unsigned. + void PushText( unsigned value ); + /// Add a text node from a signed 64bit integer. + void PushText( int64_t value ); + /// Add a text node from an unsigned 64bit integer. + void PushText( uint64_t value ); + /// Add a text node from a bool. + void PushText( bool value ); + /// Add a text node from a float. + void PushText( float value ); + /// Add a text node from a double. + void PushText( double value ); + + /// Add a comment + void PushComment( const char* comment ); + + void PushDeclaration( const char* value ); + void PushUnknown( const char* value ); + + virtual bool VisitEnter( const XMLDocument& /*doc*/ ); + virtual bool VisitExit( const XMLDocument& /*doc*/ ) { + return true; + } + + virtual bool VisitEnter( const XMLElement& element, const XMLAttribute* attribute ); + virtual bool VisitExit( const XMLElement& element ); + + virtual bool Visit( const XMLText& text ); + virtual bool Visit( const XMLComment& comment ); + virtual bool Visit( const XMLDeclaration& declaration ); + virtual bool Visit( const XMLUnknown& unknown ); + + /** + If in print to memory mode, return a pointer to + the XML file in memory. + */ + const char* CStr() const { + return _buffer.Mem(); + } + /** + If in print to memory mode, return the size + of the XML file in memory. (Note the size returned + includes the terminating null.) + */ + int CStrSize() const { + return _buffer.Size(); + } + /** + If in print to memory mode, reset the buffer to the + beginning. + */ + void ClearBuffer( bool resetToFirstElement = true ) { + _buffer.Clear(); + _buffer.Push(0); + _firstElement = resetToFirstElement; + } + +protected: + virtual bool CompactMode( const XMLElement& ) { return _compactMode; } + + /** Prints out the space before an element. You may override to change + the space and tabs used. A PrintSpace() override should call Print(). + */ + virtual void PrintSpace( int depth ); + virtual void Print( const char* format, ... ); + virtual void Write( const char* data, size_t size ); + virtual void Putc( char ch ); + + inline void Write(const char* data) { Write(data, strlen(data)); } + + void SealElementIfJustOpened(); + bool _elementJustOpened; + DynArray< const char*, 10 > _stack; + +private: + /** + Prepares to write a new node. This includes sealing an element that was + just opened, and writing any whitespace necessary if not in compact mode. + */ + void PrepareForNewNode( bool compactMode ); + void PrintString( const char*, bool restrictedEntitySet ); // prints out, after detecting entities. + + bool _firstElement; + FILE* _fp; + int _depth; + int _textDepth; + bool _processEntities; + bool _compactMode; + + enum { + ENTITY_RANGE = 64, + BUF_SIZE = 200 + }; + bool _entityFlag[ENTITY_RANGE]; + bool _restrictedEntityFlag[ENTITY_RANGE]; + + DynArray< char, 20 > _buffer; + + // Prohibit cloning, intentionally not implemented + XMLPrinter( const XMLPrinter& ); + XMLPrinter& operator=( const XMLPrinter& ); +}; + + +} // tinyxml2 + +#if defined(_MSC_VER) +# pragma warning(pop) +#endif + +#endif // TINYXML2_INCLUDED diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/workthread.cpp b/240510-常德GDX1-1相机-1280x800/Cigarette/workthread.cpp new file mode 100644 index 00000000..baddee73 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/workthread.cpp @@ -0,0 +1,322 @@ +#include "workthread.h" +#include "alg_jd.h" +#include "common.h" +#include "balluffcamera.h" +#include "baslercamera.h" +#include "threadSend.h" +#include +#include "exportData.h" +#include + +extern AlgJd alg_jd[NumberOfSupportedCameras]; //⽺AI㷨 +extern ConfPath g_conf_path; +extern SysConf g_sys_conf; //ϵͳò +extern DisplayLabelConf g_display_label_conf[NumberOfSupportedCameras]; +extern ExportDataThread exportDataThread; + +extern int rotationAngle[NumberOfSupportedCameras]; //ͼƬתǶ +extern bool isNeedRotate[NumberOfSupportedCameras]; + +extern SyncQueue >* g_save_queue; //ͼƬ +extern SyncQueue >* g_image_queue[NumberOfSupportedCameras]; //intʾһĿ˼ +extern SyncQueue<_UDPSendInfo>* UDP_Info_queue; +extern PLCDevice* m_PLCDevice; +extern bool g_debug_mode; + +WorkThread::~WorkThread() +{ + stop(); + local_g_image_queue->put(std::make_pair(0, cv::Mat())); + quit(); + wait(); +} + +void WorkThread::init(SyncQueue>* image_ptr, ASyncQueue* result_ptr, int classid, int Num) +{ + local_camera_number = Num; + local_classid = classid; + local_g_image_queue = image_ptr; + local_g_result_queue = result_ptr; + b_quit = false; + frame_total = 0; +} +void WorkThread::start_work() +{ + start(HighestPriority); +} +void WorkThread::stop() +{ + b_quit = true; +} + +void WorkThread::run() +{ + try{ + uint32_t result_index = 0; + while (!b_quit) { + {//Ҫɾţ + std::lock_guard locker(g_sys_conf.lock); + local_SysConf.save = g_sys_conf.save; + local_SysConf.shoot[local_camera_number] = g_sys_conf.shoot[local_camera_number]; + local_SysConf.MisMatchAct = g_sys_conf.MisMatchAct; + local_SysConf.ConfThreshold = g_sys_conf.ConfThreshold;// + for (int i = 0; i < 5; i++)local_SysConf.no[local_camera_number][i] = g_sys_conf.no[local_camera_number][i]; + +#ifdef DRAW_RECT + std::lock_guard locker2(g_display_label_conf[local_camera_number].lock); + local_DisplayLabelConf.leftButtonDownFlag = g_display_label_conf[local_camera_number].leftButtonDownFlag; + local_DisplayLabelConf.Flag[0] = g_display_label_conf[local_camera_number].Flag[0]; + local_DisplayLabelConf.Flag[1] = g_display_label_conf[local_camera_number].Flag[1]; + local_DisplayLabelConf.originalPoint = g_display_label_conf[local_camera_number].originalPoint; + local_DisplayLabelConf.processPoint = g_display_label_conf[local_camera_number].processPoint; + local_DisplayLabelConf.RectVet[0] = g_display_label_conf[local_camera_number].RectVet[0]; + local_DisplayLabelConf.RectVet[1] = g_display_label_conf[local_camera_number].RectVet[1]; +#endif + } + + + QDateTime now_ts = QDateTime::currentDateTime(); + std::pair element; + local_g_image_queue->take(element); + int unit_count = element.first; + cv::Mat image = element.second; + /// ϳһŴͼ + if (local_SysConf.save == 2) { + if (result_index >= 0) { + if (image.data) { + cv::Mat m = image.clone(); + QString file_name = g_conf_path.save_pics_path + "/ALL/" + + now_ts.toString("yyyy-MM-dd") + "/" + + QString::number(local_camera_number + 1) + "/" + + now_ts.toString("yyyy-MM-dd_HH-mm-ss_zzz_") + ".jpg"; + std::string filename = file_name.toLocal8Bit().constData(); + + // иľ򣬲Ϊx, y, width, height + cv::Rect rect(0, 0, m.cols, m.rows/2); // ͼƬ(0,0)ʼͼƬʵиm.cols߶m.rows/2 + // иͼƬ + cv::Mat m1 = m(rect); + m = image.clone(); + // иľ򣬲Ϊx, y, width, height + cv::Rect rect2(0, m.rows / 2, m.cols, m.rows/2); + // иͼƬ + cv::Mat m2 = m(rect2); + // ֱƴͼƬ + cv::vconcat(m2, m1,m); + g_save_queue->put(std::make_pair(filename, m)); + + } + } + } + + _UDPSendInfo UDPSendInfo; + UDPSendInfo.FrameID = info_frame; + UDPSendInfo.index = local_camera_number; + + if (!image.data) + { + continue; //ͼΪգ + } + if (image.channels() == 1) + { + cv::cvtColor(image, image, CV_BGR2RGB); //ҶͼתΪɫͼ + } + if (local_SysConf.shoot[local_camera_number] == unit_count) + { + std::vector vec_in; + int w = image.cols; + int h = image.rows / unit_count; + for (int index = 0; index < unit_count; index++) { + cv::Rect temp_Rect(0, h * index, w, h); + cv::Mat temp_image = image(temp_Rect).clone(); + if (isNeedRotate[local_camera_number]) { + if (rotationAngle[local_camera_number] != (cv::ROTATE_90_COUNTERCLOCKWISE + 1)) + { + cv::rotate(temp_image, temp_image, rotationAngle[local_camera_number]); + } + } + vec_in.push_back(temp_image.clone()); + } + + std::vector vec_out; + std::vector > > vec_results; + QDateTime ts_start = QDateTime::currentDateTime(); + if(unit_count == 1){ + std::vector > results; + cv::Mat imagein,imageout; + imagein = vec_in[0]; + alg_jd[local_camera_number].detect(imagein, imageout, results); + vec_out.push_back(imageout.clone()); + vec_results.push_back(results); + }else{ + alg_jd[local_camera_number].detect_batch(vec_in, vec_out, vec_results); + } + QDateTime ts_jd = QDateTime::currentDateTime(); + int time_process = ts_start.msecsTo(ts_jd); + emit display_timecost(local_camera_number, time_process); + UDPSendInfo.timecost = QString::number(time_process); + + cv::Mat image1; + cv::Mat image2; + + QString jd_no; + for (int index = 0; index < unit_count; index++) { + jd_no += QString::number(vec_results[index].size()) + ","; + } + jd_no.chop(1); + emit display_jd_no(local_camera_number, jd_no); + UDPSendInfo.JD = jd_no; + + bool IsNG = false; + int ngReason = 0; + QMap ng_reason_maps; + ng_reason_maps[0] = "unknow"; + ng_reason_maps[1] = "less_than_setting"; + ng_reason_maps[2] = "too_diff_from_model"; + ng_reason_maps[3] = "out_of_setting_range"; + for(int index=0;indexput(true); + } + } + else + { + if (!g_debug_mode) + { + emit event_ng(local_camera_number); + local_g_result_queue->put(false); + } + + if ((local_SysConf.save == 2) || (local_SysConf.save == 1)) + { + // ng + cv::Mat mergeNg; + cv::Size bigSize(image1.cols, image1.rows* unit_count); + mergeNg.create(bigSize, CV_MAKETYPE(image1.depth(), 3)); + mergeNg = cv::Scalar::all(0); + std::vectortemp(unit_count); + // ng_result + cv::Mat mergeNgResult; + mergeNgResult.create(bigSize, CV_MAKETYPE(image1.depth(), 3)); + mergeNgResult = cv::Scalar::all(0); + std::vectortemp_result(unit_count); + + for(int index = 0;index < unit_count; index++) + { + temp[index] = mergeNg(cv::Rect(0, index * vec_in[0].rows, vec_in[0].cols, vec_in[0].rows)); + vec_in[index].copyTo(temp[index]); // copyͼƬӦλ + cv::rotate(temp[index], temp[index], cv::ROTATE_180); + + temp_result[index] = mergeNgResult(cv::Rect(0, index * vec_out[0].rows, vec_out[0].cols, vec_out[0].rows)); + vec_out[index].copyTo(temp_result[index]); // copyͼƬӦλ + cv::rotate(temp_result[index], temp_result[index], cv::ROTATE_180); + } + QString file_name = g_conf_path.save_pics_path + "/ng/" + + now_ts.toString("yyyy-MM-dd") + "/" + + QString::number(local_camera_number + 1) + "/" + + now_ts.toString("yyyy-MM-dd_HH-mm-ss_zzz_") + QString::number(local_camera_number + 1) + + "#" + "_" + ng_reason_maps[ngReason] + ".jpg"; + cv::rotate(mergeNg, mergeNg, cv::ROTATE_180); + g_save_queue->put(std::make_pair(file_name.toLocal8Bit().constData(), mergeNg)); + + file_name = g_conf_path.save_pics_path + "/ng_result/" + + now_ts.toString("yyyy-MM-dd") + "/" + + QString::number(local_camera_number + 1) + "/" + + now_ts.toString("yyyy-MM-dd_HH-mm-ss_zzz_") + QString::number(local_camera_number + 1) + + "#" + "_" + ng_reason_maps[ngReason] + ".jpg"; + cv::rotate(mergeNgResult, mergeNgResult, cv::ROTATE_180); + g_save_queue->put(std::make_pair(file_name.toLocal8Bit().constData(), mergeNgResult)); + } + } + if (!g_debug_mode) + { + emit display_check_total(local_camera_number, ++frame_total); + + emit notify(local_camera_number, 0, image1); + /*if (unit_count >= 3) + emit notify(local_camera_number, 1, image2);*/ + } + + } + else + { + //֤λ + if (!g_debug_mode) + { + if (local_SysConf.MisMatchAct == 1)//as ng + emit event_ng(local_camera_number); + else if (local_SysConf.MisMatchAct == 0)//as ok + emit event_ok(local_camera_number); + emit display_check_total(local_camera_number, ++frame_total); + qDebug() << local_camera_number << "#camera# " << now_ts.toString("yyyy-MM-dd_HH-mm-ss_zzz_") << "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx " << unit_count; + } + } +#ifdef __UDPSend + UDP_Info_queue->put(UDPSendInfo); +#endif + } + } + catch (cv::Exception& e) + { + const char* err_msg = e.what(); + std::cout << "exception caught: " << err_msg << std::endl; + } +} \ No newline at end of file diff --git a/Cigarette/workthread.h b/240510-常德GDX1-1相机-1280x800/Cigarette/workthread.h similarity index 85% rename from Cigarette/workthread.h rename to 240510-常德GDX1-1相机-1280x800/Cigarette/workthread.h index ccace3d2..ec8ad574 100644 --- a/Cigarette/workthread.h +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/workthread.h @@ -35,9 +35,10 @@ protected: public: int local_camera_number; int local_classid; - SyncQueue > *local_g_image_queue; - ASyncQueue *local_g_result_queue; + SyncQueue>* local_g_image_queue; + ASyncQueue* local_g_result_queue; bool b_quit; long frame_total; SysConf local_SysConf; + DisplayLabelConf local_DisplayLabelConf; }; diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/ASyncQueue.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/ASyncQueue.obj new file mode 100644 index 00000000..e02716a6 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/ASyncQueue.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/AlarmInfo.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/AlarmInfo.obj new file mode 100644 index 00000000..83a4b07f Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/AlarmInfo.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/CaptureThread.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/CaptureThread.obj new file mode 100644 index 00000000..0ed30465 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/CaptureThread.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/CaptureThreadBasler.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/CaptureThreadBasler.obj new file mode 100644 index 00000000..a0091a9f Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/CaptureThreadBasler.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/CaptureThreadHIK.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/CaptureThreadHIK.obj new file mode 100644 index 00000000..7690445b Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/CaptureThreadHIK.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.Build.CppClean.log b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.Build.CppClean.log new file mode 100644 index 00000000..5413dd01 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.Build.CppClean.log @@ -0,0 +1,127 @@ +c:\users\fd\downloads\240205-上海-1相机拍5张-1280x800\240205-上海-1相机拍5张-1280x800\cigarette\generatedfiles\ui_cigarette.h +c:\users\fd\downloads\240205-上海-1相机拍5张-1280x800\240205-上海-1相机拍5张-1280x800\cigarette\generatedfiles\ui_dialogsetuppasswd.h +c:\users\fd\downloads\240205-上海-1相机拍5张-1280x800\240205-上海-1相机拍5张-1280x800\cigarette\generatedfiles\ui_dialogsetup.h +c:\users\fd\downloads\240205-上海-1相机拍5张-1280x800\240205-上海-1相机拍5张-1280x800\cigarette\generatedfiles\ui_plcsetup.h +c:\users\fd\downloads\240205-上海-1相机拍5张-1280x800\240205-上海-1相机拍5张-1280x800\cigarette\generatedfiles\ui_alarmdialog.h +c:\users\fd\downloads\240205-上海-1相机拍5张-1280x800\240205-上海-1相机拍5张-1280x800\cigarette\generatedfiles\ui_dialogin.h +c:\users\fd\downloads\240205-上海-1相机拍5张-1280x800\240205-上海-1相机拍5张-1280x800\cigarette\generatedfiles\ui_camera_glue.h +c:\users\fd\downloads\240205-上海-1相机拍5张-1280x800\240205-上海-1相机拍5张-1280x800\cigarette\generatedfiles\ui_change_shift.h +c:\users\fd\downloads\240205-上海-1相机拍5张-1280x800\240205-上海-1相机拍5张-1280x800\cigarette\generatedfiles\ui_output_statistic.h +c:\users\fd\downloads\240205-上海-1相机拍5张-1280x800\240205-上海-1相机拍5张-1280x800\cigarette\generatedfiles\qrc_cigarette.cpp +c:\users\fd\downloads\240205-上海-1相机拍5张-1280x800\240205-上海-1相机拍5张-1280x800\cigarette\generatedfiles\release\moc_cigarette.cpp +c:\users\fd\downloads\240205-上海-1相机拍5张-1280x800\240205-上海-1相机拍5张-1280x800\cigarette\generatedfiles\release\moc_threadreceive.cpp +c:\users\fd\downloads\240205-上海-1相机拍5张-1280x800\240205-上海-1相机拍5张-1280x800\cigarette\generatedfiles\release\moc_workthread.cpp +c:\users\fd\downloads\240205-上海-1相机拍5张-1280x800\240205-上海-1相机拍5张-1280x800\cigarette\generatedfiles\release\moc_alarmdialog.cpp +c:\users\fd\downloads\240205-上海-1相机拍5张-1280x800\240205-上海-1相机拍5张-1280x800\cigarette\generatedfiles\release\moc_capturethread.cpp +c:\users\fd\downloads\240205-上海-1相机拍5张-1280x800\240205-上海-1相机拍5张-1280x800\cigarette\generatedfiles\release\moc_capturethreadbasler.cpp +c:\users\fd\downloads\240205-上海-1相机拍5张-1280x800\240205-上海-1相机拍5张-1280x800\cigarette\generatedfiles\release\moc_capturethreadhik.cpp +c:\users\fd\downloads\240205-上海-1相机拍5张-1280x800\240205-上海-1相机拍5张-1280x800\cigarette\generatedfiles\release\moc_camera_glue.cpp +c:\users\fd\downloads\240205-上海-1相机拍5张-1280x800\240205-上海-1相机拍5张-1280x800\cigarette\generatedfiles\release\moc_change_shift.cpp +c:\users\fd\downloads\240205-上海-1相机拍5张-1280x800\240205-上海-1相机拍5张-1280x800\cigarette\generatedfiles\release\moc_cleanthread.cpp +c:\users\fd\downloads\240205-上海-1相机拍5张-1280x800\240205-上海-1相机拍5张-1280x800\cigarette\generatedfiles\release\moc_plcsetup.cpp +c:\users\fd\downloads\240205-上海-1相机拍5张-1280x800\240205-上海-1相机拍5张-1280x800\cigarette\generatedfiles\release\moc_db_label.cpp +c:\users\fd\downloads\240205-上海-1相机拍5张-1280x800\240205-上海-1相机拍5张-1280x800\cigarette\generatedfiles\release\moc_debugthread.cpp +c:\users\fd\downloads\240205-上海-1相机拍5张-1280x800\240205-上海-1相机拍5张-1280x800\cigarette\generatedfiles\release\moc_dialogin.cpp +c:\users\fd\downloads\240205-上海-1相机拍5张-1280x800\240205-上海-1相机拍5张-1280x800\cigarette\generatedfiles\release\moc_exportdata.cpp +c:\users\fd\downloads\240205-上海-1相机拍5张-1280x800\240205-上海-1相机拍5张-1280x800\cigarette\generatedfiles\release\moc_output_statistic.cpp +c:\users\fd\downloads\240205-上海-1相机拍5张-1280x800\240205-上海-1相机拍5张-1280x800\cigarette\generatedfiles\release\moc_logthread.cpp +c:\users\fd\downloads\240205-上海-1相机拍5张-1280x800\240205-上海-1相机拍5张-1280x800\cigarette\generatedfiles\release\moc_savethread.cpp +c:\users\fd\downloads\240205-上海-1相机拍5张-1280x800\240205-上海-1相机拍5张-1280x800\cigarette\generatedfiles\release\moc_dialogsetuppasswd.cpp +c:\users\fd\downloads\240205-上海-1相机拍5张-1280x800\240205-上海-1相机拍5张-1280x800\cigarette\generatedfiles\release\moc_dialogsetup.cpp +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\generatedfiles\ui_cigarette.h +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\generatedfiles\ui_dialogsetuppasswd.h +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\generatedfiles\ui_dialogsetup.h +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\generatedfiles\ui_plcsetup.h +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\generatedfiles\ui_alarmdialog.h +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\generatedfiles\ui_dialogin.h +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\generatedfiles\ui_camera_glue.h +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\generatedfiles\ui_change_shift.h +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\generatedfiles\ui_output_statistic.h +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\generatedfiles\qrc_cigarette.cpp +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\generatedfiles\release\moc_cigarette.cpp +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\generatedfiles\release\moc_threadreceive.cpp +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\generatedfiles\release\moc_workthread.cpp +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\generatedfiles\release\moc_alarmdialog.cpp +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\generatedfiles\release\moc_capturethread.cpp +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\generatedfiles\release\moc_capturethreadbasler.cpp +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\generatedfiles\release\moc_capturethreadhik.cpp +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\generatedfiles\release\moc_camera_glue.cpp +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\generatedfiles\release\moc_change_shift.cpp +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\generatedfiles\release\moc_cleanthread.cpp +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\generatedfiles\release\moc_plcsetup.cpp +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\generatedfiles\release\moc_db_label.cpp +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\generatedfiles\release\moc_debugthread.cpp +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\generatedfiles\release\moc_dialogin.cpp +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\generatedfiles\release\moc_exportdata.cpp +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\generatedfiles\release\moc_output_statistic.cpp +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\generatedfiles\release\moc_logthread.cpp +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\generatedfiles\release\moc_savethread.cpp +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\generatedfiles\release\moc_dialogsetuppasswd.cpp +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\generatedfiles\release\moc_dialogsetup.cpp +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\capturethreadhik.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\baslercamera.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\logthread.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\balluffcamera.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\threadsend.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\cleanthread.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\main.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\basecamera.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\hikcamera.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\workthread.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\capturethreadbasler.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\common.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\syncqueue.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\tinyxml2.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\db_label.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\dialogsetup.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\change_shift.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\plc_item.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\threadreceive.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\alarminfo.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\debugthread.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\cigarette.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\asyncqueue.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\dialogin.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\exportdata.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\alg_jd.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\plcdevice.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\alarmdialog.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\dialogsetuppasswd.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\plcsetup.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\camera_glue.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\output_statistic.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\capturethread.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\vc143.pdb +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\moc_debugthread.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\moc_capturethreadbasler.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\qrc_cigarette.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\moc_output_statistic.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\moc_capturethread.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\moc_workthread.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\moc_change_shift.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\moc_savethread.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\moc_exportdata.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\moc_dialogin.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\moc_dialogsetup.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\moc_db_label.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\moc_dialogsetuppasswd.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\moc_threadreceive.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\moc_plcsetup.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\moc_camera_glue.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\moc_cleanthread.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\moc_logthread.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\moc_capturethreadhik.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\moc_alarmdialog.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\moc_cigarette.obj +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\x64\release\cigarette.exe +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\x64\release\cigarette.lib +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\x64\release\cigarette.exp +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\cigarette.tlog\cigarette.write.1u.tlog +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\cigarette.tlog\cl.command.1.tlog +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\cigarette.tlog\cl.items.tlog +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\cigarette.tlog\cl.read.1.tlog +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\cigarette.tlog\cl.write.1.tlog +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\cigarette.tlog\link.command.1.tlog +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\cigarette.tlog\link.read.1.tlog +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\cigarette.tlog\link.secondary.1.tlog +d:\cigarettesh\240510-changde-gdx1-1xiangji-1280x800-2\cigarette\x64\release\cigarette.tlog\link.write.1.tlog diff --git a/Cigarette/x64/Release/Cigarette.exe.recipe b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.exe.recipe similarity index 57% rename from Cigarette/x64/Release/Cigarette.exe.recipe rename to 240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.exe.recipe index a4c292b4..18302b3f 100644 --- a/Cigarette/x64/Release/Cigarette.exe.recipe +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.exe.recipe @@ -2,7 +2,7 @@ - D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\x64\Release\Cigarette.exe + D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\x64\Release\Cigarette.exe diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.log b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.log new file mode 100644 index 00000000..c85e798b --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.log @@ -0,0 +1,51 @@ + CaptureThread.cpp + CaptureThreadBasler.cpp + CaptureThreadHIK.cpp + Cleanthread.cpp + PLCDevice.cpp + alg_jd.cpp + camera_glue.cpp + change_shift.cpp + cigarette.cpp + common.cpp + debugthread.cpp + dialogsetup.cpp + exportData.cpp + main.cpp + output_statistic.cpp + plcsetup.cpp + Automatically linking with mvDeviceManager.lib + Automatically linking with mvDeviceManager.lib + Automatically linking with mvDeviceManager.lib + Automatically linking with mvDeviceManager.lib + threadReceive.cpp + Automatically linking with mvDeviceManager.lib + Automatically linking with mvDeviceManager.lib + threadSend.cpp + workthread.cpp + Automatically linking with mvDeviceManager.lib +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\dialogsetup.cpp(536,16): warning C4477: “sprintf”: 格式字符串“%s”需要类型“char *”的参数,但可变参数 1 拥有了类型“std::string” + Automatically linking with mvDeviceManager.lib +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\cigarette.cpp(336,29): warning C4838: 从“int”转换到“uint16_t”需要收缩转换 +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\cigarette.cpp(2661,16): warning C4477: “sprintf”: 格式字符串“%s”需要类型“char *”的参数,但可变参数 1 拥有了类型“std::string” +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\cigarette.cpp(2661,16): warning C4477: “sprintf”: 格式字符串“%s”需要类型“char *”的参数,但可变参数 2 拥有了类型“std::string” +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\cigarette.cpp(2661,16): warning C4477: “sprintf”: 格式字符串“%s”需要类型“char *”的参数,但可变参数 3 拥有了类型“std::string” + Automatically linking with mvDeviceManager.lib + Automatically linking with mvDeviceManager.lib +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\cigarette.cpp(522,1): warning C4722: “Cigarette::~Cigarette”: 析构函数永远不会返回,可能会发生内存泄漏 + moc_CaptureThread.cpp + moc_CaptureThreadBasler.cpp + moc_camera_glue.cpp + moc_cigarette.cpp + moc_debugthread.cpp + moc_dialogsetup.cpp + moc_exportData.cpp + moc_output_statistic.cpp + moc_savethread.cpp + moc_threadReceive.cpp + moc_workthread.cpp + Automatically linking with mvDeviceManager.lib + Automatically linking with mvDeviceManager.lib + Automatically linking with mvDeviceManager.lib + Automatically linking with mvDeviceManager.lib + Cigarette.vcxproj -> D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\x64\Release\Cigarette.exe diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/CL.command.1.tlog b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/CL.command.1.tlog new file mode 100644 index 00000000..8e6dfa80 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/CL.command.1.tlog differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/CL.read.1.tlog b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/CL.read.1.tlog new file mode 100644 index 00000000..137e8857 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/CL.read.1.tlog differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/CL.write.1.tlog b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/CL.write.1.tlog new file mode 100644 index 00000000..53b9dfa5 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/CL.write.1.tlog differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/Cigarette.lastbuildstate b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/Cigarette.lastbuildstate new file mode 100644 index 00000000..7b79f30b --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/Cigarette.lastbuildstate @@ -0,0 +1,2 @@ +PlatformToolSet=v143:VCToolArchitecture=Native64Bit:VCToolsVersion=14.39.33519:TargetPlatformVersion=10.0.22621.0: +Release|x64|D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\| diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/Cigarette.write.1u.tlog b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/Cigarette.write.1u.tlog new file mode 100644 index 00000000..f3c0c12a Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/Cigarette.write.1u.tlog differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/Cl.items.tlog b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/Cl.items.tlog new file mode 100644 index 00000000..8e0890bb --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/Cl.items.tlog @@ -0,0 +1,54 @@ +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\alarmdialog.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\alarmdialog.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\AlarmInfo.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\AlarmInfo.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\alg_jd.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\alg_jd.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\ASyncQueue.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\ASyncQueue.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\balluffcamera.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\balluffcamera.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\basecamera.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\basecamera.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\baslercamera.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\baslercamera.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\camera_glue.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\camera_glue.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\CaptureThread.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\CaptureThread.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\CaptureThreadBasler.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\CaptureThreadBasler.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\CaptureThreadHIK.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\CaptureThreadHIK.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\change_shift.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\change_shift.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\cigarette.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\cigarette.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\Cleanthread.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\Cleanthread.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\common.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\common.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\db_label.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\db_label.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\debugthread.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\debugthread.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\dialogin.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\dialogin.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\dialogsetup.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\dialogsetup.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\dialogsetuppasswd.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\dialogsetuppasswd.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\exportData.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\exportData.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\hikcamera.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\hikcamera.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\Logthread.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\Logthread.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\main.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\main.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\output_statistic.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\output_statistic.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\plcsetup.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\plcsetup.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\PLC\PLCDevice.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\PLCDevice.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\plc_item.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\plc_item.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\SyncQueue.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\SyncQueue.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\threadReceive.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\threadReceive.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\threadSend.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\threadSend.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\tinyxml2.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\tinyxml2.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\workthread.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\workthread.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\GeneratedFiles\qrc_cigarette.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\qrc_cigarette.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\GeneratedFiles\Release\moc_cigarette.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\moc_cigarette.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\GeneratedFiles\Release\moc_threadReceive.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\moc_threadReceive.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\GeneratedFiles\Release\moc_workthread.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\moc_workthread.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\GeneratedFiles\Release\moc_alarmdialog.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\moc_alarmdialog.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\GeneratedFiles\Release\moc_CaptureThread.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\moc_CaptureThread.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\GeneratedFiles\Release\moc_CaptureThreadBasler.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\moc_CaptureThreadBasler.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\GeneratedFiles\Release\moc_CaptureThreadHIK.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\moc_CaptureThreadHIK.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\GeneratedFiles\Release\moc_camera_glue.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\moc_camera_glue.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\GeneratedFiles\Release\moc_change_shift.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\moc_change_shift.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\GeneratedFiles\Release\moc_Cleanthread.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\moc_Cleanthread.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\GeneratedFiles\Release\moc_plcsetup.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\moc_plcsetup.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\GeneratedFiles\Release\moc_db_label.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\moc_db_label.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\GeneratedFiles\Release\moc_debugthread.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\moc_debugthread.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\GeneratedFiles\Release\moc_dialogin.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\moc_dialogin.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\GeneratedFiles\Release\moc_exportData.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\moc_exportData.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\GeneratedFiles\Release\moc_output_statistic.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\moc_output_statistic.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\GeneratedFiles\Release\moc_Logthread.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\moc_Logthread.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\GeneratedFiles\Release\moc_savethread.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\moc_savethread.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\GeneratedFiles\Release\moc_dialogsetuppasswd.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\moc_dialogsetuppasswd.obj +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\GeneratedFiles\Release\moc_dialogsetup.cpp;D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\Cigarette\x64\Release\moc_dialogsetup.obj diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/link.command.1.tlog b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/link.command.1.tlog new file mode 100644 index 00000000..03d6d489 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/link.command.1.tlog differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/link.read.1.tlog b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/link.read.1.tlog new file mode 100644 index 00000000..bdb21688 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/link.read.1.tlog differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/link.secondary.1.tlog b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/link.secondary.1.tlog new file mode 100644 index 00000000..d43149c5 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/link.secondary.1.tlog @@ -0,0 +1,3 @@ +^D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\ALARMDIALOG.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\ALARMINFO.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\ALG_JD.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\ASYNCQUEUE.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\BALLUFFCAMERA.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\BASECAMERA.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\BASLERCAMERA.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\CAMERA_GLUE.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\CAPTURETHREAD.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\CAPTURETHREADBASLER.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\CAPTURETHREADHIK.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\CHANGE_SHIFT.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\CIGARETTE.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\CLEANTHREAD.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\COMMON.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\DB_LABEL.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\DEBUGTHREAD.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\DIALOGIN.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\DIALOGSETUP.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\DIALOGSETUPPASSWD.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\EXPORTDATA.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\HIKCAMERA.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\LOGTHREAD.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\MAIN.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\MOC_ALARMDIALOG.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\MOC_CAMERA_GLUE.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\MOC_CAPTURETHREAD.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\MOC_CAPTURETHREADBASLER.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\MOC_CAPTURETHREADHIK.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\MOC_CHANGE_SHIFT.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\MOC_CIGARETTE.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\MOC_CLEANTHREAD.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\MOC_DB_LABEL.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\MOC_DEBUGTHREAD.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\MOC_DIALOGIN.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\MOC_DIALOGSETUP.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\MOC_DIALOGSETUPPASSWD.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\MOC_EXPORTDATA.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\MOC_LOGTHREAD.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\MOC_OUTPUT_STATISTIC.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\MOC_PLCSETUP.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\MOC_SAVETHREAD.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\MOC_THREADRECEIVE.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\MOC_WORKTHREAD.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\OUTPUT_STATISTIC.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\PLCDEVICE.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\PLCSETUP.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\PLC_ITEM.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\QRC_CIGARETTE.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\SYNCQUEUE.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\THREADRECEIVE.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\THREADSEND.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\TINYXML2.OBJ|D:\CIGARETTESH\240510-CHANGDE-GDX1-1XIANGJI-1280X800-2\CIGARETTE\X64\RELEASE\WORKTHREAD.OBJ +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\x64\Release\Cigarette.lib +D:\CigaretteSH\240510-changde-GDX1-1xiangji-1280x800-2\x64\Release\Cigarette.EXP diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/link.write.1.tlog b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/link.write.1.tlog new file mode 100644 index 00000000..d5129b8b Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/link.write.1.tlog differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/moc.read.1u.tlog b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/moc.read.1u.tlog new file mode 100644 index 00000000..66672896 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/moc.read.1u.tlog differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/moc.write.1u.tlog b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/moc.write.1u.tlog new file mode 100644 index 00000000..17ca8cae Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/moc.write.1u.tlog differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/rcc.read.1u.tlog b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/rcc.read.1u.tlog new file mode 100644 index 00000000..2fe3f3b0 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/rcc.read.1u.tlog differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/rcc.write.1u.tlog b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/rcc.write.1u.tlog new file mode 100644 index 00000000..619b4153 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/rcc.write.1u.tlog differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/uic.read.1u.tlog b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/uic.read.1u.tlog new file mode 100644 index 00000000..11558d8e Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/uic.read.1u.tlog differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/uic.write.1u.tlog b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/uic.write.1u.tlog new file mode 100644 index 00000000..f7d60674 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.tlog/uic.write.1u.tlog differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.vcxproj.FileListAbsolute.txt b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cigarette.vcxproj.FileListAbsolute.txt new file mode 100644 index 00000000..e69de29b diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cleanthread.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cleanthread.obj new file mode 100644 index 00000000..61ab1889 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Cleanthread.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Logthread.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Logthread.obj new file mode 100644 index 00000000..6c243f9f Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/Logthread.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/PLCDevice.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/PLCDevice.obj new file mode 100644 index 00000000..66328c1e Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/PLCDevice.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/SyncQueue.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/SyncQueue.obj new file mode 100644 index 00000000..a0ce3038 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/SyncQueue.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/alarmdialog.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/alarmdialog.obj new file mode 100644 index 00000000..0881e70a Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/alarmdialog.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/alg_jd.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/alg_jd.obj new file mode 100644 index 00000000..09c58420 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/alg_jd.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/balluffcamera.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/balluffcamera.obj new file mode 100644 index 00000000..bf8f1165 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/balluffcamera.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/basecamera.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/basecamera.obj new file mode 100644 index 00000000..279683e4 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/basecamera.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/baslercamera.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/baslercamera.obj new file mode 100644 index 00000000..191175ff Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/baslercamera.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/camera_glue.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/camera_glue.obj new file mode 100644 index 00000000..4ecb5149 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/camera_glue.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/change_shift.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/change_shift.obj new file mode 100644 index 00000000..5d95f518 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/change_shift.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/cigarette.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/cigarette.obj new file mode 100644 index 00000000..0ddcc3ed Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/cigarette.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/common.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/common.obj new file mode 100644 index 00000000..0502fd0b Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/common.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/db_label.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/db_label.obj new file mode 100644 index 00000000..ab96598c Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/db_label.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/debugthread.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/debugthread.obj new file mode 100644 index 00000000..9fa7481b Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/debugthread.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/dialogin.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/dialogin.obj new file mode 100644 index 00000000..61a5c33e Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/dialogin.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/dialogsetup.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/dialogsetup.obj new file mode 100644 index 00000000..38572cd6 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/dialogsetup.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/dialogsetuppasswd.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/dialogsetuppasswd.obj new file mode 100644 index 00000000..20bc8e90 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/dialogsetuppasswd.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/exportData.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/exportData.obj new file mode 100644 index 00000000..347aa81f Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/exportData.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/hikcamera.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/hikcamera.obj new file mode 100644 index 00000000..3b04edbf Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/hikcamera.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/main.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/main.obj new file mode 100644 index 00000000..46197776 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/main.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_CaptureThread.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_CaptureThread.obj new file mode 100644 index 00000000..5d5d1521 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_CaptureThread.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_CaptureThreadBasler.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_CaptureThreadBasler.obj new file mode 100644 index 00000000..d43740a2 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_CaptureThreadBasler.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_CaptureThreadHIK.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_CaptureThreadHIK.obj new file mode 100644 index 00000000..8e30a258 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_CaptureThreadHIK.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_Cleanthread.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_Cleanthread.obj new file mode 100644 index 00000000..bf8e5926 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_Cleanthread.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_Logthread.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_Logthread.obj new file mode 100644 index 00000000..5d053648 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_Logthread.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_alarmdialog.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_alarmdialog.obj new file mode 100644 index 00000000..479b6863 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_alarmdialog.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_camera_glue.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_camera_glue.obj new file mode 100644 index 00000000..479797ac Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_camera_glue.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_change_shift.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_change_shift.obj new file mode 100644 index 00000000..dafe42d2 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_change_shift.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_cigarette.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_cigarette.obj new file mode 100644 index 00000000..f52577db Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_cigarette.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_db_label.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_db_label.obj new file mode 100644 index 00000000..508660f7 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_db_label.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_debugthread.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_debugthread.obj new file mode 100644 index 00000000..f9b16bc7 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_debugthread.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_dialogin.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_dialogin.obj new file mode 100644 index 00000000..9dcff158 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_dialogin.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_dialogsetup.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_dialogsetup.obj new file mode 100644 index 00000000..bbe07847 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_dialogsetup.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_dialogsetuppasswd.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_dialogsetuppasswd.obj new file mode 100644 index 00000000..a0707025 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_dialogsetuppasswd.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_exportData.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_exportData.obj new file mode 100644 index 00000000..52462d86 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_exportData.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_output_statistic.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_output_statistic.obj new file mode 100644 index 00000000..792b71be Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_output_statistic.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_plcsetup.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_plcsetup.obj new file mode 100644 index 00000000..d215ea9b Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_plcsetup.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_savethread.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_savethread.obj new file mode 100644 index 00000000..763c499d Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_savethread.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_threadReceive.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_threadReceive.obj new file mode 100644 index 00000000..fdae2ae8 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_threadReceive.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_workthread.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_workthread.obj new file mode 100644 index 00000000..6744aea4 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/moc_workthread.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/output_statistic.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/output_statistic.obj new file mode 100644 index 00000000..81dc86b0 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/output_statistic.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/plc_item.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/plc_item.obj new file mode 100644 index 00000000..71ae9015 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/plc_item.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/plcsetup.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/plcsetup.obj new file mode 100644 index 00000000..d33563a8 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/plcsetup.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/qmake/qtvars_x64_Release.props b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/qmake/qtvars_x64_Release.props new file mode 100644 index 00000000..2fd32dc7 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/qmake/qtvars_x64_Release.props @@ -0,0 +1,60 @@ + + +_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WIN64;NDEBUG;QT_NO_DEBUG;QT_WIDGETS_LIB;QT_GUI_LIB;QT_NETWORK_LIB;QT_CORE_LIB +C:\Users\FD\AppData\Local\Temp\w3kvik3n.nyb;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtWidgets;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtGui;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtANGLE;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtNetwork;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtCore;C:\Users\FD\AppData\Local\Temp\w3kvik3n.nyb;/include;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\win32-msvc + +MultiThreadedDLL +-Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus +C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Widgets.lib;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Gui.lib;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Network.lib;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Core.lib;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\qtmain.lib;shell32.lib +"/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" + +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64 +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64 +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64 +C:/Qt/Qt5.14.2/Docs/Qt-5.14.2 +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/include +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/lib +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/bin +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/bin +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/tests +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/plugins +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/imports +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/qml +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/translations + +C:/Qt/Qt5.14.2/Examples/Qt-5.14.2 +C:/Qt/Qt5.14.2/Examples/Qt-5.14.2 +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64 +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64 +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/bin +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/lib +win32-msvc +win32-msvc +3.1 +5.14.2 +$(Qt_INCLUDEPATH_);.\GeneratedFiles\Release;.\GeneratedFiles + 5.14.2_msvc2017_64 + core;network;gui;widgets + bin + bin + + + DEFINES=/Project/ItemDefinitionGroup/ClCompile/PreprocessorDefinitions;INCLUDEPATH=/Project/ItemDefinitionGroup/ClCompile/AdditionalIncludeDirectories;STDCPP=/Project/ItemDefinitionGroup/ClCompile/LanguageStandard;RUNTIME=/Project/ItemDefinitionGroup/ClCompile/RuntimeLibrary;CL_OPTIONS=/Project/ItemDefinitionGroup/ClCompile/AdditionalOptions;LIBS=/Project/ItemDefinitionGroup/Link/AdditionalDependencies;LINK_OPTIONS=/Project/ItemDefinitionGroup/Link/AdditionalOptions + + release + 5.14.2 + 5 + 14 + 2 + + diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/qmake/temp/.qmake.stash b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/qmake/temp/.qmake.stash new file mode 100644 index 00000000..470c2bf6 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/qmake/temp/.qmake.stash @@ -0,0 +1,26 @@ +QMAKE_CXX.QT_COMPILER_STDCXX = 199711L +QMAKE_CXX.QMAKE_MSC_VER = 1939 +QMAKE_CXX.QMAKE_MSC_FULL_VER = 193933523 +QMAKE_CXX.COMPILER_MACROS = \ + QT_COMPILER_STDCXX \ + QMAKE_MSC_VER \ + QMAKE_MSC_FULL_VER +QMAKE_CXX.INCDIRS = \ + "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.39.33519\\include" \ + "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.39.33519\\atlmfc\\include" \ + "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Auxiliary\\VS\\include" \ + "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.22621.0\\ucrt" \ + "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Auxiliary\\VS\\UnitTest\\include" \ + "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.22621.0\\um" \ + "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.22621.0\\shared" \ + "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.22621.0\\winrt" \ + "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.22621.0\\cppwinrt" \ + "C:\\Program Files (x86)\\Windows Kits\\NETFXSDK\\4.8\\Include\\um" +QMAKE_CXX.LIBDIRS = \ + "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.39.33519\\lib\\x64" \ + "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.39.33519\\atlmfc\\lib\\x64" \ + "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Auxiliary\\VS\\lib\\x64" \ + "C:\\Program Files (x86)\\Windows Kits\\10\\lib\\10.0.22621.0\\ucrt\\x64" \ + "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Auxiliary\\VS\\UnitTest\\lib" \ + "C:\\Program Files (x86)\\Windows Kits\\10\\lib\\10.0.22621.0\\um\\x64" \ + "C:\\Program Files (x86)\\Windows Kits\\NETFXSDK\\4.8\\lib\\um\\x64" diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/qmake/temp/moc_predefs.h.cbt b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/qmake/temp/moc_predefs.h.cbt new file mode 100644 index 00000000..693383cc --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/qmake/temp/moc_predefs.h.cbt @@ -0,0 +1 @@ +This is a dummy file needed to create ./moc_predefs.h diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/qmake/temp/props.txt b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/qmake/temp/props.txt new file mode 100644 index 00000000..62a0538e --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/qmake/temp/props.txt @@ -0,0 +1,25 @@ +QT_SYSROOT: +QT_INSTALL_PREFIX:C:/Qt/Qt5.14.2/5.14.2/msvc2017_64 +QT_INSTALL_ARCHDATA:C:/Qt/Qt5.14.2/5.14.2/msvc2017_64 +QT_INSTALL_DATA:C:/Qt/Qt5.14.2/5.14.2/msvc2017_64 +QT_INSTALL_DOCS:C:/Qt/Qt5.14.2/Docs/Qt-5.14.2 +QT_INSTALL_HEADERS:C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/include +QT_INSTALL_LIBS:C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/lib +QT_INSTALL_LIBEXECS:C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/bin +QT_INSTALL_BINS:C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/bin +QT_INSTALL_TESTS:C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/tests +QT_INSTALL_PLUGINS:C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/plugins +QT_INSTALL_IMPORTS:C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/imports +QT_INSTALL_QML:C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/qml +QT_INSTALL_TRANSLATIONS:C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/translations +QT_INSTALL_CONFIGURATION: +QT_INSTALL_EXAMPLES:C:/Qt/Qt5.14.2/Examples/Qt-5.14.2 +QT_INSTALL_DEMOS:C:/Qt/Qt5.14.2/Examples/Qt-5.14.2 +QT_HOST_PREFIX:C:/Qt/Qt5.14.2/5.14.2/msvc2017_64 +QT_HOST_DATA:C:/Qt/Qt5.14.2/5.14.2/msvc2017_64 +QT_HOST_BINS:C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/bin +QT_HOST_LIBS:C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/lib +QMAKE_SPEC:win32-msvc +QMAKE_XSPEC:win32-msvc +QMAKE_VERSION:3.1 +QT_VERSION:5.14.2 diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/qmake/temp/qtvars.log b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/qmake/temp/qtvars.log new file mode 100644 index 00000000..697cd8ee --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/qmake/temp/qtvars.log @@ -0,0 +1 @@ +Info: creating stash file C:\Users\FD\AppData\Local\Temp\w3kvik3n.nyb\.qmake.stash diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/qmake/temp/qtvars.pro b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/qmake/temp/qtvars.pro new file mode 100644 index 00000000..ebc19c8d --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/qmake/temp/qtvars.pro @@ -0,0 +1,2 @@ +CONFIG += no_fixpath +QT += core network gui widgets diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/qmake/temp/qtvars.vcxproj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/qmake/temp/qtvars.vcxproj new file mode 100644 index 00000000..8c8403c9 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/qmake/temp/qtvars.vcxproj @@ -0,0 +1,87 @@ + + + + + Release + x64 + + + + + qtvars + Qt4VSv1.0 + + + + v142 + .\ + false + NotSet + Application + qtvars + + + + + + + + + .\ + qtvars + true + false + + + + C:\Users\FD\AppData\Local\Temp\w3kvik3n.nyb;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtWidgets;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtGui;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtANGLE;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtNetwork;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtCore;C:\Users\FD\AppData\Local\Temp\w3kvik3n.nyb;/include;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\win32-msvc;%(AdditionalIncludeDirectories) + -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus %(AdditionalOptions) + .\ + false + None + Sync + .\ + MaxSpeed + _WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WIN64;NDEBUG;QT_NO_DEBUG;QT_WIDGETS_LIB;QT_GUI_LIB;QT_NETWORK_LIB;QT_CORE_LIB;%(PreprocessorDefinitions) + false + + MultiThreadedDLL + true + true + TurnOffAllWarnings + + + C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Widgets.lib;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Gui.lib;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Network.lib;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Core.lib;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\qtmain.lib;shell32.lib;%(AdditionalDependencies) + C:\openssl\lib;C:\Utils\my_sql\mysql-5.7.25-winx64\lib;C:\Utils\postgresql\pgsql\lib;%(AdditionalLibraryDirectories) + "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" %(AdditionalOptions) + true + false + true + false + true + $(OutDir)\qtvars.exe + true + Windows + true + + + Unsigned + None + 0 + + + _WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WIN64;NDEBUG;QT_NO_DEBUG;QT_WIDGETS_LIB;QT_GUI_LIB;QT_NETWORK_LIB;QT_CORE_LIB;%(PreprocessorDefinitions) + + + + + Document + C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\data\dummy.cpp;%(AdditionalInputs) + cl -BxC:\Qt\Qt5.14.2\5.14.2\msvc2017_64\bin\qmake.exe -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -O2 -MD -W0 -E C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\data\dummy.cpp 2>NUL >moc_predefs.h + Generate moc_predefs.h + moc_predefs.h;%(Outputs) + + + + + \ No newline at end of file diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/qmake/temp/qtvars.vcxproj.filters b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/qmake/temp/qtvars.vcxproj.filters new file mode 100644 index 00000000..a5e61b76 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/qmake/temp/qtvars.vcxproj.filters @@ -0,0 +1,14 @@ + + + + + {71ED8ED8-ACB9-4CE9-BBE1-E00B30144E11} + cpp;c;cxx;moc;h;def;odl;idl;res; + + + + + Generated Files + + + \ No newline at end of file diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/qmake/temp/qtvars_x64_Release.props b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/qmake/temp/qtvars_x64_Release.props new file mode 100644 index 00000000..2fd32dc7 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/qmake/temp/qtvars_x64_Release.props @@ -0,0 +1,60 @@ + + +_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WIN64;NDEBUG;QT_NO_DEBUG;QT_WIDGETS_LIB;QT_GUI_LIB;QT_NETWORK_LIB;QT_CORE_LIB +C:\Users\FD\AppData\Local\Temp\w3kvik3n.nyb;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtWidgets;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtGui;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtANGLE;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtNetwork;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtCore;C:\Users\FD\AppData\Local\Temp\w3kvik3n.nyb;/include;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\win32-msvc + +MultiThreadedDLL +-Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus +C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Widgets.lib;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Gui.lib;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Network.lib;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Core.lib;C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\qtmain.lib;shell32.lib +"/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" + +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64 +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64 +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64 +C:/Qt/Qt5.14.2/Docs/Qt-5.14.2 +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/include +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/lib +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/bin +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/bin +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/tests +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/plugins +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/imports +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/qml +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/translations + +C:/Qt/Qt5.14.2/Examples/Qt-5.14.2 +C:/Qt/Qt5.14.2/Examples/Qt-5.14.2 +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64 +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64 +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/bin +C:/Qt/Qt5.14.2/5.14.2/msvc2017_64/lib +win32-msvc +win32-msvc +3.1 +5.14.2 +$(Qt_INCLUDEPATH_);.\GeneratedFiles\Release;.\GeneratedFiles + 5.14.2_msvc2017_64 + core;network;gui;widgets + bin + bin + + + DEFINES=/Project/ItemDefinitionGroup/ClCompile/PreprocessorDefinitions;INCLUDEPATH=/Project/ItemDefinitionGroup/ClCompile/AdditionalIncludeDirectories;STDCPP=/Project/ItemDefinitionGroup/ClCompile/LanguageStandard;RUNTIME=/Project/ItemDefinitionGroup/ClCompile/RuntimeLibrary;CL_OPTIONS=/Project/ItemDefinitionGroup/ClCompile/AdditionalOptions;LIBS=/Project/ItemDefinitionGroup/Link/AdditionalDependencies;LINK_OPTIONS=/Project/ItemDefinitionGroup/Link/AdditionalOptions + + release + 5.14.2 + 5 + 14 + 2 + + diff --git a/Cigarette/x64/Release/qrc_cigarette.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/qrc_cigarette.obj similarity index 69% rename from Cigarette/x64/Release/qrc_cigarette.obj rename to 240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/qrc_cigarette.obj index a1d9405b..09dd3872 100644 Binary files a/Cigarette/x64/Release/qrc_cigarette.obj and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/qrc_cigarette.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/qt_work.log b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/qt_work.log new file mode 100644 index 00000000..58d4fdb9 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/qt_work.log differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/threadReceive.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/threadReceive.obj new file mode 100644 index 00000000..4aa018ea Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/threadReceive.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/threadSend.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/threadSend.obj new file mode 100644 index 00000000..6574d306 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/threadSend.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/tinyxml2.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/tinyxml2.obj new file mode 100644 index 00000000..3558d7dd Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/tinyxml2.obj differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/vc143.pdb b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/vc143.pdb new file mode 100644 index 00000000..cfcdbf83 Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/vc143.pdb differ diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/vcpkg.applocal.log b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/vcpkg.applocal.log new file mode 100644 index 00000000..e02abfc9 --- /dev/null +++ b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/vcpkg.applocal.log @@ -0,0 +1 @@ + diff --git a/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/workthread.obj b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/workthread.obj new file mode 100644 index 00000000..92aa404d Binary files /dev/null and b/240510-常德GDX1-1相机-1280x800/Cigarette/x64/Release/workthread.obj differ diff --git a/Cigarette/Cigarette.vcxproj b/Cigarette/Cigarette.vcxproj deleted file mode 100644 index b1a7fa50..00000000 --- a/Cigarette/Cigarette.vcxproj +++ /dev/null @@ -1,942 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {B12702AD-ABFB-343A-A199-8E24837244A3} - Qt4VSv1.0 - 10.0 - - - - Application - v143 - - - Application - v143 - - - Application - v143 - - - Application - v143 - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>14.0.25431.1 - - - $(SolutionDir)$(Platform)\$(Configuration)\ - - - $(SolutionDir)$(Platform)\$(Configuration)\ - - - $(SolutionDir)$(Platform)\$(Configuration)\ - - - $(SolutionDir)$(Platform)\$(Configuration)\ - $(IncludePath) - - - - UNICODE;_UNICODE;WIN32;WIN64;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;QT_NETWORK_LIB;%(PreprocessorDefinitions) - .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtNetwork;%(AdditionalIncludeDirectories) - Disabled - ProgramDatabase - MultiThreadedDebugDLL - true - - - Windows - $(OutDir)\$(ProjectName).exe - $(QTDIR)\lib;%(AdditionalLibraryDirectories) - true - qtmaind.lib;Qt5Cored.lib;Qt5Widgetsd.lib;Qt5Guid.lib;Qt5Networkd.lib;%(AdditionalDependencies) - - - - - UNICODE;_UNICODE;WIN32;WIN64;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB;%(PreprocessorDefinitions) - .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;G:\code_library\c\opencv\4.3\build-opencv-cpu\include;$(ProjectDir)MvIMPACT;$(ProjectDir)Pylon6.2\include;$(ProjectDir)Common;$(ProjectDir)modbus;$(ProjectDir)MVS3.2.1\Include;$(ProjectDir)PLC;$(QTDIR)\include\QtNetwork;%(AdditionalIncludeDirectories) - Disabled - ProgramDatabase - MultiThreadedDebugDLL - true - true - stdcpp14 - - - Console - $(OutDir)\$(ProjectName).exe - $(QTDIR)\lib;G:\code_library\c\opencv\4.3\build-opencv-cpu\x64\vc15\lib;$(ProjectDir)Pylon6.2\lib\Win64;%(AdditionalLibraryDirectories) - true - qtmaind.lib;Qt5Cored.lib;Qt5Widgetsd.lib;Qt5Guid.lib;opencv_world430d.lib;modbus.lib;mvDeviceManager.lib;MvCameraControl.lib;Qt5Networkd.lib;%(AdditionalDependencies) - - - - - UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;QT_NETWORK_LIB;%(PreprocessorDefinitions) - .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtNetwork;%(AdditionalIncludeDirectories) - - MultiThreadedDLL - true - - - Windows - $(OutDir)\$(ProjectName).exe - $(QTDIR)\lib;%(AdditionalLibraryDirectories) - false - qtmain.lib;Qt5Core.lib;Qt5Widgets.lib;Qt5Gui.lib;Qt5Network.lib;%(AdditionalDependencies) - - - - - UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;NOMINMAX;QT_NETWORK_LIB;%(PreprocessorDefinitions) - .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(ProjectDir)MvIMPACT;$(ProjectDir)OpenCV455Simple\include;$(ProjectDir)Common;$(ProjectDir)Pylon6.2\include;$(ProjectDir)modbus;$(ProjectDir)MVS3.2.1\Include;$(ProjectDir)PLC;$(QTDIR)\include\QtNetwork;%(AdditionalIncludeDirectories) - None - MultiThreadedDLL - true - true - stdcpp14 - MaxSpeed - true - - - Console - $(OutDir)\$(ProjectName).exe - $(QTDIR)\lib;$(ProjectDir)OpenCV455Simple\win64\vc15\lib;$(ProjectDir)Pylon6.2\lib\Win64;$(ProjectDir)MvIMPACT\lib\win64;$(ProjectDir)MVS3.2.1\lib\win64;$(ProjectDir)modbus;%(AdditionalLibraryDirectories) - false - qtmain.lib;Qt5Core.lib;Qt5Widgets.lib;Qt5Gui.lib;opencv_world455.lib;modbus.lib;mvDeviceManager.lib;MvCameraControl.lib;Qt5Network.lib;%(AdditionalDependencies) - - - - - - - - - - - - - - - - - - - - - - - - - true - true - - - true - true - - - true - true - - - true - true - - - true - true - - - true - true - - - true - true - - - true - true - - - true - true - - - true - true - - - true - true - - - true - true - - - true - true - - - true - true - - - true - true - - - true - true - - - true - true - - - true - true - - - true - true - - - - - - - - - - - - - true - true - - - true - true - - - true - true - - - true - true - - - true - true - - - true - true - - - true - true - - - true - true - - - true - true - - - true - true - - - true - true - - - true - true - - - true - true - - - true - true - - - true - true - - - true - true - - - true - true - - - true - true - - - true - true - - - - - - - - - - - - - - - - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing cigarette.h... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing cigarette.h... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing cigarette.h... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing cigarette.h... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-IG:\code_library\c\opencv\4.3\build-opencv+cuda\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - - - - - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - - - - - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CHARTS_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_WEBCHANNEL_LIB -DQT_WEBSOCKETS_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCharts" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtWebChannel" "-I$(QTDIR)\include\QtWebSockets" "-I$(QTDIR)\include\QtWidgets" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DNOMINMAX -DQT_CHARTS_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_WEBCHANNEL_LIB -DQT_WEBSOCKETS_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)OpenCV455Simple\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtCharts" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtWebChannel" "-I$(QTDIR)\include\QtWebSockets" "-I$(QTDIR)\include\QtWidgets" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CHARTS_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_WEBCHANNEL_LIB -DQT_WEBSOCKETS_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCharts" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtWebChannel" "-I$(QTDIR)\include\QtWebSockets" "-I$(QTDIR)\include\QtWidgets" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DNOMINMAX -DQT_CHARTS_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_WEBCHANNEL_LIB -DQT_WEBSOCKETS_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)OpenCV455Simple\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtCharts" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtWebChannel" "-I$(QTDIR)\include\QtWebSockets" "-I$(QTDIR)\include\QtWidgets" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-IG:\code_library\c\opencv\4.3\build-opencv+cuda\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - - - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing alarmdialog.hpp... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing alarmdialog.hpp... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing alarmdialog.hpp... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing alarmdialog.hpp... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-IG:\code_library\c\opencv\4.3\build-opencv+cuda\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - - - - - - - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing CaptureThread.h... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing CaptureThread.h... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing CaptureThread.h... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing CaptureThread.h... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-IG:\code_library\c\opencv\4.3\build-opencv+cuda\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - - - - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-IG:\code_library\c\opencv\4.3\build-opencv+cuda\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - - - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-IG:\code_library\c\opencv\4.3\build-opencv+cuda\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - - - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)OpenCV455Simple\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - - - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)OpenCV455Simple\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - - - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)OpenCV455Simple\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - - - - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing plcsetup.hpp... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing plcsetup.hpp... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing plcsetup.hpp... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing plcsetup.hpp... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-IG:\code_library\c\opencv\4.3\build-opencv+cuda\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - - - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing db_label.h... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing db_label.h... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing db_label.h... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing db_label.h... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-IG:\code_library\c\opencv\4.3\build-opencv+cuda\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - - - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing debugthread.h... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing debugthread.h... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing debugthread.h... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing debugthread.h... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-IG:\code_library\c\opencv\4.3\build-opencv+cuda\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - - - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing dialogin.hpp... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing dialogin.hpp... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing dialogin.hpp... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing dialogin.hpp... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-IG:\code_library\c\opencv\4.3\build-opencv+cuda\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - - - - - - - - - - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)OpenCV455Simple\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - - - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)OpenCV455Simple\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - - - - - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-IG:\code_library\c\opencv\4.3\build-opencv+cuda\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - - - - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing dialogsetuppasswd.hpp... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing dialogsetuppasswd.hpp... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing dialogsetuppasswd.hpp... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing dialogsetuppasswd.hpp... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-IG:\code_library\c\opencv\4.3\build-opencv+cuda\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - - - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing dialogsetup.hpp... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing dialogsetup.hpp... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-IG:\code_library\c\opencv\4.3\build-opencv-cpu\include" "-I$(ProjectDir)MvIMPACT" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing dialogsetup.hpp... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtNetwork" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing dialogsetup.hpp... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(ProjectDir)MvIMPACT" "-IG:\code_library\c\opencv\4.3\build-opencv+cuda\include" "-I$(ProjectDir)Common" "-I$(ProjectDir)Pylon6.2\include" "-I$(ProjectDir)modbus" "-I$(ProjectDir)MVS3.2.1\Include" "-I$(ProjectDir)PLC" "-I$(QTDIR)\include\QtNetwork" - - - - - - - - - %(FullPath);%(AdditionalInputs) - Rcc%27ing %(Identity)... - .\GeneratedFiles\qrc_%(Filename).cpp;%(Outputs) - "$(QTDIR)\bin\rcc.exe" -name "%(Filename)" -no-compress "%(FullPath)" -o .\GeneratedFiles\qrc_%(Filename).cpp - %(FullPath);%(AdditionalInputs) - Rcc%27ing %(Identity)... - .\GeneratedFiles\qrc_%(Filename).cpp;%(Outputs) - "$(QTDIR)\bin\rcc.exe" -name "%(Filename)" -no-compress "%(FullPath)" -o .\GeneratedFiles\qrc_%(Filename).cpp - %(FullPath);%(AdditionalInputs) - Rcc%27ing %(Identity)... - .\GeneratedFiles\qrc_%(Filename).cpp;%(Outputs) - "$(QTDIR)\bin\rcc.exe" -name "%(Filename)" -no-compress "%(FullPath)" -o .\GeneratedFiles\qrc_%(Filename).cpp - %(FullPath);%(AdditionalInputs) - Rcc%27ing %(Identity)... - .\GeneratedFiles\qrc_%(Filename).cpp;%(Outputs) - "$(QTDIR)\bin\rcc.exe" -name "%(Filename)" -no-compress "%(FullPath)" -o .\GeneratedFiles\qrc_%(Filename).cpp - - - - - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - - - - - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - - - - - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - - - - - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - - - - - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - - - - - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - - - - - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - - - - - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - - - - - - - - - - - \ No newline at end of file diff --git a/Cigarette/Cigarette.vcxproj.filters b/Cigarette/Cigarette.vcxproj.filters deleted file mode 100644 index 88e80561..00000000 --- a/Cigarette/Cigarette.vcxproj.filters +++ /dev/null @@ -1,403 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;cxx;c;def - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h - - - {99349809-55BA-4b9d-BF79-8FDBB0286EB3} - ui - - - {D9D6E242-F8AF-46E4-B9FD-80ECBC20BA3E} - qrc;* - false - - - {71ED8ED8-ACB9-4CE9-BBE1-E00B30144E11} - moc;h;cpp - False - - - {21a337b6-7c4c-4375-86e6-fb668dce746e} - cpp;moc - False - - - {65773ffc-5f94-4329-b62b-afc0b9e58efa} - cpp;moc - False - - - - - Source Files - - - Source Files - - - Generated Files\Debug - - - Generated Files\Release - - - Generated Files - - - Source Files - - - Generated Files\Debug - - - Generated Files\Release - - - Source Files - - - Generated Files\Debug - - - Generated Files\Release - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Generated Files\Debug - - - Generated Files\Release - - - Source Files - - - Generated Files\Debug - - - Generated Files\Release - - - Source Files - - - Source Files - - - Generated Files\Debug - - - Generated Files\Release - - - Source Files - - - Generated Files\Debug - - - Generated Files\Release - - - Source Files - - - Source Files - - - Source Files - - - Generated Files\Debug - - - Generated Files\Release - - - Source Files - - - Generated Files\Debug - - - Generated Files\Release - - - Source Files - - - Source Files - - - Generated Files\Debug - - - Generated Files\Release - - - Source Files - - - Generated Files\Debug - - - Generated Files\Release - - - Source Files - - - Generated Files\Debug - - - Generated Files\Release - - - Source Files - - - Generated Files\Debug - - - Generated Files\Release - - - Source Files - - - Source Files - - - Source Files - - - Generated Files\Debug - - - Generated Files\Release - - - Source Files - - - Generated Files\Debug - - - Generated Files\Release - - - Source Files - - - Generated Files\Debug - - - Generated Files\Release - - - Source Files - - - Generated Files\Debug - - - Generated Files\Release - - - Source Files - - - Generated Files\Debug - - - Generated Files\Release - - - Source Files - - - Source Files - - - Generated Files\Debug - - - Generated Files\Release - - - - - Header Files - - - Form Files - - - Resource Files - - - Header Files - - - Form Files - - - Header Files - - - Form Files - - - Header Files - - - Form Files - - - Header Files - - - Header Files - - - Header Files - - - Form Files - - - Header Files - - - Header Files - - - Form Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Form Files - - - Header Files - - - Form Files - - - Header Files - - - Form Files - - - Header Files - - - Header Files - - - Header Files - - - - - Generated Files - - - Generated Files - - - Generated Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Generated Files - - - Header Files - - - Generated Files - - - Header Files - - - Generated Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Generated Files - - - Generated Files - - - Generated Files - - - \ No newline at end of file diff --git a/Cigarette/Cigarette.vcxproj.user b/Cigarette/Cigarette.vcxproj.user deleted file mode 100644 index 18bfb800..00000000 --- a/Cigarette/Cigarette.vcxproj.user +++ /dev/null @@ -1,12 +0,0 @@ - - - - - C:\Qt\5.15.2\msvc2019_64 - PATH=$(QTDIR)\bin%3b$(PATH) - - - C:\Qt\5.15.2\msvc2019_64 - PATH=$(QTDIR)\bin%3b$(PATH) - - \ No newline at end of file diff --git a/Cigarette/Common/mv.ico b/Cigarette/Common/mv.ico deleted file mode 100644 index 906b2a16..00000000 Binary files a/Cigarette/Common/mv.ico and /dev/null differ diff --git a/Cigarette/CryptoToolLib.h b/Cigarette/CryptoToolLib.h deleted file mode 100644 index 264e51aa..00000000 --- a/Cigarette/CryptoToolLib.h +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once -#include "Windows.h" - -typedef enum _EncMethod { - none = 0, - addtime = 1 -}EncMethod; - -extern "C" bool GenerateDeviceID(void); -extern "C" bool GenerateLicenseData(EncMethod Method, char* suffix); -extern "C" bool VerifyLicense(EncMethod Method); \ No newline at end of file diff --git a/Cigarette/GeneratedFiles/Release/moc_cigarette.cpp b/Cigarette/GeneratedFiles/Release/moc_cigarette.cpp deleted file mode 100644 index 048755a2..00000000 --- a/Cigarette/GeneratedFiles/Release/moc_cigarette.cpp +++ /dev/null @@ -1,332 +0,0 @@ -/**************************************************************************** -** Meta object code from reading C++ file 'cigarette.h' -** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.15.2) -** -** WARNING! All changes made in this file will be lost! -*****************************************************************************/ - -#include -#include "../../cigarette.h" -#include -#include -#if !defined(Q_MOC_OUTPUT_REVISION) -#error "The header file 'cigarette.h' doesn't include ." -#elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.15.2. It" -#error "cannot be used with the include files from this version of Qt." -#error "(The moc has changed too much.)" -#endif - -QT_BEGIN_MOC_NAMESPACE -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED -struct qt_meta_stringdata_Cigarette_t { - QByteArrayData data[55]; - char stringdata0[817]; -}; -#define QT_MOC_LITERAL(idx, ofs, len) \ - Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ - qptrdiff(offsetof(qt_meta_stringdata_Cigarette_t, stringdata0) + ofs \ - - idx * sizeof(QByteArrayData)) \ - ) -static const qt_meta_stringdata_Cigarette_t qt_meta_stringdata_Cigarette = { - { -QT_MOC_LITERAL(0, 0, 9), // "Cigarette" -QT_MOC_LITERAL(1, 10, 13), // "sengMsgToClog" -QT_MOC_LITERAL(2, 24, 0), // "" -QT_MOC_LITERAL(3, 25, 21), // "on_btn_start_released" -QT_MOC_LITERAL(4, 47, 21), // "on_btn_pause_released" -QT_MOC_LITERAL(5, 69, 20), // "on_btn_lock_released" -QT_MOC_LITERAL(6, 90, 21), // "on_btn_setup_released" -QT_MOC_LITERAL(7, 112, 25), // "on_checkBox_debug_clicked" -QT_MOC_LITERAL(8, 138, 7), // "checked" -QT_MOC_LITERAL(9, 146, 26), // "on_checkBox_unkick_clicked" -QT_MOC_LITERAL(10, 173, 26), // "on_toolButton_plc_released" -QT_MOC_LITERAL(11, 200, 28), // "on_toolButton_alarm_released" -QT_MOC_LITERAL(12, 229, 28), // "on_pushButton_clear_released" -QT_MOC_LITERAL(13, 258, 32), // "on_pushButton_Clear_Pic_released" -QT_MOC_LITERAL(14, 291, 12), // "enable_shift" -QT_MOC_LITERAL(15, 304, 11), // "OnNotifyHub" -QT_MOC_LITERAL(16, 316, 3), // "Num" -QT_MOC_LITERAL(17, 320, 3), // "Cnt" -QT_MOC_LITERAL(18, 324, 7), // "cv::Mat" -QT_MOC_LITERAL(19, 332, 1), // "m" -QT_MOC_LITERAL(20, 334, 20), // "OnDisplayTimeCostHub" -QT_MOC_LITERAL(21, 355, 2), // "ms" -QT_MOC_LITERAL(22, 358, 23), // "OnDisplayCheckNumberHub" -QT_MOC_LITERAL(23, 382, 2), // "no" -QT_MOC_LITERAL(24, 385, 16), // "OnDisplayJdNoHub" -QT_MOC_LITERAL(25, 402, 5), // "jd_no" -QT_MOC_LITERAL(26, 408, 7), // "OnOKHub" -QT_MOC_LITERAL(27, 416, 7), // "OnNGHub" -QT_MOC_LITERAL(28, 424, 19), // "updateStatisticsHub" -QT_MOC_LITERAL(29, 444, 15), // "statisticalData" -QT_MOC_LITERAL(30, 460, 19), // "OnRotateReleasedHub" -QT_MOC_LITERAL(31, 480, 26), // "OnToolButtonCamReleasedHub" -QT_MOC_LITERAL(32, 507, 17), // "OpenCamTimeoutHub" -QT_MOC_LITERAL(33, 525, 12), // "OnDBClickHub" -QT_MOC_LITERAL(34, 538, 7), // "Num_Cnt" -QT_MOC_LITERAL(35, 546, 14), // "OnDBClickNGHub" -QT_MOC_LITERAL(36, 561, 15), // "ReconnectCamHub" -QT_MOC_LITERAL(37, 577, 13), // "handleTimeout" -QT_MOC_LITERAL(38, 591, 10), // "op_timeout" -QT_MOC_LITERAL(39, 602, 13), // "admin_timeout" -QT_MOC_LITERAL(40, 616, 17), // "FindFileForDelete" -QT_MOC_LITERAL(41, 634, 4), // "path" -QT_MOC_LITERAL(42, 639, 14), // "autoCleanImage" -QT_MOC_LITERAL(43, 654, 15), // "EnableDebugMode" -QT_MOC_LITERAL(44, 670, 16), // "DisableDebugMode" -QT_MOC_LITERAL(45, 687, 13), // "OnCancelAlarm" -QT_MOC_LITERAL(46, 701, 28), // "on_pushButton_reset_released" -QT_MOC_LITERAL(47, 730, 4), // "OnOp" -QT_MOC_LITERAL(48, 735, 6), // "OnExit" -QT_MOC_LITERAL(49, 742, 9), // "OnRestart" -QT_MOC_LITERAL(50, 752, 7), // "OnAdmin" -QT_MOC_LITERAL(51, 760, 16), // "CleanThreadStart" -QT_MOC_LITERAL(52, 777, 20), // "CleanThreadStartAuto" -QT_MOC_LITERAL(53, 798, 13), // "recMsgFromUdp" -QT_MOC_LITERAL(54, 812, 4) // "data" - - }, - "Cigarette\0sengMsgToClog\0\0on_btn_start_released\0" - "on_btn_pause_released\0on_btn_lock_released\0" - "on_btn_setup_released\0on_checkBox_debug_clicked\0" - "checked\0on_checkBox_unkick_clicked\0" - "on_toolButton_plc_released\0" - "on_toolButton_alarm_released\0" - "on_pushButton_clear_released\0" - "on_pushButton_Clear_Pic_released\0" - "enable_shift\0OnNotifyHub\0Num\0Cnt\0" - "cv::Mat\0m\0OnDisplayTimeCostHub\0ms\0" - "OnDisplayCheckNumberHub\0no\0OnDisplayJdNoHub\0" - "jd_no\0OnOKHub\0OnNGHub\0updateStatisticsHub\0" - "statisticalData\0OnRotateReleasedHub\0" - "OnToolButtonCamReleasedHub\0OpenCamTimeoutHub\0" - "OnDBClickHub\0Num_Cnt\0OnDBClickNGHub\0" - "ReconnectCamHub\0handleTimeout\0op_timeout\0" - "admin_timeout\0FindFileForDelete\0path\0" - "autoCleanImage\0EnableDebugMode\0" - "DisableDebugMode\0OnCancelAlarm\0" - "on_pushButton_reset_released\0OnOp\0" - "OnExit\0OnRestart\0OnAdmin\0CleanThreadStart\0" - "CleanThreadStartAuto\0recMsgFromUdp\0" - "data" -}; -#undef QT_MOC_LITERAL - -static const uint qt_meta_data_Cigarette[] = { - - // content: - 8, // revision - 0, // classname - 0, 0, // classinfo - 41, 14, // methods - 0, 0, // properties - 0, 0, // enums/sets - 0, 0, // constructors - 0, // flags - 1, // signalCount - - // signals: name, argc, parameters, tag, flags - 1, 1, 219, 2, 0x06 /* Public */, - - // slots: name, argc, parameters, tag, flags - 3, 0, 222, 2, 0x08 /* Private */, - 4, 0, 223, 2, 0x08 /* Private */, - 5, 0, 224, 2, 0x08 /* Private */, - 6, 0, 225, 2, 0x08 /* Private */, - 7, 1, 226, 2, 0x08 /* Private */, - 9, 1, 229, 2, 0x08 /* Private */, - 10, 0, 232, 2, 0x08 /* Private */, - 11, 0, 233, 2, 0x08 /* Private */, - 12, 0, 234, 2, 0x08 /* Private */, - 13, 0, 235, 2, 0x08 /* Private */, - 14, 0, 236, 2, 0x08 /* Private */, - 15, 3, 237, 2, 0x08 /* Private */, - 20, 2, 244, 2, 0x08 /* Private */, - 22, 2, 249, 2, 0x08 /* Private */, - 24, 2, 254, 2, 0x08 /* Private */, - 26, 1, 259, 2, 0x08 /* Private */, - 27, 1, 262, 2, 0x08 /* Private */, - 28, 2, 265, 2, 0x08 /* Private */, - 30, 1, 270, 2, 0x08 /* Private */, - 31, 1, 273, 2, 0x08 /* Private */, - 32, 1, 276, 2, 0x08 /* Private */, - 33, 1, 279, 2, 0x08 /* Private */, - 35, 1, 282, 2, 0x08 /* Private */, - 36, 1, 285, 2, 0x08 /* Private */, - 37, 0, 288, 2, 0x08 /* Private */, - 38, 0, 289, 2, 0x08 /* Private */, - 39, 0, 290, 2, 0x08 /* Private */, - 40, 1, 291, 2, 0x08 /* Private */, - 42, 0, 294, 2, 0x08 /* Private */, - 43, 0, 295, 2, 0x08 /* Private */, - 44, 0, 296, 2, 0x08 /* Private */, - 45, 0, 297, 2, 0x08 /* Private */, - 46, 0, 298, 2, 0x08 /* Private */, - 47, 0, 299, 2, 0x08 /* Private */, - 48, 0, 300, 2, 0x08 /* Private */, - 49, 0, 301, 2, 0x08 /* Private */, - 50, 0, 302, 2, 0x08 /* Private */, - 51, 0, 303, 2, 0x0a /* Public */, - 52, 0, 304, 2, 0x0a /* Public */, - 53, 1, 305, 2, 0x0a /* Public */, - - // signals: parameters - QMetaType::Void, QMetaType::QString, 2, - - // slots: parameters - QMetaType::Void, - QMetaType::Void, - QMetaType::Void, - QMetaType::Void, - QMetaType::Void, QMetaType::Bool, 8, - QMetaType::Void, QMetaType::Bool, 8, - QMetaType::Void, - QMetaType::Void, - QMetaType::Void, - QMetaType::Void, - QMetaType::Void, - QMetaType::Void, QMetaType::Int, QMetaType::Int, 0x80000000 | 18, 16, 17, 19, - QMetaType::Void, QMetaType::Int, QMetaType::Int, 16, 21, - QMetaType::Void, QMetaType::Int, QMetaType::Long, 16, 23, - QMetaType::Void, QMetaType::Int, QMetaType::QString, 16, 25, - QMetaType::Void, QMetaType::Int, 16, - QMetaType::Void, QMetaType::Int, 16, - QMetaType::Void, QMetaType::QString, QMetaType::Int, 29, 16, - QMetaType::Void, QMetaType::Int, 16, - QMetaType::Void, QMetaType::Int, 16, - QMetaType::Void, QMetaType::Int, 16, - QMetaType::Void, QMetaType::Int, 34, - QMetaType::Void, QMetaType::Int, 16, - QMetaType::Void, QMetaType::Int, 16, - QMetaType::Void, - QMetaType::Void, - QMetaType::Void, - QMetaType::Void, QMetaType::QString, 41, - QMetaType::Void, - QMetaType::Void, - QMetaType::Void, - QMetaType::Void, - QMetaType::Void, - QMetaType::Void, - QMetaType::Void, - QMetaType::Void, - QMetaType::Void, - QMetaType::Void, - QMetaType::Void, - QMetaType::Void, QMetaType::QString, 54, - - 0 // eod -}; - -void Cigarette::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) -{ - if (_c == QMetaObject::InvokeMetaMethod) { - auto *_t = static_cast(_o); - Q_UNUSED(_t) - switch (_id) { - case 0: _t->sengMsgToClog((*reinterpret_cast< QString(*)>(_a[1]))); break; - case 1: _t->on_btn_start_released(); break; - case 2: _t->on_btn_pause_released(); break; - case 3: _t->on_btn_lock_released(); break; - case 4: _t->on_btn_setup_released(); break; - case 5: _t->on_checkBox_debug_clicked((*reinterpret_cast< bool(*)>(_a[1]))); break; - case 6: _t->on_checkBox_unkick_clicked((*reinterpret_cast< bool(*)>(_a[1]))); break; - case 7: _t->on_toolButton_plc_released(); break; - case 8: _t->on_toolButton_alarm_released(); break; - case 9: _t->on_pushButton_clear_released(); break; - case 10: _t->on_pushButton_Clear_Pic_released(); break; - case 11: _t->enable_shift(); break; - case 12: _t->OnNotifyHub((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2])),(*reinterpret_cast< cv::Mat(*)>(_a[3]))); break; - case 13: _t->OnDisplayTimeCostHub((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2]))); break; - case 14: _t->OnDisplayCheckNumberHub((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< long(*)>(_a[2]))); break; - case 15: _t->OnDisplayJdNoHub((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< QString(*)>(_a[2]))); break; - case 16: _t->OnOKHub((*reinterpret_cast< int(*)>(_a[1]))); break; - case 17: _t->OnNGHub((*reinterpret_cast< int(*)>(_a[1]))); break; - case 18: _t->updateStatisticsHub((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2]))); break; - case 19: _t->OnRotateReleasedHub((*reinterpret_cast< int(*)>(_a[1]))); break; - case 20: _t->OnToolButtonCamReleasedHub((*reinterpret_cast< int(*)>(_a[1]))); break; - case 21: _t->OpenCamTimeoutHub((*reinterpret_cast< int(*)>(_a[1]))); break; - case 22: _t->OnDBClickHub((*reinterpret_cast< int(*)>(_a[1]))); break; - case 23: _t->OnDBClickNGHub((*reinterpret_cast< int(*)>(_a[1]))); break; - case 24: _t->ReconnectCamHub((*reinterpret_cast< int(*)>(_a[1]))); break; - case 25: _t->handleTimeout(); break; - case 26: _t->op_timeout(); break; - case 27: _t->admin_timeout(); break; - case 28: _t->FindFileForDelete((*reinterpret_cast< const QString(*)>(_a[1]))); break; - case 29: _t->autoCleanImage(); break; - case 30: _t->EnableDebugMode(); break; - case 31: _t->DisableDebugMode(); break; - case 32: _t->OnCancelAlarm(); break; - case 33: _t->on_pushButton_reset_released(); break; - case 34: _t->OnOp(); break; - case 35: _t->OnExit(); break; - case 36: _t->OnRestart(); break; - case 37: _t->OnAdmin(); break; - case 38: _t->CleanThreadStart(); break; - case 39: _t->CleanThreadStartAuto(); break; - case 40: _t->recMsgFromUdp((*reinterpret_cast< QString(*)>(_a[1]))); break; - default: ; - } - } else if (_c == QMetaObject::IndexOfMethod) { - int *result = reinterpret_cast(_a[0]); - { - using _t = void (Cigarette::*)(QString ); - if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&Cigarette::sengMsgToClog)) { - *result = 0; - return; - } - } - } -} - -QT_INIT_METAOBJECT const QMetaObject Cigarette::staticMetaObject = { { - QMetaObject::SuperData::link(), - qt_meta_stringdata_Cigarette.data, - qt_meta_data_Cigarette, - qt_static_metacall, - nullptr, - nullptr -} }; - - -const QMetaObject *Cigarette::metaObject() const -{ - return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; -} - -void *Cigarette::qt_metacast(const char *_clname) -{ - if (!_clname) return nullptr; - if (!strcmp(_clname, qt_meta_stringdata_Cigarette.stringdata0)) - return static_cast(this); - return QMainWindow::qt_metacast(_clname); -} - -int Cigarette::qt_metacall(QMetaObject::Call _c, int _id, void **_a) -{ - _id = QMainWindow::qt_metacall(_c, _id, _a); - if (_id < 0) - return _id; - if (_c == QMetaObject::InvokeMetaMethod) { - if (_id < 41) - qt_static_metacall(this, _c, _id, _a); - _id -= 41; - } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) { - if (_id < 41) - *reinterpret_cast(_a[0]) = -1; - _id -= 41; - } - return _id; -} - -// SIGNAL 0 -void Cigarette::sengMsgToClog(QString _t1) -{ - void *_a[] = { nullptr, const_cast(reinterpret_cast(std::addressof(_t1))) }; - QMetaObject::activate(this, &staticMetaObject, 0, _a); -} -QT_WARNING_POP -QT_END_MOC_NAMESPACE diff --git a/Cigarette/GeneratedFiles/Release/moc_db_label.cpp b/Cigarette/GeneratedFiles/Release/moc_db_label.cpp deleted file mode 100644 index 6a6bbd5e..00000000 --- a/Cigarette/GeneratedFiles/Release/moc_db_label.cpp +++ /dev/null @@ -1,160 +0,0 @@ -/**************************************************************************** -** Meta object code from reading C++ file 'db_label.h' -** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.15.2) -** -** WARNING! All changes made in this file will be lost! -*****************************************************************************/ - -#include -#include "../../db_label.h" -#include -#include -#if !defined(Q_MOC_OUTPUT_REVISION) -#error "The header file 'db_label.h' doesn't include ." -#elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.15.2. It" -#error "cannot be used with the include files from this version of Qt." -#error "(The moc has changed too much.)" -#endif - -QT_BEGIN_MOC_NAMESPACE -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED -struct qt_meta_stringdata_db_label_t { - QByteArrayData data[5]; - char stringdata0[52]; -}; -#define QT_MOC_LITERAL(idx, ofs, len) \ - Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ - qptrdiff(offsetof(qt_meta_stringdata_db_label_t, stringdata0) + ofs \ - - idx * sizeof(QByteArrayData)) \ - ) -static const qt_meta_stringdata_db_label_t qt_meta_stringdata_db_label = { - { -QT_MOC_LITERAL(0, 0, 8), // "db_label" -QT_MOC_LITERAL(1, 9, 17), // "QlabelDoubleClick" -QT_MOC_LITERAL(2, 27, 0), // "" -QT_MOC_LITERAL(3, 28, 11), // "QlabelClick" -QT_MOC_LITERAL(4, 40, 11) // "singleClick" - - }, - "db_label\0QlabelDoubleClick\0\0QlabelClick\0" - "singleClick" -}; -#undef QT_MOC_LITERAL - -static const uint qt_meta_data_db_label[] = { - - // content: - 8, // revision - 0, // classname - 0, 0, // classinfo - 3, 14, // methods - 0, 0, // properties - 0, 0, // enums/sets - 0, 0, // constructors - 0, // flags - 2, // signalCount - - // signals: name, argc, parameters, tag, flags - 1, 0, 29, 2, 0x06 /* Public */, - 3, 0, 30, 2, 0x06 /* Public */, - - // slots: name, argc, parameters, tag, flags - 4, 0, 31, 2, 0x08 /* Private */, - - // signals: parameters - QMetaType::Void, - QMetaType::Void, - - // slots: parameters - QMetaType::Void, - - 0 // eod -}; - -void db_label::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) -{ - if (_c == QMetaObject::InvokeMetaMethod) { - auto *_t = static_cast(_o); - Q_UNUSED(_t) - switch (_id) { - case 0: _t->QlabelDoubleClick(); break; - case 1: _t->QlabelClick(); break; - case 2: _t->singleClick(); break; - default: ; - } - } else if (_c == QMetaObject::IndexOfMethod) { - int *result = reinterpret_cast(_a[0]); - { - using _t = void (db_label::*)(); - if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&db_label::QlabelDoubleClick)) { - *result = 0; - return; - } - } - { - using _t = void (db_label::*)(); - if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&db_label::QlabelClick)) { - *result = 1; - return; - } - } - } - Q_UNUSED(_a); -} - -QT_INIT_METAOBJECT const QMetaObject db_label::staticMetaObject = { { - QMetaObject::SuperData::link(), - qt_meta_stringdata_db_label.data, - qt_meta_data_db_label, - qt_static_metacall, - nullptr, - nullptr -} }; - - -const QMetaObject *db_label::metaObject() const -{ - return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; -} - -void *db_label::qt_metacast(const char *_clname) -{ - if (!_clname) return nullptr; - if (!strcmp(_clname, qt_meta_stringdata_db_label.stringdata0)) - return static_cast(this); - return QLabel::qt_metacast(_clname); -} - -int db_label::qt_metacall(QMetaObject::Call _c, int _id, void **_a) -{ - _id = QLabel::qt_metacall(_c, _id, _a); - if (_id < 0) - return _id; - if (_c == QMetaObject::InvokeMetaMethod) { - if (_id < 3) - qt_static_metacall(this, _c, _id, _a); - _id -= 3; - } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) { - if (_id < 3) - *reinterpret_cast(_a[0]) = -1; - _id -= 3; - } - return _id; -} - -// SIGNAL 0 -void db_label::QlabelDoubleClick() -{ - QMetaObject::activate(this, &staticMetaObject, 0, nullptr); -} - -// SIGNAL 1 -void db_label::QlabelClick() -{ - QMetaObject::activate(this, &staticMetaObject, 1, nullptr); -} -QT_WARNING_POP -QT_END_MOC_NAMESPACE diff --git a/Cigarette/GeneratedFiles/ui_camera_glue.h b/Cigarette/GeneratedFiles/ui_camera_glue.h deleted file mode 100644 index 951b7fb1..00000000 --- a/Cigarette/GeneratedFiles/ui_camera_glue.h +++ /dev/null @@ -1,191 +0,0 @@ -/******************************************************************************** -** Form generated from reading UI file 'camera_glue.ui' -** -** Created by: Qt User Interface Compiler version 5.15.2 -** -** WARNING! All changes made in this file will be lost when recompiling UI file! -********************************************************************************/ - -#ifndef UI_CAMERA_GLUE_H -#define UI_CAMERA_GLUE_H - -#include -#include -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -class Ui_camera_glue -{ -public: - QSpinBox *spinBox_21; - QSpinBox *spinBox_31; - QSpinBox *spinBox_41; - QSpinBox *spinBox_32; - QSpinBox *spinBox_22; - QSpinBox *spinBox_42; - QSpinBox *spinBox_33; - QSpinBox *spinBox_23; - QSpinBox *spinBox_43; - QSpinBox *spinBox_12; - QSpinBox *spinBox_11; - QSpinBox *spinBox_13; - QLabel *label; - QLabel *label_2; - QLabel *label_3; - QLabel *label_5; - QLabel *label_6; - QLabel *label_7; - QLabel *label_8; - QLabel *label_4; - QPushButton *pushButton_take; - - void setupUi(QDialog *camera_glue) - { - if (camera_glue->objectName().isEmpty()) - camera_glue->setObjectName(QString::fromUtf8("camera_glue")); - camera_glue->resize(456, 256); - spinBox_21 = new QSpinBox(camera_glue); - spinBox_21->setObjectName(QString::fromUtf8("spinBox_21")); - spinBox_21->setGeometry(QRect(280, 50, 71, 31)); - QFont font; - font.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); - font.setPointSize(12); - font.setBold(true); - font.setWeight(75); - spinBox_21->setFont(font); - spinBox_21->setWrapping(true); - spinBox_21->setMaximum(10); - spinBox_31 = new QSpinBox(camera_glue); - spinBox_31->setObjectName(QString::fromUtf8("spinBox_31")); - spinBox_31->setGeometry(QRect(140, 720, 71, 31)); - spinBox_31->setFont(font); - spinBox_31->setWrapping(true); - spinBox_31->setMaximum(10); - spinBox_41 = new QSpinBox(camera_glue); - spinBox_41->setObjectName(QString::fromUtf8("spinBox_41")); - spinBox_41->setGeometry(QRect(240, 720, 71, 31)); - spinBox_41->setFont(font); - spinBox_41->setWrapping(true); - spinBox_41->setMaximum(10); - spinBox_32 = new QSpinBox(camera_glue); - spinBox_32->setObjectName(QString::fromUtf8("spinBox_32")); - spinBox_32->setGeometry(QRect(140, 770, 71, 31)); - spinBox_32->setFont(font); - spinBox_32->setWrapping(true); - spinBox_32->setMaximum(10); - spinBox_22 = new QSpinBox(camera_glue); - spinBox_22->setObjectName(QString::fromUtf8("spinBox_22")); - spinBox_22->setGeometry(QRect(280, 100, 71, 31)); - spinBox_22->setFont(font); - spinBox_22->setWrapping(true); - spinBox_22->setMaximum(10); - spinBox_42 = new QSpinBox(camera_glue); - spinBox_42->setObjectName(QString::fromUtf8("spinBox_42")); - spinBox_42->setGeometry(QRect(240, 770, 71, 31)); - spinBox_42->setFont(font); - spinBox_42->setWrapping(true); - spinBox_42->setMaximum(10); - spinBox_33 = new QSpinBox(camera_glue); - spinBox_33->setObjectName(QString::fromUtf8("spinBox_33")); - spinBox_33->setGeometry(QRect(140, 820, 71, 31)); - spinBox_33->setFont(font); - spinBox_33->setWrapping(true); - spinBox_33->setMaximum(10); - spinBox_23 = new QSpinBox(camera_glue); - spinBox_23->setObjectName(QString::fromUtf8("spinBox_23")); - spinBox_23->setGeometry(QRect(280, 639, 71, 31)); - spinBox_23->setFont(font); - spinBox_23->setWrapping(true); - spinBox_23->setMaximum(10); - spinBox_43 = new QSpinBox(camera_glue); - spinBox_43->setObjectName(QString::fromUtf8("spinBox_43")); - spinBox_43->setGeometry(QRect(240, 820, 71, 31)); - spinBox_43->setFont(font); - spinBox_43->setWrapping(true); - spinBox_43->setMaximum(10); - spinBox_12 = new QSpinBox(camera_glue); - spinBox_12->setObjectName(QString::fromUtf8("spinBox_12")); - spinBox_12->setGeometry(QRect(130, 100, 71, 31)); - spinBox_12->setFont(font); - spinBox_12->setWrapping(true); - spinBox_12->setMaximum(10); - spinBox_11 = new QSpinBox(camera_glue); - spinBox_11->setObjectName(QString::fromUtf8("spinBox_11")); - spinBox_11->setGeometry(QRect(130, 50, 71, 31)); - spinBox_11->setFont(font); - spinBox_11->setWrapping(true); - spinBox_11->setMaximum(10); - spinBox_13 = new QSpinBox(camera_glue); - spinBox_13->setObjectName(QString::fromUtf8("spinBox_13")); - spinBox_13->setGeometry(QRect(130, 639, 71, 31)); - spinBox_13->setFont(font); - spinBox_13->setWrapping(true); - spinBox_13->setMaximum(10); - label = new QLabel(camera_glue); - label->setObjectName(QString::fromUtf8("label")); - label->setGeometry(QRect(10, 53, 61, 21)); - label->setFont(font); - label_2 = new QLabel(camera_glue); - label_2->setObjectName(QString::fromUtf8("label_2")); - label_2->setGeometry(QRect(10, 101, 61, 21)); - label_2->setFont(font); - label_3 = new QLabel(camera_glue); - label_3->setObjectName(QString::fromUtf8("label_3")); - label_3->setGeometry(QRect(10, 640, 61, 21)); - label_3->setFont(font); - label_5 = new QLabel(camera_glue); - label_5->setObjectName(QString::fromUtf8("label_5")); - label_5->setGeometry(QRect(130, 20, 71, 21)); - label_5->setFont(font); - label_6 = new QLabel(camera_glue); - label_6->setObjectName(QString::fromUtf8("label_6")); - label_6->setGeometry(QRect(280, 20, 71, 21)); - label_6->setFont(font); - label_7 = new QLabel(camera_glue); - label_7->setObjectName(QString::fromUtf8("label_7")); - label_7->setGeometry(QRect(140, 690, 61, 21)); - label_7->setFont(font); - label_8 = new QLabel(camera_glue); - label_8->setObjectName(QString::fromUtf8("label_8")); - label_8->setGeometry(QRect(240, 690, 61, 21)); - label_8->setFont(font); - label_4 = new QLabel(camera_glue); - label_4->setObjectName(QString::fromUtf8("label_4")); - label_4->setGeometry(QRect(130, 160, 241, 21)); - pushButton_take = new QPushButton(camera_glue); - pushButton_take->setObjectName(QString::fromUtf8("pushButton_take")); - pushButton_take->setGeometry(QRect(170, 190, 111, 31)); - pushButton_take->setFont(font); - - retranslateUi(camera_glue); - - QMetaObject::connectSlotsByName(camera_glue); - } // setupUi - - void retranslateUi(QDialog *camera_glue) - { - camera_glue->setWindowTitle(QCoreApplication::translate("camera_glue", "\351\205\215\346\226\271\350\256\276\347\275\256", nullptr)); - label->setText(QCoreApplication::translate("camera_glue", "\347\254\254\344\270\200\345\274\240", nullptr)); - label_2->setText(QCoreApplication::translate("camera_glue", "\347\254\254\344\272\214\345\274\240", nullptr)); - label_3->setText(QCoreApplication::translate("camera_glue", "\347\254\254\344\270\211\345\274\240", nullptr)); - label_5->setText(QCoreApplication::translate("camera_glue", "1\345\217\267\347\233\270\346\234\272", nullptr)); - label_6->setText(QCoreApplication::translate("camera_glue", "2\345\217\267\347\233\270\346\234\272", nullptr)); - label_7->setText(QCoreApplication::translate("camera_glue", "3\345\217\267\347\233\270\346\234\272", nullptr)); - label_8->setText(QCoreApplication::translate("camera_glue", "4\345\217\267\347\233\270\346\234\272", nullptr)); - label_4->setText(QCoreApplication::translate("camera_glue", "\350\213\245\350\246\201\344\277\235\345\255\230\345\217\202\346\225\260\350\257\267\350\277\224\345\233\236\344\270\212\344\270\200\347\272\247\347\202\271\345\207\273\344\277\235\345\255\230", nullptr)); - pushButton_take->setText(QCoreApplication::translate("camera_glue", "\345\272\224\347\224\250", nullptr)); - } // retranslateUi - -}; - -namespace Ui { - class camera_glue: public Ui_camera_glue {}; -} // namespace Ui - -QT_END_NAMESPACE - -#endif // UI_CAMERA_GLUE_H diff --git a/Cigarette/GeneratedFiles/ui_cigarette.h b/Cigarette/GeneratedFiles/ui_cigarette.h deleted file mode 100644 index b220df0e..00000000 --- a/Cigarette/GeneratedFiles/ui_cigarette.h +++ /dev/null @@ -1,1056 +0,0 @@ -/******************************************************************************** -** Form generated from reading UI file 'cigarette.ui' -** -** Created by: Qt User Interface Compiler version 5.15.2 -** -** WARNING! All changes made in this file will be lost when recompiling UI file! -********************************************************************************/ - -#ifndef UI_CIGARETTE_H -#define UI_CIGARETTE_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "db_label.h" - -QT_BEGIN_NAMESPACE - -class Ui_CigaretteClass -{ -public: - QWidget *centralWidget; - QLabel *label_title; - QGroupBox *groupBox_op; - QToolButton *btn_start; - QToolButton *btn_pause; - QToolButton *btn_lock; - QToolButton *btn_setup; - QGroupBox *groupBox_dev; - QLabel *cam_status_1; - QToolButton *toolButton_cam_1; - QToolButton *toolButton_cam_2; - QLabel *cam_status_2; - QLabel *cam_work_2; - QLabel *cam_work_1; - QCheckBox *checkBox_debug; - QCheckBox *checkBox_unkick; - QLabel *cam_work_3; - QLabel *cam_status_4; - QToolButton *toolButton_cam_3; - QLabel *cam_work_4; - QToolButton *toolButton_cam_4; - QLabel *cam_status_3; - QPushButton *pushButton_Clear_Pic; - QGroupBox *groupBox_status; - db_label *label_alarm; - QLabel *label_5; - QLabel *label_plc; - QLCDNumber *lcdNumber_total_no; - QToolButton *toolButton_alarm; - QToolButton *toolButton_plc; - QPushButton *pushButton_clear; - QLabel *label_run_stat; - QLabel *label_12; - QLabel *label_role; - QLabel *label_8; - QLCDNumber *lcdNumber_total_no_last; - QPushButton *pushButton_reset; - QLabel *label_11; - db_label *label_ng_2; - QLCDNumber *lcdNumber_ok_2; - QLCDNumber *lcdNumber_kick_2; - QLabel *label_6; - QLabel *label_10; - db_label *image_label_21; - QLCDNumber *lcdNumber_total_2; - QToolButton *rotate_2; - db_label *image_label_11; - QLCDNumber *lcdNumber_ng_2; - QLCDNumber *lcdNumber_total_3; - QLabel *label_14; - db_label *image_label_31; - QLabel *label_3; - db_label *image_label_41; - QLabel *label_9; - QLCDNumber *lcdNumber_kick_4; - db_label *label_ng_4; - QLabel *label_13; - QLCDNumber *lcdNumber_kick_3; - QToolButton *rotate_3; - QLCDNumber *lcdNumber_ok_3; - QToolButton *rotate_4; - QLCDNumber *lcdNumber_ng_3; - db_label *label_ng_3; - QLCDNumber *lcdNumber_ng_4; - QLabel *label_15; - QLCDNumber *lcdNumber_total_4; - QLCDNumber *lcdNumber_ok_4; - QLabel *label_7; - QGroupBox *groupBox_13; - QLabel *label_40; - QLabel *label_cap_speed_4; - QLabel *label_reslut_4; - QLabel *label_27; - QLabel *label_28; - QLabel *label_timecost_4; - QLabel *label_jd_no_4; - QGroupBox *groupBox_11; - QLabel *label_26; - QLabel *label_cap_speed_3; - QLabel *label_jd_no_3; - QLabel *label_23; - QLabel *label_22; - QLabel *label_timecost_3; - QLabel *label_reslut_3; - QGroupBox *groupBox_a; - QLabel *label_19; - QLabel *label_cap_speed_1; - QLabel *label_jd_no_1; - QLabel *label_20; - QLabel *label_21; - QLabel *label_timecost_1; - QLabel *label_reslut_1; - QGroupBox *groupBox_b; - QLabel *label_33; - QLabel *label_cap_speed_2; - QLabel *label_jd_no_2; - QLabel *label_reslut_2; - QLabel *label_24; - QLabel *label_25; - QLabel *label_timecost_2; - QLCDNumber *lcdNumber_ok_1; - QLabel *label; - QLabel *label_2; - QLCDNumber *lcdNumber_total_1; - QLCDNumber *lcdNumber_ng_1; - db_label *label_ng_1; - QLabel *label_4; - QLCDNumber *lcdNumber_kick_1; - QToolButton *rotate_1; - QLabel *label_title_7; - QLabel *label_title_6; - QToolButton *toolButton_4; - QLabel *label_17; - QLabel *label_18; - QLabel *label_cur_time; - db_label *image_label_12; - db_label *image_label_22; - db_label *image_label_32; - db_label *image_label_42; - QLabel *label_title_2; - - void setupUi(QMainWindow *CigaretteClass) - { - if (CigaretteClass->objectName().isEmpty()) - CigaretteClass->setObjectName(QString::fromUtf8("CigaretteClass")); - CigaretteClass->resize(1600, 900); - CigaretteClass->setStyleSheet(QString::fromUtf8("background-color: rgb(55, 55, 55);")); - centralWidget = new QWidget(CigaretteClass); - centralWidget->setObjectName(QString::fromUtf8("centralWidget")); - label_title = new QLabel(centralWidget); - label_title->setObjectName(QString::fromUtf8("label_title")); - label_title->setGeometry(QRect(570, 10, 501, 51)); - QFont font; - font.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); - font.setPointSize(30); - label_title->setFont(font); - label_title->setStyleSheet(QString::fromUtf8("background-color: rgb(255, 255, 0);")); - label_title->setAlignment(Qt::AlignCenter); - groupBox_op = new QGroupBox(centralWidget); - groupBox_op->setObjectName(QString::fromUtf8("groupBox_op")); - groupBox_op->setGeometry(QRect(10, 80, 171, 221)); - QFont font1; - font1.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); - font1.setPointSize(14); - font1.setBold(true); - font1.setWeight(75); - groupBox_op->setFont(font1); - groupBox_op->setStyleSheet(QString::fromUtf8("color:white")); - btn_start = new QToolButton(groupBox_op); - btn_start->setObjectName(QString::fromUtf8("btn_start")); - btn_start->setGeometry(QRect(10, 24, 72, 96)); - btn_start->setStyleSheet(QString::fromUtf8("border-image: url(:/Cigarette/Resources/start.png);")); - btn_start->setAutoRaise(false); - btn_pause = new QToolButton(groupBox_op); - btn_pause->setObjectName(QString::fromUtf8("btn_pause")); - btn_pause->setGeometry(QRect(95, 24, 72, 96)); - btn_pause->setStyleSheet(QString::fromUtf8("border-image: url(:/Cigarette/Resources/pause.png);\n" -"")); - btn_pause->setAutoRaise(false); - btn_lock = new QToolButton(groupBox_op); - btn_lock->setObjectName(QString::fromUtf8("btn_lock")); - btn_lock->setGeometry(QRect(10, 120, 72, 96)); - btn_lock->setStyleSheet(QString::fromUtf8("border-image: url(:/Cigarette/Resources/unlock.png);")); - btn_lock->setAutoRaise(false); - btn_setup = new QToolButton(groupBox_op); - btn_setup->setObjectName(QString::fromUtf8("btn_setup")); - btn_setup->setGeometry(QRect(90, 120, 72, 96)); - btn_setup->setStyleSheet(QString::fromUtf8("border-image: url(:/Cigarette/Resources/setup.png);\n" -"")); - btn_setup->setAutoRaise(false); - groupBox_dev = new QGroupBox(centralWidget); - groupBox_dev->setObjectName(QString::fromUtf8("groupBox_dev")); - groupBox_dev->setGeometry(QRect(10, 310, 171, 501)); - groupBox_dev->setFont(font1); - groupBox_dev->setStyleSheet(QString::fromUtf8("color:white")); - cam_status_1 = new QLabel(groupBox_dev); - cam_status_1->setObjectName(QString::fromUtf8("cam_status_1")); - cam_status_1->setGeometry(QRect(10, 130, 71, 31)); - QFont font2; - font2.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); - font2.setPointSize(18); - font2.setBold(true); - font2.setWeight(75); - cam_status_1->setFont(font2); - cam_status_1->setStyleSheet(QString::fromUtf8("background-color: rgb(255, 255, 0);")); - cam_status_1->setAlignment(Qt::AlignCenter); - toolButton_cam_1 = new QToolButton(groupBox_dev); - toolButton_cam_1->setObjectName(QString::fromUtf8("toolButton_cam_1")); - toolButton_cam_1->setGeometry(QRect(10, 40, 71, 71)); - toolButton_cam_1->setStyleSheet(QString::fromUtf8("border-image: url(:/Cigarette/Resources/cam1_no.png);")); - toolButton_cam_2 = new QToolButton(groupBox_dev); - toolButton_cam_2->setObjectName(QString::fromUtf8("toolButton_cam_2")); - toolButton_cam_2->setGeometry(QRect(95, 40, 71, 71)); - toolButton_cam_2->setStyleSheet(QString::fromUtf8("border-image: url(:/Cigarette/Resources/cam2_no.png);")); - cam_status_2 = new QLabel(groupBox_dev); - cam_status_2->setObjectName(QString::fromUtf8("cam_status_2")); - cam_status_2->setGeometry(QRect(95, 130, 71, 31)); - cam_status_2->setFont(font2); - cam_status_2->setStyleSheet(QString::fromUtf8("background-color: rgb(255, 255, 0);")); - cam_status_2->setAlignment(Qt::AlignCenter); - cam_work_2 = new QLabel(groupBox_dev); - cam_work_2->setObjectName(QString::fromUtf8("cam_work_2")); - cam_work_2->setGeometry(QRect(95, 180, 71, 31)); - cam_work_2->setFont(font2); - cam_work_2->setStyleSheet(QString::fromUtf8("background-color: rgb(255, 255, 0);")); - cam_work_2->setAlignment(Qt::AlignCenter); - cam_work_1 = new QLabel(groupBox_dev); - cam_work_1->setObjectName(QString::fromUtf8("cam_work_1")); - cam_work_1->setGeometry(QRect(10, 180, 71, 31)); - cam_work_1->setFont(font2); - cam_work_1->setStyleSheet(QString::fromUtf8("background-color: rgb(255, 255, 0);")); - cam_work_1->setAlignment(Qt::AlignCenter); - checkBox_debug = new QCheckBox(groupBox_dev); - checkBox_debug->setObjectName(QString::fromUtf8("checkBox_debug")); - checkBox_debug->setGeometry(QRect(10, 390, 101, 21)); - QFont font3; - font3.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); - font3.setPointSize(12); - font3.setBold(true); - font3.setWeight(75); - checkBox_debug->setFont(font3); - checkBox_debug->setStyleSheet(QString::fromUtf8("color:white")); - checkBox_unkick = new QCheckBox(groupBox_dev); - checkBox_unkick->setObjectName(QString::fromUtf8("checkBox_unkick")); - checkBox_unkick->setGeometry(QRect(10, 420, 81, 21)); - checkBox_unkick->setFont(font3); - checkBox_unkick->setStyleSheet(QString::fromUtf8("color:white")); - cam_work_3 = new QLabel(groupBox_dev); - cam_work_3->setObjectName(QString::fromUtf8("cam_work_3")); - cam_work_3->setGeometry(QRect(10, 740, 71, 31)); - cam_work_3->setFont(font2); - cam_work_3->setStyleSheet(QString::fromUtf8("background-color: rgb(255, 255, 0);")); - cam_work_3->setAlignment(Qt::AlignCenter); - cam_status_4 = new QLabel(groupBox_dev); - cam_status_4->setObjectName(QString::fromUtf8("cam_status_4")); - cam_status_4->setGeometry(QRect(90, 1155, 71, 31)); - cam_status_4->setFont(font2); - cam_status_4->setStyleSheet(QString::fromUtf8("background-color: rgb(255, 255, 0);")); - cam_status_4->setAlignment(Qt::AlignCenter); - toolButton_cam_3 = new QToolButton(groupBox_dev); - toolButton_cam_3->setObjectName(QString::fromUtf8("toolButton_cam_3")); - toolButton_cam_3->setGeometry(QRect(10, 615, 72, 72)); - toolButton_cam_3->setStyleSheet(QString::fromUtf8("border-image: url(:/Cigarette/Resources/cam3_no.png);")); - cam_work_4 = new QLabel(groupBox_dev); - cam_work_4->setObjectName(QString::fromUtf8("cam_work_4")); - cam_work_4->setGeometry(QRect(90, 1190, 71, 31)); - cam_work_4->setFont(font2); - cam_work_4->setStyleSheet(QString::fromUtf8("background-color: rgb(255, 255, 0);")); - cam_work_4->setAlignment(Qt::AlignCenter); - toolButton_cam_4 = new QToolButton(groupBox_dev); - toolButton_cam_4->setObjectName(QString::fromUtf8("toolButton_cam_4")); - toolButton_cam_4->setGeometry(QRect(90, 1065, 72, 72)); - toolButton_cam_4->setStyleSheet(QString::fromUtf8("border-image: url(:/Cigarette/Resources/cam4_no.png);")); - cam_status_3 = new QLabel(groupBox_dev); - cam_status_3->setObjectName(QString::fromUtf8("cam_status_3")); - cam_status_3->setGeometry(QRect(10, 705, 71, 31)); - cam_status_3->setFont(font2); - cam_status_3->setStyleSheet(QString::fromUtf8("background-color: rgb(255, 255, 0);")); - cam_status_3->setAlignment(Qt::AlignCenter); - pushButton_Clear_Pic = new QPushButton(groupBox_dev); - pushButton_Clear_Pic->setObjectName(QString::fromUtf8("pushButton_Clear_Pic")); - pushButton_Clear_Pic->setGeometry(QRect(10, 445, 101, 51)); - QPalette palette; - QBrush brush(QColor(255, 255, 255, 255)); - brush.setStyle(Qt::SolidPattern); - palette.setBrush(QPalette::Active, QPalette::WindowText, brush); - QBrush brush1(QColor(55, 55, 55, 255)); - brush1.setStyle(Qt::SolidPattern); - palette.setBrush(QPalette::Active, QPalette::Button, brush1); - palette.setBrush(QPalette::Active, QPalette::Text, brush); - palette.setBrush(QPalette::Active, QPalette::ButtonText, brush); - palette.setBrush(QPalette::Active, QPalette::Base, brush1); - palette.setBrush(QPalette::Active, QPalette::Window, brush1); - QBrush brush2(QColor(255, 255, 255, 128)); - brush2.setStyle(Qt::SolidPattern); -#if QT_VERSION >= QT_VERSION_CHECK(5, 12, 0) - palette.setBrush(QPalette::Active, QPalette::PlaceholderText, brush2); -#endif - palette.setBrush(QPalette::Inactive, QPalette::WindowText, brush); - palette.setBrush(QPalette::Inactive, QPalette::Button, brush1); - palette.setBrush(QPalette::Inactive, QPalette::Text, brush); - palette.setBrush(QPalette::Inactive, QPalette::ButtonText, brush); - palette.setBrush(QPalette::Inactive, QPalette::Base, brush1); - palette.setBrush(QPalette::Inactive, QPalette::Window, brush1); -#if QT_VERSION >= QT_VERSION_CHECK(5, 12, 0) - palette.setBrush(QPalette::Inactive, QPalette::PlaceholderText, brush2); -#endif - palette.setBrush(QPalette::Disabled, QPalette::WindowText, brush); - palette.setBrush(QPalette::Disabled, QPalette::Button, brush1); - palette.setBrush(QPalette::Disabled, QPalette::Text, brush); - palette.setBrush(QPalette::Disabled, QPalette::ButtonText, brush); - palette.setBrush(QPalette::Disabled, QPalette::Base, brush1); - palette.setBrush(QPalette::Disabled, QPalette::Window, brush1); - QBrush brush3(QColor(0, 0, 0, 128)); - brush3.setStyle(Qt::SolidPattern); -#if QT_VERSION >= QT_VERSION_CHECK(5, 12, 0) - palette.setBrush(QPalette::Disabled, QPalette::PlaceholderText, brush3); -#endif - pushButton_Clear_Pic->setPalette(palette); - QFont font4; - font4.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); - font4.setPointSize(16); - pushButton_Clear_Pic->setFont(font4); - groupBox_status = new QGroupBox(centralWidget); - groupBox_status->setObjectName(QString::fromUtf8("groupBox_status")); - groupBox_status->setGeometry(QRect(10, 822, 1581, 71)); - groupBox_status->setFont(font3); - label_alarm = new db_label(groupBox_status); - label_alarm->setObjectName(QString::fromUtf8("label_alarm")); - label_alarm->setGeometry(QRect(1200, 10, 111, 51)); - QFont font5; - font5.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); - font5.setPointSize(16); - font5.setBold(false); - font5.setWeight(50); - label_alarm->setFont(font5); - label_alarm->setStyleSheet(QString::fromUtf8("color:white")); - label_alarm->setAlignment(Qt::AlignCenter); - label_5 = new QLabel(groupBox_status); - label_5->setObjectName(QString::fromUtf8("label_5")); - label_5->setGeometry(QRect(480, 10, 61, 51)); - QFont font6; - font6.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); - font6.setPointSize(16); - font6.setBold(true); - font6.setWeight(75); - label_5->setFont(font6); - label_5->setStyleSheet(QString::fromUtf8("color:white")); - label_plc = new QLabel(groupBox_status); - label_plc->setObjectName(QString::fromUtf8("label_plc")); - label_plc->setGeometry(QRect(930, 10, 101, 51)); - label_plc->setFont(font5); - label_plc->setStyleSheet(QString::fromUtf8("color:white")); - label_plc->setAlignment(Qt::AlignCenter); - lcdNumber_total_no = new QLCDNumber(groupBox_status); - lcdNumber_total_no->setObjectName(QString::fromUtf8("lcdNumber_total_no")); - lcdNumber_total_no->setGeometry(QRect(550, 10, 191, 51)); - lcdNumber_total_no->setStyleSheet(QString::fromUtf8("color:white")); - lcdNumber_total_no->setDigitCount(8); - toolButton_alarm = new QToolButton(groupBox_status); - toolButton_alarm->setObjectName(QString::fromUtf8("toolButton_alarm")); - toolButton_alarm->setGeometry(QRect(1135, 10, 51, 51)); - toolButton_alarm->setStyleSheet(QString::fromUtf8("border-image: url(:/Cigarette/Resources/alarm.png);")); - toolButton_plc = new QToolButton(groupBox_status); - toolButton_plc->setObjectName(QString::fromUtf8("toolButton_plc")); - toolButton_plc->setGeometry(QRect(840, 10, 81, 51)); - toolButton_plc->setStyleSheet(QString::fromUtf8("border-image: url(:/Cigarette/Resources/plc.png);")); - pushButton_clear = new QPushButton(groupBox_status); - pushButton_clear->setObjectName(QString::fromUtf8("pushButton_clear")); - pushButton_clear->setGeometry(QRect(750, 10, 71, 51)); - pushButton_clear->setFont(font4); - pushButton_clear->setStyleSheet(QString::fromUtf8("color:white")); - label_run_stat = new QLabel(groupBox_status); - label_run_stat->setObjectName(QString::fromUtf8("label_run_stat")); - label_run_stat->setGeometry(QRect(1320, 15, 251, 40)); - label_run_stat->setFont(font4); - label_run_stat->setStyleSheet(QString::fromUtf8("color:white")); - label_run_stat->setAlignment(Qt::AlignCenter); - label_12 = new QLabel(groupBox_status); - label_12->setObjectName(QString::fromUtf8("label_12")); - label_12->setGeometry(QRect(10, 10, 101, 51)); - label_12->setFont(font6); - label_12->setStyleSheet(QString::fromUtf8("color:white")); - label_12->setAlignment(Qt::AlignCenter); - label_role = new QLabel(groupBox_status); - label_role->setObjectName(QString::fromUtf8("label_role")); - label_role->setGeometry(QRect(120, 10, 91, 51)); - label_role->setFont(font5); - label_role->setStyleSheet(QString::fromUtf8("color:white")); - label_8 = new QLabel(groupBox_status); - label_8->setObjectName(QString::fromUtf8("label_8")); - label_8->setGeometry(QRect(230, 10, 61, 51)); - label_8->setFont(font6); - label_8->setStyleSheet(QString::fromUtf8("color:white")); - lcdNumber_total_no_last = new QLCDNumber(groupBox_status); - lcdNumber_total_no_last->setObjectName(QString::fromUtf8("lcdNumber_total_no_last")); - lcdNumber_total_no_last->setGeometry(QRect(290, 10, 191, 51)); - lcdNumber_total_no_last->setStyleSheet(QString::fromUtf8("color:white")); - lcdNumber_total_no_last->setDigitCount(8); - pushButton_reset = new QPushButton(groupBox_status); - pushButton_reset->setObjectName(QString::fromUtf8("pushButton_reset")); - pushButton_reset->setGeometry(QRect(1050, 10, 71, 51)); - pushButton_reset->setFont(font4); - pushButton_reset->setStyleSheet(QString::fromUtf8("color:white")); - label_11 = new QLabel(centralWidget); - label_11->setObjectName(QString::fromUtf8("label_11")); - label_11->setGeometry(QRect(910, 710, 91, 31)); - label_11->setFont(font3); - label_11->setStyleSheet(QString::fromUtf8("color:white")); - label_ng_2 = new db_label(centralWidget); - label_ng_2->setObjectName(QString::fromUtf8("label_ng_2")); - label_ng_2->setGeometry(QRect(1250, 710, 101, 31)); - label_ng_2->setFont(font3); - label_ng_2->setStyleSheet(QString::fromUtf8("color:white")); - lcdNumber_ok_2 = new QLCDNumber(centralWidget); - lcdNumber_ok_2->setObjectName(QString::fromUtf8("lcdNumber_ok_2")); - lcdNumber_ok_2->setGeometry(QRect(1380, 660, 201, 41)); - lcdNumber_ok_2->setStyleSheet(QString::fromUtf8("color:white")); - lcdNumber_ok_2->setDigitCount(10); - lcdNumber_kick_2 = new QLCDNumber(centralWidget); - lcdNumber_kick_2->setObjectName(QString::fromUtf8("lcdNumber_kick_2")); - lcdNumber_kick_2->setGeometry(QRect(1030, 710, 201, 41)); - lcdNumber_kick_2->setStyleSheet(QString::fromUtf8("color:white")); - lcdNumber_kick_2->setDigitCount(10); - label_6 = new QLabel(centralWidget); - label_6->setObjectName(QString::fromUtf8("label_6")); - label_6->setGeometry(QRect(910, 660, 91, 31)); - label_6->setFont(font3); - label_6->setStyleSheet(QString::fromUtf8("color:white")); - label_10 = new QLabel(centralWidget); - label_10->setObjectName(QString::fromUtf8("label_10")); - label_10->setGeometry(QRect(1250, 660, 101, 31)); - label_10->setFont(font3); - label_10->setStyleSheet(QString::fromUtf8("color:white")); - image_label_21 = new db_label(centralWidget); - image_label_21->setObjectName(QString::fromUtf8("image_label_21")); - image_label_21->setGeometry(QRect(890, 90, 691, 551)); - image_label_21->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 0, 0);")); - lcdNumber_total_2 = new QLCDNumber(centralWidget); - lcdNumber_total_2->setObjectName(QString::fromUtf8("lcdNumber_total_2")); - lcdNumber_total_2->setGeometry(QRect(1030, 655, 201, 41)); - lcdNumber_total_2->setStyleSheet(QString::fromUtf8("color:white")); - lcdNumber_total_2->setDigitCount(10); - rotate_2 = new QToolButton(centralWidget); - rotate_2->setObjectName(QString::fromUtf8("rotate_2")); - rotate_2->setGeometry(QRect(1230, 100, 20, 20)); - rotate_2->setStyleSheet(QString::fromUtf8("border-image: url(:/Cigarette/Resources/rotate.png)")); - QIcon icon; - icon.addFile(QString::fromUtf8("Resources/rotate.png"), QSize(), QIcon::Normal, QIcon::Off); - rotate_2->setIcon(icon); - rotate_2->setIconSize(QSize(40, 40)); - image_label_11 = new db_label(centralWidget); - image_label_11->setObjectName(QString::fromUtf8("image_label_11")); - image_label_11->setGeometry(QRect(190, 90, 691, 551)); - image_label_11->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 0, 0);")); - lcdNumber_ng_2 = new QLCDNumber(centralWidget); - lcdNumber_ng_2->setObjectName(QString::fromUtf8("lcdNumber_ng_2")); - lcdNumber_ng_2->setGeometry(QRect(1380, 710, 201, 41)); - lcdNumber_ng_2->setStyleSheet(QString::fromUtf8("color:white")); - lcdNumber_ng_2->setDigitCount(10); - lcdNumber_total_3 = new QLCDNumber(centralWidget); - lcdNumber_total_3->setObjectName(QString::fromUtf8("lcdNumber_total_3")); - lcdNumber_total_3->setGeometry(QRect(600, 1300, 131, 41)); - lcdNumber_total_3->setStyleSheet(QString::fromUtf8("color:white")); - lcdNumber_total_3->setDigitCount(10); - label_14 = new QLabel(centralWidget); - label_14->setObjectName(QString::fromUtf8("label_14")); - label_14->setGeometry(QRect(1060, 1350, 71, 31)); - QFont font7; - font7.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); - font7.setPointSize(10); - font7.setBold(true); - font7.setWeight(75); - label_14->setFont(font7); - label_14->setStyleSheet(QString::fromUtf8("color:white")); - image_label_31 = new db_label(centralWidget); - image_label_31->setObjectName(QString::fromUtf8("image_label_31")); - image_label_31->setGeometry(QRect(190, 1290, 321, 261)); - image_label_31->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 0, 0);")); - label_3 = new QLabel(centralWidget); - label_3->setObjectName(QString::fromUtf8("label_3")); - label_3->setGeometry(QRect(520, 1350, 71, 31)); - label_3->setFont(font7); - label_3->setStyleSheet(QString::fromUtf8("color:white")); - image_label_41 = new db_label(centralWidget); - image_label_41->setObjectName(QString::fromUtf8("image_label_41")); - image_label_41->setGeometry(QRect(732, 1290, 321, 261)); - image_label_41->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 0, 0);")); - label_9 = new QLabel(centralWidget); - label_9->setObjectName(QString::fromUtf8("label_9")); - label_9->setGeometry(QRect(520, 1450, 71, 31)); - label_9->setFont(font7); - label_9->setStyleSheet(QString::fromUtf8("color:white")); - lcdNumber_kick_4 = new QLCDNumber(centralWidget); - lcdNumber_kick_4->setObjectName(QString::fromUtf8("lcdNumber_kick_4")); - lcdNumber_kick_4->setGeometry(QRect(1140, 1450, 131, 41)); - lcdNumber_kick_4->setStyleSheet(QString::fromUtf8("color:white")); - lcdNumber_kick_4->setDigitCount(10); - label_ng_4 = new db_label(centralWidget); - label_ng_4->setObjectName(QString::fromUtf8("label_ng_4")); - label_ng_4->setGeometry(QRect(1060, 1400, 71, 31)); - label_ng_4->setFont(font7); - label_ng_4->setStyleSheet(QString::fromUtf8("color:white")); - label_13 = new QLabel(centralWidget); - label_13->setObjectName(QString::fromUtf8("label_13")); - label_13->setGeometry(QRect(1060, 1450, 71, 31)); - label_13->setFont(font7); - label_13->setStyleSheet(QString::fromUtf8("color:white")); - lcdNumber_kick_3 = new QLCDNumber(centralWidget); - lcdNumber_kick_3->setObjectName(QString::fromUtf8("lcdNumber_kick_3")); - lcdNumber_kick_3->setGeometry(QRect(600, 1450, 131, 41)); - lcdNumber_kick_3->setStyleSheet(QString::fromUtf8("color:white")); - lcdNumber_kick_3->setDigitCount(10); - rotate_3 = new QToolButton(centralWidget); - rotate_3->setObjectName(QString::fromUtf8("rotate_3")); - rotate_3->setGeometry(QRect(490, 1300, 20, 20)); - rotate_3->setFocusPolicy(Qt::ClickFocus); - rotate_3->setAutoFillBackground(false); - rotate_3->setStyleSheet(QString::fromUtf8("border-image: url(:/Cigarette/Resources/rotate.png)")); - rotate_3->setIcon(icon); - rotate_3->setIconSize(QSize(40, 40)); - lcdNumber_ok_3 = new QLCDNumber(centralWidget); - lcdNumber_ok_3->setObjectName(QString::fromUtf8("lcdNumber_ok_3")); - lcdNumber_ok_3->setGeometry(QRect(600, 1350, 131, 41)); - lcdNumber_ok_3->setStyleSheet(QString::fromUtf8("color:white")); - lcdNumber_ok_3->setDigitCount(10); - rotate_4 = new QToolButton(centralWidget); - rotate_4->setObjectName(QString::fromUtf8("rotate_4")); - rotate_4->setGeometry(QRect(1030, 1300, 20, 20)); - rotate_4->setFocusPolicy(Qt::ClickFocus); - rotate_4->setAutoFillBackground(false); - rotate_4->setStyleSheet(QString::fromUtf8("border-image: url(:/Cigarette/Resources/rotate.png)")); - rotate_4->setIcon(icon); - rotate_4->setIconSize(QSize(40, 40)); - lcdNumber_ng_3 = new QLCDNumber(centralWidget); - lcdNumber_ng_3->setObjectName(QString::fromUtf8("lcdNumber_ng_3")); - lcdNumber_ng_3->setGeometry(QRect(600, 1400, 131, 41)); - lcdNumber_ng_3->setStyleSheet(QString::fromUtf8("color:white")); - lcdNumber_ng_3->setDigitCount(10); - label_ng_3 = new db_label(centralWidget); - label_ng_3->setObjectName(QString::fromUtf8("label_ng_3")); - label_ng_3->setGeometry(QRect(520, 1400, 71, 31)); - label_ng_3->setFont(font7); - label_ng_3->setStyleSheet(QString::fromUtf8("color:white")); - lcdNumber_ng_4 = new QLCDNumber(centralWidget); - lcdNumber_ng_4->setObjectName(QString::fromUtf8("lcdNumber_ng_4")); - lcdNumber_ng_4->setGeometry(QRect(1140, 1400, 131, 41)); - lcdNumber_ng_4->setStyleSheet(QString::fromUtf8("color:white")); - lcdNumber_ng_4->setDigitCount(10); - label_15 = new QLabel(centralWidget); - label_15->setObjectName(QString::fromUtf8("label_15")); - label_15->setGeometry(QRect(1060, 1305, 71, 31)); - label_15->setFont(font7); - label_15->setStyleSheet(QString::fromUtf8("color:white")); - lcdNumber_total_4 = new QLCDNumber(centralWidget); - lcdNumber_total_4->setObjectName(QString::fromUtf8("lcdNumber_total_4")); - lcdNumber_total_4->setGeometry(QRect(1140, 1300, 131, 41)); - lcdNumber_total_4->setStyleSheet(QString::fromUtf8("color:white")); - lcdNumber_total_4->setDigitCount(10); - lcdNumber_ok_4 = new QLCDNumber(centralWidget); - lcdNumber_ok_4->setObjectName(QString::fromUtf8("lcdNumber_ok_4")); - lcdNumber_ok_4->setGeometry(QRect(1140, 1350, 131, 41)); - lcdNumber_ok_4->setStyleSheet(QString::fromUtf8("color:white")); - lcdNumber_ok_4->setDigitCount(10); - label_7 = new QLabel(centralWidget); - label_7->setObjectName(QString::fromUtf8("label_7")); - label_7->setGeometry(QRect(520, 1305, 71, 31)); - label_7->setFont(font7); - label_7->setStyleSheet(QString::fromUtf8("color:white")); - groupBox_13 = new QGroupBox(centralWidget); - groupBox_13->setObjectName(QString::fromUtf8("groupBox_13")); - groupBox_13->setGeometry(QRect(732, 1550, 541, 61)); - QFont font8; - font8.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); - font8.setPointSize(14); - groupBox_13->setFont(font8); - groupBox_13->setStyleSheet(QString::fromUtf8("color:white")); - label_40 = new QLabel(groupBox_13); - label_40->setObjectName(QString::fromUtf8("label_40")); - label_40->setGeometry(QRect(10, 30, 71, 21)); - QFont font9; - font9.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); - font9.setPointSize(11); - label_40->setFont(font9); - label_cap_speed_4 = new QLabel(groupBox_13); - label_cap_speed_4->setObjectName(QString::fromUtf8("label_cap_speed_4")); - label_cap_speed_4->setGeometry(QRect(80, 30, 71, 21)); - label_cap_speed_4->setFont(font9); - label_cap_speed_4->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); - label_reslut_4 = new QLabel(groupBox_13); - label_reslut_4->setObjectName(QString::fromUtf8("label_reslut_4")); - label_reslut_4->setGeometry(QRect(450, 20, 81, 31)); - QFont font10; - font10.setFamily(QString::fromUtf8("SimSun")); - font10.setPointSize(18); - font10.setBold(true); - font10.setWeight(75); - label_reslut_4->setFont(font10); - label_reslut_4->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 255, 0);")); - label_reslut_4->setAlignment(Qt::AlignCenter); - label_27 = new QLabel(groupBox_13); - label_27->setObjectName(QString::fromUtf8("label_27")); - label_27->setGeometry(QRect(300, 30, 71, 21)); - label_27->setFont(font9); - label_28 = new QLabel(groupBox_13); - label_28->setObjectName(QString::fromUtf8("label_28")); - label_28->setGeometry(QRect(160, 30, 71, 21)); - label_28->setFont(font9); - label_timecost_4 = new QLabel(groupBox_13); - label_timecost_4->setObjectName(QString::fromUtf8("label_timecost_4")); - label_timecost_4->setGeometry(QRect(370, 30, 50, 20)); - label_timecost_4->setFont(font9); - label_timecost_4->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); - label_jd_no_4 = new QLabel(groupBox_13); - label_jd_no_4->setObjectName(QString::fromUtf8("label_jd_no_4")); - label_jd_no_4->setGeometry(QRect(230, 30, 60, 21)); - label_jd_no_4->setFont(font9); - label_jd_no_4->setAlignment(Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter); - label_40->raise(); - label_cap_speed_4->raise(); - label_27->raise(); - label_28->raise(); - label_timecost_4->raise(); - label_jd_no_4->raise(); - label_reslut_4->raise(); - groupBox_11 = new QGroupBox(centralWidget); - groupBox_11->setObjectName(QString::fromUtf8("groupBox_11")); - groupBox_11->setGeometry(QRect(190, 1550, 540, 61)); - groupBox_11->setFont(font8); - groupBox_11->setStyleSheet(QString::fromUtf8("color:white")); - label_26 = new QLabel(groupBox_11); - label_26->setObjectName(QString::fromUtf8("label_26")); - label_26->setGeometry(QRect(10, 30, 71, 21)); - label_26->setFont(font9); - label_cap_speed_3 = new QLabel(groupBox_11); - label_cap_speed_3->setObjectName(QString::fromUtf8("label_cap_speed_3")); - label_cap_speed_3->setGeometry(QRect(80, 30, 71, 21)); - label_cap_speed_3->setFont(font9); - label_cap_speed_3->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); - label_jd_no_3 = new QLabel(groupBox_11); - label_jd_no_3->setObjectName(QString::fromUtf8("label_jd_no_3")); - label_jd_no_3->setGeometry(QRect(230, 30, 60, 21)); - label_jd_no_3->setFont(font9); - label_jd_no_3->setAlignment(Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter); - label_23 = new QLabel(groupBox_11); - label_23->setObjectName(QString::fromUtf8("label_23")); - label_23->setGeometry(QRect(160, 30, 71, 21)); - label_23->setFont(font9); - label_22 = new QLabel(groupBox_11); - label_22->setObjectName(QString::fromUtf8("label_22")); - label_22->setGeometry(QRect(300, 30, 71, 21)); - label_22->setFont(font9); - label_timecost_3 = new QLabel(groupBox_11); - label_timecost_3->setObjectName(QString::fromUtf8("label_timecost_3")); - label_timecost_3->setGeometry(QRect(370, 30, 50, 20)); - label_timecost_3->setFont(font9); - label_timecost_3->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); - label_reslut_3 = new QLabel(groupBox_11); - label_reslut_3->setObjectName(QString::fromUtf8("label_reslut_3")); - label_reslut_3->setGeometry(QRect(450, 20, 81, 31)); - label_reslut_3->setFont(font10); - label_reslut_3->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 255, 0);")); - label_reslut_3->setAlignment(Qt::AlignCenter); - groupBox_a = new QGroupBox(centralWidget); - groupBox_a->setObjectName(QString::fromUtf8("groupBox_a")); - groupBox_a->setGeometry(QRect(190, 750, 691, 61)); - groupBox_a->setFont(font8); - groupBox_a->setStyleSheet(QString::fromUtf8("color:white")); - label_19 = new QLabel(groupBox_a); - label_19->setObjectName(QString::fromUtf8("label_19")); - label_19->setGeometry(QRect(10, 30, 91, 21)); - QFont font11; - font11.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); - font11.setPointSize(13); - label_19->setFont(font11); - label_cap_speed_1 = new QLabel(groupBox_a); - label_cap_speed_1->setObjectName(QString::fromUtf8("label_cap_speed_1")); - label_cap_speed_1->setGeometry(QRect(80, 30, 71, 21)); - label_cap_speed_1->setFont(font11); - label_cap_speed_1->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); - label_jd_no_1 = new QLabel(groupBox_a); - label_jd_no_1->setObjectName(QString::fromUtf8("label_jd_no_1")); - label_jd_no_1->setGeometry(QRect(300, 30, 71, 21)); - label_jd_no_1->setFont(font11); - label_jd_no_1->setAlignment(Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter); - label_20 = new QLabel(groupBox_a); - label_20->setObjectName(QString::fromUtf8("label_20")); - label_20->setGeometry(QRect(210, 30, 81, 21)); - label_20->setFont(font11); - label_21 = new QLabel(groupBox_a); - label_21->setObjectName(QString::fromUtf8("label_21")); - label_21->setGeometry(QRect(390, 30, 81, 21)); - label_21->setFont(font11); - label_timecost_1 = new QLabel(groupBox_a); - label_timecost_1->setObjectName(QString::fromUtf8("label_timecost_1")); - label_timecost_1->setGeometry(QRect(460, 30, 71, 20)); - label_timecost_1->setFont(font11); - label_timecost_1->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); - label_reslut_1 = new QLabel(groupBox_a); - label_reslut_1->setObjectName(QString::fromUtf8("label_reslut_1")); - label_reslut_1->setGeometry(QRect(560, 20, 101, 31)); - label_reslut_1->setFont(font10); - label_reslut_1->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 255, 0);")); - label_reslut_1->setAlignment(Qt::AlignCenter); - groupBox_b = new QGroupBox(centralWidget); - groupBox_b->setObjectName(QString::fromUtf8("groupBox_b")); - groupBox_b->setGeometry(QRect(892, 750, 696, 61)); - groupBox_b->setFont(font8); - groupBox_b->setStyleSheet(QString::fromUtf8("color:white")); - label_33 = new QLabel(groupBox_b); - label_33->setObjectName(QString::fromUtf8("label_33")); - label_33->setGeometry(QRect(10, 30, 81, 21)); - label_33->setFont(font11); - label_cap_speed_2 = new QLabel(groupBox_b); - label_cap_speed_2->setObjectName(QString::fromUtf8("label_cap_speed_2")); - label_cap_speed_2->setGeometry(QRect(80, 30, 71, 21)); - label_cap_speed_2->setFont(font11); - label_cap_speed_2->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); - label_jd_no_2 = new QLabel(groupBox_b); - label_jd_no_2->setObjectName(QString::fromUtf8("label_jd_no_2")); - label_jd_no_2->setGeometry(QRect(310, 30, 71, 21)); - QFont font12; - font12.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); - font12.setPointSize(13); - font12.setKerning(true); - label_jd_no_2->setFont(font12); - label_jd_no_2->setAlignment(Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter); - label_reslut_2 = new QLabel(groupBox_b); - label_reslut_2->setObjectName(QString::fromUtf8("label_reslut_2")); - label_reslut_2->setGeometry(QRect(570, 20, 101, 31)); - label_reslut_2->setFont(font10); - label_reslut_2->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 255, 0);")); - label_reslut_2->setAlignment(Qt::AlignCenter); - label_24 = new QLabel(groupBox_b); - label_24->setObjectName(QString::fromUtf8("label_24")); - label_24->setGeometry(QRect(390, 30, 81, 21)); - label_24->setFont(font11); - label_25 = new QLabel(groupBox_b); - label_25->setObjectName(QString::fromUtf8("label_25")); - label_25->setGeometry(QRect(220, 30, 81, 21)); - label_25->setFont(font11); - label_timecost_2 = new QLabel(groupBox_b); - label_timecost_2->setObjectName(QString::fromUtf8("label_timecost_2")); - label_timecost_2->setGeometry(QRect(480, 30, 71, 20)); - label_timecost_2->setFont(font11); - label_timecost_2->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); - label_33->raise(); - label_cap_speed_2->raise(); - label_jd_no_2->raise(); - label_24->raise(); - label_25->raise(); - label_timecost_2->raise(); - label_reslut_2->raise(); - lcdNumber_ok_1 = new QLCDNumber(centralWidget); - lcdNumber_ok_1->setObjectName(QString::fromUtf8("lcdNumber_ok_1")); - lcdNumber_ok_1->setGeometry(QRect(680, 660, 201, 41)); - lcdNumber_ok_1->setStyleSheet(QString::fromUtf8("color:white")); - lcdNumber_ok_1->setDigitCount(10); - label = new QLabel(centralWidget); - label->setObjectName(QString::fromUtf8("label")); - label->setGeometry(QRect(200, 665, 91, 31)); - label->setFont(font3); - label->setStyleSheet(QString::fromUtf8("color:white")); - label_2 = new QLabel(centralWidget); - label_2->setObjectName(QString::fromUtf8("label_2")); - label_2->setGeometry(QRect(550, 660, 101, 31)); - label_2->setFont(font3); - label_2->setStyleSheet(QString::fromUtf8("color:white")); - lcdNumber_total_1 = new QLCDNumber(centralWidget); - lcdNumber_total_1->setObjectName(QString::fromUtf8("lcdNumber_total_1")); - lcdNumber_total_1->setGeometry(QRect(320, 660, 201, 41)); - lcdNumber_total_1->setStyleSheet(QString::fromUtf8("color:white")); - lcdNumber_total_1->setDigitCount(10); - lcdNumber_ng_1 = new QLCDNumber(centralWidget); - lcdNumber_ng_1->setObjectName(QString::fromUtf8("lcdNumber_ng_1")); - lcdNumber_ng_1->setGeometry(QRect(680, 710, 201, 41)); - lcdNumber_ng_1->setStyleSheet(QString::fromUtf8("color:white")); - lcdNumber_ng_1->setDigitCount(10); - label_ng_1 = new db_label(centralWidget); - label_ng_1->setObjectName(QString::fromUtf8("label_ng_1")); - label_ng_1->setGeometry(QRect(550, 710, 101, 31)); - label_ng_1->setFont(font3); - label_ng_1->setStyleSheet(QString::fromUtf8("color:white")); - label_4 = new QLabel(centralWidget); - label_4->setObjectName(QString::fromUtf8("label_4")); - label_4->setGeometry(QRect(200, 710, 91, 31)); - label_4->setFont(font3); - label_4->setStyleSheet(QString::fromUtf8("color:white")); - lcdNumber_kick_1 = new QLCDNumber(centralWidget); - lcdNumber_kick_1->setObjectName(QString::fromUtf8("lcdNumber_kick_1")); - lcdNumber_kick_1->setGeometry(QRect(320, 710, 201, 41)); - lcdNumber_kick_1->setStyleSheet(QString::fromUtf8("color:white")); - lcdNumber_kick_1->setDigitCount(10); - rotate_1 = new QToolButton(centralWidget); - rotate_1->setObjectName(QString::fromUtf8("rotate_1")); - rotate_1->setGeometry(QRect(690, 100, 20, 20)); - rotate_1->setFocusPolicy(Qt::ClickFocus); - rotate_1->setAutoFillBackground(false); - rotate_1->setStyleSheet(QString::fromUtf8("border-image: url(:/Cigarette/Resources/rotate.png)")); - rotate_1->setIcon(icon); - rotate_1->setIconSize(QSize(40, 40)); - label_title_7 = new QLabel(centralWidget); - label_title_7->setObjectName(QString::fromUtf8("label_title_7")); - label_title_7->setGeometry(QRect(61, 40, 241, 21)); - QFont font13; - font13.setFamily(QString::fromUtf8("\345\256\213\344\275\223")); - font13.setPointSize(10); - label_title_7->setFont(font13); - label_title_7->setStyleSheet(QString::fromUtf8("color:white")); - label_title_7->setAlignment(Qt::AlignCenter); - label_title_6 = new QLabel(centralWidget); - label_title_6->setObjectName(QString::fromUtf8("label_title_6")); - label_title_6->setGeometry(QRect(60, 16, 241, 21)); - QFont font14; - font14.setFamily(QString::fromUtf8("\351\273\221\344\275\223")); - font14.setPointSize(15); - label_title_6->setFont(font14); - label_title_6->setStyleSheet(QString::fromUtf8("color:white")); - label_title_6->setAlignment(Qt::AlignCenter); - toolButton_4 = new QToolButton(centralWidget); - toolButton_4->setObjectName(QString::fromUtf8("toolButton_4")); - toolButton_4->setGeometry(QRect(0, 10, 61, 51)); - toolButton_4->setStyleSheet(QString::fromUtf8("border-image: url(:/Cigarette/Resources/logo.png)")); - label_17 = new QLabel(centralWidget); - label_17->setObjectName(QString::fromUtf8("label_17")); - label_17->setGeometry(QRect(1310, 10, 161, 21)); - QFont font15; - font15.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); - font15.setPointSize(14); - font15.setBold(false); - font15.setWeight(50); - label_17->setFont(font15); - label_17->setStyleSheet(QString::fromUtf8("color:white")); - label_18 = new QLabel(centralWidget); - label_18->setObjectName(QString::fromUtf8("label_18")); - label_18->setGeometry(QRect(1480, 10, 81, 21)); - label_18->setFont(font15); - label_18->setStyleSheet(QString::fromUtf8("color:white")); - label_cur_time = new QLabel(centralWidget); - label_cur_time->setObjectName(QString::fromUtf8("label_cur_time")); - label_cur_time->setGeometry(QRect(1370, 40, 191, 31)); - label_cur_time->setFont(font15); - label_cur_time->setStyleSheet(QString::fromUtf8("color:white")); - label_cur_time->setAlignment(Qt::AlignCenter); - image_label_12 = new db_label(centralWidget); - image_label_12->setObjectName(QString::fromUtf8("image_label_12")); - image_label_12->setGeometry(QRect(360, 1320, 161, 251)); - image_label_12->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 0, 0);")); - image_label_22 = new db_label(centralWidget); - image_label_22->setObjectName(QString::fromUtf8("image_label_22")); - image_label_22->setGeometry(QRect(900, 1320, 161, 251)); - image_label_22->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 0, 0);")); - image_label_32 = new db_label(centralWidget); - image_label_32->setObjectName(QString::fromUtf8("image_label_32")); - image_label_32->setGeometry(QRect(360, 1650, 161, 251)); - image_label_32->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 0, 0);")); - image_label_42 = new db_label(centralWidget); - image_label_42->setObjectName(QString::fromUtf8("image_label_42")); - image_label_42->setGeometry(QRect(900, 1650, 161, 251)); - image_label_42->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 0, 0);")); - label_title_2 = new QLabel(centralWidget); - label_title_2->setObjectName(QString::fromUtf8("label_title_2")); - label_title_2->setGeometry(QRect(20, 540, 151, 151)); - label_title_2->setFont(font); - label_title_2->setStyleSheet(QString::fromUtf8("background-color: rgb(255, 255, 0);")); - label_title_2->setAlignment(Qt::AlignCenter); - CigaretteClass->setCentralWidget(centralWidget); - rotate_2->raise(); - rotate_1->raise(); - groupBox_status->raise(); - label_title->raise(); - groupBox_op->raise(); - groupBox_dev->raise(); - label_11->raise(); - label_ng_2->raise(); - lcdNumber_ok_2->raise(); - lcdNumber_kick_2->raise(); - label_6->raise(); - label_10->raise(); - image_label_21->raise(); - lcdNumber_total_2->raise(); - image_label_11->raise(); - lcdNumber_ng_2->raise(); - lcdNumber_total_3->raise(); - label_14->raise(); - image_label_31->raise(); - label_3->raise(); - image_label_41->raise(); - label_9->raise(); - lcdNumber_kick_4->raise(); - label_ng_4->raise(); - label_13->raise(); - lcdNumber_kick_3->raise(); - lcdNumber_ok_3->raise(); - lcdNumber_ng_3->raise(); - label_ng_3->raise(); - lcdNumber_ng_4->raise(); - label_15->raise(); - lcdNumber_total_4->raise(); - lcdNumber_ok_4->raise(); - label_7->raise(); - groupBox_13->raise(); - groupBox_11->raise(); - groupBox_a->raise(); - groupBox_b->raise(); - lcdNumber_ok_1->raise(); - label->raise(); - label_2->raise(); - lcdNumber_total_1->raise(); - lcdNumber_ng_1->raise(); - label_ng_1->raise(); - label_4->raise(); - lcdNumber_kick_1->raise(); - label_title_7->raise(); - label_title_6->raise(); - toolButton_4->raise(); - label_17->raise(); - label_18->raise(); - label_cur_time->raise(); - image_label_12->raise(); - image_label_22->raise(); - image_label_32->raise(); - rotate_3->raise(); - image_label_42->raise(); - rotate_4->raise(); - label_title_2->raise(); - - retranslateUi(CigaretteClass); - - QMetaObject::connectSlotsByName(CigaretteClass); - } // setupUi - - void retranslateUi(QMainWindow *CigaretteClass) - { - CigaretteClass->setWindowTitle(QCoreApplication::translate("CigaretteClass", "Cigarette", nullptr)); - label_title->setText(QCoreApplication::translate("CigaretteClass", "\346\235\241\347\233\222\350\203\266\347\202\271\346\243\200\346\265\213\347\263\273\347\273\237", nullptr)); - groupBox_op->setTitle(QCoreApplication::translate("CigaretteClass", "\346\223\215\344\275\234\345\214\272", nullptr)); - btn_start->setText(QString()); - btn_pause->setText(QString()); - btn_lock->setText(QString()); - btn_setup->setText(QString()); - groupBox_dev->setTitle(QCoreApplication::translate("CigaretteClass", "\350\256\276\345\244\207\345\214\272", nullptr)); - cam_status_1->setText(QCoreApplication::translate("CigaretteClass", "\350\201\224\346\234\272", nullptr)); - toolButton_cam_1->setText(QString()); - toolButton_cam_2->setText(QString()); - cam_status_2->setText(QCoreApplication::translate("CigaretteClass", "\350\201\224\346\234\272", nullptr)); - cam_work_2->setText(QCoreApplication::translate("CigaretteClass", "\345\267\245\344\275\234", nullptr)); - cam_work_1->setText(QCoreApplication::translate("CigaretteClass", "\345\267\245\344\275\234", nullptr)); - checkBox_debug->setText(QCoreApplication::translate("CigaretteClass", "\350\260\203\350\257\225\346\250\241\345\274\217", nullptr)); - checkBox_unkick->setText(QCoreApplication::translate("CigaretteClass", "\344\270\215\345\211\224\351\231\244", nullptr)); - cam_work_3->setText(QCoreApplication::translate("CigaretteClass", "\345\267\245\344\275\234", nullptr)); - cam_status_4->setText(QCoreApplication::translate("CigaretteClass", "\350\201\224\346\234\272", nullptr)); - toolButton_cam_3->setText(QString()); - cam_work_4->setText(QCoreApplication::translate("CigaretteClass", "\345\267\245\344\275\234", nullptr)); - toolButton_cam_4->setText(QString()); - cam_status_3->setText(QCoreApplication::translate("CigaretteClass", "\350\201\224\346\234\272", nullptr)); - pushButton_Clear_Pic->setText(QCoreApplication::translate("CigaretteClass", "\346\270\205\347\220\206\345\233\276\347\211\207", nullptr)); - groupBox_status->setTitle(QString()); - label_alarm->setText(QCoreApplication::translate("CigaretteClass", "\346\227\240\346\212\245\350\255\246", nullptr)); - label_5->setText(QCoreApplication::translate("CigaretteClass", "\345\275\223\347\217\255", nullptr)); - label_plc->setText(QCoreApplication::translate("CigaretteClass", "PLC\346\255\243\345\270\270", nullptr)); - toolButton_alarm->setText(QString()); - toolButton_plc->setText(QString()); - pushButton_clear->setText(QCoreApplication::translate("CigaretteClass", "\346\215\242\347\217\255", nullptr)); - label_run_stat->setText(QCoreApplication::translate("CigaretteClass", "\350\277\220\350\241\2141\345\271\26410\346\234\21025\345\244\2519\346\227\26615\345\210\206", nullptr)); - label_12->setText(QCoreApplication::translate("CigaretteClass", "\347\231\273\351\231\206\347\224\250\346\210\267\357\274\232", nullptr)); - label_role->setText(QCoreApplication::translate("CigaretteClass", "\346\223\215\344\275\234\345\221\230", nullptr)); - label_8->setText(QCoreApplication::translate("CigaretteClass", "\344\270\212\347\217\255", nullptr)); - pushButton_reset->setText(QCoreApplication::translate("CigaretteClass", "\345\244\215\344\275\215", nullptr)); - label_11->setText(QCoreApplication::translate("CigaretteClass", "2#\345\211\224\351\231\244\346\254\241\346\225\260", nullptr)); - label_ng_2->setText(QCoreApplication::translate("CigaretteClass", "2#NG\346\254\241\346\225\260", nullptr)); - label_6->setText(QCoreApplication::translate("CigaretteClass", "2#\346\243\200\346\265\213\344\270\252\346\225\260", nullptr)); - label_10->setText(QCoreApplication::translate("CigaretteClass", "2#OK\346\254\241\346\225\260", nullptr)); - image_label_21->setText(QString()); - rotate_2->setText(QCoreApplication::translate("CigaretteClass", "...", nullptr)); - image_label_11->setText(QString()); - label_14->setText(QCoreApplication::translate("CigaretteClass", "4#OK\346\254\241\346\225\260", nullptr)); - image_label_31->setText(QString()); - label_3->setText(QCoreApplication::translate("CigaretteClass", "3#OK\346\254\241\346\225\260", nullptr)); - image_label_41->setText(QString()); - label_9->setText(QCoreApplication::translate("CigaretteClass", "3#\345\211\224\351\231\244\346\254\241\346\225\260", nullptr)); - label_ng_4->setText(QCoreApplication::translate("CigaretteClass", "4#NG\346\254\241\346\225\260", nullptr)); - label_13->setText(QCoreApplication::translate("CigaretteClass", "4#\345\211\224\351\231\244\346\254\241\346\225\260", nullptr)); - rotate_3->setText(QCoreApplication::translate("CigaretteClass", "...", nullptr)); - rotate_4->setText(QCoreApplication::translate("CigaretteClass", "...", nullptr)); - label_ng_3->setText(QCoreApplication::translate("CigaretteClass", "3#NG\346\254\241\346\225\260", nullptr)); - label_15->setText(QCoreApplication::translate("CigaretteClass", "4#\346\243\200\346\265\213\344\270\252\346\225\260", nullptr)); - label_7->setText(QCoreApplication::translate("CigaretteClass", "3#\346\243\200\346\265\213\344\270\252\346\225\260", nullptr)); - groupBox_13->setTitle(QCoreApplication::translate("CigaretteClass", "4#\347\233\270\346\234\272\345\210\206\346\236\220\347\273\223\346\236\234", nullptr)); - label_40->setText(QCoreApplication::translate("CigaretteClass", "\351\207\207\351\233\206\351\200\237\345\272\246\357\274\232", nullptr)); - label_cap_speed_4->setText(QString()); - label_reslut_4->setText(QCoreApplication::translate("CigaretteClass", "OK", nullptr)); - label_27->setText(QCoreApplication::translate("CigaretteClass", "\350\257\206\345\210\253\346\227\266\351\227\264\357\274\232", nullptr)); - label_28->setText(QCoreApplication::translate("CigaretteClass", "\350\203\266\347\202\271\344\270\252\346\225\260\357\274\232", nullptr)); - label_timecost_4->setText(QString()); - label_jd_no_4->setText(QString()); - groupBox_11->setTitle(QCoreApplication::translate("CigaretteClass", "3#\347\233\270\346\234\272\345\210\206\346\236\220\347\273\223\346\236\234", nullptr)); - label_26->setText(QCoreApplication::translate("CigaretteClass", "\351\207\207\351\233\206\351\200\237\345\272\246\357\274\232", nullptr)); - label_cap_speed_3->setText(QString()); - label_jd_no_3->setText(QString()); - label_23->setText(QCoreApplication::translate("CigaretteClass", "\350\203\266\347\202\271\344\270\252\346\225\260\357\274\232", nullptr)); - label_22->setText(QCoreApplication::translate("CigaretteClass", "\350\257\206\345\210\253\346\227\266\351\227\264\357\274\232", nullptr)); - label_timecost_3->setText(QString()); - label_reslut_3->setText(QCoreApplication::translate("CigaretteClass", "OK", nullptr)); - groupBox_a->setTitle(QCoreApplication::translate("CigaretteClass", "1#\347\233\270\346\234\272\345\210\206\346\236\220\347\273\223\346\236\234", nullptr)); - label_19->setText(QCoreApplication::translate("CigaretteClass", "\351\207\207\351\233\206\351\200\237\345\272\246\357\274\232", nullptr)); - label_cap_speed_1->setText(QString()); - label_jd_no_1->setText(QString()); - label_20->setText(QCoreApplication::translate("CigaretteClass", "\350\203\266\347\202\271\344\270\252\346\225\260\357\274\232", nullptr)); - label_21->setText(QCoreApplication::translate("CigaretteClass", "\350\257\206\345\210\253\346\227\266\351\227\264\357\274\232", nullptr)); - label_timecost_1->setText(QString()); - label_reslut_1->setText(QCoreApplication::translate("CigaretteClass", "OK", nullptr)); - groupBox_b->setTitle(QCoreApplication::translate("CigaretteClass", "2#\347\233\270\346\234\272\345\210\206\346\236\220\347\273\223\346\236\234", nullptr)); - label_33->setText(QCoreApplication::translate("CigaretteClass", "\351\207\207\351\233\206\351\200\237\345\272\246\357\274\232", nullptr)); - label_cap_speed_2->setText(QString()); - label_jd_no_2->setText(QString()); - label_reslut_2->setText(QCoreApplication::translate("CigaretteClass", "OK", nullptr)); - label_24->setText(QCoreApplication::translate("CigaretteClass", "\350\257\206\345\210\253\346\227\266\351\227\264\357\274\232", nullptr)); - label_25->setText(QCoreApplication::translate("CigaretteClass", "\350\203\266\347\202\271\344\270\252\346\225\260\357\274\232", nullptr)); - label_timecost_2->setText(QString()); - label->setText(QCoreApplication::translate("CigaretteClass", "1#\346\243\200\346\265\213\344\270\252\346\225\260", nullptr)); - label_2->setText(QCoreApplication::translate("CigaretteClass", "1#OK\346\254\241\346\225\260", nullptr)); - label_ng_1->setText(QCoreApplication::translate("CigaretteClass", "1#NG\346\254\241\346\225\260", nullptr)); - label_4->setText(QCoreApplication::translate("CigaretteClass", "1#\345\211\224\351\231\244\346\254\241\346\225\260", nullptr)); - rotate_1->setText(QCoreApplication::translate("CigaretteClass", "...", nullptr)); - label_title_7->setText(QCoreApplication::translate("CigaretteClass", "SHANGHAI TOBACCO MACHINERY CO.,LTD", nullptr)); - label_title_6->setText(QCoreApplication::translate("CigaretteClass", "\344\270\212\346\265\267\347\203\237\350\215\211\346\234\272\346\242\260\346\234\211\351\231\220\350\264\243\344\273\273\345\205\254\345\217\270", nullptr)); - toolButton_4->setText(QString()); - label_17->setText(QCoreApplication::translate("CigaretteClass", "Tel:87907256(0532)", nullptr)); - label_18->setText(QCoreApplication::translate("CigaretteClass", "\351\235\222\345\262\233\347\273\264\345\205\213", nullptr)); - label_cur_time->setText(QCoreApplication::translate("CigaretteClass", "2020-10-10 13:15:39", nullptr)); - image_label_12->setText(QString()); - image_label_22->setText(QString()); - image_label_32->setText(QString()); - image_label_42->setText(QString()); - label_title_2->setText(QCoreApplication::translate("CigaretteClass", "\350\277\220\350\241\214\344\270\255", nullptr)); - } // retranslateUi - -}; - -namespace Ui { - class CigaretteClass: public Ui_CigaretteClass {}; -} // namespace Ui - -QT_END_NAMESPACE - -#endif // UI_CIGARETTE_H diff --git a/Cigarette/GeneratedFiles/ui_dialogsetup.h b/Cigarette/GeneratedFiles/ui_dialogsetup.h deleted file mode 100644 index c2449473..00000000 --- a/Cigarette/GeneratedFiles/ui_dialogsetup.h +++ /dev/null @@ -1,452 +0,0 @@ -/******************************************************************************** -** Form generated from reading UI file 'dialogsetup.ui' -** -** Created by: Qt User Interface Compiler version 5.15.2 -** -** WARNING! All changes made in this file will be lost when recompiling UI file! -********************************************************************************/ - -#ifndef UI_DIALOGSETUP_H -#define UI_DIALOGSETUP_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -class Ui_DialogSetup -{ -public: - QScrollArea *scrollArea; - QWidget *scrollAreaWidgetContents; - QGroupBox *groupBox_4; - QCheckBox *checkBox_auto_open; - QCheckBox *checkBox_auto_work; - QGroupBox *groupBox_3; - QPushButton *pushButton_pswd; - QLabel *label_5; - QLineEdit *lineEdit_confirm; - QLineEdit *lineEdit_new; - QLabel *label_6; - QLineEdit *lineEdit_old; - QLabel *label_7; - QGroupBox *groupBox_5; - QLabel *label_8; - QLineEdit *lineEdit_expo_1; - QLineEdit *lineEdit_expo_2; - QLabel *label_9; - QLineEdit *lineEdit_gain_2; - QLabel *label_15; - QLabel *label_16; - QLineEdit *lineEdit_gain_1; - QPushButton *pushButton_expo; - QGroupBox *groupBox_6; - QLabel *label_10; - QLineEdit *lineEdit_filter_1; - QLineEdit *lineEdit_filter_2; - QLabel *label_11; - QPushButton *pushButton_filter; - QGroupBox *groupBox; - QRadioButton *radioButton_none; - QRadioButton *radioButton_ng; - QRadioButton *radioButton_all; - QPushButton *pushButton_image; - QPushButton *pushButton_save; - QPushButton *pushButton_exit; - QGroupBox *groupBox_7; - QLabel *label_12; - QLineEdit *lineEdit_confirm_op; - QLineEdit *lineEdit_new_op; - QLabel *label_13; - QLineEdit *lineEdit_old_op; - QLabel *label_14; - QPushButton *pushButton_pswd_op; - QPushButton *pushButton_close; - QPushButton *pushButton_desktop; - QToolButton *toolButton_keyboard; - QLabel *label; - QPushButton *pushButton_config; - QPushButton *pushButton_change; - QPushButton *pushButton_statistic; - QLineEdit *lineEdit_gain_3; - QLabel *label_17; - QLabel *label_19; - QLabel *label_18; - QLineEdit *lineEdit_expo_3; - QLabel *label_20; - QLineEdit *lineEdit_gain_4; - QLineEdit *lineEdit_expo_4; - QLineEdit *lineEdit_filter_4; - QLabel *label_21; - QLineEdit *lineEdit_filter_3; - QLabel *label_22; - - void setupUi(QDialog *DialogSetup) - { - if (DialogSetup->objectName().isEmpty()) - DialogSetup->setObjectName(QString::fromUtf8("DialogSetup")); - DialogSetup->resize(669, 723); - QFont font; - font.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); - font.setPointSize(14); - font.setBold(true); - font.setWeight(75); - DialogSetup->setFont(font); - DialogSetup->setStyleSheet(QString::fromUtf8("background-color: rgb(240, 240, 240);")); - scrollArea = new QScrollArea(DialogSetup); - scrollArea->setObjectName(QString::fromUtf8("scrollArea")); - scrollArea->setGeometry(QRect(0, 0, 691, 781)); - scrollArea->setMinimumSize(QSize(0, 0)); - scrollArea->setWidgetResizable(true); - scrollAreaWidgetContents = new QWidget(); - scrollAreaWidgetContents->setObjectName(QString::fromUtf8("scrollAreaWidgetContents")); - scrollAreaWidgetContents->setGeometry(QRect(0, 0, 689, 779)); - scrollAreaWidgetContents->setMinimumSize(QSize(670, 768)); - groupBox_4 = new QGroupBox(scrollAreaWidgetContents); - groupBox_4->setObjectName(QString::fromUtf8("groupBox_4")); - groupBox_4->setGeometry(QRect(10, 60, 641, 81)); - QFont font1; - font1.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221")); - font1.setPointSize(12); - font1.setBold(true); - font1.setWeight(75); - groupBox_4->setFont(font1); - checkBox_auto_open = new QCheckBox(groupBox_4); - checkBox_auto_open->setObjectName(QString::fromUtf8("checkBox_auto_open")); - checkBox_auto_open->setGeometry(QRect(20, 40, 191, 21)); - checkBox_auto_open->setFont(font1); - checkBox_auto_work = new QCheckBox(groupBox_4); - checkBox_auto_work->setObjectName(QString::fromUtf8("checkBox_auto_work")); - checkBox_auto_work->setGeometry(QRect(220, 40, 241, 21)); - checkBox_auto_work->setFont(font1); - groupBox_3 = new QGroupBox(scrollAreaWidgetContents); - groupBox_3->setObjectName(QString::fromUtf8("groupBox_3")); - groupBox_3->setGeometry(QRect(10, 420, 641, 91)); - groupBox_3->setFont(font1); - pushButton_pswd = new QPushButton(groupBox_3); - pushButton_pswd->setObjectName(QString::fromUtf8("pushButton_pswd")); - pushButton_pswd->setGeometry(QRect(540, 30, 91, 51)); - pushButton_pswd->setFont(font1); - label_5 = new QLabel(groupBox_3); - label_5->setObjectName(QString::fromUtf8("label_5")); - label_5->setGeometry(QRect(180, 40, 61, 31)); - label_5->setFont(font1); - lineEdit_confirm = new QLineEdit(groupBox_3); - lineEdit_confirm->setObjectName(QString::fromUtf8("lineEdit_confirm")); - lineEdit_confirm->setGeometry(QRect(440, 42, 91, 31)); - lineEdit_confirm->setFont(font1); - lineEdit_confirm->setEchoMode(QLineEdit::Password); - lineEdit_new = new QLineEdit(groupBox_3); - lineEdit_new->setObjectName(QString::fromUtf8("lineEdit_new")); - lineEdit_new->setGeometry(QRect(240, 40, 101, 31)); - lineEdit_new->setFont(font1); - lineEdit_new->setEchoMode(QLineEdit::Password); - label_6 = new QLabel(groupBox_3); - label_6->setObjectName(QString::fromUtf8("label_6")); - label_6->setGeometry(QRect(350, 40, 81, 31)); - label_6->setFont(font1); - lineEdit_old = new QLineEdit(groupBox_3); - lineEdit_old->setObjectName(QString::fromUtf8("lineEdit_old")); - lineEdit_old->setGeometry(QRect(80, 40, 91, 31)); - lineEdit_old->setFont(font1); - lineEdit_old->setEchoMode(QLineEdit::Password); - label_7 = new QLabel(groupBox_3); - label_7->setObjectName(QString::fromUtf8("label_7")); - label_7->setGeometry(QRect(10, 40, 61, 31)); - label_7->setFont(font1); - groupBox_5 = new QGroupBox(scrollAreaWidgetContents); - groupBox_5->setObjectName(QString::fromUtf8("groupBox_5")); - groupBox_5->setGeometry(QRect(10, 220, 641, 141)); - groupBox_5->setFont(font1); - label_8 = new QLabel(groupBox_5); - label_8->setObjectName(QString::fromUtf8("label_8")); - label_8->setGeometry(QRect(20, 40, 181, 31)); - label_8->setFont(font1); - lineEdit_expo_1 = new QLineEdit(groupBox_5); - lineEdit_expo_1->setObjectName(QString::fromUtf8("lineEdit_expo_1")); - lineEdit_expo_1->setGeometry(QRect(210, 40, 91, 31)); - lineEdit_expo_1->setFont(font1); - lineEdit_expo_2 = new QLineEdit(groupBox_5); - lineEdit_expo_2->setObjectName(QString::fromUtf8("lineEdit_expo_2")); - lineEdit_expo_2->setGeometry(QRect(210, 80, 91, 31)); - lineEdit_expo_2->setFont(font1); - label_9 = new QLabel(groupBox_5); - label_9->setObjectName(QString::fromUtf8("label_9")); - label_9->setGeometry(QRect(20, 80, 181, 31)); - label_9->setFont(font1); - lineEdit_gain_2 = new QLineEdit(groupBox_5); - lineEdit_gain_2->setObjectName(QString::fromUtf8("lineEdit_gain_2")); - lineEdit_gain_2->setGeometry(QRect(510, 80, 91, 31)); - lineEdit_gain_2->setFont(font1); - label_15 = new QLabel(groupBox_5); - label_15->setObjectName(QString::fromUtf8("label_15")); - label_15->setGeometry(QRect(320, 40, 181, 31)); - label_15->setFont(font1); - label_16 = new QLabel(groupBox_5); - label_16->setObjectName(QString::fromUtf8("label_16")); - label_16->setGeometry(QRect(320, 80, 181, 31)); - label_16->setFont(font1); - lineEdit_gain_1 = new QLineEdit(groupBox_5); - lineEdit_gain_1->setObjectName(QString::fromUtf8("lineEdit_gain_1")); - lineEdit_gain_1->setGeometry(QRect(510, 40, 91, 31)); - lineEdit_gain_1->setFont(font1); - pushButton_expo = new QPushButton(groupBox_5); - pushButton_expo->setObjectName(QString::fromUtf8("pushButton_expo")); - pushButton_expo->setGeometry(QRect(680, 90, 91, 51)); - pushButton_expo->setFont(font1); - groupBox_6 = new QGroupBox(scrollAreaWidgetContents); - groupBox_6->setObjectName(QString::fromUtf8("groupBox_6")); - groupBox_6->setGeometry(QRect(10, 580, 641, 71)); - groupBox_6->setFont(font1); - label_10 = new QLabel(groupBox_6); - label_10->setObjectName(QString::fromUtf8("label_10")); - label_10->setGeometry(QRect(20, 30, 181, 31)); - label_10->setFont(font1); - lineEdit_filter_1 = new QLineEdit(groupBox_6); - lineEdit_filter_1->setObjectName(QString::fromUtf8("lineEdit_filter_1")); - lineEdit_filter_1->setGeometry(QRect(210, 30, 91, 31)); - lineEdit_filter_1->setFont(font1); - lineEdit_filter_2 = new QLineEdit(groupBox_6); - lineEdit_filter_2->setObjectName(QString::fromUtf8("lineEdit_filter_2")); - lineEdit_filter_2->setGeometry(QRect(510, 30, 91, 31)); - lineEdit_filter_2->setFont(font1); - label_11 = new QLabel(groupBox_6); - label_11->setObjectName(QString::fromUtf8("label_11")); - label_11->setGeometry(QRect(320, 30, 181, 31)); - label_11->setFont(font1); - pushButton_filter = new QPushButton(groupBox_6); - pushButton_filter->setObjectName(QString::fromUtf8("pushButton_filter")); - pushButton_filter->setGeometry(QRect(680, 50, 91, 51)); - pushButton_filter->setFont(font1); - groupBox = new QGroupBox(scrollAreaWidgetContents); - groupBox->setObjectName(QString::fromUtf8("groupBox")); - groupBox->setGeometry(QRect(10, 140, 641, 81)); - groupBox->setFont(font1); - radioButton_none = new QRadioButton(groupBox); - radioButton_none->setObjectName(QString::fromUtf8("radioButton_none")); - radioButton_none->setGeometry(QRect(30, 40, 91, 21)); - radioButton_none->setFont(font1); - radioButton_ng = new QRadioButton(groupBox); - radioButton_ng->setObjectName(QString::fromUtf8("radioButton_ng")); - radioButton_ng->setGeometry(QRect(230, 40, 91, 21)); - radioButton_ng->setFont(font1); - radioButton_all = new QRadioButton(groupBox); - radioButton_all->setObjectName(QString::fromUtf8("radioButton_all")); - radioButton_all->setGeometry(QRect(440, 40, 91, 21)); - radioButton_all->setFont(font1); - pushButton_image = new QPushButton(groupBox); - pushButton_image->setObjectName(QString::fromUtf8("pushButton_image")); - pushButton_image->setGeometry(QRect(540, 20, 101, 51)); - pushButton_image->setFont(font1); - pushButton_save = new QPushButton(scrollAreaWidgetContents); - pushButton_save->setObjectName(QString::fromUtf8("pushButton_save")); - pushButton_save->setGeometry(QRect(120, 660, 131, 51)); - pushButton_save->setFont(font1); - pushButton_exit = new QPushButton(scrollAreaWidgetContents); - pushButton_exit->setObjectName(QString::fromUtf8("pushButton_exit")); - pushButton_exit->setGeometry(QRect(490, 10, 131, 51)); - pushButton_exit->setFont(font1); - groupBox_7 = new QGroupBox(scrollAreaWidgetContents); - groupBox_7->setObjectName(QString::fromUtf8("groupBox_7")); - groupBox_7->setGeometry(QRect(10, 510, 641, 71)); - groupBox_7->setFont(font1); - label_12 = new QLabel(groupBox_7); - label_12->setObjectName(QString::fromUtf8("label_12")); - label_12->setGeometry(QRect(180, 30, 61, 31)); - label_12->setFont(font1); - lineEdit_confirm_op = new QLineEdit(groupBox_7); - lineEdit_confirm_op->setObjectName(QString::fromUtf8("lineEdit_confirm_op")); - lineEdit_confirm_op->setGeometry(QRect(440, 32, 91, 31)); - lineEdit_confirm_op->setFont(font1); - lineEdit_confirm_op->setEchoMode(QLineEdit::Password); - lineEdit_new_op = new QLineEdit(groupBox_7); - lineEdit_new_op->setObjectName(QString::fromUtf8("lineEdit_new_op")); - lineEdit_new_op->setGeometry(QRect(240, 30, 101, 31)); - lineEdit_new_op->setFont(font1); - lineEdit_new_op->setEchoMode(QLineEdit::Password); - label_13 = new QLabel(groupBox_7); - label_13->setObjectName(QString::fromUtf8("label_13")); - label_13->setGeometry(QRect(350, 30, 81, 31)); - label_13->setFont(font1); - lineEdit_old_op = new QLineEdit(groupBox_7); - lineEdit_old_op->setObjectName(QString::fromUtf8("lineEdit_old_op")); - lineEdit_old_op->setGeometry(QRect(80, 30, 91, 31)); - lineEdit_old_op->setFont(font1); - lineEdit_old_op->setEchoMode(QLineEdit::Password); - label_14 = new QLabel(groupBox_7); - label_14->setObjectName(QString::fromUtf8("label_14")); - label_14->setGeometry(QRect(10, 30, 61, 31)); - label_14->setFont(font1); - pushButton_pswd_op = new QPushButton(groupBox_7); - pushButton_pswd_op->setObjectName(QString::fromUtf8("pushButton_pswd_op")); - pushButton_pswd_op->setGeometry(QRect(540, 20, 91, 51)); - pushButton_pswd_op->setFont(font1); - pushButton_close = new QPushButton(scrollAreaWidgetContents); - pushButton_close->setObjectName(QString::fromUtf8("pushButton_close")); - pushButton_close->setGeometry(QRect(380, 660, 131, 51)); - pushButton_close->setFont(font1); - pushButton_desktop = new QPushButton(scrollAreaWidgetContents); - pushButton_desktop->setObjectName(QString::fromUtf8("pushButton_desktop")); - pushButton_desktop->setGeometry(QRect(300, 10, 131, 51)); - pushButton_desktop->setFont(font1); - toolButton_keyboard = new QToolButton(scrollAreaWidgetContents); - toolButton_keyboard->setObjectName(QString::fromUtf8("toolButton_keyboard")); - toolButton_keyboard->setGeometry(QRect(160, 10, 91, 41)); - toolButton_keyboard->setFont(font1); - toolButton_keyboard->setStyleSheet(QString::fromUtf8("border-image: url(:/Cigarette/Resources/keyboard.png);")); - label = new QLabel(scrollAreaWidgetContents); - label->setObjectName(QString::fromUtf8("label")); - label->setGeometry(QRect(10, 20, 101, 21)); - label->setFont(font1); - pushButton_config = new QPushButton(scrollAreaWidgetContents); - pushButton_config->setObjectName(QString::fromUtf8("pushButton_config")); - pushButton_config->setGeometry(QRect(50, 370, 111, 41)); - pushButton_config->setFont(font1); - pushButton_change = new QPushButton(scrollAreaWidgetContents); - pushButton_change->setObjectName(QString::fromUtf8("pushButton_change")); - pushButton_change->setGeometry(QRect(290, 370, 111, 41)); - pushButton_change->setFont(font1); - pushButton_statistic = new QPushButton(scrollAreaWidgetContents); - pushButton_statistic->setObjectName(QString::fromUtf8("pushButton_statistic")); - pushButton_statistic->setGeometry(QRect(510, 370, 111, 41)); - pushButton_statistic->setFont(font1); - scrollArea->setWidget(scrollAreaWidgetContents); - lineEdit_gain_3 = new QLineEdit(DialogSetup); - lineEdit_gain_3->setObjectName(QString::fromUtf8("lineEdit_gain_3")); - lineEdit_gain_3->setGeometry(QRect(530, 1190, 91, 31)); - lineEdit_gain_3->setFont(font1); - label_17 = new QLabel(DialogSetup); - label_17->setObjectName(QString::fromUtf8("label_17")); - label_17->setGeometry(QRect(40, 1230, 181, 31)); - label_17->setFont(font1); - label_19 = new QLabel(DialogSetup); - label_19->setObjectName(QString::fromUtf8("label_19")); - label_19->setGeometry(QRect(340, 1190, 181, 31)); - label_19->setFont(font1); - label_18 = new QLabel(DialogSetup); - label_18->setObjectName(QString::fromUtf8("label_18")); - label_18->setGeometry(QRect(40, 1190, 181, 31)); - label_18->setFont(font1); - lineEdit_expo_3 = new QLineEdit(DialogSetup); - lineEdit_expo_3->setObjectName(QString::fromUtf8("lineEdit_expo_3")); - lineEdit_expo_3->setGeometry(QRect(230, 1190, 91, 31)); - lineEdit_expo_3->setFont(font1); - label_20 = new QLabel(DialogSetup); - label_20->setObjectName(QString::fromUtf8("label_20")); - label_20->setGeometry(QRect(340, 1230, 181, 31)); - label_20->setFont(font1); - lineEdit_gain_4 = new QLineEdit(DialogSetup); - lineEdit_gain_4->setObjectName(QString::fromUtf8("lineEdit_gain_4")); - lineEdit_gain_4->setGeometry(QRect(530, 1230, 91, 31)); - lineEdit_gain_4->setFont(font1); - lineEdit_expo_4 = new QLineEdit(DialogSetup); - lineEdit_expo_4->setObjectName(QString::fromUtf8("lineEdit_expo_4")); - lineEdit_expo_4->setGeometry(QRect(230, 1230, 91, 31)); - lineEdit_expo_4->setFont(font1); - lineEdit_filter_4 = new QLineEdit(DialogSetup); - lineEdit_filter_4->setObjectName(QString::fromUtf8("lineEdit_filter_4")); - lineEdit_filter_4->setGeometry(QRect(530, 1560, 91, 31)); - lineEdit_filter_4->setFont(font1); - label_21 = new QLabel(DialogSetup); - label_21->setObjectName(QString::fromUtf8("label_21")); - label_21->setGeometry(QRect(40, 1560, 181, 31)); - label_21->setFont(font1); - lineEdit_filter_3 = new QLineEdit(DialogSetup); - lineEdit_filter_3->setObjectName(QString::fromUtf8("lineEdit_filter_3")); - lineEdit_filter_3->setGeometry(QRect(230, 1560, 91, 31)); - lineEdit_filter_3->setFont(font1); - label_22 = new QLabel(DialogSetup); - label_22->setObjectName(QString::fromUtf8("label_22")); - label_22->setGeometry(QRect(340, 1560, 181, 31)); - label_22->setFont(font1); - - retranslateUi(DialogSetup); - - QMetaObject::connectSlotsByName(DialogSetup); - } // setupUi - - void retranslateUi(QDialog *DialogSetup) - { - DialogSetup->setWindowTitle(QCoreApplication::translate("DialogSetup", "\347\263\273\347\273\237\350\256\276\347\275\256", nullptr)); - groupBox_4->setTitle(QCoreApplication::translate("DialogSetup", "\345\220\257\345\212\250\350\256\276\347\275\256", nullptr)); - checkBox_auto_open->setText(QCoreApplication::translate("DialogSetup", "\350\207\252\345\212\250\346\211\223\345\274\200\346\211\200\346\234\211\347\233\270\346\234\272", nullptr)); - checkBox_auto_work->setText(QCoreApplication::translate("DialogSetup", "\347\250\213\345\272\217\345\220\257\345\212\250\345\220\216\350\207\252\345\212\250\345\274\200\345\247\213\345\267\245\344\275\234", nullptr)); - groupBox_3->setTitle(QCoreApplication::translate("DialogSetup", "\347\256\241\347\220\206\345\221\230\345\257\206\347\240\201\344\277\256\346\224\271", nullptr)); - pushButton_pswd->setText(QCoreApplication::translate("DialogSetup", "\347\241\256\345\256\232", nullptr)); - label_5->setText(QCoreApplication::translate("DialogSetup", "\346\226\260\345\257\206\347\240\201\357\274\232", nullptr)); - lineEdit_confirm->setText(QString()); - lineEdit_new->setText(QString()); - label_6->setText(QCoreApplication::translate("DialogSetup", "\347\241\256\350\256\244\345\257\206\347\240\201\357\274\232", nullptr)); - lineEdit_old->setText(QString()); - label_7->setText(QCoreApplication::translate("DialogSetup", "\345\216\237\345\257\206\347\240\201\357\274\232", nullptr)); - groupBox_5->setTitle(QCoreApplication::translate("DialogSetup", "\347\233\270\346\234\272\345\217\202\346\225\260", nullptr)); - label_8->setText(QCoreApplication::translate("DialogSetup", "1#\347\233\270\346\234\272\346\233\235\345\205\211\346\227\266\351\227\264(\345\276\256\347\247\222)\357\274\232", nullptr)); - lineEdit_expo_1->setText(QString()); - lineEdit_expo_2->setText(QString()); - label_9->setText(QCoreApplication::translate("DialogSetup", "2#\347\233\270\346\234\272\346\233\235\345\205\211\346\227\266\351\227\264(\345\276\256\347\247\222)\357\274\232", nullptr)); - lineEdit_gain_2->setText(QString()); - label_15->setText(QCoreApplication::translate("DialogSetup", "1#\347\233\270\346\234\272\346\250\241\346\213\237\345\242\236\347\233\212(0~64)\357\274\232", nullptr)); - label_16->setText(QCoreApplication::translate("DialogSetup", "2#\347\233\270\346\234\272\346\250\241\346\213\237\345\242\236\347\233\212(0~64)\357\274\232", nullptr)); - lineEdit_gain_1->setText(QString()); - pushButton_expo->setText(QCoreApplication::translate("DialogSetup", "\347\241\256\345\256\232", nullptr)); - groupBox_6->setTitle(QCoreApplication::translate("DialogSetup", "\346\273\244\346\263\242\350\256\276\347\275\256", nullptr)); - label_10->setText(QCoreApplication::translate("DialogSetup", "1#\347\233\270\346\234\272\346\273\244\346\263\242\346\227\266\351\227\264(\345\276\256\347\247\222)\357\274\232", nullptr)); - lineEdit_filter_1->setText(QString()); - lineEdit_filter_2->setText(QString()); - label_11->setText(QCoreApplication::translate("DialogSetup", "2#\347\233\270\346\234\272\346\273\244\346\263\242\346\227\266\351\227\264(\345\276\256\347\247\222)\357\274\232", nullptr)); - pushButton_filter->setText(QCoreApplication::translate("DialogSetup", "\347\241\256\345\256\232", nullptr)); - groupBox->setTitle(QCoreApplication::translate("DialogSetup", "\345\255\230\345\233\276\350\256\276\347\275\256", nullptr)); - radioButton_none->setText(QCoreApplication::translate("DialogSetup", "\344\270\215\345\255\230", nullptr)); - radioButton_ng->setText(QCoreApplication::translate("DialogSetup", "\345\255\230NG", nullptr)); - radioButton_all->setText(QCoreApplication::translate("DialogSetup", "\345\205\250\345\255\230", nullptr)); - pushButton_image->setText(QCoreApplication::translate("DialogSetup", "\347\241\256\345\256\232", nullptr)); - pushButton_save->setText(QCoreApplication::translate("DialogSetup", "\344\277\235\345\255\230\345\217\202\346\225\260", nullptr)); - pushButton_exit->setText(QCoreApplication::translate("DialogSetup", "\351\200\200\345\207\272\347\263\273\347\273\237", nullptr)); - groupBox_7->setTitle(QCoreApplication::translate("DialogSetup", "\346\223\215\344\275\234\345\221\230\345\257\206\347\240\201\344\277\256\346\224\271", nullptr)); - label_12->setText(QCoreApplication::translate("DialogSetup", "\346\226\260\345\257\206\347\240\201\357\274\232", nullptr)); - lineEdit_confirm_op->setText(QString()); - lineEdit_new_op->setText(QString()); - label_13->setText(QCoreApplication::translate("DialogSetup", "\347\241\256\350\256\244\345\257\206\347\240\201\357\274\232", nullptr)); - lineEdit_old_op->setText(QString()); - label_14->setText(QCoreApplication::translate("DialogSetup", "\345\216\237\345\257\206\347\240\201\357\274\232", nullptr)); - pushButton_pswd_op->setText(QCoreApplication::translate("DialogSetup", "\347\241\256\345\256\232", nullptr)); - pushButton_close->setText(QCoreApplication::translate("DialogSetup", "\345\205\263\351\227\255\347\252\227\345\217\243", nullptr)); - pushButton_desktop->setText(QCoreApplication::translate("DialogSetup", "\346\230\276\347\244\272\346\241\214\351\235\242", nullptr)); - toolButton_keyboard->setText(QString()); - label->setText(QCoreApplication::translate("DialogSetup", "\347\263\273\347\273\237\350\256\276\347\275\256", nullptr)); - pushButton_config->setText(QCoreApplication::translate("DialogSetup", "\351\205\215\346\226\271\350\256\276\347\275\256", nullptr)); - pushButton_change->setText(QCoreApplication::translate("DialogSetup", "\346\215\242\347\217\255\350\256\276\347\275\256", nullptr)); - pushButton_statistic->setText(QCoreApplication::translate("DialogSetup", "\344\272\247\351\207\217\347\273\237\350\256\241", nullptr)); - lineEdit_gain_3->setText(QString()); - label_17->setText(QCoreApplication::translate("DialogSetup", "4#\347\233\270\346\234\272\346\233\235\345\205\211\346\227\266\351\227\264(\345\276\256\347\247\222)\357\274\232", nullptr)); - label_19->setText(QCoreApplication::translate("DialogSetup", "3#\347\233\270\346\234\272\346\250\241\346\213\237\345\242\236\347\233\212(0~64)\357\274\232", nullptr)); - label_18->setText(QCoreApplication::translate("DialogSetup", "3#\347\233\270\346\234\272\346\233\235\345\205\211\346\227\266\351\227\264(\345\276\256\347\247\222)\357\274\232", nullptr)); - lineEdit_expo_3->setText(QString()); - label_20->setText(QCoreApplication::translate("DialogSetup", "4#\347\233\270\346\234\272\346\250\241\346\213\237\345\242\236\347\233\212(0~64)\357\274\232", nullptr)); - lineEdit_gain_4->setText(QString()); - lineEdit_expo_4->setText(QString()); - lineEdit_filter_4->setText(QString()); - label_21->setText(QCoreApplication::translate("DialogSetup", "3#\347\233\270\346\234\272\346\273\244\346\263\242\346\227\266\351\227\264(\345\276\256\347\247\222)\357\274\232", nullptr)); - lineEdit_filter_3->setText(QString()); - label_22->setText(QCoreApplication::translate("DialogSetup", "4#\347\233\270\346\234\272\346\273\244\346\263\242\346\227\266\351\227\264(\345\276\256\347\247\222)\357\274\232", nullptr)); - } // retranslateUi - -}; - -namespace Ui { - class DialogSetup: public Ui_DialogSetup {}; -} // namespace Ui - -QT_END_NAMESPACE - -#endif // UI_DIALOGSETUP_H diff --git a/Cigarette/MvIMPACT/apps/Common/ProxyResolverContext.h b/Cigarette/MvIMPACT/apps/Common/ProxyResolverContext.h deleted file mode 100644 index 969ebec2..00000000 --- a/Cigarette/MvIMPACT/apps/Common/ProxyResolverContext.h +++ /dev/null @@ -1,22 +0,0 @@ -//----------------------------------------------------------------------------- -#ifndef ProxyResolverContextH -#define ProxyResolverContextH ProxyResolverContextH -//----------------------------------------------------------------------------- -#include - -//----------------------------------------------------------------------------- -class ProxyResolverContext -//----------------------------------------------------------------------------- -{ - struct ProxyResolverContextImpl* pImpl_; -public: - explicit ProxyResolverContext( const std::wstring& userAgent = std::wstring(), const std::wstring& url = std::wstring() ); - ~ProxyResolverContext(); - - std::wstring GetProxy( unsigned int index ) const; - unsigned int GetProxyPort( unsigned int index ) const; -}; - -bool IsCurrentUserLocalAdministrator( void ); - -#endif // ProxyResolverContextH diff --git a/Cigarette/MvIMPACT/apps/Common/aviexception.h b/Cigarette/MvIMPACT/apps/Common/aviexception.h deleted file mode 100644 index 843a4274..00000000 --- a/Cigarette/MvIMPACT/apps/Common/aviexception.h +++ /dev/null @@ -1,39 +0,0 @@ -//---------------------------------------------------------------------------------------- -#ifndef aviexceptionH -#define aviexceptionH aviexceptionH -//---------------------------------------------------------------------------------------- -#include - -//---------------------------------------------------------------------------------------- -class AVIException -//---------------------------------------------------------------------------------------- -{ -public: - virtual const char* what() const = 0; -}; - -//---------------------------------------------------------------------------------------- -class AEUnsupportedCodec : public AVIException -//---------------------------------------------------------------------------------------- -{ -public: - const char* what() const - { - return "Unsupported codec"; - } -}; - -//---------------------------------------------------------------------------------------- -class AVIWrapperException : public AVIException -//---------------------------------------------------------------------------------------- -{ - std::string m_errorString; -public: - AVIWrapperException( const char* pError ) : m_errorString( pError ) {} - const char* what() const - { - return m_errorString.c_str(); - } -}; - -#endif // aviexceptionH \ No newline at end of file diff --git a/Cigarette/MvIMPACT/apps/Common/mv.ico b/Cigarette/MvIMPACT/apps/Common/mv.ico deleted file mode 100644 index dfe6fae9..00000000 Binary files a/Cigarette/MvIMPACT/apps/Common/mv.ico and /dev/null differ diff --git a/Cigarette/MvIMPACT/apps/Common/qtIncludeEpilogue.h b/Cigarette/MvIMPACT/apps/Common/qtIncludeEpilogue.h deleted file mode 100644 index 98671164..00000000 --- a/Cigarette/MvIMPACT/apps/Common/qtIncludeEpilogue.h +++ /dev/null @@ -1,3 +0,0 @@ -#if defined(_MSC_VER) && (_MSC_VER >= 1400) // is at least VC 2005 compiler? -# pragma warning( pop ) -#endif diff --git a/Cigarette/MvIMPACT/apps/Common/qtIncludePrologue.h b/Cigarette/MvIMPACT/apps/Common/qtIncludePrologue.h deleted file mode 100644 index 18f49bb6..00000000 --- a/Cigarette/MvIMPACT/apps/Common/qtIncludePrologue.h +++ /dev/null @@ -1,7 +0,0 @@ -#if defined(_MSC_VER) && (_MSC_VER >= 1400) // is at least VC 2005 compiler? -# pragma warning( push ) -# pragma warning( disable : 4127 ) // 'conditional expression is constant' -# pragma warning( disable : 4244 ) // 'conversion from 'Bla' to 'Blub', possible loss of data -# pragma warning( disable : 4251 ) // 'class 'Bla' needs to have dll-interface to be used by clients of class 'Blub'' -# pragma warning( disable : 4800 ) // 'int' : forcing value to bool 'true' or 'false' (performance warning) -#endif diff --git a/Cigarette/MvIMPACT/apps/Common/wxIncludeEpilogue.h b/Cigarette/MvIMPACT/apps/Common/wxIncludeEpilogue.h deleted file mode 100644 index a0c3f53f..00000000 --- a/Cigarette/MvIMPACT/apps/Common/wxIncludeEpilogue.h +++ /dev/null @@ -1,5 +0,0 @@ -#if defined(__clang__) -# pragma clang diagnostic pop -#elif defined(_MSC_VER) && (_MSC_VER >= 1400) // is at least VC 2005 compiler? -# pragma warning( pop ) -#endif diff --git a/Cigarette/MvIMPACT/apps/Common/wxIncludePrologue.h b/Cigarette/MvIMPACT/apps/Common/wxIncludePrologue.h deleted file mode 100644 index 082eff55..00000000 --- a/Cigarette/MvIMPACT/apps/Common/wxIncludePrologue.h +++ /dev/null @@ -1,10 +0,0 @@ -#if defined(__clang__) -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wdeprecated-declarations" -# pragma clang diagnostic ignored "-Wunused-local-typedef" -#elif defined(_MSC_VER) && (_MSC_VER >= 1400) // is at least VC 2005 compiler? -# pragma warning( push ) -# pragma warning( disable : 4127 ) // 'conditional expression is constant' -# pragma warning( disable : 4512 ) // 'class XYZ': assignment operator could not be generated' -# pragma warning( disable : 4996 ) // ''function XYZ': was declared deprecated' -#endif diff --git a/Cigarette/MvIMPACT/apps/Common/wxIncluder.h b/Cigarette/MvIMPACT/apps/Common/wxIncluder.h deleted file mode 100644 index 7ebe90db..00000000 --- a/Cigarette/MvIMPACT/apps/Common/wxIncluder.h +++ /dev/null @@ -1,9 +0,0 @@ -//----------------------------------------------------------------------------- -#ifndef wxIncluderH -#define wxIncluderH wxIncluderH -//----------------------------------------------------------------------------- -#include -#include "wx/wx.h" -#include - -#endif // wxIncluderH diff --git a/Cigarette/MvIMPACT/common/System/win32/common.rc2 b/Cigarette/MvIMPACT/common/System/win32/common.rc2 deleted file mode 100644 index fd9c0a39..00000000 --- a/Cigarette/MvIMPACT/common/System/win32/common.rc2 +++ /dev/null @@ -1,105 +0,0 @@ -// This file will be included from the resource files of the individual libraries belonging to -// the current release version of the mvIMPACT Acquire driver packages - - -// Microsoft Visual C++ generated resource script. -// -#include "resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "afxres.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// English (U.S.) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -#ifdef _WIN32 -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -#pragma code_page(1252) -#endif //_WIN32 - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -VS_VERSION_INFO VERSIONINFO - FILEVERSION 2,43,0,3180 - PRODUCTVERSION 2,43,0,3180 - FILEFLAGSMASK 0x17L -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x4L - FILETYPE 0x2L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "080904b0" - BEGIN - VALUE "CompanyName", "MATRIX VISION GmbH" - VALUE "FileDescription", FILE_DESCRIPTION - VALUE "FileVersion", "2, 43, 0, 3180" - VALUE "InternalName", INTERNAL_NAME - VALUE "LegalCopyright", " 2005 - 2021 MATRIX VISION GmbH, Germany" - VALUE "OriginalFilename", ORIGINAL_FILENAME - VALUE "ProductName", PRODUCT_NAME - VALUE "ProductVersion", "2, 43, 0, 3180" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x809, 1200 - END -END - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "resource.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#include ""afxres.h""\r\n" - "\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - -#endif // English (U.S.) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - diff --git a/Cigarette/alg_jd.h b/Cigarette/alg_jd.h deleted file mode 100644 index ac12df23..00000000 --- a/Cigarette/alg_jd.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef _CIGARETTE_JD -#define _CIGARETTE_JD - -#include -#include -#include -#include -#include -#include -#include - -class AlgJd -{ - public: - bool init(); - bool test_detect(); - bool test_detect_batcht(int shoot); - int detect(cv::Mat& in, cv::Mat &out, std::vector > &results); - void detect_batch(std::vector& vec_in, std::vector &vec_out, std::vector > > &vec_results); - private: - cv::dnn::Net net; -}; - -#endif //end of _CIGARETTE_JD diff --git a/Cigarette/camera_glue.cpp b/Cigarette/camera_glue.cpp deleted file mode 100644 index 1e27d430..00000000 --- a/Cigarette/camera_glue.cpp +++ /dev/null @@ -1,50 +0,0 @@ -#include "camera_glue.h" - -camera_glue::camera_glue(QDialog *parent) - : QDialog(parent) -{ - ui.setupUi(this); - this->setWindowFlags(windowFlags()&~Qt::WindowContextHelpButtonHint); -#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>0) - spinBox[0][0] = ui.spinBox_11; - spinBox[0][1] = ui.spinBox_12; - spinBox[0][2] = ui.spinBox_13; -#endif -#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>1) - spinBox[1][0] = ui.spinBox_21; - spinBox[1][1] = ui.spinBox_22; - spinBox[1][2] = ui.spinBox_23; -#endif -#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>2) - spinBox[2][0] = ui.spinBox_31; - spinBox[2][1] = ui.spinBox_32; - spinBox[2][2] = ui.spinBox_33; -#endif -#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>3) - spinBox[3][0] = ui.spinBox_41; - spinBox[3][1] = ui.spinBox_42; - spinBox[3][2] = ui.spinBox_43; -#endif -} - -camera_glue::~camera_glue() -{ - -} - -void camera_glue::recMsgFromDialogSetup(int ptr[][3]) -{ - for(int i=0;isetValue(ptr[i][j]); -} - -void camera_glue::on_pushButton_take_released(void) -{ - int mat[NumberOfSupportedCameras][3]; - for(int i=0;ivalue(); - emit sendMsgToDialogSetup(mat); - this->close(); -} \ No newline at end of file diff --git a/Cigarette/change_shift.cpp b/Cigarette/change_shift.cpp deleted file mode 100644 index 7069aa69..00000000 --- a/Cigarette/change_shift.cpp +++ /dev/null @@ -1,38 +0,0 @@ -#include "change_shift.h" - -change_shift::change_shift(QDialog *parent) - : QDialog(parent) -{ - ui.setupUi(this); - this->setWindowFlags(windowFlags()&~Qt::WindowContextHelpButtonHint); -} - -change_shift::~change_shift() -{ -} - -void change_shift::on_pushButton_released() -{ - QTime timeA; - QTime timeB; - QTime timeC; - timeA.setHMS(ui.A_hour->text().toInt(), ui.A_minute->text().toInt(), 0); - timeB.setHMS(ui.B_hour->text().toInt(), ui.B_minute->text().toInt(), 0); - timeC.setHMS(ui.C_hour->text().toInt(), ui.C_minute->text().toInt(), 0); - emit sendMsgToDialogSetup(timeA, timeB, timeC); - this->close(); -} - -void change_shift::recMsgFromDialogSetup(QTime timeA, QTime timeB, QTime timeC) -{ - ui.A_hour->setValue(timeA.hour()); - ui.A_minute->setValue(timeA.minute()); - - ui.B_hour->setValue(timeB.hour()); - ui.B_minute->setValue(timeB.minute()); - - ui.C_hour->setValue(timeC.hour()); - ui.C_minute->setValue(timeC.minute()); - - this->show(); -} \ No newline at end of file diff --git a/Cigarette/change_shift.ui b/Cigarette/change_shift.ui deleted file mode 100644 index 84553355..00000000 --- a/Cigarette/change_shift.ui +++ /dev/null @@ -1,241 +0,0 @@ - - - change_shift - - - - 0 - 0 - 397 - 255 - - - - 换班设置 - - - - - 130 - 50 - 42 - 22 - - - - 23 - - - - - - 210 - 50 - 61 - 22 - - - - 59 - - - - - - 90 - 50 - 31 - 21 - - - - A班 - - - - - - 180 - 50 - 31 - 20 - - - - - - - - - - 280 - 50 - 54 - 21 - - - - - - - - - - 180 - 90 - 31 - 20 - - - - - - - - - - 210 - 90 - 61 - 22 - - - - 59 - - - - - - 280 - 90 - 54 - 21 - - - - - - - - - - 90 - 90 - 31 - 21 - - - - B班 - - - - - - 130 - 90 - 42 - 22 - - - - 23 - - - - - - 180 - 130 - 31 - 20 - - - - - - - - - - 210 - 130 - 61 - 22 - - - - 59 - - - - - - 280 - 130 - 54 - 21 - - - - - - - - - - 90 - 130 - 31 - 21 - - - - C班 - - - - - - 130 - 130 - 42 - 22 - - - - 23 - - - - - - 140 - 210 - 111 - 31 - - - - 应用 - - - - - - 100 - 180 - 241 - 21 - - - - 若要保存参数请返回上一级点击保存 - - - - - - - diff --git a/Cigarette/cigarette.ui b/Cigarette/cigarette.ui deleted file mode 100644 index 69cea5e8..00000000 --- a/Cigarette/cigarette.ui +++ /dev/null @@ -1,2856 +0,0 @@ - - - CigaretteClass - - - - 0 - 0 - 1600 - 900 - - - - Cigarette - - - background-color: rgb(55, 55, 55); - - - - - - 570 - 10 - 501 - 51 - - - - - 微软雅黑 - 30 - - - - background-color: rgb(255, 255, 0); - - - 条盒胶点检测系统 - - - Qt::AlignCenter - - - - - - 10 - 80 - 171 - 221 - - - - - 微软雅黑 - 14 - 75 - true - - - - color:white - - - 操作区 - - - - - 10 - 24 - 72 - 96 - - - - border-image: url(:/Cigarette/Resources/start.png); - - - - - - false - - - - - - 95 - 24 - 72 - 96 - - - - border-image: url(:/Cigarette/Resources/pause.png); - - - - - - - false - - - - - - 10 - 120 - 72 - 96 - - - - border-image: url(:/Cigarette/Resources/unlock.png); - - - - - - false - - - - - - 90 - 120 - 72 - 96 - - - - border-image: url(:/Cigarette/Resources/setup.png); - - - - - - - false - - - - - - - 10 - 310 - 171 - 501 - - - - - 微软雅黑 - 14 - 75 - true - - - - color:white - - - 设备区 - - - - - 10 - 130 - 71 - 31 - - - - - 微软雅黑 - 18 - 75 - true - - - - background-color: rgb(255, 255, 0); - - - 联机 - - - Qt::AlignCenter - - - - - - 10 - 40 - 71 - 71 - - - - border-image: url(:/Cigarette/Resources/cam1_no.png); - - - - - - - - - 95 - 40 - 71 - 71 - - - - border-image: url(:/Cigarette/Resources/cam2_no.png); - - - - - - - - - 95 - 130 - 71 - 31 - - - - - 微软雅黑 - 18 - 75 - true - - - - background-color: rgb(255, 255, 0); - - - 联机 - - - Qt::AlignCenter - - - - - - 95 - 180 - 71 - 31 - - - - - 微软雅黑 - 18 - 75 - true - - - - background-color: rgb(255, 255, 0); - - - 工作 - - - Qt::AlignCenter - - - - - - 10 - 180 - 71 - 31 - - - - - 微软雅黑 - 18 - 75 - true - - - - background-color: rgb(255, 255, 0); - - - 工作 - - - Qt::AlignCenter - - - - - - 10 - 390 - 101 - 21 - - - - - 微软雅黑 - 12 - 75 - true - - - - color:white - - - 调试模式 - - - - - - 10 - 420 - 81 - 21 - - - - - 微软雅黑 - 12 - 75 - true - - - - color:white - - - 不剔除 - - - - - - 10 - 740 - 71 - 31 - - - - - 微软雅黑 - 18 - 75 - true - - - - background-color: rgb(255, 255, 0); - - - 工作 - - - Qt::AlignCenter - - - - - - 90 - 1155 - 71 - 31 - - - - - 微软雅黑 - 18 - 75 - true - - - - background-color: rgb(255, 255, 0); - - - 联机 - - - Qt::AlignCenter - - - - - - 10 - 615 - 72 - 72 - - - - border-image: url(:/Cigarette/Resources/cam3_no.png); - - - - - - - - - 90 - 1190 - 71 - 31 - - - - - 微软雅黑 - 18 - 75 - true - - - - background-color: rgb(255, 255, 0); - - - 工作 - - - Qt::AlignCenter - - - - - - 90 - 1065 - 72 - 72 - - - - border-image: url(:/Cigarette/Resources/cam4_no.png); - - - - - - - - - 10 - 705 - 71 - 31 - - - - - 微软雅黑 - 18 - 75 - true - - - - background-color: rgb(255, 255, 0); - - - 联机 - - - Qt::AlignCenter - - - - - - 10 - 445 - 101 - 51 - - - - - - - - - 255 - 255 - 255 - - - - - - - 55 - 55 - 55 - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - 55 - 55 - 55 - - - - - - - 55 - 55 - 55 - - - - - - - 255 - 255 - 255 - - - - - - - - - 255 - 255 - 255 - - - - - - - 55 - 55 - 55 - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - 55 - 55 - 55 - - - - - - - 55 - 55 - 55 - - - - - - - 255 - 255 - 255 - - - - - - - - - 255 - 255 - 255 - - - - - - - 55 - 55 - 55 - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - 55 - 55 - 55 - - - - - - - 55 - 55 - 55 - - - - - - - 0 - 0 - 0 - - - - - - - - - 微软雅黑 - 16 - - - - 清理图片 - - - - - - - 10 - 822 - 1581 - 71 - - - - - 微软雅黑 - 12 - 75 - true - - - - - - - - - 1200 - 10 - 111 - 51 - - - - - 微软雅黑 - 16 - 50 - false - - - - color:white - - - 无报警 - - - Qt::AlignCenter - - - - - - 480 - 10 - 61 - 51 - - - - - 微软雅黑 - 16 - 75 - true - - - - color:white - - - 当班 - - - - - - 930 - 10 - 101 - 51 - - - - - 微软雅黑 - 16 - 50 - false - - - - color:white - - - PLC正常 - - - Qt::AlignCenter - - - - - - 550 - 10 - 191 - 51 - - - - color:white - - - 8 - - - - - - 1135 - 10 - 51 - 51 - - - - border-image: url(:/Cigarette/Resources/alarm.png); - - - - - - - - - 840 - 10 - 81 - 51 - - - - border-image: url(:/Cigarette/Resources/plc.png); - - - - - - - - - 750 - 10 - 71 - 51 - - - - - 微软雅黑 - 16 - - - - color:white - - - 换班 - - - - - - 1320 - 15 - 251 - 40 - - - - - 微软雅黑 - 16 - - - - color:white - - - 运行1年10月25天9时15分 - - - Qt::AlignCenter - - - - - - 10 - 10 - 101 - 51 - - - - - 微软雅黑 - 16 - 75 - true - - - - color:white - - - 登陆用户: - - - Qt::AlignCenter - - - - - - 120 - 10 - 91 - 51 - - - - - 微软雅黑 - 16 - 50 - false - - - - color:white - - - 操作员 - - - - - - 230 - 10 - 61 - 51 - - - - - 微软雅黑 - 16 - 75 - true - - - - color:white - - - 上班 - - - - - - 290 - 10 - 191 - 51 - - - - color:white - - - 8 - - - - - - 1050 - 10 - 71 - 51 - - - - - 微软雅黑 - 16 - - - - color:white - - - 复位 - - - - - - - 910 - 710 - 91 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - color:white - - - 2#剔除次数 - - - - - - 1250 - 710 - 101 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - color:white - - - 2#NG次数 - - - - - - 1380 - 660 - 201 - 41 - - - - color:white - - - 10 - - - - - - 1030 - 710 - 201 - 41 - - - - color:white - - - 10 - - - - - - 910 - 660 - 91 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - color:white - - - 2#检测个数 - - - - - - 1250 - 660 - 101 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - color:white - - - 2#OK次数 - - - - - - 890 - 90 - 691 - 551 - - - - background-color: rgb(0, 0, 0); - - - - - - - - - 1030 - 655 - 201 - 41 - - - - color:white - - - 10 - - - - - - 1230 - 100 - 20 - 20 - - - - border-image: url(:/Cigarette/Resources/rotate.png) - - - ... - - - - Resources/rotate.pngResources/rotate.png - - - - 40 - 40 - - - - - - - 190 - 90 - 691 - 551 - - - - background-color: rgb(0, 0, 0); - - - - - - - - - 1380 - 710 - 201 - 41 - - - - color:white - - - 10 - - - - - - 600 - 1300 - 131 - 41 - - - - color:white - - - 10 - - - - - - 1060 - 1350 - 71 - 31 - - - - - 微软雅黑 - 10 - 75 - true - - - - color:white - - - 4#OK次数 - - - - - - 190 - 1290 - 321 - 261 - - - - background-color: rgb(0, 0, 0); - - - - - - - - - 520 - 1350 - 71 - 31 - - - - - 微软雅黑 - 10 - 75 - true - - - - color:white - - - 3#OK次数 - - - - - - 732 - 1290 - 321 - 261 - - - - background-color: rgb(0, 0, 0); - - - - - - - - - 520 - 1450 - 71 - 31 - - - - - 微软雅黑 - 10 - 75 - true - - - - color:white - - - 3#剔除次数 - - - - - - 1140 - 1450 - 131 - 41 - - - - color:white - - - 10 - - - - - - 1060 - 1400 - 71 - 31 - - - - - 微软雅黑 - 10 - 75 - true - - - - color:white - - - 4#NG次数 - - - - - - 1060 - 1450 - 71 - 31 - - - - - 微软雅黑 - 10 - 75 - true - - - - color:white - - - 4#剔除次数 - - - - - - 600 - 1450 - 131 - 41 - - - - color:white - - - 10 - - - - - - 490 - 1300 - 20 - 20 - - - - Qt::ClickFocus - - - false - - - border-image: url(:/Cigarette/Resources/rotate.png) - - - ... - - - - Resources/rotate.pngResources/rotate.png - - - - 40 - 40 - - - - - - - 600 - 1350 - 131 - 41 - - - - color:white - - - 10 - - - - - - 1030 - 1300 - 20 - 20 - - - - Qt::ClickFocus - - - false - - - border-image: url(:/Cigarette/Resources/rotate.png) - - - ... - - - - Resources/rotate.pngResources/rotate.png - - - - 40 - 40 - - - - - - - 600 - 1400 - 131 - 41 - - - - color:white - - - 10 - - - - - - 520 - 1400 - 71 - 31 - - - - - 微软雅黑 - 10 - 75 - true - - - - color:white - - - 3#NG次数 - - - - - - 1140 - 1400 - 131 - 41 - - - - color:white - - - 10 - - - - - - 1060 - 1305 - 71 - 31 - - - - - 微软雅黑 - 10 - 75 - true - - - - color:white - - - 4#检测个数 - - - - - - 1140 - 1300 - 131 - 41 - - - - color:white - - - 10 - - - - - - 1140 - 1350 - 131 - 41 - - - - color:white - - - 10 - - - - - - 520 - 1305 - 71 - 31 - - - - - 微软雅黑 - 10 - 75 - true - - - - color:white - - - 3#检测个数 - - - - - - 732 - 1550 - 541 - 61 - - - - - 微软雅黑 - 14 - - - - color:white - - - 4#相机分析结果 - - - - - 10 - 30 - 71 - 21 - - - - - 微软雅黑 - 11 - - - - 采集速度: - - - - - - 80 - 30 - 71 - 21 - - - - - 微软雅黑 - 11 - - - - - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - 450 - 20 - 81 - 31 - - - - - SimSun - 18 - 75 - true - - - - background-color: rgb(0, 255, 0); - - - OK - - - Qt::AlignCenter - - - - - - 300 - 30 - 71 - 21 - - - - - 微软雅黑 - 11 - - - - 识别时间: - - - - - - 160 - 30 - 71 - 21 - - - - - 微软雅黑 - 11 - - - - 胶点个数: - - - - - - 370 - 30 - 50 - 20 - - - - - 微软雅黑 - 11 - - - - - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - 230 - 30 - 60 - 21 - - - - - 微软雅黑 - 11 - - - - - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - label_40 - label_cap_speed_4 - label_27 - label_28 - label_timecost_4 - label_jd_no_4 - label_reslut_4 - - - - - 190 - 1550 - 540 - 61 - - - - - 微软雅黑 - 14 - - - - color:white - - - 3#相机分析结果 - - - - - 10 - 30 - 71 - 21 - - - - - 微软雅黑 - 11 - - - - 采集速度: - - - - - - 80 - 30 - 71 - 21 - - - - - 微软雅黑 - 11 - - - - - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - 230 - 30 - 60 - 21 - - - - - 微软雅黑 - 11 - - - - - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - 160 - 30 - 71 - 21 - - - - - 微软雅黑 - 11 - - - - 胶点个数: - - - - - - 300 - 30 - 71 - 21 - - - - - 微软雅黑 - 11 - - - - 识别时间: - - - - - - 370 - 30 - 50 - 20 - - - - - 微软雅黑 - 11 - - - - - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - 450 - 20 - 81 - 31 - - - - - SimSun - 18 - 75 - true - - - - background-color: rgb(0, 255, 0); - - - OK - - - Qt::AlignCenter - - - - - - - 190 - 750 - 691 - 61 - - - - - 微软雅黑 - 14 - - - - color:white - - - 1#相机分析结果 - - - - - 10 - 30 - 91 - 21 - - - - - 微软雅黑 - 13 - - - - 采集速度: - - - - - - 80 - 30 - 71 - 21 - - - - - 微软雅黑 - 13 - - - - - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - 300 - 30 - 71 - 21 - - - - - 微软雅黑 - 13 - - - - - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - 210 - 30 - 81 - 21 - - - - - 微软雅黑 - 13 - - - - 胶点个数: - - - - - - 390 - 30 - 81 - 21 - - - - - 微软雅黑 - 13 - - - - 识别时间: - - - - - - 460 - 30 - 71 - 20 - - - - - 微软雅黑 - 13 - - - - - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - 560 - 20 - 101 - 31 - - - - - SimSun - 18 - 75 - true - - - - background-color: rgb(0, 255, 0); - - - OK - - - Qt::AlignCenter - - - - - - - 892 - 750 - 696 - 61 - - - - - 微软雅黑 - 14 - - - - color:white - - - 2#相机分析结果 - - - - - 10 - 30 - 81 - 21 - - - - - 微软雅黑 - 13 - - - - 采集速度: - - - - - - 80 - 30 - 71 - 21 - - - - - 微软雅黑 - 13 - - - - - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - 310 - 30 - 71 - 21 - - - - - 微软雅黑 - 13 - true - - - - - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - 570 - 20 - 101 - 31 - - - - - SimSun - 18 - 75 - true - - - - background-color: rgb(0, 255, 0); - - - OK - - - Qt::AlignCenter - - - - - - 390 - 30 - 81 - 21 - - - - - 微软雅黑 - 13 - - - - 识别时间: - - - - - - 220 - 30 - 81 - 21 - - - - - 微软雅黑 - 13 - - - - 胶点个数: - - - - - - 480 - 30 - 71 - 20 - - - - - 微软雅黑 - 13 - - - - - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - label_33 - label_cap_speed_2 - label_jd_no_2 - label_24 - label_25 - label_timecost_2 - label_reslut_2 - - - - - 680 - 660 - 201 - 41 - - - - color:white - - - 10 - - - - - - 200 - 665 - 91 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - color:white - - - 1#检测个数 - - - - - - 550 - 660 - 101 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - color:white - - - 1#OK次数 - - - - - - 320 - 660 - 201 - 41 - - - - color:white - - - 10 - - - - - - 680 - 710 - 201 - 41 - - - - color:white - - - 10 - - - - - - 550 - 710 - 101 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - color:white - - - 1#NG次数 - - - - - - 200 - 710 - 91 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - color:white - - - 1#剔除次数 - - - - - - 320 - 710 - 201 - 41 - - - - color:white - - - 10 - - - - - - 690 - 100 - 20 - 20 - - - - Qt::ClickFocus - - - false - - - border-image: url(:/Cigarette/Resources/rotate.png) - - - ... - - - - Resources/rotate.pngResources/rotate.png - - - - 40 - 40 - - - - - - - 61 - 40 - 241 - 21 - - - - - 宋体 - 10 - - - - color:white - - - SHANGHAI TOBACCO MACHINERY CO.,LTD - - - Qt::AlignCenter - - - - - - 60 - 16 - 241 - 21 - - - - - 黑体 - 15 - - - - color:white - - - 上海烟草机械有限责任公司 - - - Qt::AlignCenter - - - - - - 0 - 10 - 61 - 51 - - - - border-image: url(:/Cigarette/Resources/logo.png) - - - - - - - - - 1310 - 10 - 161 - 21 - - - - - 微软雅黑 - 14 - 50 - false - - - - color:white - - - Tel:87907256(0532) - - - - - - 1480 - 10 - 81 - 21 - - - - - 微软雅黑 - 14 - 50 - false - - - - color:white - - - 青岛维克 - - - - - - 1370 - 40 - 191 - 31 - - - - - 微软雅黑 - 14 - 50 - false - - - - color:white - - - 2020-10-10 13:15:39 - - - Qt::AlignCenter - - - - - - 360 - 1320 - 161 - 251 - - - - background-color: rgb(0, 0, 0); - - - - - - - - - 900 - 1320 - 161 - 251 - - - - background-color: rgb(0, 0, 0); - - - - - - - - - 360 - 1650 - 161 - 251 - - - - background-color: rgb(0, 0, 0); - - - - - - - - - 900 - 1650 - 161 - 251 - - - - background-color: rgb(0, 0, 0); - - - - - - - - - 20 - 540 - 151 - 151 - - - - - 微软雅黑 - 30 - - - - background-color: rgb(255, 255, 0); - - - 运行中 - - - Qt::AlignCenter - - - rotate_2 - rotate_1 - groupBox_status - label_title - groupBox_op - groupBox_dev - label_11 - label_ng_2 - lcdNumber_ok_2 - lcdNumber_kick_2 - label_6 - label_10 - image_label_21 - lcdNumber_total_2 - image_label_11 - lcdNumber_ng_2 - lcdNumber_total_3 - label_14 - image_label_31 - label_3 - image_label_41 - label_9 - lcdNumber_kick_4 - label_ng_4 - label_13 - lcdNumber_kick_3 - lcdNumber_ok_3 - lcdNumber_ng_3 - label_ng_3 - lcdNumber_ng_4 - label_15 - lcdNumber_total_4 - lcdNumber_ok_4 - label_7 - groupBox_13 - groupBox_11 - groupBox_a - groupBox_b - lcdNumber_ok_1 - label - label_2 - lcdNumber_total_1 - lcdNumber_ng_1 - label_ng_1 - label_4 - lcdNumber_kick_1 - label_title_7 - label_title_6 - toolButton_4 - label_17 - label_18 - label_cur_time - image_label_12 - image_label_22 - image_label_32 - rotate_3 - image_label_42 - rotate_4 - label_title_2 - - - - - - db_label - QLabel -
db_label.h
-
-
- - - - -
diff --git a/Cigarette/common.cpp b/Cigarette/common.cpp deleted file mode 100644 index cb929ad5..00000000 --- a/Cigarette/common.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#include "common.h" -#include -#include "stdarg.h" -int string_split(std::string str, std::string pattern,std::vector &out) -{ - std::string::size_type pos; - int cnt = 0; - str += pattern; - int size = str.size(); - - for (int i = 0; i chars(nLength); - _vsnprintf(chars.data(), nLength, pszFmt, args); - str.assign(chars.data()); - } - va_end(args); - return str; -} \ No newline at end of file diff --git a/Cigarette/common.h b/Cigarette/common.h deleted file mode 100644 index 6f8d5b20..00000000 --- a/Cigarette/common.h +++ /dev/null @@ -1,122 +0,0 @@ -#pragma once - -#include -#include -#include "basecamera.h" -#include -#include "QtCore\qdatetime.h" - -//#define __DEBUG //debugϢ -//#define __UDPSend //緢͹E -#define USB_BASLER_NEW_FW //ʹbaslerƹ̼ -//#define IMM_PROCESS //պУź -#define IMM_FEED_BACK //Уź -//#define ONE_TIME_SHIFT //һķͷ(Ĭϴ) -#define AI_WARM_UP //AIʶʼǰ -//#define LICENSE_VERIFY //licenseļУ -//CAP_FEED_BACKDOUBLE_FEED_BACKҪһ -#if defined (ONE_TIME_SHIFT) - //#define CAP_FEED_BACK //ʱҲûвԽеĻͷ - //#define DOUBLE_FEED_BACK //һngηngź -#endif - -#define Queue_Size 15 -#define Unit_Queue_Size Queue_Size*3 -#define StrobeLineTime 10000 - -#ifdef __DEBUG -#define DEBUG(format, ...) printf (format, ##__VA_ARGS__) -#else -#define DEBUG(format, ...) -#endif - -int string_split(std::string str, std::string pattern,std::vector &out); -std::string format(const char *pszFmt, ...); -class SysConf -{ -public: - std::mutex lock; - int save; //ͼƬǷ񱣴棬0棬1NG, 2ȫ - int MisMatchAct; //λΪ1NG,0ok - int save_days; ///Ƭ - int auto_open; //ǷԶ01 - int auto_work; //ǷԶʼ01 - int auto_shift; //ǷԶ࣬01 - QTime shiftA; //Aʱ - QTime shiftB; //Bʱ - QTime shiftC; //Cʱ - int timing_shift; //Ƿʱ࣬01 - int expo[NumberOfSupportedCameras]; //عʱ䣬λ΢ - int gain[NumberOfSupportedCameras]; //ģ棬Χ0~64 - int filter[NumberOfSupportedCameras];//˲ʱ - int UserID[NumberOfSupportedCameras]; - int no[NumberOfSupportedCameras][3];//ͼƬٺϸ񽺵 - int shoot[NumberOfSupportedCameras];// - std::string MonitorIP; //Զ̼ض˵IP - int MonitorPort; - int FeedbackPort; - int FilePort; - //MonitorPortΪݶ˿ - //MonitorPort+NumberOfSupportedCamerasΪͼ˿ - //MonitorPort+NumberOfSupportedCameras*2Ϊ˿,ҲFeedbackPort - //MonitorPort+NumberOfSupportedCameras*2+1Ϊ˿ - - SysConf() - { - save=0; //ͼƬǷ񱣴棬0棬1NG, 2ȫ - MisMatchAct=1; //λΪ1NG,0ok - save_days = 1; ///Ƭ - auto_open=1; //ǷԶ01 - auto_work=1; //ǷԶʼ01 - auto_shift=1; //ǷԶ࣬01 - timing_shift=0; //Ƿʱ࣬01 - shiftA.setHMS(0, 0, 0); - shiftB.setHMS(0, 0, 0); - shiftC.setHMS(0, 0, 0); - for(int i=0;i -#include -#include - -class db_label : public QLabel -{ - Q_OBJECT - -public: - db_label(QWidget *parent = 0); - ~db_label(); - void mouseDoubleClickEvent(QMouseEvent *event); - void mousePressEvent(QMouseEvent* event); -public: - QTimer timer; -signals: - void QlabelDoubleClick(); - void QlabelClick(); -private slots: - void singleClick(); -}; - -#endif // QLABEL_DOUBLECLICK_H_ \ No newline at end of file diff --git a/Cigarette/dialogsetup.cpp b/Cigarette/dialogsetup.cpp deleted file mode 100644 index 7a76692a..00000000 --- a/Cigarette/dialogsetup.cpp +++ /dev/null @@ -1,459 +0,0 @@ -#include "dialogsetup.hpp" -#include -#include -#include -#include -#include -#include "common.h" -#include -#include -#include "basecamera.h" -#include //用于显示桌面 -#include //用于显示桌面 - -extern SysConf g_sys_conf; //系统配置参数 -extern QString g_admin_pswd; //管理员密码 - -extern QString g_op_pswd; //操作员密码 - -void task_osk() -{ - system("start /b C:\\Windows\\system32\\osk.exe"); -} - -DialogSetup::DialogSetup(QWidget * parent) : QDialog(parent) { - ui.setupUi(this); - InitPtrMat(); - this->setWindowFlags(Qt::FramelessWindowHint); - - for(int i=0;isetValidator(new QIntValidator(0, 1000000, this)); - lineEdit_expo_mat[i]->setText(QString::number(g_sys_conf.expo[i])); - lineEdit_gain_mat[i]->setValidator(new QIntValidator(0, 64, this)); - lineEdit_gain_mat[i]->setText(QString::number(g_sys_conf.gain[i])); - lineEdit_filter_mat[i]->setValidator(new QIntValidator(0, 1000000, this)); - lineEdit_filter_mat[i]->setText(QString::number(g_sys_conf.filter[i])); - } - - if (g_sys_conf.auto_open == 1) - { - ui.checkBox_auto_open->setChecked(true); - } - else { - ui.checkBox_auto_open->setChecked(false); - } - if (g_sys_conf.auto_work == 1) - { - ui.checkBox_auto_work->setChecked(true); - } - else { - ui.checkBox_auto_work->setChecked(false); - } - - // - switch (g_sys_conf.save) - { - case 0: - ui.radioButton_none->setChecked(true); - break; - case 1: - ui.radioButton_ng->setChecked(true); - break; - case 2: - ui.radioButton_all->setChecked(true); - break; - default: - break; - } - // -} - -DialogSetup::~DialogSetup() { - -} - -void DialogSetup::on_toolButton_keyboard_released() -{ - std::thread osk_thread = std::thread(task_osk); - osk_thread.detach(); -} -void DialogSetup::on_pushButton_exit_released() -{ - if (QMessageBox::Yes == QMessageBox::critical(NULL, QStringLiteral("退出系统"), QStringLiteral("确定退出系统?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes)) - { - emit system_exit(); - this->close(); - } -} - -void DialogSetup::on_pushButton_desktop_released() -{ - CoInitialize(0); - IShellDispatch4 * pdisp = NULL; - CoCreateInstance(CLSID_Shell, NULL, CLSCTX_ALL, __uuidof(IShellDispatch4), (void **)&pdisp); - pdisp->ToggleDesktop(); // 这句是用来切换桌面的 - pdisp->Release(); - CoUninitialize(); -} - -void DialogSetup::on_pushButton_expo_released() -{ - for(int i=0;itext()).toInt(); - g_sys_conf.gain[i] = (lineEdit_gain_mat[i]->text()).toInt(); - } - QMessageBox::information(NULL, QStringLiteral("提示"), QStringLiteral("设置成功"), QMessageBox::Ok); -} - -void DialogSetup::on_checkBox_auto_open_clicked(bool checked) -{ - if (checked) - { - g_sys_conf.auto_open = 1; - } - else - { - g_sys_conf.auto_open = 0; - } -} - -void DialogSetup::on_checkBox_auto_work_clicked(bool checked) -{ - if (checked) - { - g_sys_conf.auto_work = 1; - } - else - { - g_sys_conf.auto_work = 0; - } -} - -void DialogSetup::on_pushButton_filter_released() -{ - for(int i=0;itext()).toInt(); - } - QMessageBox::information(NULL, QStringLiteral("提示"), QStringLiteral("设置成功"), QMessageBox::Ok); -} - -void DialogSetup::on_pushButton_image_released() -{ - if (ui.radioButton_none->isChecked()) - { - g_sys_conf.save = 0; - } - if (ui.radioButton_ng->isChecked()) - { - g_sys_conf.save = 1; - } - if (ui.radioButton_all->isChecked()) - { - g_sys_conf.save = 2; - } - QMessageBox::information(NULL, QStringLiteral("提示"), QStringLiteral("设置成功"), QMessageBox::Ok); -} - -void DialogSetup::on_pushButton_pswd_released() -{ - QString md5Str = QCryptographicHash::hash((ui.lineEdit_old->text()).toLatin1(), QCryptographicHash::Md5).toHex(); - if (md5Str.compare(g_admin_pswd, Qt::CaseInsensitive) == 0) - { - QString pswd_new = ui.lineEdit_new->text(); - QString pswd_confirm = ui.lineEdit_confirm->text(); - if (pswd_new.compare(pswd_confirm, Qt::CaseInsensitive) == 0) - { - g_admin_pswd = QCryptographicHash::hash(pswd_new.toLatin1(), QCryptographicHash::Md5).toHex(); - write_pswd(); - QMessageBox::information(NULL, QStringLiteral("提示"), QStringLiteral("管理员密码修改成功"), QMessageBox::Ok); - } - else { - QMessageBox::information(NULL, QStringLiteral("提示消息"), QStringLiteral("新密码两次输入不一致,请重新输入"), QMessageBox::Ok); - } - } - else { - QMessageBox::information(NULL, QStringLiteral("提示消息"), QStringLiteral("原密码错误,请重新输入"), QMessageBox::Ok); - } -} -void DialogSetup::on_pushButton_pswd_op_released() -{ - QString md5Str = QCryptographicHash::hash((ui.lineEdit_old_op->text()).toLatin1(), QCryptographicHash::Md5).toHex(); - if (md5Str.compare(g_op_pswd, Qt::CaseInsensitive) == 0) - { - QString pswd_new = ui.lineEdit_new_op->text(); - QString pswd_confirm = ui.lineEdit_confirm_op->text(); - if (pswd_new.compare(pswd_confirm, Qt::CaseInsensitive) == 0) - { - g_op_pswd = QCryptographicHash::hash(pswd_new.toLatin1(), QCryptographicHash::Md5).toHex(); - write_pswd_op(); - QMessageBox::information(NULL, QStringLiteral("提示"), QStringLiteral("操作员密码修改成功"), QMessageBox::Ok); - } - else { - QMessageBox::information(NULL, QStringLiteral("提示消息"), QStringLiteral("新密码两次输入不一致,请重新输入"), QMessageBox::Ok); - } - } - else { - QMessageBox::information(NULL, QStringLiteral("提示消息"), QStringLiteral("原密码错误,请重新输入"), QMessageBox::Ok); - } -} -void DialogSetup::on_pushButton_save_released() -{ - //存图设置 - if (ui.radioButton_none->isChecked()) - { - g_sys_conf.save = 0; - } - if (ui.radioButton_ng->isChecked()) - { - g_sys_conf.save = 1; - } - if (ui.radioButton_all->isChecked()) - { - g_sys_conf.save = 2; - } - for(int i=0;itext()).toInt(); - g_sys_conf.gain[i] = (lineEdit_gain_mat[i]->text()).toInt(); - g_sys_conf.filter[i] = (lineEdit_filter_mat[i]->text()).toInt(); - } - write_config(); - QMessageBox::information(NULL, QStringLiteral("提示"), QStringLiteral("保存参数成功,部分配置需要重启程序后生效"), QMessageBox::Ok); -} -void DialogSetup::on_pushButton_close_released() -{ - this->close(); -} -void DialogSetup::write_pswd() -{ - std::fstream cfg_file; - cfg_file.open("pswd.txt", std::ios::out | std::ios::trunc); - if (cfg_file.good()) - { - char buf[256]; - memset(buf, 0, 256); - sprintf(buf, "%s", g_admin_pswd.toStdString().c_str()); - cfg_file.write(buf, strlen(buf)); - } - cfg_file.close(); -} -void DialogSetup::write_pswd_op() -{ - std::fstream cfg_file; - cfg_file.open("pswd_op.txt", std::ios::out | std::ios::trunc); - if (cfg_file.good()) - { - char buf[256]; - memset(buf, 0, 256); - sprintf(buf, "%s", g_op_pswd.toStdString().c_str()); - cfg_file.write(buf, strlen(buf)); - } - cfg_file.close(); -} -void DialogSetup::write_config() -{ - std::fstream cfg_file; - cfg_file.open("../conf/conf.txt", std::ios::out | std::ios::trunc); - if (cfg_file.good()) - { - char buf[256]; - memset(buf, 0, 256); - sprintf(buf, "SAVE=%d\n", g_sys_conf.save); - cfg_file.write(buf, strlen(buf)); - memset(buf, 0, 256); - sprintf(buf, "MISMATCHACT=%d\n", g_sys_conf.MisMatchAct); - cfg_file.write(buf, strlen(buf)); - memset(buf, 0, 256);/// - sprintf(buf, "SAVE_DAYS=%d\n", g_sys_conf.save_days); - cfg_file.write(buf, strlen(buf)); - memset(buf, 0, 256); - sprintf(buf, "AUTO_OPEN=%d\n", g_sys_conf.auto_open); - cfg_file.write(buf, strlen(buf)); - memset(buf, 0, 256); - sprintf(buf, "AUTO_WORK=%d\n", g_sys_conf.auto_work); - cfg_file.write(buf, strlen(buf)); - memset(buf, 0, 256); - sprintf(buf, "AUTO_SHIFT=%d\n", g_sys_conf.auto_shift); - cfg_file.write(buf, strlen(buf)); - memset(buf, 0, 256); - sprintf(buf, "TIMING_SHIFT=%d\n", g_sys_conf.timing_shift); - cfg_file.write(buf, strlen(buf)); - memset(buf, 0, 256); - sprintf(buf, "SHIFT_A=%d|%d\n", g_sys_conf.shiftA.hour(), g_sys_conf.shiftA.minute()); - cfg_file.write(buf, strlen(buf)); - memset(buf, 0, 256); - sprintf(buf, "SHIFT_B=%d|%d\n", g_sys_conf.shiftB.hour(), g_sys_conf.shiftB.minute()); - cfg_file.write(buf, strlen(buf)); - memset(buf, 0, 256); - sprintf(buf, "SHIFT_C=%d|%d\n", g_sys_conf.shiftC.hour(), g_sys_conf.shiftC.minute()); - cfg_file.write(buf, strlen(buf)); - memset(buf, 0, 256); - sprintf(buf, "*****************************************\n"); - cfg_file.write(buf, strlen(buf)); -#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>0) - memset(buf, 0, 256); - sprintf(buf, "EXPO1=%d\n", g_sys_conf.expo[0]); - cfg_file.write(buf, strlen(buf)); - memset(buf, 0, 256); - sprintf(buf, "GAIN1=%d\n", g_sys_conf.gain[0]); - cfg_file.write(buf, strlen(buf)); - sprintf(buf, "FILTER1=%d\n", g_sys_conf.filter[0]); - cfg_file.write(buf, strlen(buf)); - memset(buf, 0, 256); - sprintf(buf, "USERID1=%d\n", g_sys_conf.UserID[0]); - cfg_file.write(buf, strlen(buf)); - memset(buf, 0, 256); - sprintf(buf, "NO1=%d|%d|%d\n", g_sys_conf.no[0][0],g_sys_conf.no[0][1],g_sys_conf.no[0][2]); - cfg_file.write(buf, strlen(buf)); - memset(buf, 0, 256); - sprintf(buf, "SHOOT1=%d\n", g_sys_conf.shoot[0]); - cfg_file.write(buf, strlen(buf)); - memset(buf, 0, 256); - sprintf(buf, "*****************************************\n"); - cfg_file.write(buf, strlen(buf)); -#endif -#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>1) - memset(buf, 0, 256); - sprintf(buf, "EXPO2=%d\n", g_sys_conf.expo[1]); - cfg_file.write(buf, strlen(buf)); - memset(buf, 0, 256); - sprintf(buf, "GAIN2=%d\n", g_sys_conf.gain[1]); - cfg_file.write(buf, strlen(buf)); - memset(buf, 0, 256); - sprintf(buf, "FILTER2=%d\n", g_sys_conf.filter[1]); - cfg_file.write(buf, strlen(buf)); - sprintf(buf, "USERID2=%d\n", g_sys_conf.UserID[1]); - cfg_file.write(buf, strlen(buf)); - memset(buf, 0, 256); - sprintf(buf, "NO2=%d|%d|%d\n", g_sys_conf.no[1][0],g_sys_conf.no[1][1],g_sys_conf.no[1][2]); - cfg_file.write(buf, strlen(buf)); - memset(buf, 0, 256); - sprintf(buf, "SHOOT2=%d\n", g_sys_conf.shoot[1]); - cfg_file.write(buf, strlen(buf)); - memset(buf, 0, 256); - sprintf(buf, "*****************************************\n"); - cfg_file.write(buf, strlen(buf)); -#endif -#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>2) - memset(buf, 0, 256); - sprintf(buf, "EXPO3=%d\n", g_sys_conf.expo[2]); - cfg_file.write(buf, strlen(buf)); - memset(buf, 0, 256); - sprintf(buf, "GAIN3=%d\n", g_sys_conf.gain[2]); - cfg_file.write(buf, strlen(buf)); - memset(buf, 0, 256); - sprintf(buf, "FILTER3=%d\n", g_sys_conf.filter[2]); - cfg_file.write(buf, strlen(buf)); - sprintf(buf, "USERID3=%d\n", g_sys_conf.UserID[2]); - cfg_file.write(buf, strlen(buf)); - memset(buf, 0, 256); - sprintf(buf, "NO3=%d|%d|%d\n", g_sys_conf.no[2][0],g_sys_conf.no[2][1],g_sys_conf.no[2][2]); - cfg_file.write(buf, strlen(buf)); - memset(buf, 0, 256); - sprintf(buf, "SHOOT3=%d\n", g_sys_conf.shoot[2]); - cfg_file.write(buf, strlen(buf)); - memset(buf, 0, 256); - sprintf(buf, "*****************************************\n"); - cfg_file.write(buf, strlen(buf)); -#endif -#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>3) - memset(buf, 0, 256); - sprintf(buf, "EXPO4=%d\n", g_sys_conf.expo[3]); - cfg_file.write(buf, strlen(buf)); - memset(buf, 0, 256); - sprintf(buf, "GAIN4=%d\n", g_sys_conf.gain[3]); - cfg_file.write(buf, strlen(buf)); - memset(buf, 0, 256); - sprintf(buf, "FILTER4=%d\n", g_sys_conf.filter[3]); - cfg_file.write(buf, strlen(buf)); - sprintf(buf, "USERID4=%d\n", g_sys_conf.UserID[3]); - cfg_file.write(buf, strlen(buf)); - memset(buf, 0, 256); - sprintf(buf, "NO4=%d|%d|%d\n", g_sys_conf.no[3][0],g_sys_conf.no[3][1],g_sys_conf.no[3][2]); - cfg_file.write(buf, strlen(buf)); - memset(buf, 0, 256); - sprintf(buf, "SHOOT4=%d\n", g_sys_conf.shoot[3]); - cfg_file.write(buf, strlen(buf)); - memset(buf, 0, 256); - sprintf(buf, "*****************************************\n"); - cfg_file.write(buf, strlen(buf)); -#endif - memset(buf, 0, 256); - sprintf(buf, "MonitorIP=%s\n", g_sys_conf.MonitorIP.c_str()); - cfg_file.write(buf, strlen(buf)); - - memset(buf, 0, 256); - cfg_file.write(buf, strlen(buf)); - sprintf(buf, "MonitorPort=%d\n", g_sys_conf.MonitorPort); - cfg_file.write(buf, strlen(buf)); - } - cfg_file.close(); -} -void DialogSetup::InitPtrMat() -{ -#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>0) - lineEdit_expo_mat[0]=ui.lineEdit_expo_1; - lineEdit_gain_mat[0]=ui.lineEdit_gain_1; - lineEdit_filter_mat[0]=ui.lineEdit_filter_1; -#endif -#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>1) - lineEdit_expo_mat[1]=ui.lineEdit_expo_2; - lineEdit_gain_mat[1]=ui.lineEdit_gain_2; - lineEdit_filter_mat[1]=ui.lineEdit_filter_2; -#endif -#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>2) - lineEdit_expo_mat[2]=ui.lineEdit_expo_3; - lineEdit_gain_mat[2]=ui.lineEdit_gain_3; - lineEdit_filter_mat[2]=ui.lineEdit_filter_3; -#endif -#if defined(NumberOfSupportedCameras) && (NumberOfSupportedCameras>3) - lineEdit_expo_mat[3]=ui.lineEdit_expo_4; - lineEdit_gain_mat[3]=ui.lineEdit_gain_4; - lineEdit_filter_mat[3]=ui.lineEdit_filter_4; -#endif -} - -void DialogSetup::on_pushButton_config_released() -{ - if (m_camera_glue)delete m_camera_glue; - m_camera_glue = new camera_glue(this); - connect(m_camera_glue, &camera_glue::sendMsgToDialogSetup,this, &DialogSetup::recMsgFromDialogConfig); - connect(this, &DialogSetup::sendMsgToConfig,m_camera_glue, &camera_glue::recMsgFromDialogSetup); - m_camera_glue->show(); - m_camera_glue->move(this->geometry().center() - m_camera_glue->rect().center());//移动父窗口中心位置 - emit sendMsgToConfig(g_sys_conf.no); -} -void DialogSetup::recMsgFromDialogConfig(int ptr[][3]) -{ - for(int i=0;ishow(); - m_change_shift->move(this->geometry().center() - m_change_shift->rect().center()); - emit sendMsgToShift(g_sys_conf.shiftA, g_sys_conf.shiftB, g_sys_conf.shiftC); -} -void DialogSetup::on_pushButton_statistic_released() -{ - if (m_output_statistic)delete m_output_statistic; - m_output_statistic = new output_statistic(this); - connect(this, &DialogSetup::sendMsgToOutput, m_output_statistic, &output_statistic::recMsgFromDialogSetup); - m_output_statistic->show(); - m_output_statistic->move(this->geometry().center() - m_output_statistic->rect().center()); - emit sendMsgToOutput(); -} -void DialogSetup::recMsgFromChangeShift(QTime timeA, QTime timeB, QTime timeC) -{ - g_sys_conf.shiftA.setHMS(timeA.hour(), timeA.minute(), 0); - g_sys_conf.shiftB.setHMS(timeB.hour(), timeB.minute(), 0); - g_sys_conf.shiftC.setHMS(timeC.hour(), timeC.minute(), 0); -} \ No newline at end of file diff --git a/Cigarette/dialogsetup.ui b/Cigarette/dialogsetup.ui deleted file mode 100644 index 896d46ba..00000000 --- a/Cigarette/dialogsetup.ui +++ /dev/null @@ -1,1370 +0,0 @@ - - - DialogSetup - - - - 0 - 0 - 669 - 723 - - - - - 微软雅黑 - 14 - 75 - true - - - - 系统设置 - - - background-color: rgb(240, 240, 240); - - - - - 0 - 0 - 691 - 781 - - - - - 0 - 0 - - - - true - - - - - 0 - 0 - 689 - 779 - - - - - 670 - 768 - - - - - - 10 - 60 - 641 - 81 - - - - - 微软雅黑 - 12 - 75 - true - - - - 启动设置 - - - - - 20 - 40 - 191 - 21 - - - - - 微软雅黑 - 12 - 75 - true - - - - 自动打开所有相机 - - - - - - 220 - 40 - 241 - 21 - - - - - 微软雅黑 - 12 - 75 - true - - - - 程序启动后自动开始工作 - - - - - - - 10 - 420 - 641 - 91 - - - - - 微软雅黑 - 12 - 75 - true - - - - 管理员密码修改 - - - - - 540 - 30 - 91 - 51 - - - - - 微软雅黑 - 12 - 75 - true - - - - 确定 - - - - - - 180 - 40 - 61 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - 新密码: - - - - - - 440 - 42 - 91 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - - - - QLineEdit::Password - - - - - - 240 - 40 - 101 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - - - - QLineEdit::Password - - - - - - 350 - 40 - 81 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - 确认密码: - - - - - - 80 - 40 - 91 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - - - - QLineEdit::Password - - - - - - 10 - 40 - 61 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - 原密码: - - - - - - - 10 - 220 - 641 - 141 - - - - - 微软雅黑 - 12 - 75 - true - - - - 相机参数 - - - - - 20 - 40 - 181 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - 1#相机曝光时间(微秒): - - - - - - 210 - 40 - 91 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - - - - - - - 210 - 80 - 91 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - - - - - - - 20 - 80 - 181 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - 2#相机曝光时间(微秒): - - - - - - 510 - 80 - 91 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - - - - - - - 320 - 40 - 181 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - 1#相机模拟增益(0~64): - - - - - - 320 - 80 - 181 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - 2#相机模拟增益(0~64): - - - - - - 510 - 40 - 91 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - - - - - - - 680 - 90 - 91 - 51 - - - - - 微软雅黑 - 12 - 75 - true - - - - 确定 - - - - - - - 10 - 580 - 641 - 71 - - - - - 微软雅黑 - 12 - 75 - true - - - - 滤波设置 - - - - - 20 - 30 - 181 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - 1#相机滤波时间(微秒): - - - - - - 210 - 30 - 91 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - - - - - - - 510 - 30 - 91 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - - - - - - - 320 - 30 - 181 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - 2#相机滤波时间(微秒): - - - - - - 680 - 50 - 91 - 51 - - - - - 微软雅黑 - 12 - 75 - true - - - - 确定 - - - - - - - 10 - 140 - 641 - 81 - - - - - 微软雅黑 - 12 - 75 - true - - - - 存图设置 - - - - - 30 - 40 - 91 - 21 - - - - - 微软雅黑 - 12 - 75 - true - - - - 不存 - - - - - - 230 - 40 - 91 - 21 - - - - - 微软雅黑 - 12 - 75 - true - - - - 存NG - - - - - - 440 - 40 - 91 - 21 - - - - - 微软雅黑 - 12 - 75 - true - - - - 全存 - - - - - - 540 - 20 - 101 - 51 - - - - - 微软雅黑 - 12 - 75 - true - - - - 确定 - - - - - - - 120 - 660 - 131 - 51 - - - - - 微软雅黑 - 12 - 75 - true - - - - 保存参数 - - - - - - 490 - 10 - 131 - 51 - - - - - 微软雅黑 - 12 - 75 - true - - - - 退出系统 - - - - - - 10 - 510 - 641 - 71 - - - - - 微软雅黑 - 12 - 75 - true - - - - 操作员密码修改 - - - - - 180 - 30 - 61 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - 新密码: - - - - - - 440 - 32 - 91 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - - - - QLineEdit::Password - - - - - - 240 - 30 - 101 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - - - - QLineEdit::Password - - - - - - 350 - 30 - 81 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - 确认密码: - - - - - - 80 - 30 - 91 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - - - - QLineEdit::Password - - - - - - 10 - 30 - 61 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - 原密码: - - - - - - 540 - 20 - 91 - 51 - - - - - 微软雅黑 - 12 - 75 - true - - - - 确定 - - - - - - - 380 - 660 - 131 - 51 - - - - - 微软雅黑 - 12 - 75 - true - - - - 关闭窗口 - - - - - - 300 - 10 - 131 - 51 - - - - - 微软雅黑 - 12 - 75 - true - - - - 显示桌面 - - - - - - 160 - 10 - 91 - 41 - - - - - 微软雅黑 - 12 - 75 - true - - - - border-image: url(:/Cigarette/Resources/keyboard.png); - - - - - - - - - 10 - 20 - 101 - 21 - - - - - 微软雅黑 - 12 - 75 - true - - - - 系统设置 - - - - - - 50 - 370 - 111 - 41 - - - - - 微软雅黑 - 12 - 75 - true - - - - 配方设置 - - - - - - 290 - 370 - 111 - 41 - - - - - 微软雅黑 - 12 - 75 - true - - - - 换班设置 - - - - - - 510 - 370 - 111 - 41 - - - - - 微软雅黑 - 12 - 75 - true - - - - 产量统计 - - - - - - - - 530 - 1190 - 91 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - - - - - - - 40 - 1230 - 181 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - 4#相机曝光时间(微秒): - - - - - - 340 - 1190 - 181 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - 3#相机模拟增益(0~64): - - - - - - 40 - 1190 - 181 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - 3#相机曝光时间(微秒): - - - - - - 230 - 1190 - 91 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - - - - - - - 340 - 1230 - 181 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - 4#相机模拟增益(0~64): - - - - - - 530 - 1230 - 91 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - - - - - - - 230 - 1230 - 91 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - - - - - - - 530 - 1560 - 91 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - - - - - - - 40 - 1560 - 181 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - 3#相机滤波时间(微秒): - - - - - - 230 - 1560 - 91 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - - - - - - - 340 - 1560 - 181 - 31 - - - - - 微软雅黑 - 12 - 75 - true - - - - 4#相机滤波时间(微秒): - - - - - - - - - diff --git a/Cigarette/output_statistic.cpp b/Cigarette/output_statistic.cpp deleted file mode 100644 index d4f7cb12..00000000 --- a/Cigarette/output_statistic.cpp +++ /dev/null @@ -1,33 +0,0 @@ -#include "output_statistic.h" -#include "QtCore\qfile.h" -#include "QtCore\qtextstream.h" - -output_statistic::output_statistic(QDialog *parent) - : QDialog(parent) -{ - ui.setupUi(this); - this->setWindowFlags(windowFlags()&~Qt::WindowContextHelpButtonHint); -} - -output_statistic::~output_statistic() -{ -} - -void output_statistic::recMsgFromDialogSetup() -{ - QFile file("../conf/camera0_statistic.txt"); - if (file.open(QIODevice::ReadOnly | QIODevice::Text)) - { - QTextStream in(&file); - ui.textBrowser_1->setText(in.readAll()); - } - file.close(); - file.setFileName("../conf/camera1_statistic.txt"); - if (file.open(QIODevice::ReadOnly | QIODevice::Text)) - { - QTextStream in(&file); - ui.textBrowser_2->setText(in.readAll()); - } - file.close(); - this->show(); -} diff --git a/Cigarette/workthread.cpp b/Cigarette/workthread.cpp deleted file mode 100644 index 10cb6069..00000000 --- a/Cigarette/workthread.cpp +++ /dev/null @@ -1,211 +0,0 @@ -#include "workthread.h" -#include "alg_jd.h" -#include "common.h" -#include "balluffcamera.h" -#include "baslercamera.h" -#include "threadSend.h" -#include -extern AlgJd alg_jd[NumberOfSupportedCameras]; //⽺AI㷨 - -extern SysConf g_sys_conf; //ϵͳò - -extern int rotationAngle[NumberOfSupportedCameras]; //ͼƬתǶ -extern bool isNeddRotate[NumberOfSupportedCameras]; - -extern SyncQueue >* g_save_queue; //ͼƬ -extern SyncQueue >* g_image_queue[NumberOfSupportedCameras]; //intʾһĿ˼ -extern SyncQueue<_UDPSendInfo> *UDP_Info_queue; -extern PLCDevice* m_PLCDevice; -WorkThread::~WorkThread() -{ - stop(); - local_g_image_queue->put(std::make_pair(0, cv::Mat())); - quit(); - wait(); -} - -void WorkThread::init(SyncQueue>* image_ptr, ASyncQueue* result_ptr, int classid, int Num) -{ - local_camera_number = Num; - local_classid = classid; - local_g_image_queue = image_ptr; - local_g_result_queue = result_ptr; - b_quit = false; - frame_total = 0; -} -void WorkThread::start_work() -{ - start(HighestPriority); -} -void WorkThread::stop() -{ - b_quit = true; -} - -void WorkThread::run() -{ - try{ - uint32_t result_index = 0; - while (!b_quit) { - {//Ҫɾţ - std::lock_guard locker(g_sys_conf.lock); - local_SysConf.save = g_sys_conf.save; - local_SysConf.shoot[local_camera_number] = g_sys_conf.shoot[local_camera_number]; - local_SysConf.MisMatchAct = g_sys_conf.MisMatchAct; - for (int i = 0; i < 3; i++)local_SysConf.no[local_camera_number][i] = g_sys_conf.no[local_camera_number][i]; - } - QDateTime now_ts = QDateTime::currentDateTime(); - std::pair element; - local_g_image_queue->take(element); - int unit_count = element.first; - cv::Mat image = element.second; - - _UDPSendInfo UDPSendInfo; - UDPSendInfo.FrameID = info_frame; - UDPSendInfo.index = local_camera_number; - if (!image.data) - { - continue; //ͼΪգ - } - if (image.channels() == 1) - { - cv::cvtColor(image, image, CV_BGR2RGB); //ҶͼתΪɫͼ - } - if (local_SysConf.shoot[local_camera_number] == unit_count) - { - std::vector vec_in; - int w = image.cols; - int h = image.rows / unit_count; - for(int index=0;index vec_out; - std::vector > > vec_results; - QDateTime ts_start = QDateTime::currentDateTime(); - if(unit_count == 1){ - std::vector > results; - cv::Mat imagein,imageout; - imagein = vec_in[0]; - alg_jd[local_camera_number].detect(imagein, imageout, results); - vec_out.push_back(imageout.clone()); - vec_results.push_back(results); - }else{ - alg_jd[local_camera_number].detect_batch(vec_in, vec_out, vec_results); - } - QDateTime ts_jd = QDateTime::currentDateTime(); - int time_process = ts_start.msecsTo(ts_jd); - emit display_timecost(local_camera_number, time_process); - DEBUG(" local_camera_number:%d,time_process:%d\n", local_camera_number, time_process); - UDPSendInfo.timecost = QString::number(time_process); - - if (vec_results.size() >= unit_count) - { - QString jd_no; - for(int index=0;indexput(std::make_pair(file_name.toStdString(), m)); - } - } - - if (!IsNG) - { - emit event_ok(local_camera_number); - local_g_result_queue->put(true); - } - else - { - emit event_ng(local_camera_number); - local_g_result_queue->put(false); - if ((local_SysConf.save == 2) || (local_SysConf.save == 1)) - { - for(int index=0;indexput(std::make_pair(file_name.toStdString(), m)); - - m = vec_out[index].clone(); - file_name = "D:/image/" + - now_ts.toString("yyyy-MM-dd") + - "/" + QString::number(local_camera_number + 1) + - "/ng_result/" + QString::number(index + 1)+ "/" + - now_ts.toString("yyyy-MM-dd_HH-mm-ss_zzz_") + QString::number(local_camera_number + 1) + - "#" + "_" + QString::number(index + 1) + ".bmp"; - g_save_queue->put(std::make_pair(file_name.toStdString(), m)); - } - } - } - } - } - emit display_check_total(local_camera_number, ++frame_total); - //cv::Mat m = vec_out[(result_index++) % 3].clone(); - cv::Mat image1; - cv::Mat image2; - - if (unit_count >= 2) - { - image1 = vec_out[(result_index++) % 2].clone(); - } - else - { - image1 = vec_out[0].clone(); - } - if (unit_count >= 3) { image2 = vec_out[2].clone(); } - emit notify(local_camera_number, 0,image1); - if(unit_count>=3) emit notify(local_camera_number, 1,image2); - } - else { //֤λ - if(local_SysConf.MisMatchAct == 1)//as ng - emit event_ng(local_camera_number); - else if(local_SysConf.MisMatchAct == 0)//as ok - emit event_ok(local_camera_number); - emit display_check_total(local_camera_number, ++frame_total); - qDebug() << local_camera_number<< "#camera# " << now_ts.toString("yyyy-MM-dd_HH-mm-ss_zzz_") <<"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx " << unit_count; - } -#ifdef __UDPSend - UDP_Info_queue->put(UDPSendInfo); -#endif - } - } - catch (cv::Exception& e) - { - const char* err_msg = e.what(); - std::cout << "exception caught: " << err_msg << std::endl; - } -} \ No newline at end of file diff --git a/Cigarette/x64/Release/ASyncQueue.obj b/Cigarette/x64/Release/ASyncQueue.obj deleted file mode 100644 index 1e0b8f0f..00000000 Binary files a/Cigarette/x64/Release/ASyncQueue.obj and /dev/null differ diff --git a/Cigarette/x64/Release/AlarmInfo.obj b/Cigarette/x64/Release/AlarmInfo.obj deleted file mode 100644 index cee0babb..00000000 Binary files a/Cigarette/x64/Release/AlarmInfo.obj and /dev/null differ diff --git a/Cigarette/x64/Release/CaptureThread.obj b/Cigarette/x64/Release/CaptureThread.obj deleted file mode 100644 index aad703ad..00000000 Binary files a/Cigarette/x64/Release/CaptureThread.obj and /dev/null differ diff --git a/Cigarette/x64/Release/CaptureThreadBasler.obj b/Cigarette/x64/Release/CaptureThreadBasler.obj deleted file mode 100644 index af508a70..00000000 Binary files a/Cigarette/x64/Release/CaptureThreadBasler.obj and /dev/null differ diff --git a/Cigarette/x64/Release/CaptureThreadHIK.obj b/Cigarette/x64/Release/CaptureThreadHIK.obj deleted file mode 100644 index 75277b30..00000000 Binary files a/Cigarette/x64/Release/CaptureThreadHIK.obj and /dev/null differ diff --git a/Cigarette/x64/Release/Cigarette.Build.CppClean.log b/Cigarette/x64/Release/Cigarette.Build.CppClean.log deleted file mode 100644 index 89d9625e..00000000 --- a/Cigarette/x64/Release/Cigarette.Build.CppClean.log +++ /dev/null @@ -1,91 +0,0 @@ -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\baslercamera.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\cigarette.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\main.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\asyncqueue.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\capturethread.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\moc_cleanthread.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\moc_dialogsetup.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\logthread.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\plcsetup.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\balluffcamera.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\debugthread.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\moc_capturethreadbasler.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\moc_logthread.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\moc_threadreceive.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\workthread.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\basecamera.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\change_shift.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\db_label.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\dialogin.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\moc_camera_glue.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\moc_debugthread.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\moc_workthread.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\camera_glue.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\common.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\dialogsetuppasswd.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\moc_capturethreadhik.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\moc_dialogin.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\moc_plcsetup.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\output_statistic.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\threadreceive.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\alg_jd.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\cleanthread.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\moc_capturethread.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\moc_output_statistic.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\hikcamera.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\plcdevice.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\alarmdialog.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\capturethreadhik.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\moc_alarmdialog.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\moc_change_shift.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\moc_cigarette.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\syncqueue.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\alarminfo.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\capturethreadbasler.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\dialogsetup.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\moc_db_label.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\moc_dialogsetuppasswd.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\moc_savethread.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\plc_item.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\threadsend.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\qrc_cigarette.obj -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\generatedfiles\release\moc_cigarette.cpp -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\generatedfiles\ui_cigarette.h -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\generatedfiles\release\moc_threadreceive.cpp -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\generatedfiles\release\moc_workthread.cpp -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\generatedfiles\release\moc_alarmdialog.cpp -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\generatedfiles\release\moc_capturethread.cpp -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\generatedfiles\release\moc_capturethreadbasler.cpp -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\generatedfiles\release\moc_capturethreadhik.cpp -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\generatedfiles\release\moc_camera_glue.cpp -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\generatedfiles\release\moc_change_shift.cpp -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\generatedfiles\release\moc_cleanthread.cpp -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\generatedfiles\release\moc_plcsetup.cpp -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\generatedfiles\release\moc_db_label.cpp -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\generatedfiles\release\moc_debugthread.cpp -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\generatedfiles\release\moc_dialogin.cpp -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\generatedfiles\release\moc_output_statistic.cpp -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\generatedfiles\release\moc_logthread.cpp -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\generatedfiles\release\moc_savethread.cpp -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\generatedfiles\release\moc_dialogsetuppasswd.cpp -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\generatedfiles\release\moc_dialogsetup.cpp -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\generatedfiles\qrc_cigarette.cpp -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\generatedfiles\ui_dialogsetuppasswd.h -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\generatedfiles\ui_dialogsetup.h -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\generatedfiles\ui_plcsetup.h -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\generatedfiles\ui_alarmdialog.h -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\generatedfiles\ui_dialogin.h -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\generatedfiles\ui_camera_glue.h -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\generatedfiles\ui_change_shift.h -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\generatedfiles\ui_output_statistic.h -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\x64\release\cigarette.exe -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\cigarette.tlog\cl.command.1.tlog -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\cigarette.tlog\cl.items.tlog -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\cigarette.tlog\cl.read.1.tlog -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\cigarette.tlog\cl.write.1.tlog -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\cigarette.tlog\custombuild.command.1.tlog -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\cigarette.tlog\custombuild.read.1.tlog -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\cigarette.tlog\custombuild.write.1.tlog -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\cigarette.tlog\link.command.1.tlog -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\cigarette.tlog\link.read.1.tlog -d:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\cigarette\x64\release\cigarette.tlog\link.write.1.tlog diff --git a/Cigarette/x64/Release/Cigarette.log b/Cigarette/x64/Release/Cigarette.log deleted file mode 100644 index 2bc8b7a8..00000000 --- a/Cigarette/x64/Release/Cigarette.log +++ /dev/null @@ -1,7 +0,0 @@ - CaptureThreadHIK.cpp - cigarette.cpp - Automatically linking with mvDeviceManager.lib -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\cigarette.cpp(2074,16): warning C4477: “sprintf”: 格式字符串“%s”需要类型“char *”的参数,但可变参数 1 拥有了类型“std::string” -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\cigarette.cpp(2074,16): warning C4477: “sprintf”: 格式字符串“%s”需要类型“char *”的参数,但可变参数 2 拥有了类型“std::string” -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\cigarette.cpp(2074,16): warning C4477: “sprintf”: 格式字符串“%s”需要类型“char *”的参数,但可变参数 3 拥有了类型“std::string” - Cigarette.vcxproj -> D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\x64\Release\Cigarette.exe diff --git a/Cigarette/x64/Release/Cigarette.tlog/CL.command.1.tlog b/Cigarette/x64/Release/Cigarette.tlog/CL.command.1.tlog deleted file mode 100644 index eeb11dc1..00000000 Binary files a/Cigarette/x64/Release/Cigarette.tlog/CL.command.1.tlog and /dev/null differ diff --git a/Cigarette/x64/Release/Cigarette.tlog/CL.read.1.tlog b/Cigarette/x64/Release/Cigarette.tlog/CL.read.1.tlog deleted file mode 100644 index 71ae430b..00000000 Binary files a/Cigarette/x64/Release/Cigarette.tlog/CL.read.1.tlog and /dev/null differ diff --git a/Cigarette/x64/Release/Cigarette.tlog/CL.write.1.tlog b/Cigarette/x64/Release/Cigarette.tlog/CL.write.1.tlog deleted file mode 100644 index c3672389..00000000 Binary files a/Cigarette/x64/Release/Cigarette.tlog/CL.write.1.tlog and /dev/null differ diff --git a/Cigarette/x64/Release/Cigarette.tlog/Cigarette.lastbuildstate b/Cigarette/x64/Release/Cigarette.tlog/Cigarette.lastbuildstate deleted file mode 100644 index d63d16b3..00000000 --- a/Cigarette/x64/Release/Cigarette.tlog/Cigarette.lastbuildstate +++ /dev/null @@ -1,2 +0,0 @@ -PlatformToolSet=v143:VCToolArchitecture=Native64Bit:VCToolsVersion=14.36.32532:TargetPlatformVersion=10.0.22000.0: -Release|x64|D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\| diff --git a/Cigarette/x64/Release/Cigarette.tlog/Cl.items.tlog b/Cigarette/x64/Release/Cigarette.tlog/Cl.items.tlog deleted file mode 100644 index 1bb44456..00000000 --- a/Cigarette/x64/Release/Cigarette.tlog/Cl.items.tlog +++ /dev/null @@ -1,51 +0,0 @@ -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\alarmdialog.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\alarmdialog.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\AlarmInfo.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\AlarmInfo.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\alg_jd.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\alg_jd.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\ASyncQueue.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\ASyncQueue.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\balluffcamera.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\balluffcamera.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\basecamera.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\basecamera.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\baslercamera.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\baslercamera.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\camera_glue.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\camera_glue.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\CaptureThread.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\CaptureThread.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\CaptureThreadBasler.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\CaptureThreadBasler.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\CaptureThreadHIK.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\CaptureThreadHIK.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\change_shift.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\change_shift.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\cigarette.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\cigarette.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Cleanthread.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\Cleanthread.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\common.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\common.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\db_label.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\db_label.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\debugthread.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\debugthread.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\dialogin.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\dialogin.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\dialogsetup.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\dialogsetup.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\dialogsetuppasswd.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\dialogsetuppasswd.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\GeneratedFiles\qrc_cigarette.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\qrc_cigarette.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\GeneratedFiles\Release\moc_alarmdialog.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\moc_alarmdialog.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\GeneratedFiles\Release\moc_camera_glue.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\moc_camera_glue.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\GeneratedFiles\Release\moc_CaptureThread.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\moc_CaptureThread.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\GeneratedFiles\Release\moc_CaptureThreadBasler.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\moc_CaptureThreadBasler.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\GeneratedFiles\Release\moc_CaptureThreadHIK.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\moc_CaptureThreadHIK.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\GeneratedFiles\Release\moc_change_shift.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\moc_change_shift.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\GeneratedFiles\Release\moc_cigarette.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\moc_cigarette.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\GeneratedFiles\Release\moc_Cleanthread.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\moc_Cleanthread.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\GeneratedFiles\Release\moc_db_label.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\moc_db_label.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\GeneratedFiles\Release\moc_debugthread.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\moc_debugthread.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\GeneratedFiles\Release\moc_dialogin.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\moc_dialogin.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\GeneratedFiles\Release\moc_dialogsetup.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\moc_dialogsetup.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\GeneratedFiles\Release\moc_dialogsetuppasswd.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\moc_dialogsetuppasswd.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\GeneratedFiles\Release\moc_Logthread.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\moc_Logthread.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\GeneratedFiles\Release\moc_output_statistic.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\moc_output_statistic.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\GeneratedFiles\Release\moc_plcsetup.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\moc_plcsetup.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\GeneratedFiles\Release\moc_savethread.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\moc_savethread.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\GeneratedFiles\Release\moc_threadReceive.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\moc_threadReceive.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\GeneratedFiles\Release\moc_workthread.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\moc_workthread.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\hikcamera.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\hikcamera.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Logthread.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\Logthread.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\main.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\main.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\output_statistic.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\output_statistic.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\plcsetup.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\plcsetup.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\PLC\PLCDevice.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\PLCDevice.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\plc_item.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\plc_item.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\SyncQueue.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\SyncQueue.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\threadReceive.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\threadReceive.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\threadSend.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\threadSend.obj -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\workthread.cpp;D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\x64\Release\workthread.obj diff --git a/Cigarette/x64/Release/Cigarette.tlog/CustomBuild.command.1.tlog b/Cigarette/x64/Release/Cigarette.tlog/CustomBuild.command.1.tlog deleted file mode 100644 index 40e526c5..00000000 --- a/Cigarette/x64/Release/Cigarette.tlog/CustomBuild.command.1.tlog +++ /dev/null @@ -1,58 +0,0 @@ -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\CIGARETTE.H -"C:\Qt\5.15.2\msvc2019_64\bin\moc.exe" "D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\cigarette.h" -o ".\GeneratedFiles\Release\moc_cigarette.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-IC:\Qt\5.15.2\msvc2019_64\include" "-I.\GeneratedFiles\Release" "-IC:\Qt\5.15.2\msvc2019_64\include\QtCore" "-IC:\Qt\5.15.2\msvc2019_64\include\QtWidgets" "-IC:\Qt\5.15.2\msvc2019_64\include\QtGui" "-IC:\Qt\5.15.2\msvc2019_64\include\QtANGLE" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MvIMPACT" "-IG:\code_library\c\opencv\4.3\build-opencv+cuda\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Common" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Pylon6.2\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\modbus" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MVS3.2.1\Include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\PLC" "-IC:\Qt\5.15.2\msvc2019_64\include\QtNetwork" -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\CIGARETTE.UI -"C:\Qt\5.15.2\msvc2019_64\bin\uic.exe" -o ".\GeneratedFiles\ui_cigarette.h" "D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\cigarette.ui" -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\THREADRECEIVE.H -"C:\Qt\5.15.2\msvc2019_64\bin\moc.exe" "D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\threadReceive.h" -o ".\GeneratedFiles\Release\moc_threadReceive.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DNOMINMAX -DQT_CHARTS_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_WEBCHANNEL_LIB -DQT_WEBSOCKETS_LIB -DQT_WIDGETS_LIB -D "-I.\GeneratedFiles" "-I." "-IC:\Qt\5.15.2\msvc2019_64\include" "-I.\GeneratedFiles\Release" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MvIMPACT" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\OpenCV455Simple\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Common" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Pylon6.2\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\modbus" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MVS3.2.1\Include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\PLC" "-IC:\Qt\5.15.2\msvc2019_64\include\QtCharts" "-IC:\Qt\5.15.2\msvc2019_64\include\QtCore" "-IC:\Qt\5.15.2\msvc2019_64\include\QtGui" "-IC:\Qt\5.15.2\msvc2019_64\include\QtANGLE" "-IC:\Qt\5.15.2\msvc2019_64\include\QtNetwork" "-IC:\Qt\5.15.2\msvc2019_64\include\QtWebChannel" "-IC:\Qt\5.15.2\msvc2019_64\include\QtWebSockets" "-IC:\Qt\5.15.2\msvc2019_64\include\QtWidgets" -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\WORKTHREAD.H -"C:\Qt\5.15.2\msvc2019_64\bin\moc.exe" "D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\workthread.h" -o ".\GeneratedFiles\Release\moc_workthread.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-IC:\Qt\5.15.2\msvc2019_64\include" "-I.\GeneratedFiles\Release" "-IC:\Qt\5.15.2\msvc2019_64\include\QtCore" "-IC:\Qt\5.15.2\msvc2019_64\include\QtWidgets" "-IC:\Qt\5.15.2\msvc2019_64\include\QtGui" "-IC:\Qt\5.15.2\msvc2019_64\include\QtANGLE" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MvIMPACT" "-IG:\code_library\c\opencv\4.3\build-opencv+cuda\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Common" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Pylon6.2\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\modbus" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MVS3.2.1\Include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\PLC" "-IC:\Qt\5.15.2\msvc2019_64\include\QtNetwork" -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\ALARMDIALOG.HPP -"C:\Qt\5.15.2\msvc2019_64\bin\moc.exe" "D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\alarmdialog.hpp" -o ".\GeneratedFiles\Release\moc_alarmdialog.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-IC:\Qt\5.15.2\msvc2019_64\include" "-I.\GeneratedFiles\Release" "-IC:\Qt\5.15.2\msvc2019_64\include\QtCore" "-IC:\Qt\5.15.2\msvc2019_64\include\QtWidgets" "-IC:\Qt\5.15.2\msvc2019_64\include\QtGui" "-IC:\Qt\5.15.2\msvc2019_64\include\QtANGLE" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MvIMPACT" "-IG:\code_library\c\opencv\4.3\build-opencv+cuda\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Common" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Pylon6.2\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\modbus" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MVS3.2.1\Include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\PLC" "-IC:\Qt\5.15.2\msvc2019_64\include\QtNetwork" -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\CAPTURETHREAD.H -"C:\Qt\5.15.2\msvc2019_64\bin\moc.exe" "D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\CaptureThread.h" -o ".\GeneratedFiles\Release\moc_CaptureThread.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-IC:\Qt\5.15.2\msvc2019_64\include" "-I.\GeneratedFiles\Release" "-IC:\Qt\5.15.2\msvc2019_64\include\QtCore" "-IC:\Qt\5.15.2\msvc2019_64\include\QtWidgets" "-IC:\Qt\5.15.2\msvc2019_64\include\QtGui" "-IC:\Qt\5.15.2\msvc2019_64\include\QtANGLE" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MvIMPACT" "-IG:\code_library\c\opencv\4.3\build-opencv+cuda\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Common" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Pylon6.2\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\modbus" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MVS3.2.1\Include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\PLC" "-IC:\Qt\5.15.2\msvc2019_64\include\QtNetwork" -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\CAPTURETHREADBASLER.H -"C:\Qt\5.15.2\msvc2019_64\bin\moc.exe" "D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\CaptureThreadBasler.h" -o ".\GeneratedFiles\Release\moc_CaptureThreadBasler.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-IC:\Qt\5.15.2\msvc2019_64\include" "-I.\GeneratedFiles\Release" "-IC:\Qt\5.15.2\msvc2019_64\include\QtCore" "-IC:\Qt\5.15.2\msvc2019_64\include\QtWidgets" "-IC:\Qt\5.15.2\msvc2019_64\include\QtGui" "-IC:\Qt\5.15.2\msvc2019_64\include\QtANGLE" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MvIMPACT" "-IG:\code_library\c\opencv\4.3\build-opencv+cuda\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Common" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Pylon6.2\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\modbus" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MVS3.2.1\Include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\PLC" "-IC:\Qt\5.15.2\msvc2019_64\include\QtNetwork" -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\CAPTURETHREADHIK.H -"C:\Qt\5.15.2\msvc2019_64\bin\moc.exe" "D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\CaptureThreadHIK.h" -o ".\GeneratedFiles\Release\moc_CaptureThreadHIK.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-IC:\Qt\5.15.2\msvc2019_64\include" "-I.\GeneratedFiles\Release" "-IC:\Qt\5.15.2\msvc2019_64\include\QtCore" "-IC:\Qt\5.15.2\msvc2019_64\include\QtWidgets" "-IC:\Qt\5.15.2\msvc2019_64\include\QtGui" "-IC:\Qt\5.15.2\msvc2019_64\include\QtANGLE" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MvIMPACT" "-IG:\code_library\c\opencv\4.3\build-opencv+cuda\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Common" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Pylon6.2\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\modbus" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MVS3.2.1\Include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\PLC" "-IC:\Qt\5.15.2\msvc2019_64\include\QtNetwork" -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\CAMERA_GLUE.H -"C:\Qt\5.15.2\msvc2019_64\bin\moc.exe" "D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\camera_glue.h" -o ".\GeneratedFiles\Release\moc_camera_glue.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-IC:\Qt\5.15.2\msvc2019_64\include" "-I.\GeneratedFiles\Release" "-IC:\Qt\5.15.2\msvc2019_64\include\QtCore" "-IC:\Qt\5.15.2\msvc2019_64\include\QtWidgets" "-IC:\Qt\5.15.2\msvc2019_64\include\QtGui" "-IC:\Qt\5.15.2\msvc2019_64\include\QtANGLE" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MvIMPACT" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\OpenCV455Simple\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Common" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Pylon6.2\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\modbus" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MVS3.2.1\Include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\PLC" "-IC:\Qt\5.15.2\msvc2019_64\include\QtNetwork" -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\CHANGE_SHIFT.H -"C:\Qt\5.15.2\msvc2019_64\bin\moc.exe" "D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\change_shift.h" -o ".\GeneratedFiles\Release\moc_change_shift.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-IC:\Qt\5.15.2\msvc2019_64\include" "-I.\GeneratedFiles\Release" "-IC:\Qt\5.15.2\msvc2019_64\include\QtCore" "-IC:\Qt\5.15.2\msvc2019_64\include\QtWidgets" "-IC:\Qt\5.15.2\msvc2019_64\include\QtGui" "-IC:\Qt\5.15.2\msvc2019_64\include\QtANGLE" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MvIMPACT" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\OpenCV455Simple\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Common" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Pylon6.2\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\modbus" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MVS3.2.1\Include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\PLC" "-IC:\Qt\5.15.2\msvc2019_64\include\QtNetwork" -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\CLEANTHREAD.H -"C:\Qt\5.15.2\msvc2019_64\bin\moc.exe" "D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Cleanthread.h" -o ".\GeneratedFiles\Release\moc_Cleanthread.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-IC:\Qt\5.15.2\msvc2019_64\include" "-I.\GeneratedFiles\Release" "-IC:\Qt\5.15.2\msvc2019_64\include\QtCore" "-IC:\Qt\5.15.2\msvc2019_64\include\QtWidgets" "-IC:\Qt\5.15.2\msvc2019_64\include\QtGui" "-IC:\Qt\5.15.2\msvc2019_64\include\QtANGLE" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MvIMPACT" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\OpenCV455Simple\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Common" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Pylon6.2\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\modbus" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MVS3.2.1\Include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\PLC" "-IC:\Qt\5.15.2\msvc2019_64\include\QtNetwork" -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\PLCSETUP.HPP -"C:\Qt\5.15.2\msvc2019_64\bin\moc.exe" "D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\plcsetup.hpp" -o ".\GeneratedFiles\Release\moc_plcsetup.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-IC:\Qt\5.15.2\msvc2019_64\include" "-I.\GeneratedFiles\Release" "-IC:\Qt\5.15.2\msvc2019_64\include\QtCore" "-IC:\Qt\5.15.2\msvc2019_64\include\QtWidgets" "-IC:\Qt\5.15.2\msvc2019_64\include\QtGui" "-IC:\Qt\5.15.2\msvc2019_64\include\QtANGLE" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MvIMPACT" "-IG:\code_library\c\opencv\4.3\build-opencv+cuda\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Common" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Pylon6.2\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\modbus" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MVS3.2.1\Include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\PLC" "-IC:\Qt\5.15.2\msvc2019_64\include\QtNetwork" -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\DB_LABEL.H -"C:\Qt\5.15.2\msvc2019_64\bin\moc.exe" "D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\db_label.h" -o ".\GeneratedFiles\Release\moc_db_label.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-IC:\Qt\5.15.2\msvc2019_64\include" "-I.\GeneratedFiles\Release" "-IC:\Qt\5.15.2\msvc2019_64\include\QtCore" "-IC:\Qt\5.15.2\msvc2019_64\include\QtWidgets" "-IC:\Qt\5.15.2\msvc2019_64\include\QtGui" "-IC:\Qt\5.15.2\msvc2019_64\include\QtANGLE" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MvIMPACT" "-IG:\code_library\c\opencv\4.3\build-opencv+cuda\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Common" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Pylon6.2\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\modbus" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MVS3.2.1\Include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\PLC" "-IC:\Qt\5.15.2\msvc2019_64\include\QtNetwork" -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\DEBUGTHREAD.H -"C:\Qt\5.15.2\msvc2019_64\bin\moc.exe" "D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\debugthread.h" -o ".\GeneratedFiles\Release\moc_debugthread.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-IC:\Qt\5.15.2\msvc2019_64\include" "-I.\GeneratedFiles\Release" "-IC:\Qt\5.15.2\msvc2019_64\include\QtCore" "-IC:\Qt\5.15.2\msvc2019_64\include\QtWidgets" "-IC:\Qt\5.15.2\msvc2019_64\include\QtGui" "-IC:\Qt\5.15.2\msvc2019_64\include\QtANGLE" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MvIMPACT" "-IG:\code_library\c\opencv\4.3\build-opencv+cuda\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Common" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Pylon6.2\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\modbus" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MVS3.2.1\Include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\PLC" "-IC:\Qt\5.15.2\msvc2019_64\include\QtNetwork" -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\DIALOGIN.HPP -"C:\Qt\5.15.2\msvc2019_64\bin\moc.exe" "D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\dialogin.hpp" -o ".\GeneratedFiles\Release\moc_dialogin.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-IC:\Qt\5.15.2\msvc2019_64\include" "-I.\GeneratedFiles\Release" "-IC:\Qt\5.15.2\msvc2019_64\include\QtCore" "-IC:\Qt\5.15.2\msvc2019_64\include\QtWidgets" "-IC:\Qt\5.15.2\msvc2019_64\include\QtGui" "-IC:\Qt\5.15.2\msvc2019_64\include\QtANGLE" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MvIMPACT" "-IG:\code_library\c\opencv\4.3\build-opencv+cuda\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Common" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Pylon6.2\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\modbus" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MVS3.2.1\Include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\PLC" "-IC:\Qt\5.15.2\msvc2019_64\include\QtNetwork" -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\OUTPUT_STATISTIC.H -"C:\Qt\5.15.2\msvc2019_64\bin\moc.exe" "D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\output_statistic.h" -o ".\GeneratedFiles\Release\moc_output_statistic.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-IC:\Qt\5.15.2\msvc2019_64\include" "-I.\GeneratedFiles\Release" "-IC:\Qt\5.15.2\msvc2019_64\include\QtCore" "-IC:\Qt\5.15.2\msvc2019_64\include\QtWidgets" "-IC:\Qt\5.15.2\msvc2019_64\include\QtGui" "-IC:\Qt\5.15.2\msvc2019_64\include\QtANGLE" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MvIMPACT" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\OpenCV455Simple\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Common" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Pylon6.2\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\modbus" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MVS3.2.1\Include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\PLC" "-IC:\Qt\5.15.2\msvc2019_64\include\QtNetwork" -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\LOGTHREAD.H -"C:\Qt\5.15.2\msvc2019_64\bin\moc.exe" "D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Logthread.h" -o ".\GeneratedFiles\Release\moc_Logthread.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-IC:\Qt\5.15.2\msvc2019_64\include" "-I.\GeneratedFiles\Release" "-IC:\Qt\5.15.2\msvc2019_64\include\QtCore" "-IC:\Qt\5.15.2\msvc2019_64\include\QtWidgets" "-IC:\Qt\5.15.2\msvc2019_64\include\QtGui" "-IC:\Qt\5.15.2\msvc2019_64\include\QtANGLE" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MvIMPACT" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\OpenCV455Simple\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Common" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Pylon6.2\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\modbus" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MVS3.2.1\Include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\PLC" "-IC:\Qt\5.15.2\msvc2019_64\include\QtNetwork" -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\SAVETHREAD.H -"C:\Qt\5.15.2\msvc2019_64\bin\moc.exe" "D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\savethread.h" -o ".\GeneratedFiles\Release\moc_savethread.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-IC:\Qt\5.15.2\msvc2019_64\include" "-I.\GeneratedFiles\Release" "-IC:\Qt\5.15.2\msvc2019_64\include\QtCore" "-IC:\Qt\5.15.2\msvc2019_64\include\QtWidgets" "-IC:\Qt\5.15.2\msvc2019_64\include\QtGui" "-IC:\Qt\5.15.2\msvc2019_64\include\QtANGLE" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MvIMPACT" "-IG:\code_library\c\opencv\4.3\build-opencv+cuda\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Common" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Pylon6.2\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\modbus" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MVS3.2.1\Include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\PLC" "-IC:\Qt\5.15.2\msvc2019_64\include\QtNetwork" -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\DIALOGSETUPPASSWD.HPP -"C:\Qt\5.15.2\msvc2019_64\bin\moc.exe" "D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\dialogsetuppasswd.hpp" -o ".\GeneratedFiles\Release\moc_dialogsetuppasswd.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-IC:\Qt\5.15.2\msvc2019_64\include" "-I.\GeneratedFiles\Release" "-IC:\Qt\5.15.2\msvc2019_64\include\QtCore" "-IC:\Qt\5.15.2\msvc2019_64\include\QtWidgets" "-IC:\Qt\5.15.2\msvc2019_64\include\QtGui" "-IC:\Qt\5.15.2\msvc2019_64\include\QtANGLE" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MvIMPACT" "-IG:\code_library\c\opencv\4.3\build-opencv+cuda\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Common" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Pylon6.2\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\modbus" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MVS3.2.1\Include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\PLC" "-IC:\Qt\5.15.2\msvc2019_64\include\QtNetwork" -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\DIALOGSETUP.HPP -"C:\Qt\5.15.2\msvc2019_64\bin\moc.exe" "D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\dialogsetup.hpp" -o ".\GeneratedFiles\Release\moc_dialogsetup.cpp" -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DNOMINMAX -DQT_NETWORK_LIB -D "-I.\GeneratedFiles" "-I." "-IC:\Qt\5.15.2\msvc2019_64\include" "-I.\GeneratedFiles\Release" "-IC:\Qt\5.15.2\msvc2019_64\include\QtCore" "-IC:\Qt\5.15.2\msvc2019_64\include\QtWidgets" "-IC:\Qt\5.15.2\msvc2019_64\include\QtGui" "-IC:\Qt\5.15.2\msvc2019_64\include\QtANGLE" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MvIMPACT" "-IG:\code_library\c\opencv\4.3\build-opencv+cuda\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Common" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\Pylon6.2\include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\modbus" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\MVS3.2.1\Include" "-ID:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\PLC" "-IC:\Qt\5.15.2\msvc2019_64\include\QtNetwork" -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\CIGARETTE.QRC -"C:\Qt\5.15.2\msvc2019_64\bin\rcc.exe" -name "cigarette" -no-compress "D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\cigarette.qrc" -o .\GeneratedFiles\qrc_cigarette.cpp -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\DIALOGSETUPPASSWD.UI -"C:\Qt\5.15.2\msvc2019_64\bin\uic.exe" -o ".\GeneratedFiles\ui_dialogsetuppasswd.h" "D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\dialogsetuppasswd.ui" -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\DIALOGSETUP.UI -"C:\Qt\5.15.2\msvc2019_64\bin\uic.exe" -o ".\GeneratedFiles\ui_dialogsetup.h" "D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\dialogsetup.ui" -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\PLCSETUP.UI -"C:\Qt\5.15.2\msvc2019_64\bin\uic.exe" -o ".\GeneratedFiles\ui_plcsetup.h" "D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\plcsetup.ui" -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\ALARMDIALOG.UI -"C:\Qt\5.15.2\msvc2019_64\bin\uic.exe" -o ".\GeneratedFiles\ui_alarmdialog.h" "D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\alarmdialog.ui" -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\DIALOGIN.UI -"C:\Qt\5.15.2\msvc2019_64\bin\uic.exe" -o ".\GeneratedFiles\ui_dialogin.h" "D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\dialogin.ui" -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\CAMERA_GLUE.UI -"C:\Qt\5.15.2\msvc2019_64\bin\uic.exe" -o ".\GeneratedFiles\ui_camera_glue.h" "D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\camera_glue.ui" -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\CHANGE_SHIFT.UI -"C:\Qt\5.15.2\msvc2019_64\bin\uic.exe" -o ".\GeneratedFiles\ui_change_shift.h" "D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\change_shift.ui" -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\OUTPUT_STATISTIC.UI -"C:\Qt\5.15.2\msvc2019_64\bin\uic.exe" -o ".\GeneratedFiles\ui_output_statistic.h" "D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600x900-2\Cigarette\output_statistic.ui" diff --git a/Cigarette/x64/Release/Cigarette.tlog/CustomBuild.read.1.tlog b/Cigarette/x64/Release/Cigarette.tlog/CustomBuild.read.1.tlog deleted file mode 100644 index 75e8e630..00000000 --- a/Cigarette/x64/Release/Cigarette.tlog/CustomBuild.read.1.tlog +++ /dev/null @@ -1,57 +0,0 @@ -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\CIGARETTE.H -C:\QT\5.15.2\MSVC2019_64\BIN\MOC.EXE -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\CIGARETTE.UI -C:\QT\5.15.2\MSVC2019_64\BIN\UIC.EXE -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\THREADRECEIVE.H -C:\QT\5.15.2\MSVC2019_64\BIN\MOC.EXE -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\WORKTHREAD.H -C:\QT\5.15.2\MSVC2019_64\BIN\MOC.EXE -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\ALARMDIALOG.HPP -C:\QT\5.15.2\MSVC2019_64\BIN\MOC.EXE -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\CAPTURETHREAD.H -C:\QT\5.15.2\MSVC2019_64\BIN\MOC.EXE -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\CAPTURETHREADBASLER.H -C:\QT\5.15.2\MSVC2019_64\BIN\MOC.EXE -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\CAPTURETHREADHIK.H -C:\QT\5.15.2\MSVC2019_64\BIN\MOC.EXE -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\CAMERA_GLUE.H -C:\QT\5.15.2\MSVC2019_64\BIN\MOC.EXE -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\CHANGE_SHIFT.H -C:\QT\5.15.2\MSVC2019_64\BIN\MOC.EXE -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\CLEANTHREAD.H -C:\QT\5.15.2\MSVC2019_64\BIN\MOC.EXE -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\PLCSETUP.HPP -C:\QT\5.15.2\MSVC2019_64\BIN\MOC.EXE -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\DB_LABEL.H -C:\QT\5.15.2\MSVC2019_64\BIN\MOC.EXE -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\DEBUGTHREAD.H -C:\QT\5.15.2\MSVC2019_64\BIN\MOC.EXE -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\DIALOGIN.HPP -C:\QT\5.15.2\MSVC2019_64\BIN\MOC.EXE -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\OUTPUT_STATISTIC.H -C:\QT\5.15.2\MSVC2019_64\BIN\MOC.EXE -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\LOGTHREAD.H -C:\QT\5.15.2\MSVC2019_64\BIN\MOC.EXE -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\SAVETHREAD.H -C:\QT\5.15.2\MSVC2019_64\BIN\MOC.EXE -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\DIALOGSETUPPASSWD.HPP -C:\QT\5.15.2\MSVC2019_64\BIN\MOC.EXE -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\DIALOGSETUP.HPP -C:\QT\5.15.2\MSVC2019_64\BIN\MOC.EXE -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\CIGARETTE.QRC -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\DIALOGSETUPPASSWD.UI -C:\QT\5.15.2\MSVC2019_64\BIN\UIC.EXE -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\DIALOGSETUP.UI -C:\QT\5.15.2\MSVC2019_64\BIN\UIC.EXE -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\PLCSETUP.UI -C:\QT\5.15.2\MSVC2019_64\BIN\UIC.EXE -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\ALARMDIALOG.UI -C:\QT\5.15.2\MSVC2019_64\BIN\UIC.EXE -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\DIALOGIN.UI -C:\QT\5.15.2\MSVC2019_64\BIN\UIC.EXE -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\CAMERA_GLUE.UI -C:\QT\5.15.2\MSVC2019_64\BIN\UIC.EXE -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\CHANGE_SHIFT.UI -C:\QT\5.15.2\MSVC2019_64\BIN\UIC.EXE -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\OUTPUT_STATISTIC.UI -C:\QT\5.15.2\MSVC2019_64\BIN\UIC.EXE diff --git a/Cigarette/x64/Release/Cigarette.tlog/CustomBuild.write.1.tlog b/Cigarette/x64/Release/Cigarette.tlog/CustomBuild.write.1.tlog deleted file mode 100644 index 39267e13..00000000 --- a/Cigarette/x64/Release/Cigarette.tlog/CustomBuild.write.1.tlog +++ /dev/null @@ -1,58 +0,0 @@ -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\CIGARETTE.H -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\GENERATEDFILES\RELEASE\MOC_CIGARETTE.CPP -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\CIGARETTE.UI -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\GENERATEDFILES\UI_CIGARETTE.H -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\THREADRECEIVE.H -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\GENERATEDFILES\RELEASE\MOC_THREADRECEIVE.CPP -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\WORKTHREAD.H -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\GENERATEDFILES\RELEASE\MOC_WORKTHREAD.CPP -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\ALARMDIALOG.HPP -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\GENERATEDFILES\RELEASE\MOC_ALARMDIALOG.CPP -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\CAPTURETHREAD.H -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\GENERATEDFILES\RELEASE\MOC_CAPTURETHREAD.CPP -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\CAPTURETHREADBASLER.H -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\GENERATEDFILES\RELEASE\MOC_CAPTURETHREADBASLER.CPP -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\CAPTURETHREADHIK.H -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\GENERATEDFILES\RELEASE\MOC_CAPTURETHREADHIK.CPP -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\CAMERA_GLUE.H -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\GENERATEDFILES\RELEASE\MOC_CAMERA_GLUE.CPP -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\CHANGE_SHIFT.H -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\GENERATEDFILES\RELEASE\MOC_CHANGE_SHIFT.CPP -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\CLEANTHREAD.H -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\GENERATEDFILES\RELEASE\MOC_CLEANTHREAD.CPP -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\PLCSETUP.HPP -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\GENERATEDFILES\RELEASE\MOC_PLCSETUP.CPP -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\DB_LABEL.H -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\GENERATEDFILES\RELEASE\MOC_DB_LABEL.CPP -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\DEBUGTHREAD.H -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\GENERATEDFILES\RELEASE\MOC_DEBUGTHREAD.CPP -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\DIALOGIN.HPP -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\GENERATEDFILES\RELEASE\MOC_DIALOGIN.CPP -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\OUTPUT_STATISTIC.H -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\GENERATEDFILES\RELEASE\MOC_OUTPUT_STATISTIC.CPP -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\LOGTHREAD.H -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\GENERATEDFILES\RELEASE\MOC_LOGTHREAD.CPP -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\SAVETHREAD.H -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\GENERATEDFILES\RELEASE\MOC_SAVETHREAD.CPP -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\DIALOGSETUPPASSWD.HPP -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\GENERATEDFILES\RELEASE\MOC_DIALOGSETUPPASSWD.CPP -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\DIALOGSETUP.HPP -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\GENERATEDFILES\RELEASE\MOC_DIALOGSETUP.CPP -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\CIGARETTE.QRC -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\GENERATEDFILES\QRC_CIGARETTE.CPP -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\DIALOGSETUPPASSWD.UI -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\GENERATEDFILES\UI_DIALOGSETUPPASSWD.H -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\DIALOGSETUP.UI -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\GENERATEDFILES\UI_DIALOGSETUP.H -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\PLCSETUP.UI -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\GENERATEDFILES\UI_PLCSETUP.H -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\ALARMDIALOG.UI -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\GENERATEDFILES\UI_ALARMDIALOG.H -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\DIALOGIN.UI -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\GENERATEDFILES\UI_DIALOGIN.H -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\CAMERA_GLUE.UI -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\GENERATEDFILES\UI_CAMERA_GLUE.H -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\CHANGE_SHIFT.UI -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\GENERATEDFILES\UI_CHANGE_SHIFT.H -^D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\OUTPUT_STATISTIC.UI -D:\烟厂资料\烟厂软件代码\230526-郑州条盒-2相机拍两次-1600X900-2\CIGARETTE\GENERATEDFILES\UI_OUTPUT_STATISTIC.H diff --git a/Cigarette/x64/Release/Cigarette.tlog/link.command.1.tlog b/Cigarette/x64/Release/Cigarette.tlog/link.command.1.tlog deleted file mode 100644 index c4776ad8..00000000 Binary files a/Cigarette/x64/Release/Cigarette.tlog/link.command.1.tlog and /dev/null differ diff --git a/Cigarette/x64/Release/Cigarette.tlog/link.read.1.tlog b/Cigarette/x64/Release/Cigarette.tlog/link.read.1.tlog deleted file mode 100644 index 328b327b..00000000 Binary files a/Cigarette/x64/Release/Cigarette.tlog/link.read.1.tlog and /dev/null differ diff --git a/Cigarette/x64/Release/Cigarette.tlog/link.write.1.tlog b/Cigarette/x64/Release/Cigarette.tlog/link.write.1.tlog deleted file mode 100644 index 18a875fe..00000000 Binary files a/Cigarette/x64/Release/Cigarette.tlog/link.write.1.tlog and /dev/null differ diff --git a/Cigarette/x64/Release/Cleanthread.obj b/Cigarette/x64/Release/Cleanthread.obj deleted file mode 100644 index 7d9bb250..00000000 Binary files a/Cigarette/x64/Release/Cleanthread.obj and /dev/null differ diff --git a/Cigarette/x64/Release/Logthread.obj b/Cigarette/x64/Release/Logthread.obj deleted file mode 100644 index 0eb04693..00000000 Binary files a/Cigarette/x64/Release/Logthread.obj and /dev/null differ diff --git a/Cigarette/x64/Release/PLCDevice.obj b/Cigarette/x64/Release/PLCDevice.obj deleted file mode 100644 index 6c0957ca..00000000 Binary files a/Cigarette/x64/Release/PLCDevice.obj and /dev/null differ diff --git a/Cigarette/x64/Release/SyncQueue.obj b/Cigarette/x64/Release/SyncQueue.obj deleted file mode 100644 index 3ced36ca..00000000 Binary files a/Cigarette/x64/Release/SyncQueue.obj and /dev/null differ diff --git a/Cigarette/x64/Release/alarmdialog.obj b/Cigarette/x64/Release/alarmdialog.obj deleted file mode 100644 index bb5ec704..00000000 Binary files a/Cigarette/x64/Release/alarmdialog.obj and /dev/null differ diff --git a/Cigarette/x64/Release/alg_jd.obj b/Cigarette/x64/Release/alg_jd.obj deleted file mode 100644 index 2e4a1830..00000000 Binary files a/Cigarette/x64/Release/alg_jd.obj and /dev/null differ diff --git a/Cigarette/x64/Release/balluffcamera.obj b/Cigarette/x64/Release/balluffcamera.obj deleted file mode 100644 index 2b00acb2..00000000 Binary files a/Cigarette/x64/Release/balluffcamera.obj and /dev/null differ diff --git a/Cigarette/x64/Release/basecamera.obj b/Cigarette/x64/Release/basecamera.obj deleted file mode 100644 index b5f0064b..00000000 Binary files a/Cigarette/x64/Release/basecamera.obj and /dev/null differ diff --git a/Cigarette/x64/Release/baslercamera.obj b/Cigarette/x64/Release/baslercamera.obj deleted file mode 100644 index bc1fa830..00000000 Binary files a/Cigarette/x64/Release/baslercamera.obj and /dev/null differ diff --git a/Cigarette/x64/Release/camera_glue.obj b/Cigarette/x64/Release/camera_glue.obj deleted file mode 100644 index 157921db..00000000 Binary files a/Cigarette/x64/Release/camera_glue.obj and /dev/null differ diff --git a/Cigarette/x64/Release/change_shift.obj b/Cigarette/x64/Release/change_shift.obj deleted file mode 100644 index f4e6993a..00000000 Binary files a/Cigarette/x64/Release/change_shift.obj and /dev/null differ diff --git a/Cigarette/x64/Release/cigarette.obj b/Cigarette/x64/Release/cigarette.obj deleted file mode 100644 index cf06488b..00000000 Binary files a/Cigarette/x64/Release/cigarette.obj and /dev/null differ diff --git a/Cigarette/x64/Release/common.obj b/Cigarette/x64/Release/common.obj deleted file mode 100644 index 4f0c4e65..00000000 Binary files a/Cigarette/x64/Release/common.obj and /dev/null differ diff --git a/Cigarette/x64/Release/db_label.obj b/Cigarette/x64/Release/db_label.obj deleted file mode 100644 index adbf59bc..00000000 Binary files a/Cigarette/x64/Release/db_label.obj and /dev/null differ diff --git a/Cigarette/x64/Release/debugthread.obj b/Cigarette/x64/Release/debugthread.obj deleted file mode 100644 index 703636df..00000000 Binary files a/Cigarette/x64/Release/debugthread.obj and /dev/null differ diff --git a/Cigarette/x64/Release/dialogin.obj b/Cigarette/x64/Release/dialogin.obj deleted file mode 100644 index e1325f48..00000000 Binary files a/Cigarette/x64/Release/dialogin.obj and /dev/null differ diff --git a/Cigarette/x64/Release/dialogsetup.obj b/Cigarette/x64/Release/dialogsetup.obj deleted file mode 100644 index 03372a9c..00000000 Binary files a/Cigarette/x64/Release/dialogsetup.obj and /dev/null differ diff --git a/Cigarette/x64/Release/dialogsetuppasswd.obj b/Cigarette/x64/Release/dialogsetuppasswd.obj deleted file mode 100644 index 7be616b0..00000000 Binary files a/Cigarette/x64/Release/dialogsetuppasswd.obj and /dev/null differ diff --git a/Cigarette/x64/Release/hikcamera.obj b/Cigarette/x64/Release/hikcamera.obj deleted file mode 100644 index 45df3176..00000000 Binary files a/Cigarette/x64/Release/hikcamera.obj and /dev/null differ diff --git a/Cigarette/x64/Release/main.obj b/Cigarette/x64/Release/main.obj deleted file mode 100644 index bffa5a0b..00000000 Binary files a/Cigarette/x64/Release/main.obj and /dev/null differ diff --git a/Cigarette/x64/Release/moc_CaptureThread.obj b/Cigarette/x64/Release/moc_CaptureThread.obj deleted file mode 100644 index 55224396..00000000 Binary files a/Cigarette/x64/Release/moc_CaptureThread.obj and /dev/null differ diff --git a/Cigarette/x64/Release/moc_CaptureThreadBasler.obj b/Cigarette/x64/Release/moc_CaptureThreadBasler.obj deleted file mode 100644 index 02301dbf..00000000 Binary files a/Cigarette/x64/Release/moc_CaptureThreadBasler.obj and /dev/null differ diff --git a/Cigarette/x64/Release/moc_CaptureThreadHIK.obj b/Cigarette/x64/Release/moc_CaptureThreadHIK.obj deleted file mode 100644 index 9f62aab9..00000000 Binary files a/Cigarette/x64/Release/moc_CaptureThreadHIK.obj and /dev/null differ diff --git a/Cigarette/x64/Release/moc_Cleanthread.obj b/Cigarette/x64/Release/moc_Cleanthread.obj deleted file mode 100644 index 6f6ab005..00000000 Binary files a/Cigarette/x64/Release/moc_Cleanthread.obj and /dev/null differ diff --git a/Cigarette/x64/Release/moc_Logthread.obj b/Cigarette/x64/Release/moc_Logthread.obj deleted file mode 100644 index bf77d256..00000000 Binary files a/Cigarette/x64/Release/moc_Logthread.obj and /dev/null differ diff --git a/Cigarette/x64/Release/moc_alarmdialog.obj b/Cigarette/x64/Release/moc_alarmdialog.obj deleted file mode 100644 index faaae768..00000000 Binary files a/Cigarette/x64/Release/moc_alarmdialog.obj and /dev/null differ diff --git a/Cigarette/x64/Release/moc_camera_glue.obj b/Cigarette/x64/Release/moc_camera_glue.obj deleted file mode 100644 index 776f84c0..00000000 Binary files a/Cigarette/x64/Release/moc_camera_glue.obj and /dev/null differ diff --git a/Cigarette/x64/Release/moc_change_shift.obj b/Cigarette/x64/Release/moc_change_shift.obj deleted file mode 100644 index 7d7eac09..00000000 Binary files a/Cigarette/x64/Release/moc_change_shift.obj and /dev/null differ diff --git a/Cigarette/x64/Release/moc_cigarette.obj b/Cigarette/x64/Release/moc_cigarette.obj deleted file mode 100644 index c53e0b3b..00000000 Binary files a/Cigarette/x64/Release/moc_cigarette.obj and /dev/null differ diff --git a/Cigarette/x64/Release/moc_db_label.obj b/Cigarette/x64/Release/moc_db_label.obj deleted file mode 100644 index afc0113d..00000000 Binary files a/Cigarette/x64/Release/moc_db_label.obj and /dev/null differ diff --git a/Cigarette/x64/Release/moc_debugthread.obj b/Cigarette/x64/Release/moc_debugthread.obj deleted file mode 100644 index 3bc7b442..00000000 Binary files a/Cigarette/x64/Release/moc_debugthread.obj and /dev/null differ diff --git a/Cigarette/x64/Release/moc_dialogin.obj b/Cigarette/x64/Release/moc_dialogin.obj deleted file mode 100644 index 50b01302..00000000 Binary files a/Cigarette/x64/Release/moc_dialogin.obj and /dev/null differ diff --git a/Cigarette/x64/Release/moc_dialogsetup.obj b/Cigarette/x64/Release/moc_dialogsetup.obj deleted file mode 100644 index 4ff72955..00000000 Binary files a/Cigarette/x64/Release/moc_dialogsetup.obj and /dev/null differ diff --git a/Cigarette/x64/Release/moc_dialogsetuppasswd.obj b/Cigarette/x64/Release/moc_dialogsetuppasswd.obj deleted file mode 100644 index 5289da25..00000000 Binary files a/Cigarette/x64/Release/moc_dialogsetuppasswd.obj and /dev/null differ diff --git a/Cigarette/x64/Release/moc_output_statistic.obj b/Cigarette/x64/Release/moc_output_statistic.obj deleted file mode 100644 index da742b76..00000000 Binary files a/Cigarette/x64/Release/moc_output_statistic.obj and /dev/null differ diff --git a/Cigarette/x64/Release/moc_plcsetup.obj b/Cigarette/x64/Release/moc_plcsetup.obj deleted file mode 100644 index 751b5eb0..00000000 Binary files a/Cigarette/x64/Release/moc_plcsetup.obj and /dev/null differ diff --git a/Cigarette/x64/Release/moc_savethread.obj b/Cigarette/x64/Release/moc_savethread.obj deleted file mode 100644 index 04aa933f..00000000 Binary files a/Cigarette/x64/Release/moc_savethread.obj and /dev/null differ diff --git a/Cigarette/x64/Release/moc_threadReceive.obj b/Cigarette/x64/Release/moc_threadReceive.obj deleted file mode 100644 index 7f1f7a2c..00000000 Binary files a/Cigarette/x64/Release/moc_threadReceive.obj and /dev/null differ diff --git a/Cigarette/x64/Release/moc_workthread.obj b/Cigarette/x64/Release/moc_workthread.obj deleted file mode 100644 index 0339aa9b..00000000 Binary files a/Cigarette/x64/Release/moc_workthread.obj and /dev/null differ diff --git a/Cigarette/x64/Release/output_statistic.obj b/Cigarette/x64/Release/output_statistic.obj deleted file mode 100644 index 6fbf4216..00000000 Binary files a/Cigarette/x64/Release/output_statistic.obj and /dev/null differ diff --git a/Cigarette/x64/Release/plc_item.obj b/Cigarette/x64/Release/plc_item.obj deleted file mode 100644 index 6197a488..00000000 Binary files a/Cigarette/x64/Release/plc_item.obj and /dev/null differ diff --git a/Cigarette/x64/Release/plcsetup.obj b/Cigarette/x64/Release/plcsetup.obj deleted file mode 100644 index eb9ff498..00000000 Binary files a/Cigarette/x64/Release/plcsetup.obj and /dev/null differ diff --git a/Cigarette/x64/Release/threadReceive.obj b/Cigarette/x64/Release/threadReceive.obj deleted file mode 100644 index 66a2f509..00000000 Binary files a/Cigarette/x64/Release/threadReceive.obj and /dev/null differ diff --git a/Cigarette/x64/Release/threadSend.obj b/Cigarette/x64/Release/threadSend.obj deleted file mode 100644 index 5c09a77b..00000000 Binary files a/Cigarette/x64/Release/threadSend.obj and /dev/null differ diff --git a/Cigarette/x64/Release/workthread.obj b/Cigarette/x64/Release/workthread.obj deleted file mode 100644 index bc6dae35..00000000 Binary files a/Cigarette/x64/Release/workthread.obj and /dev/null differ diff --git a/conf/conf.txt b/conf/conf.txt deleted file mode 100644 index 9c04ee6e..00000000 --- a/conf/conf.txt +++ /dev/null @@ -1,41 +0,0 @@ -SAVE=0 -MISMATCHACT=1 -SAVE_DAYS=1 -AUTO_OPEN=1 -AUTO_WORK=1 -AUTO_SHIFT=0 -TIMING_SHIFT=1 -SHIFT_A=6|0 -SHIFT_B=12|0 -SHIFT_C=20|0 -***************************************** -EXPO1=500 -GAIN1=0 -FILTER1=500 -USERID1=0 -NO1=1|1|1 -SHOOT1=3 -***************************************** -EXPO2=500 -GAIN2=0 -FILTER2=500 -USERID2=1 -NO2=1|1|1 -SHOOT2=3 -***************************************** -EXPO3=500 -GAIN3=0 -FILTER3=500 -USERID3=2 -NO3=1|1|1 -SHOOT3=3 -***************************************** -EXPO4=500 -GAIN4=0 -FILTER4=500 -USERID4=3 -NO4=1|1|1 -SHOOT4=3 -***************************************** -MonitorIP=192.168.10.139 -MonitorPort=3000 diff --git a/conf/modbus.txt b/conf/modbus.txt deleted file mode 100644 index d8abd676..00000000 --- a/conf/modbus.txt +++ /dev/null @@ -1,9 +0,0 @@ -KICK1=46006 -KICK2=46006 -QUANTITY=46008 -SHIFT=30100 -WORK=30101 -NO_KICK=30102 -DEBUG=30103 -RESET=30104 -ALARM=46018 \ No newline at end of file diff --git a/conf/plc.txt b/conf/plc.txt deleted file mode 100644 index a6c6edf2..00000000 --- a/conf/plc.txt +++ /dev/null @@ -1,21 +0,0 @@ -ʼ/ͣ|30101|0|1ʼ0ͣ -|46018|0|0ޱο -|46008|0|Сģʽ -|30100|0|д1 -1#޳|46006|0|1#޳ -1#У|47000|450| -1#У|47002|510|½ -1#1|47004|550| -1#1|47006|620|½ -1#2|47008|700| -1#2|47010|800|½ -1#3|47012|820| -1#3|47014|880|½ -2#У|47100|450| -2#У|47102|510|½ -2#1|47104|550| -2#1|47106|620|½ -2#2|47108|700| -2#2|47110|800|½ -2#3|47112|820| -2#3|47114|880|½ diff --git a/conf/rotate.txt b/conf/rotate.txt deleted file mode 100644 index 48882cc8..00000000 --- a/conf/rotate.txt +++ /dev/null @@ -1 +0,0 @@ -0,3,0,3,0,3,0,3, \ No newline at end of file diff --git a/conf/说明.txt b/conf/说明.txt deleted file mode 100644 index 8c5146eb..00000000 --- a/conf/说明.txt +++ /dev/null @@ -1 +0,0 @@ -此文件夹文件请根据现场情况进行更改 \ No newline at end of file