pax_global_header00006660000000000000000000000064141405540770014521gustar00rootroot0000000000000052 comment=65cb60d0118ed79857d083b6fb20873adc5aae96 gr-satellites-4.4.0/000077500000000000000000000000001414055407700143055ustar00rootroot00000000000000gr-satellites-4.4.0/.clang-format000066400000000000000000000056001414055407700166610ustar00rootroot00000000000000--- Language: Cpp # BasedOnStyle: LLVM AccessModifierOffset: -4 AlignAfterOpenBracket: Align AlignConsecutiveAssignments: false AlignConsecutiveDeclarations: false AlignEscapedNewlinesLeft: true AlignOperands: true AlignTrailingComments: true AllowAllParametersOfDeclarationOnNextLine: true AllowShortBlocksOnASingleLine: false AllowShortCaseLabelsOnASingleLine: false AllowShortFunctionsOnASingleLine: All AllowShortIfStatementsOnASingleLine: false AllowShortLoopsOnASingleLine: false AlwaysBreakAfterDefinitionReturnType: None AlwaysBreakAfterReturnType: None AlwaysBreakBeforeMultilineStrings: false AlwaysBreakTemplateDeclarations: true BinPackArguments: false BinPackParameters: false BreakBeforeBraces: Custom BraceWrapping: AfterClass: true AfterControlStatement: false AfterEnum: false AfterFunction: true AfterNamespace: false AfterObjCDeclaration: false AfterStruct: false AfterUnion: false BeforeCatch: false BeforeElse: false IndentBraces: false BreakBeforeBinaryOperators: None BreakBeforeTernaryOperators: true BreakConstructorInitializersBeforeComma: false BreakAfterJavaFieldAnnotations: false BreakStringLiterals: true ColumnLimit: 90 CommentPragmas: '^ IWYU pragma:' ConstructorInitializerAllOnOneLineOrOnePerLine: true ConstructorInitializerIndentWidth: 4 ContinuationIndentWidth: 4 Cpp11BracedListStyle: false DerivePointerAlignment: false DisableFormat: false ExperimentalAutoDetectBinPacking: false ForEachMacros: - foreach - Q_FOREACH - BOOST_FOREACH IncludeCategories: - Regex: '^"(gnuradio)/' Priority: 1 - Regex: '^<(gnuradio)/' Priority: 2 - Regex: '^<(boost)/' Priority: 98 - Regex: '^<[a-z]*>$' Priority: 99 - Regex: '^".*"$' Priority: 0 - Regex: '.*' Priority: 10 IncludeIsMainRegex: '(Test)?$' IndentCaseLabels: false IndentWidth: 4 IndentWrappedFunctionNames: false JavaScriptQuotes: Leave JavaScriptWrapImports: true KeepEmptyLinesAtTheStartOfBlocks: true MacroBlockBegin: '' MacroBlockEnd: '' MaxEmptyLinesToKeep: 2 NamespaceIndentation: None ObjCBlockIndentWidth: 2 ObjCSpaceAfterProperty: false ObjCSpaceBeforeProtocolList: true PenaltyBreakBeforeFirstCallParameter: 19 PenaltyBreakComment: 300 PenaltyBreakFirstLessLess: 120 PenaltyBreakString: 1000 PenaltyExcessCharacter: 1000000 PenaltyReturnTypeOnItsOwnLine: 60 PointerAlignment: Left ReflowComments: true SortIncludes: true SpaceAfterCStyleCast: false SpaceAfterTemplateKeyword: true SpaceBeforeAssignmentOperators: true SpaceBeforeParens: ControlStatements SpaceInEmptyParentheses: false SpacesBeforeTrailingComments: 1 SpacesInAngles: false SpacesInContainerLiterals: true SpacesInCStyleCastParentheses: false SpacesInParentheses: false SpacesInSquareBrackets: false Standard: Cpp11 TabWidth: 8 UseTab: Never gr-satellites-4.4.0/.github/000077500000000000000000000000001414055407700156455ustar00rootroot00000000000000gr-satellites-4.4.0/.github/FUNDING.yml000066400000000000000000000000731414055407700174620ustar00rootroot00000000000000github: daniestevez custom: "https://destevez.net/donate/" gr-satellites-4.4.0/.github/workflows/000077500000000000000000000000001414055407700177025ustar00rootroot00000000000000gr-satellites-4.4.0/.github/workflows/build-ubuntu.yml000066400000000000000000000005311414055407700230430ustar00rootroot00000000000000name: build-ubuntu # Controls when the action will run. on: push: pull_request: workflow_dispatch: jobs: build-ubuntu: runs-on: ubuntu-latest steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v2 - uses: daniestevez/gr-satellites-ci-action@v1.2.1 gr-satellites-4.4.0/.github/workflows/clang-format-lint.yml000066400000000000000000000004041414055407700237410ustar00rootroot00000000000000name: clang-format lint on: push: pull_request: jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: gnuradio/clang-format-lint-action@v0.5-4 with: source: '.' extensions: 'h,hpp,cpp,cc' gr-satellites-4.4.0/.github/workflows/pycodestyle.yml000066400000000000000000000005411414055407700227710ustar00rootroot00000000000000name: pycodestyle # Controls when the action will run. on: push: pull_request: workflow_dispatch: jobs: pycodestyle: runs-on: ubuntu-latest steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v2 - uses: daniestevez/gr-satellites-pycodestyle-action@0.2.2 gr-satellites-4.4.0/.gitignore000066400000000000000000000000311414055407700162670ustar00rootroot00000000000000*~ apps/*.py __pycache__ gr-satellites-4.4.0/.gitmodules000066400000000000000000000001731414055407700164630ustar00rootroot00000000000000[submodule "satellite-recordings"] path = satellite-recordings url = https://github.com/daniestevez/satellite-recordings gr-satellites-4.4.0/CCSDS_README.md000066400000000000000000000217461414055407700165150ustar00rootroot00000000000000# CCSDS Documentation The CCSDS stack is a series of standard protocols for space communications covering all the layers of the network stack, from the physical layer to the application layer. Each of the CCSDS protocols is described in a Blue Book (recommended standards). More information about design decisions for each protocol can be found in its Green Book (informational report). In every example framework the initial setup is the following: * There is a Message Strobe block that creates a trigger every 1k ms (1s) * The Message Strobe sends this trigger to a Random PDU Generator block * Random PDU Generator block generates random bytes in the defined size spectum that are used as a payload Blue Books used in this implementation: * TC Space Data Link Protocol (CCSDS 232.1-B-2) * Space Packet Protocol (CCSDS 133.0-B-1) * TM Space Data Link Protocol (CCSDS 132.0-B-2) * Time Code Formats (CCSDS 301.0-B-4) * TM Synchronization and Channel Coding (CCSDS 131.0-B-3) The flowgraphs can be found in the /examples folder. ## Space Packet Protocol and a flowgraph without a timestamp In this [Space_Packet_without_TimeStamp](examples/Space_Packet_without_TimeStamp.grc), the payload is fed to the Space Packet Primary Header Adder block. That block is directly connected to the Space Packet Parser block, which in turn prints the whole packet. * The Space Packet Primary Header Adder block adds the necessary bytes that are described in the CCSDS 133.0-B-1, in the Primary Header section. The user can input the data per the needed configuration. * The Space Packet Parser receives the packet and by choosing "No" in the Time Header option, it prints the packet showing just the Primary Header(every attribute) and the payload (as bytes). ## Space Packet Protocol and a flowgraph with a timestamp In this [Space_Packet_with_TimeStamp](examples/Space_Packet_with_TimeStamp.grc), the payload is fed to the Message Strobe block triggers every 1 second the Random PDU Generator that generates random bytes (payload). That is feeded to the Space Packet Primary Header Adder block. That block is directly connected to the Space Packet Parser block, which in turn prints the whole packet. * The Space Packet Time Stamp Adder block adds a timestamp as a Secondary Header between the payload and the Primary Header. The various formats are describe din the Time Code Formats Blue Book (CCSDS 301.0-B-4). The existence of a PField and Time Format has to be chosen here and in the Space Packet Parser. * The Time Format Parameters block is a global variable struct that defines the variables needed for each time format used in this flowgraph. The id of this block needs to be added both in the Space Packet Time Stamp Adder block and in the Space Packet Parser block. * The Space Packet Primary Header Adder block adds the necessary bytes that are described in the CCSDS 133.0-B-1, in the Primary Header section. The user can input the data per the needed configuration. * The Space Packet Parser receives the packet and by choosing "Yes" in the Time Header option, defining the time format and defining the use or not of the PField, it prints the packet showing the Primary Header(every attribute) the timestamp(every attribute) and the (optionally) PField and the payload (as bytes). ## Space Packet Protocol and a flowgraph with a Path ID demux In this [Space_Packet_with_PathID_Demux](examples/Space_Packet_with_PathID_Demux.grc), the payload is fed to the Space Packet Primary Header Adder block. That block is directly connected to the Path ID Demultiplexer. That block is connected to 3 Space Packet Parser blocks. It directs the packet to the appropriate block taking account the packet's APID. If the packet's APID is not defined in the vector of the Path ID Demultiplexer block, then it is redirected to the last output (discarded). The Space Packet Parser block, in turn, prints the whole packet. * The Space Packet Primary Header Adder block adds the necessary bytes that are described in the CCSDS 133.0-B-1, in the Primary Header section. The user can input the data per the needed configuration. * The Space Packet Parser receives the packet and by choosing "No" in the Time Header option, it prints the packet showing just the Primary Header(every attribute) and the payload (as bytes). * The PAth ID Demultiplexer block redirects to one of the possible outputs. It redirects in the last output "Discard", if the APID doesn't match any given ID in the block. ## TC Packet and a simple flowgraph In this [TC_Packet](examples/TC_Packet.grc), the payload is feeded to the Telecommand Primary Header Adder block. That block is directly connected to the Telecommand Parser block, which prints the whole packet. * The Telecommand Primary Header Adder block adds the necessary bytes that are described in the Blue Book. The users can input the data per the needed configuration. * The Telecommand Parser block prints out the data; every attribute of the Primary Header as well as the payload (as bytes). ## TM Packet and a simple flowgraph In this [TM_Packet](examples/TM_Packet.grc), the payload is fed to the Telemetry Primary Header Adder block. That block is direclty connected to the Telemetry Parser block, which prints the whole packet. * The Telemetry Primary Header Adder block adds the necessary bytes that are described in the Blue Book. The users can input the data per the needed configuration. * The Telemetry Parser block prints out the data, once the segmentation is complete; every attribute of the Primary Header as well as the payload (as bytes). The user has to define the Coding and the size of the received packet. ## TM Packet and a flowgraph with OCF In this [TM_Packet_with_OCF](examples/TM_Packet_with_OCF.grc), the payload is fed to the Telemetry Primary Header Adder block. That block is direclty connected to the Telemetry OCF Adder block, which is connected to the Telemetry Parser block, which, in turn, prints the whole packet. * The Telemetry Primary Header Adder block adds the necessary bytes that are described in the Blue Book. The users can input the data per the needed configuration. * The Telemetry Parser block prints out the data, once the segmentation is complete; every attribute of the Primary Header as well as the payload (as bytes). The user has to define the Coding and the size of the received packet. * The Telemetry OCF Adder block adds an OCF trailer to the packet. The user has to define the OCF attributes. ## TM Packet and a flowgraph with Virtual Channel demux In this [TM_Packet_with_VC_demux](examples/TM_Packet_with_VC_demux.grc), the payload is fed to the Telemetry Primary Header Adder block. That block is directly connected to the Virtual Channel Demultiplexer. That block is connected to 3 Telemetry Parser blocks. It directs the packet to the appropriate block taking account the packet's Virtual Channel. If the packet's Virtual Channel is not defined in the vector of the Virtual Channel Demultiplexer block, then it is redirected to the last output (discarded). The Telemetry Parser block, in turn, prints the whole packet. * The Telemetry Primary Header Adder block adds the necessary bytes that are described in the CCSDS 132.0-B-2, in the Primary Header section. The user can input the data per the needed configuration. * The Telemetry Parser receives the packet and it prints it showing just the Primary Header(every attribute) and the payload (as bytes). * The Virtual Channel Demultiplexer block redirects to one of the possible outputs. It redirects in the last output "Discard", if the VC doesn't match any given ID in the block. ## TM Packet containing a Space Packet In this [TM_Packet_with_Space_Packet](examples/TM_Packet_with_Space_Packet.grc), the payload is fed to the Space Packet Primary Header Adder. That block is directly connected to the Telemetry Primary Header Adder (which takes care of the segmentation). Then the TM packet containing the Space Packet is printed in the Telemetry Parser, is sent to the Telemetry Packet Reconstruction block, to remove the TM headers and rebuild the Space Packets. When a Space Packet is complete, it is sent to the Space Packet Parser Block to be printed. * The Space Packet Primary Header Adder block adds the necessary bytes that are described in the CCSDS 133.0-B-1, in the Primary Header section. The user can input the data per the needed configuration. * The Space Packet Parser receives the packet and by choosing "No" in the Time Header option, it prints the packet showing just the Primary Header(every attribute) and the payload (as bytes). * The Telemetry Primary Header Adder block adds the necessary bytes that are described in the Blue Book. The users can input the data per the needed configuration. * The Telemetry Parser block prints out the data, once the segmentation is complete; every attribute of the Primary Header as well as the payload (as bytes). The user has to define the Coding and the size of the received packet. * The Telemetry Packet Reconstruction block is in charge of removing the TM headers and reconstructing the Space Packet. Important Note: This block is specifically made for the Space Packet. gr-satellites-4.4.0/CHANGELOG.md000066400000000000000000000335151414055407700161250ustar00rootroot00000000000000# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## Unreleased ## [4.4.0], [3.11.0] - 2021-11-03 ### Added - Support for BINAR-1 - Support for CUAVA-1 - Support for CUTE - CCSDS Uncoded Deframer block ### Changed - Default output path for file receiver changed to current directory - Added 9k6 mode to BEESAT-1 ### Fixed - CSP header parsing in AAUSAT-4 and BY70-1 telemetry parsers - YUSAT deframer ### Removed - Deleted unused test_satellites.cc test code ## [4.3.1], [3.10.1] - 2021-09-11 ### Changed - Do not swap CSP header endianness in AX100 and U482C deframers - Final NORAD ID for LEDSAT ### Fixed - Fatal error of the image receiver if feh can't be run ## [4.3.0], [3.10.0] - 2021-08-20 ### Added - Support for DHABISAT - Support for ION SCV-003 - Support for IT-SPINS - Support for JAISAT-1 - Support for LEDSAT - Support for QMR-KWT - Support for RAMSAT - Support for SOAR - Support for TUBIN - Ability to change frame length in fixedlen_tagger block ## [4.2.0], [3.9.0] - 2021-06-18 ### Added - Support for CubeSX-HSE in 1k2, 2k4 and 4k8 modes - Support for CubeSX-Sirius-HSE in 1k2 and 2k4 modes - Support for OrbicraftZorkiy in 2k4 mode - Support for KAITUO-1B - Support for DIY-1 - Support for MIR-SAT1 ### Fixed - Runtime bug in AALTO-1 deframer - Duplicated printing with --hexdump and unknown telemetry - Bug in FSK demodulator with IQ mode and high baudrate ## [4.1.0], [3.8.0] - 2021-04-24 ### Added - USP deframer - Env variable GR_SATELLITES_SUBMIT_TLM to force/disable telemetry submission - Ability to disable AX100 ASM+Golay scrambler in SatYAML and GRC block - Support for BCCSAT 1 - Support for CUBE-L - Support for GRBAlpha - Support for NanosatC-BR1 and NanosatC-BR2 - Support for SIMBA - Support for SMOG-1 - Support for SPUTNIX satellites: OrbiCraft-Zorkiy, CubeSX-HSE, CubeSX-Sirius-HSE, KSU CubeSat - Support for STECCO - Support for TAUSAT-1 and TSURU - Support for UNISAT-7 - 2k4 downlink for MEZNSAT ### Changed - In gr_satellites, do not disable non-telemetry datasinks in --hexdump mode - Reformatting of Python code according to PEP8 ### Fixed - RS basis options swapped in CCSDS Reed-Solomon encoder GRC block ## [4.0.0] - 2021-03-06 ### Added - Support for DELFI-n3xt ### Changed - Final NORAD for UVSQ-Sat - Document that --wavfile allows OGG/FLAC ## [3.7.0] and [4.0.0-rc1] - 2021-02-19 ### Added - Read sample rate from WAV files automatically - PDU Length Filter block - Example decoder for NEXUS 19k2 pi/4-DQPSK telemetry - Support for AALTO-1 CC1125 mode - Support for CAPE-3 - Support for DELFI-C3 - Support for EXOCUBE-2 - Support for Grizu-263A - Support for IDEASSat - Support for MiTEE-1 - Support for SOMP 2b - Support for UVSQ-SAT - Support for YUSAT-1 ### Changed - Add filter before quadrature demod for IQ input FSK demodulator ### Fixed - Runtime error when the baudrate is too high for the sample rate - Errors about wrong Reed-Solomon message size with OPS-SAT deframer - Bug in SIDS submit URL encoding - Bug with SatYAML files in platforms not using UTF-8 - Build problems with clang ## [3.6.0] - 2020-12-04 ### Added - PDU add metadata block - PDU Head/Tail block - Lucky-7 image receiver - Support for custom SIDS servers - Support for AISTECHSAT-2 custom protocol - Support for BOBCAT-1 - Support for BY03 - Support for FossaSat-1B and FossaSat-2 - Support for NEUTRON-1 - Support for SPOC - Support for TTU-100 - Support for VZLUSAT-2 ### Changed - Replaced boost::bind() by C++ lambdas - Refactored Reed-Solomon decoder C++ blocks - Refactored CCSDS deframer blocks to allow more generality - Make --clk_limit parameter relative to samples per symbol - Updated AISTECHSAT-2 transmit frequency - Definitive NORAD IDs for NETSAT 1-4 ### Removed - Deprecated Astrocast 9k6 deframer in favour of the new CCSDS Reed-Solomon deframer - Deprecated CC11xx remove length, Header remover and Strip AX.25 header in favour of PDU Head/Tail ## [3.5.2] - 2020-10-21 ### Changed - Fixed bug in S-NET deframer ## [3.5.1] - 2020-10-17 ### Changed - Added final NORAD ID for DEKART - Fixed bug in SALSAT CRC calculation ## [3.5.0] - 2020-10-08 ### Added - Option for generating correct recording timestamps by playing back at 1x speed - Option for listing the supported satellites in gr_satellites - Mobitex and Mobitex-NX deframer - Support for SALSAT - Support for MEZNSAT - Support for satellites using Mobitex and Mobitex-NX (D-STAR ONE, BEESAT, TECHNOSAT, AMGU-1, SOKRAT, DEKART) - Support for NETSAT 1, 2, 3, 4 - Support for NORBI - Support for KAIDUN-1 ### Fixed - Bug with Reed-Solomon decoder that prevented building on i386 since v3.3.0 ## [3.4.0] - 2020-09-12 ### Added - SatYAML file for STRAND-1 - Audio source in gr_satellites - SatYAML file for AmicalSat - SatYAML file for UPMSat 2 - Support for NASA-DSN convention in CCSDS concatenated frames - Support for TRISAT - TCP KISS server and ZMQ PUB socket to send decoded frames - CSP fragmentation flag - SatYAML file for ION-MK01 ### Changed - Enable full printing of construct strings ## [3.3.0] - 2020-08-11 ### Added - Documentation for installing with conda - SatYAML file for GO-32 - KISS output from gr_satellites and the KISS file sink includes timestamps - Support for building with MSVC in Windows ### Changed - Telemetry conversion formulas for BY02 - JY1SAT SSDV decoder utility now uses KISS files as input - Removed dependence on libfec. The Reed-Solomon codes from libfec are now included in gr-satellites. - Added 4k8 modulation to SpooQy-1 ### Fixed - Bug in Telemetry parser block when used from GRC - Delphini-1 SatYAML file - Stray line in Lucky7 deframer GRC block ## [3.2.0] - 2020-07-14 ### Added - Option not to add a control byte in PDU to KISS - Connection to the Harbin Institute of Technology telemetry proxy from Telemetry Submit ### Fixed - Bug that prevented the NORAD field from appearing in Telemetry Submit ## [3.1.0] - 2020-07-11 ### Added - Example flowgraphs from gr-kiss - Support for CAS-6 - Option to disable scrambler in CCSDS deframers - Note about volk_profile in the documentation - Missing .yml grc file for LilacSat-1 deframer - Support for BY02 - Command line options for satellite decoder block and components - More documentation about --dump_path ### Changed - Do not use DC-block in AFSK demodulator - Remove second lowpass filter in BPSK demodulator - Improvements in LilacSat-1 demuxer and deframer - Ported NRZI encoder and decoder to C++ - Re-encode frame in SMOG-P RA decoder to check decoding correctness ### Fixed - Cmake warning when searching for libfec - Minor corrections to documentation - Bug in HDLC Framer ### Removed - Deprecated SMOG-P packet filter block ## [3.0.0] - 2020-06-03 Changes from 3.0.0-rc1 ### Added - Download instructions in documentation - Support for AO-27 - Support for FALCONSAT-3 - Test for unknown keywords in SatYAML files ### Fixed - Test execution in gr-satellites is not yet installed - Minor typos in documentation - Added missing af_carrier to AFSK SatYAML files - swig and PythonLibs are now mandatory when running cmake - Missing import in AFSK demodulator ### Removed - Deprecated LilacSat-2 flowgraphs in apps/ ## [3.0.0-rc1] - 2020-05-17 Large refactor release bringing new functionality and improvements. This is an overview of the main changes: ### Added - gr_satellites command line tool - Satellite decoder block - Components - SatYAML files - File and image receiver - Sphinx Documentation ### Changed - Performance improvements to the demodulators ### Removed - A number of deprecated low level blocks ## [2.3.2] - 2020-05-16 ### Fixed - Bug in telemetry submitter caused by HTTP 400 error ## [2.3.1] - 2020-04-11 ### Fixed - Bug in FUNcube telemetry parser ## [2.3.0] - 2020-02-05 ### Added - Support for SMOG-P and ATL-1 at 2500 and 12500 baud - Support for construct 2.10 ### Fixed - Bug with DC block and AGC of SMOG-P and ATL-1 potentially causing crashes ## [2.2.0] - 2020-01-01 ### Added - Support for SMOG-P and ATL-1 - Support for DUCHIFAT-3 - Support for OPS-SAT - Standanlone decoder for AAUSAT-4 - Support for FloripaSat-1 - BME telemetry forwarder ### Changed - Replaced AO-40 synchronizer by more general distributed synchronizer - Replaced AO-40 deinterleaver by more general matrix deinterleaver ## [2.1.0] - 2019-11-01 ### Added - Support for Luojia-1 ### Fixed - Corrected FACSAT NORAD ID ## [2.0.0] - 2019-10-10 ### Added - Support for GNU Radio 3.8 - Support for 4k8 in ESEO decoder ### Removed - Support for GNU Radio 3.7 ## [1.8.1] - 2019-10-07 ### Fixed - Bug with FUNcube telemetry submitter in some flowgraphs ## [1.8.0] - 2019-10-04 ### Added - Światowid image decoder - Support for Taurus-1 - CCSDS blocks from SOCIS ### Fixed - KISS and HDLC blocks from gr-kiss in some flowgraphs ## [1.7.0] - 2019-08-31 ### Added - Support for EntrySat - Support for Delphini-1 - Support for AmGU-1 - Support for Sokrat - Support for BEESAT-9 - Support for Lucky-7 - Support for Światowid 9k6 protocol ### Removed - Telemetry submitter for EntrySat ### Fixed - Bug in FUNcube telemetry parsing ## [1.6.0] - 2019-07-05 ### Added - Support for SpooQy-1 - Generic 1k2 AFSK AX.25 decoder ### Fixed - Bug in AAUSAT-4 decoder ### Removed - SatNOGS telemetry forwarders for satellites not coordinated by IARU ## [1.5.0] - 2019-05-01 ### Added - Support for AISTECHSAT-3 - JY1SAT SSDV decoder - Support for MYSAT 1 ### Fixed - Bugs in FUNcube telemetry parser ## [1.4.0] - 2019-04-07 ### Added - Support for 1KUNS-PF in 9k6 mode - Support for AISTECH-2 - Support for EQUiSat - Support for QO-100 - Support for AstroCast 0.1 new protocol and 9k6 mode ### Fixed - Bugs regarding malformed or unknown frames in Funcube tlm decoder ## [1.3.1] - 2019-01-06 ### Fixed - Bug in the Reed-Solomon decoder (affects ESEO decoder) ## [1.3.0] - 2019-01-05 ### Added - Support for FMN-1 - Support for Shaonian Xing - Support for Zhou Enlai - Support for TY 4-01 - Support for FACSAT-1 - Support for INNOSAT-2 - Support for Reaktor Hello World - CC110x decoder - Support for 3CAT-1 - Generic FSK AX.25 decoders - Support for JY1-Sat - Support for Suomi 100 - Support for PW-Sat2 - Support for ESEO - Generic Reed-Solomon decoder - FUNcube telemetry submitter - Support for ITASAT 1 - Support for D-STAR One - Support for Astrocast 0.1 - Support for LUME-1 ### Changed - Update to construct 2.9 ### Fixed - Miscellaneous bugs ## [1.2.0] - 2018-09-20 ### Added - feh fullscreen parameter for image decoders ## [1.1.0] - 2018-09-01 ### Added - Support for TANUSHA-3 PM - 9k6 support for ExAlta-1 - Some extra checks in LilacSat-1 image decoder ## [1.0.0] - 2018-08-02 First gr-satellites release using semantic versioning [Unreleased]: https://github.com/daniestevez/gr-satellites/compare/v4.4.0...master [4.4.0]: https://github.com/daniestevez/gr-satellites/compare/v4.3.1...v4.4.0 [4.3.1]: https://github.com/daniestevez/gr-satellites/compare/v4.3.0...v4.3.1 [4.3.0]: https://github.com/daniestevez/gr-satellites/compare/v4.2.0...v4.3.0 [4.2.0]: https://github.com/daniestevez/gr-satellites/compare/v4.1.0...v4.2.0 [4.1.0]: https://github.com/daniestevez/gr-satellites/compare/v4.0.0...v4.1.0 [4.0.0]: https://github.com/daniestevez/gr-satellites/compare/v4.0.0-rc1...v4.0.0 [4.0.0-rc1]: https://github.com/daniestevez/gr-satellites/compare/v3.7.0...v4.0.0-rc1 [3.11.1]: https://github.com/daniestevez/gr-satellites/compare/v3.11.0...v3.11.1 [3.11.0]: https://github.com/daniestevez/gr-satellites/compare/v3.10.0...v3.11.0 [3.10.0]: https://github.com/daniestevez/gr-satellites/compare/v3.9.0...v3.10.0 [3.9.0]: https://github.com/daniestevez/gr-satellites/compare/v3.8.0...v3.9.0 [3.8.0]: https://github.com/daniestevez/gr-satellites/compare/v3.7.0...v3.8.0 [3.7.0]: https://github.com/daniestevez/gr-satellites/compare/v3.6.0...v3.7.0 [3.6.0]: https://github.com/daniestevez/gr-satellites/compare/v3.5.2...v3.6.0 [3.5.2]: https://github.com/daniestevez/gr-satellites/compare/v3.5.1...v3.5.2 [3.5.1]: https://github.com/daniestevez/gr-satellites/compare/v3.5.0...v3.5.1 [3.5.0]: https://github.com/daniestevez/gr-satellites/compare/v3.4.0...v3.5.0 [3.4.0]: https://github.com/daniestevez/gr-satellites/compare/v3.3.0...v3.4.0 [3.3.0]: https://github.com/daniestevez/gr-satelliites/compare/v3.2.0...v3.3.0 [3.2.0]: https://github.com/daniestevez/gr-satellites/compare/v3.1.0...v3.2.0 [3.1.0]: https://github.com/daniestevez/gr-satellites/compare/v3.0.0...v3.1.0 [3.0.0]: https://github.com/daniestevez/gr-satellites/compare/v3.0.0-rc1...v3.0.0 [3.0.0-rc1]: https://github.com/daniestevez/gr-satellites/compare/v2.3.2...v3.0.0-rc1 [2.3.2]: https://github.com/daniestevez/gr-satellites/compare/v2.3.1...v2.3.2 [2.3.1]: https://github.com/daniestevez/gr-satellites/compare/v2.3.0...v2.3.1 [2.3.0]: https://github.com/daniestevez/gr-satellites/compare/v2.2.0...v2.3.0 [2.2.0]: https://github.com/daniestevez/gr-satellites/compare/v2.1.0...v2.2.0 [2.1.0]: https://github.com/daniestevez/gr-satellites/compare/v2.0.0...v2.1.0 [2.0.0]: https://github.com/daniestevez/gr-satellites/compare/v1.8.1...v2.0.0 [1.8.1]: https://github.com/daniestevez/gr-satellites/compare/v1.8.0...v1.8.1 [1.8.0]: https://github.com/daniestevez/gr-satellites/compare/v1.7.0...v1.8.0 [1.7.0]: https://github.com/daniestevez/gr-satellites/compare/v1.6.0...v1.7.0 [1.6.0]: https://github.com/daniestevez/gr-satellites/compare/v1.5.0...v1.6.0 [1.5.0]: https://github.com/daniestevez/gr-satellites/compare/v1.4.0...v1.5.0 [1.4.0]: https://github.com/daniestevez/gr-satellites/compare/v1.3.1...v1.4.0 [1.3.0]: https://github.com/daniestevez/gr-satellites/compare/v1.3.0...v1.3.1 [1.3.0]: https://github.com/daniestevez/gr-satellites/compare/v1.2.0...v1.3.0 [1.2.0]: https://github.com/daniestevez/gr-satellites/compare/v1.1.0...v1.2.0 [1.1.0]: https://github.com/daniestevez/gr-satellites/compare/v1.0.0...v1.1.0 [1.0.0]: https://github.com/daniestevez/gr-satellites/releases/tag/v1.0.0 gr-satellites-4.4.0/CMakeLists.txt000066400000000000000000000162371414055407700170560ustar00rootroot00000000000000# Copyright 2011,2012,2014,2016,2018 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. ######################################################################## # Project setup ######################################################################## cmake_minimum_required(VERSION 3.8) project(gr-satellites CXX C) enable_testing() # Install to PyBOMBS target prefix if defined if(DEFINED ENV{PYBOMBS_PREFIX}) set(CMAKE_INSTALL_PREFIX $ENV{PYBOMBS_PREFIX}) message(STATUS "PyBOMBS installed GNU Radio. Setting CMAKE_INSTALL_PREFIX to $ENV{PYBOMBS_PREFIX}") endif() # Select the release build type by default to get optimization flags if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release") message(STATUS "Build type not specified: defaulting to release.") endif(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "") # Make sure our local CMake Modules path comes first list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules) # Set the version information here set(VERSION_MAJOR 4) set(VERSION_API 4) set(VERSION_ABI 0) set(VERSION_PATCH 0) cmake_policy(SET CMP0011 NEW) # Enable generation of compile_commands.json for code completion engines set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # Add warnings if (MSVC) # warning level 4 and all warnings as errors add_compile_options(/W4) else() # lots of warnings and all warnings as errors add_compile_options(-Wall -Wextra -Wno-unused-parameter) endif() ######################################################################## # Compiler specific setup ######################################################################## if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND NOT WIN32) #http://gcc.gnu.org/wiki/Visibility add_definitions(-fvisibility=hidden) endif() IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") SET(CMAKE_CXX_STANDARD 14) ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang") SET(CMAKE_CXX_STANDARD 14) ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") SET(CMAKE_CXX_STANDARD 14) ELSE() message(WARNING "C++ standard could not be set because compiler is not GNU, Clang or MSVC.") ENDIF() IF(CMAKE_C_COMPILER_ID STREQUAL "GNU") SET(CMAKE_C_STANDARD 11) ELSEIF(CMAKE_C_COMPILER_ID MATCHES "Clang") SET(CMAKE_C_STANDARD 11) ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC") SET(CMAKE_C_STANDARD 11) ELSE() message(WARNING "C standard could not be set because compiler is not GNU, Clang or MSVC.") ENDIF() ######################################################################## # Install directories ######################################################################## find_package(Gnuradio "3.9" REQUIRED) include(GrVersion) include(GrPlatform) #define LIB_SUFFIX if(NOT CMAKE_MODULES_DIR) set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake) endif(NOT CMAKE_MODULES_DIR) set(GR_INCLUDE_DIR include/satellites) set(GR_CMAKE_DIR ${CMAKE_MODULES_DIR}/satellites) set(GR_PKG_DATA_DIR ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME}) set(GR_PKG_DOC_DIR ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME}) set(GR_PKG_CONF_DIR ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d) set(GR_PKG_LIBEXEC_DIR ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME}) ######################################################################## # On Apple only, set install name and use rpath correctly, if not already set ######################################################################## if(APPLE) if(NOT CMAKE_INSTALL_NAME_DIR) set(CMAKE_INSTALL_NAME_DIR ${CMAKE_INSTALL_PREFIX}/${GR_LIBRARY_DIR} CACHE PATH "Library Install Name Destination Directory" FORCE) endif(NOT CMAKE_INSTALL_NAME_DIR) if(NOT CMAKE_INSTALL_RPATH) set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/${GR_LIBRARY_DIR} CACHE PATH "Library Install RPath" FORCE) endif(NOT CMAKE_INSTALL_RPATH) if(NOT CMAKE_BUILD_WITH_INSTALL_RPATH) set(CMAKE_BUILD_WITH_INSTALL_RPATH ON CACHE BOOL "Do Build Using Library Install RPath" FORCE) endif(NOT CMAKE_BUILD_WITH_INSTALL_RPATH) endif(APPLE) ######################################################################## # Find gnuradio build dependencies ######################################################################## find_package(Doxygen) ######################################################################## # PyBind11 Related ######################################################################## find_package(pybind11 REQUIRED) execute_process( COMMAND "${PYTHON_EXECUTABLE}" -c "try:\n import numpy\n import os\n inc_path = numpy.get_include()\n if os.path.exists(os.path.join(inc_path, 'numpy', 'arrayobject.h')):\n print(inc_path, end='')\nexcept:\n pass" OUTPUT_VARIABLE PYTHON_NUMPY_INCLUDE_DIR) ######################################################################## # Setup doxygen option ######################################################################## if(DOXYGEN_FOUND) option(ENABLE_DOXYGEN "Build docs using Doxygen" ON) else(DOXYGEN_FOUND) option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF) endif(DOXYGEN_FOUND) ######################################################################## # Setup manpage option ######################################################################## if(NOT WIN32) option(ENABLE_MANPAGES "Build man pages for commands" ON) else(NOT WIN32) option(ENABLE_MANPAGES "Build man pages for commands" OFF) endif(NOT WIN32) ######################################################################## # Create uninstall target ######################################################################## configure_file( ${CMAKE_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake @ONLY) add_custom_target(uninstall ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake ) ######################################################################## # Add subdirectories ######################################################################## add_subdirectory(include/satellites) add_subdirectory(lib) add_subdirectory(apps) add_subdirectory(docs) add_subdirectory(python) add_subdirectory(grc) ######################################################################## # Install cmake search helper for this library ######################################################################## install(FILES cmake/Modules/satellitesConfig.cmake DESTINATION ${CMAKE_MODULES_DIR}/satellites ) gr-satellites-4.4.0/CODE_OF_CONDUCT.md000066400000000000000000000137351414055407700171150ustar00rootroot00000000000000# gr-satellites Code of Conduct As a GNU Radio out-of-tree module and a project which is part of the GNU Radio community understood in a wide sense, gr-satellites follows the same code of conduct as GNU Radio. This is a copy of the Code of Conduct. It might be out of date. The latest version can be found [on the gnuradio/gr-governance repository](https://github.com/gnuradio/gr-governance/blob/main/CODE_OF_CONDUCT.md). ## Our Pledge We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation. We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. ## Our Standards Examples of behavior that contributes to a positive environment for our community include: * Demonstrating empathy and kindness toward other people * Being respectful of differing opinions, viewpoints, and experiences * Giving and gracefully accepting constructive feedback * Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience * Focusing on what is best not just for us as individuals, but for the overall community Examples of unacceptable behavior include: * The use of sexualized language or imagery, and sexual attention or advances of any kind * Trolling, insulting or derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or email address, without their explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Enforcement Responsibilities Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate. ## Scope This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting Daniel Estevez at daniel@destevez.net (who is the gr-satellite main developer) or the GNU Radio project Code of Conduct team at conduct@gnuradio.org (only if applicable; gr-satellites is related to the GNU Radio project and community, but formally not part of the GNU Radio project and governance). All complaints will be reviewed and investigated promptly and fairly. All community leaders are obligated to respect the privacy and security of the reporter of any incident. ## Enforcement Guidelines Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: ### 1. Correction **Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community. **Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested. ### 2. Warning **Community Impact**: A violation through a single incident or series of actions. **Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban. ### 3. Temporary Ban **Community Impact**: A serious violation of community standards, including sustained inappropriate behavior. **Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. ### 4. Permanent Ban **Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. **Consequence**: A permanent ban from any sort of public interaction within the community. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.0, available at [https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0]. Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder][Mozilla CoC]. For answers to common questions about this code of conduct, see the FAQ at [https://www.contributor-covenant.org/faq][FAQ]. Translations are available at [https://www.contributor-covenant.org/translations][translations]. [homepage]: https://www.contributor-covenant.org [v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html [Mozilla CoC]: https://github.com/mozilla/diversity [FAQ]: https://www.contributor-covenant.org/faq [translations]: https://www.contributor-covenant.org/translations gr-satellites-4.4.0/CONTRIBUTING.md000066400000000000000000000062621414055407700165440ustar00rootroot00000000000000# Contributing to gr-satellites These guidelines are based on the [contributing guidelines for GNU Radio](https://github.com/gnuradio/gnuradio/blob/master/CONTRIBUTING.md). Since gr-satellites is a GNU Radio out-of-tree module, we follow the same guidelines for consistency wherever it makes sense: coding style, code of conduct, etc. ## Coding Guidelines gr-satellites follows the same coding guidelines as GNU Radio. These are described in [GREP1][grep1]. For C++, clang-format is used. Formatting is checked in the CI pipeline and can also be checked locally with the `tools/clang_format.py` helper script. For Python, we follow PEP8. In contrast to GNU Radio, which doesn't use a Python formatting checker, since a large amount of the gr-satellites code base is Python, we use pycodestyle to check PEP8 formatting. This is part of the CI pipeline and can be checked locally by running pycodestyle. Note that there are some [folders that are excluded] (https://github.com/daniestevez/gr-satellites-pycodestyle-action/blob/master/Dockerfile) from pycodestyle checking. ## Python or C++? While GNU Radio has most of its code base written in C++, gr-satellites has the majority of its code base written in Python. This allows for a faster development, and performance is often not so critical, since small satellites typically transmit using low data rates. In particular, telemetry parsing is always written in Python using [construct](https://construct.readthedocs.io/). However, some kinds of blocks are equally simple to implement in C++ or in Python, so C++ should be preferred for those. ## Git commit messages are very important The same guidelines as for GNU Radio apply regarding commit messages: - Keep the lines below 72 characters - Avoid empty git commit messages - The git commit message explains the change, the code only explains the current state ## Include Unit Tests If you have an obvious test, that might speed up the time it takes to convince reviewers that your code is correct. ## Adding support for a new satellite Adding support for a new satellite can be as easy as writing a [SatYAML file](https://gr-satellites.readthedocs.io/en/latest/satyaml.html) describing the satellite if the satellite only uses protocols already supported by gr-satellites. Since most satellites use a custom telemetry format, a new telemetry parser should be written using [construct](https://construct.readthedocs.io/). See the [python/telemetry](https://github.com/daniestevez/gr-satellites/tree/master/python/telemetry) folder for some examples, and take note that your new parser should be added both to `python/telemetry/__index__.py` and to `python/telemetry/CMakeLists.txt`. For satellites using new or ad-hoc custom protocols, some [components](https://gr-satellites.readthedocs.io/en/latest/components.html) will need to be written to support them. Most likely, a new deframer will need to be written. Examples can be found in [python/components/deframers](https://github.com/daniestevez/gr-satellites/tree/master/python/components/deframers). See also the [note to satellite teams] planning to use gr-satellites for their mission. [grep1]: https://github.com/gnuradio/greps/blob/master/grep-0001-coding-guidelines.md gr-satellites-4.4.0/LICENSE000066400000000000000000001045051414055407700153170ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. {one line to give the program's name and a brief idea of what it does.} Copyright (C) {year} {name of author} This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: {project} Copyright (C) {year} {fullname} This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . gr-satellites-4.4.0/MANIFEST.md000066400000000000000000000017611414055407700160420ustar00rootroot00000000000000title: gr-satellites brief: A collection of decoders for Amateur satellites tags: - satellites - amateur - ccsds - fec author: - Daniel Estévez copyright_owner: - Daniel Estévez license: GPLv3 repo: https://github.com/daniestevez/gr-satellites gr_supported_version: v3.8, v3.9 #website: # If you have a separate project website, put it here #icon: # Put a URL to a square image here that will be used as an icon on CGRAN --- gr-satellites is an OOT module encompassing a collection of telemetry decoders that supports many different Amateur satellites. This open-source project started in 2015 with the goal of providing telemetry decoders for all the satellites that transmit on the Amateur radio bands. It suports most popular protocols, such as AX.25, the GOMspace NanoCom U482C and AX100 modems, an important part of the CCSDS stack, the AO-40 protocol used in the FUNcube satellites, and several ad-hoc protocols used in other satellites. gr-satellites-4.4.0/README.md000066400000000000000000000122021414055407700155610ustar00rootroot00000000000000# gr-satellites [![GitHub release (latest by date)](https://img.shields.io/github/v/release/daniestevez/gr-satellites)](https://github.com/daniestevez/gr-satellites/releases/latest) [![Conda](https://img.shields.io/conda/v/conda-forge/gnuradio-satellites)](https://anaconda.org/conda-forge/gnuradio-satellites) [![Read the Docs](https://img.shields.io/readthedocs/gr-satellites)](https://gr-satellites.readthedocs.io/) [![GitHub license](https://img.shields.io/github/license/daniestevez/gr-satellites)](https://github.com/daniestevez/gr-satellites/blob/master/LICENSE) gr-satellites is a GNU Radio out-of-tree module encompassing a collection of telemetry decoders that supports many different Amateur satellites. This open-source project started in 2015 with the goal of providing telemetry decoders for all the satellites that transmit on the Amateur radio bands. It supports most popular protocols, such as AX.25, the GOMspace NanoCom U482C and AX100 modems, an important part of the CCSDS stack, the AO-40 protocol used in the FUNcube satellites, and several ad-hoc protocols used in other satellites. This out-of-tree module can be used to decode frames transmitted from most Amateur satellites in orbit, performing demodulation, forward error correction, etc. Decoded frames can be saved to a file or displayed in hex format. For some satellites the telemetry format definition is included in gr-satellites, so the decoded telemetry frames can be printed out as human-readable values such as bus voltages and currents. Additionally, some satellites transmit files such as JPEG images. gr-satellites can be used to reassemble these files and even display the images in real-time as they are being received. gr-satellites can be used as a set of building blocks to implement decoders for other satellites or other groundstation solutions. Some of the low level blocks in gr-satellites are also useful for other kinds RF communications protocols. ## Documentation gr-satellites [documentation](https://gr-satellites.readthedocs.io/) is hosted in [reathedocs.io](https://readthedocs.io/). ## Releases and branches Currently there are the following series of releases in the history of gr-satellites: * `v4.x.y` has the same functionality as the v3.x.y series, but supports GNU Radio 3.9. * `v3.x.y` is the result of a large refactor that introduces a lot of new functionality and improvements. The refactor started on September 2019 and was finished in May 2020. This supports GNU Radio 3.8. * `v2.x.y` is a series of releases compatible with GNU Radio 3.8 that existed between September 2019 and May 2020. The functionality in this series is equivalent to the `v1.x.y` series. * `v1.x.y` the original series of releases, which was compatible with GNU Radio 3.7. Development in this series stopped on September 2019 with the appearance of the `v2.x.y` line, but some bugfix releases have been published afterward. The repository is organized in the following branches: * `master` is where the active development happens. From time to time, features will be frozen in a new release. This branch is compatible with GNU Radio 3.9. * `maint-3.9` is the branch where releases in the current `v4.x.y` line are published. This branch is compatible with GNU Radio 3.9. * `maint-3.8` is the branch where releases in the current `v3.x.y` line are published. This branch is compatible with GNU Radio 3.8. * `maint-3.8-v2` is the branch where releases in the `v2.x.y` line were published. This branch is compatible with GNU Radio 3.8. No changes happen in this branch any longer. * `maint-3.7` is the branch where releases in the `v1.x.y` line were published. This branch is compatible with GNU Radio 3.7. No changes happen in this branch any longer. In general, pull requests should be submitted to `master`. ## Installation The installation procedure of gr-satellites is roughly the usual of a GNU Radio out-of-tree module. Detailed instructions about the required dependencies and how to build and install gr-satellites are given in the [documentation](https://gr-satellites.readthedocs.io/). ## Support Support for gr-satellites is handled only through [Github issues](https://github.com/daniestevez/gr-satellites/issues) and [Github discussions](https://github.com/daniestevez/gr-satellites/discussions) so that the whole community can benefit, rather than through private channels such as email. Please understand this when asking for support. Take a look [here](https://github.com/daniestevez/gr-satellites/discussions/304) to check whether a new topic fits better in the issues page or in the discussions page. ## Satellite teams Satellite teams interested in using gr-satellites for you groundstation solution, please read [this note](https://github.com/daniestevez/gr-satellites/blob/master/satellite_teams.md), especially if you will be using Amateur radio spectrum. ## CCSDS TM and TC Space Datalink and SpacePacket blocks Athanasios Theocharis made under ESA Summer of Code in Space 2019 a collection of blocks covering several CCSDS blue books. The documentation for this blocks can be found in [CCSDS_README.md](https://github.com/daniestevez/gr-satellites/blob/master/CCSDS_README.md). gr-satellites-4.4.0/apps/000077500000000000000000000000001414055407700152505ustar00rootroot00000000000000gr-satellites-4.4.0/apps/CMakeLists.txt000066400000000000000000000017351414055407700200160ustar00rootroot00000000000000# Copyright 2011 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. include(GrPython) GR_PYTHON_INSTALL( PROGRAMS gr_satellites jy1sat_ssdv smog_p_spectrum DESTINATION bin ) gr-satellites-4.4.0/apps/gr_satellites000077500000000000000000000273141414055407700200460ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019-2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import argparse import signal import sys from gnuradio import gr, blocks, audio import satellites.core import satellites.components.datasources as datasources from satellites.utils.config import open_config from satellites.satyaml import yamlfiles version = f"""gr_satellites {satellites.__version__} Copyright (C) 2020 Daniel Estevez License GPLv3+: GNU GPL version 3 or later . This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.""" class ListSatellites(argparse.Action): """argparse Action to list supported satellites and exit""" def __call__(self, parser, namespace, values, option_string=None): print( f'Satellites supported by gr_satellites {satellites.__version__}:') ymls = yamlfiles.load_all_yaml() for yml in sorted(ymls, key=lambda x: x['name'].casefold()): self.__print(yml) sys.exit(0) def __print(self, yml): print(f"* {yml['name']} (NORAD {yml['norad']})") for name, data in yml['transmitters'].items(): print( f" {name} {data['frequency']*1e-6:.3f} MHz " f"{data['modulation']} {data['framing']}") def argument_parser(): description = 'gr-satellites - GNU Radio decoders for Amateur satellites' info = ( 'The satellite parameter can be specified using name, ' 'NORAD ID or path to YAML file') p = argparse.ArgumentParser( description=description, conflict_handler='resolve', prog='gr_satellites satellite', epilog=info, formatter_class=argparse.RawTextHelpFormatter) p.add_argument('--version', action='version', version=version) p.add_argument( '--list_satellites', action=ListSatellites, nargs=0, help='list supported satellites and exit') p.add_argument( '--ignore_unknown_args', action='store_true', help='Treat unknown arguments as warning') p_input = p.add_argument_group('input') p_sources = p_input.add_mutually_exclusive_group(required=True) p_sources.add_argument( '--wavfile', help='WAV/OGG/FLAC input file (using libsndfile)') p_sources.add_argument( '--rawfile', help='RAW input file (float32 or complex64)') p_sources.add_argument( '--rawint16', help='RAW input file (int16)') p_sources.add_argument( '--audio', const='', nargs='?', metavar='DEVICE', help='Soundcard device input') p_sources.add_argument( '--udp', action='store_true', help='Use UDP input') p_sources.add_argument('--kiss_in', help='KISS input file') p_input.add_argument('--samp_rate', type=float, help='Sample rate (Hz)') p_input.add_argument( '--udp_ip', default='::', help='UDP input listen IP [default=%(default)r]') p_input.add_argument( '--udp_port', default='7355', type=int, help='UDP input listen port [default=%(default)r]') p_input.add_argument('--iq', action='store_true', help='Use IQ input') p_input.add_argument( '--udp_raw', action='store_true', help='Use RAW UDP input (float32 or complex64)') p_input.add_argument( '--input_gain', type=float, default=1, help=('Input gain (can be negative to invert signal) ' '[default=%(default)r]')) p_input.add_argument( '--start_time', type=str, default='', help='Recording start timestamp') p_input.add_argument( '--throttle', action='store_true', help='Throttle recording input to 1x speed') p_output = p.add_argument_group('output') p_output.add_argument('--kiss_out', help='KISS output file') p_output.add_argument( '--kiss_append', action='store_true', help='Append to KISS output file') p_output.add_argument( '--kiss_server', const='8100', nargs='?', metavar='PORT', help='Enable KISS server [default port=8100]') p_output.add_argument( '--kiss_server_address', default='127.0.0.1', help='KISS server bind address [default=%(default)r]') p_output.add_argument( '--zmq_pub', const='tcp://127.0.0.1:5555', nargs='?', metavar='ADDRESS', help='Enable ZMQ PUB socket [default address=tcp://127.0.0.1:5555]') p_output.add_argument( '--hexdump', action='store_true', help='Hexdump instead of telemetry parse') p_output.add_argument('--dump_path', help='Path to dump internal signals') return p def check_options(options, parser): if (options.kiss_in is None and options.wavfile is None and options.samp_rate is None): print('Need to specify --samp_rate unless --wavfile ' 'or --kiss_in is used', file=sys.stderr) parser.print_usage(file=sys.stderr) sys.exit(1) def parse_satellite(satellite): if satellite.lower().endswith('.yml'): return {'file': satellite} elif satellite.isnumeric(): return {'norad': int(satellite)} else: return {'name': satellite} class gr_satellites_top_block(gr.top_block): def __init__(self, parser): gr.top_block.__init__(self, 'gr-satellites top block') sat = parse_satellite(sys.argv[1]) try: satellites.core.gr_satellites_flowgraph.add_options(parser, **sat) except ValueError as e: if e.args[0] == 'satellite not found': print(f'Satellite {sys.argv[1]} not found') exit(1) else: raise e except FileNotFoundError as e: print('Could not open SatYAML file:') print(e) exit(1) if '--ignore_unknown_args' in sys.argv[2:]: options, unknown = parser.parse_known_args(sys.argv[2:]) if len(unknown) > 0: print('Warning: unknown arguments passed {}'.format(unknown), file=sys.stderr) else: options = parser.parse_args(sys.argv[2:]) if options.list_satellites: list_satellites() sys.exit(0) check_options(options, parser) self.options = options pdu_in = options.kiss_in is not None self.config = open_config() self.setup_input() # Set appropriate sample rate if options.samp_rate: samp_rate = options.samp_rate elif options.wavfile: samp_rate = self.wavfile_source.sample_rate() else: raise ValueError('sample rate not set') self.flowgraph = satellites.core.gr_satellites_flowgraph( samp_rate=samp_rate, iq=self.options.iq, pdu_in=pdu_in, options=options, config=self.config, dump_path=options.dump_path, **sat) if pdu_in: self.msg_connect((self.input, 'out'), (self.flowgraph, 'in')) else: gain = self.options.input_gain self.gain = (blocks.multiply_const_cc(gain) if self.options.iq else blocks.multiply_const_ff(gain)) if self.options.throttle: size = (gr.sizeof_gr_complex if self.options.iq else gr.sizeof_float) self.throttle = blocks.throttle(size, self.options.samp_rate, True) self.connect(self.input, self.throttle, self.gain, self.flowgraph) else: self.connect(self.input, self.gain, self.flowgraph) def setup_input(self): if self.options.wavfile is not None: return self.setup_wavfile_input() elif self.options.rawfile is not None: return self.setup_rawfile_input() elif self.options.rawint16 is not None: return self.setup_rawint16_input() elif self.options.audio is not None: return self.setup_audio_input() elif self.options.udp is True: return self.setup_udp_input() elif self.options.kiss_in is not None: return self.setup_kiss_input() else: raise Exception('No input source set for flowgraph') def setup_wavfile_input(self): self.wavfile_source = blocks.wavfile_source(self.options.wavfile, False) if self.options.iq: self.float_to_complex = blocks.float_to_complex(1) self.connect((self.wavfile_source, 0), (self.float_to_complex, 0)) self.connect((self.wavfile_source, 1), (self.float_to_complex, 1)) self.input = self.float_to_complex else: self.input = self.wavfile_source def setup_rawfile_input(self): size = gr.sizeof_gr_complex if self.options.iq else gr.sizeof_float self.input = blocks.file_source(size, self.options.rawfile, False, 0, 0) def setup_rawint16_input(self): self.input_int16 = blocks.file_source(gr.sizeof_short, self.options.rawint16, False, 0, 0) self.setup_input_int16() def setup_audio_input(self): self.audio_source = audio.source(int(self.options.samp_rate), self.options.audio, True) if self.options.iq: self.float_to_complex = blocks.float_to_complex(1) self.connect((self.audio_source, 0), (self.float_to_complex, 0)) self.connect((self.audio_source, 1), (self.float_to_complex, 1)) self.input = self.float_to_complex else: self.input = self.audio_source def setup_udp_input(self): if self.options.udp_raw: size = gr.sizeof_gr_complex if self.options.iq else gr.sizeof_float self.input = blocks.udp_source(size, self.options.udp_ip, self.options.udp_port, 1472, False) else: self.input_int16 = blocks.udp_source( gr.sizeof_short, self.options.udp_ip, self.options.udp_port, 1472, False) self.setup_input_int16() def setup_input_int16(self): self.short_to_float = blocks.short_to_float(1, 32767) self.connect(self.input_int16, self.short_to_float) if self.options.iq: self.deinterleave = blocks.deinterleave(gr.sizeof_float, 1) self.float_to_complex = blocks.float_to_complex(1) self.connect(self.short_to_float, self.deinterleave) self.connect((self.deinterleave, 0), (self.float_to_complex, 0)) self.connect((self.deinterleave, 1), (self.float_to_complex, 1)) self.input = self.float_to_complex else: self.input = self.short_to_float def setup_kiss_input(self): self.input = datasources.kiss_file_source(self.options.kiss_in) def main(): parser = argument_parser() if len(sys.argv) >= 2 and sys.argv[1] in ['--version', '--list_satellites']: options = parser.parse_args() if options.list_satellites: list_satellites() sys.exit(0) if len(sys.argv) <= 1 or sys.argv[1][0] == '-': parser.print_usage(file=sys.stderr) sys.exit(1) tb = gr_satellites_top_block(parser) def sig_handler(sig=None, frame=None): tb.stop() tb.wait() sys.exit(0) signal.signal(signal.SIGINT, sig_handler) signal.signal(signal.SIGTERM, sig_handler) tb.start() tb.wait() if __name__ == '__main__': main() gr-satellites-4.4.0/apps/jy1sat_ssdv000077500000000000000000000036451414055407700174600ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019-2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import subprocess import sys import numpy as np from satellites.kiss import * def print_usage(): print(f'Usage {sys.argv[0]} ') def seqnum(packet): return packet[3]*256 + packet[4] def read_kiss_file(path): frames = list() frame = list() framesize = 256 transpose = False with open(path, 'rb') as f: for c in f.read(): if c == FEND: if len(frame) == framesize + 1 and (frame[0] & 0x0f) == 0: frames.append(frame[1:]) frame = list() elif transpose: if c == TFEND: frame.append(FEND) elif c == TFESC: frame.append(FESC) transpose = False elif c == FESC: transpose = True else: frame.append(c) return np.array(frames, dtype='uint8') def main(): if len(sys.argv) != 3: print_usage() sys.exit(1) input_file = sys.argv[1] output_file = sys.argv[2] # Read 256 byte frames x = read_kiss_file(input_file) # Filter out by frame id and trim to payload x = x[((x[:, 0] == 0xe0) | (x[:, 0] == 0xe1)) & (x[:, 1] == 0x10), 56:] # Filter SSDV packets x = x[(x[:, 0] == 0x55) & (x[:, 1] == 0x68), :] ids = set(x[:, 2]) for i in ids: L = list(x[x[:, 2] == i, :]) L.sort(key=seqnum) ssdv = '{}_{}.ssdv'.format(output_file, i) jpeg = '{}_{}.jpg'.format(output_file, i) np.array(L).tofile(ssdv) print('Calling SSDV decoder for image {}'.format(hex(i))) subprocess.call(['ssdv', '-d', '-J', ssdv, jpeg]) print() if __name__ == '__main__': main() gr-satellites-4.4.0/apps/smog_p_spectrum000077500000000000000000000022051414055407700204030ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # """Plots SMOG-P/ATL-1 spectrum data previously saved to a file""" import pathlib import re import sys import matplotlib.pyplot as plt import numpy as np def usage(): print(f'Usage: {sys.argv[0]} input_file', file=sys.stderr) sys.exit(1) def main(): if len(sys.argv) != 2: usage() filename = sys.argv[1] m = re.match( 'spectrum_start_(?P\\d+?)_step_(?P\\d+?)_' 'rbw_\\d+_measid_(?P\\d+?)\\Z', pathlib.Path(filename).name) start = int(m.group('start')) step = int(m.group('step')) measid = int(m.group('measid')) data = np.fromfile(filename, dtype='uint8') freq = start + step * np.arange(data.size) plt.figure() plt.plot(freq * 1e-6, data) plt.title(f'Spectrum measurement {measid}') plt.xlabel('Frequency (MHz)') plt.ylabel('PSD') plt.savefig(pathlib.Path(filename).parent / f'spectrum_{measid}.png') if __name__ == '__main__': main() gr-satellites-4.4.0/cmake/000077500000000000000000000000001414055407700153655ustar00rootroot00000000000000gr-satellites-4.4.0/cmake/Modules/000077500000000000000000000000001414055407700167755ustar00rootroot00000000000000gr-satellites-4.4.0/cmake/Modules/CMakeParseArgumentsCopy.cmake000066400000000000000000000134041414055407700244750ustar00rootroot00000000000000# CMAKE_PARSE_ARGUMENTS( args...) # # CMAKE_PARSE_ARGUMENTS() is intended to be used in macros or functions for # parsing the arguments given to that macro or function. # It processes the arguments and defines a set of variables which hold the # values of the respective options. # # The argument contains all options for the respective macro, # i.e. keywords which can be used when calling the macro without any value # following, like e.g. the OPTIONAL keyword of the install() command. # # The argument contains all keywords for this macro # which are followed by one value, like e.g. DESTINATION keyword of the # install() command. # # The argument contains all keywords for this macro # which can be followed by more than one value, like e.g. the TARGETS or # FILES keywords of the install() command. # # When done, CMAKE_PARSE_ARGUMENTS() will have defined for each of the # keywords listed in , and # a variable composed of the given # followed by "_" and the name of the respective keyword. # These variables will then hold the respective value from the argument list. # For the keywords this will be TRUE or FALSE. # # All remaining arguments are collected in a variable # _UNPARSED_ARGUMENTS, this can be checked afterwards to see whether # your macro was called with unrecognized parameters. # # As an example here a my_install() macro, which takes similar arguments as the # real install() command: # # function(MY_INSTALL) # set(options OPTIONAL FAST) # set(oneValueArgs DESTINATION RENAME) # set(multiValueArgs TARGETS CONFIGURATIONS) # cmake_parse_arguments(MY_INSTALL "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) # ... # # Assume my_install() has been called like this: # my_install(TARGETS foo bar DESTINATION bin OPTIONAL blub) # # After the cmake_parse_arguments() call the macro will have set the following # variables: # MY_INSTALL_OPTIONAL = TRUE # MY_INSTALL_FAST = FALSE (this option was not used when calling my_install() # MY_INSTALL_DESTINATION = "bin" # MY_INSTALL_RENAME = "" (was not used) # MY_INSTALL_TARGETS = "foo;bar" # MY_INSTALL_CONFIGURATIONS = "" (was not used) # MY_INSTALL_UNPARSED_ARGUMENTS = "blub" (no value expected after "OPTIONAL" # # You can the continue and process these variables. # # Keywords terminate lists of values, e.g. if directly after a one_value_keyword # another recognized keyword follows, this is interpreted as the beginning of # the new option. # E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in # MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would # be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefore. #============================================================================= # Copyright 2010 Alexander Neundorf # # Distributed under the OSI-approved BSD License (the "License"); # see accompanying file Copyright.txt for details. # # This software is distributed WITHOUT ANY WARRANTY; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the License for more information. #============================================================================= # (To distribute this file outside of CMake, substitute the full # License text for the above reference.) if(__CMAKE_PARSE_ARGUMENTS_INCLUDED) return() endif() set(__CMAKE_PARSE_ARGUMENTS_INCLUDED TRUE) function(CMAKE_PARSE_ARGUMENTS prefix _optionNames _singleArgNames _multiArgNames) # first set all result variables to empty/FALSE foreach(arg_name ${_singleArgNames} ${_multiArgNames}) set(${prefix}_${arg_name}) endforeach(arg_name) foreach(option ${_optionNames}) set(${prefix}_${option} FALSE) endforeach(option) set(${prefix}_UNPARSED_ARGUMENTS) set(insideValues FALSE) set(currentArgName) # now iterate over all arguments and fill the result variables foreach(currentArg ${ARGN}) list(FIND _optionNames "${currentArg}" optionIndex) # ... then this marks the end of the arguments belonging to this keyword list(FIND _singleArgNames "${currentArg}" singleArgIndex) # ... then this marks the end of the arguments belonging to this keyword list(FIND _multiArgNames "${currentArg}" multiArgIndex) # ... then this marks the end of the arguments belonging to this keyword if(${optionIndex} EQUAL -1 AND ${singleArgIndex} EQUAL -1 AND ${multiArgIndex} EQUAL -1) if(insideValues) if("${insideValues}" STREQUAL "SINGLE") set(${prefix}_${currentArgName} ${currentArg}) set(insideValues FALSE) elseif("${insideValues}" STREQUAL "MULTI") list(APPEND ${prefix}_${currentArgName} ${currentArg}) endif() else(insideValues) list(APPEND ${prefix}_UNPARSED_ARGUMENTS ${currentArg}) endif(insideValues) else() if(NOT ${optionIndex} EQUAL -1) set(${prefix}_${currentArg} TRUE) set(insideValues FALSE) elseif(NOT ${singleArgIndex} EQUAL -1) set(currentArgName ${currentArg}) set(${prefix}_${currentArgName}) set(insideValues "SINGLE") elseif(NOT ${multiArgIndex} EQUAL -1) set(currentArgName ${currentArg}) set(${prefix}_${currentArgName}) set(insideValues "MULTI") endif() endif() endforeach(currentArg) # propagate the result variables to the caller: foreach(arg_name ${_singleArgNames} ${_multiArgNames} ${_optionNames}) set(${prefix}_${arg_name} ${${prefix}_${arg_name}} PARENT_SCOPE) endforeach(arg_name) set(${prefix}_UNPARSED_ARGUMENTS ${${prefix}_UNPARSED_ARGUMENTS} PARENT_SCOPE) endfunction(CMAKE_PARSE_ARGUMENTS _options _singleArgs _multiArgs) gr-satellites-4.4.0/cmake/Modules/satellitesConfig.cmake000066400000000000000000000015731414055407700233040ustar00rootroot00000000000000INCLUDE(FindPkgConfig) PKG_CHECK_MODULES(PC_SATELLITES satellites) FIND_PATH( SATELLITES_INCLUDE_DIRS NAMES satellites/api.h HINTS $ENV{SATELLITES_DIR}/include ${PC_SATELLITES_INCLUDEDIR} PATHS ${CMAKE_INSTALL_PREFIX}/include /usr/local/include /usr/include ) FIND_LIBRARY( SATELLITES_LIBRARIES NAMES gnuradio-satellites HINTS $ENV{SATELLITES_DIR}/lib ${PC_SATELLITES_LIBDIR} PATHS ${CMAKE_INSTALL_PREFIX}/lib ${CMAKE_INSTALL_PREFIX}/lib64 /usr/local/lib /usr/local/lib64 /usr/lib /usr/lib64 ) include("${CMAKE_CURRENT_LIST_DIR}/satellitesTarget.cmake") INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(SATELLITES DEFAULT_MSG SATELLITES_LIBRARIES SATELLITES_INCLUDE_DIRS) MARK_AS_ADVANCED(SATELLITES_LIBRARIES SATELLITES_INCLUDE_DIRS) gr-satellites-4.4.0/cmake/Modules/targetConfig.cmake.in000066400000000000000000000017351414055407700230260ustar00rootroot00000000000000# Copyright 2018 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. include(CMakeFindDependencyMacro) set(target_deps "@TARGET_DEPENDENCIES@") foreach(dep IN LISTS target_deps) find_dependency(${dep}) endforeach() include("${CMAKE_CURRENT_LIST_DIR}/@TARGET@Targets.cmake") gr-satellites-4.4.0/cmake/cmake_uninstall.cmake.in000066400000000000000000000025321414055407700221470ustar00rootroot00000000000000# http://www.vtk.org/Wiki/CMake_FAQ#Can_I_do_.22make_uninstall.22_with_CMake.3F IF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") MESSAGE(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"") ENDIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) STRING(REGEX REPLACE "\n" ";" files "${files}") FOREACH(file ${files}) MESSAGE(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"") IF(EXISTS "$ENV{DESTDIR}${file}") EXEC_PROGRAM( "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" OUTPUT_VARIABLE rm_out RETURN_VALUE rm_retval ) IF(NOT "${rm_retval}" STREQUAL 0) MESSAGE(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"") ENDIF(NOT "${rm_retval}" STREQUAL 0) ELSEIF(IS_SYMLINK "$ENV{DESTDIR}${file}") EXEC_PROGRAM( "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" OUTPUT_VARIABLE rm_out RETURN_VALUE rm_retval ) IF(NOT "${rm_retval}" STREQUAL 0) MESSAGE(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"") ENDIF(NOT "${rm_retval}" STREQUAL 0) ELSE(EXISTS "$ENV{DESTDIR}${file}") MESSAGE(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.") ENDIF(EXISTS "$ENV{DESTDIR}${file}") ENDFOREACH(file) gr-satellites-4.4.0/debian/000077500000000000000000000000001414055407700155275ustar00rootroot00000000000000gr-satellites-4.4.0/debian/changelog000066400000000000000000000023541414055407700174050ustar00rootroot00000000000000gr-satellites (3.11.0-0) hirsute; urgency=medium * Mainstream release v3.11.0 -- Sat, 03 Nov 2021 18:40:00 +0000 gr-satellites (3.10.1-0) hirsute; urgency=medium * Mainstream release v3.10.1 -- Sat, 11 Sep 2021 16:24:00 +0000 gr-satellites (3.10.0-0) hirsute; urgency=medium * Mainstream release v3.10.0 -- Fri, 20 Aug 2021 18:00:00 +0000 gr-satellites (3.9.0-0) groovy; urgency=medium * Mainstream release v3.9.0 -- Fri, 18 Jun 2021 14:05:00 +0000 gr-satellites (3.8.0-0) groovy; urgency=medium * Mainstream release v3.8.0 -- Sat, 24 Apr 2021 09:54:00 +0000 gr-satellites (3.7.0-0) groovy; urgency=medium * Mainstream release v3.7.0 -- Fri, 19 Feb 2021 17:17:00 +0000 gr-satellites (3.6.0-0) groovy; urgency=medium * Mainstream release v3.6.0 -- Fri, 04 Dec 2020 21:00:00 +0000 gr-satellites (3.5.2-1) groovy; urgency=medium * Fix dh_installman problems -- Fri, 27 Nov 2020 15:56:58 +0000 gr-satellites (3.5.2-0) groovy; urgency=medium * Initial release -- Fri, 27 Nov 2020 15:25:00 +0000 gr-satellites-4.4.0/debian/compat000066400000000000000000000000031414055407700167260ustar00rootroot0000000000000013 gr-satellites-4.4.0/debian/control000066400000000000000000000024121414055407700171310ustar00rootroot00000000000000Source: gr-satellites Section: hamradio Priority: optional Maintainer: Daniel Estevez Build-Depends: cmake, debhelper (>= 13~), dh-python, doxygen, gnuradio-dev, liborc-0.4-dev, pkg-config, python3-dev, python3-six, swig, python3-construct, python3-requests Standards-Version: 4.5.0 Homepage: http://github.com/daniestevez/gr-satellites Vcs-Git: git://github.com/daniestevez/gr-satellites.git Vcs-Browser: https://github.com/daniestevez/gr-satellites Package: gr-satellites Architecture: any Pre-Depends: ${misc:Pre-Depends} Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}, gnuradio, python3-construct, python3-requests Recommends: feh Description:GNU Radio out-of-tree module with Amateur satellite decoders. gr-satellites is a GNU Radio out-of-tree module that contains a collection of decoders for Amateur satellites. It supports most popular protocols, such as AX.25, the GOMspace NanoCom U482C and AX100 modems, an important part of the CCSDS stack, the AO-40 protocol used in the FUNcube satellites, and several ad-hoc protocols used in other satellites. gr-satellites-4.4.0/debian/copyright000066400000000000000000000047161414055407700174720ustar00rootroot00000000000000Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: gr-satellites Upstream-Contact: Daniel Estevez Source: https://github.com/daniestevez/gr-satellites/ Files: * Copyright: 2016-2020 Daniel Estevez License: GPL-3+ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 3 dated June, 2007, or (at your option) any later version. . On Debian systems, the complete text of version 3 of the GNU General Public License can be found in '/usr/share/common-licenses/GPL-3'. Files: CMakeLists.txt cmake/* .clang-format tools/* apps/CMakeLists.txt docs/CMakeLits.txt docs/doxygen/* grc/CMakeLists.txt include/satellites/CMakeLists.txt include/satellites/api.txt lib/CMakeLists.txt lib/qa_satellites.* python/CMakeLists.txt swig/CMakeLists.txt Copyright: 2010-2020 Free Software Foundation, Inc. License: GPL-3+ Files: lib/radecoder/* Copyright: 2015-2019 Miklos Maroti Copyright 2019 Daniel Estevez License: GPL-3+ Files: include/satellites/varlen_packet_framer.h include/satellites/varlen_packet_tagger.h lib/varlen_packet_framer_impl.* lib/varlen_packet_tagger_impl.* Copyright: 2017 Glenn Richardson License: GPL-3+ Files: lib/randomizer.* Copyright: (c) 2008 Johan Christiansen Copyright (c) 2012 Jeppe Ledet-Pedersen License: Expat Files: lib/libfec/* lib/viterbi.* Copyright: 2006 Phil Karn License: LGPL-2.1 This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1, as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . On Debian systems, the complete text of the GNU Lesser General Public License (LGPL) version 2.1 can be found in the file '/usr/share/common-licenses/LGPL-2.1'. Files: lib/viterbi/* Copyright: Min Xu License: Apache-2.0 Files: python/ccsds/* Copyright: 2019 Athanasios Theocharis License: GPL-3+ Files: tools/clang_format.py Copyright: (C) 2015,2016 MongoDB Inc. Copyright (C) 2018 Free Software Foundation License: GPL-3+ gr-satellites-4.4.0/debian/rules000066400000000000000000000001421414055407700166010ustar00rootroot00000000000000#!/usr/bin/make -f %: dh $@ --with python3 # Do not run dh_installman override_dh_installman: gr-satellites-4.4.0/debian/source/000077500000000000000000000000001414055407700170275ustar00rootroot00000000000000gr-satellites-4.4.0/debian/source/format000066400000000000000000000000141414055407700202350ustar00rootroot000000000000003.0 (quilt) gr-satellites-4.4.0/debian/triggers000066400000000000000000000000321414055407700172730ustar00rootroot00000000000000activate-noawait ldconfig gr-satellites-4.4.0/docs/000077500000000000000000000000001414055407700152355ustar00rootroot00000000000000gr-satellites-4.4.0/docs/CMakeLists.txt000066400000000000000000000050171414055407700200000ustar00rootroot00000000000000# Copyright 2011 Free Software Foundation, Inc. # Copyright 2020 Daniel Estevez # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. ######################################################################## # Setup dependencies ######################################################################## find_package(Doxygen) ######################################################################## # Begin conditional configuration ######################################################################## if(ENABLE_DOXYGEN) ######################################################################## # Add subdirectories ######################################################################## add_subdirectory(doxygen) endif(ENABLE_DOXYGEN) ######################################################################## # Man pages ######################################################################## if(ENABLE_MANPAGES) FIND_PROGRAM(BZIP NAMES bzip2 PATHS /bin /usr/bin /usr/local/bin) if(NOT BZIP) MESSAGE(FATAL_ERROR "Could not find bzip2 for man page compression.") endif(NOT BZIP) set(MAN_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}) set(MAN_BUILD_DIR ${PROJECT_BINARY_DIR}/docs) list(APPEND manpages gr_satellites.1 jy1sat_ssdv.1 smog_p_spectrum.1 ) # If user has not set the base dir for man pages, use a default location set(MAN_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/share/man) foreach(manpage ${manpages}) add_custom_target(generate_manpage_${manpage} ALL COMMAND ${BZIP} -c ${MAN_SRC_DIR}/${manpage} > ${MAN_BUILD_DIR}/${manpage}.bz2 ) install(FILES ${MAN_BUILD_DIR}/${manpage}.bz2 DESTINATION ${MAN_INSTALL_DIR}/man1 ) endforeach(manpage) endif(ENABLE_MANPAGES) gr-satellites-4.4.0/docs/build/000077500000000000000000000000001414055407700163345ustar00rootroot00000000000000gr-satellites-4.4.0/docs/build/.keep000066400000000000000000000000001414055407700172470ustar00rootroot00000000000000gr-satellites-4.4.0/docs/doxygen/000077500000000000000000000000001414055407700167125ustar00rootroot00000000000000gr-satellites-4.4.0/docs/doxygen/CMakeLists.txt000066400000000000000000000040601414055407700214520ustar00rootroot00000000000000# Copyright 2011 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. ######################################################################## # Create the doxygen configuration file ######################################################################## file(TO_NATIVE_PATH ${CMAKE_SOURCE_DIR} top_srcdir) file(TO_NATIVE_PATH ${CMAKE_BINARY_DIR} top_builddir) file(TO_NATIVE_PATH ${CMAKE_SOURCE_DIR} abs_top_srcdir) file(TO_NATIVE_PATH ${CMAKE_BINARY_DIR} abs_top_builddir) set(HAVE_DOT ${DOXYGEN_DOT_FOUND}) set(enable_html_docs YES) set(enable_latex_docs NO) set(enable_xml_docs YES) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY) set(BUILT_DIRS ${CMAKE_CURRENT_BINARY_DIR}/xml ${CMAKE_CURRENT_BINARY_DIR}/html) ######################################################################## # Make and install doxygen docs ######################################################################## add_custom_command( OUTPUT ${BUILT_DIRS} COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Generating documentation with doxygen" ) add_custom_target(doxygen_target ALL DEPENDS ${BUILT_DIRS}) install(DIRECTORY ${BUILT_DIRS} DESTINATION ${GR_PKG_DOC_DIR}) gr-satellites-4.4.0/docs/doxygen/Doxyfile.in000066400000000000000000002374721414055407700210440ustar00rootroot00000000000000# Doxyfile 1.8.4 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. # # All text after a double hash (##) is considered a comment and is placed # in front of the TAG it is preceding . # All text after a hash (#) is considered a comment and will be ignored. # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" "). #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or sequence of words) that should # identify the project. Note that if you do not use Doxywizard you need # to put quotes around the project name if it contains spaces. PROJECT_NAME = "GNU Radio's SATELLITES Package" # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer # a quick idea about the purpose of the project. Keep the description short. PROJECT_BRIEF = # With the PROJECT_LOGO tag one can specify an logo or icon that is # included in the documentation. The maximum height of the logo should not # exceed 55 pixels and the maximum width should not exceed 200 pixels. # Doxygen will copy the logo to the output directory. PROJECT_LOGO = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Latvian, Lithuanian, Norwegian, Macedonian, # Persian, Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, # Slovak, Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = YES # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. Note that you specify absolute paths here, but also # relative paths, which will be relative from the directory where doxygen is # started. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful if your file system # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = YES # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # This tag can be used to specify a number of word-keyword mappings (TCL only). # A mapping has the form "name=value". For example adding # "class=itcl::class" will allow you to use the command class in the # itcl::class meaning. TCL_SUBST = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, # and language is one of the parsers supported by doxygen: IDL, Java, # Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, # C++. For instance to make doxygen treat .inc files as Fortran files (default # is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note # that for custom extensions you also need to set FILE_PATTERNS otherwise the # files are not read by doxygen. EXTENSION_MAPPING = # If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all # comments according to the Markdown format, which allows for more readable # documentation. See http://daringfireball.net/projects/markdown/ for details. # The output of markdown processing is further processed by doxygen, so you # can mix doxygen, HTML, and XML commands with Markdown formatting. # Disable only in case of backward compatibilities issues. MARKDOWN_SUPPORT = YES # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can # be prevented in individual cases by by putting a % sign in front of the word # or globally by setting AUTOLINK_SUPPORT to NO. AUTOLINK_SUPPORT = YES # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also makes the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate # getter and setter methods for a property. Setting this option to YES (the # default) will make doxygen replace the get and set methods by a property in # the documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and # unions are shown inside the group in which they are included (e.g. using # @ingroup) instead of on a separate page (for HTML and Man pages) or # section (for LaTeX and RTF). INLINE_GROUPED_CLASSES = NO # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and # unions with only public data fields or simple typedef fields will be shown # inline in the documentation of the scope in which they are defined (i.e. file, # namespace, or group documentation), provided this scope is documented. If set # to NO (the default), structs, classes, and unions are shown on a separate # page (for HTML and Man pages) or section (for LaTeX and RTF). INLINE_SIMPLE_STRUCTS = NO # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This # cache is used to resolve symbols given their name and scope. Since this can # be an expensive process and often the same symbol appear multiple times in # the code, doxygen keeps a cache of pre-resolved symbols. If the cache is too # small doxygen will become slower. If the cache is too large, memory is wasted. # The cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid # range is 0..9, the default is 0, corresponding to a cache size of 2^16 = 65536 # symbols. LOOKUP_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_PACKAGE tag is set to YES all members with package or internal # scope will be included in the documentation. EXTRACT_PACKAGE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespaces are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen # will list include files with double quotes in the documentation # rather than with sharp brackets. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen # will sort the (brief and detailed) documentation of class members so that # constructors and destructors are listed first. If set to NO (the default) # the constructors will appear in the respective orders defined by # SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. # This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO # and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to # do proper type resolution of all parameters of a function it will reject a # match between the prototype and the implementation of a member function even # if there is only one candidate or it is obvious which candidate to choose # by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen # will still accept a match between prototype and implementation in such cases. STRICT_PROTO_MATCHING = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = NO # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = NO # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = NO # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= NO # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if section-label ... \endif # and \cond section-label ... \endcond blocks. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or macro consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and macros in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = NO # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. To create the layout file # that represents doxygen's defaults, run doxygen with the -l option. # You can optionally specify a file name after the option, if omitted # DoxygenLayout.xml will be used as the name of the layout file. LAYOUT_FILE = # The CITE_BIB_FILES tag can be used to specify one or more bib files # containing the references data. This must be a list of .bib files. The # .bib extension is automatically appended if omitted. Using this command # requires the bibtex tool to be installed. See also # http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style # of the bibliography can be controlled using LATEX_BIB_STYLE. To use this # feature you need bibtex and perl available in the search path. Do not use # file names with spaces, bibtex cannot handle them. CITE_BIB_FILES = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = YES # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # The WARN_NO_PARAMDOC option can be enabled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text " # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = "@top_srcdir@" \ "@top_builddir@" # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh # *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py # *.f90 *.f *.for *.vhd *.vhdl FILE_PATTERNS = *.h \ *.dox # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. # Note that relative paths are relative to the directory from which doxygen is # run. EXCLUDE = @abs_top_builddir@/docs/doxygen/html \ @abs_top_builddir@/docs/doxygen/xml \ @abs_top_builddir@/docs/doxygen/other/doxypy.py \ @abs_top_builddir@/_CPack_Packages \ @abs_top_srcdir@/cmake # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = */.deps/* \ */.libs/* \ */.svn/* \ */CVS/* \ */__init__.py \ */qa_*.cc \ */qa_*.h \ */qa_*.py # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = ad9862 \ numpy \ *swig* \ *Swig* \ *my_top_block* \ *my_graph* \ *app_top_block* \ *am_rx_graph* \ *_queue_watcher_thread* \ *parse* \ *MyFrame* \ *MyApp* \ *PyObject* \ *wfm_rx_block* \ *_sptr* \ *debug* \ *wfm_rx_sca_block* \ *tv_rx_block* \ *wxapt_rx_block* \ *example_signal* # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be ignored. # Note that the filter must not add or remove lines; it is applied before the # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty or if # non of the patterns match the file name, INPUT_FILTER is applied. FILTER_PATTERNS = *.py="@top_srcdir@"/doc/doxygen/other/doxypy.py # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file # pattern. A pattern will override the setting for FILTER_PATTERN (if any) # and it is also possible to disable source filtering for a specific pattern # using *.ext= (so without naming a filter). This option only has effect when # FILTER_SOURCE_FILES is enabled. FILTER_SOURCE_PATTERNS = # If the USE_MD_FILE_AS_MAINPAGE tag refers to the name of a markdown file that # is part of the input, its contents will be placed on the main page # (index.html). This can be useful if you have a project on for instance GitHub # and want reuse the introduction page also for the doxygen output. USE_MDFILE_AS_MAINPAGE = #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C, C++ and Fortran comments will always remain visible. STRIP_CODE_COMMENTS = NO # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = YES # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = @enable_html_docs@ # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. Note that when using a custom header you are responsible # for the proper inclusion of any scripts and style sheets that doxygen # needs, which is dependent on the configuration options used. # It is advised to generate a default header using "doxygen -w html # header.html footer.html stylesheet.css YourConfigFile" and then modify # that header. Note that the header is subject to change so you typically # have to redo this when upgrading to a newer version of doxygen or when # changing the value of configuration settings such as GENERATE_TREEVIEW! HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If left blank doxygen will # generate a default style sheet. Note that it is recommended to use # HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this # tag will in the future become obsolete. HTML_STYLESHEET = # The HTML_EXTRA_STYLESHEET tag can be used to specify an additional # user-defined cascading style sheet that is included after the standard # style sheets created by doxygen. Using this option one can overrule # certain style aspects. This is preferred over using HTML_STYLESHEET # since it does not replace the standard style sheet and is therefore more # robust against future updates. Doxygen will copy the style sheet file to # the output directory. HTML_EXTRA_STYLESHEET = # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note # that these files will be copied to the base HTML output directory. Use the # $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these # files. In the HTML_STYLESHEET file, use the file name only. Also note that # the files will be copied as-is; there are no commands or markers available. HTML_EXTRA_FILES = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. # Doxygen will adjust the colors in the style sheet and background images # according to this color. Hue is specified as an angle on a colorwheel, # see http://en.wikipedia.org/wiki/Hue for more information. # For instance the value 0 represents red, 60 is yellow, 120 is green, # 180 is cyan, 240 is blue, 300 purple, and 360 is red again. # The allowed range is 0 to 359. HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of # the colors in the HTML output. For a value of 0 the output will use # grayscales only. A value of 255 will produce the most vivid colors. HTML_COLORSTYLE_SAT = 100 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to # the luminance component of the colors in the HTML output. Values below # 100 gradually make the output lighter, whereas values above 100 make # the output darker. The value divided by 100 is the actual gamma applied, # so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, # and 100 does not change the gamma. HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting # this to NO can help when comparing the output of multiple runs. HTML_TIMESTAMP = NO # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. HTML_DYNAMIC_SECTIONS = NO # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of # entries shown in the various tree structured indices initially; the user # can expand and collapse entries dynamically later on. Doxygen will expand # the tree to such a level that at most the specified number of entries are # visible (unless a fully collapsed tree already exceeds this amount). # So setting the number of entries 1 will produce a full collapsed tree by # default. 0 is a special value representing an infinite number of entries # and will result in a full expanded tree by default. HTML_INDEX_NUM_ENTRIES = 100 # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html # for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely # identify the documentation publisher. This should be a reverse domain-name # style string, e.g. com.mycompany.MyDocSet.documentation. DOCSET_PUBLISHER_ID = org.doxygen.Publisher # The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = YES # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated # that can be used as input for Qt's qhelpgenerator to generate a # Qt Compressed Help (.qch) of the generated HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to # add. For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see # # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's # filter section matches. # # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files # will be generated, which together with the HTML files, form an Eclipse help # plugin. To install this plugin and make it available under the help contents # menu in Eclipse, the contents of the directory containing the HTML and XML # files needs to be copied into the plugins directory of eclipse. The name of # the directory within the plugins directory should be the same as # the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before # the help appears. GENERATE_ECLIPSEHELP = NO # A unique identifier for the eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have # this name. ECLIPSE_DOC_ID = org.doxygen.Project # The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) # at top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. Since the tabs have the same information as the # navigation tree you can set this option to NO if you already set # GENERATE_TREEVIEW to YES. DISABLE_INDEX = YES # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to YES, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. # Since the tree basically has the same information as the tab index you # could consider to set DISABLE_INDEX to NO when enabling this option. GENERATE_TREEVIEW = YES # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values # (range [0,1..20]) that doxygen will group on one line in the generated HTML # documentation. Note that a value of 0 will completely suppress the enum # values from appearing in the overview section. ENUM_VALUES_PER_LINE = 4 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 180 # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open # links to external symbols imported via tag files in a separate window. EXT_LINKS_IN_WINDOW = NO # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 # Use the FORMULA_TRANPARENT tag to determine whether or not the images # generated for formulas are transparent PNGs. Transparent PNGs are # not supported properly for IE 6.0, but are supported on all modern browsers. # Note that when changing this option you need to delete any form_*.png files # in the HTML output before the changes have effect. FORMULA_TRANSPARENT = YES # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax # (see http://www.mathjax.org) which uses client side Javascript for the # rendering instead of using prerendered bitmaps. Use this if you do not # have LaTeX installed or if you want to formulas look prettier in the HTML # output. When enabled you may also need to install MathJax separately and # configure the path to it using the MATHJAX_RELPATH option. USE_MATHJAX = NO # When MathJax is enabled you can set the default output format to be used for # the MathJax output. Supported types are HTML-CSS, NativeMML (i.e. MathML) and # SVG. The default value is HTML-CSS, which is slower, but has the best # compatibility. MATHJAX_FORMAT = HTML-CSS # When MathJax is enabled you need to specify the location relative to the # HTML output directory using the MATHJAX_RELPATH option. The destination # directory should contain the MathJax.js script. For instance, if the mathjax # directory is located at the same level as the HTML output directory, then # MATHJAX_RELPATH should be ../mathjax. The default value points to # the MathJax Content Delivery Network so you can quickly see the result without # installing MathJax. # However, it is strongly recommended to install a local # copy of MathJax from http://www.mathjax.org before deployment. MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest # The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension # names that should be enabled during MathJax rendering. MATHJAX_EXTENSIONS = # The MATHJAX_CODEFILE tag can be used to specify a file with javascript # pieces of code that will be used on startup of the MathJax code. MATHJAX_CODEFILE = # When the SEARCHENGINE tag is enabled doxygen will generate a search box # for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using # HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets # (GENERATE_DOCSET) there is already a search function so this one should # typically be disabled. For large projects the javascript based search engine # can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. SEARCHENGINE = NO # When the SERVER_BASED_SEARCH tag is enabled the search engine will be # implemented using a web server instead of a web client using Javascript. # There are two flavours of web server based search depending on the # EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for # searching and an index file used by the script. When EXTERNAL_SEARCH is # enabled the indexing and searching needs to be provided by external tools. # See the manual for details. SERVER_BASED_SEARCH = NO # When EXTERNAL_SEARCH is enabled doxygen will no longer generate the PHP # script for searching. Instead the search results are written to an XML file # which needs to be processed by an external indexer. Doxygen will invoke an # external search engine pointed to by the SEARCHENGINE_URL option to obtain # the search results. Doxygen ships with an example indexer (doxyindexer) and # search engine (doxysearch.cgi) which are based on the open source search # engine library Xapian. See the manual for configuration details. EXTERNAL_SEARCH = NO # The SEARCHENGINE_URL should point to a search engine hosted by a web server # which will returned the search results when EXTERNAL_SEARCH is enabled. # Doxygen ships with an example search engine (doxysearch) which is based on # the open source search engine library Xapian. See the manual for configuration # details. SEARCHENGINE_URL = # When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed # search data is written to a file for indexing by an external tool. With the # SEARCHDATA_FILE tag the name of this file can be specified. SEARCHDATA_FILE = searchdata.xml # When SERVER_BASED_SEARCH AND EXTERNAL_SEARCH are both enabled the # EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is # useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple # projects and redirect the results back to the right project. EXTERNAL_SEARCH_ID = # The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen # projects other than the one defined by this configuration file, but that are # all added to the same external search index. Each project needs to have a # unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id # of to a relative location where the documentation can be found. # The format is: EXTRA_SEARCH_MAPPINGS = id1=loc1 id2=loc2 ... EXTRA_SEARCH_MAPPINGS = #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = @enable_latex_docs@ # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. # Note that when enabling USE_PDFLATEX this option is only used for # generating bitmaps for formulas in the HTML output, but not in the # Makefile that is written to the output directory. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, letter, legal and # executive. If left blank a4 will be used. PAPER_TYPE = letter # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for # the generated latex document. The footer should contain everything after # the last chapter. If it is left blank doxygen will generate a # standard footer. Notice: only use this tag if you know what you are doing! LATEX_FOOTER = # The LATEX_EXTRA_FILES tag can be used to specify one or more extra images # or other source files which should be copied to the LaTeX output directory. # Note that the files will be copied as-is; there are no commands or markers # available. LATEX_EXTRA_FILES = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = NO # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include # source code with syntax highlighting in the LaTeX output. # Note that which sources are shown also depends on other settings # such as SOURCE_BROWSER. LATEX_SOURCE_CODE = NO # The LATEX_BIB_STYLE tag can be used to specify the style to use for the # bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See # http://en.wikipedia.org/wiki/BibTeX for more info. LATEX_BIB_STYLE = plain #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load style sheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = @enable_xml_docs@ # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = NO #--------------------------------------------------------------------------- # configuration options related to the DOCBOOK output #--------------------------------------------------------------------------- # If the GENERATE_DOCBOOK tag is set to YES Doxygen will generate DOCBOOK files # that can be used to generate PDF. GENERATE_DOCBOOK = NO # The DOCBOOK_OUTPUT tag is used to specify where the DOCBOOK pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be put in # front of it. If left blank docbook will be used as the default path. DOCBOOK_OUTPUT = docbook #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # pointed to by INCLUDE_PATH will be searched when a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition that # overrules the definition found in the source code. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all references to function-like macros # that are alone on a line, have an all uppercase name, and do not end with a # semicolon, because these will confuse the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. For each # tag file the location of the external documentation should be added. The # format of a tag file without this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths # or URLs. Note that each tag file must have a unique name (where the name does # NOT include the path). If a tag file is not located in the directory in which # doxygen is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # If the EXTERNAL_PAGES tag is set to YES all external pages will be listed # in the related pages index. If set to NO, only the current project's # pages will be listed. EXTERNAL_PAGES = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option also works with HAVE_DOT disabled, but it is recommended to # install and use dot, since it yields more powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = @HAVE_DOT@ # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is # allowed to run in parallel. When set to 0 (the default) doxygen will # base this on the number of processors available in the system. You can set it # explicitly to a value larger than 0 to get control over the balance # between CPU load and processing speed. DOT_NUM_THREADS = 0 # By default doxygen will use the Helvetica font for all dot files that # doxygen generates. When you want a differently looking font you can specify # the font name using DOT_FONTNAME. You need to make sure dot is able to find # the font, which can be done by putting it in a standard location or by setting # the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the # directory containing the font. DOT_FONTNAME = Helvetica # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the Helvetica font. # If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to # set the path where dot can find it. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = NO # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If the UML_LOOK tag is enabled, the fields and methods are shown inside # the class node. If there are many fields or methods and many nodes the # graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS # threshold limits the number of items for each type to make the size more # manageable. Set this to 0 for no limit. Note that the threshold may be # exceeded by 50% before the limit is enforced. UML_LIMIT_NUM_FIELDS = 10 # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will generate a graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are svg, png, jpg, or gif. # If left blank png will be used. If you choose svg you need to set # HTML_FILE_EXTENSION to xhtml in order to make the SVG files # visible in IE 9+ (other browsers do not have this requirement). DOT_IMAGE_FORMAT = png # If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to # enable generation of interactive SVG images that allow zooming and panning. # Note that this requires a modern browser other than Internet Explorer. # Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you # need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files # visible. Older versions of IE do not have SVG support. INTERACTIVE_SVG = NO # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MSCFILE_DIRS tag can be used to specify one or more directories that # contain msc files that are included in the documentation (see the # \mscfile command). MSCFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = YES # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES gr-satellites-4.4.0/docs/doxygen/Doxyfile.swig_doc.in000066400000000000000000002345631414055407700226370ustar00rootroot00000000000000# Doxyfile 1.8.4 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. # # All text after a double hash (##) is considered a comment and is placed # in front of the TAG it is preceding . # All text after a hash (#) is considered a comment and will be ignored. # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" "). #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or sequence of words) that should # identify the project. Note that if you do not use Doxywizard you need # to put quotes around the project name if it contains spaces. PROJECT_NAME = @CPACK_PACKAGE_NAME@ # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = @CPACK_PACKAGE_VERSION@ # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer # a quick idea about the purpose of the project. Keep the description short. PROJECT_BRIEF = # With the PROJECT_LOGO tag one can specify an logo or icon that is # included in the documentation. The maximum height of the logo should not # exceed 55 pixels and the maximum width should not exceed 200 pixels. # Doxygen will copy the logo to the output directory. PROJECT_LOGO = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = "@OUTPUT_DIRECTORY@" # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Latvian, Lithuanian, Norwegian, Macedonian, # Persian, Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, # Slovak, Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. Note that you specify absolute paths here, but also # relative paths, which will be relative from the directory where doxygen is # started. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful if your file system # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # This tag can be used to specify a number of word-keyword mappings (TCL only). # A mapping has the form "name=value". For example adding # "class=itcl::class" will allow you to use the command class in the # itcl::class meaning. TCL_SUBST = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, # and language is one of the parsers supported by doxygen: IDL, Java, # Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, # C++. For instance to make doxygen treat .inc files as Fortran files (default # is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note # that for custom extensions you also need to set FILE_PATTERNS otherwise the # files are not read by doxygen. EXTENSION_MAPPING = # If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all # comments according to the Markdown format, which allows for more readable # documentation. See http://daringfireball.net/projects/markdown/ for details. # The output of markdown processing is further processed by doxygen, so you # can mix doxygen, HTML, and XML commands with Markdown formatting. # Disable only in case of backward compatibilities issues. MARKDOWN_SUPPORT = YES # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can # be prevented in individual cases by by putting a % sign in front of the word # or globally by setting AUTOLINK_SUPPORT to NO. AUTOLINK_SUPPORT = YES # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also makes the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate # getter and setter methods for a property. Setting this option to YES (the # default) will make doxygen replace the get and set methods by a property in # the documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and # unions are shown inside the group in which they are included (e.g. using # @ingroup) instead of on a separate page (for HTML and Man pages) or # section (for LaTeX and RTF). INLINE_GROUPED_CLASSES = NO # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and # unions with only public data fields or simple typedef fields will be shown # inline in the documentation of the scope in which they are defined (i.e. file, # namespace, or group documentation), provided this scope is documented. If set # to NO (the default), structs, classes, and unions are shown on a separate # page (for HTML and Man pages) or section (for LaTeX and RTF). INLINE_SIMPLE_STRUCTS = NO # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This # cache is used to resolve symbols given their name and scope. Since this can # be an expensive process and often the same symbol appear multiple times in # the code, doxygen keeps a cache of pre-resolved symbols. If the cache is too # small doxygen will become slower. If the cache is too large, memory is wasted. # The cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid # range is 0..9, the default is 0, corresponding to a cache size of 2^16 = 65536 # symbols. LOOKUP_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_PACKAGE tag is set to YES all members with package or internal # scope will be included in the documentation. EXTRACT_PACKAGE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespaces are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen # will list include files with double quotes in the documentation # rather than with sharp brackets. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen # will sort the (brief and detailed) documentation of class members so that # constructors and destructors are listed first. If set to NO (the default) # the constructors will appear in the respective orders defined by # SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. # This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO # and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to # do proper type resolution of all parameters of a function it will reject a # match between the prototype and the implementation of a member function even # if there is only one candidate or it is obvious which candidate to choose # by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen # will still accept a match between prototype and implementation in such cases. STRICT_PROTO_MATCHING = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if section-label ... \endif # and \cond section-label ... \endcond blocks. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or macro consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and macros in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. To create the layout file # that represents doxygen's defaults, run doxygen with the -l option. # You can optionally specify a file name after the option, if omitted # DoxygenLayout.xml will be used as the name of the layout file. LAYOUT_FILE = # The CITE_BIB_FILES tag can be used to specify one or more bib files # containing the references data. This must be a list of .bib files. The # .bib extension is automatically appended if omitted. Using this command # requires the bibtex tool to be installed. See also # http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style # of the bibliography can be controlled using LATEX_BIB_STYLE. To use this # feature you need bibtex and perl available in the search path. Do not use # file names with spaces, bibtex cannot handle them. CITE_BIB_FILES = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = YES # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # The WARN_NO_PARAMDOC option can be enabled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = @INPUT_PATHS@ # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh # *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py # *.f90 *.f *.for *.vhd *.vhdl FILE_PATTERNS = *.h # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. # Note that relative paths are relative to the directory from which doxygen is # run. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be ignored. # Note that the filter must not add or remove lines; it is applied before the # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty or if # non of the patterns match the file name, INPUT_FILTER is applied. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file # pattern. A pattern will override the setting for FILTER_PATTERN (if any) # and it is also possible to disable source filtering for a specific pattern # using *.ext= (so without naming a filter). This option only has effect when # FILTER_SOURCE_FILES is enabled. FILTER_SOURCE_PATTERNS = # If the USE_MD_FILE_AS_MAINPAGE tag refers to the name of a markdown file that # is part of the input, its contents will be placed on the main page # (index.html). This can be useful if you have a project on for instance GitHub # and want reuse the introduction page also for the doxygen output. USE_MDFILE_AS_MAINPAGE = #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C, C++ and Fortran comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = NO # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. Note that when using a custom header you are responsible # for the proper inclusion of any scripts and style sheets that doxygen # needs, which is dependent on the configuration options used. # It is advised to generate a default header using "doxygen -w html # header.html footer.html stylesheet.css YourConfigFile" and then modify # that header. Note that the header is subject to change so you typically # have to redo this when upgrading to a newer version of doxygen or when # changing the value of configuration settings such as GENERATE_TREEVIEW! HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If left blank doxygen will # generate a default style sheet. Note that it is recommended to use # HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this # tag will in the future become obsolete. HTML_STYLESHEET = # The HTML_EXTRA_STYLESHEET tag can be used to specify an additional # user-defined cascading style sheet that is included after the standard # style sheets created by doxygen. Using this option one can overrule # certain style aspects. This is preferred over using HTML_STYLESHEET # since it does not replace the standard style sheet and is therefore more # robust against future updates. Doxygen will copy the style sheet file to # the output directory. HTML_EXTRA_STYLESHEET = # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note # that these files will be copied to the base HTML output directory. Use the # $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these # files. In the HTML_STYLESHEET file, use the file name only. Also note that # the files will be copied as-is; there are no commands or markers available. HTML_EXTRA_FILES = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. # Doxygen will adjust the colors in the style sheet and background images # according to this color. Hue is specified as an angle on a colorwheel, # see http://en.wikipedia.org/wiki/Hue for more information. # For instance the value 0 represents red, 60 is yellow, 120 is green, # 180 is cyan, 240 is blue, 300 purple, and 360 is red again. # The allowed range is 0 to 359. HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of # the colors in the HTML output. For a value of 0 the output will use # grayscales only. A value of 255 will produce the most vivid colors. HTML_COLORSTYLE_SAT = 100 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to # the luminance component of the colors in the HTML output. Values below # 100 gradually make the output lighter, whereas values above 100 make # the output darker. The value divided by 100 is the actual gamma applied, # so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, # and 100 does not change the gamma. HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting # this to NO can help when comparing the output of multiple runs. HTML_TIMESTAMP = NO # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. HTML_DYNAMIC_SECTIONS = NO # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of # entries shown in the various tree structured indices initially; the user # can expand and collapse entries dynamically later on. Doxygen will expand # the tree to such a level that at most the specified number of entries are # visible (unless a fully collapsed tree already exceeds this amount). # So setting the number of entries 1 will produce a full collapsed tree by # default. 0 is a special value representing an infinite number of entries # and will result in a full expanded tree by default. HTML_INDEX_NUM_ENTRIES = 100 # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html # for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely # identify the documentation publisher. This should be a reverse domain-name # style string, e.g. com.mycompany.MyDocSet.documentation. DOCSET_PUBLISHER_ID = org.doxygen.Publisher # The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated # that can be used as input for Qt's qhelpgenerator to generate a # Qt Compressed Help (.qch) of the generated HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to # add. For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see # # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's # filter section matches. # # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files # will be generated, which together with the HTML files, form an Eclipse help # plugin. To install this plugin and make it available under the help contents # menu in Eclipse, the contents of the directory containing the HTML and XML # files needs to be copied into the plugins directory of eclipse. The name of # the directory within the plugins directory should be the same as # the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before # the help appears. GENERATE_ECLIPSEHELP = NO # A unique identifier for the eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have # this name. ECLIPSE_DOC_ID = org.doxygen.Project # The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) # at top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. Since the tabs have the same information as the # navigation tree you can set this option to NO if you already set # GENERATE_TREEVIEW to YES. DISABLE_INDEX = NO # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to YES, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. # Since the tree basically has the same information as the tab index you # could consider to set DISABLE_INDEX to NO when enabling this option. GENERATE_TREEVIEW = NO # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values # (range [0,1..20]) that doxygen will group on one line in the generated HTML # documentation. Note that a value of 0 will completely suppress the enum # values from appearing in the overview section. ENUM_VALUES_PER_LINE = 4 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open # links to external symbols imported via tag files in a separate window. EXT_LINKS_IN_WINDOW = NO # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 # Use the FORMULA_TRANPARENT tag to determine whether or not the images # generated for formulas are transparent PNGs. Transparent PNGs are # not supported properly for IE 6.0, but are supported on all modern browsers. # Note that when changing this option you need to delete any form_*.png files # in the HTML output before the changes have effect. FORMULA_TRANSPARENT = YES # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax # (see http://www.mathjax.org) which uses client side Javascript for the # rendering instead of using prerendered bitmaps. Use this if you do not # have LaTeX installed or if you want to formulas look prettier in the HTML # output. When enabled you may also need to install MathJax separately and # configure the path to it using the MATHJAX_RELPATH option. USE_MATHJAX = NO # When MathJax is enabled you can set the default output format to be used for # the MathJax output. Supported types are HTML-CSS, NativeMML (i.e. MathML) and # SVG. The default value is HTML-CSS, which is slower, but has the best # compatibility. MATHJAX_FORMAT = HTML-CSS # When MathJax is enabled you need to specify the location relative to the # HTML output directory using the MATHJAX_RELPATH option. The destination # directory should contain the MathJax.js script. For instance, if the mathjax # directory is located at the same level as the HTML output directory, then # MATHJAX_RELPATH should be ../mathjax. The default value points to # the MathJax Content Delivery Network so you can quickly see the result without # installing MathJax. # However, it is strongly recommended to install a local # copy of MathJax from http://www.mathjax.org before deployment. MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest # The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension # names that should be enabled during MathJax rendering. MATHJAX_EXTENSIONS = # The MATHJAX_CODEFILE tag can be used to specify a file with javascript # pieces of code that will be used on startup of the MathJax code. MATHJAX_CODEFILE = # When the SEARCHENGINE tag is enabled doxygen will generate a search box # for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using # HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets # (GENERATE_DOCSET) there is already a search function so this one should # typically be disabled. For large projects the javascript based search engine # can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. SEARCHENGINE = YES # When the SERVER_BASED_SEARCH tag is enabled the search engine will be # implemented using a web server instead of a web client using Javascript. # There are two flavours of web server based search depending on the # EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for # searching and an index file used by the script. When EXTERNAL_SEARCH is # enabled the indexing and searching needs to be provided by external tools. # See the manual for details. SERVER_BASED_SEARCH = NO # When EXTERNAL_SEARCH is enabled doxygen will no longer generate the PHP # script for searching. Instead the search results are written to an XML file # which needs to be processed by an external indexer. Doxygen will invoke an # external search engine pointed to by the SEARCHENGINE_URL option to obtain # the search results. Doxygen ships with an example indexer (doxyindexer) and # search engine (doxysearch.cgi) which are based on the open source search # engine library Xapian. See the manual for configuration details. EXTERNAL_SEARCH = NO # The SEARCHENGINE_URL should point to a search engine hosted by a web server # which will returned the search results when EXTERNAL_SEARCH is enabled. # Doxygen ships with an example search engine (doxysearch) which is based on # the open source search engine library Xapian. See the manual for configuration # details. SEARCHENGINE_URL = # When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed # search data is written to a file for indexing by an external tool. With the # SEARCHDATA_FILE tag the name of this file can be specified. SEARCHDATA_FILE = searchdata.xml # When SERVER_BASED_SEARCH AND EXTERNAL_SEARCH are both enabled the # EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is # useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple # projects and redirect the results back to the right project. EXTERNAL_SEARCH_ID = # The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen # projects other than the one defined by this configuration file, but that are # all added to the same external search index. Each project needs to have a # unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id # of to a relative location where the documentation can be found. # The format is: EXTRA_SEARCH_MAPPINGS = id1=loc1 id2=loc2 ... EXTRA_SEARCH_MAPPINGS = #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. # Note that when enabling USE_PDFLATEX this option is only used for # generating bitmaps for formulas in the HTML output, but not in the # Makefile that is written to the output directory. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, letter, legal and # executive. If left blank a4 will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for # the generated latex document. The footer should contain everything after # the last chapter. If it is left blank doxygen will generate a # standard footer. Notice: only use this tag if you know what you are doing! LATEX_FOOTER = # The LATEX_EXTRA_FILES tag can be used to specify one or more extra images # or other source files which should be copied to the LaTeX output directory. # Note that the files will be copied as-is; there are no commands or markers # available. LATEX_EXTRA_FILES = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include # source code with syntax highlighting in the LaTeX output. # Note that which sources are shown also depends on other settings # such as SOURCE_BROWSER. LATEX_SOURCE_CODE = NO # The LATEX_BIB_STYLE tag can be used to specify the style to use for the # bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See # http://en.wikipedia.org/wiki/BibTeX for more info. LATEX_BIB_STYLE = plain #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load style sheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = YES # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options related to the DOCBOOK output #--------------------------------------------------------------------------- # If the GENERATE_DOCBOOK tag is set to YES Doxygen will generate DOCBOOK files # that can be used to generate PDF. GENERATE_DOCBOOK = NO # The DOCBOOK_OUTPUT tag is used to specify where the DOCBOOK pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be put in # front of it. If left blank docbook will be used as the default path. DOCBOOK_OUTPUT = docbook #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = YES # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # pointed to by INCLUDE_PATH will be searched when a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition that # overrules the definition found in the source code. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all references to function-like macros # that are alone on a line, have an all uppercase name, and do not end with a # semicolon, because these will confuse the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. For each # tag file the location of the external documentation should be added. The # format of a tag file without this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths # or URLs. Note that each tag file must have a unique name (where the name does # NOT include the path). If a tag file is not located in the directory in which # doxygen is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # If the EXTERNAL_PAGES tag is set to YES all external pages will be listed # in the related pages index. If set to NO, only the current project's # pages will be listed. EXTERNAL_PAGES = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option also works with HAVE_DOT disabled, but it is recommended to # install and use dot, since it yields more powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = NO # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is # allowed to run in parallel. When set to 0 (the default) doxygen will # base this on the number of processors available in the system. You can set it # explicitly to a value larger than 0 to get control over the balance # between CPU load and processing speed. DOT_NUM_THREADS = 0 # By default doxygen will use the Helvetica font for all dot files that # doxygen generates. When you want a differently looking font you can specify # the font name using DOT_FONTNAME. You need to make sure dot is able to find # the font, which can be done by putting it in a standard location or by setting # the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the # directory containing the font. DOT_FONTNAME = Helvetica # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the Helvetica font. # If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to # set the path where dot can find it. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If the UML_LOOK tag is enabled, the fields and methods are shown inside # the class node. If there are many fields or methods and many nodes the # graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS # threshold limits the number of items for each type to make the size more # manageable. Set this to 0 for no limit. Note that the threshold may be # exceeded by 50% before the limit is enforced. UML_LIMIT_NUM_FIELDS = 10 # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will generate a graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are svg, png, jpg, or gif. # If left blank png will be used. If you choose svg you need to set # HTML_FILE_EXTENSION to xhtml in order to make the SVG files # visible in IE 9+ (other browsers do not have this requirement). DOT_IMAGE_FORMAT = png # If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to # enable generation of interactive SVG images that allow zooming and panning. # Note that this requires a modern browser other than Internet Explorer. # Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you # need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files # visible. Older versions of IE do not have SVG support. INTERACTIVE_SVG = NO # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MSCFILE_DIRS tag can be used to specify one or more directories that # contain msc files that are included in the documentation (see the # \mscfile command). MSCFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = YES # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES gr-satellites-4.4.0/docs/doxygen/doxyxml/000077500000000000000000000000001414055407700204165ustar00rootroot00000000000000gr-satellites-4.4.0/docs/doxygen/doxyxml/__init__.py000066400000000000000000000050461414055407700225340ustar00rootroot00000000000000# # Copyright 2010 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # """ Python interface to contents of doxygen xml documentation. Example use: See the contents of the example folder for the C++ and doxygen-generated xml used in this example. >>> # Parse the doxygen docs. >>> import os >>> this_dir = os.path.dirname(globals()['__file__']) >>> xml_path = this_dir + "/example/xml/" >>> di = DoxyIndex(xml_path) Get a list of all top-level objects. >>> print([mem.name() for mem in di.members()]) [u'Aadvark', u'aadvarky_enough', u'main'] Get all functions. >>> print([mem.name() for mem in di.in_category(DoxyFunction)]) [u'aadvarky_enough', u'main'] Check if an object is present. >>> di.has_member(u'Aadvark') True >>> di.has_member(u'Fish') False Get an item by name and check its properties. >>> aad = di.get_member(u'Aadvark') >>> print(aad.brief_description) Models the mammal Aadvark. >>> print(aad.detailed_description) Sadly the model is incomplete and cannot capture all aspects of an aadvark yet. This line is uninformative and is only to test line breaks in the comments. >>> [mem.name() for mem in aad.members()] [u'aadvarkness', u'print', u'Aadvark', u'get_aadvarkness'] >>> aad.get_member(u'print').brief_description u'Outputs the vital aadvark statistics.' """ from __future__ import unicode_literals from .doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther def _test(): import os this_dir = os.path.dirname(globals()['__file__']) xml_path = this_dir + "/example/xml/" di = DoxyIndex(xml_path) # Get the Aadvark class aad = di.get_member('Aadvark') aad.brief_description import doctest return doctest.testmod() if __name__ == "__main__": _test() gr-satellites-4.4.0/docs/doxygen/doxyxml/base.py000066400000000000000000000154271414055407700217130ustar00rootroot00000000000000# # Copyright 2010 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # """ A base class is created. Classes based upon this are used to make more user-friendly interfaces to the doxygen xml docs than the generated classes provide. """ from __future__ import print_function from __future__ import unicode_literals import os import pdb from xml.parsers.expat import ExpatError from .generated import compound class Base(object): class Duplicate(Exception): pass class NoSuchMember(Exception): pass class ParsingError(Exception): pass def __init__(self, parse_data, top=None): self._parsed = False self._error = False self._parse_data = parse_data self._members = [] self._dict_members = {} self._in_category = {} self._data = {} if top is not None: self._xml_path = top._xml_path # Set up holder of references else: top = self self._refs = {} self._xml_path = parse_data self.top = top @classmethod def from_refid(cls, refid, top=None): """ Instantiate class from a refid rather than parsing object. """ # First check to see if its already been instantiated. if top is not None and refid in top._refs: return top._refs[refid] # Otherwise create a new instance and set refid. inst = cls(None, top=top) inst.refid = refid inst.add_ref(inst) return inst @classmethod def from_parse_data(cls, parse_data, top=None): refid = getattr(parse_data, 'refid', None) if refid is not None and top is not None and refid in top._refs: return top._refs[refid] inst = cls(parse_data, top=top) if refid is not None: inst.refid = refid inst.add_ref(inst) return inst def add_ref(self, obj): if hasattr(obj, 'refid'): self.top._refs[obj.refid] = obj mem_classes = [] def get_cls(self, mem): for cls in self.mem_classes: if cls.can_parse(mem): return cls raise Exception(("Did not find a class for object '%s'." \ % (mem.get_name()))) def convert_mem(self, mem): try: cls = self.get_cls(mem) converted = cls.from_parse_data(mem, self.top) if converted is None: raise Exception('No class matched this object.') self.add_ref(converted) return converted except Exception as e: print(e) @classmethod def includes(cls, inst): return isinstance(inst, cls) @classmethod def can_parse(cls, obj): return False def _parse(self): self._parsed = True def _get_dict_members(self, cat=None): """ For given category a dictionary is returned mapping member names to members of that category. For names that are duplicated the name is mapped to None. """ self.confirm_no_error() if cat not in self._dict_members: new_dict = {} for mem in self.in_category(cat): if mem.name() not in new_dict: new_dict[mem.name()] = mem else: new_dict[mem.name()] = self.Duplicate self._dict_members[cat] = new_dict return self._dict_members[cat] def in_category(self, cat): self.confirm_no_error() if cat is None: return self._members if cat not in self._in_category: self._in_category[cat] = [mem for mem in self._members if cat.includes(mem)] return self._in_category[cat] def get_member(self, name, cat=None): self.confirm_no_error() # Check if it's in a namespace or class. bits = name.split('::') first = bits[0] rest = '::'.join(bits[1:]) member = self._get_dict_members(cat).get(first, self.NoSuchMember) # Raise any errors that are returned. if member in set([self.NoSuchMember, self.Duplicate]): raise member() if rest: return member.get_member(rest, cat=cat) return member def has_member(self, name, cat=None): try: mem = self.get_member(name, cat=cat) return True except self.NoSuchMember: return False def data(self): self.confirm_no_error() return self._data def members(self): self.confirm_no_error() return self._members def process_memberdefs(self): mdtss = [] for sec in self._retrieved_data.compounddef.sectiondef: mdtss += sec.memberdef # At the moment we lose all information associated with sections. # Sometimes a memberdef is in several sectiondef. # We make sure we don't get duplicates here. uniques = set([]) for mem in mdtss: converted = self.convert_mem(mem) pair = (mem.name, mem.__class__) if pair not in uniques: uniques.add(pair) self._members.append(converted) def retrieve_data(self): filename = os.path.join(self._xml_path, self.refid + '.xml') try: self._retrieved_data = compound.parse(filename) except ExpatError: print('Error in xml in file %s' % filename) self._error = True self._retrieved_data = None def check_parsed(self): if not self._parsed: self._parse() def confirm_no_error(self): self.check_parsed() if self._error: raise self.ParsingError() def error(self): self.check_parsed() return self._error def name(self): # first see if we can do it without processing. if self._parse_data is not None: return self._parse_data.name self.check_parsed() return self._retrieved_data.compounddef.name gr-satellites-4.4.0/docs/doxygen/doxyxml/doxyindex.py000066400000000000000000000214261414055407700230100ustar00rootroot00000000000000# # Copyright 2010 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # """ Classes providing more user-friendly interfaces to the doxygen xml docs than the generated classes provide. """ from __future__ import absolute_import from __future__ import unicode_literals import os from .generated import index from .base import Base from .text import description class DoxyIndex(Base): """ Parses a doxygen xml directory. """ __module__ = "gnuradio.utils.doxyxml" def _parse(self): if self._parsed: return super(DoxyIndex, self)._parse() self._root = index.parse(os.path.join(self._xml_path, 'index.xml')) for mem in self._root.compound: converted = self.convert_mem(mem) # For files and namespaces we want the contents to be # accessible directly from the parent rather than having # to go through the file object. if self.get_cls(mem) == DoxyFile: if mem.name.endswith('.h'): self._members += converted.members() self._members.append(converted) elif self.get_cls(mem) == DoxyNamespace: self._members += converted.members() self._members.append(converted) else: self._members.append(converted) def generate_swig_doc_i(self): """ %feature("docstring") gr_make_align_on_samplenumbers_ss::align_state " Wraps the C++: gr_align_on_samplenumbers_ss::align_state"; """ pass class DoxyCompMem(Base): kind = None def __init__(self, *args, **kwargs): super(DoxyCompMem, self).__init__(*args, **kwargs) @classmethod def can_parse(cls, obj): return obj.kind == cls.kind def set_descriptions(self, parse_data): bd = description(getattr(parse_data, 'briefdescription', None)) dd = description(getattr(parse_data, 'detaileddescription', None)) self._data['brief_description'] = bd self._data['detailed_description'] = dd def set_parameters(self, data): vs = [ddc.value for ddc in data.detaileddescription.content_] pls = [] for v in vs: if hasattr(v, 'parameterlist'): pls += v.parameterlist pis = [] for pl in pls: pis += pl.parameteritem dpis = [] for pi in pis: dpi = DoxyParameterItem(pi) dpi._parse() dpis.append(dpi) self._data['params'] = dpis class DoxyCompound(DoxyCompMem): pass class DoxyMember(DoxyCompMem): pass class DoxyFunction(DoxyMember): __module__ = "gnuradio.utils.doxyxml" kind = 'function' def _parse(self): if self._parsed: return super(DoxyFunction, self)._parse() self.set_descriptions(self._parse_data) self.set_parameters(self._parse_data) if not self._data['params']: # If the params weren't set by a comment then just grab the names. self._data['params'] = [] prms = self._parse_data.param for prm in prms: self._data['params'].append(DoxyParam(prm)) brief_description = property(lambda self: self.data()['brief_description']) detailed_description = property(lambda self: self.data()['detailed_description']) params = property(lambda self: self.data()['params']) Base.mem_classes.append(DoxyFunction) class DoxyParam(DoxyMember): __module__ = "gnuradio.utils.doxyxml" def _parse(self): if self._parsed: return super(DoxyParam, self)._parse() self.set_descriptions(self._parse_data) self._data['declname'] = self._parse_data.declname @property def description(self): descriptions = [] if self.brief_description: descriptions.append(self.brief_description) if self.detailed_description: descriptions.append(self.detailed_description) return '\n\n'.join(descriptions) brief_description = property(lambda self: self.data()['brief_description']) detailed_description = property(lambda self: self.data()['detailed_description']) name = property(lambda self: self.data()['declname']) class DoxyParameterItem(DoxyMember): """A different representation of a parameter in Doxygen.""" def _parse(self): if self._parsed: return super(DoxyParameterItem, self)._parse() names = [] for nl in self._parse_data.parameternamelist: for pn in nl.parametername: names.append(description(pn)) # Just take first name self._data['name'] = names[0] # Get description pd = description(self._parse_data.get_parameterdescription()) self._data['description'] = pd description = property(lambda self: self.data()['description']) name = property(lambda self: self.data()['name']) class DoxyClass(DoxyCompound): __module__ = "gnuradio.utils.doxyxml" kind = 'class' def _parse(self): if self._parsed: return super(DoxyClass, self)._parse() self.retrieve_data() if self._error: return self.set_descriptions(self._retrieved_data.compounddef) self.set_parameters(self._retrieved_data.compounddef) # Sectiondef.kind tells about whether private or public. # We just ignore this for now. self.process_memberdefs() brief_description = property(lambda self: self.data()['brief_description']) detailed_description = property(lambda self: self.data()['detailed_description']) params = property(lambda self: self.data()['params']) Base.mem_classes.append(DoxyClass) class DoxyFile(DoxyCompound): __module__ = "gnuradio.utils.doxyxml" kind = 'file' def _parse(self): if self._parsed: return super(DoxyFile, self)._parse() self.retrieve_data() self.set_descriptions(self._retrieved_data.compounddef) if self._error: return self.process_memberdefs() brief_description = property(lambda self: self.data()['brief_description']) detailed_description = property(lambda self: self.data()['detailed_description']) Base.mem_classes.append(DoxyFile) class DoxyNamespace(DoxyCompound): __module__ = "gnuradio.utils.doxyxml" kind = 'namespace' def _parse(self): if self._parsed: return super(DoxyNamespace, self)._parse() self.retrieve_data() self.set_descriptions(self._retrieved_data.compounddef) if self._error: return self.process_memberdefs() Base.mem_classes.append(DoxyNamespace) class DoxyGroup(DoxyCompound): __module__ = "gnuradio.utils.doxyxml" kind = 'group' def _parse(self): if self._parsed: return super(DoxyGroup, self)._parse() self.retrieve_data() if self._error: return cdef = self._retrieved_data.compounddef self._data['title'] = description(cdef.title) # Process inner groups grps = cdef.innergroup for grp in grps: converted = DoxyGroup.from_refid(grp.refid, top=self.top) self._members.append(converted) # Process inner classes klasses = cdef.innerclass for kls in klasses: converted = DoxyClass.from_refid(kls.refid, top=self.top) self._members.append(converted) # Process normal members self.process_memberdefs() title = property(lambda self: self.data()['title']) Base.mem_classes.append(DoxyGroup) class DoxyFriend(DoxyMember): __module__ = "gnuradio.utils.doxyxml" kind = 'friend' Base.mem_classes.append(DoxyFriend) class DoxyOther(Base): __module__ = "gnuradio.utils.doxyxml" kinds = set(['variable', 'struct', 'union', 'define', 'typedef', 'enum', 'dir', 'page', 'signal', 'slot', 'property']) @classmethod def can_parse(cls, obj): return obj.kind in cls.kinds Base.mem_classes.append(DoxyOther) gr-satellites-4.4.0/docs/doxygen/doxyxml/generated/000077500000000000000000000000001414055407700223545ustar00rootroot00000000000000gr-satellites-4.4.0/docs/doxygen/doxyxml/generated/__init__.py000066400000000000000000000004231414055407700244640ustar00rootroot00000000000000""" Contains generated files produced by generateDS.py. These do the real work of parsing the doxygen xml files but the resultant classes are not very friendly to navigate so the rest of the doxyxml module processes them further. """ from __future__ import unicode_literals gr-satellites-4.4.0/docs/doxygen/doxyxml/generated/compound.py000066400000000000000000000475721414055407700245710ustar00rootroot00000000000000#!/usr/bin/env python """ Generated Mon Feb 9 19:08:05 2009 by generateDS.py. """ from __future__ import absolute_import from __future__ import unicode_literals from xml.dom import minidom from xml.dom import Node import sys from . import compoundsuper as supermod from .compoundsuper import MixedContainer class DoxygenTypeSub(supermod.DoxygenType): def __init__(self, version=None, compounddef=None): supermod.DoxygenType.__init__(self, version, compounddef) def find(self, details): return self.compounddef.find(details) supermod.DoxygenType.subclass = DoxygenTypeSub # end class DoxygenTypeSub class compounddefTypeSub(supermod.compounddefType): def __init__(self, kind=None, prot=None, id=None, compoundname='', title='', basecompoundref=None, derivedcompoundref=None, includes=None, includedby=None, incdepgraph=None, invincdepgraph=None, innerdir=None, innerfile=None, innerclass=None, innernamespace=None, innerpage=None, innergroup=None, templateparamlist=None, sectiondef=None, briefdescription=None, detaileddescription=None, inheritancegraph=None, collaborationgraph=None, programlisting=None, location=None, listofallmembers=None): supermod.compounddefType.__init__(self, kind, prot, id, compoundname, title, basecompoundref, derivedcompoundref, includes, includedby, incdepgraph, invincdepgraph, innerdir, innerfile, innerclass, innernamespace, innerpage, innergroup, templateparamlist, sectiondef, briefdescription, detaileddescription, inheritancegraph, collaborationgraph, programlisting, location, listofallmembers) def find(self, details): if self.id == details.refid: return self for sectiondef in self.sectiondef: result = sectiondef.find(details) if result: return result supermod.compounddefType.subclass = compounddefTypeSub # end class compounddefTypeSub class listofallmembersTypeSub(supermod.listofallmembersType): def __init__(self, member=None): supermod.listofallmembersType.__init__(self, member) supermod.listofallmembersType.subclass = listofallmembersTypeSub # end class listofallmembersTypeSub class memberRefTypeSub(supermod.memberRefType): def __init__(self, virt=None, prot=None, refid=None, ambiguityscope=None, scope='', name=''): supermod.memberRefType.__init__(self, virt, prot, refid, ambiguityscope, scope, name) supermod.memberRefType.subclass = memberRefTypeSub # end class memberRefTypeSub class compoundRefTypeSub(supermod.compoundRefType): def __init__(self, virt=None, prot=None, refid=None, valueOf_='', mixedclass_=None, content_=None): supermod.compoundRefType.__init__(self, mixedclass_, content_) supermod.compoundRefType.subclass = compoundRefTypeSub # end class compoundRefTypeSub class reimplementTypeSub(supermod.reimplementType): def __init__(self, refid=None, valueOf_='', mixedclass_=None, content_=None): supermod.reimplementType.__init__(self, mixedclass_, content_) supermod.reimplementType.subclass = reimplementTypeSub # end class reimplementTypeSub class incTypeSub(supermod.incType): def __init__(self, local=None, refid=None, valueOf_='', mixedclass_=None, content_=None): supermod.incType.__init__(self, mixedclass_, content_) supermod.incType.subclass = incTypeSub # end class incTypeSub class refTypeSub(supermod.refType): def __init__(self, prot=None, refid=None, valueOf_='', mixedclass_=None, content_=None): supermod.refType.__init__(self, mixedclass_, content_) supermod.refType.subclass = refTypeSub # end class refTypeSub class refTextTypeSub(supermod.refTextType): def __init__(self, refid=None, kindref=None, external=None, valueOf_='', mixedclass_=None, content_=None): supermod.refTextType.__init__(self, mixedclass_, content_) supermod.refTextType.subclass = refTextTypeSub # end class refTextTypeSub class sectiondefTypeSub(supermod.sectiondefType): def __init__(self, kind=None, header='', description=None, memberdef=None): supermod.sectiondefType.__init__(self, kind, header, description, memberdef) def find(self, details): for memberdef in self.memberdef: if memberdef.id == details.refid: return memberdef return None supermod.sectiondefType.subclass = sectiondefTypeSub # end class sectiondefTypeSub class memberdefTypeSub(supermod.memberdefType): def __init__(self, initonly=None, kind=None, volatile=None, const=None, raise_=None, virt=None, readable=None, prot=None, explicit=None, new=None, final=None, writable=None, add=None, static=None, remove=None, sealed=None, mutable=None, gettable=None, inline=None, settable=None, id=None, templateparamlist=None, type_=None, definition='', argsstring='', name='', read='', write='', bitfield='', reimplements=None, reimplementedby=None, param=None, enumvalue=None, initializer=None, exceptions=None, briefdescription=None, detaileddescription=None, inbodydescription=None, location=None, references=None, referencedby=None): supermod.memberdefType.__init__(self, initonly, kind, volatile, const, raise_, virt, readable, prot, explicit, new, final, writable, add, static, remove, sealed, mutable, gettable, inline, settable, id, templateparamlist, type_, definition, argsstring, name, read, write, bitfield, reimplements, reimplementedby, param, enumvalue, initializer, exceptions, briefdescription, detaileddescription, inbodydescription, location, references, referencedby) supermod.memberdefType.subclass = memberdefTypeSub # end class memberdefTypeSub class descriptionTypeSub(supermod.descriptionType): def __init__(self, title='', para=None, sect1=None, internal=None, mixedclass_=None, content_=None): supermod.descriptionType.__init__(self, mixedclass_, content_) supermod.descriptionType.subclass = descriptionTypeSub # end class descriptionTypeSub class enumvalueTypeSub(supermod.enumvalueType): def __init__(self, prot=None, id=None, name='', initializer=None, briefdescription=None, detaileddescription=None, mixedclass_=None, content_=None): supermod.enumvalueType.__init__(self, mixedclass_, content_) supermod.enumvalueType.subclass = enumvalueTypeSub # end class enumvalueTypeSub class templateparamlistTypeSub(supermod.templateparamlistType): def __init__(self, param=None): supermod.templateparamlistType.__init__(self, param) supermod.templateparamlistType.subclass = templateparamlistTypeSub # end class templateparamlistTypeSub class paramTypeSub(supermod.paramType): def __init__(self, type_=None, declname='', defname='', array='', defval=None, briefdescription=None): supermod.paramType.__init__(self, type_, declname, defname, array, defval, briefdescription) supermod.paramType.subclass = paramTypeSub # end class paramTypeSub class linkedTextTypeSub(supermod.linkedTextType): def __init__(self, ref=None, mixedclass_=None, content_=None): supermod.linkedTextType.__init__(self, mixedclass_, content_) supermod.linkedTextType.subclass = linkedTextTypeSub # end class linkedTextTypeSub class graphTypeSub(supermod.graphType): def __init__(self, node=None): supermod.graphType.__init__(self, node) supermod.graphType.subclass = graphTypeSub # end class graphTypeSub class nodeTypeSub(supermod.nodeType): def __init__(self, id=None, label='', link=None, childnode=None): supermod.nodeType.__init__(self, id, label, link, childnode) supermod.nodeType.subclass = nodeTypeSub # end class nodeTypeSub class childnodeTypeSub(supermod.childnodeType): def __init__(self, relation=None, refid=None, edgelabel=None): supermod.childnodeType.__init__(self, relation, refid, edgelabel) supermod.childnodeType.subclass = childnodeTypeSub # end class childnodeTypeSub class linkTypeSub(supermod.linkType): def __init__(self, refid=None, external=None, valueOf_=''): supermod.linkType.__init__(self, refid, external) supermod.linkType.subclass = linkTypeSub # end class linkTypeSub class listingTypeSub(supermod.listingType): def __init__(self, codeline=None): supermod.listingType.__init__(self, codeline) supermod.listingType.subclass = listingTypeSub # end class listingTypeSub class codelineTypeSub(supermod.codelineType): def __init__(self, external=None, lineno=None, refkind=None, refid=None, highlight=None): supermod.codelineType.__init__(self, external, lineno, refkind, refid, highlight) supermod.codelineType.subclass = codelineTypeSub # end class codelineTypeSub class highlightTypeSub(supermod.highlightType): def __init__(self, class_=None, sp=None, ref=None, mixedclass_=None, content_=None): supermod.highlightType.__init__(self, mixedclass_, content_) supermod.highlightType.subclass = highlightTypeSub # end class highlightTypeSub class referenceTypeSub(supermod.referenceType): def __init__(self, endline=None, startline=None, refid=None, compoundref=None, valueOf_='', mixedclass_=None, content_=None): supermod.referenceType.__init__(self, mixedclass_, content_) supermod.referenceType.subclass = referenceTypeSub # end class referenceTypeSub class locationTypeSub(supermod.locationType): def __init__(self, bodystart=None, line=None, bodyend=None, bodyfile=None, file=None, valueOf_=''): supermod.locationType.__init__(self, bodystart, line, bodyend, bodyfile, file) supermod.locationType.subclass = locationTypeSub # end class locationTypeSub class docSect1TypeSub(supermod.docSect1Type): def __init__(self, id=None, title='', para=None, sect2=None, internal=None, mixedclass_=None, content_=None): supermod.docSect1Type.__init__(self, mixedclass_, content_) supermod.docSect1Type.subclass = docSect1TypeSub # end class docSect1TypeSub class docSect2TypeSub(supermod.docSect2Type): def __init__(self, id=None, title='', para=None, sect3=None, internal=None, mixedclass_=None, content_=None): supermod.docSect2Type.__init__(self, mixedclass_, content_) supermod.docSect2Type.subclass = docSect2TypeSub # end class docSect2TypeSub class docSect3TypeSub(supermod.docSect3Type): def __init__(self, id=None, title='', para=None, sect4=None, internal=None, mixedclass_=None, content_=None): supermod.docSect3Type.__init__(self, mixedclass_, content_) supermod.docSect3Type.subclass = docSect3TypeSub # end class docSect3TypeSub class docSect4TypeSub(supermod.docSect4Type): def __init__(self, id=None, title='', para=None, internal=None, mixedclass_=None, content_=None): supermod.docSect4Type.__init__(self, mixedclass_, content_) supermod.docSect4Type.subclass = docSect4TypeSub # end class docSect4TypeSub class docInternalTypeSub(supermod.docInternalType): def __init__(self, para=None, sect1=None, mixedclass_=None, content_=None): supermod.docInternalType.__init__(self, mixedclass_, content_) supermod.docInternalType.subclass = docInternalTypeSub # end class docInternalTypeSub class docInternalS1TypeSub(supermod.docInternalS1Type): def __init__(self, para=None, sect2=None, mixedclass_=None, content_=None): supermod.docInternalS1Type.__init__(self, mixedclass_, content_) supermod.docInternalS1Type.subclass = docInternalS1TypeSub # end class docInternalS1TypeSub class docInternalS2TypeSub(supermod.docInternalS2Type): def __init__(self, para=None, sect3=None, mixedclass_=None, content_=None): supermod.docInternalS2Type.__init__(self, mixedclass_, content_) supermod.docInternalS2Type.subclass = docInternalS2TypeSub # end class docInternalS2TypeSub class docInternalS3TypeSub(supermod.docInternalS3Type): def __init__(self, para=None, sect3=None, mixedclass_=None, content_=None): supermod.docInternalS3Type.__init__(self, mixedclass_, content_) supermod.docInternalS3Type.subclass = docInternalS3TypeSub # end class docInternalS3TypeSub class docInternalS4TypeSub(supermod.docInternalS4Type): def __init__(self, para=None, mixedclass_=None, content_=None): supermod.docInternalS4Type.__init__(self, mixedclass_, content_) supermod.docInternalS4Type.subclass = docInternalS4TypeSub # end class docInternalS4TypeSub class docURLLinkSub(supermod.docURLLink): def __init__(self, url=None, valueOf_='', mixedclass_=None, content_=None): supermod.docURLLink.__init__(self, mixedclass_, content_) supermod.docURLLink.subclass = docURLLinkSub # end class docURLLinkSub class docAnchorTypeSub(supermod.docAnchorType): def __init__(self, id=None, valueOf_='', mixedclass_=None, content_=None): supermod.docAnchorType.__init__(self, mixedclass_, content_) supermod.docAnchorType.subclass = docAnchorTypeSub # end class docAnchorTypeSub class docFormulaTypeSub(supermod.docFormulaType): def __init__(self, id=None, valueOf_='', mixedclass_=None, content_=None): supermod.docFormulaType.__init__(self, mixedclass_, content_) supermod.docFormulaType.subclass = docFormulaTypeSub # end class docFormulaTypeSub class docIndexEntryTypeSub(supermod.docIndexEntryType): def __init__(self, primaryie='', secondaryie=''): supermod.docIndexEntryType.__init__(self, primaryie, secondaryie) supermod.docIndexEntryType.subclass = docIndexEntryTypeSub # end class docIndexEntryTypeSub class docListTypeSub(supermod.docListType): def __init__(self, listitem=None): supermod.docListType.__init__(self, listitem) supermod.docListType.subclass = docListTypeSub # end class docListTypeSub class docListItemTypeSub(supermod.docListItemType): def __init__(self, para=None): supermod.docListItemType.__init__(self, para) supermod.docListItemType.subclass = docListItemTypeSub # end class docListItemTypeSub class docSimpleSectTypeSub(supermod.docSimpleSectType): def __init__(self, kind=None, title=None, para=None): supermod.docSimpleSectType.__init__(self, kind, title, para) supermod.docSimpleSectType.subclass = docSimpleSectTypeSub # end class docSimpleSectTypeSub class docVarListEntryTypeSub(supermod.docVarListEntryType): def __init__(self, term=None): supermod.docVarListEntryType.__init__(self, term) supermod.docVarListEntryType.subclass = docVarListEntryTypeSub # end class docVarListEntryTypeSub class docRefTextTypeSub(supermod.docRefTextType): def __init__(self, refid=None, kindref=None, external=None, valueOf_='', mixedclass_=None, content_=None): supermod.docRefTextType.__init__(self, mixedclass_, content_) supermod.docRefTextType.subclass = docRefTextTypeSub # end class docRefTextTypeSub class docTableTypeSub(supermod.docTableType): def __init__(self, rows=None, cols=None, row=None, caption=None): supermod.docTableType.__init__(self, rows, cols, row, caption) supermod.docTableType.subclass = docTableTypeSub # end class docTableTypeSub class docRowTypeSub(supermod.docRowType): def __init__(self, entry=None): supermod.docRowType.__init__(self, entry) supermod.docRowType.subclass = docRowTypeSub # end class docRowTypeSub class docEntryTypeSub(supermod.docEntryType): def __init__(self, thead=None, para=None): supermod.docEntryType.__init__(self, thead, para) supermod.docEntryType.subclass = docEntryTypeSub # end class docEntryTypeSub class docHeadingTypeSub(supermod.docHeadingType): def __init__(self, level=None, valueOf_='', mixedclass_=None, content_=None): supermod.docHeadingType.__init__(self, mixedclass_, content_) supermod.docHeadingType.subclass = docHeadingTypeSub # end class docHeadingTypeSub class docImageTypeSub(supermod.docImageType): def __init__(self, width=None, type_=None, name=None, height=None, valueOf_='', mixedclass_=None, content_=None): supermod.docImageType.__init__(self, mixedclass_, content_) supermod.docImageType.subclass = docImageTypeSub # end class docImageTypeSub class docDotFileTypeSub(supermod.docDotFileType): def __init__(self, name=None, valueOf_='', mixedclass_=None, content_=None): supermod.docDotFileType.__init__(self, mixedclass_, content_) supermod.docDotFileType.subclass = docDotFileTypeSub # end class docDotFileTypeSub class docTocItemTypeSub(supermod.docTocItemType): def __init__(self, id=None, valueOf_='', mixedclass_=None, content_=None): supermod.docTocItemType.__init__(self, mixedclass_, content_) supermod.docTocItemType.subclass = docTocItemTypeSub # end class docTocItemTypeSub class docTocListTypeSub(supermod.docTocListType): def __init__(self, tocitem=None): supermod.docTocListType.__init__(self, tocitem) supermod.docTocListType.subclass = docTocListTypeSub # end class docTocListTypeSub class docLanguageTypeSub(supermod.docLanguageType): def __init__(self, langid=None, para=None): supermod.docLanguageType.__init__(self, langid, para) supermod.docLanguageType.subclass = docLanguageTypeSub # end class docLanguageTypeSub class docParamListTypeSub(supermod.docParamListType): def __init__(self, kind=None, parameteritem=None): supermod.docParamListType.__init__(self, kind, parameteritem) supermod.docParamListType.subclass = docParamListTypeSub # end class docParamListTypeSub class docParamListItemSub(supermod.docParamListItem): def __init__(self, parameternamelist=None, parameterdescription=None): supermod.docParamListItem.__init__(self, parameternamelist, parameterdescription) supermod.docParamListItem.subclass = docParamListItemSub # end class docParamListItemSub class docParamNameListSub(supermod.docParamNameList): def __init__(self, parametername=None): supermod.docParamNameList.__init__(self, parametername) supermod.docParamNameList.subclass = docParamNameListSub # end class docParamNameListSub class docParamNameSub(supermod.docParamName): def __init__(self, direction=None, ref=None, mixedclass_=None, content_=None): supermod.docParamName.__init__(self, mixedclass_, content_) supermod.docParamName.subclass = docParamNameSub # end class docParamNameSub class docXRefSectTypeSub(supermod.docXRefSectType): def __init__(self, id=None, xreftitle=None, xrefdescription=None): supermod.docXRefSectType.__init__(self, id, xreftitle, xrefdescription) supermod.docXRefSectType.subclass = docXRefSectTypeSub # end class docXRefSectTypeSub class docCopyTypeSub(supermod.docCopyType): def __init__(self, link=None, para=None, sect1=None, internal=None): supermod.docCopyType.__init__(self, link, para, sect1, internal) supermod.docCopyType.subclass = docCopyTypeSub # end class docCopyTypeSub class docCharTypeSub(supermod.docCharType): def __init__(self, char=None, valueOf_=''): supermod.docCharType.__init__(self, char) supermod.docCharType.subclass = docCharTypeSub # end class docCharTypeSub class docParaTypeSub(supermod.docParaType): def __init__(self, char=None, valueOf_=''): supermod.docParaType.__init__(self, char) self.parameterlist = [] self.simplesects = [] self.content = [] def buildChildren(self, child_, nodeName_): supermod.docParaType.buildChildren(self, child_, nodeName_) if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == "ref": obj_ = supermod.docRefTextType.factory() obj_.build(child_) self.content.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'parameterlist': obj_ = supermod.docParamListType.factory() obj_.build(child_) self.parameterlist.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'simplesect': obj_ = supermod.docSimpleSectType.factory() obj_.build(child_) self.simplesects.append(obj_) supermod.docParaType.subclass = docParaTypeSub # end class docParaTypeSub def parse(inFilename): doc = minidom.parse(inFilename) rootNode = doc.documentElement rootObj = supermod.DoxygenType.factory() rootObj.build(rootNode) return rootObj gr-satellites-4.4.0/docs/doxygen/doxyxml/generated/compoundsuper.py000066400000000000000000012771451414055407700256520ustar00rootroot00000000000000#!/usr/bin/env python # # Generated Thu Jun 11 18:44:25 2009 by generateDS.py. # from __future__ import print_function from __future__ import unicode_literals import sys from xml.dom import minidom from xml.dom import Node import six # # User methods # # Calls to the methods in these classes are generated by generateDS.py. # You can replace these methods by re-implementing the following class # in a module named generatedssuper.py. try: from generatedssuper import GeneratedsSuper except ImportError as exp: class GeneratedsSuper(object): def format_string(self, input_data, input_name=''): return input_data def format_integer(self, input_data, input_name=''): return '%d' % input_data def format_float(self, input_data, input_name=''): return '%f' % input_data def format_double(self, input_data, input_name=''): return '%e' % input_data def format_boolean(self, input_data, input_name=''): return '%s' % input_data # # If you have installed IPython you can uncomment and use the following. # IPython is available from http://ipython.scipy.org/. # ## from IPython.Shell import IPShellEmbed ## args = '' ## ipshell = IPShellEmbed(args, ## banner = 'Dropping into IPython', ## exit_msg = 'Leaving Interpreter, back to program.') # Then use the following line where and when you want to drop into the # IPython shell: # ipshell(' -- Entering ipshell.\nHit Ctrl-D to exit') # # Globals # ExternalEncoding = 'ascii' # # Support/utility functions. # def showIndent(outfile, level): for idx in range(level): outfile.write(' ') def quote_xml(inStr): s1 = (isinstance(inStr, six.string_types) and inStr or '%s' % inStr) s1 = s1.replace('&', '&') s1 = s1.replace('<', '<') s1 = s1.replace('>', '>') return s1 def quote_attrib(inStr): s1 = (isinstance(inStr, six.string_types) and inStr or '%s' % inStr) s1 = s1.replace('&', '&') s1 = s1.replace('<', '<') s1 = s1.replace('>', '>') if '"' in s1: if "'" in s1: s1 = '"%s"' % s1.replace('"', """) else: s1 = "'%s'" % s1 else: s1 = '"%s"' % s1 return s1 def quote_python(inStr): s1 = inStr if s1.find("'") == -1: if s1.find('\n') == -1: return "'%s'" % s1 else: return "'''%s'''" % s1 else: if s1.find('"') != -1: s1 = s1.replace('"', '\\"') if s1.find('\n') == -1: return '"%s"' % s1 else: return '"""%s"""' % s1 class MixedContainer(object): # Constants for category: CategoryNone = 0 CategoryText = 1 CategorySimple = 2 CategoryComplex = 3 # Constants for content_type: TypeNone = 0 TypeText = 1 TypeString = 2 TypeInteger = 3 TypeFloat = 4 TypeDecimal = 5 TypeDouble = 6 TypeBoolean = 7 def __init__(self, category, content_type, name, value): self.category = category self.content_type = content_type self.name = name self.value = value def getCategory(self): return self.category def getContenttype(self, content_type): return self.content_type def getValue(self): return self.value def getName(self): return self.name def export(self, outfile, level, name, namespace): if self.category == MixedContainer.CategoryText: outfile.write(self.value) elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex self.value.export(outfile, level, namespace,name) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s' % (self.name, self.value, self.name)) elif self.content_type == MixedContainer.TypeInteger or \ self.content_type == MixedContainer.TypeBoolean: outfile.write('<%s>%d' % (self.name, self.value, self.name)) elif self.content_type == MixedContainer.TypeFloat or \ self.content_type == MixedContainer.TypeDecimal: outfile.write('<%s>%f' % (self.name, self.value, self.name)) elif self.content_type == MixedContainer.TypeDouble: outfile.write('<%s>%g' % (self.name, self.value, self.name)) def exportLiteral(self, outfile, level, name): if self.category == MixedContainer.CategoryText: showIndent(outfile, level) outfile.write('MixedContainer(%d, %d, "%s", "%s"),\n' % \ (self.category, self.content_type, self.name, self.value)) elif self.category == MixedContainer.CategorySimple: showIndent(outfile, level) outfile.write('MixedContainer(%d, %d, "%s", "%s"),\n' % \ (self.category, self.content_type, self.name, self.value)) else: # category == MixedContainer.CategoryComplex showIndent(outfile, level) outfile.write('MixedContainer(%d, %d, "%s",\n' % \ (self.category, self.content_type, self.name,)) self.value.exportLiteral(outfile, level + 1) showIndent(outfile, level) outfile.write(')\n') class _MemberSpec(object): def __init__(self, name='', data_type='', container=0): self.name = name self.data_type = data_type self.container = container def set_name(self, name): self.name = name def get_name(self): return self.name def set_data_type(self, data_type): self.data_type = data_type def get_data_type(self): return self.data_type def set_container(self, container): self.container = container def get_container(self): return self.container # # Data representation classes. # class DoxygenType(GeneratedsSuper): subclass = None superclass = None def __init__(self, version=None, compounddef=None): self.version = version self.compounddef = compounddef def factory(*args_, **kwargs_): if DoxygenType.subclass: return DoxygenType.subclass(*args_, **kwargs_) else: return DoxygenType(*args_, **kwargs_) factory = staticmethod(factory) def get_compounddef(self): return self.compounddef def set_compounddef(self, compounddef): self.compounddef = compounddef def get_version(self): return self.version def set_version(self, version): self.version = version def export(self, outfile, level, namespace_='', name_='DoxygenType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='DoxygenType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='DoxygenType'): outfile.write(' version=%s' % (quote_attrib(self.version), )) def exportChildren(self, outfile, level, namespace_='', name_='DoxygenType'): if self.compounddef: self.compounddef.export(outfile, level, namespace_, name_='compounddef') def hasContent_(self): if ( self.compounddef is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='DoxygenType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.version is not None: showIndent(outfile, level) outfile.write('version = "%s",\n' % (self.version,)) def exportLiteralChildren(self, outfile, level, name_): if self.compounddef: showIndent(outfile, level) outfile.write('compounddef=model_.compounddefType(\n') self.compounddef.exportLiteral(outfile, level, name_='compounddef') showIndent(outfile, level) outfile.write('),\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('version'): self.version = attrs.get('version').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'compounddef': obj_ = compounddefType.factory() obj_.build(child_) self.set_compounddef(obj_) # end class DoxygenType class compounddefType(GeneratedsSuper): subclass = None superclass = None def __init__(self, kind=None, prot=None, id=None, compoundname=None, title=None, basecompoundref=None, derivedcompoundref=None, includes=None, includedby=None, incdepgraph=None, invincdepgraph=None, innerdir=None, innerfile=None, innerclass=None, innernamespace=None, innerpage=None, innergroup=None, templateparamlist=None, sectiondef=None, briefdescription=None, detaileddescription=None, inheritancegraph=None, collaborationgraph=None, programlisting=None, location=None, listofallmembers=None): self.kind = kind self.prot = prot self.id = id self.compoundname = compoundname self.title = title if basecompoundref is None: self.basecompoundref = [] else: self.basecompoundref = basecompoundref if derivedcompoundref is None: self.derivedcompoundref = [] else: self.derivedcompoundref = derivedcompoundref if includes is None: self.includes = [] else: self.includes = includes if includedby is None: self.includedby = [] else: self.includedby = includedby self.incdepgraph = incdepgraph self.invincdepgraph = invincdepgraph if innerdir is None: self.innerdir = [] else: self.innerdir = innerdir if innerfile is None: self.innerfile = [] else: self.innerfile = innerfile if innerclass is None: self.innerclass = [] else: self.innerclass = innerclass if innernamespace is None: self.innernamespace = [] else: self.innernamespace = innernamespace if innerpage is None: self.innerpage = [] else: self.innerpage = innerpage if innergroup is None: self.innergroup = [] else: self.innergroup = innergroup self.templateparamlist = templateparamlist if sectiondef is None: self.sectiondef = [] else: self.sectiondef = sectiondef self.briefdescription = briefdescription self.detaileddescription = detaileddescription self.inheritancegraph = inheritancegraph self.collaborationgraph = collaborationgraph self.programlisting = programlisting self.location = location self.listofallmembers = listofallmembers def factory(*args_, **kwargs_): if compounddefType.subclass: return compounddefType.subclass(*args_, **kwargs_) else: return compounddefType(*args_, **kwargs_) factory = staticmethod(factory) def get_compoundname(self): return self.compoundname def set_compoundname(self, compoundname): self.compoundname = compoundname def get_title(self): return self.title def set_title(self, title): self.title = title def get_basecompoundref(self): return self.basecompoundref def set_basecompoundref(self, basecompoundref): self.basecompoundref = basecompoundref def add_basecompoundref(self, value): self.basecompoundref.append(value) def insert_basecompoundref(self, index, value): self.basecompoundref[index] = value def get_derivedcompoundref(self): return self.derivedcompoundref def set_derivedcompoundref(self, derivedcompoundref): self.derivedcompoundref = derivedcompoundref def add_derivedcompoundref(self, value): self.derivedcompoundref.append(value) def insert_derivedcompoundref(self, index, value): self.derivedcompoundref[index] = value def get_includes(self): return self.includes def set_includes(self, includes): self.includes = includes def add_includes(self, value): self.includes.append(value) def insert_includes(self, index, value): self.includes[index] = value def get_includedby(self): return self.includedby def set_includedby(self, includedby): self.includedby = includedby def add_includedby(self, value): self.includedby.append(value) def insert_includedby(self, index, value): self.includedby[index] = value def get_incdepgraph(self): return self.incdepgraph def set_incdepgraph(self, incdepgraph): self.incdepgraph = incdepgraph def get_invincdepgraph(self): return self.invincdepgraph def set_invincdepgraph(self, invincdepgraph): self.invincdepgraph = invincdepgraph def get_innerdir(self): return self.innerdir def set_innerdir(self, innerdir): self.innerdir = innerdir def add_innerdir(self, value): self.innerdir.append(value) def insert_innerdir(self, index, value): self.innerdir[index] = value def get_innerfile(self): return self.innerfile def set_innerfile(self, innerfile): self.innerfile = innerfile def add_innerfile(self, value): self.innerfile.append(value) def insert_innerfile(self, index, value): self.innerfile[index] = value def get_innerclass(self): return self.innerclass def set_innerclass(self, innerclass): self.innerclass = innerclass def add_innerclass(self, value): self.innerclass.append(value) def insert_innerclass(self, index, value): self.innerclass[index] = value def get_innernamespace(self): return self.innernamespace def set_innernamespace(self, innernamespace): self.innernamespace = innernamespace def add_innernamespace(self, value): self.innernamespace.append(value) def insert_innernamespace(self, index, value): self.innernamespace[index] = value def get_innerpage(self): return self.innerpage def set_innerpage(self, innerpage): self.innerpage = innerpage def add_innerpage(self, value): self.innerpage.append(value) def insert_innerpage(self, index, value): self.innerpage[index] = value def get_innergroup(self): return self.innergroup def set_innergroup(self, innergroup): self.innergroup = innergroup def add_innergroup(self, value): self.innergroup.append(value) def insert_innergroup(self, index, value): self.innergroup[index] = value def get_templateparamlist(self): return self.templateparamlist def set_templateparamlist(self, templateparamlist): self.templateparamlist = templateparamlist def get_sectiondef(self): return self.sectiondef def set_sectiondef(self, sectiondef): self.sectiondef = sectiondef def add_sectiondef(self, value): self.sectiondef.append(value) def insert_sectiondef(self, index, value): self.sectiondef[index] = value def get_briefdescription(self): return self.briefdescription def set_briefdescription(self, briefdescription): self.briefdescription = briefdescription def get_detaileddescription(self): return self.detaileddescription def set_detaileddescription(self, detaileddescription): self.detaileddescription = detaileddescription def get_inheritancegraph(self): return self.inheritancegraph def set_inheritancegraph(self, inheritancegraph): self.inheritancegraph = inheritancegraph def get_collaborationgraph(self): return self.collaborationgraph def set_collaborationgraph(self, collaborationgraph): self.collaborationgraph = collaborationgraph def get_programlisting(self): return self.programlisting def set_programlisting(self, programlisting): self.programlisting = programlisting def get_location(self): return self.location def set_location(self, location): self.location = location def get_listofallmembers(self): return self.listofallmembers def set_listofallmembers(self, listofallmembers): self.listofallmembers = listofallmembers def get_kind(self): return self.kind def set_kind(self, kind): self.kind = kind def get_prot(self): return self.prot def set_prot(self, prot): self.prot = prot def get_id(self): return self.id def set_id(self, id): self.id = id def export(self, outfile, level, namespace_='', name_='compounddefType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='compounddefType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='compounddefType'): if self.kind is not None: outfile.write(' kind=%s' % (quote_attrib(self.kind), )) if self.prot is not None: outfile.write(' prot=%s' % (quote_attrib(self.prot), )) if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='compounddefType'): if self.compoundname is not None: showIndent(outfile, level) outfile.write('<%scompoundname>%s\n' % (namespace_, self.format_string(quote_xml(self.compoundname).encode(ExternalEncoding), input_name='compoundname'), namespace_)) if self.title is not None: showIndent(outfile, level) outfile.write('<%stitle>%s\n' % (namespace_, self.format_string(quote_xml(self.title).encode(ExternalEncoding), input_name='title'), namespace_)) for basecompoundref_ in self.basecompoundref: basecompoundref_.export(outfile, level, namespace_, name_='basecompoundref') for derivedcompoundref_ in self.derivedcompoundref: derivedcompoundref_.export(outfile, level, namespace_, name_='derivedcompoundref') for includes_ in self.includes: includes_.export(outfile, level, namespace_, name_='includes') for includedby_ in self.includedby: includedby_.export(outfile, level, namespace_, name_='includedby') if self.incdepgraph: self.incdepgraph.export(outfile, level, namespace_, name_='incdepgraph') if self.invincdepgraph: self.invincdepgraph.export(outfile, level, namespace_, name_='invincdepgraph') for innerdir_ in self.innerdir: innerdir_.export(outfile, level, namespace_, name_='innerdir') for innerfile_ in self.innerfile: innerfile_.export(outfile, level, namespace_, name_='innerfile') for innerclass_ in self.innerclass: innerclass_.export(outfile, level, namespace_, name_='innerclass') for innernamespace_ in self.innernamespace: innernamespace_.export(outfile, level, namespace_, name_='innernamespace') for innerpage_ in self.innerpage: innerpage_.export(outfile, level, namespace_, name_='innerpage') for innergroup_ in self.innergroup: innergroup_.export(outfile, level, namespace_, name_='innergroup') if self.templateparamlist: self.templateparamlist.export(outfile, level, namespace_, name_='templateparamlist') for sectiondef_ in self.sectiondef: sectiondef_.export(outfile, level, namespace_, name_='sectiondef') if self.briefdescription: self.briefdescription.export(outfile, level, namespace_, name_='briefdescription') if self.detaileddescription: self.detaileddescription.export(outfile, level, namespace_, name_='detaileddescription') if self.inheritancegraph: self.inheritancegraph.export(outfile, level, namespace_, name_='inheritancegraph') if self.collaborationgraph: self.collaborationgraph.export(outfile, level, namespace_, name_='collaborationgraph') if self.programlisting: self.programlisting.export(outfile, level, namespace_, name_='programlisting') if self.location: self.location.export(outfile, level, namespace_, name_='location') if self.listofallmembers: self.listofallmembers.export(outfile, level, namespace_, name_='listofallmembers') def hasContent_(self): if ( self.compoundname is not None or self.title is not None or self.basecompoundref is not None or self.derivedcompoundref is not None or self.includes is not None or self.includedby is not None or self.incdepgraph is not None or self.invincdepgraph is not None or self.innerdir is not None or self.innerfile is not None or self.innerclass is not None or self.innernamespace is not None or self.innerpage is not None or self.innergroup is not None or self.templateparamlist is not None or self.sectiondef is not None or self.briefdescription is not None or self.detaileddescription is not None or self.inheritancegraph is not None or self.collaborationgraph is not None or self.programlisting is not None or self.location is not None or self.listofallmembers is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='compounddefType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.kind is not None: showIndent(outfile, level) outfile.write('kind = "%s",\n' % (self.kind,)) if self.prot is not None: showIndent(outfile, level) outfile.write('prot = "%s",\n' % (self.prot,)) if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('compoundname=%s,\n' % quote_python(self.compoundname).encode(ExternalEncoding)) if self.title: showIndent(outfile, level) outfile.write('title=model_.xsd_string(\n') self.title.exportLiteral(outfile, level, name_='title') showIndent(outfile, level) outfile.write('),\n') showIndent(outfile, level) outfile.write('basecompoundref=[\n') level += 1 for basecompoundref in self.basecompoundref: showIndent(outfile, level) outfile.write('model_.basecompoundref(\n') basecompoundref.exportLiteral(outfile, level, name_='basecompoundref') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('derivedcompoundref=[\n') level += 1 for derivedcompoundref in self.derivedcompoundref: showIndent(outfile, level) outfile.write('model_.derivedcompoundref(\n') derivedcompoundref.exportLiteral(outfile, level, name_='derivedcompoundref') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('includes=[\n') level += 1 for includes in self.includes: showIndent(outfile, level) outfile.write('model_.includes(\n') includes.exportLiteral(outfile, level, name_='includes') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('includedby=[\n') level += 1 for includedby in self.includedby: showIndent(outfile, level) outfile.write('model_.includedby(\n') includedby.exportLiteral(outfile, level, name_='includedby') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') if self.incdepgraph: showIndent(outfile, level) outfile.write('incdepgraph=model_.graphType(\n') self.incdepgraph.exportLiteral(outfile, level, name_='incdepgraph') showIndent(outfile, level) outfile.write('),\n') if self.invincdepgraph: showIndent(outfile, level) outfile.write('invincdepgraph=model_.graphType(\n') self.invincdepgraph.exportLiteral(outfile, level, name_='invincdepgraph') showIndent(outfile, level) outfile.write('),\n') showIndent(outfile, level) outfile.write('innerdir=[\n') level += 1 for innerdir in self.innerdir: showIndent(outfile, level) outfile.write('model_.innerdir(\n') innerdir.exportLiteral(outfile, level, name_='innerdir') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('innerfile=[\n') level += 1 for innerfile in self.innerfile: showIndent(outfile, level) outfile.write('model_.innerfile(\n') innerfile.exportLiteral(outfile, level, name_='innerfile') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('innerclass=[\n') level += 1 for innerclass in self.innerclass: showIndent(outfile, level) outfile.write('model_.innerclass(\n') innerclass.exportLiteral(outfile, level, name_='innerclass') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('innernamespace=[\n') level += 1 for innernamespace in self.innernamespace: showIndent(outfile, level) outfile.write('model_.innernamespace(\n') innernamespace.exportLiteral(outfile, level, name_='innernamespace') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('innerpage=[\n') level += 1 for innerpage in self.innerpage: showIndent(outfile, level) outfile.write('model_.innerpage(\n') innerpage.exportLiteral(outfile, level, name_='innerpage') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('innergroup=[\n') level += 1 for innergroup in self.innergroup: showIndent(outfile, level) outfile.write('model_.innergroup(\n') innergroup.exportLiteral(outfile, level, name_='innergroup') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') if self.templateparamlist: showIndent(outfile, level) outfile.write('templateparamlist=model_.templateparamlistType(\n') self.templateparamlist.exportLiteral(outfile, level, name_='templateparamlist') showIndent(outfile, level) outfile.write('),\n') showIndent(outfile, level) outfile.write('sectiondef=[\n') level += 1 for sectiondef in self.sectiondef: showIndent(outfile, level) outfile.write('model_.sectiondef(\n') sectiondef.exportLiteral(outfile, level, name_='sectiondef') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') if self.briefdescription: showIndent(outfile, level) outfile.write('briefdescription=model_.descriptionType(\n') self.briefdescription.exportLiteral(outfile, level, name_='briefdescription') showIndent(outfile, level) outfile.write('),\n') if self.detaileddescription: showIndent(outfile, level) outfile.write('detaileddescription=model_.descriptionType(\n') self.detaileddescription.exportLiteral(outfile, level, name_='detaileddescription') showIndent(outfile, level) outfile.write('),\n') if self.inheritancegraph: showIndent(outfile, level) outfile.write('inheritancegraph=model_.graphType(\n') self.inheritancegraph.exportLiteral(outfile, level, name_='inheritancegraph') showIndent(outfile, level) outfile.write('),\n') if self.collaborationgraph: showIndent(outfile, level) outfile.write('collaborationgraph=model_.graphType(\n') self.collaborationgraph.exportLiteral(outfile, level, name_='collaborationgraph') showIndent(outfile, level) outfile.write('),\n') if self.programlisting: showIndent(outfile, level) outfile.write('programlisting=model_.listingType(\n') self.programlisting.exportLiteral(outfile, level, name_='programlisting') showIndent(outfile, level) outfile.write('),\n') if self.location: showIndent(outfile, level) outfile.write('location=model_.locationType(\n') self.location.exportLiteral(outfile, level, name_='location') showIndent(outfile, level) outfile.write('),\n') if self.listofallmembers: showIndent(outfile, level) outfile.write('listofallmembers=model_.listofallmembersType(\n') self.listofallmembers.exportLiteral(outfile, level, name_='listofallmembers') showIndent(outfile, level) outfile.write('),\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('kind'): self.kind = attrs.get('kind').value if attrs.get('prot'): self.prot = attrs.get('prot').value if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'compoundname': compoundname_ = '' for text__content_ in child_.childNodes: compoundname_ += text__content_.nodeValue self.compoundname = compoundname_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'title': obj_ = docTitleType.factory() obj_.build(child_) self.set_title(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'basecompoundref': obj_ = compoundRefType.factory() obj_.build(child_) self.basecompoundref.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'derivedcompoundref': obj_ = compoundRefType.factory() obj_.build(child_) self.derivedcompoundref.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'includes': obj_ = incType.factory() obj_.build(child_) self.includes.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'includedby': obj_ = incType.factory() obj_.build(child_) self.includedby.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'incdepgraph': obj_ = graphType.factory() obj_.build(child_) self.set_incdepgraph(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'invincdepgraph': obj_ = graphType.factory() obj_.build(child_) self.set_invincdepgraph(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'innerdir': obj_ = refType.factory() obj_.build(child_) self.innerdir.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'innerfile': obj_ = refType.factory() obj_.build(child_) self.innerfile.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'innerclass': obj_ = refType.factory() obj_.build(child_) self.innerclass.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'innernamespace': obj_ = refType.factory() obj_.build(child_) self.innernamespace.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'innerpage': obj_ = refType.factory() obj_.build(child_) self.innerpage.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'innergroup': obj_ = refType.factory() obj_.build(child_) self.innergroup.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'templateparamlist': obj_ = templateparamlistType.factory() obj_.build(child_) self.set_templateparamlist(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'sectiondef': obj_ = sectiondefType.factory() obj_.build(child_) self.sectiondef.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'briefdescription': obj_ = descriptionType.factory() obj_.build(child_) self.set_briefdescription(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'detaileddescription': obj_ = descriptionType.factory() obj_.build(child_) self.set_detaileddescription(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'inheritancegraph': obj_ = graphType.factory() obj_.build(child_) self.set_inheritancegraph(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'collaborationgraph': obj_ = graphType.factory() obj_.build(child_) self.set_collaborationgraph(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'programlisting': obj_ = listingType.factory() obj_.build(child_) self.set_programlisting(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'location': obj_ = locationType.factory() obj_.build(child_) self.set_location(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'listofallmembers': obj_ = listofallmembersType.factory() obj_.build(child_) self.set_listofallmembers(obj_) # end class compounddefType class listofallmembersType(GeneratedsSuper): subclass = None superclass = None def __init__(self, member=None): if member is None: self.member = [] else: self.member = member def factory(*args_, **kwargs_): if listofallmembersType.subclass: return listofallmembersType.subclass(*args_, **kwargs_) else: return listofallmembersType(*args_, **kwargs_) factory = staticmethod(factory) def get_member(self): return self.member def set_member(self, member): self.member = member def add_member(self, value): self.member.append(value) def insert_member(self, index, value): self.member[index] = value def export(self, outfile, level, namespace_='', name_='listofallmembersType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='listofallmembersType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='listofallmembersType'): pass def exportChildren(self, outfile, level, namespace_='', name_='listofallmembersType'): for member_ in self.member: member_.export(outfile, level, namespace_, name_='member') def hasContent_(self): if ( self.member is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='listofallmembersType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('member=[\n') level += 1 for member in self.member: showIndent(outfile, level) outfile.write('model_.member(\n') member.exportLiteral(outfile, level, name_='member') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'member': obj_ = memberRefType.factory() obj_.build(child_) self.member.append(obj_) # end class listofallmembersType class memberRefType(GeneratedsSuper): subclass = None superclass = None def __init__(self, virt=None, prot=None, refid=None, ambiguityscope=None, scope=None, name=None): self.virt = virt self.prot = prot self.refid = refid self.ambiguityscope = ambiguityscope self.scope = scope self.name = name def factory(*args_, **kwargs_): if memberRefType.subclass: return memberRefType.subclass(*args_, **kwargs_) else: return memberRefType(*args_, **kwargs_) factory = staticmethod(factory) def get_scope(self): return self.scope def set_scope(self, scope): self.scope = scope def get_name(self): return self.name def set_name(self, name): self.name = name def get_virt(self): return self.virt def set_virt(self, virt): self.virt = virt def get_prot(self): return self.prot def set_prot(self, prot): self.prot = prot def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def get_ambiguityscope(self): return self.ambiguityscope def set_ambiguityscope(self, ambiguityscope): self.ambiguityscope = ambiguityscope def export(self, outfile, level, namespace_='', name_='memberRefType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='memberRefType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='memberRefType'): if self.virt is not None: outfile.write(' virt=%s' % (quote_attrib(self.virt), )) if self.prot is not None: outfile.write(' prot=%s' % (quote_attrib(self.prot), )) if self.refid is not None: outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) if self.ambiguityscope is not None: outfile.write(' ambiguityscope=%s' % (self.format_string(quote_attrib(self.ambiguityscope).encode(ExternalEncoding), input_name='ambiguityscope'), )) def exportChildren(self, outfile, level, namespace_='', name_='memberRefType'): if self.scope is not None: showIndent(outfile, level) outfile.write('<%sscope>%s\n' % (namespace_, self.format_string(quote_xml(self.scope).encode(ExternalEncoding), input_name='scope'), namespace_)) if self.name is not None: showIndent(outfile, level) outfile.write('<%sname>%s\n' % (namespace_, self.format_string(quote_xml(self.name).encode(ExternalEncoding), input_name='name'), namespace_)) def hasContent_(self): if ( self.scope is not None or self.name is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='memberRefType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.virt is not None: showIndent(outfile, level) outfile.write('virt = "%s",\n' % (self.virt,)) if self.prot is not None: showIndent(outfile, level) outfile.write('prot = "%s",\n' % (self.prot,)) if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) if self.ambiguityscope is not None: showIndent(outfile, level) outfile.write('ambiguityscope = %s,\n' % (self.ambiguityscope,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('scope=%s,\n' % quote_python(self.scope).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('name=%s,\n' % quote_python(self.name).encode(ExternalEncoding)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('virt'): self.virt = attrs.get('virt').value if attrs.get('prot'): self.prot = attrs.get('prot').value if attrs.get('refid'): self.refid = attrs.get('refid').value if attrs.get('ambiguityscope'): self.ambiguityscope = attrs.get('ambiguityscope').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'scope': scope_ = '' for text__content_ in child_.childNodes: scope_ += text__content_.nodeValue self.scope = scope_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'name': name_ = '' for text__content_ in child_.childNodes: name_ += text__content_.nodeValue self.name = name_ # end class memberRefType class scope(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if scope.subclass: return scope.subclass(*args_, **kwargs_) else: return scope(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='scope', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='scope') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='scope'): pass def exportChildren(self, outfile, level, namespace_='', name_='scope'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='scope'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class scope class name(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if name.subclass: return name.subclass(*args_, **kwargs_) else: return name(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='name', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='name') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='name'): pass def exportChildren(self, outfile, level, namespace_='', name_='name'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='name'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class name class compoundRefType(GeneratedsSuper): subclass = None superclass = None def __init__(self, virt=None, prot=None, refid=None, valueOf_='', mixedclass_=None, content_=None): self.virt = virt self.prot = prot self.refid = refid if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if compoundRefType.subclass: return compoundRefType.subclass(*args_, **kwargs_) else: return compoundRefType(*args_, **kwargs_) factory = staticmethod(factory) def get_virt(self): return self.virt def set_virt(self, virt): self.virt = virt def get_prot(self): return self.prot def set_prot(self, prot): self.prot = prot def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='compoundRefType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='compoundRefType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='compoundRefType'): if self.virt is not None: outfile.write(' virt=%s' % (quote_attrib(self.virt), )) if self.prot is not None: outfile.write(' prot=%s' % (quote_attrib(self.prot), )) if self.refid is not None: outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) def exportChildren(self, outfile, level, namespace_='', name_='compoundRefType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='compoundRefType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.virt is not None: showIndent(outfile, level) outfile.write('virt = "%s",\n' % (self.virt,)) if self.prot is not None: showIndent(outfile, level) outfile.write('prot = "%s",\n' % (self.prot,)) if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('virt'): self.virt = attrs.get('virt').value if attrs.get('prot'): self.prot = attrs.get('prot').value if attrs.get('refid'): self.refid = attrs.get('refid').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class compoundRefType class reimplementType(GeneratedsSuper): subclass = None superclass = None def __init__(self, refid=None, valueOf_='', mixedclass_=None, content_=None): self.refid = refid if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if reimplementType.subclass: return reimplementType.subclass(*args_, **kwargs_) else: return reimplementType(*args_, **kwargs_) factory = staticmethod(factory) def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='reimplementType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='reimplementType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='reimplementType'): if self.refid is not None: outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) def exportChildren(self, outfile, level, namespace_='', name_='reimplementType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='reimplementType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('refid'): self.refid = attrs.get('refid').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class reimplementType class incType(GeneratedsSuper): subclass = None superclass = None def __init__(self, local=None, refid=None, valueOf_='', mixedclass_=None, content_=None): self.local = local self.refid = refid if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if incType.subclass: return incType.subclass(*args_, **kwargs_) else: return incType(*args_, **kwargs_) factory = staticmethod(factory) def get_local(self): return self.local def set_local(self, local): self.local = local def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='incType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='incType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='incType'): if self.local is not None: outfile.write(' local=%s' % (quote_attrib(self.local), )) if self.refid is not None: outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) def exportChildren(self, outfile, level, namespace_='', name_='incType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='incType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.local is not None: showIndent(outfile, level) outfile.write('local = "%s",\n' % (self.local,)) if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('local'): self.local = attrs.get('local').value if attrs.get('refid'): self.refid = attrs.get('refid').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class incType class refType(GeneratedsSuper): subclass = None superclass = None def __init__(self, prot=None, refid=None, valueOf_='', mixedclass_=None, content_=None): self.prot = prot self.refid = refid if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if refType.subclass: return refType.subclass(*args_, **kwargs_) else: return refType(*args_, **kwargs_) factory = staticmethod(factory) def get_prot(self): return self.prot def set_prot(self, prot): self.prot = prot def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='refType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='refType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='refType'): if self.prot is not None: outfile.write(' prot=%s' % (quote_attrib(self.prot), )) if self.refid is not None: outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) def exportChildren(self, outfile, level, namespace_='', name_='refType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='refType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.prot is not None: showIndent(outfile, level) outfile.write('prot = "%s",\n' % (self.prot,)) if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('prot'): self.prot = attrs.get('prot').value if attrs.get('refid'): self.refid = attrs.get('refid').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class refType class refTextType(GeneratedsSuper): subclass = None superclass = None def __init__(self, refid=None, kindref=None, external=None, valueOf_='', mixedclass_=None, content_=None): self.refid = refid self.kindref = kindref self.external = external if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if refTextType.subclass: return refTextType.subclass(*args_, **kwargs_) else: return refTextType(*args_, **kwargs_) factory = staticmethod(factory) def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def get_kindref(self): return self.kindref def set_kindref(self, kindref): self.kindref = kindref def get_external(self): return self.external def set_external(self, external): self.external = external def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='refTextType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='refTextType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='refTextType'): if self.refid is not None: outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) if self.kindref is not None: outfile.write(' kindref=%s' % (quote_attrib(self.kindref), )) if self.external is not None: outfile.write(' external=%s' % (self.format_string(quote_attrib(self.external).encode(ExternalEncoding), input_name='external'), )) def exportChildren(self, outfile, level, namespace_='', name_='refTextType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='refTextType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) if self.kindref is not None: showIndent(outfile, level) outfile.write('kindref = "%s",\n' % (self.kindref,)) if self.external is not None: showIndent(outfile, level) outfile.write('external = %s,\n' % (self.external,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('refid'): self.refid = attrs.get('refid').value if attrs.get('kindref'): self.kindref = attrs.get('kindref').value if attrs.get('external'): self.external = attrs.get('external').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class refTextType class sectiondefType(GeneratedsSuper): subclass = None superclass = None def __init__(self, kind=None, header=None, description=None, memberdef=None): self.kind = kind self.header = header self.description = description if memberdef is None: self.memberdef = [] else: self.memberdef = memberdef def factory(*args_, **kwargs_): if sectiondefType.subclass: return sectiondefType.subclass(*args_, **kwargs_) else: return sectiondefType(*args_, **kwargs_) factory = staticmethod(factory) def get_header(self): return self.header def set_header(self, header): self.header = header def get_description(self): return self.description def set_description(self, description): self.description = description def get_memberdef(self): return self.memberdef def set_memberdef(self, memberdef): self.memberdef = memberdef def add_memberdef(self, value): self.memberdef.append(value) def insert_memberdef(self, index, value): self.memberdef[index] = value def get_kind(self): return self.kind def set_kind(self, kind): self.kind = kind def export(self, outfile, level, namespace_='', name_='sectiondefType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='sectiondefType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='sectiondefType'): if self.kind is not None: outfile.write(' kind=%s' % (quote_attrib(self.kind), )) def exportChildren(self, outfile, level, namespace_='', name_='sectiondefType'): if self.header is not None: showIndent(outfile, level) outfile.write('<%sheader>%s\n' % (namespace_, self.format_string(quote_xml(self.header).encode(ExternalEncoding), input_name='header'), namespace_)) if self.description: self.description.export(outfile, level, namespace_, name_='description') for memberdef_ in self.memberdef: memberdef_.export(outfile, level, namespace_, name_='memberdef') def hasContent_(self): if ( self.header is not None or self.description is not None or self.memberdef is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='sectiondefType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.kind is not None: showIndent(outfile, level) outfile.write('kind = "%s",\n' % (self.kind,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('header=%s,\n' % quote_python(self.header).encode(ExternalEncoding)) if self.description: showIndent(outfile, level) outfile.write('description=model_.descriptionType(\n') self.description.exportLiteral(outfile, level, name_='description') showIndent(outfile, level) outfile.write('),\n') showIndent(outfile, level) outfile.write('memberdef=[\n') level += 1 for memberdef in self.memberdef: showIndent(outfile, level) outfile.write('model_.memberdef(\n') memberdef.exportLiteral(outfile, level, name_='memberdef') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('kind'): self.kind = attrs.get('kind').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'header': header_ = '' for text__content_ in child_.childNodes: header_ += text__content_.nodeValue self.header = header_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'description': obj_ = descriptionType.factory() obj_.build(child_) self.set_description(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'memberdef': obj_ = memberdefType.factory() obj_.build(child_) self.memberdef.append(obj_) # end class sectiondefType class memberdefType(GeneratedsSuper): subclass = None superclass = None def __init__(self, initonly=None, kind=None, volatile=None, const=None, raisexx=None, virt=None, readable=None, prot=None, explicit=None, new=None, final=None, writable=None, add=None, static=None, remove=None, sealed=None, mutable=None, gettable=None, inline=None, settable=None, id=None, templateparamlist=None, type_=None, definition=None, argsstring=None, name=None, read=None, write=None, bitfield=None, reimplements=None, reimplementedby=None, param=None, enumvalue=None, initializer=None, exceptions=None, briefdescription=None, detaileddescription=None, inbodydescription=None, location=None, references=None, referencedby=None): self.initonly = initonly self.kind = kind self.volatile = volatile self.const = const self.raisexx = raisexx self.virt = virt self.readable = readable self.prot = prot self.explicit = explicit self.new = new self.final = final self.writable = writable self.add = add self.static = static self.remove = remove self.sealed = sealed self.mutable = mutable self.gettable = gettable self.inline = inline self.settable = settable self.id = id self.templateparamlist = templateparamlist self.type_ = type_ self.definition = definition self.argsstring = argsstring self.name = name self.read = read self.write = write self.bitfield = bitfield if reimplements is None: self.reimplements = [] else: self.reimplements = reimplements if reimplementedby is None: self.reimplementedby = [] else: self.reimplementedby = reimplementedby if param is None: self.param = [] else: self.param = param if enumvalue is None: self.enumvalue = [] else: self.enumvalue = enumvalue self.initializer = initializer self.exceptions = exceptions self.briefdescription = briefdescription self.detaileddescription = detaileddescription self.inbodydescription = inbodydescription self.location = location if references is None: self.references = [] else: self.references = references if referencedby is None: self.referencedby = [] else: self.referencedby = referencedby def factory(*args_, **kwargs_): if memberdefType.subclass: return memberdefType.subclass(*args_, **kwargs_) else: return memberdefType(*args_, **kwargs_) factory = staticmethod(factory) def get_templateparamlist(self): return self.templateparamlist def set_templateparamlist(self, templateparamlist): self.templateparamlist = templateparamlist def get_type(self): return self.type_ def set_type(self, type_): self.type_ = type_ def get_definition(self): return self.definition def set_definition(self, definition): self.definition = definition def get_argsstring(self): return self.argsstring def set_argsstring(self, argsstring): self.argsstring = argsstring def get_name(self): return self.name def set_name(self, name): self.name = name def get_read(self): return self.read def set_read(self, read): self.read = read def get_write(self): return self.write def set_write(self, write): self.write = write def get_bitfield(self): return self.bitfield def set_bitfield(self, bitfield): self.bitfield = bitfield def get_reimplements(self): return self.reimplements def set_reimplements(self, reimplements): self.reimplements = reimplements def add_reimplements(self, value): self.reimplements.append(value) def insert_reimplements(self, index, value): self.reimplements[index] = value def get_reimplementedby(self): return self.reimplementedby def set_reimplementedby(self, reimplementedby): self.reimplementedby = reimplementedby def add_reimplementedby(self, value): self.reimplementedby.append(value) def insert_reimplementedby(self, index, value): self.reimplementedby[index] = value def get_param(self): return self.param def set_param(self, param): self.param = param def add_param(self, value): self.param.append(value) def insert_param(self, index, value): self.param[index] = value def get_enumvalue(self): return self.enumvalue def set_enumvalue(self, enumvalue): self.enumvalue = enumvalue def add_enumvalue(self, value): self.enumvalue.append(value) def insert_enumvalue(self, index, value): self.enumvalue[index] = value def get_initializer(self): return self.initializer def set_initializer(self, initializer): self.initializer = initializer def get_exceptions(self): return self.exceptions def set_exceptions(self, exceptions): self.exceptions = exceptions def get_briefdescription(self): return self.briefdescription def set_briefdescription(self, briefdescription): self.briefdescription = briefdescription def get_detaileddescription(self): return self.detaileddescription def set_detaileddescription(self, detaileddescription): self.detaileddescription = detaileddescription def get_inbodydescription(self): return self.inbodydescription def set_inbodydescription(self, inbodydescription): self.inbodydescription = inbodydescription def get_location(self): return self.location def set_location(self, location): self.location = location def get_references(self): return self.references def set_references(self, references): self.references = references def add_references(self, value): self.references.append(value) def insert_references(self, index, value): self.references[index] = value def get_referencedby(self): return self.referencedby def set_referencedby(self, referencedby): self.referencedby = referencedby def add_referencedby(self, value): self.referencedby.append(value) def insert_referencedby(self, index, value): self.referencedby[index] = value def get_initonly(self): return self.initonly def set_initonly(self, initonly): self.initonly = initonly def get_kind(self): return self.kind def set_kind(self, kind): self.kind = kind def get_volatile(self): return self.volatile def set_volatile(self, volatile): self.volatile = volatile def get_const(self): return self.const def set_const(self, const): self.const = const def get_raise(self): return self.raisexx def set_raise(self, raisexx): self.raisexx = raisexx def get_virt(self): return self.virt def set_virt(self, virt): self.virt = virt def get_readable(self): return self.readable def set_readable(self, readable): self.readable = readable def get_prot(self): return self.prot def set_prot(self, prot): self.prot = prot def get_explicit(self): return self.explicit def set_explicit(self, explicit): self.explicit = explicit def get_new(self): return self.new def set_new(self, new): self.new = new def get_final(self): return self.final def set_final(self, final): self.final = final def get_writable(self): return self.writable def set_writable(self, writable): self.writable = writable def get_add(self): return self.add def set_add(self, add): self.add = add def get_static(self): return self.static def set_static(self, static): self.static = static def get_remove(self): return self.remove def set_remove(self, remove): self.remove = remove def get_sealed(self): return self.sealed def set_sealed(self, sealed): self.sealed = sealed def get_mutable(self): return self.mutable def set_mutable(self, mutable): self.mutable = mutable def get_gettable(self): return self.gettable def set_gettable(self, gettable): self.gettable = gettable def get_inline(self): return self.inline def set_inline(self, inline): self.inline = inline def get_settable(self): return self.settable def set_settable(self, settable): self.settable = settable def get_id(self): return self.id def set_id(self, id): self.id = id def export(self, outfile, level, namespace_='', name_='memberdefType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='memberdefType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='memberdefType'): if self.initonly is not None: outfile.write(' initonly=%s' % (quote_attrib(self.initonly), )) if self.kind is not None: outfile.write(' kind=%s' % (quote_attrib(self.kind), )) if self.volatile is not None: outfile.write(' volatile=%s' % (quote_attrib(self.volatile), )) if self.const is not None: outfile.write(' const=%s' % (quote_attrib(self.const), )) if self.raisexx is not None: outfile.write(' raise=%s' % (quote_attrib(self.raisexx), )) if self.virt is not None: outfile.write(' virt=%s' % (quote_attrib(self.virt), )) if self.readable is not None: outfile.write(' readable=%s' % (quote_attrib(self.readable), )) if self.prot is not None: outfile.write(' prot=%s' % (quote_attrib(self.prot), )) if self.explicit is not None: outfile.write(' explicit=%s' % (quote_attrib(self.explicit), )) if self.new is not None: outfile.write(' new=%s' % (quote_attrib(self.new), )) if self.final is not None: outfile.write(' final=%s' % (quote_attrib(self.final), )) if self.writable is not None: outfile.write(' writable=%s' % (quote_attrib(self.writable), )) if self.add is not None: outfile.write(' add=%s' % (quote_attrib(self.add), )) if self.static is not None: outfile.write(' static=%s' % (quote_attrib(self.static), )) if self.remove is not None: outfile.write(' remove=%s' % (quote_attrib(self.remove), )) if self.sealed is not None: outfile.write(' sealed=%s' % (quote_attrib(self.sealed), )) if self.mutable is not None: outfile.write(' mutable=%s' % (quote_attrib(self.mutable), )) if self.gettable is not None: outfile.write(' gettable=%s' % (quote_attrib(self.gettable), )) if self.inline is not None: outfile.write(' inline=%s' % (quote_attrib(self.inline), )) if self.settable is not None: outfile.write(' settable=%s' % (quote_attrib(self.settable), )) if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='memberdefType'): if self.templateparamlist: self.templateparamlist.export(outfile, level, namespace_, name_='templateparamlist') if self.type_: self.type_.export(outfile, level, namespace_, name_='type') if self.definition is not None: showIndent(outfile, level) outfile.write('<%sdefinition>%s\n' % (namespace_, self.format_string(quote_xml(self.definition).encode(ExternalEncoding), input_name='definition'), namespace_)) if self.argsstring is not None: showIndent(outfile, level) outfile.write('<%sargsstring>%s\n' % (namespace_, self.format_string(quote_xml(self.argsstring).encode(ExternalEncoding), input_name='argsstring'), namespace_)) if self.name is not None: showIndent(outfile, level) outfile.write('<%sname>%s\n' % (namespace_, self.format_string(quote_xml(self.name).encode(ExternalEncoding), input_name='name'), namespace_)) if self.read is not None: showIndent(outfile, level) outfile.write('<%sread>%s\n' % (namespace_, self.format_string(quote_xml(self.read).encode(ExternalEncoding), input_name='read'), namespace_)) if self.write is not None: showIndent(outfile, level) outfile.write('<%swrite>%s\n' % (namespace_, self.format_string(quote_xml(self.write).encode(ExternalEncoding), input_name='write'), namespace_)) if self.bitfield is not None: showIndent(outfile, level) outfile.write('<%sbitfield>%s\n' % (namespace_, self.format_string(quote_xml(self.bitfield).encode(ExternalEncoding), input_name='bitfield'), namespace_)) for reimplements_ in self.reimplements: reimplements_.export(outfile, level, namespace_, name_='reimplements') for reimplementedby_ in self.reimplementedby: reimplementedby_.export(outfile, level, namespace_, name_='reimplementedby') for param_ in self.param: param_.export(outfile, level, namespace_, name_='param') for enumvalue_ in self.enumvalue: enumvalue_.export(outfile, level, namespace_, name_='enumvalue') if self.initializer: self.initializer.export(outfile, level, namespace_, name_='initializer') if self.exceptions: self.exceptions.export(outfile, level, namespace_, name_='exceptions') if self.briefdescription: self.briefdescription.export(outfile, level, namespace_, name_='briefdescription') if self.detaileddescription: self.detaileddescription.export(outfile, level, namespace_, name_='detaileddescription') if self.inbodydescription: self.inbodydescription.export(outfile, level, namespace_, name_='inbodydescription') if self.location: self.location.export(outfile, level, namespace_, name_='location', ) for references_ in self.references: references_.export(outfile, level, namespace_, name_='references') for referencedby_ in self.referencedby: referencedby_.export(outfile, level, namespace_, name_='referencedby') def hasContent_(self): if ( self.templateparamlist is not None or self.type_ is not None or self.definition is not None or self.argsstring is not None or self.name is not None or self.read is not None or self.write is not None or self.bitfield is not None or self.reimplements is not None or self.reimplementedby is not None or self.param is not None or self.enumvalue is not None or self.initializer is not None or self.exceptions is not None or self.briefdescription is not None or self.detaileddescription is not None or self.inbodydescription is not None or self.location is not None or self.references is not None or self.referencedby is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='memberdefType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.initonly is not None: showIndent(outfile, level) outfile.write('initonly = "%s",\n' % (self.initonly,)) if self.kind is not None: showIndent(outfile, level) outfile.write('kind = "%s",\n' % (self.kind,)) if self.volatile is not None: showIndent(outfile, level) outfile.write('volatile = "%s",\n' % (self.volatile,)) if self.const is not None: showIndent(outfile, level) outfile.write('const = "%s",\n' % (self.const,)) if self.raisexx is not None: showIndent(outfile, level) outfile.write('raisexx = "%s",\n' % (self.raisexx,)) if self.virt is not None: showIndent(outfile, level) outfile.write('virt = "%s",\n' % (self.virt,)) if self.readable is not None: showIndent(outfile, level) outfile.write('readable = "%s",\n' % (self.readable,)) if self.prot is not None: showIndent(outfile, level) outfile.write('prot = "%s",\n' % (self.prot,)) if self.explicit is not None: showIndent(outfile, level) outfile.write('explicit = "%s",\n' % (self.explicit,)) if self.new is not None: showIndent(outfile, level) outfile.write('new = "%s",\n' % (self.new,)) if self.final is not None: showIndent(outfile, level) outfile.write('final = "%s",\n' % (self.final,)) if self.writable is not None: showIndent(outfile, level) outfile.write('writable = "%s",\n' % (self.writable,)) if self.add is not None: showIndent(outfile, level) outfile.write('add = "%s",\n' % (self.add,)) if self.static is not None: showIndent(outfile, level) outfile.write('static = "%s",\n' % (self.static,)) if self.remove is not None: showIndent(outfile, level) outfile.write('remove = "%s",\n' % (self.remove,)) if self.sealed is not None: showIndent(outfile, level) outfile.write('sealed = "%s",\n' % (self.sealed,)) if self.mutable is not None: showIndent(outfile, level) outfile.write('mutable = "%s",\n' % (self.mutable,)) if self.gettable is not None: showIndent(outfile, level) outfile.write('gettable = "%s",\n' % (self.gettable,)) if self.inline is not None: showIndent(outfile, level) outfile.write('inline = "%s",\n' % (self.inline,)) if self.settable is not None: showIndent(outfile, level) outfile.write('settable = "%s",\n' % (self.settable,)) if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): if self.templateparamlist: showIndent(outfile, level) outfile.write('templateparamlist=model_.templateparamlistType(\n') self.templateparamlist.exportLiteral(outfile, level, name_='templateparamlist') showIndent(outfile, level) outfile.write('),\n') if self.type_: showIndent(outfile, level) outfile.write('type_=model_.linkedTextType(\n') self.type_.exportLiteral(outfile, level, name_='type') showIndent(outfile, level) outfile.write('),\n') showIndent(outfile, level) outfile.write('definition=%s,\n' % quote_python(self.definition).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('argsstring=%s,\n' % quote_python(self.argsstring).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('name=%s,\n' % quote_python(self.name).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('read=%s,\n' % quote_python(self.read).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('write=%s,\n' % quote_python(self.write).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('bitfield=%s,\n' % quote_python(self.bitfield).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('reimplements=[\n') level += 1 for reimplements in self.reimplements: showIndent(outfile, level) outfile.write('model_.reimplements(\n') reimplements.exportLiteral(outfile, level, name_='reimplements') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('reimplementedby=[\n') level += 1 for reimplementedby in self.reimplementedby: showIndent(outfile, level) outfile.write('model_.reimplementedby(\n') reimplementedby.exportLiteral(outfile, level, name_='reimplementedby') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('param=[\n') level += 1 for param in self.param: showIndent(outfile, level) outfile.write('model_.param(\n') param.exportLiteral(outfile, level, name_='param') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('enumvalue=[\n') level += 1 for enumvalue in self.enumvalue: showIndent(outfile, level) outfile.write('model_.enumvalue(\n') enumvalue.exportLiteral(outfile, level, name_='enumvalue') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') if self.initializer: showIndent(outfile, level) outfile.write('initializer=model_.linkedTextType(\n') self.initializer.exportLiteral(outfile, level, name_='initializer') showIndent(outfile, level) outfile.write('),\n') if self.exceptions: showIndent(outfile, level) outfile.write('exceptions=model_.linkedTextType(\n') self.exceptions.exportLiteral(outfile, level, name_='exceptions') showIndent(outfile, level) outfile.write('),\n') if self.briefdescription: showIndent(outfile, level) outfile.write('briefdescription=model_.descriptionType(\n') self.briefdescription.exportLiteral(outfile, level, name_='briefdescription') showIndent(outfile, level) outfile.write('),\n') if self.detaileddescription: showIndent(outfile, level) outfile.write('detaileddescription=model_.descriptionType(\n') self.detaileddescription.exportLiteral(outfile, level, name_='detaileddescription') showIndent(outfile, level) outfile.write('),\n') if self.inbodydescription: showIndent(outfile, level) outfile.write('inbodydescription=model_.descriptionType(\n') self.inbodydescription.exportLiteral(outfile, level, name_='inbodydescription') showIndent(outfile, level) outfile.write('),\n') if self.location: showIndent(outfile, level) outfile.write('location=model_.locationType(\n') self.location.exportLiteral(outfile, level, name_='location') showIndent(outfile, level) outfile.write('),\n') showIndent(outfile, level) outfile.write('references=[\n') level += 1 for references in self.references: showIndent(outfile, level) outfile.write('model_.references(\n') references.exportLiteral(outfile, level, name_='references') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('referencedby=[\n') level += 1 for referencedby in self.referencedby: showIndent(outfile, level) outfile.write('model_.referencedby(\n') referencedby.exportLiteral(outfile, level, name_='referencedby') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('initonly'): self.initonly = attrs.get('initonly').value if attrs.get('kind'): self.kind = attrs.get('kind').value if attrs.get('volatile'): self.volatile = attrs.get('volatile').value if attrs.get('const'): self.const = attrs.get('const').value if attrs.get('raise'): self.raisexx = attrs.get('raise').value if attrs.get('virt'): self.virt = attrs.get('virt').value if attrs.get('readable'): self.readable = attrs.get('readable').value if attrs.get('prot'): self.prot = attrs.get('prot').value if attrs.get('explicit'): self.explicit = attrs.get('explicit').value if attrs.get('new'): self.new = attrs.get('new').value if attrs.get('final'): self.final = attrs.get('final').value if attrs.get('writable'): self.writable = attrs.get('writable').value if attrs.get('add'): self.add = attrs.get('add').value if attrs.get('static'): self.static = attrs.get('static').value if attrs.get('remove'): self.remove = attrs.get('remove').value if attrs.get('sealed'): self.sealed = attrs.get('sealed').value if attrs.get('mutable'): self.mutable = attrs.get('mutable').value if attrs.get('gettable'): self.gettable = attrs.get('gettable').value if attrs.get('inline'): self.inline = attrs.get('inline').value if attrs.get('settable'): self.settable = attrs.get('settable').value if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'templateparamlist': obj_ = templateparamlistType.factory() obj_.build(child_) self.set_templateparamlist(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'type': obj_ = linkedTextType.factory() obj_.build(child_) self.set_type(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'definition': definition_ = '' for text__content_ in child_.childNodes: definition_ += text__content_.nodeValue self.definition = definition_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'argsstring': argsstring_ = '' for text__content_ in child_.childNodes: argsstring_ += text__content_.nodeValue self.argsstring = argsstring_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'name': name_ = '' for text__content_ in child_.childNodes: name_ += text__content_.nodeValue self.name = name_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'read': read_ = '' for text__content_ in child_.childNodes: read_ += text__content_.nodeValue self.read = read_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'write': write_ = '' for text__content_ in child_.childNodes: write_ += text__content_.nodeValue self.write = write_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'bitfield': bitfield_ = '' for text__content_ in child_.childNodes: bitfield_ += text__content_.nodeValue self.bitfield = bitfield_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'reimplements': obj_ = reimplementType.factory() obj_.build(child_) self.reimplements.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'reimplementedby': obj_ = reimplementType.factory() obj_.build(child_) self.reimplementedby.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'param': obj_ = paramType.factory() obj_.build(child_) self.param.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'enumvalue': obj_ = enumvalueType.factory() obj_.build(child_) self.enumvalue.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'initializer': obj_ = linkedTextType.factory() obj_.build(child_) self.set_initializer(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'exceptions': obj_ = linkedTextType.factory() obj_.build(child_) self.set_exceptions(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'briefdescription': obj_ = descriptionType.factory() obj_.build(child_) self.set_briefdescription(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'detaileddescription': obj_ = descriptionType.factory() obj_.build(child_) self.set_detaileddescription(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'inbodydescription': obj_ = descriptionType.factory() obj_.build(child_) self.set_inbodydescription(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'location': obj_ = locationType.factory() obj_.build(child_) self.set_location(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'references': obj_ = referenceType.factory() obj_.build(child_) self.references.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'referencedby': obj_ = referenceType.factory() obj_.build(child_) self.referencedby.append(obj_) # end class memberdefType class definition(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if definition.subclass: return definition.subclass(*args_, **kwargs_) else: return definition(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='definition', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='definition') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='definition'): pass def exportChildren(self, outfile, level, namespace_='', name_='definition'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='definition'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class definition class argsstring(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if argsstring.subclass: return argsstring.subclass(*args_, **kwargs_) else: return argsstring(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='argsstring', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='argsstring') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='argsstring'): pass def exportChildren(self, outfile, level, namespace_='', name_='argsstring'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='argsstring'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class argsstring class read(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if read.subclass: return read.subclass(*args_, **kwargs_) else: return read(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='read', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='read') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='read'): pass def exportChildren(self, outfile, level, namespace_='', name_='read'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='read'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class read class write(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if write.subclass: return write.subclass(*args_, **kwargs_) else: return write(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='write', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='write') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='write'): pass def exportChildren(self, outfile, level, namespace_='', name_='write'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='write'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class write class bitfield(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if bitfield.subclass: return bitfield.subclass(*args_, **kwargs_) else: return bitfield(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='bitfield', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='bitfield') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='bitfield'): pass def exportChildren(self, outfile, level, namespace_='', name_='bitfield'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='bitfield'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class bitfield class descriptionType(GeneratedsSuper): subclass = None superclass = None def __init__(self, title=None, para=None, sect1=None, internal=None, mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if descriptionType.subclass: return descriptionType.subclass(*args_, **kwargs_) else: return descriptionType(*args_, **kwargs_) factory = staticmethod(factory) def get_title(self): return self.title def set_title(self, title): self.title = title def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_sect1(self): return self.sect1 def set_sect1(self, sect1): self.sect1 = sect1 def add_sect1(self, value): self.sect1.append(value) def insert_sect1(self, index, value): self.sect1[index] = value def get_internal(self): return self.internal def set_internal(self, internal): self.internal = internal def export(self, outfile, level, namespace_='', name_='descriptionType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='descriptionType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='descriptionType'): pass def exportChildren(self, outfile, level, namespace_='', name_='descriptionType'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.title is not None or self.para is not None or self.sect1 is not None or self.internal is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='descriptionType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'title': childobj_ = docTitleType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'title', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'sect1': childobj_ = docSect1Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'sect1', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'internal': childobj_ = docInternalType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'internal', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class descriptionType class enumvalueType(GeneratedsSuper): subclass = None superclass = None def __init__(self, prot=None, id=None, name=None, initializer=None, briefdescription=None, detaileddescription=None, mixedclass_=None, content_=None): self.prot = prot self.id = id if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if enumvalueType.subclass: return enumvalueType.subclass(*args_, **kwargs_) else: return enumvalueType(*args_, **kwargs_) factory = staticmethod(factory) def get_name(self): return self.name def set_name(self, name): self.name = name def get_initializer(self): return self.initializer def set_initializer(self, initializer): self.initializer = initializer def get_briefdescription(self): return self.briefdescription def set_briefdescription(self, briefdescription): self.briefdescription = briefdescription def get_detaileddescription(self): return self.detaileddescription def set_detaileddescription(self, detaileddescription): self.detaileddescription = detaileddescription def get_prot(self): return self.prot def set_prot(self, prot): self.prot = prot def get_id(self): return self.id def set_id(self, id): self.id = id def export(self, outfile, level, namespace_='', name_='enumvalueType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='enumvalueType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='enumvalueType'): if self.prot is not None: outfile.write(' prot=%s' % (quote_attrib(self.prot), )) if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='enumvalueType'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.name is not None or self.initializer is not None or self.briefdescription is not None or self.detaileddescription is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='enumvalueType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.prot is not None: showIndent(outfile, level) outfile.write('prot = "%s",\n' % (self.prot,)) if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('prot'): self.prot = attrs.get('prot').value if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'name': value_ = [] for text_ in child_.childNodes: value_.append(text_.nodeValue) valuestr_ = ''.join(value_) obj_ = self.mixedclass_(MixedContainer.CategorySimple, MixedContainer.TypeString, 'name', valuestr_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'initializer': childobj_ = linkedTextType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'initializer', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'briefdescription': childobj_ = descriptionType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'briefdescription', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'detaileddescription': childobj_ = descriptionType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'detaileddescription', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class enumvalueType class templateparamlistType(GeneratedsSuper): subclass = None superclass = None def __init__(self, param=None): if param is None: self.param = [] else: self.param = param def factory(*args_, **kwargs_): if templateparamlistType.subclass: return templateparamlistType.subclass(*args_, **kwargs_) else: return templateparamlistType(*args_, **kwargs_) factory = staticmethod(factory) def get_param(self): return self.param def set_param(self, param): self.param = param def add_param(self, value): self.param.append(value) def insert_param(self, index, value): self.param[index] = value def export(self, outfile, level, namespace_='', name_='templateparamlistType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='templateparamlistType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='templateparamlistType'): pass def exportChildren(self, outfile, level, namespace_='', name_='templateparamlistType'): for param_ in self.param: param_.export(outfile, level, namespace_, name_='param') def hasContent_(self): if ( self.param is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='templateparamlistType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('param=[\n') level += 1 for param in self.param: showIndent(outfile, level) outfile.write('model_.param(\n') param.exportLiteral(outfile, level, name_='param') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'param': obj_ = paramType.factory() obj_.build(child_) self.param.append(obj_) # end class templateparamlistType class paramType(GeneratedsSuper): subclass = None superclass = None def __init__(self, type_=None, declname=None, defname=None, array=None, defval=None, briefdescription=None): self.type_ = type_ self.declname = declname self.defname = defname self.array = array self.defval = defval self.briefdescription = briefdescription def factory(*args_, **kwargs_): if paramType.subclass: return paramType.subclass(*args_, **kwargs_) else: return paramType(*args_, **kwargs_) factory = staticmethod(factory) def get_type(self): return self.type_ def set_type(self, type_): self.type_ = type_ def get_declname(self): return self.declname def set_declname(self, declname): self.declname = declname def get_defname(self): return self.defname def set_defname(self, defname): self.defname = defname def get_array(self): return self.array def set_array(self, array): self.array = array def get_defval(self): return self.defval def set_defval(self, defval): self.defval = defval def get_briefdescription(self): return self.briefdescription def set_briefdescription(self, briefdescription): self.briefdescription = briefdescription def export(self, outfile, level, namespace_='', name_='paramType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='paramType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='paramType'): pass def exportChildren(self, outfile, level, namespace_='', name_='paramType'): if self.type_: self.type_.export(outfile, level, namespace_, name_='type') if self.declname is not None: showIndent(outfile, level) outfile.write('<%sdeclname>%s\n' % (namespace_, self.format_string(quote_xml(self.declname).encode(ExternalEncoding), input_name='declname'), namespace_)) if self.defname is not None: showIndent(outfile, level) outfile.write('<%sdefname>%s\n' % (namespace_, self.format_string(quote_xml(self.defname).encode(ExternalEncoding), input_name='defname'), namespace_)) if self.array is not None: showIndent(outfile, level) outfile.write('<%sarray>%s\n' % (namespace_, self.format_string(quote_xml(self.array).encode(ExternalEncoding), input_name='array'), namespace_)) if self.defval: self.defval.export(outfile, level, namespace_, name_='defval') if self.briefdescription: self.briefdescription.export(outfile, level, namespace_, name_='briefdescription') def hasContent_(self): if ( self.type_ is not None or self.declname is not None or self.defname is not None or self.array is not None or self.defval is not None or self.briefdescription is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='paramType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): if self.type_: showIndent(outfile, level) outfile.write('type_=model_.linkedTextType(\n') self.type_.exportLiteral(outfile, level, name_='type') showIndent(outfile, level) outfile.write('),\n') showIndent(outfile, level) outfile.write('declname=%s,\n' % quote_python(self.declname).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('defname=%s,\n' % quote_python(self.defname).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('array=%s,\n' % quote_python(self.array).encode(ExternalEncoding)) if self.defval: showIndent(outfile, level) outfile.write('defval=model_.linkedTextType(\n') self.defval.exportLiteral(outfile, level, name_='defval') showIndent(outfile, level) outfile.write('),\n') if self.briefdescription: showIndent(outfile, level) outfile.write('briefdescription=model_.descriptionType(\n') self.briefdescription.exportLiteral(outfile, level, name_='briefdescription') showIndent(outfile, level) outfile.write('),\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'type': obj_ = linkedTextType.factory() obj_.build(child_) self.set_type(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'declname': declname_ = '' for text__content_ in child_.childNodes: declname_ += text__content_.nodeValue self.declname = declname_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'defname': defname_ = '' for text__content_ in child_.childNodes: defname_ += text__content_.nodeValue self.defname = defname_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'array': array_ = '' for text__content_ in child_.childNodes: array_ += text__content_.nodeValue self.array = array_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'defval': obj_ = linkedTextType.factory() obj_.build(child_) self.set_defval(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'briefdescription': obj_ = descriptionType.factory() obj_.build(child_) self.set_briefdescription(obj_) # end class paramType class declname(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if declname.subclass: return declname.subclass(*args_, **kwargs_) else: return declname(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='declname', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='declname') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='declname'): pass def exportChildren(self, outfile, level, namespace_='', name_='declname'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='declname'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class declname class defname(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if defname.subclass: return defname.subclass(*args_, **kwargs_) else: return defname(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='defname', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='defname') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='defname'): pass def exportChildren(self, outfile, level, namespace_='', name_='defname'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='defname'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class defname class array(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if array.subclass: return array.subclass(*args_, **kwargs_) else: return array(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='array', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='array') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='array'): pass def exportChildren(self, outfile, level, namespace_='', name_='array'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='array'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class array class linkedTextType(GeneratedsSuper): subclass = None superclass = None def __init__(self, ref=None, mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if linkedTextType.subclass: return linkedTextType.subclass(*args_, **kwargs_) else: return linkedTextType(*args_, **kwargs_) factory = staticmethod(factory) def get_ref(self): return self.ref def set_ref(self, ref): self.ref = ref def add_ref(self, value): self.ref.append(value) def insert_ref(self, index, value): self.ref[index] = value def export(self, outfile, level, namespace_='', name_='linkedTextType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='linkedTextType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='linkedTextType'): pass def exportChildren(self, outfile, level, namespace_='', name_='linkedTextType'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.ref is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='linkedTextType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'ref': childobj_ = docRefTextType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'ref', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class linkedTextType class graphType(GeneratedsSuper): subclass = None superclass = None def __init__(self, node=None): if node is None: self.node = [] else: self.node = node def factory(*args_, **kwargs_): if graphType.subclass: return graphType.subclass(*args_, **kwargs_) else: return graphType(*args_, **kwargs_) factory = staticmethod(factory) def get_node(self): return self.node def set_node(self, node): self.node = node def add_node(self, value): self.node.append(value) def insert_node(self, index, value): self.node[index] = value def export(self, outfile, level, namespace_='', name_='graphType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='graphType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='graphType'): pass def exportChildren(self, outfile, level, namespace_='', name_='graphType'): for node_ in self.node: node_.export(outfile, level, namespace_, name_='node') def hasContent_(self): if ( self.node is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='graphType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('node=[\n') level += 1 for node in self.node: showIndent(outfile, level) outfile.write('model_.node(\n') node.exportLiteral(outfile, level, name_='node') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'node': obj_ = nodeType.factory() obj_.build(child_) self.node.append(obj_) # end class graphType class nodeType(GeneratedsSuper): subclass = None superclass = None def __init__(self, id=None, label=None, link=None, childnode=None): self.id = id self.label = label self.link = link if childnode is None: self.childnode = [] else: self.childnode = childnode def factory(*args_, **kwargs_): if nodeType.subclass: return nodeType.subclass(*args_, **kwargs_) else: return nodeType(*args_, **kwargs_) factory = staticmethod(factory) def get_label(self): return self.label def set_label(self, label): self.label = label def get_link(self): return self.link def set_link(self, link): self.link = link def get_childnode(self): return self.childnode def set_childnode(self, childnode): self.childnode = childnode def add_childnode(self, value): self.childnode.append(value) def insert_childnode(self, index, value): self.childnode[index] = value def get_id(self): return self.id def set_id(self, id): self.id = id def export(self, outfile, level, namespace_='', name_='nodeType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='nodeType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='nodeType'): if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='nodeType'): if self.label is not None: showIndent(outfile, level) outfile.write('<%slabel>%s\n' % (namespace_, self.format_string(quote_xml(self.label).encode(ExternalEncoding), input_name='label'), namespace_)) if self.link: self.link.export(outfile, level, namespace_, name_='link') for childnode_ in self.childnode: childnode_.export(outfile, level, namespace_, name_='childnode') def hasContent_(self): if ( self.label is not None or self.link is not None or self.childnode is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='nodeType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('label=%s,\n' % quote_python(self.label).encode(ExternalEncoding)) if self.link: showIndent(outfile, level) outfile.write('link=model_.linkType(\n') self.link.exportLiteral(outfile, level, name_='link') showIndent(outfile, level) outfile.write('),\n') showIndent(outfile, level) outfile.write('childnode=[\n') level += 1 for childnode in self.childnode: showIndent(outfile, level) outfile.write('model_.childnode(\n') childnode.exportLiteral(outfile, level, name_='childnode') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'label': label_ = '' for text__content_ in child_.childNodes: label_ += text__content_.nodeValue self.label = label_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'link': obj_ = linkType.factory() obj_.build(child_) self.set_link(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'childnode': obj_ = childnodeType.factory() obj_.build(child_) self.childnode.append(obj_) # end class nodeType class label(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if label.subclass: return label.subclass(*args_, **kwargs_) else: return label(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='label', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='label') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='label'): pass def exportChildren(self, outfile, level, namespace_='', name_='label'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='label'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class label class childnodeType(GeneratedsSuper): subclass = None superclass = None def __init__(self, relation=None, refid=None, edgelabel=None): self.relation = relation self.refid = refid if edgelabel is None: self.edgelabel = [] else: self.edgelabel = edgelabel def factory(*args_, **kwargs_): if childnodeType.subclass: return childnodeType.subclass(*args_, **kwargs_) else: return childnodeType(*args_, **kwargs_) factory = staticmethod(factory) def get_edgelabel(self): return self.edgelabel def set_edgelabel(self, edgelabel): self.edgelabel = edgelabel def add_edgelabel(self, value): self.edgelabel.append(value) def insert_edgelabel(self, index, value): self.edgelabel[index] = value def get_relation(self): return self.relation def set_relation(self, relation): self.relation = relation def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def export(self, outfile, level, namespace_='', name_='childnodeType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='childnodeType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='childnodeType'): if self.relation is not None: outfile.write(' relation=%s' % (quote_attrib(self.relation), )) if self.refid is not None: outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) def exportChildren(self, outfile, level, namespace_='', name_='childnodeType'): for edgelabel_ in self.edgelabel: showIndent(outfile, level) outfile.write('<%sedgelabel>%s\n' % (namespace_, self.format_string(quote_xml(edgelabel_).encode(ExternalEncoding), input_name='edgelabel'), namespace_)) def hasContent_(self): if ( self.edgelabel is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='childnodeType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.relation is not None: showIndent(outfile, level) outfile.write('relation = "%s",\n' % (self.relation,)) if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('edgelabel=[\n') level += 1 for edgelabel in self.edgelabel: showIndent(outfile, level) outfile.write('%s,\n' % quote_python(edgelabel).encode(ExternalEncoding)) level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('relation'): self.relation = attrs.get('relation').value if attrs.get('refid'): self.refid = attrs.get('refid').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'edgelabel': edgelabel_ = '' for text__content_ in child_.childNodes: edgelabel_ += text__content_.nodeValue self.edgelabel.append(edgelabel_) # end class childnodeType class edgelabel(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if edgelabel.subclass: return edgelabel.subclass(*args_, **kwargs_) else: return edgelabel(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='edgelabel', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='edgelabel') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='edgelabel'): pass def exportChildren(self, outfile, level, namespace_='', name_='edgelabel'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='edgelabel'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class edgelabel class linkType(GeneratedsSuper): subclass = None superclass = None def __init__(self, refid=None, external=None, valueOf_=''): self.refid = refid self.external = external self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if linkType.subclass: return linkType.subclass(*args_, **kwargs_) else: return linkType(*args_, **kwargs_) factory = staticmethod(factory) def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def get_external(self): return self.external def set_external(self, external): self.external = external def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='linkType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='linkType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='linkType'): if self.refid is not None: outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) if self.external is not None: outfile.write(' external=%s' % (self.format_string(quote_attrib(self.external).encode(ExternalEncoding), input_name='external'), )) def exportChildren(self, outfile, level, namespace_='', name_='linkType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='linkType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) if self.external is not None: showIndent(outfile, level) outfile.write('external = %s,\n' % (self.external,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('refid'): self.refid = attrs.get('refid').value if attrs.get('external'): self.external = attrs.get('external').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class linkType class listingType(GeneratedsSuper): subclass = None superclass = None def __init__(self, codeline=None): if codeline is None: self.codeline = [] else: self.codeline = codeline def factory(*args_, **kwargs_): if listingType.subclass: return listingType.subclass(*args_, **kwargs_) else: return listingType(*args_, **kwargs_) factory = staticmethod(factory) def get_codeline(self): return self.codeline def set_codeline(self, codeline): self.codeline = codeline def add_codeline(self, value): self.codeline.append(value) def insert_codeline(self, index, value): self.codeline[index] = value def export(self, outfile, level, namespace_='', name_='listingType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='listingType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='listingType'): pass def exportChildren(self, outfile, level, namespace_='', name_='listingType'): for codeline_ in self.codeline: codeline_.export(outfile, level, namespace_, name_='codeline') def hasContent_(self): if ( self.codeline is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='listingType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('codeline=[\n') level += 1 for codeline in self.codeline: showIndent(outfile, level) outfile.write('model_.codeline(\n') codeline.exportLiteral(outfile, level, name_='codeline') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'codeline': obj_ = codelineType.factory() obj_.build(child_) self.codeline.append(obj_) # end class listingType class codelineType(GeneratedsSuper): subclass = None superclass = None def __init__(self, external=None, lineno=None, refkind=None, refid=None, highlight=None): self.external = external self.lineno = lineno self.refkind = refkind self.refid = refid if highlight is None: self.highlight = [] else: self.highlight = highlight def factory(*args_, **kwargs_): if codelineType.subclass: return codelineType.subclass(*args_, **kwargs_) else: return codelineType(*args_, **kwargs_) factory = staticmethod(factory) def get_highlight(self): return self.highlight def set_highlight(self, highlight): self.highlight = highlight def add_highlight(self, value): self.highlight.append(value) def insert_highlight(self, index, value): self.highlight[index] = value def get_external(self): return self.external def set_external(self, external): self.external = external def get_lineno(self): return self.lineno def set_lineno(self, lineno): self.lineno = lineno def get_refkind(self): return self.refkind def set_refkind(self, refkind): self.refkind = refkind def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def export(self, outfile, level, namespace_='', name_='codelineType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='codelineType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='codelineType'): if self.external is not None: outfile.write(' external=%s' % (quote_attrib(self.external), )) if self.lineno is not None: outfile.write(' lineno="%s"' % self.format_integer(self.lineno, input_name='lineno')) if self.refkind is not None: outfile.write(' refkind=%s' % (quote_attrib(self.refkind), )) if self.refid is not None: outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) def exportChildren(self, outfile, level, namespace_='', name_='codelineType'): for highlight_ in self.highlight: highlight_.export(outfile, level, namespace_, name_='highlight') def hasContent_(self): if ( self.highlight is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='codelineType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.external is not None: showIndent(outfile, level) outfile.write('external = "%s",\n' % (self.external,)) if self.lineno is not None: showIndent(outfile, level) outfile.write('lineno = %s,\n' % (self.lineno,)) if self.refkind is not None: showIndent(outfile, level) outfile.write('refkind = "%s",\n' % (self.refkind,)) if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('highlight=[\n') level += 1 for highlight in self.highlight: showIndent(outfile, level) outfile.write('model_.highlight(\n') highlight.exportLiteral(outfile, level, name_='highlight') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('external'): self.external = attrs.get('external').value if attrs.get('lineno'): try: self.lineno = int(attrs.get('lineno').value) except ValueError as exp: raise ValueError('Bad integer attribute (lineno): %s' % exp) if attrs.get('refkind'): self.refkind = attrs.get('refkind').value if attrs.get('refid'): self.refid = attrs.get('refid').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'highlight': obj_ = highlightType.factory() obj_.build(child_) self.highlight.append(obj_) # end class codelineType class highlightType(GeneratedsSuper): subclass = None superclass = None def __init__(self, classxx=None, sp=None, ref=None, mixedclass_=None, content_=None): self.classxx = classxx if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if highlightType.subclass: return highlightType.subclass(*args_, **kwargs_) else: return highlightType(*args_, **kwargs_) factory = staticmethod(factory) def get_sp(self): return self.sp def set_sp(self, sp): self.sp = sp def add_sp(self, value): self.sp.append(value) def insert_sp(self, index, value): self.sp[index] = value def get_ref(self): return self.ref def set_ref(self, ref): self.ref = ref def add_ref(self, value): self.ref.append(value) def insert_ref(self, index, value): self.ref[index] = value def get_class(self): return self.classxx def set_class(self, classxx): self.classxx = classxx def export(self, outfile, level, namespace_='', name_='highlightType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='highlightType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='highlightType'): if self.classxx is not None: outfile.write(' class=%s' % (quote_attrib(self.classxx), )) def exportChildren(self, outfile, level, namespace_='', name_='highlightType'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.sp is not None or self.ref is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='highlightType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.classxx is not None: showIndent(outfile, level) outfile.write('classxx = "%s",\n' % (self.classxx,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('class'): self.classxx = attrs.get('class').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'sp': value_ = [] for text_ in child_.childNodes: value_.append(text_.nodeValue) valuestr_ = ''.join(value_) obj_ = self.mixedclass_(MixedContainer.CategorySimple, MixedContainer.TypeString, 'sp', valuestr_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'ref': childobj_ = docRefTextType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'ref', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class highlightType class sp(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if sp.subclass: return sp.subclass(*args_, **kwargs_) else: return sp(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='sp', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='sp') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='sp'): pass def exportChildren(self, outfile, level, namespace_='', name_='sp'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='sp'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class sp class referenceType(GeneratedsSuper): subclass = None superclass = None def __init__(self, endline=None, startline=None, refid=None, compoundref=None, valueOf_='', mixedclass_=None, content_=None): self.endline = endline self.startline = startline self.refid = refid self.compoundref = compoundref if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if referenceType.subclass: return referenceType.subclass(*args_, **kwargs_) else: return referenceType(*args_, **kwargs_) factory = staticmethod(factory) def get_endline(self): return self.endline def set_endline(self, endline): self.endline = endline def get_startline(self): return self.startline def set_startline(self, startline): self.startline = startline def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def get_compoundref(self): return self.compoundref def set_compoundref(self, compoundref): self.compoundref = compoundref def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='referenceType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='referenceType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='referenceType'): if self.endline is not None: outfile.write(' endline="%s"' % self.format_integer(self.endline, input_name='endline')) if self.startline is not None: outfile.write(' startline="%s"' % self.format_integer(self.startline, input_name='startline')) if self.refid is not None: outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) if self.compoundref is not None: outfile.write(' compoundref=%s' % (self.format_string(quote_attrib(self.compoundref).encode(ExternalEncoding), input_name='compoundref'), )) def exportChildren(self, outfile, level, namespace_='', name_='referenceType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='referenceType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.endline is not None: showIndent(outfile, level) outfile.write('endline = %s,\n' % (self.endline,)) if self.startline is not None: showIndent(outfile, level) outfile.write('startline = %s,\n' % (self.startline,)) if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) if self.compoundref is not None: showIndent(outfile, level) outfile.write('compoundref = %s,\n' % (self.compoundref,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('endline'): try: self.endline = int(attrs.get('endline').value) except ValueError as exp: raise ValueError('Bad integer attribute (endline): %s' % exp) if attrs.get('startline'): try: self.startline = int(attrs.get('startline').value) except ValueError as exp: raise ValueError('Bad integer attribute (startline): %s' % exp) if attrs.get('refid'): self.refid = attrs.get('refid').value if attrs.get('compoundref'): self.compoundref = attrs.get('compoundref').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class referenceType class locationType(GeneratedsSuper): subclass = None superclass = None def __init__(self, bodystart=None, line=None, bodyend=None, bodyfile=None, file=None, valueOf_=''): self.bodystart = bodystart self.line = line self.bodyend = bodyend self.bodyfile = bodyfile self.file = file self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if locationType.subclass: return locationType.subclass(*args_, **kwargs_) else: return locationType(*args_, **kwargs_) factory = staticmethod(factory) def get_bodystart(self): return self.bodystart def set_bodystart(self, bodystart): self.bodystart = bodystart def get_line(self): return self.line def set_line(self, line): self.line = line def get_bodyend(self): return self.bodyend def set_bodyend(self, bodyend): self.bodyend = bodyend def get_bodyfile(self): return self.bodyfile def set_bodyfile(self, bodyfile): self.bodyfile = bodyfile def get_file(self): return self.file def set_file(self, file): self.file = file def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='locationType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='locationType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='locationType'): if self.bodystart is not None: outfile.write(' bodystart="%s"' % self.format_integer(self.bodystart, input_name='bodystart')) if self.line is not None: outfile.write(' line="%s"' % self.format_integer(self.line, input_name='line')) if self.bodyend is not None: outfile.write(' bodyend="%s"' % self.format_integer(self.bodyend, input_name='bodyend')) if self.bodyfile is not None: outfile.write(' bodyfile=%s' % (self.format_string(quote_attrib(self.bodyfile).encode(ExternalEncoding), input_name='bodyfile'), )) if self.file is not None: outfile.write(' file=%s' % (self.format_string(quote_attrib(self.file).encode(ExternalEncoding), input_name='file'), )) def exportChildren(self, outfile, level, namespace_='', name_='locationType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='locationType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.bodystart is not None: showIndent(outfile, level) outfile.write('bodystart = %s,\n' % (self.bodystart,)) if self.line is not None: showIndent(outfile, level) outfile.write('line = %s,\n' % (self.line,)) if self.bodyend is not None: showIndent(outfile, level) outfile.write('bodyend = %s,\n' % (self.bodyend,)) if self.bodyfile is not None: showIndent(outfile, level) outfile.write('bodyfile = %s,\n' % (self.bodyfile,)) if self.file is not None: showIndent(outfile, level) outfile.write('file = %s,\n' % (self.file,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('bodystart'): try: self.bodystart = int(attrs.get('bodystart').value) except ValueError as exp: raise ValueError('Bad integer attribute (bodystart): %s' % exp) if attrs.get('line'): try: self.line = int(attrs.get('line').value) except ValueError as exp: raise ValueError('Bad integer attribute (line): %s' % exp) if attrs.get('bodyend'): try: self.bodyend = int(attrs.get('bodyend').value) except ValueError as exp: raise ValueError('Bad integer attribute (bodyend): %s' % exp) if attrs.get('bodyfile'): self.bodyfile = attrs.get('bodyfile').value if attrs.get('file'): self.file = attrs.get('file').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class locationType class docSect1Type(GeneratedsSuper): subclass = None superclass = None def __init__(self, id=None, title=None, para=None, sect2=None, internal=None, mixedclass_=None, content_=None): self.id = id if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docSect1Type.subclass: return docSect1Type.subclass(*args_, **kwargs_) else: return docSect1Type(*args_, **kwargs_) factory = staticmethod(factory) def get_title(self): return self.title def set_title(self, title): self.title = title def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_sect2(self): return self.sect2 def set_sect2(self, sect2): self.sect2 = sect2 def add_sect2(self, value): self.sect2.append(value) def insert_sect2(self, index, value): self.sect2[index] = value def get_internal(self): return self.internal def set_internal(self, internal): self.internal = internal def get_id(self): return self.id def set_id(self, id): self.id = id def export(self, outfile, level, namespace_='', name_='docSect1Type', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docSect1Type') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docSect1Type'): if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='docSect1Type'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.title is not None or self.para is not None or self.sect2 is not None or self.internal is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docSect1Type'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'title': childobj_ = docTitleType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'title', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'sect2': childobj_ = docSect2Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'sect2', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'internal': childobj_ = docInternalS1Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'internal', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docSect1Type class docSect2Type(GeneratedsSuper): subclass = None superclass = None def __init__(self, id=None, title=None, para=None, sect3=None, internal=None, mixedclass_=None, content_=None): self.id = id if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docSect2Type.subclass: return docSect2Type.subclass(*args_, **kwargs_) else: return docSect2Type(*args_, **kwargs_) factory = staticmethod(factory) def get_title(self): return self.title def set_title(self, title): self.title = title def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_sect3(self): return self.sect3 def set_sect3(self, sect3): self.sect3 = sect3 def add_sect3(self, value): self.sect3.append(value) def insert_sect3(self, index, value): self.sect3[index] = value def get_internal(self): return self.internal def set_internal(self, internal): self.internal = internal def get_id(self): return self.id def set_id(self, id): self.id = id def export(self, outfile, level, namespace_='', name_='docSect2Type', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docSect2Type') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docSect2Type'): if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='docSect2Type'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.title is not None or self.para is not None or self.sect3 is not None or self.internal is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docSect2Type'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'title': childobj_ = docTitleType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'title', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'sect3': childobj_ = docSect3Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'sect3', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'internal': childobj_ = docInternalS2Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'internal', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docSect2Type class docSect3Type(GeneratedsSuper): subclass = None superclass = None def __init__(self, id=None, title=None, para=None, sect4=None, internal=None, mixedclass_=None, content_=None): self.id = id if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docSect3Type.subclass: return docSect3Type.subclass(*args_, **kwargs_) else: return docSect3Type(*args_, **kwargs_) factory = staticmethod(factory) def get_title(self): return self.title def set_title(self, title): self.title = title def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_sect4(self): return self.sect4 def set_sect4(self, sect4): self.sect4 = sect4 def add_sect4(self, value): self.sect4.append(value) def insert_sect4(self, index, value): self.sect4[index] = value def get_internal(self): return self.internal def set_internal(self, internal): self.internal = internal def get_id(self): return self.id def set_id(self, id): self.id = id def export(self, outfile, level, namespace_='', name_='docSect3Type', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docSect3Type') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docSect3Type'): if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='docSect3Type'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.title is not None or self.para is not None or self.sect4 is not None or self.internal is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docSect3Type'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'title': childobj_ = docTitleType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'title', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'sect4': childobj_ = docSect4Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'sect4', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'internal': childobj_ = docInternalS3Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'internal', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docSect3Type class docSect4Type(GeneratedsSuper): subclass = None superclass = None def __init__(self, id=None, title=None, para=None, internal=None, mixedclass_=None, content_=None): self.id = id if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docSect4Type.subclass: return docSect4Type.subclass(*args_, **kwargs_) else: return docSect4Type(*args_, **kwargs_) factory = staticmethod(factory) def get_title(self): return self.title def set_title(self, title): self.title = title def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_internal(self): return self.internal def set_internal(self, internal): self.internal = internal def get_id(self): return self.id def set_id(self, id): self.id = id def export(self, outfile, level, namespace_='', name_='docSect4Type', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docSect4Type') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docSect4Type'): if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='docSect4Type'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.title is not None or self.para is not None or self.internal is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docSect4Type'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'title': childobj_ = docTitleType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'title', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'internal': childobj_ = docInternalS4Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'internal', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docSect4Type class docInternalType(GeneratedsSuper): subclass = None superclass = None def __init__(self, para=None, sect1=None, mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docInternalType.subclass: return docInternalType.subclass(*args_, **kwargs_) else: return docInternalType(*args_, **kwargs_) factory = staticmethod(factory) def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_sect1(self): return self.sect1 def set_sect1(self, sect1): self.sect1 = sect1 def add_sect1(self, value): self.sect1.append(value) def insert_sect1(self, index, value): self.sect1[index] = value def export(self, outfile, level, namespace_='', name_='docInternalType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docInternalType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docInternalType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docInternalType'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.para is not None or self.sect1 is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docInternalType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'sect1': childobj_ = docSect1Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'sect1', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docInternalType class docInternalS1Type(GeneratedsSuper): subclass = None superclass = None def __init__(self, para=None, sect2=None, mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docInternalS1Type.subclass: return docInternalS1Type.subclass(*args_, **kwargs_) else: return docInternalS1Type(*args_, **kwargs_) factory = staticmethod(factory) def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_sect2(self): return self.sect2 def set_sect2(self, sect2): self.sect2 = sect2 def add_sect2(self, value): self.sect2.append(value) def insert_sect2(self, index, value): self.sect2[index] = value def export(self, outfile, level, namespace_='', name_='docInternalS1Type', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docInternalS1Type') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docInternalS1Type'): pass def exportChildren(self, outfile, level, namespace_='', name_='docInternalS1Type'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.para is not None or self.sect2 is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docInternalS1Type'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'sect2': childobj_ = docSect2Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'sect2', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docInternalS1Type class docInternalS2Type(GeneratedsSuper): subclass = None superclass = None def __init__(self, para=None, sect3=None, mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docInternalS2Type.subclass: return docInternalS2Type.subclass(*args_, **kwargs_) else: return docInternalS2Type(*args_, **kwargs_) factory = staticmethod(factory) def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_sect3(self): return self.sect3 def set_sect3(self, sect3): self.sect3 = sect3 def add_sect3(self, value): self.sect3.append(value) def insert_sect3(self, index, value): self.sect3[index] = value def export(self, outfile, level, namespace_='', name_='docInternalS2Type', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docInternalS2Type') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docInternalS2Type'): pass def exportChildren(self, outfile, level, namespace_='', name_='docInternalS2Type'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.para is not None or self.sect3 is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docInternalS2Type'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'sect3': childobj_ = docSect3Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'sect3', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docInternalS2Type class docInternalS3Type(GeneratedsSuper): subclass = None superclass = None def __init__(self, para=None, sect3=None, mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docInternalS3Type.subclass: return docInternalS3Type.subclass(*args_, **kwargs_) else: return docInternalS3Type(*args_, **kwargs_) factory = staticmethod(factory) def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_sect3(self): return self.sect3 def set_sect3(self, sect3): self.sect3 = sect3 def add_sect3(self, value): self.sect3.append(value) def insert_sect3(self, index, value): self.sect3[index] = value def export(self, outfile, level, namespace_='', name_='docInternalS3Type', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docInternalS3Type') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docInternalS3Type'): pass def exportChildren(self, outfile, level, namespace_='', name_='docInternalS3Type'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.para is not None or self.sect3 is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docInternalS3Type'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'sect3': childobj_ = docSect4Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'sect3', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docInternalS3Type class docInternalS4Type(GeneratedsSuper): subclass = None superclass = None def __init__(self, para=None, mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docInternalS4Type.subclass: return docInternalS4Type.subclass(*args_, **kwargs_) else: return docInternalS4Type(*args_, **kwargs_) factory = staticmethod(factory) def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def export(self, outfile, level, namespace_='', name_='docInternalS4Type', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docInternalS4Type') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docInternalS4Type'): pass def exportChildren(self, outfile, level, namespace_='', name_='docInternalS4Type'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.para is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docInternalS4Type'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docInternalS4Type class docTitleType(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_='', mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docTitleType.subclass: return docTitleType.subclass(*args_, **kwargs_) else: return docTitleType(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docTitleType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docTitleType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docTitleType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docTitleType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docTitleType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docTitleType class docParaType(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_='', mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docParaType.subclass: return docParaType.subclass(*args_, **kwargs_) else: return docParaType(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docParaType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docParaType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docParaType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docParaType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docParaType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docParaType class docMarkupType(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_='', mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docMarkupType.subclass: return docMarkupType.subclass(*args_, **kwargs_) else: return docMarkupType(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docMarkupType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docMarkupType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docMarkupType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docMarkupType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docMarkupType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docMarkupType class docURLLink(GeneratedsSuper): subclass = None superclass = None def __init__(self, url=None, valueOf_='', mixedclass_=None, content_=None): self.url = url if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docURLLink.subclass: return docURLLink.subclass(*args_, **kwargs_) else: return docURLLink(*args_, **kwargs_) factory = staticmethod(factory) def get_url(self): return self.url def set_url(self, url): self.url = url def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docURLLink', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docURLLink') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docURLLink'): if self.url is not None: outfile.write(' url=%s' % (self.format_string(quote_attrib(self.url).encode(ExternalEncoding), input_name='url'), )) def exportChildren(self, outfile, level, namespace_='', name_='docURLLink'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docURLLink'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.url is not None: showIndent(outfile, level) outfile.write('url = %s,\n' % (self.url,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('url'): self.url = attrs.get('url').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docURLLink class docAnchorType(GeneratedsSuper): subclass = None superclass = None def __init__(self, id=None, valueOf_='', mixedclass_=None, content_=None): self.id = id if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docAnchorType.subclass: return docAnchorType.subclass(*args_, **kwargs_) else: return docAnchorType(*args_, **kwargs_) factory = staticmethod(factory) def get_id(self): return self.id def set_id(self, id): self.id = id def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docAnchorType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docAnchorType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docAnchorType'): if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='docAnchorType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docAnchorType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docAnchorType class docFormulaType(GeneratedsSuper): subclass = None superclass = None def __init__(self, id=None, valueOf_='', mixedclass_=None, content_=None): self.id = id if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docFormulaType.subclass: return docFormulaType.subclass(*args_, **kwargs_) else: return docFormulaType(*args_, **kwargs_) factory = staticmethod(factory) def get_id(self): return self.id def set_id(self, id): self.id = id def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docFormulaType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docFormulaType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docFormulaType'): if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='docFormulaType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docFormulaType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docFormulaType class docIndexEntryType(GeneratedsSuper): subclass = None superclass = None def __init__(self, primaryie=None, secondaryie=None): self.primaryie = primaryie self.secondaryie = secondaryie def factory(*args_, **kwargs_): if docIndexEntryType.subclass: return docIndexEntryType.subclass(*args_, **kwargs_) else: return docIndexEntryType(*args_, **kwargs_) factory = staticmethod(factory) def get_primaryie(self): return self.primaryie def set_primaryie(self, primaryie): self.primaryie = primaryie def get_secondaryie(self): return self.secondaryie def set_secondaryie(self, secondaryie): self.secondaryie = secondaryie def export(self, outfile, level, namespace_='', name_='docIndexEntryType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docIndexEntryType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docIndexEntryType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docIndexEntryType'): if self.primaryie is not None: showIndent(outfile, level) outfile.write('<%sprimaryie>%s\n' % (namespace_, self.format_string(quote_xml(self.primaryie).encode(ExternalEncoding), input_name='primaryie'), namespace_)) if self.secondaryie is not None: showIndent(outfile, level) outfile.write('<%ssecondaryie>%s\n' % (namespace_, self.format_string(quote_xml(self.secondaryie).encode(ExternalEncoding), input_name='secondaryie'), namespace_)) def hasContent_(self): if ( self.primaryie is not None or self.secondaryie is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docIndexEntryType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('primaryie=%s,\n' % quote_python(self.primaryie).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('secondaryie=%s,\n' % quote_python(self.secondaryie).encode(ExternalEncoding)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'primaryie': primaryie_ = '' for text__content_ in child_.childNodes: primaryie_ += text__content_.nodeValue self.primaryie = primaryie_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'secondaryie': secondaryie_ = '' for text__content_ in child_.childNodes: secondaryie_ += text__content_.nodeValue self.secondaryie = secondaryie_ # end class docIndexEntryType class docListType(GeneratedsSuper): subclass = None superclass = None def __init__(self, listitem=None): if listitem is None: self.listitem = [] else: self.listitem = listitem def factory(*args_, **kwargs_): if docListType.subclass: return docListType.subclass(*args_, **kwargs_) else: return docListType(*args_, **kwargs_) factory = staticmethod(factory) def get_listitem(self): return self.listitem def set_listitem(self, listitem): self.listitem = listitem def add_listitem(self, value): self.listitem.append(value) def insert_listitem(self, index, value): self.listitem[index] = value def export(self, outfile, level, namespace_='', name_='docListType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docListType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docListType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docListType'): for listitem_ in self.listitem: listitem_.export(outfile, level, namespace_, name_='listitem') def hasContent_(self): if ( self.listitem is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docListType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('listitem=[\n') level += 1 for listitem in self.listitem: showIndent(outfile, level) outfile.write('model_.listitem(\n') listitem.exportLiteral(outfile, level, name_='listitem') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'listitem': obj_ = docListItemType.factory() obj_.build(child_) self.listitem.append(obj_) # end class docListType class docListItemType(GeneratedsSuper): subclass = None superclass = None def __init__(self, para=None): if para is None: self.para = [] else: self.para = para def factory(*args_, **kwargs_): if docListItemType.subclass: return docListItemType.subclass(*args_, **kwargs_) else: return docListItemType(*args_, **kwargs_) factory = staticmethod(factory) def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def export(self, outfile, level, namespace_='', name_='docListItemType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docListItemType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docListItemType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docListItemType'): for para_ in self.para: para_.export(outfile, level, namespace_, name_='para') def hasContent_(self): if ( self.para is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docListItemType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('para=[\n') level += 1 for para in self.para: showIndent(outfile, level) outfile.write('model_.para(\n') para.exportLiteral(outfile, level, name_='para') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': obj_ = docParaType.factory() obj_.build(child_) self.para.append(obj_) # end class docListItemType class docSimpleSectType(GeneratedsSuper): subclass = None superclass = None def __init__(self, kind=None, title=None, para=None): self.kind = kind self.title = title if para is None: self.para = [] else: self.para = para def factory(*args_, **kwargs_): if docSimpleSectType.subclass: return docSimpleSectType.subclass(*args_, **kwargs_) else: return docSimpleSectType(*args_, **kwargs_) factory = staticmethod(factory) def get_title(self): return self.title def set_title(self, title): self.title = title def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_kind(self): return self.kind def set_kind(self, kind): self.kind = kind def export(self, outfile, level, namespace_='', name_='docSimpleSectType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docSimpleSectType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docSimpleSectType'): if self.kind is not None: outfile.write(' kind=%s' % (quote_attrib(self.kind), )) def exportChildren(self, outfile, level, namespace_='', name_='docSimpleSectType'): if self.title: self.title.export(outfile, level, namespace_, name_='title') for para_ in self.para: para_.export(outfile, level, namespace_, name_='para') def hasContent_(self): if ( self.title is not None or self.para is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docSimpleSectType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.kind is not None: showIndent(outfile, level) outfile.write('kind = "%s",\n' % (self.kind,)) def exportLiteralChildren(self, outfile, level, name_): if self.title: showIndent(outfile, level) outfile.write('title=model_.docTitleType(\n') self.title.exportLiteral(outfile, level, name_='title') showIndent(outfile, level) outfile.write('),\n') showIndent(outfile, level) outfile.write('para=[\n') level += 1 for para in self.para: showIndent(outfile, level) outfile.write('model_.para(\n') para.exportLiteral(outfile, level, name_='para') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('kind'): self.kind = attrs.get('kind').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'title': obj_ = docTitleType.factory() obj_.build(child_) self.set_title(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': obj_ = docParaType.factory() obj_.build(child_) self.para.append(obj_) # end class docSimpleSectType class docVarListEntryType(GeneratedsSuper): subclass = None superclass = None def __init__(self, term=None): self.term = term def factory(*args_, **kwargs_): if docVarListEntryType.subclass: return docVarListEntryType.subclass(*args_, **kwargs_) else: return docVarListEntryType(*args_, **kwargs_) factory = staticmethod(factory) def get_term(self): return self.term def set_term(self, term): self.term = term def export(self, outfile, level, namespace_='', name_='docVarListEntryType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docVarListEntryType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docVarListEntryType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docVarListEntryType'): if self.term: self.term.export(outfile, level, namespace_, name_='term', ) def hasContent_(self): if ( self.term is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docVarListEntryType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): if self.term: showIndent(outfile, level) outfile.write('term=model_.docTitleType(\n') self.term.exportLiteral(outfile, level, name_='term') showIndent(outfile, level) outfile.write('),\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'term': obj_ = docTitleType.factory() obj_.build(child_) self.set_term(obj_) # end class docVarListEntryType class docVariableListType(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if docVariableListType.subclass: return docVariableListType.subclass(*args_, **kwargs_) else: return docVariableListType(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docVariableListType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docVariableListType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docVariableListType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docVariableListType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docVariableListType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docVariableListType class docRefTextType(GeneratedsSuper): subclass = None superclass = None def __init__(self, refid=None, kindref=None, external=None, valueOf_='', mixedclass_=None, content_=None): self.refid = refid self.kindref = kindref self.external = external if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docRefTextType.subclass: return docRefTextType.subclass(*args_, **kwargs_) else: return docRefTextType(*args_, **kwargs_) factory = staticmethod(factory) def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def get_kindref(self): return self.kindref def set_kindref(self, kindref): self.kindref = kindref def get_external(self): return self.external def set_external(self, external): self.external = external def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docRefTextType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docRefTextType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docRefTextType'): if self.refid is not None: outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) if self.kindref is not None: outfile.write(' kindref=%s' % (quote_attrib(self.kindref), )) if self.external is not None: outfile.write(' external=%s' % (self.format_string(quote_attrib(self.external).encode(ExternalEncoding), input_name='external'), )) def exportChildren(self, outfile, level, namespace_='', name_='docRefTextType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docRefTextType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) if self.kindref is not None: showIndent(outfile, level) outfile.write('kindref = "%s",\n' % (self.kindref,)) if self.external is not None: showIndent(outfile, level) outfile.write('external = %s,\n' % (self.external,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('refid'): self.refid = attrs.get('refid').value if attrs.get('kindref'): self.kindref = attrs.get('kindref').value if attrs.get('external'): self.external = attrs.get('external').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docRefTextType class docTableType(GeneratedsSuper): subclass = None superclass = None def __init__(self, rows=None, cols=None, row=None, caption=None): self.rows = rows self.cols = cols if row is None: self.row = [] else: self.row = row self.caption = caption def factory(*args_, **kwargs_): if docTableType.subclass: return docTableType.subclass(*args_, **kwargs_) else: return docTableType(*args_, **kwargs_) factory = staticmethod(factory) def get_row(self): return self.row def set_row(self, row): self.row = row def add_row(self, value): self.row.append(value) def insert_row(self, index, value): self.row[index] = value def get_caption(self): return self.caption def set_caption(self, caption): self.caption = caption def get_rows(self): return self.rows def set_rows(self, rows): self.rows = rows def get_cols(self): return self.cols def set_cols(self, cols): self.cols = cols def export(self, outfile, level, namespace_='', name_='docTableType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docTableType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docTableType'): if self.rows is not None: outfile.write(' rows="%s"' % self.format_integer(self.rows, input_name='rows')) if self.cols is not None: outfile.write(' cols="%s"' % self.format_integer(self.cols, input_name='cols')) def exportChildren(self, outfile, level, namespace_='', name_='docTableType'): for row_ in self.row: row_.export(outfile, level, namespace_, name_='row') if self.caption: self.caption.export(outfile, level, namespace_, name_='caption') def hasContent_(self): if ( self.row is not None or self.caption is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docTableType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.rows is not None: showIndent(outfile, level) outfile.write('rows = %s,\n' % (self.rows,)) if self.cols is not None: showIndent(outfile, level) outfile.write('cols = %s,\n' % (self.cols,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('row=[\n') level += 1 for row in self.row: showIndent(outfile, level) outfile.write('model_.row(\n') row.exportLiteral(outfile, level, name_='row') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') if self.caption: showIndent(outfile, level) outfile.write('caption=model_.docCaptionType(\n') self.caption.exportLiteral(outfile, level, name_='caption') showIndent(outfile, level) outfile.write('),\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('rows'): try: self.rows = int(attrs.get('rows').value) except ValueError as exp: raise ValueError('Bad integer attribute (rows): %s' % exp) if attrs.get('cols'): try: self.cols = int(attrs.get('cols').value) except ValueError as exp: raise ValueError('Bad integer attribute (cols): %s' % exp) def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'row': obj_ = docRowType.factory() obj_.build(child_) self.row.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'caption': obj_ = docCaptionType.factory() obj_.build(child_) self.set_caption(obj_) # end class docTableType class docRowType(GeneratedsSuper): subclass = None superclass = None def __init__(self, entry=None): if entry is None: self.entry = [] else: self.entry = entry def factory(*args_, **kwargs_): if docRowType.subclass: return docRowType.subclass(*args_, **kwargs_) else: return docRowType(*args_, **kwargs_) factory = staticmethod(factory) def get_entry(self): return self.entry def set_entry(self, entry): self.entry = entry def add_entry(self, value): self.entry.append(value) def insert_entry(self, index, value): self.entry[index] = value def export(self, outfile, level, namespace_='', name_='docRowType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docRowType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docRowType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docRowType'): for entry_ in self.entry: entry_.export(outfile, level, namespace_, name_='entry') def hasContent_(self): if ( self.entry is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docRowType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('entry=[\n') level += 1 for entry in self.entry: showIndent(outfile, level) outfile.write('model_.entry(\n') entry.exportLiteral(outfile, level, name_='entry') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'entry': obj_ = docEntryType.factory() obj_.build(child_) self.entry.append(obj_) # end class docRowType class docEntryType(GeneratedsSuper): subclass = None superclass = None def __init__(self, thead=None, para=None): self.thead = thead if para is None: self.para = [] else: self.para = para def factory(*args_, **kwargs_): if docEntryType.subclass: return docEntryType.subclass(*args_, **kwargs_) else: return docEntryType(*args_, **kwargs_) factory = staticmethod(factory) def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_thead(self): return self.thead def set_thead(self, thead): self.thead = thead def export(self, outfile, level, namespace_='', name_='docEntryType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docEntryType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docEntryType'): if self.thead is not None: outfile.write(' thead=%s' % (quote_attrib(self.thead), )) def exportChildren(self, outfile, level, namespace_='', name_='docEntryType'): for para_ in self.para: para_.export(outfile, level, namespace_, name_='para') def hasContent_(self): if ( self.para is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docEntryType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.thead is not None: showIndent(outfile, level) outfile.write('thead = "%s",\n' % (self.thead,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('para=[\n') level += 1 for para in self.para: showIndent(outfile, level) outfile.write('model_.para(\n') para.exportLiteral(outfile, level, name_='para') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('thead'): self.thead = attrs.get('thead').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': obj_ = docParaType.factory() obj_.build(child_) self.para.append(obj_) # end class docEntryType class docCaptionType(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_='', mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docCaptionType.subclass: return docCaptionType.subclass(*args_, **kwargs_) else: return docCaptionType(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docCaptionType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docCaptionType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docCaptionType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docCaptionType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docCaptionType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docCaptionType class docHeadingType(GeneratedsSuper): subclass = None superclass = None def __init__(self, level=None, valueOf_='', mixedclass_=None, content_=None): self.level = level if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docHeadingType.subclass: return docHeadingType.subclass(*args_, **kwargs_) else: return docHeadingType(*args_, **kwargs_) factory = staticmethod(factory) def get_level(self): return self.level def set_level(self, level): self.level = level def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docHeadingType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docHeadingType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docHeadingType'): if self.level is not None: outfile.write(' level="%s"' % self.format_integer(self.level, input_name='level')) def exportChildren(self, outfile, level, namespace_='', name_='docHeadingType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docHeadingType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.level is not None: showIndent(outfile, level) outfile.write('level = %s,\n' % (self.level,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('level'): try: self.level = int(attrs.get('level').value) except ValueError as exp: raise ValueError('Bad integer attribute (level): %s' % exp) def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docHeadingType class docImageType(GeneratedsSuper): subclass = None superclass = None def __init__(self, width=None, type_=None, name=None, height=None, valueOf_='', mixedclass_=None, content_=None): self.width = width self.type_ = type_ self.name = name self.height = height if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docImageType.subclass: return docImageType.subclass(*args_, **kwargs_) else: return docImageType(*args_, **kwargs_) factory = staticmethod(factory) def get_width(self): return self.width def set_width(self, width): self.width = width def get_type(self): return self.type_ def set_type(self, type_): self.type_ = type_ def get_name(self): return self.name def set_name(self, name): self.name = name def get_height(self): return self.height def set_height(self, height): self.height = height def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docImageType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docImageType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docImageType'): if self.width is not None: outfile.write(' width=%s' % (self.format_string(quote_attrib(self.width).encode(ExternalEncoding), input_name='width'), )) if self.type_ is not None: outfile.write(' type=%s' % (quote_attrib(self.type_), )) if self.name is not None: outfile.write(' name=%s' % (self.format_string(quote_attrib(self.name).encode(ExternalEncoding), input_name='name'), )) if self.height is not None: outfile.write(' height=%s' % (self.format_string(quote_attrib(self.height).encode(ExternalEncoding), input_name='height'), )) def exportChildren(self, outfile, level, namespace_='', name_='docImageType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docImageType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.width is not None: showIndent(outfile, level) outfile.write('width = %s,\n' % (self.width,)) if self.type_ is not None: showIndent(outfile, level) outfile.write('type_ = "%s",\n' % (self.type_,)) if self.name is not None: showIndent(outfile, level) outfile.write('name = %s,\n' % (self.name,)) if self.height is not None: showIndent(outfile, level) outfile.write('height = %s,\n' % (self.height,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('width'): self.width = attrs.get('width').value if attrs.get('type'): self.type_ = attrs.get('type').value if attrs.get('name'): self.name = attrs.get('name').value if attrs.get('height'): self.height = attrs.get('height').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docImageType class docDotFileType(GeneratedsSuper): subclass = None superclass = None def __init__(self, name=None, valueOf_='', mixedclass_=None, content_=None): self.name = name if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docDotFileType.subclass: return docDotFileType.subclass(*args_, **kwargs_) else: return docDotFileType(*args_, **kwargs_) factory = staticmethod(factory) def get_name(self): return self.name def set_name(self, name): self.name = name def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docDotFileType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docDotFileType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docDotFileType'): if self.name is not None: outfile.write(' name=%s' % (self.format_string(quote_attrib(self.name).encode(ExternalEncoding), input_name='name'), )) def exportChildren(self, outfile, level, namespace_='', name_='docDotFileType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docDotFileType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.name is not None: showIndent(outfile, level) outfile.write('name = %s,\n' % (self.name,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('name'): self.name = attrs.get('name').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docDotFileType class docTocItemType(GeneratedsSuper): subclass = None superclass = None def __init__(self, id=None, valueOf_='', mixedclass_=None, content_=None): self.id = id if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docTocItemType.subclass: return docTocItemType.subclass(*args_, **kwargs_) else: return docTocItemType(*args_, **kwargs_) factory = staticmethod(factory) def get_id(self): return self.id def set_id(self, id): self.id = id def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docTocItemType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docTocItemType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docTocItemType'): if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='docTocItemType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docTocItemType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docTocItemType class docTocListType(GeneratedsSuper): subclass = None superclass = None def __init__(self, tocitem=None): if tocitem is None: self.tocitem = [] else: self.tocitem = tocitem def factory(*args_, **kwargs_): if docTocListType.subclass: return docTocListType.subclass(*args_, **kwargs_) else: return docTocListType(*args_, **kwargs_) factory = staticmethod(factory) def get_tocitem(self): return self.tocitem def set_tocitem(self, tocitem): self.tocitem = tocitem def add_tocitem(self, value): self.tocitem.append(value) def insert_tocitem(self, index, value): self.tocitem[index] = value def export(self, outfile, level, namespace_='', name_='docTocListType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docTocListType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docTocListType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docTocListType'): for tocitem_ in self.tocitem: tocitem_.export(outfile, level, namespace_, name_='tocitem') def hasContent_(self): if ( self.tocitem is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docTocListType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('tocitem=[\n') level += 1 for tocitem in self.tocitem: showIndent(outfile, level) outfile.write('model_.tocitem(\n') tocitem.exportLiteral(outfile, level, name_='tocitem') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'tocitem': obj_ = docTocItemType.factory() obj_.build(child_) self.tocitem.append(obj_) # end class docTocListType class docLanguageType(GeneratedsSuper): subclass = None superclass = None def __init__(self, langid=None, para=None): self.langid = langid if para is None: self.para = [] else: self.para = para def factory(*args_, **kwargs_): if docLanguageType.subclass: return docLanguageType.subclass(*args_, **kwargs_) else: return docLanguageType(*args_, **kwargs_) factory = staticmethod(factory) def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_langid(self): return self.langid def set_langid(self, langid): self.langid = langid def export(self, outfile, level, namespace_='', name_='docLanguageType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docLanguageType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docLanguageType'): if self.langid is not None: outfile.write(' langid=%s' % (self.format_string(quote_attrib(self.langid).encode(ExternalEncoding), input_name='langid'), )) def exportChildren(self, outfile, level, namespace_='', name_='docLanguageType'): for para_ in self.para: para_.export(outfile, level, namespace_, name_='para') def hasContent_(self): if ( self.para is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docLanguageType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.langid is not None: showIndent(outfile, level) outfile.write('langid = %s,\n' % (self.langid,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('para=[\n') level += 1 for para in self.para: showIndent(outfile, level) outfile.write('model_.para(\n') para.exportLiteral(outfile, level, name_='para') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('langid'): self.langid = attrs.get('langid').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': obj_ = docParaType.factory() obj_.build(child_) self.para.append(obj_) # end class docLanguageType class docParamListType(GeneratedsSuper): subclass = None superclass = None def __init__(self, kind=None, parameteritem=None): self.kind = kind if parameteritem is None: self.parameteritem = [] else: self.parameteritem = parameteritem def factory(*args_, **kwargs_): if docParamListType.subclass: return docParamListType.subclass(*args_, **kwargs_) else: return docParamListType(*args_, **kwargs_) factory = staticmethod(factory) def get_parameteritem(self): return self.parameteritem def set_parameteritem(self, parameteritem): self.parameteritem = parameteritem def add_parameteritem(self, value): self.parameteritem.append(value) def insert_parameteritem(self, index, value): self.parameteritem[index] = value def get_kind(self): return self.kind def set_kind(self, kind): self.kind = kind def export(self, outfile, level, namespace_='', name_='docParamListType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docParamListType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docParamListType'): if self.kind is not None: outfile.write(' kind=%s' % (quote_attrib(self.kind), )) def exportChildren(self, outfile, level, namespace_='', name_='docParamListType'): for parameteritem_ in self.parameteritem: parameteritem_.export(outfile, level, namespace_, name_='parameteritem') def hasContent_(self): if ( self.parameteritem is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docParamListType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.kind is not None: showIndent(outfile, level) outfile.write('kind = "%s",\n' % (self.kind,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('parameteritem=[\n') level += 1 for parameteritem in self.parameteritem: showIndent(outfile, level) outfile.write('model_.parameteritem(\n') parameteritem.exportLiteral(outfile, level, name_='parameteritem') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('kind'): self.kind = attrs.get('kind').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'parameteritem': obj_ = docParamListItem.factory() obj_.build(child_) self.parameteritem.append(obj_) # end class docParamListType class docParamListItem(GeneratedsSuper): subclass = None superclass = None def __init__(self, parameternamelist=None, parameterdescription=None): if parameternamelist is None: self.parameternamelist = [] else: self.parameternamelist = parameternamelist self.parameterdescription = parameterdescription def factory(*args_, **kwargs_): if docParamListItem.subclass: return docParamListItem.subclass(*args_, **kwargs_) else: return docParamListItem(*args_, **kwargs_) factory = staticmethod(factory) def get_parameternamelist(self): return self.parameternamelist def set_parameternamelist(self, parameternamelist): self.parameternamelist = parameternamelist def add_parameternamelist(self, value): self.parameternamelist.append(value) def insert_parameternamelist(self, index, value): self.parameternamelist[index] = value def get_parameterdescription(self): return self.parameterdescription def set_parameterdescription(self, parameterdescription): self.parameterdescription = parameterdescription def export(self, outfile, level, namespace_='', name_='docParamListItem', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docParamListItem') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docParamListItem'): pass def exportChildren(self, outfile, level, namespace_='', name_='docParamListItem'): for parameternamelist_ in self.parameternamelist: parameternamelist_.export(outfile, level, namespace_, name_='parameternamelist') if self.parameterdescription: self.parameterdescription.export(outfile, level, namespace_, name_='parameterdescription', ) def hasContent_(self): if ( self.parameternamelist is not None or self.parameterdescription is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docParamListItem'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('parameternamelist=[\n') level += 1 for parameternamelist in self.parameternamelist: showIndent(outfile, level) outfile.write('model_.parameternamelist(\n') parameternamelist.exportLiteral(outfile, level, name_='parameternamelist') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') if self.parameterdescription: showIndent(outfile, level) outfile.write('parameterdescription=model_.descriptionType(\n') self.parameterdescription.exportLiteral(outfile, level, name_='parameterdescription') showIndent(outfile, level) outfile.write('),\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'parameternamelist': obj_ = docParamNameList.factory() obj_.build(child_) self.parameternamelist.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'parameterdescription': obj_ = descriptionType.factory() obj_.build(child_) self.set_parameterdescription(obj_) # end class docParamListItem class docParamNameList(GeneratedsSuper): subclass = None superclass = None def __init__(self, parametername=None): if parametername is None: self.parametername = [] else: self.parametername = parametername def factory(*args_, **kwargs_): if docParamNameList.subclass: return docParamNameList.subclass(*args_, **kwargs_) else: return docParamNameList(*args_, **kwargs_) factory = staticmethod(factory) def get_parametername(self): return self.parametername def set_parametername(self, parametername): self.parametername = parametername def add_parametername(self, value): self.parametername.append(value) def insert_parametername(self, index, value): self.parametername[index] = value def export(self, outfile, level, namespace_='', name_='docParamNameList', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docParamNameList') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docParamNameList'): pass def exportChildren(self, outfile, level, namespace_='', name_='docParamNameList'): for parametername_ in self.parametername: parametername_.export(outfile, level, namespace_, name_='parametername') def hasContent_(self): if ( self.parametername is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docParamNameList'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('parametername=[\n') level += 1 for parametername in self.parametername: showIndent(outfile, level) outfile.write('model_.parametername(\n') parametername.exportLiteral(outfile, level, name_='parametername') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'parametername': obj_ = docParamName.factory() obj_.build(child_) self.parametername.append(obj_) # end class docParamNameList class docParamName(GeneratedsSuper): subclass = None superclass = None def __init__(self, direction=None, ref=None, mixedclass_=None, content_=None): self.direction = direction if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docParamName.subclass: return docParamName.subclass(*args_, **kwargs_) else: return docParamName(*args_, **kwargs_) factory = staticmethod(factory) def get_ref(self): return self.ref def set_ref(self, ref): self.ref = ref def get_direction(self): return self.direction def set_direction(self, direction): self.direction = direction def export(self, outfile, level, namespace_='', name_='docParamName', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docParamName') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docParamName'): if self.direction is not None: outfile.write(' direction=%s' % (quote_attrib(self.direction), )) def exportChildren(self, outfile, level, namespace_='', name_='docParamName'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.ref is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docParamName'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.direction is not None: showIndent(outfile, level) outfile.write('direction = "%s",\n' % (self.direction,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('direction'): self.direction = attrs.get('direction').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'ref': childobj_ = docRefTextType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'ref', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docParamName class docXRefSectType(GeneratedsSuper): subclass = None superclass = None def __init__(self, id=None, xreftitle=None, xrefdescription=None): self.id = id if xreftitle is None: self.xreftitle = [] else: self.xreftitle = xreftitle self.xrefdescription = xrefdescription def factory(*args_, **kwargs_): if docXRefSectType.subclass: return docXRefSectType.subclass(*args_, **kwargs_) else: return docXRefSectType(*args_, **kwargs_) factory = staticmethod(factory) def get_xreftitle(self): return self.xreftitle def set_xreftitle(self, xreftitle): self.xreftitle = xreftitle def add_xreftitle(self, value): self.xreftitle.append(value) def insert_xreftitle(self, index, value): self.xreftitle[index] = value def get_xrefdescription(self): return self.xrefdescription def set_xrefdescription(self, xrefdescription): self.xrefdescription = xrefdescription def get_id(self): return self.id def set_id(self, id): self.id = id def export(self, outfile, level, namespace_='', name_='docXRefSectType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docXRefSectType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docXRefSectType'): if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='docXRefSectType'): for xreftitle_ in self.xreftitle: showIndent(outfile, level) outfile.write('<%sxreftitle>%s\n' % (namespace_, self.format_string(quote_xml(xreftitle_).encode(ExternalEncoding), input_name='xreftitle'), namespace_)) if self.xrefdescription: self.xrefdescription.export(outfile, level, namespace_, name_='xrefdescription', ) def hasContent_(self): if ( self.xreftitle is not None or self.xrefdescription is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docXRefSectType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('xreftitle=[\n') level += 1 for xreftitle in self.xreftitle: showIndent(outfile, level) outfile.write('%s,\n' % quote_python(xreftitle).encode(ExternalEncoding)) level -= 1 showIndent(outfile, level) outfile.write('],\n') if self.xrefdescription: showIndent(outfile, level) outfile.write('xrefdescription=model_.descriptionType(\n') self.xrefdescription.exportLiteral(outfile, level, name_='xrefdescription') showIndent(outfile, level) outfile.write('),\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'xreftitle': xreftitle_ = '' for text__content_ in child_.childNodes: xreftitle_ += text__content_.nodeValue self.xreftitle.append(xreftitle_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'xrefdescription': obj_ = descriptionType.factory() obj_.build(child_) self.set_xrefdescription(obj_) # end class docXRefSectType class docCopyType(GeneratedsSuper): subclass = None superclass = None def __init__(self, link=None, para=None, sect1=None, internal=None): self.link = link if para is None: self.para = [] else: self.para = para if sect1 is None: self.sect1 = [] else: self.sect1 = sect1 self.internal = internal def factory(*args_, **kwargs_): if docCopyType.subclass: return docCopyType.subclass(*args_, **kwargs_) else: return docCopyType(*args_, **kwargs_) factory = staticmethod(factory) def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_sect1(self): return self.sect1 def set_sect1(self, sect1): self.sect1 = sect1 def add_sect1(self, value): self.sect1.append(value) def insert_sect1(self, index, value): self.sect1[index] = value def get_internal(self): return self.internal def set_internal(self, internal): self.internal = internal def get_link(self): return self.link def set_link(self, link): self.link = link def export(self, outfile, level, namespace_='', name_='docCopyType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docCopyType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docCopyType'): if self.link is not None: outfile.write(' link=%s' % (self.format_string(quote_attrib(self.link).encode(ExternalEncoding), input_name='link'), )) def exportChildren(self, outfile, level, namespace_='', name_='docCopyType'): for para_ in self.para: para_.export(outfile, level, namespace_, name_='para') for sect1_ in self.sect1: sect1_.export(outfile, level, namespace_, name_='sect1') if self.internal: self.internal.export(outfile, level, namespace_, name_='internal') def hasContent_(self): if ( self.para is not None or self.sect1 is not None or self.internal is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docCopyType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.link is not None: showIndent(outfile, level) outfile.write('link = %s,\n' % (self.link,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('para=[\n') level += 1 for para in self.para: showIndent(outfile, level) outfile.write('model_.para(\n') para.exportLiteral(outfile, level, name_='para') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('sect1=[\n') level += 1 for sect1 in self.sect1: showIndent(outfile, level) outfile.write('model_.sect1(\n') sect1.exportLiteral(outfile, level, name_='sect1') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') if self.internal: showIndent(outfile, level) outfile.write('internal=model_.docInternalType(\n') self.internal.exportLiteral(outfile, level, name_='internal') showIndent(outfile, level) outfile.write('),\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('link'): self.link = attrs.get('link').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': obj_ = docParaType.factory() obj_.build(child_) self.para.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'sect1': obj_ = docSect1Type.factory() obj_.build(child_) self.sect1.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'internal': obj_ = docInternalType.factory() obj_.build(child_) self.set_internal(obj_) # end class docCopyType class docCharType(GeneratedsSuper): subclass = None superclass = None def __init__(self, char=None, valueOf_=''): self.char = char self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if docCharType.subclass: return docCharType.subclass(*args_, **kwargs_) else: return docCharType(*args_, **kwargs_) factory = staticmethod(factory) def get_char(self): return self.char def set_char(self, char): self.char = char def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docCharType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docCharType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docCharType'): if self.char is not None: outfile.write(' char=%s' % (quote_attrib(self.char), )) def exportChildren(self, outfile, level, namespace_='', name_='docCharType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docCharType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.char is not None: showIndent(outfile, level) outfile.write('char = "%s",\n' % (self.char,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('char'): self.char = attrs.get('char').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docCharType class docEmptyType(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if docEmptyType.subclass: return docEmptyType.subclass(*args_, **kwargs_) else: return docEmptyType(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docEmptyType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docEmptyType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docEmptyType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docEmptyType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docEmptyType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docEmptyType USAGE_TEXT = """ Usage: python .py [ -s ] Options: -s Use the SAX parser, not the minidom parser. """ def usage(): print(USAGE_TEXT) sys.exit(1) def parse(inFileName): doc = minidom.parse(inFileName) rootNode = doc.documentElement rootObj = DoxygenType.factory() rootObj.build(rootNode) # Enable Python to collect the space used by the DOM. doc = None sys.stdout.write('\n') rootObj.export(sys.stdout, 0, name_="doxygen", namespacedef_='') return rootObj def parseString(inString): doc = minidom.parseString(inString) rootNode = doc.documentElement rootObj = DoxygenType.factory() rootObj.build(rootNode) # Enable Python to collect the space used by the DOM. doc = None sys.stdout.write('\n') rootObj.export(sys.stdout, 0, name_="doxygen", namespacedef_='') return rootObj def parseLiteral(inFileName): doc = minidom.parse(inFileName) rootNode = doc.documentElement rootObj = DoxygenType.factory() rootObj.build(rootNode) # Enable Python to collect the space used by the DOM. doc = None sys.stdout.write('from compound import *\n\n') sys.stdout.write('rootObj = doxygen(\n') rootObj.exportLiteral(sys.stdout, 0, name_="doxygen") sys.stdout.write(')\n') return rootObj def main(): args = sys.argv[1:] if len(args) == 1: parse(args[0]) else: usage() if __name__ == '__main__': main() #import pdb #pdb.run('main()') gr-satellites-4.4.0/docs/doxygen/doxyxml/generated/index.py000066400000000000000000000036541414055407700240450ustar00rootroot00000000000000#!/usr/bin/env python """ Generated Mon Feb 9 19:08:05 2009 by generateDS.py. """ from __future__ import absolute_import from __future__ import unicode_literals from xml.dom import minidom import os import sys from . import compound from . import indexsuper as supermod class DoxygenTypeSub(supermod.DoxygenType): def __init__(self, version=None, compound=None): supermod.DoxygenType.__init__(self, version, compound) def find_compounds_and_members(self, details): """ Returns a list of all compounds and their members which match details """ results = [] for compound in self.compound: members = compound.find_members(details) if members: results.append([compound, members]) else: if details.match(compound): results.append([compound, []]) return results supermod.DoxygenType.subclass = DoxygenTypeSub # end class DoxygenTypeSub class CompoundTypeSub(supermod.CompoundType): def __init__(self, kind=None, refid=None, name='', member=None): supermod.CompoundType.__init__(self, kind, refid, name, member) def find_members(self, details): """ Returns a list of all members which match details """ results = [] for member in self.member: if details.match(member): results.append(member) return results supermod.CompoundType.subclass = CompoundTypeSub # end class CompoundTypeSub class MemberTypeSub(supermod.MemberType): def __init__(self, kind=None, refid=None, name=''): supermod.MemberType.__init__(self, kind, refid, name) supermod.MemberType.subclass = MemberTypeSub # end class MemberTypeSub def parse(inFilename): doc = minidom.parse(inFilename) rootNode = doc.documentElement rootObj = supermod.DoxygenType.factory() rootObj.build(rootNode) return rootObj gr-satellites-4.4.0/docs/doxygen/doxyxml/generated/indexsuper.py000066400000000000000000000456341414055407700251300ustar00rootroot00000000000000#!/usr/bin/env python # # Generated Thu Jun 11 18:43:54 2009 by generateDS.py. # from __future__ import print_function from __future__ import unicode_literals import sys from xml.dom import minidom from xml.dom import Node import six # # User methods # # Calls to the methods in these classes are generated by generateDS.py. # You can replace these methods by re-implementing the following class # in a module named generatedssuper.py. try: from generatedssuper import GeneratedsSuper except ImportError as exp: class GeneratedsSuper(object): def format_string(self, input_data, input_name=''): return input_data def format_integer(self, input_data, input_name=''): return '%d' % input_data def format_float(self, input_data, input_name=''): return '%f' % input_data def format_double(self, input_data, input_name=''): return '%e' % input_data def format_boolean(self, input_data, input_name=''): return '%s' % input_data # # If you have installed IPython you can uncomment and use the following. # IPython is available from http://ipython.scipy.org/. # ## from IPython.Shell import IPShellEmbed ## args = '' ## ipshell = IPShellEmbed(args, ## banner = 'Dropping into IPython', ## exit_msg = 'Leaving Interpreter, back to program.') # Then use the following line where and when you want to drop into the # IPython shell: # ipshell(' -- Entering ipshell.\nHit Ctrl-D to exit') # # Globals # ExternalEncoding = 'ascii' # # Support/utility functions. # def showIndent(outfile, level): for idx in range(level): outfile.write(' ') def quote_xml(inStr): s1 = (isinstance(inStr, six.string_types) and inStr or '%s' % inStr) s1 = s1.replace('&', '&') s1 = s1.replace('<', '<') s1 = s1.replace('>', '>') return s1 def quote_attrib(inStr): s1 = (isinstance(inStr, six.string_types) and inStr or '%s' % inStr) s1 = s1.replace('&', '&') s1 = s1.replace('<', '<') s1 = s1.replace('>', '>') if '"' in s1: if "'" in s1: s1 = '"%s"' % s1.replace('"', """) else: s1 = "'%s'" % s1 else: s1 = '"%s"' % s1 return s1 def quote_python(inStr): s1 = inStr if s1.find("'") == -1: if s1.find('\n') == -1: return "'%s'" % s1 else: return "'''%s'''" % s1 else: if s1.find('"') != -1: s1 = s1.replace('"', '\\"') if s1.find('\n') == -1: return '"%s"' % s1 else: return '"""%s"""' % s1 class MixedContainer(object): # Constants for category: CategoryNone = 0 CategoryText = 1 CategorySimple = 2 CategoryComplex = 3 # Constants for content_type: TypeNone = 0 TypeText = 1 TypeString = 2 TypeInteger = 3 TypeFloat = 4 TypeDecimal = 5 TypeDouble = 6 TypeBoolean = 7 def __init__(self, category, content_type, name, value): self.category = category self.content_type = content_type self.name = name self.value = value def getCategory(self): return self.category def getContenttype(self, content_type): return self.content_type def getValue(self): return self.value def getName(self): return self.name def export(self, outfile, level, name, namespace): if self.category == MixedContainer.CategoryText: outfile.write(self.value) elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex self.value.export(outfile, level, namespace,name) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s' % (self.name, self.value, self.name)) elif self.content_type == MixedContainer.TypeInteger or \ self.content_type == MixedContainer.TypeBoolean: outfile.write('<%s>%d' % (self.name, self.value, self.name)) elif self.content_type == MixedContainer.TypeFloat or \ self.content_type == MixedContainer.TypeDecimal: outfile.write('<%s>%f' % (self.name, self.value, self.name)) elif self.content_type == MixedContainer.TypeDouble: outfile.write('<%s>%g' % (self.name, self.value, self.name)) def exportLiteral(self, outfile, level, name): if self.category == MixedContainer.CategoryText: showIndent(outfile, level) outfile.write('MixedContainer(%d, %d, "%s", "%s"),\n' % \ (self.category, self.content_type, self.name, self.value)) elif self.category == MixedContainer.CategorySimple: showIndent(outfile, level) outfile.write('MixedContainer(%d, %d, "%s", "%s"),\n' % \ (self.category, self.content_type, self.name, self.value)) else: # category == MixedContainer.CategoryComplex showIndent(outfile, level) outfile.write('MixedContainer(%d, %d, "%s",\n' % \ (self.category, self.content_type, self.name,)) self.value.exportLiteral(outfile, level + 1) showIndent(outfile, level) outfile.write(')\n') class _MemberSpec(object): def __init__(self, name='', data_type='', container=0): self.name = name self.data_type = data_type self.container = container def set_name(self, name): self.name = name def get_name(self): return self.name def set_data_type(self, data_type): self.data_type = data_type def get_data_type(self): return self.data_type def set_container(self, container): self.container = container def get_container(self): return self.container # # Data representation classes. # class DoxygenType(GeneratedsSuper): subclass = None superclass = None def __init__(self, version=None, compound=None): self.version = version if compound is None: self.compound = [] else: self.compound = compound def factory(*args_, **kwargs_): if DoxygenType.subclass: return DoxygenType.subclass(*args_, **kwargs_) else: return DoxygenType(*args_, **kwargs_) factory = staticmethod(factory) def get_compound(self): return self.compound def set_compound(self, compound): self.compound = compound def add_compound(self, value): self.compound.append(value) def insert_compound(self, index, value): self.compound[index] = value def get_version(self): return self.version def set_version(self, version): self.version = version def export(self, outfile, level, namespace_='', name_='DoxygenType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='DoxygenType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='DoxygenType'): outfile.write(' version=%s' % (self.format_string(quote_attrib(self.version).encode(ExternalEncoding), input_name='version'), )) def exportChildren(self, outfile, level, namespace_='', name_='DoxygenType'): for compound_ in self.compound: compound_.export(outfile, level, namespace_, name_='compound') def hasContent_(self): if ( self.compound is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='DoxygenType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.version is not None: showIndent(outfile, level) outfile.write('version = %s,\n' % (self.version,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('compound=[\n') level += 1 for compound in self.compound: showIndent(outfile, level) outfile.write('model_.compound(\n') compound.exportLiteral(outfile, level, name_='compound') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('version'): self.version = attrs.get('version').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'compound': obj_ = CompoundType.factory() obj_.build(child_) self.compound.append(obj_) # end class DoxygenType class CompoundType(GeneratedsSuper): subclass = None superclass = None def __init__(self, kind=None, refid=None, name=None, member=None): self.kind = kind self.refid = refid self.name = name if member is None: self.member = [] else: self.member = member def factory(*args_, **kwargs_): if CompoundType.subclass: return CompoundType.subclass(*args_, **kwargs_) else: return CompoundType(*args_, **kwargs_) factory = staticmethod(factory) def get_name(self): return self.name def set_name(self, name): self.name = name def get_member(self): return self.member def set_member(self, member): self.member = member def add_member(self, value): self.member.append(value) def insert_member(self, index, value): self.member[index] = value def get_kind(self): return self.kind def set_kind(self, kind): self.kind = kind def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def export(self, outfile, level, namespace_='', name_='CompoundType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='CompoundType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='CompoundType'): outfile.write(' kind=%s' % (quote_attrib(self.kind), )) outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) def exportChildren(self, outfile, level, namespace_='', name_='CompoundType'): if self.name is not None: showIndent(outfile, level) outfile.write('<%sname>%s\n' % (namespace_, self.format_string(quote_xml(self.name).encode(ExternalEncoding), input_name='name'), namespace_)) for member_ in self.member: member_.export(outfile, level, namespace_, name_='member') def hasContent_(self): if ( self.name is not None or self.member is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='CompoundType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.kind is not None: showIndent(outfile, level) outfile.write('kind = "%s",\n' % (self.kind,)) if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('name=%s,\n' % quote_python(self.name).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('member=[\n') level += 1 for member in self.member: showIndent(outfile, level) outfile.write('model_.member(\n') member.exportLiteral(outfile, level, name_='member') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('kind'): self.kind = attrs.get('kind').value if attrs.get('refid'): self.refid = attrs.get('refid').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'name': name_ = '' for text__content_ in child_.childNodes: name_ += text__content_.nodeValue self.name = name_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'member': obj_ = MemberType.factory() obj_.build(child_) self.member.append(obj_) # end class CompoundType class MemberType(GeneratedsSuper): subclass = None superclass = None def __init__(self, kind=None, refid=None, name=None): self.kind = kind self.refid = refid self.name = name def factory(*args_, **kwargs_): if MemberType.subclass: return MemberType.subclass(*args_, **kwargs_) else: return MemberType(*args_, **kwargs_) factory = staticmethod(factory) def get_name(self): return self.name def set_name(self, name): self.name = name def get_kind(self): return self.kind def set_kind(self, kind): self.kind = kind def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def export(self, outfile, level, namespace_='', name_='MemberType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='MemberType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='MemberType'): outfile.write(' kind=%s' % (quote_attrib(self.kind), )) outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) def exportChildren(self, outfile, level, namespace_='', name_='MemberType'): if self.name is not None: showIndent(outfile, level) outfile.write('<%sname>%s\n' % (namespace_, self.format_string(quote_xml(self.name).encode(ExternalEncoding), input_name='name'), namespace_)) def hasContent_(self): if ( self.name is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='MemberType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.kind is not None: showIndent(outfile, level) outfile.write('kind = "%s",\n' % (self.kind,)) if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('name=%s,\n' % quote_python(self.name).encode(ExternalEncoding)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('kind'): self.kind = attrs.get('kind').value if attrs.get('refid'): self.refid = attrs.get('refid').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'name': name_ = '' for text__content_ in child_.childNodes: name_ += text__content_.nodeValue self.name = name_ # end class MemberType USAGE_TEXT = """ Usage: python .py [ -s ] Options: -s Use the SAX parser, not the minidom parser. """ def usage(): print(USAGE_TEXT) sys.exit(1) def parse(inFileName): doc = minidom.parse(inFileName) rootNode = doc.documentElement rootObj = DoxygenType.factory() rootObj.build(rootNode) # Enable Python to collect the space used by the DOM. doc = None sys.stdout.write('\n') rootObj.export(sys.stdout, 0, name_="doxygenindex", namespacedef_='') return rootObj def parseString(inString): doc = minidom.parseString(inString) rootNode = doc.documentElement rootObj = DoxygenType.factory() rootObj.build(rootNode) # Enable Python to collect the space used by the DOM. doc = None sys.stdout.write('\n') rootObj.export(sys.stdout, 0, name_="doxygenindex", namespacedef_='') return rootObj def parseLiteral(inFileName): doc = minidom.parse(inFileName) rootNode = doc.documentElement rootObj = DoxygenType.factory() rootObj.build(rootNode) # Enable Python to collect the space used by the DOM. doc = None sys.stdout.write('from index import *\n\n') sys.stdout.write('rootObj = doxygenindex(\n') rootObj.exportLiteral(sys.stdout, 0, name_="doxygenindex") sys.stdout.write(')\n') return rootObj def main(): args = sys.argv[1:] if len(args) == 1: parse(args[0]) else: usage() if __name__ == '__main__': main() #import pdb #pdb.run('main()') gr-satellites-4.4.0/docs/doxygen/doxyxml/text.py000066400000000000000000000036331414055407700217610ustar00rootroot00000000000000# # Copyright 2010 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # """ Utilities for extracting text from generated classes. """ from __future__ import unicode_literals def is_string(txt): if isinstance(txt, str): return True try: if isinstance(txt, str): return True except NameError: pass return False def description(obj): if obj is None: return None return description_bit(obj).strip() def description_bit(obj): if hasattr(obj, 'content'): contents = [description_bit(item) for item in obj.content] result = ''.join(contents) elif hasattr(obj, 'content_'): contents = [description_bit(item) for item in obj.content_] result = ''.join(contents) elif hasattr(obj, 'value'): result = description_bit(obj.value) elif is_string(obj): return obj else: raise Exception('Expecting a string or something with content, content_ or value attribute') # If this bit is a paragraph then add one some line breaks. if hasattr(obj, 'name') and obj.name == 'para': result += "\n\n" return result gr-satellites-4.4.0/docs/doxygen/other/000077500000000000000000000000001414055407700200335ustar00rootroot00000000000000gr-satellites-4.4.0/docs/doxygen/other/group_defs.dox000066400000000000000000000003311414055407700227010ustar00rootroot00000000000000/*! * \defgroup block GNU Radio SATELLITES C++ Signal Processing Blocks * \brief All C++ blocks that can be used from the SATELLITES GNU Radio * module are listed here or in the subcategories below. * */ gr-satellites-4.4.0/docs/doxygen/other/main_page.dox000066400000000000000000000004311414055407700224650ustar00rootroot00000000000000/*! \mainpage Welcome to the GNU Radio SATELLITES Block This is the intro page for the Doxygen manual generated for the SATELLITES block (docs/doxygen/other/main_page.dox). Edit it to add more detailed documentation about the new GNU Radio modules contained in this project. */ gr-satellites-4.4.0/docs/doxygen/pydoc_macros.h000066400000000000000000000014721414055407700215510ustar00rootroot00000000000000#ifndef PYDOC_MACROS_H #define PYDOC_MACROS_H #define __EXPAND(x) x #define __COUNT(_1, _2, _3, _4, _5, _6, _7, COUNT, ...) COUNT #define __VA_SIZE(...) __EXPAND(__COUNT(__VA_ARGS__, 7, 6, 5, 4, 3, 2, 1)) #define __CAT1(a, b) a##b #define __CAT2(a, b) __CAT1(a, b) #define __DOC1(n1) __doc_##n1 #define __DOC2(n1, n2) __doc_##n1##_##n2 #define __DOC3(n1, n2, n3) __doc_##n1##_##n2##_##n3 #define __DOC4(n1, n2, n3, n4) __doc_##n1##_##n2##_##n3##_##n4 #define __DOC5(n1, n2, n3, n4, n5) __doc_##n1##_##n2##_##n3##_##n4##_##n5 #define __DOC6(n1, n2, n3, n4, n5, n6) __doc_##n1##_##n2##_##n3##_##n4##_##n5##_##n6 #define __DOC7(n1, n2, n3, n4, n5, n6, n7) \ __doc_##n1##_##n2##_##n3##_##n4##_##n5##_##n6##_##n7 #define DOC(...) __EXPAND(__EXPAND(__CAT2(__DOC, __VA_SIZE(__VA_ARGS__)))(__VA_ARGS__)) #endif // PYDOC_MACROS_Hgr-satellites-4.4.0/docs/doxygen/update_pydoc.py000066400000000000000000000312601414055407700217460ustar00rootroot00000000000000# # Copyright 2010-2012 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gnuradio # # SPDX-License-Identifier: GPL-3.0-or-later # # """ Updates the *pydoc_h files for a module Execute using: python update_pydoc.py xml_path outputfilename The file instructs Pybind11 to transfer the doxygen comments into the python docstrings. """ import os, sys, time, glob, re, json from argparse import ArgumentParser from doxyxml import DoxyIndex, DoxyClass, DoxyFriend, DoxyFunction, DoxyFile from doxyxml import DoxyOther, base def py_name(name): bits = name.split('_') return '_'.join(bits[1:]) def make_name(name): bits = name.split('_') return bits[0] + '_make_' + '_'.join(bits[1:]) class Block(object): """ Checks if doxyxml produced objects correspond to a gnuradio block. """ @classmethod def includes(cls, item): if not isinstance(item, DoxyClass): return False # Check for a parsing error. if item.error(): return False friendname = make_name(item.name()) is_a_block = item.has_member(friendname, DoxyFriend) # But now sometimes the make function isn't a friend so check again. if not is_a_block: is_a_block = di.has_member(friendname, DoxyFunction) return is_a_block class Block2(object): """ Checks if doxyxml produced objects correspond to a new style gnuradio block. """ @classmethod def includes(cls, item): if not isinstance(item, DoxyClass): return False # Check for a parsing error. if item.error(): return False is_a_block2 = item.has_member('make', DoxyFunction) and item.has_member('sptr', DoxyOther) return is_a_block2 def utoascii(text): """ Convert unicode text into ascii and escape quotes and backslashes. """ if text is None: return '' out = text.encode('ascii', 'replace') # swig will require us to replace blackslash with 4 backslashes # TODO: evaluate what this should be for pybind11 out = out.replace(b'\\', b'\\\\\\\\') out = out.replace(b'"', b'\\"').decode('ascii') return str(out) def combine_descriptions(obj): """ Combines the brief and detailed descriptions of an object together. """ description = [] bd = obj.brief_description.strip() dd = obj.detailed_description.strip() if bd: description.append(bd) if dd: description.append(dd) return utoascii('\n\n'.join(description)).strip() def format_params(parameteritems): output = ['Args:'] template = ' {0} : {1}' for pi in parameteritems: output.append(template.format(pi.name, pi.description)) return '\n'.join(output) entry_templ = '%feature("docstring") {name} "{docstring}"' def make_entry(obj, name=None, templ="{description}", description=None, params=[]): """ Create a docstring key/value pair, where the key is the object name. obj - a doxyxml object from which documentation will be extracted. name - the name of the C object (defaults to obj.name()) templ - an optional template for the docstring containing only one variable named 'description'. description - if this optional variable is set then it's value is used as the description instead of extracting it from obj. """ if name is None: name=obj.name() if hasattr(obj,'_parse_data') and hasattr(obj._parse_data,'definition'): name=obj._parse_data.definition.split(' ')[-1] if "operator " in name: return '' if description is None: description = combine_descriptions(obj) if params: description += '\n\n' description += utoascii(format_params(params)) docstring = templ.format(description=description) return {name: docstring} def make_class_entry(klass, description=None, ignored_methods=[], params=None): """ Create a class docstring key/value pair. """ if params is None: params = klass.params output = {} output.update(make_entry(klass, description=description, params=params)) for func in klass.in_category(DoxyFunction): if func.name() not in ignored_methods: name = klass.name() + '::' + func.name() output.update(make_entry(func, name=name)) return output def make_block_entry(di, block): """ Create class and function docstrings of a gnuradio block """ descriptions = [] # Get the documentation associated with the class. class_desc = combine_descriptions(block) if class_desc: descriptions.append(class_desc) # Get the documentation associated with the make function make_func = di.get_member(make_name(block.name()), DoxyFunction) make_func_desc = combine_descriptions(make_func) if make_func_desc: descriptions.append(make_func_desc) # Get the documentation associated with the file try: block_file = di.get_member(block.name() + ".h", DoxyFile) file_desc = combine_descriptions(block_file) if file_desc: descriptions.append(file_desc) except base.Base.NoSuchMember: # Don't worry if we can't find a matching file. pass # And join them all together to make a super duper description. super_description = "\n\n".join(descriptions) # Associate the combined description with the class and # the make function. output = {} output.update(make_class_entry(block, description=super_description)) output.update(make_entry(make_func, description=super_description, params=block.params)) return output def make_block2_entry(di, block): """ Create class and function docstrings of a new style gnuradio block """ # For new style blocks all the relevant documentation should be # associated with the 'make' method. class_description = combine_descriptions(block) make_func = block.get_member('make', DoxyFunction) make_description = combine_descriptions(make_func) description = class_description + "\n\nConstructor Specific Documentation:\n\n" + make_description # Associate the combined description with the class and # the make function. output = {} output.update(make_class_entry( block, description=description, ignored_methods=['make'], params=make_func.params)) makename = block.name() + '::make' output.update(make_entry( make_func, name=makename, description=description, params=make_func.params)) return output def get_docstrings_dict(di, custom_output=None): output = {} if custom_output: output.update(custom_output) # Create docstrings for the blocks. blocks = di.in_category(Block) blocks2 = di.in_category(Block2) make_funcs = set([]) for block in blocks: try: make_func = di.get_member(make_name(block.name()), DoxyFunction) # Don't want to risk writing to output twice. if make_func.name() not in make_funcs: make_funcs.add(make_func.name()) output.update(make_block_entry(di, block)) except block.ParsingError: sys.stderr.write('Parsing error for block {0}\n'.format(block.name())) raise for block in blocks2: try: make_func = block.get_member('make', DoxyFunction) make_func_name = block.name() +'::make' # Don't want to risk writing to output twice. if make_func_name not in make_funcs: make_funcs.add(make_func_name) output.update(make_block2_entry(di, block)) except block.ParsingError: sys.stderr.write('Parsing error for block {0}\n'.format(block.name())) raise # Create docstrings for functions # Don't include the make functions since they have already been dealt with. funcs = [f for f in di.in_category(DoxyFunction) if f.name() not in make_funcs and not f.name().startswith('std::')] for f in funcs: try: output.update(make_entry(f)) except f.ParsingError: sys.stderr.write('Parsing error for function {0}\n'.format(f.name())) # Create docstrings for classes block_names = [block.name() for block in blocks] block_names += [block.name() for block in blocks2] klasses = [k for k in di.in_category(DoxyClass) if k.name() not in block_names and not k.name().startswith('std::')] for k in klasses: try: output.update(make_class_entry(k)) except k.ParsingError: sys.stderr.write('Parsing error for class {0}\n'.format(k.name())) # Docstrings are not created for anything that is not a function or a class. # If this excludes anything important please add it here. return output def sub_docstring_in_pydoc_h(pydoc_files, docstrings_dict, output_dir, filter_str=None): if filter_str: docstrings_dict = {k: v for k, v in docstrings_dict.items() if k.startswith(filter_str)} with open(os.path.join(output_dir,'docstring_status'),'w') as status_file: for pydoc_file in pydoc_files: if filter_str: filter_str2 = "::".join((filter_str,os.path.split(pydoc_file)[-1].split('_pydoc_template.h')[0])) docstrings_dict2 = {k: v for k, v in docstrings_dict.items() if k.startswith(filter_str2)} else: docstrings_dict2 = docstrings_dict file_in = open(pydoc_file,'r').read() for key, value in docstrings_dict2.items(): file_in_tmp = file_in try: doc_key = key.split("::") # if 'gr' in doc_key: # doc_key.remove('gr') doc_key = '_'.join(doc_key) regexp = r'(__doc_{} =\sR\"doc\()[^)]*(\)doc\")'.format(doc_key) regexp = re.compile(regexp, re.MULTILINE) (file_in, nsubs) = regexp.subn(r'\1'+value+r'\2', file_in, count=1) if nsubs == 1: status_file.write("PASS: " + pydoc_file + "\n") except KeyboardInterrupt: raise KeyboardInterrupt except: # be permissive, TODO log, but just leave the docstring blank status_file.write("FAIL: " + pydoc_file + "\n") file_in = file_in_tmp output_pathname = os.path.join(output_dir, os.path.basename(pydoc_file).replace('_template.h','.h')) # FIXME: Remove this debug print print('output docstrings to {}'.format(output_pathname)) with open(output_pathname,'w') as file_out: file_out.write(file_in) def copy_docstring_templates(pydoc_files, output_dir): with open(os.path.join(output_dir,'docstring_status'),'w') as status_file: for pydoc_file in pydoc_files: file_in = open(pydoc_file,'r').read() output_pathname = os.path.join(output_dir, os.path.basename(pydoc_file).replace('_template.h','.h')) # FIXME: Remove this debug print print('copy docstrings to {}'.format(output_pathname)) with open(output_pathname,'w') as file_out: file_out.write(file_in) status_file.write("DONE") def argParse(): """Parses commandline args.""" desc='Scrape the doxygen generated xml for docstrings to insert into python bindings' parser = ArgumentParser(description=desc) parser.add_argument("function", help="Operation to perform on docstrings", choices=["scrape","sub","copy"]) parser.add_argument("--xml_path") parser.add_argument("--bindings_dir") parser.add_argument("--output_dir") parser.add_argument("--json_path") parser.add_argument("--filter", default=None) return parser.parse_args() if __name__ == "__main__": # Parse command line options and set up doxyxml. args = argParse() if args.function.lower() == 'scrape': di = DoxyIndex(args.xml_path) docstrings_dict = get_docstrings_dict(di) with open(args.json_path, 'w') as fp: json.dump(docstrings_dict, fp) elif args.function.lower() == 'sub': with open(args.json_path, 'r') as fp: docstrings_dict = json.load(fp) pydoc_files = glob.glob(os.path.join(args.bindings_dir,'*_pydoc_template.h')) sub_docstring_in_pydoc_h(pydoc_files, docstrings_dict, args.output_dir, args.filter) elif args.function.lower() == 'copy': pydoc_files = glob.glob(os.path.join(args.bindings_dir,'*_pydoc_template.h')) copy_docstring_templates(pydoc_files, args.output_dir) gr-satellites-4.4.0/docs/generate_supported_satellites.py000077500000000000000000000025201414055407700237410ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from satellites.satyaml import yamlfiles def rest_transmitters(trans): print(' Transmitters:') print() for name, data in trans.items(): print(f" * **{name}** ({data['frequency']*1e-6:.3f} MHz): {data['modulation']} modulation with {data['framing']} framing") def rest_satyaml(satyaml): print(f"**{satyaml['name']}**") if satyaml.get('alternative_names'): print(' Alternative names: ', end = '') print(', '.join(satyaml.get('alternative_names'))) print() print(f" NORAD ID: {satyaml['norad']}") print() rest_transmitters(satyaml['transmitters']) print() def main(): print('.. _Supported satellites:') print() print('Supported satellites') print('====================') print() print("""This is a list of all the satellites supported by gr-satellites. The list is auto-generated by reading the SatYAML files and using the script ``docs/generate_supported_satellites.py``. """) print() ymls = yamlfiles.load_all_yaml() for yml in sorted(ymls, key = lambda x: x['name'].casefold()): rest_satyaml(yml) if __name__ == '__main__': main() gr-satellites-4.4.0/docs/gr_satellites.1000066400000000000000000000072311414055407700201630ustar00rootroot00000000000000.TH GR-SATELLITES 1 2020-09-28 gr-satellites "User commands" .SH NAME gr_satellites \- gr-satellites is a GNU Radio command line decoder for the telemetry of Amateur satellites. .SH SYNOPSIS .B gr_satellites .IR satellite [\fIoptions\fR] .SH DESCRIPTION .PP gr-satellites is a GNU Radio out-of-tree module encompassing a collection of telemetry decoders that supports many different Amateur satellites. It supports most popular protocols, such as AX.25, the GOMspace NanoCom U482C and AX100 modems, an important part of the CCSDS stack, the AO-40 protocol used in the FUNcube satellites, and several ad-hoc protocols used in other satellites. .PP The .B gr_satellites command line tool can be used to decode frames from each of the supported satellites by using either real-time RF samples from an SDR or conventional radio, or a recording. .SH OPTIONS The .IR satellite parameter can be specified using name, NORAD ID or path to YAML file. The set of available options will change depending on the satellite, so it is mandatory to specify a satellite even to print the full help. .PP The options shown below are for the satellite AO-73. Other satellites have slightly different options. .SS "General options" .TP .BR \-h ", " \-\-help\fR show the help message and exit .TP .BR \-\-version show program's version number and exit .TP .BR \-\-list_satellites list supported satellites and exit .SS "Input options" .TP .BR \-\-wavfile\ \fIWAVFILE\fR WAV/OGG/FLAC input file (using libsndfile) .TP .BR \-\-rawfile\ \fIRAWFILE\fR RAW input file (float32 or complex64) .TP .BR \-\-rawint16\ \fIRAWINT16\fR RAW input file (int16) .TP \fB\-\-audio\fR\ [\fIDEVICE\fR] Soundcard device input .TP .BR \-\-udp Use UDP input .TP .BR \-\-kiss_in\ \fIKISS_IN\fR KISS input file .TP .BR \-\-samp_rate\ \fISAMP_RATE\fR Sample rate (Hz) .TP .BR \-\-udp_ip\ \fIUDP_IP\fR UDP input listen IP [default='::'] .TP .BR \-\-udp_port\ \fIUDP_PORT\fR UDP input listen port [default='7355'] .TP .BR \-\-iq Use IQ input .TP .BR \-\-input_gain\ \fIINPUT_GAIN\fR Input gain (can be negative to invert signal) [default=1] .TP .BR \-\-start_time\ \fISTART_TIME\fR Recording start timestamp .TP .BR \-\-throttle Throttle recording input to 1x speed .SS "Output options" .TP .BR \-\-kiss_out\ \fIKISS_OUT\fR KISS output file .TP .BR \-\-kiss_append Append to KISS output file .TP \fB\-\-kiss_server\fR\ [\fIPORT\fR] Enable KISS server [default port=8100] .TP .BR \-\-kiss_server_address\ \fIKISS_SERVER_ADDRESS\fR KISS server bind address [default='127.0.0.1'] .TP \fB\-\-zmq_pub\fR\ [\fIADDRESS\fR] Enable ZMQ PUB socket [default address=tcp://127.0.0.1:5555] .TP .BR \-\-hexdump Hexdump instead of telemetry parse .TP .BR \-\-dump_path\ \fIDUMP_PATH\fR Path to dump internal signals .SS "Demodulation options" .TP .BR \-\-f_offset\ \fIF_OFFSET\fR Frequency offset (Hz) [default=1500 or 12000] .TP .BR \-\-rrc_alpha\ \fIRRC_ALPHA\fR RRC roll-off (Hz) [default=0.35] .TP .BR \-\-disable_fll Disable FLL .TP .BR \-\-fll_bw\ \fIFLL_BW\fR FLL bandwidth (Hz) [default=25] .TP .BR \-\-clk_bw\ \fICLK_BW\fR Clock recovery bandwidth (relative to baudrate) [default=0.06] .TP .BR \-\-clk_limit\ \fICLK_LIMIT\fR Clock recovery limit (relative to baudrate) [default=0.02] .TP .BR \-\-costas_bw\ \fICOSTAS_BW\fR Costas loop bandwidth (Hz) [default=50] .TP .BR \-\-manchester_history\ \fIMANCHESTER_HISTORY\fR Manchester recovery history (symbols) [default=32] .SS "Deframing options" .TP .BR \-\-syncword_threshold\ \fISYNCWORD_THRESHOLD\fR Syncword bit errors [default=8] .TP .BR \-\-verbose_rs Verbose RS decoder .SS "Data sink" .TP .BR \-\-telemetry_output\ \fITELEMETRY_OUTPUT\fR Telemetry output file [default=stdout] .SH "SEE ALSO" .BR jy1sat_ssdv (1), .BR smog_p_spectrum (1) gr-satellites-4.4.0/docs/jy1sat_ssdv.1000066400000000000000000000014611414055407700175730ustar00rootroot00000000000000.TH JY1SAT-SSDV 1 2020-09-28 gr-satellites "User commands" .SH NAME jy1sat_ssdv \- extracts SSDV images from a KISS file containing frames of the JY1SAT satellite .SH SYNOPSIS .B jy1sat_ssdv .IR jy1sat_frames.kss .IR output_path .SH DESCRIPTION .PP .B jy1sat_ssdv forms part of gr-satellites and can be used to extract and decoded SSDV images from a KISS file containing frames from JY1SAT. .PP gr-satellites is a GNU Radio out-of-tree module encompassing a collection of telemetry decoders that supports many different Amateur satellites. It supports most popular protocols, such as AX.25, the GOMspace NanoCom U482C and AX100 modems, an important part of the CCSDS stack, the AO-40 protocol used in the FUNcube satellites, and several ad-hoc protocols used in other satellites. .SH "SEE ALSO" .BR gr_satellites (1) gr-satellites-4.4.0/docs/other/000077500000000000000000000000001414055407700163565ustar00rootroot00000000000000gr-satellites-4.4.0/docs/other/Dombrovski, Simple Downlink Share Convention.pdf000066400000000000000000011767321414055407700273730ustar00rootroot00000000000000%PDF-1.4 %äüöß 2 0 obj <> stream xI#ޯdZdq`$5lmh|K.l%c#/ f0xp0_7ÿCR7}t"ף=ڣqt95uk`8Nm7@ϐN{e~n)pC DL(TBk& cnAN,5d2̛9"ln&70,w ?sq}FYKJ5O7uD* Lz֚3L %uXڕ5]{QC r331hqkxeag0SŕXȮFd7_gGgB׸BdSUk@+G} =~06oVW$7']\Ék %PTb)gy;CG2; [)j0h0Xs Se㶈ʌma Q 1GJ/ F)T Gf)` u`(@Qp#$f,* c ۓE3,KbUsp<)q4+\ؑ;^hY c'6i#7)Q61k4a)0JEs:cWYs<åQU?9*{85d^HWfOa$ecJqHbKeRT2 OAKc'e7jz;k}Xq~\U/Վ갖 YF,+gXJ륮ͮT۪/UM`V[כ3c^.}Q#<-I[ 慘s\&%,;M2K)CzPWL[iY(Tc0QԮqie"֋AZUe24&"CbBt%$qf_'i7 ;ud$7ܙ6AYڡK "x[$Pjk ʲxh`]aUV͵*6ssC+̪{ͺ:PѿPVB+Zg9+k.6P[ゥkO}]6nchʕrB7QRe ]N˛IqNE^13?06a@oyIB"V/$پ"OVc>|_xrނA*Lyl=gYagǶT3YoRYec"O^ul +u{v()&=kmzY9cXa؜W'6RU1_ȮzKf.J{ _Ξ.}L-hkHcםʪ7m6OmdxsmuUľ^^M3ϙcj/ "wf7OR!tՈ1XRoqЬut|&ˌLHϚS+~c6:X }IGKw­;aUGOSQK{WcKmUN8Q^^SI?5in7 hDTQ$JsU=F߻5_ u@6P67bWP#}kUyⴱ UzWofNn5:]Aې"EהVXuw;p@_A듕t!s(2&.m9Zں%0K$)UQ鍘-[IV||\,Xtd SUBA~?(%UV!{_ 6y4q(W3yЈ` z~ԻmA̐Iu|b&{~2g1QHGi[}B,gxB,mTG?%?CdЙY}Y&[ԝJS[|K KA+16_g<Y+ djvˆI Gup| 81[V> stream JFIFC     C   " $$$$$! `Cd$$>cq"e)$$$$$$$$$$r%I1h7PvQSuy+ dʿ\UZIIIIIIIhFJ`5;)ZNXSA.\U>]ʚAZ;2k*IRIIIIIo'SgPo1֋SsYl7Ze]rҫSkɝ pKaB$>na$F@@@@y yZqWePyYwP[yDdQ36{9 n縕%7o|iT%lvH$$$,~m8(zg'V@8>R:rO=gNrZy/RzcÝ}tKl4#Un]75nI6@@_07ldu]pKAs+kuA)YMmL{@kإ!he!2cYd_ὗBHHMC7gdWWJacj#ިn5g_WvC'.f#UrytDȺGV)FHH}Hr(\T鐵=t ̸|u?$ճ* :_q+YL\E'M̀A\1ʥܶI'@@wo^SO3UAZWsY@T!@kKf)V\>jv֪\fJwٗr]jgh[=ra:b 0Ė᎚:JGmdw&ҩi;+b e|Y<\<;"6݀ܽ㹾rt!n^j߰!/E~EtK*iZi`ő{3֩!'Di HۦGY.0.tȣkVFgNگ'ux!DTT=3oP܍9ffoIk~m$:4y\ѯă6YŸ.*t|Iu4ϾuevsMӜ:W_n"=1V詵#v> "3VsOС[t-o+^] &Vj, OynWs84t]躳Nl# v|y|5~7 tJ=}%rdڥb+#ӳ5zKʸ[s)=ӠieI_@qZ4[:oa!< i|L+z&*於}uFI:b^򇯹:#CLq5rQSc[B粲k=ֽlmvKދ?>xSohj,-iILOa cK}zf"TZj~3K3rk= Cxn>~XӞnOʬ {3yW-^hAPa Ǹzs3!"#$015 %23&4@6BP vl6Ӯu.B̀9vʛ/ñ,2G)M>)6Y K;2 &]Q#Cq!C2Iصѫ v_qSkWi8*9F45|Y GӐfcg1X+K F6*;FQ,xV-h6ki@8l6Zh #Q钞\#8JxsХTV&riu$ / AN;槨kF ]R"k&j>|yPa`8 g[p.B(^RMxi~F;CBY˱X4bco8$”]A\r;lrQ:Xڷ532~H㥅dm/h"DG2'~k^Eyy&#؜$ .H?0\z"xG*Ycj{>*sI(<̴P6ez0Ύmד'%aEV7bhnf:QL '̫}g 8 xlE 4Piy"I* |s t\L; NTr葆.5Ni's>Txj"NA!e)3 ytbNwBd4[T~w!ӌPxӞ'jJ)Dg4+8i?59:uXk0M-l0@:\y61j5˺%N=k+ZZ' qN O,.54 ڻO{,|d +'m:QI⬪ ( k'x$L%62F;´'䯤7YņDǍI4Úd{O{0_ȭix=O`M.DI6ER".%+DμC_fӲ GTy1H(jFGsJ Hٿ#%Zq**%#ն2+Atzu6GCd4Lsg0JS} p#/rD Nyuo>'m1*nR?Uʙh$`uK, %++$Mӡm><>:Kqw9qݤ:h-c??Se^Kۍ%D+A, ۺV؈c1h|uO%kVkkcjV,FYeqm$_F<|8\%cZw0$g}EkY@YE+]#Y\Puۇ1׈%iArZkd[FGcudz/![#70%> 'jKUx{ +]P| ke ג;h]* >#R/JKgCd\ 5P>D5lY̲!eJvXE} XL=|9e*Ji\_,TB񯝳e>**ߓL 6eE VImp33 谭 &{˒ ^ʐSqhϏ]3Եo[Ҫ-k*wwU/RZ4v[Ku>Ii QPh@J}=^&ZiOl .Sk%`ُ3V)(PuϧD"DDX-U](bq_[ϑ/'Sz'_ct!meU} MpyRr,~LAbVXs_ao.AX=qrI ^LSW1ºSDX(CD7Uu1,Uȫ\G5c__RrEks-TNj*}kTj^>ZWHn'5U2VGi'XaxYȎA1|FI:ZE`JJHuMR 7nZj+ p4P;)ۊ&qZmy{?dxi9s??j6m#wý6?rb~]YDV7ђMQRh(S s]֯GZdȼSHϬC0`H\xѦ#Y^'*x~^E:<ĆiHЦh|^BmHw-t,p\tdFϴJseeŤF?+q^ uǣ?TfWhsRq<^?⥽D{3UMdRt%!elqCW6 s*p0\Wu #ayxQ XP;[ fTDޑ<+q`6 /ޛPz 6z~^+3v[59rY 3#>7$FWgy)b aud{(JM+,yD`@%6EODMdk%uloO7fnEFziϩ:aPl"k/3ǒddulIM[.^6'r8ʍj~ʐm,̨D謷w% R53'+ˋ쳗t$+Mۑ|X8bsMqMUM"+8{0Owm'u_h[Vg~*9KkW aڍm yBdxoQ8Kv\7ꑿ7x1!Fٍ^MQ'OyV5vEwGىTDX -$-㗹UOo+:)o+22ڸeU57 xV] C۫4v"JCw.R1 ) {z~z~ήdzl=t+ #wb:T4Jc2 ?jjvmNA;*DBFԦl_9c׷H߇]/IF0yWxA=u<ڨSim=!:ز_+uM+XygiXIѠ?J) f1Y1JRu'w}Iq "DR2^,9LwO2uNty5&C>$"Y=fC/؟a_[?a_f/GS4/[??SI#!1 20AQ"B?/+y&12_ :NΤ$pU-n'Hx\[/lu0t_D ˢ0gcyVa8 w#غd+ ^$rivVPIBx)Q# JJY/DbbCؽJU\K*^K4L"dc{:O6[d}w&dFbx4BMx"Y-#%&d]t=YgKlbDoc\Kd/cH:{gQ6OԱDz;͉$t`W'1! 2A"0Q3Baq?诶_W!&ڳqi }Qv>2=[Hݴ҆}3KQȹU"'nQ嚲WWOVOR,x̙i)cw]j\M,u q=K=%2di3pQ1Iثe<$q"E܏'V"/}#籴o%7쿍m9 "'d==t?7,,%<nNT4%OFhJ9\v&]%I,L9CFflv`O5ciݖ&">\TĜ٦(X#pj6 6Ś5#[ѧ(_]?}u0CpJO5&L!e %+*H8kgVhVZWUYK̂x5m#T3 auO~F!QѫO$0W6 + ձQyK[j|}z\WMζfV?ƞlCF^.ʏiX\6F"6k4UǞ]=ybD9? 򐉗God8G U*IZ?":ڷYaJ'& _in5.-̡+~Ž3²~}D>!2A:*iv`b,nL4^}$P(Om6!M5ۭ=Ws dx|kW\n t.AnZ77vVԷ!} sҮG7K,+o'ߡX`%Y;>{/|uAjq37 4bĸln%l<-ym+c P}3tlʷY@pta~flC;-o{m1WXKe"a6Rhc|>5uJ/YxoK:7oQbI$MCk~5cEc?oa[~]#h|̧:ڴ58i's ˬmPg^^Ҟr5;J ۠5ғCt#%& fX{Jn<>:CzڞCcB7melHjWP>Ƶ[OX뫛=l?4>xC MVR Y4[)#\60hxj_&T ->לd5Z#&oXV TF 7:8k>6[2^嬚ycNYMS:*~͎%.5_k/chX5I?U'9[F'Dvs5 {[kS$i5奔q!rVя]񌯈f+Ýa1!s⊒4AXκ}5Tqi,|Ewyn+I=+$Օ 0ݕҰB*qXFSaO~d=^w.5ύbLQ? }fH?Tұ)ϛ]8۪xhŹ*g6"`-d`CٷGI]t;t&o@Fg^6*GGhj]gT}n™ I5h YY[m;Qar(-fʯkIJH+t}W|{iU>j]A´]qcIz<9WL{O4|MK\)@}(NyfVak&8s&Ln!Q_{ Lk#qLgv67盝D)5a%J2ckpbfGDaNՈ븬"IݝbnU⺘!aֲI3LEnK"%[/kL'JrN7#k!_}چs}x#Gmu&V2H^ZZWZa@rirHBכ .kڭ>ArLDhz8dՏ4|Y4 yv8#0V@qh-ˮHݕTp}6T"4.EEQ#K9qbjV ҫѣkM~UҴ{VUs~X(J3[Q/18wPkV2YM gղ+*&fꡰ: _ޅ)SE'>]wʼ~?@pD5.)6$ ܁MG}Ѿfc_PaT1(_k0aBnK>XSuڼ33QA;~a8m3e)nXO/2 gmX3ߐ Ǵȣ^c(xQ$!tjTʤd-71O~f_aqYA{\+?K3 è,fn]2B쉘: aaC-t¬&1qav,Q@UvmAyPi./O.6@  (.cpȈ筺z9Ta$2b\pb®u uA})|fȝS.нCu%>N|i8Q ގ̝2>yPS͠/}x6X=ezس5h-N$Xԩvv^>4%}HyC;^\{ K*E9lu ZUƣΥo|{WrĿ]Jk+"~':˴Fӝ @?XseOfdumQ[^uBұF LGX_>&ttcsvV'^>ճox]TdMŽ#=lv2jGGʣ9V3gn%9߯F1m6sՄy Y7]2V^UCTp5(.©2;ʏ 1uŬkhnpn^dfVpwV-ٝmY8Xxm|POo J@u7b.pҤK1͠ko?+W?jJV⩭ԛk^ =A?hOdEvY+4|8Ubб V.K(5-xƔoom2F3_^s8!cfA3kzVVc am׉"E̮XvQl$}G v9ki-13uyEְ̫t Ub-YM$6dN]^ʰa:$+;0Z1q+zWJe EA 6*/0wYe?~~CʦHդіcXϐ͗Ccd?3YaBHMWʱJeE[)euN'>}qnd\ܪ8XBbL-k7+5V"S"w>󜺨})u+/~?D "c!9TA mcwXŏ fL6ݿΣ lN =ZTɍO':{{q<^ %j3ˡrWp` R+ ob5"ҵݵ$ .K̛V1H ln-zDMm~DXlƦ BIq~EmXtQdo޶yEiXA`i(lOUóWwI<<ǨS[߬{W*ldžceJ3Fv@32r]ꤎF 4& Fy⦹-4RgeUmOfky(Xj D(<ل/+ڤ[#[K3bl-^2y7oyV'4JnA}ZF"v/BJ,s2ʁ٭?ղ#[wuέztQrmmt`N :#V1Fu?yi&{+p+h 4Yo,1BCdmUKٕV nl"ۄ*fa%d좚&<5=n]ʣDxlɢ=ХVGMME'eDmJuUtKcqCyl7mXvBQ[եIdyQ])W{kZ9bEцWUaЮb ViD)UI<ƵeOm{\QO^/Any**XV\!t om,F 7٩"(3"B^I/H-XrE-X|,\(X8Krf,tMkI0A5$YN"pPMXOh5x>h:!aYgNj>$"3~$NF|g{e}BHnJB]BahЦ.k*4[[pm4*c[b]i|<+Tb bmp.ל3eYs\LK@ f`mk "e ou} ǝcg̯KbH6I6&=A$}U)6޼`z?))jǹPoDۀ+6indisWeHXkM#Ĺ'Q0>WU[i Ϻ v2gh md϶k Tg)&(>dm^\L6H'ڡ|l2듂pTP)#lڛe6\ԙOWx#V ׈ow̧F:A/Ŵ]:>'_]*;QZ@:qohvVΈb  ;G {2܎zLS"w8t{M~>/z&Ywk*uQ\~Fy"GyM@8).Vmߝ*>o*mͻ[J`eaK<LFw'Z%%uʰg CWߍxh׵aMZ BJ_]m^-#WI/1XSuk+ J?:ՑT`H:|`cV3SSo ±%ԈUl _m L*lVʑc+kj>LT^ox)cF=vѤ*TNU@t7URkeU#TUM^ܓ} _dxԼ=cSO} ٳ￧aƴ9Xi3j>K~ʳNUH4Hب[3zZ֘1ls6!_)}k2ZO-h0b65`Zb ZwXDQѺFޕe 5°@]4(8.[cV.(ɲg|Z5&\J+Kku+8IxR sɜ.0XC@fcl.p2vTd)TҾFɉj»: f'^pCX^xMMuxQzm-i6gO?V77¢^>"^|k A>|TF^|/Ow5M~t>w?'@}?*!1AQaq0 @P?!,d Vxz$q v(2HaI4MoKT׹GLS8VL/M qxWhbZ,,մgHn3 co"\;(bW 9d~l0m=v0ۣRᅵI,&Gp@xpom6pYs`"gZ7}eyS+  w(FWߔFKY}pq9r(,ʯ6Q~a 鏖35sqbzPy .Xa1 B}ǯG:D&F|#3@`{]U c-g Qcgd33h,d 1W'ҧR0Je2WQ&k<& j޳1+ne7s3W\Ȧ $4: fxpTaB69y ;x4Uv`0ڑ/% ;LϾCvXnF2JiHd'#OE5%^goA͂,EE֯qDk է[{08c/Map83(~e_|S%8xgJl lR&y!\,/^\`( \Ѽ O{:b'G\J$J=M&&֗Sb7-}8ڏ8=pC|Fy^T"{pOөEf$rAL6II&$'o肝훲ֶ +nPJU{FP@;\yH<BKh,7#d*49_ꎁm[b'x> Q9p6"bKB3c1-qQqS  >3Eۃo@ |wf'G>KJIhB8#x=^&}"4QGM1`IRtD:Mc1׀5}pixg Q*wl,y&:c uU :sPAs\rܳoC?H B4yVs?5R>D LBHVעxHҨAՓ"GtœFރ7٢#!+0~WLY_>\A7 5 * –{Q3ck{pRy݈b߈'uҟ?fM (d|'}>OٜtC%,^w,QF-t]7X53I}{},ft7+23iW\Vٸt\r1[rN HE]s-2vKrTi":bMm3_":rSU:dk^qʌ\?N3 wEZD"`jCXU1ȃąէJΦTjy=~ x̋0'"wZ!{l*qӼ/pW}X]EM[Um =32b{m{'bLPa/-¦LYxI%_6fS"@Sb󎫋2k+bVeKϨ`(0awߜ:۞c|F1ͿWw|%@OFQq,zFBQz&G'D%y2Ѐ8 MiJ\Ւ#} c'9ȏ?IOC?~$?9 l:2S`rq=4Q1|d 萖)s3&rj:UK_lƔ(9"C'I;@t06')سM7^P!1_VD[mp@]VJ6ѴK l~#J}o8!Qˈ(9H&L0ۉʚ|w_19x|}U[珶Hx}#Xѯ~smmw /?5 Y~赝lxzF\`Q>2vA PD(bcPd7c¦hzR`@ƃs0$Iw9$ n:Uq\cAPV9^؉h9J8lqqF"my@H%900J\, +w"GXpi*Q.Cs&95![ݘ/Kx&vtԖz8g%9M[D c1hquSb:ל\`@-aLB׵xW5gD`?L?(G0SZF? y(4>R1=;&Dz_)+eh?&)ޒY8  %h!$;e/ٖRlj$ȀqؽP&%XJD`Q!L)ŔFKG1xS (g`-p VNxSM'8h =b޺ɂꐕ'(`~q, z9z|5ˌiHaŞ`3,gdHyr5y X`^~mHz{g~Teh%ȔֹʃMrF Eݡbz1r|ˇ:kfEK+'kW!Lgid$7X/Gн{-Jep^k"_ARcF $Q*X^PDW,GO $txOTyœ .,^,/(NӨthY. :`R:TU6QtwW'=3^N o哒槑q/;-SL&Oqď]Ni_L R)UAMuNa(a[[,&&u-1"%pT7gP%F `ȌgƸU55-Yr:yOf2et T|LT6J8u&jxcyِA@ @s~m0}Vxr 8R6*>qdž2,-ь|@)#2T~BU@FNW0dy0 hdC,`밑+DƓ ٦X"bȞFpɂvВ]ps hzGEƿATsiiwLF@S;>3C=g19 =\&4Q8nITgj1@CDd2/Bc e}#A0B\.h5-JtX=HE~2yPs3c!bE6]F9m"xxb™)_\H2STo8T=Nh^\M!v3մ{tj4sY!M %-- IO(vbT#%?vbq21o?^ƣ^+/SY?C'Ն!&_"Qc: }pXr9n\f9"O&~$i1Q[Zg-DzAӷ%š lf*byNWl0T'xf"\ յ`M~Y[nH}!,[+ӊ1фft0QӫpbÙ0cdQ6s' 漘/a7g9ىuQSr.Vmxjz. PdaB2"DuȬWca|H|?W{LM0E8* %[7. &KԂ&RƭT:r/#U2 -~@"=2D'YJ?:#BP064;oBLq!hGJMl?|HMF~Nq&Xi [rHY"uqYUqP·SoS$Rze1Q}\fpw]JP O$AѼ:GR)2I#!@ m.]X̞nQ$8'Be<+tFxOJdW9u2|ڴs]3p0eH\ư=LwQ7|yi;7V^B8eOּ.(NA.~*~pe\ͫjTњqaMRc%vF+l .#8GfWN-DR5c$Q lK.0!v2JP%z9УRB"22n(6咑}ϮHW{7\xt=89Y0 :KL(_4QĸD58W8* p[t~2V9q$CшeE*x* p*<`J׶P 1L'_ >\*K-p2WWO%e#:glLi џt:{?}Oٯ;5>᯻63?/ <><<<?;<~#9`-@+>q3J7%6~Lfvj r_(,žnR%d(ˋ}_5}p[`uJa(_G3V}X?FX^L,ٍwn)ȊK×#ztj᎛4ߣ(c9wĜFaE˚Ġ > 6K̡ S Tec|3y.<P+9~v̥CTIp8NV>oS rK}W/C0OiS \2!u35~ΟwR{QP)`zɬ§ݖJN"pEbhU6x'se/Y1o3M^Yx}>3s.oSg`D{ieoU#<\oYV.2˟(!1AQaq 0?) fQrp{T7e")xBnp5uCK ޑS55Q&uza>1 U}י4y-t/?< iUx`Fՙr^x_/p̱w_C9@ 0/m ` Ն4RD]A#`6 gG}ˉ8mVհs \u @DķٙxL?42ܦʺv wpp bAhl)^* | w>q jhuڮDǫ+*rZ%֮NP(b[" EMԫb_ӗ̔ KS%UqdY<00u'uMqS9?s/^'|R?yU)}ٚ[vP<C3".d(vB{ !kQpl/ * ~\)Uvgg (`&<HMonmZkD7e$ iwrT@\ࣜC 8nG"bh0ۥN(BJ@BF48<;;Sá&ո cgmz Iה"RYJ@ "]0')O8FrvE·@4L S_3 ]O?#vjw.#dQҪI[-Fa> zk("=F@YtKVh4Bh8PʛHPt"C4ZXϊ8 %˚CFJt*4*s4y(7zjAK #t @QlHwpaAFV07ʦ slE:&CUjGOx+m5{)Ǔ .d\LJ(s:7 _ׄTfiÉmU6(1J ZF(7 :t-! tɠ504-F N>"aW-'$|>1fz-8P3z#Yȅ)1A =Z(dV=yn2A੮ȋ.O5AeJ>ɿ8G9kҋۄ#UEx)e پ/ǻY(( >,/EOOX0Wf(jxJJ,it0Mj#b%Tl(.bȋ[a, &G( * m!=ƶ7Yr%aTT6-F +E(1 WkQ bP4 C歗Cx.YJ#nH. -e DjAW%KξjЀ{;VB ̜."i;t>|5_M3('a@N8ˠd[h!Z1cV DT`(sF?8JkQi4߉MHx=9lT-VzrD: VVȘ ER ]:h"h@Q@E,"&;z)epl@'AU o!-+m.(LvL iI.y\[JD2m7h}1_ joNizK|^IMb[lt3PVT6)yUp n]Wi|8$[6Qwxb& <-yvnv} x\\WT&7F9JdV8ڝǣ߬"Lt r _:ߊv.IN0HP"PY~alA$8L3.Kk\$+VRQ`i!E4P+I[D˶1䊾ܸ RE0{s!nRK\+(Jz0)/Ν_n#V 3 -+EyL\Sk .+,ɰΨ@ԸEOIyL(ijCxBjEw"W*`P"mh2e\+OsM ӲP*[AK Eqih(wƒf(a#7,4<^]ZKS9~`JA*tn8Aΐ`ckXF±(rD\ ⽰lM&;4}$:sN#JH i#bH=cCWgwQX:S SD:eAcQ*FXI*BQT%atmp$ sknn5yZ0/7:IM>O1kP4EX+Z%.qT!k&;KdS ӛ"#N%fʛUjP뱆V+(8\bA 2U٭xzQ? zKSҞ~Q )!)}ޱ! &˚L!P sv6u+ w5LmB(qn8 ߗ7*F aҀzŒ$i]Y8""=b6NԪj+?"V*r` |.s=`G0ʈQl5&,OpX+ :P_fM;4Z:Y^pr hW4RDIcKQf@Z]q04`GfRLuz|t)/j\y/\^ԔST^ 偬m8%:]KtBVPrBreݢ͗C@Q,}\l渘*x1 GzK7ɉ49ؓ p%f֧y+V]g>[!f_rD]L7!F˻0ǶFw97;|b"qkOngc?j)x1){hT[]m8d+|1mm d圼Q% Y+5;/|h{)i=tЛy]5g"_%4o3I7!oj^G)3W*a94ɓĚ6em&34+Ǧ-Ҧ|3IUS핀p -~K lEtM|=B$Mef@ ^E#z!ʥ![ij10@ [aOO7]sJ)\4:՘"u6pK)>=weɺI d_X'a@aŞ4aîyDC@K1]$"ҷh94y*3P`n 7R#pJI+ŒW 8pVEi9&W{2X&֜haČH \T2oyN^%ZDtaQN>46d UM [wd>paU1J[抃LQ4=GsG*l-U &#R`aҬ'm<൞lknEI`)Kx 5d@vXj8{Ԫ-9^€8k +WPejo ~x.\J^8ѵ47Mއ:NLځG ˩\y J:4.qVD֐aGCK$SO3 89! \@ߦ5 l W l"܉^OG^nE5zi=LGit&++K;zyD [#H'}]UFE! 6wrOȄ4, ֝L69`f=jƀӌwtb!/9p "!ֵMn%m))[/kiIotUCֺB8(MEvTDA+ɍ :ڴ/N3ԦVͶ@'&^x`!#ZvC'x\FRqKa Drh %CQJf"V2$c(|ʭNC[ FcҎݓP&?4: 2q|9KiEh eMi4{ n?3R I)#$? W5lǧyT`1M[8$ ^p1`GHGK&Zk{We^:s3)p8 4ytu9`WnlFJ.Q!*FX:UDOڨ.b}cVeT1;*?D2MFyCjtxF4Gj`%D S&-8^6Qh+2 1QU:]x/ nu.@ZWRIy!hhpy9:yn_E]lrr'$;Y%ᏞcQ$C}aM"Ȫ?.hyn;aXOKGsPM4vrf#EC (JT8J^|9Q?C cN@^e"tGe9AT.G0R\cG:}uْrY\E$„ Y *|`r<ku$0s6^H ^ Y&7.oW "k (;?YAèRN_Q Uy`Pwn(h}3Z'z X!7L՝Ҕ~h`rK#R/,B}A-g|Tڎ:@> stream xێ@@QI-^PkVJI"IҷlG髽*d%ڵNNu}[kU\sVt*ݱpr mN6G1m>6KǞrs>9HK|%lt+j|+)sycUQFuS^pmȼȼ;c(̝. 2ͼrf8[5?ܾvg/ܮynǘjdTOڮ0ӯ# 3`v2x0W? iLoo!qD\"0ц0ǒ69 L&D`"0L%@.[WKa`D`".K%qD\".K%qD\",K%qD\"0L%rb0D`"0L&D`"0L&D\".K%qDoœ_L.mf̙eXf!yeD`0œWL&91L&D`".K%qD\",K%aD\",K%aDX",L&DX",ȁ"oL&qL&D`"0L&D`"0L&D`"0L&D`"0L&D`"0L&D`"0L&qD`"0L%D`"0L&D\"0L&D`"0L&^ endstream endobj 12 0 obj 819 endobj 7 0 obj <> stream JFIFC     C   " P3#Py9] .4`m>Ơ^Ԁ uw('A9l](i ҳYl"e=5MUVr\ό{SzlN 7ygf74~.kb)X2RDEP&$EBRyuObɚO]M4/>əj].f~s}-E gjf8tx&`1!Uj׶\]+3{g 5}^Dkk iu?w);Kk?Nd|驸j/8#W\pFOSɜښ Ϸ :R{NsF6}ǎwmHb0&npPgLrWM®]]rNmL.ݵ4ƲFl[}/p]?}>A>=HGJ_/Ft3|{Xf +KRT@U"I0;-oUˬ:}C%U=6-9}Yk#es!˴n9ZϻtC9%.}Ynͮ G ⮁TT@*V5|ڔk8cVru/㿰fpG;{ZG\mA0ZKXˋ6tzawPN2:zo u\ř^^=FUh4nv濕<&[LH`Cpۧ*?(O3NͲ{ֽwn=rjolo/n4? n^sp[nf7{<ʭ/:eq:uwvou;:f$dp>6*H$Vc_Pa߹M?yyJ豉n<ҊK`USªYBH.5h}Ap^de;V?Y9o1"H-jOBQTJ%fiKU3_q=}ʺ_/_14LYJ"*"L|M_v~3u-`HJI$^]йgX%sMIUTTI*`)`鎩ewsa鉦IDY LLU69 h dv{??V?iрIb"Q \=p%{o:TmMTyEmY\Bz"leiKT+OR϶ը->%ю#eJf"hK\+8߾3ZIlX5[o \NPN٢抢Vf&UTGC=+bDjH>9Fa6n]ׯ>f9k=җZzP,$E! 0muhdrVm__i˽ϠʯY5SUbLu4s['~ѓu+S،cu'>:Ta5DE.o)]EǟJ=9$_gn٣kŠ˸9.sG\g<՜yg|uo=O/1b"a c׺2Xb+1)3 K޶mZu[smZK }m'D_羼=6b$B`D"?ν5S&Dy 8w3r0veUL /O" j[feHs;XI93V>h1yIrY+L閞I&p9o|]q'ٚ}_/ϱj^MO6{wm{ ?zX/H?>6=IiAໆ|-#3=۞|+mqB/16 0@!1"P#2A$%4&3BD`ZXi6/]YlŒ| \qz,J$ \H.:ӏ큓౎,݌׸lu5FrI[:M+NkvEnJub{# 1]v3^TEUI&_v*$LBLmWc%VVnPD@6 ,Lk#G>M,N*Wb[Iom9]l,O_hq@#G#KvύEMtݒFdрdUUHMPE4-aHRhh$Ʒ " _)c㖵Gonev)XFV^JϨĒ7'׋&Rpxµӑ=l/a|JTPeGa7`%MsF`<7NT;}G Mx.2M[TbD''~Toۓ[=*RĂ$Ώ|Y2f &\U{Lr{1h%9Ur1\梽^FH`c7b ~@ŀ]K6hĵx[XV; (·jcddS\yNeB'- 1%~ Ǫ/tYSpVB8|S ,',7FWWuͣ,4*gGw8U90=92!:N)vm fr#Ղ(lpHܵ!" vg=;r")G@kP<M ~sF$*}a*dO071d6|crkp{,$cv6V9CB\PHv(mbCXdd5詄@N0'ٝ΍c1Q\U%ࢶfJv9AEʈ76 9TƗn8yqث/t\XϨɀ gol5{*W᭩\&p~#b5ēBe('qIX'IE*__\l|q!6gk%ěnsœ;95vsN$pyzO45Bl.^]cKk/#?:?;詄WBB*aUn,|G#`s0Ryg| F=/*.#;;9:fsbwwVq6[7M$ jUùb?!tpȄ!W5+}V2jO?öOۡtEz-:{{z;nFT_!';sӾaTJHLz./)2x\agd[+Ւ 7ҥQSēȔ0\ o8mHqf̑zY}QY/osk ogr gKkA;eQ`r?W7vs $ y^}R#.:R\>BB˙Y㗵{1BnH)~ [bg3wJ,1nӬ| a=^id vD+Ț(ThpD1ֺS]cҔܕnd2"Hا׼H{DѮk<첾y>≿B4 z` /Gcd)xRD*@+bΔՉ$extXڤ{47;{ȕO옫E%T cCҵ'.#k쀝N_LaƚX0㩍38W/\ݑ7{U I:(+Ka dOdz2iт %@poY/×z $ 3cd^ZKy邗ʻ/?6G35o} ^d+t$zXٓN:fkSOw'Mf{.!?8&1]T2evC̟U+k"-,WdD8x%ő}?z6&a!/'H Cy, -/]e6kjClNF9ѵ#Y P$\әqܧ/`:G5kY9|ֹRC]/ک$^~}5K1^b@2T+WqD;ȳw5ILد\U?W]re{K9h$_R/u 5%|RzG>C^$'XUSkKjҬ>mw8:;JXyEFϙӄ˖={xj}4f !UԸ4=UX`5?~,*v #"2ޒ#2[$uJ/(1G|xv ';wc%-ҧ8WeLA_O&Q&xvY5_ׅ-l v\Mkgr9Y'Ah- ˆ=FQ Zeׄb& | )\lDP&,͍ku ӡޱGY\qя,OIBw 0_0H*upQ[bܲ_#EPx9QK+ vl]Ut&6ƿd>6_U 39_HM9Z2-JΌCΐ{.ˇ^?NudՒMqWLBIe]bw?m6h2n2hdN8a0h2ymoPjGJKVJTVvE}ya"`@:$9-/DIG:MXY|Zx'nV W[RmC2FLAaR$;xffCG8ѯ&?,)Mk mBZ֬]j0 K觯fz<2@Ɖ^A {6 |2T}A"6h_%ܷ3:W}Viտ+!01@ A"23BP`ap?>+EN-PDy(lO{A߆SZ)EśGck`9)D ʞAEBh-JzBB? -POS~KJG3ţ̨B K v 3*ofi{X$qQ(4PMsM/*;O8qF{;0MJ &F7%3p:.v{jPNoiɕS~}㹡)T^OO !1Q"Aa02Rq #@Bb$3CPSrc4D`%Tdt€?K%1&_NBYvZ??KLTG+JVɺ8gδM@Xt (:9y~S2B0 dW+Br1}|~í'I9bW\ٶxEQ JhE9yտ->tbB>KRQIʳ-ZJSEvP?6 2И,gtc3COpGO"J$bavLyR>dWS5SZ+dh]Mu lNޝa -"JuԋM:ͣcQ]4'BgP6ɻ}PL It7Vagx- Y6 get8xoP^-bGK-NVw4e[+M]~NQPdZ{1 %UAkM_@4ɗܭ%ݢW/!.E>l?'[,J^+\tVfqS@5h @~EZƟ:>Kb|Tɍ/gΦkT_hQGŒĺ-Sx]pH)04O<4JnDiˣ8$q%v ҏt)jd3CK/Tk?MRJB*q&*,_ ,ݼj֓TXe"n֨ҧd^k٘8Z V $TUbԛ$K/_Rpۈ6T rfe3Hcª]tڞf^c ]JT9l|)%$k[t."jeN.*YPe 4-ٮ6N)"/mQ8[IF-XM9,+ BP)* | RKi*¤U6񮫨i٭ltM) ԲDQ&04-'FEvXKr:t-F!^vޖB,ohFfI7ыR"e8++bEL[PLL*P}99 > B&jzbHqk7Ohi eU] 6JIPr*+ju ZM8+^J]ˆU̍E3}vm2W13(レEvY#nF+*'к-<>ToS;ctSDDLh"avAƇFoprşꨃVQg =ۉ-eIPe~/%_{XGeLu4e(LT.TZ  o~U5'Xj4^NѬ}H֭TۖF\Ne _QiJjMDQ"!TdDk(/,ſ(i&q Cs)Y5=ԍv*XNQ8ٗV8X4QAm*J>Le`M)¹,&,bvMJSt- X^h5brT],]=U" o+`qC jB0l 4%cc±IscdŦM~T8-䰓DٝsYKTidHS"藆7Jfq(ZgyPݴhe$f&(x`c A(Pژ<:dk,!?٦=_lZ/LRi遠:>1U uWt{# F^)Ňl*WrVe@Y$Q9Vf(AqHYF cHHQ fӄ)̺O'0*,Gj.4=ebQOHM+D.޽2'Ye, zOKgNd,c,M>zJZP L$1+ضO(IA'7$|idR>MG]1ްa"_YNJ6F5Qһ]|_tcVCt%֔֍[R Rd_dg7Eb5>iUUjcUKRTu!me'-{yŏ̈WY,ݰ@D+?[} ĴP@JяwY+(eV~dy|Bb,w U/Ff#&{J{3y30$UJ4&T4Be'rkM[eg;U*\ ijmc$LDyu-_OoU9mT Ky5WE%J^T%\[}:Ť#ĽP.55 Qv;0i9nENw3\ɫz3,ڝJ֋?YOhiHp9ܛϰDO6yڏi KSq|=ƚQIZMleeBF4(X*NI`((8G2U`lT`Ryo%YKLOGnZMoi[M8 UcV Ϙ%2tOth^L.iY܌oZqmbz\MV cZ׉na5K`YR7Dt,%Jiz# *Zϛi=wǺ8-IjqI!dP{^ B0RM Lٟg':^U_>c4m j(M\Xh_ A8Cξ[al&q= D0lX;"f`78+[55e*J/7&QB%_TtrԊVLR״k\JNka2Hʾi朢Ri YEDnX4p)E4 QNQSBP-(ŝb^[VqJuS~S#`dMjXxݐ0QXVKUSpi?JwB_:02Y6]l[G@8\VH 9di4 +mpr!#*Ň!xWBmHAShU(󖶎;nto, %9B{U:t㭶[[ #j-ĕ^q)ĥ"[,ͥ)Fu9̱` %$$RF-;OWxO M@BS "yJeBRؒ?Y6dM90nYin&m9Bՙ<ξuڭ4LH[ˋ!(lT _X8:XoA]j6\'|!i OP%e/@ _^tz$Go:Lm[F J5Q $J{UxҩJTz=I)e6Hh 6BRY cI :"d.ni*]D%&+^?n&@H+΁ƧUCM.g=;ݠFf&fl)ͩ B\gUfiuo$KIۇDySxiSsͷy8E6mES9[cΧ=rF) *.Ce@B)\)(NR@ 7}E' mT0E' ;B혧f?,6HqER4-0 Şbl`QCm;DNJ}_ @FRŹBw5n%IZh10ieu]}&ﺟЪU5\F)Wha-|/5lg~]((uPn" "6o-Gxfu.%4z:5*J-* A kCK-P$!h}הU=Tn[påCN259|ݠvV a~bqiB=!aԻA(™Fa2XR1('ZLJ3’ -<@f4H^@_f>\k4so]H,\F Np 6ߛ,mH!/LK!vqJGe,\'뤸ڊT&K|  |%]K= ӷv1596 THL$e۹t9I.^ёnöТH?,!1AQaq @0P`?!mA]Rj&aѨg?ۖbYM ťج(ESS,V5 B UVe[Қ^/BZ3 Ber#9)K4=B, AhCƍPU2(kdmQvFʱ*vF"d;-6un ޠԽXKUUVmĆKI~KOfo[MV 0/\f뀳F\HV)FUԗͫw@\ 2ޅ֎U.5X^XayKZqxԴeȪmI~o&1410ࡽS57zIkOFW0A!^/>ÉG;YJXYlKw:d6 5mGץjm /eC3:{Bv݄Z J $Z1knmS @ 7O5cɾ*TRJ*do~`A) V wzZa n4]dVRp*P靑fwD_FjΨ lߋ^諸RJ*h٬dkQ]KH7ǎ* +<U ?LZaROjYxQw `;(NwYo,0i]m>5;sxRԯI)%5o┕sD}.'b MU&IĠP*JC9lp g]c2̻}}p Ncfp!2>ށd!oh%B_ @Z@ ꫕-W_]MMt<-JMe6[6cJFдơN`DtOv!.g<fO^xK]on!D=iB?˞Po \MSC%w243>(Uabjm(U'*A,}/ֳ=7ٓ0Rn2-`bZAi{UEF:HZ)i?݃ PSE]IaK3wQygQDC#[Wae^~UI55iM!oĶaE=Nk<,^KR%4*f etʘY@ffH4Ɣp\R҄: 4\\tм%x8g=f J*)V^O= 1)Bīdlˤ-\cը9ɉ}u17cp;=by_/qj/= .IJ=$NO8UC0RVҰZaG!Ni(tG,jo_̨?+{NVJ~GF ygoP dWGr]ο=_yyS௘ERb-ZK$x'~rS͂WŽ.\Ǣῦjq0ʏp?*@ S)ȶZ*1X-J{ ]=`ғTŪc:wit/wǷ"c!0Lpl,$B ؆¹S6c$4F9̿FS ;oj4r_[rVd%u.)N4L\irSzd5>Ч5'ΪPN=q_:1.<'4f`47;N!/CB< {]BUod$i(?5N/[6 ._[1QFɭH'hdd}˧(1m}p󯈕S G /D%\p!; "8|Ā}tx#$F#6QLN_v&]pzHS]Ps7GY,>ΥтCJZo 6mxp=ލ`We^z6:F{@IkWB0FDհ:ڭH[\vp}c8 H\OߴwDʏApy &-[~ՎI~J)q=eh PgeưL)[-#`j.B6>G.&MlL":[YDcsUV֫1 p'F Jpa*9y/(LϜ†JMXB };FQMvq_PkF`}Sm;ۖPHH_yrwn^>0.P4p|C9cqXXފX@eՌ;.CT=W̰(p@`Y9C 3IݬCUID1/j@b޳v% PAK4E,ПqY{:>s]Fepo Aȇx?\e 9I0F6c8^% i19aop l=)wnS4 uE6{SH%M.#,Demvcku-"{P͈=Qě54CTƑ_;>f1S8nw`0(K[rRTSW}&Y *P'̠vڵS,wQ coZOuyĶ';F^%k-̿_x2@fZ7'ϿGԘ+R_̥J癤 $Wĸ}Wϲp<__v_dv23H'p <d{Tl= v;9m6#?_>$:i3K:%^N b$`͑ h~ b*\yz+b3("Dbˌ]USsIrʣWRlHv'G8/Q9{<0cїm~7i]!ݓWcܐ{\¶i5y ظf-'[QM9O˹].]VxRuYBSJ7r*Pq5&A_a {:"?-^Tm,E;Qrx0(2 !4p&up;3^J9H#, ]y%vW5/޵cZtż/+ `k=*U&Z8^E7c\d?bI`;=XRvcpqgygxS)m e̋?_hz2R0}q :9V[ _=H VtJxt(^FH꺆 :?N˖%tbi6TJ\t?"#\&њ|D)n rF-8*p8\xQV=RI]`X%iݖpR+ȦmH,j{ɢ-d{b`A}e1hxEn;N^Yg F`G1}}Tb:2K F{wOkz6NRL%dBLj]Ut(XB/ʦԫWh1gFb诓]cOa_IjБ_5}&TYJ-ljAh~BE3N=𛁱jK=, fNJc ';tg}Jtetz?@Y`KhB<-Bқlh!K!h6S^QĿCmiŠ2(t#x7qZ&ں/veXvUAD@Y^^wz `ӕ#bтb`"$ms{ûeSn)Y&q#-Y#* <=MHeKDp!l&IsF_Gh_h H.o"/iSE\14_#+zN؋#`ܣ@5({_6c-oo`P]X=Ō"1k'Wc{k2r>XB ~g%&StZ vr>D68%FЃ A7Voz&pVM*o"7%L=lVk8q/IN;Y7h}M%6GIVi}.zf<怯,!.#Z&$r4>v#lRhPѕ"Se#ܙ Yݲ˜FxJM-&sYy3Apr^m.Uǒ!Z6bgt)%+)PUABo.Ġ m#meh69|^xy8YwM2$15.SEd֫A~ UfX,('el:iH߫D]_ B;wo N{dc]c=PR%.ze7ƹ>hۨK䙌;^^eO0&Ge]-̕_~B,J(%,F\f.ւn[KE4OXE5.Nf CsEX Ak%% _N[LtvڢSgFf0Z˃mj۶/]6 nϤ} 8B@cv WD:FPg mNɎNP~V,Ó2Q`Ma8=R\ MLOxaڄtIT/oy<+= }.^ܾ,O,>RgU#!M;IWUrUv/gi 1aVr>;0T svRYƦh\Vf^aXw&pOY C mBLj]UB BAXdʼn d"xYF'iȧ!fQ/.˗]˂Ǡ!|N ,lU: Z"NE0́4FT))X !d@i5MwGF"4R7.)xk[5/f(N=9o } ~4NFpp.(`ƥ6M@@t mF0Lq+ѣBX1%1Rz_WU3P-d׷bL VJW\1Êd~gH_]AǓFn%ur^=)  |mOi%vlåE%+Mj2-QguXl}ﻇ ?ncpvCij9f J\A:Hw=̫X[Af̶薋7[5kNFe4=LA*'ŝHR}"X˧] Vη]1iy}롩er)f~4MG 0nĈ-x=V2Jo&&DvP=ՀߕлG@ GWa5['X[t`dU8c]!Kh vklP;;xfsׁ`>f&nv#T⁵ ._/5{OR`JƋb\+'OH ,>Xȡ/VG'_r <<̀kb&Ls\FOEs<<4%|@qs<<8¬@>G0<G <<<<<<kms_PilS|ԹSS\ŋP|fIwn" .JK䔒ጐw._r@2" 6tK^\ͳ8Hk f_s$ĭ.\3,+[/!U*Yz]Ja QC+}*S+;0lG.MJ%@B_EjGΎzD!M\y.ІzWS0;gPDH`A!QT0l Nv[㣪WKXC'Dt 92 CKPyPDT]1[ \fKdl+B_GbP#A!o1Fi0? Óɴ\ 8RSԛ%@(Ci"O0@$>79AA JP"1LG03?NgLӟCADLG /+!1AQaq𑡱@P0`?kR h\AwLX46h2kf $OȲU_ em.褈 h[K>[[2b~ÖVV9lbS6S ZJ/Q#̉va?VkP"#sSgT6*8 va^!0 gH\\N+T%[._? 5p`2ܵ")pl6I2X*E *o\)Dr'ְAjt% ȵ+bJ1%BI! }.Wkb]8n8]nmOyQ)ӏPZ1#c!~g*hgti5 pZ@B+m/)ҩ5Ku˹mqFJ!ԏ+WDGU|&¦G#"34!u)  uWe)>dœ;}粚i&PCW!Kn/Sy\qHvxvqqFOx(V9aň5X/  }ⵤ$rH[%eː5{Cdk4e'v\KsM#MN~ 5nс3uRUur㒃ByXLwT-8E kE(l =B/Sr0b]KՃ!}^p9R>n$A873vPzl5zz_:v=#MJDtMቕ~%S|"0-X$E7P"X/g98JD`wYr)L$A4 cK 1A|%Haa} 1*u31:WciSQT+XHYM,dK{D*/r&ͮʴZFF+;@K!-Id*ѕo\} epeH@-}=)n+YVYJb\Z整XSBc,:QV)eȍdKW b#J{X ("Q[f 7)5ݡ+V?L%:QzQPFjUOV}.ZR)QwNdm,F/0aTmW#Xj<;!5xS7tӦ%Ts .@:ZO` ii t󙠼sLxܫab_X2cX;i/#,xGV$H/'US`҂!1ģ *䮲%kD v,*Y1JzT Y9o"8 ̵,z]I\jRM;Jta ܝdGñW-5 3E-|[o"]6-=ńA?d\a# ⏌J)N(y8=Fp2{1BWdU݅_`%9'8 [ᑽb)#ŀ3;9], ɖP\XV·rAh j #cF龻Hچ2?/oԉ,-rLũ 7M/ XiN\rфMCz\9Ls @ VZ6NZr0 h62@ (#-l$2 8  LSUЁm!#ʠUj[^JCyyڃG{ jB;X9Qb+o +-oB(dtvUƏ9e jgg9'>yB-!qKSv/WٯSH4Kʪ[?d0j4wnxg< Mjߣ/9~.]G q̪.8a3Z7S*+rg'NiYk ^;g,Szte3Ja-X+T%٨AECl1Z hFPZi3$]G8٥/Bl^B5?](TסPҢ&6aŅc*ѭ rZz[`iX., Aw 9& 8H_'&՝3KfSGל5cƨ8XcPYT3!t܇잶 qJӼAJJ_CǴSyOb [y^⬔_keI׻m{zz(-;5}5122Zt-& ocVª;U,Xg[`㏾}Y}sh?IC+xP`/;A 8e +iŴ[T|׊9ԅ^NBBqg'cgS 4@فK6UTa=TkjGF6BBF4Xr306P@`Bj2Z( xU'CB Jty_B Cys.ըڊ_GgG  )~lWcu$]{u6hS|GXnunϣaP^tz\ּuv{Q2]<+_AzGZxEeI}j黗aB zc@5ԠEW8/sQRzzA%X'sb; Fmtqɲ.yٯYyQ%@eg~3, M qrƪr?ʾ_ kPt ZCjhk3;/t5{5Fe6i:^Q$]]2J#nXz0H{2D *V`JHˈ*7܎rC9. wC@6Lܵ Ϭ/<:u= -~ -Ն)D#|fPX`_ABkŮߤwG:L,t<)t46qן2dwEy( Iz586}&mlQG8LgDiks7@{hY, <2AkͩJ՗S 2z14;LI_]_xY&]u[KOdz o/ 0h8j8^yQ)z°>=f!R3mŨ  ]mpكWeއ9ڼ𮲠M {X+Q㿝yhAW(oicyW{S눅2p+k‡DκUk//=eky/ܪ礲${]0 (~Hn{GĽ?*0ͻZp"5Օ TI|>y'V8Ciyxc7fQFZ6}?Vo@U+凋NrU(X Ͱ+:`匌  T؆HLVyi CTO9k7;Fim ,f|<~b[^[Czw zWvm0)8ҥʶzXܫaD`KD 12/'~'PS+q0lIKmaY` bcƌ^| >]$^ -"`ܲ`VNE6X:_bml @jP,PSS5^r3EZ&ri6̇\e[}t5HUi8\L8]_<ӽn߱eXAl)S%D_ܣwEt5^fQpd.nҞchfNk4XHg]~(7~ ItZ߇_;Ge~HWwΓvyhڼH;v0^y8C]F#"!kw+L͖׿b(%\ `t| oo\(c-΋yAa~r<`$+AˬU+.I]S+L¸4Z_8;:=2d"%ҡ QF:SYΫZՎ#srЕerqJ<6zmb4 y;ƫQ<%р]u=# :? u/RX6iTU bf*} ߥDy\,mAOC>Ya]9A!kmM]bgX]%U˯gG4=$3A(..UM9 ]6LӍ iW;{y۬q:,kt ߟߝ'z"' k:/70ȃVG.+kr!&ٰlѷ\46jeZ]v!|f)4hM#_%kKy-M&RJ?䶸 S87.x[UJw!(36`7:~yɣ^y`NP)8kX o8J%96 KϝS~Rܢ~i9y=3!hpJsS1t6d͍^PlAA)Mk#̙yAp6%(+}pMQ)baYzCOY٠p/sWdG( (3XZ s"UZԎx8Ld&g0֫xQ<6 ݼkpVm4yDhm9|ǔ-hϼ&e R I}1`rMKay{FղV:"&ߋԯTs<+FD2.2a]\rxfGi=|EQ͍^}"Bo pFa p9C]z  S& TjeMWOȾ u\VuoR0hC5q 3 @h1G+o6K݈ * p: Z["籀ѧq,2[B?)2UECƝ\yF ˵h&‡>fi.&ب[oS-K 1wVifXԄ\=vNh^P?1)V.?rx)f@p ݺr/FLE>\rNA|۱} 2Dr3 8e aFa~V\::%3h.IK9 4PPtu]ͩe U}*!9kR- Sjh fbb]z1oҊy4xP ꕜ:(.LH[,7.˃K[ʈyZ'Y1 W7^uv5.MEKe԰uha'.8r4/|Qhm+b ƭ;z`ȈPhFUs_92<ZО]24My -ce1{-W_ut96"gN j ZBNno,T+mnj&nROIH5FF&LCXϞtI-Z] uq. KX{&P.@-b,X6\k;ebahF7B::sѲl]bje/yS qV)YE~\a" \pP.`{gT/!ҍDًY(m4=P00~5]Ap4UuQl+͸0ė;-UWqHedmXz=9L[)p84DrUX3RhjNhUC4a-OEh6?]ԪQ4Y7}6h'H9b&=P)nX5GZ8! Yu<.p{jI,RChZKy*UUx)jaDlA&?18n`ї^ZSRj ((\Lu:ޠ AŷB7.TO]`qqx^@8(Z;FG3XWCiO^:ND (>zC0*yKmOǏv)\Ic ׎M0--EeX$^&W~ x1ks]sfEvC9mլtfHYr?/1k{RtSY2*oV\qpsa"28S*R%@2MsX r!@eeVfqCH_FFP}*(sfC`:KPat9˺ @~Y\qVrfŶ2|ʊ? -mTV /)ؕBC5pZi&%c\> stream xyxM$'s" CCj+jbkTZ1URUEC)fR9}Zﯦ>kr{-k%B!B!B!B!B!B!B!B!B`B!oA`CGp[=rkG$A`nu= |rx1럡A`^llXdбD8̀jjsnA` vwhk$z~z" =smfes 0 thSzf#OA`.M`SkA8z&n{y!~5;a؝\;oA׸T8L8/:KA`uvrx+8LZV'GUܦqz} [ê a()ڭ=5K:1ݦqы &.co[fxK+;0еcJZez9-3\mU~ayrzՈ&6V^v =>K82Gq! Z>]?0ӵ~}~G#{|߯NagYKobW4 zYиӹ\JMwW~>& 3{ UZ,%`~L{}̮ޮUo1} iYyϖR[vd^K{ZzG>[9?&6e>c 4_D7czVǤϮ"ǎd/j%,1Ӑ#zj,S}hb:۵\qC3#ժMVR~L|u|/K6i&98WlO'5ϲ.gcU|ԩ׃6{GG20IrV?siёc%`ȍm;1iō_)'d}{4̀jVc ~Lyq-J١;0) *lI;:qhp Ʃ,+Q ё}o%`3+[yO4%ʽ#ϛ/ndɢ޾˾-?]t:GK8)7wWUHƮgL#6<ՙIK@aPZDwdaI]~u@CN>&t;FK@[kxߚioh|Ҫvfs17@Ski_V^Gq: ΐ,M)x[QKg2_K`:qűtRi_[BtJdޗ,9ʺD.tʥ]'r]FSV4_g{ FGt??|ՠ*K3:[:(K{ܑXt]kNUUel FG6UHS*9ʳ:aSчXQ%IVQ <-QԿ@grGTSaկˆ]1a+YUUNccIa1II3cLOj cO١{е-q!mK=Y:Wfn3nѕץIq]jY/ַrAŢwd D@&D+"x`rNjQ=J ء%Jq,N %)t <+%nEG=#>[ J x;+: S3Mt ڏ>Mt *9o$sm(4qApktiK/Cߺ_\ͿNOSͿuDN : >@1t|*&=C'mE'ӭC'%s-CGqtftƣmtQljBgI3uAg3DgѭgjCХgJEE3%xytbʢOl B: Bţ4+,]ip'_8,:NCl y :LAwU0: XBwAtOqpl6bt٬D ʳY΃7ʳ΃7эg7o6n:θA7]?t i_n@83]xmсt94C'—/ЅgZ_ !::,EClyt"\Q Dy#JUem wt$\;7t$\ٌ;NHx;Lx4wN!H2]w.ё\v3W\63IWt۹Ag“es[΄#- G'm : Cht(ق.[P.lzSG3mju@uC ui dt,ݵ.qбpck]Kc%t׺<+΅5+ spt:sVt:]G‰Uj͕+йktӺC uۊM 'c:NDG :>8\A t2|IDxt2|Ydݳ>p27႟27Z,tz5FGIEgà xot6<]^1eGtzEzUtz=,5+p3t]uDÁ tנa_ FÁ 8s%}6'%ĠK6`%:@wlBt:[ؐYttݱ!07 ݱ!#0o baNtuCúZ6:6.:ٜF7lPbut@+ ]A1ݰaQ^ݰaOMٛNm+zWn8bXt".ڢbnt"Bct"b[ktbvbw~4!~ŬAG4oj-FGĴ^zE#bOzEMAG2zEFgIJzE DgIJv@gIJ=vu@g0'vCbXtFharP4gz@YLXt"~[qZ:t"b-t"_m_1 m_1+ 1Stb#bZ;t7KWfAPt7 *]X_uGgİ}1S;tHҌIAk蘘@'z5^1)tǒPga/ >@lHX7 ݱaϦ5 ݰl-_q[CbK]#lΉUհ(с4ݬ">sFg C^{<_[͋]늮4o▗A'ƖFt g]נcc_6MqtnP?z$\Ui^|CB/+l#:>.,xyzǡ+4V_tj;ݟ^}O7.I8H?.'6׺ \LVZ4MFY,/ *Uf(zq8#KWMYvpj!K;!:c|]lY)/)KDŽuyO %qg$vBǭ4u;׎t!r[Vr4~їtL]`\coDs:|3 i-DŽ;OKz1c^ no@TW"[j@蟈^1^-E){c]хkv_tLx:ކVdE*:l%J<yR7=Vݍ fcVk?&<ew耕.eC5tGcW]^~WݓhUN,Vu9]WSU$栂<ѕIWtp58oBFz2rL8vt*{StuRpۉQ,bյ*8&aGZS:#%RݰAb]Է%1:c¼^'3MԊk>ڿD‘%J;&ܙk䦰ccсp۠[@!lݧtDŽ?kn?u OnzVV|1虓vO)~Lxz$=em:=a]ro=]˓)d_zDm?=|Eϒ蕼DŽסH 1a 9Z~q!-Tl1"F]\JZ?5yE>ikT'R.v=W;&q=wk*JS?S!&y>:1fr= bͫߖc®S fi C_\gf\Ul3w>1z/у'[^NxDŽ?BHj/ 7GHps5Lz֯WXbNѼO_1OrL[pNdtKkThQ/)VW˯I,xc˺1t77[%sLij酨~0ϕ-~lAs-:#W;L9u?גY'B!B!(6F endstream endobj 14 0 obj 5354 endobj 6 0 obj <> stream JFIFC     C   " <4},*(+G\ȑ;ޖ!Y>d}Fr^[X( 꺝s3SкtUFsE+$FrݺV5>72]IrF?}"1y={5>~Zs^vSK1K;n&w;]rRzz7L[~ӕ.2޶wc?>'+5K+wut;u2KصI't(D}1oQIG"lnǛ3WRLeQ%tM}_30)^יJs;o2ww⨶Uw!i\F_3ZW_?@ocѾ E*0qXd~t Ҥ!\OR=V+F>[NƦLOiے.Df) cMZG.cjه2s[J-M׎übA7̦ eOkШ?X!m9=vސf4fG6N5v'[&j53雅r|}@[BQLhze|aK~3FvǒDl2KvibQd74$ V/?|ȱD-^~<ۄ3q̞4ERL\jB3*lCr<e&WlOY]'X0Ymz'8.q85eaKg<Omjrc9HH҆-|}Bze/n:6;ꨜ@5iG0\szf']Z^ɬ2_١)ryRtJr( G%bA 4۵dY^Hze mXSզvdS{2Xr){CM\W^u>n &1maft;]^_wϮ'; ˷Ζew!V;L- 6iRkwϔm%:i:AT "e}֝2/Ǭo׭p|#N5Ur oyCk7 L{7l Wiz֒$Qk?X#k̐gubXp6zQ͹@­eN΀͖}%>G 0D#k,/NU lNyl+[ZBc1*Ű?))ȭ؞{lP N"uWj6YEE~:Q;l';Wp+pH%hMr{L$/y2<OPXZ$o$ lCi+ w[}J3׋+׆"[EmB-/1]Չ_x׽ ݔ|̏ ð=U_-HƷ z~T:__s]7;.`cY&"a1 #F:&Xm^c`eqJxu37#;;s^$l*XA{>f JEvb7ߡqGo(t}@NȓUIX>k" lVRtCu̎KxW79v1NLad-?UwI ~oF q_-2Utl=n$OgN&G.R9H =<gpE4't!(̲ (WWD_,{ YֶT0R pKiP/b'#~ug8= ?vL]vKQV#||3^d]su8eq/Vb\.u)G.?=!w `O WqSd:cZ8j 4~Yk z4O{( DBQ` .dą3i6KUE@&B&B7y`L<.6XtxߋٗsYI@" YE5nOUT,% S$zZc BLcU1В埣E蝰me`Wr0) !01A#23@B?}ACy,f'Z'xd,z OV [v0q;(bsYO/Vv1ǒǃ3{--P6/WH(>6镎2#-OiŧcZ^h(c,5厰 qLKv`ߐSf(Xs)VT@FIʎ?k#w?ІЎ[FZCQ;VA\}UdM%1 !0A"2@Q?{]KM|2-wI>YHMcI> FJQ%D%Ԅdi#O'mNnٖ V񓋳%+w IE[''VF4F\n/53mH&쒧Nч'r ⛶M+Oƈ┌z8"1QT&VR'{( 3~ BdIrWqCL$qbB7dI-;"hbz#[P띫u8X|4S(F!"1AQRa#02q $@Bbrsc3tCPS`?h W?hG] ޛ=g gDאJߒbL̳ESvh=7tqphTM{PX %<)OE9TLrO5y+#癖WIG@`)ף @Pf\"0(T6 Tl+')I~~!f:5u gpwa#vF!y_ϟ]w0Y*zg~JnX#7VxL3y}mM#IiI˒;-ZgwX{”sV{>xkyBt_ޮ(4 C1u ԂmvHѨnH9<~dD "1r]Xonn8z뵜:=!V,ުz>ZγZܰ%}Թ\{rN',Z AiUEtn&ao%A.x<ZXK`ژ .x,rt1gR S7\}R!w"9iWdac܄Yir]2BUթbif*>:tuZ%#2;k7 'RSqX JX>H/31c}cFW *!1AQaq 0@P?!|@7V#Ce?Qv .X6Z/U1޿1TXUصRb*ytB/h 2t6Fxq5˫6"YYӤgihw~wԠ[E&rEKdwbDAnQKCt"kx 06wg w:ˢתmz=y!2ʌGqm%q\q3*X0}OԀDn2R[ufyaP)~Иqu =&&cs$)hs.aٷ @98atN'Z!PnG]MIN usߐ=li=9WATBŢl( ӱ 3?|TCH(@Yްx{e{{imHbgVw5 Pw̺~bpbH@K _6q G #kgSq)-iX2G"hvҨIf(?)@!01 QAPa`q?1`%EFΟ*|~ѳ qqjtؔN3eTGgD>bU@MYI{L[*gʵ閔blƠ+B3R4ݞ=B]_hsrvzqi͙V~goȎ80Adąqy]KjBJsk|-+1w9])ûH<X/ԧ?Ld3sUfl-~Hդ<73m: ?cN2Q!a?7 LRҀ(I[_0j>(A$mi~4ݟwjw#%7\{KwQo3ǖ3KӶ7o~_[.v{yp!v?ݾϖvuܠgm׷'-O{+]5nic3/rs3dS_k{gnt=p٭zK] olH3^.5HvwxlӚcJ.oz 3kmW&[k{V^o~2yfkγ-\ ?.L5_Yupms:}/[ޥpCCc|SE6ѼG[E>;0gDw< ^c i3FXi݉wѢr$yE_Ú9>, XЧoگ珸IHf endstream endobj 5 0 obj <> stream JFIFC      R_YP^u".bL|ـ!㤶jpY6td+@wPWB2rycqݚ|Vk)W-o{sGy}̀EAc$~x/tہ͋?ϫ=J=^ߠدnjD@pvGH]VÐƝ&+ҭUɐ72_z*m5 N߼ZUylAjiG~vI(E}yIs[χu[nlʱ>~97[Y.byzդ~1h׽TE@Y53_GpNqss.~>Hzzc zeQ^WŏQ=&grz޲fB*܏։ЬhI ؽBrӹN#vP }SgPتX) nm{Tj\zc Tk=Pb>:>@P0Sj}x*kF[Q_ Mu:2u F׀MR@ Ӳ1`P !#%1@"$03421#ñ(6f/2p.1Ho×V9簮`9 aCbkX<#ܧęV9B2uqv$+,8ݎXTUFWϲ8/8(V,9l+;/&Mz6l_:z5#qUtlɬdK(eͥ[';b&: ܫө%̞HJI{~jjpY kOL͍ҰnEFb3nؐ Y+5|{#_^y/r#ԍH81/52'34 dDW#Q 7ס> ,Ŵo_ }"&E4IX{tؾ|F0C>?'ȒKXvL &+߲*k(8NX#UY~\!cfjdRNBĻ|8=Cצߚ.cXd캛9xcȌ- F.# ,׆o<65%pWhefOS<r&L}zԉ F'0ᇑZ)cd. Tu)P D~de1Gdވ Mk=1MXQUl@k gޠsyxd'35z,+-<+CN,E?nVF[ `),1q>6;8LQk-iᇒTUഥQ4k~2c uBpq+]2f\.01=6_ 2d O90PlgbqqdQ#F.٭|%tnuuH]cžHƣ,5&Tك:yv tzR[XUYWuATY'\E&ERL^D^,A`݄RbMh˛"[f&I%݇iTvZqǷZܑR%yP$>JkvWU76k[O^YYH'I`t 8twCD/풱rQ@DzFtN ≰G;%:giD0^q(H8Ċ:!~ Z&½M-G"6/] a` sW]Q׬nW+"1a vV\}RҎQZ5e?/,)%&{X. oE|740XN G q`Fy3LUxK#F!~E93dTg"klJ%̿kӳ6'r?%e{`W|b4 Dv;]v5:3+OblCv }>t}rIB*('ؓ N Zl0uec4 :9eDbr8V gbՈxTVRZv29ם~l)R蠵^lX?+{ G6eIj$V-0*Z]>-N7}ReI1Pgl>~RVk@@TYGUڕ2u;0url{a E MwfJ9xòʭ6`ޚ|WraFPd.0]>oKƄA@4kI xq '-MMU!o )Y2rl}Đ:7[?eZ8-+&3&13*I\%^⠂7}~*`u.*V 1;s_LZ|bˢʿR]Pq -wc(nD5'3*9Cz-M!mQa t~{*N6軴MåU*@ r;Pe{*z!94M]\_~/D[aĺ@y&`y aÃUuFwe5.wiRNz7>q5IKI(ewūBh"sTdwUE;1Nk|{lmT~XLNH8-s/_3ږ`=;1!3):l;]&T4%~m>aw#r?G0IV1W,ZI 3oj#F0ք*!2PKoR{#TRNMO+ LMN7WOdXmiSO8bBhS%@TnQ0j:sl.@0}*8Y4Q߂&Y̏X=(-u zF 2FK[߸Z}v#\Sw )m*qXFa,66,A^I؟dj胲J%vHI Q7\W&id?)A : (Uz}a8 :]A*f i^GxOeO6~. Juro!$bө_N U .2(1<I]Zҋ9/%(6|eXAs`#,3Su֌XP>R0:LnYxYart-I#ℜ[lQjsSc::\W8\iAh:e @s`8éu$4"My{!ĥ/ B6 ۈ Ե/R\[zOL&b,"\Έ4-cwHq-֯BȽ>.0W$\ҽCz\ g=C4&&aTiiX@Rx|jAz\*Ncd'`za0_9X,ɷO؊KI Ҽn=I٥pn1JdU]gnԤ.lZf1XM餪U-9C088xyU&|~]!E!WKqG3>lDYirj*Bu8(hl O \xf%Q0>鄽10%f%^wU|^['s(M=<;2tEx-3x/rUi4!c+HRN Ź'"Gn+eqO(Z #0MF[rl\RD)UaI).b`QI9~)p/|b*͸94]o):=\ےN!'MOT\ӋH7CObӏNq+UYŗM| eI`ǙBmW:crM_'Y\!YY=)xq`:D4㯜*΍p(Ű:p0h8varJPq7SMF"HoL9?8ܒOп:[OIW8۹59$Gˌ.rc8 p%%x`R0̤  )ʿd0lyE O!=bG'3϶?0qis{%eYtDOڇOˌK#XPq䊞b#HtmVm(S6\'4NZf]\!/(KZM\! Z,?2ΫtҘp'zijL YP@ @{GJw٬8P-G7"me°SjEu U)oDQV\"REvbzhZV740KJR4gJ!UٯF4[dpf#~a!+mYZދF־ uW UΛTTURK'ga(@"Bnֱ+.'qHR =t#3Rٙyp)<:Y[13 M,ݺZ}#A)]3H%)tuu@&4R9/LsbN<)^x~+!:qFPG(+03d^WtyC̡ham؞ؤԙPeV00<#Ct} CZk ,ĵJSHSs Jq`;wwA]Ga*.VPy=Red͇nN+Rd6·i' uŹ#2y񒦿o--jWQdﱆ70o'Y?l8QUpE| .˸n zl>2.P#pθ,guTf:+<]Gb¥]vU$!Z5EVtJ`"bܛTlI F߱/+$&i:Erj8CXErAV)Em-*"ܲ_uP|GG5E9$xER"=^}mZ|nڎconm<9UPwl.ϊ4R<4" s.la  )r&Ka|>ío,V삗&hӚ VyLlI;&wN̈́Zmiq;5d?00 H8(Ro^YGz aF:&M0 O+Eur&SjL};2FJ#~C>}y/'ퟤKג7WL"]Sm~DחG%?HQ9KJD޶Cy!{q众:)n^K_HܗW%}%/K'ky/(}J{cy?ޥ%V-o,!1AQaq`P @0?!5W]K2}0G">J<#ɦP)\UDEQZԾ0&Kt_nE2} /hsJCJ ;b~Æ(0K~IXn"V74dP;@{%~|@WN霒=?GEElq$8-bXYpJW{xOb?pÍJ |cJ] QR.H^B8&ߘ^ !ۨ8| z:K?E,q7P]`Hm1QNg[z nϠB{C0ysfXˏdlAN糧3orfNL)|C̃)q`uTsS:1 Fs-_(H+IڢS~ f|J+U~{EPcRl}@ M,[q ]yW5ӊ'"+.]-S7;*K}S7Z/4f#Ĵ}|="?o?Q.כw}Rܴ19con?CÊy r :/o:W; ~&Q Fg̩za_`T65 q6v2fMirNדkE𥋩zK9<S Z~N2I*n `O`y:\W׫ա{ ΋.1M7t]tAJs%TXmhW'ˣkg] B5~?d ({]ytm69Q/@Q' KfV ~p$/[%2؀ҼGP) __hՎ눱R62TCun>!@)^RpjNӬKW-]-pFmt[4 :c{^";4DZї4cYrGfճbBK6yiw*̋ q^J%Qbvf;cNnk%kin;Ś7Xed+tX_ @`75taF|aocu^븘[g|;jƌAI M(< _6UYzIYRY[.S_ 8(QCryWeH:zU/UxC#cE[0֗ 6ψ'qyK'pKhCmIo}(+Bm lR2}ǂJ'^lQ0Zytl)oJSsT:AWZ};0lYe{.ұeI1h,?~P;Qjt*~kC()}@<]8_Q4[6l%C7`ÃzZ3/nsQ5W`<=*p|r3M >Aft< mfv ajrvL=MiwyQAWj%FOB ilุR iU߳l&yI*)u]䎨C(fi~Medt}+2d d(d|W˼82_$m:և=vL'R[<G sKx0Hѹ&I63&$K(-lx:Tt|PlDX)_TvkQZYia)CXF.F'C? DŽWՙxUze4;K'Gh֠.Z,Ny\\ = ڟ&pc w?(?zK$,!1AQaq` P0@?glpUO\ `Cp!jN g(ʸ ( c9ޡ%n-If1y%˅w" X<љh=JQsuPð[.i3XC I FF8 OxvȭJF 7{…d HӃXRCd#TKlhMp+8+Ofh)L'%ChW[Fֆ6?k v>psA&3x\?8|h2JFz%EE 8.ADvA/aa=Vj%i ms +X>6 %5vWA%^ S:}*FoT1wql)XjHۓTI kC(VƓj[30 D!jȎJU~U ,[nD:#VKϏTt>:F0jʥ0c! z%h<%<\Q 焅\N ZZkZ>$!8 +IZ3)?V$Hӵ?/w}Hf is-dj b@ٓX>bpW KaƲ)K--Z7 gՁAKINYP",D!4 n!WVʘsKAdT'>Jb=M+WeHVOAVʿz5/ZNQEnHmV - a#Aq@v0CVɇx7Vlŝڹ5 ‘2KKRd )VP'DY"}QAp"FdmW@ /oj;qXB[,JwT8F3JF6j^.L8~~{ST1 ص%ʗ. !XWjf:7 8ԍo4K*!B:FxRddQ\P8 -ImڠU`>+T!!X2z_$H[fZH$n:}ʨP- &'B"Nڮ9 bO*f4U*) H DH3( 5e70.[Gh4" gtFgG H n=i4ChO2.:t~-R (ד5 AK]bO%I 8&uS!)8M'ϲH*b!xrԦeQPIhC,S`[ dI62(@SJ$cA%ijD9=;5pAI"YHa ။M+EfurQ%e ;  c(&pPE hUXY[4=z@ B]jN {C$&P<M 5RRh>h ̋{0@Fmю)'jM%) [ŀX tEkjϡe$Bxt$>RD]Bp4'B: vk ojL^o2WE#*@^zCofL8L"IGǀ <GӲ{T!LH|7IoF 7P6Oa!>E\PToZpAU[k sXƪ~jB)>KV*,kb.e8Wwm=XUOBV l+A,pT`7Rw!@OfyhHR5Y!Z! <8  AvIYT2C(:y`Oh?=(X &1[SqV. 'Lh+a;`&ҢiX68D6F=֢+eՃ0ޒ~yi@ٹCVR%1'`,K6 ;RjfY%7`~|PUɑ/PKrɜd61Eak%Ŋk.3@ wbx]mъ$|YZ~(McO(M"͏deOM˜=1c r<?bR{[[4` 9m`P><=j /:d8)kaMKbHAgdm o@b7 V cku io g n=(I`{Z ,Q? endstream endobj 4 0 obj <> stream JFIFC      Rα`ҳcO,{@k͗R(Wn&[Y>CH&~qh Vӟ[zlT\".IkC[8͢@LsJ_VKoYb 3*wk>*W_tJ w᥺sZ\OcE"?joܯXybNW yWH2^[&!5e$3g<@c*Zv(:Dd TCQtl22։Wj./wz]F[>R{I_{\ݽ^e%qUWav.·^ue5϶5Zp +a+4 Hѻ()~ϐ;(*`+<C P{+. @+d 9c2`P !#45@013$%2#j쁴J:˱ܼ1I3[HCiɇN6̞=W$*d3#3ي,`N/5D8CkH)@cՂ-#T\ed=Pc3ERZl,Ύ]1c\Y׮j(d ] YQTw֣S쇱.ZA*X# lkN*H$w7L'&YY>i)dzٌuO(CjCm+ᝍ~|_JeF\RV2f,jy&Tѫ7QsG?Ћ"`~X8 C=8喗Ok2*:n fhƁcȎ_Ul Lf 6zkF /;a$~;mOJYkUgt(pM)0+Hطhc! &Bn4{!w2&YJşRt֓gם oVdvp? ,챉h8nX< Xѓ]xɗ<P}ܰ:6W `dҗa~DBMgfGcGx<2^pJN`]>gfj0Xj#SJA8a-? W",*n )/H#_MIQ2DY3*Ro<] 鬲]ڥ](;ap|&)XA ٌȩanv47m臜bd@zIW|;.Va7Z0:汍G`, ;噐 ]lc=5̕ݝP>Uӥv@o5c/A $,v[6 CXv-ó;C֣bFla_=,yȪ$8aڡ 7(.9̋lOF*f?YqM_{lD^kr'cQL7Xěq A[GB&:*6L е5*rQp,(qWi7?Jrkmr>]$2Ҿj1z#mVd4{X\Xzda\`M& "0HP洭=&h%W.D f2Wլ"*8|%E#5I7:q;^WAX;c;X$5\8^a,Rh/EsǀĎ/s}p7۠k>rb,s uD >73!j*m (MsS0 Ft.N˪h9<,g"*!Q,ϫ`> D**ي t"<90[\{[? *P%+(@V~2ҋ3YㅮǑ\6_BGBJK/YGrST}4܋Fub⤚6:-kN1(M>FOBf90_IP-T,(tTnE8ik(h;JJFzl)4Tb[E?jLP00#T$~ET6;oNj<[|frC14|3]:sȤÃ,GT75--UFzxޡL.p=%M(\$FOd3E^ȵ>ٯl`ss,68&W"Ѫ{ !L9K d&_+JQUاjY䰮*I0(iQuF):hVIȶ6CI`<*0g݊7Cpz-K>Iji: ,}WPqJD,ElaلZYK<?te|bhZs ,N'O|L/yW1Rx9跳Ysq| acrI 'w(;#zlH5{I~|)Y^u~SSn! =qjW&'&MJT|Zy@8螻@FSV8@̳w-4Z: Dih:Zt"'WP6$%8+uim#ZRI(߸ḽS n#8xe $I曵510-Zٽ{V9Qfͭa"j%4!gk@s$ee; e)TLX){;k,~eO(_0gF=عWu.8,$TK( :TӨjo|!%v&EZhYGos %[+A<6&e}<&nUNH-':y4vnc&-&)-ȼ|w|iiG* |MLr,i8(iK-sѶ0:ܭLcA̶\U4'ـF*$%4&޿t@\җ:皁pAgs61a2 ECTAS(T,">xO4=|X-FOيOX[!-6 a< F–y!\VyIKt*7Dr.dNRn,K荧)h(ǘU=5HהԜ -ph0Y+)= LQʳ3]ф3.P%)G!Gbq 4U$U|mkNK$ywm(t\OKdI-)kIǷEוeIYLg]aU׊3t FTZ5L ]g)*Oq~a;L6Qb9f2t~ϛ. u#RѼN*Gl lKW7[ń$kQS+dX&07--A)I4Z@(̚$-ʡFP?vf2`%-8s96\YǬ0 F -sl.:Rom^fXCNhJafʍ,#'̺nSY )5YM*yp;14-kٵdg dVڒ d&r:Xmaĺ[șhX@)ŕQQań +Ѹ]ZzYΕ*Ԡm$uRDon)NiX$ 6 vuxJts+*2Wkd3-Ǿe1#tnJ q5)()T)j+?\qQ6:bY-:iQLUnRL*\ʕAp0]BYdfBJDԫI/tnaT)aPE !JBXAWs2&VM&%2ɣ g2-^v0& gf_я*%Ĵ|yEBocR;0B("ayBq{ [DErӚT)y 8eԛ+LŒ;!nХ>AnTwd*zYDGCm\@UI3,;핕1D$$pNe^{"R[@nI&\\%$Rp5nئp[pW_bK $e%f8%cImȣkIsn]8&ɗijRN~w)onj΢IU{w65uwbX|mxVi TM@,J(oP0ӯ5UǴ*"XWӣN-(O "̛.Ϋ|u鯴Ť̽>mK#C,q1OCIYRBUBl7F0OAY`:}r;0lY ̷-/QigTӜykj|h!ɉ|4zkͣ64q%EU -nYg} KߟGϙoԫlݝtXY͕PfI 90׶Gs.II+"9I`vc7*퀁G>KB 'FS&A_}#dwA2ՊݧC gve:7PH u Qm }T摶_15$,m+=U6eVkk|3l'I],nwYJ)huBqWqiitC dqiBxTiK%~Bj;pٓmwg&ߚ6#1eP ZMBڅ.fs V>{x ~1@(?״Xv}kGOs]*"՟)5ǴL }`GLpi9hUN'tW avk&,9js]~^'sZ~pI?8,!1AQaqP` 0@?!Q5͑M.'ZN+:zkkA)>ȏ7f|͈g&mU2ި{_({ܜCaA9Ok1oa{C}@%(M٩Ӏ6-|ޕY! gJ8RX vsXUzPmAȆӈ_ /l( t«]#`jMH{1X*;bJٯM]Xs3uzʴώP\(F(a3* %?]h7 #ֺpa3P}fZx/p}Wk&.$vbuD'Ʊf!ڽp̱5?LY0>._)"ۑP;[+/S,v}vPpҿ/ /a/B/Ơ;oM !$KXH퇱j>Xբ-v;W: ;gVp Hzthu?.U eȺʭaHV.&\^2HZw$_F70xX}X J8Fo6x+iʉj&qb{9yJP`T=/}Sz=Jۣ`7_Wgb?IVmc-Ys=t8d>[8vث}7b6{i@"=ĞZyC IQ3;.)I?U`5ښ).HZJ)#\W1j"t)l?k-wv+x1Y~>}.)5tԇJS;Q݃fHa` >ɬ2I 5iu|TjxI5^g DT:Eݔk)޷\~{՞=6Ӣ  AFcsW l_ڢu:0Z2wHx`+׬\/شA(QuH*՘"<2י:ٔ>Iԋpށgƺ1Bh X7#F,a{+q%9K baӐT?72PR̓v= E9*a).a.fRG-_O䬱-̙rSPEf%V{M("w5PuVןG.W]&1hNe @Zr0}e)3Q9UD0_,Pks˵EWK*y1̋W<& x`17P4|҃b'i݅Wf!cAFF`R>LO1=ףn|_:QWA18H{]T.e5B/zx47C] ,h)<W!Ċ*-@8Ij !M8i6)uoX5V#rV^pZ JΎ>YBkF˨A^K-pۃ[\?H j -ѸQ kFyVWYZޑ\uYk}$5=Zb{_R%pHdmǗ{"{#)uXe0`Hs^jp阮O>_iKCCU.:dfqcԆ b۲heWUwe7RX WC{xO#c"™MSvEsHٹ&Er݇b菽M`Ĉ;5:þ?}O6@(4'E2hUCQ+{KDMl cR ȵ 8DnO 1g\ZZ^NHboQRGX~<0$)bV*ް,Q_:U|O؆@}Ev-H܎7?Hlv((1N@| eO5g^ ӂĵe-nҿWaަ[{f|'^X7U(G>U^C_d1y_ډO)|Շ0wy4#İG[$u8v sS_JeοsgK,yTL7hi*֐ȟH ' ^O%_R곊F2ź=cZ T%S YSp)v>$"4(pv Eޢ_~/ۧn*/^, (z!K$\y:flzSt'z-┶-Vog~Yc .T:u^ 4qZ̅6BfUw3g=eg-7&O7Xmϗg["8Uf=]H7W,!1AQaqP` @0?PNBRiҥ'<`򍅫 ]SpUPSC@\CxNVP-Lh3` AIAt`ɣQ3 G|M50ix1C?iN>H@(]:Ģ1L0;o!hɚ_ztk@}C%E\d]ҠODm`T0+LjiU)>^jl3sNMU6`ZvTśS{J !%Bk a8aul찒6ebJU3+ Dp|A\O4DcG ?J?]I%4^e⤙4&BQuY%zUF/Z'|gmNj 荐b K7RG?f F=Qz Md3G6Df>j% 4^ $.-!: t@UhVr8Aւt%rN 6(C`"LX*}C,)} NҴNs1%dE6.f Wu^( "NlTߞfZԌ F N_pOJ(jm>)Vg.zP{nF~K ~5hB:(h=8,[5It1+BVlOJLFFrX$Xof78lORF[.9lW|ڨٺlQ@6iK XQv (K5|uLBxvu-N7"9V9/韀 Fa,n(7/2r]7L ݃bV ?C!( 7OOSAn5n*M*oxU^݌ڐQ,#N@bqmdmҬ֧ :Qsh949.rQùL ~nJ_&.5mFm}MURs{-5%e k8C<`dGQqARW5Gi.j4Wt,sUlPޓ*TD<ph/F0T|ѷ629‡\8$@^YtЋ+U_,PmY8ZPY7>&TkNpCTW a/ڋ# +G1B@c[,OBR XroЂ>lFBdYM(H@ |i GE6.Gl 풁SZ3ZIy8^jH^zTIҟqRvi[?FםLI,004@)V%N-FHaC4 XO/EfiQV )~qt2V=cb Qҥ'Z^J :h͚ v^[1XDQ. @&Mz2SLq]sus&mh\j9dA`2C+Em$T.DBrD!g3k 7̹Kvicqjڥ~~Z/O((#d|H8ȕMKƱyH:fHR3i-}yP3-@,KMETW-1?|u7#5{3 gi[5d.f" `!u힕'&j#N)%^–NL20:\"y0J4@޸|w39z`#Utw ^lO4L1v^%vI9(}ؖ%IjHmǓǭ4yۭ@C#U>/})!BC746I/ԁ{ë+bpk8)h% {~ N>IBt[ӚUUfQk - QaC\?Uw wƠ\QI FM̼X=.(e0B΂650',%mP{ i™ԃ(R (2qMF',D DC+px>UЧj DսJB Ks+EhC('tn5'J 0&UkuPR=P|AYA68DHUv 6cֆS ٚ@%\P"$ D#1ٞ w')@TnM4*!I N!` ZrM(iI7UGT(%$(oHw0 %‘q+x7jx8z2q%X*Qu Rtkg4q !BlƦ^VgpL؂/"n}ł<I( Gňl :Q|8y*hB=* ""f\ɪ*vShJ\ FBF$PA$&!e!Єc6E I4\Hޔ"?C7:RvZe}o838h. xf\7:ZD+ʼn@̊Yڌ I!8M&(5AtLJA%cXM4 c#J./VFgXZ̅oK X,-,wVBv&L]a@/?)"D:n/; 4샀Ftr =Jj-AQVVY\V4)SuQusuS!ITܬGQcხh4 Vq{ԋkg:R IOKA#uE$Ve`ޥ|2-8M:?jP$J[HBXRcW6;~ 3T}1%ʸ6"hUΡy"&Ý(0X^sFQF&'?E(Q{Zr3:]mE¨vBuB(Bq1DV^D@Ǵ|_IitVmHn0DmW^V_&bCE/csw PC@P /F18S/I`[X-x.(tj&OfX-<JH`LNe38e2٠찅4pz sN9dPl čhv MQ df$Ԅ']@5kANf4rk;>SjHnnKh#Q@%(D҆Xc ! lrD>L;Z1b$C4+|Pʼn((GH-LB1S;Sme֬#KF)#Vkl/ LƷ7óܑMd@-iŎntڊ=qKj㤚YDi)S$~VRVMsLpKdo*08TBEPL!9 r~A!Wx:: |nkyPSc=R *B-%yegmC$*KmCIt"!8Xq(jiTM9I)`_ZA"a׋KhHQjkN ֬@,W^ΰ}*ЄP FK}*ѵ+lZvjHGJhЬҌN.~TC`MC##%KXvwWfd !QV "7яʕyҭ^2CQdFKӴ*D&  D% ? endstream endobj 9 0 obj <> /Length 8 /Filter/FlateDecode >> stream x endstream endobj 10 0 obj <> endobj 16 0 obj <> stream xɎ>_3*J̀?#,qE8-xx=VUdE~{IT|1ߞ~Oߟm0t~ObOòf_.?N?<}h a>DT-h`nCt[<~;[47ai3~ ylxFه2@ Xp4^҇F<ol}9,IyJڔڪ1$E<q%$. `ԛJ Uw2 %AlmS>]F _>J809N`8MIk2: 9?G\Ta4j߯9D́`O(|p  bwV(%'R=CqcOF5 pջZU>J,Sr;3@OC; NM0I<{ȧGX0"Xi?9.Z]ÄC*kh u~:a2s'NO}j::m){211֥'!+d[ԓ8I$N~* )4J!+qR`ydbghCz*Рm|ոSݦ H(&kJ@`s?m[y^v XmBnq3;dq"rVdJy7FS|RV8J46SCVCP qK8%q+i"*݋y4Ҿ GbƢNFsYy# u0#hCTRA~x>]$7 a:h7steZ]<3;wJy[!=v+$C 'b/>`.rKk fBW0ΰps昬cVOZmjkݳ8FE3M^hڣ(W[OoYsgx{vbu``jaջmF9DV ;hrഃMhBgOv._qDM"{$2,0~ 0n $F'dz쐜`>I$0~ H LJDŽt@ D&!2 @y#a.Ʉ[Llw[\&=KLr$w[HLrlfH2=vHNDN\$ZDrI$[ӂu2Kz̰LN\d-L&Bd-dAD2>HfX& .a2&m!a2DiB t%L&Bd-$L&I֋!C.!=BgDd@${Dd^#a.Ʉ[Llw[a#a.$[Lr$w[TsNt fMBt(zM^xhh<1Ew#Yon:@uP403+aB#B\@DGAQq"8,z8p`p:Idn$s3N+2:*IDVAH_DŽ#apR D2* VSqSϏjpE^YU:k>^S΁,FU3HTZGUwֱ@Z;\qWFŠzEx^XU2<׹H\b٧jFRUjpquWȊ\[- cr}mdyQ.Nɵ-426$WƖVdb>2Q2ݱ^&#y̲Zi懎u9;czJDNlNۊ71ݓphlqwӗʽA{ni{SqP83y}m5N5UkN\}B`s}x[.jGtL?v, f*Pq\a[֡HRԋZfe$9!k<է\{Ķd!nD#X<ցKfNovd}Xr.TmZS锩*PQBCh *ҚrSJrkkVMH#J @[85$OVxօHw*QwMz3tQ=hFgV\;Ȇ\3쎋etbI`>bmxxeU`XeʬSaZ]'J֮{m~xs v|Dx_*?k6~?(vW&X#koܞnGv5ΧD6zߧemO3S,|;߮s\ʦ*)sd?7>̛&((NW*Qv8/LNk[J/(Mɀ!o.xlhLR-GǩlM;Tѹ,gu- ),dW%qEUnOgKJԗC ȗw~LbߊS:,lu)cotGu+y%š>Gas.{-)@Ce5y۔յ} )`uPg8X=oN{n>!hw TY._K]WlI-IJ5es۾:|wӡu4e)֞mg7PڠY57]){W‚ѶR;»`M(芋~jV@ ^mFZ;}NDTo \7sAN4Xt꒮ Up]Yn|FUW{ʅS[yT:תȤՕ5YҽX3O@AXB7oO/e| endstream endobj 17 0 obj 4537 endobj 18 0 obj <> /Length 8 /Filter/FlateDecode >> stream x endstream endobj 19 0 obj <> endobj 21 0 obj <> stream xɪ#Άȥ @U|hlq0XrMjR-ľft30׷?|ÿoMoޞ.Kalqƹ`L">nւ75~+0YgcxsWq;;^/?>o:2Zܗ-807dnƿopψ_nѻܴ+p?` nFP<`ӻzrf6x{y/c xijLV+x<ЧP (\uW>a}~A<y"LBzIT{$lHDQMb"y6={;{G$c3̂l.H^xG\~OS\ۨ@TA~~ ZV"ó yB-켉'piɼ1ˌ;5 "gde5,+_2K%E)!PhFM"(=$q!J=qpΊ,9d{\X~Q?p#-aC6y\5i (Vex]eؔ"JXF 3Gvd6{X䫗LT ]Ѣ4$=O0'i 8 8/0$h+Q={%6g TU4˰:&b6Ex5aq9޺owe+``3ntVg) +M E\#( 5IC\#_`@7?57ӽSz#r-0a09WM`Ԅ])h#dAR T^dT?Hb/Eb-l*혵"I7> /Length 8 /Filter/FlateDecode >> stream x endstream endobj 24 0 obj <> endobj 26 0 obj <> stream x]oʍ_W ma?d[b +UR痿opZYN~s_?{_.߿2r/O?}˷4s\\|~:fvLa->7|v~f7&a\=Oyxcq\G-W vvXw n#zCޔD {wWw=ެa_D.|qَK>G8RjSf%}Ϡפ̊iH_^ i/>J,-Hi zLP<OKҿr2$k`ѺTbF"yI{@(.S6@Hg#GMNZ]Y_c, AwۅOM,Dbp+8{Y2 P D'ba\gwNJ5| ʼ.ɇGwjBeMV2\YqJ~3A8 J9MQ3DQ Cܘ6yk;- g9;\`ŶdGHFl-ZZQ|`c 1/{Dоݐ0ee 22=ʨzk'ւ&,.𚨵d 7ky"4gCFjD9! S`52=֨0(8!KZ,0.l]9qªY_!00uV#Ե,+|ԊaYUAHHK:N? .&șP`B= ~ȠvH;ﭧ.+IЙX m0g\ǂ'ڣ[HՏ38qFw+sPZ3hwa+sb-Lcpi c0kk 52=֨G57@Zsc#k7XDc-.1eHV|~p$tX㸐X( j5js^xk?0cCIj PgV 7l9ll22Sk̋?ىmv?'iTmI\]8u3 .&;lvZdRVq*1[~)\ymtz ݳF $@Lp F Y#@Ac3zz!} 2-⃿ӌq-c̓6rm cfV>̥һv `׏'"R% WFTQ{zqC1&W*rc6 \j%^1~n ܼsUq3vsbYH4LgETf2_`9TXk7]d"Gr1f0@ogΖL`I'6V= 5^ڍGv_c&vw5Cg;<֖YV(WvY( czd> Gm؝M|r^Sj#j8\Ex3 GQ?9a8qz Jۂiƃ5l>i<ģG-;.n๭`bld6s-k}~I,'9v 4* SY)P-[*^H@X?k AG4x Q^&# U<ȃ pzT5fT/jmǯ776uĖ:7OMv'TJuM7 I[29.ծkMJ4Vk±j1I޶b[#U\nfݯor{ݝ#knMmr=eaQK g{&T v=nBfnWWG2W+]u`}16a5V즦P[#a7#F6kذi=ȧT[d{բ;nosk^;(|ثwW3>(,N';(qb2uPF >[{qK)6 ؝5 (w3Bvn*>%VCM`3(GLJV_$1-Fo3oE.)%͍8̙u}e6"€z!SCSg̮^,' ;\CSRsP¡bZCCЌ5G1v 9[CЌ>.;اgL2FkMnx\AV|(3i7Rഡ8|ׇQ}}j.Cb-G9 u:,eޟ՞woL -eݒg7Rr*؟o(jr&YK`Y?+3A 2)+2u ` 2\!2)22SyRJ^z`ȕL{^Vo3u-y &ĒS0i4ZR)%G*yf [8_镼T[xrèn}mwL mçs|mPX0P)N7bC ٳN+nT?#+0,cn0Ep)V P0\#a8#V 7k0i>ȧT[ß><=N<FA!ym3|H>e+?(,HN'7Rs j6RGNk<6?sh!G+ Prׁ1M*Bv+fzmM!fZYm-4kV3vȮa}'%1=MllYa8y|x͍qF/zx[73\ng\o +P4jߨpOR'e2 TJYO7 7)E#'HBߍxB8Vzke=R+|kYoְe ^YO=N*3|(;Gδ ZX}2әx4'[\g"899'5VDp"Ҙ8B8ژ1cEpcBC>iܪG2th m!b[&7ܖbLq?cIOc‚Jm0|m0̭m2'e %Z[beHZ[F-CUMmkQ'2P[K *ؔiŏ0kN3oݿv [/u2`I[:L๱)A4e(JSr7eF[Sf\ڔQ2K~RB u!׋~{p+ʃhR_L kPeecw|y0a;85{ιf>?\C1й}&._=N#ʸHaZZ2ڰ|`IYBS)J6Ϻ@BҖ\@C;<*xn[o봳|vS%˚>>?'^>:w| =+DN:Iê|Rǭ@H R98׃ٲj= _"H?K1rd΢Tc4.9.=|!.fV})L- zB93,a 1p5\k:rǨ_H=΃SGLo)f9f7k"s,"ϑ5EyBƽGcrI=,rg=U1px[EL|r0k^LU_4>B5T*C)Tgt rbW"sR̳(ug러<@C'!Wd$gZ5J(J[j1 r/>ZjvuqOR[Cj;SxY`}UikJv,Tf"9fb9<.(=-O~9 0  H,sȉ%̫dX &[OvN_RS^p1#gt8V0̌d zQ$H5bjkqk^]|تa;z~s{C|ZKK΋@xSAOLom,3r=p;.3թ] lS=-@>'zk.fekF޽Kze84{',,ZSג]JyN^c⚋>7MR@+<@O]sNZs+!S=ҊƁhS;!6˜b5Tk8YLɜK_{#Wmֽ@*i{f=-JFfi|Si>n^?Rugo Aܡ[N˭Lo^˲J+#p7>kXr} x #rTLWg@uU㥛7waH.6 N/Y\ 5ćf(J@'a~Ÿu&p$8ONbel0ܼ!Gmf Ɛ\+Q`}Ax~O7p k=yR°kyvo86uCMpaoRƳ)*5\ڼX1Xĥ͋6s G Tgsz>mw#Ve԰]Fϛo+0g}c^uc$Smxe=yC'l2c0&sImkRIlc@L&'9q>q M'VS|4фW6. hέȐʇUZh܇[b`9zCt ؉x'1,P"sNtV9(ֵh9wtBJ#W*4[ݦyK8!}l[zn$}K ޠ?=qG$ ORu@pOr]؟">mŌ0$sMIoWE?àCPZzeԠaffݞp0C,Zt6`{VjB5v*$v+qr7v$Y& ;X3\i :.̈́Xc>[ZWֻ5I9ꪨPvR0 ׻ /\|| 5oHV;/2UkirQ| kYA(A<_=8!y!o 벹$35?(%*~2=5ƇB۪?w?ǗͲ? ~p}‡/baC%hc~@ᅥ_FR= endstream endobj 27 0 obj 5620 endobj 28 0 obj <> /Length 8 /Filter/FlateDecode >> stream x endstream endobj 29 0 obj <> endobj 31 0 obj <> stream x[ˎ# WxGԳlE$]$E~?䲫(5Fgjs>~?x8/N@_?_ޞ)e_;xS:}qL08\ nb?㗭,'xƢ\%ܐTpNb&C>P'EO,-9܎A#catcƖc+Gіxv[1{dCɨ[d-8D)d0ËGk 9+˹oh|/3!zOF$Mֈ|gYcD</K"bn $s&y/lʢ=k?;tt^0Ƥm`@ ƚhb" uw&=WA>rJZ3jeeo^{wsB"*ik WSݜ KH@q >Kb( H+^HH H9KHuG (BZYs>fb)]#=tTm }z5'Ϗ)Y$朊adRW` B fqD'RwΐbJ|T%N{(3oJrK^~~x&BDJ''7jd˩#}wnq?[ -9ܒ/-9VSuG5=L5ʻc/u0*@JVt;B~8X7 M)g 7|PA2ɪ r+j3!kr PO%o5#18rlF߁jN1Oa8(p--P3&)t2TZfS,M(kJ!{{ (ofCʇD:sAiu̥vh_aT-B*ƭTNhD](^(Yb8sʹ <&UF}bL;j%.6{xjP [H37 };ub0*/%x=q+4jg+EVqjt2j] SFoL|%%y_~c&JIœdY;n-wO D7Sq.X9=BVo@E3_ T-[* }KP&{F:8#q)N/-- l嬥yu~3B/(m w}+#mI){*NƱW2yD^AӶqY:?ڿb8g^9, 5.L+L4$f\Z"yYqw63$S5Q($A^櫻tn]f _|pcʊF > /Length 8 /Filter/FlateDecode >> stream x endstream endobj 34 0 obj <> endobj 36 0 obj <> stream xZ[6~_ntdX {}HsoMiC~&[myJ8/̧7hI74Qp;2Mt׏_jorp6!m^h<|]鷳q>Z./^յoϪtG}]Nn{/^%30D{_l!f=mnfrF?pw 8cɳ]d`-1SBXxz!|ڒ[儧\WQqtmN*BYaؚԤ{++|o0 m3 )_PFѴ`!.UMK&w)Bk]_aqP}5R_ep(\6[ -ݰw8=!]0žRV蛬| H$p_coZ]}/4! m (0[sUW^g0,zi;2GTbyn-PO'`%۠pb׫<-a ?-!R!t~lA}܌`84Pcٞ\ l!xȂ(ح$^=Zn.FD6#DAoߴRtPz SXw.MWc{?%JaO!0$"isQlVAu@f1Vb"V6IH[ӏ,CU_zJee :Nm(fϭ oux?@\f:(^Y|۫L^*(_%"*A 3B8d')lA(JU&- 䃟o\` O6dE׃WvZ{/%Li uSP]>v;`5)MG5`SHꁪ Ύ|D6@҃UO-F@uN]qυw<*$ڏ¿40͒ ޜXs6ci>GTzf瑾6ь糼!e03\KRMS֡OyT^`ˏgYfP(N=ߩUWhX: k4?oBn`pFN7Smiɥ3ȕJ? {xQKJBv^fvl:cF٬:+-26aN>٪̕'{ /Q,j1+QV |DlpR桑p7gV|Io*`2ьfX2 V 'Y`Խ3`& S鸾u4hgm3nb3x@298/Uha6fNv}I%F-'ɦUeWxl*q4BuS*<,Rx8ۼyyݼ? Y endstream endobj 37 0 obj 2262 endobj 38 0 obj <> /Length 8 /Filter/FlateDecode >> stream x endstream endobj 39 0 obj <> endobj 47 0 obj <> stream x|y|Tս9޹ˬw}NfϬY&Ʉ\H’ %`$*n%+%E֪X+tq^ CU*mUJߣViig+{{9~9sȵ#=E,R_n(z~!:Bز~5/!${ХW]|g%Bҏ.K!m-Bx lBh|Ѵ v @G6^uxl$M}Λ{گGZwA<@^Һ.~ 7mhl@2B ‘h,H֦ҙl._WXhjn)i;ܒ:w^{G u/9oIo;^pػ|>3]S+Px1 z#E=(N:"D]a4z 5ġ0@("GNA;4~F !*?V>=P 4Nw'%GoC;8RއBdFq}YgS0=oDshz wCݠy[z ] O};dO8.nGLmE syhބV\Ǫxy^y7>ʤYƑBZu]Xq78\DLE7n}V!\'r$ZuC'Q܍$~}H)me{2E}0=xI6 ph꧿3܀@G/`u ;XDD-h)Z6:=//sFop/inԜ(kC`K2vJ\o,XYR ߃';gB0Gv}I)BO*a>^Bb; -xSf7߲])ͭ3f> e `E*;` I|9|9Y v.gocf_a΍psjii|i<+Ҩ5\tot3 ډx EüG_'/_P n %*\L \ )1|Rf\w3GYʎ {}CǕ5p-ܮyMH OMMNOvxf3+7(00@A2б3Xa4|^ՃµUx5\Ex#\[(* ^?z?ׯGWaL1Ei;Yœץ&f3|G'C[v;fľȾc4ڸܥ-/5AMfA͋oWO^.nbOaO}7w=>l+`xf9{%{'K%wN2g&yװAM+{ 8;^|7&)]gn|lK--PAAH1V>`v^xek|.uzXsp-& =f8s!Sďŝ4R=<0~}/fnw 7Y-'c1Ǝ{ Q1P_1;3Kw3qi@M~ ̏ ּlhy n>t+G ކ}(t'&(u@-0/L µπ ~7+Y(;NL@ok.)ͯDSf(t!{Po5.Q+@f"[kA[`r Sfx_EE/R-|-+? wsy?jB5JMk*> ہn/D=b#\?y~TkdqtBv5̜+gC)m,_ !Ag4]aI9(@!uފjs[ u\6N&X4 )]Nj1&AJk8(?ǹXx ɇA (6 m| -/ZXVP[&t#ae^w)16@:Ne*7o9ik3iOR><l ;:2q6ڹnxҾo(ԟIQx޸)Evq}\Q.#A+ғ;E)u;)xoǸ3Y޷Z/uB;wnW.;6D~c9^|,a2l Sev;Iʸ޸A0B=Pt*;C%o]o <'ݪbM&O6WuTM g'.>]GS9Iuz]1Qxø^aN-$\S{\6.[\&ϏkrX7?<KUK7DJNϦSZ B;|Q4_Ȥ7O0!YڮoB> 3>WEHͥǙAR39[c_AjFgkN?>8>@;o΍T_\^^O9X]_U[NUSR >Ea_G _lp!qzJ+ NL2}z)oD`ZJد MOht[S_B da\^zNڹs~Xsp纉EaE<};:g?D۽Ilĭ /o[Oŷ-[wHU}̴C gZʐRRH2 ψ(hͯe`*ele\LeP}gE Գ2?yX`ߏ4, $Fn< bqI |!rOۦΓOLSC9 qNR5s&a'( B'ڿ:pE@̅J%4z<8^9T#PXpQMbhT艪X^{94$T(V+BқL$4 q:DyR5'P@ pgr?Qu̬pxHca0:9wʓu~1OۦSTW% pV}AV$uy<5bt44CzpB}Y.[~!2Dc5g^\im`m4ڨpz D1gw]Uj0+dY+9i]w &ʟ ce$KMIA,Xgp!G("}d&8@J!R?H|_+iWd; w8jdU5T -4ٟTJ復䩩O>8RéJɑap]>ӹ5Zd_Q!1.q-Cʴ!@.ZE.Zr4--lN RSOLl)*KMVGF0{G=m4 4hX 72rMee-X]ɀy5L2&rW8 &X ٹBVM@lnWDq-6i{oh9͠P$f3Cn43a3edh 6?AJ ,si3:F.~j4"| G0:{+_#À Pp:o"PP f[0aPGqϦ=ok5j̹v^;uwًgZ \Ǟ3bn\y̏W)._${.5.] F"VmJ,!}' F|ѡfQc?g!"rY]4QJYm(C- AZ22Pd(*EئL86P&A*iytV+J `đJ(Jɩf1Pѐs;P Lj3B5LSGH@7P| 3 >(yBY8@G`)ppCQ=XdoDDDz#JFVL4VnO# Ɛ X-J ԡwc0"B5zjюIX*ZHJ 6D\j"e1uAאk̵u¥q>E2)'!45S@x`aXz)Xg:Y;gNmmۜ/δgFlI*jk̄EdO [im l(g~>*7PTY` +6y=b\O!@Rj=7 b,) A`M41D yEJrC4`qKyD~R@Oa}ZG0uB[ܤa4Z#7 0Ez$L HbBxPÕ0rˇÖ"T^5)ibɪb:+lձowG4ZA&FxSV@_3f<9M;D>J,@K-]xzF]Y -+y6Jͫa:lNzӻo+ 3 tWzIچקo5>~C>)sLq3xأk]sހ'G#bq84Sց0`6G,,cC23Tݐ Lc&4TwE,`|(>gx>ğ ʾnW d<;LijSMCTqy #m$t6AݘMȇ]HNNU4YYE24T?e8D2f^C>'ER #@AwPYsSS naD {fGwa>vޓ0df\8=ȷӚ~jN(p-2p{ U=jY(J[*倥dTHqH#whׇp%CtZL,Lx^a) yhf*c P-x2?X~4@Xq\;0bB, @ 1@$̌b]0\{k]ʐi|^Թjo3o`-zWyyW%.X-Z^pǝKW 4]y;9 p 0U*˩8%yᖼH JyZ*BDU)5~RA_O=Ҳ*~`a}=r,hؘ6nnFsO&s1(稵VhVSB+fJ}#{sdDQϔ!HmBʍGyL8$\ָ~%`㎹#鸴Z0 "]HLKU}1xcqO&TYP۳[)HzG@$JF`fgJD1Kqb< Jq$k5iФ),h 93W`0+E6P&\Ԅ ,C, vsaIqyRlΘBoF7s"˷urͥV$9<*~cd+? @tg8{ }}6=OQO!SOUPLTj%m9N" *PY(zCp6 a6Lhd!:一^ p3DBP"2jǏ8:^¯JHZPtowH;LxZ_,W=ċX8)*䆸1nO*T=zFh t˺{ާ,9/O"`yv{ߏ%$=+ :cuBBMocLFdS{  e5 uN5TiW&"027jo4hqZX '^tqYJe69kx? %~ol}Kpż=_]Ot?}-=x+3'$z|.~UhSO\+QG$ !!DVƉZ#0:(ao0WfQ|waYs4B'\٬Eޗ1{ԌAנokķrue?u齽V$b)$u׃zD 0'ե̺p ,kn<Ϙml웃۳ětMw(B#NH :%AD<7PU+cvY3Xf T*aNFW)FOuH@pnQ7G,YŒITqPYQSt.c$^+]HBZB1XP|ۣT"1E}HˬKTߵX*'D2Q|i0IHQI>"SpvB'Rxk5[#Z\phI q$߇b<@$s+=sVtLH.X|hZ <̯˻~##qPPMl*ҒoCL3)sY8Ì0Gaz9{'ORL'Mx%j; %3EHGU/Y{qMDo2Dñw=^< NTԦ抹?17Wqj5gk_5 Ɔ7/{pa63frj9o|e co?SӄK 29zMؖb>`nX{}w֛g6TH)ͽxPV-,ԥf91eu?z)cR궬u Ѡ-VV|E'W QiۻEjhj^-Y/tuvxA"~s]S>);w̿VˠnR`JDAj3 %r"fam4)&0 0ڍol(ﰓZ-EZVvnpUIqZd/bEEG[49&V.8i8/L^%/Xc"/>fsh+6ZFkdQ6*FH$XKi-5<23=L 䩁LRJɎSīthzEmiAD:#0?@ÇoӅz5S4MdPmaV9m%$SR.n\4(RS_0f+.gU:]a2A{Q^ߴf\zێaXx־HT$洤RJju44&G,ɅHE{{A]U4}9fHJ#Oӎ zn)$̑s$MBL.ZDH RJzO@dᮩrU)b 4Ce\:nRTx<{ WgĂ sB@+hҿ)"Rb!RI@R&6-rPO[iVDnVHaH& SGnʫڂX =_-  cM*MBnɀM&10v@ԭ:|(\@g M&c" uȉD&`79JrɱxEI9$)CO6Vcr<uN.gM0uK.pܳ tpwRquufX-7:#au,z{e37 ?״_e38 xC ={ytϢ~pVen+MZ)XgS+%V"SĴa&w?9@R:2}Hnpߛ_}vRu~V)yfn"SKL^l̆0}<[   kqy:R*BTZrсIPCz*y! `eyy na%%쮸u]nI`Ŭ=_-g dЎ7I/y_G VXaq׊GQK}:] k7`T,"- 6UmaV ,q[o5$Bюl_78 3?s7]l 9.[yw?5+R_+t]A\U7΂98KU6 `R}s~?O  rصfVv;0(,phZS8!|z$uA͘Ԍjа\^6 cnq A1!9i8j ijV0 F_ʡ!7j%2(R­:!{.rtz R[!?& PekGN3lus_~{ZiR\Z#f*w6 CoO=@JӉox6@s9Y~ڵJؽB6*QQo$BUt+Ȭ@@`Nm( 42Y" ( ;O}Rd}Q!Գ 69}(SI]qkk͹ח2&3ηm L{(3a2X70sdg766l&x,EPXD`t4:(3Q4>˴#Ac Īuj,*B/(,~nijH|g'R4APR,0`|)s+W! Y=I IYP k-M- /ZC5J tEVXMAׄh>"6*Шd6@ʷ!HDSd[d"A',Y@'$Eu0Sce4#q}|_OcNWt):PuEvOٜ b-A=DynQv>-Ձ^px*^H9ko $_dղR4bϛh&Yooߛ^ұe׮2zy{]+#;.If3+ǒym32&Z&hs ic 7j@)Fa3TzJ y,UwH4G A~ߊC+F'B^f>5)O]qLqX~\_!}Aϟ#ГzP)xk6rȿK9јIns %fޮl~{Mù?&H3vm| L 0s$ĩ^@|mbEA+{w.@ 65eՐHb,e21l<98HJ\*UHU/8f8d45FwѬFT|baD H*mm#miܬ=u$|(n-j iB$NBq"7WwT;~=w{<}O _p6t])&@+QDAH2aK&x^l(GQV G"yrDp ó 6INFFݴ&,X b&g(DjJ0X+rtO}&U^7~}7+s5yZ1E(21,Q فUmnm %..*&N$1lã$MbbPjr<9<Zݞ']'=Sn*R+hll"JnYj鬧5'lFO՟f{gq+9o8!$T9^q]fD}EקFx DO9''2$V[ssaCS^s9 }2 tdgU)kn*"maN~H?߫?;^hx|s6n\0S*e=Ơ˓0clӽA0/T$!nn}y;q)g)7:VTt6jYys-5XXx0WhB!IPK@#2?Je>:d/PCi`s$}=ϣޟOrϳɚ_>~ܓ#zaƩJHV *q<^Jl6XUݾFSh0ChwHbUOiwfBcuVUȢ5,Դq+.;/imz<I=͉U 2qUZ-AZv%$UV^sHk=DR5Y%2n $zZ_@ҤHr "A1Dȱ[NGNL>:z 4HM eOoqNU a6gEϒY4#'9TZ`Ol%;/m豮D=VQ2^lùK/P[yuW~ͩoo23]FCW?2nylSKr<UvdqzUHNyMCZ44b w0F"$TiS<#TQY v(YzvܞukBbFiA.uz "(K3{ ,MT:hjF1wu6AIo'Yi JMS5&`J|e"+z퐩,2^M[1ݘۦ߶S|R-Z&Tb|}igX2\`R*7h59VVJ,Wl-`W WUɚE8%<3o 2vL//7/n.c*?5(b F7& KZtF(K$Meg}Sl,IꑁWI^ulŒb'&xZr5nM(tVY(A%ZJ36 %h\1ie٥mFIP]u:-viuy9G̐~ v:,b(E\exv2{4X'O["uIж'|J' #:amn2e qpP25@UU 02"ʇWzwZ\ץBʴ+76>/ԇ%*nLpIT$r{UF XOT\W6‡ ԨiQO̟|a#{o|1edy kJ]r`(9.uamc]:{_0Y.ߺ74;|^V5h5¡уXfVHߵΓ o|pռw+ }|ܭ ';.ݷ,VEq:0=h#&$$C4Y?1 \ܑ*lђR mfz\,<7wlNL8\*Qd3.w/{y˟!wխˏK;SJ2ƬcC-m<#I=RIKK&KQڨ}gwcz kU]дĘܮ~PqLЃǪ"Phv AҥÒ []kwӼKwy咿*/2?^M6ҕii,ʃDXkPX]5&V~1p}3(.$8ӛFwb|Q zPM0ujj^ [^W(v3фAMN2TwW320DU_x(b^dD6"SPqRznБvC<*'Δ/T*5V+d&V#JOhZݹ߫yl";5ΓAƭHV{ EPBk C oƣA9OfNAӵt0"Y Ofz&->S`f_c )ҩA^i`GŻ6ne/ޣGw_wj˖BddzߒGym&UIx˿o$c6"`O{9щ4A~to[uKAЋZIj|Q]֢ OR#ģ$A~&>)1Kք'M1u >O<}u+u=W4l6u7o\^6C-w[~G]n7t;GǤtyܓ“ ρO;ҵ1wq~ck^RXX(Dw-KWXN@ZV9rdN(A2՛|\YYEtX'+ /3bE|>Q>^dؼD.MXK<Ƌu-DyINL7((z / i^r~Ql|RAj't!FՊ y~PG#4Rc|cnn]Rnnf՝> >=(ȃVzVH 'CW$q|%Oo7sgΝ;9gΜ~ҁ)Ȼ=>~qak|l\_ay?azd s.'g!f$" D5-ׂXn=ɽy>`oGR5R)qoFD·XȚi[-dF<͊{(bYb6q&ojvq.cwRgOdg[OIG3ov?[_rcB@|c„']ecJLXzsR;kT8\Tw(밭w;(a~F:h8̺OtL؁t;n-zOi84lUK2`Ow1YL^A} B30WpҠTo?ޟ==Y-tkm>MvS|p$򕆣"fsHSei6LHH%Q[& I0.++mouEQAMKf-e63p~٧q9-\5e"1DbIc1FvW<#jjK~G>Rz)A/G#P{jtD/9Dg%'Dx?r$JQ7E?_JU[kU'ע*ܨݒ~2v$v4j_ n!;R) SC'8;UɉxϡR IC8u DEHG[1}2%\nhxSe]Ѹܡ%`B~W+Uxr³;{rGq_Ъ} S@ugwJ:[τc= [t&[x Mcxqs" _- ɥXKkKqXJ/ 925d4mԪ )2K&Uxe?־?ܱ,x׹%zC]&7~c+;y=+_?p2QhvinH5WܼbcFF,~Uyf$SRl)Zx<>݅Wlvߏ}drcKj5inΙMYN.WjsQlCesJmtofoG;ܷdDgDz?r>^+כ]ws#t<55/t\׳͚-!.C>o8R pT Bd8r#!a`(6RnnW6ㆩz<.EdJ^dY&[ĕ"LEXɕRjz6_(Po*L%(]{c6|UOunVD7;qUi@L?_`>#g}l>EA`4s-Q 66.JOɳs_H;(nagA㒃0*c5:^p-}M??뺅n6w>NwD^WBa#tb}@&S,4f!_"--KE#/)U '>q -%&KS+tWk.&Zk!%lv)("],2ftQx)3M55>j]7rJU2c "SZQFFCu!ʶZiS ?+M8NNw^.VMMgS;H>lW7ό{lxB­QK,W U Ƙ8{l%rrnFrc4wz>^.~;.?P~*l1F9Pl/~<;PB?/7ِ{-z+uU}H~#(!13ΐ*,E.oOd-)H.-6-GM-W (T 'fFFDT@\¤:; jR]s2D b`` G}ƖQ ! %gZ{2t+ zadPK֗*nj" ˣP4+sN9ygS7E) H 9$f%K-*-Ӎ30V`BN[tȅi}l JĬcyq?9;Əw>vunݯ{\l!7^n m:_#?qӶ=v:cp,c$Ƅ]ˑ?T~L]"cb*Z- gutKn;M;;۫^7z+VNgI'qCأ`xRK[AjM4ju3 RujpFbVJo۠f&mnsnsݫ#>>dZBR*+2uzJݢQ={X`rCćQ45R~YK$, svi("ُ0ƕV6Xի$pBW/r7#x3Bgi*6vIϮw5̰:=*!;|6MθƧ+GFxG(T9%dFУk*q Lwl1U]:5Ph{֍Cg0nv|E^:{e׺'=s?sMw}YJM低f20VR՞pF]s|pVt!:NaV=̒z"nO<)r!M䖈"WHEZC`D%U"0qZ2ó7 c+ӱ^ݐZ!(,AS9FAAFlLP{LOlPd]wۂ;rzݟ2ƱhKrss{cO|#,+j5TPo**h <_jrlr|Mzܻq-qS94>oQst̪xgQ>bPQxQNq <^C+؜-P͜VSZ\Ƶ m6m[vfw;[ܒYs\_2oe>},U*KǗP-qHZ,N\NNNG]aD 54VˡISYA%~f%_[Ɩ)6 $19dB_;G;Zzz~wvNX#'.ȕhKᲸ;ߴh 7.#5u./̛8QsBUW$l6m?xjgڊAN۽IJԄ|(ц|pRfxRN'6lMemMy7lJ`'rwG'\4b8b8b8Rlbt^C_;ޠ!ŋA: XC7:S&|u~9$&Os r0[Rpq 6}\3DŽske4?[S {@a݊Z\F@;#c%2 >l@;ݭ5WA68#zz[TZ*p"ڏ}q~Qstz֞zgno؞rY6Vڌ`P)n.sHh4f½72k˒˾x6+>VVƉesBC:V٬ _wGVWIopz7Ǝ~ƓҩDm69.M/JJv҆WM_x~Ht{Fc D3Fpȧ Gat( R f&ZG `Zцˊ+xg XIKaܘ5G,fx*Sv0a6}[gӑ-let|`TX.b~𒞒Kz͊R=:q(,f+Q.z0; E%T82i*& )Qɟ׮_~<7Bohipc'o-@߀/?oR"Ncd WQ#`6 VfbMZeGqٙ:haMlo#5W..nbx j-jW-8?Ĵx~@b H"U!_:M`R}=S<ƇX7axAO~O#D#Xd#ݑȉɈ&2Ld+Mkv|'OӦ#-UmUjTJl͖R^{G?cPUeb-QȮ tETkQnld4YLf*6\YRȸl)7T7qދF~%՗dsSx7&<8L+jvy=D -=Nâ88EW paT[Ϫ;T($/UK SeTpeƉ4Tt} M) a%&J/"o&faExi}|e^',&D!'H+ː+$[(Ļ,0 <|B&Q<yYuløSbSۊ)XAOgVOKL/V-ѣkJ|1jLHq"KQ]c"@!Et`rF.u;fԾlH(r t'ضG˯M_+|l7^x%/dwO|5Ms]nW_A|=2_() [b .1b tF FO~ŦZQx ε+>6\զ,gOCPzY?A?XD\]Co) K&/E|)"i/ڨK&䰺ft @w㏬?ZqÏh#?M1m[qS󷾷cɁ'|r F&ọ< GD&FZtVGL lQ)f)E`8S-q2q|# [H!#qP@LuV_6jv~;[Їx [p-?#kC=ySt:ҦPS6l'gkaZ]ɀFP+K%d[>j_,:|W7 t쳣v6TeKt]Y 9a?͚ReʯqP(m ۄmm;jRR^(lo'{o?=|dNXd"GU/>?u(9-" Tv- )zehaaqdEꗈja[iOgK_;huh_PLE|$kX`+]j7ln; PqX*y~Q,s/˯\u2oҕz0/zprmë%̩J᪃ۮy]02iq%W*7i݆Z?ʭ硞%tk3E_$^Z^-Z{m_7|uaUUot??v98{nepUi!=!͔P<+ fTЀwQ.801dzbB6ۗػ}knYdixpȄh "NyMDD ]2>UheQ0N~t=Ta#D* w[=wypggfzp:U xB0֌ea`pO-9wcyڎ=絇:;'kOb!iO 뎼]+V|PXzL[P l`?(La:($hK'N&F. DH@aQcp,Ĉ`&cm >NcOXↄ-["3@N#%7 Mr,EcJ+)^eS kaI)VSYŇw.j ӥ߹ڗԮ ӫq{^Cmُkx}6<~NSdp7` ? AsIƖ" =CހqH!&˵ϝ414!?v Ly+TLՋɄ(6o䯋#毼ғoԶ_y9hq;5~vpl"_y& \XyG4ucRqviFi>K@hDfӆ8waӉيM]_6[.-@MJJ5RDVmDYDK?y0~L}|_XXX ߗ^,xm??6i2lȱT:/emYy\&-L6(7fO42J9]uNhhlNJjlEiKwG5'"Q)&ĊiMj"m _bln aB mւzSZ򰜑"6O"BK͌-HRa\]ƴ L=5lE{:Ved}˸?؍tNmfO˞YtqeK:.$=xeԾaWԤaeq]+~P7?o&kކ6Լ?jvԐ+I'#;]Aeh褟~Qi0gBm܍~O*E*1 JPgtt蕪7_,:ǐ$LTZ<!{~`ѯ 3:!Po3ƿΜ2[5?1Wyofp Lv GK[d2:c3#>Vc"#[8W/E-TC4bZ|qMEf!Ef*MU”,jL@Z^u:=ƥRuuʼnI8Ik9dž_&cbj1>0a0X)XX¤&[DBA&Z wOgu965E`&^AUn.Ɓ  zN(}\K:3'LpT%#VTAs-!״u\:!?Wn^T,;~՞PJ/Vb^)Jz(eG(3{QRF <z8 NtRn7وnEhǫp#~8G@ 9!(f `A' Cl(ee[<$OЂ>%J2LBpH{k]]=Hȅ#a{w;`%PoQBq\(Wm}>M}Cg&%_ֿlɩEz1.4qS܄_6bއPnBMxFj *8w "+$W7$7ݐ}M֛l;v:g{Xӹa$?,֚t:V Ed&yI.&4:lW,劄jBq>YWGO@%آ.ŵŹ\ Ѩ]K9ʹrj9ҟ~ƚԐœƽC5&Q+{ڔQCŅs|/lK "~}g`;Βc&ގ͟MNx̚knɿTR:o6b}ivzU+)5DqBiv+;m2;u +}Rq >>߄7k۴$єB#ѹC\#H"*0 r@ ^:bхtD7_P*guhrJlož0ȇH SHқʱg;/[[LSC5LmJ9E_ ?v@+ua~%I?:8c ݆Kp#^m Aպ"gMqNLo5S 2c/&S4sb&u\*-˰PЙ0wu};X+>' O kit<=V9:\f}_XXj wjVi ūW:%܂r9AWcS kSbʑr fl. p~dzYZ}ECfʭ7kkEH>dqH>Y!W>]:Yj#NCh(g^tQ,dX>ݧ.]֩8w98yYhq 88>;ɇpA><V5~ɶ;kccdj]ݶZbc'" ,vZ}J= Bx{Ҩ5dd<'%ό i+)Q7+:?EEұkνY{L̒w8+``}bKKHu)`sl\*헜IH)"+?It?N$PTNtYQw{x^DRPe==p$tܽ=oT< 5qZjkjJ^5agCSVy:ldE&>#5JIy1b iF򋨃SmS@; (.! Qo$w<G&䈔 .Erx+1;q^.:xIiAU2=Z;J"/xuoϿ]slǷc7[rλzn߶ ַ8.pA{/& Y5C2h4Xh.GZ MBHH]~`@m <4䳸M1.{6x1dB "07,6$755Lӧzu9871)ʛ_Zټ.++d&;B>f)ۘ'=-Yuksbs׎#x4eZGJζdA4 |8M%cx:倗 R-%>ܧY{s/ϾydVE]=a->N JȾJ}HG D/K].`ɄV)I*N2)mVLi  D.>)X("о؇gQ236l3UlRI$}]Imr<0D = S}qׅuщb;_ t/ ğmD]RUdvG;xݗ]vpZo[=.StAvTKFؽ$>9.wNӯgsfW{Lg:gݛև66X7,W)5Ӭ}g̟̮Yfz[nִ2,!MG2hB8!uyDK5 2 0z}GA,`qkPO(Z`eXn%l";/k(U pMP, pkUxk8,"Zuhl(󴕌# -$i_fZE:چ".І m((ІP+Іd65`hC]{6CP&)`#`3,Ѻb`iX`lgū{a9"C 1c, .aLo0{śM fb}HF@U*梕٨ ׋6 Gc&UoU,GREU'{#s._betX.khh|uJPOUC *OF)(}Z]ޅS4jRxG !*l乖jU_|s/@YMs-NY rps>6k fs=he3e2ޏZԢBHi9іYYh^b}k!(h)SЕ½=t3 耧,c%bc{25ͻ w{ Ͱp3ZC-aY,iͻXknfغ SfX³^kVXzDžð|LWwI7Qߥ=oiv@&]'|-Vd_oછ2 Cs7'Wf++;]kz7wwʓzz{WuMˍkWZw|EΞ鹫\/_ֹIWtذg%˅y=L:]Q!fZӵkyo_VeIZ̞Wޞk{V] qs7}Ӫ+W-9ktn[{VZ[&[GѹWU. _۾YްS] uZ)ΞkWvvK7CJ*ݮVGG{Cѹ6.YٹsoI@w&@ka?`ChܡCA pG&M7oFaz L>/.U2@͗^AoBZQ+&ط|1\ma( ~G\C\IBmh.z$j yp;CST*Y8* oA|o5 ?T>Px5 -\o6z a?~0.˂{>̭aO:a%ת!4p}C.Oe?4Vhr["nsyn<7@dTNfzF'??] ڱjf0$[1TT6CS+!Or+""Bhy;YjHc;5\2t=87-eBGе"R̡md&WZD(iQ=d(-ctݺ>Gd:EעmN5 \3cǵu9n0MSe7 Nq Iꄶh4ݚ>.MFKKK ݆>'dC֠Z BHoR9npK ^h2@%WX@> @b-)-uR5RFpIH5C, ̈́+\NsPC |\ 8ŝXhZNϰ3^> C^~^,~ɬYfqc`i8  zc,x%68πk'!i}5[N; B(Dg9xuƙ0.e, `dͅ,>= p0"% 5n>Liu;|n>y\bp *J1;bih[g&|ÊLTh\(L| ̿eJQqװa7¦ua0}Do>3P !+!iLh»1<Md~>gxz 31T>:X#\ EDݷ`(ԇ6SBeد ૃek 9f$h+PмPК*Ep=9Z t-QW9  ;DL&4wҦa+Ɩ6 -W-8 j64߀]8s]>p] ⦁PRy9 щnnMN^[d3:݁,x2p ͑/8B֑)n,\po!\A /dC P= h!PlX6@Ȕ#5w ;, <jd#AceHf|P \Za +bD0?t0,eq8d8ÒY9q=yRjB"Bocٔ蔶Npmwl\[*;~E.ѶtJw*9y#:Y>ؾ hٔ .S:'+S=mRg³&m¶&g=M41&&ǔسZą1? ': s ;# щ&p4&AIf_O$F'R?]1K0ǓupQtjCAz[u tC7:x r nn.nN_>{$-Zbu wK]'ê5)<'An,fb13o.RXMT5jVⴺOM>T@M$( :l ,i҃*S]y, O"o-s$F9g?5 %ЋNaq&K"A-[[Gg $HͩVK<>qqvwKnnge. t!- 4:|ek\O7# endstream endobj 48 0 obj 37127 endobj 49 0 obj <> endobj 50 0 obj <> stream x]ώ@;Oq0Ecx?YguIV ~M0_CgصSmSK5c9\.)$mzWYߪ!浧} cw$>?O3}69|Jcƶ/?v_)͓&meT٪c3?n_suAJ7>TuuoIBlsRƹKܻ͜b+dgTdoYrklm|@^2[k=ovg|gk@@,VC ook/~L z/0/'I~~[d/Я>{=f%q fYB;BS3T+ ү+hé{_؋үػү(j7[~\f~|~/ya9_~-26G]߱uo/_ d8!i miC?`ֱ' endstream endobj 51 0 obj <> endobj 52 0 obj <> stream xܽ{`0~7;;{^&B B5T%A{ڂxVE`jjhV%sffs09gΙ3ˆG'؀ˊ ³[P _]2tڂ^#)T\V|pvbGP9CytEF?7cz7zES񻲰p[]CD1  iFMȎsbt!Z'Ya9] }[ ~ ܆v¸@_cXuX8 ux2||?ǟĨju!cԫԻ'YE]]U6S6Isr$7*To}Gy@"*ۊ_)~P;P.‗Gkk`~3!9qao19= <o7 >>ÀTJAϡ.~EBh-0bUe&YX6IXvٯeȾgʯRw*Hcxn[,ܟ@e0/PQ =n_W<X~;݈>:GCI?õESn=F?ߣnBw'ї1uNۨrwS_3ji;C}.tޥ ;߆Tx` ~{!ὲ/aF|'^|6z/ tPZA)5?dI5ݍ@g*]t DW|:kFF|;`@CAϚV!SiCн(~Qz tkЏ'4-o-RоMX 1>wߘ>Vhqi1 ظ ]ʛ ˯/!!o3'w rϲd~Yde?7wtNNi woԟ}nij%^~T|pT- ±+ /0P+z'=||d_7 ߁ xVq7sbS}1Fz/0t̠:aރ)P/:S1u|2oq1'D\ 0( i_E=6 $6 ?Ge.4OF_exS'Oc;VQỊgv.+ygΝ3ӻ:gu'75Nje2T2E#P0q^tmV^WըUJ\FS[zp,>=Aʁpb6 +4&'ŖhKp1Znu|55  B^ :(|pjh*7{i+.Z;Qi ,$hF Y-m6 ڰB*j:L%]C  v>uNqQ`ʠ!&4A-c-J1:nc|;t^olQ`s 31xA۵cE92Zվ#իWqO?G`w7BzWOGIFўW_jq齘T.Z}q/Ls :&^<9+нpjF3Z}5`_Mu͇˺R0>;xtN/9tkSA.X撚R@-ucTGAl/Ջ3N?k>׺Ws&:)7hjO()Gh0Ƥ0lP  )UMdz[//*!W eR7b˓&'tl5 sZZ3beAubP yShU?7 {C@ ̝ ΉgiIirԆ_ 2P'i#ᜪt(#9S0 PhhJ4(G@"eGhQȏ4T+eG0rf\gb6ioɌ4|H#92j} }'MN/`nY#|tXIt&6鄮ICHK@klKfL+yeO9\z CZhlȊʭsQac}q9GCA#[ף 2<ۑ&-EL`"r55l8WZ̥ruh1 Z,gIz[QMkѕ/O&\_ܵe֬)Z |=g=,ulHx ԤI)8}RTvlG'A |ahU?y^^* Uj)BW@&[ Y k ZohFޓ&m}'c2{ZL߃ZP-Ӟot#3;s]puw])ϋ3saaGQ~ `Y>~>[%UYe8Y766*=irp8s0h 60BnA3ͳg H~}HJx`#pepmuQeJRP6,MB2\(mJZj oOWm|ǵDi =A6:3yRg->g6DKx!Qqe-~zFidܠGgO^M)]L?(5Cy.nxo/dQKͿUgLsǿc'~0(ļ~bu޵guhJ95=XEp1ڐ%)_gT{UT` w<沌ƃ=CAx<s*e>Fz76tFX@0{@p* x伦>euj_*`Z'6s 0ܙG Gb1`pnXH@x;|y͕b +*u?1*(&pvD7 0T&HIs߃c=g%!"R! Q."LPH)[rb;j'R,x{﫧ZrCi|nysC<Ԃۇ ;.=mъ͇1] z?`D_!f13a:yy#ez^kx-_c2QȃڋRv28tdܭ1+o،yKg25rT7Fds*+n5;8a7dʈ JT>b-`3F?q)| `0;C{@3qTp$՚Dɀ\óJhc1F 64)_x3; y# o.=A"0F,>QT%B5xsXx/v#xm=;Ӗ.- rH$˙6r26jH-е37 k\;l:h9%^ߨ4_*/. R %ŚK Lɴ ġHvRQlm^>g܄0AӺu%2Tx3H7A* f3! CU+O캛 #wYDVNL߼mO_/M7~|u÷ teO>?<\P)XH4! 4C(8s!H0O{̂#%ҸtFYOxG"#Y¥ S[}EO|9Px]L8261fx;du\|U0BcO&РОs1K[1yq[iWTJ_Af/xpw rsָu:g:ĄFpLyfrG|E2k\aPD)Mˤ ͗%bt_~ƣW|P=ɡ M7dEp(V}Fm;D$Qe% 2g2Dœ 2s洹k3w5 $'r#cCyngzXHN) W0#0T2р؍(܍D Ͷ^87:&eH̑ʺKrKr)?.vNRjWat:7\_!Iv0)4oO9zE` dԘzjlw"sa6٨tViOQy@DK2 a{FQni RK9 8mu:^6NaC׽&e\J(;mwcmaf @H ::@ŧQwbR*T!r ܐHk/q>;;;;;Hk/b#')ƓŚ(9|ꬨ-DB:#,f!d(yxMT&*]N&px<[uëv c]R2FQmEu%7u8Cl)'6\",)&%:R‚J@:SNSn%?4ݖ,wTݺ q$(HN_t 3@!>tTQ#^<'!ZHzEلpd[7jTsx:~Yq,PAq+kbbzӕ*,hBʱ r>2eZ(6ey5>4 Ȍ c"g~GX)lVK3Z]qfcBIƟ-01ij6`-d~av2XT82k3KaH˷Y! ]`/ Ţf#-1hfY r _˚BT-#& Yi՞&v)) ;//\[>ncP#jG1}g`ygL0(j*c,U0i`^@<+56AJTU}JCVfb $lyLH` L5h;8 P@,@|I#/ l)l%쐘Z$vIMwNЃI(x L&RS—]J a]2?z@rLG*Sj"I76 s!@5IWQ:a$S7߿R=5i3=e(j32s2gV_%kmy$yf;:qeU(':g.lo6nXQJxĈ` Og+{Sx{CYH6W7[SUW*o^eW :\[. "t񔨃SILqG XtH9Yf@`k Tl+;Dͽ}kw˿nr1Mmq4XJp`ЈxgCڳ6Qh3%T IH9>qHoe_@%]OjV:#%tN >S2ibx= aRtKzbĝL8b=B{XpS&>(FܨGk%T c_ b׿I@aL8up]?rP*&Dx`x=xw [UߏHze(x7)3 ?睁pF7M7)VְR]f/t ެgC2aR#t]Fs=_k]W^ 0<6[؇~hr-yB֝ -o3{%$0D!ZQ?{A˃ UުQC͕Q]j2Vhi[փ4܌.3:S@I+I+JQ2Bt:cPu uXb5 bAlANAΤ2A /7 mA32ĥq.J lx {|vͧY)unpw(`w;cDZgHO}@N&vqq12'&-||1,qv5i-;=x#,pXIy9*\p31Û2[>g&}*&X$&fFмp؏ާyFL\ufI30DO-}ㄶM\6 G$h$҂F]:fPy7%$7 &)Lt\xоݘh61R b>0-Yu.(pF RՔ7YD%$;cdYo~Q*J^Q DnNUyqq%(*qH?Bglas2 B2fS}y)d)+K@Ɋ\1  샄s2Bɚ }`B)D fUJ) @WXGJFYW *%V 6jJ0Cz2kfrִm~akѪ\gR3#&EŤ0WA%r!r|2;#Q'W^/p jKЖˀ+*M@yZ!p:Շ+,shƣĕCPۑh.zH<&7Lý-FE*a`)]XZЭrQ9N'ZG|)qzZYU(88^ZhJGkhm%;|KC P߂8x2OՁR7oody?q1X%onER*dlȰd\ ҷ,2>qV!:5Ë ^10/6C#Hbjұ2'=Ǘ7ndA[7WgD7흹 \۹kh _ЌũWLxlx?ߖc\r}r0y$)GI*I^?%?2:`jz $2uy`q2pʫƳV>gpVsNWϥB?7&l4vHa?;GWfI>6g2i/͗fLw2a^a^M(7tFS-!Ǝ.| S ^ ˚,FM-R13"QHyMW;~Sf-(_-r=EObEfL d,2"¡jb OCyw`,y1`FST%1!W( KFUɘUY YSRVrĄB.l`bTFD\%׫D| ' OXfJfr PHeTvKeTʕR9,RB*WHh!@&`d ]GR ӤfH͛ i4) x$_*AHʈYńD>UPA7 zdx!gA E PI@0׽<փĬ 8過 2xEyY?Bkh?TPqqZ‘_\7S?s ό) #3o]oeEx71Ot=}' ӟeZ(5e!奭M?[ }A}~f9bP6?z `w-bat=`)#?-Z4@, Ѐ3g9M5RaA = P C6t ң^İeb,:JBTM:8Cӝ쫦̯Y~f5VP"'p>_{~^~d@W|y(sV!k*~JBh8] b$8a']#qQ ^$j`[[m!,c>+`VDS&F1L2(y_3ۭѨb( 4##NDX 'UVv|;pf<8. Aؽ!o7X@񪗒@`R !je$Mu<5$%lbx0+B{CloWVJ-ܩ'ōV8i)=QC.ѯw]Vn:͞w#_[K­.>&DtqN< Hl([͵};) -K/~.NgNq0MPWZ!l0cnhd4;Q_UKjg :M:= 8'_A"֟Oۨ]x/SO\:˞ޞO;fSL]]g \,GWVJc^e0Ɲ?ō0\x-:ǘ SCjVIqN#Cq!z(m;ERj1]\c ~Y#XmԯU5wAǓ[$SA^Ѳ)+J2]jLKWxd@-)VRRm2fAEk2u,mӚvÙfnޑ~GQJoR4g頍Ni, e4U4e`HSr1jkZHIY b=mbr׶pYjmAR^64e 9NҾZueVJy[q+u|MFw%_FTZͳbĎ71Zf`]Q,o5WV;w6Neag&&!6=a=DlÒ '1FQ~'B)D0VȃRIOl@RpvNF OJ=xdZH({h%uGLu!?կBtqSw.+.?Xu[͸0=ƫyܲ,_x ~6 ҧn>Y\g[m75|hՆ{dc(/sex=:}#ĭJuv_rY"WZBHȞ1ASS K[ 2!tjs[n '`V>ý- IUS80<z}ȣa!2f/ a:`V{ B 8v7by.AKzEFOD_AFc__gfهQpZӥؔ)eNY)cxޔ7-NvZ L ,*ACH0Z..}Uo8I^ݞ oF?:(C~AD2c8)Y_c留f$A⻑d@?SD;#:>ŐR^k,a"ukJd e]B|CZh<2iP~4Y4p|;)5(.u,XD됰qO DʕodǾE ¼Cb/9f`kIN2żYofmf_2UY9wFX< &ŏc)4^[gw{vW>&g@X}@]]\]\]\]ݟdT穼`u2,esb֤_Q&ǥHY?N4J+'/{ڎ[Xy)+!6u)̑󦽔h^c[+0@X sabX ׆earM\;mB$IL\ܺI0iL:2IY$)7ONhi;m68';ђ>SD{b3Θy$XylNGcZ%B QӑδAN̛*|lgCJ}ėfaCUӫpͪxhSC*Ҡn6G&]&?;.dKdT v/̓]eZάe8 v՛b%&ĤQH6OiɒE[GJ=hcY8vUО)*0))>99OO?w0~Jk@֘א2PG5 NK8B,v[" MzI{>8>򎧞]t7j++.Z+N[vcڏ'=wɏ4,Ww݌+-V;}Ͻ+tm u6~rO/}#$Z|?G1m7(W"?BI;F#ŵvwΕs1q pv7W.˻K֗.1ܙ 2 }g^Ftng4k^Ha|O6L5?8b1#waBCx^7gE|*] !7m#Q@숰0u^}{/tOV %Y]WNsKAGU?|3c~*bPFkL5 M15Z6vc=gj Wcq^NU67YFhKst ܢ!-MJXE3F7ho[`hv?~˒b;CgM f]YuTQQ`d2#+74126Mʔ ^г QVX!}s|ƍ9ā{=ގiKFdIy kJ{W p$%L#M6oB>D1U)cNÌn`3Է;KPeSbfzj|Fha3.n)bx?Tn?:*h:.gG ͇W)>o:airoF A}_ORoĞhw G!8ĞLЎ jrUU=?X_څux?lwJE:p,Fv|"#,lqZP%⍚|0Hmi#6:G>qgh,#Mvbˉh"&iT)JNقr /UUT#@iSM]&BI2B9aBJ+K7\L %2YR~ >8[I+m%%6޶  NX#J[ӿ'Rw ?OX=#3q`OZlJ]MMoʰhc5 C3V E}8s%](`B^Fuvbfmq[](wCx}/7CSj?|Ϯ5Fݕ o[_xsc'h\ASnQ}Zrr3UXd,m-јށE^ʽ)3 `ۂ0 Ș!|/_fiST,XYAWk:g{}^H(3wR y ptZեt:YZ9b; o+}piYDAy\aFF{nuTN=*+mJKK$ea@}&9얢JKx_};RЭ3tq$rG[WijљӍ|5UNS0ay =kmerwLI P IYPV$}_^̌ $j(҇ذ+yC=L:&>YC厍!H~7bWJWdOǜ,?{L>7I7^RzeK mx.'O]OxvS/ ԑu65kN]P-@ 9!ܺ.фK!6W託3El+jf:\ n".)k *!TԖ[X>$ i#X-xk5ͫZ \-Z,`0dB{{{{C*bm !η[WGhCfLxE"´yB@收6[H7ɩ[1jSt;j|XO !?ThG.ِBF֨(#߇Eߚ$'3W8&>Ǐ4է9ƼHeIۢf1%R!-OiJW*!_YT.=lgѦexg>o8r 6V6nYsX shhBwmw~vW$[#ZٲGVֱ$VH#9Avv,8^G$>B)-wi{@QZ4郶r4@)J|\Bh"6~Cw3~gfgV}rDj2 ӧ%h**+90qYqxR^8Qȑﳕe* *ďQw}/SUȶ1{2Xe&Kn+;+Wj*=(Gl뜜윪B Vz\*1s apa=)%= {QQd*.Q+ qͮ SU.<J%glhҳs3& rcr[yqV3q>Oʴ$]Ϟ/fWO9tvE1GbMqvNEnw}-q,}x$Xy \mQObMt`%Ɉ\0߃7ᡢ2¼yYZ|#?Rp_y]s77|Y)t_woUV[t9U W}ݮ>4N𝷟p<5]ǗkXǮMN˽auK_.rɖTsFHN{skR]G3?ГdΈ\ ;#OH %1S{3~aox'%XST>%-n_HщXݾwϽuXQ&eZ v e-dU.VxX#GHԺ*`}b= FfOSeksWҞJ~RکS//x}KJe^˯,Oi<]bsWUGq[U_W#e\|Y +?˶l~5U R8JG)R))fcyȲs}tmzXAFi)qpbsYf:?i5sfu߆v'ד2Vˣ<]:C9\<8bͯ(Jzs0P.9_va8m3ǯTGXt8k?ӸѼEfYM,1ÑWIN}SJԻ*QjB EMRGES5Rn|)t6Ui<KND55{D+wF u4W9s,mS]!J}';e;yޖ^OpOb/0_l8 >\eHe+UC"aWdd|dOX$BiǙJt3WΟ~N ܲ٥Βo\Ͻ|9W~快pxz Ə)╋ze;4Vt ]-p?k"lEQO{ZpjkpW֒,ΨI󩶞j5GMؽqr]TiUmhvj BRm %FgT;kVmjIj9)SM$;9-njkHn/HOjkH jkH4utU}l=ҍ<??)Z6Fv6uF'6?>F'`v2mNvS S軲MT[CatXQm#;֐7-Rsj\tڇfjAcPm|!=jkH9_WmloUm[dfujAN-AfX>ڨ%WVjS1NשjcZ셴DjD GU4G=I%Pm~; U1idEBRqC XT\x JRt/Mp10TuHTO" "Um-Xƍs,(LZsZbDXq܂4Z%nvʘ(K!,ўP Ef ޮְո+ļ5.zBXkw#d#"QDlcVK`mhVVv hD~PfŴήXݨ [; ~$Z˄VHeV,3BԣY P1['fWUܟia{r5^+mI-712(66h6goifjPW#d%imXk<ԳH˥ۃZOJuJ_ wEBJ"+ l HP0N aZ70Q5-]`x,RբŋkCae@)i~j[~tЀ%E]-mκK>) }H0 F"A JXREr+Ho0ܦ J;vKAP*۔5 ;B*u7mذƋ0[+Ю"uP4H@/PK ^"IWzwK BRpVZjo{*1@G nھiT BPwPv*]EQDUџ F#R 8R}-H7s}iA΄{vN)ml ]nR󅻅' wϧ;L|3mum^koG<o28g=Y Yb"5 z]xe"mLS>Vis#O^23E{o#11vYr6?w{fxiU:RrGRӤ䬾?[{cGE"sMy4ڏ:wkp俄B̻9|'װb:Ȩ?Igz~\)$ϒY>6Y+5r@`@'z~`D0Nda\[x+SVopE~`Рy_]bh Uբ"ZT7%X:h>*Aqw2\> Ǐ ;ZA5{ z|4> e2Z/3N`8O)qӼ[V_qTf\<쪩8.m, 7$\܅XKtԐ}[cp:{>܀'-x/tТ] RSy'v "';5K?wqoWjܪƫxרq/V"5.PcI,~;Z9-Fu g&Ϣg1NOF(p8ȰFCd߄}*+xb[ 73RQ No i#܉s'q3APzHHBi&< ?/П5@;cI~w` g÷V a0g:ɸN$JD(}qM- – ?LJmŻX}FRTe-:83UZ£M%ZQpb7`*2]BxUA@(K9f9&%X*R [cɎ%;YЎ%+۱(ҳ8b"XTQ`7`74VtzSkPkP!xdWbՍ7U2yE Dq[c#ߌ@0m#ʈ5kXFtF#FȈqdDg1ii1阽r(Krg/ٸy-?9G?ŸcIt5ɝԑ$OZun]Niݼ[~A#KRT&5j|&%bؘ `%vWir'0FFuy2ز8YzKge^&/BExHE*C  hd x`bYS%2Ȗ_=_C- ϰV=?M|! 6~=! ͸:rd/rJ{[m@{0 XJ?, K[@#4h(P0  4h(LC  P@C4h(P0 O~}~}1~}}~~}]w~w~]~]w1~]w+4.8\pAd& C@  ! C@f2d 2d2eˌ??8㏃?8?838??8` = <@;N RnnځX&`3la)z`r3tLG: Q@Gt(Q0: t(LG: NleA`:.`+Khnb)@QRSC%SC%?L%?P3%?PCϔPC%?SCɏg:n踠@:N RnnځX&`3la)z`iА!CCf24dhА 24d!CC iА!CCfqh4ЈC#8ӈC#84L#84Ј384ЈC#4ЈC#8?=`\lyA̍Q̑̕&̌F̐:̘̔r 'GI KO{3aH-|83H.y QQQQuuPFԴ5AQ?'YE]jiCm%Փ{0X ,ƸO.@#P%@PH@>@23qhx+y$ ,5,ld3d&ljk6n6M?ஐ=xݓ=1ݸcc1U1-caK_8~K4$X7aM,a|&f"1b̶ٶ":-{ph݄ollUlluʭ4b-l}FmiZ:²Ra-ɛQo]i{L%R6 cOnNpnء^. uVp.CfQ=' 2zNFH$vi"OC>qy#GMXy_MZ)z4mq-[Z.D:٭M֖-}M>ulx}[c].Q]hӍ.w4E 7l>q_lR,7q4hZ#wݗKkk#C,wڪj8)j7 :kZMH~L7ܠƊH$fEojCT kUqͯl?¯Q#٣>jŝ=FNarᇹVH#E+WQ% _ CC6ۄO#i3:g>B6'}91[| >Oɬ>srΙ5!C †† wh{VtVI:BVpq%EέizкC4{]a!2԰~!O>γ;C CYz(j{g~KzgZ !:7ғڶa>%3V)bS`-kOQ?BRmQcam,Y4ˌdg-(%"9` \i'|O2jOgq 18I%5!2 ncgIgYgЙih8G=C!S7K .*(!qAx D> endobj 55 0 obj <> stream x]n0 sguBuΫ?!FC7/+ywv{_gه4Y3]xWx߲G}Y=p?ìlV?:o\}cJq2T_ g5EVn|+ O6PB¦0¦[;ڀK~JSWd~b ~!^[7{!^dh;w$%4ӿ%1?D/w񇧦-}_/5p6 kW[0rRg\p6wp07RVroćkPҿB_KW2x˄aqGF[uXEy$k8!KO=5 endstream endobj 56 0 obj <> endobj 57 0 obj <> stream xԼy7^Us_=3=Gs;{Ͳ^͍ )UF95"$FX.]@ ^AF<&_<|ј<]vAyTWUWT}^zs-G f/R3 !&B2ʥw~ !ڹK.Yto6!B\υgy`V_9ő_i1"yyб %OB; i=_\4_ q%/_:Em=F/lΒ7#$4۠G_z*i0BRk:h+o;@0DcD2Δe+*s5j7465K0 p OS/-v|ނO㯉|0̍ }{ȃDEzߗi܌DR$`VߕW^)B(c`ͣDkh/z} } `-\8 pOpՒd;9¤؉];wBak› hEKyGCw(u8 ^4@$Yϼ E{; ՅQ@[ R U_ h2|M0'`evN<|!gyx1^uzN?( )Ef b.`&1muf's4[Ύbgװ*Qov^5뾮_ʿ++|q2oE>{}55wm(x2 x+ގK | # &#[I;3}OD4ST1M 5+{~||Vb=M_)9唒[0o&f!ڌZ|ED/)ۼL BzD^EWmR#N5~H2D6R7D."Q<:E]ɼE6&N w"b?hn{ eg?OTӊEPX~ ̟@6wb٪'9  OD1f-A>h~ ~^ſu~ tn٨C ](H &l=k&sltLU?- tQwMrsO ]qOwmp b` ,|K0 =$AFL 0QZ iV#3_O^ox Ơ9d('=;dN /[ +jj!<&ZgaN& cct-pnkOc q] 8\q[AOS>޵]^^H[ѝ>2hG@o`χٜ g>rTr@Jt! %_60j$4n.ZpzM 1B$чC5F#*vXloށoK 7HjRׅ :(ʁk Gc +ƆurUٲL:LcH8 ~v N[-fd4uZZT (=$4tFCÇgh;4:f.Bоc0H F=kT)Ĝ؀2iqHHlkpH&r}\_/ Pqs`r!3mifhVU%۰ AjT+4xHL yq{ICət;4;4R4Hvv5|kq[z5#8t̩ڙwSwi‡[MZY=9_իWN}6@ɓ3Z:cP0#/-'[+EK*9!g]z Xv4vK]8\C'䙃=xz5;Iɤqn3JweN9&zf; .N&7bN-Z=k2/߮4c5ן.$:3ԣp#ZtCjpޞJ'DT`Mv.-D8ۙgak:$4 N*E4˽Iv2}6Y}!䝲aakWG{M:d^vlϏ 4rE!gv>ڞsZu$MJ5f@S{$};Lw@rs3@࿼p^%\V>>_ Q2rEWk h!qgv \hn K^юž5k'Ï4p[M+/hn'mh3hpnn!I%=%ҷrܻ%gYCnHSwa48^Kw ݦTu`N VU*,FEHPΙ͝l0aՀ転0G%,:-2OK t ~6x}`%Q~VJ՘,ut0yC3-ttKǤ)t&$:#ݰ5`Cl0pfl %)c4ZFIo(0rRYEJx5$#X.Bnx9]ȿܿc{ޠJ'>w]G2h_| _\WrX-N`rXS/w 2'R8NffIz-NvR4iIϪz:h9{v:X3(Cp8 cn@=izgRk90:8a KgՇTXa3{x餔_`izV3۔dIKp5ͮjJM(tYRf?(y?B) oD#ۭlz {Sd)|Z[[;rP0͙KReU4KIExe跶nM0][|zt5 kP|FoHSnlp.wǵ+6>j|UNPc4beMͲ*usf^-^!aU#> mtZW%}g;2ɧtt2׀l: g95ZΥ#[_QжV UӯF'RI'ghx~]+&ڏ7pN϶ O˓ (̒fUl2Fdit'<\VJ-LMfHXl+PwҎw壪]WUT.A3~S`Uy=CAF%Kw:m|Нcx$L錼l +T0y# GQJmV{w|P[5JSR4)x+CLYɀN64T#tkز5H`Ò:1F3E5HPT8,.P♄"! y`ur먮.BE&.s]VVW5Œu00E!UR8'g;V<+^ \5 r'b)@V<5?c'nU>:޷N}vC{>=u3+UolWS__?p%>+4|-z괽)<4'jg.lcL$ jZ1 m6H"@=71 ]v;(4 QgW#drr@s?/N-:K]4t!H8O?QDU=zJrםݮ#T;]}'+lZ,$f3"ו.Tqk+V|V.j[W$[ҶՑ ftM>&]WƑ 0&\zII'8? ŀd78h L<x&/p4jAʇ@UJ_roQĩQ].ʼn2X3IIº3Cp-N=rxY3`_UZVW[=4*+J~̤c_9fYD g%t_y]2}}_[9dni1kMХǿ5scǝ?otJ4vDO*⭖'u^4F$rQ=%C'ɏ=d3 gh 9ZTZR!D-ҧE:UHF&IKZ Ƣ[BH[-iFLV x1 k$dŖ͖~PֶOvr%[S@,#I;b(D~k c"7!PfzZ\Vh8kc\+cadwwr v-ARqla+n JfB=6[üB:]z=Ƞx:\O!,mcx LHRYV2~Y_=M [d=J(Rv*J**~m:p[lub]R%خvxCJ ˋ5" js۽>:hOMQ L\eih ܅ًF+9~ZFQۗ-α5Ťf4Lz*X$IDX[2IjeXpĔ*A 4=Sd@}+UmGf{eXL٘[fߔo4\`w^;6h|0vQXҴ{G7NnI2FW/`g5֙L&44Dck;l `23K5˳TԣQUzx&~88ԿcSD|Y$ cjXLƠ-◍>$8 }HMy"UCUU`Pv9:]h֥r q ]?y2yGgb(:sH؍TBTRz(/>j%qOFx.iL4W/ts8d?&ȟ|S}*rZ?ҿzAxAn+5 B!DԲRd5 Z$2 Iḟ~)L_*Y#./fsfAƬhi"`sc`OGiDbj$FH8j *PYsa^%֧3t-fDSP}Eǰzy5˫gT3gEȂEr 4*5Fً@ˋ`rRTC$VS/i8G ,%pdGOQ,t2^v\_lwϏ_{DJoqoR*-NjpوJٜג,ù(3 ɔ#oҬCBux͉mV/(&h"ZQx#&aC5]˧VL,,Ӭ(4BEK 9M5Rk)˂vd %1˂; ucR59s_cyl3}F/tK0TmĬ׮&/ycRkpoX '+~*UjzriS-W٪M-JrI -bT懥*/UrvT(VȈCK'PBSbhVcHhiXU"XZVt@"'֗o.'N1KIu<"SۣPJ5Qz`fbt*)cncK6)Z>uGUw?&N}1Sd+*g޴kzǧJ²Ƀ5u}w&>5At,Y4_kh#d GfWɫ?Z>>v3TZ 7׺7z6S`XS_1Dal*6`ǻ7#(&9b=>,/Oa̶QrD Mjv1 yNt~IþQb4͜ǧq9o ^#Nݰ ?kMU&l*'bww- BT,QSP(BUr졔xk9V/7.U_ nrgVu,%֣RPB0sle@'q2(onR`cpZ 6C+X ki<Pu5:(E$}bf;S/IF]P`E(XFԊ,I. ǃ(ҚxKBYƩԨV֠4]8u%C&ٖXb7~e(Y6pShC:.G:G[{{IiF2;Q7xnLoE#[ԶXlv-gi쓷__Ux, ]Je q,Yn>%N^JqڜP(Y̪.^D&Lr[~ڨ(wK,v-v/,دifgXfXCsv!%$nO{}񄣆+CPd<>ɱ;u 篙Xx[ F{}a1$LP p8HhL44G5i k+4«Wӽ؛^',v-UXF,FIA|(teXu,pQF ʨAO8{+[C"9Ag W R4V-D%S__(~(]\KiaRp]rLށ'$RlOrvh{G |53 4~Q 1uC VM!x|)ZBJkoJuQuz:oSJB FgW' R꩜I؃S(F[FGA%A=Gewr2qXB,!v&fJd-:9Y{g6VkzVۯBBƿ-zԍ1O鷙v b.&2} %1!oC֢BE"M2طh iͦ,)/AD)85 g nQ]`\!LRѫ?-rTy0u,mHeC'B̷oHOڨ%/~@0ihWeT* jl͚V1` #0 D&9 uz-neMfb-u zW,?tF{rn]Q²N:N0#p`,4ćKD(Ӏ٢ J$U  {]kH-,w!rYŴ]K)>|K@?7v**Kxq7Sa奉EUOUM,z qG=>cѩ3 )p_RNs Q Q(ǽ"ZN0& 5ʕi4!v_PXD ə};jPypb< >8s/'pr{R]O:VCB_E;3lG^bzBHA\˯Xt5KG\xSzwnn y>ٹ{p矗pz7ƻvayכom뭷&3/ܨE%I(FbW*n5Y4fc! =؃ 2v3u\tdCK&6$JZAi~,F}wq!Ӭ!Ȗ|zY9oߛiY}}b  zƷ㸟L u6dɲ%4Db) j,JS(Z C@) NOHOމ%WMJiRN$|!TP/?ПS?Ko , HeJƬ3,.B!A4ͽw9RVU]fWT.-ePKd*fx"8 F|\DFM!Lip Úc rhpM= #ӌf-YNXP3bqJ^bx AR0S)zJu=gJgƔzrf].;g;I.;([J{e'~[&;"[cdWQe+}JO=/9/IEZVFE#Z]lZ{0iv;C`!WF\NwcJGe3kTrywm[Q9ם8^;j~$?QlŎ:,q4劎HY.8aI1O.{k޾{^UWua17H&An`WQ#[wڿ㫶PX| f3pNDG9GD,\yjыk: ؚFk`FH?nm`̦pZЉO5Ոxdkr5aaTk:CU8+pδqy^N{wtl*9^ڋ@8u4,e~lq̓" g2HST4⌷fYe6Zi #g>mӑRǃ'ؑ#8뫍qo\ § FG䑴xZ~vc_!!UGIɄpm~@m>Τ-q{q+} X;jD8̾EQ{ޮL!¨Y:mq`㶘 g&II¤\|);vuն{8%[6;vl\ kGwtv=ERc"}Uū/)s1$`0F`KamӟY^&@፲ X<-%! h4!X(;%Ӓހ(8Re7@b/oXF_ MǤčg^( zb'v^ E<'HT EbPx}P.(Lj^1 Fr'q#g&1ɠgذ'G^>‡ѣd;-LNA׀(^z&nK:g:% Zӓ'Pkkk[۹}vPrW\-YL*,b1Ǭc uťw︸c9UqL<]q|ιw&`gov ,5nbiq8MM܋5= jEuq*CGfrsHQ%7"3r?JZtٌ/A_ K腆u7d;('֞Is&(;+XkLV-?ړ^~Sk`&>e1 4Թ5&!w*2HܛxCS-j;`[ yN . x (6pq4j]ӻ%]0H9NDX=&ٯrRtvT X4I#Qh< (JC*%vx#Il!ٻ(mgNZl=_Nl ]~͢`9yg~] -7!N2\@|vX6D3 `O Dvx |cFBWv1CH! o Z} *1!2-FE0QyيpQ(I {wU3Hu .^P(=nYe,&(z^WJ&4%$ZaSʈ2lV!Sf_"OK@q3$ᕺuۉ_nܲ}VfZ}>KspJ=f( 9Do7@ qϢkhӚCP1?LA :ULq@KZvWUr((95Ғcq}#n.1962`>~PR m3^7|f>cփw6\쪷CB(l8wUтܺSvi|cPAaW):(RXtZ㭱[&?ثߙ,Z{N_d/|1|eegnIs%A8 6Pߩhw!O̍e@]NA>#PM')) HGF, Ф81j 8%d %ix [Ph]̓mMaeQ-ȢUNP.Э,=Wcćg|Ճް:ӬwĪŕ|s/ W/_zK }Smlss:+" ;o[CRT#(N hufsޗ{bq6s~`|1x( r-;̩b浃XO3}vĜ3d][C~⏸s!)m(|+qW~"1uRuhLr>%rH):rZh–2lיD' !_b 7SթQ{\ 9kz&{P&4% Jn3 S-Egݲ;"ϻ)O}4rdK ևG>qS]|,M\5H:f? G۸ Ty| C'eП!Haouي= tbpY!A+ E!@FMu Ic#84u1kArtʲm[6FOG̏Vqk)挽s,@R`1oMNFXYoiLИ],6Ua,hqǴ'h "o'_(O.?7V7 5;`_?vA7#| 8(e["'Rў9yE {[*LKĕ5>̋#MHAЙ0l!?Ca hT!LRqSԦ)1vL1S8NTiPYT $[lABwb85893ش.RrrqRZrSG*ӊYL rf2JF*wG Wl撌Brpk[Z[LjOL8;cnJ(w]{Ư%[Մ< }:&πkGK,[э׼hz&E/5{}/Fzxla ǏOkqQA9$6E?c8 ڣ}>Гxsʹ~@rYc$U>m-3:} բgQ3f1>l }sCSS>>fcJnc^Ƭ$2;U!E7]hg["~ KR.Ѩ;JCي B[qYZt%HSd`MXnj.Xo]`{*#X)r!GYɺ2f>(N` ŅKy`n­-fŞ)ӆO[Uy+~y,gFO:iM͎֐{;&n3koCȀ ;USfwzX^V tY@"NJ5Aov@4Z 4xiJnn*տbDEIKťs$8}x4n滨Hbh-i7 A~U38/&Se0PMT&q e(*LL$r-ʐ͒qU0qZY!sA<<d+ pB툅}`k&+ٵ:zk{= j_/)?30břdTJrK`[h,R 'lU^rEohk[;>~M Ge~yC`Nj- kKs]~&B֬3hAˁr3G) Q +j[FؠRH~Oף gTONEKd 9K~>[>ig 4{%1}d(QFfwGz 7*y|M]L{ƪ6Ytrl-ܕ&G䴔^ԲW=h7̘䶅M:eX0,YK3M ReAⴌfwzi Xzt7WU\5ˌHbsgZTk̓-:!7h/>Bgyσ)gR`C"kyZ6XGрIծ42>www  oW;˟ʻB1חSEA)u`βķ (o-V}v|tyO־)S^IKs#G63k㔩K]+_x.zyq;B̒iBҘuHiًH@,`%Τ?ŷ OR"̬~k]OYefQUfb0>d`bH3F6:ĴLҴξٔ6>cٴOiQa9^fVWVWuS|ZPORg[ u֒ fOZb02qlvb 0XT ĺ&,>nu"S}0#aY$29[?sZ^* f1 dX;ðL((B?*u(` >0|AY `k% VWAd `#Zaaa~yܝ.'`AS_tF*W[}Clw0RZzΏ5Yv>-Od%lη%}U:|(C3syG%c@(;2ٺI2'U5\ZiXT`H":4' gG9ERqvb\bkmh~`-[M6VsZQs[bvS\ڔ[d0|4u_\⭂h?ͻLa5 1=.)f T\6ҘMR"9XXDz: 9u:]MKUO1Ce422?{"\WbfwqQ<7 m5u)HbHe-V`a5Fh Tma"q>*h.quC 1l 9cqAlmN%mTd4BR{)/ߊy%+#+#ڟ^-ΓjM42% sJɝh4)-"2Q\E1s P YG6$"̪*O1n_[q7|FVQku* ?>*~fAS'TpD:9/Ӝ7- wޙWHŇ З5 Tz_PegNp{!SR KA> c ٕX\R*.E P(BaKbX~^4ZIUe>8>&8`B.]^PbeG(lҥJYޕ~Zʔ+@~)\!YB"YD<,M66kk)ϰ {ȧ &+99O ɋFR6$_%D2 !wB rt1k;C_I\# pGAY 0ç!b 4qm;sEf)I4-"KΔ1]ER~z݁ \F=g_ݗ'^'oG[rr >9N`Th΃U2ܼx?[EԔЯPCV=9Pz>b/cفX4 C^{a`Yc^9/a%y*K ])1l@6a۶Meap7nDI.6&Se@,v"ޛ£Vq%_PRi %P䜤RO'fxL/?1k j}4UַuJ+iRi|ΘQ} bp$% A#B`(}d#@%^,ooooom(,)eܗӬmN9+BcbQAP+0Uv/NAdޘk0N}qPBñԹNްΩb?d>d,L1[Ťؙvr&F"ۧtsty|+y°V:`61t,H~n_Se=H<^k̘1)VahVb`D{̀ e\XF>ϘG-鈱A<0FTYf!kqQYkȁl7GH׆1ב>sot80PmUs$<~}>6<*#^8?ɨ fknv݉5ܑ+~_#q/m!^HD۾H`hJ"EGF 9F:`rs$-?7L4D!*"Bu}Lg4V:@,ÈX3+ z׫xnGy@DŽw j{W)K/7jGMkF;y#V՚Uu<ﱺx UST3]+k0Ea=sʵgAouQOœ.deC~r@s1Ib !8rcܧ\'a :IRkʻ2]4Xo`uadonۖiʹ1"W䳈1jfHK,S? pS2-N|ˍ4+ɡŧNɪ1'-'fdWlE˼p[]fBo3%a!0ڈ*M#[I孶V..>>>v:?==-UVOlJkJ6s:ﳵ7p J62e#lTލvKy Qނϗ+SU- Z/Hw%)$g5 ĩU*QԞ,lnmoNW$'Zqsmowv1Vvn;k'FmmmI3t _{?Sk1<@=u +TѴ TF,#H6UY-#YN)%–@w1{(dY1qHA>:_)ORL⿟cNdKeX1U[ŻL8F d۪U@n4˯܌}))97\ ZNK c#=4/p̭ܵ۸ƛl79dvJM%W5VB3qc1-d;]5Iq~@ 8]G^Om88usm9v;lw8sڦ::]Z.UmU:.4SΠs^˳rZÍUbR!mVJgֳl<%F{=iܬ#$2P]Ȋ #NDAx=)ahA0HjPpİl.?"uy} g)FJQ)lS$a2ذS&2Q."0Ym 1L[(n *(T&bB4bժ?̋8M4>ygݍ۰[ݙ<;|^7[ +5ļ8Pyd ,?mdy 2cpGZŎC|CdSVasV1?T3.3/CF5P,q5YO1h.~v '>uRJQ#@*Dŧ *&)NNZ6ǟ J( Q`OsxQ­3c3$\0$?xZP+@}걑wPH֜Bŏ!ƵŝSYJ6&Mu=„b8*MլwKqMÚH]Z=ڤc4nRϴ\GjWkn'pUp*= \\1gw/,Y<=ILv_V3k%1y0[ tZ>Z@" GZR*C vBZd|UlW=EPH|dAK9:ʫώv'b l8)̉HuB ᢢ[nߙBk-?7_->ƾBU ? QDYh0 #6H"Pr33 ?JvІ)B!aX.Z#TY[/ٕ3^/CݑĿ/>o˞IC P, p =J05Rm5BMF֔Dk"5 55ɚDMؘJE"9EE96ub1~Gb6BNQ`*{-n5L-Ƚ9-7/V~w^kj41E-=N qElSDՐ,a$n6O$$(Ѓ\VN" v ߡlO! BvCom2V`l"W| L;f?yZ}2Y0H5ڰH:`PNYVUoL&Qc%L0+<`5eL/',z RF ((qhAN&J&@"Ht O`6w؁1_29ݒ99JD2<[ _y4 C{d7؋+{$7FTdJ9E29PhQ9[euGl͏vIq8`x[mYlE[Vf+b}hFN KRyC8lxEfv %aX64D ܁# #enc/=pc +S`yk2&"vb-XP7'O+u^Gv*V/t{aɻu%V)[UO)vI\$%L̢tE%EUu:uTh{C!a(4j|^x>|@H|:% Ƈ #> % 3t2ab8,1-&B11i5d4V+$_$<\ |(HTZ1~#a6$lzzZMN,s.ÕH^f9,8Fsq /)d.#2SB2i{ N"NfcK9V1XȲY .]aZ.!7H}3g>3b/FG&dw>^<<^"t^fޏcATʋ ʒ T1jhꨓ&Ne~ap)2N̖\fGjՈ`OTU%HFcX.a=o:<M/ոv#8SaJΰ3?0Yt3,$s5f,Zj˝Z>^Km*MLO*tdI%A}ӳYq@1q tQOmpQSiTQ.tFigB2_S99Sp篩Ԓ2:"8SK.s>0LvhgC:U_GyG/33vZ ݎatmG5dh@%tf5h+ځ@٨It h:Foߡ*t=ރZxlxh>m]`n_DcePpm5څ^Ap`~;NtõL-{˱"o"m9Zuz&OE{{{I#W[փŸl7;R,crܗ{꽳_ - ω"E̹'py=P`*,(WXOo$|BWקU/eTw $􂆵 45I,>gDvF<*#ľTdTC[Mc>A'="8ľ,Z~*(󡂫3 A>^˸)8JW C>&WM̽L$UVp j3H(8 2\ AfukrF -A܄ghHXEzɨAq51m54ZſOqC>Ԏ(8!PpC.ЇU }ݡЇc }=ЇPCޤKqiq ō4}IqMm ƃ2uW( Ž0D lS⅄Mis Ne(gabD U6N3P7Z mBhJ#NH% ' f YC`'P԰h.[ k֞3[}i=p"JJ'\ S= -;G-Ke[΀:{M"Gh_FRH#/u-Q>o.uQGv*W^ ŴֽJir⵴]]t%C r z6ZHv ˭{ZGm%9^Gϻ,T s{&䬣Ov\e9QZ!>ucRv9z}:+hnWu 7|.J]4&/qyy ,ڵ{/׾ִzwN{ R|+(m;t;{cRv*z:Œ^r虤ӻ\%3zD,+)gt۴SlYսHLY#ZWsy犢 =]=⅝guܰg Y՗wBbT̝ѵ eM($Cjs&zcEe=ݗbZ\!넓׮(!G\޽amT[tJѳBl[ֽAc\ҽOu\G.lԹ!^ayiU]WM8`k6S]pVX:Ż׮$v剝-#g׵vYDZR셻^Noiw)uvU:/#W]ѽqFwM }6+:/ZIʬ\;OA7}a;*6)b2ѲOv@`}(p|x{@MВQr@<{o`̲єLUAVb wdr*T XJ i=΃j]켁Rv.Tƻ9Kh<[hwS) -$fgu SQ6pLt g(][=O&1%upIo64AH6!MS@KXZMk_M!AXV_ ~l=A:%c-+B_B͵xj"-[ &Q  B+POW*+( u[ s 0 RZ@BXa+s`@-Xv(GC a -vAC)9G20)bdU@yeW痡SfIyMyhM΃[= B`trq/Ax8?r@@˨Aj! GpN.ͅԷ! aJ^sg Ck!NQq Pַ jK}&dn޼ ~Rb}0d=/~ /?~<6 [iŏǙ%(RIdTr4Ϩ"dx/{h,8K,2Xdz~EL .\d:oxi/M⦊)7MyqSڊ|dBh@2iLH$b9B @G2!%9%&h)Ԁ#-Khh%mPFA83sFNqSq 8;R5<U>t1 1Ǡfoc[ e__iB jꯌ iGfW[u c68gnh΂!> endobj 60 0 obj <> stream x]͎@<aZ,yC~oAaIvU u lwnξMCsszvcjbz׮O IۮI7zL%v/zdߗwyzOv8OIuj<>W~NdIxY|/-f|lx^R?Ƙ>Di6ǺS_cM>6Iޭ,|i~Z,y͢Eu@}.#Е_^Qk-KWw%ޓG1f}F"g*_B_V?`ߠ_ύ K40-kßW/K =| j ;I~wJ0߁G _0^QQә G3~3~I~#üWm?pu?fƯ/``%h_WksoO~@[G5+_b`_=w/@@eT,&X7؇X|LӲtiwÈ, A endstream endobj 61 0 obj <> endobj 62 0 obj <> stream x|{|9gfw;;{&dI!;BprQQB E.ZBhնoKEjh{&@mwggmfvޜ`3E׮`W,|Ξ;Zʫ % i_~ڿnY<.@1 GRRF-22BRkN&l`(d*_}$;>n3Ci& Ҋ{*{πP n7VPoU`- u  \Z\ pܡOGMjX s٨倓Ԁ΂'o0ToaN%`CFa3\ ^+?&`6XL௩fKLJnTAa NYpp"pj zkC:<{sgPl4Ѐ5 o;ߡ΂ע"BihP |u-0? `/~poN{$U7~Q:9d;g V+fC84A!J( C[1 F޺lv_:t0W ҢF}FmR?jzfG? -aހ y}pO_,ɕp<"z>'󡇇%4ުqmY`J ~m0o[a {W6#u/,KtRCrR:YTP;~;;R̋Wbxcx[/~[?lzxCJ |TF/$$;JRPQ`nh=o 2+2֏1~K-5鬄F!؊|7~by.tz}L_Q%zHT]҉wҙRiۃ *Kҭfmf象^:0t\]/7B GN;_aw4~~p KG'}Nc~*ӗ~'3 Z8^ p a/| o_oI} FzġE-hh)Z6Ѓ)":^T z}JSOuQqln^ޣ~M35C]O/oOJ¸HVJRt_SiFʄ)#؍Gq?Bg@ 7Q%8N`#u-q|hCC zM>(|8C+W`yv|6p ~ t஡U0Z:t? ݰch9ZJX̡~#<^O<6 &#( m`Qzp'gS2?~0XJ] iԍ ~h3`::P?U 8]h 14CA ^& q$|zZA4|֢snh_SүA M+Y~7tJЋ C( 5eOQ`#j(<]Oh*pZ ?~Xr3\ MMX R˙#lbgVia-A /1^t?9%Os,.cpuQ c]z3 !45*4jsL:LcH8 }^tmV7 ^j5jR!1R M!⭾ ݽt7~|}pŢ *q؋u/Os_|\og 33!.B"n{sᜩq_w@w;ż=|ռ [{nXӺRk^HAg8|#3o?LkiZREKzLbx:^ؼwi/S@3^Femۋ,taLķdѼٽԢNݖ^~)"y [mTO27)lu>:urע؅=cON:ќBJZI•^ooEʅ֞^0mjVwό>Oo׹~zmn-AVW̓m%R_Y:&I}HwBD6n$}EaiY\OßN]pYya[Os| 0}]\R# _%1_}8F/fLHb9o(ֲnSf:S=BE\ SgnpXg/ZHZgᖑ0- c,8ղ&uE}/4/K}Sv,mJJkMP%l؊9qɤ0[KW*r"#ì(@^vS?^T\%&/mAn>gQ#m3f!d̤!.ꪚjW>%5xSuS[#nij=i`(C{ܼmS<#[8}z-fuUgwt 5xzڒ1ZJMVgik-Tl0(MrYC[z Ղ^& FF'.-g-Eu/9_ܧNQjEhQh,aY`ƨu1=c"Gp ȇɠZ==xM5:z Yo>a9(4gGq[-wiu|e\ьYQ\,1pvG7t|-vx`>O)Ya=q"&ĊuŠ75,U1RË dJ \ʋm5v\#}KfGZk)idgU!_Ӣ`8a$UR߳4J y'=kzHzg&śB0R*)y6x MҘ? `e/|2] MOȠ7Ry-9jH[g*U%w MFJU&:cW;^6ALBH%*5᠑U^̀&??b3iFN#U}sWnz?:ȹ|0utOsq GU7(~TeEhJ\_e)J+J=~1|YX׺X;)aF..YR_3]XǾrC,CAhtt̪X0eyRK̎kkE9|- iXP?RTjchuwc,f2rm+_e k_޽ }p\UY\c̔-+E+g 3K}[[&??ϜH<Ӓ+0MG­u )ZeWU00s 2FFӦԎ懩5<4ܯ~ٺ_xuGꏌYQ:[MlkZTsuu-?a f^j/B0#<-=6Z=Fgf1X,HFCCC#6ᦏwڃʶtxb/,-)"E=ED kl0E:06V}|^L|91qI?H,Zh\, |*]v YfDPTVэÜN>N =;b.Z뱈dE^%[_ִU0G,.fas t 0Bzr v~).>tj*_;pZC@brr#FF`s& X_ʬԊTRW֬)j+|YW={d \PXU9A_*2ׅ(JM\;u~ d-9jf.u^oun*33׵4]nF`xc/}F-Ml{?C]zlVsh\][ 6|@C'x@.τwVzY-XXLR՚Ge/GFߴjS%* ^PPTi4d&Ɛ6ZmE {Ӿ 6,Xc>j3X_WiZY1,bLd!Fw\ )ZQ8#aQ  |@sv\9gfjE?xIs+l4VD'eid*p0/Zjn8QfOILMyfa QÜ0K5RbA[/yc避UuL|C^(FyۑFeV*Cm{PʛDtfjtɄ x̯"rri w kna?neZ)((i8'lO;:DrިUa=j _· ׿G"lN;LH Y iȱ2 aXʵψk=V ' ܎5d* kzt(&{Ϻ0d[(Ebe TQĂ//ޣ BiEUppvhQ9 Lټs\ `OIv~;Ӡ5"n^Z+uf0ZZǝ@IѲʀ5h ceH?]6UhNϴseؙOr}"0*{!"b,-ɍncdFaK(MIHtk.#2ZC  cOiF4Pc ~dߜ"KU0✌<x [K|Qu&Y%eH*W5rNGDmW_ҽe `Fµҳ̍so8{tecf==]],ntаiqX% '."F#q BkcdJZkV!IXOQ)'EH  HR 3tuJހĀ!|SSs7ٽ˽}MX{,oEvBoQq32_9[l\_~>K숮Aľ.(Di#zG>0ބhTqT (*aYdEGc#sn?ߣOQ;Y{kVr]́nԒjv)x̫J–n[[t p`d"p»A6o"]ru\vC$Hz3C :Й-\azBP&wr2[ :Vy9/'?#ɋ9\#\]ILlQNw\]]`c.NF9\0<;0AJn/Xb)}|" X:Jp(>-.D֑ڃ%ְ"\T 5MIPND+\d)+riuJ)nKm v3Z@j 6:a3}dh3-[7|||Jffulw;aCZ6 lbFbgIzuۢ%T=yS xAu@s@r;?_`4 O$+XǼ~p\*~HPzBh\J_n1S>~`pOs~gҽeƏ?f)Ĝ%oj~eH{ D~"%O6\n2.4vOi'G nJ}qU:>|8jbm̐Dބ%0Qίy6`6dYmڭ 1~!9lz~hxFН:mVM! -nˏQA7Q7 wڗqWJXu A=Y] DoR70+XJg^ݸes=*l=DZ=_5$Y L:SwAgKx;ךּN?y o&L Lsk{?ǽĴyk{JU7wq?n|y}28_soĎI*Ԗjw?Qg!JBYpό0Xc$$k<3-:D'ܼa^e_}0*v-s$+~%{9sÏyٹ)ë5auF+p/[Kr]E0!eZe V:+|HV8(pB ¬V< Zl@"cTDl"eK E*$(Yhuv1"DW] _DϞLbeчUwKQcE!$~f^WW jYFQAV JV|oq<bF\*Ц4p?sLsL?Fj`/eI͏}WҹNvaz,dgpB %~Zi nes} b,V ۀМBޝ9QxHle 2`ltNG0bc{r`HWTFտt/< m޺¶;[;?kqi ccmMJ 4y?!9P3m=+H`Һn}ƍ@aA4K,4bin(RN e`,f1ڴBCVFۣ9Aқ|]2ִK"kx JL Kvu(9<_lS 7Q҃X K ȾYaE4'U͈sHns>@Iz*-tϼiux齊+vϡo*}4ط -kc5kPsyDF}D_WLs:U&>#*VZ*&Ҫ"Zcp:=638YwT!|-*q}Bm^;[I^}CVLY1>) s9-Q'*"?~ٕ/(Ͱ<$#@\H.81 :< *CZHy/'uL>JH/pK7N (9fBĖ~ۣ9c3>֯MZ<П;$At8TJZiR&nq(YRt80UiDZeà6k 16HHL* 3&ɞɡɱɉ=\=)15M5bMqh RM&wJ&iS\dp+2!ch39Dh %d2as:!tڗI2Jvbj PNke %F 1(JyZ㴹>E꒾Tmlbd%cZj)_C 9IgA[ipF61_Cnddp \$"cAPp ኑ‡AhsS.k״S\.C٣M_OnEnZ{\Ѿ `A?e3h O(3 ҴNtK4~_;NJ6k 0æ_73m9eW7F7nU:ˏ?P&yUoqXU)tNi՚ h !Tbwפ(͒Vc$^<Jlj#W#¸ldi-1SE/A6R D?guH!)@ܫ拱 MIu=1]o)#bVjj%?\p_[Usv%*:Zt%۟M_KVf/[ǥy#ވҳ Ǡ^8Mx+Nb%N H5tJVVOS RZZAPe (!aޒRB@B( adRV!H$ITRTrJY^pÐ8UV# އD?Ld,}BVZӸӯ"DR‡r1J dXTDEO)(R[П^6!+`*"&X҆q)#?情EFhOֲ~⏨֯[>F8O-4=ݽdR݃G]nt\};T s.$U|qwlrV+uچ*1!As]Ifˢ 9ݳO=؟<R >o'UI J(*XeZ!\:1'lS X#qt*#6, 04kXܰB.o-P$V\gudϘx*̂5gƦyuٴ( t]듳RٍQ̸0""g*T&r5B[P1OKGMU(ygϭ많]}ǻMo*9=ꇩ;{d@@&׶\~0{ĕ['04X尙Su;[{[ezeefV677eLhX)ڍ3#U F GhM/_3B+|T \0dX1\\ Yq\XE|!El8[]fK97[q:`0pvM fc9gTٴM=jlQrGהUEcDHLb'Ab3O 1 S\*4VK"J<@<9fY7Vmмs]:0l]Ԣl)oDԉJ]dsP\Ͷ?I!>˭S\3@*?s PJ"BTPOm5>4I A,~7/}W bUd= k7?zYPPR{r+PsPƆU ?MpE)(,tl ,  /ƙ;5uᙋŸ/ԫD( ׺D)UBۈ,8] pq r 3GQzƮ)w ޸3t5'{L ^dTZ&o,\%;]ЩЫ KO ?yI֫i+gƫἀ)l5jtL`JaRi/+| 6$(Y93$>&MsfZ\EQ? {E~[% Ms敀|~D6g &71CHpphb+2}X4 aX m7uae0-ь5j&<>~⼤ՖmYC_\+4$I_fag<Ƒu:W 1ƚMMD(&*D/.$`A0wX(|^F/oNwُdeHe?xLJW kˎ,}|`j]8H4Y @Ky[& |1>`UI.`L<~(]kJ#ys?Fgv$AjR&0bK=^s.=u=Л4{Bn~Lx z9_r7++ٍٕ?.i Z]c{dE/P[pިǙVYƣ- k=*C^MeyDU[]o'oXcQD8("R/βnFvtHuDd}',ک WD9;e $DWmj"+?S-ȊK@aX*$xcW cjj/ y;tX s<ͭ]ʜDz?gcSooi_͹-g%Oi}EM˕83xt`6:m[GÒ\ɍsj;g|z3z^Bt(Oل ^CCn7vx קr?`8NnW(2ʫ"/y?ŕYcF/ VE0 5Rp[ )X&}Cec2v6Vُb]Dc5"퉛gI(l`A\qF`vach$87-5 Z.r;U#V`KقF9aZ*x8S&[F=sqוϿTkv'Q @uGO*~Rr= X1*LIP2Qj ߎvx']~J[$֐+,B=:wLcvrAiz6?k:b\G@ }K>Gt|ޗ*#fED`HWcęL: ~QR^N+`Y5=L`"`I)G!UQ,3G< Y#cWJX: #VMCx蔬CV*&`2 LY˥H)>S$̛X9! $RG!} tX(o@T&͙I*l'uyӰ?/5þ|_|dMe.XY^G8ц+v( /߽tnVk)?T>/zc]Kedᛗp֨;* ڞ)_R2cΡEK7ʣހ6KNrr(c8cGW G jvm3>*tX[V%9zX?Q/GX |U>Ӎ >3Sed z|)G2| fD0Jec]aUq  ZA CVd3B Li8"їݝϼ9<#`6cn>û3cDX]@SfxNd*M (jM&SaL9ɈN\cfsS[dm`E17!\*]A('4lj5mEvʲ 0翁~ݒ@^U7{g%5M;sd?SOa!ˀxe;er8?Pk6ٲxP V[Ң%ɑMTlt' +0KH[V8lj^Y161>˱C@98&Irk,WWbE103A:?iGseT6x_~bZ&\I3)9`_W ]E )W(*%|vn%qipz. !vHY]֪tş8dg%r>IpcM/ ࠏatR`0T@q}5uk僯+lîLO›Y,V>*$}n 0zҚsOBG `b;';* WC Kc00 ̘sr<cCb[6[2EgҩsZ3VMb/dx:S07c!SDžڌNPZKtaQTv}׊ )`*ثG jS3J!WYWjtРq2 #ֶ-Lik x7SjjOMҼw\!A.I$ KѦ[24EB1j_55Kk7;gWXY@3ɶڙѩyUsD&Wf7n쬺'`HXնY'Z3YP_f!GE_eJQv rE6X""H'&HXo/‡^ W>5SUm֥u9q囗|o^%m^9c30o=&Q+iæ?D+a3F"!$styMS, @vw̡YҨlLȯX`gyó~<WO@9|b}_";wR1o+>{~xGV^K2._75Kʅj9g#LӮЎEpƄPE:yeLn>wǝzp,X,aw Z^PG.Bce,A)Abeu#P웸0PTa- P/ >]X&э <z_eLE .gDB"IV}SMWe׌Ƭ}U\H^K嗥X~=o6i5 Uv@pXݦ|Hvy~kc~nVJj:J8 a`tP6IQz)Ӧ޵7UsInro&MIK_&EU6H۔$U(">q:ԑ+3㺬~fv~f}!,gtf9}!M9}s{}p8_ȲݔLbɱ3LT#ǟ㋉;]"?~s t԰ɜrTl4V/ |; '\̫1OZ:vnϲYx׽{lh6Ր̃Xr{alsk+mHN}{-ajNQz/2B]Ab1M/rq=#g2}M-% kdf"$1b>v"qR.>$9Q,"+EB~NKsO}=̒2ljE=v.BXΚI>#_~F!-7WoߝnT%sڜҢ_]`[.m?6 6CnNSlvJ[,-f)RvAE )xӔ㲤:e 9Y$Nm` [/ Q;km =`x #>>ywƍq\mҳyi!Zw}3hϸdCA"_:͖^2 t TYQbb%{Z I4k!go${m<ح˖,Mɫ rs&n.٠!i>y}KnI,*֯Դܥeu=N>RѿV`-6/]«'Owt4^iB| mr%՜j[knFJXm֢q 0EG)I˪ft|^G.!#9$2,0Lw@np XX Txeb'S~bO~(7!fn0kR<-L.33Y3>h`9 J7cgqɤfq1wLe cIF ;~0)^ A73LdQ#Mc+F̜GNb-dI7߿-:+[NFS'wʖy JcFnTGT\ ~fg|6OC!Sɵ=00H)ۃ);w#Ŝ^TkpamvOP t9T2ԧ%̡2Y q sȦQP%5zӨ||tw3j)Πw%L($rmA-8~GGMq.0?Eq>!aɱAJ*+aj(. ~R$ ~Rq+a yb=-/u\i1B1WE 9')Kzm00ȉP9"V@hl"YKA$OxP|D d>Bt[ f;TDˡȼi yuګ؊skZoHj*r '^+.WM7#a~%jC%u )L# M #-:kz-kFM9 X"Zm#HmkX%j Ҟ@T.e a DCLO ёE"QS/#˃t-6 2Dچ4n݄mpfz1L& ;D{C{~4Hu%ݒD]?<@9BGFHG麮Ԯ/(x^A:jô#ʽOv͊I/aZ$}0yn Wi"9Q5Dxi.n ?~*:+>50 E` 'o|!_paqU;$wO^5`)(7*cFQ:DCqV4I.BލH/3.w -!N&J%Q扴lGY7k,wZ<$Tˣ۲E]O-yf)Y1Snԩ%nqrMNrU N@bFnβNtZUԝ;R[*oqj- RJcIwĕR[r>f9d9ny,AvfVײzK8|fp',wNFe؍3GYY0QRy'1Y Ӽ  U{ ռ B203\?UOy^s<#>=m'?˵s$(2۞`AKQ$maZ#U"*Rmo(Wq;qKnԲ^|fᤛn̍8kA-z G]1;b8N,%oGv߳'D[ 5&n#9ql&`2w47M0wc/f6"rsN3AEB=Ji&hXB B{ &g phrƸB9gqdZtr˴,J)(Jy1HoQ VQC !P|Wc4qʎ#Bo]3 endstream endobj 63 0 obj 22810 endobj 64 0 obj <> endobj 65 0 obj <> stream x]n0> endobj 67 0 obj <> stream x{y`յ~e23_ɾ73d$B2_V ,$HHR7^ݥU}e2A%UUԺEhՒ;C=|r9s=s/ nh ԎQ؎}v=҇k; (uuߦɨvXDtw,vcF64Mna]zf[wb=xj&a_XWֵ:D҆;?4'煎k.a CWC&| w th$A2P2  !QNh&y'b]PzJ`! v9O`+Az1Q!擹CBOp'C`CNq!?B] ú^'48pOr46(U0Ht$+C@-B@FP-Շ>HWC=I"%Pce堍szۓRClfBlb2F횷4B@,ί-/y Փl/UnÑ/s;95$u#0$+^Nl =.:΁~N\D%cыt3ޓr^ ^7MW=i$WQBY\ ^hD+QH3i:uf +Ѕ=Up < I `Oi"7[ t?;`wHtt\ynuin}yx0J2Pl25$2N ?%{K%IFzGE,Zv/{EKHԵOO>;y4d CE (aBp;}^?`81'b6%E$dH| 0I(SCm/`.m\I'w᳃܇}AW8'5i+>+iJoyK?00ful5mc~ArIU\B%u\9 4hFsDު_~5LO.|jDsOn%Kh fN Ǘmg+Z+yC| /X;}M V.]#&z. %WiElCӃ1"j] J7=p |5R(%rE\E{Z[Ӣqkd>gqJB/ޡ1Ln\\rNv+I$x1555jvkѼ-q(~_⩡ŧwj\=pTs -i!)0{`!r%܈!5b]cJP'zݔ<^<(r"M| Isux뗭'fy77^X@Z8]tV~iWI"/uZ{|K{=sfdŹk_y鋭d_nXv IqFaªWoU(r%.BOlGKޞzGC5}ˉ~$>^\ئ+ki˲|G$x a9ў|tP-jt՚^JX%ETjS.9s9bJq =H4Fj1~ UUk4]I3-9fgS\O@qhL5Z} iq<=VNʃ$+;,նjZ|9/?ɦlּLOI$GLI V0'%oy@&'F{{%ӌxUhSVxX!+ br9Ņ)x7\%8ΗnPMrA!F<7^ekG0)u~}W!(cjD"OwGRbz ̜8e^WqC\%x-_qq"=DUG>N3_'W[50ǻsmya%5vº%{g[Rsf?kʢ$IYhVfD+k5.1=3. ay|SHڬmZ=]I--[caOj\|2͎̟>7C Do0A/=ӷj A;Ihѐe&dGqB/`}V-HI1%q+GCɵ ^ a*(X6l/9ɍgE?rnzw^_N@z//,٤fdg%%&'RmZ-R $#&5$cn7q[ r}+YO"N3pecb1x:ixwg!UM.\6ͯ̊wWO-9/a֝[r}bZv8BG1:^X/$ٔks%5b֋OȺ\9+Twv?3> w;hI=Uj4`X߽ ÓwG=s'ْwRRxXPd{ I Ռ ոܺ W1656kMc=jJlvl8\sy g3sxp;_Y_xW8Vp%Z6=ի9L9RrsNJjp$=2ފȍWJsDWv"މEBVqnniX fTWS1؟dUZFEt[ף59I,T,̉X> eddX|0F (.^ЄWcQV 4""%N/AO@xԨG5Xp1.#gi`hT-D3O0&8>DNK}vjM✮9 #P, \ NV$<߹û\x,WUYj]p󲚁 =.;\_0o?'5&6!r7LM}e h3zIWYSoW@k̇SckN+w8X/yf䤝ILQғ'^%=(8+SQRf+Uƪ2q ) :YSLj1JzÙ{BCАkݕ˜Jz.ʨ8YÞS_rsi٬YzNj1^KErkj]S:T`e p߻v~ɭxan@h =x}Ɣ{(O!@)~rJQDI3Jb1N<&^ fVDy~yf٘4-Fr(v4´ '8=Q鍓+z͎nvIzr rv4ylyX85}`4xWM@,bX9Mi /v;LN82mi-.xF.-Mt66&Ù` Ԡ4/)QE|(+hTq (/('[I]R5)22vf3$O/$2ghukz*&m׮#!¸)/ qDx$@%U|U]5 jMhP''R;fJԑAHfᚩf^Ǐg$ϡ)oamM%zHX඙eey֢'iL%HUcLʴδLL+bJ0I$+Gc 7eI%d[e3C^|UW(VjU[՚: Xb"; G&6,bdj' 櫕%|A`T"0x0Fm. ބŔv <"ט뀋љe{ V Ůi -딇Ħں>|q9Q,#Oq_Exx >U "wQýܢnQqxYxڭ'.w ^:7Ɵ[|CN=?_l+'KXwʲy%1ٕM t5̺]f.+_:i-G5,wBwH w[DSQ!9H*Y,*Jqe6R$f5]cJ$ ,7Yq*qr7w %,8E3:vu8VH+]+VUzXObb U,W\UhO˥1Q\1R-ML>1"OzGXlΖ67=ϹR>Y/s%'*3Y}(k|@')!Crq tX{ICPO΀}E<ƫ-оD4FAMCA,@_ O"5d_1KEh}=BK#9i"B`#z( #~@DMͽD3=B}G i#4ZZњ+Z"5ڒm"ڋQ3e*BK0]$BK7 ZZ}I/MW^A=ZoZi d7EhcX: xFGi"4?0B7#4*(>w#4cXsQkt4|QF{̛mf~8BKP`~BвCq܇wFZ6[="4ct<[-Fh -"d./'Fhc+#4T(#nAۄˇc*-BcL吠ba>_y1Gha^+ttXK%B㸱3P PH-Ba6h Ҽl^!19U/ƶD qFAtR ,@|ǶvTT}{䲳Szئ@ Z;R#v Ѝs3>;?d&XiYvaNA۸w{|WnU+$/BugM«a˦Ȩbf\4lY&ELaEo:?׳AdLOOB MUpup.W;x g@dE'!4x\$\A̢Sc) π{32VoDCGDWx|%)ߙy&ȊUScɮutR{TE ;2̳]OIx.b9ډ-p晆=~WDd#exVazDk7NenXC2F?S,RoRjۇ{MWŽ{]C]:/]5,HYܿ}]u_e)Ykp)% ގ3 >iIi{)`{g |:cm)/j/]ZYѥ+Kum®C)z;택]놕YEޖ Mʆ.emGN25wxSY 9]Jݹ;(*:uE==EܻoC'vW:{puث:P ('_׷IU֮NZwB& N>A:raAN/2ܵ{pGh]_aSo? JgF\֌āZ,T9]z6r~'%r?|X^3|V=^`b9r>"̿.2"=.2Sg@KG܃x#J gs\=:}|:>&˟39'{,b^}NnBp=Bgsj>Ӥ%T)K5 TRR4l>vqR{,,=G l'%N0qv"KbDYLo"vqrwpR%(EFA8,U [(X!D`$J 0ZFkhi ΃И;ͣQ- X^V\\.vMEȵ|Dhm]Wu2"\Vdĺ" B8Ec! یp N\VhYR%9 66[^(-KQE%lNXFz#}Zbn6@B@:B( yCUQQ*DTFs{=u&BoeGe+&F-q^Jf& ~!Pg_f| k4Q(^ڏ;$"pq \P8LIަ*+{y`c @t/_IEn@&5}xv!XQJ%,OuA3 LU, [lh#{EP3mxď+}Bkǻ3Q;Ve` aEU娫 U.v# PtH}ξ@ /04__`G8xA`v{Pzp 2s{2}GQ[vY 6N]i&,Dh[|Ec7lMJ~0D. ;^c4®*<*94݌_~,oA8pAB8xӨcEs"l.N}@C<'BH@jN@>JfIc ? ق@ m_@2o>@bA 7Q0f4*[R+Y4#KZ621"W'67C3IwTd^1#/!D#Hc|ChB8,Z,lNwvCg#hDk 5z.c"!lA؉0p AY>tQ?!Ϧwzlwed3l&fYڬ,oѫ%YӼ^LE3 -V`P M&֕jˊiF;svQ5kz-_yh%xh#CGژZɿB$YHmf0<̇ [mdbۍ;~Q׎ihki5M6vvvVkyt>Uwѩ;#P؂vAɂ3Q.mXeXp A-XnGrIJmXnGm5QfR9SɤIe3?s,Uѷoo +žoBH!87ܛ({8u6,b$('o3-Utj\x!􋚍KXix{.#9(#MN񮬲{P=Tk6݁Z.{w`v(7n؅@a! ʃOPe9olX=܍^F xg铁X[ȈF(QUe{RB6Q'Jjt4izi QQ͙3M/f4ݟiG>2j'8LO8L:L:L+E|W@M%@ijb:WLULVL)T8+&#Q)ʒ'MbSzI;9?`>J`bQJ[@c@c@bD)ADq[mUj!#xYQ3sۊlcy fقd2D@w:ot#ߠ@OP=rZgp>~"<: $ xb?q@^y~Fl tOG@~>@Nw7=wK@c*@QхW*&ݐ',mt!{ed"#+Dhh.JL.2ZR|-j *y.DÞtrdf 'ry|"hW =B@w.@wT ¨@ybn1 \= Y}$`{=W>k ).J$U#w䡄j{9oy&[0gm16Wvu pa표 %{g|]yn۝ (|-]vkmpt@59|D[ob[Nd5^mkϻV", Uے1n1s*cnb[=Z g嘗^:dTjF_;)0ق0N=BJTWM.KgeX7Qz^TzV`7BU+sx) Z Qc aI! -G4:az3H-k KPO X$!T{iܔq57@F_/2fV}HYW{[t$Z%G[^N[_R>v/潤-ʅT Q 9B1*8E`sHeeXh!Bh aS FհO8i O bI\lBM..2u+؋Ns䗸K9(t"7kJBh߰'ɿecW۪ۻ]uZedv͜=Y;uKGծluvetuX[Ϡl+WVZ @] jX\MGPR"G1 WK[:AKܞtEGnG;&ʯʯ,\Ҝe.a%]QnO}<a㬆᤺Z¾N 3uH J"aHFðy.6s߻-CvtY~ EhSWlL 71@87 6Vyp%k> endobj 70 0 obj <> stream x]In Eeg2zdY:iɋ `(;H1 }$RWq.C^=x:*-,fu$/T*-ɂsG4${ Żd/NSzK~ fО2ҶTyϐkV~˟}@ 408' c-mזzur .(d چ1r|#WCC^F>"WȧA9c:+8U\OZ*VBR-Fᔆ[c 7N endstream endobj 71 0 obj <> endobj 72 0 obj <> stream xxTǵ8>3now{wWU﫶 # !6 0c+.qRl$N^Hqرe;9hw" }{ܙ3}3CmE }wnE}!lXvݰW|!WU{R܎7-_"Pe`e_OzBC+!VG \f HX=T!B-!ݼ{ [۳O [^C÷`J!Ag}RiO " _Q(i°LP&j;.$_g:b߆<臘/JV!>um,cOB>CB%hVt'}(Ɗ",(Πvӯ7HO9<wTA%PUwOVB_J_bf!#+^BU05kEQ?ڌEƁHߑd6*B->twH kP=^BO$>Mh-Ag+Xx]bԅ֢#4:%$&7Ú*Xb4nGkhE'i \W#㷤vXs Zxz[p2'1vXR"O$G:y ݉B7h7;GPgf(²+}5amh!ZVC6$1-298gk'%|Eo3V y^/FA?y|#~?Jbd !|bJ߱/ٔdS!"+P 3^6&GODFw{AՀraSq#}@H;逑W!1&0RV`7ba&ArYO;ؘ.Lǐ h : 0tf(),5\X{߇cm{!) RC$M#5cdLYg^eձwH@TICgeaR9'xt7)>՘ZڝZ:^I?~2}ʷKH 85``[lt |.( AX~} +XU<oUjXxMVX|2~/$>O"N&ͤl&ȓ0y8M6y|pL5`b^d^f~'/l|ײ?fJVu'%G%J*.&Ȥ2,(k=',- 8֕򑹝 I"ˆ_#=!.wA҃^Tr;z(`O4l#6H kf-kQ9]HR&[(a, 1; hErkCV(.9-#D?݆P V~:7lƏL&2KgpDr9⟣a&O ً7Æs=cx%/TY}!Bߑ2ĉ89Ȕ!|7;܊u$xFAiCrff%EF?N-d 'BFP_ASowp IGgsYR6 ~|2Ŗdc{qA\bdxr&Sq1sjSŏ ̋{(ȓ ]# vIjɒD߂04CQȣ y~^ NkF풧ѮX߅)Ւ &u5Ғ‚X47 ]NfMFi5jR!I%,C0k⛻}#9#l?eJ>M=sEF3)@WS&jbWj|MoFޗ gu|O#6%~hkln_Hu+w6u7BwU>e~:Thz,T} &5F|#ji;Fe7bb4YfD:yD&맫AwywCKc^gqI`sI0cNfgG;wnqe%0B>]JfQ}|7;z8vٛp,}9|;vit47 >%y9},\ MXB'Љ#e>I A_ڹ C^ CbrN9~DxO{ꜞl4}(Hc<D/d0z1]w]r>}uV~JջZ :2iZEBastӒӗJhK%ͻy`âaLqcl'}9|묅Yܶν*)(B#d!dRiC=†TޤL(`_=%v*Q2m%Fe9R:]sUw20a6]sf;;w6;{Ky<ƜdNlDd]Α;a+q5p+A ycAᎹ`cLn<c>b.ȥ)MN%ryL@hXʊbzY#1O~)eIuHddhI$fRF0˥SPNp b܅ڶZAq_ׇ .]1/ 7cOtًpP%9 FSU V![Eݜdq nCyȟ;=[am&ɍFXPK3֧Zm;` &uD/ h *JQə-eeH* `ege*wy$.q;DC4Z^h^Ƭre1f*,:bq 9in0QΏAvIn^ۮ-. 8coyPνV\ . ~ ӿ={~>y]S^Vi(/2)"WMn.fJTrvƠΩy ',QYԜMSSJN.׺)E&R?'.譚9CGE[? H$Uj+C:NJS=ve\mP e{UTD6K*Jh[)G2(oHi]Hl>^]%c"pJX H$YWw |HUNؓuv w3H<ĆҺro"U|.Rb8}|8$ߎdv]{ƂS\f>QfRX\Z e7VD 76ƍue6.*qlޱf8kn+JKOS*/ၠ6A7Mϴ7:a:r#{'+\_`~zqO+r7ʜI^LG1dB,,YK!BZ5FվNA-L~f] ][/.. !mF66 J{zS)|D'8cdħ'3I3_0,WR, c[XO@ 9 &wE<nɡ($"mu)^be $x!Dc\$n{k1l.\f#1}҅3%s,#:^ƀF0T$Jˬ,exQeU,IY y~/ <Ӽ͹G"Ûmg\"҅sRsw|YR(u=-OsyvPh Lm! \S¾_"YTZk B9gF+oMD[7GT?gg==ԣt.V(t.]lX uju2)~HP9$,ee$IL0U̕s.첺r'v޺X2Uj,bm>\:tD(6(*Wl7rB ϛ_W; o J>?6]άs$ͧOl<^gTuS꿦V7M%#mmI..,ª42H8GyET1]0 V!WST#0ԡ$9|T0ݒ$jBxOa+;)Y<]VXЁF9gAjZG"jXV[X(,t.GmV ;ȱ]%cxWgZqC^e`Jep=XP,|Ogn߿5S:zڵxhyλM׬e{\ɛuOF$]czbRX8jTu:W; M-曽/9JSQRY 23%ڔ#JVIyqEa+j0Y)VkۍdKu*'bvVenF: D*C x2Eb"c*+,>00t8H+ \QMxDK Z̮8QU{׮1h]'嵔f3O۴&F@*]Ģp:d0(C!CLlK^BE$$XV%-'.BGC K|L,EyGu8eI2HF<cXpCu l,}2Eg`R'Bo yvs4gУ5+E>_呀= t}ߢ ߜZy8_-Ln|[]_Ht{Qo:^;IKA%& iռ@BBQ9ݮڏIt ['W(&Lo2=I$7&GluC?ip^SXr3ދ? F_؅JWێw١w]q!);P&2XalfEt*/L{%{6! qcJP0?>2$L;@e.P@w+IbYǟQaYAx ;yEl/%%ׄq ,mY^~OBm̸d B  6UlՊj[/h5m}M#:Μ+PBsx2Y3Rz@J36Bнkב^.>݈NiwX6L\Tl@ )*(,ZDRkũZw$(dJ߬ ]t^3 q,*j C+| ҢҐʈ72Ě$A19aWpYHTvF{lS*g̔*5e!@׉Π&EWs[_2s/YqgaL'cT9De6EEEe7ZFZ߿Q̕7K10/t{@-SRů''ןz7imBP̸zMXoUϜnk68Z@AQ!!\o i#+;\UCP1tbSꉖaZcP*'10oyeQuQDmVJ}))k=e%V֨XmU)ߟ=jʐ8J:2| ewc8&z\(.i6C;$S} rs @NY>5B~`siF&Dvzݽl0߈;O6*`%O%#|Xq*g*$%e\W*d%ل7vU>I+~O{ҽPY[I{yy^x}9,З2P /կsa*8S8>8+4R@YVQ)gTJ-W99Gq Zka/G@RG|g*1 BtŸsT`4FfZcM|<O 3'Tlׂ0 u eS"IQa̘?2:f~G[T*ky;MWJmPCl gW2]Ԭty&4R:RQ1[󗥎)5_ en_`zaN5 ࠖbqUYy n.T.]wCnsy3]Gc?{WuN,**%9Q|ȡy*V\IxI@1):pM̡)LYX4 !ǚ~G-Hd V iC!*.ݱχۈ/s[#VwLɿ#RZ4O gN9 (xdl[qߋMлK4tE37e:CizoM\R<@]!4b-/M+gWGžW2mEm:V ܵ^|k\\D1{; |Ʒpb|\\vw( fԖǻt91* ? %yf}%ܴܲ~=ќ$Dk,Vt1vdV&{!W]ńZ=y}|χl~̦8^9^"?%Kޢ@$L6_+x=6{f<|9n\7.5{Mr!ߚ FZ ";(pcc]?փqtܮ} ͱ&5~yO3֚U|X,N5Lj^PQed.ZV E"B.i_@GTU4Di_ 3h Ϗ>*s ׄ;e60m:i *sSeT-Ū~ejdd_2T8yV!x^؍T[eX$DeY+aAr6'"a9HWwJa($V/t;qH h'GW,Fm&JCz@˂13MV^ nj?:MlMl3/Lf 0 VBοӳſ]l֎ux+zNϑOE'vJUR2"$樣ŵlMm-^..^Ů*⧋_*xsx&˫+*!9q$3Q.\>J%52d]B3x 3>qlqANIDM- SVTgy(s nm|H:nkXI-8+2QJb0SVz"udzH 焯pGȧy!mίW岻b_rJ !WT01{SvΊ_U[μgpۦuME]77wYT~Bs̍@-81FpFF~IgFC:y ~o[5^]qS9|fj鑠ⴂ(N7S>jP/+=n|Ɨs {zi»FquC *B:o+*N|MmnEe6ƅo\zIߋ׎!cLJ('I evItl\Ε`k` # ܂UDE?3<30$$::1=O/,fTf{#DAEXau2l s!9[[H ,qKSi}FnY ҽҷJK!̩x M2rs#IjR| 1Gt1\-zh^!n8r( _wp|v99]U7];w ց+@1:KtYn= ` BUf?l0l>FЃbRY`Ռ[_ {vz59isE/]Jݛ?*W6딩x۪5wPmLhN.{s'Þ0w U@i[3GsZ|sU'sNV}7{j D {mr5ؖ_Z慨3Ϊ=nN5efTTW̌ɜ63:ŁrKO \˱p/sOa(͢2 h4JߜO_(\+T3-O%UѐDۖJ։}GB _v1M.D ĭ=ȢSn^u֒?$f]KKK&/(9ez61W5o(WkwEf>pEuVOO\|;E M+|9l?jP% H wTu,ͩCuDN}4Ԋg;;* =PP抜 ~Z3#*z l2 XG4:/+njSQx ȇ W6y"ȅ]|jyhp@\{t 5 IQ-~eN61׋jKdx|vTe~+!]oy+^ o^ID5,[fFg7m>+jXzgpg]O,{j!ro>]C<^o*h3bA<4onے_LsW#3׀/:̹ [jOv_Zk*y00nf_g4̯]u'tY}sI,=o7(,^ ˃X_-q'~O9&^R*Y5鯽r8óx߂ Ĥw}5XOEy_Wg5D1S9VX˂b Eķu&.I&Q7LxKbjqcfl6Έ^Ž7 N$Y" 8+IKXc<õ'\]]7| ̄Fu|V;sD?U۹.Fsc K8ˮ(nhiDNyz"s^Qh(Xڥ#ذҷӷy[j:Y?g͡:{Ֆ ߸c^C@Ŭx4[ں7 r#tmM+VgXUyNW׭\9oKJ+?/ͫ24dRƐx,d%r8(HA,R0& RHrq*RƩmuZh2uliT˩dLn1ylTJJ3~ !f)DU7<W"LL&TjNIR`unDkfn=6Պړ# nDJ)^^*xL1ld{Qy%04nC&<!I旬t d9a Zfg}$]mϟOw)˗LƲڸ6c5r㗀+1m4ݧjKI[S#ՁMu|IN:AR;3caVC29c DB9<%:hzqxu⛊n*~ Hhĭ+{l477!cL‘>&e ԑ=v7 (VPrزRҰ(/׍"Xn)J5L0 )ނPDsFVT܈2Fns3nf{w@yθMT>LUEIAٟk/\P/`ܑ:?>w!١}8c Rڝk.gm?q_> %!]/25Uf^-W` c#m*G9%/ϫ*_$SZI6Jt/S๒Ug1`i.INޢrSfLֻO}wKSϱSV6TMm鷙Y MT?0N#`$C&=?2'mcT ;,uqϗk%+?$ٞ=dN=eC?/}vL"N;:dQ 8(%v+9 l|:9J\T DʸEqkMFźk4L@.LtZ1qFl`41Yk+LНXk-YfO*[pINWW9DwMΧ*I8j⣋A5OnezsCQ9 QYT-[o; L+Q)Yp0=w(faG1, ׳0_iЏ" ӳ0v+/faʔKW0_qa%]ΐa"VA~P6 QeVӵ~a-DXKh|Q9p[0}"lk~a]_E.}AfQ~|۲0G[daA-v:aZq EIizy^a7da1^ȷeaUppypTq&ӝgj%X.EX\,LORXi|3j.YeDρ^P1*h.Z nCh-}Ps.s}hZ=5T~Q>j4_}fT _(g9YP^-A Ov~,ŒxEBZ6VA]Xo(5wLrq}49ªUf!qe<ș/}h>ҵQ)`7@A?Y<-{1FӃ"@0|Dj.g1Zq:px%"(EzlZgIӺ`Uu $Xeʬ??|@&}"W,ױt :\;,||3j]If-xxYk/lW> ^i=WaO@6̬*oԠ^7~hP9_IQqo>_ځM}CC=k |V_rxovz [ѷ7{`Mچս=]S=oh=+/(.E X>O\nRR$VZb9ZvEz_oxoM*_LͥAP+|3/_Yo4_?67ozPoa_qs`oM&߆}0Pҳ77x׷tMCbbphwòa_ZƕV^Vo腦aЪ*,Z0|wi7"5Ki}T3$Vk[?<\1<4FAF[C18l\zAa= `07 zȅ:+V݊D]B^Y{ ׮izm.K6o<+IV]1Ym9=3[1;טSD>fss9/?kZ?kZ^Y5>tWB|56_4¿GWɻuP {͠wWc+bςA?~^KjЁ ui-|?bɕ~?#׉Jgmۡ 33{%dŜq%wdivV}1ikֳ5dbme: G`'A^/F][6hYmZ)}q1-E{gyZE<Ѐ(p( gm׊v_?SFc=-C/oE~_eJ7~Mh.=滣^4̼<9sæO355Icb<-9F F9%/3(ʨ)<А*2h~[Cx8. :)((ɼ%%#[ťB~UZMr zȮ<@xV@O !L3.<`፪ ?Jڽa^Ao+9=%/xOxx#oxom䮶G^l{mkYBn&73D2o12i,av/9@N6SC˰^I03If9h@ L1LazP'i1QnRIBao.Dbj/.p O%M~La 9Zm z0IOPipZhHmZiަmnLҐr24BC` j jjn jEAMsPFSki!Oۣ٣GGfG3y4=Ą*>AU[&R$Q' ms{z Qh[{6%$yq1C5$P^k|*ei;h99Z: "˨?ߛm@tj~^m{{ȌzW@x'GQ DaGF+N@/x H/C?3σG=5ꯁQ50\:I =_G'0Ɍ7dֆȫ!̎81_Y-eF[Ftŷ Fb:>ZZ/V2Z$0-gPd@-"h& V ABO`?9K@c޳ڒz C/yWb#_V?zZ#FoNйaa1wQrzSTWKk(MC5'!*Obj7O'Â8,!@@$YfMﺶwm }R]6ͻtwa J# yt%} rզ9 5tN^-`IgpNHQ #*%W [G4sſ3RE8K#R*Rmqg~VE ٚlQIv -% [dRㇱqmMF3kjސ  CzXJ2X#C6ހb~D, endstream endobj 73 0 obj 17364 endobj 74 0 obj <> endobj 75 0 obj <> stream x]n0E|"W#!E*"o_ngdct쯈?쟤h2+#v)fem׆s3[Ffo7;8aoŸe endstream endobj 76 0 obj <> endobj 77 0 obj <> stream x|y|TEpUݭ}ҷIgiBBIDrC'@ !pesQm# :CLPƸo'ˠ3>y38c ";U 0TSUrԩSuo!e ͝~z7B–Ee{O"$_ܹ;yB2,Yfq}zۍmeEZ[V7 T:Q=[%C}YKvHCeǽH?74ؙER7HCtv ʉ!tuwvv}ǐ>אK?E&/JlIJNIʾ4z#E,E|%#;5SB%+%zgan<ME<F v` JG4M<]ت ; 5EЃ1*AӁ~.jE_pH6"-fajF}~+yhՆnPr]60ڎblQ4c>EԀGOCx|h)=ܫ=~XGJyhi*h ڏ\'nF",S;i ^]0^ Fc?[b~ @@"ӡ6zGSlheHdYǽh=h ÌEϢc ߢ3lI*o!:BqG n:m|\x')>I+-o燅@d7ȅ!Wtx܆a|E$ dym^RmcNa,E/E3wAw PՀDox=ރ?BS':he%ބǿw0Jľid"V;HVrZ' 'pi\1{ sqcq ~>)f 3b"vKJm8g?( G@wUIkA?CA wItf}8]kp-?­V?/a0"A߃&ͤN6!%o 2=wr~.ȍrk0nnw;Hv;{{;} 9T_? W 7w0(+\.DbxO$JRYz_'| nXd?d`aAٰ*ʹ(̋C[)`I7~Wzp`(GN/+ rMCO5F#)#ȣŸ}3x)^Cx}fQYl7Og·ĥwx=cOhS$ q`~VzXn w!H%$~-:FMKz:C$ + V ] +3ВcJ׀-)U]t3Xpm5~p/~(C^ ] ڂї؅3p!aM/~%-iߎ=hFDb̍A!x{=ZFc{P',#Y {1XgN ;aD}S r^{`o}V; mI7@M;j B~Ҏ~PA]ߢkP PA#,ko tlBq95 5T*4&:=6s`A~/^I zaq #;a_^0ծ*9pͪ-MUPA_٪jj ;sfqVO8HJ {Ua eT7fWW%| c¸ra'AF*Y3a2,fv:U>8fp]&)k4>576Ah*\{u1 [*7^Zmv4eF9<8R%5M[j@ehPw@2 U||jtV'۶\SF"2;<9~_<\|ІZVd%cq4N):Z0FNYŴGay =ØӨu<ڲh<Wf=lb@)X0- W4'r 7TOFU Gp0ɡ*"UœB'tQUiPȶaB_A !0>¤R aDKGJsiɆQ&?h!vPU?anƎQ/9^ҔmRe ,lH#I+(1M|L[(%rM4%7h|/.aꏝ\ \dK2}5h5t-K|YKƬN3eOgNzC*nOhfL i/i+ϴAM>=-_k5JVڴ-i{4{ҬjZ/~ƭwIi~y.-:\õE\GI+J *:O7 '84CT 66 wxSjInủrJXof)l"ZYFs=y6ή? ӆ6M7B+g+x,ml\ z@i I 4 RoD,4u\1ZJTÂ}t/ոh/4Iz>A3A_VrL쎞SG/|cX ? e(n ] BT]U~eV7eoޕsqGwX< g>m@yuP|bICz+$/yR;|T^2͙IɁL h X&3I $C^G2nJɐw(#8;P&ȢϨ.P)~giR Bzf(SpE(/O39c7sC&2X&C\Lk٧li4\vqEǹ0т@||-ȷ+5g/.,p8Y찃Cgs[ȯY))3'N-/hˍ۟3w?zp,ز)[wD ydZ5 sfBaex+R}5TMOV%-I=Oiss5$){ ΀CSy:Sq9`0L&*\Eۉ6P+R^DbPtjiX*D91*zEX\i,v,v' &O d %V$Hc+ y& tܳxw.ZlCdWj0jU?T6<\)hfx^ӼPsBw^VO6&ە]1CFw윝)nj9'@r3,u&1,Ԏq'pv/E18t%3 P/L n,k%yv 6xRvJS>7Tyo<&x̸bs)Yrj(QYaf- @Gad[\A,Z ܧLb _yQSAX\yR2F yBҼ`m6R%\_SoBvmָwﰫ?юm a8p6O8Gee{?2}-zS++WRK~?x%͠w&E,!Kso 9RG!:6&=$ ^sFj0Th83w) >,}gH6O.Ui+jldk8& J&XY')4ߔ[xm >%S-=p49bwQmB2,Hg? ZGnS9>|.[pIiu<(>کW@~+NpZ\oګzUУ,ޮkT#md+:H ʶo`3t7-bLnv$YLby4k4&%FFJ? 70]Z,??*<,>,=xyB#|E ;*Qs"xZ4-OnP Mjʁ"JЈBd<oX- !ԛj3[`#S5&R3EQ [a;>c5#.!XQR`*Sjj\旚S5?:55kKw~ϳ3$( NG<,*}d")cJpl(]I˂ȝHNkRѹ"SJ8o)|J\5L\u|Y).O4NC-$I( :+M:.Vg]:C<3B8~O>Ƹ0۷?u't&'pV 5R/*Os1&&vbQ+d$/h3+IoI'L KN;gs8}l ^O;ߖwA -BVqns\RFKI=W먝+2B~7l~&W'U55MMΐgVOR,8 P RوWN#Vla#pyzCkFWGt\7CGtd-I`-9"jڤWwyge, `Hـ{1nsNo,+.1N!;K ՆkE3,$H)`ƽ>V.jj+&;V}3b0i:=A*TomvB~é3Y,}-#TUr:Ng62)KxHة~{E+0Y&bXfWܝӕ˫ٵ x+dYJ%W6C_#V'N^ %/qKZ$W\<"l33Ov:$D*{'G*&~_KA'V=뽫k|r5].W;辢[9+-NRB'/$HFɜ.6dτpZJӂ#ΣhP5tFqiH (GB: i^Ҫ!;,Rߧ<ۣ҄XHk R=p%gz>_y=6&MflD$_T˗3x?JakߠuEXv^uTA״FFwסifd)63 sPoLt|}S4ľ(Ho$Lvd5 FmG.aGNՆb.N-i$cňΰk0;}NYN!vN\{m퀍kmm fɶ|os{nXoa [lp|C4z Y7]C~HO| kf=8EvfQaQf&g^Zזjշ܂=|dtέ䤏s gV{sG7Ò;AD54{~izjd}iCy,kUt 9?1}jڬXrYIypڣJcL>T&WOgԜ녍x'l5'ǮwaO>VйGe}vTgHH:@W ȌFo0:ٮY܈M9׬5_c۟_?>YӗtΙفgήp~)6GF{ˣ>%oq]^*ZI`0Őe YTp<1Ĉܯh="tdGyF00rj8HZ\RHfq:H .w%W3O|N,9y \k},zLU\$S,${>L,&'#:7Cç.uW"\! \ ɋ7?sڧ3#:i'qo:z6=nYj4OQ/%7QuϨF:5z׃&bҨ{A<ϻ5G^܋FI΍\Оm*TT^R~w9&xXw!vn B! r3zA8L.Rv~tQѻz--o" g%nMo(mSr- bmCjugT2 &C*U*Cj]j=^k%qfvyk4"Ͻ8SS.Z)64\ѳ#m/ĸ}DnX?>bVUmt^ۀ3 ~bйO0 8УSnkI4 kHc4jj 툎`%9_ժу Qa??(ů$x_|3*.(7}±n)]9ؽk Q։3zN<Y2`ip-펛]k;NݫW]1}BB y::~*GA׮&XJ%.nڸQӸٽϲ1`9`M}-z.}FsH`Y E Сm`Rb0P$;%Ls)_'I>eqm  RDZT07_D1pf EdX4K<?aЋ fپأvE?Tv-:rea86ɿ::>QU&U&Ws??IVe%)|]Q\&=h)* =1)RVܞ-;N:lP 1)&BV0PQ~c}<8 L*O8xOVwF߇ɄmE_\ld)!bd@1JyTPK/ةU'ab,vf1;!N?| lJ0+v( ޯ~Pߦ~ƪW?:+X~?V`5skV Y t;X.5RU/ W=T究J8>rqHYGkW8zk.fi`fjǚSX O$-Ï GG8?':]jVH8UIMHAQ?c38 X} -Qv._2w لoSN^8= fѯt-vf>l56byV?`x\o?iٛ6*JzU`IZK`eδ%jF{~79MJK |iwQ$jgRz2fF잜Ms?s(_PΓ91P|CI)B. RBz%8͚18 ǤMT"5~^ՔǟOx$,,}rAnp%HXH+g nw$ǗFz,O&K[T>z$4H/՗4F:MnK+I,ⴚ~KyCq V>ssC)Nw*R9M QZ@ Gi.π+Cp(PЩ@N*u*E%!'r*AF]%ι4yb<{͂}蹽q=wœqa$LE½OcƤPZK1 "WG:}ˑKr86zfd2;yLз)=n(ɰ٧Fvǟ}~V[|99_h?G8/8knVrlk'{hsl7iO'/Ο: C,YYs!Co I4i$8 z&`Zh"*Vslp TcQgB=d)@ݦZSCv8rs)SQcES\PˉSnpڰbzf`pE4Spk̋of'\C2P%Na'!9›cgr&D'JE*A%gdMzSAOd}W?D7ts#ͮs>`w"yq`;LOo#F0݁HΊ~N8:<2D9;M&‰C8hM%.:ܟ|߲Nf06xq.^^t[;i*Jy**uw8oORN1$e\YT|MZW5ߘN \(2GabGrЫ?K +{?+q`ٽ3-W9PH;W&]W[?*r١ye{@0'CfH 1 Epip6b)N%E\9YuOklƅc{g?l%Iv>- ~fɲN O U' V2Da6CXz%`D*?<=wxSSR:S6)&㥮DG'Ad'{>A sboaֺ wNvXUyݔ^ɁfoMcVԵ5_+׾/0}r؛P6]LAkBҤtTy%"d U'uV+Q@$Yb)RT.mfd?7ʻ-P nȻ x@s!{χ`zv03b jxF|V):J}Z]>}Qתۯ D+C!j|5]c2`[[lkH<?a&Ȅ8XRy ,w6%o,8ƥB C \@.y #ؕU(MjOzF稈S$X8AJ#$'p8 St¬.~]8B.FB_yO#4-#]p*-ԓy3\|Qz "=pMEYI|FKj*i(U$pG՜Au^H H= H= A% ޙA5t캷8]õo5(USG'p>p4}yQ~kTN빙V*C# d6}_CM#Y5`L@oHaJ8jD԰4ÜBcؚ? 28o:SK s| 8g.]yq~W1l\`g'pDxSv'aw->P+i-Ѝ֠NS .i b,Te,[h%KlUf [p -fl>:BV.鬤6XK]u6=@ߒ 2/EAj i*5{L?Z: na5L^rX(Ok"jdTݬr-dut',1壽sN)-Exiefn_n6Zx~s?^$22/ r|yʄ/cإ4), _^RuQ0[@e2*TRTO+b~w50xN-Mq@siZ :AG1Ѽ7e߮_eߠB=@  >I_8A@& 6<=B~*2f?էT0X811Qŋ%[ly2& DSS1B O@E ';b80'׉zxZGq%qb @x: !k]n(ۍ{,b*4z{1}s{dPZTP44@ہm;"@^DXۧ1~+tz+tBYZ@Y"F3)#}&WAHFVn9#/`*ES.ZS3 6@{@^<{ <(D vz"Y90JH=/HW~S7"&{1NB6TNհS U909 /G 3W%#-R` ^1X^}d}'Rh~R\& jn{`ao /@. C gJ-0k[`LmNmCf(oqkQ'm pVt!Ys`Lς(1z3Wbed>|%ԩp}NWAdz\ʘ>We茀Fc\2 &Kؽ /"{&oTH=n^ o'al/ k OV$Ϡ 0B%/%~ @O@BG#׽AK^7#8QPA^$/d7@Qn:ä /9/稊gp-/b]G$ DD ~AT]9K/" {B}pG>㐁C8d! 2pȌC8dap8LapOq8NI88NI8 'I8 'W88rr<1n& jz PAAdLz P0p# a0p#80^^  )n?WԐ[p Zg3}:tA0x( `7p[bp a <a@B)iQ!HKD qx@|^'E"W$=`Zн,^`a$7DByH:r9BMu#އc nfD{OR |ow)JUf,ocG?>Gp=yꈷ* Ȉxg]*Lo/$9*To} 7'ܒ~lVr36Zi4QKiR"TIePTJ%xQ!Om1p1?'XEU(ljIɸ6<.ffÖZT;grx|_ kRݵ1rdS?FsqfݑDo Fwܝ40vqwCr9V-̥5U?5%K~ou)Q;>?!\@XJCmktHU@ACIճh>YdhP&@dJd2%9|F.3:S'ꪃh2:hNdKh@c` 2T/e^ 28zYE^ ]$H8|eز&i}zֽD_ )uU+a,\ד@Em6{Uu*ท~%Z<_uT=KJkUd2\W^V_qY[G۪/he(崭 Vm\)gmUS?B t)0aDz`ϵ.(> 6ua=Z[[A`"DkD_Q/Qdl$ JDE6=JXi9[I?؅۫,RJ??YIJj9kv% jj#yA( B'p7mbALjFK"bDQϓRq vGVGKˠ8*xVfġbd[ƶm%%7LFp;rDv7/@{ESXý +ًEL, BD+Y#_f"z[O0x%ht)F endstream endobj 78 0 obj 15319 endobj 79 0 obj <> endobj 80 0 obj <> stream x]n0 xv{Sbb}+7ޛb8^}D{ֵ5+ vKoෟq,On endstream endobj 81 0 obj <> endobj 82 0 obj <> stream xy|TE0\{,mtHBBH.EHI % D ȸ":$afPpQAQ'(|nSUV:uCG&dEEW®+;/&#$D^tG!$u"ْ oFصq-Zo>A7iv\[n9߽e~__IS6^z!ڲƥMe̜x![[w(Bsϰ^]@NE: 0| r Jbr{> 1)9ePP NMKG?{PEI\JB(v/EN)0+Lϕ ~v8Fo, /s$ iGhz u>F[,wq<D`;Hh*N=>$vzQ'+7ǔC6hy~:^#E#﹋b@wc?BvԊ>Dg`|9d$-Eh-8P cHD4[Fw]Gd;%24MFuh)z,πwz~Iܥ|z 90z4-G7s pA\ _<Ѡa@]nDPkNg_a8f0P G+aLס?ѧ ,\Ż_&wTس(M@5h.ZAԅnL*>徏yc uQX7N&4DoWW07wY/trX V[څxw)H{;"I)i!"z4:;:rܯ]BpZl> 656;vM엱?^}ddxZ | =Cz E@$\'b[f|?L$ Tzr%er\7[upNo'39%lEEWF+AXs+ģAz2}A:DЈAѽ އ~ab?|Pr|Vn|~=Y'*>_oo>C( I%٤,"kỞN!@N# rRyt$|K:nO#\nWq++r?p>n>W7Ɯ_ ="'zbZF>_%*m,2q'x6~mZ6 "Fd~d'PE[)&ކ@;1Fh V 5K(A-H5= :(pk8'g $\.dt;5pEޮUނgt9= b) ;r Ѕt C*N' O\MD'k{D3A|YL3U}Ʀr;c\i0cs7nHlVh5S '0tq7 zL!cp"yd+ws{>FEi\h4M#{uЧρTHst:CH9!ߠߠ@ o'aQPǧZx]:G@+ϣ1(;bcp=_x4ՠA +^ ;n/@?`yxС` r苣5NCkػwF030ﰄvvK'c_sF7R$z{~8m Aw]mn+zN;C/}aJF(.^X0,?/7ghv֐pFzZ ˩:6E%Q9 Z:Ad4DԉsX> 4D4(c`i?ԁrP&OU *RȫZ3m6ුj^b\A&ZQ ZEdE*ʡe\&%g(ڡX@b$*Z^ !DhzEHIPm7?u^8 4θMDhl:&mnQѼlsgGhc-3[]yC:wa`mToXvӦ ZdkCZ[ }@[>ax͌<>9 VpSǦ.ty,HYJLw/Xm1;5)KJm,OAjVwt-㚜;TvG"Muf3(uADHfDFKHiH O-V y\&u+g#|m %!] 1 GA}Ύde1BG+{VUCճYUaScOlݼTMMݴ7X:Tv(! |Y=rs>1zwj $QwZI2!T-Vr5y"TDtTeIz^T/BKRq]Oo~D/S8wb$PEH:"B( Q⡔ beIX{ȵ;B,=n&9& sfE,ॺU BAC>|Z~7MA켺ޓumgg{Գl{/pMMlCn6e+ Gep`@dԐ{7MA-Lڏ =]e-]%P" NYDR]%8Y}jA; yK7|KB`1ǿ=:I8l 8(GX {`E-x]zW>f=KpX"o;q5ݑXGbZ(N/fYg%^Ay o>xĝ..At"/m/:_tCoZQvDęAPHѶ;-VUliv ( L<CHʹ2WdO6M 5>$Cې C: 1`'AX "zHhq" Cs;bCtPMs֪Bgzþ}/P0VPSz϶1l6C1|`2`.5Hׇ壺:m vb])A.g/EËa2f2‚ϟ0ɕ=<'ɓbؼY^%oȪ%>wQQWnݻNiZ賢XvaAEf`ʽ߉*PS}t^]/0vC-z2Z 40 Ad/ /z'3$wBߒwy万GG"x(sKSS Wȫu:U&ȳl6A,eȚI $jƇb^/ P/%΂D`P/:ή؝pԢyE1Lհ|%HۄWND۱EIH-]aX%RU gweŽW +Ξm'[{n ?$HXI68ು^bä GHb*5ehhJCoNœl dp_3yݛk鴣^v[ G+ ہ :_ zv5*:Z쟜|Ex2?*ivBuEۼG%Vg) \ ;F0-6v84;0w$-݁*kt 8XD^jAjTIHt*? *NfL팙5;5L߈C>w[؅ GUȫX}cr<7bv+ǜx7Fҿ}w= [:eV҇O I>m"rD2LW805)P"1p&٢2u2uN|(e-Mг "A(.HY. zpI3\? *EL1<6vPF@D [EDq*^`ǧX~zvZҺ5nǻqGϿF7^.\xw涯o Xhn߶ѵ)H|AIh+snI M $.V6w_ߑ?D` :H +4emJ _iɏ؞I#ۖϥo/<' z]dV $> oְC> Z Ƃ+%W$ WKJ¦% ]Bjȯo?z Ү.Lt9N4] c8qτBv2xY@ Z01JaV3E'k;K{)vNC[V!R̀K)L`d3'9a7YCq1fBhC¥͙=W 7gW? a;|ym-)_~݇�h[Yru 9 A ]Q*82ʯ%ErI*fKչb[&XWc;~&|7՝>^H"'ɥZ'ujooVڌչgkߖ%{H /{gmbyk>Ͱy -~\+9#o1{hpqYYyW壾2wv$L–"VZ8?r!#Rsz`ZbzD%3M`We 1x]|q|qq`ȋ顀c-Os؃ 5Zd&bLĒ%M~%rՆژd*wPEpF\4||F ?^gp/wocKג$sTe66aACΞ4tPvϫ,z՗s]pi83Qͼ+zqe _G~ܨ?!w\3pD|S>>&9F乃 w/rq"v;5++7[%rb(a<2HVaZ@TVAUÍ8n w؎~8q?E@ c+a$20o!PN9AB=d"dNZÉ{`ă8s$#*qs*ydH`Ξ=? Wpjͨ-yنaD\ _v>EAIe$}zeisfpfF`p7BTp= XS nDZ<艮-C7,#/ӇUevI:㵥WS+٩XX7fC^~2\>H߱*P,!곦 [sRew|t}ds٨'e. !fO yi8?˜}uL  U"0wΩA\'NL;nU^nV~HRb ,>f![a! kGOX:Y'?޺h7pv\>;Dp[*J 4 q.d_ޕޕO*K]./>nbnWmo֋{,[rYYˁ}گbqT-Pf*bn_+B%Y5a+rqEh`DHE$<'*=d0i$b#T$h/ l䟻Yq M)qL++X^n'J">8X¹z2b막.$")#omӘ[~v;/Xhr Sofo0pjr7Rbǻe;9 @6PBW|%m7q:3<⿝vp&/1ﺻB:y̨{jͼivkF1rɆe/zXO ֲ?H4g1|<>̅1W6sfa`xx>\_^1y$r|/zvPuw[vS[rؔ .۝yi`p\ߤ HqT[Y\/3*\3tS޺n㪋We_?hC&?*wBAܑl>=KiY(L 'qHخH!!(CoP9/g̀EM y ɺ4Y,hJ-n@-[,,g,?'4tkFrNy9OY|"|sW=ςIh?4[2ӹ4W<*x 歷x7D.|#Ba`AF]2bHP~6~ȰLl]}壍'>/)di#ҒG+X_[Z=w]K&ivmr<؍v#y"RQ!URθRbrȃ2P* $4D3ÿAȯ==ݖN(b{Q9* x%Zm݋'mB%bH0(+LRo1 F֌ZX@ஶ5ZmFjW(R-4scdžum^QIGJ}kN !Ty})@4}s'V*;p1h BybJA /Xx]oJ|ZX付[M[-^]ɳa[+݃u#,ݙ8)EQeS"R FOoC;ViMGarP1;ng6W3rئh(Bsy%I3WfKxbsflV0YSS`<3{NY67c~prW {3U$iF\݊=. 7@g [҉1_ҦֱXú0)C(؅=;kŦ}g0uQGڏ{veN7S[Y;y5f{+=/%]A_zm=kC+\ٜfsbK pֵ'~ޓ=ܸ) 2ک$<%9בJ d ~L=+8({:A2JCYp57YLjAju~t|)*US%FqiZS9Nz5.H䈽 #L^(}-uz|8`B萬,lw*YNGL%!4 rz

1 BA cot8]k!mÁD!z0b35qxD쥸}`_SSCl#&XOq` o۱q(hJwvݿl$ גaR5ePvΞ: p!i?Uش&l}Wn9c2o>n)/~2,:,Qkʫ3Y t=$K.&U*z%ߚ1i;zlO&>ԅwgw2L$0`Xat}`2W"4\[01y›xUfo&9TrC5ܰ]yiib1/9>>֧"E˟u{=R;qz甹pgΞ?~;lI%.\b8xrE,+\We.gUKx{ h8 8Q9KB\Yo3/Ge#d$za| Ik15;KMEsp4[iQJD:QX.^z 9\!I9f+&ŴX*mhHJ"LʵZ+/Fxm-+ "*Ft ?ww+[:mҡTDOH-X~Q` p` EbDO +XC ' {$xyz K PE&K^cYhǑɈA$H  @ YK6d9L' كL<[2^2e~`^ga0T㙘9AkHW}ÍW+d@P`7qK9 okHΠȏ첔 uę]*9O?tyV$Ck)y_?}qqJ.3p]ԍ8+pL+j)'aQb?4m_qoԙ͐n{ѩh\OC ~2 ▣5%@$ނpK{_ i WAʁe4Jq)'CꄤC砯j^-IAWAy  Pf#b GcsNC\|lSՂOO/y2Rcnb}[~u;ِLx" CO?9x5I0)Y4塋qFt QqF;QuqMqCo G~L\2+h%#q\F_1pxOLj'q8NQ!_9o<rq q qU\ዅIp5HMPP(~9!!#eqi(ߤ9qx%~Y?O8[˥8_.Џ<>qǁ8q࿢qrm+]qo1殺>0w;g(Oqk b6\(cg $s(בfn6GGMy9ʓ82xql8Wuqz'q{8S5U㰦N̍Js<8 <ˠ*3 <<'q%8%1/WAg[ zוqmƺa^wHC 5Z2Hh5j5JApvmf"jƠ%P ];r# WuP.Ac($f%hsԀϴew2ǣN˅ =2vYi!sO8C˜?lR/Dh1N7+7(W2X9 Usa9*yF57܆BYqv٘tq.j%1Zh0qgQW ve-p]`[mrZM6M|Sq@aԱV>:[Q->Ր0=L~28s0v>mƎWNK ,d2/>{}Aڷo-fwֈĜKq>l7jcu[l-OUo2V%~5ge+ j\5c+Q.$CkÆk35iSZtnmƵ7v4,,Y4_cVӴ}eӂ1͍Kƶ,YMh\<(BP3jeSrG+VeNi޲eaǐOXoTx3LZ޸iicbeϏ*fKy{eiU 6ory˴,i\>TnhoܨMo\l QV2eqbyֱFeYѢ-h^޺*-Zۛp>4l\6/mhZ[ ͚4Y2T>ڍ+wh0U` y%+h}hYd;fF:*){hUPbpJw^FيIfv1AS:VdqyLh8$)h-!QT*H! q'n<8{Z J :{ܸ$);fƠ&u0o aN[ ZHy.j2g3\A: }HCa\Q*H /}hCFMOxrE-҉Dh0ˮLn'&vjkwl?yKS`"%^w阂 Q>y鐪!5@:83D i 3~D55p <54 i%yzz^\8.}>lT U"qxcL   k,XXTi;bGZH9J UA H Ih;\AGSo$ Ah1EiV2HUNX:o1|Hpp/!/!/!YXjX V&WaC暰+kx MP`a&7A L0&g L1.L`5````````````````````qUH+ %hCҴ,/у@Z R.,HaH!FC˺n`t# Q 6ChI A :Dw$pi$_Gh.wsY)? 1nc 4&Hҧ'^ 2H ]i !Ax7~Eщ)Hۑή`iaݸހl'Pp&~k0M])tejwehMpg:/ʺg`zW8AA]Xp j&Om 0]= ~!O ~U$G»g!XwjЫ?e %s@#,6ߓ52x[C.C~4]D۵ e|/. lʺ&`}VVpVnN m"OxBVvn>+8&Q0t2xaD`Qa'Y3mMكSbvbsؙ'vfbg9HL=KR%dI$Cٳ`2 pJ_7 \7$FFfWȈʈT}ZJ#yZ=X6'§W%1!{015! $am{@G{^^+eΒ?qi_QHg`@&Bb=\_Cxуm19cX<_}A(iR ),_ޑ|`OR>_\ntH;gyE9@镑وbEDo(ܾ2J vyݱ#>LAAAgAOA7At`u0:X-cßbs`> ^.]ku`Y)AKGL26SaƬY"/+tdd endstream endobj 83 0 obj 17298 endobj 84 0 obj <> endobj 85 0 obj <> stream x]n0 ڮ<z碃ޞ>Un붳% BZJ;uM 7 EV\rTiS TeE.!%r9&S8#̔'N#lj%9F.8?D>s> endobj 87 0 obj <> stream xUkU?w+mM5u+ikjf|B.NM3L-&4BmZQ`)HD>>B?AĶ;&iɟ 3w=9sjyրMp\R+Ҝ̶Q*M- tcL秒;ྌ3>yZP>4==)T,[n(Y='/oA?Sjgejͯ_ 3b{T6J\߁2>V x C p$@܂o&mx ށsp\1χ@f2̞NlhNc kevug5z#2mj1AN!sZeUԻe-voZP]es47gNW^E.!;`«:OzI0D%{$T˰tjg-.%kMPˮ)$bd-/gL3_{F4*6HM-z%Z,X`aЧ3Yi ] lƜDnEC.Qu8T JD%CB ͘.͏`ك__"c֫vۆ&%hB ~3cp_YoxLIU쥾 D·P-Jp`4˶;*3b_WkILxE/Fz7|3{w-B#n]O=xPO۶|^r\%;0̂c r8W"T`*PIkL~4 I|(8)D8*m<]xS\?G5#q"Bnȑ1mmxe3QDV+ұ63(*SVYĹ$jytj#t'y d+ua%z6v6܃iܧ\7ȃWyY]B]$dA[ v$ړxrgTRī endstream endobj 88 0 obj 1374 endobj 89 0 obj <> endobj 90 0 obj <> stream x]AO 96&f&=?´؁L)VM<@x7kQ13.qe0H|pPewMJ oKƹ16ү-78=8Y;{@ޯ~Mg j[8=O6=u.;"_mKd USU-4[? }Xd-ISSNc2K2{?'ŴSe}~my endstream endobj 91 0 obj <> endobj 92 0 obj <> endobj 93 0 obj <> /ExtGState<> /ProcSet[/PDF/Text/ImageC/ImageI/ImageB] >> endobj 1 0 obj <>/Contents 2 0 R>> endobj 15 0 obj <>/Contents 16 0 R>> endobj 20 0 obj <>/Contents 21 0 R>> endobj 25 0 obj <>/Contents 26 0 R>> endobj 30 0 obj <>/Contents 31 0 R>> endobj 35 0 obj <>/Contents 36 0 R>> endobj 94 0 obj <> endobj 95 0 obj < /Dest[1 0 R/XYZ 42.5 787.5 0]/Parent 94 0 R/Next 96 0 R>> endobj 96 0 obj < /Dest[1 0 R/XYZ 42.5 667 0]/Parent 94 0 R/Prev 95 0 R/Next 97 0 R>> endobj 97 0 obj < /Dest[1 0 R/XYZ 42.5 288.5 0]/Parent 94 0 R/Prev 96 0 R>> endobj 98 0 obj < /Dest[1 0 R/XYZ 42.5 204.5 0]/Parent 97 0 R/Next 99 0 R>> endobj 99 0 obj < /Dest[15 0 R/XYZ 42.5 696.7 0]/Parent 97 0 R/Prev 98 0 R/Next 100 0 R>> endobj 100 0 obj < /Dest[15 0 R/XYZ 42.5 576.2 0]/Parent 97 0 R/Prev 99 0 R/Next 101 0 R>> endobj 101 0 obj < /Dest[20 0 R/XYZ 42.5 525.4 0]/Parent 97 0 R/Prev 100 0 R/Next 102 0 R>> endobj 102 0 obj < /Dest[20 0 R/XYZ 42.5 178.2 0]/Parent 97 0 R/Prev 101 0 R/Next 103 0 R>> endobj 103 0 obj < /Dest[35 0 R/XYZ 42.5 787.5 0]/Parent 97 0 R/Prev 102 0 R>> endobj 46 0 obj <> endobj 40 0 obj <> >> endobj 41 0 obj <> >> endobj 42 0 obj <> >> endobj 43 0 obj <> >> endobj 44 0 obj <> >> endobj 45 0 obj <> >> endobj 104 0 obj <> endobj 105 0 obj < /Producer /CreationDate(D:20160125142327+01'00')>> endobj xref 0 106 0000000000 65535 f 0000320210 00000 n 0000000019 00000 n 0000002841 00000 n 0000096786 00000 n 0000082879 00000 n 0000074049 00000 n 0000035185 00000 n 0000002862 00000 n 0000111311 00000 n 0000111488 00000 n 0000034165 00000 n 0000035164 00000 n 0000068493 00000 n 0000074027 00000 n 0000320372 00000 n 0000111529 00000 n 0000116139 00000 n 0000116161 00000 n 0000116339 00000 n 0000320543 00000 n 0000116380 00000 n 0000119645 00000 n 0000119667 00000 n 0000119845 00000 n 0000320721 00000 n 0000119886 00000 n 0000125579 00000 n 0000125601 00000 n 0000125779 00000 n 0000320867 00000 n 0000125820 00000 n 0000128907 00000 n 0000128929 00000 n 0000129107 00000 n 0000321013 00000 n 0000129148 00000 n 0000131483 00000 n 0000131505 00000 n 0000131683 00000 n 0000323513 00000 n 0000323678 00000 n 0000323845 00000 n 0000324002 00000 n 0000324143 00000 n 0000324327 00000 n 0000323378 00000 n 0000131724 00000 n 0000168938 00000 n 0000168961 00000 n 0000169162 00000 n 0000169792 00000 n 0000170277 00000 n 0000196027 00000 n 0000196050 00000 n 0000196252 00000 n 0000196765 00000 n 0000197132 00000 n 0000227091 00000 n 0000227114 00000 n 0000227311 00000 n 0000227991 00000 n 0000228517 00000 n 0000251414 00000 n 0000251437 00000 n 0000251648 00000 n 0000252164 00000 n 0000252540 00000 n 0000263688 00000 n 0000263711 00000 n 0000263917 00000 n 0000264253 00000 n 0000264458 00000 n 0000281909 00000 n 0000281932 00000 n 0000282147 00000 n 0000282582 00000 n 0000282890 00000 n 0000298296 00000 n 0000298319 00000 n 0000298515 00000 n 0000298976 00000 n 0000299284 00000 n 0000316669 00000 n 0000316692 00000 n 0000316897 00000 n 0000317353 00000 n 0000317667 00000 n 0000319127 00000 n 0000319149 00000 n 0000319341 00000 n 0000319632 00000 n 0000319793 00000 n 0000319907 00000 n 0000321159 00000 n 0000321215 00000 n 0000321489 00000 n 0000321657 00000 n 0000321958 00000 n 0000322320 00000 n 0000322552 00000 n 0000322809 00000 n 0000323059 00000 n 0000323217 00000 n 0000324509 00000 n 0000324625 00000 n trailer < ] /DocChecksum /32C091FB8AB72256ABD18EC605699EC6 >> startxref 324801 %%EOF gr-satellites-4.4.0/docs/other/README.satellites000066400000000000000000000006221414055407700214060ustar00rootroot00000000000000This is the satellites-write-a-block package meant as a guide to building out-of-tree packages. To use the satellites blocks, the Python namespaces is in 'satellites', which is imported as: import satellites See the Doxygen documentation for details about the blocks available in this package. A quick listing of the details can be found in Python after importing by using: help(satellites) gr-satellites-4.4.0/docs/smog_p_spectrum.1000066400000000000000000000013721414055407700205300ustar00rootroot00000000000000.TH SMOG-P-SPECTRUM 1 2020-09-28 gr-satellites "User commands" .SH NAME smog_p_spectrum \- plots spectrum data from SMOG-P/ATL-1 .SH SYNOPSIS .B smog_p_spectrum .IR spectrum_file .SH DESCRIPTION .PP .B smog_p_spectrum forms part of gr-satellites and can be used to plot the spectrum data stored in a file received from SMOG-P or ATL-1. .PP gr-satellites is a GNU Radio out-of-tree module encompassing a collection of telemetry decoders that supports many different Amateur satellites. It supports most popular protocols, such as AX.25, the GOMspace NanoCom U482C and AX100 modems, an important part of the CCSDS stack, the AO-40 protocol used in the FUNcube satellites, and several ad-hoc protocols used in other satellites. .SH "SEE ALSO" .BR gr_satellites (1) gr-satellites-4.4.0/docs/source/000077500000000000000000000000001414055407700165355ustar00rootroot00000000000000gr-satellites-4.4.0/docs/source/_static/000077500000000000000000000000001414055407700201635ustar00rootroot00000000000000gr-satellites-4.4.0/docs/source/_static/.keep000066400000000000000000000000001414055407700210760ustar00rootroot00000000000000gr-satellites-4.4.0/docs/source/_templates/000077500000000000000000000000001414055407700206725ustar00rootroot00000000000000gr-satellites-4.4.0/docs/source/_templates/.keep000066400000000000000000000000001414055407700216050ustar00rootroot00000000000000gr-satellites-4.4.0/docs/source/command_line.rst000066400000000000000000001016721414055407700217230ustar00rootroot00000000000000.. _gr_satellites command line tool: gr_satellites command line tool =============================== The ``gr_satellites`` command line tool is a complete solution that can decode frames using either real-time RF samples from an SDR or conventional radio, or a recording. Basic usage ^^^^^^^^^^^ ``gr_satellites`` can be run from a terminal after gr-satellites has been installed. If run without any arguments, ``gr_satellites`` will only print some basic information about the arguments it allows. .. code-block:: console $ gr_satellites usage: gr_satellites satellite [-h] [--version] [--list_satellites] [--ignore_unknown_args] (--wavfile WAVFILE | --rawfile RAWFILE | --rawint16 RAWINT16 | --audio [DEVICE] | --udp | --kiss_in KISS_IN) [--samp_rate SAMP_RATE] [--udp_ip UDP_IP] [--udp_port UDP_PORT] [--iq] [--udp_raw] [--input_gain INPUT_GAIN] [--start_time START_TIME] [--throttle] [--kiss_out KISS_OUT] [--kiss_append] [--kiss_server [PORT]] [--kiss_server_address KISS_SERVER_ADDRESS] [--zmq_pub [ADDRESS]] [--hexdump] [--dump_path DUMP_PATH] .. _Specifying the satellite: Specifying the satellite """""""""""""""""""""""" The arguments that ``gr_satellites`` allows depend on the satellite that has been selected. Therefore, to use ``gr_satellites`` it is always necessary to specify the ``satellite`` to be used as an argument immediately following ``gr_satellites``. There are three different ways to specify the satellite: * Using the satellite name, such as *FUNcube-1* or *LilacSat-2*. This can be used with any :ref:`satellite officially supported by gr-satellites`, and it is the most simple way of specifying a satellite. .. code-block:: console $ gr_satellites FUNcube-1 A satellite may have several different names, known as *alternative names*. For example, FUNcube-1 is both known as AO-73 and FUNcube-1. * Using the satellite `NORAD ID`_. This can bue used with any :ref:`satellite officially supported by gr-satellites`, and it can be useful when interfacing ``gr_satellites`` with other tools that use NORAD IDs to classify satellites. Below we show ``gr_satellites`` running with NORAD ID 39444, which corresponds to FUNcube-1. .. code-block:: console $ gr_satellites 39444 * Using a path to an ``.yml`` SatYAML file. SatYAML files are used by gr-satellites to specify the decoding parameters and configuration corresponding to each different satellite. They are described in more detail in the :ref:`SatYAML files` section. gr-satellites comes bundled with a large number of SatYAML files corresponding to all the officially supported satellites. They can be found in the ``python/satyaml/`` directory. Specifying the path of a SatYAML file is useful if the user has modified some of the files bundled with gr-satellites or has created their own ones. .. code-block:: console $ gr_satellites python/satyaml/AO-73.yml .. _NORAD ID: https://en.wikipedia.org/wiki/Satellite_Catalog_Number .. _Specifying the input source: Specifying the input source """"""""""""""""""""""""""" Besides specifying the satellite to use for decoding, it is mandatory to specify the input source by using exactly one of the following options: * ``--wavfile`` can be used to read a recording in WAV/OGG/FLAC format. This uses libsndfile through the GNU Radio WAV File Source block, so any format supported by libsndfile can be used. The sample rate is obtained from the file header, but it can be overriden using the the ``--samp_rate`` argument if necessary. By default, the WAV/OGG/FLAC file is interpreted as a one-channel file containing real RF samples. To read a two-channel file containing IQ RF samples, the ``--iq`` argument needs to be specified. .. note:: All the :ref:`sample recordings ` in the ``satellite-recordings/`` are real 48kHz WAV files and can be read with the ``--wavfile file --samp_rate 48e3`` arguments. For example, this will decode some frames from FUNcube-1: .. code-block:: console $ gr_satellites FUNcube-1 --wavfile satellite-recordings/ao73.wav * ``--rawfile`` can be used to read a recording in ``complex64`` or ``float32`` format (depending on whether the ``--iq`` argument is used or not). The sample rate of the recording needs to be specified with the ``--samp_rate`` argument. .. note:: Files in ``complex64`` format contain a sequence of 32-bit floating point numbers in IEEE 754 format. The sequence alternates between the I (in-phase) and Q (quadrature) componentes of a stream of IQ samples. This format is used by the GNU Radio File Source and File Sink blocks when their type is set to *complex*. Files in ``float32`` format contain a sequence of 32-bit floating point numbers in IEEE 754 format. The sequence contains the elements of a stream of real samples. This format is used by the GNU Radio File Source and File Sink blocks when their type is set to *float*. * ``--rawint16`` can be used to read a recording in ``int16`` format. The file is interpreted as IQ or real data according as to whether the ``--iq`` argument is used or not. The sample rate of the recording needs to be specified with the ``--samp_rate`` argument. .. note:: Files in ``int16`` format contain a sequence of 16-bit integers in host endianness. This format is used by GNU Radio File Source and File Sink blocks when their type is set to *short*. * ``--audio`` can be used to read samples from the soundcard, using GNU Radio's `Audio Source`_. This can be used to receive audio from a conventional radio by using the soundcard or from another application via a "virtual audio cable". The sample rate to use needs to be specified with the ``--samp_rate`` argument. A sample rate of 48000 is typical with audio devices. Both real samples (by default) and IQ samples (using the ``--iq`` argument) are supported. IQ samples use two audio channels (stereo). The ``--audio`` argument can optionally be followed by the name of the audio device to use. Details about how to specify the device name vary between plaform and are described in the `Audio Source`_ documentation. If no device name is entered, the default audio device will be chosen. * ``--udp`` can be used to received RF samples streamed in real-time. The sample rate of the recording needs to be specified with the ``--samp_rate`` argument. The streaming format is the same as for the ``--rawint16`` and both real samples (by default) and IQ samples (using the ``--iq`` argument) are supported. If the ``--udp_raw`` is used the format will be the same as for ``--rawfile``. By default, ``gr_satellites`` will listen on the IP address ``::`` (all addresses) and the UDP port 7355. A different IP address or port can be specified using the parameters ``--udp_ip`` and ``--udp_port``. .. note:: `GQRX`_ can stream audio in UDP using this format and UDP port, and a sample rate of 48ksps by following the instructions `here `_. In this case, ``gr_satellites`` should be run as .. code-block:: console $ gr_satellites FUNcube-1 --udp --samp_rate 48e3 This is recommended as a simple way of interfacing ``gr_satellites`` with SDR hardware for beginner users. It is also possible to use the example GNU Radio companion flographs in `gr-frontends`_ to stream samples by UDP from different sources. For more advanced users, ``nc`` can also be a very useful tool for streaming. * ``--kiss_in`` can be used to process a file containing already decoded frames in KISS format. All the demodulation steps are skipped and only telemetry parsing, file receiving, etc. are done. This can be useful to view the telemetry stored in files previously decoded with gr-satellites or other software. Getting help """""""""""" ``gr_satellites`` prints a detailed description of all the allowed arguments by using the ``-h`` or ``--help`` argument. Note that a satellite needs to be specified, since the set of allowed arguments depends on the decoders used by that satellite. For example, this shows all the options allowed by the FUNcube-1 decoder: .. code-block:: console $ gr_satellites FUNcube-1 --help usage: gr_satellites satellite [-h] [--version] [--list_satellites] (--wavfile WAVFILE | --rawfile RAWFILE | --rawint16 RAWINT16 | --audio [DEVICE] | --udp | --kiss_in KISS_IN) [--samp_rate SAMP_RATE] [--udp_ip UDP_IP] [--udp_port UDP_PORT] [--iq] [--input_gain INPUT_GAIN] [--start_time START_TIME] [--throttle] [--kiss_out KISS_OUT] [--kiss_append] [--kiss_server [PORT]] [--kiss_server_address KISS_SERVER_ADDRESS] [--zmq_pub [ADDRESS]] [--hexdump] [--dump_path DUMP_PATH] [--telemetry_output TELEMETRY_OUTPUT] [--f_offset F_OFFSET] [--rrc_alpha RRC_ALPHA] [--disable_fll] [--fll_bw FLL_BW] [--clk_bw CLK_BW] [--clk_limit CLK_LIMIT] [--costas_bw COSTAS_BW] [--manchester_history MANCHESTER_HISTORY] [--syncword_threshold SYNCWORD_THRESHOLD] [--verbose_rs] gr-satellites - GNU Radio decoders for Amateur satellites optional arguments: -h, --help show this help message and exit --version show program's version number and exit --list_satellites list supported satellites and exit --ignore_unknown_args Treat unknown arguments as warning input: --wavfile WAVFILE WAV/OGG/FLAC input file (using libsndfile) --rawfile RAWFILE RAW input file (float32 or complex64) --rawint16 RAWINT16 RAW input file (int16) --audio [DEVICE] Soundcard device input --udp Use UDP input --kiss_in KISS_IN KISS input file --samp_rate SAMP_RATE Sample rate (Hz) --udp_ip UDP_IP UDP input listen IP [default='::'] --udp_port UDP_PORT UDP input listen port [default='7355'] --iq Use IQ input --input_gain INPUT_GAIN Input gain (can be negative to invert signal) [default=1] --start_time START_TIME Recording start timestamp --throttle Throttle recording input to 1x speed output: --kiss_out KISS_OUT KISS output file --kiss_append Append to KISS output file --kiss_server [PORT] Enable KISS server [default port=8100] --kiss_server_address KISS_SERVER_ADDRESS KISS server bind address [default='127.0.0.1'] --zmq_pub [ADDRESS] Enable ZMQ PUB socket [default address=tcp://127.0.0.1:5555] --hexdump Hexdump instead of telemetry parse --dump_path DUMP_PATH Path to dump internal signals demodulation: --f_offset F_OFFSET Frequency offset (Hz) [default=1500 or 12000] --rrc_alpha RRC_ALPHA RRC roll-off (Hz) [default=0.35] --disable_fll Disable FLL --fll_bw FLL_BW FLL bandwidth (Hz) [default=25] --clk_bw CLK_BW Clock recovery bandwidth (relative to baudrate) [default=0.06] --clk_limit CLK_LIMIT Clock recovery limit (relative to baudrate) [default=0.02] --costas_bw COSTAS_BW Costas loop bandwidth (Hz) [default=50] --manchester_history MANCHESTER_HISTORY Manchester recovery history (symbols) [default=32] deframing: --syncword_threshold SYNCWORD_THRESHOLD Syncword bit errors [default=8] --verbose_rs Verbose RS decoder data sink: --telemetry_output TELEMETRY_OUTPUT Telemetry output file [default=stdout] The satellite parameter can be specified using name, NORAD ID or path to YAML file .. _Output: Output """""" By default, ``gr_satellites`` will "do its best" to show the user the output for the decoded frames. If the telemetry format for the satellite is implemented in gr-satellites, the telemetry frames will be printed to the standard output in human-readable format. Otherwise, the raw frames will be printed out in hex format to the standard output. File decoding, image decoding and other special output options of some particular satellites are enabled by default. Customization of the ouput options is described in the :ref:`Output options` subsection below. Examples """""""" The ``test.sh`` script in the ``gr-satellites/`` directory runs ``gr_satellites`` on several of the :ref:`sample recordings ` in ``satellite-recordings/``. This script can be used as a series of examples of how to run ``gr_satellites``. .. _Output options: Ouput options ^^^^^^^^^^^^^ This subsection explains in detail the different output options that can be used with the ``gr_satellites`` command line tool. The default behaviour when no options are specified has been described in the :ref:`Output` subsection above. .. _Hex dump: Hex dump """""""" By using the option ``--hexdump``, it is possible to make ``gr_satellites`` print the received frames in hexadecimal format, regardless of whether there is a telemetry decoder available or not. The format used to print the frames is the same as used by the GNU Radio block `Message Debug`_ ``print_pdu`` input. An example of the use of this option can be seen here: .. code-block:: console $ gr_satellites FUNcube-1 --wavfile ~/gr-satellites/satellite-recordings/ao73.wav \ --hexdump * MESSAGE DEBUG PRINT PDU VERBOSE * () pdu_length = 256 contents = 0000: 89 00 00 00 00 00 00 00 00 1f cc 00 ce 02 d1 00 0010: 00 07 08 09 09 00 00 05 01 01 00 40 13 2f c8 f2 0020: 5c 8f 34 23 f3 ba 0b 5d 62 74 51 c7 ea fa 69 4a 0030: 9a 9f 00 09 ef a0 1f f4 a7 ea 4a c6 8f 11 40 11 0040: 1e 10 f7 01 3e 20 64 00 d7 8b f8 d7 94 c8 93 a8 0050: 2a da 52 a6 0e 58 0e c8 0f 4e 01 1d 20 5a 00 db 0060: 94 a8 aa 8a 98 13 ac 69 0a a6 a8 10 e6 10 92 0f 0070: b8 01 50 20 64 00 d7 96 a8 c1 8b 48 25 ab a9 ca 0080: ce 9d 10 76 0f c9 10 55 01 3a 20 5a 00 d7 97 29 0090: 08 8c 48 4f a9 6a 5a f2 a4 10 39 0f 7b 0f 86 01 00a0: 49 20 64 00 d7 94 08 d0 8a d8 2a ad 6a 5a 7e b4 00b0: 0e 53 0e 9b 0e b7 01 09 20 5a 00 db 99 a8 f2 8f 00c0: e8 38 af aa 8a c2 9e 0e de 0f 48 0e 31 01 31 20 00d0: 5a 00 ce 9b c8 ff 88 68 1b b2 6a 5a ca a7 0f c3 00e0: 0e 74 0e 58 01 34 20 5a 00 d7 9b 39 1b 97 b8 c5 00f0: b0 2b 3a d6 b5 01 6b 00 6a 02 9e 00 03 20 13 00 *********************************** .. _KISS output: KISS output """"""""""" Decoded frames can be saved to a file in `KISS format`_. This is a simple format that serves to delimit frames stored in a file or sent over a serial bus, and it is frequently used to store telemetry frames. To enable KISS output, the ``--kiss_out`` parameter followed by the path of the output file should be used. By default ``gr_satellites`` will overwrite the file if it already exists. To append to the file instead, the option ``--kiss_append`` can be used in addition to the ``--kiss_out`` option. Appending can be used to concatenate frames obtained in several decoding runs. Files in KISS format can be read with ``gr_satellites`` as indicated above or with other software tools. .. note:: KISS files produced with ``gr_satellites`` use an extension proposed by `Mike Rupprecht`_ to store the reception timestamp of the frames. Before each data frame, a KISS control frame using the control byte ``0x09`` and storing a timestamp with UNIX timestamp in milliseconds stored as a big-endian 64 bit integer is included in the file. Some software, including the decoders by Mike Rupprecht, will be able to read and use these timestamps. Other software that processes KISS will ignore the timestamps. .. _Mike Rupprecht: http://dk3wn.info/ KISS server """"""""""" A KISS TCP server can be enabled with the ``--kiss_server`` parameter, optionally followed by the TCP port to listen on (by default port 8100 is used). This allows other applications to connect to ``gr_satellites`` and receive decoded frames using the KISS protocol. By default the KISS server will only bind on ``127.0.0.1`` and listen to requests from localhost only. If access from other computers on the network is needed, the ``--kiss_server_address`` parameter can be used to specify the address to bind to. For instace, if ``--kiss_server_address ''`` or ``--kiss_server_address 0.0.0.0`` is used, the server will bind to 0.0.0.0 and listen to requests from all addresses. ZMQ PUB socket """""""""""""" Decoded frames can also be sent to other applications by using a `ZeroMQ`_ PUB socket. Several applications can connect to the PUB socket using SUB sockets. The frames are sent using the *ZMQ PUB Message Sink* GNU Radio block, and can be received using the *ZMQ SUB Message Source* GNU Radio block. The ZMQ PUB socket is enabled using the ``--zmq_pub`` parameter, optionally followed by the socket endpoint to use. By default, the endpoint ``tcp://127.0.0.1:5555`` is used. This means that the ZMQ PUB socket will only listen to connections from localhost. If desired, the endpoint ``tcp://*:5555`` can be used to listen on all addresses. .. _ZeroMQ: https://zeromq.org/ Telemetry output """""""""""""""" For satellites supporting telemetry parsing, ``gr_satellites`` will default to printing the decoded telemetry values to the standard output. It is possible to write these messages to a file instead by using the ``--telemetry_output`` parameter followed by the path of the output file. Dump internal signals """"""""""""""""""""" For advanced users and developers, the demodulators used in ``gr_satellites`` can dump the internal signals used inside the demodulator. This option can be enabled by using the ``--dump_path`` parameter followed by a path to the directory where the different files are created. It is recommended to use this option with a short recording, to avoid creating very large files. The details of each of these files are best studied in the Python source code of the demodulators (see ``python/components/demodulators/``). The following example show how to use ``--dump_path`` to plot the symbols with `Numpy`_ and `Matplotlib`_ and optimize the decoding parameters for a particular recording. We first run the following to dump to the path ``/tmp/fsk`` the internal signals produced by decoding a sample recording of AU02. .. code-block:: console $ mkdir -p /tmp/fsk $ gr_satellites AU02 --wavfile satellite-recordings/au02.wav \ --dump_path /tmp/fsk We see that we do not get any decoded packets. Then, we can plot the FSK symbols with the following Python code: .. code-block:: python import numpy as np import matplotlib.pyplot as plt x = np.fromfile('/tmp/fsk/clock_recovery_out.f32', dtype = 'float32') plt.plot(x, '.') plt.show() This produces the figure below, which shows that there has been a clock cycle slip mid packet, which prevents correct decoding. .. figure:: images/au02_default.png :alt: FSK symbols with default parameters FSK symbols with default parameters We can run ``gr_satellites`` again adding the parameter ``--clk_bw 0.1`` to increase the clock recovery loop bandwidth. With this parameter we get a successful decode and if we plot the FSK symbols again, we get the figure below, which shows that the clock recovery is working much better than before. .. figure:: images/au02_nondefault.png :alt: FSK symbols with non-default parameters FSK symbols with non-default parameters .. _Telemetry submission: Telemetry submission ^^^^^^^^^^^^^^^^^^^^ The ``gr_satellites`` command line tool can be used to submit decoded telemetry to an online database server, such as `SatNOGS DB`_ and these others servers used by certain satellite projects: * `FUNcube Warehouse`_, which is used by the FUNcube payloads on FUNcube-1, UKube-1, Nayif-1 and JY1Sat. * `PW-Sat2 Groundstation`_, which is used by PW-Sat2. * The `BME telemetry server`_, which is used by SMOG-P, ATL-1 and SMOG-1. * `Harbin Institute of Technology`_, which connects to the telemetry proxy included in `gr-lilacsat`_ and `gr-dslwp`_. * Any custom server using the SIDS protocol. The `SIDS protocol`_ is an HTTP-based protocol that was first developed by the ESTCube team and later used by the UWE-3 team. It is the basis of the SatNOGS DB server and other telemetry servers. To enable telemetry submission, it is necessary to edit some parameters in ``gr_satellites``'s config file, which is located in ``~/.gr_satellites/config.ini``. If this file does not exist, it will be created with a template when ``gr_satellites`` is first run. The template looks like this: .. code-block:: [Groundstation] callsign = latitude = 0 longitude = 0 submit_tlm = no [FUNcube] site_id = auth_code = [PW-Sat2] credentials_file = [BME] user = password = To enable telemetry submission, the ``submit_tlm`` parameter must be set to ``yes``. Additionally, the receiving stations ``callsign`` as well as its location (``latitude`` and ``longitude``) need to be set, since some of the servers need these parameters. Once this is done, telemetry submission to SatNOGS DB will be enabled for all satellites. To enable telemetry submission to the FUNcube warehouse, it is necessary to fill in the ``site_id`` and ``auth_code``. These can be obtained by `registering in the warehouse`_. To enable telemetry submission to the PW-Sat2 server, it is necessary to enter the path to the credentials file in the ``credentials_file`` parameter. This file is a JSON file that is generated and downloaded in the "`Your credentials`_" section of the server web interface. It is necessary to have an account registered in the server to obtain the credentials file. To enable telemetry submission to the BME server, it is necessary to `register an account in the BME server`_. The user and password should be entered into the gr-satellites ``.ini`` file. To use the Harbin Institute of Technology proxy to submit telemetry, the proxy needs to be run and started in the local computer before running ``gr_satellites``. The command line tool will connect to the correct port where the proxy is listening (this is specified in the SatYAML file of each satellite). All the configuration regarding the station and the operator is done in the proxy itself. When ``gr_satellites`` starts, it will attempt to connect to the proxy, and print a warning if unable (in which case telemetry submission through the proxy is disabled for this run). .. note:: The Harbin Institute of Technology proxy is a Python2 application that uses PyQt4. Users having more modern sytems may find useful the PyQt5 version that can be found in the `pyqt5 branch of gr-lilacsat`_. This requires ``tornado`` version 4.5.3. It will not work with more recent versions of ``tornado``. No special configuration needs to be done to enable submission to custom SIDS servers, since these use the same protocol and configuration as SatNOGS DB. For some telemetry servers, including SatNOGS DB, the frames are submitted together with a timestamp of reception. This timestamp is taken from the computer's clock by ``gr_satellites`` at the moment when it decodes the frame. This means that, in order to use telemetry submission appropriately, the computer's clock should be set accurately and a live signal rather than a recording should be decoded. File and image receiver ^^^^^^^^^^^^^^^^^^^^^^^ Some satellites transmit files (especially image files) by splitting the files into many telemetry packets. The ``gr_satellites`` decoder supports reassembling and storing these files into a directory. Additionally, image files are automatically displayed in real time as they are being received, using `feh`_. Currently the satellites that have decoders supporting file reception are ATL-1 and SMOG-P (they transmit RF spectrum data), and the satellites that have decoders supporting image reception are 1KUNS-PF, BY70-1, D-SAT, LilacSat-1, Lucky-7 and Światowid. For satellites supporting file reception, the ``--file_output_path`` parameter can be used to set the directory that is used to store received files. The filenames of the received files will be automatically created using metadata or a counter (if no metadata is transmitted). By default, received files are stored in ``/tmp/``. The ``--verbose_file_receiver`` parameter can be used to enable additional debugging information about the functionality of the file receiver. Other topics ^^^^^^^^^^^^ This subsection deals with other topics which are relevant to the usage of ``gr_satellites``. .. _Real or IQ input: Real or IQ input """""""""""""""" The ``gr_satellites`` command line tool supports both real (one-channel) input and IQ input (which consists of two channels: in-phase and quadrature). A detailed description of these two ways to represent a signal is out of the scope of this document. This subsection gives some practical advice regarding the difference between real and IQ input. By default ``gr_satellites`` will assume that its input is real. To use IQ input, the ``--iq`` option must be used. When using the audio output of either a conventional radio or an SDR software performing SSB or FM demodulation, ``gr_satellites`` should be used with the real input option. Likewise, recordings produced from this kind of audio output, such as one-channel WAV recordings should also be used with the real input option. However, most SDR softwares will also have an option to save raw samples to a file. These files are almost always IQ, and can be either a two-channel WAV file or a file in raw format. The IQ input option must be used when using ``gr_satellites`` to read these files. Additionally, some SDR software may support streaming IQ data by UDP. This can also be used in ``gr_satellites`` with the IQ input option. .. _FSK demodulation and IQ input: FSK demodulation and IQ input """"""""""""""""""""""""""""" When using an AFSK or FSK demodulator, the usage of the ``--iq`` option has an additional effect. Since (A)FSK is a mode based on frequency modulation, it is common to use either a conventional FM radio or an SDR software performing FM demodulation to receive (A)FSK. Audio recordings obtained in this manner are also common. Therefore, when ``gr_satellites`` is run without the ``--iq`` signal, it will expect that (A)FSK signals have already been FM-demodulated in this way. When the ``--iq`` option is used, ``gr_satellites`` expects an (A)FSK signal that has not been FM-demodulated, and so it will perform FM-demodulation first. This is the kind of procedure that should be employed with inputs such as raw IQ recordings of an SDR, since the (A)FSK signals present in this kind of recordings have not been FM-demodulated. .. note:: The output of the radio or SDR software when running in FM mode to receive an FSK signal is actually an NRZ signal. Therefore, when ``gr_satellites`` is run without the ``--iq`` option, it will expect an NRZ signal instead of an FSK signal. When ``gr_satellites`` is run with the ``--iq`` option, it will expect an FSK signal. Similarly, the output of the radio or SDR software when running in FM mode to receive an AFSK signal is actually an audio-frequency FSK signal. Therefore, when ``gr_satellites`` is run without the ``--iq`` option, it will expect an audio-frequency FSK signal instead of an AFSK signal. When ``gr_satellites`` is run with the ``--iq`` option, it will expect an AFSK signal. Note that this behaviour is what the user wants in most cases, but it also means that it is not possible to run ``gr_satellites`` directly on an (A)FSK signal which is represented in intermediate frequency as a real signal. .. _Frequency offsets for BPSK: Frequency offsets for BPSK """""""""""""""""""""""""" A usual way of receiving a BPSK signal is to use either a conventional radio or an SDR software in SSB mode (USB mode, normally) and tune the BPSK signal in the middle of the audio passband. Audio recordings obtained in this manner are also common. .. note:: The SSB filter of a conventional radio is often approximately 3kHz wide. For this reason, only BPSK signals with a baudrate of 2400 baud or lower can be received with a conventional SSB radio. For BPSK signals with larger baudrate, an SDR receiver should be used. The ``gr_satellites`` command line tool needs to know the frequency at which the BPSK signal is tuned within the audio passband. If necessary, this can be specified with the ``--f_offset`` parameter, followed by the frequency in Hz. There are the following defaults: * For signals with a baudrate of 2400 baud or less, a frequency offset of 1500 Hz is used. This follows the common practice of using a regular 3kHz SSB bandwidth and tuning the signal in the middle of the passband. * For signals with a baudrate larger than 2400, a frequency offset of 12000 Hz is used. The rationale is that, for best results, a passband of 24000 Hz should be used, since this is the largest that fits in a 48kHz audio signal, and the signal should be tuned in the middle of this 24000 Hz passband. This kind of usage is sometimes called "wide SSB mode". These settings only apply for a real input. When ``gr_satellites`` is used with IQ input, the default is to expect the BPSK signal tuned at 0Hz (i.e., at baseband). A different frequency can still be selected with the ``--f_offset`` parameter. FSK signal polarity """"""""""""""""""" A conventional FM radio, or even an SDR software running in FM mode might invert the polarity of the output signal, since the polarity is not relevant for audio signals. However, the polarity is relevant when receiving an FSK signal that does not use differential coding. An input with the inverted polarity will cause decoding to fail. In this case, the input can be inverted again by using the ``--input_gain -1`` parameter, which has the effect of multiplying the input signal by -1 before it is processed, thus restoring the correct polarity. Multiple transmitters """"""""""""""""""""" Some satellites have multiple transmitters (or different types of signals) declared in their :ref:`SatYAML files`. When run for these satellites, the ``gr_satellites`` command line tool will run decoders for all the transmitters or signal types in parallel. Therefore, it is not necessary or possible to specify the transmitter to use. In the case when it is necessary to run only the decoder for a single transmitter, the easiest solution is to make a copy of the SatYAML file for that satellite, edit the copy to leave out only the desired transmitter, and then running ``gr_satellites`` and indicating it to use the modified SatYAML file. Getting correct timestamps with recordings """""""""""""""""""""""""""""""""""""""""" One of the difficulties with working with recordings is obtaining correct timestamps for each of the decoded packets. These timestamps are included in KISS files and telemetry submissions to some servers, such as SatNOGS DB. To produced correct timestamps ``gr_satellites`` will play back the recording at 1x speed and count the clock time elapsed since the beginning of the execution, it will then add that time to a timestamp specified by the user, which should correspond to the start of the recording. To use this functionality it is necessary to use the ``--throttle`` parameter to limit playback speed to 1x and use the ``--start_time`` parameter followed by the timestamp in ISO 8601 format (``YYYY-MM-DDTHH:MM:SS``) to indicate the start time of the recording. Treating unknown args as warning """""""""""""""""""""""""""""""" Using the argument ``--ignore_unknown_args`` will change the behaviour on unknown arguments to a warning instead of exiting with an error. This can be useful when running in automated scripts and some options may not be available on that satellite. For example the ``--f_offset`` and ``--use_agc`` .. _GQRX: https://gqrx.dk/ .. _gr-frontends: https://github.com/daniestevez/gr-frontends .. _Message Debug: https://wiki.gnuradio.org/index.php/Message_Debug .. _KISS format: http://www.ax25.net/kiss.aspx .. _SatNOGS DB: https://db.satnogs.org/ .. _FUNcube Warehouse: http://warehouse.funcube.org.uk/ .. _PW-Sat2 Groundstation: https://radio.pw-sat.pl/ .. _BME telemetry server: https://gnd.bme.hu:8080/ .. _registering in the warehouse: http://warehouse.funcube.org.uk/registration .. _Your credentials: https://radio.pw-sat.pl/communication/yourcredentials .. _register an account in the BME server: https://gnd.bme.hu:8080/auth/register .. _feh: https://feh.finalrewind.org/ .. _NumPy: https://numpy.org/ .. _Matplotlib: https://matplotlib.org/ .. _Harbin Institute of Technology: http://lilacsat.hit.edu.cn/ .. _gr-lilacsat: https://github.com/bg2bhc/gr-lilacsat .. _gr-dslwp: https://github.com/bg2bhc/gr-dslwp .. _pyqt5 branch of gr-lilacsat: https://github.com/daniestevez/gr-lilacsat/tree/pyqt5 .. _Audio Source: https://wiki.gnuradio.org/index.php/Audio_Source .. _SIDS protocol: https://github.com/janvgils/sids gr-satellites-4.4.0/docs/source/components.rst000066400000000000000000000742461414055407700214710ustar00rootroot00000000000000.. _Components: Components ========== Components represent gr-satellite's way of decomposing the decoding process in high-level blocks. The decoding chain is broken into a series of steps which pass their output to the input of the next step. These are the following: * **Data sources**. These produce the input of the decoding chain, which typically consists of RF signal samples. * **Demodulators**. These turn RF samples into soft symbols. They filter the signal, recover the transmit clock and carrier if necessary, etc. An example is a BPSK demodulator, which turns RF samples of a BPSK signal into a stream of soft symbols. * **Deframers**. Deframers implement the lower layer protocols related to frame boundary detection, descrambling, deinterleaving, FEC, error checking with a CRC code, etc. The output of a deframer are PDUs with the frames. Some examples are an AX.25 deframer and a CCSDS concatenated code deframer. * **Transports**. Transports implement higher layer protocols that might be needed to get to the useful information inside the frames. For example, if frames are fragmented, a transport will handle defragmentation. An example is a KISS transport, whose input are frames that contain bytes of a KISS stream, and its output are the packets contained in that KISS stream, regardless of how they are split between different frames. * **Data sinks**. Data sinks are the consumers of packets. They might store them, send them to another software, or parse telemetry values. All the component blocks support :ref:`Command line options` in the same way as the satellite decoder block. The set of available options for each component block is different. It is possible to use the ``"--help"`` as the options of a particular block in order to print out the available options for that block. Below, the main component blocks in each category are described. .. _Data sources: Data sources ^^^^^^^^^^^^ Data source components can be found under *Satellites > Data sources* in GNU Radio companion. Currently, the only data source is the "KISS File Source" block. This block will read a file in KISS format, and output the frames in the file as PDUs. The usual operations involving reading RF samples from an SDR or recording can be achieved easily with default GNU Radio blocks, so there are no specific data sources for these. Advanced users can look at the ``setup_input()`` method of the class ``gr_satellites_top_block`` in ``apps/gr_satellites`` to see how the ``gr_satellites`` command line tools sets up its different inputs using default GNU Radio blocks. Demodulators ^^^^^^^^^^^^ Demodulator components can be found under *Satellites > Demodulators* in GNU Radio companion. There are currently three demodulator component blocks: * BPSK demodulator * FSK demodulator * AFSK demodulator They take RF signal samples as input, and output soft symbols, as a stream of ``float`` normalized with amplitude one. The input can be either real or IQ (complex). See :ref:`Real or IQ input` for more information. The demodulator blocks and their parameters are described below. .. _BPSK demodulator: BPSK demodulator """""""""""""""" The BPSK demodulator expects an input which consists of RF samples of a BPSK signal, and outputs the demodulated BPSK soft symbols. The BPSK signal can optionally be DBPSK or Manchester encoded. The figure below shows the example flowgraph which can be found in ``examples/components/bpsk_demodulator.grc``. This reads a WAV file from :ref:`satellite-recordings` which contains some BPSK packets from LilacSat-1 and uses the BPSK demodulator to obtain the symbols. The "Skip Head" and "Head" blocks are used to select a portion of the output, which is then plotted using the "QT GUI Time Sink". .. figure:: images/bpsk_demodulator_flowgraph.png :alt: Usage of BPSK demodulator in a flowgraph Usage of BPSK demodulator in a flowgraph When this example flowgraph is run, it displays the output shown in the figure below. There we can see the start of the BPSK packet. On the left side of the plot we have noise, before the packet starts, then the packet starts, and the clock and carrier recovery take some time to sync. After this, the symbols are demodulated properly. This can be seen because the +1 and -1 symbols are well separated. .. figure:: images/bpsk_demodulator_output.png :alt: Output of the BPSK demodulator example flowgraph Output of the BPSK demodulator example flowgraph The figure below shows the options allowed by the BPSK demodulator block. The *Baudrate* option is used to set the baudrate in symbols per second. The *Sample rate* option specifies the sample rate of the input. The *Frequency offset* specifies at which frequency the BPSK signal is centred (see :ref:`Frequency offsets for BPSK`). The *Differential* option enables differential decoding of DBPSK. For differential decoding, the phase recovery using a Costas loop is disabled and non-coherent demodulation is used. The *Manchester* option enables Manchester decoding. A Manchester encoded BPSK signal is decoded as if it had twice the baudrate, and then the phase of the Manchester clock is searched in the symbols and the Manchester clock is "wiped-off", multiplying symbols by the clock and accumulating them by pairs. The *IQ input* option enables IQ (complex) input. .. figure:: images/bpsk_demodulator_options.png :alt: Options of BPSK demodulator Options of BPSK demodulator .. _FSK demodulator: FSK demodulator """"""""""""""" The FSK demodulator expects an input which consists of RF samples of an FSK signal, and outputs the demodulated FSK soft symbols. Both real and IQ (complex) input are suported, but the semantics are different: with real input, the FSK demodulator expects an FM-demodulated signal; with IQ input, the FSK demodulator expects the signal before FM demodulation (see :ref:`FSK demodulation and IQ input`). The figure below shows the example flowgraph which can be found in ``examples/components/fsk_demodulator.grc``. This reads a WAV file from :ref:`satellite-recordings` which contains a single FSK packet from AAUSAT-4 and uses the FSK demodulator to obtain the symbols. The output is plotted using the "QT GUI Time Sink". .. figure:: images/fsk_demodulator_flowgraph.png :alt: Usage of FSK demodulator in a flowgraph Usage of FSK demodulator in a flowgraph When this example flowgraph is run, it displays the output shown in the figure below. There we can see the FSK packet, surrounded by noise on both sides. .. figure:: images/fsk_demodulator_output.png :alt: Output of the FSK demodulator example flowgraph Output of the FSK demodulator example flowgraph The figure below shows the options allowed by the FSK demodulator block. The *Baudrate* option is used to set the baudrate in symbols per second. The *Sample rate* option specifies the sample rate of the input. The *IQ input* option enables IQ (complex) input. The signal is expected to be centred at baseband (0Hz) when IQ input is selected. The *Subaudio* option enables subaudio demodulation, which is intended for subaudio telemetry under FM voice and includes an additional lowpass filter to filter out the voice signal. .. figure:: images/fsk_demodulator_options.png :alt: Options of FSK demodulator Options of FSK demodulator .. _AFSK demodulator: AFSK demodulator """""""""""""""" The APSK demodulator expects an input which consists of RF samples of an AFSK signal, and outputs the demodulated AFSK soft symbols. Both real and IQ (complex) input are suported, but the semantics are different: with real input, the AFSK demodulator expects an FM-demodulated signal; with IQ input, the AFSK demodulator expects the signal before FM demodulation (see :ref:`FSK demodulation and IQ input`). The figure below shows the example flowgraph which can be found in ``examples/components/afsk_demodulator.grc``. This reads a WAV file from :ref:`satellite-recordings` which contains a single AFSK packet from GOMX-1 and uses the AFSK demodulator to obtain the symbols. The "Head" block is used to select a portion of the output, which is then plotted using the "QT GUI Time Sink". .. figure:: images/afsk_demodulator_flowgraph.png :alt: Usage of AFSK demodulator in a flowgraph Usage of AFSK demodulator in a flowgraph When this example flowgraph is run, it displays the output shown in the figure below. There we can see the AFSK packet, surrounded by noise on both sides. .. figure:: images/afsk_demodulator_output.png :alt: Output of the AFSK demodulator example flowgraph Output of the AFSK demodulator example flowgraph The figure below shows the options allowed by the AFSK demodulator block. The *Baudrate* option is used to set the baudrate in symbols per second. The *Sample rate* option specifies the sample rate of the input. The *AF carrier* option specifies the audio frequency in Hz on which the FSK tones are centred. The *Deviation* option specifies the separation in Hz between each of the tones and the AF carrier. If the deviation is positive, the high tone is interpreted as representing the symbol 1, while the low tone is interpreted as representing the symbol 0 (or -1 in bipolar representation). If the deviation is negative, the low tone is interpreted as representing the symbol 1 and the high tone is interpreted as representing the symbol 0. In this example, the AF carrier is 3600 Hz and the deviation is -1200 Hz. This means that the tone representing 1 is at 2400 Hz, while the tone representing 0 is at 4800 Hz (the signal is actually 4800 baud GMSK). The *IQ input* option enables IQ (complex) input. .. figure:: images/afsk_demodulator_options.png :alt: Options of AFSK demodulator Options of AFSK demodulator Deframers ^^^^^^^^^ Deframer components can be found under *Satellites > Deframers* in GNU Radio companion. There is a large number of deframer component blocks, since many satellites use ad-hoc protocols for framing, so a custom deframer is used for those satellites. Deframers take soft symbols, produced as the output of one of the demodulator components, and detect frame boundaries, perform as necessary descrambling, deinterleaving, FEC decoding, CRC checking, etc. Here, the most popular deframers are described. For ad-hoc deframers that are used in few satellites, the reader is referred to the documentation of each of the blocks in GNU Radio companion. .. _AX.25 deframer: AX.25 deframer """""""""""""" The AX.25 deframer implements the `AX.25`_ protocol. It performs NRZ-I decoding, frame boundary detection, bit de-stuffing, and CRC-16 checking. Optionally, it can also perform G3RUH descrambling. G3RUH scrambling is typically used for faster baudrates, such as 9k6 FSK packet radio, but not for slower baudrates, such as 1k2 AFSK packet radio. The figure below shows an example flowgraph of the AX.25 deframer block. This example can be found in ``examples/components/ax25_deframer.grc``. The example reads a WAV file from :ref:`satellite-recordings` containing 9k6 FSK AX.25 packets from US01, demodulates them with the FSK demodulator block, deframes tham with AX.25 deframer, and prints the output with the Message Debug block. .. figure:: images/ax25_deframer_flowgraph.png :alt: Usage of AX.25 deframer in a flowgraph Usage of AX.25 deframer in a flowgraph The AX.25 deframer block has a single option that indicates whether G3RUH descrambling should be performed or not. .. _GOMspace AX100 deframer: GOMspace AX100 deframer """"""""""""""""""""""" The GOMspace AX100 deframer implements two different protocols used by the popular `GOMspace NanoCom AX100`_ transceiver. These two protocols are: * ASM+Golay. This uses a header encoded with a Golay(24,12) code that indicates the packet length. The payload is Reed-Solomon encoded with a (255,223) CCSDS code and scrambled with the CCSDS synchronous scrambler. * Reed Solomon. This uses a G3RUH asynchronous scrambler. The first byte of the packets indicates the length of the payload and is sent unprotected. The packet payload is Reed-Solomon encoded with a (255,223) CCSDS code. The figure below shows an example flowgraph of the AX100 deframer block running in both modes. This example can be found in ``examples/components/ax100_deframer.grc``. For ASM+Golay decoding the example reads a WAV file from :ref:`satellite-recordings` containing packets from 1KUNS-PF. For Reed Solomon decoding the example reads a WAV file from :ref:`satellite-recordings` which contains packets from TW-1B. The output frames are printed with Message Debug blocks. .. figure:: images/ax100_deframer_flowgraph.png :alt: Usage of AX100 deframer in a flowgraph Usage of AX100 deframer in a flowgraph In Reed Solomon mode, the AX100 deframer only has two options: the *Mode* option indicates the mode, as described above, and the *Syncword threshold* option specifies how many bit errors are allowed in the detection of the 32 bit syncword. In ASM+Golay mode, the AX100 deframer has an additional option: *Scrambler*, which can be used to enable or disable the CCSDS synchronous scrambler. .. _GOMspace U482C deframer: GOMspace U482C deframer """"""""""""""""""""""" The GOMsace U482C deframer implements the protocol used by the GOMspace NanoCom U482C tranceiver, which is an older transceiver from GOMspace that is still seen in some satellites. The protocol used by the U482C is similar to the ASM+Golay mode used by the AX100. The packet payload can be optionally: * Encoded with the CCSDS r=1/2, k=7 convolutional encoder * Scrambled with the CCSDS synchronous scrambler * Encoded with a CCSDS (255,223) Reed-Solomon code The packet header has flags that indicate which of these options are in use, in addition to the length field. The U482C modem uses AFSK with a 4800 baud audio-frequency GMSK waveform. The figure below shows an example flowgraph of the U482C deframer block. This example can be found in ``examples/components/u482c_deframer.grc``. The example reads a WAV file from :ref:`satellite-recordings` containing a packet from GOMX-1. The packet is demodulated and deframed, and the output is printed in hex using the Message Debug block. .. figure:: images/u482c_deframer_flowgraph.png :alt: Usage of U482C deframer in a flowgraph Usage of U482C deframer in a flowgraph The U482C deframer has a single option, which indicates the number of bit errors that are allowed in the syncword detection. .. _AO-40 FEC deframer: AO-40 FEC deframer """""""""""""""""" The AO-40 FEC deframer implements the protocol designed by Phil Karn KA9Q for the `AO-40 FEC beacon`_. This protocol is currently used in the FUNcube satellites and others. The FEC is based on CCSDS recommendations and uses a pair of interleaved Reed-Solomon (160,128) codes, the CCSDS synchronous scrambler, the CCSDS r=1/2, k=7 convolutional code, interleaving and a distributed syncword. The figure below shows an example flowgraph of the AO-40 FEC deframer block. This example can be found in ``examples/components/ao40_fec_deframer.grc``. It reads a WAV file from :ref:`satellite-recordings` containing a packet from AO-73 (FUNcube-1). The packet is first BPSK demodulated and then deframed with the AO-40 FEC deframer. The output is printed out using the Message Debug block. .. figure:: images/ao40_fec_deframer_flowgraph.png :alt: Usage of AO-40 FEC deframer in a flowgraph Usage of AO-40 FEC deframer in a flowgraph The AO-40 FEC deframer block has two options. The *Syncword threshold* option indicates the number of bit errors to allow in the syncword detection. The *Use short frames* option toggles the usage of short frames. This is a variant of the AO-40 FEC protocol which is based on a single Reed-Solomon codeword and is used by SMOG-P and ATL-1. .. _CCSDS deframers: CCSDS deframers """"""""""""""" The CCSDS Uncoded deframer, CCSDS Concatenated deframer, and CCSDS Reed-Solomon deframer blocks implement some of the CCSDS protocols defined in the TM Synchronization and Channel Coding Blue Book (see the `CCSDS Blue Books`_). The CCSDS Uncoded deframer implements uncoded TM frames. The CCSDS Reed-Solomon deframer implements Reed-Solomon TM frames, which use a Reed-Solmon (255, 223) code (or a shortened version of this code) and the CCSDS synchronous scrambler. There is support for several interleave Reed-Solomon codewords. The CCSDS Concatenated deframer implements concatenated TM frames, which add an r=1/2, k=7 convolutional code as an inner coding to the Reed-Solomon frames. The usage of all three of these deframers is very similar. The figure below shows an example flowgraph of the CCSDS Concatenated deframer block. This example can be found in ``examples/components/ccsds_deframer.grc``. It reads a WAV file from :ref:`satellite-recordings` containing some packets from BY70-1. These are concatenated TM frames with a frame size of 114 bytes and differential encoding (to solve the BPSK phase ambiguity). The packet is first BPSK demodulated and then deframed. The output is printed using the Message Debug block. .. figure:: images/ccsds_deframer_flowgraph.png :alt: Usage of CCSDS Concatenated deframer in a flowgraph Usage of CCSDS Concatenated deframer in a flowgraph The figure below shows the options used by the CCSDS Concatenated deframer. The CCSDS Reed-Solomon deframer block allows exactly the same options, except for the *Convolutional code* option, since all the other options refer to the Reed-Solomon outer code. The *Frame size* option indicates the size of the frame in bytes (after Reed-Solomon decoding). The *Precoding* option can be used enable a differential decoder before the Reed-Solomon decoder. This is often used to solve the BPSK 180º phase ambiguity. The *Reed-Solomon basis* option can be used to toggle between the conventional and dual basis definitions of the Reed-Solomon code. The CCSDS standard specifies the dual basis, but the conventional basis is frequently used. The *Reed-Solomon interleve depth* option can be used to enable decoding of interleaved Reed-Solomon codewords. The *Scrambler* option can be used to enable or disable the CCSDS synchronous scrambler. The *Syncword threshold* option can be used to choose the number of bit errors that are allowed in the detection of the syncword. .. figure:: images/ccsds_deframer_options.png :alt: Options of CCSDS Concatenated deframer Options of CCSDS Concatenated deframer Transports ^^^^^^^^^^ Transport components can be found under *Satellites > Transports* in GNU Radio companion. Transports are designed to implement upper layer protocols. They take as input the output of a demodulator, which contains physical layer or link layer frames and process it to obtain upper layer packets. Some of the typical functionalities implemented by these upper layer protocols include fragmentation/defragmentation. The only transport available so far in gr-satellites is the KISS transport. .. _KISS transport: KISS transport """""""""""""" The KISS tranport implements fragmentation/defragmentation according to the KISS protocol for packet boundary detection. Its input should be PDUs containing the bytes of a KISS stream. The frames are joined and the KISS stream is followed, detecting packet boundaries and extracting the packets. The packets are output as PDUs. The figure below shows an example flowgraph of the KISS transport, which can be found in ``examples/components/kiss_transport.grc``. It is based on the CCSDS Concatenated deframer example described above. BY70-1 sends frames which contain the bytes of a KISS stream, so the KISS transport can be used to extract the packets from this stream. There are two Message Debug blocks that can be enabled or disabled in order to see the input or the output of the KISS transport block. .. figure:: images/kiss_transport_flowgraph.png :alt: Usage of KISS transport in a flowgraph Usage of KISS transport in a flowgraph When the example is run, the frames at the input of the input of the KISS transport look like the one below. We see that there is a single packet embedded into the 114 byte Reed-Solomon frame, using ``c0`` KISS idle bytes for padding. .. code-block:: none pdu_length = 114 contents = 0000: c0 b8 64 3d 00 12 00 00 00 00 c8 3a 00 80 00 00 0010: 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 0020: 32 32 32 32 32 32 32 32 32 32 32 32 32 32 ff c4 0030: 00 1f 00 00 01 05 01 01 01 01 01 01 00 00 00 00 0040: 00 00 00 00 01 02 03 04 05 06 07 08 09 0a 0b ff 0050: 18 21 00 00 db dc 4b f7 07 c0 c0 c0 c0 c0 c0 c0 0060: c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 0070: c0 c0 The frames at the output of the KISS transport look like the following. We see that the ``c0`` KISS idle bytes have been stripped. The KISS transport can also handle the case when a packet is longer than 114 bytes and has been fragmented into several 114 byte frames. .. code-block:: none pdu_length = 87 contents = 0000: b8 64 3d 00 12 00 00 00 00 c8 3a 00 80 00 00 32 0010: 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 0020: 32 32 32 32 32 32 32 32 32 32 32 32 32 ff c4 00 0030: 1f 00 00 01 05 01 01 01 01 01 01 00 00 00 00 00 0040: 00 00 00 01 02 03 04 05 06 07 08 09 0a 0b ff 18 0050: 21 00 00 c0 4b f7 07 The KISS transport has a single option, called *Expect control byte*. When it is set to ``True``, the first byte before the packet payload is interpreted as a control byte according to the KISS protocol. If it is set to ``False``, it is assumed that there is no control byte preceeding the packet payload. When using KISS as a means to fragment/defragment upper layer packets it is more common not to use control bytes. Data sinks ^^^^^^^^^^ Data sink components are the final consumers of the PDUs that contain the decoded frames. They can be used for several things, such as printing telemetry values, saving frames to a file, sending frames to an online telemetry database server, and reassembling files and images. The different data sinks available in gr-satellites are described below. .. _Telemetry parser: Telemetry parser """""""""""""""" The telemetry parser uses `construct`_ to parse a PDU containing a telemetry frame into the different fields and prints the parsed values to the standard output or a file. The parser uses *telemetry definitions*, which are either ``Construct`` objects (typically a ``Struct``) or any other object supporting the ``parse()`` method in case more complex parsing behaviour is needed. The list of available telemetry definitions can be seen in ``python/telemetry/__index__.py``, or by calling ``import satellites.telemetry; help(satellites.telemetry)`` in ``python3``. The figure below shows an example flowgraph of the Telemetry parser block, which can be found in ``examples/components/telemetry_paser.grc``. It is based on the U482C example described above. The packets sent by GOMX-1 are deframed and the the Telemetry parser is used to print out the telemetry values to the standard output. .. figure:: images/telemetry_parser_flowgraph.png :alt: Usage of Telemetry parser in a flowgraph Usage of Telemetry parser in a flowgraph The beginning of the ouptut produced by the Telemetry parser block can be seen below. .. code-block:: none Container: csp_header = Container: priority = 2 source = 1 destination = 10 destination_port = 30 source_port = 0 reserved = 0 hmac = False xtea = False rdp = False crc = False beacon_time = 2015-03-31 20:57:01 beacon_flags = 121 beacon = Container: obc = Container: boot_count = 573 temp = ListContainer: -6.0 -4.0 panel_temp = ListContainer: 0.0 -28.5 -26.75 -13.25 -28.25 -20.0 The options used by the Telemetry parser are the following. The *Telemetry definition* option indicates the telemetry definition object, which must be an object in the ``satellites.telemetry`` module as described above. The *Output* drop down list can be used to select the standard output or a file as the destination for the parser's output. If a file is selected, an additional option to select the file path appears. Telemetry submit """""""""""""""" The telemetry submit block implements :ref:`Telemetry submission` to several different online telemetry servers. Its input consists of PDUs with frames, which are then submitted to the selected telemetry server. This block uses the gr-satellites config file located in ``~/.gr_satellites/config.ini`` to configure the different options of the telemetry servers, such as the login credentials. See the :ref:`information regarding the command line tool` for how to set up this configuration file. The telemetry submit block has only one option, which is a drop down list that is used to select the telemetry server to use. Hexdump sink """""""""""" The hexdump sink prints PDUs in hex to the standard output. It is a wrapper over the Message Debug standard GNU Radio block, so it uses the same output format. This block is used internally by the ``gr_satellites`` command line tool (see :ref:`Hex dump`), and can also be used in custom flowgraphs instead of Message Debug. KISS file sink """""""""""""" The KISS file sink can be used to store PDUs in a file using the `KISS protocol`_. This protocol is a simple format to mark frame boundaries. Files containing frames with the KISS protocol can then be read with the KISS file datasource (see :ref:`Data sources`) and with the ``gr_satellites`` command line tool (see :ref:`Specifying the input source`), as well as with external tools. The KISS file sink block has two options. The *File* option is used to select the path of the output file. The *Append file* option can be used to overwrite or append to the output file. The KISS files produced by the KISS file sink store timestamps as described in the :ref:`KISS output` of the ``gr_satellites`` command line tool. KISS server sink """""""""""""""" The KISS server sink spawns a TCP server that sends decoded PDUs to connected clients using the `KISS protocol`_. A number of tools can act as clients using this protocol. The KISS file sink block has a *Port* option to specify the TCP port to listen on. The KISS server sink sends timestamps as described in the :ref:`KISS output` of the ``gr_satellites`` command line tool. .. _File and Image receivers: File and Image receivers """""""""""""""""""""""" The File and Image receiver blocks are used to reassemble files transmitted in chunks, using a variety of different formats. The only difference between the File receiver and the Image receiver is that the Image receiver is able to display image files in realtime using `feh`_ as they are being received. These receiver blocks use *FileReceiver definitions*, which are classes derived from ``FileReceiver``. The list of available definitions can be seen in ``python/filereceiver/__index__.py``, or by calling ``import satellites.filereceiver; help(satellites.filereceiver)`` in ``python3``. Classes used by the Image receiver must be derived from ``ImageReceiver``. The figure below shows an example flowgraph of the Image receiver block, which can be found in ``examples/components/image_receiver.grc``. The example reads a WAV file from :ref:`satellite-recordings` containing an image transfer from LilacSat-1. The WAV file is played back in real time using the Throttle block. The Satellite decoder block is used to demodulate and deframe the packets. Since these packets contain a KISS stream, the KISS transport is used to obtain the image packets. These are sent into the Image receiver block, which will print some information to the standard output and when the beginning of the image is receive, will launch feh to display the image. .. figure:: images/image_receiver_flowgraph.png :alt: Usage of Image receiver in a flowgraph Usage of Image receiver in a flowgraph The figure below shows the options of the Image receiver block. The option *ImageReceiver class* indicates the definition to use for reassembling the image (which is implemented by a class derived from ``ImageReceiver``). The *Path* option specifies the path of the directory where received files are saved to. The names of the files depend on metadata in the image packets. The *Verbose* option enables printing information to the standard output, such as the frames being received. The *Display* option enables the use of feh to display the image. The *Fullscreen* option is used to run feh in fullscreen. .. figure:: images/image_receiver_options.png :alt: Options of Image receiver Options of Image receiver The options of the File receiver block are the same as those of the Image receiver block, except for the *Display* and *Fullscreen* options, which are specific to image reception. Codec2 UDP sink """"""""""""""" The Codec2 UDP sink is used internally by the ``gr_satellites`` command line tool when decoding LilacSat-1. The LilacSat-1 decoder supports outputting Codec2 digital voice frames by UDP. These frames can then be fed into the Codec2 command line decoder. The Codec2 frames are 7 bytes long, and each is sent in a different UDP packet to ensure minimum latency. The Codec2 UDP sink has two options, which indicate the IP and port to send the frames to. By default, address ``127.0.0.1`` and port ``7000`` are used. The Codec2 frames can be decoded and played in real time by the Codec2 decoder as shown here. .. code-block:: console $ nc -lu 7000 | c2dec 1300 - - | play -t raw -r 8000 -e signed-integer -b 16 -c 1 - The ``c2dec`` command line decoder can be obtained by building from source the `codec2 library`_ .. _AX.25: http://www.ax25.net/ .. _GOMspace NanoCom AX100: https://gomspace.com/shop/subsystems/communication-systems/nanocom-ax100.aspx .. _AO-40 FEC beacon: http://www.ka9q.net/papers/ao40tlm.html .. _CCSDS Blue Books: https://public.ccsds.org/Publications/BlueBooks.aspx .. _KISS protocol: http://www.ax25.net/kiss.aspx .. _construct: https://construct.readthedocs.io/ .. _feh: https://feh.finalrewind.org/ .. _codec2 library: https://github.com/drowe67/codec2/ gr-satellites-4.4.0/docs/source/conf.py000066400000000000000000000112311414055407700200320ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # Configuration file for the Sphinx documentation builder. # # This file does only contain a selection of the most common options. For a # full list see the documentation: # http://www.sphinx-doc.org/en/master/config # -- Path setup -------------------------------------------------------------- # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. # # import os # import sys # sys.path.insert(0, os.path.abspath('.')) # -- Project information ----------------------------------------------------- project = 'gr-satellites' copyright = '2021, Daniel Estévez' author = 'Daniel Estévez' # The short X.Y version version = '' # The full version, including alpha/beta/rc tags release = '4.4.0' # -- General configuration --------------------------------------------------- # If your documentation needs a minimal Sphinx version, state it here. # # needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ ] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # # source_suffix = ['.rst', '.md'] source_suffix = '.rst' # The master toctree document. master_doc = 'index' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. language = None # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path . exclude_patterns = [] # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' # -- Options for HTML output ------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # html_theme = 'sphinx_rtd_theme' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. # # html_theme_options = {} # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] # Custom sidebar templates, must be a dictionary that maps document names # to template names. # # The default sidebars (for documents that don't match any pattern) are # defined by theme itself. Builtin themes are using these templates by # default: ``['localtoc.html', 'relations.html', 'sourcelink.html', # 'searchbox.html']``. # # html_sidebars = {} # -- Options for HTMLHelp output --------------------------------------------- # Output file base name for HTML help builder. htmlhelp_basename = 'gr-satellitesdoc' # -- Options for LaTeX output ------------------------------------------------ latex_elements = { # The paper size ('letterpaper' or 'a4paper'). # # 'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). # # 'pointsize': '10pt', # Additional stuff for the LaTeX preamble. # # 'preamble': '', # Latex figure (float) alignment # # 'figure_align': 'htbp', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ (master_doc, 'gr-satellites.tex', 'gr-satellites Documentation', 'Daniel Estévez', 'manual'), ] # -- Options for manual page output ------------------------------------------ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ (master_doc, 'gr-satellites', 'gr-satellites Documentation', [author], 1) ] # -- Options for Texinfo output ---------------------------------------------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ (master_doc, 'gr-satellites', 'gr-satellites Documentation', author, 'gr-satellites', 'One line description of project.', 'Miscellaneous'), ] gr-satellites-4.4.0/docs/source/images/000077500000000000000000000000001414055407700200025ustar00rootroot00000000000000gr-satellites-4.4.0/docs/source/images/afsk_demodulator_flowgraph.png000066400000000000000000000315041414055407700261070ustar00rootroot00000000000000PNG  IHDRWiY8NiCCPICC profile(}=H@_[KT :Yq*BZu0 4$).kŪ "%/)=Ff8jN&lnU"0z0L}NS_.γ9z@y?xz{oYs% ѣGOD߸qޏ7UUSzEŅÐ"\[+K;Y/7lezudБ##W˾ʦ(ֆP[[KQT4]GC?kU..)IY*qߗ24=r;B*N<k.ĩc*&dp^ RҙYJjvwym!J*Wߦ7>Snnnþ˜Qcyyғ>ru"ҌBDE>TV1%yTD%܏t4 +;cxO*ׯ>~hiJ+ܱRzy)1& ;M٢R:Ǚ2F?zԇکgbBaH7zu5M-- Yws2JHm4q4~>S'.FݺcP Wwj|t:"TUWݏ'(2v܋M3SS}*jꪚPPu#kqSxE^}z]]Ða⒓'`c㧞k/)-Cg.Jciqu #cXnnnQ!BOW/c4JJs8yxC{)9xnn2ƻ}g̙p[WW!32/]CRzZ 4&${apj4/)$4XE謁=ؒc5)$( !U BU+HUWw*<L,r_L>A|Le'AA!.rT ]x̚;̹ ݻ7KWyrVCl;:}<#3Kn;؁J⒢|b7t@..KBBi\\\s rn۷o?O0w )704? ?7k.,3!!i.c>}00uKk+O6{人qc&4PєWt[x+BQQV;s*b VƟ>UQ=ئ:e'.{lw5PvN2{ӆ""{m߹aᮛw޳MUS N4NgBC~ۋܲuv+>ӆ"m>ڜPc *d?0.o~G|qwyou7q6Ee_|ficK/ Jّa]b7T]Uf)[Iqַ`{?zæR^hsf-Zеjӹ!Bmiע./]jْO>4mdL$|"Gנ߭xq.v218𴄸䓧hhv׵'m(ULV^J D!Pyѵn붊Z lS[ q!jk&bɐ"q$5SSTҀ<ƭȸظ <\lK.ṯsֹ8S-cB!vt ##c" t49 HyF(/?񾻨|O175wHH*C qQz?^fV)U B!N_~6wWT߾s=QQsf-jr\zN)+8wᴷo_WUWUUW1h9φUU} ?wٶgi2$p&IK>qCZ3t6@!aXs`c廊 ʝ \|ΝSO%ѺkijG݈3q㈐s0ex9}~pOFՁ5뗅?h?,RQq1vp p[Q__o`,('7Z[5ͽ`޲󖱿%*}Ac}(mh,cpb߰1#ǍtG?ى$.{}8\XRcهXۗ|m @<;{GH .4DDZ `?@d"ri -s N@3c`?nD|qtp0n*/ߵKvCG22=F8掌RUęZZ:\ 쉈8DE;׵ғrKcԥ7aԼ܊Amߒ"17+^$Ey)cWĵkݖuYCFng./퍛8(((|j#SMYnd/#Ïy2&nnUI?ʤI CBl_2k_|9%5y|%Abҋ/,B#gc_}3 ʶw怜.,Q7QH}VlZxŀA&O~/‘ׯ|999^d9|,0F3xª/㭔<SRQAyf((۶cNB*и?df (Pcsrn *>SĄqSyyyyɳ~g~9v/ߕ%E'NZ3n4W뜢cG`ٰԴ\ N܏mYuu@쌊[X5uNObMQCS>^2RPU+݊~Fxͤ8~fwoQʙ)}eO^09-=2Bu*gOyYY9kЏ\J52i3Jj"$&&n?dNWS`<א=l5ONbnQP:;q<]u l]7ml_C]7骚V44S%ED*+؛C\ Nz^0y֒s UKH3U]nݎSyCu9g֢Ge1JCf..h?|N&=ԣ$(RT\h|+E5̬Kאw _dF̏u*B$tOa\Ea?/Ɍd/,wIenIR`_߾}}19k/xSݦu̬tCSh)_|u¢{]NY? r!j]7Kg4~v[EyU9⭧I ~mTaώn'YnT%X"8g@` 9PྪݮBq I~>~䮻^u>qUUK-~ phYYgoKX"1R`߾}M4ʞ5hL!ABpe1U쌐s.MM{8'.gdk$.gl;+;xA*")+0mXSwʼ$~ޤ3`fW^^3*y 8@r3y-]1y2|&KjAaPK)9!Ҍ<쌌̴[v"Tl*vJ72ƶ⸺p˻%uc*is/vuMՋ"3Ҫ ^>c!G YX"˸;s9:l ;2-Y0V7x8p#'x{.w_WW ciΰgBsx%˙b#CqDϞ OXۓmG}h6KŸ099ď0NH ;!!Am.GOzTG[e& ݺQlv;>:KVqdѽ~{y;t4`J6$xy:vu~fwޤP(:,sisFg)#T[G[?3 %y0{'7$kA =d(ȓie9s>Ou󖑣t@visdd)V]:|sTL.]WQU<-Ł}Guu4ֿ6:sjPp F!aA6F8 Ys'+%&%[ o d$̟ "s~~/nY'ħ߃d/Tn5G.}iӦ 6lmb;e\iyOMk2L w-;Z7/9>܄߁V*%%32NZ-)Kz~[}J+L|}uwwWPP8p`pp0{k~Xet]Ȣ9e.eشe͘QKߗlq):3%N ޺%΀:gȂ<=8%4yxCK|7Ykɐ"\d:^[U4U\W//*.46`Lܷ$jje}4[dFPO*`*xY| me4ʡ#~cblNPXZr\~fZ.w?iحQ=įE]Դfz?~(.)2鯝*+@jŪvk T5-ؾ}߁d9tFfCCBGjolF::PT~r 5=}tQQӧWTT}A匦;ù_eTU9zs+zZZbbj|f`sq;KnO}Q\8/KѠTJel0κ˴YD`g*W48F\mP9%=d&Lq.}_sIxiRA<쩫j_$> ?v32уa1zwsr_^wSWLeNָ1R e_<{?V#'';{翮,/Ϟ.]%x3S+*ʏ;#wznMޫWn6s41[=N[~*||eeoގl5G޹Q?L<+$4N¥LnhE0< /,̸ύn AUV ~Xtc} -KH7(2k*I )+rKcPN/L[pɐi)dl>!i~-KEbnVZ!ǹ;M-KEksf~AAKVjwZL 9dEu5V4.SungofFx|{I~˗Io{(NC''&aoq1]n&3BBa'vZ Za`!Ļu޸u^OrTHҌ :0sF&{ gOv^sδio̸uM}&&%,]1,}ЭkS!m۲;qd=S(+Kax,&VO3r~bͤ8~fwo%*g?"IDAT=zqێlin:\΀U`9Er?F&GNp>$F 0245c1vܽL>v`jj sSVCk;DO8s3K+K#)+vwFI2uN#8l|1]z;t/C6*i)TcC=d.`!4|T[_a<HYZX&뵴tY_BWvAy DʯyiӦ?իW7no鋈g8 Txȼ9K:sG(/X3M✜}pwBW;;'=>B?#jp,p'; 4 :`n//80MLea0c^+)dS='ķlj \B5ߛ: #h*̲qDZ64Y3""{<8PՒ!S`OC; 4Mz$F:lڞV!ML|)%QQQ~h<̒]s(~fjYS9ÞX);hkӴ)ϝ?Z?ٴ=w!BʑOrvȃߙo&PHldcm?jx`>e'ЮM=wضEʳN6q a^_g>w6j-e:eoN0дe;ۯ |TEQM|5խ4PFRiK^wcW@'?oo`a4JwvzO{˫^T_óߍ$+ߍJD߽[!Zį5PT;z䄓9g?{YE_.4,HJRBRE->S1;?>zp="6>EQ7"ߝ2ZVV.ٛR5neZmZ ;@w`]%fzwo@fV: cI {ˢBLqc +ӕdI֯ظr/*R- )%&lȸGRSSφF@O2ÇW]d Øc Z,铛i'_$fr|{cv%y%Uc { 3ff-'O1!je_̍ڋ?վ(rA@11ZFf:W M҆B dOi$%ڇc@g >Fz)nD}3ZQOgO]%Ԣ+D{X} Ȑf&xfGO :PQQ^_____ - =d-G:tܒs<>^>2 v2mn~{_u[3#8[ƌun!a\\\L~zLeo7t綽ɫ} ȗ@{]tV@~Pr" R~{g͝I_0~=2{q$!ԁz^ Fom ?@0 wv-Q0/e~GB׹dMލ(b֊Iu1}sU`0!BpiYc9!juM'Sig*rV${T7 "52<}& ZJ wмSfcBVH),Q.s[a?dˌbU >ONpL샻g,v^J?~ r)c D!Pj<ДcʥbFH hS__쩙ѽ~CjoIm۱kABX"ۣqs6L9{f݆ 6Sh(d9c/\,~FmY=P5_k'!!1PZZd SSp#»CT=鮯7 ]>:}8fb s^jeAa y" l1'xY٣2mm*cKE^~B8y!K kox,0exwb@=Ꭲ@PY\oFh!wZ,/!Bu!BX"B!B!V!B@B!ԑ=u<ŅB@BF#BX B!V!B@B!U B!*!BaB! D!BX"BF,[ h3IENDB`gr-satellites-4.4.0/docs/source/images/afsk_demodulator_options.png000066400000000000000000000461041414055407700256130ustar00rootroot00000000000000PNG  IHDRV-iCCPICC profile(}=H@_[R+vqP,8jP! :\MGbYWWAqrtRtZxp܏wwTc P5H%B&*_D0L}N_.Ƴ9z@ xRf>Iз \\4ytɐ)@ӟgMY5q pp({{9rΥ7 pHYstIME  +wpEpF-ۏ='Hݔ-;~&x1%Upt0oG !$\.p nsĩ\_wo˟jUFfVFfD*}w0z\~U9IL&N_+)*.IAGw1ܧ᧟5dQ}qtp(j],MVkwؘQVV!QÆ5=0n>=of#fe~<~Pl?ƏYߏ\)ʞ];rFuղrDpt(.Ѧge9;窱Vy܅J`kk,JeaM+s󬬬C|F)9%5=3B.8Go'HFKYY6~*UDXym]Ծ]yEEzVKu~Ha4%_ʩtof~`u[w5 m[0f-}}v2<$X[Z`ٺEUt⹊Jo6Ze2v걺_KZ!K/\JyVs c1nasr&B<ѡ Gǎz<Ϣ݆JJm l_+ٰi˅K.Nje_R?nvqg''!!-lQPPMk^lFVMDc2w?u&7_m4MFӱze)?_!DZcn7VVV^BuAT*qW).OTsS._-*.8XV^.?u&B*7_mٍɗt&)9򱓧owDL'((,,і !<}RjyENy1XZY9yyFH#'**+z}FvΥ+7챺IheeeqqvrqvH%u\k?9zTihצybB[W/|%ߎ!}=0?;'ixB4 _[UUU'O Ηp)GGt5o2IЖh[wڼ='uh4f !|T^gUTV5n%|M钬ܣ'NY(]mml**+s~*oJ|̥Ft:]Nr%-rZVNnDXeq'QFaǞFISpUd0AM !JJ$IqIy];utR(JKvn^qVQW҅RhBi*!T"1Q J$?Ur\UMʺx)ʲʪJ$Rں|WHPyYBKkdu^W﹯`0\`oS&9::o6B(ٹyUUU%n.%orܞlc8yQ+?.ܶzdzt3K89s)˕F8uf׾5(hd2`4G -"#i$R0j*9r:?+'`0ٹ !  !..j͕L_I.ݨک-4(}iYy{x1P˚GkVVr!TRր[+[9@?="Qy7oxνU^{P8:WXf jjn"Mk!`_-uR5Ǹ3VVO>>A7i&NgL&ƻhz!;/ɱb\-p/,*6r9vvR(Kڳ/!|_kKRUD3!DEv\_%\Jl259;;<݄F)3+IJea`0WTge]N0Q8:X+3'<huwvrRѷVamm///-+3#rIBKZy5s}prع&==uok ._hpT_}{- WҊKJDu4`^׭.40@"Tt?fϿܫ>5R$^BjMFfVnJӞꂂkJpfk3d2YFf쌓W坙sRjzVT*---YPyye9~]j4KJt*o/' .Pk kikkӾu+Ko/ϜܼS RSIPyyJD"qwSed^Jrj?o-?Tf\?p7{zc;kSQ]ε n>Z}}TVVV66MfNẓ=N'MrE5~Ԉzo,))]]SpaCUfdf !ܔJK !TUU۴p7W #BC9"K)g'E6Y99A7?mZE8:WVT?hnжUxHZSP\\`o,4\pDb%;)AM{vǐcǶCjKKM|Du0bm.H**+"[dcz7pdE%?<֚ڵsn"SVBfJ5         " ypU TKAf h̿QcIvQ^V*nׯ>QxC 3 ; FS=@NF_wo7& ÃsK_vx^5=}<\3d!>̓QX1::!GRf=@=Jd2bRS͍~,vА=z?X|]TgFc`O>y:%5u=m%%%5G[r&3|wjf3cٲmBSPWzz:߳Ro8k!ȕܺyhʷlӪfP`+\]\~ܼٯmdccsFs3g 4_f>6v'V/|Y~yɢ-""&iYmڴ޹us`guҀN&?;nܯR)<K Fe69p:KGx_eLBqͼv {UUUˡ<='++{TR/-tswn;"Damm;,?qyDXyhHa&Iaggҙ/,*BxzX֣)(z(-=dSuI,5?h~nG[덦*QZ$B&ᭂE jYBF`(//߹{wիMjM?"J?\w[f[ޏ\w+#]wOLz|̛?cC.Y`чK^?=uj8ߌ{ŭfWI.1Bs島)2L*"IYVag@_4hFZK?/]F|G(E@@@@@@@;%J?WsY98<2ȭ3"}W>m, U%u;469!+#Mk+vPQoοR" 2G iT 2 ת9J66W~Qb +Ƞ7vK7]sT{[m<_Iq2΅q)KاkF%///%? zU~)YiD`UPԂL     C&%q]?q$Lzjj=Fǔ'7. 2{UUxzLv`O?pҜGS4N}[sr|^vdGeBK6ht"S5JRrLLr {dkmOjCҢi];aɆf'2N~HM?Cs]Ι鐗.F㜸+/jЮm|xhUXT4~Xkk!D.[e[n+*.jd 3:DF !cM}r7~V?:|ccǼuw߱33fU-l/XYYܨ`ނGڌ3f¸*:cܽrݓwh??Jԩ:9MY5{+:WSVqJ]o4߿Sszvڏ췞ӧ?}|·{=ގyf=~:57yO%lҿ{Ϗ W8Ǻv_άweUN&_o\Ph纵6/2'螋M&B[.4g>>>֯...yWP`+7zgRYYin߻_nXf-f3(.*a&˲$|Ų kXjM&ӌwnݼϿr?qb/\u՗f}xaMu[9eF١NODEĄ7itvl S, -[i>pzVvnqRe-vB kٴKÉƣb›H%Gz6mQ{uk vsӧJ\OZ ^՗+V~̬QQ򲷗_L_<#biiᡡBɏOtqqqqql6,4$,4D;׹,;zys >\Ԕɖ.$''|2TRy5r޽ݺvcnj3ړ[]#'t޷"5 :Zy+-ӭUn OWt=_T7\fcjA OZ >*+/(W[o?He֫5L.,U_mmmjLY馬nwswWkn.;;G 5|SӅ]WVy+}dSNޞte2tW۟|v/e]gYA%JZ=Z h4Yf` ?bk%YϦ-U:!J{[Zxx2dEBXyhHa&W,\Q#̄^ GǍ߯3_b=J!{ ӧˏy:kgGsBI˫1fJ׵ikG6rK;Υ \Ն3>[E˕UUiC-Zm!OffejW~իW \ul>5 Y'eeF1%55zVUמ(oyNd?uI"AnNVr[kW9%C )⹻<q3Kճ@W/Yťev6~Ō͇֞)>|%w_s@MV8;9uzgB4h/|T[Zml>\:p*.0SYU]{Ĥ/\μ3O1t-pޗ觓J]ˆ1~ΎByqom:rtY[_vdnBW,k3{ަ~jowqwHVq}w[nIYVag&:߲|r8>yhb%lZ<4 f# x`.Wvyxp:xg۹3z{Z- g4 @@@@@o+J ~ԯPXQ3]`#n+d*z  l\U`HK{ԂPW6ZR͎;BMNH* ]*T󯼬<@(ayy j͕w$~' 2 ]$( zUBOWbDs!z\ 2i"QK2}_J|VFبhmp3D E@@@@:bY4^FsDK^v8rAS:VJʽ:s?]ʖK%{=9P*!8iMiE  q]@xLѽ[Ƕew6)mS}iv~O>:C[ F"PӍv?<uJ!-_ukq3L4xuUm򤣣Á}5O[[Y2 2Aeg:6L{+,ZjI[u\9&|Wצ*Gy2*aBjޡ~uD@xlٶu˖Cܼm[v+O"Z*?_W{vomnets ͍1\5#ƌf!SSPWz{yW=3LÉIWgm-lbp!8&LuZx){Tmۆ gycG`ьgտD"Yh b2zٮmfb?G  WR钅 }tU:]`S6l0KNI]צ}"=s|ƦCTnwqBL-7MYE ՖeRI=IJB;{A?|0Zn|26u;B,"@@@@@@@q()TӵpJ?NJh| zEqL_EouA~T ibo6ZƺYCZ[FEUPT(7_yY)x#P4*rk%+?(1IROdPHP.9ν- 6$8Bd%T D`@=d*4"Q*fjA&@ B!g ݖ}>r2Nv\/}Z9e~uiEͻ^ee[/ܰim:F}=4[]Sx{uokf^372UA>smCMЮ3ǯcn_ukq3L4xTO;4wccg,N-x[Zà ݘ!Bcڏ=edc]Y?̓QBU/emϤLշw?`Ͼggҳol!]+X^zٲE-\$jm~AC:9jcBwh??3v-۶ל9-=ct=t]{ˠ~WIx}[?2+6Vryp2K+rJn]<SDp?_'M&ӌwnݼϿr_LC !F{\<(0p=rċ_|Ynn-^ySh4> [ڿsǜWf;Ο7ߕp6qW_~]J坻4EI'p Dh* F^ o80be\ǹ1 !L&!\3[]P4 W;99egtaƘu:]xXl;w G1ݲmuT&WyjOOLfR]JI1O8;'lll 9?afu5U:?s8 !2V&,K=jI_ٮL*U8:n~D#,pin^V/]i-^А`!D!L&B*Nភg0)ϱƪYe0:rAVՏ ᭂE jIBF`߽wߌ_ݫEDDXhϒ?)++7) g !\]];o?g۾>>AMkG-o"̬,sR隞^ׅ"5sS}|^?yԵo+6'ԅBܫ'J$F̟7%M,,u(޵G_yh-7`v:R       q8V*ZBcEyZNw4>~8O7 r댠@_?UtOjK-uImcݬ!տ)w6*䄬4ڥBE9J@ P|QYT\i.99[Zm<\ٹX( Zz(f b_' llJV%rץ˾=98[^`Q( z rs27F"X'eD E@@@@< z. w 'vIIڿ!?#pvܱsרquҭWL_\|{zTo۸}l :8Z]}~q'K]^ᒩӦK++\^Am򗖯sAl/*lx1gHNvosd!Ŝbo\m^TwLeUO?ܳ}8::5 \wԚ2oU1i}`~˾j)Fyy:.Z1Oh'WgeFuF0X3EI=TJ̎{Cl{wOSG"NILL*..Km~=|&ׯKIsK3 _l5+Vg 4 6oj|/p^Bw͟1}ڈCəW؊Փŋs넿R+fP{';X[h+E0U !QQd /'+\;\HJB;ζK>Z~ltLe$$81w;qƎhJ%SOG_L_Amx?     qY~= D`?5]P^/o?"Q,o4o4zws̆ŗr2҂trIoοR" 2G #fJ4:\EW@-"kU*":3RVf:f- Eo0h¢[[m<_̴Vwp=i20/1lTlkQ%+NU4"Q18WQԂL     O~Om|Y!{5~±x˂WIx}[ܞ:62Y4/~gCV5u˾j)Fyy:Nge[k%ݥϖ}Hl.^Nܞsm況D j|ҹsjOLl6Omq;wM~|od۶uboo;׹,p~1}ݔJT:bPig:n(\.;=1y!DbRRQQ'HΝ:v#vmSRf<3Z;j䮽{oǎ)d2ٸѣwUvYɵ$***_|}|<ඩ@gZ)ɪGbvws3Oں՘.++,~yl۾vzF#IՅ1O[*r?_ߛ?kז醍cntaa7ynqswWn=+vCCGrZZn^|9WWWp#yD3B{C-&=/?`0Yٞ:IKOhe !f2ýrSSPpK)Xq$I]3" !233=ݫKlVr]C:xPaaol^xG- <7EK>a&Z]RRgwѬ+zSv?&vV[jkkDYYt_ߺUa>K>h4I=o^ZXTcxTtMOϨ[K))'O6 vvr,܍*Pa_fEvvvZxr$Ttтw_Zw7_m.n=~J\_K.`ZݭoGR钅 }tU:]`S֚g'{GGO8Ĥ/\μ3OTҷ{ee_aemݱ}䓓&ERVB;[tLe4\oRYDHwXD +n};w @ZȚlTTM%tDW@M*U"Qlru ?ɐ GgsmT Ut"+V57_yY)x#P"""""""""""""""""""""""@"""""""""""""""""""""""@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                        D D D D D D D D D D D D D D D D D D D D D D D ]f2脚$ v': D p%R5r7Lk/t4r?ɤ-./+!5;8*=%I :7:ͬ ?k)M:f]KK$o&y9nӄ*?򯞗*?PEw!&SYAĥ^rP8jjtڭvŕΩ]R@^B::ciigDqxTݺN St zNU 4nfؼm۩3g hn;w`ѓ8n=;gnG o|#ǎ:G=ؘJ;gT&6ؾ}d6`?;T%ncص\ouzKiSt+3{v^zymi٪5ko; /nŋ`6m[7T@C.o߇s]yآyWA +WصjaJt`0|;wkKK>7!AB)ֱ} /$_v:}3~uܵMiNN^=O2ڼx.$_:yqc&svڢ>XM&hlФcEE&a縺tx)%IWWCookEb^in|}jFceeեST`@@e7oߦU+s?qŊ 'C_x¢"M:v05\ IDATȶmڵisۏb G2oGvDಯ޵wK3_ |{5z'󖧇Ƕ_zeR6n^y7[o{G7fd*/+& ˙`'M/J6nz>^Hs_U4 {{[Tq {l޺m{[[[Z1@;rypP-(HHLWz}ǎ|ѱ~?t-,*6)dY[Zz_mN[o׮zgy$_>;S(3 ܽ2v۵Ot0޽z@W&Q^V_9K(7kN;TTTÛҼYu G~?f^O[6(/-9m֛0 ^o(jKKI 8C6J͚'e7zخmEy\.=v[;-++d2j7MWl>-[4(+קArƞ;nHpХԚZ4 @-hx|]+tvyi`?iDxx??B~}KE6m'H ΜM,.)Юi/ս[zVNkݲABQYUU5걉5אknh0! z}HpPzfu6p_~u!9D+PxߤRx~\bԱk[ zgg⢿ѷ[YQ+pS*쮤5mjW.nJ¢:bRj?rZBX[[ruuFwM{gYm==u5_ z} WT!diUU !t*̺*G-{_|C[Jǟe"VVVw$IjڕАH%Hkn\5ZߚIt;+*+X夜lT1hܱsWDfigk{;D Аt}fZ/\geeuws*0P&?pOtkזTssTJnc++;h⸱r411IEN E߭H5EŅEEt\oAVp)%W斲;w !r𧳳T*nZ#3mr_L[UϹ-Pv69$݈LqNsS 2dsnY.fG5 yFm,*ؘ( |>\A^4m/;߹!d7aDxeqߦTQ!7~&BsQfƱ %7|VLD5f\{woؾsWEYizz,GOԉXk ̦X {Ν%,渱#DoOr#3#㬷{+~zݭ.e4 MvYQ3- v_#GO> hlG~;^V׷PJ?r -\`G6䤤5]'VGltk}'l$joUԭnzZJۚ5+t: W=eFS V:~,̈ĿHu֫e }O噵k[o%CȜz?ݻ8pOgϞe@<#<__d> y9:zOO~z`@ipӧ|9~U_|kp;~_箻zgg/_>q5\cnVorii''o}رc???C?C?}x1`|_׿畯|Fc#9_W][9^W?mm\ZZbyk_{С}L/~=y*`޽3w~w~#x;/~{#?#vz{;[nmm ox1-oy˗o|Ƙy_k׮{|S |0 :я~ĉO?WrСGu]7c׮]x+Ο?o?-7|-/~_/w}w|gj||3g+?O|<̿ۿ}wwO0/?=ŋ?oywҥK̓5rU / ŋoco]x {~_7o{~;w{9|ݻ}W;|//MooOoVc̗啕zIT裏c>B9w\/{ҥ׽uǏǃn@B~/^ߏzիA0W?~nǣr`?EEEEEC:ٳg;@ `@ `@ `@ `@ `@ `@ `@ `@ `@ `@ `@ `@ `@ `@ `@ `@\C8pPXuΞ=;o,!                Ɓhr@s#f!P4XP4XP4XP4XP4XP4XP4X'[[fm\{Y[3Ǐ zckq9q¼9q9767w^ q9r䪿B8Pϣ>jhbm͜8QO0fsӜ֖㎝>q9b::ggXl @/ `1Ǯ987DՌh$0 `A*qn6㉪,Hl#X h+G/ ,He>͆b r ,`st#N`<9W jfc1(!@ t# w^5CD J~$kH#38u tǠG42 X' "=0K>ݏv idٳgiG5w}I?n67ɓ榛f+SLsZt̉< ~ Ν;G r>å!#=XP:ok^C'F {,z)sEh08{a2B*;oϽ@yjES` ĠJԶyYs9T( ) T!LeT:v={(4?ʆ,֔}0@knh!MСN`PS5ðC A[[Hl>%:]N֔bb,8 ) b !B*q`ǂNǓ5" )ېtcʖla1A%XsbR zt:)g&~ نĝ=Svuu0fX^q%Q[J|^ޡ Ġ. quI7IsMfskAkK/]}7IgvȑyKgCv_Vmou/گ?o^ a"x`e-)#1 G6i6$cmqsa -ys,<$Cfj<2g͍7GJ( =ĘXLXIlsάKO {,V"x`Я7S3|23 1l  b8j36'YƛoyKacH|Kq@!]{-(,z3i>\j@1ۜb+<`~1$Nta7O+3PTp$s2˪b$>ՀZc9>jK,PR\|{`b8Klb0scƔ_NsJ)㸢8=x`%@Z8Bb8K%S8vgk~mB ~dQgϾ|{s-z"q=F@R О}#+}>=Iˁ28)ټB~k_7G_,!Ўf +yUx]FŃ;ٿ߱'@:O]l/)/N!8 B{`}K_zc?cǂԫBpF3> *JQS;jt:}gvv/>@]5X\砋5oGċS#e.s.`=o{__xŋ/]vZF<טZ~!VAnS,`}>\x.QZ=r{}1I`̹O~_'>qC })wt{k$P1{"*@F]K>j` N&5Fl\K]$GGn/2 9666^͇>/v'yV3u;5ލ!CRs^] >|(YƋk%{nUTbZ-vɫ4v1uWkK/]:ﰳ_%9MͻJFl, (US~ڰx &T0{57z~Rcށ hsŝ@vvHX>e&s;@ ̷G05:*_YQεZkk2kCP7h cYFe{ۿ1w?ao_϶!jg, dޜ6C=Ѱ_u21f42Q=J.l#tc7R hە<G  2,?<7LԯgXe/~;r߯-^y};Gw?'/W967Q  NFᣴt9O1xl-SFtKK]_G{NJRv,p )6Abg;lה`+bhWRulh{kˌf.k%@>JKYqn|>$&)ݦ/g]vVoCHw{;x+JVf(66 @Kbr` Y {rA?b=bߡ[a+}%e48_wQp IDATM=0J&& ȧzq>'%iT`.[W8Ӎuj.^=w~KӨt6W9AX(KD4SjsbTKmmnBFfނ?go[( ]JLz^M=]`.I>r%0mUEccNNl+h42=^xlNnϽYђ:D!)(6eW^|rYJ_rR7E~7n`@G{#<_%ޮ7m'>|Iꪵb ޘ Sd[ -XṵPnϤASjsbK VTQӟqN@z++ڡ֧h+Mc$? 6D w:bav6І?9 ٓ3g&7&F]KJh :ggXI+7)USEz2IY4dgk.VhG:*w},-h+xNꋇ_i3Fe,B>ht6 {g5ocF碵jF#3]qъ;8Lu5F]}Tljr0 1:eN R}sw}םnOvpWZ2L5_4J*XiRnB@.5:tq9M{d0 ?ms|lo#GѣVSj8n.UbIhG/3ABB!~ݮSTQaDWK,/*A]gx1A{5q5Ms ePY}6[Y1χYщD}o|log۪ w7Sʵ[BV{G躘w.H'ZM/RB}{3 FG.m/\kɓAc9}zy"q֝m--]{^Ǵ?08);Y(+B!l>99e?ۼ}2zt>q/r~^.3F^#:"-` >]O߱a66oٶ޽Vt [ -36YP8 rNq`MT}jRb (fw*$Ε'YwsU 6R{1.lrV[^3^?Ȍt}_IQV)w71rdmfi@gArTSQI fk'?yx3q8R'5:Aʔ~Q*D}L:w}N@"HҦ_5[%>Hq}_llc#؊N14"亇 F P^i7;㓢Х!MfccG6WYJ1bt;ZX_zolH_d4*׺ 5M3ٹt/_VmrC5ʊY^n!ǝH9ݡsX%R`C9tݤcK2A1O7<]ٶ3h`\HG5XZW JEg:ێuٹXG,ssonN6y챫h9M\3rӡu9\ٷNy^v"A3U/ۻD }<%}AA2>:8vZɤ";e#St5X^DmI[j>Ps1>y:yҝɷ `Y=dŽ>ށV7Xm[j[ 5̲oAK3PHۻX} Oh0\O+LJݰas-™amjY_ VM' 2~ie5,m1-Tv3yow?$l 5m3:x߃XU"(~\SУS2[.-NsN;L)e=cA#x69s^H~78|4dK=/us>-vgfRVW&lGp+?I'%x`IXphIO>>>nbv,*3ǔ\Ds,ez:!g+1v FҥVX=ʲ)f>lC+)H{Emy]%JB)˩H>>>mNƙ,*3ߣրYJ*bKwH&:1AT_G$[^N!9@t3):5UI]khmm8)0hoi\R'}cjVR|kJKREt8xJb̈́̕#)Ft!r؜:UDG4w9.V{k17hq44?@?n?gpFhYië%z6|_Z٩MlCSa_YO>Yz7{<tZr*ǧçbx|9WV4^͓ޟxA߆O6!ӎa0M4r\\xf݉['e歯7gCzc۶6-HE^,f;OswoïS{%QܧñZ/Bw{ O50f0:Sp21K#ok5B_ VB~OEZy._Zkt=f;wz5z7;x`%Vr՞Z/(ñ -^<,rr035PrSJN3 ~' {!TQ@.}6V'Nhm!ƧgڊG6wӶԌ|_Zل5iJQu}j`xq4:V3fNxj4]#_sCM+e?*׶׷ahkC*c3(&U^I! -XlkS\f=fo^sJG\1jiƘhDkl'&wc5[QYHǶ-5#?.Wn1RUvFyfb1;cq,͙t `9;Cq}Len) 4"JYDgQكWۆ[{}ݜ:e.]2.SŨ_JJFvois N֣u)=˅ GAU*=]1Ee"w2l4R'3G-lF-?iS5N;X%&Yn#o<몄J Me_pujy>nm^[wn!AKm^={#hF :H#κw$Vƃm #k_:aLvG#s{"L=}sO+,ЌׂrVBc:D ƀ4=lF#wof$e=j&;̓+mm0/`1_UV[r'QmxlPNCHh]ޞ wQ?uNُ@xa2uF#̽t|j\ edӧ<&lK#G J<$J,suN5DV7Ղ")(},3lh믯MX=`@*$8BܯH\|cŐ'ٻwqWDa>ft:}:lą۽yb"+G/V/xmẀ̷}m|)*L,i4id0e?qŻj|- wrW6^AUQo^CA~z׼)~ZmP}^|BxET/X'7̇?6,|3rlo_%`ig4]w}h3Quɾ,/,ܚ\Q.m?y&,N\!m6fc 43T3敯:3-gҤ?S&*㤢2QtU'ٗd?047|#|jC!i4JKbrM ʋ/n MD:Eӧ I:5Kݭ޲5Mm&YaIv|+欁ojvf5~1ǩˬU6ũ|I5E2*ɥX閕,L82,[r~r6ٝScX `I̱**!B3fpE@iCOe߀ ` 6b145tCc={*uys 桇"+ ũ|b];e"'ɓf2q6*Jajm@[VLo&}[ԨϒΛtG4"XC$;@JX Jhr޴yF-sqSl/A$Bj++ M-k3grNM/^޺T=4Wq%PFUŦ*U%t\dN.?KyuZ dѬrR& M$ߏ<  -<ιs&YbRtJx+-j{G@PwnrRr XC}ҷi|of_\i5|})ΥDj/KKWQRZVlz1/%8+6e/M O=yZ dFZm=縲J\RjГreв1;&O'YAӮqúvŸ}/qF9hA#!ތ_77}¦Y}3NJW"9 Md_ٹV-wU7sov[R*]V[OĐnijC+a\e2ƌW {^Znx95oJAeckٵˌeydD [ uUŋ>UG zPK^oYi^,4]\G7yrMՉ(3ol-[#hsVksFnF;N;j<٠P|9~_D8"76Y'KLXhw>Ғf2LR⌖UMsϜ!ANG=)2P`+g/c_:K4&GgٟiUgeF2}iȝ7l%bXl%*pe|):KKD$ӍsAW.Xdnmr6ӟޙ}#33%FAcU}̍7lU&˨|bk++GUۚr{;7_1Zex`aJ^f"P`U-7{W-u|sۓ/wv PGf D.=g3 U!uُ~qWi2i6oIʝu?D:6=tanќ] *إmiZmgW@۳SvsQ9ٿEyb4\|*m2s']ztq;ߗ<۳:mxx`%Vg[q O%#76_uX4{eL<">'O|W_ԧa{A++OUu>>uʍIͻDFliee;h^:a2-mEp;O}•*=e*B:37l dw`ZwVo}˳,= oړLUx*O{,n7‰bm9S̶ow|Wߕ?w_njiF(Z_wDVکm]}l,5go@rJ ͇noR G|NKKWV.j<@YSs3<Dύu˙/w<'p[k;hR֞˶M3b׵F: %(צ)=ȕdVVUo:cNǏobḫ ΂iMZckkbUrرd4F1[>ٷorW&kk}&kk+G<”oemmR,6}%Mxy:VW'ښǎQ1o߾ zM7h>PGBڍܼ/UU (uA_Y99DL5٣qVQy'pښqNxuQhfqɲA)4Dȁ%eBM\PnAqfkÈnhdn+{9 IDAT'3Z,h!;o5rE׾5<Cd@mvmf3zX I_:f'-G#sR"T1fYE9䝝nu&حjw(˟ޅ;tvJJY쭑q7`=%P7dFȁ!o㕾Kw?C#|.ޝ60¹y˗?!?רS*yn'U/?Ü16o5ڱC4Ӈ]}dl8bbrf?&t3ә $GҀ%޿8;eq7{ENGqqrSp+W"`Aƽs{lo֓O&I Km~]jX}ߵnn5 d8}e ȗǤX_7lֿG'J qX]bm>;E{Qm LH)ή34*$_4]sg-3fflb*Lv־`ͣ)lu-Y;jwD@A-7_t)S]X A$M._NRl%"NŸL7;RGw䚹rg|pʹ;8/> n fWVW/?c[= WVb+ETxjWh4oNi7y`蓂:_]jTw[Jy6hY  I[$1{D}97wY;<{-B*A_js#$&m)hAl\ 5ikW@k(BkQ怶S05KQY8[e1j ޯIc<٩章3GUM+݉)sSc_Y{i~ uew>e5GA~dF Ұޞ2ÍNuS̩S6 "W#CJ0ZXe1m qA)lyMd.\ݠ>iv>EmR^FI$[]_UlY߬\䢩Wsb$m w9 b2;9\95g6jRΑ Ntl+T#M\AuF q4+;aۣwOMkC>JO.-eX-i9}þE}To!H";k/{D9_>|TA{L}]}+%RL4מ73{?m$O@4sڡX ={&++zxnLY*9Wol/RIIC^f9,:h\KqDxn)iz]D3߭Y]?[[>nSj4&YFB=)G-gO̯̎i3GK\oduu24ɾ]~͓ʂ VJ44AFrgh_3V萫ބ=of~057mWC#׹:*|0KD ΀Zl@PiuڞUqfu9;rWkYˑ5q;װ&<@uͮ'N)}UgtS~o ΉHZxKۡN)]ܺoߡR.=w!j܂QT'aӡMdsa嶨F2O2$67'++{T<έ VV?u]? y3-l35lmMVW6R| \7zWw$ٱklqၕq7ldv&G`=z*w0,?<ʗNǷ5GΕ[5/}w34`f5Zv۽J3b#hϛcKUwy8$fQi ' V~Nr'`-Nr|S Z+q y[hL\ĤH.}y9u;m!_<%pCGs"WK*V"O3&-4|=zeX۩A|]<-5E[v1MYh̸FȫXI{oy5Gh;;WC=΅iS/MHhM6 ,}?{TR^^䍉=VEoA,þZ*L --i7ፑSIũ"|)ƷlY!)!dlRL8E\tֳi}4oNC+FlS4㶶&wҫviu}Holq>zUԖFuEt>oug eO[ҲV{rz(+f֖T;T+1oL'L) ˘^t~O1ͬP($(% om%cqstPN#"PcU=U{y^F'ay;bey9BvqrvVvS}pӗ}cUv/reAOQf/a񘳎3)>r-6I#{;Xt~&1;7}xOi%^i4G\a;yU%V:ͲtAyӣ-K-X(-/Dɾv.-Fwm;*fI>Sʂ nR+BSJ'^D !y)lפÛA 9OHqݭlaRA wGf)Az ڈTzgȸR=䥭=iDƽV*s;Y~Y2eqeLz5VePB"4ۧZWF>l';)&3)ozԸ#]=G: ,*y/RNWFp"rƍ3hMƒ[;КCVe,ӑytȣ- L_:5XJ'e׋B#^0Z:C|"wTQj3tdp>i$d$~s),ߘfe “6hqM}&2]zոSz`ٯzfsQXY='NmSM?zpS tүW}~gdPq{"R>{]Hl4lYڮy'i\bтkFPpk`&vDٸaܡe kF.+d3j%5ugpYx>pWL׳mcmq#*WFz.k_n ߓŻCgɕOQ   +YGW?5,!ͪJA$JèW61CLˈKiԆlFc}agT}a}&ަ,ХȨ۪{tdٮWW)RNGx GŖ,O|wؘ| klҶKwڧł2!hHKF9Y%ql1)Km LrzPb;7b¹Kw-շښ:|  "z`q5\UmkMjqe,h"vNzΧufR݆($(,Tǎ5Y9z8Yy4^SUT*|ۥ>7#|R%Tٯhj8'F,9Vsu j#U/KcLif7nreyЬ#ͷWo XtpN˖-"DaI[].&c$ZZ|e<|RB\ O#j^ib~0D)J|(Xc `͡^}5M[T´^!lB[rf2DPʤiMSeCg>UPtÆ[VzC=BURzD$oeC*TӝC]iS,u':߹܆Zm"){y Jh}:'ڀU-o>SbkR(S~:qK`q7xi 줗VkF g)Y(KO!TӬ/*f?qeftgeХ&eMǕldӏ6{CcA˙@xbJ)J։B}%#=AvbTQο}snxvMf__# XΓo_FlCB( uHO832&:"lݎ 7iU`RQr.qvs5uϴ,/笞hYYE1QPXmE#*h'V.LN+_{3[2*Bg4)H.0ZtS٣5y2 kEkzb;fwM%|m8ل|rZ";I&J1{Qg}?4nlTUOƂ%q̙|#} !WWf^ҘGZoohVG~m, V^Z ׭/7df\u+%>H$Gd5QAM|y{ 2]tn9s=Ikcʚ~9X:!1Y: +W~@*wԵѲOw_ﲳ/JxyiΚqǒ2?cpb~4L$PGԹABZQ|رc-Da8_]n󇈹UrV;}jb~w烓h_FTP7ɅoZ]rv CNmڏ!f%lϭq} HMྈm]H(wo\ -agjA[r鳥BPR'_t|{k=~<}cةGIjjJ&Ljuu։q!tr%MXizMՐh#gWƘd(dhd/Kw_3t+ƌqJf Mʛ^JLL.$4^5HciC5痍bt )|)VWSlqP3]Y7ժ(Et{3^iclJf3L̺;P"S@!`et+y~"泤n DS֏n2!"a3ʷd{D>fܚ^"t3zgU9#UC&diigpTDkt̉./2>z11f\~ڨ>Ր,Q"J[i*ℯHF'ƊEdVv'oh)z,\"@}NZ8 򎮌zzt'm:}oB=Zvchb4KʎkrDwvEWB{(PXE{`uޭg IDATheֶFmn^[{K;[sΡy]"вtY\)Qi cU:$fBS# &1M76wS]FfGn2.$x3-XJ4]GУϵ{wdFnFE#i֦,EcWWŗ%oDEh 4>H |{KpI|p6 VVڇ5r3l,TdGӇ/AE7tCkI&hnkur;һ*}{T3 L\&Q8ASW =d k\ c-zc%(1T{ُ;i6&YZi伙n4 hNk(-o12(zM;ߋ !~MBmlqQ^6ьɨ9Mȵ:=z4o1ttV 3a\$:Mw"V{6ջyg]xͧCTN24v:ʠŗTS) ^z,Qgjd߭ TmFkVw֋Mh^g2Y"GXվP>[,_AE}Y2RRsbqIeN2X] sQlv"KW_i6]a/)EʃJnI&(Xc!нoxS^%=|5g>}W ZU[iدdkJ5FPk/ِ/&Hoqj,QmU".ѪWކ}H X_&\LKѩXAJTLȲYf[/ yt >':wuPv5SD{RmVDBm#Ʒ%.PU5B>A-e k)5ݙJ235۳G pbrXztL+^m g7My9a,d_7'66z`|4^B7k4gk2ADbu绬P-Qԍn,/H2GC<9-@Ey=e'.cLETMiYwi|gK}BLg CcA՘Uc(/|"mLc0U6hkXk2oYUq4KtAʩQ?t(rJ bhҫ(k~Փ獶k [= Uݳ'Ip>Ba@7=sSobrţhh8xnmVkk ƕ\L.5 ,}nt`Ȗkރg7[veuF+ػ&<-筈?]8;jt, 'L2;0AtpzG|}ϋ>]W!44X̙zfϞ \_?:!Xʍk 8_eֹanbaw=Wwk9 E:O73][ң$kpPA uN Y)4}пPZ 5BHnwnı"XX)` {v@vBKċӥ(-MOն|(ο++^ǫSjTZȳT7 -{q*M7dD~'vb:av8Pmi)9+Bj x)TX:߅Mɼ}X1+%:9R 4wcAY8ĩȅ,Ri`ߒ'a_Z%_,~^'md$x?rѡnvYj7WScȁpXqJA7HAupfpGn3r)c]^gn/fXi-Mcu {Oh=1z߶004ej)y5}\9DQY J^wNJ}RTK[vg6:Yb5}+/єhǔt8J7ڛ"SBmGHĥ/DAҫE9S2۫~̡3'4=ۘJTrO6ѲSpM_6D,)rL^HX/` yTըJ=d2.k"fD”JIYPiuA w$D˓={744nG#Q_~L_=FXS8}$A7|L[f}*)~XJS!atDcl S4J(&g>1yP^NIZS;2|B|Ѓ o6!޾S+AiQ' a *)o6 C Gv㢽\M/<DƂ5UݣF;0 _>tbؼJ]"INI(f9G}4[erGͰe1A6Ϲ]dP a{XK/mo>5?MZ AKI6Mizl CAl_w>E,9Vг;޾}I 2&Yx*Ws ۸07M Fn¤+ ,5,r ǗNi +gs e/SmhԮ5jҒ v,#R)31aXA+D`K17J *r$OA'Z-BKjcQl5$U\?H!3$f5毦RG:\6}l+q|H!{ kPf(y.?oc!N7؅5j;MЎ"`Edx\0K9g U+3V{۱cާ)URA˱ً=U&Vg' 0 Դ@!oC0Kr՟: ;Lt[Eo|uu#@cAGY)Dl)-(NRy3~niSNM48{ao Qz{>,yrIg9_^?qB>Cq۳RWLcW~1euvdfyY5<_jnmlj_(/oQEA6ZSk6z,6Nō4:ZwQUYM]mwAzY.VbwS202gCVyRUx =%zŝ#J*Ja?OX>ȫŲgmUY3L. qTPJBcAkrZi 6&K8I-i[4S&ս}w抰 ۶__.[Z^I)ax&' "3wOc[=,#!hVh̐#mχ=UI(Ӄ4݈~SuA=ofo4mNߨވʺSkwrG!Mb6mMe0vצ}UVM= '/N r0q >A76N(&FNTwk=jF-'Xx+Jejɲ2iXth,XC,g?4hķvh (G߼9|GʟSf. Z5y3qGX_%?Rr u:V&}2W .7&`Ǿjݒ3g}iJt*>_N/VuuェB9Ӌ i]Xht8Ë< 5z DcؕIC]8ey-uzΠQRw&VP1Q'ld=K&!hFTjpUV̐F4k? e4[] LƂ_=+T->{ˮn|;N;:XP^K:cG*N[ۤLbA4ϭ%NCK KUiH@hkiGD"LaZLkC~8Ù3gg;#Ogc>#q{͓BYue;NFDTݐ0OALX[k,r #_J.8﵊%9bnPUG|J7:2&͝}ZVG=P7r5!!g>S-ƿr r2CFXTha gG3y2r~1P G_JCr̓G uz4؄QY𕞄NM3>IB̑K*BG溈}2Z^qQAQ"Dx -xKV3+-KyAMDASVdtC݃)+^?S;Ie:p5ah (DbJq |"abRkA!vXPI!D"&WF*6DF!TQvp.3%/.\L ;RJF<>rgiog%sJQ:/ܪ[yW#?)>TFiX 5̍b ڛN|jbhz/nWF麘|w aZ/5W4l.!y!¶Ua4z UUBr7^ PQ&JfXD:VpFW9wLEQ!å&%aȞ&el.$ ϦDԣ,ݢ ` !l>t;!`'A' }e:%f?R)XH[zH_Ϳ>D«Jyra3g< {m*z#^[RB=A&{NCs ^R3:wLjMzRE!+U-2;IO#=5ǾcWHO=LB-]AIPZ,`x|V[Z1Tdr[@ y]!+l_hE1Z~R+j ET:UĤI&&WIՁe"@ .qΊP%"Ӕdl"3bbY`,Z.d`fCoi*\<4cYQ}Fi&ё#MȊ9SM$D2\;;/Dh! mw=d@$EvچX$"QYfuۻWQdarYq0]y&yLBRK _5U"|5@4A5,m*Q],MNb(MGL ,4{ `QS2JD‹ N>%<[0`-ABc."$i4|Qq~;OO ucm IDATRHD1dVnia+McuYZ炸!G77\֚uXx+FLv4"ҊHCQoG] EM&qɁmB]PRY$.G@K(S;J/.GB1<<5!mF.fv5[P?}08]柙u?ݏDXG&(w[STq4)7ۿJRt&e)ؙIf }]Ix hsQ0`b@Ə6P_"!VFu3l /a|])$ْ]_HTٛ`a23=5햶r}Z>) L "o1 tdxd%{9]b6$L0K Ų\d7C<Z0^-䂥-!(k VN+:ԝ1l1H韫(ɥ=cW2Ӎ":mj7E64EmBKxr QxQk8hF"+ [[)DģMd(pUr#E& ) l/|SD8N5wXhdċВrlGćYL}HcIф1$R!?]OEE΢nmҌ[ԣĔ3"6Cs !LAJ8.7LRO) U`pluRm.KVR](k1wN`fEanH tS}hABڼ FHT$gNj -1i:ҲplrVdWB- &2pyMj0j:ŊmUdax魑) a@GPdȈyVqH%ճm)'#BDtc􎕊汑VYs3euΰʰ [&ĩ}j[ˀȷo5 !6-2,F `4̈́os=q,!:FT#a%7S,?+efhOȮBWW _XGtB)͘`z+&XH9#DRw>).^c^31&٭yX!! ->sJU 0ۀ ?01ΗLF:" EE/ VV#I?, F)sӥe)Ɖ*Q[MAQ6JBHH,V`UZ٤hP3mzeU6K6'ɛ]UЩ7Wպ 6>jg ,}$p CL5c#tYcY= )Q@mQ0glMLkQ7VJ1HQ'&dR7m'NZN[L&xӔ5OTX k rA2ܵ6mِEu@~w?ͭ{?[UtR A4&FlIk 8r3zEcF#ȩݤ§uHYTW ;Rh%IY[ugruR)V ɴYNd;wB᷐*qGS<^w]>1E&J>C&}p##)V3zHb RK1*z02j[1']*l ^CFB?0`,5ǨsDK$i;(["$daO!_)l-@B&QINyrɗ MwiBf %x:9I=XeӬ[4x/f($Cu!8inxQ'(1A/Uc)=hkgny ,x[B\>H4,SʊT |T3h^Is"T2e?M' Z%Iۉw`=4s5D+n7u1_7EU(U$6{ez R^g`1@UJj qLOi fe^ߺ1w"0?K3B'P]oe/J8 Z]'_wtu~9RդxФ3 )É. 㥴bML9ZsG`<-SC10X?@hA/F-lDQ\*ِ&I67֜HƐB 07@#~M.K ;ܲR?7QDwļh?M a܅> 9Q^%X`noDs86YO\U&z)`,0,2C%OMv.-d 5ytF$cM5G_d>ﬢCΊ2vH%B'D)XD)ې3+0rSGfSM!ȭb茺6j6CLJEpmiL6ϗ[+ϳE~ɨY^^H/,\X)m']),؟t-Zn`b&9d)a0g RX 'mh2~HoDӶ3IR@Xn4= Tw؋U&;*YU#u"ס,$hZC6JY$#"U/*Z'!j51jU3؍K^(+=Q)wS++{d`1QP-EL t,~2IN:) ;#&-"sl.jt59QJ"sC͚XC D[.(iIiEݤk2B̤N.Hx (2@%XFū4R.DBP3b:ZešI:'f] =+Tͳ1FEtRS^x.Zu~z&͗U(3UOqKm W)5w QRiz(ؼ3?Jg5r_e]KD>/e%Wc|y-=_>TMwv#+( ]}Mq )$,zY2>3K_ q}u-u~,"sAaHK?1"y@qT0`"U B͞X㭐XIpFL3XaIϏM"   RFart7u#rUCebF]t6WX"B J"-!;IdnW <~|$Ncz"\&Q ` h`+ǗK XFƢr4x~u[NZ#ݬ@S"Tdw@ޯhIBңB/G2`7iP # W5./K`!2mz :1TuV\/MI\J]^*EF B|鄯 <*/,_q3`.&૥^R sV}U^zیSW+T_R W_(˫lZXZU$(NN3$SC!kŧ-X"g6?9!L)5=0x](A8ǰIuyvûY<2TĀ#^%Y24v iZѬiquw,"֑uaޑI~7J%T9Us5 IRucQ^$$_ =\%LYeҝ$+B㗷P\$SQh⼥0$ xE.]47$6cK"C=ƛjgԥI$]IE.XǎWzMK:"zѬ N3SݫZ3N rQ&RbʩX[4^ *==*?2}YBC|j@ ^M*[dr[/Q,YGp"jC/ #tY͋ Oi6|:٥朎~7`[񲧃Qq,qzy m"-JKcM㢆 cAE/jͳ.j D4c3h I-X^Wܹ9wر|k^O|bN]0@K"1\{^܊Rd98)st0& qh_tBɞH*_^1H4"0hY؆ 5$;`Rѱ=@ŊFfVZ,\0,)cZ@ !+ [ѰaiXt5Hi `Dzoq#ǐ^~-TĻ%֖gÔl([h^-Q4婚l%T~sum2ɀ|o8P%S{#jEu`j@te_TB"^tƤ%Q?uiГ)RJ2*\V$#60ٖZm2[c/?7f>ɟ+20Xfd?5BynLBjD!!ih&NN"2`UyP.aݸȹ`|CJW+ [*%\I-i[1s3wQB7%+l[0 䥳EKi Qk6WP^5Y'0=Ota@-Y[sƁiC $j&E-e3IK>(]d K{f3|j m\Yc ˂HruxťuuD,cZP/=HznIBg3&dn) }7⑼LT/zsM&{G>>d|>$yIyTmRÄ2JDG&XMxm->{>2/GZꫯvٳ/vν][[sνu[.d, Y*uS$J ,kXJqh4DtM! d_&?#q*$[!TBY# 7? ֌1TRv&@6@1PD*A+IԱ""y̏IvIO sG#(Kb4gďzM49φP`T(ŧhy5 yҵޖw! RGY?zV(_[[uIVGT>TUs!QaqLqbujbD=*2XǏ?O}#'?Y<`XfaP2*Hz!/Ar*w].3®{/Kd 7 2ΰB;Frݘ(J>gjϤPp iV=rdCߗŽ_%؊&U83B:`4-ETED"xhFB˛Xc%¿Ni5S<[οIlNgkֿۿ+`c|"(YDl y 8)⃷TOGInJҟGH7J3юdw00VE(DŽ!14C'$l<j T /7.D}$~}}>Ьܻw>, ߟ$S̟{&s. 0=MBI*]}WCTײ&T$)EwGQ=55ވ,"TM5xm -Ț/cN p:[0s6Wz/ CkA`رFoS ,⩥ɂxԌ`wu ȓJ%C9o6fvK\xLK!J;2屵?;c@OV%R!#C2(x2 @ne-sK[:S/AnJѬ 8E^FnbCBe38qzE@__xsW/~y wWR$k&*Yf` UIɹZ!\:|094û'2G?P@ݗKj8=ҋJLj{-LI ɓh'GsH<⇨3.~n z8i50ު/BsS0˄nVҢr%Fҗ %#v,PY:.+Ґc۱cl6O|bΝ>8gOvղ%׬ZZc_dB/_hLwy,x/y8mX._@/Թ2)`8ٮ6,{ӧ] Df2] uwp^hK>Q_C^a|CC"neT$?S, 6[>? d`jUF&ϑMs%UgO?~[z(o`)O)ѢddH*I֥@tq(Ұz@ݡK ͅ@KcтjidRQ߿ꫯ~+_{wX!aP-EM[,݇њBQΙV~ :5O&1ą;nAL&fV`3 J-T⿚XAS*"|N!Tvtu`#mu!lV=Om|H\vt¸s#_xc/νz$%EKt[Iёѝp?$$5g/V CE@RLa\`h+`c^Ȋ|e"n2} xbQAc`{ h\哶dV.<ʊPq)I)CT/sGG0e!'Zgqd}&&v'fjyr`"*nbxc&DN@- uoG~GjYzV+sk>gBoݿ*=Oe`k>b!-?kt0 5f(jچ}oJV{$RLP&vO~i <}2+i7x}3\9ldJP%I)ۿcǎ}u,8$)Jj'ܮ~Tmmh܎,Aza6l92XөJT ⽫[վ_d~=B305OFDΐn. x7W0szC+E&CDK+$A0f'# YPV3q;CH0/h$Rk ѩOx4B#a.Dm yr 1R%lu,ezH5V.` 5@̑ғ^ ݓ.K-jgQ4ʴtWy(4=jWPIN| |+Ȑni(R:%L"]cf)uI啩 r*$Z‡7B,Y3X"x9BBzI;$Dg&a}^RGX78,xjݍ$/Kd%}LQ':+4u3"B )0Jݍ&>N ]Uߋcʨ"DT^$]r{l}VsY[Re,PBt?QAQeʘ|6]v)UqBR)&$IybWOzI;ԺGDq"f}/8SvXk'RG t1ăD Ivw⑝PmƻEERF;D3aI.sfLa ~BaR]{!DA!BL| $Yd>QtE1Lw8o 3HRYp )È'u"=$DIi)Vt%Xg .t uo`vRJbAV]Ȕ8qB>"%[`%O$ :t1DW`ϔHVwj.sgOQ7t=E])8[@(TTEsԉVXu;b M.KjW;XJofm ڥmդUͺ%uc[`RVHjDH5ZǥjN "wYӕlAz^s?/}K766s~~s'"Y'5DYZKL)f3Z uQ )-cA} KPOp@.)dzrH?=.%Ƚ5U(#4H)/jm($&yњH$tw#㋉VM񾄉VeWg2i|t{VjcYӐJ PJ}鍊nr_U@ ]Ğ:τ%r.6CjuJ" 9ƗWXGdِL>Mhђ!5~VsW`傜 #dJ>fkm.:2C!o؊tRW>1WQ 5WJVdR"L~8'M h>l!Dnc{-rw!ܽ{^B.Z&Rτ*tB#Z V?]fd-Mǁw;4:NXAHjgx< XH27`Rʦ RF:liA*:6GIQJ7p3K9T1E"!9lE2[ S$d! X# gJ &gy/9s`)~q[.;&TwfEfE1>Ɨ!{z29Fҷ\~yC{}JYF4Ot`(X[a,*~ T~Q0h,ЉU09ZzxpNkGU emC8 iFy'D}A,5Oi늦w-ғxlQq`jfF1/C_v=elܵ|Y5p=mͯ > 6Nꢣ0,qfQ/Ai~eM9.HaxW<*E4O,Vۘ+W3W$ũ! <HVZ>-!> e6.Ex< tjÇK O]I"8u #E`.4q%r{/q 5ƚ2%qwvJ+< cQٔ2ʰ%O~RaDS1t g+(z)fQ(h0 )a': eţ/""?-ڸ@2s%))6V Pc?wx+_ypOܝwy wztvM4[Sf3.mn:wsw|x;z䲇W_/zK/>&'8 'O~~eSW 5qvG ~-<Əj Q62@[˗E?|.̏b>Hc_oA#!뷃4wC^Þ=x q9|_z6,|{eg(R95Bij|߆B7YBl?~Pt@E1cuY_ꧽz2<vtM ֖͂sG~|-Ӻ/o`/QTdRGD>կUҵV':vX~s9K ] tp |"|&\ur%5BrD8 E&W8Y 9(2Αl9YbDOi荛[{ aoȝr^D o'gg77'VċOV$6sH1nmM|GQE*hIJ 7/}ι9uԻx//w|B6.j}n6\nf݋^䮸-Y{榻_#W\ zT\,"oo}+Kݍ7@ݟ;yҝ{;Ag?=؜sVtNHt[[yg=r a3P"s|eZA{)^pض*1'oVkASCk?j<*Cdjll._`v_$y䑢RFv~;N~Nosp._ }{p={x άOQHH3ZyP,_IxDXyD_w$2(cEat`2D(ezk#!$a]ṵq]s;qw<2ݑDsȷ-.Z3s Xq{`:[]s_ f3wfK"J>~Νo6$]3Dvlnuk;eN lGO7}CXޞc* o]ҷ|IK!hъL2( g*LʻnlՏF0Nmosn\??S?u%vu"+S,Y`>N%-`~e|5N7Af#Ajw0DLn:ŤnQFeA \/_L6eȤUp(BgEpd[Jdo୯}4R\CKr @ڄ׷c:u^9 -G7/W#GN>JTL&cfurJVȞ?__y7 |pUWZn11Bq@ǯa[#!̾|B Qg~<ծ> ԻCW!f MYfeQFdBUkG YEMJ2"vM.\!^ֳZ`[檶P*ܾ}Vefů-&9;U]w"Z4s&|Qz~_u7xJGG.xD~&pzL]w|Y(~gb5 E{ól.njE /&aBP4%O70O2b4 ,QzS+C]/܏8{Ot/PlD*6VM)u3,d" GHO]In&Đ Mcsaϐ>ϙYBeQF))ZIK~Yw q20o-mЃla4fڤ%U}J4pY %[wlң)}W*K.&ouFxJ>WJc?!DZcMӟ;=yy{R EHW J IDATS aϢx."n(,_푐&g-0(WlL,h6K|Fp8|6[|\02(bjZ\A w_5i]ZUa iT+9jF\gE]Ā`yLe1K O1B8 =c+?G}׻wӟt:< S\\шގpKcx)~7&#5C='8&MN?DV<0̑P/EC+Ft>US=s݇s{)STcש''M(2ki!|`%!?ռz߾ߧSU0oU+#q*O,*%_/ө _Id`G1`{{}l俛Nݎmx{]{mU{P_LBhϑz^wWollT9\?SO\W]utzYLͮjo<y{gIr.w'NlJ)z^n:=ZNmz*98v#|UuCz_+v=gֿR+g;53E^[|O(2)нQLQ?,%oGG<@c]t;B8b7d&{V &=л,-vk$Sw1yvhXSD-QDFtho4;c׎R+x}=71\&Օvq8t_~#3}z5^2( +W9Hj>Gy٣s`>R?*,lH?(?֤=ןp;m16WBkhx#096~ן|htj3/$#{ ~\pG H*Q$ 7mkȣGJt.:݉S=@2~EJsn&cb&Dx8˼_fr@sL&mQLȮp8L4?,2w&q·Bg\FeQgd;nak:z[i?̧`cʨZMh8ySwlD e@x!w_7_ 3aR 9w~ۊ SXNԃj{V5=HBwr^n"=#s3iRtHŦ\Yu&VHY eHrVu<-vo{,FWFeQƹ63?drʾ}`^SH;|2Œ =Q+&ԸrE'H Hݶ=1si-.J#?q%/~ʐ^a=:z'?o___Ї>O. c}mF]_㮼@c%w0jW/EL!CSjԝǦX(f+\j~$@kLC w:P0׼7OWFeQg_V"Ջo G2R+b4j!R {۽͆&i"*HӸIaXg#/k^ xg7&-L)ט!+y=yrOO}c{[W;R`_膿>q(,*CCec)yQKb}]E,B Yɬӆz w ,'~5hXjyz=SYFeQFok0Re؝Pzs5i)_?z+b|,:u;v;t)iY 3|3!=x)i{ַ.Z)< q$}e+r*;sOw-"RfX-K@\M1FS{c5%/|vbzydwz ᯆ$,2e֙GЧ2(&dT?q 21 e n8l[ d)8zԝ:N:+Fj@;wc:̴[zB96F%v"gW?\9GSBU;@? %mkιW7_8{b$ `Hvm]D%Vy_|)7.!Ly;._HE29_} ϖҾ2(2b\Y)!Ò|L/}2&NMz>{ dFO=k 60,(uB{m>Z#D<,)`B4=O^xر/wysn</;:o[E~^VOȻ0?z"ivj~C ۮRUѫU?(m4nLd%(28GgnyJ0NxGz /|CHH(jۈA2V[kWvcz,㱦e'oE=>H_9^GObQ k3,eLFw%/˝s۩SsWDi~(iJK-lo-wK}RW0#uULiT+%WTfn{=>kQ2! bz&l-2Z&a2(sy>z*q M&kM^WK~skWƄK'b>FdDmQ'OXk85ִg3 bˊϏ,D aUZ7k!6Q5תyոV''*cJoxW__={?]?K5χCU072= 7)LRB9NW$|to_x 롑j~Jw*z2a{vr=fs~M[[y\}YϭM}Is `CFeQF+6H隃tQҗ䟨PWRw$hTu67f9fCZFm~ku'NӵMC=c7\D 0#Ω!iH7 >#Ee"k}=YΰǁyGѣL&%_Fn߾t#Eb|/tXáMzmW7a07>%!Ek^#V(Ɔs=-Lcяg2(o?nlCTpL !dm؜PKq*PaF+ө;|x9(2e`Mvw5m 5S f|TJ9b!2OU MnY91+B $8`)}P]L9Q~}ס/R! su(X3}s\r 9^q%qkkm^51Clj7) ԉMV!wyN1eFb"9;xz|Kb(iEm>/˓)č}o=SveQF?٩rn>iyMa8ըmFu2RáOlfQ_6Fږɓ'z_ݜ(9:/m?qBdˑ#gHSi {讄ww/'ӞFLhPUZ3Jle*);F_CU8>Vz۽[3 &yTRYPeڠxo$\*$SJϫf3j{(> Yiu@i>wp<_mlH6#Uph4WaRZoS-_ãG9'HR1{n$js+ LH?Y,8Qz6`hM]1wITFeKMfr;u={榻>Kt`}_vν/}׻ucǎ+~OD\t6'OKZ ={DgooYskkJK=DKmn!J|I|l"+{Ӗݿ#!yŏշ)l>D&V(|LF[4[[K-ъfQ0V/ejԪ!mKI,$(Qb^9|8I҆318rD| c\a,]14;B$9=);m;:L&ι~K$%d!If՚'fo*S/4V,x!W4a|qUO_ڜS[I^VNKR8pHk%Ja+\K[bsg>3.a,61qs-^g k9;~EԪ:dikL/cnЦeΤDTt WFbd]^8%ZtYJmGw$Їַ-ofOz9D$$9;y2aR{܁|epz \+_<0ߵe04 |L^x*wan4֗]`2=`c~\eo5 COo:;V+L _WHD v[['J-9ZR/_Ǥ: $GC.j'tj%JኍըY+ʶ"9 }GFp-hEϔs=ꮸRf =CznɲտLb%{*"w_.Z**Med}Qi^,x{wwιG}_1̗s D3!`6s'Nܝ8A0#'Q(8rf|+!b\M$U?.k_:jQw"7,}F?J!?ckN m_Adխ_;7Ee5:o,ѶV‡F/^Nϗot:0𣕕-jhw"?nmm_e;h|[ r'}y!SV]C./u!=_wuuޝV{TLQ\\RC_{x)p ~ꪶ U>@CwćɓsлKs}eڸYR)cngo!kl+(Un{3> ө۽wn&0kڢ&z' RocB IDAT%+˒ҳ+qtWBW9?x3FgYM?,sƍѢE¼ɏV+Kg, _gʫeGeY//Ȗb%ȷ~(w%=u?'wGR{B7< *ۗ\*MijT^Ve[b 0ï}$k|ONT+ppӋ}xTYyd#ՔnSE 1DRY }o޳goo~>+>^o(emtW͜_R|䑈fMySéZ eL@Eo}1/biJZ&Kl^%W>KjM&k#d4KſAi\1R^֚e.wggj/ڢIH[kUIÙҵH0j-oe;][6a .JV;_D /АepJqxWcp;vx/G>{cc}}\\:盛]曛Ɓ)mnrߵ]#v8=Wf30פ~d>8rd>Ff/K6 nz7QX?r!-/En;߲шxMgCΟR?Ixt>oe kUɲE]{!!MVѭ-sxnnZ%QuGR;Q[s8 |Gc~icV:^F"DS,C QDBڠLWK=,>,Q}†(lkR̜9l Zq1P&byתS|8Lq0)X>繇hd¤8Z:nQ, yY&gcCmSiHWr,YAbu9`:=kڡ`??4a^3gUaķδYb͂_g>!ױv0k׽u ~`YEmK7}< CgԶ\V{ c.0*"̛ 'BJUxTH"w-+4ez<8Zޡ=gj$*@0Kq/+Ӂ/H(6:ZPOOV`06tIٽ U0"I߱wM8KCЏgMpkA]8~ن s6oڼ-JZ+4/~{[ k>olt'Y= BΫ _d5%?NF$^º*~7IMꔙQ75=)c_=Mӳ&3?ڟ|r&Z'0$ҕ:>x%xP"BxIEg30X`HsQD)$}VLg :x:bgɟ ^220g {Q>-"e ׾n/}`0XBR43sOB)eBH=$_ ɦYTqIQh:s~['T2o_77S5&[[ Y]u[gܵ8$ B6QoYK (9^fЉRkhiIE $z :3pKja9{H$?)2ϿNX<ޤC-?ܷ ->,LI ɮs&=[%W^zXRFU` @V^ )%5o-gꚾ d0|wMꘒ!s|VO[t0SDJa4j˻/W >OG8(T;d/よd']ARf/irJOpg qXtU֕ PcM|n믿ȑ#O>d.p2]g*:]q݇N _9 mgz2KMgMCוA7x5I-fmmѣU v 7ڼ{nO#3iN>EҾ3+ MlŅ?3~l|DKmwAIá\x7ke[vG&]@U}yſ୩Iﻓ'#;_s_f8 қϭN8m"1Iqtjf-'=$٢73LBX٩ &_WLxٕZ댉,~= i`a#7BvwoKȧz뭽epTǗܽE-V:Gzcϙ:-LeDf&%I:8d,d(rӳR8rR^|siK~E 9]xVNꎞXٛLGwenxakD9%Ĥ>vf&v $rH%"{7K_iPDrq#iu PpΝM /kwx2JѵtK@^ujq!!0 0۪aZ2q unEHt:糉?bn:Uw35pf5Xc޴Hzu{t&CİY{%+x!v-#@)x ޅPܐ9JGDdl!l=*"6NOw! uR?Q=bo7ʔ96j)@TΫcط*-Wd`"d>/&3=Kt~ }o0=wFM1Ycu:DI5``У0khU- чYT+(MvE[2(Y 9_& $j?HE lPe7\ $A zU'2e2DqraF= ߠw2%GzaPrmoo{R߯|>u*¬$j1W_1-hҩTNGS Gu͵ 0$Ggk% h f&N:;q'Rg8gͣ埇Jf!{s(wO:6 v^$jxgNDq.ͩ5HTFt /NBeCZBДReA~sg֜/{P: be%>ShF#7r)aloC3j{D9D\'Ğ!oP[(6='K`=d44 }23?3'Of`z~O>LM G#9rsjB/D`Z3Q]  IN&=("D׍[/T0Q X6g`0glm<go"V-gYo0WSNĬ䏇/#un6H͇YMŏHYdLdiK UK?/|_//r-`=%;|`cH7)vҞЭ9wEW`D֡3y)*~5/Zf]#G 3Ot )ȑ(bYᶔ*CdB`5\`Hm i$ IВ4&s"=/E$7kQPm#ay_8{(.%s["&2+ PK`㓟g=Y-yX K)ٺīö jV]Gx,Ñ; [氜E5zKh".Йgw$Z&ǎG>rWFtRmLyۚG72wr*?ͤQ-Xo t{ 6dl#}Mg.{ Eٛ]~sA=+w1:mP Q^ԠnɎL7(z6ka,eTc ^Uz!_vdD{U/W{sY@:~Sg9Nķ5QȚhMCvAi+Q{hlc CY^=ë`IwFgӀU$^E677a~VԦ́9!6oWDLJn%3hBOl2:u::KWSf`@Sً<~GM'SeMmh%d,$PD|aQgߜ͂!g14E>:-Z*ڽIRAmgOC"4tՁG~V^$/ RՈ5ٖx\I]ksPY@-1%J⵵EpǑ / }K\N "^p$EF}$P_)\i]Uu ss>kk2{x)Z( f,{RzztU\ՍΧ5JЩX8aVgMh Z+VzIPelyzi ջDyHjjGJB[mN'鴝f^PU}@) @Agh [|[sD}];D(W;)ѓiHhS0`^b`E0{qƅ<4Q}cy ׼}fc_ K-Z3少`F~J̶B|zə?reg`IUhLJV;F+*)&qNˤ/.bz4DyG1qDnድ[]mL6kHD\*um;.:oum]dHhS0`BsgVsy#ESoot!Gkl#Ht2Y W;sqZb4Q p \#?('Q&wS<_BJ mĐjؖT=aQ}Ϩߥ#lt4Lgf)ZpuỐ՜'ӌ`\N" O !sBy VGIU^TD_k[XK_BɳT!r?]";Z*wRRrQl[#omN[]NF a<;*F3t%vog,j.,@cjC_0 `!MvsCo<~š(BG.{ i=RMe錨2]ςkG&5\d0:c/囿JdF-i2!lѨ'RDyhr^D`,%ʶyn OhrWcHdoo\U4q l-iXm7F:ˡ_ {|1E4Q7&ZR-,ޔ<Q,3oQ&F5%z+ҩ@tCZPMe*)%*5D!Ň=HqQ6H-Rn3&~qI75Dgh1EA͓=AQ_VZtױ!/ddX9$6б2L}`K^㶝"!1({A3OG:HvDL~NHpIPtLgfXy}[JPatK$_WXQưe8/\("JU3~;)!VE)Va!hRM4/_Gp`eܒQ[ի[0JPX- y!U+_0`-}aP<+u άEN"2N'=ۣHD.ҵr`|U?Uc=\Qo;Y)Rj2Q>\.K}K/޽d8uXQQs kɍ{%v( 9S!Sc)+зj@Y1cɉEku߷ 񱭥je"ZL--)MieL$Wڑ`$ul}p`j,ctJv!yDwUGs9`uFzmP4']VevBrcgX(~<jM~c:64"5T&NB]?)|cF)7-QSI-QT6Ue3qz( F~OˇHlrb:mk,*;V} ZAiM:5t&<*Xj8m tz"tǵ*EGtO탻ѼRhjR j!(,ikδ!ZCՋKfq)ۅ:R:+RJV`y󒂹'|{WD 2,Ժe ,Rᵄ,|~,@.;ZYHSw⮛0/jMNh10ELd.m-Ql;-T}PDZ"eu"KXp4E!xf UUo2 ޼baQJ8TYH}_XH4HkdDw jjbܙ7?x!mz.BrQy@pB1mA>ÖY=*Kz`VH|"bZ ̐I)"<|N" CT@$mK%]P-OWz IDATstKhuj6$!B蒵펂Hs>ف4—`0ޮ&63d>YcEUƐŒt:lLpNHu $U Q̗(T XD@oY($S_ RMM L?޿YS2f­SVjE"AEsBEMk&Wբ`,#0wJ=n֕k$E"vD&QP4J*XRIqǟU5[Oc:jWߎ.MlLj4 RV~A'dKI), f G(fdrZkT@ yA|kJ4&ňO,T();Sڌ5Cb "4ѳA65C2%PBĄ/LN tL$nՈJ#hJL Q'ş<N(pYHTM*]X}H\FaY&80Q3f*Bw0B0TOC7Q2\O2f6d0pOKLnȅe+x-o;tL _u_.+DMk`G93?R{MFPG)gj|Kљa}#uMX lο`,Z ,[i'T+8Cv*;~R`)K]BևM8ЪKΆR!ۑ @`Qn'RGdd )!O lw6͟0(E>L@:Rtf(|2?`%;ۈRhGo RmM-ǩߛ(KTľjO;21+אĢP .FPjYBr3BRC3.O]W\DQM#zz8{.BԽf Z #^$YAg 28-N~Si3c;<_s|Ͽ{Ͻz||h2PMj0ѱv ^h "gS#̝"2WȆ^{|_s6M&i&w4#DO_7,({Nٚ@kݰN^Y&FD²urguRlghvC#4( v}c}S f?njxOqJGceE3x;h! DKi֯fE-B^o۩蔅T!Օ4);q, EQ (WO:`va=wGYa,L呏ֆZ`S |LZO-~A)a+M,ބ;CPG\VBPv砛đ"Kcz*~5 +PA_Ds#25_:X}R8@s0gzYγ;X6]1䭼fW\'K# "gG+{-fɭl& ,\WLxNlg8YiCH7'"wEXs+є죲| a8P^It44;s=_rzDXahyiR`:#7ֺǝ1BtoGyka=0M'rkQ&&QcUfj.:fJWZΨ#Dw5"Wd˒٫sa{\'.r$2]&~xǎ\y̬ҜvAFYE)XF CkbAܫ[ #ۛgD5NsW(]ֽgPαʌKT^1߷o926&A'4Gs DG?}8mo\پ)"”sȵ>0VA嬅YRgwFvPzs:,gvaԩ\z{qW}!h)]LCm:λ#w^יcc|T8d ]*•BU+"_%4Ie.^B5-}Q{rm3{zxaJ&x!\")t5e~+{!BPxxՌ^\nv ist:M(`9~LLhmKlm(vTZ:uAD>5A:QO_O\JV޶p۝h lo9%eXotdY./t;=E2EZ A >fƙd@6;Ei;XP`ըZBϲD$:IuQ&%I:\;[^VEO͌]!stdXL'vatr8@QAJq[~ /H!rm+g 8C9cbRs*5.봹݆[[KsmfS'tz' 5]-)h/Jv'cu)G^W0gRjXgcf"FHbȎ>Pis)1la; rr~R:t,(*U`EbII%" bpRPp% LI٦=x_5#G( ]nĢa.^khBm1x (/ ?$گ ^xQʺ>M0mvwW[[T3v?څ5{ס%kmU7T_D_IWnEջ٭`4LPe-]8?BϣVy#ZH0. [=~nֻPԠ VJ6 QAc;I i}#4R[=$rCJ닮qbF:"krRVHG^hwؼR9*؋|6n>d*iC~+'gJ>PD"(M"k74oI5Q8ˍZ4up3bT OOpor- anꝯ BiZA7HY z#4/}z\]JH6T^ӘYTkƒ&zPe˒$1F)QwZ9\:d]X\S),PgN:NF5WQ *d^;]Lg"eU+ȳUY~g3NBO+@P(䢧6=42:qu'vbIбa UMnF6)%M/=@:,y!]sI LS=t2`8˲]l%({ eD9,T#4jwӧ϶jd46֋[\jN8Pűl5ޝ,./g&ov.j|}F^N7!,, /;^lېhd[۾esBz=2D[[ίMr㕠FlQh aNae):uf),S6(䶋j{*hq[`-ZJso'ܛKu#9aWy5ۓCM`Ȯ 3ԔT1gKxlA=2dw~TǫriB=,XP`*V X4O=Qbej?/ot:[l,ɁeIh ޯ¡m)p!Ǚ q+14u>B@[6,R#e Dn5\;;LӖsg}*n֞#}iwХ =~NuxySvygqEk72Ih5Cޝλ, v#[j5SHG)>w2W2ZVj!XP`a{esWntɢUJ\WBr,w_\'*h ׵}&Gsc'ҍgUV>6|N۴Ө*C#7ͫ 4yÖ{65[@t9ww{#WD[蚶3Ut"-V4X;FO$XjTq7(ôvRq^iޠ^i/{h3ƛ_[)VbI$/9՘0$ v(:zX(6+ry-m4;0Qچ)(Z`R`O ̗i~"Woītt FYwzG*'Q'(צdJ̾E',W*oo>+]Թiֽm>>Qt0q=dao^k3o!mO#*AsS^c(f[ԯGǂknYK93`r0 )O22E V&HhKfD# rQiqъ6`sC UTؼ".17&ĢD鴍szUspi YLr9M%9.r1rSPnei;T28fi\9F?bV,vy7i̥Kwz+K>TYS%!B0Me`Z s6kMv_%^bȚY9p>daA4 LRָM'/Y =؜BΖgy5h'r6 /a\:5QvwYnz&nYp.Z.xCC'G˕W.1['+e5xaK W;lV. cA5 \a48AAWAjISȩyu#FTyM*M<Q &(R,ADX`u-tu)Z?sDW4˞ri+gL߹Hq d+Y3lR)UdI O9x&MzAޠ}FM+[NFY*URBkvZwϾu°V$)O/6ЮfBD؉ W%(TQ`BY_Y(?)&JDKRhW !;΂]ߝbD ,I<ѕxnLBU!gˠH}d9%F lY;JײmR9Fn{Uѵ ,zGް)ebKoT⟳ DGteߋ{Dh6*TJNr&}M5tCD~SѪ+s2MJ-sPMШ}CXP`U7̥Jb0Q 1[ܜoq ˫&ZԳeـCsEUk=)2V!(ׄ_EC_]Lcq/3HfnkfnƀW r.Y}zOPdYVvSԩ~ߚ IDATk'(؆YƵ_c,BbyXn*`Ԑ+xC2I\̐ i/!- B\sRvk#Z6E uXXP`I|ݿ?t`V`6‚^)/ H>sFrڲ~gk+XLo8m}.i+E*\Q5n}7s}{}1|ߔ%QgBH#`|ԫύY:kTl }~A!my~*u/4p+}-ޗw.:{:su Gۿׯ_79+Tvɻh STVI <Νiv.9}D6~\HBQN 6.T%nmm✗jʚ \녁 /4,V~L&>P`hVז)ϟsWE{dD{,AA:kNûQ$,"r M%f :IN}vM0z&̟}LD֨CIE uI.Z`EhRĻΗ:a79.42z ͜,k= ylNNܷ9D")TAV}~eڸZlm%&Wޱ=EYmܨΕQ ߛIhO،Q`TeIT`e9FJLzP&-Ct^g8{ί7Fm3&vwVq؈T27+FRU0*s5JP+}>QwݸľXc7ftVQA ^+f%i{rI|ͫ$Zf {7zv͔ӜUwR!"^ʩTj+QQ6Mcj {q&(^ޙ3y3e:ЗI6ϰQP5H,X(=}[`e9s2Y+fIPğ9t4Z#ѺzZ6aPwDEs~7޺a55)r@{4ƛ6:4.Y"=(;l5؀]GA wکRe=o^mb?{sћr)5E'')ќ*ҡ)i#P)%qf]Ar)0FM%2UR-K ,XwxVt0{Uo^ϛ.d}WJxqOIoЌ~wJ88ٜ(:BAA+q|3}zƋA`Z,29-}Eh2Wq^&Y5t ^*lЌJ˸E#Z[,Bv 8}^\+s%ƍ%rї[B*h}0Bt?Z/LK)vRwrE帴ԚhpX(j_\t_U`'y%BW IƵ ݤO2f jsw{X5謕GAvʈR }'Z8v-F :)T7SěX~ P5Lb9]0A^xBJt&a&hFԈyUnoRR!)eW؋ UNgӏCٗa3ʺTeہ o|VQkpĽG^ %}&3&bF I%¼KGK'O$c預, 8tJ83g4Q7kbKzN}exـ@Z2vJ- ۃIOw˛VRZ2$:2 r-g? u.42@Q)#g y,Ύ[@ \#b81p&u  3KX)2*kGRib4,-leLq}à=돖>NƺiRJij% }8d!lF0hr69x)i4YĢ l{;J)й4o\X 88sTx0PEňS6;(eNY[a./4jgψ@ M1vP؛B3>4A :X3T`eT8%/.0+fv;(e- ,kN*ӽ^C4~wAJxBe|7j23E6/73S zޥL".D*&r~[s -A)GK+ٕҋW\FBhm=XG3K\ &;gl:Ȥʫg\.ѱV\~܈,i>ҺuQ:~e\DyK Ɖ'q Trf^b%yS 1=["W'H ~:;ՋSvD[;R)')s9S^=ָ&+^MtJdw7E-U(oE͸ +!){'6Wt3s ;gk4E#x#kԑt,l5jp״oy7*sϙ/|g5Ek˥rEzuKzo?PUs ˥9<&[A}ܸa._.V5tΡ%ĞMBW~l옯zg1_y=k}s{a j1a[(qv2ϛ>S8ӝ{Go0-=srmCgϚ1'B5?5Hkc+riͧ ̵kٖJ^};`s|lO?U[|ܹՙ}0E,.4W qHGڹ;mR vfk4ʐw-mNOC͒6M0 .\~ˎ{sQ_;הO'ڵ/<9807n A}mmN7ƣ'_,@P;tưЌs5;;1ˮj7O>K3v,ٳfyYsp`=o{m{OHTY:=͇_|_?wOu_/^y8X\.T~`3mU{:7͗_7^wY̟.wf!!Z h^1_Bsh,FI̹;FZnv7XHMQYڰġL߰IYяFhp!uq)IPJts{Q=M85lMV+@6Oب{G֫ Gn;Kگ+DD8&zdTBUYS,N D~'w/2tʐMԁ}ճLIƍo/[Pw-Q~$L]`tK^Z^n\ .'ʲ,}m rt,Vo%Ol]㲫N [7t%a]KY1FL\8!A&om1Լ=89~rY A(;DGH}O?Zh֜|3~y/ѩQw;pv`{r1tFhv}~>=\rlNم[i1[8D< *Znc!VAꉁ=>6ex\7իݸ-sM>vۥP^WJ\Ǎ!r~oyr]1Al#F-ub4o3gSu0o9FP78c[ XOLv6kj GQ1RtGv3>4rX%{QT(3<ֈGɖKZ7[oI!2>J\=VՖ\1ׯKRV(ЎxRx V"Q-ܾqg㌳qi. .0^r'O{T}wZdev<UA(FD:ZhS FP7 8ţ0|E8<4//'vqARv]M{'}A۪)d:r/~=a{۳F-ը :_Y!bx;Xy.!ѻOrv2([UG;># XkN@;V6GxX`IL+}j?A =bޛ hpj\FfcSԼJRk\ ‘¬˲/I4w $.mSI8 ӺϟKK4lېlNXH4*)vӌNӼ0Vu:_mCQZ>c5pFsm+,rizg/7)W Nwy}ۭPW_Çj,d@}$^6}RI7M}x/7JetY;aD6Ŵ' a Z~fcKF%-TPq~iވ^)%Hgk @W!mئpX_WLmj\7cc2lq7C&KcO.a<=UÝ9ӕ-hКWgO8ёvP cd=ŰJ Tpy+yЀAI>~:Vu8u] [2:S֒ݭkI]Ķlo׾fNO+dn 59k;;?醹Ӿ]eofp7簱}jGSOuma/9>†3IQ(b}&k#݋C¨QV(- Qeww̓1.N4tCJoe 9("fZO7NﺬY %/m_0H3'-5 (rB#D7rzfJkFU۸" g'zULҗ)+k+t*B#h |O[,oo7BvDAo \sF}lNѱLXBX"#̛ӭyf/퍕%/jij^Pڱ*lS&_t?@;TvgqqE6<Ν = fkѢ׋/v?yJL˂x x2ǝo \޹#5,az/(،zq٘6Cgu;qꕤLP`UAL;<4fwlm]G+(Er b UQ:prm.ٳ܅̅>TpGQ:ׯ/bԐݘo/z}xOtw?56\%s!dY.Aie.5Ύ?ݛM NYmJj3Fٽ Vc7^=-Cۣn!(ٺ9@9lξz3jEJUv1l;'1F<(rri^uAwD^m-mBXU%F!7ɨt_.?z%wP9ӽu&řY׆wޤ8:̾sJri޻ 3g&ew!IM(qjbQb-Le&=M1^{!jJBd4e"cqQMWmutdzA.=NO-a9+[25d.K.=6h^sKt0n$E}u%dEo Wvzię*GЉF/N{O:gti/o J tKfҥs{ jW^~y ቾ~r|zG|[ڹ {T==`o!߬V}s|ꌲ%$)#XEȊ mQN[&s IDATtыޓL-{K%PhZ\T >ڠ1ܓKcZdَԩSA6ւ%>-D} NO+'+8  Ј(E*}EWG9c{$:Ȯx-ę8A=^3zq{RJGO,\1nD+T >1]kk“DMVNUH+y)7tK^]i4p!wN-Μ?UKL'U9k" ]-fC_劄6HD9;HG o]ы:RJuz]1JrP`M3neAP)Q}SuwBJ,XS!,K~ h2N0X8Cf'j1Y)`3-78S7]zAŌ>fp'vW6tR~ m,\ZpAvN[JU)NX -IGGfgvӗ?h4QXM4 {RU2_0o!.!5N/d{_~eH?+FX B$æk0V+Y]|b{~y ŵ\Qd4$hCg,:fGN텫9,ߺe.\x"b=!_BB$u>fٙvwV7&(7Νf{kàt2 H;N% t1B.Ţ; s6k9kΞ9*f)ei,K(R  qNa̲VG*mXcst ӥ ٧lÇ:撖"%ػ:k-ePhWd}[IZ ;JUyY@dΨ#vyyw\>#E|S<=}I`̦،{cj.qWWMydJ8:1(9!jFtzj>r/LW5jn8k{K{WgMn]Ǿ@J׃/̓jSwlפ`b0;k.r ɢ8)@ˢ>ãDpFb녞}#VD p(l(W-{{{MƘ7|s8Fμŝ/#2%wʖN:Z~gFл i5ŶX;wʦ%v&Tl&HN˛>4q"L+2ɸ;'˥9>6~j.\0׮#Cls&]|'gΙ0+kޞSGGO\ewm X`U>g;I̴L{IWu,([4kz)۷/v-݊`D&n3D(MH:^9'p,IlzCbhM ڂoOi>̼n7V1(:"͛'K7;!kFoJJ~9>~"NKhk75޸AaB XP\ ], Y̙GuOkX{(bPE<{ئ¤Hps={! @/8ﴔ"иiRr KɒNqL)*'?ela:_3TrCB ,c`)'qG/mig瑵H~[۾T%ܘM+1ao3 Ј}󱷻_: +o hq Zkg7bLMID2a$\M. Yu~j&͛۫%V"X`Mh6}mouy!/[oE5v;E72wo ;ḁG}8S8l8=Z>qc%Q4(=wnd,IߪMֈXk#[J4 GO~G96,f4 \goˢ^3㉦/gi×.<F ,-mxo1_}2NJ.ަq^^. PTpJߦW:TrM]e*jVMloÇZ\kk5zK}1/X`%ִkӅ[H#EjڿdШ5v{.#y#rTeݦzu< G喫W3oN(ERڧ 4.夦f/[Ejbxc'<^5&`D]@#m옧2O=e ) &OY,Nا[rթĸXMQC7W;;ӰFo귶̥KOt|lׇ6 j;wlm;w>Fu ,X۷Ye`hKk]fFlLB&Z)Ѣf}}U|5%5nw3"Ngi?mr#AX7qdA񎽓nSw+X#*[FOV0'=:&*`]3gŋwE6;qg4ʽpaS& !Tg9~Joosy!*ljCA 04 N.mKe[u>ǕʍyW8̩ٻJĈ :oKpg*҃V(׬ƙ/-ʎī)u+nI)n'ԃm޼ti[88tYl4Qs1*,7.ē0Stv„*FZi%:+b`UJ!/D\}g*u_PƁ?4''Djd[뻌&Z)RJ |4VovZ$2qr^mo?ޣm3wG}Z9<(ޥ&@WjhN[z/^m}V fHП,A)!焃gV0}+ woAU)_R]+>pZ't ҃5˨Qy[ra>ܦ;6$09G=z+8f'@.]z%o?qw~L_o)j˰Eȑݭ]S,vv!][E1z_\ZVCGsl') _'K},R,P^sW+srbNO99,Q՜9JF;91X#w 8"D^IO/{-s~#q/ܹ>ov1^=0l2x}#-DcOگr' S{gǜ9>{H]Jd!Tj ZJ֟6eDP`UJ3ww.Z1EVV҄?:Jq҃J0r) i_]j[¢kn9dQ7*4mZ_]^˥Y,x|{=z;'8qnsz_txy+k91)l7H-;}ijc2GO4Ç旿4};Uq#z}ܾ!w Xa@U/KzK昝8{{wOqUn}uDj/MIkmO"eͲT(̗ۤykԷrTuuz=6iKi5rbƶŖWv}ҷeNdTO SE{PhRzPG;=-+y8;,ā^:Eɜw V3gWy#oDHcsކכӸq*2Yh] mnO{g[vG⤠؎J/t.]W_ͣ4*BXEM؂!]W/a&tUw,s+y*WAYNgݻB{{{MƘ7|sةX·uUӌitRP)[ۦ\ڢɉ9`+lнq\j>L&B{yoNCzĻbY.{ޗ>hj!E+aFE)*;|o֝Z9Ā>QW`_ "wQg01|y_Lq=6k#3^5$Zu WlK&M֘Je-ptPF1w=};FymN^P{sK}>n;Ŧ&N-$`xEe٦OYw{9^'~\$Ԓ_ƢM kt(}jXNְoY̻>Ӗ$EvoP{R֯'=h/  8R)f-riV.^,4[\]S2;-;6'&BHRV.OX.x=kD>9Aj6W$Ϟ}\$b^Vvufvg^z)h4n𣠃@Q][3&maSϕS>q~%(&O'ba]+/Tl=Q/V>EnT.XʜSszDDB[k$kwx1wa`P#-&#+mS.v~l߫)Eߚ^N}-&[ؿJsƢ+nmIKt(kD[)#sO\@ 1$F!5ַTqX9Z9Y-7w%!q1BnPv'_ s],R9cJ*^oych0 Dm%.NSM}G(URtagަhD?ʇ}-f?0nhf͐WA,q&..~ش5X'H׮2=} z݆/|Xx*(;rK1͓S O/Eߩ]G6|zJz~c;% l 6-"v?s'Z=P=Etl wv0{P({ D2AҬ&Sjv{.nkgn"j>5%+,怭ko!WghciqK Gwe h. L' )'w1 uSNO^yK ivֺYb[JWդ<+lY9M64|Vh]ySDwҬFLcګGB&XSr.4r@6E-c iCͫ3@b HGG9G(e`ٗ׶zlѾ#h<0?jTl*Wd:ȁt i)E}w|U. 3zoĉוhL& D^O]䡏*ꢴP6WrE]:Acy0[R0u@S"Xd+lYN #K}M1nxM%}/%\Z ])tqFw WD)DXuyEJFqڙ3_7?i% YS;(dlKѠ8Ŗ ZM%ӟ9u _<\[`"Wp6j5r`,ﶶzLa ]))KSk]5˞dJD >g(9ƶR[`Fqj+-ye!Doʛ^+ai噣9ʣ1yŕn"W$V*$h@Y,C˱̚8g@Y:^Rs3쓸,OdWnJD >mo=ZFK*!@kn^;b.E o૤r/-ZyN ,%QvZ(@?q}.=͝;0r0F(^FŅ,j[@aɒeJX/cGhg2;~k[[ݧ˒ wњ8GѱK5)1',C_ۏ}-VZABcK<{ -@dgQ;wtg 3kBcP(ᾷ5Z.kU~T?ākbȡSQ~5_t)2"j#"L#MwË^޿nBY9^Tӟ)^1yI ;:;G? ZJWdW]h9vY#/VaNvM1/`P`Mo%&2"J<}M»D}_+qQ&^)C_˟;/m_xGG8O|{e9"~. -@tVp"j#,rlY752|C®bY?sByC , c`i?(اݹz^䥗o,``CWG{Ek\G ̡ec:[nGmU0]ep$ oQ*f(5K(@vAew?Lu%)Dʐkc^y\e]{&1k4>~zѬ''Ԝ>Vě~U#*νWwwK]ك'?''698~ؗ`Sۂjpk[TML楲̓P|[g<9X8!qu7eHkẓO>47o>:)ϴec .{-j;3k;Khh{ aQ9]K< Q4zXNOԚ_)d[TKL? -2V{<~j8XQQPZ);dWoaV+o ]ϓ U\%u!,aYj?sg<|'FˣXj %$ y[i?6O=eNO+ $ [RP09 0g=Yޏ{r$ۯp&=0O D}DwΞ~b_8oONz f8E;iWmN\7f-=2"{Nm_Qdrb2+syp Y祎>rqdr>3HozwWQ&Ba ,iY`M,}4Xk$d/b~{8ίڷcg^ەX^{- S0̌Ɣ?5Ƙ_485,AUY#,emѐyeɿs=,W_VC7٫:/ fQ +,`J[(#R9v?77qG{eۀq}C ?*(qb LEC03V+srbNO99ql)H0jև/!U2}ZCɒ%JHb!q^Ue@>X`I `5xEjΝ3[[ϻ*{]Wn-2Zbap㺾a;wN4J F;;-lo>0ŷF# i9 X'-̲_JDi̕1(k~Wٱc>t%e@hq %@/ AjC(7C}RM9#H( ЁJXP`% L\9#E}]ms&CGghaOSmZ!bAo`.&UzfF/v\ 3LJ1fg->kΞg 6B@\0|E29>6[[n`kȰ>N4w+[QRt\+JG0s͛7_xᅿ/⅞YXte3R{_ ChY0^IX_1bJVv5䫸ʔ7ao{P![O1+L,]}铠r'wU:ϼrm?ofG?~7oƺS>VPM %b J2*r03p 1%u"2(QKsjd:ruβg!bjJ\Nq*LUH#<A;lO[(do=tS؂#dE{H  WʖiăggތB:99?o~UJɵB%Ɠ .^,~Ri} Lz( apE#!~{r{ݭtv[r51?wkk擯}kO=C*-vȍr׋U~cT޲i?`N̡PX@no/`ll03ᱴrEBz7CMZ=y(^vtΌGv_V"3W`]vwi/ſ'(>6lk\F/ٯ(5[fE_j7NW̡P'k9e菺 "U79ԽB(RSQY=rymbfiB8-9x Zw]XKX+UEoғ 4rj!@#IuƓf퉲!"q:g'-Z Y"r49^Ծ?ÎPbHuSaɜW>/1&R,3"$ q%N76D!0" ݆}{4f^TҥuD:ݩۖz7c _6G`ÈjE)ڛi`1@-m]gaB;M&zK-rQ~v>`n.ĈX2Xy_ 3STT+"t1#3Tq&j~XzG'W_b[a , XwT 9F1ĕFxmqgNg5?J50XqzޫNMeYTTwJ]vvhy=F{9>6n= -ݼED395T.S̼S޽{~ X`ubZ%f@1嵂~A~׼Sڵ{H}~CŐ^4 5$W?,`=P7Ks!@xs*(XC :v.k)Tڝ=[MlrƀR:PEP ٵ-(SJ(IVw|f@wv.k7$v"-w+7Jz^qn> $,o(,Bo^m ʔ{|4o(A˺G,%»ϮQ%=8HH)f)8HcjxzV5G]_6KD'jpAT 0AܗKs|l>\`]y0''O|k$JDIߜ . sFT6=vc>\V;OCy'V-u,Hy{mDH(%}s@G>80}6†τcTqLjVbjd & =5BtZyZIT(&ǨĨkUcYg L1 Uѱ5M#BV<2Q_ SUm{=MX3(\#@ EK0'qZ02*d3! 1j@).jM;<\^u!q|+mPY)zSl,E>Av*d3!㠚Q)Q;<;sst* ABF;;櫯d|Nys`H$M˛w srWsgn-;E'n%S&cO}l4NDIQhej cc_Փ'{=>C^d &nߞaVb|5&zO S4^P`A5۩:;хJ;#}QJM'}#M2"O=28xAatjV+[|E;HWp4Mi6yd48xAUǐ>^Y^/^d3v(} OQp4LrM^iF\j kV( $΄>GSQ\FvC/(*u˥99~xzZp%V@֤w&L88ݻwi>y1ofeO\;-k䵫ϖ,Fh禝J׼IiܻwFHV#c̓ \`]d!L Y`ry7r40"(f&7a4z!독LXbMbІ 0'cZ8kMy 1$& j^I\~z% nf s|ln2/lhqdH{o`cMQB+,ju6yب^`xE)CrNXl0X'l2\!Ȑ )O)C`Mf]l PNXl0'l2`Cdwa37Xl0 l,,s,g!q\': ,`U`.^00(YT .{-h { .w[, dXrDFBYF@/DFšk׺S0(z! 0֐5`DP`=B,>8k<@O`cA0Onݢ?(f¤.\~t)3?O~*c^xf4-ҥ[`{{{/NL(2u/C0~ `#b`w^|o~󛻻z6kH ^x0WބJ?/O?}/1`N4ڟF\N [8`lݽ{wNя~?lsOk7Ƽ曌'~8*<'>yY_з0IݻG#07¿GG{eYVzfϤw6D<g?G?o0{f!|_W_tooo0{fi7g5Ӌ[  ˍb`%4M0KQZLئ fP`@ՠAU L3 `ni\+W͛/͛etXsLc'0iP`'n*L 20+P`v .3]IDATLGY}*i0-QZ,mAkL*q*(`,sKs|TAM`o ɧv?uV$(`\iI ɵkOp!((`>B,V$O0WQZ,jP`@ՠAU T ,\sܸA{A07Ks効y|y\ ,q|`B~-Z& ,qB_U`krii0X`̐CV0AU T ,XP5(jP`@ՠAU T ,XP5(jP`@nܸr5v[nذa[߿e˾J[kW]uU˖-n:e,ٻwo[n]5bҤIڵKMM6lݻ%i޼yzjѢEVVo[m9{[o5###---77~lٲk׮ՐӴ`|;iiiXմ!8my ji;JJJ.]oL:UMq߾}-Z\yyy6m-}ѣGO0(77wȐ!{QIΆcvsf̘ꫯ.\?>|̚5kʔ)? -ZtUWiKιx`W.,,֭СC=ZM?ӧOaaԩSǎ[o)#iӦ~>Z{N!8my 㠓ۧ _=Aҥ˪U:wB;wɓ Uڗ1iҤGմw߽_~9PYY}}vmǙx{nԨQs3;w|w}!>{k׮Сl+++k߾O?}M7#m9t5?;C[n֭۴is{Ǐy Fu9s$iŊC 9 i|D-)NvWX5PPPРA+>۹sP ojڲ꺃.]g޽{z3f$$$T"ju.//?~͛lRe7OVϯaÆle Zr͛۷o>zÇ/_I&_~yU,--lԩSbbi !$&&jKΡmFj޼_uڴiӿ'ݻw֭ӧOuԚ4hܸqeeeeeeմ#/_tҲӧ]v˵%P&M:t?aG_9r$ܖߠAMvȑ+W.ZhĈ*8vXYYY/&7l0~?=!3ƍk۶… _{K/T%96m_X,!!!55/!3~nnnVVVyyܹs%fƌiiiݻwҥKEEK/kz<ح[+bٳgn׮]5헔4+V\q{iӮZetꫭZ[Bw!Μ9߇4g-Oat3>u]WJ8'\@ 4& XD cպC;vb{˖-b-[)7dȐX,6j({,3bĉ!x399jfo;o={vw&MhӦ#G hժU^.\m7pC۶mSRR8p};wn!==='''>Ǒ#GΟ?[nZm۶sΟ'iii999?c⋔=]vMIIIMMҥ-oWme!%K߿_?+SO=k׮y>5k֔l2rw10u'x"аam۶͜97|7GZ*лw/wY`A|zժUC !:Ovm!|pΜ9!X,vǽ{ӧO|񫯾:o+Ç_y啥K.\re=y1cƄ***'M6-pmڴ!l޼g= 9Bvc]6+++PXXx_=~VaիWnݺu;v?~Ϟ=VU{1W`穛ov!33? !<#;v˛1cF8lٲŽ;B5/5ܹ3>q饗~YYYG!/o=~VJJݻ !~G˗/O١C}&''W*99911j 8Oedd'5jHOO!\xB~i-[l5ݻk/U}Vjɓ'W=aÆ3g2dHebb\PQQqQXyE]B_oU.O<UO^;w_PPiӦ7Ι3g?pUuxtuK ΀C3gΌ?j=PTT4iҤypqWlԜ9s>N: :?3>alG Xi׮<BOzپ}6m駟>t INNԩS8g+]w]-233]6пx:Bx}uzL?7_ׯ_fרQ=z;677d 6,nݺ]vvگ_-Z߸{^xᅪ7,^8гgϪhK '|4sxGMwڵM7ݤ@= ,3iӦa֬YU*xf=3;wxVsgaSy8ŠJ|N]QscigJo+u`ZK}uKSɐMٕ4|x?o[w뭹 M]%oC`@ۿgrJ pHYstIME :\ tEXtCommentCreated with GIMPW IDATxy{,++KGG竖*,,};k%B!O2wąYSS. ;CIBY\\\\\\XKd2 ˆĉ'NCIBu?>P!BF?9992a(B.ãwѣGJu nB!$B!7]Np' PWG%B!7£ZuO^3B$B!P!Ba(B!0D!BJ"B!$B1)EaTLB! %`JPi)9# û[dx 1CK+I (ZQis⒢WwƮ4t4J}C=BJ"F~vYƋ557LOZQܳ'uaMt`T&?MfMuu:pp t"HKɴ]WnFqBlA-::1L!0DBpqq%6r0$$ySPUKMr_|k=mںZOO{RK^^g1e{1oG1vJ"2 ϪbE4,+zyܿcco&$[~ђٕ̹:}?į4Phjj(:m;F,%&ţ[~EMMMe% %'@Qخ8KNpB! %jIhMpvPb}ÇqРLNn{豃j%8 ?|;ő'+!Ѐ(JTD++?Za`ܼlN?V$[ \!$(Ygy/t&,z[!.>!ʵ` _yuAQ_\)qjBDF=*J< .@NNXC]K[S nE4468 -)!:asnF^3o<|_Rng!)rO}CU "---٪ە1.8$B_OHHxw$%d~v8EzF*QI~ Zx֌ٮ-̖'pX]ssst@NN,Zq7Y L2 m~.o2ՈmBO t3',GgZ((NN@J"ujjٺ:)x~ӊ7+&M#Hx6ʤ)gΙB{f- ^uNMpv`oٶ&< n߹qCqqqEܸ9w4I..%/eOUBre%%ŊlWÍ BݍiW^NNF]^+gZj^.mҌ 3ܝU4i-Vu8;}OYsX2tKgIl ;NP4Ե.PTT7#~2s/YC]"Զn_;mʬCkkZCG춰ȖML K68e .VӒL|O/&.ѻ6ەAk`rww=A+%/B@`` NG%O>S@LYUEl..>}U {ͯ:[A[PPHEYmq <JjIhk%%duYJ"B;mJ)U c(BnϠO_ûL!=d* BT U4iUFsOk[P2/F!oWv-#Ɇ?ǝyZj޽w 8 ncJ"BKhjj1b+]Ʀ.!!aNNNK.}=MXXKpppzzyc-X,usr-XAM{=O0UAg=ٶ%͚``NF¡L6 G<CeC6i!*ϟ?}Yؾ};׭[꼽Νcrq,Yڵk+Wܷo_CCۨ㕔T;g0dYΚuߪĬŽ.=ˡw8x5jZ_\Ki6ѕTVR]fdíݹ݇?~pPUQ߽㐘8lٴ{oM]fO %c^̩NHJJnjwxx?_Pqu "&&6n8IIIpvv _fѣGKKKW^jq*}vÇ744GDDtW%MJ8d!괽mےtogO>=e&p'n;رJbw#rEE{Z:!A9k("|cҲm4&CL2sm88g?j1bĈ#ZN8qĉc33333V:::_# 9nN$n ݏN:pp禭}oްw878U[cibc?~1fUUu|}B?ӽEEPuCL&2h/()-&.۽㐩 =mݼ;pf5Ξ!.L!f%%mMHݧ( -ݶeinۼg-Ғ :)Iii)*UI-=/7BGh]9992uJ&SQ .Kl("#..)Z/^6ܐuk>pxnw>AYI5]%RҒ XOpGܼfV4cѩɯh߶E{m`_RZ !Q"Ν\"w;#|LC~ :3!.yS U+9R߿}j2+XZ b/,,bߋ !/ϒ#{e#o֤@ZrAILKjjknC޹q._#Ba(ЏBdjaxoݗ$WRBP,//}7XJ_܋]]AܽU>dU2*V,[_ZXO%Op;a ҬWIH˝;}u̬t|Ba(Õө4vǨJyJ؛ۿ(=AG[oђF&e%D5M mIwTE%#G=sr=LWybRfu+/ZYiccKShxHh@xennnbZniizIr28Ԏ{ch!$+p*oTU1DEhnW.@<sNoEKfWV~GQ@SSFБ&N>J>ZAU8 n P]<>W.g7KJH_]T{I~|Z-r׊ظ{Y(MpvGoi).up9#ƴW_^^g1e{1oGd;UZgd1Cηm?GJJ \Jb6fZ#elWԶelPR\]ZV2?7!!bq )IBB½ zEokM?~̹Samii>eU$7<\yyR  Xjk%%i),5-Iny>~JI[fS. .vgpc;ʋAgFG%|!Abn>Ξ$|Oo#HNNb]~լ$h (($/@//cuZ$ :9&f!۩~td]ߝVT7#D wp/"| (؟L _J@ Ds 󍍍&fMM ԕ9rr3 P׺ښMbx~v1L8DF=*:eu#n8->!n # VDCcђR݌LLOl%++?f 77wdTx]]Izz}:  "v?U[KWOϓܼl2x"1 :Oz'"#ζu;2sFBt|$#D99Z:`dh EŅVD# .J0G3oin>|fCO u,yWoGmmͮ=[3RGrLj=bZⵚYCfjK!T|6:*;=#l;/? hj[#ϷqGB_cUč+0u3FIO."RSee7555SR?WW7ԛPi(ęn: jkki={R{&h#>:>Um{# /DP( (L`2 ux*BJPl f KPs3KGUm넩/Lp*;'mn=J(((ۃWNNJqƆa#ee ^痔sI@@0t!:W.׭XJ 524f?xێ F{N 7}28͠3'Lԉ%1{̘mo8eJey ߿[F/ q޽Z:Uֶ6þals J***?4׿GqJc)g up񴚖$q &.8/&cߢ3P׺x>BQQތ83s|f0*;h[Ă^1觶uiSf\XXd˦L&SSWf톥TMU#U-|!m.M|&f߿}{7$._ SӖt5qÝ?f ue>}nKtK䵒ȡ 3 M{?ԫYWk P(0U9ɏP+׾; =[ZAAuɃ3'7\gdɮxx&8hD8E8u+}{U*&*2|-[P?ĮpK_?M]Y%WQq 0DG˜X 6 Jr37o]M.ؽ)ZLNz!~ׯ^hj_2#P⒩42۰,]~j|fy44V?rA?5iyA +C"g>uY ik'n>FYaY{ )J Rd>Y9fxVY80B8<  GtwNJs`Kk#~NcHIJw,Z/^6PG[&Lzx?%E.ÂNO:45#c\dzm9"n^]~BeWn1uW4tFYI5]h۵%PiVb: !Q"ΝڙY8h˰D{ ]v<<<~ںjZN]rۖyoݿawrrҎݛ.hi=udeSs rvC4c3qqPGHMNϒ#{K eՠ!D*k0-U͓!!bcw(/拉oؼr-{xvGvAۙawA;8FCJnۗMLr]=uIrJRHhFFF?)|Xh9ђL2\\޵LLHzHމ+_d-/۾-v>^JFess377w{ y IDAT gYʵ]$%۸,*"QB,k*@FZOG}OA %Bov ZITVVEE{eeZNI|XًF;vmEKfhtLMڪ5^?oY8{KU&n>3UOIjF 駪%E=IȉfÁk%B8rEQ!.Б~> F6/ի״iӮ\WQV --//^s77NB\ZeY yWgЙD :SVV^QQAg=I6}l!!'55E<.N~[^hSHHk5`vؾe_ћj>mN{ %=M016 }˾5wGVFNJRTII%:*a`xvXv}~>T%ƕ/Nj~y[[[|g(Y^N'JQĤYr*U4)!3-_4/A`0F9rpJHYYC|čۡ%$$dʛ6m*((ho7)IG%)OmXiVY0_@b(I04GA(ij{0OܜY_/<tf5Uqc'677?N|t+".!.-èN{͛UTTO<ٶBjSAIzka4(22$dDdzuDIiBwY%w} {ϜXPO|7R"߻4y⛶VT5 //DfȫP&RnشpL?b;G Y>*r<b,)dN~DZuܜ[wnHIJsss󗕕ѣ6ޥ+<;7= XWc~6n^{>nv^V0Ab;ƞf&PAhT7S:.ݿ颢ӦMj{Gh~ j>~gC-aI dc$qEkQ WyI%d&L'8qL&KQbٱ{FIH%޻YQӨ!뷟{M^xd? CBB.]ztU[lYHHHii)N<$OpߏNb[̖'(y+&558눀͛b"59c]Ei!?̬Դa#t ##IIIERBj_33XJsS>V+Pײ`>8+;QVV^ZJfpr%$$}5!^ԽC۵]ػW_2NXX|N ya}>xNNNie++ʓ'Oٓm P^ Zу$899u~Xzo_"2$3䕎8"/G̽wcnT߻B1jլnfu2FORB~F9En'Ν*.Ma]mQhf۽^.ꩆ廏y @^4IP^ub6uP)}G (A'MMgK[H|ИQ.mMʹtMb]raf{ufhЗXZX 3{HCGRi /qzeV(Vl齍T/+##lQW_vd'z}O?Us4yo;tXx!Z޿:jhFFj EOO{b&IKn`(¼ = T7žV>1u˗/lڴIYY߇6hd"LM̫3!Ψ0r5ĉk%ֱVMUCVFnmmm q-v_ Dff`>g#Ξ`9wٜgM}~IIYg:3e9t]%f;JLL;uꔆ ϳgΝ;GV*,,.c>44ٳgYYY:::_ghղ^ZZڳgjkkCBBȘ.{Ϟ SoZn=$2"k;@dO|AM b: \2 P`#ddS'oglhh8mڴiӦ{C؅#É;,B۠f Rw}7jGa8j~j~j'oZK*M2k:u%c;DUO>-\<Ջ)i8"oɓ'@BB±cJKK,Y"''P(...pܹsԄh4󁁁t:ۍͬY.^iaaAFGG]Z8|˗/vl[=zOƏp6|ao!6fIOKJH͙x̝'Ѷ8zz0FYKs)))_Uc 6l~y9]UKTڼmMsSS:U- G't$.F`q-UY3<ɝfhЏxU n޳sY\ݏ,\TW{+Б.-+KKk& Pћ.2h&۫]G233333kU8x?ߏ`رă'N8c\\\\\\EUaDDnHr@ߒ"55m e2+,:{>gN]`s{ܹi/jvqU =w=N9puO}WR de伖9y2 8qHQQy5.'[XVTWTSiǣ=v091ģOj [YYcM `R2KMMuFfڴ)8:$oP'c$'dhniW ϙk?KoڲjޣZ]v~aзhduoÇ+V`-d9998*0D?U'tj vwg[Nd<C~@YI5]%"BeWn1uWqq1Ϟ`nݽwl?3e8񔺚fdDݛmԸlqc&yBdo 7 Hvys֭:{ޔ9SuOQPUTP~x?%5-hE;=v0E;80WPPmҒ ؞ந(g2T(۝F1lj8;~^^^$7.c2inhj@Hh@ԭsRuqﻮ˗=z+]O9KL |(JdAlzǡcm%=; q%n^O kll'*|UXB4|Tjs(*~s]lHBJ"F9wlM^^vU?^T@@h? |)^+msױ@XXD[Kn"l%<~8ARBƵyyEg[&Q+z}@FZ髮SFgf@E! %ئcNSCm{(UG g"Y9dH"@R\}uԀ]$$7Df+w?hF,D!8+GdQ]ُ~>->s겓ᮓA/+-ϟ3~M:gjZP\Rcہys~>?w FYRB Cdy98AQT$xNoqFQPJ,Y>Б;vo1 ͨ]!H^V~N ʡ8!M+c_4Jr/Z{,y_HoS8ۻ MWAUz gVϹ=W^HFExN5PU8oإ3d-k))˯IspMA{pj&N=TEm?ȿ4' U4z©Sv3?WuƼ9^ :GY[N0.XBBW5i˜X 6H!kjϞ! Fyı9gS8b٥o>ۈQUAgwF䵥pQuuW_s>^>be !: w%6`5KJ5ue@_@[[oC&msMeͽnͶW BݿXOMƏu}mB(*.,!ǂCf6mUU>~~`yʐd0*4G,K.w?,f>7QWEY蝚Fɿ5Եnۭ&ZhZU-M#YiW_b0*?56NH["rg47pod2gi@D8:v 59|CRU"ܧaݦMNIjllܳ,}`o;7+߆ "Nˢ_SUsss8tS&/:e4]m+a~>lkJIJ_RS JJ/KQ-X1Lrcqԇ>J tNd|⣌T!E\z1Y3s2_v.jfVzIV@Fƞs'%%XZ)Μ3xJVFq_}ƍKT(/x %h|_۷@C] K>pp'x)F݊zб D;@{~PAV{rj9c~.Y,%%}"(/ۏJ<*&cGO,Y<+)8HmM%% g5^YQ޽|^ZPVBe*ꓦ&7//?I{:9 쒪Q||9PYa\}U:+㨄G bIO|N6 uԵ?N2Y>(s7ǶЇK~+)!O2V8TII0я2z镫F*B:/rs2 '$%TU;%жM9d*e6(ωion,7mnN{[m&$y-eA?)ғq*E^6.&r֑ٔ{,^>WFF)|:M7MMǏu>jFkPJgky%Yaݨ^vl;P__wЮ*F\Lro}Oo|tA:P?92nw6Z+JdŲټmMsSS:U- G'P(߷'TrUĵ4RP/%'Ъ0I.yBKuH/ B&fЙOchNd'MqauC>}AkYy~>fyyG~??Oa; B_S-nGMlZ>䱜,*taEEyZs*Bd;z q֑ I ZXދ Rğ4p#!7aO>&C]}AIDATabP' KJ,=*=!SrNn} {ϜCABa(9UUuxU,aM sg/bЙ1GfH7eүt}ru\n^^1$%[=B|x$r@EY59D%3qCJF吓djm5X˷fC!QI })Ikxܧb}lyCbCN>OpOM2eNaˆW!:tTop~#)ϟJ+324>qA9Y!RAd.|fzx<&&s`QK kp ׮hl"/_g6ST7su5M"4---e/pD9:Wul^IFci^IpG!!mZIB!$B!P!Ba(B!0D!BCIB!$B?ONnFZڥ3~3fb!PoQ^N(Te:dDI}C/F>Һ455Bed+BCIS55gχt#n͠3uuF!$BYo}W_:wԧF=DyIi1q@#f4^*sBpȱVՎ=`OMZ^^m(*.>ZZAh𝾑2=OQmXv)nhH2 D}-=٠%v|Tx/3TS>s=@BCI4Y9a 7vb/Q1\JR8RPZVx\ru5ͼ)=nF]{fe+[[Π3V6qKF:)Sp2^^vŸGgM|ZrXbЙ۶eѾjZrAnfq{@@lνۉG?| ݽwKQAu5Μ1? Oߊ,>t B! %j׬O3=瑅GX)Tזz\)$hZ:PY"8OamMT{+(y+&55b Q^} s'Kav))ACiD ʊ / ^՜G =dɹy/R>5PV‹,Ba(PZИ,<0}Or%%Z}pq..^:[]?V#_l}ia= ('Ĺ}X$)+-ն/}O5ԵȧDDzƵ{ڨg`nf\PY 3}BCI8y0Ǭ%cGO[dFiY eF>Y8뵒89޺d55A'%eۚ 8nD*OL'?ۥaٔ{,^>WFFCGRi o#Sg:|`1)*JB3(L&Ϟ ݒrw !4<*B!0D!BJ"B! %B!!Ba(B!FA!/G%B!7!BQIB!$B!P!Ba(B!0D!BCIB!$B!P!Ba(B!0D!B)Ј/aIENDB`gr-satellites-4.4.0/docs/source/images/au02_default.png000066400000000000000000006312711414055407700227750ustar00rootroot00000000000000PNG  IHDR@6OOsBIT|d pHYsaa?i8tEXtSoftwarematplotlib version3.1.2, http://matplotlib.org/%J IDATx}UNt 6v t&C&3[ 8ĩ gԤfRV%֔4NMՙF+QǙsThrM e %(&AO{0N숛fG"ڬ~&6{<DzmFP:@@CP:@@CP:@@CP:@@CP:@@CP:@@CP:@@CP:@@CP:@@CP:@@CP:@@CP:@@CP:@@CP:@@CP:@@CP:@@CP:@@CP:@@CP:@@CP:@@CP:@@CP:@@CP:@@CP:@@ȫ9}̛7O,pBm[~_ʒ%KH@ߟa˕W^a 4͛'"3>XΞ=+q6 m@ ' ^Y!( t!J( t!J( t!J( t!J( t!J( tjMj-C(d}=GN}dDvmY)[.J `Z?DDfl{J SmԹliY2۝RW][VJ5,o5WʉMHֵddb:'?DLVk2>5-= l}.) @9);[ٵel],h+@&zCDdw2Ye{`m1?l[&es@m1g%@"@*]kJf %mNR&le2|LLn @*]>2D ,P:@jMj-CR` 1{Ɍ-aڲR]a+@Hf 9Z=!"2cܻe7@*X@@P7?l[&I_+ Vf/@{{jYe@ow6h+@H7>f y}.ٵetZQN˒\@*H@Joff [.eb v o u3JZHe۶k@9{T*V2@LVk~ GHk)HY_rHd&OLd=GN}dDvmY)[.d&S2jP@@ۙ[}/ @Y zqeb\6@FtH ʀ q쳀g%aR(3 D9rR֏[zN֏=GNf}HUdזiFA:-Kr mI,۶_ٳgRHZg}8@!MVk~`ìN˒hF.LVk21uNzy&mkϑrラm' !klH_J}.E@ۺv,_̤P:@qR*xWR _ʈ=@ad (|P|A}C/Y6oޜm ֕W^)|@lۖ??Gʇ>h+Td&S23beٶmP .n-wϞ=+JEժ̟??Iٹ"Ȯ-+eeY &!kpy'dzzZ֭[@ۛ[}/d Jرcn:կ~%]v<}wwީٳg:Lh;Sm9RaXb (=_ٟ?V]R?-jMbv7g%(A[?MZOʞ#'}/ۖN˒\C% )VfffnsΕs|D?|1in6u2YX&@o7eΝ;eͲl2/)=<3~7Ck+৯EYA\>T*Yj|ߕ??ڊ!?Ai=#Ydvv-+3@HyT@:>CP:@d&OLd(d}Iٹ"Ȯ-+eeY`\[}/ ri|jp\m:( riG:ƟuZ vgs@ \tɮ-+ӚtZܷte|dMֵddb:'?# *]>F ,P:@@CLVkrĔLVkYJ,v>9rRv;&3H%kJٺvYևY ՚OM`o9 ƨ3Z=X "2cܻeYN L((.R`0IY?zPn}9Y?zP9!5>5]8.ضLLZTHnB E@T@8=a5Ӳd;jQv)kP/Pl@tɮ-+ӚtZܷ¦*Oih %@q 9;Beۺv,_,Sd=v+k %{Y.6J{j/Pl@t=)P[IDgv,kPҞ&5DZqydl (. 5*c +?GEn9rҁKڵaBI{s{Lܱv*3_PuԨ5 .Dni )"$ʾ &tԊ+?Eoc0(kɴG;v_G ɛ)֌~HB_K -b@*z;Ig#ʚ$M-FX/a οNHOU?_9yB)!" ʶ\aUP~@4ymjZsg9_5kPVeh eQdxi!ս=ʟv3;"Ąa 7ʬ 휾JW!p+C@2 Ū&=ФkhavDZQEhO9@>! 8X6AdG{Yx"ڄ2UgF lF ( @{`3H.fG$U`>}pXԴxsgfTegZ'=pI\,ܯ`rc&~Vm3nh#U䍘G\,q lF DX_ bٶ @DΞ=+JEժ̟??Id&G6Tacd(B!qz;-Kvld ,} i(B^XɋZzy*F~(X,fq ,G$_@h3 f @'|6:Ìn}#>/b@h Hmb~,VhFy ilĜ<>&g1s@.J+`&[.+ɑ3v`_0:ވ9[.G|>wlL|~\,ܯd( 2gn1$ոY8|_NA ,MVk2>5-={?h H_̪uPE_Ef@<hʜőD㚙g1&a.oYTBC@V̦n_DxdqEKSoU}s1W.JnGЌ~Pk+VhB>FI,"RcF|~-0s[LbzV4AQ,Ns1[m.1Y"2^|qyxl*ڂڙemٳRTZ>ddZvlӷɦ4%\"]˨>YcߏS嘬֘d$ζ"fy3rlͣ:&h "k!kDdV3fZO~$!aFxr-[zzQ1ǯ0<6@LgfYݿ@FcnsQ^yoWhB4Rd9^4&YEq d,5F~꨸ @5g C99YCώ7ÒPm\vWUCphwlA^6 gv5]r{b<fZƵt 7[Uk∻j(mŸvV9SӢܾm8\v---Tޞ#'eAdAsdև  Y̦;* ~˹(댜?af f,>ײ ~QqY?@Tym$ŻtHbԴQNamR=U;_QvmfH dѐN;˘s\{6ŲS.r2Oix6R?Vh,fS0#kIݏmۖ&'WgwݸE)ȲY~2t®LK ˋn)Ly]k$f&z8Igi ;LPjEC:ow5j28*lUQgEM!()MM\./~^)V%L]'zyT;-Se-Q&Eo}}Ӱs e۶f \={V*TU?~ևSH{ljHHF^ 9YҭӲdlvyy7YS՚=4GVVߡŭJlirL>)`.rKwY(9;GIc| YcdR'i|/$yye}8eUFԕyȻVVQ.nU}%}RrKs%peqZ_RS,礪ejCeG@H4>y,P2Mmd73H[a w/l]\٫i(*z:8}R2!~QZ_RS#9嵾Uwny]8'< 8;ك4kNVkI2<|/&59|b*c*]nh& Hxϑ~s~9r2OJ+ŔSHߕ$`.fqzqÞS[oꕧ<=V@J&ʬl)f<^j%bQaEE372:#7ellBd+ ߢAԼΒ+~QZ_Rߣ;2Y~?3Zu׭/z[Jnk.ٷo?~\޽[VXalTy$mc46B}KEܔc{pғsT>1%>\Gro"g&tղD_6F1]vOqt_G{ܟ3%:5iXl40}O.Yvrɏc𐂼vNs.ɕ-՚ظ<26g<aWU+E-9y-#Q,iq=Auqg'f{yfJv=;Z)}eV)%D}Q厏 =VGs_8#_xhۤeb^0{!Cu'y'/dtTőucUE5U]=GNʎ/}T{iYP)Ivz0gzna۸2Vbg&8 IDATm؀r^MIzykx~gFD~h 9~ZZL=2q&}0܃]X"wQ ~F^ˍ~\q=Yoߺv]?.3Vv : h 333~zkk.,Ht' NHvItHYUw6 ;0.KE |$$ daYuڲZUW?Cd6sYY~~^ۣyzuZoR܏eIyGߚ>H#/r{{nj-zj&GMVk{ti I@m⮻_~YƴsN={V8\)ˀ{4:iw 4I|ϜNeV%ٙk5}Xٰ[|s sL7\rE ![E=ݻę“HS=WUW,_"YY"_ur<=:Ex3[၅zTY81x:-Ktӷ iRN_KvlM{T?y4j&7Geٟ9jzN@m~Z:$W^yΝ+sMLj<i4y;E"kkSGOs>2(ށJ3J2Qęz-maKY7 j,.f(Šn`өs̮w!L;GWWçծtt'Www[~YIGu!)Y(3CS庥r߸'[ɠN˒,ۤ;>6$bͦrNy0uUڷ~jڏʪ?3YǛ~~ S@m^|Iygdpp0C*ͦ jѯVC-Y@N#ƚӲurL֙*;Ueaʥ9M3+i{]g}/({N&9q´stuͳݢYQ4f^zXD{TW\UP!Y3g""{pJ> 8E䫟Z#.۴N@'12$7^|uZiwǬ몬.Zzy">$n.y̛7Ox T*E(iePM, =7DoȺE|n}Q?`t "{& ղ <hnAV 4żv^*=I8b;uKfXv\:Y_6i@{c;6uХaՒep:תvc4EQ%$8'>۵_ןEw9P=YPo ?^l}3-1Im*z[$|?*_8yECJ˶57DRQߴsX&gof;A80 ,ŢtҒ= @<:6!y4Ǯ-+eזMu8PLEX<Lh: #tZ3[ ƵZo%]qד> }/ǧ6^n^*j_ 4eE>" 7QZi"O.܁vG@,Uνnj ظv㼼 x6D$1|qI>A\ۓVyvԃ~ߝNct+on3-N{Ϧ!ښ?qS~!k%Ȑ*Vq[ehLVkKc'u툠0%"wP1X"[|>~a@tv++ڜ%/z[VZYZILKEe缝hЎTMȽ7|P7FeB#J8 :߸ CRb+ylORZj g};NcNaiz|gj&鍐0aލ$ͼ {u?~T^*]r Jߴf1J(J0z+W+u߳i>p<]𻏺5|ż"gN'V^!}3Y0yۿmC?8Z*Y׸Sf63k `j(dyKidۆc6fmy ٶ~0ÍM80$ fQ+w]33kvM_vjbb*peK0̹( ߸=ml9kf5&ni49Y~X"rϦӱU~\os,NՌٰiu.{~a|ባg:9$5NwݰjI߅s{i[¥&|tlg0&tUո}m{rSOLj&lAu'9 8,Ŷrdž|!W~_ ;6ˮ~ɤ]LMzg_Ux1^yˌ,n ٲq'Vmmv o+i(tfY^C@vI#l7AFŬ$s:dzV?x.ng>pl^!"DMg"7_1&"<+ E3}.Yx\i䡬s]'|j|r54"M 4gۤe֤?ݠ=Wh36@tj&̠f26kQ-kʞ0Q ̖DJ=M+{U2cc%mEXeVxE)Ctm9_{2X"_5[sUӲufz|tخwJ,!鶶vmYYOm5ͱ[eTY^C@ lc#AΥTc6m}Dwqt̫^sUK/7&"<+yYm2HT8j>K/̹Ѱ.LՁKY瘬1]?|.gԴrœ-`=&yxݠֵKa'"L4XzHN.>spvH@l .L=MrtUK3$oYuD-Cmo?´A3un^TV=^TWVSVjQwNEL<\# 5oP%A4`7ò˛逈߽9hZ6@*)0}>DS5V9ѱ \&1밫<;!~~enDž=s!nϡZ&SXy5EnZ^_K;J{kt jS'U]WWթ~u}s 螅;>6$b]vD\ݿM>NL)Wt;|bJbG^gqr9﩮]-uen훇C,pe[q4GZqĔL,Ƞ+LArVvhd$=,e] >NnQ}߽vq^i6ទpULqtއtc[=dۆX[:N@+t}"j~LVIɪ7-W”?Vfضzm(LCA0ଷ.uZ|7ÞSP`fy#CʀhP{oT߶:;m`4 w2 V`&U}k٧1;(AA=A:N*wtR^pugdbg D}\RtR S>~1T2$Uu=W W{'kzw\bg{m{6MU5K6j ^f`TʶآGjsGƍ(˱SU3Wjv{Y}kw3l`4 d5buCgPyoN5}ikd#riՎo^:v}_"{=ăT :Vy.-׎{L:ξ A)tg< ~x" XL(ګEZn//41oDOb;֠is:~Vv:o6v2:Iz۾IJiueȥevA0sWy LVkKeJ|ባ/*q^ok0g}Ku299ڿhw'6?:Ddߝg֙stv=&uef?0tǹmÀl0rGWU:_wSq㼬ky!՚ظIbr$;U#B)5VpܡZZq/3}*7A0jK7IٱX߇筼 -Mc5<+"t_i2;9z˥ƼG  4n~i0Gׁmf^y;\<t]*]c7+lgU{US7l }@xU@" kr3 }^o4)$v[.+M]qҿ;5S %3xM|^|jזMmC*xZ}nie 9FijjWK[f?klƦ_4~Wgű AŠE5+_iA/ܦ ~mH;EyE]i=/AƳ kMe啕g7]OO^L_emc9<0cA Otu"Yp~ ?eYqxD4z4+vnvn-|o٪>N+??cwf{Ҵٶ#WcoA׹kUՎic*44,پy83b28a2gVӉ]MiJ ~3U%eiM˛)V -R;Du 0 IDATGZ8w_i~LVk=!ר3m쉒b3A M&r},qaӺ;gd^/n7o~Aˠ\+οyղgXPoGfUOZd=~ꂆ"gg I3PpfŔ߷m/n-]z)ot~G&2Ϥ|_y$׽Jva=a&c=|wC{ɓw}4R;,uQ0)i]NXƛRR^7H:kM= 2QW_=uЫoW&~!~ʲVg Jr z~ /~Fv;f)Y 7(j/ T~mNoTq&ljʰ"=&5}ry{#| ZV#=V"رU~nY9`Q56=~ /A( ;_ɡ9k׀.tҭw7Fŝ*Eu09339=OaOʫ/-ό1(Lgt &%W9U+=w;w»B; 8l0#O$>w\\5)"H`iu 4&2YC6"@!AЫojZc+je;hkѭvW ?690~iIIM{7#Ք;c)D.7^6k6=E`D7s½gG_Er@k߆MCA(7YZ̪cdƼ5u3w󣾩e}.͢Qw~fs i5}갚S\隂W |--mZ/̬36\ݿ@nniC0K_ R "ԇ{DTA4*g3|(+T)/ݼm%]Lq۾36=J4#վ l[o7}Fu=W_}I}|TtnpL{_u/M DD5IaMfie[kϠ)'wdb8SO1j[7w0꙳E䫟Z#.JTޅ~{Ļnw{ͩ{L!N 1)7UǗĤ;0L]yA " ?&<ͦ;vPeߝj'6бEگ;=Θw5u%Jl<\L[Eti4 {t*lrbV<8tXu0U3כޛ\dc]/+>;( *HEfZ̺O~.ϕoiBW/[""?zSY6r~ji{/"YxYJ,՚ܶa;03S9aByn][T1-kJ s?<D&8عAqe K1=m;-KtSwCDo;?7 ƲrJ's˯}9|lûGSP4*{:aBѱqe^ymQ Ft4 3"X"Fߟ07O+t sgdesg wgM5cʞ-=GNֿےَɽ{%??w^w9_t~@_j2UͤAL;;c v7W Ed|LVko#(H+Zy _}-+f߾aP uSTZN03'^ՊVRQZ"AYt܆^ lgN4|;eP[Iw}MR_I[K< QgPݞUCdUmPa2F. z,KD>;2(ֺEQRY[vی-@MQ+_AG&3ǟ{=tA3Ҝ}NF5},I/G4pG}L>y/ίZrʧ'WkMf:IaGo#up1s1+G:Nةj)#j5Yl.edƖFmKD~U%LItt t}wݛ8<鞓9r]y J=GfP{BQΌN4 "bnW;M'`K^ e>ZM]PAHUA-"ojG9Aϝny"R^HQ]ԗn՚ظ<8+iW܃Q-Vk(ϔ骜U'"ӟ2 ֵگeb0mt6ku`Y"C/NkP1YwowgDsGA/js_^hhv^:'P~R$HA&@ؼoΈ3ҿyEYiU!*]r45=[_y*K享"mLʠ:Q( WNVkKQBg:)/ݠR_:t{LMڐAmVQ¬qRz}?[? 5fk҆y~æruxPzKnܰOOmdۆmʷV(+sW/훆6irUW4ǡ;WT~ba峣 ,__4)ٺwKW_+G宪ľXԁ&uYF{/?7 JH[hG@sXk.Dd{cƂ0k@6T}LP})g"G.wo9QpgӊDD^:FN잠ly_t7k̔{=L\7HF/oVgq Ze1#"MȽ7|0L61{nr@;V-M:AjCt3;nKEϜN>!ԆQI(4Yiqe$OP9ԴpS,oj2xW'A* 2׉3D vru&)/AMҖ8 Z߻t ʴA´QoWVd'sgUt zM()@|>úN?$W`4^&풑?jtXVޕWV|9yRy\ayNQ?Yvs4Z {Zi.Cﻬojn%ԉSIUk+#ZMGt#U_D6p? 0ԬYvnPMX0mp)Ax4LyAq6\4Yn`4騮bӏ\t`En\$t+잠Ƭy~3}|,Ff,{MmjɠnY7a{gUvy{ǭH47_?#;kUJ&b>[/V:~3yuﷷ޾iXV]yyu -ҖA_މ/+LQ~+3뮒Oh+Ag~Ӵ%"^R[H* Li9q6vP}>qIcrpnh7ZW92_O&}5vΤV+Ыo6ҽكl{^&q^%g5om4{t͗#1'w{{JZ_%f/U_0yNF/Vt`ov_á{w "9vijER ć@N;!2ۘYwPM׸4ip)# y;Ƌ'ޒ, ;gƪ8FYjvT箚 uVj*EԙΈ :6w&ﷺK5k\>?m|)@[Y]i[7?42ؾy)?7,κ}Aٶa}m<]M!O][vm@ZuH}=nZiTԎjpk]@Df;t[Afo3vլm{ϡCDl@R@nfqӇdq=|ɷ/]4wʱ$ҾnjYcP %/[5u{X޽0UؿAߟxMrI7W9c(37ٞ"A+{Z-änzgót{H0A ` !AQtAsU30Ni$\әN uMU(89t~UG/@"1 AC$wxv^yZ{oJ{dz~.N[p8EGbIX!fH s!5LPXl$@ T!w68fykړmPG+[ 68d.+6۴(7 m;ByoU;AkvYX+m$Ž~ۏ[V1F7JAj0 :#)1bHq$FF]l~:F(g 9Zz%YJ\2. ? +U-FjUcW8$Ѐš!(}U!6;1I5tug?>LPJfB.m[O2ibd'TMu5/&yHg7gcP)RZuɳLy`5g>XrS_W>&ay&۔#/22Ҳ|*Rz G"&݇s`>f|%ld[0r$x SP.GjVʿGS0Pq$FFPyUXN/7{X@ǖ4^;p#/#؜ញ:g܉N W!CCMҍ`.l F2@/H6Rv Dxno*^Q8Vn #QM=I7Ue7~,e츱K&^qxf&'=e; Is8ם %G|cB~Wͦ " )ϳ([[4SQeչOE=U3$j-F@bĈa };S<|z ilNL(Ă)AcIF҉`ԁ3o>vn>T<CFfGMġV8'+a!"'/bd%C1U{Na$9=:t0]:eFQ1C,9fpJ1gyLs'|_X|j!m;+f^}_u);/i.ªk,T_6-IM~gHuԊ_qlΩ:}<aUD:<Ԓn-=pP> 6m%f C˅uϣu6d` 7+K`Ypڶ㳍v{fk3]_P/(^ƝIRעK^ڀ F;)* (Cf-ރ`PSgQ6-ߡ^X2# ٬w6~ -Tf\ ň#<H1"CeCև00LeθYT]Eեc_{gƫL2D 5@TCsjY;6؟@xmLQP7{҅'@aJ>;4nS06,g3T| mcabE``ZS¬1bP0%=ئq]Y)!bj9;mLZ+ #`/u98gozݨk2W) u{B~N&pOv } 砼n> `fS Hj)e>gێ@P_ŧM6Sl@)L.B֢21d0ضഭm0U"l ]/k54az, IDAT>=oD[؝&7S4^L* Y:)ҋ< P/*`?2/4#8#FP3W$܅zj!^9vzqC]$YꂅN1+ DT *k ajR,#Hi>|x72S ں2&'u_^ΟC? p%r :czgs;q[w[jLA'aXTHe 3d';#]5* 1bds8Qr=IOGq^^ tj! : &\`g[GH/uk6hd} TS?<Ty/ iWifSI[} s''7r{HQ!M:,==i/XB"Een@Ի~1>K}g\si;3=`%brpg0v-lYԧrožM5UlW.v= ؎P;]bĈ? 1bH :cwX.x58m`+3 Sj+X|7 &-{JcB8` 94-b'2j5@o&Sb%䶎.`:|ذ0ȩO3t ycYOUGb0 2ldM⤺ {P nNXDT4Ω 1JnHfsYHIid8 '+~utA 2P *LqGpDu/AkK,^P`'T{)I9ӶvBЋ_3u=g|Q s,!g jaL*y{k,2?d6g+UvtZ+.~#޻(.6õrFZK\ן}q*-*[=R2Tl޽:ofBQ3*2A L;vԍ]Pɦz1q$FiAW:}"LaaE|8T)aq,<dqU>d2-ޭ^s=OY@p3r kSrBIgE9XVQ] t} L-3%| ŁL8SbI% <i3}}BعpPZ'${0i ѶӝVlWpCsT@u ʭ1.;WnC M*t.^_'ES-c븠 TC?e%.ed26^:e ff ]d*1=L뫫K rB ;;wh/֮mʒ|~7?ؕdnPSQn6fb߽ۚkp8օy+!v\P^0$pv0٫\RV-PM/9qls=ÒΥ0nPҎ&@73cĈ1b J pL. qqrR68w Y3WYW@!X?ᓝ8~3Ѯj`6aTdp5/M Y'WVBx8UbQuVWMn;t:c#HGx&gP߱*t^ 5mp RaOa?1`o|5_FŔkä95_' W?@*YɞEeli1++ (VT:6@$/~cf`ed4Pr e:p9[$55U 1c |5t!)mܵN3l.5 5qDK8;[kw v~2|K-GՔWUܺ{z lo1z[*FkJ:FA@L ޛkVG* h"Ww䊶{%e+Pݛ>NAε @n^' wvyWYW=Fq$FhNa48RCtig2F°tV5h- lN2 f}֡Cd:$~0j2}G}9HJEK|$?J", R$~ϝU#o+;lG ՏܜfZiVF+ ^NVtlÅ̬i¿66^'x1꾭o6I\'V~}~k`|fݜ =+`qg? 8M,Xڡ>?~FqdK)FÂ`n2g~:{zb-l 5h>'vRۍ[d򜜍KIU{ڼBvSRjR yAiFKP38ue1f ۖ-[Eź]xT™л<%w^GcѦYX0edƾr.ZQ^JK|?hOuZ} ;\+890ϴut=Gޒ#M-dYS=kS_2H)4g;Ռ+a{cq$FtX8mhwMe[ɸV;>(c$L6@R*G\zqZ ʉtx}qϪ4@ Kf`ĥc棯 d# RM「p}a >B"])-GSv RqqBj?we6 gYT&gxAF+7+ɾLe8u^O\lcSBfPp18kS8y xՃx򵃾,SeCU9y !K,WM=U[d֨EΗ7NuWR[蚓*fpʒd6Ֆqso֦O1$g~+#r dEO:{2Jxk2tA` X f$qfoƚZnn]*C1bĈ8#FHQ*+:{ȿs DEZ/ǃ N*bkfŚ)(2{uNWa@饮ú 2LNBR5Z^"ʒ| />ļ|yQ| ΉᡛvՊwۇ}j֯ =*9 U[7/@o>9q״QQyoUj{U$l p 3q{+G[>8&6s{AL=(rJ\pW67WC- 6`:p?P=46E>ޕ. 1|j'!/g.=U^+cź?R;M*$%rlܧ&jqp=vQϼLgň#H1B3Ҩ&cF}INgwԳPǵq+hsjꜦE 1g&@I,ɛ]SouK)wgMrTOEssE( mdX#W.\6 ۵b޻88A5h+#&ͮsSu6$Oˤ/moz!k*em w]h=d>adTpr@}e}9 G;oQ) Ų‹z(ӋrRl^`;ydRr{缼+qB,Nנ.,7ogܚT|.ȼm($`c,N!~jE珚r'aWQ879}"k\\ ,b:o#如 03kI&gȡh#7xƟ,atxҦlND8@I^* Y U+ٯKQ;0S}ni'+KTO;Z!)$|v <⻃qnumBu9t:'6ҋ HիᦨU:/WL=CW7;C rE:0S~0jlӖy#F 1b=AhbșCs&phJ'ܳ49㽬MpXT]fdq9~}c =!XZ&Y)QLMr1T!VQ@I(Pұ.˽8 M9LdFŖ}i -ؘcPaZBs(ES='F&8)â9ʤ}=[>8:)@߿|?d S 2s5ely)NB̏G~dJs^]nP9V_@Ċ 0p ~"czh*J ,@ĥ;Y.,`s AH#lL.sGsPz ;e;%7o7n/QZlܨgs/GK "cd2QxyZ*4&vTT'ҾNFĩ@o:Iflnv{:& LXƑCL:!ȑmuM{VTl`mi=|bwyϮ Y%|gq Vq8%ݻnW,$u)n\_h_`{asĉ'zm ΨbĈ@bĈ&6mWYaÌ!0ܳlnd%:e8>^Yb{Assh0ԷsƨŬl?&DJISaA=Lmҡ<V<:1)-cOǺM/,+g6=e>ƤHи΁C9b@?+mur.0q0lHV;~?wWhU җS 9P^p 4%;'Voi¢PQ8$pim q˄B~Y]!(̑l\[U{--ڽkGṷrE/bMwxhbyޘTYUEٗsnɁF{2Dg CtHY%W jri9LWɄ5o>r=.U> IDATyީ}\ױ-Cz7 TMfͧI $֊r}- VKf͖ȋK(d ɧ<#K! @VЍ Ζk0ޜ3, ז#Q:H(F%v]);O>+63Z |~`~o}[ f$]:\'AtJd ;DP kʐ5 }m3G0RqKn*W 7fO0etgWRْeJ@gwOʆT$`ݒَf_>XKUP)TP UX!6h9݅+}g/n?J P(c紕tQ>hOsCU$`T[KKU{61bdq$FABn6l(R&K<p. ʁs8Qj9]:(^7xV2j}5AT'0W;4SƮjaRk <ԖC~ye 1ɺ :9F- QyѠ:Yzωtu4\R}mIM1@ eOY%ϯRMQ}TʝNfIh ]GX:A`Mm㤯!MzJ}YIDхfs.yݣ%rLW9} ّѐ젢l,_0druv:tdq)w#fc<` A1)}i0Ӷ7'sNK8l4uQH+s()$gS9v?Ѫ`5*?=[wl0RF*(yŠuxՃxM5ߢ(7ۺn1,CgwO "5nM&)B5KW.!𭵻}٫.Ħ+Lл?~c&-Vұf\J$V-GyMc&I@ 0gϦ#F@bĈ !(϶X:{8`).?Tx,{-g4PEU23ܹr[rvԿ'#!>MLzT| \3-@L8cW<N&\Q`&NB:߁T,|o̶ q qSQ3c^[UeJ P5ܹzp_3 X, %'^9o,dc)e9);^} `h@oN:/CT,e:o|YHU $X:ل,?{2+N$.pg*=o] ?Qc%ïLm ';PnMqP,x4(2 N9|+7fQoI~O8HU WWʴvP(:.sy>pt,o.Gbzgܾl\tskS#& PٍXjL.ݳS?"g)da"Aurjާcé@emWUuFߛ26mYzH6D IPw,w۴O1T1pA&Ҡm&hnLjK/ή|29zo.W R\W5&8̑A;uFN~#=H1ȎpSƇ`[i=KGv*Ԧ@a\99Ѡ(7߮I>'N ݪq+S3dd'y,>kGg.)V=2$$x~S=*(:@f8i tW-e :/]p49ۜ1&ͽҪX*M'qwK;[dhv'\JL49EԜgU8havcNpaAX&&6JbŅ5sG[GWzenPvg#RsVᰥ&sNO :Z)ju-L5!u:G粀jhk3k _ta2:l o tJ:35gdKQCP&ͮ"{9@i.[0@ьa>9ZeAmlbIgXt{Ŗ@./aOa?{/d! %t,@R[^TAe MSS2VX2ɤk٢u`9&\StMcWY=.g#] 'fc\g+ٟLdP;bbĈ"Ĉ k {V&p cAis̬=srpї p$r 6 @Q.īRlYa,a XpC0mj,K14P)~ n+'”yXև=ϴ1_:`$kWI]cTlm%n;Vrhir#H1ХXspՐ:66B|k]fG|\&k3cqEcF0N:(zSe\Ȍt[ UU ޣ*i1:)-<ކvno glex #kLV؟rcF  }hpPS6@j5mHW;PsuaOj''x}K5pH ݗ޲LoKkhmeH9|`LYn'ϥ v٨U)B]ӝ{[r,k}s$}}]{猸DPmB> D!W@VӍ_UGup,.Ţߋ.[[rȵ_GjA1:P{1^WD@>r}h"pR6knMX58Io?eW_!7o2Q2(x&u U09)wQ= Eﯿb8q㑃Qfs&M>jdƩO0^s cY؎b˪ ]j(}dWTɩOϳD*pn̫c Qٶ:)0^&9j%VA!.+Ff1b1 XG̮)F䤿{z cmTQT^=k1*I#b XP^ +lVXݸi [вwrكs]p>Gjcٔm)#b6菂: eQC:HMz:d(,Sul|B0TAPbx"H9լ:*K0(׍NiWcuN.I’xzK6562U~7T@&'ܡ7GrtZgsۏ`#mQlt?y4}_8&dfTt҅aߎs$)]PVPe"Pb ;! OψY9&`IHz~Q1d'(N4u`#;jP] QQ8Ī\5! kLbM>T5֓:#ؐD[qwd4S#C6W]w6((E;K5'W PC'MrΡk7~q#q$FFpKV6Ӧw!? bQߚWU9md(v[Gr/z5жv#ʞD5rQ>bpsP"j彅it_lj@{Q.Riَ#>Ʌiݭ\Gc,;c4nn5y\T'VQn6UUk`s}צ$W@_q[YXe:nL~A n#.XP`] rZiF\z1NvbMX:J)v쀕h̙v_lM5ct cڲ.EJbgs;n}exuRsv]l{zT*0p#/n+ZE>SVu@Sj_LxziCFP.:6"3(±~X ˈ/%|v̦>9)uNII .zǖ|{M EA%gL>[l(e;Ռ+et޹QBFN%cqǽi/O|mlߞ#:'N"_O^L:rڗkܙD~Fh zۡlI"K)Dd_n8Ơ|7^ƏJպ2Q2o6 s+ݫ/ـ /3GWly`, !FG#-Nkj-Z'``Ho=|xkf/`e^n>MxFfr{/#Wju0(P6 xIqCu㑒Pb6a ي"{2JE᐀^)r&<[CfPTvtXE:n]Gv3s:` e8W{$?'a<[ r{C5@+u 6PH #`3?`O&'\&P.𭵻?2N,)"¼a~ a;j'ٽSÎd FAGڳ/Pnh9}[D[V (DPN<ʻR}~&׋DT@9 *X_sp,|$Kg |}˥ao{tҊ_3"{RA6Jn-Sd'Mv;i$HYN?Aϼb!Q+#utv-K]8AI[gtgK߲.kWz)}_Df>j^Ԟ]>4%x@W _c /X͸mI>4rm*.'°K}aKx#Ff@bĈa6&_gSu%NwvU57X~6p_=pq2#m?b-Ёq-Wr9t.;Wn;lQߵ @Qަ(c XT]1r0סDExۤأ#=m+Y4 >fX8cM]^n?i TjƂ 7IfCJIfbsŰHa .2|* r >$]`3@/ 5Dݓ T{ِ.L5’y1"cؐ,.R{u]ȵlIQO`8}b6U7z@ه&[ۿzd2GQYnK m FiBI~w tX޻w@Ctgw=ĆaTX۟;O^)d{r$bĈq$F(&uHu3 }lxՉ- I.>R2=耿@[G t4׍2Ty|sͮu'r#W:^VJ N95MT! ;Dʟ 6:+,860ǖSdX6<4e/m!aIHA.ĝ"zQ6g xʸ#}:N?Xm%)MzbakRT$|pu$M^΄YZvvdG~{ugm] .^Wz 1}a2EJQ* X;e|=҅M&yi)3ʇN|ZD#/Ѧ&YIΆ/jJ^[)7Y:Ikm2TUYH۪HpY攪D5rIĠw_iutԧkʆ0c Pq cP>bV[:{Y?Hiy eܤJ,N?P UcǺHeYUulMU>ՔaD1*fa'JFXCz듨k$4ᲀF\zKC 8S҉齫rZ 'W~9eDqpٞZ:{dn2eq2/L $RDAD9c6 C^,$YtYMaXgnv&|_|xԵ7l[Q~E8O+1NM+ Ėg:;"j< -X!N u$xRm y1Y.X}j!/3Pl˶ .[M>Ռ+06r^kKQ3]{tBSD=ň#3 1bH+ʒ<4XzڻܡԤtpapcm=0`@;04->Mʰ84.3uQHvU[gSS+]A׏( 2Ly+{'j\SvquxYL Uj$°UUE8g)H2Cg6RvVZkm15d@ݜ _lJx╃Ao"5PX?k(!MȝW=w99D`wwK;7|h<7d٘vs;aYd>Ʊ.9; IDATK^:5 Hcf#̇Xw >vqevbUcצ; ǁ':d\}$K{") =]@.',GOW ;滶n'dj2e \kbmmxBGAEojS͸|w|˞ߋd ZD6Y jp;AΩ8[Oc,ސ=_㩥y3r]Uemx ~UN 4YO6=uߘsIR9?!po2?z`\ʳv]'+f.wfҝEL:D036P#F Ĉ#(&9TPSu'dj_u"pVdݜ ݚrfRuS\V$XrS9~an58=Fav>J!^Õ[qO?]__,2?dߙ.(S)^n~*^I#揿zOzaw\#d >Z*ܕ玺/ާTV7J鶝%2uj5,!rdRJg>݅m/Q8[2D{Ƶ@b<H1B`.~\ @1E6Nv!£ L Ǐkݢ@7ǒUarHriARRU#&e0`> o,ײLgΪcGNwZ-aG6( J4 V m],SK}hJچ Ers2%3ȃ[5Lb~us* 1 {(>@` |pMv`@]G8yCƮ$zv[?<&ꢯŸ"xWi=;VTkJ|'<Ԛ'M(}qÖaCXK ҎN{k>ظfcx@TUQ@AF', 9Y}" IHieYDPV~Q|1Xћ7a԰ M`Rñw n9ˠ>Oqر VFӺ5H0B;@n9v6ʸRg}r*gr,@zV;cgYmـ:M 66׆?220L`UD;jMX؄GODEp&6Ct[ZF}>YWʰ/Z<Ԯq][}"#F Ĉ#8`2@(N9Ugb 1[0҆_3 ]Oom2JruZt 0N/pUwBg\)UzklYh{g r_ 6uY:g:ϣL o9Ii@4Ua幁.&@ S nR,D@WZ -IH&ed{i߹6Q6o{|=g^@/2%Oݫ!-aZcn 2V:ǻ ]gX[ri8m杨m9lMجYE&PslBMnN&ҖߝnޢuHlT؎Uj[Ұj??H0w;1eQwjqvILާq"):{k6%W#D@-M6 @/N:9H+S$v<@K;y\o^Lfm.6K7n;&8u;~;L%tcOd%3QO3[2wab*6an8x薱kR)ntlyoP%[z_9Y 9kiﲢuBbSDGNTVV1/9Tl QX GQ\+ ʁT]FL羔ex>JN fYZBu&sY=1NGG]>ƹ, 'Ba;Ƌ=gI8 &_1 f\߶k֔c@v)nhPPC0g,j~NPd.sXsw5c+*Fq$1̙9s|C[Gn> G#M0|3@WSnU"m\](*.e蓓[Y5Q&}|L~)qspȒ`!78j ԸWUizʲ1 ЇG[GI$?3m@JW_bW;/CE 8h5eX:09mE'M:e>< Bq/A wHd6(wPZòCBe܎uKfzn[>8ӷYslQVcGϗjy9Y%euLxu[;0|f&%'jWd66?1Y%UY $2}Dk]'uۦoCyj!RW]fHsēԮ"SxՅظyU`II%mp*%rRҥݳV~Y4j8:۱,g1X;d8.PQ8w*:?͇8Rm=m:)Talr)WӺgʮC ˭9fvsr,.I8ejYTm 4~.-h9+$jQxW>$?'=6"dI(2!%IRrot{ WGh:&A< >Fy~1l }i_#F"ĈT1:*Cdpuw{-/58c3NbNPUW:VX90rh6k0AV́s̀~~ƹ\Ա\B-D Qhn6+5TpDS-'Ei*cæ^ˀQ>̪ yo˦X{SG{n~o:șB~ekE.o|y?^~.28 62k:)\Z|3_pMiF\zN2AGW&㶉xn{ ~{\I^_ӕ~X[fbNJERQ;/3Jl֑8\챰d>ZΑ {s󥭣 ۛOSvU[GN}z}KC\K6v.g.'VH>:Ӆ֋LcĈA#Ĉы޿Ϟճ~}LV K+̱õPfìՑlɔ:<;znz.mO?lo&"أ tg?+_;他 f5)`Anax۰LB[m(;8 =mf ԟFyű8,>ىdN]$ٴ hS 7z2tCJ~p*Kx*L镰jh>羏`<_(am 51)L+X:g|uN16or˕2:/Қ_ז`R05"|m]`pIvʄa8 \>~7k:MLxoôut:LMN+5 jV3S똌H{mҮa/|m/Z]v[+aTarfnvZwjrn͵t42Ɔql =w9Yq c}vtˬV1qE7ӕ~љ.|2j(vtxl5|πBQ|[iIש(m#[*Ck' n;v< 3vN|M&+ٶh {4T 2;h%LN:H!0EF理 % GƊ2'Fv-E]tSIE5|2:~HW9z\VbwQ̬}?{0@Šm> sk?`Wu,+d\bìvRI:!ø:q!v(~!{ͣu@tSʒS4wIF,#M}F)#QYJWe =0g`N{S&}tVՙ6~ $| !!AD382[]ZBNwMi:kÑv"D҄Db1O><fޮsժy|}}]racixr0S%!=īԘH;HsdD2 k#G$UCYJN,J̱ɝ9oU]@.eKpn:U/ȸ䘮&8u߽j7 Dc\4 hi_27'דgT|6-OS 81e3. Nfxa .^11U)mW*vI%$0Oհ/0EmE;4t.0w;t~g:.eAçl Spwߑ6r^FNz*,'D7n2덖v]=l\Zĥ6(bHt HXzwYR Ć~&VL; ;CsRvk1} ym?nm.ּxcJ; z ~j ڛ7nS0ZڿӊqgQf$ -lHNOׅu:*(Z3MV>1\$ IԘ*4%]|ur!A]ydC~ttVlI.iN7ԱA׾u?4씊#%ǫ{N]'Yҝwm?%ϵY#*-v{& + WNYi.>@*m씌qX$,늅}ljQRSVbHǥ/0ah|"DGTGwy3f[[=bʭ7#妘&` ط=dLR7" 5\RD܊EWw /uzEP+gڅ= k C엜TL(blqB&b_3 # `Mi.Vq 8=ztRzw@'5T%l`qo*~AY#֋UoR(@yHj"T-. 8xQ[M8qPGbͬR`^Ż^b園@CMpOYRHӻ뢥z~_} ON/0]$঍h(kh#On2(idae0OSެ2wg*@"}X{х𭹣㘛T${u}'EJ5PYwߒ}U}HVn.+A՝* wߒ.i];o4.\ Q/|ྨz<4 09t!υ\qxޑwX)n遴<<-+U\%y1o),XxK}A~aڎTil%;e_TW{DF-8˅sJ0o\g2  p`^Ŵ1::9(+Yaq=7X 315ONv0JqJxh~Y`YOrzɸ.q'& 3$u(6#O,@^7YA a5 E\n*Ɋ*kgzs=H?ZL>eD*OaPi4B 2zI@FZ & =+Ζj vy>F_g2`ԕAݾ\6iy S[ElkP"&ުx@+/L˺jRz.VSˆ%,W*zs#ql}Xr`=>k}mз󫠞̴ij"^2(ˇ 4[Z@'~Imxχա %֎ WJIi=s(3_{.m!+8y 8.S*V$T oU]zug5@z8K1ؿaAλK:wQڼxjaQM:cwa@ZO﹒*K.zۉ Bq|8;$=8tV<C]c[Rƿ2*.b˲)'vܶlt䤧H]S@?O; i)1w殍:rgM|Jv쵉?p@uZw: _ij%k)rU=oL&r2Lh)Tq%]hFCs/ ʡuNQ;˦{].T2X ]y{ꂷD')J1Vϸ@5ƪX0A!S`4gWF"Q;2]ܥS 97`=Cyn:t,{o_m ~= vb6F}1V{ D "\{D"]\bdW$8znł`cר D|uqA*3$'M &咭,@"c0,2t,WIcߛ )Agv-/^ExY)-HU4Yt9ecs1k xpp{R` y-똓i=ޯjO00fz?9&uJQ+RN2؜aQlrܓSaꛂ%8>6uQؖTV`6^e_RN&[ذ;LP^; `wM$T?5< $%P!.?Wrbٖ]%T_WwR7Qi~/ux©1tU(U}~[ѷM-UB.vN$ zrPV\j"P<Z1 `%QXgl[Dk/Z#댶y۰z=\GBt5cHF0/@LlxBZwVuJ xS!B@"D`PH™`0p\`f`>y> `:ݑo[NbL_Р,"U31x ۰"imJ ګŊ`>sHPbaQ#PVH%923[->ǔ]yr@_~s٣ SB1-R.nr΢LObBMTrq쐊1sI#jBz>u='=;q> 9c =uQ[\ + /aUtEP d0z{86/G,)k/S:Ndzp::F)Wxza,Zd}d d!_'$SliÞ88Z7 改csK{{BCμʭ74r4[F wAO!_beZQ>`1tB i#yldcR0#a* ҰsSL'tw%rǐhC!w Om: [(Q類h=,~.HuG+$OV"Дp-ttu+A^?&64?#m?ڀ緟ڗ On{߳KS]Yvb +ْ;A"\D" ($0 8?dC5F)XBEbV<.L+ VI.. v6 #0o^1g$^TkaXJ6 KZJݮ\S,ی3J]nbby$xzp* Rbe̐tHϴ1O*̴a'Ip W]HXpc@QFvɅ܆6m@2r @u~${B?o +id%MRwHL`$UӋrR*s L<FAUd(f1zƴljOpR68c, r~\zx%T<]#G65Qsv2/:[T,Ԕ"DJ9|#E!"v!qͧ]ܽJV~_ WcbZKvTǍq^گ BԕwJKESiъ#Ɏ.]O"5>Ɏ.8`%#'=!d$~zIOܱ9xa kDaVWdAU{ޱ~shW͙ñ*vű9rŀD4ORJP,A]_{ێ+|UԠ9-% +&if|We\)"fn=t|kڴ"ԕIDT NQ\9|+Oj_9wSS.D)DFx?Qj\lҙ3\E nsI&l1#0Nǿ[{fQQx+Y.%>9k^LY]6I#9(oUp"فs㤐Qs7N, sa$2u ϱm7곑VyqO'[qx)!Bk!B+<6(Pʐp*LrFjC%SZfH$ƨEԪWaƌb kV^ǮjV˰VnO5:M&l[?0[%lTدXJSZV4ɰ嶫LU3םsJ04ь#S&8f8<2y(흏+%0mĠ@'cCejO*ӊ^<\[Mr ?~^/{IFQ:*t@9 õG۬X 9dlj)--8DN!8P$69%HK3^+}5i;Y;q\⟪!l>T o/:vxqÕsw_4cCEBZGc@Z XT\QrGס&|c#]<\zP +,%us z8.680$#d:/JRzz&W#dP-5]ؑv<<۰RRk_1U|TB T`<[j/)qn~L1.~CmVs<4>\Pa]Y$b'.(/AQ(DlzqhڈAYeE]yXo3j<||j!vi?*wЦ\+^?qk4sL8CC!TNz*e?!_QX2%!Bk!B+ "VZ;H ծZ+IbgbJly,yw ?-‹ Q܅-*z ƎuQ!3\_o$5$%gjsSְk`-@%8(F35%($tߣ go=c 2{K]Jr yMG{1*?y=6Y$  F JITPkhnCϥJD>3iYC& ͻgmm!{]K5,g/2"U٭X ƚ)88@&wU8M8]GۢQ޺ӜA$l|~~ _[  3B gzӓ^[שǝL'jW1UROyV1=u7.=OSi=~Ta @Cĵ Aӊ9"/uSI~s54ۯ<+ *uMuWb-`;lr+v-V. ė\LKI* ֽw\$qddy^ѥPjGi#]HHC2u.&x%O~nx.tmN׀Ļ(0b,ÛnY :氤"\D"XCߪ`pS/RT ;&M-Pk`B S["T 9 o)fUU*a&ZVΦMr,l[V`ǩv20IP=??3 [OI<9w fX>nbܖ߼ [;{ɳvkh\$iY jèyp䮥#n`Y93ӌv0%9߉/@؎L@ZJO<rAl=S!OP4# _%"8`ɞ;6Ɏ}u#(˷QQ K_Ivyc뛂;v(uÕ IDAT]$`^9 <|(!Ά6+YJ]'UF#n)r7tv-PK9@`XϺVDUF19cpSQM/w\>s[6zssPu o=Uw xO c[} f@HY6Y_U-/% 9 ܆׎eQ,_}F tpE.ũ;Ob)4GPT\#$@܅vԁZW^; (ycdtR]j]Vv SXb^zeH' PI=D(5 5b~<x֨tY"\_D"'_98S =.]`(o3E1]KpqAmB1Et SWnV.dQ^=u[\'/=շ8+g[HoI"h\MݾK&X ;(=y|&j/heyғ=u]v9lY`D:ô d$Ivw$6ᩍ}Ϭʼs\sWtLK{ON/pBH,{164iȓANz/)${j2QFZ&#',I@tM"A@M@Nq #؏\8ihnÏwtȅ$)a+' fEY}*sYw O[C1TY↎ND09Bކ$'.潿}`4Rn՘yw#uP{MxiO5v.0?H;&ǁϼ]Kn d5 )0ױչw#*2=GϑE߱y|Ur,gɮOʄ [㚭{GUk OW]qۏU &`L1w݉-¨I5Fsێ'vqU)ؼXfV .((60VYs j1 'u%] r|aLÏV"ߎbϲѠ8.b_DY3]4 Pȥ&l:P~krgOo:ֻ iAtN+n%l9PΧhbnk:"9=w]qCZ1*Zٸgd, =$j MmP1{/33fi i~b]vtH>~MCcydw]~\<׆}5eaVg"#-}{ƁT7(WqJpXwE#*D[0I,!0qf:N_jC^Ɂwl! ]@b{Gڧu Pv.`m$l0r…*A:F*`4}~gh^29)N?W5@%ޒ}h}SXV *O㱩uHd-զ@j=v -"s{g7k"Æmk,~W/[3m/P#UZz:/ ?ƠV_0)M̻f˦b&0o/_%nA:nO58-ٱ- !#-'w}Qܸn"@"D4LA&ԢƊ#}rW@b40otI/ EK*/4өcȉU5%M"51n@q{7;??`=|N2ۚ;V >t@X %k~%ՅaK{2`{g GӛIKUY`)C;ŪTZ0%n/dN_6a bHdp^g-m8y3m>}¬4;6#ۣz-xaNFA΀^$nJ9k8N*@.M~-gp\'yIO5Jl~޷q?b͘mSd7л#@3PY>Ș $.Bo8Wrf fQ꘸pb>{/jr/æqɤElZM $ f'8mư>U&ztRTѐ36VbQjqW5ńymP:qČπwIv9s NSųێ{?F " CNBn3Gw[0nncw[uĆF\SSiخrj.<:\70p㛧|Fq{隋-xY_n=H7]On:_m^j‹WYۆVՅk2sxrz1e . "D~ "DH`1 Q|n=< jՠ tݱ`J-@dq0be / C Ğ; XyΏCJs eި pUfI- &Ź1-LTqxarɠcx:wxZ;Vc]BjRED13o6ΙzMTT,b`L Jݯ4[39gsMLxxb.]EEy2 +A?w2K-#}_x6<<Js P/񻅓(lO5~{+tuwS& =klź={vK*w ]ztjkA:rYuHg\]NVįb̪>ڼM㮥 1u}a;dlֆ1xIv?St.Fe^o Oq_S0X~(җLt08_Pm~!^S?f j~%ӿ[ңazn<Hѳd`mhiq$bV *9_*T@ ]&@"Xzx SEȴ;OμONr44$9b's_V)ߢcϋ$M֊#q/fuhZdN%p  3|ek.Fr&LIœ g:%y4+y|ž2XHs`"5INcZx*ghٚ@)ܿy,>SkEsw/DbaZ0J m#u_)nH|->zYԄLN:mz'pAt M$֫N'=#c$&ewasXo6wש MmΔ썎 ,r)IBN\jdd.̊Of\Wud';.o m7E{ߞ /-qܼ"̺mydam+ЧM^([ƘtsH/5;Ot).'ߵo.dwWo3W_}jmrUu [M~iW7?0eXap^IVtT]%M ]Skᅮyg1{>D}%GghaæL{)ֲ·E-Sj ~qE(]&&RJ2ğXY>úEWy.qJܚ8Ta3L!GT!B ٫,, B#sExlj vy`44m䊌8_ڏCcЧ=|:NWK!:7AY֬9#f[mpnaX):T8VWZP uH&`/$U SH礧0+ m;NwN&{A~)^]'q/`c ~'%d9iӱLE2Q F6E@K~ Ra01-C0uJMPƼ0AB1c 9uqx]Fv Ht}L)qJ6E˸ޗ_g@.& 3M|FulLZ]<”|rFoAG..*\nk dl ߝ?F|e5[$ilcٵgG7aΓx:W $cEԆ1&Y?gUM؏:]!G \ 5~б{54!?3մfwwy'P7\l;rXU!]syCsE"$yz-hla 97 Br7-7ύ)vp]LEw:=l!.@8I*y\;:UgǥE5S3ݗG tzAb+ \9桤FMAGDX<d)KSވ *dO*g5 H|"'dI@0 [-!B!BkQjMWZ^d$ 'EaDf%- s qklÒ}~I)I'"`!~k/ /l@ fUP Teݏ0w,-92ld"bFZި鱩Ed <0{O]sێ DJ#:`~ixuq>k\v_mJʮ={)-9qi7Uy%LqC$(mc d5yNYVTR~5؉xnq28FWc6dQ8%'#L%c(ƨ|U ?\\%w$j/*!|9,^nweHzG}t \&"L|\ej=}sFzūWeeD*椧⫓ ^e˂yDAbuع´ {cQsb)QSAH% wM,cW|Q\ q*m?ڀ緟`wMdw1很΁: ''_08):1u|7|2AwĚe81bkRnAy#r Wd=((`{~Ž H9O,@Vߔ@.~e$yEqsH z7vL_dm{vtDIi+'=@S&PǑzvYGQ$BVH<kM&]X}{] KhJ\cUZׅ,Di%$Sdx#a&H!]j!3\}׵[L/p>H0 u 'wD'`t{H>?8[iD /{8&҆mY"S5_$N}r[['jrHˉ*8^1g$Q˦cFfZ d=wKf݄!w.}֎aY}0m V^;ILJEmmM'^>z3Rn%ez#`ˆ'D@oKF5tӋdɩBM(rĘ&y3RYƥ|9w,{~uv$`b:x_51NB}ޑ(Oǥ1dOͺ ئ3[ &wp79%"!&U).;gvhN1:Q:ⱃ49*׎6৕5d!qE '=ɘ9~9,QUm:CA}tEt|(4LŴrןꉳRce,!(}s'qgQZ3hdR]81vǫ}b_j"z,KDAT"OހTkI#uM8PۈI(\')ƀ>=lz1^S]%1JB"!:_*҅92񩅾MYi(2 P^C!B!B#1&&&GWڠMDU; ΕsF}q `'K$㖯Obm"c .-t-_ZmC5d0c۽.-d\t|SrBf4r rџ;v~dC;D%M ~9}t=X9;\66 Y%q 3M8ؼl2۬mbѣjEϥ46)`4;n=nY`t%dY@KȜ]oi#Ʋ߼ ("9 ccpEJaؐt')>K0ǵcd|,T' avϮc sKSX%$S`+Mb\mK2H@}yQϽ] mܿSxR47e&')0G/b7S>)0^& IDAT;)#.rSc Pq &"ݠlGV.!A%Tґ*1$up%?~6p]2,$]J3c#uM X0?>e3gaDy(w(b q(.μd n5]%)O;O-@vu\nJ>ޏ~}z,y` 5ފ#ٸE@wG|G&_"sޮQY>9ecXߗI)q{qQ=/U& zv(76,wL mA0gqԣ"N w/w!B.D"Vba5EYil@^ &F(X̤ R?}v(^1. NfHJ$qLI>!6g”~Kjp j_/J-ɚPsZ.wB'I$bKB%e?Xyq_Mzc4I |cBN"3` ːU!xeI e1]\/xK.~X :Z'ۢnz>k8Rѝ ۱M.8.U2NJ t\"Nŝ s5a~`Yׁt- TTjD9X9K:zVyye- v.m)'}Rbܿ7;S[%g=ϖ0;Wω{U&9Beb@v*ƐK-_1 tzK*. p.,_q8or.ION^:87:ȜTL.y8T%d5eB/IQf}ik@ܥE:$x@rYy< qtا>'&H%=gqٌ@ @O&$y{LA28+D}mZAK{Vϝ2XYIOܱ9q=h;Xί!徼c@pMu?ǽcJ~YDRk8_'q@;p.WqĻu%ž l9~9,H&b98R52m {Er} olrS-,A킖^$5K@ݧ8U=N ܽ! D"*DnaLfXG?nie<9So11eK"lИ 8@@B- w%@90|ʨ$HJy[Ȉ^,m;F5w`||}'trkON/$gXxކNi)ĻjbTfV uib ldocڈA9>(6{XrRwk'm `*M3-)35k SuՇer%y1ߝ" nu3$EY}| z`C@f=ԍrJDLb:L@+"+!غ3UR 6k C];1 S;Nd\`þAͷO-D~FṲ*59^}^IbNlǛ؎^]~$h=n)=`,s5Kf 2N2G$3hm|iԱ]]o]YLNƄy̨=Om:ƄWd&Aub&nuot]{#y%b P :׈JV\=jWARŲ9p'$ޣUz`{+wx+$T  (ulb+qR.zDwM/Q]61~0\.ļ:psrNz*2UUdp]h}hNAQaNyKd* 엂 sg`x?k168C>n5[BC5\  ED `æq/BIwpx /.JX{) .;4 #-+6mb MədX^T䤧sz ls H+_h۝‘*`p잣#:9)=bX:p\*r27=Sa bݽTG5I] = o>3ɎB9O^>PkV):!musi9IJ__|N:s}ޑeW(ȱWu2<E~溴ooבEB1WdsW|ys],c;M//8@\ _+ M-7gh )unzs`#XtG6.to}ܬ|Kv9ļ}REsm7TcS [] X  ɸ ʸB!P8<2y(^?qYzat<MRQ7'uIxY`v,XFqA.jr@\nw7\ws#,o:PfF+n)C!B!B+!0j6ySKtZPEJۿ+K(yJ5\湱= ye]Ԛ+*R\' PSDuoT!/#5P8 ouS6ޥ/V.{y#zT^bs _{ \TY܅1fkj50}be1ʚw@pd?\T h_tĘD.dӒѹ C3}kΚ;ֿ\wͼ)ָԴGY!*Da \Vhi2/UXJr0TIjsI+9$tjHQ 2)t%Z\ɭ{A?U 6icQ pO XTسazR3[=?Ctq$:H]ˉE.)bd mxsS18-dəVx-Bu~R6xHFl5oK!&pg8e}~DH2O3 D]K9ą_B.k.,_6 i)=yQ=^%*@[u UV%+l9\g̽8)ZWy97^>9Pq4%Am[;V>k_b g=:,zN7eSBخ<麁)<1c !xZYZI w^Ͼ-p<6W0{̫NnQ{p[cSǥo"@>12[*@KnHz'o'/8۲S7UB(+ d{n9>QsW<,WDܳ}1} iSc'Ηesɖ0žm*ɱg$f_n#q9y|LAFZ #g1xE@7&q8ܛȌᤞ8"rI X|qi)=]t:+:n[cIߟUx>@#'@YiN !E)'o+o v}{wvG͔p],!Gӆ5;d& /bIOA9MouzjzL.hY${7Rbhiu&c-8b @K{[|x\Աwn/@r.BH~&;?mL4;;fH:)$W$%NL=0X}L 5\71Mmڤ3ި:snocܹ̍%x}5PY}n d?LN@"ŞIb@Cs.}hBּ^Qe-wW-TI;t#eh#D@T!B(ȓ[UҞjeVDL&r1 EK,e~JfGp 3|uˌqij(&֯M.O -H[܅~FxjqyS0-ָvo q$L%[O홌Vc@&z؄ŏL )~Pߪ;ͳ>ahy?2Kyȗ3l@^:b:G] d_-DבtsJcѽof Ҭ@u%vs,vcHcҽp6!s `ojm): T7sc1cSc,b+$@/._PZ@낺q7mYdF@}%lT(~8ku2;畵ɾ> ݆scly,suS'97}k^{0K%<t\OC c@t@y%sLD ';i5O߭g=fSCWSsr@2NY{H`*rhliW'Z':=IkhIx+s#ϭ$X7tu8ِlDwҌtq Lm#!L>wbRt ͼpC{5Oڋhm(W=G7Q$B!Mr|NORJeopu11Dbۂ%=6p/Q_ԄD\0>啓TPF8|:V`o>]o@S+{vq7\"b5'7QVMĶv@2J5n~Ma+'Rb{;h].ene²x?dⵣ Xve-Lu 9cCJ-Ԕۍ#TD%9b6gCss7.dJI~av ֶcIJJFMQ$d#wetp \u07Hg}R0,g vyz\nmDZs8Rפegy=8GW)ع?((*]Jq6+Mtu;g" X ~K)"Y(>S|mu^.b6E1*s" 泸|ҝ ج3\_Ԙn?;}l(HعM8IedIx&wllY>,*eSA`mչv6g%SH_GZ Rtێaӻ(KJ8@"DT"<.(> !m Ks/H$ !=^a < H)s:O`G&yd_ґ6A:dl7gEj_aV\0'14YiX>_ɯ uqk4]1{$YMZ8Iy~?n3cUp=U"lJSc05﫰IrSRA@eSZ2!Ag2VR=8O۾$A9)> Y}x\ЏǶPyod65^Lf8vrNz*^xh HvU}2O/Ə&c0,:%ךWSECqejMkMu? rnМW&kPc8謎a8/T,%MEIv"xn񀔐gڡ&@<Щ`[g1BXg~k,۱*tkuh-љ p3UV@ BCBPog?o@gZ$y}|ƕ0V HiNpѥQp `Q5(8{LiuP̟XR VF+ņ׫cZ"Ξ^ݮscT)ӇOC]k: k)QSKEqPR鍵x|]4iIL=COVuŶ&.GnWtH`ٝBƚy` EcdH"^X>񧑱xxjUOT $ZZ'b@.()ţ #]I|- l8445(\x/ɘxd\WƖE)?R vJr u~gQ H $ [0Vd\7X@Z&O/6[ӆpU(toqX[%ثmTMq\jP@< ^u^e9r 5-i+{ۇO?:*ɏƔcJG'h-H+UAJD؝bHNCsNo[jOKvP7Q͑ӡ{XMJR{zeP]瓌#o]gE I1פ?_;eE* \Psv 0 nrU" 䇉[Mktuh `fJG#ٓz1P;F׆;F g.<:chfqw @ 2KD9E{ӯ׊zI})KD[&H5ԝA]7(M!k?p3ުkuZǘ }ݤ 5p%Luv؉חW?dpt\R`}LJt1)g=J\|?yCs"Ղն#N v ] )9&5z<>Xh|/';>)[P7TU6=׉xz\;N3 ׃X]9pJKrS-tuOl2Th^Uq-ƗcFUP@r] WХ=oiwɎO8ʾyPI궢*̯ҭ\},^w hM%T<|kT| |m+-&R:\:䃧Z.I]Hu{]५k/5[jGxܮzHwQr5 ns40\0C{e>foLTK{G9EǔuP#NB h/H*;k:Zf.='R`70I?c[gIxw"G{m?W;ʮ蜅{~ӹЫ%;S6ġ!B, @9w:lSǔ@;߁CsV猪:<% Ƅ_\L\t:$Dyb1D;,n.< JS]U ʱLɉ̞J.}'zST Het }鋃"FHTE -<=0ƤڹFi)JsM u,n8i:_qTLriH$Hpq$@$H1Lmj xu|oH%7u Xi9tPͬq|Ir?C= 8/'.Ax|Uj`/cXȔ}}^q:ב搽@v%]/G#܃Ӧsb/ "B ].,xv*8a)Bkٌޡ /vsW)8L4Kq4w)%\~YdGLw\;1O7<}u]Cc[й֔HKT$ CI A;\ W5¹VR7D+JY߄M8ɞK&Ɓ=# \sz Rg|v H߱o'ѡoM-M'H#d 2#Kç#s"+\CoȎg0tס` Hφn"WХ$GcB $؂./t \,j>]}WJx}V׬%T1@c>;$ՊZDz󐕕AUW-uܾtK(iaJ+4 tПtL'=j}'`韨4oR36%\+U44bJ׻FsNA =S z 0ktiHx!xF{UN2e"thGljDDWj_’#ptK$yeTKEĘu Qa}aR]HG'u:~擐VkP¥3CϹhSMhQ?J Kt-\'ӂR7Ip\>yiHA,CzweW_/HG`߱"NEQP@l?|0  0#ɕ,l=Z+Q5jOF9_V{NgH]ԓFywb(dS~S1x{\yy:e8TѦIP\ 8[7.CI~=sk%1iӜܧn;k\LJ:2鎣55p%4j/} l{o<S9AI$Ag/^X8U:&X95*Q@q i HSRU)=Ow+|i"AIa/M^`pXQi\L~K;EFz@ߡyB&^NF0={ȹ3Wā+mh#L+8}I 9{WQ64Z؝37mHmi\`zXK ]UN]r1Owl^81 /GĵImI8:Sw$H I$H cH&ffRTV5P& 9 f)9c d1TJv}9 ~`@D t; HU?%G0DqmW&6lzpTU*-|mQhJUI/>G_ 9rw*9=f:EoL<*z#!'")i^pDzҖzG&><6/tns\.s܂_oǪ@ 4*\>/}fnKTj=}YFŜj>)v/U.Q+X\<% Ppː^k#F򅷏"#`~8IjRѠ1&U:)*ĪnxjAωKLIa}t- u!^}: !]b ۆmGh&1qAo\B.%#u+k^&pIA RGq^MKF=$ D*~6:T&V.HFOr[ Ԯr9?Iuaɾeq,ym?uȨ,}:XL).En. y j̭/:n/⮑D@ -X\A.y9(~P +N#ɳƵVi*> $H $$٪DSHQԍvS% ׄעl 867^y4x7)3uq73^Jwɏ]k5%|kvEາUJlR5)@/UᢅWwjꛍ4oRpP^ 8BFǟVE [7X$U}ݡR,24~} zN^TQ5RX"%($ Si LKc}lY>1";>6{N|9'Lp*&͵~nԩerwM~tyFUKpo;}]G 1閐/Д7sV0wb+ n˸tz,*-sW#Ei]<[ĎoSRǡJ߈Qj8+E4<6q\ew/ŧ݉O5Vt IDAT%Ro:ŕbKWs:^cŅVMPI䷘oY0ٝ{"TzGF٘v' \<$  d )Y'/bT*7\8w>O2$(xV}$PUDQ!]F`zUVǩ7QzTI}]%l84N%[RĔp}ƶ#=+EzN{F6L)j3x`STG.+)7}Cף/ȔPP7/^3xbbO^OEne->P='~jDaqi2CMѠ} ]coqxolLcBx`̑}Jz{`}ի?v8Ǥ`On}},л hhn UJPΗ 8\*5(%`2ҏ$>>Sv|U@sGw}I9%)%g>96FN/CI~N6|ݛl{u{*ͮ0k>y$ajeb>]۽euFyDKpj}S{VRG:Km&H I$Hi`2]93A,ȝ w35:L$*%SY |BJ$1 g-w0WhqhvսDZJQK))w0eLc(.2t~ߒ\z<탈"wIkC?s՝NMɬtBǂA W18`L/ BGbq Եc""dz/ -'?mC]I;MVX+j}_yg\s"; ?*ƴaEg\~N rkD鶗yaMFG>K'!Wͽs)XZ|~w?r:]R7 =+s.^S+{۟qߥٯ{|tDFUt[ƁlEz2&7<5yzj5z1gw>OBj` K h]]s|[E{}s.X1<#׾ЩCzBFqO(t`{-!o^81y(i]l.kv-dA4.*?<ߙ ARuwsySY0uP#8 \`X I^ݨa} ^R_U3S( >…Y~zHvѯ|,+r ܐ$@$Hat@UNl[klOiVE>]R2]ښ]a!D&%"o8bm*8+x>Ϻ0eLsTJ.wS̩o?@;͎ZmMב%Lh:' 3ՀuELuCSA8zkj<.P7U9Žg߬s[Ĕԍ򕱥՛rˆyo8*v9H%`PCpiXX9\ L*ǒWWKw) |7^VR l8/'BW۫w^#& iUo, %c |;(L,ZnbõHK^{h"|X-;o^D_vD'vxmV UqxtPA4_}[tfE~+s̔I]< HW:t8SV1OuhP9x,*$mzs7,dN3s+!Rpxg $(H $( 5 6ئ2ϤA7lWJ;ݛk ]ڔRwE7\9艱8hR9 r@r}sLj>cNI5Ak'[NgQ!?7IPG.z)SpUz.15~PH1a3YAu|!6 JI@{y~a,p JO`kAΑ2EPILfx2KnKP9BR+ǹcB~$*`*8Wjq`\ksl̰ٞU=Nڹs(叴g?1@]hzUv Qv{ZV})w<YW튐<$p{y~x@U%X )bݮPSg?eS -`;ZII4AJhiMhۋ+bg)>OwVNp{}YJ rs2H)]S <*d4~eXv4G#>-&L"vlѤÍgP.4rp{2SH3,Edg~A"Q|D)!fRB#EN-둴tb.S}]4L] $H $(Ⱦv/[ئ9&juBm"x%1D3rbpjZܼp"߇M;ȴ!uX1+p銨0UJ'k뢱g纔0Ut@YjU/$k "8}@T g58!!73K#K\}}_M*.tPs/ -ǀ9/r:.lc%Cj( ]D_x]\0l Y#,/ &=_[b[w 큋oYǺ.uRPh=u߿¬1XfV8b;`guHq ȆjG{6gs\CJS D螛Uz(;Gr0mX1v>o.n:7\>CB;BIi0/>J^"n7|zn[JO~ᤑ>%@gaEwӀX@TEwVbT|gj:B]=8 {TVGWt."#CM]؉5fM#4y@::M$H#I$HNKI~N$gt5hp6)NUWuDv7a]sT-UP%nɐhtIF#:yn֫.+N!?zmӯGJ t<|m#-+~Zϧw3DM5w8ȴ!cѺ}k}s#J<^}#֑UZ%xP؂/<yR nq)p~ZYu G7”(}\;>?[BGNb\ *:ZHhhnaq8oSɵQu$tLXKLzE]g>9tڷ.Jwl59O"{o|Uov HWn{cE3iK:.Ȯ᠜߭ >] N40yp]_=Z,}6Y[DRMoJtyp[#9dyHO *ѹ<➌ϮANǹ֔0r @A˃srI }*_?x`5^9\$.U[ȴaxl^qbL{cF<%3pE8/no]ȇ$´NqsVzUBB.q*E)N Tbtxp}K A|$  \4.>f/n$?\/mN o:[lfJn@9L@9l D:Q 鸪q'B8F6rF Yr痞ޚwٿ_muGNI- ! 颷S㾆RWrGIAn \D}Do}fсmw_gFݛtL]\MI[[YZ_$ }ݞ?K7#1w ];E[ %m_0" TwZ>T;yo?'7Zw"0}3^y.[G~6#dJ>>LwhDjhJ7n AH $0U 9 "F{&ouvǾZm]rY{Ptƨ~^ڽ@ZbZe1ζ^TDF/{Xt3rEA2:qЅ9:]wtY>[{3sx~4+McC H2CBU:FKUx.m.N%\ŧSEk~靣 A1WDF )%XQ#>ws7?'->6bHnlW$l\D/S{[rDr;-ե-Czazxu =/UW5nJzo| V;Vz`V0݋ Jaᡩ*h\D&dSI* ъyn: I*9l !6(ضGRGY1i?zzz!=u]Y8eyiIVrt |1%x*xe=s1GDڶךcۺZI0MuAͽYnw状Jhfx[և^~N]ClvxbV_&1jw}4ܓΡDM0|u$HI$A^0B#kn ނ+yFHhRԺj~=!ꍅn|DDEge-C,r\O|Sg?eu.T:u֥6xI8Z[hHa/u,| Tu I:M01UVۇ>s0-@BkhnAVT2.e)iJ{2߬c{'l@CLK(/q=sV\LxĹ@7R>N80a/5't9;aF;v9><#St@IQ򁊢4֩2 HШA>IL-b>ܽJ|5#A|Pa)^]/A\NrswIΊ+rt@RGEưxR{RS*)Lce>̽? Iբ[N`^%[RA= g.q)$HQ(s2z ʹךC{3О^)@ 9}X[9X.#J iIE[wRBql֝)]C&$T:jwECs8ut'ڄ;yε31 \?i{-F8CC >wTGp!_[UMv~gn'?tYUIx>TmCy}FE8%&)p.Q5U߇U* kWA (M !0}VIGcKCu>Pø># }\`{큧3Sȧ[ZWUTqRQN~jo3vI4wYLV+i?_KF!T\HWUew/ut1 I8Xr||E9nɔ`:P8ךb&jyY^{אTHڄ qηsM&H*8Uis Vu>?~g4I!姩"#[']DH:og[+wp9`>#>c.Q5e!?l jGZG&vA_K)tj#_9nn3)3G0= J $g--MtDܾwHiu]?N*ǒWk#~UC\WsL RW1"fF:'Lw,5*jHZn\ =tYI(6u` JEwV޻xD=5M/N-O(5&j4c PaJe!| <& n ߲*g%ӡxi[/~[aT|wZ 0u'ϡӑK> "H 2ds[Uк3W|ucn;R<~Pa$X=; ~OWƖWoU_swr(ѻP_oR쳹Q*Pѥg\?Ut~ Q:UЖDY%W+P$,suU|0U0lsQxYWՀ4] .:+]Q/r0/}ǎ3ZWo⫵!'A\#J*"%(7ۀ99MvcRXtRcJC'Z>ODֽwênεgmICzQuj&ā$]#&O#{)(qsl]SNe^=7쉾9XS={iղ`$ޏ^`#m+)ߝ$S-n'<O<*s,!>t{R[+)^5RjS{|40缛cNu!A/3ѮsR"Ist>RYJͤT}sbq|!HF &\K߱!ӎ $@$Hdwry=#q- dJd@MuHȯ9 <Byȹ@@)kg:^y41~P!xV=ۺo wJFォgf CmQ%t<4u0*:RmÁKs](p})W8c;{q1yhQ3:<D+W<0]}A7$H5w8:iu-uP+/v̟P'_y&Tے3&x%pTu ԆZ,}VL5L gV/㫷JhO\ NFiQ rtF -AX2{8^{/<*)i mnuvzCD/]oճ{ow.˜+uQ>qy gSUm- &?D#K0%褽[_?o ښcִ!ҁ`k SIzftvОhZ;na~yok S;rbj>x^}5AE@4x~vk=Vl~ӳ ݨ#SQ5;n듗 'F*uL\hLdyi]O<_yRluN?1yz6c>7 E.i A7$  >zO|UVÌ򫡹ulj.웇Dn]6zhȽٜ5 9YQs|Us$"wHFY0"pHtU} +aXt:}M6sIRpmM`%TV5H|ϩ*mN8vQ-9mV]W37XM@vQ5[Jӝ>MtS׊+~;y X 0=14,2{DƎp \?>|hjsen?$^qՃ'Sacgf^‡,tPsJ~bxc)<"}^"\'54`yP#xCX}Dohzp L ?lݵݧv6 'HӺСD$ӼҚ2sO{(=)yOq|̩.Cq^/GcRqo[58lW:d+=cp>}f{)@#6a@0wYHէs#r Xo^P!uںlxzc-w,vDO&CMmf%zaWhm{jC(8h6cuwT{ҽ$;1uL&J;rƽlRsst}XpkK:17n\j$!u_JE>\${ѻJrp'bc"m.\\թ8}%k=o̓ {aai Щ|F)XxX3yQ8$kt_< Aylhnh)dx+]wf wVWkоGZv8D`j*apz\U.9Toۍ Gwq` v,~yH DxR>`DK©ۙ#W=u;3 R^"ݣKb+/³j0 o LSqЫU؊!} JR}77eJᢋawۆ 7iUݲϧ6ԆձiQ@P 2Uٶ ۞oZыlOouxo_q:X@4yQ=4lyd$Bi-$[ zwi+aI.}7p20=Yןw[0'nhݾZ^Yu!_%H4&JbBI:$xHw^HE(실#A$ AX ACZ%(Mm^81,p^ Y&+ ՒW㱶@0. b X` h{]Dc ͭ &rڄpU}ơc[6OCt}>w> 8W'=4ϾZ=?|0Tqwxp5W]H_7[t!SD<滔D"muMxh%zC;V}Ӆ}ƕlj+/p# >bƖGFHS }u8X.Y锘a`Jf) os㊿pIolaM{/Qh%ƺ]4=Е`MS-H¨{Lу4P` ڸT8K6p>G^c5%tI[RJՍe/_1+SPz0tyI`[*Kv'1Y; @%T=T)(M73ǫ/Xjq$$ y* Gb!@ rTo{JAXwvz?%ֹӕ.ĭFʮxYҜl?05]K1{lIjDvL{gk2|ժ|mFסm[rʀiS(A!I$H eLY>ri*$smMF[>Ζ#L!x>?Kd0TͪBo~[37Ao8ئ3irmQ@7*dE5̩. .NTU *KpI~x Tǟ㕍L׷r8H]Ӝ2̩. Ks0A%9[u4VKcW_]9nR$>̈K@-Id24NǕHkv0ky/>εDDMCy _",x@z xޱ)\’z-8ByO'?ORب8בΪ5 -ת;yF\:00;[*avZ8[\zOWd|7\?AKISBF i$>::s5uR=Yi쨨 T|%cѹ//<~qV;owj#^}G\m2z gOKw]5!iJ|iPh~g\?Uׄ4Z F(I?-x`b/55a-%$ ::'4sLQ ?IJSgqcn9Lg?I,dlzWN}2-\%(꾪 6w.Y#0wd,1O~ ؟%HGI A@T2_>kYPwh戀D7kƗ>d(jVHWzE lE{4C@X]#q4\cw^`y}̬ѥ8x,϶]qW +buC'? `ҕD*J~IGoL_lòMH*!tÊ0t\߳KCJwI8U6KiQ!uAkM drkkR ,H?.&[8UZO4 pN׸Ơ O$3.Lx}H0^y:ו;% 6Gxt )09uN|Zgv Ax1r^ dySZC{P<ܱ$; [c>zu1<,z=s$`{ FkȴUCǁ)HA"BתWt;W'YHS ~; }!88zO{㦹"CL,Oq8XZk3l:ة;v`zRA@0Tt0T5 *r]X~(xZDCO\lEnmk2v%sf %uqSH5aڰhgPg~o5kIObUώw z⭺Fv.ye?W '$SCI A.j=Zk@킴qiqVUᗗea5$Gm (M-FǒWxUBOoMѾ\\gE]ENiÊBά>G8avmQKjPfTklA, =.lO~z;~ׇiװcҔ6/njP#O=1kz\yy99'L[]ܝ^dYM9҂|$zDi£3bCTDyן*L4{. Ɩz߳ܶøkt_\j$H@FI Ad ϩ:"I,Ϭ \Nŵ]6?7[<&g%Ē+=^zg< ) ^u1G -Zau$GvGQxM!ױ`Z%Jmu(2;zp]ٝpO1^@=6=\v{QkУ$(t 2CMWaZ)-;8gUizGYܭViL>cYu0K rCeRg:gl<;8/;뛰U#mC/GqCs ~`IU]ՠ#',G{@&#ס! WƊjS+QiMQHEM8=jӫWM$oڽxl^%%3UOS|5=kl+Wn:5E{DgNuY.`+uH)rZSW{KvCsTCRZ>6 E:=sɤH_OtqSw P5lԨz0^U =9n=1u34=#M|De@%$CE~GK+IUN'l념OPEJ9Ԯ)f W JTh+R))=FG@%xnk=k̽?o:S*BQiF%=,\\ :$ A6 ϟXKn!Ll 99xf؀3-k.[+ЫGX1G)uH1O[v(v!@8XС;qݡ;T_eɫC/>WJN}\'^ُE3ɭMltl;OZ?Y n2| ?p.i_N]+Ws_@x} >V*n)xr8lk8>\ıiF+bU-RoMQ`q*)FT1.Ƀ#j.5 q6ٍ+{@8ͪf߶|ɇYhdNƱ= 8˘ETJk[pQzgk},^ A|%+ubвU]7[ؑe 8v7ʦg֣_.Q/KӽډRQ%TSw7a%. IDATͷ46PR%.w Q OוQ8 S1V'%ıT^~'jwr)VI>K EI A4$_lQvM~xhoWarrEt眪5atY>J=t kͅ^+tq^ۑ_\l^89Gp1(BM?t}>$G0=, @ l|ۜ:lhQAN$йV%u4Iȶv.걤I{}}Ѻ}NA|M6Fp- ?Mp3D;flƮ6P߯{QsRP6!s[MY#BG\'4y59@)"$SEI A~@9H8z&.SV zNa޽'LzU .9%,}@w ~~=X%ӴP'Wp)P؂0Rt3-yjvL*?Nl 6 40B99%^{ɾ, /d[" 㳭гл$ptSbA4'u!UV ="Qt\&=TBRBM$>U7wV 7TRGdٹi*(`hW9ٗ|>ؗ!x];@.hKJpkti:@k 9nzHI<MƭM(+ʜz8ԅ[ubFYm(ah?T\BMt9y3ކfNTtV[5*yl ' pҪX!Nk*Xs/ye?eD덫OCkХq)@z-PϟP t+sI ܚ?e??{?Ă5[nm^8o<< _kv VqX% R-Q.˷swtIsys[کÎ_>*_te z`i"},r8yeqv*g*ˁ~st\Pf5;nKBRNjҍPlܳ c7hv=:chЉ,}:D͞Wvj5Ζ5)ABKk#nU #!+ Z#_S2Κd}.D):N<`3ǂAlYLhHqG8yc bq^ ``S綶gy)܁ffjA/[#k˯<z8H&_}cKȖp:ۇGB~={^ (A<H ( _588T F(UXqXTEJrp7!ͷq¹5X*AH)n"KVA͸UVnJGV 17k:ڌ]1{}(/r]fʒGo~[)r"Jk38zjs20;mhn *mPK uepSLJN^ `r[L*6&@>)WUokSU! 56]0UO^?/|9履xϏ_pma=Cȋ椪3Ӈ`8?kpeِgrː=W aZSln}Ŗ:֝U [et"=,zy,ĎոU&QQ-*@uA'7Ԇv5aͮc!_\٭JѐU\(cJ1 [麽 8^V1ghXt0RHnA꓂y$Z(%MG'׭L:Ts0W1?%ϑ !U_ڐOqSՂ)5+4ʗ?%,֪[k s ` 7 Qey^vO h"u}CM6,lC$?Ԅ  #<LsOܚ=џIL=0@$7OiS[ul챥XVѭ'n*6ROn M"Ͽ]hLwŋm-=k~-Ab;i϶T\w\NeƄi$1ʾynhJs_hMkBDTӆkvځg htD;C* AT]!),ٜvDw "RAh4g}k}uV}Zk뾯_؇ls'蛌vqp(u*o ss& OPӱ O.E['>ڰ& :MM=QIHK mךc2:(l3[T7&#GՍ umzS#\ i46o>p2$Ob*rh:߹iebFJ[UAYMlIǓT^`KGIsEP/o\:F]'pMI>oy4ۿ ߋ>y/@.\Y cKr XjדWn}pS7^?tS!Ie;)ZEK<ޯgUšg\ao<[Q$,s0sl!M- cq2m^cz~e:^x%}֗}g? tk;;=<{IKsI?Y*і =Wl]"AX0;?IǷȆENV#۞&ypV*FT\b]Q(6̔ٳ~e\%]zRE lT HKdJ1 ;!;n4q$uer+'~zyPSFV0ha^IS$认1btHZ?3n̛7_ׯo[TWWgF`?l?3t}=JrffxHA)GPﷱKRmEIa)8@:C4տ>fgGQB^6 H&-qåHZ}Y J! wІKD 1tScY㋍%,tCdu~U# X֫W(E0iF=ɷ0$?'r tiҹ+i77V \ 7a\G/D5Qu:&,y"d;'NW_pEmh4c/Y `?: U# D,. MTPJ =iyO H:tbR<+ٞp8Hݴ]Rv#|^Ifq[)>:"./̱!Sy| x Mx@Tr\3u]@GImΚX8}T[V*.(@Jyߤ]p g7kxu>ss68t=c*n(Zܫ4?VsTmBGsgwl܏ˇ;̜2wX|4n<OڐZ:w5m=Zd1%α1_;"osa#q{aQ?t1N~1.+.@!3M>Wz%9x 8t\3J*_WRW1q$_%ڰsN,^8wD_W??8g~E`φ} CK61,YZ@&vg\R+K(7[WwŇ]R* `0XbInH d $4ypOlH{!VCh ^㏚>r^.+tc6pMtcE[M)6*ջy␴z\jcuš&z~%: + SPqw752AmLL-Գw-ָhD:m(Jjq|7:Á٫vncIJ[g WFLٖNB21_=*2oθO\ HQST]7\*s]R^J]*{ tH/Ig$YnCMN C_ gg}X||9&{ cR;Qzu/I|kI 3\Q*Bm`K\ޥupqdj%\YzaΩ@[c@^~J]sኚasXCH@=4Iw$]lF UuR$2a8sBq=<J$ޗ={$;\" gϾ5 #cN*,W,Hq{Id1b0#.ĩSގ / v^xؿX?Cy#gh~oWT͝<$`hzy(^d|{UnWj|\ ~osGf8qחCǟLL)viJ2y:0'5f \q$ؽ̱EX%Łή( TT,28(>eO?%I 4Z\73{b;)1y 7\g5soڅO3b1Eֵ<妌9dcT[;$z(tKÕnLE! .3FL̗ɗ|Tg|Ɇ@x-zP~E!:YfXH_ՃR:lmҳ\ e+:xs8ז %QKAZC>*TU-Ѩ'ڷ՝?+V]5q*RPUbQT`u$)[^{7ε}Sp_O xtRB]O)n35qk)̿ ^a<~:&v Hjf"apѡCε+Lv2a0+Jp5!9!Ί7*DF-,J66b5C"別I{馷1(/;#I1#F/^|;?={%%%_}6\;: țU;ɒ$dLq5_ 0&+> ,7 "CX!ȴX\"o7+Ԃ @li*u\{2|z&GN TRr8+#H0?hq@Q}CZ$M'駺Am|@M_6g=U&#qqZrLy yh`6"`2<)co\&-n\S>&Lwz݃9oL8\'[g?NIy)"|.7E&\sH'"egN7Zt)\+6Q ,U40mMILdhǛĚu@#SxL23ٸחođD ΩIr]|*Jpx*u Ol?u HQ-*rHx` =vbӾ1nEx|{,\ B.'=׉AǴ:c#h8-'! i⊴f:\:?}7VT^=sX;oJtqHtGYy۽WBD4.j>9BWխ@$%}_kwKhg/.D9wgxQ{把U,Z$Nu,?VX"I2E>_\v#F 1*1p@^{=իzyu@k;n?@\'gߌJRX4I‘> g≋˳60,1*x3ip #S]Is]Iv>X" EPW, "j>2Ժ;[wy?ֿv'Rהhs>LځzO.蝫sLk}r2<MbP^uTr:\atJ $V, >M^K}ڒ>A83PZ[LWD$[|%n^yD-,D"+!᥈QI]1bĉsa֬Yd2{w|v_<~qr(U|q=nT)Ӧ o{xL,JY -9Y=7]4+iu,mF6l`rz<5 Q&c&%cIAl𬳟lBR$r"Rcŵ`N'CjlH\$Tpz^Ql= |e %*Lx8_66zqw߿kp)gX mM˳ɮ-s& 0t=v {iKr7&ۘ6| G~|D.:[YW_Dp? xq~t!79Q(jd#%ql HO/sG `do>p[!~?]z@H9>K+\GGaPt(/}|PJQѯṉrA8D~ ZL"eR{3HEpHw飰t|s!{FcꪣpԮI+jQ|X>~.>Xpu:;2ÀcU< %0uEccGNV-m} -mqko=̹OB2i{Ɵ9D= :Ծ#Fq$_-;^ɓ'ZZZ0o޼/K${8 u'z,MT,UD&$? δԋd~ ]` =[)k%mM7 jUP6)p1΂ &^6)~ߥR$tzt,ݤ[RZin(-ynLIpii(١WXߑX}d%P#&LH+p\]bG'EdNHl@M1 ԛٝؿk~B44u(fceCڐ/MeL5LZoϏhU3FwL"TN*d(e a۔S9>C`;*19Y=ID3*q? >(LgG晴X=27F]]iQEv\x;Z=cS}^8.wx 3:\cOwߖi!qΉ7vPV`%uBZKwC!uN=Sg cO]S$M> Ii@[ᐾMs6\ǧm?uyF)=gZݑ.CӹOr{CwTŘAD#gsɓ'7n6m2Feߘ?Y>)W9z ͐)Ag :l\\qD6XuA ʖ~ivnjT?Qo^5y0*}MT `6Rp D3ZgΤ!h8}. ࣓,eJ *#W},Ѝ.{bJZʔvaEK{G<EL=}Ls.KҺX1k|qڄմi5cMKx`OO<:Hl/@g2z]%I㸆Y?VOC:Ղg?b_K1R 1N.G9bQ R ŏQj}]wѯ^-x0~ÁBKwj1q$_5X?xF|=>%o CѼg( W2pE| SE#ǘX[k(Dm FQ4UࢿC٬\ (1t46QFZ=g>{߾}̽,u4U9Y4cCߌssB2-tQd{.y@?׎6j}.=}Pt}kL"'?tJrZT҃wf$~g2ud'n}JjT^xwt7 '#j]q)<ˆKKلn|?ixp>K+?R]d6+.&kO|:d85 ~.=@ALWsH-{I M/wOړƢ ѻz~eA\aVPyls.}= oLRr:\R}妎(@e}wГd^Tc򩰭{=11}NI{{v<!in;L$YnCr1p%K*t`d3w]iڛtKLj 1bd&~M} }{aQNk*&e'riBTTpaAq"PQ((&;5w;Y7@,DH;\ "tR6s/LsZnX֡ gBע_Ѧ exְzn;= %yX<#̄;%sesX#%=%㞃\Ω}pՓa FrqvS'I#eqA$M=[C kLAK[S//cr{ ;뛐Ǭu]:0?{P!bָb̻4$_+ 5' }ِX:Zn$q:hYGy*cEc I~tKy08/7?*}^2!AMb njTTĈ{@bĈn?kln5g(@XvfJ)(=ɳhzUo2}[{׍BsZ{2ATҁ9NY@?GHo2ףtKKƥ. X!Xഈj̝!%k6mx}Ûa&LPbqŀ' k|d!\5i1}zI9u}[R%Bbk' }j,ׇno;3կٚR2KJI(eIJC0i'n{@H6zδac2~5u8*JPFRTX)Ls&TVI2Wi LM v1q2>tƂ]6jP }VOK7ۀ{f1S){IͺK@ypA2pM_h3ۉw>!@&mIE:(C%˹nX0T7}8۱=uDe[g} :z( 7v]Fʲb 9PY:n.ԇcŖC5#~KV,u<-$,{xq%zÙϞ0?8-:G9YPkS꠳+gfnﶦsT*h wA5i2v:/p9Ȅn|;R +{gf*-JxOIzI0fRӬqxz7/MН*1bĐ@bĈ%pݮIwi's0xr XF#־јUl1z. 7~@MWSbJ (ӭ s{a;5 ?P,WIwCJcS4UREZBf'yi!m~N@]w6e,P$_\KdQEI($,$vN0$s`Zcpk#!)SĆmtAe̸Q~9=C 鵻0 E*}Vb?sE.R(;/{S,I"_Y6={$x.{1!y4As5Iej/)7E}:Lq"H*Sq^|q5IepcEq >ذx}6oj)M- ؇5d}02V 3b撇a֗ⴄu]uBMW/~SCӝ zGd)#{H)VY<cg{{U>t(பawŰqL`7cDW;DA(Is&~yqh7/O)lUҿѢ. gZIwpZ{'7,誥?e'ĈeA\#FdyGafrgO>`Cg|&*h d-}? CadkK46b}$ [[!x$ B*B@_] >߅MDgm>>:gk͂)Xx:ɫpNZA3*G/bKEESf@1k\1־q=^ے⛔D_Z85.NX5]zx ym6K3Ol%bO+ã/օ^KQ^|vBrPV䜸VNcz&[9+jg9=񽇰T`̧ѦsFG7^5L4txfo#ֿ0.twO>)UbAcUǞgD 3iu0/~IH%( ߋ-m|X8lK}(<&{+_u+$}D0pтw-aiǔпؾnwٺ!4a,&tׄ$uyPp&LEl3d'IOXc{4.Rf~.\7L\@6ŪR1T\t|?\wьTlD%l}s' ,!|=j6O֞o:p{UY@b41xfqm{ m[~Z;\>C| _#}FtX=ru@csMx`m|vB҄g쒀OcLjy!.Ĉ&݀Z-9txvtK *H)# @sڒF&S&kK6 !mAdOnO>hwMQ $ee{P%mbI dN>%TmRԡjαu+1Ԇ=VPJٔKKptk@J (:l sSĞI8pĢtQb+?h`Qsoo\^ڥ%˗lH8C$]Ժs-i4ν뼴7AWyXLp-I>҄{CYኄ6i>/王4*JrC$Ew7f_*,|bX]Faփ(/05JE. ).PvJX`@2ff+_3Ȑ;?-&СEE?Uy~=9)R I0>ia @sIzIQ߄Wa u@0A'lq-;&хs!,и5(o_^NdLlcG,$ŜWP7=`| IDATNRq&N~G1axAV.dˇo*: &)i3ᙽKyi67b*bH.1bwA\#lpӸbs7(+/싖v_~Lai.&W]_vUb|(I'c$b2FƖ0%mtR[.AIߍ"!]Cͭ!zQ\CW>cauIV^ 0tI a.8vzd\sRM?NrJ,> "{ Hx`>r4;dF)?%68)[U`USUG"og(lq&IU6['`bF:L R-^3I{ƾQHx@ӹYMrؒK^.Qm{6jK`46Q^?܄cTN+U&&/c"m= >N;2ù$Fr{"ҵ))(ΐUxɴ~z+9w,ŶUc)W [,QC[J${trlRA:]7Jܨשt"ݨ)fyf֛a .,f.Au<MX'WSw/T{ .bJ-Q?r}{R~b-IyHc9pe%XX&Q?ϕۏRZ\zs.QD3F]\r[?rX]:$$YB >rzGN;|8$<`ySKQ2! n[)T,`M%׏)EŹ;C#!tlȚTj }}b^1*7& n6K4Aan! uqv6_l>p2p}@ܻĈ@bĈ[NRF|/%'쏔ՙyEc?> [WW+ر%~*@Z}!IAt;18SO J`@l\;P,{^Kqn7%LP?X֦Z2WG}+w]2?h܊OЍK>RsX!\nf]ӹ%X7 $jwĞɒzr"'q\Xo& l0I x>F{׍ x\Q|`>Q$賳%V: ::Di@6W.X.}3m3?:LI:QtwAAUJK[z05~0& c;(\] ”$QccזBW0! 2z-& lQn{> t@_ -j<~V~TL6ےY&o$Y1 .qNbsI|2?&7vvuvV;!.G:c|}vf)1gT \c͂3tiJX2{ sRA es3{{q6?` ҢKaRGT)- "wQI!uީsgd i:Jע:ɝpkt~9w'pg@xZ,}qа#uq}#-,'y)u@BY1 w[LO338tHEhKSiPɵLBt·WcBJz)ЂnQnط 4J ٳosH8A[X>|8Ӽu&?L~GGlACp5Q;'>ŵf́ #T&VG$cr8*cs_W f idcJn;H1bĈ#F gDk tcO>pB<'Jљ`W,?ֵI7Vg̫x)QA5oX9+Wz0ݎ^\S^`Ā> >mƕg J a&L=Lh"SiB&8$2שϿ6WoՋ.d7!\2WƸkpqpحB;H(r 2w^S:ʦŜ=x%&qױpƨHk |(t\u)g_B,U/]"L¢(oc}3}I&wgGҍ".|%y٢|MMJHgebĺ K<cER$n"")wnBܳ$F]MnmI}VweEhvl:>"G&5zLb cpwհީ]^{ e ^}:#+r}/sJ\_c~tZVbƯ0: = ITK.ٹO(Pa@YOxhGe9!dZpS׳z~%{PRhkOuB]$1b#.Ĉ#X%\HrAT.&أl)Lkn-RM@IL{ zXڈ!I )ISXqDdL<} իdΞD躵zхc֔8d?\N~(~v|)ЏAdad=XaECg R;4A +f d6w9mūL'&΍^Pk'6gXQM]FM`:\=3.)Ħ}/.@D4'_<>-BXQb躶=96[k%v5utI 맒ny0;$Jr$ KS7%_&uYЙyekLI'؋>VkӡUIza^b;։O:_^7Rg4^Ա,6΋rS]ԤYЋ.(7,oֆ%QmRzĐ3F9oSkph1&:1"PQf 8I${oJ}O)\ @HjH=?'F$?kLwCdH<7Vax_/\;B1k};:@pe1 JR)dLLޯEÓUw3xO?46K1q$Fac-e*] )(Ӄ(pknk"/+lQ} Ocri~Ȱ4Q,mfiC݃Lۺ?D-cpoU.oܠ(ÚrPj%m]?9qHz 7Okgbl0FOD=e}0̛: O`n>4<>#,Rlf-jm\cՈbt.>(ױ6g`d`$N LDbQ+Xۇ;.頋v`v>I?%_cìA{*< b-RQkFEgsErA&* XN(s%yFI*n8B0·WJx :m XT%\ηo=יe+^}Г4)VKO'U5 D~ֽq, kŝ'dY]tm]!\ *\=[΀{׍bYRSR:LE aukd`_t-4yvt|=p 2k&I}@Zt$HґKgVeBrͭXtzfٚܡ6)۳Gs& !nKń(Y N$,c"^9x:]50lI $ƀTO{L "un[U NmиI`R(U9mky%ϴ~y]0¾FBNMY '.#]b醝RA0O zg%\T%aoi a\JmhJct46bSPz.tOl_9߿rq\1:,$t ͵{׍ \l,?>"_$EGtIjp]viI#6sJ)? SH :zgGgvsEON[1ʏfea|rsQ}+^a>_~&Rf|8|ڟx}>tߩo's -vl_۽t-Hq!ɭ[kOæOʛKv\'J5~Y:Ey.[N\Mn|# z\{XU# n(4tI8$LyP;cQ1b| 1bĈ 0HI3ڜ6j*2ߦvD=s}I,~܊11:F`Τxr$j>Xh ,1nD|ƧU牗1o:zor ~y1buP 'Bt›D(W7ةR!y%ӆu( 먲&&J)BK(A)sW{m8GJoftWm`C]6e&޹ZL=@s;gZл&w$l{4E}u;H 笟:#yLjK:5Ms3ygZَyvd7&35N ZANk*/2:㎆`M" cV=<'6MҥH%Y)gؾ:+Rw&;M.j*,}7TEE`le1Y8}Tc"B ;Nו1tW1c-y}'yFv3{TT_'@9fK=]1H1Ţ5ztJD(Ϸ?ht|t-XL{#烸#F蟝3ibfMִ5ݰmLsrI$ *} e$j~^s¶7q9,{.dIaKINQ$}2`Վ m4GWp&TP'Щsibd%p-)S= ^WkQ.iQx~ӹ6v~O#f-ҏ-zXh8d387YvχNA ttϺd?U<t=`4Yl q}uQoWȐ{zًuV9ǥ9X<RJތ;H1"A I{Qfqvt8d vC1;5`h&9unCk{>:}?$3⨬Z]e{}PK @N/:'+$b6M vRSK\1kT* rݬx[k# veH@f'H ׇ!rBzMQ-d[yP)AIQ*&D}nE@/B8' $UnZlЯޫxa{@Z[Jl:cQn+U3GEr#sHhfq4[lͭX+%ɍ)p)"G~Ӕ%<7sRvU[>vjfUZuZշ#J0z:ͭwkr HQ¿ wQ)DPnE[.f@P@%\aZS\]6yO$;26)V3ُͭrݲ`@Ncsʇ)Xjo`M`eyu>\= =F58]( f{(KѕʴFdQʻ[Z'V8ޯ@rň|q 0\; Q .Hy]>,%y>M9\Y|~ [?b@bĈ LI3>`gIzzgB<)cR,ݰP̎tR $)( AFK ^$nbj6V+^X` .w>++$1(\4.ph;SwHH'%\2M* @Եt`68+jwP@%i* {'s#KCde1mM)iLeSʼn@@k;{m%ኄwMƞAs2WN.@A/&?TG%yqI!kX3.H IDAT *JXwt 1%TB3dK"gA@Iܢ"{aJªZt幙7% uWſGYTmkefN; k[[%qUk.KEA6sUeAͺCnCdi~8Iq칶On~I1DZܸTd5[}.gY=2k9j WYlbWߘ=?БLyMz6?uː<+sӅT{l疫oJ/S놊"H8זtNDg@lzNVY6 mr .*:X%uRrRIO~F1æO7Ǚ;_^0gO;Wĵ;7cʹc䕦1bD SXV8"8\.HZJ[\BYGr,6Qt ;P? [u!cLnSic!]7*a/%\CX袳T9/ (#FK҄c&M2LhcsƎ%^~(b(sVY6 kRDeOx$.QO)ź7~BBicu'js@Ոجm%[9Y=-cB1~i()kz._>feՏf]9Y!Gi͞:b`y|B<~>s& A^>CΡd'2aeF"ZIkܦh[x?B%[Q Vxr{Vn?"R4E5vuq'{L* ćwȻr(*J9}PݣLWd6Ix&y] z񸡃}ԹP{oSHӥ9Hj$:ohRIIT6\Ի$SG\"MJkCZ}..kZ&t oL_+HEKzv9SxL<$?#CU,~Z<|m7Jsz~%ی544_NZcփ7ZЈ*#g*:}GN+aEGg"g=ړ鼍#F .Ĉ#28譞_/B3~K(s0<|21KeKrs䲩llnED61 L=fb&LɎJ J [ZQR jI)Ω/n3{Ln\P-i.gw\[^ؗ=7b\ %8{ qhk7AڐvTW0{j}EI΁MTNu.&}"~s,:U<; +F^\qy%!Oq;;s [k,g3{R^ġ|wݏ׿%ْlܻ]wJgZ3Mr{1Sd/*I**J'B$5L"gϾZ4Ono0оEa:_yʲhlnşvzX:HLr7$O0{?#dZ=MZQ(+:{Tm fzt$犭1sl!Zq]v7owu)+ Ɵ@z~eZ0Kpeـ4jԸZB&:ڋ¾BDucIOn=( >Lg^;w :e5%rJ]*syv6(>64ӽ輡}L.Ym}(%~+@ϥWїBpO0StrMq'Hݏ#F}]\[hL \ :>!DUizޛ]}뒤l枎D}W[f6_${SC5bMdn1Q|mi;Xo[n^+q XRQ$#JlW5S,qu/|+%8ޯS_{\bĈB\#FdISWY6j I蛆'w ):LSJr~5=GCʰ/jk92m$mVRcAboq3hR&UA8.=xhأ' ,`v|7i.IK_m&.\ll)QQ䱸6\TрyP=^ g+Jx`h\?;7 |lP m X~Dd u2o7vncskJ̔HwN/yg[4^5-Tl{C r[c@^bM6|/SG2utч 9%L>ypq=6uB1upaG-@ϘfY0;ߘ=a.w~3%y?Թyn:"YӝM<`p2^cx yޕ::%FwWXܘUzHCHN 'tCC$rIJkϬK.څ39I:>xR #U= =O NA[,!x&ƭg@y?nvܽ~CZ7$Cm&}~9wX^'q]>`%H~5#FG\#F$p&#WYrM^/'fp2TY* jȧ7ڵ:v3\|xpf,rM$QdLp0I iь[uVԙsmՋC]\~jo: zHeLN]RI *i֞ pdf|u"f(Ʋ:L2L)6u I:BڴT Z@zeCҒ:ܹ<\!U0qhX@%\PQ%y=($飰d.[:?m(Z&WE+;OmRk=0sl Xj~cG_&VInC߽c Ӓa9&Dv;yhW*bq0lc 3Iay^B$迣{:YvBRcnz ^X4oy&v

>CJ:zM.c[?C{M.{^W =,=kU, UNn>RFW4I SƊbiw#++%ur|I^FcGuϸzQ!)1%3ęDsבXf*$]~lzp#Fq$F0^{HcrL]8qE{pcE1>WU;>R&t,~3Ewrު$aD_Y˶ kfg.'b:֙4MIV$q()DJI t87^&W]bL&w6EHӱ-kcRplsRsT{:Lץ?#n~Z9rzk7-}׌478&n#-省%QaF^U9=O.N{LwΤ!o@W١ͭ>$)0fH GnS o6-ܚ=I4IDe+*qZiΦ7uP`)s"._! D!?^0Bl|3)tQ{*3=Qcƪ&=GϠt1^y.*ɧ,Ecs_ПN,)dLX)0ͶojdR 1b:H1a3͖t0 L K&gQn6~r˘@1x&3|ȟ4;$:+qוð1t9gt#L>R,'cJƕ?6VO3&plP)Fie ɾLQ6 g'aLrBI4<\clnOq,4W>L&黰+\Qff- \S|u(7 y;ު2Ks(C4AMaɆbmlA/7XE_rQ3[NKV<~~o<$9B`~~>Sp-|xR,ɐx>_zWh@EI.L"O+7.Xu2Pe YK53Eܒ%u2kVl>cмP\AYr)وDsIe]M1btq$Fp1֥$[Ri $rYH}Ν?E uMfqdgϹH$A$D!!Dcga)L}?QG}֚:;vfbpMzEǂcۙ5vy"TyA$$C0!h;gw{}:G+79}||?HQy}oo3q6,m\>j+-Tj:K!(}*Vhf9|(α DIBlRԈ=K6$Bvق&y1uS@t(;<v~T.q< ۢ#CE7akx{rZ>K*N2efOM7$GtC=n7jtd;EuKOyn Rj\MfC=jw۴QhIӃBW}TZiGv8ɦHm]12G#5ly9 VASkg(`"P-hL9٘D MUK*lDeZ=A \KAy&{b*l!B\˲xd8  Ônӎ/R>nDž 1 l 73Lp՝5{s[0ͨfZ 6ԅL XuM\<=s({9t`?̓gTYV\?D˶8d(jL5)UjƄ?EC_B&)jdHKnޣml!E:0op(|8|2tI38m%\gN Gߕm+J Nc[wOL@p3?^O; Ξ̖N ʷFl;K]K[[Eow!uUy UTɲ%R=[rIA{/uݧG%?QqD Tܳo璖U*b1w裇ZrP^ rcԕ螑K'n'+X=FC#LUZEr': rTc[$CQmiA+ }Zsrh4/E͍)ųʵ QS=&M%WՑ1(.QȠ8.E[BHP8d ;QADs19XaAUIrkVr˵t:gFvg!*U^z=ҭlz]WUncHsG}fԘ2T&TSt2/Jtk<>z(Ynn~?6YOg&f]n o{GzUl5;'T`AU OF!d 뭪q_u)L,Ҋf6uɨxxcĚ N %76צ 8[;q粷CzmQ  S} ,l.v1b q$FU ? |2@5'&rեǵjIF!o(qU9 IDATLI32G5(MtBLS50ayp2fw L*J[fO]{b{G| F^)P'JԹWc;07g|:Yqϛ q Xӭ=.<Ե'}60?:βo h/%1)E9m}tEI:1t`?T4?x@K֥(YfN jc(͸x11k>b5a.5~Jw&APr{#h'<FZAlT^EC)jjP_.gBdƱ [XQ1O=<9szۦ 8 >\m‘aȋT2Cg"ų1qd>Jm4 ]:Pz]^T aeDKnZ=Դ ߹}׭7ܼӇ6>wrCOYB̹w(? a3m>LRI9 &9ѱtϔՑ\rҥ(3NN^[o1bH!NĈ#LZ׎!6AR_a˴=6UK,Mpvzɮ\?<Z ~ `5J'*pcЁIsDͤb \K7cIwě-wNmj( T뿠K^u rb T,jɄέ7/qiv57~xN}GP"rWb#xuO 4aKw/#(Y 1O;ԡ(,,\QC4Lkx> ɩ3!at  F Ҏ[Y|0JqUXX5f`凅{u\q .ȬADz*󱳩]{L,}l6˾j#hd4ɮI#QbqOu4MTEhDNvы2Ugrr q߽QXp0>pXv?F ENVӋw]g}':'dЦu.uTRZ1bMx8N~xfN(vI9]<&N#IqBWQYvahq9ĶOy{M)T}#Ɵ:H1"Ņy$* ujOos*0٘R| h.`㰓K;Y@JH(Ǩ>O(8 q%J'd#A= ,+M1yiO KcӇA{mj!ȸWmΕ 7Lq`ucmNj Ho9٩-15Y'z\BRDa-$cOFpV =-/.G׏`VRZ"r)E";d0(S6 \2yNjjIvɔ:Gp SwhPppS#L&.-'$Li?Ik 9)&.MqugK21?XrJI֘N^MQϠ#Fq$FΠ^3tQ.*% !h)Ƞqzmd<2;(GJc/Pu5kE ~Pv&Wsitɔ"XGsD׊(%\u`  *hmj8c8Lv.k"GI:aJ<:gD!m)[|wρʯH{/ L;B?e* |;j'R?GzBqLkX$MӚN[&U_]饅n8 |{&ES#0b6 \wȓq pxUw- 5NwFNN%V&~z"T]껣 p*<$vQ\OSM:Ju?n+SIu* ~ƜS wVM~K.AE20/o(^ &?OZ cO >G#F##2.Jo긜p)#pe!0TB}UQ-:To6 /N~n8>:]鲭PMDKv9bTGf r* :Dz} V8uﵤ=U%9c۞l[':' J}kPAQcp}T)[7pM ih5}“"n6]\@+ɿ텑EC҉Jw x>27_6<-$ Rv:9[2I򚒚TU.˭R[ \wwBi.Q3\KAqTR.j:&\dQU*{Lsu>$QMs[۬h8g+\(1bOG#2.,\ьq!aTUQ2%/,@n;o;2 sƭ˪; Cq!#S%6hT*Ap[Q~nC>Lmړn {.FCKCi <zs%Gd;x?M_reR^?E!(tnQ`%;M+)*\|J\C6V77b\7N5/'íIJU69&CצKҸUFM&Oqt(q5֒=U=z\*[p3 ^Wg6"R[Fy +tѶտ@4E?j;9j1N+,?4_~Ĵ?YHƶ }oMZT2#zG3Bd pTBp댫,0}O;?ese]NN`DAnQTRrW 9)[j%TB7!J,S;- (?s+R{ VʆJSϳILcocSF#VV*t*Q}:d%?1G}ŒIeU[K$VHPx약VbַM:Z6ύ44WQۓXwZZ 6KWGKG3 |뒎{C|7'qPk=ݼ2\Njn,_M/A>ÍqK7bar8(ęztֆVIz+)*\Qt:.E/nϺtX[TMt-Y_#G+%Ca-M>˭ OvuZoT IW9yj-w҉I7lZEW>jft8;MQ:H:oaRhަV\meeمN~,uP6 rts`/h'&~/guuZi-,$QyԽGQ:⒎N$Du(E%}X R,^QSHcLz *1i䠐`7 T4:[\m۷88C9@e] ;(MTu#5wM)K!(jWヲߞQN<,*lol<`hS?nTjcE HA'lhΨ%|=yj,U kBhb7ե$bKVnmJ(ǗRN7݊OUbSr|iz8yd ΋Li>A.i҆yEnM=?jHWPߕVd̾tֿw4]vfc{C@.`Jm׵RVUݶ,. ]QvP~X9#/(ǎ'3o e-PLƒuC P#u"a&wqQ֫yOoFZŊv*$aɺ^Zȟ X LwM)T Ok{uY(sS|eƛK/n]ّIWz ':P=v!e:WYvP5] *kki\^RhLtp': BT2Q Nn|\"܄GfM럋Ώ6w$$RM-m()͸r4* ̅x^ɴc[ +;mi:BC0FI 1b5ش" _ S¥z쐐dGEd=_sǕ(Rgݞ'O ^&8Z 5n5٤t\}㰩S!~ hjԻ.Wdo|JR41~r른m(w0*tH]lXTÆg5[|(-3Dž,~qCǭpC aE(Ō򡡪nypgBI>2_Q{'NedB\ ]ykcxm@ps)D=gA^+DVpJHئ# <esB+)&"_7N*"(`ܝ#MnJ؛ު FT:>qo91O?:ĺ0]g@Q~.j6ns퀠8uP6\QRH~;*ɨz(5jU<5u{幎4bP3븊B?fl;J8}GJc0t`?cZģ.Wg%~+[B.n1h 1bL&'5/jrml4d6rk S `.B٦Ksv8#Uɮ4ږTKA\:vꋀWzF78Cpw(ML *Ah;1ѭokù-=͚HQIU#- ՇvUEmMK\7nHQ0%㨿$BYtة/Ȅ >`hn <@rw(&yb25/΄rП!ޙ<]_C~[ /a0D}%#e{D |D} гq{Ui}/Aۯ,-MZOu&`~>\SκtS0 VJC`l[y<\[{e x[=-[0C 2a@T}EHꞫ4TKWZOqPP\Q\SFhH E(g&1lMځϭD8< Mʝd.h[SlWT+6Ӈ=%fZ!rE]j<`iԆM %d,ˤ)Ff 1b*V]g٪@-erTF28\Xl+6m ר:DԜV_s GWUL8\Q*l|Nt#q\]F:@)su(u\G@A43t\ȑ ,zjr0VzC=*\C3.WMEqs0U'<_׈RnXNSr?z|O߉ Z^Wgު~ V[E!2}>!G*+ٵ6X>M$%̨jݔ— ~jm+{_6v/`.ѭqb/{M)L*W-M mu U;mؼ;:;OWM5thcپpH=7u_M:9[t]e?W:BLz6g;%_ (.0R{x'߸=crh7s4s7^ZO*eZIŚ 1bH1z2\qP ΈcAd b[ɮ"Lee%j ~m@9ǦX IDATZiȐ).A˩N#zi$jKSxNtWnx[nsVOANjfp/U#rlK?pQHUвVSUV?8v6Qw0\1Ʒ|SCh%s{^z8I]%2=Hx@}z-:a^:?3,\ZmF-M)uӢ"s!]КBCw`axApx4p~tPZ4,MIs4!*u(?Eɖ‚nS#\]wOvh6uxM?|``זN*| qnL TW0PkwuSʭCm H4AG3ř${Z@\k{M#a;,/tf=к*ѽ;nO/ 0];W5O-ԼDHu:pזڑhȹ{f&O;Ŗટ/&W8!2tv q;[8{KCtEEcĈa8#Fs Brh]FG< 3 M3SZu/75k?jrH.a<¹ NtBQP][& \q,PmiER6WEk mS7G`Jf:L&Tw=XKSO`tunSsruN 0z`ZMųC , LpU q0s4׹~tI].E (WoklŇ>Zs]l4v&AfN$G|\G.a n T>4h0},nl8;6Nu>sγo:ĚBye3F5mSa}?T&Uqq_L=~ZDZ%̰JTJbL)uX^wH;Lv u:VS4s@ŭC~ז 1bİC#9gl؀PlքaX(kH U=-)j&Z?IŨ eȪ %}Ēk͞?e~{# :Ԏy+k_*pje(1Zql2ӖN+QW$h-L7W/Ɠo$%ht WJ1MM`B)5j4`F7a+*c \,Q < zn[Q,{1>J|t,99i:E $\V'C Z{"d>/V' }e+{KCInRTVs+r|34tFDMS R64jR 41ݺJqj7-OovZ ڝ!ɿsU! ^fP^O{]:fN-RW)qZ;]?f0gՎ͛{+1vxvsW<57"6Uzо]?]; ]gisζㆣx.Z)K~w[c+KB.R՟~2U9pyI6AQQ`ь1h`?08#F/"NĈ#kˎ!YCȦ-P'}`mw٩:5\ZMpP~]ŨRbTZFq&dp]&6N%'Cp 9U9:$*)tN1W 8ª4] !'"]=vHVtEv P5&CC\% >މWw䄞JF- ʠ')3yE6lile;TrVɔ HS JhQiEQ~CGAjCx~sq\9T \{MxA *ShG|[ub\RAAT Kt{L[̦tn<"T J\KY&+*NZT4.s~uay|mxnbZjLhė(+4>w) ry~|P;^Nh&Pf]sm {0)1mFuvͤ' 렂y-JVϣז(';vΦm{UM.l1:kBR6ƨ⽶<$H8#F S\-F s,D1ll{r P;"! /xɨS5LE@?<=zM 2lk|8FrG٬BCK˻\yuU67<@E+P]MЮ]uUuPNj,$LUI@~]#:'Bks%qe3X>=.M`c@\2]HUwnԑu$3|AHcAҧ9]#U=jC@^6mTǍBχejϛ<Cc(EXm;T[> P(ۤ9U0&źR>l@rRI*X/(4)Z*NujN@0kiħTO];`բJlmlÏ ;-_Iѵ T>EYQ\cFYDV^NPK$?r M$,`VMWU?w- p0rٸDC+ۤ nggd;P ݉#ϛq9[W3#qpc彮([&C%U )&xPk`PyK` MǺ-ݛ|\[>+͸h2 "F#NĈ#cpFEҧ9U!DBgrbA@'n.ƹ8}ӎ/ĹtH(q N`2De3v|Ԇ9hZ(~ ~FB[9pehiﴞ(kx=yzJTs'نt*?L.+.$Sv,O0%@mmݾB [d#$8C>%pLlM~!:%u(zlV_{R]GEK{'V v8ьUJף(ź5T[B) 9a\뜰"uaKQkGSGqe1V] mtףۦĊ-M؆t׋vp^3]G䵱(?u1!NĈ#c n`*wF*(Og bぞLR-4utA>$)@r;MlyU>v]e=GU(J[sBLNk&;IE} fBkbQ^rPl'Q,,%apiW+r] G B3xW*XsAĶ I]u+Ov%74>S7;mg/c/ }]GHi+QK{u~glل͇Z#X~T朇TЀE/)T : ρ4R`,l;@f9}Bt|`㓝Zy*HP8&!XA:1k]laC>乸9¥KR|:ΒߡDUP`Npݴns O%͏^HbյoD >>-xRb٦T$|?[ :]1VWiiqD*i38t&pmmdvNPfR24mB |dHtPX#l 4Vn5}gNtt}8a6espi%0삪̙4, X<K>S|TbkjßO(Dd n(,8׭Q:7~8m(<Q^k;(?]S^X;m)^9}P\ewO gONRf x^S ?`&D t'n|SI@ V䢣뫬T+k(nQzx6݅@|~M!l>.É|˰I z)0w_b*}_f2|O~+ك';ϤL#%p WL\}vc} )boy)?׭T!x}?MK߬Ƿ& uO9Tz\:\Yo$=U$~Mexzg&**u@ >B,4\ ٨<.TBS,Sm[{E>K_Z# r8yn(jE0 ];K o-.0=UO_f^r84~p->E&fk|n{K6L$cк {3aeمgVZEq~@;b6je>ߘҭ.]⦤w"`I?,4/tOMUyFhKUh,wt׭&$8_E-%cup)T#F4 1bdk톄6 p r0()4>@V Nv,&ݐbT#RGiŁj[hQMM -?^ggr|gud˽_=`9뢦j`_9K#|6kMpM9._t?A'{.[:uZl*>kIJMҁٗúG#-LI&Z}h~L dvxb H-J%ʇ pW5?7Ů#NҵYnt=.GPjpZw.x: /psvQZh>d>Һg%;-jQ Y jAy v̧&Pب*IJ7MCdp";](pmA]#cĈ] 1bds}%`؆yi4K@l٪s7ňT9jq:j%cBTh҆ρ38# IDAT)1K4b뜇 ]L*5|kۡK] ,f>L/-4#xLz X=4b6 I utEn0t`QhC4^yIlp%6#%96ZP9(hj >Na̟2?ec:9{->"!(-G k .1,=Ed͛<<أܼBw%ʾHArX(/65`y]KE?(]^Nw_oUNjzJG=Ѥh|SȈI!&+~qцpE>8-.:gXjfVgN_ g?Qjpx)ۀjRA}d㹮uIsjNbsRCA'T3Dž y+Q%Dtc~n{۴Qy{qھ{qB:#FC#FVQKaa PAGA3OTPmU{rujxqUQz۶#"9r6畟 @ Rڋj|m:PF~K{'Y#3.Œ^h.&' ƨcP)9z򍃁 H;=R]TWQT\{.(*8J.}@8@ I⳾ڵtK;qW@BŶ%+QwWL0S.Y JJ$鷺.ŜE&j-UX!fv tjiCk4DYDuCV]oU*//)6urkFs"UPT+C.B|l. ѱQ?rG ]g9d~Μ@@*וڃΔ2Qcӵjj u8$|;7\~j\&L jD)1Ŋs1"]_e2ud VujÝkh}ᰵtki:]51b>H1*+ x8AGΙ4@@кe0tF.bj% B38gtHz'g?YDUȆk 򼣸T7⸮rD7^JcsQ;b(0R0%<Jjf`np4dZU[B!*d~,{j@8u]gD6m_7g\&Q! Wp$KuscȳowDY4 ]wm|s*T{Pm2]r{g^V@z(p[ZScLlu.%] v'\2tU'LT]I8:e oO=׌ s>`)9ΥM t8t(\Oo*x@1h 1bd`y Mݼ%WI K'v U{ dbP…BF8ձ⹨ -WiVƪz6|y2DO=,viM'0wb^ӢL= -]ǁ 4Qy٬]gJ0TE8s D]'[ޓ= \P'z<]Mm؊+J C jQ%o^esT7iCAk(&y=❱ s&eީQuеZg3D|P hCY"`EH_6Z*@O%L]gB>yd5$ΛͽM6iu. %AC֓ܳ뵝?@j!@8Scňqn'@bĈupUhthOh Nkq@5(3iUڂ (ܔc+iԳ$8>1^uI]/{z8o22POR<>{⻚ ;Y3U~kKa1;MRPzQ~.w͑ejO9\-n.8o&dج?B}ӹFPI0 lǨ¼sB}сyw jY!vgHykk1S_!ɒu"yOɖ ]UO4P0']t6Mk7 >RS %!R@b@D &P<'5sfy_ B ՆI_#H8%1l^4ljk־m(4ē4K6^l O Q$5KPE?60ۺj TG2|zBYމ<^tUzoϤä&\/:'OǦ :r$yMuSō򹨮1`KKǜ%ϔF7F'@bĈ+P]I>q{+@ruealR2|]1iywq8}:G X'%?/z \b S(MQ317%tsXGyu =jOྈT1L[t\5 Bժ:IW\dKc+mm_K 7/l-MX RQQ +zO)ۇ{((t.G^NSK pu@? sF+b=%**9}!)V&1x5T3ˇ繉Fqp' wh;PYƶH|SDŨ5iŭqg34lﺪk7JL- UaC^N"#P()I#I XPU6qĿ]ۯwI Ε65kTpٛzC%"Πi\^RolWO)Ԯݯuc5&/;}=yZ`zE%¿dZ1H1z)  *ة g͸Հ rG+.Blml4 hi2cCHUPsԪlq\XVpEו GscU^~Tɦ:z̰&j0K9s v6T?Rtt%7U;><RJš4긲A!TOwd*1ׂ*ۢu&עNI3ڸz25qd>Z;kߛ3>-M\,]n`A{ 9:>Mh )˩ӨvԈW:}4I L+xx( o1'@bĈ5d;&C&5!_~m<+6Vtlt]*kԝT~gRM@}zC}dTtϘMՉ.`Sէ\(gD]I`Q5BQABdZEq*9(T4ن:Vf|LJGмwY75{_WϾq^~yV2C R:|dP^*0}qUU%DTv&wߕcTeLAK{P>l@i ~wY?pSzam55v\7`B1ES rgUN1pV{9oOymmCյoAsv~qvZCu:hSÉ2}1i c\aSE&lP)pzR^'~pgK92c~Tx|q@|4:Q5EN\wqޗETj򼥛َx] uS oNƈw'@bI?1֬Yw}9998y=?yDNAcr:GP6MߵMF6VtL\EdȶVxh BoI_tSpA>x{X@:*£qmO*vfFCVW%WosP$er0Mg. Unֲ3E3.\.~  .f(QT_gz75dJwXV!Txȸ9Qn ^~%>Lϝ8 V1 k7. t)nyBD+K׬j*ש{u&ZF Hj˳5W]WT.+9 cG-7/CQ~?,}E##TE(~jﲱ%lᪿgzƜV uIcss>_nW6HPIk#SAg[TU^S6UFުPW3#]''z!X,#UpDPO]`Ӹd|/UwնdD՜uEyWߞ<\Ȭqu=U餚͘tZ$곱B^ˀ0(Ĉu#N??~_~ə dR|jI錍.a#bK ŘCNg_ZWDJMҁcjɥƨ:k>z+)!(N~z]p#WΩWƦ;M8Ikvi(ͮs4[WYMY. .كs ^cΤaXPUR Lk 5Ov ֺ|_5S{ܮ6f[lLܫOw%NL$~&w6a xɃ>fRSx? [ҝ@Sk#*3 y;K&e*TyzA% { ڝl 9uL9^Xܹ.SOƅU1x-txQ[u%D!ND)|)gOWgqEIN$OWR-"4q4/ܷYQc [$d,^2T]2$]bZU5E"e'}rueWS{o?bz'@bĈŋ[Ggd6i,6@+)W"RlXq/MQVO"Crum;ptƯvpʚ-3Uy6ɩ'8 /0Agө5܄M N){";.\̙Tg,O ;+JGy؎r?w#h̴BoH9\md`FSlJ|TϜ0 ;j5"b{-@YvK˻NỿyW@Vz㞃]:`"՞ݍ:`dTBΧcہϹ5ӝ7 ]넛[SAQvLn2XSAuSqv52ȡh\r7wŅp3;Ĩ"wScE7%%7Ew< PcM)#o^~%r"!9^ʏ8"_:5̓|Z#.6IqݻҭIXWo_UNۥG 5/V&Q0^)!Ĉ#NĈэ/_~eߧNGǁP JPXɎmenq1A-@'OvAmw `7)@9 6/ uZqn+8)CW5npҢJ 0w!^96hJwCϻp}X*Tj.R7S {@RrpJG^<81]YW W]Ihߡ('.HX`{[Zɭ* 厜I~U좣H_^Z7d2w®66!W几7..Uh^\>xdKwcKǽwO=Ęl> Nt 3"SɟQFIq(.>Zf пfJL#clMnshuh며-p'iS`(燨tI% Ak y )N3;~XoVKGd YQ\@u"[bzC}(,YL, 3_HlF_2..IqtX#MGԢ6Ά"*v)q@NrQZ[IҌ#F'@b?,YD}<4uV~oi[-MJ=թT&%DP\ ;5/!t4G&t ޞsו\SOg .{V-6 թc?eֺ-|H7V!ʰb.A:֎۟BrHJ1l &]9=NO:<5\0\?7n6 ]g!dK_ey}UmP% IDATĺ0]g:p]MmAWA=vTzՀKR%A[t愼Ŝr@ -BÉ^^R-Kn~}Ip[c* N푂 0pxzx'LXp8?2=-:)ʧu@_!Q)Fr;/'~Em@΅NG3)bˈn}x8w#Sň# 1w];cƌ|G}wSP\\x q)(.@-AaUQ\[&9}e/IiNnahlPsc9M?7vr.U##zgsߙ:T`mF+vRgl5.]%%i$_ߧ_sǠ硸 7T@j,~iO0Yu N HbPp2m 띜}L1HK! 8Q`(TBorӵ!xp#B㰭 d?yJ_QRGj Z*Y^*:>+@ɢ" 3_7?tԉ2LWΏ;ͽwSGDRҴ$2zK<*LQ4O;z:AI9l8Yb64Tp 3qy*~'S Pzg}?,m=fsO8{Cd]82_ۙl q\ױMRJ"f%p.ɚ܉p۴Qo֬d0$cs ѝK6mQ~.V` ӆ޻FiUWhahQ(`cC Z} nGdo0%$v}w:P0>GG G T8 H@RRRA2)JKu~|5kk@ϏDZZs{}uًߨLOȹy9A$ds4 *KR{| 4R_S[ԐHE(unS"ص4!$@>55jF*GСC1tв]ӈكGfAMQX_Ȓv #LU7xwmXcp9nw%|u| ׯiғFtԽ8C`rQ}z?w&:6h> 0Q7 [pAI TCuSpAVI^&`}TKH h!`\ɶ^QLޝ-o"TN*rK`vquc_<7wPkQWb0-6=䱗*bmިVpCR^6p&] PLSIIWR2~yUS=a;|nUZ?)QAuOJ_nj^Q.SOZ)ÈFtS[Πl $8G8q^u矏Ç .w_!΄|/`@4T)SQ䇂2xLmxTՓ UDg\4Ei4 d#+-9"àڠ)j*rS (PJ`GnB8-|$[f+Q xjs{BYQ(BZ6ctN%:$;D_R:_7{sLđ%®Ћ{IGUrq\bBGWKՕ=k;B @IB]/M5+Gٺ l]mO>{[] +'Ⱥ^l} ܹ6kx~TOaBIEu8]Y#O/%ijbuͿlɇ_cr]7o߯akĵ_^̳ؔʿ.]D~ˮZvza/&lgttmGd@14> 1_J.IPjJ9xڌjm,^ݕ/tp]kDKq1lQtiGH|&q?y3f_|_WO]}P9{9}3i$:zD+ZrR-BVgR[N1wV_2׀M[,z]#zcGľ.;ФQ`{ͶLPPHKv*\扉.sKqR1eџ'-ow?N,nOP C+;VOiJ w<߹|(*͜%4K>YԘ^{Ocon7PR+IۑK45%sC^ Qb=z~fH@@-owZ+W*x h& Ͼޑ\ AMQ[*)2_m;4PxX0Ѓ-;3xy Xpew' W} KԸ)dhC&"+?ڛ4.V&NU ld j}GD+` Wx}(-D?{_W˝]<kSiawy4FTNҿ *E[A% *[[EMKߖd+i/f_ӜsFu<נ=k75ߨyV}z>3ǖSΪ4M읣ҡ57W?w!6h= x 9|(\f;)oYnqǒ$hat>w{@JxW媬)yo}l Ym%h?+3fs6~]s'&ylIrWi7GR) `m˕O䞙(>z~VH@@vTHQF"H ms>lYͨ:BΟZr( /a6ޛ h3pU>Tgy#X8nq )gI/AuuPnK+)ljEAgbn!R)ld('QYLw;ް0.kyl+yd>p{scB_\~.OULf򴘾$ ꬢ^R2JC)H TDxng,u9gHqA?1ʚp~I- B\S9|0UY>g6w rP%PBiu(;l6.5qvwIP߄m0uT>(t n&3?,]T. fx@rsTyfe~,\{o3M1QTqؒ k+ns:Zb_%}[uo꼓J#$@HJr8q*3T{Y݁K8 DsBIi.jфvnI~M = .\‡3XAbꟑTO:˾ㄛV>w(M(HE#hR0Y.U@ @SÈDD7 | $ٍ;~$&(e3tLҫÌ)W&xB-) F*Ӳ~76-|mr5Uh8ݘ#O8%SݴY5Uh<2b:kzMB[A҉J vg  C`4[\0GȄUݰܹxc ߍէ[UYssReݻ~t-]feOPAY㓢> T2W=;ZS0 IJ.=nUVo IP$ѯpjU`Zߺ>GmFi2(vN~sUۧyvsu7Ux@@@ =G-@^Iu,.^蠜{ف߾4aXYh‘&zG '^ޗ0tt9H||ut$o^0>\.'oyz,$6CW"ͳڪ[_(VYG¬{|~lO&RZi)e4C} VaΤSšy'Nͽ "TP# KDE(K$T뾨g苒4[>SGY:,f>Tk> ggN(M3O%kՑ%٨sڹ؃Vv+f~Vg\4lL}5Uc91Rۮݥ.*3|);IGK_ ?X+Tǯw ѹ{2ՃQF9uNu,j:]@L#S/ιGv9!)WqV@@!@"#6 tRpJ DvK$\jǨٝ1[.3)umy3YX9,}'E˱b~ܸ_#-5A%,GT%2GW"ͳ*"eܨ|5F>+D]6HyހZCkwkv%3xXNp ՕοS{D4~3:mǤͪKtÞñ`o$ ZڨOli=YP@\UL/[L[ 0@ Ҟ1 * +&wXW'y+I5;Xt4!}4I>v-13Z@ǜI#T_* =JIm;= K7ڻID=PDdD>bT2"- Ag)p=׽mHawϝƐCs'"}ٍ|ך+CdxvH@@`Bm n(qf밁0qRpc_gWg,1p݃ӗs,ϝ=;L)4'GO _C>-NUGT+e(qStI[:BjutVW.] wӾ# qUu5`5PQ"uYѺH,yXc1y`z=~vW"z,`)$V *e阴 .Q*% ZrA\\uY!.bm S6oƴni睅?H}ZK)gP~v:6&kB'yN}o_/Wל~XiN+'3g9>vİ!1P.n(M# 5y^5\ډ(–N Ϟc?ޅUD!nMߺb"魱9WN-k9,cv,Z2JlUaSCǷuDc'f8Lwc䋐  Q_Sfƫ^tpAaRy*gDϹH+.uzUVݓm[S ݙT~7SPo!`V̰KpJ[֗sY%'l5Gumnr] R ԳS\\4zUՒ6HP}& KO=%:N&8i=x{x٭ݫN80qX};lw"f{sKk:7'o?xL~lp%";{R s%y$D.fZm!voƷO>umwv%+|Ϙ n`H"hu^i"?mm\ R`{[oO꾩붬]!*Tˋ.<-VMQ 3E@@@ ]=X$?`mp?P("HɓSB ٨d8g3R]"xpԽ(H@1nA۵]t+D;T7R͓4.?{ 8ByjAq-e^)rgW7$﯏sm#i3UΟZnO=7xKUHNNQLP̚ypݛ$/_9@vIZ˚%g^[_SE{wB+[.dsEQJS+R/s&dpUxMVHH}Mn_>)+ѵMU,~G";J#RzA:3Ho+fS# s'KOAC{8t#+[¢Fn*trI%b2H>g `ζ0;mXt+۳2SGH< IDAT6P]y:sIQ"ayᜳD~wZ Y|En{]9Ҡ,W߿<8'_7%@=rHi4Olu++giEYeG)6<W7גNU:׶1$3n=4 pCs{ēܝWqۜF|હu`wb[f$>O%s KL o~u"~ҺdpeIb>gH񙡮´j?SuΤ1Z8_-{Y+&I#Rk8ϸ*EJpHYZ4_Kv}͙;>vPM%ϮNyvqK/Bq6@N]bb/))+uuNH-ІoPc0'H@@ :W! YΊr`jYҊvmJ*u[_G_'h1EH$({cj6)ʉ~oGWOL (N-oGH[9DdZZRk5>ϩfK7Nl n9+~ ˥y'./_(>/Ͼ@ fR6^G^ܗ?nIu?3ç7qA%[G5HO 4ƽ;ys!kHKyG9@!B%M, | x _i|3nl9 'Ej]vE$:yu;y&T 8*J> ƀͽ.ߩT72H7@q̛2 #Of\>W:NEwݾr!$@Hj e,-Ah*^pu8DhY]GN"wpe`&\AvYTjQ+eE HNïvi2!k#Rėr^uawN XTeu|2i.},85)gWO'и5LuM6*䑀HۧoRd k`(kv%抍<wTOܸQ@VEg(EwI~fP]1>ntGpuY/ ߬$+G *'!̛(–;1k_E;J['f7֢<.}GJk|:*l %0'cו֒nywZ2@ (M%[FgչVٻ ?J`F@|l8.UUo`9GA *G1'rINi_X@nPULE$tr"jhoSRO)2 ೂ  c$XH~(DQ92m SK'`Qejq Dǫ?ht+cDp̙4'?Emx=<^\LL'& nZ4ˮ(%7#@M}&LϮU(gէ 'J2+& ?AO3\Hy.-hoڦz2HrccQ_SŎ[k i˴H:t[Fkl\W.L6g>$>mض%>w}>"L7/ epE͞<]=1NIjfæ͏E|ƬsR}cG6wbKŽ[.uP%*0{Bv'L'.|m2JSR{DϐB77&QT vu'f)Ɛ&[]eW]:N޶.sU_'trn SJr"\r%+,jnLG@@@vH@@ VL[U7@SQyy -7X:o8pj۶9z`cX_ '7 DTckqۜhj%M{.p6)\ |Y֑kH* IJ@pW.Li_c9i;?}#%6 ݼ,9ճܺwfOd/_9@)mƜ4EnίZivlw}5UbQscLJ=&Ֆ\3i$Lb)]]sQwjoR{.`XsS8 ೄ  q؇NSYBbS7F͠9 lX\*[m@%q^^}ṥ#evٕN*u[Uc/Kp| ~d+Jcd)ZaC.s:#( 8qї&iߨtN

:@ܟ:L8zBslb+˩@Vn ̟RL:' r#N,)w23`~NrA#__I} ,;|6Gm=*Qﲱltݙʬ%wC 2+ҵ8RJxI.ۛ'ql{kK%|Ec$.kPRFٴ`&U?ui[$ۑ]:sQz+sqor}eK]%H@@@\E(U4 qjKP'ǎRE)TpX ëg:+|tr`ak}C$m<:IsF#VZo}78^f1\n7VaD|M0P, dkfXY(`:a܇8-HR]EY9ݍ4sGJ>OUwaaqD^"쳍+6$Wo'}n;jd yOQdMF(Gk7ޱXy$-l=܈ڪjnԑsE,7$4n]ZҗcGDM{Y n&5*tCd$tMfg)2s%]{pв\ẖo9g}7=s7!yqUIc| O (rsF^{4|뫓 {bN.r!'y6C3f%>.PF}Gq(ةՀ|N0Γ[IqWg*"{ljAB`+nnΑ1GSr_vE=!ar;zP|ioi5E8'8T}%C}a&͹iz4n=P*> K9iU/BW^WxUzKMŴj2==AGXCsy,kd۝G 5U$Ō$E([vQdO} kw dsI&<-Pٓnh{TH"u6kGWV7=Gxbc]64s6GT2{߂ pP>W٩Dw ,$@1yש&FSĤ0PqF^ו B?[A~ؒTQRG^) @>T5 ]_Sexu3)\q.T:TBDV42^4{GlќI#c4O],t}YkpFi韣/3|/ϸTL_u;CsBr?>I(^84Qnh* (/B$ mGɟ9/($s9>Ɯ ,]B_g% s.7p4>n j,$TtT߷Iiq,6T~7{Q9W]0-74pG9'R\ 5{|%uhj=AEiPy\U 3x腽ы{S qz39jҡ)Uޠ( sh,hkﺦ1։% -QڪWlM QhI3kĒ}UY) 2nGt}Dۏ BMKZ]=%RҀym#K"@>3_x.PWT4K6;zK>vCn+iǞ wꦽE[Sᡛgnxe}Iu8pgmv~oe=5g%j{lþRQ z|}WW'3i :z_>JȨU!ios5ȳ# ?H@@@4֑?,1|\ ch[Ԁ~NVƖ-fNQY0J)US-8 +HM&8x-f*);w(2\\SKFJkC/7cGTឧZW"Սb:7cg~Qn-\ucy6GcZLUzf 4X(P{]GP (kFAKMsKDsH?C\W*jDlq)LuѥHw]br'05QQ@L{dcMM c&"&P_Z:o8";Gyz ({^f6:̳}۝d@]O4{|~dIݐeW#}T,Jr%N'JSh(4:Hfmv~Z&meK\|7/&N=$4a欢_wZ4%8ڦMj yp䇐 H3Ǎk~6s܈.$-RC r8 NX3(ĥjH)^mR\_c^s7}ҡl|#e(+ݫ]wute]Muޙx浃mZʹqtq|-7Nc/%b/ua ; M` L\էǮʁb/_9oNc)-Q*S=ڮj{^o>'FE;%щwrcrD0rP6cG`ӽWSg2Uޜd!r9'@.A`:KM2PЩ:Y/)WJȷ2gV6sU.>T0Q\^mDSCmj[W,߇MDAqy'Ҭ!3%NQ~}|3; /DK&V_AOj׶9>cjZ։Y QUyى30rPSvGҒS@1o>[E#?ڝ4:istc" @ݳ9*? E#Me7tt`A %Rӿ≿E]SCڭy}qi8~҇ۙe珌}.8UOj͝8ըi-n,(yVW2@@@H @QTP(1v% /x>AfŵM濾 +R9֜R.5_PS՞n($`SuH+ҡH>Noh}MΛV{i*tE.~:[@|AU'ۺlC W%.7?x=5dVLZ3!|p߳;KHj%IfW0[_D~z *[ 2uP6c/K|Nډ|G|(Q9Q}:k,ք}X]@{{<73U\6̷'Ҁ FKt[iQ} pEj- /NOVf>&:5Z][W $o Bs:ݰ!yt~fAw ,)8tn2W;SV-5)<N PmWLBNPDH$í+~7D5[7P)0=&p 2G J I r僭[j ɻ+uyS 68ANzkth&lĮs*4΁- ֧]&Uލ3:ǁVL}NZQNuVn3Ѡ]Y\iDp@:z#[g7{L[J/% p+}XzRm,_h)GuOim6UD\iVQv[ 'fHrW]p~a/=J|Ŏ?u%~VYj:2v& u}Rc\glJ).{}lf~HE_yy"O,* Gc]?U-͝)M EKG_ԇ~ؘ^bkr{_ڇ8E  PǒySbZ@HwՎ&y]1hBN8rTTRfNf6E Eàiդ+u|ߩY%QqNywDZrPwቿ#q DA2\uy>q9E3}tEd] i H6A,I?Z֮5Ng6 6MFZKr&ǜ>g4sKrs%0U IDAT91ZT=/?D}|B (?v!ΘQ k*ѷTнG4]2ޏmW]=|>9}v<[jᣛB|ּWSGJ֗z(&?V҄u֯ZO #~}xE2Eף$qzPV|+Q3PR~ ^JK7c=?`~=4~ͮھmOZ/Y(TD0S.* kbEN-yQ@H{wU9~}>l璉څڮ3slkeB t8Jo=+&k:^ufi;@u)S<}w^!Aa$td@5KI;#uB. p3;`rB(B=k9FdDdYlECi]=$,>_3?wF| "ň;zHrj}#i,'ѾrF\.1W M|/BZ'i8m2ig+h]>RPpkʙDJ}T,ilpUQ MBg.@&}N?uTK%QU:ڻrهmPlHx7{qmS}J˞xejO}&{Ox'}YqQߝ皗 a$`6 iwBH>ԅZ;0eQur>w'6nɵ>{njҚɫ[PJg-Щ{$\4[)h B$ @ 1GUzq/ ik57P*MA8QhO'ζs--stEZk" ݓӜ6ѫI-mE;RPPxl><6xDp]Ә󓥻J$ :-6E`|澛u895kP) TC]e;|a*9r> [hk`z=yͮ|r;iGsJrSsEO (u?*{*'cm bI< itTHL{E-Xg.)l<3pzֵsrdI6Vӡ7w}_ N_GSY̝%w`!@3kh1b_vR'-Lo;Ii* ~wS'1|sF|\j 4j*3ȤPJ3܅ʥp4s6:)u}3tA ޡ (ε4`pߓGw _:^ qqI4 w;J9mfn-Q2%: k䪯)Gݝ8%@8e;Zn*Rp~>,?eg ްpb,1@[ N*gޡ"NM" eHfO[@h^WJXbʶ|q>.\Wř:u {W~۵.7\qTօ;}qlgїiש&'IB$ 4F8VFʩ돂K$NXPQNySb ʸV9^ueE߾&|E.YҢ`D`%X1Z}vjL ?SS3 8J7Xvh9wbK9b^ EEn=0T4TithC7MciҾ<4:6TeJDE)WᰧU@S dg]8]Uo´Cʍ._<+6Ogj@@@!C#\b`/jEBkENMXMb((1n{OyܺyBɸ=gٜ2dui9ywl `u$:Iw]K )u;;3_,4RT‰(*] w̝EM;DkўXt}WSpDsVm_{>4AUd: uR(?gwdW%BD^cK[''rڪ: dxT`qTa>3Ҿh#kI-sѻ́{q=vgd%J{]۩O3P(B͝Zo˞QZƖI [c鼩3^F;D_4k Yi}M=DHĐwUp%J9-@i2n%Y :3!q fYO_mT0M$VjWG_Wu;OndΚ3bփlRHWJTPڞ9 >c( ArTq2%z[{'U?iݏF%07GH"U~Oc 缺oT׳y?vHòֆ=|uV|8zOW T?9PZGy OG}I@*f%3S]tڧЖll):楤6V6\{فK1qup6HbAƽ;. sP{-Pcbtl VGNbgmݼ."$>3niA7Vd%hXdvP]c7,QkȪQ!`Ħ3aa\B,;JT뿂rxVH_gv5Ollâ&XN7Pfň*fg?| >t$>-"M9!srҟy`l<$HUj['/GV0-yrP$|V65Hh+Hֶ9odrSX̎O=ut8ur%j?]_;>OxkWAo(HP.PrYt(8ڕIHc=wk#*C ߭߳4Qm)I8a: \gS演X וtpgd.-KSDej@!Bs:#r X0>A(:i{gk[%贠;hND^iuPs_G^JwٜTz /{;Aeu 3 &M`@!`zV õ+T`:(m5$cstYFZ]iXK~Uw^>``"KOFxYIGEo<9fZōrUL[waAqk58je=+n9c[TЪCl _gsަe$`|zKd~sQכPQ(`3-Kµ'^NzP{~y[Gg_Ӯ5]gW:\&q"zh\f&m̀`Vs 6 smS{?!)]Mub]Rtt`Dp΅ĝ̶ue[+>ט{*anQJmk涣8!~I{ .p>b粽;׾'}Rj3øֳ[WO<\Ԋ@4x{ҿ͘mp454/}akܤ|tPxi x}[bU:51~|}ZW;"77GH_Vbo]81بt~gjw96'&m&wqN{՟G Gj1Z8c 6$f5U_¶N։0.P]P-AQ3_Z @ U|Yg`e i+b*!JQH=#rمݕ 6^$E:A%{mLw;c{>&Ԟs}.KU~rt H2Իۍ 8[;% 鲸uu3;0u]` ͭBЫmp5<\KY~X0:[BKˆoaQs#,>TktKzӺ!BDbڮ4^$*q67߃FVd]y>~qoYg55 ] t,Ld4;nl ( GH$Ѱp"t uL[ِF$gJ&*wi࠾&IstVxvnAE]1SX 3`Ԑ=#.ׁW |\M'\2oQ>-7Ncrքݽη @E4=N~6\g+(2w?ݽ':۞/3h5]T KJ. x?iH0xgny_TiG@tZ2 l  ݄G'6gkDfOqSyX.PvEz UGS~؃D+R%$7Ǔ7 ᕷCJwX LIOGd <H@@@ QU8oonL#5@z[ZYK?#h"K y^Kڨ] 6 th̿THϟ-yFaKL+uu/\փgiC [p57&BBF]UQ=!9~ʁX"g`Vr(X%,˜i mRjO^Mh@ˍr}rйut' kTΚUx@wUrBuJrx1:$v)fo+Ptd Y{5֮#1vElō$:/W^~83&=UŅmm4mQy:MG}Sv_fa<\ac5 <iO>+778ۘu{Z^+]E w3cVިqwq3L@@#$@b.|j-U|+6 4{ = _/> @`ڵ"K ]ADhA$xU<m B+ ttU8w''pIcƆ@yU`0;0( —:j,>Z:ކ=qqh1NP؂JӃ̒8끍 {;1|RjJv-Jf8KmIZb۸{{uI(JtnlUp2>vۺPYWpͦŽD5~=LW8E@D)[Γ[SMi/msնN\tpbuÆxC]5V-W:Ԕ-uW&]A4>Zвvy۳st*H;>g&5>>.*qumiL$T}(!vjo̳LҹGS! CHP_SU֨>\j6Q|PCs4X*(O0e Z0څ/iS4=7~"7ƑVHT ٪;˅!(OEHIDK D) U6D.hG̕4+]˜i H *lr̳Ԗq!/qUxDx)Pt--757|;[%օR{N,pgJ*{ف.rGoLN-6NHuWS].vuҁ1o*mӰIiAyU-o>{%w_Y\gYc+PL/I[~ IDATnH;t V? ;B$  XO S5 %U.ce~!4-;1u|5}Mnlݙ=Ӌݙsi:K{浃mx/.l[Y)$04CT_?zݽ ] I\w4O(zKw"%Z:r8PPՋ/%j^C* EA;@ꪭ;[rJ,vݬ[ҵFZz p1. *ULۏ;;xKpU}> -J̦7&A 8!tKu]%LZ˖ӡ4ͅfño._#O/P]S: "ɽxWG2zX᛺βﺍ,5yB&z% $|*!^a2ƄԀ3j#0-NjJtΣSEORxfI׀,PW~?Mͫm^UT5#eܦygj&ʝh3AusDh QvdWjI3jIiͲAV``Tg|jTh|.D_xhi|3T$ ) 汾] &Uko>Օdӆ=٤ށf_u\;aHUAU| '׸KENQ 571^:_غkwPvƹG_onBEY1K)T{vz>rm6ŤJ *ZȚl|'xo$?uA4]q} J2&,}䋐 ȌGP@,Հ rJQ];QR.ιt˸OL+87~|;3 &W?=h`]DM*aCH' f55`6a+wUc i=fXx!\ gC# 'D$<Dv%dNv-D zf lMS6U4_ƕ7ՅBݧ~)|8;}b=$Esր#UjQ |ޙ:$mnZXv6d-3缮aMO ė)vMQCX Rv9׸id% cJz3ϵĊ0KCܿovi=8p87QeLv3B$ 3IDI[FB:uD<*E>o2KH?~y7?Ǟg=SZ g"$SHSyiN}҇ 6Gcyg$JTS96PL&䬔-ztkt"j | to${9뻂 qΤNqh}R#B . E{Ec2ucPB 6"z 75Ԣј󭒷B)Ѳ&Qe=;8os>I x~5h8 Hƌc{O.<7oybw4A]=닀evxT׷;cdрJ}YeKR]]%"{Y[bku3;Jǝc<6.PR2e]:dzvp& w@@@!VR 1L<կLt )Etcܕ*T5d;~E|i3, ,ΪKޟdp"𫝱nw;=Tm޸DTD pY j!Q =>W$P΀b@@VA {M}ĶϹGm`̧7b [uVtZH )Dk"͵:6R 뮑$,ط9뤾 K%+ٗ: =PTz 3p{o T?Z]=N[g۝$Lv'LN~JwFdҀTJAi>"=dAM7KXA~kCl]%Y|#$@2C@cH@6$/a4}v!X rzn,*RgD=Ȧ͠׽iSqn$A"%Bt;/Er{"^fTycMZ=:Lj# ͷo!)b.KvK}S溟{yf Ls]N 8oQ<FH䆒H$;imQD+_̈́{ .u{5 slXqUKӆ=c`$(950ý4ܽ7wR'%t 1WK VRUDГui\;3pa߬P.pk?nL̒pi}lWL=DZ\E;y햋J zaŝ΍ nT/)RgrۍzW1xC4bϼv0ojlRZ_H>F[y^Go(%W/uF4XqXGՕńaĸw([ōug,ӑRF ܧтc2sV>FB%)lQfOڋ?U\!yRv?@K[KʹY' aqFrjXsQR.0W/u8:ws}]=XՋ/>l?x M:R+DŠ©TKJ^61x{̟"֫G繪@\PથMpgs}#^ `jy.J*I}YB% 2ɏ ASC2'f1by#Xn<J^ZQ_SkI.vu39#UspgxAU+L㬑るr 8Tiq-rôjSC-Yud@{5tSnm}㒺岓3*۬7ړuArcCyP[Ev2gD**6>䣯֝zڟx3A˝8.j~˳TH@@@fd,^(HUmQ]=*$U+jSM"BD:R}ظ;h<:!|m I S2Z^|*]k& ZNy*uΫ*QX&Ma.&wgoj7ă(\|ߵ`d&|V3( {tD_ϗۍn\㡺Rl-[:T*n/Gq߾K,/ 1A$\8ʍ1=mYG}= Q(-hQ}:Ne[Q?K&,#MeUN;wp[3Y6h-X񁩱Sb;6QTp{|5ވPEqJ]!N%G0KpU_&5сXyDHdoivt|"ķUI*!UscY_k]Z<UxX`rAs .hN^6;B~V:;ÍjU1WhRT1hat|IΪL ^A毾6R@@mlIFj.V湼d?]m퍺b[v&y(o]1 ?~i:#w6R.5ٕBWLLn΍Q{ښs֥y ͷ[ څ﹝gy"h/!k w٤'FmQ+]} .-u\d]IĮ16F扃bI}|`Iׁ7EW3!VӅ|yaNsp6;%lz'ty^߹;XEHdOeRQNɋIyUUi %uq/dPA|)ێ:s ]ȉɧJN3[`^PG<^n۵%U5͍83P_N) sxZ]QVWVu}-o?xNTk.7Utv!s;qu^Զ} Rz[:qm[Eɔг4yB:WqfPu;o|yˮٳg|>?7fZݝ/'wΝnt::S$ *=^:Voq\Z߸me:w~!NZ[) u*׼:ȭ`W_hZYb}u:d:ѳoizx9LA/0щF=vZ5 6µ^\tj@*mߧSwobܼw%qtFsSPu[P(d,(W3Nި:^ {]gTl' 팪(gioH ?I?#z~N>:ĵS"Nq/`et9W`P9\_nҥT*?t3pnH ґWb,Z40J:t-Q4A}o5{`qzh_K^ZZs~TQ ǃ.h>)eX=mݒv-N+Z~ք`[k8B5A8ͮPe%i'!}U8u{5fL0 ^}w*6jFۿ1K(},bOimiҪ gT4vF>F[\ 0fnCE뵲.' SQt4hS3[FRVosC'},d3;cgu=j|99q{l#L09~xq$z/XqIZZ0wvtty]AL?:{m_H-֜eOM󵴙<+-N2LiPӵ㨴^M=wzOVT(a u%Q$ߩ 2[4IvߚN-U$s8 UimiR{mχ6)N_jr Wc?,Qj^wV^sN#=fQK~(g;v7(RfH;xttt,59~7T5v#LQ쮛y^;tԵCnPkN:8ŧꌶa}龧ˎjV5nԹ~ ?Asq0ة̑a̱##$L=#2ݮ3qɭ+:e2{\,ջtO:'ؗűn}S:,4yyⴷQ9m#*uA@vЛ>LJs:(M?4T{Mh~`$vocܺKZu DgnI-k_ UN}uRSN{ V<%\E?@TsL =kGFFoI]tђ*N$PH#Jڇ3:[rn D5rǫn-y}"L~mv>AL{ۆvX1 ~T3JuDݬ:=>Nvet͒PN7 bi?!?y^_N ? vĴ۠uUE - IDAT.>=Z`[w֌[gb3ūtQ]$9Ӄ}o N Y7fme-üg} rwa- {{Ɗ}^ka6XWAc^~=?xvx14:{D l}~].]T=6HE@`v-{yBh4.eT{e?{hy*NH^B!®u&:gc ʑ;n >۵:dTN:: uOri2\ F9]ٶkD\=>Fv)`rغIfVymVvy9ٛh eWڭ_sthzSwsmc=ϧ^s= xnjEרng<\ #/tb`~-{g;Xf߲jg? ~eKݙ z) Gʽ= 8h?izV9as~C]ART9V$wZΗ|~[U~<[5es'jA3#^Vmڠp4X:0ɑ1~Q;F~v1sT_JuSM>64SGgvR5ܮ5m JA5Kjz4/siL2Oߐ2T <)K~]GHA*΂+SlIJ[-RZϱ'~؍2/=W>-8e¾Sȭ|.^v9 ({綔cO,.4HiHO~nKzv3iK3 ҤYj(tz/z_Ȫʃ(y{ZywՃ+O__yT<[rtpT4z *:ɭ{ٓ+fjE5 @8@;]]]7kj޽7n>O'L:g҈#j觲A![BV6k9B+1n>D>tDY>sv6]zGQ%dVCoé6B)m|n?J} 4 mfIZ&Pٕ~~ҠGvKLY; ɵLu+i[q N9Nkݯ)!ߧΞ;{*=2쮉Spú]u=q7cy}<E_{ Yrz_Ky7>Qͬ y T=TY~wpn/_eӆvEbAޣ*v3tJ9~Nox vTN$_&f"t}78n޾`[=^ fVtG1Pao @F9X()9Iw5>ζW˾ӚR~_6Wm ,4UsOkW33I-fCbO .hȑ9r䈎9RwoooʜF팏*irڤ: j%~+<q֊sCT=~y֣n QAgQY^Sk@){~giքZe3}ojtE(AaU[wTz8-ЕqX9]j;(~5XQ6.KsEmߧyzjGyǰWz2뾹T;FqI뤻O̓˦0~rgGz}n|dkRl1W_n^m <dvg%쀔g^>vfQLjKu6LOڽk3/(됕7 /< O5=??|my0QC{&ϚНrϵzDŽ.?K3 m:(O%9 @t 3ƌ1cݻpB͙3GsbN4ւTέ*;rܴϴkO%4=߄ N_H86knjw1u?XYRlrtj0:mja; 7?.nbIŨd^Xg!x-/&뻱2H%h$%o9H+-6N#֫:IG؟Dx9eu_Ͳ~wuvfzO:iRagiYKVہv900mool:aHQ,X(hn[l?4@A޽[4i$}[Ҿ};vl)?a+ir^ʫy6?H6E]-ŵY{kK \g?.z3DltsHcR~(^It.vFN Vyٱ@Y^$հÖcaxa1d /W|GCAjݬ^6uЇgu;61:x`=1I\۴ݵn߾W>V۹XM#%ʎMɖ2iyfy4jʱuK4Hcnm?E-M* 6XwϽBPNst#/8T 0]jnvk/MŒ ^ ;Ss$[%tM4g҈:t$Y~tiUIdc`G*̽s)%@N ({վb>?Am(=nd`FU;$h@8n8l,MjYӵO;6 X+h^iUT,GeVۥk rkK[4l4e9jNK=8=3~+Qsk8ZUt4H0N'jcmYFh#s+:mwFe܂(~(]T.sn>ϩ4J"q[ű<΂ST,ttb Lь-i6ǁ&.QQGsJgc|32NR^ˏWq.=={{^M >R4m(=SBIvB Z-VIKIy[|̟y  :@ĪÓEQv]+/t,H[ [*~/i!e_mi=]~Xqv qWt6͒ɦږ<.:m<5I,鐖J3SzDJN:JK:Ned6ȭЭ(;1sp۲o'rw7I1!,mcǹusLM8RrNE tUTMo(q%Ryw:a9yxTiY\Kxxq b|jU[ɻs嫼#rTqt:mznV.xoFqtwKZ>ͱ梨 ͸gAZzm7求n~d mnM/EW-Q\$ 3wj|=vd1 DNZ>rM0Iw)-&> N^ Gca8N9 j.Y贱y̚0BrV }n HԃECT5pc՝}_*m2NǽKwwTճ꒻wzt/gw՚*u>N.da9 E}k  j"Tj=}ɝ?/]u; î1#5HmsC ;.Ae@y9Anxw~+I0;/D 5VV^j{=N1dGthTsHt4vlq{'Nݹf$;IKZfQZ5G^&~o٪7i$ˮÅÂ|[i}/–?T̮2tp7nIw=R-uX~Iy< S7sc(.Ki *:TW `G@b_(:i)jmiO(#屜G鹓 2h:BmZp5$GǙaovYضx^R<6d|'wb4uMKՠiyxq{IϾt{G:m1̓caYCUn|O>Tk@ӍnOHlqu`F}.G屟c+[G#6AwOzMB!P 7JA =, GQYuZFa6ui՚ʆA qБuA+a7=V|*qKnӂva{\y!hpkO=A.EOJ3bjA]RN߻@j:YZq{'3 m:J{ĸef]<`-X_&? )u/=f|)pȡrN'Y啙o7u,e,e59AҟQwO$g m|ޠf0m 0ˮQG1#&Hql\^R\휖<95@l/޷YRpwZK緥"-~ޯQ{~O"oUΙ*T|O(;jw;̮.}}Cv3|iڹPhmi2 /aKyiVUnv =v?\mnng\[[j6߁`f^)Z>-U{\d?i`#8+/a;vHʖ]׺f90QAN6-8hyG6Jב6u-kA:t\ܰ6H3tp t#N8Pr)vNS4>f{2ib/*[O^JRXN'u;sݑS05q}{r[0UWAW;=j|(a{] Cut8͜x4kϿDGZ{n6uv,t,[KiafwڼGhv[U"ww@NTUIkK[T/{E=}Ud 5mhJu=sZ_6{~nHjkj5V| ~Du_y6WfKvi촯Qp·}(_Ǹtd}s'])@@.٠1gA17t:[e=&zqs)99&?9O IDAT#MQ?{4?Q+rZ-MZu=@޺qlms]`ϛZv5c L0"Hyֺms 2n=}e-=.T̼^hQ7H3ڭ_.Z%qw|YҤ>lG2aˆ$5"uٕd"{~wtY5)QkAw}&uQtFcDHktp\g}^gAp}KM=I^8GPjLp[3uӚmav06aѮU%kc#6,i`]:o*})^y#i5Kz[@>=ywZp 41WeWyj5%.NAn)4]^gOGw$]u6@d'^\[[q~Ӵ 9^ZsL=섩54[[>u.5.= ¤O#; sN /ik6A +촁o iFL ܤG%IIyLcd-tزG7ٚ&dC5ufDAQ=E @6q? IP#]nAFZ(}iojf!I!Nٱ0Uy 2Oc/lFңy:Vo)44СoKS܍7[c}bG9Q9&ݹ^UЊ_{]gkWmgmehJQw6!ݼW1mִA/nZub%=/]A4gcQe}fch\uGum:nl}xָ$=Ӗ1~:tj$݉jN֯ I|bF0$t) X\H~Թ3r߻îs"͝dAb~]9a>8XUK ;ϣ׻&J,ZvbePBIi^24YTu8jm+5&xIu:(S<u96"ԢI㼾?O A:4Zz]m:⬀% _{w(uI4bGN#MB=oJr}ytz$=0/2&+;l)cKJA(q>Cam7oH+آcOԬ uPg<+sCGӗ%۲Rt4*AMg3 2ogNG%MlAeVf½B0wq-o:JyIwdev2& zD:g(̱ܶ^"zf<gtWݻ9Q\!rԭ<}i묱Ξ'l# 쌮U'ScHGU\{wԳ]FD;abFVҷ+o9grTYAʘ,)gV8 k`FLT,6Fo܉:V>bNT*Wp+~yo$=! {c7k'wΝ10o͎*qu:50 @kKڧXک5k$ݽtlDuv,/{:;6b)'ZkfP;S޴+_wSL-l)Ty4oZ]|[VoXi*cTGQv]=~x=usȈ*?UEίO7jU[y;*MflK3@D*Q#QCQISGZ~+Yv~F^zTyf 4ót蛩1|rʛNKؑYX;Yai+cTs(.?Yz_Ge܉>D}rZgFVtYeWyYމY)6k,5M U$*Qv(=}իxp]+yvI,Gz(C:ٕ/a:{DWNkcU쎻zWyy_1kx uÈ6 `&?:d=yOeE{'f5`=]%Rc=  ~+Q7dmP^d1D%sS?KfGWhuCҺz)cjDQv]9~WYc.{`H|ڀ@im.;Ch~YzZ4ŧjg|3~l ~6Ћc37Ϧpis^s~3lmN1*PށI?Qqa16ο ~AIThmiXes'c~xٱ6@3T֯۾ng  ~F5b$JYv_:-7Zq cN}PSG>1I 8ʒսdSM7)@A떕gTcwOzrg b`R0 W---ѰaÒNNtfHRPyZrzFGgB3\ ,6b򦻧lz䝿$j=]%xp޿y|7߱_ߵ?zOrֲg9".%Muu7I_ܿqWEvw-3$ѩ̾)~q%1_CҘFح_v^eYѵ6Fy4hk w^hfo|43a?$xe߿Y`s6PxŬ<~%9C\5N˒^~d-eUg0Kϼ G2Abm~tzp5tpjPv{u2X+@o^=Nvl)c $ѠNsiC ԲolVx:kgmQ3e$F5eI Y-Gd=Z?Yz@v ~<5t5h؍ѭ v~INGTZ.z:آ[*l wJY\K#i`!kjf5y[gy&N0yVgԺ۩PPUeI Y-G`0 RíՔF~Q6T:o\U0ڧTRqy$w:fׯϻZH31$5q yy)KOw;wx{(rZP!(y@g@}! 5KfC]CO#?S5\}*I6Ao)L^׹;}Yt~|rgsF${ Ԟu`ӵG!2!i I'ji}dȵ4}(*1:F͞۾gY}5mk,$ t~U_>߱?g3E9j܉X^~uv,Ԍ-4[Uא4f]F@Vm qZ~)cԛjgr6K2)+2 PXiDdA` #oc OvZ-`e }Nrӗl ̍e Ib`Efi)Sʑoܥy6hު㮤*-YwOO ``8QoWF{9y/yɟAʤzj   b5 Ao 8\ȃKK0'jqaY@=! 6d1rtƉ<@P&U3K@! Vd| @I+K@=" vA1mi-PHJ\AXb8[z A00'R?PNԂ pwO_IA9M٪/Y(S̑$| 9t]j.kZ7J:IPkKڧF@=bc>ĴqdLaC r9mG˔Gtp~k4 5׷{:wRT``X @ӧY(S@͙s_sA@(@\Z[xd,D00w@QQ i\Pouiޘ_V^8nj, 3@ g߸K+VoQ17ʥ3lĤ3uY%f@tR=ׯ~s@mFB]D'cIuY5 ȥ .@'NV}SҞ={N;sRF7' $5#>e@ .\GڶmxرCtm|XNݿqZڠyN#Ne@ a֒%KtwqW---ѰabN!>6is=}jm2:;Lk@Q Itk~:wȺ֖&um m H? *,ܺ4tP5JvO~9rDe@V6أ|dFGG [n-~k͛_R?-V\&Li@,XCQ>=@ӟgL2E'M0AׯW{{9rDG)W&L`B`?=}ڹ&|_/ IcdƘ1c4f̘P/Ie!ChȐ!i`/oܥߐ ʥ3lĤz9Ob ,Ά o[O??jڵ袋4uT|+$ߐ_{MX<rYW?AM6M^zfΜ'xPgv?T N&A1 B̘1Ck׮M:u ̼3 Ϙy @ Ȼ֖&Xb$@|@ ă%@C;@@C;@@C;@H>߱_=}I' s%PbRCAZt͝t2 LwO_1!It RfCakdA@HɣPBAmI@ eZ[r 5 nXzZ[N@v :)lD-8eVf Z[|X w!r w!r w!r w!r w!\;rP(駟N:9!\k5nܸ1 ȭ5k藿o%@ J:@^y]vez衇o9#GW1cr0 }3?yqnʕjii)7a„S dFGG [n-ܢ_]+Vt+V/әV0 H:ӟgL2EӟTBcǎQ\r^G(IDAT *@ I#ٵkW{y睧ҙg:4kH#w&NXN8A4uT@f JoP_ w{~~u% a\.XEPV.es'z!\a+?$ߐ_3A:D@n03 u?L$ܘ\^z3>>l0an馚VǎWUM!M4I6m7M}_םwYo߮ozt7ꦛn-R ơC4k,z뭶U^[~."]zڼy,Y%K瞋<2ԝ}ƕW^Ycnjq+WL0U@꫆$'0 0餓Nٳu]wsNݻ,ﴴ3,ÇgQ̹瞫mذ hϜwyڶm8itYgWo.Izg٩?_Z5@4uf:vXY$޽{Jm5o|xgK޽{m;/~;\w= >/nv]/~ } _E}ߗvqgݻW'tR #Gʣ@'> M>]wfϞZ\r$P+kN!/ J:dݕW^{NI'Ƚ_~Y_җcO:9@]gnA4{l=swK8u@G?~{z{Sܟjܸq?\03GVcc^y啲+;vlB몫~3Ə_رcuQO_rq6$Z5ϐ`uf3g~_߯_WjooO0e@J>֮]ɓ'~Μ9:ڶm۴k׮b^kooז-[*Ǐ= V`joo/;+?AmٲEO?t38C\rIx̛7O۶m+5i$Iɓ5vز۫ 6心jӦMϬ]V:3Ynxg{1M6M#F4;|ʻp/J-Q "I>cȐ!=qÇ7ݛtҀ`?]|7&Nh]xꩧv7|8ӌ}CO?m<Ƙ1c+V?K/5\c ƭj466>hMHs9җT7yo[cРAƿۿFssϬZ>|xg|#ɓg-Zd̞=ذai]2.;i-8A, D`2LFAb,"VXLZbyI]DALj2 ₈yMwMpcSXXX888jz^h4qrrqttZ-VWW?fn7(T*vE}vvv}}}ױqyy}$ jgg'f嘚?R*>?f^^^bii)FFFZ\<<<<.fggcpp0jZ[LӉ(jz^5=:111J%boo{G^J333qss3144ñng"RDш/?͞cyy9f DՊx}}{t:O];<<(1>>_vnGDğ  @:# @:# @:# @:# @:# @:# @:# @:# @:# @:# @:# @:# @:# @:# @:# @:# @:# @:?%5 \HIENDB`gr-satellites-4.4.0/docs/source/images/au02_nondefault.png000066400000000000000000006357011414055407700235120ustar00rootroot00000000000000PNG  IHDR@6OOsBIT|d pHYsaa?i8tEXtSoftwarematplotlib version3.1.2, http://matplotlib.org/%J IDATxm]W}vFO\lhX2#&BI1Fž{p*Iْ ުIH% Xd- ؊ #d7r#:@}n^{pnu^{=8n+*F4 8$@@C4 8$@@C4 8$@@C4 8$@@C4 8$@@C4 8$@@C4 8$@@C4 8$@@C4 8$@@C4 8$@@C4 8$@@C4 8$@@C4 8$@@C4 8$@@C4 8$@@C4 8$@@C4 8$@@C4 8$@@C4 8$@@C4 8$@@C4 8$@@C4 8$@@C4 8$@@C4 8$@@sATܜ^|E]|rjg?V\!x$@_|QV*0Z{u嗗}@$@/X|}%|4@>}ZVZE#^]r%$@X^ea58$@@C4 8$@@C4 8$@@C4 8$@@C4 8$@@C4 8$@@@ZQ)P䂲͵IwLs]iȑl_W}X ,$?$i+ݽ)f A813pv5=s  rz68X>Z b|lD{װ3vݳ*|dA&͎u MϜQ@FH| XqH!h qH!9h;:t|FvCH}4'{1u!Gڳ}vl\]a fVt   C'ffsݮgh|lf5lq4|0$@؈l_ag> 28gUr6 c;6ֵ+4=sFGI~9qg`{ @Fi2@  3&$@Pkc#$>}X 4  jwtZNهX,@>i+ 9Ҟc q@AZBCb&@HP3 ׹nW3g9 #@A&/֐arHPپ^|dqt4>6R4PWk9$?rBBZNjrBE*@Z$@"{v;4H{׎}u=&,H{'y>Y! jw4וZN# `H҉مw\3>U<&`@&/֐aF|*@VHC Ic#ڳ}°W/TWcȊvѿ ӧOkllLv[\rIه'ut]+ V3X>ZHQc5`@ d̬&/CJ!!]Pm M9Ҟe!@C 7vg!!Is]}O{`h< ܜ]H~u9S0 ZaK`r3|$AGG;('yf|lD{װHO~ܳ*\ ',? 4֗%}K_$mo{>Oo,cjm]B3g4|Ŕ HԵ4$@X_~7YnWz'A`yO~Wo~vZ."}-`< 'p9_fggiӦyk-ӧ:<(,bI` 4ڱcǴi&."=Cz[{g>󙂏˳@X~nۍ5Ξ='Onu};N`$hȪUnu%yx{ҹnwayf9}ƈ4$@0P~]k֬їߥVщYM._hDg"\,c 9Ҟ Y@HvޭoQW~3=o}[e@i; i~=kW h'Ї>V1mذAַe@913۳ѱ$v5=sܐAce$M._!G=Ia @ }m|lD{װHO~ܳ*f3@nںvghb(#c#$>%@C4 jwtZNهF@e=|R\Wr=ke`Jj; IJw{ PI'ffsݮgΔs@jJ\XCNφGG9 B&ў5gAGlJc#%:`t pkںvghb(֘ w5hӚe$?B0`n/ p@} ؄MIщYM._܈Q&PO$@'6Jr=keVbM;:P=c#P3,Zѡ3j;e Pivg!Y Is]}Oi@=|R{{dه VN.$ \]MϜ)Rjrtf ` ,LkW00|$ GG;v>]y’δx@y xFgz ;d=ۯmi 3&H:@}^r1@$FظZ[׮M,}irw{J]PsW\$@D#$3>6Ҩi G*+t |@<[&u벜,#8-6Ӵ$;~gvnlĹ@]zy M]A=Ѵ>w%vn,` }h׃ ]{``$)m]7vGd74%m}:#ϑNNS+SK^ *jbt&^u;ZML4@ݑЧ?ܟ{6~`Ѝhvu;ZML4@>> 6I7H;6ֵ+4=sFGkק Źɂ=sncu$@3ؤ;vmy:P]c#m1Xɂ:wh cbiyb>03cȑl_Wg~ :"i`5Cd kN״?0N>1m]r%eN_ }˵s6OKJu}.ԽO5 k;j5T|_C ;&j^PW,US@gJ˅sG] f#k)Hn@Ի߀| _N Te0@"]ֵ+jW(S@} }49پ^Î#Ixx˼/`)*{6Om>S̿(O8ΫFZvGPfb %$A v,cY *{*-H.jtPFכi0{(̒GsPbvG{y mZN[Ŕy_ƠAEbqaO]=NfɣY{eu=#e  zu2%ieo(`Pt0PUA@Xy_3Hdkz;6]ku=gTIrֵ+J;&X @H/vN=" WZu\Ua7ut5U"q{Z^IN6FxZPcN-m0N*hNR<U cvE&ͩV:O랇T =NʿV+6jDLP}sUR`lB@Hh'2 V`Ag.=r6 V<ʁ^gaqWU%ކ>ȋ`vIr;6]ku} 齇Ojvi#e ><1*IJ3?x\#ZX")KR?S@1@ refQjm;+cSu4rWIgpTac̣8PNUgL޹w>St۽Oh=|#؈6Yp[)^g/:&M(Yp˿p-mʾ03StU8.;JO44J%KD5qَک\uwerAC$LcUg{u<ȂݵhK6T@$@J;ŷNSÂ/a:%ylT-N9oOh=ie9 S?zmZ,D=3eՏ,݀z}_L֐A.IuO>w;@Ut_L:%ylT1N9>oΑ;['sd%U'}fV?bpj}_QL-1t.?;@`-n #:_$^@]WOkпBY.{XIZ?}08\̫"5uK !kі>K\n5Fc5 UCa['LH'M̲\@k[?V:a08NL)1lhۆqә<qMQXc;@Րi!quN5)3hZ~/ ԕQT$)E=3UNh$2FfAWE&kBz.xdNױNjw! Ҡhb#4&%t"mϿH]ϫjK7Yivlqe\;>&YKL)1|d1w[?I6ycm3<Υ  h={h߾}zg422w>+CAAEJ c+m+Ț_t Uva+NࢌAY%:tI395:4=w[q:(IG_xU,"wӱ~vӺ3<%APg hwqwsofgg>q!Î#p^hl;:t|FvQtsA 9IK_Xg4MIm:}Bhyn,Y_נ(ߎupGEw]o Kߙ|γ2>6MkR?y~'nw[IKַ9uú[~s IDAT2WVNloK=:1䱷 hr  v-IZti࿿kzӅW7DE$3 G'Ȧ6/cA*&쒈[ԡes>YVuPߙ󚐄e 'mfHTQ$:owf' y)q{ٴ4U7؈m=?;%x5]Z: h: sss]m޼YW]uUٳGg >ayUHq?Z펦<W֝F#o߯\#ӧS U)aW:o-ADd:(LyMIBGjF[zzVxT{'cj;uKy\Ts48xѰ|B24?{qNcoҸ^(`@;SOٽ{~~oO>UVqxHj)~K6xe km_RgQpZY񪐰+R]a.AD+Ng:(Ly;6ֺK/S8DWZ1UE3Z펾yT^کU%w@4^{ٗK9ZN5RfOs$8잿?vӶ?hHy *8lVZfԦ٫K  h7{L_~.B]xY51RZa#\Yt~&HSJ]foϷ3/?_ " nZF~iɺ]f} ^fl]g}W+}{RYYꪃבSן{F \dHntN}Q6*'t 64^(`PAcu]}C=oۚ,j R]7/hjhުO}G=A^uN|:saHiwIvC *VU:73$&?,Iu(m2+i/$Z姊3px8>OWj/zY0!niϒ3gRke,mwr;]aN[U 4wܡx@7t륗^$idP7(~|oYֵ+H*IϷ)ҋC-oBRj-VU; Ifn%SޢnO$M,YIxY%ъ(?go 4 Z}D \–z3 nRvK[6vwH/Iw_~6U%0mlۮѵW,)dSC;1,))qUIϷ)qxThÑsD&ǀJgu:}g*53%kU<|皂W$e}ϳHf% ey2fQ̨p|i8l*-M[>RP,2=޶zgQ,-e(HL mVFm 1س/kԁJ$TM'J"ˉ)1u_'TGMAyFN"WBsWϤ%dV ^ߛǬ-}rdxG}OvGߟ~EO%piR qꪪ$J}Zt[6c?ẉ%D`9Hh;UZIvEvpu)#UJeӉZGrb p, n9vݸNۺ&@h2݀YjNP.m1ͷ~?xE(Y&~oODKo%iyoڹe2€cNRw h~S܆]V]w8.dɭ%PF HæQŎF>%9u3|wU1 eL͝7^?B)qviU 1|YlZv+ItQ9=EǹnWGOE&?Ҕʦm]PhQOn++}OdrLeZa9϶N #1d׭^,{0:n]JmHzb2 ND:UX3g_ 6Tٱqnze2viQǠٺvE;"nٳ*"ވAAˡ'ٴ loپCVȂ߰HNIҧ%՞7#Гx->--}R~{ IL1AA@adK6ˮ[hY,-ו{߱lYܗ**$Ҋ˺{tc 6ue;(3`Ǧ[*=+k,dt5.0my&{f} CRM*%CekmѢ8ӢAr/!wim#}n>X$$@F;\$2zH=138Zn+>[vZF>(w"Jt>dш[$Y3=g6,ذiͲJU[m/~R.NazGUK{Y]m.pQ5=tL#:VN瘮׾7ٹ㚺e}ϡ:UyQնhz>i-N蠹}<ַD\ADAKkek_CAE@hdY(NN9R&ijrbh9D"tV-L+Kuud3 ίl$uHt^lU hgER{#; %NAcڝX*;jSV7!I\>n נt{ӚeV=y@l^AKHzr.EGmT-O>ݱq]zOƉ%/YWN뾃3)2͞2-#^ *zTw(0H] pw>?u<`O]GʌG˭Z|ܣ:}S%]&iuutS 0I}7l8[q:y>U 6Lϊ7})E. eYGi#s?Z-W2s({vG>~CZn\u Iy9t|&wĹ^c#z>GyIVŶhz>~_xmw [Fth疉LUZR2rwUv>@H] t$}O>uDUFyea cj:>g'g3]3gt׍fT)`Ec*kTOj׃~dtXsLRoLV1؀z}vL3KZ\ ŹN6jc}?ՃӺ{[jSGզ ,~d˛35wn G-,y,iqnw=;n#M|н0WѶ.^eдV2r޿˲u 4٠eRFOVʰ(Y2 vuG޾2sZh83K)9Jʳ^(VO"qzF i"q>kk/Ijwj騱CUDbC(N*,QsDm41oD]rݳcHNϲUvgVlW^}ٗ3}כvYlm;1@ψj$-e'rm=_ϛWlB91HhZaze]v\S>m8Bmd|~;x/j긩ɯ?ٳ$Hn5l_fyL=hi>&anfVWNP zw²g8t%-) EROooac朢3jM+iU_bJ]'0`vkF=mEn@`esoLQI# Yقt$m6BJfvַEH38|y7wUv9>'Ս l9A2U&nr{M}9I/˃bi->H(EX8 ]k.ϑ;['ssavl\^?dϳ6FW^Zno;.\'? 4=?1[zwݰN/~&{T6~wiٳ笎t^(Mki׍|)yvN4PASfպ@mr ~Y(Ip#QҚ?{>&lf^_]3ej/O, |wI6(jw2kߘ?4kSGV M5fmGl+elدڔ~|l$V"%"FW=0 J]w?S&M;8X83Lm uRIپuƙ6AavMRt}mfQ$ɷM?kMMb1!``6[}rJvj#DWl`W筬@|miۆ@m9I7!Mݲ>s7}d˛zFttl_^;Atul SSޢ^’$wzyyc[ׄ2uMI:t|&uRϟ_;&&0=)syq,: .:Zꥣ4f켕h7uOtLC וc:}Yٿ|אm.x(a;$-thmyA:E=r^O,l!G Mam{^GOqkX6$O<lg~Ϲ'9Ϡ>{+j,6$e +.M{2 H_B\?4?`[FMmưvM!sww[6Xv7]3woG aK yYv]w62d^.m"y&ZP;ÞGSy4HU= T  JprTn35mywy{uNrﻚ4*sea6 woMm+n;榷s??LIž޲E">Is_2ݤ=y+Mt%=K?{I3$G5LVk;:29IB"h*t޲]Hz߆Kͣ/C8N'7BBTǷD!g$bfHO32 ZMMIZȈ<ٔIߛ~%ߟ>eM։Vs.6gDG}NTK|x3cF0,{&y3% G1uqK\⌮6=q]+cOhv%=~z", oW?yg_Uxp蹙;M24},Y|/jCS9{]m+&\AIww&]P}^8.`S4 λ\RXvx6N, 2f5ڢ[ >Rd+%+el (yG裿:y2t U =MkY{r;rO[6ʴOddn*rơry4xpWW>x]tF W: d ϋv`mᓽK|`>*oLi&8"n!sa5'wI<0Uۿ&gU=ڹe$E-;6kX,FM$pnmøyiYRH,$m3;+NUKt˵b;!nFG{a|M}GU;}v~7:mo-gg_Ab;OڹenͳN gCޘ:/qVse ۮ%_7OzC1~Ϗ}f<ϫ&m$o'lgy׬\؛.l,g -oZ!ϐ#}ddgOd{q=7Q?ola}?{ȑ8?3j9g*{Hjwz|i!t xA@-448V;Lh疉Aˏ eaZ'g_=R2Y@)2w=GLD=C;6#~$4}wvH{> }~9bVZuuꕅq QG-v}FA;vgkW=.m+w, 9Qd9wezd K:CZ\O}GǑu /ry,qfݓ.ZH~Hgy?4kg0_ F2yޒ [-Qq]d/[I "iĎT IDAT#lZetPmqY0mh8I:#9Ja#$ӯDnf'c{]58ֳZܑyj|zH j`'iF]Y9r W7$l"6}F5HFkqd^dw^_CJקU zʒ;6#BtfCPy;ܩ@+Sڶ!fnIͻ6j,5scx[.}j $δm"zڝ%$sp0X./߲ǀ"ͦ;ݰM,=?6{l4UrHE}F@{b(j8 MkY%Lc[g_[qߧqq6LGc͚g9Ϧaw=ϬF5w=xla vT$Lsk(<.^S; iFܣ]yui=c#irmӚe=Gfyb zZҁGLK, *t>$4Lev_ ~x(rxiDwO2yfuuM{$}NEm!w>菵MɄO~I͞Eߌ4utѶuH[FRߦ?%&,&`K0S%vm k? ?W=yٗc]>t]lgD?z  Jb[.L[L]ڿ|+Ꞹ{>6y} /$ \iiOݎ[߱J\}zwٹD8VuC@Vlwo.AܤF؂K]ɸD_(6#yJQ*#M8$1&c7~_x̠68lq>kʋZK:<6AU|$)@VR}!>z?;4lVAU=|쥅߹/O,g}r*:NEm;gEe:utq_HֿE.k3%?̀a w[y{.ufh'RYA]ϧ)7QlX`]$(is,rQ֬v]3 ;#ϝ iM?V} }TÖv}}I'=|9svN,}.ܿ2{v PG$@D254ߦE]x36޸ILRWQK5NF ;SkO7uNtْdA={6LL5k&fN7J\ /A˄xGWw%yQs~7OgMY=·V8ɫjKy ab\{aϠ Z~s'!o  -C_; Tgz9 Qq=y)}ocbU>w6Y^;$liSwD~ gtXoػch%`m?t|&{1S mfI8ݾ)0ezLA^iulA|ܘ_]d$rDM^k%.=?J?lN,0ikWKg7eɼ[xɿ ]:`U~HiƏ^W^|kds:QK8Rh$(~G9Isq cGyΆɊCeJ~HvY΀q9$fA3*kgiB,/Sjwg]7a$Zе>nm1?V}?ݨ@б]wDv oH.<GXpM:>N:!4  2 "_A6XO.=3KJ!`F~z:"(؈>pe=0Cq]_Gsq;.I9&c𖉾+hzֶ44etջwxNȬӺK/cG~ܓ` hcRp}o$J[wŚ={.0RŽ Pgg_*Sn~ە0KWG?Ҷ׵+撚=\,iMݤpX=$dQI#_^Ї6]Md{'_98kOԭnu}$WYq bz7뤀ќ> |ʨ):g;\*M:>ڹer[Ž P-awhUKF9ƠO랇Yb4LT!iNDU^ l͓zٗy@ht[TS)b>w43?O?jw[X1#q#\6)W{4[5S+s ǖ&m&Mbzr']j1jcv?ہTSϔvٳOUK-dXw?$)YLzL_7GH?K/xwsNaq WZ".CRi 9I⡞K[؎nGc[覫W.m_R( Ff39ciA瘴o@mꑧzש3Ml2L|}-Wԙz{ݛ0]'SSVx~e4 3(t{7MzUKGsO>lAe<(&,K5k_RZ]7MWLw@ Qg ѭo7>]uCz>l\AmOkp)$\WX[|}{|¼,f=ؾs63Wl2 0>s{}Ƃf q6Z 7_ra" jMb?}M?}-49b1uw@?\őҟړ=Tgci c_Alռgvw! $덉񂖓ro\Zre HAg_imҘvm_$*?oG'UDˏEcUj$ O={Nv'~bfV 5K~HA{?tȢ jwwY_󉦘[Dy4՗cz\ݾVX6g/SQ4eЭ7m9/]W`#=?9#!LSgC-97kۿM#fMnWOEmr.%ߊ'i{ȶ-h9?s'= ji/lw *nٳ m6I8I9{X Ć)8tm=WVf@Ox2t#mR="nR=K=pWխ;6ֺK/_>I@=מ} dD_8FEm$o\DT#*( "GJ7i"(|N܀{Lax bS65-oE8άvi6my93-i_9W]'uMWhQmXЙ۩ʚK齻ߒsnfC҃` ΄,@hۆq}m;og;oI)o;v9K v?"/Pw/f G'7O:7(-!G %xIr˔͆6a܉jnLԬ6?o? Yv=ӱMʅ*i;ֈa{>cadMp޴a}ήmϞuԳwݸna F^F7 t~idx0h> a ˠst7t$5z_mAn\‹*?|TK߃ytcN3C&]kuc ^ϩ+#yu/65,83¼žUUi;HrbB$! %mEЂXh?Z):K (Xս{oAlTwyh+Q.! LXX+c}c9W"5U֜c9..?kʭ?B`l澳~ N9͛Q996VDNn>գA=^h=bHj>E*<L(TM&ٖ6{Hfj#S64!C|2 :NLAq+.tqtrYк*9ml#hP~v[)jj<ltƸjJYVՓ&gNis+DޥBQ9,Ϗ{Q2XTpUbB3+Faѽv$-D>_Vjyr?D"| "DUx[6oqF$ryx&D^R.Nr.Q|LB׭]AmhGXNG(7hLt2TVP|/[^9 u~Hh8OHr@=%\&T;}חz9[;P 8MtPwXNz2D&Q@:&+?JQ9nϑ'tmV ESeg5Q91T'}mR1]޶(\@(AL2U9p6bзΞ !je{ ~?(ɭ2Mk|/hր-{[6˕b͑v KAz`m޽m<{5G9ERZu[=,Uz>$϶]h:-9h 1~airpI@>I^P_z ~A,WFVެ{*N^;B(!B`㤶ɚP6F{j Xt]6Ί{\p\m.GXË91H֮!cqsyA(G.d7$|iePx'g?@xRz[I}ǵc1٠*z]u:ӭQiMl6TNjPCxv=,CD\`Qkh7K8/yص&lwtr:ޤ0iic1vDym@Lr0uUY3xqXHX渭nV:ϾSqe3o['@{M mzQ2A-*p'?+8wpWj)Lƽ>Ed JF=`Ta22ff9wya^}`&+2s'^f^?d+?6n,WUAa(woඵtcB]K<.佰{*"uԒa$pQgYݪ0i=shǒ}+Q"DH" D!4T=I;m aWms(hf5]O{+P?jxqw6*6kơ~AUj5(pz/ ?H-ӎ KgV\f*A !J/nM qu 6Ye=8w\6r{ȋ @n_ٛ)O9g%OBQ򇻭f9j3p݊7=צt8G^WRhich@I>5aSaSgvޫ{V=8Οjq;Cj[1H%\wMT7}/aoז]x]*.iW్< b_15[>/Nӽ衿ϫ 9DVsAHKrjdD6}kkg [7TzC2al"({d zax,U5P~`dLD?!·(!BP9C4O}Z +;96$L.z. Z쯼bx ;?go㰯Ou 춴DZ>Hٳ9atZ\{se'nzݶAD]uo뢳+nXm[;[ts/*LY\pR\]_ 8 ~{߆C_EˀBoQq$ AȩYb`OAur])>ĵe q$ߣt/6d=}H ~qjB*sOLTR9I x|mchɱi q^S ;! % i}  hlss2n(Y%xN &r2HzJ2vytÆxx }J;K&@J $uS|Oe=P檛L&xچ6i?Vnُ[+zhm&\;zTRK+=T^A*6)*\21`"ߞU_8NUHIN8auN\Ahr4%T[9{H$lnmE4IhhMl ݵ3UPzMLPhR5lĘښ9wXoLNmu/Vcb/q3(ή9<З<8^ zw>ඡܿa+ ]45 .t c=61=i@R !BA!B`31]gْwqxQ:tѠ rH3DRm<᪱CO n[H 0F]ÉTvN`2,DX0u}준7BuR{? Rh|Y6+XIe]'3YJ`3/Ǡs͖z'66(`r I5C[6-}2UzZ:Γ׸qƚ8gy (ieN RzT8# 4T3rRmP+,8ʒ9Lng_(-od!9q?#e?QҧmENs8IRm \EO66E&T5vz1Niu@Q~M,/9sXꙸucӬ@TAsR]IS:ΓNW˪&׶L*")rKΑnꜵM nn.,aPL/eWcɬ zcM ӊs1b88GkKrm|gߩUPdwq*Sf%ǘ{NF\Vٸ׵[zmN?(/3&i W29j;n훜lZtBmwjPKgc%T~"D{D"jluz(&Rac\O7}m̘y(A炔'GC9v MɅ!*@ >@^K{+y$up\>Gۃ WN.35~hMF!:#LWUg }pbl2{\ɑ.e3~Qs.;fYU'% 2u9A1- }[ے5A8;PA2)tz~Un1m4 ])Pǯk|Ɗnl79,p*nQw j>ak(`?F@"Dp4Ⅱ%{q,e.kLay(g{Q pbl2{ ܼW59EGys1~:iw ~3z;ǍήXӋPQus&|A5Uedzs~ټ (V+9][lܞ'>L;UT墣ֹ–"v72:ukҶثߙ.5t6kLפ[+{k]S?3qm4 t;2ϵ.愉RXk|y/ൻlAA&6yJfmJdq %V|)ʥ.Zl(.uMLO7#.9Ş$RɴrÌjOuIO`! DW *8WYʦ/6]4MbUpqU/Q:4e$n>'q:-,L? yv6+atlh*ǔIfe9h lv,T,rr8!q}ر6 V2M5ܸK>at 9 ͟YWޡxEQ6y.+}HlGyvtVq/ '~[>7;։  eǫRpd7.L5:ǖ^'|[+Fj& &` Tw߼K;a[*w䳚8M{6}/fe{W].gJxZTYEŤ>jVŎm%VOܺ$ nU{I pF&IkYhI ll uTqs 2&[XA>2({W5L>9RwD" tx6}l{rXtY!Y>ϟ)Ų#q)ތҡ>X3|9v54{X $߃0qfflFʝhL2SYOu<]%̦\nŝ,i B:!tvdgbj1pOeI l2YLP8g84ļ}o}L{zK{I3IQ5uUe8ush V6<&p>8Gm%!Ҡ.tE>Zyݪk,68C7Ý׌fX165 \;jw9ʞ6t]?p]N|mu)@u.zЃ&?DfoAl*Wi.j::tsKRYꐿ#'l|jqA'qAH5 -ɯj(l/(6œLIV5B?fD"e ͌RkjS _y{9S&׶t#!ep]]vQ 3PQ-ǩx>8t1O5cY`_E`µT"oР#7F~H[uUMk 6ó~ÄB 0},@eݵ_*[v{MA9'|4]kb2 #Z[:z{=lTa(yl OyT8XtN'Yk6Q4rEOd*]YJn# `oDan&9VuۅsISN^LI.mvTvAՖ8>llEpP'Mmg_b]F>6U&KlR %<׽!H@M<~8Hur6cv9Fpd@n(y; o5NTspk!vC)~N}4ƭ7a1MN)Ew+OIʶ "! D!0tk[lR@_P>d1s0w]RFOсs[e? wMM:vuC@"ʰuhہxqRP5hO_f婮.S+{ץޕeIQ-誮8'J!wݏ~SlA|.j0F,$"׎Bs+dwkI;p}\>{Ǹ5WA,#ϴN/#9ۇRN*[q =S9 hm;JſOnPt7eQ2*Dv eHx?Ös<#B7ՎyBoRxodB@ۃ)x% 1R!@'ٰs{#. fKMɪ+gKTz Aug1Awmt z^fф;|޾__}UYAguN^]Ե( xL)7׎!*} ȉi1h%>jsv?w m5S/^}=)/1&pNv}F'i3Kh=[:jɿP*U6Jamkj]5.vJI yo(!LfNYc!rӝTZcjsTaά+@Mwe ,W%TgA!+WyecԕnCu9_Mmc؆o(idpI_] N!;HtQpbal].l :fՐ٦OYg Uj}bR6(.zwMR12FـVP>_6`x,mث:FWoo#WK{Ӊl <ts6`L ;0 9A&vV燎ҸslILb\SU;[u](k,/ ˪&W -5`<kjzW8~= n}(_h Vr 5sb7t) JW9]#cfQe (դ\2O~xl>ߵ2bl`rfYm&gW!`9 kojA7ixRnM!_` c+L!ڣ>rc*s߈s)c:7u NJ>!e[q/'y8*JBFjzWchMOʭq:~ϼS $\o)BU*S>ijC SO]jd|䏃2ԽO7}Ʊsڼl/?ˌҡ5B?vD"h oUo'EVnݏ>3jCToQK0\v 8?KVR6 f:rs`ၙ$EMF'q2eL e*D@: oN?k0{dUCLl#@g.tyͽ~UrLΞt~C6ƧBٲMY`llôb6K*DCb_!@e=e?*pFaĬmPk ~?#=~pxïT^cc:ӷ*/}pÇ 7uk+)kUU / 9WH'*N=?MuTuvLkdL죦V}EN&g #`.d籉k7&УQ]m(̌K'ig{*K% $#/6ꉩ*Bݨ= {$|x8b2U{R5wme{+z(}ހ>?j xqAu t>35pBl+>llMOJϾmAtU*VMߩ} ŐLH\yDU%Ig,k ;9YٳWoTD!HCwx͸E)KgHmյFUli*(,ye)' .T9+Bq˿ "(37<03E `,R37KD6w4Y{6,ָ['M9^p|5 sWߏ B=EGAP&cs$@\GZ;7[8i$O05H5Uڲl ]91xnmO]uSr.嬐館}uNxM%18ך6з^`< 3ɊIzL8^og`J>v=#~!pCmN[օ1= J%k󼩤#-nIiN =D&<jg| ں7? Ç lttO%

>EC$isC./h^yd[QnxsErm"N3l@"XFgTPM=~$E"6-hSGyVRA5{ڥ-Zɦp q,M&ZeđyU=ߣtU=|OcH;vG5ձzP]B!d&S:ѭD3?LTL@8MhEQ6y.YՕaGU|㲟ҥ kfU9';x2L umذSx$q Ut2 Ҧ_e꘡E:Tl5!:t:ߊ,rمɭW̹/.IPKhkࠦ "򪲔vAP*E]oV*PE`?s,kqo#.8Sν':}"(IupQkL!ׇ_?8¶ݤicrSٮ*NDEbT@/p4 ':FՏb6>yqGnRm*λnq.6 [ Q9P}W&(HuV.wuTd Qp4~UWݔ]޺6]sjuĐdМS:[_}췉CgeX{e:g{ҩwԲI2nG$uyEyaGGE^}GO$3$PJ4kہ㾪+j eL?5sL"3y# UdRUAbޚrTǶb9I._~:!ʼn(!B#Q~ M5B9l`{ eQ_5<ز~(T^> O5Ue8'CofSF0@Uqw- |gxc\+޽L" 1 )uR-q+1EDa428lB&k6C&ȩ:\1drNĄ9?^VCƍ̈)Srlҥ^HCFWv,7 _,jA+TE[M }@a,pT~T0FT$ L-hŸ>yi?8kz beM5v +OPR]~ " x-yav޹[kT!Ox㳯6W ePkn [6+K}ɸb$A@=4ؒi}ZTXskƯުjG蛬Cr.![w f{q;(l#U+֎gmuVLCl4uZ>ۇUh4nK{EyYx)h8љ/S6W!$oicV*3&Z>|NC TU$9\vhL$\YgG͘S6Gcfι3gyMohU RY10m`H-q_U " D>jۅN3*,㇧t?Pr|Xq$T(7+ÓfZr!6XaOG_2Rcq`A(. N]O/4teȂE)N) Y ~ӊ Je4 B?d8qv/UQy~C[H)9چ]/2m=l\0FGWvHV zUictY]:4NN+@aB t(KSk'V]既 C4s6 ,9˫ʒAn,56>: |@"x(R+Ԃ6$%H*1i_${UgC);M)ӌƊptɺmal+:U9vpk7hA~[ٻr5f\S[]XnnQ#*u="ݮ7dF<UZ=Mkl_.d_ p:mY^Uƶ&a$ ;VOĢbVk=X#\L~]0 xꍃITL *du]gY,M2:L;㐢㪳4ƊTA]U8PkkQ^][_@"D`ħMd+\:!́tV R׿87u-\ptܶƠf3M&G0Հg޶zFȆҡhicغN)%RY{1$3+rIA)D[9LkXnUC r8aYFG KM[087ķ0\ݵ}T A+gq=øD7An 5y/ߪ'=&):;Hj5sUt6Ֆ#[J~ߊʠVnO؅iH9D^ Nʖq5Mm 3?pA@{nрHr,m8,E਷4L뗭4QJ%֧~;9AIؼ%. Ɏ3dO 2+L9@Rgjq.[&O!k.*3:Jʀ~{#G儶 л8 yF[TYj*EwyU] a*/eT_$B6%(im9"-ښ99~O^ TcĐlRQ^^}`&Z8k6( Aul;D_:* |!B;D"Q ;eqHf>04`TkSq귚rbmbEX0`JJ逓/3 [MӌҡS;$ ':‘ lvGgު1ʑWI̯cݎ&7L2]8HA\y?% lTAGOwk]9HfՍq,kރҲʋ l. ̴ !6M3i[RmiTdg"R9KE&:α.P)ڰO%爾;R| MPK~S'nC=!ǁ1ƭ] #ꮣ) Xسy# D s[gv6 ~vqqpǴQXÛ9fY8m4KЇM[z*=c >llM| JW> faN&#Wʯ/gM~Zǁ]R9Nrb gRQ@^%[Μ.MFD/AǙ1gxYrhܺ6jNݷ[6~|8'ye*%n:QN`G(&g<.ƒ A˔@r ӡ`jJ5p:J ʐۣ:0U8(|텗~Ex@UOlEX]V5'`/M2;]z8(rdXpR\Aeo c5\$) L)*uNtJ-/ͨЪ716RJ%d w6Us”NRp/OLbRZSN F]Pvv%_}퓣F')yEPIxtUى(p8zh!6M󙫰Yt] F02ֺj[;GNBTmؠq˪&jT0[*^w})ivXسy# D \ y6w$\0#Vbߡ!^MX;.tm-*j@eX}.8C(Rgr΁nmbӡ3t7:șsAC6.B*3CP,ꀮH8]td)*2gMRPR8&_M[<ܳ\{Yp8>jED6Ju\ʼeJvϫ{pʬ7?C0+( tފA.aEL]pvG9. 0pͼ22X9ewE RdgWskj:[Hizc'LuN#Iq1(ebeU2L'.4MƠv5U@u1w5UBBU56[e`9*a%%7b!{TpW̐a$5NoPˎtu=mT &̚l)dqmL7A!NUUIPl9QA0(8{&4 %SN+ml'_z}"gG!5ÇeOּO*-* לiچ.W&=*7 ':pmI~*',` $ŀTv3ѭ5lm8Ȯ l_Ϧkz ADmtf!n ǒzȗ-s+ǭ#,gy{O$c[Ôs-< 󖩫sðNtEsTkЕ-#7.5Xõq Cac3qDZr>QCTp5!#SWBK$-#mݸO:nw2]5<>Z 5[uN0wO<9we{B6aĐVrNDIx}O _TQg%p0N>wTLyǴѨ;F&|' 3|U5Tֶ:'.D}^Q S<`u̺|j75QTe5w9 "w6+2=M#֋[*Ft]D@AnNx^gR/w<2XmVyGQ^V4Ue ~"Ɋ[2b4*-.z¤A鴑;$3 ~ذ˻(iB" D!L  'cHL>8{C>P@!EhdP($Gd5.:\2Le- |MY+aF]. Ʃ g@sC+:L[[~]Օ teغљc{}rOLU8Sm dTQ%u JePIBtR:M3s|Ԇ UroSzF젢&u0 G'ikjIYc]*.#9zI1n[TYTyg@K7N]9x@U73V9sPL‰[MDU;ưK3pϋu^bPTb> mJV]vtOͳ rL6OZ C6dm k MJQPVߟk0t)lU脫M\w6+٘@|[/mQ=5z>JZ\~#V]Q-jQò53Ts>dET5զlWlct{9K((RT3vE!H4VԞ0edgxXyKIQI(dŔfʜzYlWT8Bt-q6k7mF~T`V p {5)H;$rNx! 9bTlw9{>֖x ʆsC+lƒJ1'O [|㠳,Voǵ%yxBm#Vo?;-WF.88ɯR7|lwJUupP@Rl3u;1 x*L)DEQ.+/KT&5AneJK=~x WQrp6WDUl`nw:wuQ lMXANtïmtc*:B7,~muO6ULgSyY*u"5mϒnк]:wQiE]A!BRIA.Y݃'I#2p~/{ o:\$-{uiw r.J5ƨv&G7 Ic_Tۃ@~B'F^Tܨ(ʠ2.-kʒU͒8~W]QƉjY%XTY>GΝtY.Me4YnPTe{L)7MC^($Z/ԁte|(ڬgLt^qP? :ז}nMR>nl?xSP;d>dY46U#:wqϚ@d0|:qfU@Crn*dشX*}MmCpwĸWP2`$DE IDATd |*fڒ/mPYNԻ,9pNP.G:(X^W吇;NfYmuwX40Aλ.v6HZWT 5fWyPMʭ=}Tp{ҙdiIӃ N9E PTޮ͒<`5EXIea)ݨQ8ډZva [n:KyބE$qYqWueV}KGfA\x+%\2lў3&HD᠕k)FD?VHwomCAB[KQز,M13m6gSq-۪ !wQ$B`Ge]bC2sY,0ր{[cؼk:f #Jݱ ?;6,[Zpohm d;h)/E.19Q'h= WT*PA95Vnfd ]?F|Մp6(7aJNu5 놊cf ;^0։ϱ~ +GOb]7?EK9t\&alAwv ^:9{TO*H}O {7eUbs20r~d2[簰} 0C&zMik.h#_bU]8P{^Ɏ3dNH&TНڧ5^jW| J@ a\?\ȗ璜cҵm 㜛;Z`<rAG'bQeqJFZY1޿Ci,] HqU;eGb?f4n(̌K|_n eɳ㍟Z6zn62U#t-Depd6Hݤ?ΖHmi"ڞ+(Vlʭ\U!H&(`ݛwij Y#&S_!3Ott xX6oNtedF؈!͟YgzZ[oIaz7iXTQzSyqV4P8c3+#>1[*Ə[XHVTijp.tqe y ejGck[djݸ7iHqYش?cPClh)}7-qH҃{[j敡|TN"! D!L6*6|:dIeg۲*hXA8ACm%J%c|ms?*0bVpq$#SQw{.=W?泉cjl}lʂ6Vdgpzs@qLM LaƾN}ߡLu=QS8@Qn&lҮ:d%=dg6bÖ-P5cu% ]*@ x\~aaTǔ^tˠP @͚ V6 Ʌ&kP5D3ߦTԝSLs\ޫ :F7^3{pc҂J[(B! Db۶m;ա6l/t붆Z[3sv[^Ub/W!5{M8ﺨkl-!H-;Ui)$./9y91iM[ʞT&{NW e{*n).O39m8m.wPRܨ}t9Qâ8#8C :xBO.*ç*T 4n@u ,*cTʒ:lz M͆ &NΆY+˻Ovyƀ@zs}XH6NK{+MBƉ2xr6`Ҩ!|g*} nm ͊pO$ӶqD]wKرYվvO#kG~;h,]zllQ%.y(;l D' NlX:# TC>i:YļSr uNY`c")YƩD\(tZbf4^qc_D'lyF}*SApdͧRCs1mtٲZROv籡 >x$u tՑ[n,`#l.!M-!BAEUU.t3ra i9g%k7{_E ɃSEQ.r{l^SÌgfp ֕[ڒ<@5 df\*P3Ac/;S-Ι&7w⫖0?n: .Bm#hHP3,FS[|?m]d)'/ JϔLno^38٥Q3k !&o1`ӗRut7'Y,9/:A4J^SqLaޜ% 7+__jk7Kz9OX;D{Đ $bк]X>,t ێ>aQ3>5N9uÆ&pe2cġh>%#&eǺ-\xitTDG9;p*/ӜG9ՓBw]Su;x 2ފYۀ]% '3"pӊACko'ejÀ%l Hڡ`ܴ%H]T<+ 쟀2ڻm=a(l9 ڊP"YIf!ϼSL(kKLzQ$Bn9sgΜI5'l:}y%g] G?3Xdo;p׭xc?܊X%XxS))88:JqLkTzhTV S_}ZI'\xr Z0 H cઇ gS\;rb9MMоtkؼX굩{t92bwkKkGs}F_"!$-ZIt 2A'|œ@u}n26s[ },qXpT;j56%Dx :39M'&(/k3[bJ]_ tsճ[SF '(ۓeԀ7M]͞d;Ol7`,Uh`^SC(+/:/)-]X{^g ԂLF$ s`I|UO9 9E+.Q6Z{{I-t%TQk䱩=Y%%S 8Ԋuխ3lMmWZ+ehr^K(XTYl_B 2"D]DO'?ɅnE ۃjp+Jrfs叼^559rS#a@?~v{ vm ='K\i,, jS(i8-3%th.Ӑ@zG:?p Z>Ǭ>× gbQnuHu Rj.]Q2{ӂ9^t7DїR3 4'V/@^}Tnϻ.:˫PI:)tv%M[ ,q=5׏ŤQ u̬oλ. sR2>b(LQDQY^}9]缴u.Tĉ.QWvg:I 9H+.*dgҡ:Γkj7M/#-j{.Щ~LT;1O+\t@{}DGZN2A…яW\.!Y7me~r~F@v B==N&1PhT(j$V&@yI43_vR=Tː:#C kz{9*9.Usʹi[mJ.{'b@\>,Uڶz{Ԃ[7gqݸa4%j N]`/o,eP[SB I"D=D#S>}4.`.>P\ɨH]8J녮WayMqUU&3GFPW1" jz!OPu~jZl DUp4sCxR R!U Aތt.kjaQe1,r<<|8SviAv&>ij:s]rFٗZyc\QܡZ(LշD2epa˾cHW#@[ 6(p3Չ%(9geʐ8r29I綎Z .V;NN zޮOeaN($ q¤{1={3yh/8%Lgdg▊L%N 7Wk6>fEaдPOՆZh(k?ZktΙ߾Pk>|7{A_sޱ*0sI;OV\ T]/g֔1]{/V&قޣ̡& }-Vjkoc˰z~j[ IDAT> kB̸kwe;ƕឺ!jfK{9]#nveW#U֔E]U-GȴĵB`^8T.HO:JW{U2pTIP}̮=]Un8:rJ]w#E6۬z.ٯٖg;{Xwc/E'A'Qs4p>ym]& )qʼnh*8 $̑c'\z:ä@˂+Xl&c&nKMOL/3>|_[oŽ#g"N/ L)rӕ؃BHrtDF'١OӰ͟<4H⮓FFl2ժՑ܆Fll` f- /}pvIXpLWq# \guUv![} A|ٹ@Ԛޚ=jm{kO]S$ }?ac |r}Wb;ИTj@~xV-cE{[#4N&#RN X9apd]<'{W皂 sUqvhxqW6*;tVsdWI{̚`GE8u/4*?R7 M!*CusLʋc&BPjƸU )O1N~9UDmy!j >}~&WDbK"*$SU*O+["TW0orx.3 G?}SǭKf,!)(k, sY]6i],%: |1H bʔ)K [F'۴KV{qsb.>"ѻX;, ~|`Q(R>а*K"9l7u2%nYМ 6_^12 ~(I/GadIX8m:pmE|Jo(B17Չ;HNlniy9)2e>L<3MN]d^̪WHpAanSxyЅ"q]0o9Rpw wGWE>X)zP#0@8{R72[ 4{p)w1: Am9ΎԊ͍-XYO9f)G۱rKS0$ x;Pnh>LŇD\M\e>gkۨ^W6b5=.;I8t&Tb`q7{osQ&x& TJ9ծ=\Gt=4 sM0Ѩi>a*8go+EhMIT^zUGL!OZ~Ri 6Ґ\W| jش|߳;Wš:tj9I#~?&36L7~gѯvUH.)̚|͞H:[W_- xKcfqBx9r2Yņ?u߰VHzJg\>UK.T$NXRшU[ #w#7c~L~t1UtuG_H bBbm]Y@ٴ]2Fbkck,V zXY>X="e@.%CPg<,!6HY&R1^qL ز`U U.BRww]U;Bbq:N$QWu UpF] |Mǖ<vi/%0mmgs-A_0 K: k.E$(9u76Leim2{׵^u`4X5- ËƄ8%aoN(4TSGRT2onŠMX䤒M݋=uC\@;qup4bD ^W@6NG^Gd047$]GVl#g @ UF:x9y:vB+wUiI@xo4.;&>tL Q6a&<~hΔf'5`ZuFR c_~N֩)TGg Ar#{"t:nJIR9}\.}" TcܐB @ЖlfҨB~؊ $>H arhj 2@ kFgŀ<+8r0q;򭍭85VX.-n4̹NsRrk*myy1fgs`ٲ8Jr/:CmʘH@%3?zwNk+*8tg|0^tby9TMDwUMAb(m}=QWZ3\*C\> U =1;|dulwC7U{ [Gh"&V'w5fJ 5; 7b@csg32s|w(|4 r/*lS] <5Xu,ITV7ͽ8pɺgv.9dsc [p3Y:K Ϲ8 d<|RVB=S{t/k#KBDj02TfbǡhғOh^}c6l>NtI08z K%P!UfHS>]Xvx\ۆsJx|_8cDh|sb%c|rS\ 4'IqUV|WqD141TWf{FW90bT4tN} f.)ȍ%#Һ5{{t:$H}$ 8$VyM!C_&A`szVh>g\$%pK5W2~)U3uHYR 0S\P m\R8-몏 NSpݰ~b ԳJ`4ӆbSG.il兘3L BBɯDdLbA6aĵO2>Gneރ-*8/l9ZI_490w`r8t-j'A zzB!*R ~V8jOHڎSw>RCm&{@$@S]Z8uUBZRU]UqIN[@Xk蒾j<@HpwW!: \siLAKITZ' I@?wVpQcU#ũ\pYMdutPI9x|m}i?ِ2b0U!v*1 ꎃN|?Wbь#PZpyX.ppH Ykw7c&҄EӫOi=_4:ܦHBĵ@\\+a]IA.=sd3 @W Dx] AH $ṕT:Ck:6eKP+) O5dZ;DDx`| eɂ[n/;7$ZJIdImiSK!8Pj& A:ij~oS6?9 }LSo,tg3sYO ?1nklEeHΨMy^ :\,.S=q#[NĵBʼ& Ɂ9$8AaS̭K\usZI_$iȴa`lasRcnigih1J"lA+0uu _~TU:`Xpd]R}ޚ jŠK\y6Fw {>M_ǡƵi&[CMl!+JCOVSPFW"_zNViϘYSу y}iϷ?19LJ@ӖOW3ԑFk^)82F>cUa}!iR+~f^4:SQ& [ͣ8kXTM3FQ1np_l?|&2`mT5,W5#:])O?aUv7uy{O4~LRG_OYZҮ:Ṯ3~bx]*(r~hcKz۱}C!njƆl%H$ A'20LMR̪-VxBeIŀ d)UbeE\ov7 EwH,>P K SLߺy6AEÆ]WHz= .՝njarESɽ̸bɜbP\g%Δ z9={[m)^uPMhn).8jAn{-l~o>k0VQdio> ^Z[Fc/u(ԕ`U̶I@}S BWI3 +}iPaiԕ WY mnR4\*U .PV/Q`:$Z6׀!Mn*u.-+{Ԛ.bk{7'>k IjLAL!1<">U>&q6۞Q?WmHۋu1w~rW٧#Aι_-M9]W.>&+BܞVJ J{DJJ{Ra 9mcTjO. \WB}&KoH $p1#eppUL^2œzh66LK`˂j:(C+ɦvgbl5¢C3iiH-gƑ^rݤ1bW^7NtуTg;xeK\9cЗ>}-mGC٫qc@f=P_ҡUr5Gt(R~PSRpFIv i:֑NLrEN+BϢ#piGt} VC.䖫 HXqOƠ/D3uM/I{.Ȍ |LPe~/]\^ס 5dl2~p͹MyJ4lT'[k31d8[G1D [V?}d8L[A 6%3ը}t+ϮS.Nx;Ok`3L6M;6i 兙 3F`sNJ>uxmٔBy] }mBG sGDžxnC#]ǏMoh7>m.ňrm.dR@gkc+WBu@pOA/G>F Ig@Emy!9%| zٶ^8IJO%q#+YENkp//C:\1>̺\˾6n1BuR;y9=g(F3N!&C)=ﭵYSɀ#cy8 &j 9hk6tmmT)rQ|Ó"}m1iũoJUk՗*6%p<`qN KAN6sK.ihTMͭ+&:$ati AY=1bl-};rfM1{>^,$3in .]#U61*ҾL7=i}E3c۾.UTW \<H bigԒ8MXlaɺՕmhqým>2BQDpǐ@N4O>aŽqH%рf橙@gr^5|*"tvӻ@&;Qw`2Tj=R#Aj!fV|5t/gϦbIA.fD+D$j8>}#ϠtU.AL}gnV4 t~dEfI] sOMy_>CAK_c< TaUE1j l})cT~fbk Ns[G( _ۋ}0_hDVMs'Gab/Eڧ؊8oB$^ΒD`dah:78G -rm洑űtݸ=sx5{E[B+65$kxՅMA fEdWߺyno$6J>u0 /A8rrX!"$EXo6rY[\(3G`~= Wv;W8yƅTN rP;gާ|=!-LP41Uk6[s5m39_⑲.Y[t ֏Zci]/m;Ž㘱CG_04Bߛ= F^i\cLAQ:xx+! T '+%Vl>S0OUGM5#kTZ$)8YYTk{m[͍}.z({=n}/u<I&M'NXd!# v/~ yT X?7_}%荼I̸UcZKw*JS Jrr`͎1U4q2s.8ׄu@lX:w,Zuⱗ?TAuZ7Y]s&# %=?HCST[qm|GS+67`bE?:%) ,)vt3swScIA.E0 ^}W>4:8,>iJ!+M\r⫗NqǸA3,u^/ ^zQTjrzuP[0Z*4UJPRxVQ84fLN+IDWJ!uU1 Tz`C )նdˆI*e Ftl{#qj;7sC&#ҰC5 "roӓ!">X;nq CCÕW+ 8V?gVVals[h{\WW挏Ll7 K(=PU7/q4gW\U$M=ӯ.)+!ݱ9jlO|y_>H e.s8?4u-/4fnV3K7\eH|rU jutxꏺ('q'E[Ǖ26tKc+f֔Xi%䲢)!СC?rV) =ow^Tkw+êF#1:_z~ȔJÁ WbՂ:L ʻCґ֎  .[h1҃%2&pUd3pAQt;1eTUq릺OstqT%Jp3誰 `2N}(n֔ [Mz@zHɎ!C(ǺsGFo&K :\ BF};xyz4.ej'_ߏSLIWORKQRӿmn2كuU#Ut\>_1 R.ߦe9#`c_.c|cj~@: s ~-sYhWj ucꨒڢ =(:LϥUEM#K5`&<v:^,J rqزRg\el &g W `o\3BS1nq}\tvdSWv43O:jĩ`*RζtBvmbֆR8*c=6TT/zRPCΫ0A}>u-*8)a3Q?םikJnvi~NvҺml_6PCkՑ$[ȶgYD25|dnΐѦ¤ =0~؀DwN#Fc 0HAޑ" c_.p(ЩRJ#>Q+jTqN}apb-jKq93&LΤaAr7!eݤvnXv,c͍-rkFRJbߋ9 AK$ A+\SԌAGKvdj2WspR'xl&UʠW sFU<8:'_r%r.KEkہԅ*fTspڳAw8,\Z֍`O @u .:M75~fq#u9(SҴAQt' 1l!<_N T}f&惟)wh E0]esR@( 5/3U*hnm*eꢢ1ή]$xc/ii)8pAQ+AdPA"*M57M7*^v䨊L/Oqz+jUY˥= d D;T֡S0əXĐ9.q{)=j=?YS5ƲJIj4/wa*Y\&SV?}~1aFER %ci)5e}߻/ 8Ա.h @Y\vt;/E$5apqrRZigωB:Lڤ4w%II # $H XZIAlDmu:|WVtDZ0%W`OkI@_Qnҳu<;RC3{x&TtY*Oɋ!b.C)wu0 QHkLC\puH3RA<0yh|*L(Z))9un(TjҮD  z@[0}S𭛫E 8Gg*cI-4s 6=6u7DgST%e8R!{N̚~Ig-km,!=t'. |Ə5Daʶߓm{zP f+wIHRʂT˒gʁ%'GQKfI\7| 1[kqf}4˘duU#K]@>IJ@&g77W~7Ja@~u j!4mʞeKGtu3t*4Ƥ1YȌo)H">>}d_**K }s:*.Z6~/ 5KPlm>8vͨfO=+ xM*n]ʴAy:6Ykؒq *q`5ΉiLPh7/'ps .s]V#Oiލr8_kKCA}JGIs7?|Hټ.sUЭ?m6?2wXHMvɎQġ>lɆ 8%[Sҵ09MϥIMs]y6J\JRZ'=TRo5؊ {.5ab!Pu=Z1&~ջ %X`u{T!08٘ 9LYz%Qݪ2;nLe]w"e=/|Lxu1J؃Vd[TͲ'`8¡wQҤ.>#Z`P_ms nrk>-"Tut|dO4Lf4;FcȀ1URK+O`A>P_yUW3u 7TҶc>^/h6<6wd:o;&u쨏3n^[Uu3ݱ꟭<`OY,~mofR3Q03.нq4gw)8ё3xMQ><^9V%k~!**[B-Q'$HpqH $ ɠlЦ:z ߗj9tBCz1{\nPJ. I7|iysƕį rA&qiۜG 9Uw"98M;v_04䩫9sN>ϵaql=9.Lnyoȶcɺ @~NgՂ:lileuɕxv!IZ(SPT.ewsZ>ZuH3j&7F0%98Q_n[8D..~P]:@۴.X ?K  %nK)Ω dƲuYJsFG)uF2sonOt/)hSr AR;RNn'^h)|l~xlN]>K@v~JAZS0UI  8ϮwR{ی'?eM)~xKQ}]P_lois'f4d?]SW2=4YS[%;hy~҈>2}zT9kv6hWElX[J`J EPd*d5qՂ: s9(h%QiU.v%/b IDAT ԡCYss()w; &zG>:#z-Tpߺy6wO4TڵKcfo( CCb[\MTlAgK/cLW[K>a)8o0AZz4K7.\p Uq4\#L A@$Hq~9  C+`IF0W!Zp3R&| MmxhkDzՂv?iR 6d$\qZjP/7:=[SK̢ R1B0{}-i5@.trtkm% aHrܣvz9Di%Ay . ߛ= `)wx 'ˍ6*V{mD(Uΐއ[[~qmcXn/;[ 4L4v\cb[hs'wa{aZzxnu%>2z<4K2uil?ҔR=)ϪxdK![YvmeVg`qT;lv.`'9ZMgοah(kc]r 3Q7 *$*~kn. ^Hm;' FYH0Ź#Ó؀^uڰ;ZCľs`1Co` /7m(R|a%l?F@F兹!CsككE;}4w 7?<\4HGܹ^tKc AH $ )DhfƔ;C nx)=NzpN0N@oG^NOwP}T Z4c8U#mm@;|[V8}^5Z9a~w+2hp R粒#*^a ̛\aX?(3R_yuC3fT*]Es[D|?70>MV[^?Y&a :مFv݆[*þpv-SL3fنpG,EFDD0&-/DeH NC]U:Jc3 ¼35o 5dcHV-W@UHNw91}{W+|彔d.Ӛsn })unά)@p1mrTgGs[q ZNpɖ w5%GlC ȭ :mc=Xցм0ipAi?KK~}]&RuU*޸9dL2 兹]zϘeyM;0pNl .af rdFSE >_qLUd?Ihl奄TwݦX9{ R5xLIGtf{li\$El_vvAum(g&*>M:Z\6{)egt]auuϵr 4\ $tH $lG-g_fT W ]S~)^>8ƖYbB#X|hl>fϥҸz Gϩc~Cr0PqZ\r8<1vǦMCD xـ(!j7 DA(7~-Y//R͢>7Iك& 0g r~J}w}zL\}e`ŦB?s "MQ9 &|Scw>M-2*^$G#UL\jV. Z*Tw@cJ#7Nw; OWݥi-! ɫ [9*8uN̚oUIkTyd⺶u #T>v `S=ϥwD|&n= Pۡ #TMIH]e2UqP_e4L89cXk*Yau!WRS]hr 6l&c06N~S0QRUӮ>%|<{St!0J&?z/”$.)2]5*%[ŔEvř TZ:L`ޝD]p:Վg?3j5l<uwts?u_nE{TuB[8ct{}9U7W5ufM f'큈vFz ҇#bJFn / *^e![jJD5=<%]͇1iX_̞8ɞ6Uy8S(g $$ AԊůEXw}I\ qgW;CF aA3es ?}K i\\%ݱmX~م3F*\6Z s[)¿/eP9,u>,zq^~xK=fs3vP$4u*Z9KrF VL|qd*#@P+:Z:m1W)`r8-)E]U* xd-&}pWU. Ҩ$ReO4~QSSKG$8. D^!j $ij#9m>4Y@Z[d.d\i.TuAr>'5g.f.az$v>~ܤ\PJcqÓؾ=teys!`jiy}jw^@~Ng#?d_|8P()O6 }Uu^}h!tIm*\Q;uՍpUqoV^S%ȏϫ_<6E>cM  JIl)/mJTR/J[wD3O>? AGÌjS*&Nv&KtVL JFjnU#t.lE5֕y xc?zsS@EouC}dY]ZtU<ܢGk`몈~zR%I1Z $H bd. +77E +ӡX52\9=1>2YZR#+h6st viS: 9bE*,!QD?؂ǖ2f-EmyKxE/+vwaҤ(+5q#Ce')/1쥛XqcI٣ BBqsɑ4yXYfn||ww!ePs.WFMlE3 zydPqzYh6G6_@z&#=?n<9 5$e _X4\8{  ~WOTY76L 2)*~וkSB?ǕzE BKX9,T:cA.sW0&LQ 9 %''U .ym/ĝgUz2&h^R[FcBtuieOe]%Kۛʎfv\ŏ Go:5״7jģ^CZN?RIPҷSaڶ49S464M9OJj*I.\&<~@ >St|b>ugߘ{7ܒd%Hv'^Hqa{o\]; ZVIq.A;S齦YATw;GRh2hl"[M۔4߫+w Hפ} ~يoj1dBI*O?gf =4Պ6[rW_ڗgTM>o(8'H" $H.F.gX`fM1~h$ rvs^Q>VT;{GB_7Ҷcn5;]_uT pf7Fᡃ~X9j#+dԤvFknpxNt=P_WСP?w"∧H_7Q: xR obCpeWѡk yez6$KZuףU];w?P>X]\/ Fd}s{6v* 8ؕk~9TeVHJn<5ΕRq0|do^O+OorvNLUBye1+LvNIgR]ck~=T7\S [5kGMhz5F87aNÍ}z$w^`6: }`k!΁p *ƀ(= U9Y.h 2X.%j3Ԗ4мR)IԶ}aҏ$9~iҥRNOV-F4=)dJ)۔@tR z{_/? \pNKŷ̜]\RUK$-ƠN)HHmE)]qKE Hp HsEK$j׊yC gji5 pJϭ'$*yQ_Kyi1|hpu"  H jqdp4O:t 6Dtx. 65e ٜtPjHM\qLJZ y9amǂ e.SU6֙:5vۄ8dR;Fcӣ7bkckȩBYzN?n"q *NrA\@f?Ϭoaw7)@O5f^]uCNt)y@bLǪΔƿ~mϬ*Qwv>,1Ӑ*S3:,arhC$h@ߣi {Ȓ>`)၂ "]/4l)#5 %̑A}\]*4] &)e W?۝K!v\L&isq=du`]Ԅ(VYC0S I.t/N7牳N~wִoı.FNJCwJ^N /lim Jp#kIA.|dHTxLg7D5{6ٖ$Zh#/u{>PV;pkiŭM A<$ 8#qȡ3:g\oM:,ߞ9x%&zo ?)yP]]lUo-w9]Us\+.`19R__#g: {YM}fMi>փh4bBEabfM ~v(xh&GJyuVxt[&pYU!cHʘ}p7]/98mGu{V'pg圯:LZkv5CquAKOSGrܐZB+svY%lC"72H\НxoV(ⴁ`LVK=D8sV]U.^=:) UHkFËcqy9T\gF=9LARX =h]+k=KXKu={uiiY*x/ضVڮz$*횊~2vҞfgҿwN8pӠ/Mm>ݪ.}nm ܑ@$H (p]8%`jJ{`pyO:R6,Yҁ0UH16̝JF/ݜc~xvHӪA5i!='5up#9ԃiYat Q9̚P$ .q&atن,Ho #?|CZP'YbiQD.L=W_;ss;wN( ({3F}aTl : 9R=3 ?4*nSGubįu(4 r]*l8P0g/aG3ٍD?@ɐwpv FpKm$Q1ik]5bxh*2<F*@@GtykkËu.Pȕ.Cyan(x##ԝSߔ9h#EBX +ä9"%蟗"Ҥ>GCϩ;@ܞ.D}4qr.x~NӍۮg[eZKzMܔԛ֟8[B>vOBa^NTZ& &ıIͨ6u<VjՆ~['B)jؒ|dљvǩm A! $H xJ8xqϿ?3F>DU!?H!)ƔǬ5e}($}كw?˞s Q he tj{k MltͩUYݜ@Nߑm_a~ 'YqaG7K rqH^˭` Fsp7UDqO4?v3 IDAToWeRqv} )jk .kWv t<[SxUӬt&IC>*:}`iEx}H 9Sߪ3K JT+OyK< Ne,,% `o_[]\wq\)3QMNX>DjAs|sKX>4ehfNvNssQql+QR`^{9Gd޹ QU)xq͊t?s1гwI.d Sî#m%qTBMW^5R2y.R:6P2JwK]_=z@RԤg9/ZPR~Wؓnk EJ"ҫ%YTYx*,f֝? )+~;rV [z$ѱw*kң rR\*2鉰g?t%QTrO \;*8:D $A/I$A;f֔kEePfD Onĵa=!(9Su jvw )ys#ߞklʉ&  K蒂\,Qmefc8ضqNS]Ş=4N kxH̊џ.ˍ9L(4lKCNV@QȉUgěC<#oy "2kvu&C|Qx6HpMu|eẫ`ɟ#˨⦖4ǿ\zdd.ՏSJufe~1"M^S~GX&܄ !GׯjHRѩp|D`PwzQ^k뗔#iLU.sZ9[[O&-ju4 ~w72魷KFؠ[klai2$:=#Ko_[G $v 4\5ն)^\Oڻn \ֆt$ 'i_ swH]oyi1ۙ\guUE2j!"٥[c [顎$l \z$ \4J r0#jJ|&*H:d~E9mGYoRL.Qpw$ū?tIAV̮GD_Wܘp*&~a~x S^HP({1G Tcڽl99 g$>qN7aT;g- `+]w-~ |T;T0/n~pr6:a.6 3.zk<̀%k"/Б; fNA><@-xTr8N>1wSڕ\y#olGt}.ML.|lH4HG%N/ܾjuf5ooiXa /PpE]#ã/ UJ|1\B7b!;}O `7A8ف~U ޻wUiQ B'@B ApMEĹ;bmta*t5j o;kxD9"!& <;k"&]WzYgȟiH6Dsj[$&֥wm*Nr# |rl X(W|G~o6OiEt9BM}tuy^V?n9קWvHQ2쮮ǒJ[,AGRI 3Lz2R/WDXDhv{|\HW \$̲NOpW c*<[&^3R+óunpmRuk]!yRByQ5ɦkKsPJB.LE3BX$ס&P4 4|snNPtSn =}hcAEYLd8LXT5 Hʔܤ=vk4: dKJXTY ܐ@$H̫mz䂴 =@=IO۴ȄujtTo5 YO w&^g:juar-.tp]!mZ}z'VXx@ii '\,s E8J*& 9ob5rf, ঃՖ6A\G,<~ZZ## ñdNK &j IH)=v)4AgQal$cCJ663vϓkMs+7Yyp -8Y߄SB66Wҳq.f')5wi;&5A#.eOOb:gJHV=`;j{{ |UHz49,5\=?+~x$OU&#&Uҁ`|,sJiEIMjE&_=?$Tw祭F0Ňcs㻐IjNu–1عb.ɑ~SƻieS^sowa+5Q awz~ۇg}>ΗIGLK-]^mD۸")rw^9YF$}9Kt.i(#l9tߘ28 AH $#wSpKĻ'zu bm |kyz]m]?ՔP IU[3u(+e.vo8DeS@“ Ƅ]7m.;ƮdsFT5/4_Pd1>$X%V5myzrdJ5γ@ 8wPvbQn)C+rMܸES]6/N1zHq' &ҚoN)eo;$ki&V&į>i-һ$[n*HP=/fHE6q=8Cq$jw%9Y.\m3%y>Ytr^Qx@4 ꃕJXs8,?XFnXtIߥ/qQxN{,{/Cfī T0<5@*Fǡz|!?hkBux9qeHl.C/`5RI}^F'b__Mxv%cud 2FS 1F54'87 ˇ걗${H^_ӈY>e{6Hr4fZGElTvkkLzwby%H >H H%ŕ%/U&3R@^ :{er>Jzָdƍɔ|Υ3UY6?u<SBSv(I0?R^uKmb%"*ԍLFdKsz[2T@<WKBmc3~ hKF{;H!}4D׃VOXyəRy {Mf٘X=}G$+%M*tzLk!+5{t&5C׀d$nR8 RPO"k]'ӯWoZ9IJC$=S.Λs^scPjW1u]=7WNEI|um5kf6ls/qqn`l:p6g%_/mbH,wGT5}͠xhcj^ G]!%"x՟Ԃ]s=~-5n`X<ƫ&?aDPc>#/F%N ͢\U+= yZ08@"x|5lԝ4(7!յoG: u-4^ô֩ׄ΋) 82MRP:6X2ԱN;Q= Fk[*7>d@ihH!GCSXzq=~LR3n]_>aD%Aڏq .BBoE -|Pҋ}Ff :I$AVdd,$o/,ƎxZS: g?vIG$ Xɧ$c2ML):}k0)l?nЮ ڡ.X7x m@.QK.6 \0%]7 z`DZ:c ǨY-6qF?c$hZޙHwY {n*sjBQ0-/Q}Y *F\BܤKi`߫3s"WKs΅ xMxdp|^ q4Ϥb*3*}^E ʹW練^AZ4mdx]`qQ،.;G, ܧvF~xRieG .Mk `hJƪLOHnj-j\6*yAGWc|]Q(]GG_9]fNJK;.>qR HDzz\ձX_{@ܢ3eĿ.!gB! ؁=Q*pqw⢶};/lL"oHdåU-RtJD2HK:ol?ynw^[mjׁRCf¶/…osiio%OIy ANCRI \6 ={o'm`bpBNef=fj@Mq=Q rIzo.G' %V7 jоlaNc%6n1ubp,D(!NJŤ}( M ^w+}k\v:X7|8Y$N3/mrxNӆ8IqǨfz1d@b)#ӶC2OiIPغj+cSeyG չx.4_F^NN_h1q'8MR7ZX7V70O/sR 46c# _o .1~DfAQ节l.FSNq[}f|l9>̺]YG{T[K==R<_n~_wdž'+ 3g.7EtAݧBsL?&f |y"/O}ћ>^o(@1ڡG{Gu.q r#3X9 =]>!]5 lW:-˶>k>:2AǂvYS[[=˵:\do,Ş|f\k]+yʑUy<!wݚ`>\͕35ͨ\HI;0rN"Aڧq>&o j!V8λ!xѹ"uHkCnup; tI$AΰmMA`9v``nn )(3utv%xϡ7%D%͹=Q{):&f=R|o L%QE 3"^}7ϳؒv. cIG:gtDۊ}%y~j7I6ȣ'{\D\Xk䈏`q0 .4 35@ /6@,Ca62|duayb<[Hŕ֨\ J嗚\%o(c[oWcݞS}vl_>7B}\$Az|8jtֵd횠0k|j'V}s6#b=A鲦=!*ht3jɉEDw>wPc)sP~TOHn=3SJCZs1H[݀^4E g7RRu76lnO߫~ҡ QzZ} 8H݅TGƸ}Na62羟_ BEZf.p[A9d#䲿J)gEkw흼MW/vte҅ AH $j\Uׄ^9b)#Dm$ Lw]U2aY.SBT.]-uJ X.9,tx|-.\IMH]<ӆÓ0)Ym0$<09tń^H*gZ98uMoQgNȽ0iHol.9K"Oyu'q,>5ncJOK]ad&)Ć}gŸ.'f IDATn i5̔8+5A6*LE` 鍥ӆD$N1e0b ſJk;gt!^xI"]49 }ޙHe{AQ p}ޓ /* dlB8];ޤrIґl΅p@D:F8D>҉#,դRGɥA7woK(/o 6%TX'7>xGQx@'ib"@NwTX1 ֕,u?̽cq~S7U sG`ko!(nuT_N۵\͕SYYBA&IrQ͕XAcHsxX]#/}}I=] \dkS0kT~QݧD1i'D}9Ʈ.!{" @/%HCRI ApIVKA'e5'Uep,VNr&Kr_Qi)C6[. -l=R2צ*A̶*l:X^nrVI=N_<##PѓLKphJz]k[wAnvhm>mLDW%[\1Pwd+uqI7Q=F6CZUy̲`,P[qƔiL(oԄ-b!E,v^N}EUJiHq}a.$ѹw!Xri![͏f5@?wzdaxƛq5 t.\@ ~=*ڤ\z&8iAnԓ-Xs863K6]cړ6V1rL3"/7n9gܱEm;kwale3Ř{^Q’oI^]8?2!WcSwjX&f@Uݥi`@;m 7pu_3ysլ:BZwὧf,wf T *ܧwbռ(k_g-+}z7܅ˡX&nA6iocإ\u#0LҶ@4Nx%No+źaCjaB> )eP{"\뇇<K,7\z]B.$N_WkW{E |1H $dq}g"f|uf-RD+Ynuh&#q!,%ԄƯ&9z.:\S%h?X5ֵM?7:b\ectp;'?g y?aDM}sTݲP]B\J&RUX2 %}rX:WԿqz7\>Ax|o yqHK >&#ޓn ӆ`S݀%yhj&Ou= &8I^;]uWFމNun,Cُ#: &ϧkfw3Ԡ{HS5C lBerDCc{T6i*T|=8_hS!hR\B1%QS,km:i&8 .~մĕ >c\<{J 5CNV~=xCuOyQ|XL6i09%?eKqH\,ƫ励a+mlIVEVX=s]bcϜVY]U]n R'QgP>0]U=ǦaN!Av$ tRc)szM}s(Nײ5}>9uMےR˳jȜ BɃ0kdAĠӤ*%IM mC*|hrpNU& %mqWY ?@?Ǵ8Su`-PULr$.HqRozc{l+EzGuz9h[ؔml|qc2̔uf>]k$cȭ -nfVmQEdZmc3k[SC:)}DHĹW%\Q1g}M7"'Ü(Z$Ml5<82_D79zzL0ۘ]^2wIg}֨'wUb"<,[/U b\\Pt:;+8\,@Y~X#@.}%],E(u,$)4omOQw>>o$up3q${};n"qLS!8qt/}~V)uOtCsNʡ[bAYێg t>kpz~9]R&b#D$κQnj˱}͙J Gg r1<;T(Jv s |ӁZ`hlkUa0s/e݃9J6KDY Di.([4Ý<4\ MV~*q_o_9%տqWe3C38~*+9 ׍^S*N~ckÒI%IgS;b"r,p'Fq]hV!'9d"+4^L*z>> J`$.S މ?:Ziu"גBoƤ|Q޿X I'H ANM3 ] s$i/l 5 XcZIbK6ܦ;_('YJfѸ%8ZŦWuS-k5FJ@?Ncv~*~ qJ9oDTLk%D8Htd]˟,-~cƄ2u*wKJqeK?!uq@2L$q~m-few\ zп~Q "6F ]YD=9_.xm<~s媄_0(E^Zp!b=^cZ9 sFE8Ћe̶*l9T+>M!>. +d#g35GiuA~G㮱#&ݜ$׬Q#I_.4_zɈL똚tvоb*+z#jmt|~1%/.$>Ġy=íY>1Թv{S*S!Շc_[#S>hhf +۞;EyX$vuxsK`CV]3ҽ^t)wo厴«{8dLlM4FI uz^޵( A7$ t \/[ }V}sLeK2\%MLVq W k՜/.HOp,)=(r D7s6幛vu5g@Ql__a\J[ՔX6RRUG͜MWt9[X:m.߮rހC.I%;bbe]c2ݘ 62,֋]RqCg#Jg8['ſ\J{c@^6X<ӑb.G)8YIS' NmBbSQYT " {9V̒6bWxT;/vDWT &| s,OAdp">p<*~30H%h > }D%Ig {]\bI̔:GMPkt1P^T*L+zQܡEj!L &cSG'{)d#~Qg>+&M] HMĺYj1gA5'|b0~xKH-_P}s)OK[Ta4#H][G\de8 i ~vG5JuާRslZ#bػ.7BTe^=mu&_F<P:y1a| ^7As l2a<9qM$<(>% $")$HS m>u3/ܶےn&j:ꦅΓ3 6V36\ ›[ ]qdMܳ;#/ƣ/Ƽ41c:L,CmUׅE4,V?vU}Hib!A\)I[X+(|⾊AFؘH5w^(mRZڧvlՙ҈W8 ҩ5 *L)^:p69!N7PF}c`u…K- PGq<øyx]9#* t I$A)qy6ޙl̷=;!f/zv/ţ2em&A),HO2qA@qrXn1u^>a`2G)%lSuǙ|6 LВ b|w]^ZZXH,IYCUq{jH< SǸeի{e TT$]uY;nD *Vw $6kpB1n'uKv6>r&̺an DF%S3S zRѶ$еsؚ8t1S8 :>5I%[,aQQsG>VM~Zx0 mQoKIݽ ]n^9r/?#}BÄ}rGMaMCHumCmcs$etJ+bi,w) IHIb5\W[+ڋ7WLe ^JqBeJ _ʙeAե@ZɏC~9ҁ3N>VSAV',v1-@ `luAwun!"pkk+P^./m㑌E$ u<04t yVq]lo?1A_Cl獓JNS+sPMN.}h3u_.z{yFY1zzxp񘹠'Χv'甴M],*Zl6IL8t1 SkK#(.ꕃ5_aKf-Ld7+(7,4nZ`M԰ M߃qY@ZAMBup XTKagw?O<ܫ;TUmm׏*Sq|L@NV*;N5 !IB{mnTB4z EBGF#p]/T j'[(9wIO>b%Ip?$AGRI Aưa9H ?&ONVJLRB@(Ã/nuIH5ԽTHױ 7#I91Wi%jcvC1wii Qr +3/$~X*W+8OUCJ{3{86ź%yI{¸!XCZ&sNy(m"ɈQT u]CDp} IDATHƈO{$IesP $ȭI.]Gjųv/66O>3JqeĤCgroNf̕tFhk^,f=O}D=X`Q{],tL0.]u0yh_=塢sSN2/"WԸCq;'Ibfk?|Y/Ac[ko=>ӤތMvNV M-WPlL׆ƨ5ÕrҦWnf3D:.v7I?Y V~(H@$HL +_FV~sJ,= p?{D8:%x5m͟!,ꛆ`Qs]&QBb}?1} >xZpI)Mi)mxP:py;TQ4V-S(2[}wOsG,]>9A`@^vбr%f͵}C-qֽl:) sTԡ^ONN$y+7kŏLgcLr=YIJW,᠟qRHHN9K"N_)R %lR~sH~.뀻 6|A83Sߓ|o~Yy1s߳bؕYL0Ieݯܱ yuvHPlp&ftwHPt7GЋ5mmbesPc ͗J_LԸ*[#yDH=pBoȓgB=CKԪC7>}MCKzk%\1PӐq5¾SIm;z5V'W4)؝f 3U b52eE7L!>D pcL2]7*A01 Uv_y͟>~aߩw,ў0k@d{N:>~lic7dnD8eK-n*V#R{C+G6N'}e9oZ쪪^׋*\`Bn҇eUrR }+G>_\b<ȏ#k~ϣ4 ^l;pdfR \q-1,Q!l-)3U@f-ml :AOBlUw$u1~u]wܺdn!xd^S4.ܳY3ۏp{I߽sD ? $͇jcK %d81sK Xnsh풫\R+T yhEyXt$2|)1֎{L]Kt $S_Z2 O1 .ݬ~FnX-m՘Z7f{%IǩOyȄi\;un՟e\`y_}75Yx[}Ey{lPawlqOWsy#Je mքǷTbenbt Bi/|j1߇ҾLێI={s}{:U8r'{E0m#n!;A@$H&Xk&@f 8l89)jsrTɅc؄PGE.3% .}\BR5*kw0<@5ZS5[4gN׀)zט}(%d(Q57&d}Ng z]TKҍk9@؟;l8ekE5x~O {ͥ+o7__M]Ȇ%e{#f11\ _jB饃g #͡q@pߒ;ێ]۪0kdA%J#/ȄWOs ]TTp/6R6Abwk5dacKCbvy>^|6gK9` fȻxv׈M(6pyjQ+D6D WK\95Dv<&>*.RownZ_ѓ\ h]Ӯʼnbͱȥ{@No½N@] *$߫'_99Qv}YX1 ?h;q ީn%y$ uqӲ%9yQ^S\!nz6p@lXڟnaRUj1\nէtquoD w=32N8~%ks(4ӯGqc AXhqӯx @ԒwԂ`uX:hǠ&UmvJg"/%Ԅdmc3Von&ʌlpMp@*z}a&GgIsD:e3MIڋUwװ*Tmq䞞$s-->'\>ݬE@R7h;vV|)!2O_2{0m~'dl]{u|x}}銺O.Gp7{ٔ3 .>|Yl41I]}W1 Ds$k$=_<.,k}l*' xx h"9-P\ u:F =7ls&fq|8Eέ5jkWoYy|s `>!.-҄3.X;u_،n>g@+:S- g,bMCAX%Ԙ JWQ?y$osDݛӿ9T<}nWqM!&OkK : AXO.h(I~=-x)Ct5/cMI~ϖ7.`;'\JMh2A&'N,IucgJN-yb5 )ԯ]Žk”4Խ(tbTSsԻsw Ƶs`F p rҁ3 W!{ wwd_ iCzPBf*;ޔw\`d3U_ػ&e[(St 6TXLS]oS5HJn^voJ&՞j7IN5 W9Y@F) }' t/S݀K['C=h9$Rl^d I]RBu%ͼ8!}s+o,~nIW׾97Rspu}X]su{Nb2zJ]x]TgW b)'_y8Ws KM .׎ _Ե,W\:u.bu{LH󨪮 ߼Ov<>.]!.EC]/$OV?-w/<d<n)/߬:"L-Yf:E=}.s~7^ ̓L1`ޟ`p˪Wp M<3Q\iN{H{p=imұ=n)~)Af$ Ă! DL(bB5S[-ifE ndb8rI9O ZD\7uoB=$~?7DQ6;#敜,]+f+tH?`N9or=Y،rK.XEێ: !ni41j#&6HXnC*uI_^<>o$ {F"jNJgH#EAbz&ƛ? n2_3]UH&`6a ]< Zc K{پ1A1*/jz`J8\["KNq8]L@w:f~ >_ݑ{TQymGχ+^%&Y58WіV.)WuMw7krg{S&_4&Aܨ'}1U-J:3}(~Q6EoVJΩ01IuJUAn6z]#:{2=BL&*S(ycbTk瀍ԣÅAXtˠ5*n>9XqH+~mL ="dX@ \kM3;?|\T8 )Er&'+og*ҵ$RCpBQo;(%tGx`J)!8_]3ľQ\ -AF#|{,85>.\[ĠS3L*`p%];8L/Cُ_9Cy^Dj\:ީ;u&X t.H bCbimE&W'LJ}ʖtVf:r;D^]M/s grלDAnZKg;}^]zq)\.]/4)g˳;_>*vr1Rki.uN'\ 7jLxcxc{l+GjOJd2#) z"1nCSO*Xf.R1k WX6cHSإvMMMi{r]c4D,El%׽ I)V00}ߤ@!\$uk0ol@QS65NȜˆ߆fRCP~zQc,ő+$BQk<<ߟ;M-W}ߴA]:8_ZqL;͕S+S__^|`r)?!}s:1ۇ`X~ [ $8H "/%-MQl23), eՅ56mlfAOK&jQE?wcaX9 q7) vKǮxRҚ"8f뵖eW1.l:N~h*}fo?/H?\ yp?WرTH(/ìQYrЇqOVJHzzg4OrUp&}4z\5vI [6c&Nisp`bG5w<\HkQЋ_ $џDKΰS]<\'֟>f\$ ϥ|{N& ^ 5V+&~i;q ʋb -rQLVC)z]/R9 sEj*uf I'\1O&kYK9M~d_N trԉj,(qRcnbھ׏dvcxx!dhv& d A.l%[pR\rDk*SKI#[JfYC ?M š@s *^{ª( IYJۢl' i7sJُq:[*xEgNV$yg_Cg"I+t̪DSyQU`ݮSxc$jsmK>I8R)٤ກl2iFI= Iz[a2{T<^E7;x%ɏuN/~H y^CMs믴>;D0yiZUϳDlIM*g;N`QE]!!}g_[,-I!Iv'xa_~;8 tI$Al.ϵ\9共J>]/Y>2?8]BӱN IDATnVa{qa`5"TjK%~p:/LX^'4a h>n%x-K(]Jh+ƴkHe٤q-% \Y$2gt!6UI.nm~ިI<*Y>iq@)/cJgڒ.IJWv+$N; 'p/Ft/M*lƴ5I'Hk͹e;& rR_Y]$sM;0p@ɕCs_K\59o;Nuy!}c^ihOr-O~?{I2% SaFKKG5GJ^TW9$Y+D/4D@i\L)/GZyڻ=) :݃nk1_O'_;<9ymB )@&شPLu=$A}F~MLj6o[[\e 4',tHeh=~Iߤ5Y<.~~NVi-QVذ /f#Uc!ecӁZjٸAQI`?b*vg;˪H}p'tXon=S"6K>͛bS盷F$8= `<9"[mO( Μt{N@,|peě`.IJT4|}|.7N+D>k±HVp頲$Swo^ ~ٌa"CnV)(m"Mzb\J.ˍqp|iZa+DXDKy uXei;Fd:[ O~++/~-TX%,פ~a}<s?eT&nE*)l¦C~nYjp.]\1T̥kх `BqH/CgHfc֨p9x<.ċ oȏHu,/{Mu\MQ` lBCKP 8Մ'J\hUxdq`V?;}ga_y׹vLi`{n*Fa^v"C+{\) >ORT{L]ϦW/bsF;ʂtFcRrFsB-"w}v{oJ6zNsҚQQ>]8*sr_ sG`AYH{:pU HsWE @^NeJPt5K:NxmP]w ;bnr@s0w$\$ p}Sp+au_+q7'X/'R]uC*Iaa }#`ҐbGОdvMǭ#D|[e3dm,6z[`&&Yd"{憎Cc$ K&q?In~WOfW=iu!lSi3d9bOiV=gn6um뙎YFH-bs1yEtkHv_Ɖ\H:|7UHFXdP4tNN$Z9tpz |^uwT*?'UymJ&,WKGC,;z%"^OXpS1>wܧh}ۊ.^R"Ʌc0 /ZZYcIP7IgJ N KE׵O_G['gտ'XLr/[qɃ0j@ORKxJk7z8&f5<gE)k6z5~Q&4 1M(!-H@4~$CӇXu='טJ>t؊xX w= <^'~۽મ)4^o}3-~L z` i%Ow);~%*Sq),!.{Pƣֱs:P9؞ 9W >ҒkwT^}&O_;y''" 7$ ihf_?x1j,eP8ink T {Li_jG[9 $2=9K4b. i{sNbFZ)ꉁ3O#yF)͇jIaLǫnd0\zlxN?(j=/g#)L,χg g7$B+ &WM&BKɼ=_'ڜpyi=c͞SxZ`#]c nbpiq&p~ߘ2MvD \o :y9YU -@, d7WLe7 -i[&I3kP>{T!5uH 'Qx}p$=;  7ێ?<G\b M<|q1*vF9Y]U W֭ p#V寧aFobn['>sNAԥlI )WnՕeǫ% r1^x>ܚbؙɭ>ҁm<,82aa,l{C*JM8. Ue~~A?TZ1}SnV:Zvӡ,b;f,0LjA ^^6p ݋>=(ʼ:$H9H H.~i촻gpi+^HL萺Q=u +_ j )ubtK`sLC\&BL\JNC|?]Y>Ld쫹}5&RZt6|L~#f\<.|(=RwA✔5Nқb;JZ2h%M;N`QE ;f V7Sy]}._w%} 7QEXWm X^).E&f6IGT_YqWqz>Х Ylbȳ ng]"8yz-Y㯌ƽɉ0SuY{xV՝6| $BB !H@ ƈo8RUv˥T^tf:3˪V"jL9HD J &pAC$g&?щKF]Wi!7=uoȝPǿ0ʝ%6 6:K7#RsrG$UPL# ~nWXm I~ku\|P : (#i)Zp]#]`棡hNՂ0YwjnԵԜm"i@E#h,S\J\pнchq]R .AZ|aڇ(ŋ__pqgqIҭtIC^@oBnpX8'֢~Ե :!AS"~:i}NFِlDКEQD liZ!u?6 ;ɀ0l-zF15ww=[ jՙ.U} 7_us4k'v>t&ޤ͹=gq^/a'Z,ƘBI.690$WZyM_{P \قRtS6<_>ĺRI[s*Lh ]RQ8ۖäsWh.r {w;.͡6tO'nH?TZv妧:DUP<;Kxz6p 5ה2UūE㙞xGɨWW\d(>=:o'v|_*jaњXҪ(BRr>>Qt>R }\E]@ã[s'К-G}'YZT̟Ry wn{+ET.IWK[t$(x*m-dMc7Ps ٵS`iߩsB6>qwWX*'uO¾DAR^fV-A&:u3B xW?<:u3CD%rw?unQ;*TʬI'&z4Vp '_diy{k|[Rb^QG#@ச%tsO,_2,'xvBF. *#)ڈa6IB^;m蔾V*ksLY# Io͸HhM 5[L V엎n.iHΤ-#v։&C٥]%̱2cs|ҭ݀K̑9"9hMG." 5un8xpu6|1xxZJ g/buyX~6Y|WNPIspS}!B!JD0g̞=cժUo_]y쮩Ǽ*pg]ql&a):,C`Jt4 }G=?AӉGSA $g9Y+.q 9 [zӍtI棠4A[+-\CH]Y@PWYOǴT46%:b>s s*mh9@Un pȴj6qLUs+dΎ{n*/i;tZ)\{ļ1itpܓl_ruM6GAYߍd:jG#% 6EAf/{?"X&EO8[³{/<~'y%<}hعJϴNNۼ(M3mδ&d42Y {׹k sa{U=gV<=׵96˷xa^%6. ۶c]A`WeeA81&WX0\U(q:];TR$hmpM=<ůAN80sNmp]*6 >XUq ߘh%dp<'\-aO9[ &3w+L<~x@ d:nmWy]JWWq"90yD &tP@})7 ViʮΊ&Y ;oJo O놓LtJ2TaN%d:`z +=g{iˆhۣ)Bt>V6U -%*Y6Y2C0¼Ʌ8E{Tkqg}zƐ.@a[nz*8ޗwyJUnox$ Ŷ<.0=^彏)k?S18)%?80S%_.칻.3 Mjo:!'i)1e٫۫АE+2~'7}$=orJ㧓T&g@k2jwm7]Ѥ;`S.hZ'@AV.O WpA7ݷc$a4RɄM4}t2aLjq~+ߢ*^'^M_u M햣uҳ|*CSaq a畮`C휠(쓎=mI;1D*̻6JE :)Yb{8y'?:8*jyEFe#@Ϯ].UVlޫV1rd~stk5$R=/'e[ D#+Mg]C2`G.haM?qrrB#'?ϟG^^ޗ:+q3& g(y U=[G:@0 .ߩ:le3fgs=Ԝ ,$DU/O=ԥ}^CS*)NQu q7A+Σ{o%T4"u Ml@sDʣݖ7s]W'ı;"=T PLNݪ:b~߸W"( qG9*DCɎO>I{|E]zO=-o֮i3SUMsMO t5z:B[|@ l ]RO 0)$MOţ<A&*ȸ`6bw 5Ш]jxPvoS t\]$9sIGr=GWVWkŽUt.}x%=ٹn\1} nݫVC%~Kq,\{bj޾8LhSd(l9| .md> :)Y䔟Fy5z+4mA]{u¦ˁדkbuM1vlU eCOǧ(ʆd]-¥"| HII1cn:L>DZn:<o:uN:}ü"(xC)SBp*y(㗫 ' T.s 1RNuVqs<`ܫ ¢=jrt|G|Onqp͛xhׁͫ ΄SMpV1g/ޣq jceLr6W''SZyQ.Xߘ]:0P&t6ԫH|dE!wWξi/ç|b/RHhrƶA|R&H[ʉ&I/lWRuRG@汩7UwI|ж``sۓs/}|?JCKb~hD׬ vW_U K =w,½7m֞+LI%.Eòk|[M(*;&1wOPdq4mqm k٫E S[y4I\>sA؇b@&xC[rVm10hO?6cz4Ҝb;JDG%[|jݿk4$)ps`Z>{^ X(S ZƁYiw;>9AM~ؾ#Dpy%@"|c?яpbܸqxꩧ؈ٳg_]qpg- e!n2Փ@ 9G p:eleFgIAO{ \Ŏ:n 4s3HΫ۫}'eZa몫\ N1l駸 KJ_pdW-`{ kɀrS Q-}d@֦* H0^y&q)O{rmӡSS^.&$97vMѥ#g@B@6Ӝ ġ!wِl`h5KS?4)=sh)鐬M10k^R_9\AXj\ԻB~8[\()艒F\0Ɓ]Jw\='Lv:Od}"Dj%@"|c1c :u ?8?QFaڵaVe` k[e Jm70 ƉqRz2l 9gbeLE54Y^bQٕ B1vAU %'$ı siyS :8ާ…_hl GT?@ ,S뽃 3sN.{`ٵIn8tt/5A%0]Nػv$[4xc["=Yhg@7GUL\t2RX2x9A2M/XEֻ ]\Le T(|j%I\} Wd%T.CMkēgO~_(?A mlnA]CyLFѻL\˧'w5}1n`fFd^\UtTNL|̻f >sc{Uܔ0ku M8|򳶮;+OqRxxP@+Ļ\%R;Ng#Zt}|/n>DT|K9aCOU/B_-Ho4x*Byާ;;OAVǡbqrِlRS6th/ tz\eL$,$%v<|F][^#8,_-w?jlM@כe]SO70}3hGox?XR&t)Nn"cָMnom6|54TV\"#̽Tf9$.Ok|AO'ϵC{M( ;CTam@J=c30twܶdLi^4d{6J[rRwLQ&,$Z|E s!5q,/wr:ww\%+ےd<ݠ~νgϦ æC|>шb2jm՞M؞o9;_*}Qjźà }޿u4qoD%HFKˤQtAd/޳"l2v~pI]ǼySPkLW "ڨC붝:(\?TƤ;)q)*.c[_g.v[7G7,&۽ \y~XLz0 ,a[JdF"JDE6ۯkehQBx WdZ Tp׳FGQ1T0'GQr ATjV+zD;9e$S]jԁg\1\cra/l0/URfNiLQ&T5uc&DChJAڙK"QT ۫}qO>IxRE Q"Gc0;ٔz ޭ<3pٹ yS q泋~va#-V%B47 ЪH6K !bM]Ouߛ޵1$(M1Ɗ|&"8LW%m 59gq a)l00[M&7QA6(^om;cMOŴT468q` uN_cZq:.ITA%'aƠR;_~F%dy)׃ԙ[dS+bwn7!0b!P, 7]O7M Nw~x8i@w*ޔٲ"\D "*q^Tv|~xpV]qњQ+L N{ wG /7=ɉع{٨G\EH6EZ=VS6Le{j,&˶G`ӡSxza;׶ҧ͛j}~̟rv bKE D8UJtqg7eC}$]WƬnMt]:YO%2d5>=R0f@ylBs 2,8E6Yc xtS`X~58U' Ysl~zug`RbO{6*Sv54o.ڱ4Vg[\,x}{Yq]F=Ky01iDw<64ᡅ;d'SHt2 |~}9yD:yrQjF׀(!Bs 0™0.FMp"/33acŎ<&٨x}1VlFdVBM)Ģ #X^ca7wÚ=ZWʵVxY3J^sǧsXL.uȤ m9p泋qqTwbvtH$2~n}kS|Aaů?٥xn>J^*^z^e{q^FRuQ]Bڧʊ%G PԷ Ɗ%}T~6B*^|K󯈓Ii)+¥ $: pk H<L_5rlTqί(hzwUHׯ&ר-MOEِl ۪+Xuc`{E)=?.D Wx5 E +Z@[:-&npu rg֘uhMv.WEBoxdp5|t*cqc*f:֫۫}ɗ' Pq0(Q_gk{dz_e66Uz@M.˰1.VY]2t] \ y^D)AT-ա& d&?bylUb:Ѐ3J_v!2e{"D>D "lrUV hߺ&>A.gDo:t XҦ2S'2QY:l)bGU=2*|2oJ!=|l_an 1L1o>;ϓk1q^URIPUāe2 kr@ 5!Խ ;Ԑ\G'|N6ݾd 5PAxiQ_ I:x9s. P BV+KE9/sc7|;|Sqpq@y.\qDM' ukK@?-.EHqTE9œM wR 0\BU~w<9^r7.UU pSM Pwt_YD7\=Cf[m3IV;Lxxn9cJ~g? +d]6$; Ce;> nS>edvKLvax怶sLZ<=y"ʆd{A`JB ? @ON~P#YRl:v0xJ_$U0o~Fd?6q5-W.X_i-،һS!B(#=:?S ]}&<w\Y3@?9*޸K3ǹKXi.X_}!_:HBA5`e80_}*+Tm:gMT$(rF\X*+,SpzC]G6,cgҿdk*};n=)ߣ(/jh\u q|Gg&e`5Z] 9ŠxbQPu֒I*F!<HQФ l;. TL+`'G9~uld.oȩF\2TV[QT_\\< ̿M,P]!ܘJ&l6&b \hD$ WTn wGkEn75h)ma6`0)X-+߃y Z¶Ք=wS^8Rgɱ\h#7_khz&0w7&('jDVsk=g( ؒrrMm˥!Bp "D=X@Mnzj Y6$  |m ap,7jdS)A=  zΐTVM z#_lRbjDTvϽS=0cl/87=գ4@U=wG 8y:Go_`\#n ZC55{hF鮭MϏs& ;Ny{)!ere X 3]{  U[U#HT366qE6SLf,arX:mW,<Qmy_tp9>:˾W9 E7Lo/7bhבe]@tI -‰S:6Vm"vX:| }c$ζM#s8C:wԱ s~\~&yK ]q ѳk'V{禧NN",v U~|@ N- !Nkzv.!sɏ陣186!&Vݛ5`S \m0A})9L"Vx?.rD;7!u M"1ECY&.){4gd~K릉wL!BxD "Xæ;IMF fNk'wuO6Upj{)3)m<"}{ Ce UH(/ᐩSF0l)*.Oz*@[ii)pI.c&WЄ;Nս39Ām 79Qdɐ٨JJ̳ j?{ *JyOA>!`P;"AxJc/r[g~=p˰@B=/ ;wBA:@+방?-'WV|SVMؒR(/ϕrM./WrmdAn?]UQ\#.I"wP;bj5ov<6,%1rSh0_B\n)9ub\NMH f{α) s8/#M݃N'D&{'C0hP8/_7 }˰\eyT’Pxu{514%Ee02;HKᭊPET :8woKٮ{5[ {aάfo9@^fGט N]~SV3ܥIG[pΪڞB0brHda܅GQmS ޥSutI&?4]AѦ}~_ "DMu O j8I;V s91%sQ\peSߓ[j0ޭ}pkq쨪ǹf<>"E@WQ" 2]08Cܢ5Drã.f j^^ǿiHva)lU)&NMQg[ 9 5Uڛ s|펀 ํ֕r /hl%af˻awM} !\Ǘ&9M.6[Y]CS ӁU%IF[ Tk%#b~K>o6Bӹ >Uۗl V6]8ч=M>khȾx9ebƹ#Nkm{Tz[KnX1㨨=HvdEuT[1Wgaa^,^D榧bJQu7,~LB08?~\HNd&aņ"Dh?HBAe./'F#?ޫրj<ي9>+. rJTvDJ:C'iͽKީL[8^3/Y]SH q<]$?0IZ̤a[f,\E,(0oJ!٥" zu!k2b@[ǬgxMdͽU9 }S1pbn:grA\EWlI[2=65:MT7ԑIjN˭7 wo%$?R6zahcKY{ɘs3_8:[qTPD.QoUJÑ t_d{MJ3ttre+7Vfj*ec [V&xwju$9Nuǣ]XU*)#rvqŅe۳l JlbP99zsu Mֶˍ(}1;HlH6U K񮓲T oHG^n:|ග }܅G, A5p3 8Lw[[Z>Vnz*eu!#%).V!?05e{U%=^&IcKo]SK2_P1ʌ3[>׀| .8^rKtXyx;Ht9])[.BD "XC bܡˋV]ڣWǹjk_hR&9pu|I]عQЋ& s Lrbև(Zn6ARYI8_N| M{ PD:f/n>Ux&ev㗫'~>c Wﺆ&vQ0 >JH!OqsA U3 >TE*TQ=?u_&hVœn^I'FgP-fl.Z-W=;[َ֜6oG=dzҁ?.cMݞe M(P TW"7 S<賵Q(uyT+Ab^㦥ļ 5`?qNy<-gU\+)k=uc||bIS֖(5r6Mp_\WH_ {kW9#ϞT;:w}'/W76>`\`L>PetE$b{Տh} qRI-PTJr"5 JD uUUgsAqq񡣮iʼn^CG(6ATm]nq]# MU Rj,򳖍RA׾^"rLDLjKqNY Q+>ՎC'*ȭA(I^;G*h*5TEql/' _$:9UuSsBs%=jFyQ)Sev;qZp]w[lHsp; |F쭣:2apkq_RWu4*ğlM2TgY Z$l `R^>gCU_1ʆd ^3&Ez_:6&s+xCe`nَM>O{ b@#-%#([LjE[eT- V2Ahs4eNK~5=+L, mUq TrPĪ-]Mk2;ﰒO"y#':[Wk s' F*Apު8L쀦M %C1\ِlz(D֡ li~ɞ3]^w @q^1j8SC\i?PRWhA%Xn}ZFyx\Ͷ{[=!~ ;`iIjIuo:r"|S%@"D`0!a!CMOś6;>'?w wT/lĂ8 \ }6)JGsAF8|S>N%I1C9a)瑺N]:0P z89w5=WYUB^TP#WyHA]60%(_}db@H4=woA s}{U=9fn9j*`Anr<@"Vo9g5_(h`ﶭmh S}us墐Ы 4qchq}U0uRTpú}^^NZZau}oqv|\1MIwu{ J we|t?ܢ^=?ޫ M Fi4dvMa6v#о¸8H]=&@ INkh"*(6ql =:-(z|ul VDv̟Z+뛣Z|ͽܪ:jwLt] 35nD7E$bQ.qb#Xn*ZQ̪WSEA3wƘJDkaE~pVny]Gqޯ\ӹK$5pemɈ "D! ~VVMcP|\KT[Sbe0~0w*QG*uO(h0N2"х|du My9ƩO[Ivs%XV* lQnM}WݩMRT]Ada(/ r9\pJm ?݈#]ι;7Ga-Ş?t ja㾤vِlU:넑iy >G!_ ]rS~LE2k$RnB N':ˆd.]`7fcÁS^hO*,h}W^UQfd(A".G]"=:7='4OdO{"Sl:tH#מlXS)3hݸsgwN*pP:lla5`ETҭ`jQnm+$O3;Nq]ޞi!=}t 9ŀnz\Bzs1_n4k\o!T5@w >Oe|O(p6ε~.qez0IS }'i3DъN&XevF6#\|xP uMj+iEMF!L37FK'_O];ɸK'%ǹ`6 $I#rгk;Å?CYQII!/Kh <0mO Ђ|V0[`,&J&翶]:]12̺?s1 zlձ4 h5WQVPu`S $y:N=݈7wcm[Խ)!Sgy)8$؀c9&6 sTQ.xSԷ[&IJgq+:uqC+lդ:_ePG^)ۨ HS55Wj*`f-n# dCEXHM& VuBj%6/Ir6E٥w[v;ku b fV,spS qOYs~j]1ϸ}87='n*1u&M]"ۖjU7VN\\dD "XÆ|ޘ5&?Qic)h@޿):AC᧌Y8+iTϟ\Uشt#bL8"˶`ˆ\%KQc RDeVvrXN:`d/2sQbUEʋr}E=3O]0CѷG*\ڝL57+ҵ H̛Rh]QE0ǏNx8t<[Z ʱWa h#&y_\7 dWU-@rtyyK-FX pkg#Lt.qys{=W]gTJi>tK6Tj!IREj}.GڗZ$Rwm'? 쁲wcd{3:*T&l˷=A:#r}]Є42I B iBsSJv_r1QK@GAh⮗z|8y]SFkBjqF}g_>t 8iK`窮BWx00+GΒX$u·.a|,8;]O%m:⚩B.@%R [M*[G${˔,O٘"D< "DZE Z689k\Ce2/ي+SryNHod C ]*#I{E5Ζ7k ͗pw* sk!eꁰUpl-KF~c^GeAUv IDATR95ؿZ) #rF 1h%RAqE+@'`8Q`{^6l5$vdgԍ!K a6Um:t k9`5Vg햩BtSk2}7td#pսs(u#].Ğ+4`=90E2_6UZ3zjLS,l5nP>\V3j_.x8\)- =P}%(]$#gӆa [{zoUC!9]V;Ӛ![jJ&Dl߅bLaݨϹ/CB2M*U}H7b CclFľGwJtFTi/n NϴvÛ0qv,ض HQxeyl\%iʈ08?A.e~LMu$݈REU6GBя8u7cSʘaISeFjtn, xJmҋH& & M) mk~ՉjA%yܟx6iJqV“.N|V ST*)b#v8t)0k3<ѥ.|K%hnz*Yvp)~[%=\t)@*5.jPckˆBW!]@*uፏ|A&R؋20c ^[P@ ^a-EU6t u {ALl_~J79ೳEgs0[{uD:5xfvNJ˷UK]v}}lTN;FsMF*20VEysױ)TWhԑkB$gʇP1IdmjSr66ˎNuyPsiS&ڣm7uMN5.Ut&u Mx{_GxPEEݑz_HB r3SG*#74~݋V⺀tl9?g׾AVUV<9$W̚&: $K.! g t7Ɩ7*9L@T黇OaJ}Q@ӍwUzİ>PIh&i 9|grH&gnZq* by'9A sTďLeB󗫅jU;>6Sf@nz*>B =rpL'T,>޳k2IOhlyiOyupJ@4%'(p|bG}`muH툭LĎzkjFFZG746:2\O;ů?*A"AlHPso.`U=L%=:UtpM /Zzu~J. tIz,Ž۹w6U‡9-l*/n GW{vۺm@0k$M*msn-UJ]>|eg7zF;O]CU>uP]G0s]o:f쪴WLtmg4Nۻg@mKiN|W5ϽDVl "**D~V/!-"kIpU>ŝ%|k|wM} Y"׳T`B]3Ӭ^u7,l9|Zە7g^ Sd$w}U2Ge<(MvPӅҰ- RFcOΖu+wY\}͹q fi6EQH<{~5BKSu=6^;5=;.aCRù華7eܲ!V:~ŻF Wx%\"ƴl{ba(iO#D%@"DrSh0.ͷZ1zSTsN*ЍW8N0vOHEcs )P'TE~Uچ+@qY2D xsw6`~u2 5O9H xY[$W19tעSS56r5lr|tPutDj(D`BBHN ̋MuT4&uAI;DL-M& y[jJMǣA">Enzgq ]{m!ĵm)jcKcަO" 5l^c\U ͗BUs{[U_d:P%liU:%.|Y@#emp88 .eS@Y;AGWHUMsGa nt>DUwځu+rJJ?GթUp4<2tPY`ҁ%AUp`jy!(!BvAu M0a8%+xCF:; u^8n>ylAuMUg9Y3n9m&\ 9w]>E$/3MkR18W ΁+;M4'1@,Ut`+$,T/{y.sE޿uM _{ۏ9ӊ_>ŭ0N}SϿs+$N /Q{Wi>jꛌc%~j痢|z-/F2DjdtGU㲦 ^T46l)q^ J\ q: 2zuBZJ Dml^IC/o2׶ tt@PhUGaP/GMGQ>O5fCd/Rc6Sjܾ%\)+3c[5tϝ*ؠhQ^V OiYX"7*훚,'\PVU=0vMWn>yla(LWy~0 J;R7~d纸OmMN;P,//W۫}NsS;CPt{JcH֟+E8&;Q6$7~ubG!JD!4TC֦_.HVcl~&SƅjPPt " o¯3cBcCtU462rt:NP5 )!E8T Y2rPPuϘ`wL86UqJG5p|:rlj5B39@8/ -0*V?r :*_96LtToZh Rs$9[G8BNn $. y-:wt>\oQ|:ȕ3'S&SX]n?zyK^|'}5} k}Ed;=,wB`ָ<GΒ*!EUUs7ah;ƦަݖD]?N$5| w iqOmM`Vm+f!|ž[߈YK&Ƭ J3gN q@mWKa#lQuڤ m(l!E7UG%'5n SR6aYr eѳk'- LWp36l=^=Etޑ=1o'{jP=RSh.B"$(!BPPcX#P6]^AUӈ1AAǰbn Wճ2nk7rWȡdF,92TKJRDx$ y UASNZ<QV3IHg{*[20M) P_P [BNQ]I-V00\rQ<<8jcdnz*;Hw+}qOL"a u_1$m|/m*m?$/*TH9 ; ƭ9$ʝX9w| `}[O=Ú>/ Kh=2ll[ oFu M^̘J 4>uₕaa2؈0UsϺ.n@PtZ[jkjWIlH6Yxr:=J!(`(-h{i}͝%v'[6GgPс娵N8]٥rgBu/;5%х:h)\NTA W1#s> F~4 nٮr!JDT Ҁ :%?+ SG`՞oR:j ]EyQ.Xߺ;U/')L}t#}^j|:BIG#oF`ѳ@ܤ9b@gsAzMuԯgBqDl V+. Dh@˰|[ x59&58=<yv'Ad㣶AAF9+@%Wm30KR]2\gM(4wr-&(D@]CۇWY`HM@BE{6 n\QZ,g[^Jc~9@gS? "@L AAB}x׊vw-f~> ڡ"]lg}G O(eRpah~OA}}SズB@Cj9|c<[}KQZRRQ8tYUt6Պu[՞/zp+UkK̤ פEјwN7/$2>&vQJn}h$ sQ߳M@;HDp.Nc<< ذEC?bj-aJ5M vԻLs7:wA@/e^c5?hݞ`Z2+'P6сZC'` 5YG9o2.+ۗN@ $$  Xæ[Gͤ3t<Ok` SjˇK:H5MZ@s񷌟؞XERَeuKr_i&o].)Ν6ԪZCͰ$ $ AkJL:CD|+@&^Ny8bV?*S?2dh9(u#{z8\&ΡKȎޤBu9?L[٤52830O jf:Q\BC\mwNQ.1s}PU42\la[hSύ.y1n%J ^XX`3 K{q+X~Ǥ:Qy6\: :uIwգ/+_>uڸ u;O7]\mmir4u!;̪%;$ @J)IN=kOTv{yn p]=,+ D &!dֵ[r"_l A1c[ޔttҏn>%3k1it)*` +yw$ݓ !7mt-(XΝ6}_ǻw2>MW'n Pu#ۮ |8pIXx~}+ǰvϺtp=l kǶMpvw|2 &J5vFw[QXFuEbMҧEf@w+_>yW꽘:O(*)nO S>ȡ [2 jQgyc.VjI A#I$HYQi@/G>b\+M)S[>^k9H|f1<8#&.OPHF $@5=![$ [ IDAT|d V١9j mΖS*QYpr_q14-OM#1W5v1@UQ܅t@ p*e*Ch?zeNPɐ+D0T.<1c *M~(k¢"w׈y۷ԋ"}勇ng+*OHyٵ!ヤu}:z0w \v`q ӭ-s0s= P%R}ϪM U7g|SŶu:tIWwjiM" qJ`ƶLiҵb!lK$e2Uj?̪u'x־ʲb㼱9 wcrrv )/.O&G]+5TK}oƐ\32x.|A :({ߓOݓ3w~ kőSUJk]P~& {ymӍedɿ'ggR@xoM>$j$@$Han <Yh\UύTQ\E28vF+t(Tۛz!*nSHObc5_!GGߘVpo2(@W!O hfl=t" Zޟ.p+3!;㱗kx y\鮴 M]TrQιoO控<;[[m "$HпH $pFEe~ 0WѓXxC VLsnJT 5x~ih,5*<%_64|Z 4uFOގ'㦋#0Q=r )tN3CxB_*N@Jqq; (Z1(e^9t/s JGW^k9jɨ wLSNӊ3ӯ㞆,OٹᆰvU-oF_{۹% }1* 1s"褣-l9y&%df :'6=r1C'HMOrIW k .xӵr{U--W.΃8dž w͸|TtA r>%jWWnnq86AauPD~qxw͡`>:zS7v]:ql(v% kH:?+}+\:K^";5ۏKoĎnΐ8?d7Xn]WaP$r!I|$H I$H L7%fsrD2>M+Nx6٪SzJnn,{ȊaaTǭ䂛Uc_m V́C5B}+vrT1\V{@ .qRkuxt;uqYԴZ:XCǣt:UG5YZ)xGR8ܸyrBTRTZ:|A|}HɧZ2e SJL@*EoT7@U\UF)'TnX<JI9.rJ浧p\+Nl <5]4+d eK\IR%\긜ߜc_wg< .d'\~j[ ][M~ndbZ* I G} <#hӄlZ̿Æ ϜH>gݱxu8R2Iɭ͡$ʜNvBP$l~n|Cי8q\$hpoc:{ 3}]MRPΕ=w IL|_jc P*/!%0h@]쁓FpP&(Z,ofF=?Q[bͶZ[VZnS6gLjķg8(]P!jCht#6\l_:=HlId ֞lTs"`7*ŘXI]:2dq&M!\yXh肂mmt1OޝKb[':reU+~qdk/SǶƭHcZU))K &Sl ?H b2V ic5TV@v*K#Is[+!H0qk=u&@J[VzOr:)nXgM4} jYNJd&/I90M#M;(QS @%\otqD޶ pKҸmЧ &Z_NN?EdtQ~n&miKgOzf/:rlXA -97r<*i Aӄ]m=b})a|p3{ឆ$Cs%qIo;O 1ƪ1Eێud.p :WtLI3Sq !r]e)+ oP޳k &.Q|{UPQPSC02&C8~l9B%$79J+oN wI3EN>pyb~L-eJɰAiZ5L _A=&||;߉ҨAw{1*L{KL YRqXuH.2ugL>j%KtaaJu$  82.Np)p@6p\}-aTONp Sٓ˃SFDP:?vh q$`q8) *WNnĢ{B߲-!MÝ dQq1 LڅRwԏ¿i7r\_yBQy8a.Ϝ.\Hj(s}^(j_T+G? Qk?D (C CnN _z\YDb;4MذhJܫ˰ |]?}w_9&$NAvj A]^GtqR7jx&WJe5I tCup:CAºPIQ ;Oz k?T@MF3Vs?.58Ѐ E",9'7 *L:\j'p6'%~OQt2YQ<=UQEڮW{Ʈl!JIM=~ xKiHwNsp)XrtCe%XWS1WVaLs{;"{G7#{sIvt`GI *>oL= cZK'*%YH )Y;Τ $HP8$  8°DnƍVUTƠsq$tUi613~."k- .5+6;Alu9*޶N?̊-VvY 8 w\,UHSWoJ&5l\asyޟPH}xDr \]=O:ΗI,Ϊ_WҌo^=V;_ٓ+Md2U)~es%, [z S;[N{WOBCMk;Q,R!\A꺵T̒yZ;z{7+6굥3j:Z*LsKmt 3J AI$AN58BgΌKˡBh/6Q2ɠ{;aEU길8B\1UͬG69,)~sh=wZ72$H(ը;h;m _ވɶ]w;zG#8&09Bq\V[J8APncnǭ*\5 !᰽F8>1%P(afT1v}q#YZ 5-_w᥃h9j}RQ֋8r6悍+_Zw\N*kUIQ*FIߍv >=ٮ֔)4SdMrZ$Cvz\'R2 %jVۄ 7 tZ%L5`N|}c^$z\_U}6aKJs*XAg^M6 9=n>Ha8-:7yLA()JaWK'IJzNM>Y0jR{3)m 5QZՖ]ٷZOŸtTX]uUwE=6s71nw=N GI \ ι2"Q,9W M˼U9s9T#`{vgFTVҽg_j 8j/{:7׿Պ%D  TQ?۞i^:+sj8ՖLc.ۘcYeezol9?8 2i>q]ݽ_`1"ѿxԼH) @$Y$8R!C&v&?ro]m!'"=WVbM_^<xtO(.Ww/w .|P:&}AI%\ D+nЯ қk7nuܥl-S+{]u!k:|&D)瑴O&CƔOK7;$HQz5ȦK~?׍$׎нH*Q4= MT׻ZǴJ!;+[ c Uuօys ?r_]Fu|<qyNu_,yW-U TR;Nꖺbrltt}+ǰ*~nQdK \MIQ*&I\ǝ*LP]jRF'lkŦ[uzu" P:({ ]*u了 }]p\Pو$*o0[#rq ww׽tP+WNX=l@g 9jVŵQT]Jswo >Tw,7':{"GvZO:#dP]%}.}zP`&rtsjaH Aa$@$H ăMІ@gx19ںV|B5s5*ubg)>ED)ھt:iBQ̨+AY\ER\gqՒK~>0(XDŽسwa!Kj$k9Sſ8'ϝ6kwFysNd!X.T#TP[OGН֔掫mbPǔɧ>/-.&pm)/t;#AHO#6qb [2G6@ $ AXĶ VsGb$1={>@:G ܩ`!BgmR>c?t|0U$隡t%_6d*Kqa1Jq5Uy LT΅y 4t}rW;t6ގ\s8 #aavtbZU)KOuEW7t@?rrg'6eu*6yUXEVRo(-B;a:'F8;qKPS u6Qޱ]W䇀$<2dQՖ\EtpCޏc4B1MPUd:sQt@p4TwM ' *a{Lz2] Wc)^|z/ƣO2l C IDAT>64|g;}tn>Ua*VeZ'0E`1ߎ 9iiDžOԾǎ&Vl}B5l 9wP_@uSEUxP>0u}p]L4wlæAצ|jU)IJܑU7D ]OqS;}Ͷ#`~8+?ٲ[|YP&H $ A~K𔢨uHlV8ePɁ7UrqH qq.I*K VЉ҅NІtBjrtt4"s}N]7u,۸l zCPy6;g_:\\ںu6xPD[](٨yƥm#ਫ,b 9x x5{r~I"lzݑ TkзVTMzvQ*8m$TǢppˬ@kâu{~'^pysmA9 '@vݣ^dBAcMFwMº$7+K"`C/vi_9@7XDgQڝ; jAND~95uU%c o+P96 9wlv9IO7Iӑdջl0 F"Bv,d/pXTTRQ6צDܱ^*i/P֭ϩqî;صn(d PD <'t(Gv;k4 $I$A] bTi`: SejD"\g;%'jRrm[a)'TR[,l7A0:*5-y4𜐨`*S Gd k m*fk>qp ]1&>n{xuKYǡ[90@ g5j0T#t>H\M՘="$>۟Ug|Iӡ ѓd`ڠI~}4}}l_W:|0:A%,| 6텭Ї5'l;JjL I"UD8u@.$t\v\1lv"QƨBptV{H܊^]0U"~\D]oưbA}2t 6]6J ޳z=;Mmto['{pL\M=ǥKZ[t]~k+머 aPk㠮 $(a>wܸv%JelR6:Lx5?RKSvU $ A~Foʪ_N 4.QNUqτ3.n~40`όQ2_xaSI٪fPN :~()Jj\0(g+#9A&dA۟|J4a+{瑿}l V6:y/4/ ^mX؀5zQ3/qR~y99SS6O Wy,+xE"U7^P?׍ij{:}Iwtkz yg\oZs3o)j`~= dŸ2XZ `+G+4MX@Ub[ϊžFL"|WspT`~^c5Vo;7jA5i҉⠾+A,w0 9j87=`7m)e(dzksQԩ.+ǃ3j#l0iT515\hJMcơBί}o['xcǫX\C:9סdpڦ;ی1beAqN sמKlD|/vJ $ A~gPc$pA}M՘wmu ~w,}I qr0XaC/ВsJWY szxWو(#7^J~PLG u=J *`s45~zu"ԸtizWq뉫~׻[:]{Աפ'F%l:RmB[gܾv|!g.Эٶ(f $( H 6q?|zÞ3> Dsʻt(.09= cZK'\PQv)熺^mٸUV*m!Ua#tt[gNQ {"Up L\]b @p cF͚&!(gubۗNɀ +ٗU`˛z.ZRCl@r-Oa8W">L 5!K%'.CBج+9 ?Թ't1Nd&719Qk{Js.o*N.)#nz:G׃FMSSŨ΁A] *f?s B&p qNBȲm 34Sg_?~1~Jen-u1\J?0•1rh1*Kk8We/ PJX[T7,6=@?wk5T4 /r{;<;ahkrcm9]0qM.؀[+DҞY$N)QB%6i {~S'Sӄ~$l)A7:zqNq$H`FI Aeؾtz2):7:$P3,ҭajsU'B87\{ϒ( FEʉ]ngp68 'jt1)*'igl) bpNtTBtƵNC@k5s&&՛>?HhQAҍ?oC02 (#lbTiG$5 uaRYNDR,}TӟHz^\V<V*  T+(ǗUB_j.\U뢴orMW 5ÌTbf4 ùR;dPI9z&N nE!8xcmr]Eiig 6SI5b q_sͩiMcŖUy esp%E)eʗGwAwNe A JI66hK7VVqWGWVO6@n߼?c&kk5Pu(q;u-gw&_]ZN(AM-b/)Nv:ysÁHg;x"5ޟ$ f A(H T5I6"lw /C PA2* jZ^>'Gs"i#:Cr=V/q8閺bt~󑣿X2#F5\4jl8qtcdu˶\0.< l?Sxgz@ܥR蟸{ÒTP4Q{ j0jh1Iucm;LW d6k|Y_l'?nT+>6lHTsXǝuمV&% N#H |{ } JjKwY :@o:J8I{ՓkGzXd;Λ/G@WԾʹ. \&Jt4N5 &؝\.@^.YBtDК"nZs ΰ$҈![Ȯ:Y͎lрꐫ aZ?*xxŘ=48[ " /h2mepѓ^7q\p ӹ&ؽ6U1=߻R[weBjc6saJPl `g}}}|EAvZOjluUXj[7*ͣn&s.1 A$ AChՆZ1(H"WnV[hTAc2\UtsumӪJ HHCX <オT-gk.pl: Oŭ#:? K@MRutO>#ż*kbu ]ǻLiGMrn~qxfd|D Q]3gL$ 8߈Od\u(Pzkߺ:3XHu*kQuh\($H?H $(\ڻKR8/-@ΐ[,pqtH\TA dQ3U1Q] 6S5j(V\q#ޔ R+_CNGT-x|{RUnl;@w}tƑ ~|WWTCB6B8k (_G{ )Fx~QAߢ_JQ<3t"^ڒRF~NLVҌ'C:׻Z=Aнw#q?JAcZUjwxNԹ"]%2>[W-/ DžkQ@E>TskPDeY lj*Pz=+^E4aDϪ/}T+Dz}dġ4=SZ}걑d×Eb߹(]Z#Gk51 b?(4k֍5Ƒnj\T4X/ڈj l ԚXٗ27'81ܸSH%HH {eWK:͌3/& 5Oަ:ϥJt oo eho[g&Ǒs"8.RN g& W8WUI7`Ҩtޕ\ S\@sϺ|?r)cJ4@؝ZUJ kbe|$0u]"]:^m*4?d <8w@SZӃ ˿yc!ai*%@7_yG 1n/g<}]m:.j+T蠢N-1'b\%}dN(t1A%:E0E 8j8Tb-e ukVm4*Tmut\kDg9yec 㺜ĠN::\|e@jrnZ,M.٬6;1uK*ܗΪŇt@I]ܚ'lǨ맒3$$sBI AA.wpS5fO8.΀-Dd>yZ%gPI5 @UP9q g6`WK'f,r;݃[b+$ՎFHq\@ '~t] lps"]l:L]LhC _g[Uʲd:6ގ\k~p$ L9S*ӛo~?۷gn*޿L>sK\u ֶ*l1]5RFJ%@SfJKb%Q$յ rpPk͎Ε1OOޟ\Ԅ\2Dm'8̍Oq\ň۷O>Í݌&L7n>j̻:TUs<^L~%G*1W(B,:rmjisҒG> !@%חm9x`=U?]\}麺eѥpO )K5;v $pGI A OYm-+Ÿ.8[RE\arz\PMF++~W[.Yb_iZ7HacHEl(:gx1-|)#1\9⸻Z:Q=js7o=t">qg+fR&TwR6;XWLU?ƢT7a_j>j~UKBȎ|DzzR7~ISv1Xp} qD ttjT$) )W7~E"u>PRL]LI[ns*l:r7yLAu!XEntiqF7DU?m|āuǴӥr]>#Yz/ƲnF[y % QOϜ/bPI;;mLTb5AA/R(4} Ȯ6[-I =G{9?K7idŸ-1i߷l@գAH(Dy ܐ$@$H7l׳Q#W+tݓ"ƭ vDI$yT7x5s6KfbZm߾1s IDAT~|k:"R֖a=~Z78L L!*{F:Y2M5S,@wC{6DIFƅDsz~#'SsA&c˂mrCJ zkBn|}H<Ʊߖo>X3g*˲ce^c5VXsKSm@gIHw\-79v}Z@ZIdV-&Nc|;W \sתvP*( 86^T 2^-HFY1u]nh> ;SA©/Ct(2EeKs,э6K|- 7[ `xut(o=vIt6ƅn-wm5B $0#I$H o8) Ia|s6CT`~Ŗh@U* ]KoĖU5 LIpAR6f(86>p ͐ox;U]]Va*8#z! X=k:cРF_~˦zPDF(Dm]=`SbP\!8U nrsBӄƀGX`xV%Q.\@+ Qdx8y!Wd>$*xx!bF֤<ٹHco[gȹ= c`^c5)*UT~{z\)RfO.m;+Ǡ2m7{^{-^S`*R1 SFiQ8jbmƥb[]\G1rͼBF/I!v&1v1Q?E'껢@TmƁkת,I&۞ 6a+q^WpZ&*AE@[q`8f3<K$[͜G9Q0q$G;vin}n>SE&T @\j m6,l(7G6rl< H7lg* $K9w}9yݯTXm*G3=k\<nw dqmkV?*rŚKF΀ۤn_ig3.s~TYVI-j&?\?W*kq\Bl[l6פ'<7w2*V<)dgSLpUwr\p@PP|ǔ'RX cW؎]WZعw㡿y~rw=FcΪykltt}ǴO﹜\5lZD%`GWS+ǰ4W}Ug'f9覷1\ZR_quܚuOX-݄m?5O]=C 6MaQ%h׭)ͷ5qFq @om#iqd@ic"a3GZM86Ŵ7sR}Ӿ|tDxDޖkm VT[- <%E@wL&?YZD s4x=~ t^9~z]]7mލkzO6s3P 8ױnSM0XJj7J{q{:Ճ{J; $GI A`P {UoWÉt]9c&:/[I%_TŁk"F}RD݇9]@z3'N6:9߁XxRşi#cӾ9]Ѧw}W.#rۗN$J{txo-Kz{+u+2rMɐFnn5goN*%9Q@u&NM]nP/QxpD炏4'_s!zH@厭ۛ3{ qƺο7ߏvNs@&NޑDtyM'H$@$HPppFx8#p/b"m.=q{XHx.'UKrVUS9:TpB +7Q[>$׊l9gN])઴ep;q&z>6Euma;ft`* +@u,UN3tt䥱ҥ%oL= cZK'|MkZVϻIWMXv$ <WlED~D됂Z2\,Y *NmzPYVB& y /)Jiv*Sn/rqA&U~y]DXՄ4,kfON57FO y#DMlqX (]Ms Jc FBs(m?#`l%XTc,Xu-u#$A)(5ێvGL eP3}PMľi:Z(avm ^LB>|ml=z)6{M~>|N`5}~8ut.AAs&nD=I$HH $(8t@;m nTU#6/]J1fsU'cΪoDMr |@(S9sx uە o~<6.:+(ς{gz3ܜ^1c|.I( ~c b/}U\dz5uFndG!q1wԖ DR@%\Yװ\yb4 CC0|- ?+8:Ot\jG7]R -95| ƼjqZ^ D`ܜh=uF+ 늜Kc߁ovX^|U*Xɣb! e t|o Q'-W>SŶn,pxIuL!|=#tWJaKQ*(an]T"QR[m`5I$ kspg vpĻ._={M3]6Z=g ⊊tBƧuWtV mow;;̪ͻ#BE>ZW`JG@mm$S̆T{S{fZp9+̧0pu/5]힔I&Y[F0'}i "I$H`xe~\ʰ 8m::[ׇCΑs*,ZqU ǥV*_-5WTfݳG\:j~:V5]T_ߺ:ad{)GUԢ':8}|{ }q&sMR[+NrC0 V+d.A<ʎl*NpԀuO%E)uy&ķ:q<g4GEՋ@EOoϼnƇCc/0g'%N@]N쓮kMuQ0vմ<}](H{ϒ+9*fD྾N!۵,{GW/)JY%l$҂!*pkerEA܃.0dߩCK΍tWIqk8gShdų;ƫH5INI]Nԋī\TSpeB  :yP/u.)JE\v%LI9j~9IʷpN\(yUew\T[FFTHYlNu|eš䚴 $sDI AAJϾ80RlZi9AW2MicC'yqVSSUmwbM㭍Y4dz)CVv\ AYK%#K"jETrssןo۸Nؾ?ɼÔY3.+o: ~ȝT>B 7N7l?yUt`c"ro*L\Udn.TC7&rSWR}e%lL*{Ml;ԓQ[>sV8O_z#Fc C7G^doO&@\A%MeBz4jɭX9:vkd8k@XIcĆHqOXUj}J;{STG4a| ]jgB{ṽǂ`)ؔ"j ]7)^:lKC`qǑK[wׄnJ8vw|qم!9#)}]uľ!='GږTc1854uӾ+P̜ %6^Mgg,SRN^K< \;BUMy|Q}4Q}&ms]ePgWK'U\RC7DqmG…"Я $( H P  ѓh> y/޶ΐdaEjQ[:/ 5N]jҀq-/`r((Km( <%+WH~ @2z?R=wocUt,(4xo\U揬K2`Ǎ㐙fX ,ي;['ZAdWP4[Oco['KZ䚍p<{w]5OTJ@GCKε>6^tVeY1mƚmG߈*lj\23-ࣞ*~HIWtDnrݿu2|]*`jw GI\Pڻ TƫP+#>_ok/@]e)+)Jh A;$  8Vԗ @Ƌ?_’! ٨0|al;MP'f'z P8U K5nBmWn՗\0&h&NuLyP.jgU_7MFV^:/Yj|zIIyʡxt/gL U$,cձn\SF3{ryCtl8 &rD`uGW~(['uԄ*@]c ݽg1hnkvSiT= 8N7KffׅG:{ģ5*?K"Ԛٜ{E@RSJ;.~$\2GLz76źķ-T8?Ӵ37'hoš2?]aIn.IĚ4Lb@(rINbݕZI7*-mPto>f]t:TM,Y+&`t d'H$?i&(**ӧ?J`g,š`mcC Ӣ2.qeUy+թjxe*:uB* بQ՜)uo=6^4m~ |Å7C礻.۪㉻7nFx>C{/C( 3A'lndwU*Dm98%T\Yh8q=9TU5oq=ao['vḱ.}M՘=s=xpD5.\it ]=/8hr|Q邀qp;B wܖPG|ZkU s[(l|#Izv>(Z `UF0L$̞c2 XR! IDATLE.d* 'nwVYYVw^/(juc:j"9Mup*.iQu-M Z[Տ=t'-M̆tM&WuD!9.cS,K TPbݷ_}\"N/"2sCQӳ۫&GF/ƺx & {cs>\ $ 444੧/&'+EL4U "*G/d9* 8ʷ0R>:N΍&цa H@!B;hCUV뼏3,:8Ykg>3oG3]kZ83kwpw#DHЂHP@B&ξ>8 ֚sg@:z>H( ;G8_9!S+ZicL o\*L. ly~ s0 w&d%Y \s 'y]l:?~}bsYJB1:/9*\]rufvT9dg<ŵSW]l }/.wG%gOğ-`} RWssyͤ !Yz!>x6fp{yZIgژ^Z\k tԽT\:SC$%7HdkڢTYG/`Gj,]K%UmZ (jܹ \<7/e+Fg>Q\0>C|ሰػ;9}pcFe**hd |k2'>y ,FvpF9: ~)G 9L?R\D>㜠Za#dGNIsgLfe L.+C.U}.?d$9ۂrfTu`Y%dF8q$S;k󙐤BEXx.;A';t*W.s;Ty\Q϶us+! (8qx]mLc(|_U.]ӂ?o9:ve ühl)jA `e! .C3T*JI'0 MBI2w\̶ƛy}OU-|&AVYq &pWZ~-5@ hy`µnZl2{G+JATDp0*\ >7 W/ds F*#aSCLWb-h3wU A q}4:#tL}:D%$k}sH0҂8Wh- j]N7$=*-">lI1K/WpR.Š59u6@Tg6mX҂P$/NRFGMK%Za͖&.&u@,rl7V39w}7<T=ʚTI3$v JK02P9{ ퟽i[y[;OҚx"NylZjȰ&$JiwAXڶT% ,zK$XM!J |ğk3k֬?~<ƏFDPi+DDʼSAUf [pߒ|rRD0l1oڏ6WfSP3m2Tu }?zx/y-~]'?$q'5Qצ@L@/U_ BC;{ &f'Y 9dt0.¦6I@Y$uN9q% KEwT57d@ESI'S{.(o.tFH1*PxG7b授O,m+k:%.ASm"=ص~Z7Hvcϩ(%jj~yŠ D~7ڊjKEӜ)__|gG9;[ђ DcK:H~Qd۾A@ "4t0S=1)M{;/ăV^qdF#X%]e)AK4TB֎e[UW2'v}ᡇx|b0eL2eR8K~HTa+DDR 2mN(xdZm M9P@AgÇyVM_9hpnMF?}.>#xTgy8?Z42]@ >*GS)D__(Ѩ Ql@p-Eel'Ţ:Sr₉tZE2^9/uLsN΁,~V tn(/^7ln]rVĵv7¼7̼[y}FB FH1 \_'eM-Dq׶&vVAU? K447hdRNOS6ȿ?]X2`\[p}} Kg~qI$ p*l{ ~m  eYEMlZbQdH8x N8bpp:Yg5ƭډy;0i&!TD"[M7iVϒ\ $guM-*,TwC&Ua=Gދe̶H6(Ø-[jIekݽXP4gJs6Zt <%PL^N8".h9C1i0ʲIXM *(`}gz([z/T: yU0LNxD̹E ϡB8Ȳ9?G%WDlIQ WYəqtd|lu88M4B\.ķ Ă+*(^!>k5TaC]֡Ưf}3ۻ2l'tٟ]نW&3ti.6ZMsghn!ܾ$}TaU {HWEEЇsMp}j[3WUQ'bqj`t:aUaGU%:d%̉ P {Jngw Oe>ķm'?)/㪫V}?Łc}Za6&c2rUY9crIVP(gҩ>r׍m<;ukynWZE/s۳qVUbޑȼl3"1k㐠A'(/W8kR]gym:hu;hz4o@Jw%f9^@hi^39{bQcr+ t0*Ji1Y_]_TUQA\ 6BR!Ծ$j; !h^V /_f''/ܘƳz +itN؝M_" )AoZV一j`P$aֆn5DoW-+2 ԍ>)ŏc?f|ۯհ]6[UD➕C.Y&Q[V3'Jr._ٹClr"F۳qr+KIkBGI%hk;{p3qu, h:hd Gٹ F5%gdA&)ts M槮?Q4[Y jL<sV8PchHg½ל鰀z oy=vvs\(Nu[g8Wy>i?Z&f؎[q6cW0x ĔO 3J$#9hUjpÒէ% r֊ido PܹXέJRa[魂ד́ ?bOǺ~}~a|ڹU"*nlK3Tq- VS;j&z-oVNprq pI9eOҝQe4Z&Ao(-67&??RɺeEhKjɖ@(&uxxx0vN-kk'u3i u l'*g9\ YxbhvyZ#:X^2=ݳo&EAGI2P\gc(yiv0$)(G)0NB@{pt랝;K34']#*C2`k' 6_ ~}Y;[l8pʕ@H:&Ѣ}j%IPa \'IƮ.[5/YrxbT0Z7eJ9%]sJoT_Vpyio{+>S-& ȤM|7#} @SG'295 4[qY"5ȡK)+ET$=5tT>M6UR uSfy_UQ%u1jy(]Oۄ/wSZ%K\a\)熆i 5:7`yc wt LYv}:0l2us!yG3ކs[{(Sfi`jJ S_| m-WvF4;L3Sr]!eq4͙vY2uOt]uJAbs-6 t 1rquנJBD(sܦ$1C{WW/d{fyhĜ\_T\27VXln7TF{ct2৛.{]m>BSXhK˒ֶϿhXbnܣu ZsJoV$wIV]L".I4MA$$WP!~s#r-/k TJ'I3%)憆i1mE'YG8ܒ$P"iƁKpH:pA~y}l IoH 1L眡fs5t7.| ?Ocm9\27:R7=*`+`k|TDbv^vk,sȋR.r!QhH*92q>$Y>q\ӧ4D7z8ڴ.oE&)Yžg :ʆUKb};\s\W$$ }Mcj$pt;~M3~Zfa \x&&9EQ[UQjeMYh+&l1w]d[C9$,s*&ͺxw[M%ds64oMKW2Z`K|4g z@K9|z~XE7_~ ,:{P; wIl@!X$w$·bkid-XY~V\=߱s uX3"i,m9rI8ht𦋰+lET8=Q`8 U*˥ZC3StNҷUxؼ-(Ng58$V]F.T}.JRoaDyh \Y9pͦ*/6#i4cu5~UфcNvhh$ѮE'Y;u fQru d߸<|K=".**, 7P 9E˚n:p,E 笳~3'GtAB"0c.C!Kou]T$ڵ egA/s\__ITh$nEow\ VT - ׯ5Tus+RUtcq/L}7ɏos Q!2 OH qiD:*4J0Ifv.omY4{Y*p8Z WuM"K;LeIIP 1q?tA̘_GU @~]|<F MsS,$h^E5M&i0=skNAmS-C0mۻNb(u.sTd}SL`{gO, g祂quYMcq+ld*glm:;B' <*& Xu6ںK}z.Xӭ*-]MX~ymaYv)!K卵X8KIΓ|;O hĭC qܳP4IIm{XbQrZvƆ;+ĺ$WSw&y4{ czG^ڇm4t<<>ݽxňYXu|2:/A#JM¸ΜvvaESe,Ն-U2ֱtv) p>q3;0B;#4`Y#/*cG-qAUE)V-ы^硛!F.\L\@^l}xW" eV|&QZѾSt"6cqW/WΌ̣bl{ݑXN^4{O(iW ږ *\&Pw{폴OL'Jn;\)86*t'[{[n&vJH|IpqLNl 5GK{_]37Ƿ_x3~?/eilksS4re]],9-={JK&R3hJbZmC=.X1^|/Ɔoc,)!0aU SVWB"jlӜ)v"ҡOf 5KIc%@&09sxt[K̓:p6»liUU=,?Kn;^xnbg{Ӝ)yxiL&qfp\p5٭" ;ꦞ49U`WxP :L,i :L](̬,zyUE)בQ`zc5.{ fe%9.Lw ~ dK/tJ`VXBGN6սW֧ÏRlm6AKضIW~x]mL?{֝e8mT76LǺ]Vv VEg3F]?vD=N T[dqY0ROYx\W{vӀ  P7DuC pa%-QURĉG`VDre8GY=T Oە S<}r]m[4{OcIWVź'GKQpN@Gw;)XEaU- %rU:}Edt@Q}i6sҚdX?[">!B[#58LsJZ4ϯbd4xDlAɠzs s.-u/yV!ǝ CDuW^m&v]yJN:` 'pHBW)w"mǢo>Avr7Eޚ8 ٰ9(Y@4SOSY! 2왮RmL%<|s84oXY D@< 3Q 8lxu: &g|AJ|mŲНH"\sF Jća܅]IS~wH;L/&JJ|fbd1N&5ٱLRA5GE0$ @EI+I;:h?E[cFR扱Btƚ=Lkw"A 5k:X6Nn-nՆΉh$Εw7͎8}(MgяhRP_]eLigq`TBeY7Ʃl`;L?R_8gdtAHl 럓!`=PWaƤrM=;vj(%5hφ= ,di7SrUfR;%,ʶ{zz~\xU?*Vp4U|YBΞŸ p~}W;[zqu<ƣHl3^ &ʿw.drD9L,=Ɋ=鳪\7>%vYdn_GOmxr8NuPNMY̧ɣHMDUE)&eg v7'֮XC'cSy9v~c[kq5"RLG='aEh jZd'"eS !nxtK^Mu߶,$S\LN︊G^ڇg̤ڐd2ӹQn?T弊4ŸmLك/MMSu;%[qI'T ͆ )U<嗝xn^ڇeLzmݽuXuCnxl Z-mRMѺ,zIUE:JS[LIΩ $70H2l\g sZ֞C^Zg{WW5C!Q,öMY/9XNd$͆`p͠ƫqMIהf+\ Y]{mei*lUn?uy ,FfS/KLGeqav$8A;Q~M&*aekpd{0Lb piM@C=؝X0|&-R'sITxwtPp*D u<ަy,[aBٙXkdЍ$B76-CU}OW""L)s}dpC4$DW\5εiC':Wjy9SH'x9ᒌA]K.oDL˃٩$_jG`b[g\ɦ"T$3]U%6Nn?ZvHۮD`Dh[X赤AUE)V-W?-aD,FAtͺI͉!dz..1F դd:S>*B͚GAlT[@oGPV(9S'B>7d69Y*mlRJN`UUQ/({+xxxs=C7)`6܁#@>wF@wos2 ˌ 1zLnitANwW“m>z1{p7.z}{7-˸SmM09ιRpUe+');5Pun\?YusP7lk|\ĪL$OsnX g`>'+vA]="YTbkgO}Z* nO2'\kE3cH>,㧌5.2i"wYj4]'Y9{?}$TlUQUk1.wnEo\pp֎:hq$i#ӯi >>hg;@MUz r;W-+`K D~t%㟷;Oq?u. |#aq0 0Rқ"y46kk@2j1SeACؤ@]{yc bz⳦q1&)/v?$3~7ܰ9e%=OE &q_yn>(w5ƃZTX[бPAqoq\ w? Alz9Pi9-f! I!Bg¸6a4=ϪkyCƚ¿{֎>nZ]o&,œhp˥3}lAh\4{&U;~=qsSAul].u5ˑspS &J7.^؋æj5[9GH:fu(Q*jI~.:._W-X;ҀsRgQ:Af5QnYRͶR |LpY\ލ\Ob+gb :Su~C! tkuTIRh頇Ces}c4 ;L5mmB+K4@(~ceKƑ)+i).h: {"tۻҞwtSx<<YID rΔp}a=+PRӜ)e˿W9W-M3\E1SboWo&dL=_9@%,}1UnPUQt" IDATUcOT%t`r{z>}XTGݽXb\7BLƭ\_\+(v( m| l6!Տb@}n }70Hw o{m"D8Ck6wXwC=yL;Ƒ5Tx=<,ڥIzhO[-C1i:4zM[T ?;\/s yZg`ʘs|AK-B l3΄O6޴/XH7Wg-=O(&-PPխ޸KpcnV \W[OgT3Epզ^aj!˜6.Ȳ]ҪƃdrXYi8ff3:I1m(EЮR]ܼ濾 2.d:Ջ NB ĩgu,B>C}u%]2=fv7vGnm%3+ 7gqTf UYΒd`Iδ' yg-Y4lUd=+g ΀`7*u},Woȏszֈ.k@_IΉ95X7w DxLzjrfzx t0 W L!V-r?uYI`,a&%kZLNe_^dn콹8\&J陊 ; L%* t6, D]'UUX,~+,;?^o^4)QdpJX3D5F1im{JxVՓ }uN"NS4E?ŕ|9Cg[qY9ac@Su;:hd$ X/D&?|9[Sde _whdAܸm*!#i3GƞCPoWJgra&k (ɰuQ5 `d-H:O*JqcC4`lr ڽv"ewSPi~k:z[G0 tt6k) Tɉ3vĝWby˾hV.f0 _~N SJ~&`NVN2cNOQp%H;Y~-\MV-W>-mOTi\<7{b8)]9XAn*?$=sP6!W4@r5:WFS k÷VWZ"ov8:kP0FWԒǶыH e*D6ӹE2.J>1Ҿ@.~X&vDl\O PSR6 s˦6Y.(WԪ.ɏg"قҎp P \p˫_܃ eg0$Ot㑗~g A*YAF1d:ہ|v ;'9dQ*ۻL$;>PҋU ?7s1q\RrbѮԻ ~yUh:iUs܇@̡Aj&Eat i3t&"t*ڻN(L@~͑+~|D\K B),c LUqOEWPɺ7 |s޺n_!q@<<g p?o'羍Vwƃv5d4*/ vtIT.{ʶ}g/ƴƤhCsA Y$fީi}j`/Տg;dۃ3b҇ق 1NUpճYfΗFpԾ[_]VsT?$׵ŅxxxQ'\{ICmVyOŚQ;4ƫn|}Mju s uLp!.CXni<~RO/CeC.cs(M@6 [Ѿ4 !kcgۜc NNc AwoSpZ ?@PPT~~:;tYɝ\QmrM,+9ݯ_n0g* Vݽ~s$ZM.6q\amz7*,tOt}oEbio&f v㙭dZ|o ]Z.pʐ=JQŸmLك/JBϡH:ij ƺ 3)&bUS8!Ye IG(MS J&"=h.eMf!.[\1czV]Lr\9L9"9ƿbHكC,w &SdAwt*esMLWPzU3ʆ ++Ӊ.u]CdUEdYPN *ti e%9.A`L8R zWѾe o2Is*8:4tD~xWsEe$XUr]@m8&#ր:sHsЭY%h)3nh %4' UF}VU_I+]7Ƅi}ޱn j}CEZUj9d>t퇝|JO*|Ãg)%Xdx0N8!uJdA ΀j&JPԱGE魇C. 6_4ێ Aצm{Rދ:'\hÊҾmLc0韥8!G е>V߹;:ج.7/u8.0BkH/ج.Y8%-8V8aʱl;&\D\m74L nыowګԑѪ n)ܣ76Dg\9FMYۏ֍qG f rz۱̍ߓ> w,hl,L>f^j&YdžuՒ:(h$ RAANGc_ ⾧:&3{Q=,V5 T x7_@>5tA{rǧ>2tHFزH ah/4 c? l :΀8au%ýuU砨 Ւ pBU ~+enL$Mq!"lTUuټzߒ:4;}RXR 2m%tqq O \SCo>ۛlO8_~Чɾ 땋FmlDbiIrղ)`BCͭZR gⲇ~Q>J]F2((K[qO6- tx70OUPdG1.8Qulִ@x]ClZ${nNq*]NJoLc"m*eqr6rUfhh8`(pTq|ԔYiiW\ k[4{On|w\EmA8{a?L:5qJl{̘ܢk'. kSBi`Lu>%fuC*GD8o aw^Q9<ja#|.1Nrtu4tcIA5 U(CX[#Ip%M=UZyNPZmTEWYk{rˇ#SN]? "H ].60ԌHS-$ֵs W[Hx *fgPXqnL`ccTUz?Ggw`:-Su绎D^l;:{< nحݧm&SP[PSkWbyc& }n[-Q #Dg*^nw5붊ﺌXl#6D\_4~C4ŷF+х{n-& Sw&ӻM-!`Ҙ&<<< 9b{\X)4waÏDCR,LFB @@e" E#xba_>ظg8:p窊R|7D;i:QC:g*.ю9SȌpF L@jC ?>d~(};ĂOnk޷w]+arȋza$PL߮\ Dqpsb{gO*'U1iLNRynL*tV!0۾jR| q7mgqueޤkm"ՙ])"qetV~,jQC&l  ;I@MnOo'qi =I;]d[GO#.!øa)M㕋FO5Krmwߎ}(Y$@qNCS/Vg_Q\G I6bSb0 +;ΰ o&6$8('q4L9UU ł(3AץWWbyc IcBoqnGȢ9KQ ~D MU!SDek'P> "5L, AC=hLUOl`;.z16c.~mq!zU1n{ bT\P\uRәA ;"$ Hu#-8:,߇Ǐ^9tF> C\6k2ա؞E ).ϒE .IKfP^2MYIN{M m"%O([PYO.^](mY"G}-/[96[9d}xbs 7(Pg26زÊ;sP3cv6Y( T[B18{_nr p*ᘮ֌f@<<<dQ`RB徦!xL!:r9 {Tr[waҐTUi,\MV-d-%1mOZ^@v"WWfj2LT\ l(@^R'HA9bskPm}gc~"C|G2$Y<+Lrp/bpbV"M\~xÏ0OQRN{Y8BM}M%U0mAE'Ҷ*Zs;9;gYCl&Pguf@4W rƱI(ͽsޫlimic یScؓO++%lxjД (;A({_~p}+񻯜 TsWf{x.|#,4 leG#gLgK‘ˁ3-KXM=;F=f{0ùwq^Л޸'Vjnj$ʹl+_84MR0.X! . -:ú蒡;oߡ81U\z4=>0iq`3sP~2|Rlx:PkiCg=JVAVUQJRfp}D1wuYԺ6`0`aq7v"ꜸN}U_,o1V;WNqc|œ0]B6gS}ɵd$o Sr\ݑRs'Mi#ti-N@VbQۮByӜ)l;mw7iS=XP#{x| F, !,,CIlPD\fsh b Tm@<9g mAę*~gY8br7b.c_T$jS\%9`ʖ+tTAy( \N<+>Le=[71Ҷ ʭbBҍ!/0b4c #rUTSm.gwoTfJ"Fz~iCO;Ts\_8dBU e}-' $ }j`X]LNʤ4MbSk*a#/ój7SVc Տ;ߥ(֒+ZRM,揊kTpD@RRCFΑ̉ʕPp&O*!S7/g$AMs`EكuGi*bO\J,Cj:. \00+D_XweX~$"(I(:B5A$'_a\-*`;".N|~e$peŰubiWw IDAT#鼚d7 I,l7͚aAڑy|.+Kj2l4D桠2eK>4Y6N;&'J>xr' gr@+]++πtEwo?`Um!)4+WfN'Fe8j9@uuJ`3L@EgYPvxу5[Ť{bxe u=\I)-k:?w@bhCI]4YäExbs;+nJNZj: #t} 67v Yq!\\ͫh3%V蚘n2];50{Ij (Dt<"٫XN+hv=i!`퍵XjLzZ t ĖaQkJC.BTMT5@P9:^V-cyiv8YL4W&UJ" ⁿ%JYdTZoY9ۏ:O ,> NLݦuc!'Ֆk |}$N{xCt4U!!` _| m-Wuq֛*ul-',"&+.{WPI B $g78 k6 鬦WEreE's^]'*셟MN1CA^9 誊L,o=tRE6w΁戠S7ۻNOnlu;O5,*.Nz^P;5){sUVk>Wޏ<<>^GK ѢEI-}EUUE)ZHd-.[PsUT}D׃=u;{@ 8!b|$4T@>#WTUz_9 %XXSs>cF,ls.1٘Ids/ӚLULUJLG fVtp)fTUfɮFC=П\b"F(9ĶN0&Dm;{xQ1`2Ȗ,V Kq5qA VR(\Bá5L;j`6,Hg&NbpN{|6 S s4fxL:k|6Ou*b'J0MJR]Y)jI]38z+D t{HKKq6-JOAi%>#e+ ]<]tL=8@ޮ8󸪢41yƵZ5tB͕u2;kv? , ۸n lL YU|3G[]>K&#ܶۓ=TFf970Mͼc TU s]+ªRҀqRF gnd*E\GZbmxQXu2Oz7̈8Ys? ?L5a|=>] UjO{bՙT0to/or* $HiPMOF۾|iyGPVT8=Y9$}嚥[/A|UIENG3[u$^hkoslJZ T}l i{J4run)*u>"L|g+;}ΟWlcj3,*lSKtt:3Z̭uԪH]淘j3z0,*=<.FY}u%Yf3Ȯ9kW,BUj"M\O~]#Jh*tcM寖"N N&[iV{v f`w^x9e+ݺ,zux|K[s$ X'ixx~aT?Ga4ɚE` jNX)ܞ*wx0ݛ&kj*ߤo\p%wne2uPM{eRyuu`Vkb d\Yi딗C ^ٲ=n׹qA+9i[mM &+ъEvrWP9қ/7#.+ {_T_Eem^?35iZcw9?LuH`*6 n>\?\ TTCt v{xx $l@iVu~j`:_ܡ"Šo}mh ϲ?6Ԕ-YV+?5mE ;FtH U@2\S.x9 &*6=V2\U5Vi贾uܘÄun4e;< *`ݞU0tonS's T &ݗt0ĩ!,=)ѵm ߶-U0Q h,RusY U.{7}.ƒL';ʙgNV mOnZYuYV egVU?b&dxV3|~2pRiyiz71'2,<\qQS-w:o#k / cJT'arS?s$\W8`qlMP, ܳT0 p{"WoF*2U UIƬɎ}N 6'G%Fl; bØ]Ů䂜VQ1];:ql["O sEU,E%x"9sJ~k}^1t 6=fƫWHW*?Kvy4d*!9wAr`Nlc L- /fdI/T 0B' Ibx]`Z\4*ԻиLM~s*UusBCumPX\×GwscDyE䳘9s7 >tQ70~6RG}RǪ)0ΞBEb[KxpLljB7Lv4yR"* ۬o*U4 p{Ɉ8\t0UnUUh_];Zi;5kpg~uȪh,bn ۀ_|B ~ׯxO{ݨD"hfZ M=NRq?Ozv]؜zxxLPLF,Ás )CVAsIJçAWB>rB0/g-ג[M^ȗ/jkR뎗#SɆmW붻c3XTvHHo1般 l4n5b~~i*hz/:jO6&tۺ|IDWGts y޲ƭ\Ιe!"rmr)'TSӭlVMC-#W̛*Ιh9e*_(סnbORQͅӃeI#b'mžmS>V']2c3;9n;59Nh{&ϿateGh *ܺdAGk:h-Q#ZS\6v2\.@)L9_Pl?)tAQ"vho"^Q6._T+^&#;6ƛ&TT)L.4wʹiAWEIꎱbq1"I|`HE ֠ˣLƉhev[p$e#5bc`^{Qbܵ/i$s$@$h"4 LuA͠3&DI?vNa2t>qsṧÛ( ,}u9Uϟ6.tCyLFxwo߀<߳_*NcXFy]YczT WFUjNsکict:t޷虤T=)L޾7]KYNҍs^2{r·d] yKK/M+i&|>wdzNo~O&tQ۫;nF5VM _VJEi{ɛ94긺 A#ULjokgVE@`$3B;f걭ȵ.˺7U'S(z?&~Ә }QD&SN>>RNƞ2hmzi/ =$@$vAȊH!A* jD#i` L51,=D*f Z0Yu޴Zq5Eޱ^9Gɂß̞,׾Jn*}KR-j@_OYuyi ںfEu+M#kyw?LִSBHTf97650 bD75n2=7j!GG%Cutce߹ި5s?sqF_9vT*Fx H-i+Fgw}v\~i򍏞[}td-;z覕Pi?8CVeSkTקHB̫n 2Qݧ6I~L5E9Y]Rv$!vB;єs:mWΕ '4L&k3T{["q #+"8v]W >MW,$2B@bmCsB{-W^n6Hp%"5AB!ζ NLL,M+fqg`rT_gL6?tEI Uїcб_5ЅWL_u@?泎 -*śfI3O3u60GNߍΪYz6VaI:Ѽ6*O2k1=hDfFg8Aq%StK{?FdOߟ,Ge/ICXXTY0*r=nigU6A 2u79sɲsTKݹ5vX}G U>76tkLeG9dՁI%6I Qo1w6[N>3Z$a=}wyiOuHJHrC;ߛV]`Eʬ§ nkǃO8=cY{[rwT,Jdp]!N=LxHa neHe4i4y {~tSa ٵ|Mwt۫8f$9 [a7i}~{+"")EI(qu#u\c&"uOJdQFD97mŐU$7Fja?o?xY{Tˠ䠊_TױIBE1.ޜ:"拳:`{گ߾O:G:(qNVmzKzWX&hԁjʤIOa߰}^}PZ}:aPH&U7mgȕM? 1T}y{hKLlu3i\0lu©^Yma$:qD8Sy%jtuPeHdVOg[܆ʢnA&u|^qwGam{?$t\-"|L;8#D_}zuQ%Q$h mҐc@b^qc8׶QݑAqK7}qDVt{Un@K8JqnywTn\|}aRoa#\9!J+(AQ IDAT4@Dʉ[&rO|OEDnDakԬg >M)L_6#"?+պnԤ4HLq& AsЂ"*[xuFmlgs6IӪma^tdk1Qzn]>>W5ܲ#rbܨu3("GLAn"T"rowܼ2S׿ o;"r]ף|)E&lPt!b7hnoS. kѤFr!w؏^+5U“LsgMDŽSPFCRPZ"_]/gz,u._||AstIڕjslU1U! w=Oæڨ6z0Fz:[&{|j8 yiLu:qu>܄۔jONjM8ۤ{*uVT4G bo|\i|s2Mv1;_{ 3GԀk:rVu\s@* }N_}&RIQW'4cMiy=ux:D)_t]2{vwUwVȼul];[9QٯuYt4WΕ?3͞m '/A$□# 1ӆX]í@-D ,m7}_fU]cA$BԆVY2]nych%9VQ>$lok-˺:Si6i נJH8 w=QULϵg6VW,t^&3ꦠ'Xmۦ n4%Z8䶟fAPڸuw}~䡩t'oq#NK^zn;_m߹>p$8-NB;}quFoo,_Tw=(xhN: MHs=P^z+G$Iq[[#!Tꭥ 4XA "aዄlbΰOR4$4<{kj\چǷ֖3R?gz~47]90su?i~>:l$VMq'N$77.ow\hf(\ռ"CG:c_{L<5Gj$NSd ް5i6DmdWTӶ9iYe,]Q_ >6I;klex~.8s2Y@YHZ ?h?] Y`2HD@ޣ(Tm:n.7mh7fNaߟZ2+{0јKn.*iƎ:AW~@Wl9|}i^ܲHUjVyUn;4aAk*Dʓ Y|[Uvk7W4*A_P $ L$I"d5"Hʖ{{dMr3;dM+k0sl ;O*U6ݨI5[efQdeeI#oyy;ʠjj!Ӿ.Y?zJuO%vP5V')tcԈul\}p_SM%b2ݧt*m#oĉtS.e] ̎L{NYu2MQaNh:zvDj򤝖IMPGnrO5-\\U"I`RH5Q9dAG%t Gm>AE#¯oO*( 1&&lI$i}׭.],z6+A穷o@yfGgZ*RGI$2o$"EU<#+*Vmƞ7Pt]lYZQp^PϘ鷊Ȁ sO_]~Uy>æs~|uB5>:3I4sȇ\{a$ys:JRd!p@N'*˂ʫ*{,-BmΝчAԽ_hLk29N}|~T*ʵǢID36ڿ{XLtE6ֵQuz1ŪǶy&.xĥ3+3CQ; e3hHfϻNP|_V~Q*ʉwPV&y 6O{bg9Ψ5ATuy7l'\Q"R=^/+VgL0j9?^u@/ m#[{KT@o߀ݻWL"'ooeĈyo^Cu\EDƍzWVU Mkɨlm Fk2V=MG戎RKZZSs [ (kz_~i򍏞}6&Fˁ)L˪DWܤaSFz3&hGFz{HhUb>{ZeIP&U|Y3LgRg,uH]@7"ӲeݖGFJscs鎿w;2؍soݢ""k_mu7|')㠰Fi a?7ʹaǤUV,94핏 )blϧ_}+Ui%B< 4* ([|ߖw]ek_y vϻVYuEDV^>hjR}ǷʿA LI_/6E mV8}(d]2ixiׁ~|a|j41N;u`Thlֽ簷<7Ys{ﭼlAvԈ9ẻbIm]CTYmAexZy1ܴޤʤR%T$d0ovZ) 6 %uR\Ppqi#e!A3Iufz])>qG$yzytsov^8(hIYu}=xjF'Y5*wKϝ"R97/9[}ygPgF((iA,ZH-ZTg!۶mHBiBAij t+'i{ڣ̿ j5m,Kֵ0Vh4]e篠f9s=?s@qDۗ]}*,{K^Fk|qSȏ^+7/9;r2VHCoV.H4ؚ^W̛*~/i4yt07NHmKP]5=HŌıkEgǷ6Rƽ>g:RwWZ3rEE}dD{OΖǶ]q=j aIYu}ԝ٧TTc7W^6K"ow5ݯ˲YvJE< 4 h }}}2~7^w5 ի2jDKN2| ZeMK=XΪd*oKGMR^2( ^}o9q\668xQxGδlDX]i㔽݆8ɀ8e *wmhwrq_5抄Oிh$ɯ{GY3,7ht ݯ%wl{6yfG`rH]ci5U=oUQ'6R&*9Ә+oWo}o2"t=ݺa2UV.{˻->;u1uc""r'?]~fG:㕵]޾D 4qGe k&v[#Gȑ#G>tPڛ֐Q(WVe)"rj\3~z{Xc` m}Ϭ^3%݆,Mai@L+rQ3JRҕAYƛ9N[upMb;Tf7ke k<Sʵ! ?6ALum| ްY4Օ?ކ$/\ {܉қV W=浻~.i0("u!Q3kɬv9|tP&55JFJ)T1~TL;h+*Y{|ٵ@*K =VIQu+T?T</?]˺˚wHu2w c#nok-˺:Sk!&G cŊz+2sw--|#r~vʕVtk"jtSkF=D>?A`fPwmH;grLFE.JRش$y^a7rAQ@=bT*S%mTf X϶Q8S]hokgV[:wJ&e_ս"D QQ]뻆DjǺglĶ J (9˺:\&1wA)b+ݽMc윎q)z/ FCTU#7I$)tZ0sk6ʹL҉0Fy/JE:ƵZ+wӪ O:=gqF# ..H馛ꯪ>ttttf;uA͞B}7哈y12h#s4! F9I+rQz}.uo~K5q)2LDI㍷B$(~gp{!TWaذ&M{o.طWo߀~>Q6GivU|o߀ܣ_kAM!ֵY7R]9I}ȿgUl>:z΢ 5Iwl]ϧ%Ç7yu +/Le2+FyV&e519 h&MI&wݲpB9{F)#GLM)aA nQuՂ&4ȵ1o@}y99poߧ 0:4!`z۸*rqz""׾,9i;o{X"#HMĚLok_PQI#gp{! Ӏjjn?b,0lQOa׈͆~H 6mt2ev7J#G֍~o&!2TwUb)Ů+"r݂""Va1IE *Ϙ !'JAO"* 6ru)ۖVMkwA𸽶>Mb: ]Ο+Jo"ačӦKz;8"rn{G SY!MQ9br ;$@P:C ]HmedFa+ jia]{Ǘ-<]{Qy1V>qCρm{;ݹ a(SC"Gɛ~;~]^Mz'Mר<9@ HQF֠8e@B]&?D<#.ZM12eHx9o#tu8s b8-HV# tRqy֫kd= =ptOL:&qcsPDƏiMY7=Y6yLؙ6&DVӺ?Fe;H$Qtufo`c1&SWQݻ8ϼwBbqȍϊYM!"uo'@D\GUDKQb A{[|xi -;%0[_?zx "itqjV4u*O1;7ܿz|l֙~eC@jYED$lyU:/w|*?gݿ763Ioy{t I{͟,K$6]Jz^5]Ӎ1uHu"=5mTZD;^㕤bVμ׶wtj *_hFqFh#7/9;jkS% 6X[%ˑr=/bmrtU:Y>mlGGk?EgF${tH#E^}Ц5=i%gM{]QM˼G':%lZ?^}mY7@*zyJIa]j""[>5ZP@vİG]Pm.L:t[7`h샮Rz=F8yfGh"Fu U%0QSˮRܺn[-8zp9`Ǭ +JeV%`t.˺:5zDo osYvȚgvȚ(LhNO5EǷ,:Yd5( wr : ƔI}wΠ#bmrEvMAk"ѓ:g&_lu0d{dպmsDGH _iOYOˡ[庮3;;ݐۮ+NiAt 9Y]:gJgzg9!Ď9l9:4@׾zzWNgfk_rG}ɛEǀe8ųƎ:8d"S#$T-fN>94]ytbǾۥG_%uxjѨIӠGP}-$D.{eE6;DaRO~L%D@ j Gྷs&cQ* '6F(ok ;eŃ^oe<Eie/VqZ)˺:4]a2j*(ulHo%=EΟaL*_h>Aβu]%i ʺ3\IG)õ.˺[(}8u庭",a}tpԈE+YuXzzYȪ,f[JqǶ hLSrM f;SW*Ι{ښ hFf#h$tNJ#U컠s7|MnkF#"&Ae.zt˪uC~|uBeEP,^3']>QU&I#{/i{HhxA=gDOΟVIgeo߀<߳?rn헖-l0شvk(sOL{=je1뇏ިzww]lTY[iKh5uAgi#ts@>wCP5xiݛ+*řO =d^iŊ<Pi$,\NQ1ċIZY޴C7"7ɴj^8@6˻?dU}mrq1aEZ_f㏻9IsRǵᣃ;q޾Ynk.kS܏^+5;8kTI(!ʊHegVP^ n|o/ҥΰ4?jPl3 vI'Je$節S{Qq74m|}Τ5c\~iukD7;lkz5)nTP^|շw.<K{JXAuݸuOܰ,UkUV,94G#)mbT9jC9*Ye;e_Xuzʨ-FKgܰYf4}ymdv+V"#x^&TШH(P)"F=Tp+(~a8^@cQPl+KfufǷjNRHRi[RGϕO͟& :YM~""-..Vn2>q+aI<^ .|!o05O#Y5L=°h⨨v-3D*C^%m+iN8YbUt u q)Gn_ 3Lg"kEntHqF4 ősga5E޾=ʹe;U TDδ4CMீ^Uċ$` V"㮟c;GDL,x3Iz,iģb"ky FrtTcPYpXeg̐KL{=YIϔ[m4۶4Ǭi:S޾5]ӕeƞ'st%Y%M;/qJcPF̑Zc5viUP""}|7mon*hvD+C6= =ҠSAZڿVwKEW0I*6lUDnK6%l4P1C˖.(byT%Ok:ʵl;0{yChZNCZcV Ц5N{:o}<7T$G{IAL>뿤{M߉rla4`W^ 5^KtugU{/5S5Eo@D 6+"I-Ie3萠ˎǎOӯUiǢ>,򺖣=iwIjn}|tXXk=cmM~'Nh:m_Zu]gȚg^i|OZ1_',KVkYz)mUu sOG@+r/,{ͪ^\"&zї<2Hk%N%nOخ$m/Bo4+E?@ "./)F?ۍi7u-9~!{m~'dC2R}ik}]);myQˌVyٲ3r)~q*AU-Έ@`Uޕ2Ew&tߟSfs-ʔb"ǷIF5Q/L{CVoM~4FTSZqQyٛ,2eQ/=F,SVu_FJ%Վ{4ӱΓY+H%<)9T4~FKhD$@XaZiH(=,6~5dÔJZSj%F _=D}G-tr՚/=7)cve_fKE=?6f;EwՑǻo޷=M= V<uS2Z@! JCEi`ޘI6[4JS#7j#$3Ο6.qa#N AH$8ͪaU lw Ry7@Qq"rT֛PVL$E3e庭5u6tΔ:i7Zl,t^ȣ9B?6&?*"8Czj{CٲRї@`IpeۨVY3H51(R9FNqEy)ߟ=,7=g레#7/9fʿ"No{#Ni7RlL$O=`}~]}ܩWї@Y`MXŔv41)ScFٓl&4j幑7hnY'咱l>˧O-_4wM벬aˋf*:)vj,g޹KtIJEġ*@3! +T+#Yەfj(Wjs&oмL1VgvԼ>H޺y? Jr;Af9ȝqYrm;eh$@d.ҭl?A21~TfĴ2qY3\y7?͔Y5~E&o|L,4MuM5;(9hY;}ͲgЕ?W̛*Ι4u4 [ٮM,A2Z#Ҙۨ=T]#K44C٨/h4=JV`rQ&Sɚws٥,E0[ԚB@a`I)UF$2 c,X#w5~d&,{D"$+j49F`rўŶF4>Ur^C546H( Ueۮ+NTAEPed Z&"+BWOj M@VvW_[:wJ*CDBi5j(j9mgq\͸Evl`3Z^EˀT-G@YP.h+a+Jep&Vo߀MV$j^ "ew\Zđ<<P0y@*,*#aF"6Os r)9EBCP+nW%Cl<I z^+Z|lu-votkODd}^E T)!(iţH竈nS9Eu&"4}aQ㹝4uQؽk/"<l=/Ôwk*UQynW5L67}Qx]؊݋p&EKdBKu}au@20̊ޠWk6Ec4u4v//86:tHڤOƌ޾atXHp(M I<'pv5QWDi(ڽlEюdy=Pπk#@4 z^"Mr}1ASE߾Ik@bf.v&z"i4p4/@fk,7}"5x6uQ_4t=JKzd}7v=/U*""U\_(x> %$W^_us@1vqA:&EP$E,Z:6Ā!4h_CHɱ 2tA,4ziQLUk(xѾ԰ 2tk,,FA! ٰԸ y d2Z5xx^n{q:NP$$@ ?@8LAu|VjאTV )J7>`@)@x^6>wd4FaPϩ,,PN,z [*qBc} yc¢P>eɓsL)O}c_L8c (!1ʩSe9NyaM:vū\Iy`μ7 @Xcc@*޾jCd(Iu-@1JD-8s2`QGY+  ʢq 9ULL 4 P"c@\  + 4jS9ՌFhpP X̧Q :=(z  ""O  5R4j0E ]7F=rhh`N@z%nג4GJED@r^EMf(gtzd}7hr7Pc!zd饀bc}EB48٬:tHڤOƌ޾@ ūn{BS"n5 s\h\RKeԩr'J{{|򓟔={Y A)-\P˶m۷˟Y wa,sXMGKʑ#GN0 s@kʃ55@Pz.8e7 ;i@ -$@PZ˗/o]>,{G |#Gȑ#:t(MT=aܴv :"-͒+M{2 h+VJ֭[(6maÆɧ>) mʕV#T T""kHo@T Ay뭷|g!#F{׿ttteϪFttt0G!~>=ֽk'gLa6F(Aޘ cҤI2iҤXIp9RFhO--VHQmRIhZLygo_|Q~_ɓO>)dƌP6mY2R-Cv""rqg|6`JgԨQvZ,.-?'#<4+MgN}s(%`Fr-rq#Y@h_CP hok%;X P:$@@C P:$@@C P:$@4޾Y} )20< =aܴv :"-͒+M{ JotDn^ @ɑPj;Wc#=Arǔx4Pj'$AU*9qT~ 7L@`Rkok͒a %?niokyˆS٢ oPzW̛* Μ$=KQI~VДxE) ) IOt {x^L@~u^EAr@>% ;UOyV.^q9vMk7ˠ#RYy,bԼ7  ޜz]DdyYp$`PBLoǾywsw8 h*47GKKatNRE4W{[l ]*s J5@@Sqo^E9MySega8%F4[{[+ ДhX P:$@(޾Y} ) 5@(6씛nAG"Yrżyo@Ca7PM~ :"7HHP ;Wc#=A 2}hiԾ6RΉ Eiok͒a,ȰJEnioky P0W̛* Μ$=KQ$?b @H)@C P:$@@C P:$@@C P:$@@C P:$@@A9rD=\T*/9Ax2eʔ71 (uɿ׿7yo7xCZyeԨQF9r9rCy18|ӟ?? .s+W)n% M$@0VX!J%[m&o䦛n7tU۵kWJ{H[q'L[o3ΐ~P*Jcǎɰa䪫~F'cǎ]vɘ1cm;l:$rAikk{sЄHtvY~Ǟ={K. /PN?t4X@Bv2nlbtԩSk}I'Ȍ3"SL]v'\3, <#\qZodʔ)yo  @)2cƌiڇ07? ?@>pi' (Na7h.-yomþ|%aÆ?A>`@ָpWan P2LJ( tHM;N9 /{.Mʕ+e޼yr')"K.m۶ռwp 2a9餓/7x=;w%KȨQSN/~?=?Γ#Gʻ.whVJ"_qٽ{| &Hkk̚5KǑvimm}C5߱~ꪫd̘12vX巿m{^~ey/'xtttȭޚEu1җ$ӧOV1c|_ﲮO?_eʔ)RT{~9sx2k,y0Pr$@&__ɗeydΜ9r%țo 㩧nA]x /G$_?SOɞ={.رcd9z_^??U߳cYd,\P^|E \s?t"ڰa|ߖٳg׼νr ' ֭_o|CƍW}ϭ*7[<2zhKw]=W]u'xB}Qy뮫СCGG2m4ٸq|k_|+rwg@^Z.W^իW˭*v[=2g;^[~|cZ6m$K.Kʖ-[yM}s 7T}1gʔ)ʕ+s*曎8O=8sANp~T+8"?wq{1ٻwo=wu3fȑ#8΍7=+¹K%~8~'x>|w{H˝.ɓ';_תk---}H~e@cNjƍ}ͽ6sL:uj^.f͒SO=K.D:$/~W4nA,YRwpyG .|#r)ܹs{}ǎwޚ{M.šoرrT}HZZZgg2bĈ{.ٶm8p  颋.'ꫯK/$ݲxbF< Ah2cǎ4zꩲwޜ hl/|A.b9sDDd޽2b;vl{޽{:tHR~ydʕu]w%~?_|s~"r 3+rJ߇.ǏtfŊrW̙3NsꪫDJ=܋@4 7 [l7(]v?yy'O{s288(\pr-""2w\ٲe|[ߒ{[}g=yOu})Sp @8q 6Lx㍚x >^>mۖʷpjjjRejy= ?r ;P}ƍ8rH444ׯ_qرXzuž}bʕ'OŊزeKrhooK|>6m׮]8_*ܹs|>bjjb۷oV8|pU̼z*v|>ZZZo ~ebŊhoog3~['"koߎ 6D.͛7Ç!UED,, $G#@ @r 9H$G#@ @r 9H$G#@ @r 9H$G#@ @r 9H$G#@ @r 9H$G#@ @r 9H$G#@ @r 9H$G#@ @r 9H$G#@ @r#wфIENDB`gr-satellites-4.4.0/docs/source/images/ax100_deframer_flowgraph.png000066400000000000000000001207131414055407700252630ustar00rootroot00000000000000PNG  IHDRmwiCCPICC profile(}=H@_S" ␡:Yq*BZu0 GbYWWAqssRtZxp܏wwQe5hmfRI1_C"(eJR%x?GD-X 30muMOceY%>'5ď\W<~\rY13#V:Mx8j: 9U[j_.K\9 "PA6X~?%r)䪀c ~?ݭUIq>.Ь;4O3p `z[m⺭){0dȦJAB7[w뭵 K]oC`Dk>3~6rU pHYstIME "nW=tEXtCommentCreated with GIMPW IDATxwX!bA#vET+{  ={+ݨ؍-`/ذ{ٻQEBhzٝٹO@DDDDDDA(hQ&""""""sU4o\ qQ%?N#m""""""0eFR$=4+""(hm"""""" DDDDDDDA(hQ&""Pl X;~iyzdM}0qF2EDD4a7?zNXm""" DDIԒ'O3ihi-% ]fK\:?ǏxV6\ ` (Dzd81zPU""" DD}JeCCϦL>EZw { 2ܹ5z0'{3zd$IJ$I糌#'so4l\ fNOR}$NNEq3Lͦpٶ}ktsg-aga`̉+9{2dga7o|rU""c0޹7^-ٴ|1tڇk#zʮ=MMԨ^1C0]uF9~"Kq˰|bڷd8;'I$icg5[x5i sN9rTX=~pǼ 鳧l ı37ӿ6'<r+{S9cgaaaF7PRq ._0KEDDA^dɒsfNϳgO٫V)YO ԡa\[DDDDD6m""""""MDDDDDDA(h&""""ok\~ |||>~5&""""" H'b*3Թ)H'LA6Q&"""""MDDDDDD/""""̞=[ DDDDD>ewU%6OY…c]YUH(hm"""""" DDDDDDDA(hQ&"""""" DDDDDD6Q&"""""I3W|\AAAQ&"""")3ٳgUQMDDDDֲex۳g*Kb{DDDDDD6m""""""MDDDDDD(hm"""""" DDDDDDDA(hQ&"""""Ohh(V6l TaZ~%RIVm}Ǘ*]B UYt^qV6*TqW&""""";8̝hb`0Щ+[C)#om"""""6iH ysș#wtnG!&ՎcӧOhU٬I1 f:ze 95i2$ƵPN|4;\yT F*KY33 Y*333ƌÇ⵿/_}fOI)B>sN`ec~cQ&"""""qJ$ 6bb_,{4j)ͩӿѰqM,,,9m>eJg͟YΟڱϟf^m0O02k'U*tooڣ=`x#> *Jy#H+5i͑h0^yu,&s5{ce-gڌ ׍bnki-yiznevZիZbn >z(a0]YܽwFN<Εk u4j+e+ū^MZXߌ XWޣ2s36l\ÉG{N(hBݽ{3{*A-l>tugSߖI-ɒ%+n׀M=vo.vץ3F Lͼsx9 *6ѕ#>s$HC>gsoO1 G+ǢMDDDD TpXן={9觑l/SU{H{TfȰ,_W l!3KBEqrpaܾs]E篃x;L*``TRbx]Nhd>\z5kW`4֥7)c_ju8}$SM$I 95˙;=Rq6͛|||T /+'GW]]ށW3|Ԃ ޑM133cŪxJш x\9pa;rEudTFȸ#U{:eIxx8&2.4jK?\vM[씟SLAc6'zJپWvq69FR%=+QrM{[;-_5 k҄٘'0gƬI/W%^ھunAX;_bD{hHCE>/`^ ֎CѴqK6LÔ>:H󴉈|(hm""""""_hDyn䟠yhDDDDD⦑6/Phh(V6(`Ӗ|]ʅ95%dH~67p:tjoիW1*]B UYt޿Z.*K+װ1P{ҏ0qF}}c܄.495< 4ϟAlMz 8d(mzmvW\"eXhնgQl7˰?/]+57-4V6~=}w)3V6沉NBwdHc&&Muܲx<8d:YJsuHYr|Eufui2$&CFs-Yi)S֩͸Wهžxݽw`{tچXync<4@.M;;6GdcF#Gqڕ(ۇөk/r ƘW?p%֮\r=u;u֥ӏ}XX $P#5o݀k>]ڴED8F5ض}+.h԰۶oeTdƽcg~?C3wF񳪏- Al!{zXg~ٴpq.I˒4Ehh( ֭ǁlظ=[N{Tq]?e܄ ~^,>s2d]NٳW‚#&.mz<7Б\k[0,{j ֮MY5y25b%;oTּU]Fٻs|{韋s^ϱw[=Kg(wX*~>b տPfXU1f0>|(QppcءFJ+LMH1 6Ł(\,/ZEUMk)Q2[j `iʛXfyyy 3GHy>}^uȜ͚PHn֮7b%h4w8[X Y5 &{Ϣ2Uk)-ujyry3++kN c9$Mj ag(!~mʥR&ɀ#L3uRlAΜ=@U6cB}qО]Oqto ߻H:-ם"8ppi]tH֭ uܻw>Sik`0>K={J@frC,_LbyIْe {Ӷk֮X 'fLB>,?~Xbړ.%\ ܶNcecge*V-KܿZ*6mQL߿)=ĕ+֥7sss˪5˹s6nߤ[z·MjQϳ /B^(hVXXX(&gGǓǏpD0~o0شe=^}4m^ϔ͔ @9laԪQ=s-åK>vW^Ѫy{5mCq#Wb(jZ|S~U*1kׯ;ow!$F'SZӨcu?iTe{s]YQ̭8y"bk:x[իZbny)y:ҤQ f̚ȉG{ɓ]|!t#:0 FϼrLo+\ٳ22bxSy)WߩGWw&I4)2v_ yc],POtojٲeٳ'qg:%yWk~CЁ]ԪQ1]ozۿ0~;ڵ^Fi*?zh{>T\Ǐѻ_Wvَs[B^{ Z` IDATkZ?|8vm fώcqt2TGrx0Zy %4,4y|(O>߾,RhM?TVJ%KV;s6#,,N]PN9֭ %F իYvFn]zcm2/W.ե qLju]rw>;гw'J mtlڲ7Gxx8!!!͟M[;J*G,YjOņ_Vܫmb疿P9N>Į=Iʆc0(S<6Y+OR$}896M(I.EgN b-⳸FĢ%~q 䗵)_2FĀ!x!wܦG%\] beeͅ*fڏ!ܻw&4%Jo5`'O{i'IBCܽw'G"؉#"mR̙0r zvOXXvzڤIíOFDcҦIG سo''d_nUŨMߴq+FÇ^ۃN6]xx8&bӖ8:0mnyX<5eN-ԭ .;=_^Gc*5?3'{?|xăiӾ 򫡥e2Cxx8u!d,][1n{aee]Z1iX&YKk0IZ2}DL#k! mJx*:ʝ?q$W^eZ9ڧ99ұ}hc +V-YKO~G5\7;N=}a/O,Y9r3|˳?S?{3b֪wT\kҮu'R_0zPgS{T&s, 0ӭGĈI|ߥFgϞ}V̜=sss[+CʕK i$U*Ոu]L>%_<'wݺ}'sԩɯy7f:5kc_Ygʖ1Kkլo:o͞x5ψQɞ='prtwRY&ޝ[0tK=x16"p\ 0s|={J^JaB?Hko{l:}<իzq_̩ӿa , F ٽh+fr=~ٓ3suk7Ô(SI-z!tў9swժ *]ډfQlE2Vk6ō"6mYϠ},%"[ MqɛGkroOQP牨_꿟E3sdM ط7Ź".\|Vɓ{>f.sc}EDDDD\` ;%fMÓV,`<*.2'N\scg=˳gO?<>"""""VkXĊKqn&,,#{.429VEL\Of r粧PAn>80okn[78S Uo2aGDDDDDusgيEL2@nÍ?K_m#moUi԰[0/cffFCϦ=ACzs=t1ּ\gdMv]ieI-y{nS.Ϲb)K=K|""""": ;ʚ"affϒS5g;YDDDDDEbo5 E\ieem t,qͫ%KV&<< 媐&u^w%b]痂3>#̸rA{v:%kƺ+yt7K<+!bVr'U*O5M ըk[vuߞ6r-Se*DY2޽d˝W_RL?ȇ0uxzy+Z;o?|l3m]Vmk&ҤN˾]'~*:6ܹXX$v]hݲnߤvoл_WLI(?"}f_I9r1-8e4~OGN81cFMPA7RKȷ :i.qJiP sg-WߣOnn&yX[SVV3s95m"OI<K9@+L,IooG8ppV6qF`ec`3l(Q'O@]TZB9b]{ceco/%]fKJ);Ly8ڙ+b%Nc]d̘ Mr͛7"xwgOٿ7'aAۭ7Ie2S:h3 -U_7bR&?zSHA\DCH0!vt)Y-#F v5떧x;0Ccڌ 4ảj|"" DN8J5z0RвY;$H^,]i9{4{v|rH a~O6g#[)Q ];k>㼧_YFϦ=Dw`%XXXаqM=zAgY ()lҬӧ_ f y `6Jz9m`uXZ&{$?yD5qZ}uVQ"9"eʯL?w/ͫW(薇n?|]SۓKx ׯ_%wgNjW~ ٴ~5`#۶G-a% ? c.}U>n{L2b~߿ǎ<}@XXAFa00 ,P;w^No ʗ̀ؼ"?̓ž3ݴHAFȟл/N@fúUXXXP~E^x@F-Yؗ[o{wލ3* {OE'p^3zu=.HAȒ9X/U$gx< #iɔ333~ DUYtioΚ3ɒtقX-7҅*F9J akk͛77_n@8r)uaʖys|HWQ^%KFZ_xLƔ sHha%z ޽;L5I-q/VYc~W]7M0viYj%ٻ6Rpq.@xx87ox5nEɖ5G-6.ɔɖACл@,,,"]Y͝ FcH81+V._#> mV,,,}UR#*sf,҇;q U={V$1=m"+ǏÇZ\DXtJ2vthB&(TЍރ7rI:-ݻ+?.iZWp18Cqrt5ԡ_ H2,6{oԨQ?fϞݻwi[`__@8{_.mz/h_}PAO  Yɒ%g=аPڵD>6g*v'Ym/EӦMSň|N9IUV6Kx#ӥ@C{IqcđsGtܺ}BEwwfʴq*jO81WӧOhѺinyշ 6E=*'g*jOͺiݮ1SѣԬ[e P36SȞ 9wB=w*K֍0X[op.toGiUgϞǎܼyoVcي?Fշ Uk`_i6׿i`OfL5gL:F-.]bd͚ҥKJQɝc.0t>D/5h >z+V6J-gڏ5RlȜp"N9|=v2jx\t89rmw!eʯȘ1z#mgd` ?-;kCƱk[0{vcώcѥаP5R$I"G |x·^ǔ̌P <ڴ:9ܹ?OCҧk٬ɐ!{3ossF/_ZɫWסoN„ ͔Rp1g@.^:O\ٰv;.LԨ^kbUIťTR̝;0w\RH3wN|t:'r033c?._ݴez0H"MՆkynlڼǏ2+^dusg0nw[7<ƍk$K4w9v;v沊͛y.ˊK\5Sw uW/KuuѢř8e4_-AѢř;' CԩɊKXv5U ;;; ŋ K"!":\5cռ>))VD^jӾ &mtѾ~{pdܺ}3~rCZԪW4Ӓ)m˟'w^Rd̘gGW'O  H(1w,j4jZ{w.s Wf$IӢY;(E .w`R?,;cpu]̭8&p$MjID)~JhM['eHӧOȔɖ4ӪG_"$hKʆGwΕ3OuoS3Nc~W/)ٶiy=ԡGZ&YL7+snF[eJ?/<t:I,_!Ƽ<дiSyBWJaKA-Y}{Ə9GQlǷ >F#*ܜM#F}|3m bg<Ox~1Ѓշ ۶(qbrAcȓ;o&NL'N̘QS)T eƫWH߶mMWD]Q7wuKcmU={w#^8s6ê,ȑ#Z7n\]/eA۶|6uy짧^ .K6]Ç2:%5fނ9ԩ/6?~ӢMC]K/'wׅo,v"Yܹ{1[$ \r ~ޏǸ_" >F>5ܧQӨO\I ]Wd{\$44nG$H`Z*(ťKSqS'(ZܑUks]f\t3'ށ% } ǣlEx'Q'cFMR5z0W^&W< :.=oFyT'\~]Gb,ywَ1dXzMt#wROz|"aaay勗ӤY=&O~_Y96Ӱdj%JNm3}۷oRVYz>]9qRm\;˗l0ypl6o݀MjӗSۤ1ociԮWn'i:}QJ2bεEUO<; Ҧo,W-[qZ4oGrUH zza'xF-޳4mywsԵ5_+IYh.~3M9xh?S'e/7B(Tʹ7s4VV?d̸a4l\c.`etڇtiӶ IDATZqӨY<һ@ryOn=$җ)b@ʉeRK *JM˞=w2}:|#~qZ~CLY9۷oFzo|m[{0܇+[lN:s~SPuK3b@ TIjV9߿NId666{zwqU__;EÎٳcΜQSݢbasB"q 'Jf[|sQC6^M8I4{vcܵm;6uFm:}N>Yx!ϟŹQCR&}{߸Q#&,Yr7Vվ._}wEW7Uʀ~xiV-$:˯n(cMӟ={e 8~iӦMZ8sE/MXX? E_K tlkV]:RjعPڴߪk؆+i^Dٹ0Oo.wjNzzb;ԩQ g^d)A?nk~Yrgϝ"eTJm"_s`hK3n^lb2Q\rW߻m62 e*DWUOk\~W-z٧@.ٓ,]',_̙rIh4k6rX?~PЉV*)y1A7㈟C񚳌~C~,peđʙ'yaaa {l8g];e#}&7uk @뉈Ȼ1yͫw&{zțM4T\If=O"׻k %uz t<2Ϟ=wCuD z8!orȧ?DE_{i˘13Æ!},]%Kl̸alaO(1k׭@a"""""Q{-mt֏^ݿ YFRIŊp> 꼵_WZͲdɑ;^ʎiGRʵm!kR*W/s4hHyoe̘5yދRLA]3nhɝǁFe!!ܾ}(ONr;_05_S|thוe;ӴW.2e'{v%aDԨ])#EDDDDqى|ܹpevԮU_Nr;ݽ{;S&=O D9ez bSԩmV}-@IgnHPc_zr\J(O/hR.\=+Ltb[]5n]=rKo{V$.Ukي:JDDDDD Rq;m\ǁF\J";|,yswY0w9ӥu{uS&6=ziӤcǖC bْ_8v0mw q6:pdgOUsssn]{d=} ܻ”U_t'UKq*4+_:׈s^{Y1aR^hh(6 f6|b>~tp_SXޗ4zP [FlŶ bgp."s5tҊsѯ5-rO+iG,Vs:܋ѩӠ2e>H?NʔPRLWYS|awjn8I>~Ѽul2XxO k._0 j^_'StִuWS2%-g3c6._CXuV!C֤dȚXˈ.}s{YAo." D`Ht^<\hԸ&[ocYuמT\J{6^lʗdj\̥ӯK؍%]LADwD>Cԩl1thO7] e8g0L[5o'Ȟ-)G|iaii GhX)b\vƑlXM#x"2d6?cȰ^Οіn=3f0|Ȝ9+fffܽ5kfيEoyzϜ%blcf@ĝvbhsދ2kT$2JOH=6kv,--}kwo4Y2݂铔)][pۛy!M[8qAJ5H*u۬\: $`GxfGK*_RʕݷH:cMK}w[ԝriʸJ7#ŵ5}sO\8{'Xh NNEYtzlxdmB"̙R+wn&0iҤcGS0y4KfE˻y:N7R 72s8e]ʓ3Gnn mt1nDR ~8?ΞwP)! aŌNɕ+/S&̎\UO+iM#Z%ѡ[˜?у1KD 1ellm3qLKhH5ru sgR/ܿnm:tbz`&-ժsfΞ=VVI)^$'NT2q3.} "N2v1iLSJ̝9Vm"EJJ*eB Kzp KKjת q;n/>.("%1F۴Q&6mڨFNGLwDD=u'D>}u'WDK;m"""""" DDDDDDDA6Q&"""""" DDDDDDg/44k6&Nm!kR2dMmL2ISƨ1EDD?itOza6m""IĊ'Oho޺>N9f8EPccmch.D9bdȚ{l8Ѩm"""#ujYy~y=KV3=&7Ə`tOƏNIH8 V2~t~p&`iiɜP2#F {\5(hy_ `&Oe ]δnف~*V Uٺ}#!!!=vm'/vަF/@DD>,Yliټs 44 ˈ1.ؽg;N8k`2O,VPeʹ^L KrmӴ_֭|)_283fNXI;jsSіǽ߱IURؤ%{\J)=c v8m6/Vm^*VqơH/꜏zҴE]Ewʈ}bjOm""%\/wN}XY%s4=Ъ2M߱s 5{qw/4&u ~7hY\JԱ1eK:owȗ7?ի{q+z sʖCPrMZ5E[^Dٹ0Oo.wjNLH*5Iu9xhNEM:| eə#7"С# Nܸ9"klɝ7ު)#sѶOL)""MD#UɝgmDFf 4, %_ (1Zg;ш[L0+K~Zt00n3'md̐ @"%(ZyYa ~63fff}2|fffF·,#}bjgHČ^=IiZ%j9s5w*IXRk\~W-zU?-;H.03/R"/EJ䍵ɓ[9fsM(S#5 bWc^م}wFxx8voN=?vcWȘ!._qSrf [m$(1/Yfi#gN1OL)""MD#Ұ~lm~w,T93Su,!ctҗ'A،{Xf/%84b̸a̙K˄Typ-[EKckgҤE]Oڮܹs+yr~]w6BNM),,{c Ǣ8 ? M\ymoܪ Uq-[1ʺY&6wSFLS{`4jM6LRcףoKDK;m"""""" DDDDDDDA6Q&"""""" DDDDDD>fj/rhvm"""""_)hIKx-ŋ,Z:ܹܶ(V YbGb4y ['K˔"%~OCBBpX,9R6c"f9r"O 8?`mcFrq#̌!G2oR֯݅&O IDATѣ˗/ֳ=Ys[1.\<_bmcQ}Q&"""""qJ81Mb鲅,YŃiӪce~p&`iiɜP2#F {\|̺ >|ӺK}hݪ1N7 ԩ݀dSгO'\Ĺsշ3]cG|/V\923g㵽'2e*ZhIc|ӡIʊk_s"""""y#mۦ33gOaޔr.C~;(nHHHGe;womN][7(TRe?uS|9s䦜l7c\K^4voi*ٴ~/;wm ܋Gxh.<i֤5=ctO-1`0Tqϗ.2! q_{.ln:у(ew_|/K.60Pf}2[uQc^{4׾(hؿ80Q˹5[5*Uv{i:YӦ<9NrG|/v}.=}Q&"dO݉;""q9q(CGep0Yfc$Z6o}Q&"""""S1K i)hQ&"""""" DDDDDD>3@$$D?NPm o^<7R#2%&KV,*]5#H`mciXVJE.,[?mkׯ`mcFrZXR%^O2IS`(m\hֲ=ʼ>۹s(V,j^ 1pXr*T.A4fiڲ10bԠqCYlfUۯsȂCGW'/(տ`0лx!-[7$idtڗpOoo4ޫzQjm ;n `:i͛;lۉݿH RD?d̘N뻏`ai1H.sQ|֬`ンOB˄~:8~|Ю+֯^߫c å+MzuCCC17MƔ)]sF7;S'Wf&"bfp x={`VLo߳O'ϥjx{1`,k̛kwaffƄIx!vl[12dMS6Oh4*_8: ]4mQST~2groPYw1C `ɟ"9eݪ(;Ym 4j\3kŢdɑT,7 h.kEsZ},S0-iDl9~Og/"mttsf.æygdcٰvv@yNۯU# \SvF( |QT~gl"<ϴ)UցtSі3gw߽X4+WDvbK9'v1:UkX.W wdђ\ BBBhצ3[vKykLHo7Rȡ0z7|@-UE+>HpVZ"+V.kv+e~NA6c|uP;sM+ԯέMM0:_5dンg*V+b8֭9*¼K ~A63n9s2!X8oIx/gz{= ]f޳BE3s1Ϟ=_X'ORo(w^yYz8k2kl9 fShᙛ!299dr2gts V(B$Vܺsssz3Yp5j 円:#M4Jbٺwގں}#GX&LHI_MJ._QXPϲFDș#7w3[_x̚_VrؤNCua('rp-[u>;y3BEsNM;kG^|r;ȊKhߩ9Ubm 9 Fѡ]Wƍ!Y3w&U\hgշ'O#uj:wIνܜI/o~Zhoz9.V,b؈o-SR흶%">r0"F91xR|@^M 98,Yr*2F}i߶ 66iͅ!7o zLv]i߶ ɓ[~if_1ljIKɚ5~NQދط\"^se yR6ZZ޳s9uS#mm  BCCiҼN`ȒŖACi˺Xv>;*Uq:~2Ǘ#M2~ˊQe/g9; &∟/Ogftiǚ3u;(؍n=ܰz$Gr׋)ԛ +Nq哊)Ӟ;pZȞdž)oED>eO˺UX[`䉳8t{ ]lٸi^r~l߹ٴ46iIxEK^lO)H)qĈ|Lӥ:к;Yr[1.\<Ğ /Yn3g~]w\<famCЮc3˜1u>IX0v 9{ 5jTCn:d)m^lZ(/ @59{J#~1扌+ߤr1(hd̐,Yl9w4O>𑃸.Gab;C\J\L97]rOY@mbf'Tra'S\^S5KJbNu;~.Ic0@%,Yĉ湖GIM81Mb鲅,YŃiӪc2}̺ >|ӺK}hݪCz6SC8i. [G4NXG:3hI:|N^Lv$LȽ/b\\Gkۦ33gOaޔr.C~;(m_Y[nPةS/Hf0{TΞ=E?I,y7}?/"gXY%g ƌl3wM߹s+^杽.yZ'q$p#~~ ~c[-Rx;mv5"Na Ԋu6ZW$[q)hJ}uCz\SqŠ-ӻȗ7?˗#w;g,?ȧkrA$V̚;^3)T M,[.{g=&O˭[7hۦ3kWm#Aomӡ];6=R$ ׮u[w:~ےx΋c"ܹ{Rȡ0f-!>#[jVCuԾ;ɓ[y:O~4qoIedbˈxFQ:͓n=γgOֳsMܜsf~Kj_:/&tǸ?Di/@rMc=UԸ.LJ>gM,]濋㆒5K66nANj0776Y̜=ܹF$Uk&ek?.Xg֭_͌YC`̸al+slvޣG=}9zW&MƢ%uߦMD[d)_ip@ѣr-DFddȚK=vknҔ1Xر3b dcC E8SY._@TYbb-)|bmc`А>YFRIŊp>SNL{YAovhh4"aaa~A,s=*e6 /2f@(hٳȓ?Ə ujڶ@ hފ% W3gb.]@~]~Dn?_V͋rm۶Uc}FOQ&I !e䭩6yS^dqX0s7a)_8+0ԯNCܾ}3_ݩ {Q7YXZ ߔ1cfϱ(Rx1k[BB1?_݁S6^Cܛfue|:y SjVÎ[Q)Ȑ!h/|_c2666jo* D>Iŋ>OEw⿭tBN#,, ,~DsE\ )`۴e+T!s欜>sI*5vo#wY&LȲk۰ I&~]wxqo?5gwt3wD>QNNNL1#2ïSxI.:^=8˹+O" !;m%K3uLN q K*MkRfV8vkaN]:nkVkʷAJU'nݤ]&8k Kj&NM{f >ʠ}#k{ *WM?է# 2|¶i=,m;W t9sՈb阘дiS6l EH*W޽;a=<~IyLC+SJǦI]("훖w2M];nͶȨ3*Nٿ;m7k'-mv@,kuO%+*#jZ^])\t>gGK7twYʊ72tvG˗Y !Bxm paC;ϒkz2qhq?co7..Oa^""Un˭76x$>wcbRplEpYxp/5k"8,Į9GEָFc1uL-m =@Dd8 x'O6z7R*,[0Y)c+!?ê5Kx4]zk6e={nK۷--\/3AAA 0@y">>^x9?>eVՔ ,/4oA2i g0' pq|w5f~-99?ڷuR;UՎ~L'[z;[C Li+W/1lHNG\ɑ_EiZ^U)w~"@I-2#F,Q$_@tyr;,eIJʈo!'u'.xv8~m:(.\ڡ= Μ8Y>Kߔ[/@%MyIJJRT[F-q\ӦuG|=XJ,MLL|]]]ʗ5{',1aN@nF]ZUl7-4 <3]zùw؍;x>Tz홛KÃ3M48;;6<ΏO]u)ɛ7/9fe,wit?u8:w}\\rצYjhP 7ZXN}XhkiVr5A |Y/ׯkJN}Clmmm6o훜;hkJFՔ7UWszpϗ[7nF]֦ |A_1ǑW";woZY@rr2_& pEcŋxp] ˞q\A@70鳧ʖ%++[mXYlwHn InDc+bc`\===>zPe];bNYA >}:7o$00P !7`u,u_V+r[0MX_ccm!X YӾ)X9KYv/^2yo.9IhLke+Q 0ʗ5fjڴm^1iZ&Ϟ=l/VBZԩr0Igj۩5+71m.GRr5/XMe)],'`jw%ݾW)v轎!SێYcu' mWEk(Y60;yYm'y児ȭRz7z9ɟ JS̟Ly =ۦ8|Z-Qߧֿee<5:cK[DB2?dD/B| fϝ{1,Xu}W^)yѮi/W>_:~mɓ'~*V^1f&'ХGk%MΏY_߾}39022믿 _iGZdrgp_GQ2i$/D]{de߿aÝhRqx$&Ð9]RRyh͙犍yzqE޻ @lfΞʹW(T09{]ʝBKۤӖ -YQc{0o]HAXԕw:.e2_G$%%aei2 ujf j?.be[ͅq!7jjǗ'Oʔ[ެZEA_Hwz9Pi"ɭ}; h8#7jr~/DN'7r>cryE1e c@ꝯuVm7N wSnRly.ALL4)))Je˦=ldRB !D-[ƍ9r g4iζ aKk*Vyr6i/ ?sq\ė8yTT%KVm4ACtRŴzM IsKYT%yCP>7X|| !ah*V+Qb8jǢd3%%%Q.ÿO3d|1qt]Udi<=T*^~'U~VԌ!==fXOgWݗ(Q-{3jѵs/vciye4zttIII-|r+K];q ;P`׬>h,CӾI>jj}Tv!D#wor<@[S.RU9N5kR\vbȠﰲ3gwiW]fR7ϐ7_>ule4o!N!r!M~/;7 ž{W!UTW=Fu t_\Yc.?y5X>3'}@ؙ\vǏc%"2Üm^9Kq[8/9w O2sTj4ǩ@TCG3z>z샾[eijwB@a]F;1eUe+}TEUѨ%D:mo]fc; c Ks߿vud+ Pа=e՚%˟ڡ= œ8,6!ȥ46jl񤑅5ECv՟'=ƭ[7v 0e]:T}4N[7s IcmeQ?^~͸1i֑8&Mcԩ]ȘM8O|?z䮪S-Lx:l 3(dXISpMj,Mʥ:m7XZ4snsl4i2Wb%Rס>*KU;\@A8L`{:::eZFVGuy<ſ}B>##cr>c9❶ ٽ/K!993RmJ'Me7 /W:te:,m8tx?q$['|B޽?ǡe;):[lgNk5HDd8p_֦)(w2[_f>f7OQ!ӦM&Xz*'*Irfʎÿ'CTwߎEk+lТYkKB\JS>aZG[H^=eia6 0i^k;q֖`jj R[9kVn"!.GbX>^Thda 38'V]>maڶkYO]Xʝj}YB&Z))))z>"n1"wJ{WUm\UwyiyKQ>JS*'NӬ\~=!Bʸrz|ٞCG2>aՀ#8jEC+SߔᔙÜ>ʾ=%5ۚfZZUS}ƍٵ{[ڷA_.\TcGs~Φ)*V(+viL+V+LW]~kreH*WfZiҦu6oW=07y9OCXp5&,:ytu7k1&*IaB|Ԝ6!>%ɩyc,OC/!"(wb!BB!> yM!B!&B!B:mB!B!6!B!iB!BqsڄT !B rM!B!r-B!Ð;mB!B!6!B!iB!B !B!NB!B b\IENDB`gr-satellites-4.4.0/docs/source/images/ax25_deframer_flowgraph.png000066400000000000000000000313251414055407700252110ustar00rootroot00000000000000PNG  IHDRs@'iCCPICC profile(}=H@_[KT :Yq*BZu0 4$).kŪ "%/)=Ff8jN&lnU"0z0L}NS_.γ9z@>xk׮{zzݻwΒ=zÃipª*GGGSRR%Գ˗***QaaappÇy-M6Y[[\!**J\\39KgCرqrr2[ZZZKoooΝ;VTT`Yryeeek6d^X* %G!!!wIII166u2331?)\g LYYyذasa.;I&>""BFF~iKyyUFFF2/0,a%lg=LKKaBf nѢׯH,% @f ,% @f ,% @f ,%@MM`` Y@ 2Kܽ4#,~2yy lV'K#dߏef_UUEDF5,"O%5 :l[^^Ӎ62K*++x7=8>*+Sd+=)+6&}V.vr,DTr[lk]i760ј:claaAyy>l6K͚0yD%DļVR0n***Pxq[--6K|m{͛۰KWKEnzF*.eh6˾9UTT(YL:DQEEo^87-\ёᔔƎ9m֬Y/_dp8ឞ{}ĉ]\\|||oӦ̹pki)Ӧ-(}DJ-~!sM9Wx[ݹm_%DT-zc`[KKO8elZ+EHo;YQk=r(o q&cz'V=c,@D:t(::DrJ11gFGGN0!<}tϞ=W\&%%YXX><==y[ZZ:11ѣGƍsrr8qbnnnff])..>e,">unn Ȃ\nr^nǎAD$$tOpHKvrRVS"oQg.B֭A2K{JJ+?dP?vѼygώ=I.yُQdeeڵ棫[3jRA.}7B'GWi)C%6jhꭩ2n7m$))Ysɇƅ 0;:z{͋ϦnB|<}tJtM,:YUĞ<}'ֱz}||0g_gG$#QUU߿ TUU233LMM׭[צM0}}}&iݺ N>ݽ{w))a}=#"Wd]!y 3Ƌ$ c-l}ҹGBCю{X'*?&22:-/X1u%p+\U[hҵ6ho;Vf1>Y" W[g:uϏb)))ۗ',,,,,۵kWNN̙3555DGG3[HNNOOO/++~CCCo+<{mcsձs|g?Q|&\Hz׫W^zU[żրV͛ApryMBBBYݧWRsPv&1d 0dPѣG~'_#%"PuY( migq gEu:V?#F~9g*YQQ;%5 6AR"9f 1?_,g~^vcgu-95Mv-6o[iiYͰ3rh lqVTRh`ۭÆM? lViY)Bǟݾsؘcތzf0' 6KXw!cc\{kTT`8NB>cK75mqѼy tuZ]t\i;;'!*bzJ'˖*ͤ]zrDt lq[-fE3"-9wyMDj2 l֌g RYmo:ث]޸y4n| rW{ {ˁ}Ç!"9l4Ta>tHI|/ 8$`μ) u4SZ:ٮ]8OHr{n|Ƣ+=un:{ɮqFԩ+3|7aSٹks.UoV\\ܼ%޼&pX3W7oܝD^>k7riSKOZzkI.i^s~ݍ`R%\!q΋CG#l@$ %Wo߉ꚙϿw:czsYk(-=Ɉ߇ 8Xf>8{Qg"JJKݸRӻ]@ZJW̾{u]zљeenTUԼ :uIYyG())8Դm vŧ_]-s\&<nMM-ֆDd־ r.tGUEmQ(kҲҚZ;g Jfʖ9SRZbʖ!.!{C\_l\/ ]\~ͺePPP03g\nrb t[n3 rXDTUUED%%ն#'+ǿB>m$.&>j NeeeD٢-#-$D$#+KD\LFWM3T^<LfiiKDi)22v`+͇f ރKJJ2w:k:*-%}Դd <}4t1EEde$Ijjj)((:9JIJEDy}PpYyYObbbO>r񙳓lI !j;=\o$h!G !j;zpBO4h4vP1f٦ V`X_v捻߿/7V6.X:y6[YMNFwݾTIMFj~'[0*k옊r`D2"M#*-=ʘqNDG 5ֻ%$$3~HvJH|<¸i d* K)x?K_)ITVV{I%%%kϞ磣D^ʿ_ o"ebN>"߫Ownm*+sμ)RRv祕DԬYs'y&&ml_g;Vkv+zNDGyпe}O.Z2G^}WNX>ՊMV/*z7hH\k O 9t'ᖰjZZ ͜>"_U6e*qΐ{fΙȫ*P++rLl/5r%4|_n\sH݈Ғ/JJ[* Y&(.~euksfW6]Z<÷75;)ƌT3 =Ĥŋgk/U]i|C<j*諏WDf/9-D{iii}+"p%ڷo痟QWvݙJKIw|o^us1wnb&LQT?/:AD{dzrKKOa^h41&^'pRu ¡/4%SmqOg^m)cFp,cS"޽{3f̘1c۷oߟ;/Qv廈(3W-r(RH;Y^7h@ABvɞïܹs8dkYV ^WPPʴrQ| v0W^dseiZƤJׯҥK/;Gڷ(h0x6Hu \^^#P}}޾]G󇯁QA.g9OY*++޻\xҒmu#ՋOQzrV­tĥpO>?tuu'|x>enوm;6h\}.+ܺ|=6ڭ|55=+@h0sᓢ< Y~!沞/ܾsSԛZ۵x f:_,K֓4nbw6ښ:M|xmtUĘ߸RX]G_yμ)UUUV_|~VMصH%NFL6kow sSgbLJnXYڤg?mڼf˄zz]mU}FpFϻoD4k$g7[":w>DĜ`34mϟV]uf%Cد Ojkg(=|CDTPJZצ*RZED4UrIVPQ9QDD;5|yȑ#F(,,yInmIHo3Jr̍M2zsYccجK0X:rΟ\WA͚h`7V5&P^f-}vݧL磣x3RSӒW.ߠXuå]JjE#j# DSllȑ#f͚K"***ׯor9;;… 9NIIIȬY&q.p8Ç<ڵkឞ{坳p8G`ZF~,xfwf>)86<}b♽?J{\S{X? _#=#}^>z6jFrqn zo+'<~qדÏ_ѓgE޸C'ܽ]m/JCC؉#W]x66&хg[hd>-*=NF˵_Wkf2o =Ϟj))/D9pzs⹸;߾}3|蘐=\.ɣ<֚cځN' Muֽ9YT/"oR73ϊ*b+W޴K_"RSUg93fO_?wl4ny?Izr1t+XSCWMlh6k-utWo.-kBO" " Dӛ7o|}}'LnbbjժZ\RLLٳ222Ϝ9sݺu[ GOYfmݺ.Xmo޼ٰaٳsrrVf6rtL-k:Q\>1.iʻ.bgϞ^+{bbb$&߾iҮtedh"&&FDIIΎnں*j}''_=%偓V3 Mמ}T_^FFmNNVJjKf4z:""7rru3~HzF*]Ū+_Lj-ٹ^uhzYY8G_jiot%‰SGwso\6oN؊%i},Q]qںaggw}5iD`9$/INzWL>#c;n0"z8åN=#/?|TމI|cގ`׵v]YSb^4Mr {KYxyVkѫ_oD#;G$### YYÇYdV{Wxu CرqrLJz{{KKW-##ӹsŠO_\mwdɒǏ_tiĈ.cQѡk7.ߐp+]UE,##w1CkDtҹwW^dxvSֈHJR* IR?wTTTD8v∧kndDz{Xx~}Q#0c> +gـw%bF($/Y]aZ3lZ*fd |!o׾ݔ$ج}VcFMTUU}=9Xt42448u.v=zZڶٳ}k{N7GK6=Z4nd l[C2`vNE֟:xޭM2[o6ss\?9ߏgw3 Nw'#C/;ɤyymtg̙tޮGRRbԴŲ9ſ|P{ $yIj$FSQ9MÇ?vؓ'O.]\ql߮;h@AFf33y437:'cc{ 7fJ:MjvVֈhIg(I)o)tټ=2Ķ{ƌp7MD̃O6*濹7"ʑ}" DiJJJ\\\IIeeeeee%$$ܹSRRk,''ـGs!$$Ν;)))ƟW^0V۲ܹS\\Ka O!"uA5"zא>mZ_n<*2F|E9>DMs/EeЂ:j6jDDtvX4݊~76\רR]7tOsn߾#FX1S{UF0PZEsHZVEgHZ&H# U_xՋxIc&2 BDv1229s&]xqǎ,3 **޿fs2sssgp8c9rDRRrҤIhɓ'%%%;vLRR]j)p111;w჻{@@SR /z&AA_2(8No;ZZID~g=r֫ݔM?ӼfuY]~X?LB$r~C"ҾwDyn3g#_x&'/oh`{GHf͕tV /w'// 2۱]R:2W9?/BKmsMYǺf7)-+UӬ~G­z_qKKKKKj u֭[7^^^^^^ on~\ "OOOOOO% <Ⱥ c-2=<< ,?[S4D#ҾGD8m쓝;p[Aa~:̣e$%va>mX޽up3wo`fΔy1r#RFvefXl}=8L/o7t8(,'&nPE8Q"x6kSq&kWmrutZgxk:*+sX JJ(͚5س}W'O}ğ5knn:9UhU[,̭[ٶaHJJ*++|UK}2KZJg;⼍p9SBBb2y*s!9Y}؉#OZyͫ';pm:9ضWIl6ӳx[{ܹs|pY=h") gHD[g/]jƴyeef\ȿVee卛Wf6G^T|`T|@D22+j [ޭtUTlyۺn] LIuNyz V.V-̭TتL7.FD6~N̵D^mbݥ [ 2_{p7nbߕkV:Ǽ5+׬pP@f ֿUKO))).,,bQeUOrj߮cw#ءqiiə^&܍g+敶mҒ^]<7aܴw ov03'#G*!">wo|&("jcڮt|QѻKWG] ׬\1B%OOFZkÆ^l^VM-mcmɣLRmT=QNN~ꭦmW.fiiгq:"hj3n!{ {wtج>ViRӒu L}uϼ'?tN*_5+#'Գ|MGE"(;'3;D~7~k>q?PS=gf4T?ixiYQ,BTTT(Y3LdeUk"DvnkA!RѾsAҲ\m30h{hjߓ|St,-v6}o+x޿?$Hrro\IHхϕ0mμ)vݟ??}2s[Cg^viKi2\P\'ܬűW:[ա5ضܴ;p[vV Vm .򙌌l͖9Y5˪1t_~Y͚2q֊e=_`Œ?~;rpƕ~>{f11\` 0u<}0$dQ"‹qܚο1{Vb\AT1̏'"YYE 4_;֍m\~zK`<}b♽?J{\S{XܼLK}G}Wl?w1SxKdefNgDSIYyk?fypHߖ5a'V@9KjIED[߲c xWSSjT>+.)R[[wQ޼_!5V,[?gޔ>QRR.㞜fP+_䛐jlmmkF^7{0VW>Z?mI-1ɹPkN}!!!uacKHII?~[~h^^r\"BDnvelf;ًs2K3.jT~A~Rc mmcÉظsϟ?}s##Sx(nY>L73d֮#5iܤދ 5\PkN1 Gݰl}9:]ofX aS *:Kۭ۱+|q9]10hFUD=L3i)i򙌌l͖ :yi31yRR̺cFO ڷKIMb># E:Y99Z[u׳Ň ݻPbӔ}߽+d+L7w&&mF'U ^,pv HB7XUgνr:[[ofw033kU6 ;׳Y gM˞!׫g ?|y H`|QA. B~M(,% A6h,~|Ft!pY2K@f Y2K@f Y2K@f Y2KdY2Kd}}5 t IENDB`gr-satellites-4.4.0/docs/source/images/bpsk_demodulator_flowgraph.png000066400000000000000000000405131414055407700261220ustar00rootroot00000000000000PNG  IHDRzbiCCPICC profile(}=H@_[KT :Yq*BZu0 4$).kŪ "%/)=Ff8jN&lnU"0z0L}NS_.γ9z@?s{=s~|I4 B!BS\ B!Bs@!Ba!B!=B!B!Bs@!B"<  <==q#zBbx!B!yx'`/||B9 B!B!žB!B{!B!9 B!B_ALGFQuud \ B!=g~[)$2$%'`dppt }zڝ${A BRr:A{?vekeI' >|H][L!ohA!ﮬM6*(x8qe߾MW=e(*!7kV0U?p+tc$IKɰ.qeFj-׍Fp#Bs@>~ H\\\||l=r%",Bw#cpre+yjb͛o@ڝ$'W+Y% %K66R+d ITKIM\ESBRumm] $%rp6U֗^N@ L!9@[[BRזf]1b.1)m}Uk MԪk@JNL!](q/2B!=z'M -=ʪ{i2M}JZ"+)).y)fgV:#*.&P%:_"779dܻdWn'/FF^L#Hq1iG1B!9 ;T<;tt {jRTju'w=ml1qJzF]]G2,9vWJܧD"b㮵IOQP0y&eYijhypwI ݈>|RSg1-D"u>[,##-/HMg!:::U:uikJ-ɶ"$(QBaޯ+IG[Se3Hmjz+((ۇWNNLprt=uO92^`>˽?b7t0g|(*. ;; sttsRuMU0za $WJN!|x}6>]D/TWUrZ(7B!DGRєᑒ^1ebBBTj om߲˙'Mc|= H *+lXm"_y.:fo6S\_n۹Xܗ}܈ZQ)5d3^s@340|697i=fS3Ҷ:ҖR] SYYA^l#F%BqRFڣ7^ @ٳRr}մ^z񴬄iG=c J] fCdc㯽{לGt0>i]$Hrr )EŅm{VZgjjc&x]jǮMv^@!8PT(  fw@Y[C\8{G4Cd!Qki/fWVR9?q֥s1DLR\c3,a88677@٨;);U")!/ҢF8b.=tmJZO|:6k6#CXbCuE+q\b7ݭDhkkv 'jk) dΜޯלşW_p҄i o-֖Dvwg/{YGume3Hmjz+((ۇWNNNIJHu?ӛ1Onз{C oƸOr2//hkyL<ጂʿG#xY|G9϶63{ax1){Θc`mmmP0 յk5ԵŽVS'RAasM-"$((?42I~vXoGvQDä_dZg:gxtA<++#{v ޵gK6C?6:8}N 9I/ $$L6_x-t)֖'"O5dj?Ⳑt0%+ ޿{G༹K*kooPWG?fIn#F5I0>9s׆۾v'iU ::)^s{/);ݿLǽoA!$WVŀ`ans.y7=,mqq ߯z).B!y30`0`#..CmM~w@t SnF8egHH skw1)m}UkڼL#SHD^Ȋ$-m >,ƬL..$%rp6U֗^nڈg72݌#TDgW!BPתzՒx3 .NPתzZVfnfee98^Zܼl!!a}=Cq/Ǐr3ӧQp鎎沭_ES~Lu4%E'}ۘ]~G,KrZ6k\ʞ^Mne|v5B!}{`an)sgZXXY xy>|051oko[t`=P\Rhiny޽k>{SV^VTCt-]EYÍ Jcn޺f+I40 A':L! JLC 4HHEHu!8u&B{=FvWUWJHH3M740ϋω)aGpl!AʽWCa \Z%EQ=A6lҭ۱Č#0mSt8" Yu$XR )k+4 Xy 8eǏZוGI+**^m^ ׭"%)!-%C&ei Hz#W^#uɈoU܌?lKjdhp!vF#F&u0Yb>&Em-ݫ&Nsob1G̜Evc^rn}]nbn\^aْ+֬9{i(Y%e%kK[N-mc$uB«W/n޺q`ѬO=Aeޫ,u݆@dTh\|̙%30;G KWMyH[l#Ff]FZl;\t63;ɍ=߁t2) [W^wH]\R>|RSg}HuM;FBe6;vmڴa't.vDŽ/j tY,ֶb۸|^>kBx ܜ*$2֭޲nXiE\L݌TǶ޼i`̝+^o|/zİ9b2Y$%?lC̕$cTUZ)EDXtqN÷n_׉=v؎#dgsK/]>k;U1[2՛%%~얖56RPSS"cLH7d|D" 0d og ela?~]PSfeg 42em^x`╟m`\RRqdŲu?yp,04 hhhK`vrJ"g{y1fDm-]e^F5U]eZQc:jV* M677q^XTL'<"*db1zˈ*%O!42 ;{VjZ"_O q6D7 #qrv!-M@M?6  cgE‚K1vB݌ԯn rsoϕkSѐ(,||]_†GHju*uIlgIOOxͫO׹!"yZh[[Ǐh^Ils6yzz@OP`OHU{>n)f88c>*E۷}|= HtoszF5jk%#ڋu\ˢW3O}2tCoLjU4%4{{t#}Ew{kLĤ~ٝNd76!g=^VzЖ&SHSۡwϋtwwWVV+//TLl'Bz``H@V"Rki?"Cޞ]{F%Y%m=7oܿ;;k=7D8* H@=qbsRU]inpHEKkUY@D[=K?yH;"5FD%KTUW:ZI)ǂ =#ܚ~ ^#⺊lxħbG)Jp)C?)IDATT~有O dQ|1+[7.dpsmڼXx0:cKa`Ha'i=> m `L4ӀAk׮N[899y̙3fhlld=" P Ext}#|L!:-@$z6F^Na4wzB/RRZ4nϨeOoƤ<<}=7/Ӳ=Jx\ڝۉ;0?+7Qkisg/+7b{K'$$b0c0```$_s,zVA 8Ew+O⅖n/_WV\TD#h4-MpeqW@DoWMؽ~n}CnĻyFAӇ9ejmmmzc<)zLHLu6R[Z[>1m;۸uðаCq}ɬ#=s>\tG~X7=ҦM={4cƌ o"A;1'=b``H@ݥEIsTD+پ8F̄aya.j""}G(2a<{]HX_uuFΗ3S9O[HNBVT9862U'| `Cef;;ki|b0+vw:tupZssy~OHCa^IϠo| 7}/)++A 3  F_ M e>P ̠ӈ^tpIF׼߉ի> l޶Uӷ`kcPnB>ҎuzXDHm]Y  2D)c"((1pH@CCggF\ikk]CGFMKj` L[󜾔c9w:OBb@3 eu |;1`iGr)2 *v??cMy o֪+Z߷; rnM##$2cTSn¼2~_koy440ry򹬌5).**j>o⡥e|3zc'ܸljbd N CC0`1J^1sﮃOJv>qB=0Ȕȟm޺f)/ں{HΙ7ɰ1'b ܚnfojuUⵤTIa zm!vCi4ڪާ#1LԉRҎ.Kغy]~[\놣 쌋uqO>a,^n<}2r>E8z?XCUUVTT^tqSl ȔOG ,^3''7>|!++ϺbDd i۶|:ьis;tG^L7<̻DρXDy @JRZZJL|[fVߖki}ۃYC](TX?OK3XRVVFU߿_zTu5M֚Yc5~>Zaas'3aW!7/[MMc=xG!I<d 0`=ҧŚ:Q@Uu  hiyԢoF[7~>aF>xqAapsY=ߜV+ƩŹsQYIe)s$Ede`}+Wq#tm~ӳwaRF(4$(+\D d5fΞ8y{~#,޸ṉ kf;;񖚪FlL=&|aŪEcGOJE:wU/^>`mqy _ky kkISPUTP(hM^2p@AA!+(L!Y[\Ibu4Zkĉ/mhx3gBE5;ڻ q{p,*/0h0s:Y1Vӳ wA4qqW[ZZ[>| &&N=ѕeh4 ˚5oݼՎ]nf*w-$, fIEEeprtPb9$~8U]qqJmm5񺦦J\_>ZΞ;Uur_5-W^<-+b0S] AW€񜔘ϑЃc':gkf ȨP2bqIAC?){wJtB7L 3n65MIK$JǗҢF털NfgZa);,Uuu+**GaSDܔ|D" 0q?~x3s۷YVAXXDKSa~n-ޝ]$%_IW$&>xpYve`Ϝ3QRR1ܙ'Os/|R 2; Kfw clt1e .ƃqIIQJjBMmux{g N0_!7/gOKL HQwSvl37DRB]<sJ}]fm0xvƴ.FNѕc unŦJM}Ke|͛n0s@[c;@c,>yr_z㪡1vB݌Nfg WwTV'SHIɷbEc#u֌y+oϕkSѐ(,||íGHju*uIVleJŤx#>o҄iy/;Vb.{"Bp1߸, 8jNfdq%==⥳6"Vs'靫Ȱg[Cl-TNN:Eq .ƃ`ȡHe^VÇCz  NNI$l|/#ƌqTנ^3q tޞ.$$wA]vTj|cY 2bdqɓe>ky ='}}*8$`N\ts+㒥s.^>W\\ 7`S[C_5@`0``tHqC7'jU4?=A@ǍAIFmmm}f͜7ܴfB E_?}~mEJT}\Bϊk{D!/έs2v"I,x5b6!4ԵѾ9"-nƪVI7 }(>)9'YKVUWŤM3Ῑo\c^vۦͫ'߮-.zqGG~!BS["He5r ӳkk%DZZ~^yuMQ3-m4hPlzNz ݌ԳO݊MϼOwB!з⻕L@tKb{ЧyDZޱTRhɬD.HN6ur{ۖ}1r,<~䦤F1~!B}/鶓L)uٖJ\4@3%/mm1/^6ËanEEE ?O׷/YO׀ZKKK^ZZRmN(+<-/)d5U'UӦξw5%5*l[cC5 jHy7o+7Qkisg/ι׹1iRRa1B7qdϔ3gN[__wU+uZC]ks/]>v7y7IVVF X^RG:vuҀ /=b诬ْqTdc㯽{לi J,ANK){V:VNԫW/0`M]||8/Inr}(<,^xn?gԒҢ9t C `,![hiywbt[[̱pTSz~, ;mܬ0aTaa4pPaۖ}6BËIJHŰP̬-ylNQzƟ#8 Bٻn޾AxaN& "7+&ƃvޤk`an(ȴQB]:|uZ`ybW^ɢPZZHǶ"Z[$`}ǯof~1+;c);w  i̾ϑ GZAI<|NQ2t#X[9 uC[[1uо |UwbܘG yyGGGWrA! D dfI;h?O>w(rjqrt;z8eǂ?~x8 (}N~Hb}3ug>މ8ς Ba;ػ/ B!,|!B!=B!B!Bs@!Ba!B!s&@!B?5z'd gyLJm01/ !BR]]Xnmr͒#U ?Z12dmis%[*ikkC7=5_G[t Xa^s@[<ÇёsQkivB!9 ᛆWϟtuUՕd L!I 9ff?!|#21ע)[D #0;txabMx]Y1|QgEK=#eHLo\v.Pז=#ebN5ue#BWUW:ZI)ǂ ]C%9從s&o A!Y9a=t,v7y7IVVQn9X[Rki۶c;QʣJNDoD x3oӋ%$+*(W xRf>Iз \\4ytɐ)@ӟgMY5q pp({{9rΥ7 pHYstIME  .,{&tEXtCommentCreated with GIMPW IDATxw\S?w&fDq q0ZWZwV[G[Vm?U{ඎUq1DY2JH#Ŕ"U᣽9{+pR+ a a2B[@ac'A/.D @D "@ d?O<7O6nԈovrڻy3g[XxYURҢGSW{GOܸy+;7bZ4 ˭q 'H(!^m/ҵO bqKc#>.;9m^D`NnޜoC)Ȕ쉟{ hGL("/WjMZQXH˔v`*4F٭3i4,wOB|Z6DԞ/^"ͺuQ0>Gφ( ɓɯݼ%451tPoY*lp4+>yǮ?oG?}.W[YYupA*eOU%%,K$4-R(ӥRs3O橲;b&&-yV^LoDjO>i#}(;7L;9{6ucl͵4+'y5vr$"^)Ur9K svmY,N{!NGSZ[[ul׶4]8),^LNN{).-- =vVmӪ&ö-N]̳8;7T`ݢ\}?aiYu\YoM-VSBd>1{?JJ8V;ū*ֲﵼZo0Y9 DгǐBSS" |~3O?BiZIr-Y0ϥsVvΧ]VjZ:Dyw GhqJJJ^P(\"k+KYf"XT;yȉ5|oVN'!"'̓ee2yغH̓iv;XYeɜ$L%vLWSv|>OVOҒSӤ9^Dnړg/zySO7qmND *R(ʻt`&Tg[PQ-[N؊)O҉HYt9DԺeNWYPd䊄jwRffey[RRڸws?f=I--f&x3lֆ{5jgHQӾ;Jk Ł*ݚ SfΩh@_V('J+Ff+F~/_?I ^w=8}b; EDzKDcm Ơ% "JSRseylV+01$˜"jlea'?=\΋z;U7q<@(4Jj·/xԴ5W/ KDlVť>gxVI[e+.`"9H7{p]EBaIIaM\-|Z{F\^fc\iD>3~mRLM׫+]EhYyfŠiH۱H$*؄GDPHYLDl6W3"}ɮyŧTfȔ377cֶbk",3ԾoHՖK'Ԑ^9` 3nnf&zֶUv|Xb9X rl"2Pk?Uf ff5;Mєs^$yǮ;vq_pmo?n\4һEsV$Hہ֫.Ҙb+bldtҕwզ9:b-菛dLi>bk+"fދKJy¤H$e,[[ed&fhŻ.ߗvknHwT^1(lx;v>ӈljIoyz7yԮsw^4PVv)O/PvcCZ2o%|W?'-':}-7i7_G_cMܾ Vqaiɇiuž!/dJ#gnupǣQW-.+>͖0lZot,cf& 7)%)i! 9Vt4SַL.gE\䔔c}?i4Ba? ha>:]L&O6#p@'H?s\>Bv]qFKD>yhѵ'Dt4.GlfQF{W*ԑƓq"_R:պU+a۶\p>ls斕մN2cVOWΟvdTgٱyU[_[[Y"}zO;eݺ}wuM%ߞD'e+Tmd-]O}үuuGb^GS?dK$Ç =}\:̻?UY|UD׫.:Wt v~r:Fw T^^~ՉO=7[O޳W&9uuҹ"/[ww[ճڵ4jVmƎYb%KN484tՊ?7pPZybDD:Z7Eō,|uk͔6s^?⳷Jb}:FQ:vM*Drt\0ͪ.bDd"0E[i/\ݍvxf^>{@D "@ KVNhX9 K+~AӵQQ.GSh^`6mi!ķ D__|@k>Wش%S{+iFXU(U8893W*F@CD Baꕂ۹9x^PD`}Ir#?P`售XeK:bJ0Z =n:1eb "^qJԂ)wJf!? 0 @D "[`=} fuOnEG׉&Okuhx{6u\JV{A yErާOf̘h͇k3a߅^Nۇz{8Ȼ)0kM~fw2.%g# _G^M;=U;Ic4:n%sYڥ5NZ(J GnQiǎ6rj4k>>D_w' 4s}a}Ą'|Tm3{tWy%Wܼmll42<|ԈU? O9[VVvhߞۥdri3x<Ĉ}_X;'WyvMOrrN}pG夃W,.n<{ :nۣv, R`4r-̶jݚ8I qš6+st\\W^!ݦtfuFv03(`G_`{g66YǵEEO5qqٹm Æ9gnYYS~7߽Б|9{Q' >lXރ߽3''gSg̲?uȖu߁W>awؼߪݒ/%^rEԑdVvJfΎO;6g'zx6r2aQ` j[X.!`rV͜}":$5ҵ["ҵql&,ЈW˪ Tjm Ufm6w{4P{F|MlҬNζ#>LwLRRS38Ъe "R*/gJT_}iAa[êתT%:.9%%&6j++׫󝸙{Ryfa{I,56s47̥_.%K^I-8}~_YUXdIUe&F#Wwy,/$g?r: 455feɟdrs3Ls"j,(OQGS7W6O';zҞ^by TV4vQKU5mɄcXxҩ'  }: 3cČ*ԞG8 hLj3]rpYǮjӻ9>f=4R"#^MfԮsj)0zŦ&sNܐ =:MqR+D`Zv? hk_55}~klj&unf^>{@EU;N'B"uIѷ֔!UJ[4@ @xKVNhX9 K+~sXO889k5\P-- lB o @M6|iŝ=BA#HSU 'g&JTň@h@(4P:LRw;77ϫ<o\:гRzg5vҵlI^L BOOgyݍ@T"?#漼\LA+9N@Zp4NҌ4D`42}A&@!@ 4+k1]{޻|Mn{Gqنq5㗌B|ŻVpdťrZdR]P#pP| bS+mO+6K.;_M T*߁gU ~IóQτ VSG{#;X\a~vU8kBO,SVWQ. xzrRӿF9`>43kZS[!+;sNOs'Nv`*ƲݻvY9vp34%[yUoMb)3%j ʃO|>jAD[-~!)ӫ $"c3X,@m>=8|gΙ'0p@Ȏ]ESRFӾY?1m};rfzYʵTuYш4xނZ)˓͜en={pmY de+EZzFϺ vY"zOBΜe~ =;9`Иjۥdri3; IDAT=~.]ާ }4v-Zqy)x\nF{W*ԑ)w47$Uqv@>/Ν7x<^?uƬ֭O;/Ϗs;M1kPh#nܼ5y􏆇R[tҙbbo@DOԙ:3Zh~GDYAPD"VuϫWU^N|^={]AL)S5ZJ[.BChʌt\ǎ߽2S*rn_̺U[xy=S'=-٣{ݻQqq1Bcʛ$<~^2 w߇-X,J:𬍩IUqv@.^{>{ɧLp>b%&&&'Ol/6sqE #lv':^0Or\n:'$ѣǏϜ:T >mX,n׶-k,-̛{5er&x>m}3tcDttllw, adzG4n,u\Uڭ`EDZ>cDd"0z |{EY!C]8u}hu7qc>~G/^x}xA p/o7 |t;wELz ؼ TOA{_~\C KN| ./E"@ }#,UX'j^IXZ <\4G䜮Ոr9r@\~FG'W/iK M 5Z¦-wPx 1Ҍ4MPPpprfDU@ @+㋲݊pXJ2;9w5s3` ؙtɼH8碕P_("CLVpX'Y#Z(Z@Dήns 덢9?Z(9iCD`=V' ]R0 @D " _$8fD8 $6>YY#Fk}ƳП?/x_n&9(lxRr2M\]‡ eD41"ޞvǧ[h o\~"b6nM TLqQ6ً:80 O&5?޹woQ Yٝ;uz~vZxu)iКCV4}JƼK폦G(9LOsuFGжkTXBiM8"`YήSkѼyȥKv{nG߼? %Wܼmll42<|ԈDшΜ-++;ow|>?iø\.uC|BBp`@- L  ݰyKjZ{9ԕ:XLN=UY$">4؇y8JrL\D'333{lYYjzpZ`b 07g& k_'v+v^.*5w-}ڕv'!]H_.f)t1x@Qts.)ˈ+ ?A£GRm^8H(%"ˢ窙f*-{Y@{oEMd)}&%z2OqY87 f@2rxXС/c[by TV4vT6a옥+V.^tICC^͂ xzz4usG^dL;4e9[@u>t竊^5:v$3bkjYLM%DD[ d5MQGSox"Π6Wjt49~A}/(؉Q:'$mcdȿ_̉[7gaCO;шᥥe kv)&G3}*,nt',UPwrG}[QP Cn%e|%Y&XZZzy5:}z iK#WnYν 5`ogV_f4V$ڷpё:.Zyӧ.EDe9djDD5~"?r LVeΚi %Jes#"L==<7jjJUR^^}n-3{;::qJUSRbbc޿jMMM&&@ezzF-K#hA>%"ˢ窙f*-{Y@{oEMd)}&%z2OqY8 8H$K{5 6rDͭY,֪KG =WX5U+GAjKcz=}tyFF瓱ch1KW\dɓ>T]="c1f){يfҬU13) )ӎG%ʡ$Ҝ$- ;3Ib!%sXb%p]n~]x ݾCG(4X@@ @D "N/_v_(LW읜#2" MP33"^jFV]\끫FլӸGhr();#ͭ"Lc_  #fʩl <@(ΤKE9h *Eb;uĵS?*Eբ5%pv=p5wkܞkOXoegG6ABF6Hc" ".?^袕 D 4P@@ @h "ii4 !83"}AaÏйkE}_TT_Mp;_}t竊PUkj]>씛'[êIoV7ǵVԦJAkSBYv](kh̄4_it4mF%ΙքSk'40o)+/_O3|اP(lrْܼc'NV0y?h ڊ߸iԸ/~Zfvȕk}tL.uRLIM6ki׹>_>}ZPXq>fW_'/_deQߎ t2(.Vf$ePfE,5GS,4c?e\:.QDؐ!Bp㖭shڴnᗟ\|I}z?ѣYӧ_{n]:f0v+/Y:uȋi8!g+HT̄?3,#O;ANDD+XHs̨'8aDd"cuGE\fۦ N@6usO2vqO}ۧ+fݿP#@CvIx%"@ }dj/J2 {' HASDLbgWhWjz઴t5Af]G(TrQRvF[MPEəɿU1""&1 Fi2YּMP/il\bOEqT[|J58k3rL BO64]@u8FJ]An\"^ɲ7TBSԨJOC+Zr^/h"(D @D "z?=_8 $6>;ى=;.ݺ4eNpkܯr@^p\zڔϻulbl|ϛGoݪU}zeee~\;mC؈D=gDLСaϞeڳAC:v[juvNθOӱgӦ! njf;u%&&&'Ol/6s/Ær83",ӵJ$SZZZvtpE ZyIIIqqq͓r87evHi53alll]iZR}p歁ϮZYYgTY+^RrZĄ% 6zD4d@ss;~]"ĤUfWG._d]a:@oDsfA}FrH<==l˗-;wۈ>٫V,auj#"Pӎ=z¢^cGb 'tKN<Г~SJ[<##whرx),ULh絵-eoۇpPh@oS' @D "!N!hpr zEșVM|=F|=˷\X6Y! c %LZeeiUp FL1Ph@ @D "@ @D "@ @D "@D "@ @D "@ @D "@"M@D "@ @D "@ @D "@ @ @D "@ @D "@ @D @D "@ @D "@ @D "@oÛ4IҦI6)m6Mh Rj;P((QYGxq\:踎 2*03HivQnئRzO/I{9㔐@~<$絜7ߓT * @P@T * @P@T * @P @P@T * @P@T * @P@T *@T *`"0"`  P#rqJx:B t`XRz,.S( :2a:BDvkr# M+ј^GlԎG&z-uL\|bB Mr FudnlkQ%FjCۭS }V,ڧfs^dsӖ?>zngܻlV3`XV²clo0W83-;; 8@KYž{/SoXv!~q#3 -xNז|2Ҟ 0X<5+lӳS |tA0!pNn~Yuuf\ MӞ>-Y_ճf<-{V8Ό[&>#!j2Ə;ͷsf_hkS2y#D |]NFzj&]hm՞z B*ɘ2+}#5 ەbbbvud; !qZ"*|ssZjSҩ.qZf\n _b9==^F; 8Dlb⾞r{<ʽ{bB!~/>Ca9fw~VcO=]d2p_F֟gl.G.aWC˖JGphF@ś)@~նU={'gd/%UT~:_y M~ʪufr$qIwwO=g4d2ى懲gθtjxDRYUp^k;|{Fa!!D& s[U+K%嬫;MȨZKImvf i#1@|ә3%sǍ\/(BHgX2϶o'mkx)|byO.k`Z_V*ʇVvHyDRB)?z7fBt8wDĨ榦YYں:cJJwтZL&uCqZn'Ri i}VkM)T \]YŗųfJKЄs攕k>yw䤤GzR511lӣ_Y|'`cVKZJ{-//>JO^|7[rEq%?lܴ?vNWz*UQaL&?Gheo 1.b(r}m_>% lvtĬSs02ʅ>x/y=^\ W炾3vnx,eBڮ׋3m@M#)M e~Ʉ͒?hQ&B.7)LgBL0BLc0 e4.C18ӡPF3/Ю#4BB[ >R G[{yO-l:}g{ke4@0 0("ZT_WW}UnV(%{Z]1Ck<]S(.dk /2 #`k5X,xF ^#`k5X,xF ^#`k5X,xF ^#`k=4{F߿~~vȃ ,fٿ?Zַk׮w>(} oxt5j?oo}[7 Љ?lhh(WsssÇ>||!~8uywر~zjbbo~_w'm۶ovS??{j:44tVrg`}k_V\XXX^^޴i_<14cƟG~rݻwg?|ر[o֦ndT_|wuWۧ3?'x'-O< 'D/׼5?c?KKo~E~k/m۶ ox,"/rw[7M*oKD>Ovm7|//|߰|k_}v[X}k.JtwЉn摑~j, /s=}nvۿɟɇ>!ѯ~oŋ=9^n||Mozo_yy׻׾vݺu{k^sÍ ###qرR~0###ryƍnu]wu "}o֭[o3gΜ?]&Б~'~}>3gԿϝ;gy{O~g}o?@x饗>:ujii{??m߾=;k_7k׮NVW_T*j¯~?ӗ.]$".]ZZZj^p:3g~~? n??u{ݧ>}C{{__?[nz0!q۶m"K/ `K8744& |k79rZvt2|_]ZZz>x7@W9rȖ-[׿.;>C ,>ݴGd`k5X,x*QCCC4?`E&vL!`k5X,xF ^#`k5X,xF ^#zh!h;k5X,xF ^#`k5X,xF ^#`k=4AXQsss fS5X,xF ^#`k5X,xF ^#`k5XZM144D#V\oYmBxF ^#`k5X,xF ^#׺< /ڵ[o馛7=t_Mz{{ywy'Stykhh-oyM*ӧ9g-;~sss6mz{Q k"#\ps=aCCCt?Uo׽u/ٟ+w9˧~_.??+"_W/~t.`-//?}t\~_}{Gty;;8Lg5X,xF ^#`k5X,xCD  577`@1^#`k5X,xF ^#`k5X,xF ^ "h M0 B`k5X,xF ^#`k5X,xF ^#CCC4?`E&vL!`k5X,xF ^#`k5X,xF ^#zh!h;k5X,xF ^#`k5X,xcǎݻo||+r^xmo{ۗosq:HOw޻߿O}7ot5Tkvv?3?Q =kd?s=vۡ!Dwo?S ?'v?_;~(JrӧOqwyG?ѥk׮q:H:t̙O~䡇tR\'Аj{LDOi<4|F ^#`k5X,xF ^#`k=4AXQsss fS5X,xF ^#`k5X,xF ^#`klzZez#Gh(X4=-vɱcr;&İ`E j@w @f=4A\obXٞ{.'h]H%**tzZva8! 6odZ@|Kw"@AFta}=NA vldI 8jt'NA ,6۹ytLL ܑt'NAt?ӝH8XmHwe.DnBF t-5vz#GhNE in8=-vɱcr;&v;,6<0 0\C >ȉ `u@k=ɉ}G"jԴ<%I|P ,E mi{5.Oדb\FhkZb_qR5E ,!j`S};9"QG870 g}&k|o<Xm0D9m̴&M MuN}v*%]$tTlM7hKkKCɿ=c7,2lMWcz=ZMYםr_9˾\!-&Vryt}Jƍ)=7[t$q]oXm}XDMhjqS?0;WKr㛤&iҧ: +.C:*yI>msٶ/nE 1Cg4c>aSjw*Z-˾Ғoj/=_ "8~nКtBgw lTmUaC:NyI>m 訌ʞ=уbE<30)0MȈEæoePZ]*+2Ͱ/㛤&JA5E^X7(, gϷqWHroZ1}!]=3I<9iٛGdvVfg %.Hfr"6xT2?eU|jo]w%-a Rce6=&.q#c~ᏰG,1cgvbU=ea8Dk쉇AA+tV n}`'/tᛜ,hi3q%49ʛ6_c5=7jЕR*ûqSe3Or#SM*ZUX- ONA{pMKD\c={̡GSlMl.d< z퉔9wn̊ٚ^KBoUzho+YZZ^6y)X["r> Kqo/lv5[NH؉nwڏ`\S#i^F{~ԪU9{Vl52WгpͭRX/յtFYXgo+9A ӏZIТ\W]arD+l 䤭VKi0-E?-7{Sl/fl"riʉ ,6k qR)Ww\>nBƤrSeQDd(yϧi7Ӈd?l۪i[ᕈp ^={V rWb; 5Ɋp>EaM`{R1q/\F8AO|OĤwcѮC"Kba H}½KO IDAT5R FK̕3%\ῲ"=ܘx= _ƥ婬65c1f㨧FzVs +&3kSdiIVnXO>i[_ȈR}GvDh?qC{o،Ґ5YMeatRq5c)E-d|C/䬞'wǥR^s$p{!Dll`ka!;kF빼>7*kT2חuRgdD YV"yU8p]j0>O4ab6\\*}/SL/t pSXK zl,vT[d3M>m"ˍ:lLPB>jc\]N.nzQ6%aջ޽rTlA`]7RAG %KUq9s|ʹ8}}26ؗW^S;\2/|:LLtBRza"E t00IUrdB+UJ/wm*Ʊzi ?H8;1/vI\+[᪸ 6Ít m8*ѩa=PCI&Ǐ'7r8L68 _h47,iߪjU]?//ppU4$܍^|19,;C=4Pbk8Fr"7&56⦒ # uxSEVWgXؘg;v8./R4[ڪs*Fԝn:rE._m,la_=gph0;n?J\ _4N1{&Z  +9җ 6^$(RE/JDU#U`DQY\\U%ªbgԧlVq] K 8Yq)04Q ^n'N(J)=G(jpl~LB1)wfZMUyFy5Ou9\%kFUOpA1}=6h4KFcФ!vf\y4A 4*'~LQ0}H?2nL}SjK>,|!9yR]k\{kXW~EAD ņ鵓7lXVi :ثэݻ K9F傺ˑzO>;ʍ[5/k!ylU谜oqʾnǎF, / a\].h5 1fgVkW0FX{IxA.A }nߞ:mQ|벰Hԯjc;p ܙ~xIbN"2`1Nf%Df4eٶ-v‹yȈ;}&H*634SuFFb+LG,K}\&/2X+8npBT*!qW͢.X.JDJF|DUOmD9db#k 5"ݱGkͦ5*+teyU#oXn`@O f)B!9mP{I b_l 'L! - Ӵ_i5R/}~>09)/sy!%YXXur>ziVW\$5 .<-H&|\v>_˶$yx ^62} uCĦjfbsZuY^n e6u2cԅcwURb$N3 ΋oӣ܏SQljtD6U _MVH*ʔ& -.Jfn G?Kr9ȜkHOYM:e|\+J4X6d`Rc˪yܞmYPg=n+}*";&u؇ ==+[*fEd K\c I&UrT!P_|ȹs u}=E"\qq< X d+ٹ,Y O](ij^d"WJ%Eڨ t?uU9~;U*I)]H_kڢΜ+WɡC oIٕ+m%2\-pFGedDG뮓f),\f9Xy ٌ5V\(ysF$yCohyv7NŰIT+W5BOv0VR5J["MFsa&& l1oڲvןVUN +UYt4޷S-}xq޽aC)dtTFGYcy&ZR}2(==ݬ }qK ۂ TT* W6c0wnxfflf5|JEn״0P/[8=Ser~gOpo].^sԿKz,6ɾ})Z*Q>Kf4˝%s2Nܡ{[Ȉ RrFd`D54sPPRJ%Ӷs%nm/S; *D~E-J~{5./ʑ#e {?+Q%oU-Q6J[fZҥF:K*sM43Sd.Upd$Ʀhh˓O;Wrs2:N ą[@k9"w[[I,eٲ>C:G#PJ:Pa1pTѾSS }:Ҽ+\  2,v)VD]q6hݤ1{s>݊!rw&+]~ofL:nyL5o*@k)۶V_*^K(YNkиH,0}tԚ蕈4X"yX*62"'''PN6-~ hzPiL[GΎ߀E~iõk˖K%9p :šktΦ>n1Y.{ַ^526#âޡego..&MbRvxYYX&d[nݠF"׳Isa"<1߼˗WfNNʉuka!CXA1!J ޼F|5ijٵ./pCw{ ??s&ai1՛\y06l+Q93R &ۚיjJU8Y&zQ?%Ť prZ|\rTMz߳GFGZ5ac*;6?uʩdطo߁ҥ\Zpbag[{uǚkfQԤsՊd.K__j2UVezٳF'ryQHf={6ꢵIѲTwNFf2Gw@Db'5]z湇C:Mp1i=W=/ ׮ɵkJ޻2(xܟSGW}a^WWVf>dL$)dbCJlTtS˫`fm(.rX+mosdbBz*A+(1i=Iҳ=,ZS:M|4 ]^6\3S` Uʍ6KsR=A$ji"].]ZZZW^]ZZx)SM2&xY:,6yȒINFk1[y%4ߥwNm-0ƣӬ< AzbeAe5$gyˡCN/.{@} Z3_s$Z^9҂@|᳟t/ȯ̰hZI9/m9zRnP;KiUzJehhHc=&"=rvxhzdf9x&cǢ?9z)5/íAzLX^.\Hi_Njr뱵d|-C_}6qI221!6|29٢H<hF9MwjUGm7/^a;X6k* .CzW{ 5sւsMt%1#z//V}9u%SSSqףry  F_ ݝX78(>*wǦ%f8IE+a't=<<[QjzgR ==rj[X\<Xy,`<KSg5 G`쬈^ ^!ˎPH`}zZ)l>89鏛e&T뮓+W#AWΟ_.fKU9ymSj5˿>t)Z]0@+&h[ݲ#km>]Sg5\VbΨbn-f`uJv jU+LOK*ve^ˆطlujjWyUTJDNo[;jqc7\+r**ӯ>Mq\pva5A5pij5ƜYL:u\%|8bti8v7E<_lVS^ ?0qǛRƓ"*pӤv7OYC+rr1q&tjn KSg(~֔$.m DZ[o^Rh<.۰^7LO֭ ?L_+wpxc2>tIkpi<ߗٟT< 75lQEڞ0E)UgMs9k萞Pc\4,Tު0V\V{oo5W˲}LL0{G}}>Z~VMbݔetkޥ]^SUƺty\84lc^ęgVJ&RT*2<+ѫJe%_5~H)ZG>@JퟍΓp`Z7 Q={ȓۤQeݻtQ 㡡[Oø(U$DZ1ʳ6=*r|sYLNgO?핑ΘZ_6V~y~JyMSSOafPXmPtc*#2;+Bg|2Vb>$F1N+ʘ{kdFe; -7@ OO'4㫎`3ϬT/_eזA/6SK^@MW0JŢXeӌX]9Lڳ'Xl)&Fj2԰m\r?zmI34s٦.bƢZ7@/Ɠ~P0k` K HQPS:jRi{j`DVSFk' @]cKPiqi&˶NJyr􁖝]1v=6amqpieR'24 ߟ}u.1銖cj/$Dfh㮷qc,i}OZμ J20Т@@Ai 9#_-k$.Nh69{lޟǖb[X&#&l4yk\@\rpsq _/Ҧymv6p!}9GoNT >//gLp˳%, yh7ƍ{d%ViAxE|]bgq/y.̔rYՂC9k?wo AjTyjΩ5ㆨ1>_5XJruٵ%Y6gڞѯ^e$t[Fkvz IDAT~+'O薉ǂ*hAڵHϲa‚`CTO6 0iNٰ!`5.'7ߺW$C[-6 3WeZkR{,4{joKQS:cLY^S n؜5ßFAO6apП  Nuh7_?*)y 1<,6u㍴AvKK.y˫d:t>~. kV1Yvƌ& }>m'nq6tոG޼y ڇv 0ݻPpWxT*5K wf9,/+\.6nxX-޴½5=H#֌XpCӼnf_qNykPF o1`tt<-/˕+$ufH\nͺz@D9ڠH ֎!>=߿?q9vlՄo9"8![䜾raQsR(r}SBM­wm4|ܑ#21q֯ jƒDFZdB%w}#<v0n;bJ *.\B&bċ{s9 ? P3_nnAo[nS^DZ\bn5[uE$aWCtJEhs"ebޔrMrl7בKXp22w/뤧Gn]vrY][I 2ӿ>{vw/.3M ?_D7?5 'N%kIxI̘SPW ƬV-pRFǮ~ʚ߅hF۳GlIR`ʞx<"2;ʘM*=*5س@$/r$_y%˖'q/».q\7b5ΝRWÍtSWDȏ([:$US;KU8fy9cǗc1;+ZLZU}ϣPѕ+GW^VڠGgz}0[77.^L~vdXFJq\.[ϸddtiyE6@ό[+B.3-(9q37/'0woؙeIRŤ ? ݻezVU۷-s\xɰA?׃q33uWN%R{D7Ny#uhyڎ#MGWEDFFw7H׬/ȡC b]L CBhaBhMH; ''}&q y[f'ٷ02#q_Q.m9'S< K o8k\g65{6eT*dM{;Nw-vۺO̶ieI:^ۖmfd޴gP U pLVftG[#)XSgޕJ//vk:Tؒ|=TbyVdQ⪟00&,gׁr5{jni۾Z=c=DG׆sfޞ 澃9'J?< S'=ɉMWp=쎹3FKay}f䥄g&ؽ3,L²"d(~.LL:^2$]牽tzڰm6ؘmSڋ]/[7+Xvl$5UT=)ygKvDDξFyJ%E!sآ@q֯.\h]Ug74{><cd:YNUÃuGm5 TdpPcYuFcRR=Ulk9#C}>Z!(cr:TGG"}{t\le>V-ԅkv\zmܘnE6{ ͳiPν _51:s3q?l^\313%e2eZ]UQ(wg䩧Mtb܏j;I#n55q^ dR$j}Cr,/ŋ(G֭M>lud^1Z\pp\o <};{Q;,-‚ohǒվ}Az d}3Մ1t}X'^w:>t{(Ӯ";5RUR'>|dBL$ Ns*Pw^yq!sIiI\0 ?׮rYFG 0#Ad9ewD -v<9v̼T*20lo!1pc&ս{-")bǏ֯Wc ~3fZ%j ݳBZ٤Fg>?*z{3X};Yz{;&ɽT/PBsϧ?OxutgjcG}pcG}z;Rt\\g;r18}A?}R}t}|>8Xݛ6l%E6fz>0{Tj\j5׮e;SS=M}ZV3Vuc+EMfˋYW]\R D+@կ9K>.7M=r&h\JWW.+@R1\"}F]~\]꿁S^?Ot1b۷6TJe>J4Noo+:~_;ơ?cɉ bk`WI0'ҧ݂w$I%TK\ jM*mAD y?.7J&N%lIYӔ9([FJ"F\Κ%[Mo[n'5vMNAZ`]jXIh,N/L=ŕ8.@{c Pپ#.EK}~Qד_X[6/qnyƽuF[mZ_sf-~b1\^&'3"Ɔ92%RKpd9p͛Zԛ2;_۾]Y\mۢƍljJj5yL{wof7N=@'woaydjfQG~{$ge&|RƏ;q"ܶkAޡC)&./˫}uF1<ZW!a-\ų˛ʲ4Uq7vV5CӍQ:5v풩) #ŽeG5LQKwe[̲['Nq wア3Sy(`T,ǥ^mFe]q}#՚ eW>j^?αݑ#rKոD_P;?vWы~Տdt7eپ]j5W킈5F+Dlؐn3n|1|9׋qow:%33n\ 'TZY6]2ۅ7'׮ɕ+kӖ˲m[SyzHn0O=ˆ˕+R.77$?A) ȣv"-=aiSvߟ')M|pޖ~W*V)KUPFAf٣S7Ô{?Z`YN'nE9 E}-\UD̾%%`t*║ j1ʸ]65HKuӉپW Ǟf?zlSb |c+x]WH=thZoqHɥp0x*dvEƙt'N؞2,E[)ð0glQ yC}I&'1#+e79ͥg7nt*G;k\6}Յ @0m6b~iu#5xBa%n.'&A1ˑhcH#?1>.kgX>U\e"*h?,OkPǩT䥗ի}zjX!7./'|=51312U3妛̇)Y.FF<W M ޶l|Q Ŝrly1Bڎ)˶Mo2^^+p=j_BWzPiNL&765WE[Pǂ_KK汱 $=+RFyz3X_>5e;Lj P]$?"rJ=2cyؑi.TR_?Uf¯W'LOȘm%jdǎۓgNz1}2,H뫆yj/bs'Jw9R_Y}}Fz\C/i,={KƎWfH@f+\Pv>"Ci~K~0dn7PoP@K33kò5KWOkP鴩y-52Ҋ K`3SwTSFR%Ee'A۾F'1uJ=槾O^UQZ u3B/9<:Dh5 5"Eo qk7Dr2.5eY@M_þnzgjuKzJeAj5b5=]Vcq6Zi3e\|-.ez ĭ$:]ؙ#?Z]+}lD5 jaqgzk=)ijc_շx, }u*^d_㲀rX"̰f>&.nvy뻅WpqowX$m-ôKL:^dOozT0,Ext\/ظ;ed}XíoqWT__U Yx ] }LuV:ry6ꥉz}xYR4ZV 9 ˯[N^O-U7Tpir~sJu! =_Bq` "qa}K%o&ЃVz/)#FG룣bq=w v\FM= '-Vg%>U*rycDv]]&G͘211^LMoq4E\1l9ṫ[ĥو؄$9OE)lbJ'I{2^C퍿oy6XsQCdkN.{d wvxBqө?;<%e7V*" d_3wKuY#}}A1b_{lpn弶m"tӎVFF)zc]׳1q*,2r\>0~38.=ӲE[jDF|* ft)3NU2bsf5U8+{zTg)h{?ǪaA$K 1D⼧j4^3ޟ C1\K\gϖ7&>] "R˞qG[ KI|g[亪sWFnH,X36p aRgCf&6+0 $@UEBխp 9JR`*X'!yl0k$\Q(Y^͙^{}9}Nj2ϵַ({!J$cӓ>v3-'= *] ' p Y/KeJ"02[ʔ|]X!PQ݉o~e&G9Ji%Q#-.Н 1Y<qOuMVM&͙bV#rl'ʓ$Z]L438yf//K2IF nDj7FS×QnNE2 Vb?!){eX>ET7[)}񆸲{²nv^x=$@ NPF`\yKʛq/͠fP/H -JEo{-ʷ%=:ϑа=3XϔBcQca+kK AUҁ!#@q Kg4uKWXYT+ee&&)Gke[IkG=Ov0MZ-ѕDN6t:'n# ."vT.MǎBS֎V*Е\G7)@"vxhYJJN8L4K6kr)"* 2C7J[PICCɡFQ׀W.AY(laI{eR,||8ѯ>99Yp7Mo:=J< 'ItjYn9m*4TF׏ G_&YSFc{є3u##/:ʺuF~VSJ,mL!AgLUTFo) w6q{ҽPJ=SU6E xr IDATff3j0F(BuU9ZUA\_!%ٚF:1`^̰=/L|fH&9F$_Uev@Gwd 5wg)p.T.eĨl.ujrey7q* 4@sJ Tƛu^GSXr%$&AZJ.a#P( ,wfpgXyz&6LC%,+XTP>8Īf!sJg 4wWP]P8q܎ Zhm ዐ{UJ)*ňLq/P\4,TvGɏ@Ts,L` nAR&^n'lC(cK3sx5+Q6o'b$pЖJ3_9 jiZX: "p9=' 9!tNni xC )/kVydtzVg⤐J{@$053wH]r>fXQ9rr$5@38lޯi4Dt㐢Q_eHkEmaRBG_IuCݶ(lnhǹ/7t(sDO;dXF)M<]EW6+ _]>Rs76D7tK51W(Ceɟ,݁3dz2rƸi%#S쯱nVB)!WN"$2I ^!" O4?{H40*[iPtCJ=mZe53PE"mo'Nc22SQ낐Lh=z[᜗\_gH7E*Jx ӆ6(q2Ft[5N1ٕd&XhNK& EBJ4<ò,r2F"ƢL4VAs?QS:OxBX g,KIy +P/TBWt-R~'s!]1@;Q%a. X=̒Ќe!,Y_*IfRӺt9rNsㅭ6e^9K4Pv[%FI]8K7 6S!GoL$.{[NqWuS2/[v;~d0֓O>zj9N8~> t|y5Jh(p5J9Lb+jzl ֶ41A "?X%ƆMeHtetş\tiEҊ|p'JM; øfst[:U4X_Yna~ke3q?R i'܄n4=T*AXm1Ԧ17\U"D9J@$ѭ:JܭaYFh^LvLH 9oPRn; i&9dK!pV}B)R>|A0HmV_JI,%`F)7P7.\Ec)Sj;ѱg0ֶmZuA`9rnXJYl߮޹e<+bE; p8pi~3ZJ˓kVwt9HUw똳όup|2əe_7[Yd7Z: u-zmP;yFWnݙ}4u]Yd׉(KGJٻbEG:(,/1|ox,$)R 1fgE:3SU*ꤌDPV΀[]ŁFO/9{{G9YNw I`nb7DJ}Y*]q%>rF`\tBXDԉyoDPaG^Ğ{QGGK)]}OD*e^d5A,&ɭmԹ[Dԋ#d(e QvmZ_Xəb$PX+V_z(uWXΎJq(ƒ"F &d8\H*Jti]Atecr!<~|^!Fa]Q}32aܟ].Mjx10':wɗ4D1 !։X./eQ4(TƧjf.~bmA9jN!s8EuXy cxN8By J"x.9$*PK4хMEKӁξĞ "$J6Zɪ񺍺O 2"$CSh\dXr΀4Cȡ1aa`X?яB_*VXmhLB O Mf%˭"}J>TT([ S Fک ]Plb|b 9so|_?BqO^w܉gp7,-8 ['c =ͩqI8)|˘5=ͦј &2e w}wR9~7˗YY9;vtvAelUoFe(atFk6kLL(; Z-8pW'|'BՂ:J:v ~˖P?'^}+t)vRo&NM.5= 7_PjFF ]['t: \px O֬IhzcmK7!m C ;v\ӁV :^M|]w'0IJ0> gޤkK &7kocmӦC 3FV݆ Y$-1C033307 05'B~HMCٌ?e?>m39o|@"+R޴zЎm6Ճ9j MO ˣ&n/[IlgI+#DQ6׏|#?_WٟܶڵkE<#pwy 䎖_ Mx rn 6uRyFG{,t[gh"nfS>ZLƴ,aؽ`ٲL07NJ/O4j8 #Gܯ@[-8xW1: áCq#cc?; ?dM S/}Dp\ѣQ**2[-س{5GHOΗJX Ξa#;kƼEPlr P63[]\7ٿZ-Mzgc^/amvP_j.Zh!e󞢏/70єc,4̶lQ7 /7=uP!`aaᩧz֭[wM7 u*Z-0̤NTqD&ԢKpw$(C~p}w\?+yS²r_K@Tyw4oK$8y^| f/f`Zo< tߪU<npe#h4ҚMVnXjCAiwA!c#3P#Xy ΎbB!?qnF燴弌xZK^MtG oi k|6t;TB"/t% XǏ(3=X ǢلSz Ge.(3ͫ߻'y[nz:)3tY3k*|kj@4O2RRKzm"yJ`*Q.C>;1b^z{U'%  }!rÝ6sy;?A^Z-ymNNW" d^^.*e8/" Y~)\E skaǒȓQG(M&iXW]u'N3KI`%73sF0ݫ-+իL}E;polC(Z'+H~s(O4`8.]ʂ9[abS4G`cܟa%Gi##pO ʗ7TP*%ZRN>6n4~j)1L`%X=]e nöm.sɓ.&޽읍3gf6쳅QV 6nTb]y9 wM73pi8: ǎ`606U^ҶB1uFGaJEgV yƎ“… 7!UO>VnLH!I A0v_;傩rĩ=S`D3(Mھ}{H`=S?O_Wկ~~J򖷼_r\a( ,+B7#!+{ETҕK8jX?Qg-*DsH߸^aĨb}]`7i!;#ei&\"mJ§}|p޽{뮻^xV?;|WE^...{.$OU ze~:;v@ ' ,r|^˰q#\+SF#Gu01CQB>.3\UJWXUvrRr*NL$=r<8@b5m{FtXP

[GP[n YβwVy,'R/%m)-ieUuE \!i Z(؇?˖/ѣ9gHD$!4{a%Օ,) I>7)ښL[-M EFJjgv#Gc=~2=='?)P{\N+og駡%>1Dykx?5:VfT.^mحV I¦C2togg{YF/oрanΝy8w.\fsdtZ-h6QFj4sa|" *E䚃"(F&edAOMٳ_傔إOmJ/2,"7-[^W:u_WG?gE`1P(J(Vj;2_'Om 6 \uE|LyW^׽nhh(ϭ$܂J%X0X*\Ed/FGرT?ir8tP*tmY"ܻߝE7÷m o5 F cHϩI~e+!ohho_眽alETJE6%9=0sx_Cv]wǎþ},7,[ŽWJ]L A>$o2}3NOsyϟ?AZQl؀b,A<<}w.W Ec.ĹԷ{ ŋܨ,YVJ%_O>?_lDz=8{w^Vb  Ȍ\{@#]2Rꪅ?8q"XBa&SUbCCpk"k uIn\åKUYUFAW['Ƣ ez>x)0 ;RJ„<.4Z( W(WΈ,!e"UAi_re5"I'X6f#@" _pl>]ӯꯆX ?lZݲeKP2v@ v6ҡZ]u@ 9))21h" eh QvN`|FF{dWC Ͼ|;p#3 F06ƤUo|rk|ceXv-935Dn7jJKlkE bqUCczV'^0>=qc cclbم.< `0Pfwza(*b0B`&גS[j NL`X `0 v\sOӮ&5yM 9M##`0 Nal Kt `0!ul.,,|K_>Ή'zz{y駯暏wqG ⧝u # XgT046Accm330>KT- `0 ~3gμݱc׿ov?O,_|G,`+F17"dn8e8s[`0 F!:umu:s*ݏ>§>r PpX"k+X 6n]8`0 F:u#K*3<Ѕ8v ycbEccjq\!VpllE] J kٲ[B=04}mN& ` IO}ժUG ӧWZ%^R\&( O0{U\jzs/BH=*y t:pl/*{?Ee0 ( ʃz7o>x`Ƞ=S7oNrAP.a0ܱc9}zv.b .Z05ss07ՠZlªUl6LL0`0 c##w;鉸r-VOO/95Ơy  {@g+a")`r2ժP*D  ` %]G?=s{;]vhGyNh`.9 `0RG\,`0 F8u7B  o7cRS~ asRl`0!Sk~~k_w^x+|[Rb%4($*_~arn$`0Cv /p?'_W_W_]:t cI+3*Ea{\`0 F]-O~QJg?ƍ>bI6LL`_`0 N:ō,s OXА{>(d Le>8fırs7&'aNxU׊72ݮ蚛r8jl·:ӊ 6Zplvq80,PEӝ8a! UjUHe(@Z ,`0Tلn_8|`0S909M`1'+j2^ؼF갊)a)uE(3B؂bX!S8zŋy睥Wo᳟味F e1Xc~77AG… vv6mV `F,K[N0DC`| F pJ; X۶m;zOwqG~]h0@ CC˞YhTzݼK{Tcd8rRQ.ÊALO/VQsia9hP60`0pe&n!ٝ~_^ /E@ nܐZnۥ-tw/?h2KT 2|bvص+۝ AAZQa2T*Ԛ\c%8sWU\}60C6ؿfX!; ?1/mVTuٲeEiCyadO =0qR`9 tp(Xa8T+{I":GGqǼj>_+zCnٲ- a<9 ds?V-$^)kJ0xs6,e0a62B7yff{^\px8iS _y+2v%##p7?)1h\*ED 7/ v *\1+eQ+J>*`pF{fwG? {yٻP`''pR&P ؼD7 A óȈ2 ^Kg)8{'Խse"لah6^ML\6J$"`0#;eǎz׻/h-o^7c&X''N@bqh6Vȳt ffӁNfg1hZdՇV!^npxnۀҳן}E°N-c(I Ud6`,]d7?"Ga(c^ FP.~FGsħ8LMSh.T:ÊlQ-@`~;wfgy"C]T.IسGΗvyG Xo2`8#;Dlv*`d}?h4<}򣶿rONvH|ahݿ ff 8ss /V -[nq$W}AN5UvƍO/e#i E2AldG` ??~_B㏍7aG 0>AVa.|Y 2J>{4dצMpKuNAutI7jPaŊزBNYHH,$h$3R~!fv__+pv5ؿTsfΞ\.Ӂn[FA'X[JDLNdݦyu稡6lH7Wg~jv}Sw9%~}m m.lc1u祗^N?>u}ذaC45yM>[gڵ}y;A`r?iJyd2\q&LOٳ v- czxÙ3bW@X*!l>3gSSO28=bKc|w/1`mb=63= A`/spoգ\(?[hFGр!DM =y,)Ohҋ˹kZhū+jAϊP*A 4> ^* ._ TjjA^ꔰV7)S(E9E MdI[.ϖ9gx'=)8عG/&ccp9idt6[4tO~W˚OJ {ngLdA[/BVAV([t4ښE.r 5ky? jFmar2<áglF=znnX*+^p옟6=!ظNcؿ(kr,UؿZ-M`|^AU]˄W8W2.YNpe ,Q)qF]A_L8yn7ׯR fga&h\pZyAJ>:u _;7 j2Alg4ڱQ'Of^ )9ZӁO…䔽kF#A5; /]֭st/ F|&#(vTM7jP:j:+;Y_yf磣格x!wDjǎAgzˎpkUW Ec&gcf`&q jYIH8PR_[؆^M"Jbiu0۶zzYb;xbbq#w{LRZAv />wqk_ڏ}c-`1E4 06l|[֝>I2e+j:y,PZɲag@AAxٌ_xq;[ n2>w.-JUaٲLIJoDSS01aX.J%42_b*..R؆lxMqC(z7-z_+gtxyl>YPUWr쾸iPi70'V07AqP]~wܲv =ʉ)nX܂gʞ$wO3xh㟈҇Ϲ֭,E0m~r <ⷳppoeU:3 ~u.͑#K+9ItE_Dω7Gw^ )crj0< +Wb-Ng(FD bx^Ab`ȁċ+vJѰNc.*}0Ӿ̟ɟtMccc<ӧկ~g)"%EcQVˏU*A rcgl,w=J/LNV» F`80CEGZ\Jɡ^;1-G<(؜ͦuM(V]6m`˖GXnff!|9N%6fn|ӽ8]QvJl3^3:cs2m4>nF9x_X͔'E-R"'\ 6;Le'xt1=B_Qxi']I C;u/Bq\^ĸaR-𘃝7. "fիwtMԧĉCCCjkF,Q'5%۷{U(WDIrӟg"]0>N [>nZXvnE mH4\äym%h {xhP`җл(u'?|xqRjJtz೟MEͬYjTT`rp!LL+JGZ!QTfٴ{5)Klj ;ccrG?s9? Ca}aSHrlqT/a*ܑe[\&-h}{쬇Pdw}#=ý 2|2~IFFa8ΞK ma?oదs$Fuk/oj0Dd33h҄wvQC7v4\Nut@U& 2Hf$C}wO}#3"m:",]pOcӭ!ǣwMz+ʕ IDATod#e i9,Z%khH{GʸJ,Í 勋` EUA"GrШ`6=d(4mŔI8 =^%;Kʻth\6+t`BV%4G"=pz:[̾.mEbm"/>sXvd 5ez}t2x0XJLceR//Kfko~'Nc/| _B7}[vk._ݺ5aܭպA p^lRJ4H5Zm6Z^ )htnwn65lvt^VnBB%/Z8QjZDMыwa A)Ca'+F͑v{)펎ZO ,=ŐXk?Bryqאg}ݭVWv>lŠ,Ƶ~8wX㒅U.>foϊ} t?<嫵Gދk.ßD,⿻]-$)"IZC~Nc_5NFr7%[# \j5RD 򦣼5>5[+;|qWhXV56:JMO\Б`[@*e+ GV.t(_ݾ݃&R[wk`BCT\|rwҦ׭>mPNJ[w+n-{\XT$+ޣ<_,R{ܤSǪnNE#Ao<ҎՔ+{JiLw Ye3' R\qB| %=Vp1ur)?lҨ{gJg n3沢TbcغʔhKFj2ƶlyl#Mإ)Q½v)Mu OAŊjfMweʐUo$?0b|LdVo~wuUW]r#p(1Ӷw7u%aԌV`"ա/.ZA@ &+ځ*Ê:hE+}BǀkF7C|4<0M6b(P䤶trD)|BMI/)̦6Kcc)9d =|I9Ɛheb ΗQ\ (T/eãPGG[p~I\pwL\gurȳOtY4rXȿ [>(ߴo @8q޽{oϕ3E`%q9?,5)tygc+v eJţ\=Pxt#ӄ<Qsrg¤ Ca*E{ҿ92m4Oyf!151&Z\QARTt";3r"iy^GWZܡt^C0JZ e>-oes<=02F qmPn~Xʹ)Vc '.×ab )[WY(Th(.ũ'3:,t?DǡKL e8ܠ7mP`lO7!S+m<݀\O^|c[͈X!= /e S%{3HxaV7z9u х}r7 ݮR0F֭yVk1eڣ:Wb|@PT1SqSNЫ?D clcEm5挫lلia*㆔Ckd<$iA>:mf ٥4zUxxgu1I]Y(*тOeNrTMuFnyvʔdݯlKDheGw`RDS/ymQI*%.t;X>}.R0l/e")1to&WaخҌs41Detckpr#bx,qfH Q]Ɗ$+<1.V(d%qoz2Q6F-t p\̋4xr TAu.|&f(x##$Izʤ0b HvJ u'8)\T)Ax2B169;uHk$Q[`_2k 0zkDVjݻ%ܝ8DSiG`Y|{Y0)7* Vccu+SHYƘ$ @YΗ9׃;m2`ŢFam$gM)a 7BȳP(c&I;JWeTHi%e&RF9&3|%I$('ʪ%o ^,FRJ1)/+flm-a}kӑc031C:)|VJl>۬{yЦ!^\ Z,0/(bl,h"^%\Xi|(Ќ=$2Q0]B|*nF#NjOT!u17[\vLhwz¢Rָ+2)$Q5KPzyVQ39E\gb h12tUѕ7fmHUpʚ8=c|[n钲u$(^=Bġo2eēC=]<# :g)ϫ݂pmubE=¹/#vzFl#QrP|~DUP\R,~a+&Cg옇(3 g=qwalHѤW`hR E$w F1ք VvȌ#6,]Fr]L Am39&@`Tƣ4OlyeSXjv+(2bD5E . !V,v8PhF S~!ewR\|b10U'o$./Bw:mZ:w%ua:`岝̢RaX齏DE)8$_QYΗMXDp%qH٪\ ^O+:k.`H +VQE7z#\c;Rي#JJ%-K5%Q!30aSJu{YJ+KN%YDJI"[6XB Hy|c+.˝[$R X!GЭV/`N'2v$<EUs3cf;вt6ēO^K)fTmYmLL*y` /eݬMd[@Em?J/)_c CnT52B!-OJI_Z EJb'{nI%uCZ:偬PYڇ.t Q1>c%I_fFd 8fڭƶ91eumHYh9oIx S)"B&r*Jkcoie&7Љ[[xyvmե .~= JP[Y0m,Yf s,L`цQؔTH!F@ȧI^\uavp]RNWhCYD_*)y.GLl*$>qOBn6ugm`n3V8O•QH<è2!<6)c;"VELS|$!-b% b8FQc ODeˉC|'u!h8[>VD]W&*TRlR +<:!AizE)u㙥&hoV|eCb`|;"ιB,(R=-SDu#ʘ¬ *MH\"Ɂrt!D9xleL`1,kFDmT$nQiR䟬"2Q7)!D7eiePUhj M"JK.q["\T*Uߌef\b_l\yD|*x]YdRj`?w61!O q<PC㥋`,Kz:8^= vx4jŕu#(ƹ;)4n:K@A 0[h" N'{Y‚ -^*8;XxV21xg)zOE(}F#$zg77? y0:aHB&,)&W+j4_^{uȈ{̸ գ<$~A$l#LE_!.FS)D J~ }RV5q{/cav_vY5Ku1̱0埴Bshʵ94@~8wCIf1F%NR R~Sʮ62H4)%rj`yuBTywC\\J E/`Vz1ġ "t 2{Q.FM cXmp@:ݭ2}ED[ 8 3@%DC0.㔜\Y{n ,fmnXla=7\% Җb'@!0epw\X)šHzIJf:$ȿ"Bcz>y]ƕ!pyj7f%KٳbZ}ϼN}tROY&Eqt!X-Dm@h=Ց>m+[|-BWQr=N IddblK7bR#p: B/lKSIM'Ʋ!D|Tモ/[gs^EQ"CNOl.f씘eh7n%|)ڎxjPk,,K"PL` ؇CC.G?.Ƥ9%UJ/%,_nUMJyu͔J2xw,"RR:s65eRt cvBZc"ca1P?ڮ==Ls#$)!ˣiդ߉8c)Q 9lK9V>V{ChP+PvYG|u`4an&QN4I&9~762j62RV`oalm;RR2,I7fxB:)W2,PJ/f0V!e^Frs/<\yuAz8ڨo7!zg PA}"%"oˡd$k:PVMD ͎_+|RB^A.cӔP>91=v3iMga<QXJ%{:rsaMVq t@/25m>ai8T]818{$l\n"WV^JzcGZoPXCI nLC݉pQ;v,f'2$VTSK-Xʚ":#sbK= PF]^RzY8t5M]+G@dw`ZcnvgHݖPMef|_Wj*շ3qE'QUt7~#JNWOV=3P^A[7)aMtmx9Tt^dN Sȫ2䔦](reaέkX/:'ЛO*CH#))tfT!$}Z2;G<[-<^fVxA~'6-wO<e)`صk^ nw_33ڧq#LL@e2rUٴ:h`z6mV UC##ov01xetԽ׹svͥ]ݮ Ù3ڋ ߷BćP [ɢo mEsRlY|˰8q/B\WPZ:B Wo*!9ז߬ջ-n IDAT'vMC4pxoDqh/[{cq뭊FK7COT6cdD?IeFwp9. HlѥԥKrJgDD9F<_2l3%,,^^P^ D/:!_k b2,71yG#IU4G וOGbz5ԕ eFR4q;r)fS{t[x/9yQ]3}ƪVS>]qִFfJ$eF\*U%_tfUyX8U#I.囄kނ1U]\]F*^D~`bC^ Ni9;'Su)!}ӔS&ۂ@$D*r(rFF}AE7i⿄ -|>[-ǔso5y,VH*й-bV(Is(Iuƌ*3 p"1)Hcy'Ab1V $$^C7z1&P7ukȂODDTшKj8HǓ(b$^H~ݚ+JttvrX4plO S̃ s_0sl®NG  2i; :̱VXטVЌAKj6arrQYgLZ哄"ITT5hw(ZHmX2@+WZKSl~h`j*TJJ79=Rƍ&V͛4I%TDo>i D*:B3BQQe%\te n\ptQ0뤸6 ÇL,J1ޤ5d 5+p.VQRApÕW‹/xr-_.j(2UJGVll,["We Msj_ (78LL= SSq6m2?vO?j64jUbk6axM;[8~ -|qsCOal 3g 7(֬6Eؘ&-l.uǃ ƍT /olxAc !EPM<ʉ{JN gwtNN^61k5s&Ym "ꆟH_+er7ݻ%V5 'H*P.C@ /$]eS$ ="fg9~*{NZP 3-RrH#'Ww47g^fRBثlXKJodNko*槵۰o󀸠VQ s@fY$q]Bbi1Wtt%`tN8d*!Md4<셗@6d^PѠ@&+JJoF'G'7u{Ƨe Kcqȏq|E1(6l׾ g(1bzlL>uE_2I(J #.cbg|5CAO`~:"JhOY2d*eat4/_ޣm14ԋY S1Suɝaۜ򡲹1K$)b"0{EYh9 Q-n#֠Wv~wIG@2KiD&'Rfwmr,}Vl|q\8 ۍgʕpy/_SGX#y=Nʕ.pC##2 % n=oXl`~=H%+׭'0$6 &] @w|;*dȰ}}J2^̶) k,ИǏ`hÇsy$F9w임y$%B$‚Kq8b^Ax85|)DT¹sy/_S8Ptsϩ-gaVOp}lg⤕opJ\ XUnPB@'HL%&!{֪ߘkKg~e;[ށIؘ?BڮΣ136%8thFG{*?"/ 3蘂1h^R u(k:rJ# W9rE?l4рmzm!)MɜPT $a_'uFDIV1`u6BLc]<0<(cb: p aBp;Ys]>)5³NG]h,C8/ix,1*o# WCg#X} aRά6 וᚐ k-}{\51_OVf>.f xիҺr@0b~>w앰4¥KQ'6;}|Ӱl}7ZR [Dv/0Kx^^UV`J-OtِhmMA,8dGRrʄEJ]#[N9Gr_@g;Q"ntz+33uV{f1=8r+R.5(йR8DqZwH.NL`et0qa26q#LOB=t禍hض- #`;C#ߴ=7U53pӪ&Dll 3 Z- a Ο9K=4"[~lQ+`PeNg^:Q`͚2 8,Xp GaaNxY `nt[љnCa;@6lޡ ɿxi^P).Gi'bٓ(FV~n< U)FryvJ4yo+TkЏCC73@ / #GcsQ%]F#Jb`aXX8|mA21Gl$!.+\rn_8W!ET[ {y6h4  %_Y &fH)) <O;dte(VOGU'}Tmcb-tCczDBp+рݻQ6yX皏H˸/m]T:_<9O!|g J#W /瞔˰e籡2cR+T­Tp)gԇZ( z Vc3*tK9b: METZ n|(Vh!*RƧh}bPؐ dwL޹sgvv2ٝs|aˑʭ^%s5 p-U:;]X*ǷŰ*^(. gԩ+ϋDan؀\2\YcIU&O=&e b⫪(JYU,qu1*Ȳh5zXTǢB{{hi a޼1?3 wXQ(F񉯽)hZ[COO}9?tw7Aqx[[%ׇz>gKKs5i\; CNIu+(q(vJmL@KtEIQPfӢE W9E7_T~qϞ0<iĆ}}}#=Gzi#;Saʔ_h͚dIڵacXDf-Lax8[>\ƍ!pu>f,&6<c7cɗ .wRnHɭsTFs嶏E\_4"FF^87-+_G_4M>j~ߟl/wC&OE*@Tty-(iT9>O[<̘zzªU *TQٺ5,[VhsFJؑ)iiõ-֭5ɾ&z-[µb\̙aƌp睡o2iU--?"K/mqʃjDi†9p lPEOO8r֑ċ/&xko}[_L6n\}ir'͛Ő 8o1Q_yĈG0P__`h(6lHā2T W^٠ڱС0sf/Ϛ52V U+gpp c~`س}D>7HGoyd]#Ja[[rٲIKd((uzۗ^yY'sQR_5gjݻLŁ1ڜ+چ,?inѢ7rxv O$==aƌͲ2&@,9ltv]]Y#MDh{3$~<8Iơ/|g7}bU[QO QF9 t0 (}9k167jX5m"n\4ujZkhhcNO< 4N OeK5?t(q ō4npљqGhoMڂPNBE)r5K<{XLs}|nBiΝjoʰ8ᙨ_lQgsQ>1fvYSOU\իGȦOO6|@jSCo{UߗCSLvF+*·O-N֬ k&\xEXBvjk͟_}@͒*>PoÆRzu g--L5z~10<>0<N8'5<Vs,#OOOٸmI. 3}u}W;71L3w޻#j;#p==aziR:Һuaٲuʣa|F9顥%,YYgxdpiaӦwoZT4R͜.L6zfRx6--)cQbkm ӦŋᨣPX8lXÚ57!孵۶%멧oUKR:;?s0<\99&~ 7Ixڪajm ^VHʵ] =ôiah(}tؿ?9W?mJVnqh/!ܿ>;88a1Mb*TY1_}Gs9O`|e]DB$hGY6,E|yʿzu_2^ZZϒ%Ս--#}i3sn1Zd]m}@#֨ahhd[ž=eS <^,(}d,"LVOOܹs;w__٬&gRj}@Uƚ5Յ9[BAukٵ0˖DКnӦRۊG¿F;.ӋpC_V5ҧ(D^~HH U\2R>׾6oN NM㏼g UbF]+g˖ x U=wYYga5W_"V5B1[5LU¤,۔z5իK\_ZCcbVGl2,&3KEjǍ`JA|O)۶Q@tִ̋zM}4 IQJq:xRӦ6U5f2ca+W0wnް|yO-5ϥ.:I"ӧ/}BXꬳFo\8V aǎ:;GBi]]+_TqM9RҊ?Q(֭g8ǒ.'id,ƥrF9:;U޽#;`w-w/SnIR6X!uB__شidsCA('Vκ*!JlJV+J)xT0{vxp1iyd}}Kg)E:;Ν*)U,*u5ɡyi 0eJ2(Tl#c}}isȶxqXj\!{ǿԩux7afVA/qP L6Jp5k{Xa3L^v%eu8}zx׻*Hj#|E0! IDAT6Z[C[[<94."1$Q_4|0,\xxC3fN<޽#D7Lh, ˖[n)]}R+1=K<*7_2rKҥdlzik _V\$Xڿ+1]h2߀据fݏ͛~:,\.l\+ kCooCרm7_th&,hj%50_+o;{g {Cooؼ9_<%֭ ^]u5/n܄?Hf1ujB7,ҒY껾݌Kl ոCwweh7m KV^W|ѪrZ[Cggu}};gN1E7 Z[v K\[lrÎ#,}}Dl|DjkkpӊyfXrtk 6]ܹUWϡ-[7M ;v24~RWH\Tr_ l=t&Q)PP__*6OZ2ֱ:ppq|ꨫ+jyqϞʵ {o6okf=(hRq_-OY *G݇Yg"Y QUcct5d۔CC +ZTG)qr#WgZGrRήoҵMp:+0tkosnf<V1FI h?9R G[؊oH2x䑄WŨV0RTJנ%x)K]O$CN#6vnGZьdW!m)68}$'2;S~۶py% ߻Cؼ9a@sܗ_0R >*H_nX ZkE%~M'<8үf 3fݝAKK7/=rfIQ,{#̝s>*JXbp0%bvwYԒe:dسуX)Hz+j]6{%`Z[̇;;#LiVsp$Rh&;vQ2^Fo[[aD1LY}}CPJ?*_X*mBɴ׾6lrgbINPkk;7bdECCy$+bLNJ_ٙ G}/}-Jٓ)z/eKBcqB*co)>[>?r\*kP(X%z5 4N| .I`L%N->G/@NVЂ +ٶT9lQ0W,zw}#іHx$$=FsѥY\V֮ G 7'TI=hX GV#" x*a8bRU+X$Qm-jx\C`F+Cp W=kW1d\__ysrMޑ˭\;xAcx{Z Wj[rĿJN8!k*,5W<Ǩ[CmD1K3=[ê"N/ UypaXwFeL<|-,^y|orN2 ۢUH) ʺJpE_Vůݺu+ömo9_;jWt=$ޒi-e%fWP P=hΙeE^-}-7; ?aiG /4ݲeF+֭ ˗|{{X&{MrIRedgش)̛W9}_UwkWWGҥu3^p޼љdlnBe__OBkk8x0}t '0*^]:]iɒ+u0o_Bl_ºD0I%_87-#eeea'Kl̜Y6)(#P(1S6S|Hso5BU3rxС9 j.AP)=;v]It /TCd1\;iSB&TB2~ONM"/~+J.et;oؐЫq% kUs#ϗkL)={Boo ^[O)KAI4+ly͕@@Pn- 3fްzu8t(jv͜Y+ 0.JT[0 o={Gw*(z{,KI?y. 6ޑWYFIVXIzۈ\)p ,K.mBBzYjK޽[~Ƭ8p^L = 1x uTط/!'K![rpmKVg]%WI6%օE/_%=<)S.m61Q%6~WWS+W+Szaݺq W6^-}_qߋtQ"O7BTw,o_ki9K:& W IK7dĴ⌹.ʢE+[8?ִxi^1"ZaO5'0I7}G^n(%Ŀ~d)饓,W'lV\&<̔59[ۨs 9[YsDT8dVq_9˖%,-~$>lmo:;YvE/,裇:7ڈ'I1lْח{R88/W=<~xYƙuMi+%ߧQ%S(*YO)6&nQv0zX:h `$LJ>VZV[Uq },4%_eeVpJ7Ks.ʥDyg9zi6l==Jt+WrQ@U xݢ믯巢D($e7 m_HO!o2LUoow7#@ Ѩ]XLM8xUh~Ke2(ܷ#![3 6%M+#ӷ\D 9${J,ԷBVE0oO^X<':)V┯SH%x ,EUhNģ :S+BOOuQꭷ[WҬʭg,,)wYM%KҚWtvVi]ONZWb S"妯RysIrݣ7ya)!x?H8t(:6oN(ati.;CFa #z魺zuTI,08įi!'~FOR^KKiQ<mePߔF~UKYUi:k)ϙq?eV6\gH# RtttDsw.rmE|3݇7I||#Du@|0,\V ɕ%ʝ~^t*R8d?Ŀ۷ϋR:@aG RJzW1_֑Xww8*:yJX.MF^<;N0y}2?sɶ Շ-KWxQb Jo3d93* Y)ϙq<,\ye鬾^Sj3J6ɳjedmǖeN>}zX$-ɨg+w)'k))T/z17>ܫjr~Ş8\ҼJްJmٲҘT[[ّ6Ԕ'kd`lj(gWq/V|2nV1+$%xOKHo= m[ض3>LouYF k2L|lqUN>8X{])Q)'zW\u W))r 5ܼUt%Ki΋oј~g׌+>xgH- `h4+N1UmΨ6Iwe''&N (?$<ڇ=Ҵ UKV|,g^'kU{ ?a=l-egt"tx׽ʴëxS"c7ڧIh?M-Q_%nbbW o|%ǐ?%l=YBB`4rhV~Eo!M nVhb\RսYFsт+BN/Qq1u(] S6|\ܹǜ^*;j>,xTZu%/mma-JjGBG{}3}/w ){po/tko|YgQJ#4>z2v/W[-OZ|Rc,uUi >Y&K e9Bk譾3hXGRlm[?M6KXն^5Q\oR.tƎ=Uj 5JXiGO(ISԘ^xMbL^"Kb,Ǜyדk4$UQCh8awَ㕳)5Jj`1`]/B'6ʾ4IݥIX%%ToX3>K!n|]rul0Fh׷bKC[[~?z ]w6Xl%Q 4}JǮXu[fXT7OXd"H>u]1'i[yBUxSʙg6^`aM=k48Oߩ-^ c4 ~odY7͸[n>$'@C[b6Pͻ+V} UPy 7EM6fL5fS9)E p? 8t)ٌկ8j`Q LVzL%\ӽUɛ6cStZ9.g 6o^!l| 8zeN 5JXi&L6rra\9aɒenΦ1o7Z]Ī(%KMɌ І*4Ŋr-MjP08LzݮF|X367p^%ewJ#  o6,`2.'.~ [&'a#˓3Ϭp}e`VwY0'!ȔØSظ1ۗ[F`&Gm`%h `,L^ 뵉(,M/n[&'HߟVO X$JaNBg4Gz<={3L @0?I2j[F`Iy!ߒނXiq LN[m P5JS4TkR &-pai:b !I{η `4oHf'da [65,qӤ;0 1.GD`X#^4D5YDXyw"#,ܹ4Nb15ٶn-}B`H sn{9@FXءUIgG, `UJH$`0>.مp- `x~}ؽ;_o$ʚ Jttth1s6S5,J ~wkX&@ `kX&@ `kX&@ `kX&@ `kS4AX ? f;K5,rM \ 5,qzz¬Y'[=`4ZaCx晰aCXL @U~,F{G6m*e `4…,ZUhUJ @-]: ̙'K @YS4@-]*hڰaʕ+O:;﮻r`=/{˾կG?Zle]`|rl/!袋 ?_uU'ޅȫIT}֭;wwqG/&@vڥFUgX&@ `kX&@ `kX&@ `kS4AX ? f;K5,rM \ 5,rM \ 5,rM \ 5,rM \ ȵ)DGGFRƝ%&@ `kX&@ `kX&@ `kX&@ `kXMPC#VςYBrM \ 5,rM \ 5,rM \ 5,rM \ 5,rm&(ѡC@g,qg !&@ `kX&@ `kX&@ `kX6X?\`??4)f͚u5̟?ԩ<y-_܅h3|ٳgCWȧVo;wFwq/x ^_ 袋 ;_z!WL%zioD&xkhh۶m[kk'xuD&xUzի^*yjL \ 5,rM \ 5,rM \ 5,rm&(ѡC@g,qg !&@ `kX&@ `kX&@ `kX&@ `kX&@M%:::4@~`(,0,! 5,rM \ 5,rM \ 5,rM \ 5,rM \ צh ?J ~wkX&@ `kX&@ `kX&@ `kX&@ `kS4AX ? f;K5,rM \ 5,rM \ 5,rM \ ȵ{=+VeRw/~ t&Eﵯ}'z4{tє}z{?O}SSNMt5X~W\m۶~{Yg@@nLgO2%gϞYfw}fͪy_ڵkF ;|g?裟'gΜ4 3gN3fL6m޼y:@iQ);A6V&ys4PQ 3pW[rCν/+W>n;7F_o{oomۖ.]zܹ3}4iԩ~ )>OO?}|?o{//SGr>N ?Z~׺oQ@3jii+G}tڵk:fz+_|wC]z饯|+;::R~__/^}yC7xy׼f̙|;ۿ򕯤@uww o8S+G]xgoiic_9sE/zӛ??ߩ#z{f'U7N2SNE/zѓO>_B@پ}駟~gmo۾}{?SLR7nއfOo߾3Έwf*݅[ZZN;㉣[}}}'|+_ʛo{G~DOivS4Avw5kV+ٳgG'~;wЇ>||;fڽ{1Sٳg޽۽;Pq j3f{y\ýo׿>^GCivXUMSOEjh.]]]]]]!N<}{{7k֬B6VtG7{;P\.y|Μ9㉣O^xa vq-og>}C_W7~#}3f(w,!’%K}ٟ'?~s+ڔ)S:苚%Klܸ19Ǘ,Yއfw1ǜp w_?v] ?G NZȿի׮]{'W=ާ `Uy_G?j;hFO?C=3g:444488x~e˖zk=s.\B˿o|k_G?{(h4p>pPgy,?֭?^HȪlժUg򕯜p wG?ܽOk ܹ󪫮71mڴ+V-u]/|'xssYg.w}|;7n8gΜ{rmo{vuu_>pUWmٲ; ! =馛[[GE/~{.\x 7@#=çvZ#g/'x⤓NZvK_m۶oݼyZ۽4ܹs9ꨣ|~W~DOijX%&@ `kXЬnڑꪫ !|'tR﮻8x≱x/OO`e]6gΜx(& hV3f8WN?c=`lo}^-/ۿ[__VZ`?o߾ןs=sZnk^O3QVa͚5wB\pC=y;vY.=_u_D?wq]h+^N֛(WkΜ9Oza۶mV?'-jii !dlUoя~xK.ooYO>p 7o~Xd+L`Xi/2#}{zz>ٳ'O=ŋQV[w~y{I'~΋c!{7e/{+L`X\s57t+^<9mmm===W_}ҥKʕ+C6lxk~K.xzg} _g vg]0!$f`4zSO=駟~{ggc۷o?Ӈ>^tEd`ٳ??vCCCz^Mؿ9<wtI'x&6,rBrM \ 5,rM \ 5,rM \ 5,rM \ 5,rM \ 5,rM \ 5,rM \ 5,rEm*qIENDB`gr-satellites-4.4.0/docs/source/images/ccsds_deframer_flowgraph.png000066400000000000000000000674051414055407700255410ustar00rootroot00000000000000PNG  IHDRiCCPICC profile(}=H@_SKE+ ꐡ:Yq*BZu0 4$).kŪ "%/)=B4ktL%b&*_ы B@f1'IIt_.Ƴ:s9>xMAi*y^=rTDzw pHYstIME * KtEXtCommentCreated with GIMPW IDATxuXT `( "b݊v'bv"bw+blA`̂љ{ssx1111!B!i&B!B!B!B B!BH(B!BD!B!єM B!HlOOO B!B@ !B!`l_P!;,gB!BH(B!BD!B! !B!Q!B!B!B!ԓ4B!BVX!AH(B! BD!B!D,KKKo޼)ID!B|O<==e#CjB!BrQ!)x!Ҫ9/ď&gB!BH(B!BD!B! !B!Q!B!B!B!$@B!~Y̘5 K3oFMז~*UEU; rLժH13Tg EsP 6$胺:s1{t{3TаI$RgJC?MB$"yBtc?رk+ ӻ >`ン<s]P(p]ݬ3R gx04A ~}Ž[~ҙ KXTՑ>f} hKO纝NLtt42d׿ծ"!9(BSϜdǮgӌ=gr5 Iq SS3 ɘnlް6N 44;j2+a6?4449{ aaS]Gj gլ@:3aDEEC XۙӵG{ ֧wVAU!qV 7d"##Uɕ7*g޾}Ep7+aTPr&̘5=Xj1KQBaھ)uoj/uժȍhպUm8wjE>l LvרmIȝ/3m;8rt֥_HISFv2`B!mV0AbJbb\~N:ǏmӲR)N.]>:RkiҜ/1m%>cx^rRf8+5g*o\UFܸyaC2rtP(ph҂K|ق!̘̙9s|<72c]BhkkljjVä)^<>|϶\Ƞs{L>I14 F\]x:LQɮcN ܽf ]]f̚L͓HOdhh{KLBN2fSx?9̵W\.n)o#>?Hs7lmjPr vڊS(nJø޽;@콐#8zQ9峜/RK4i---6iDFFrtή-UOjnmtEN0/[Ӽ{ؕl{.9Kxw?~@,Bv{VPE3}\||Wt8M[2lX> w%!!w9l9~ܹs D!"P~<L~tt4).L3ӿPo93j/;ȝȨi#>%IO ݧlEEG% HLxy/c"lq)ZO_9v<D%{؇VLb/WjKJU}Oi cDf̘9s!C칇T%~BA !T iܨ;vnVEZ8:};Yf{ˣ߸6ظ/yvJ%'l߱Rɠ#kSUGj\۾f"r0`Ǯ4jWa9d!K,ĨMM-?q$/a(ޫWPXI7mh6m]O9( Ŭ9M7WۇVuZ( |xb^^.TG1vBH(HWWW/X|=sMgYtٲQڎR\T*_1Al'YtthiR.Uɝ+OHmgρLQ000d1=gϞ%KbvLf@Ḵ~6lų6-T'.4ߔn_LuO~ҢiZ'g[f6ֳH>*ejuL!ĿO̵B 9HC\eK#g-~0B!!B!Q!B!B!B!$@B!B!B!B B!BH(H( ?ybW"%~8w¦S>*菱_!"Q(Tf:hhh 3yLlVϜ={)f 01#ؼam1`pW/^Fx{nL68 Hǎ̊kر fΞBXkMuJŬ 3fM&&&FuFmK@|iS.EBzL2ZΞ};Vy `V΄ƪ{/eD kz2z ZnEFFbW" +o&U*2,*7}=C[:(sV3ƙ`舾*y:fL8x=CVۏa{{cVDlϞxƖҩB Ott4KQ-Jp!:+ȗŊĸ0G0.u*1-ѯѬ^6YVB"ʼnv m;ͲūY{rgΞ;~v,,*s6GsG'tut1k2!reڻ4gLuE⦸Ϙļ\rACc;qФ˗C ;71}3g!s,xndjs2i;yrNpUeW}?T~ɐ!m\̲ūy:NPρQ62f:D3V>s/ep.ajjƪ֦M{޼ KPϦ-qZ}}|<7tzzdΜReRFΞ;yDu>@ TUKYj$22 (_ŋdbJ(FZ;9퇺+gOzԘAF dB4 ux#>s GvUW|!Uy]li ყ]~9s6kׯ|]6.\:ǥP2MUP."##9u:gז2SǾEg$qdؐ<|JBBrY"##ړݰA%رk+K^t ]pe4=g9/^>'""RիhҸ*oڤs'7V(PsWP(dȝ+}ϗ7}9l{܅gYd6aa#W^JPOݺ2h4.eǮL4YvCqJ%;vna-(Jbbbt<6U)P=^5j={;B&E01.sV}^1-YnjgDEE+gDۣ~99xh/GXȇJf**[Z V rƒ~$~zzhkk=R;{8揆Ul8u:Hv|Zbl!"e Bu?Ѯ=u۟ áIKUpk32fX?)sfJ>Cq֥]!C^N~plY[&y )'s3bVڜ_c`@'߆9Ș1#9|f;FEEA{,q2f@/&TMMU:u^ Ekӑ}1o>+If{>Sӷ|yKpcd c,Z†>͜hԐ_Î֗39UNǿ_ullmj~)%`Rhum~H>+ɐ! 2~ھI{dW[k*3TаIl|RHvW@r*. !B!ҕL3Ӷ kyƓW^=Au9l;Щc|ѹZZɾ.+8' }~ƷfΞ=;tt&Um.߃\b*B!:dҹ3k+[J}G]{eؤ%'=~$'.7.eXҝ6_ʧ> <|ʾ0/[% s*O>cҬi+=\JCD!į.S:GlVgv-ÈX㳕F )X]q_/о3 MTۉ3gɜ% ^ɝۈf-qyqDٱZȝ+ϿޟxTbJGn̙价6&ƅ$[loۉ]7aԪk̙u^`DO>f]c/OIIM!~uy?'ZV۾>'Y>{?.br+̠SaKz{ӵsok3Ҵ.?<@DgK)cB6-[7}fLKf JQQQ3}6v8@z2KshikӰIu7Ht3|AݩTъu{"##Yv͛xͪ<޾9 wMӷ.w <]ݬ\VUv".5)!&& ?Ǐ\ "}9{'sD 0m6;˺$A\U75ܼ  ,5v5ΊQA]4+8u:=Cc `i*8xh/3(Tܐj5+p%U[7o]GPA kdEj1+g#*=v0Һy Pf8jìsݼyr*Z;vnIP'_( tu={eFy.\<+;H7rM^Yxj&5R?wlƺZYrLi c.]~TbJ:T/$7_zɜy9xho4lZ|&ݯz vަvL`AfXwGއ'OGlܼ6koFmKlkkD|'TbʠhG}xlV%1zm;8ҩ!L1hؤ:N'uQ+3֬Y-Ƀa<}S'ѳ{Y \r⥌p1 C#3d@['|6ljn޺aN2$dp nS`dm]`w2~f[mgbJ(FZ;9stoVG[[6x&Lzqt/^>Ç>{6{/g,Kѫ+?~Hvؒ% 1/[^vnDF~&44-6(_Mx.ÇxL_@]Q*;=ڣǴ}xa{|Ҷ e㻒sOst'(tdン߼J5^LǴdiټMס!,[?Ia}bsݹ{]l IDATD'[~=zt*T]1lXL kaƌtKUXl޽Yk)Q">ugϝb])sų,\2|+W/X_dCѡO=cf#T~>v74I&-bfT*ٱs ;vnATå籩Z $ٯM:h -ꢫyy2dH8EGGqYͦ5ub|w:uOiށQXIqDr%ʔ/އ8v$Ǜt8ь=f\}ho0r@!44$_: iLXk{ܹ{ Gд%_<}$gI 4 OT @!"+Z"r `A+6,_~{̠ɣLdRΩ<100P6B_Yٰ֬UZ52c;vmeZ†>͜hԐCس.G63&Z7o~տյTP,` @TtT>ס]':{@; %W\ybe@FY==}q"")dR3NY3 eƛt7nǧ9S7v G*:Y/t>{BLSUNSSKZCCCu~rsT ;MVYKKL{%ky1dx1uėL3s +~>nu|T:\ȑذWmډ ޻͟p/룡:P*HGY_|;6G{vN *AN\~yvF֭ƚuؼu8"]ӧQlȖM/rO Ȑ!F{)3&qigyV,]CDD8.>"E™ ;S.`g؈~eg͟J;j2C\uɦ~*D| %Ѻ]S;:1x4ظf,MG,KQ=rq2eDu1c կט!8wjńI#EL2Ʀi. ò Xl--ųTY,Ytxp7 MMMULF;KQQQJ˩]e `U*v ^վ6۷o1# mU\ OOI^ǧ)Soj,["{ƌwopڳB#y']߃X V, qZ4k\r ǾgiigAF^-G֬}[dۏFPTXkׯЦ,[0ihW/OTXhƅSNe !B!$@iLM/ɲR쥤zzRE+Um]V }ӿ M$ظ65nʙVQ׉~qmʔHT6w<ԯ̝ۘNPq7t}|J* r2|߸c{::L8FHY3VD)nXL>ISF4Y!Bߕ/1 D=}lrPm};JyhjEҗw͛?_ԶOm)c``Ȓjԯۘoصsovz6q~ԪYZ5&z?}?7a<|^6}YTd]?ݛS)1gT,`B.ߥ>RIhjjrzz-aҹ+Z"64kYGN&~/_PDNkCԭӐ3Q;wkgђ9=5>[i%<3Qׯ1z1S&-3)YOF>}d:/:͛0jյtƏS/B<~]d౴jٖBG0(iX뻵{)&ƅU^6u r5tuRv.˛7?N#OYOKҁ9 w}s!O\3w:h !u#+<^fe岵e !Wz(X2pLʼnKΜY1*KU|w>v.i؎]ԥV]+x[3ToT?;щi:,KjV©bQ~3X ;8Ŷʙ>/etz/&&#‰&<"n@ܦ(ۺoKΝ?Mc|޾{Cr)9xQڶvly||Wr[!-uͦ-qZ!1RSkW]ܼ9 ݺ}=طGpo/Bs?=cV *®hIdwmmYVl ,&&Yl=ĸN `),ǻwoe@ ДM ҳh;ooSR]ݬ>tsof߁]}ep, &,5>}ՄgmĐAp,;vmeʤd͚ ߵzOU}oi]E܃Rd-عRILL .ǦjDYb};24I&-3"ںpN?T >gͺU N\yԭ ^KhϟҦkWox2>o߯]r8BS_'%,q C+>{` q@94j\r4Rho0r@¼MYiT9knqr&,5p=YTL=kLm_r4&-o +W-RE+j&{x\Ugred;N^Fd˦@sG'8 `A+Ihhx{/={+u^Bj5G `ʅۋfM=~@,`]ۊ+RUsr0Q.d([guT0dI193np_8Sl˨ỉN y0=E9 iؿ#b˹n: *`kyW{גc,!@9Y9>GDMԱzU}jҰzzDб:@1~VPQtmk*[ZOKvY\7?& f̚ @vYvs9G}6_ NBP;ԯۘmG]I 055;LL&-{LKfJeg=pR[CCC6i_7;:s=D'MI翟ٹmmmGxxwg^xbCCC9TH(Ogi~yp>/rm;8Rnccdʜ[op/ZsOw1Lս@qLǩm_)DZv7 cVy/cώ#)@"~smܴJRlB\>G1x(Nb_kׯp9^|AX:3n6[EWWWu0&?z~-[6=hَ|yӰi OΞGW.$nV6lUշ`z}tPsIlzL>n|%%6v>~{׾Hڝ_8{.Zk;8v}^ݲʖ֌> 2tD_ʖ)Msy/3lD?{K+ԔS]|:T={ndpjR7( |xι̡IԔIu(U-1k2EX5zUf=JqzTy66.ĬiKRob )c&jը#FH,}_1BpԊ F`!j(b9?NM{ ūQ ?C-fMڶv!} F:p:&չnݾAǿ'W^2bJ1ϴlކb/'ҽ+gn]۴oAUj^–^qɥ3888$[>ocoL DGS?Rzq&d|ڵko{bZ+Vŋ ?꿿r1On#eZqj}@DLL J_G :}$iX\kr sqCGbbbݯ3>6q..pЅMwAqttĄ"EB!HWO'/cF1f }[s'TbʠhG}xd}9vAL]x6Ҥ=/J/H]^y gP)-еG{-Û7a8C3gGD߸yE!QQtفj5+Ц>m/ɣXl^r1rHb\|sPT455qj՞;`cm~dG@#͎=D%H]~0a zxyyrPXI޼B/8~2%~xx *U1Ųߚ,5ܽE}^"Ór.c'c}Yy_7a^ყXW t5֭ص/J*Q3@/8ga߸Jgמ;CXhvbzoJ%U qZZ6 \yWKl bZ}HNú-tΣ3}/;wDP?)9r;vD__޾Q%=OB~ORR;r2<4w\e)S濃d^㙪_W@Ski%" CI'-] p7c' ~&tܛ7o0ʓϞ >;̚u^<}m],;SS36R?T-a3hiiQ01kWQRe 8Ͻ;(n6QRF1xHMRpqq%GLL#=OBm۶X.5:=F i.jGCC뽹zE$BA_۽wmٻwx&{!wy4\EUlطo߾!s.QUl8Gtt4J?^ʖUp7>}S'v Ǐ5+@^xGhw >uVSJ #SԪQ7A{//0+mW\rH6la}}TeTR*UlY鵄f( 9;:yzL&-~Agll̸qwVMBB!4r3ytŵٱ\ezvturʓDEFT΄1ph^Mܘ OLL VϞ$x4wt±e]rMS%KV^| `^YfL: dʔxT)S3|z2`p 0f5hkkckS==g^?}At_/̟v.  IDATUTs3OψaЮSmmmeӰT,YtȔ1Ub?_1k7xܩ: r%wL !d !_  y"qO9d{p7,'asthCtK ˝+Oz{@}>.P3.t;D|i3{zYis}u&dp Sf;p)T*9u:U9sBnLTޮZ-Ν}_-)n5I S&#.Uwx\gNիLuBHgisx 0mk$ y8j¼G>jي އI<|wn J |Ώ}uuܽ;_x|J^1zx棏Zo j_"k4jM;p=I.įJr|o0gUXkȗ_ z#˾s{iʌ9G~(<̪J\k۫])~_ݤ/[8ߟáќgķ_.j5;}iSϼQQWk_QzE&ztukKvX5 hM7חJUMppf/QkvNE@aɣԝ/:iNuf^(_CcVl,)S059]1)k~^x(L|%[Ѡqu>Pu?f8Zq~7wj]͙fƔ53ɚGjUֈ(L0)ݿu|ŏA6#">}ž};k)i/6ʕws#wF-h>.]c5ibW׸KΣ;n 556|;l,ӧ2$x5./D]hJ V;f4w{ZȭMQɜY[Z6-sYNecXrE)kfLM?[g7J)n&NDsgs=i;ֹmS6i@O5b iiiZ۽ұk+L+)SY?KxTkl+9( ?Ç՚dT$3&R\{yrpoFDÝI]A݉>}UAuCSMe4ŵ.mZvU^n%k|"# [oص{?ڊEX֮sNimZ:Od7#]ga4oѮx $?!T 1o5wzz4_N9J[8V?77ܤ'N`po:|ޕ1oJՖ:r[_y\v4&ONNYZł3Rܾ+^CFg[}3r7vɓdONDaw텡!Ŋ*o3}@ԷcKJ(I@EՉ4)UZyܿGjj3e>6qgwC*UV]r'"roԱ;w\_Nu.E#x] 7ohC,MmJN4ء[Nڴj ڎS]Ɲa$%=2lކ%J}XxZ]eXNj6nQu9Ʋū:t{+J0~p1xךO`FFFΒ]rR?2uU4&UDLc$%=֩X\1H dZzmXo/N!];xs{o9@ cup@6sݪMB4|l1м年[G{Nyⅺ^_gϟѣw :e˖:ReƎ,)[I4jh<~""׸6428O3&*8sMO/qjڒR%M0n*MeYL1u*YTu2)UZ,_ZZNuMOmmv5qs0cХ\u&n%A˒*/풦c6ڮ3[n_ SVWq-xd8mIU?McW355C__l۾WT6Z|s(tKqA[Pdo/AkY꿐>*1B!{f8r2r- Eq߸ʦ-k*IҔ*e_=ߺm ΢Z/gm?T*ZC=ܱŗh^Ydd]~QSڭ7 /'--歷5tkE>e f$$?PÂpZV v3ga #u*q:ȋ:mZng*\+W/ekC\&555SXRǁa\')vOSB !Cܤϟ?ó;3ggU02*Hx­7 Znǥ0r7޺3hQ:]U+6b\Ę ^Pk8n}rܖK֐c CQ8k~>d\^};x>onsݖaG-D1lxlF_=8y*cHOıꎴ.zLk{\DڦXaہ"6zmSvd-uӺ]hn]:y(i=7uظ37us\M8 &yOIx{|uq6-o4o,)6ƍPRkynck]hִ%T < [oڽN ![zJRc"CϿX2o*GS^%wQjj*>1do]h))0nwrvFe+W7ZqMkI!SoSiƖvҺի}SC$>%~׼yKy-w˕3gL>kׯ"xw̜útpl߱Y#[m{G.]s3C 3if ՟P%g,A!AO&m9vӖ3(<ѷw?-mZƮ3g">x_"=H~ڥ{7cC룏0wNIUTbA[wPf斣]<ӽ#q@F>ٳgѠ 5kα*gPu~3}2o ]bQPnD,6K|`B|FMhB!BR UAQ~r4i˱sέ !'Ynwv )T0ODڹŊ)ɍcǏHQ!B!DmI;y] 4ָ+"B!BL^ax- 'G;3HSn]*eB]X6ʍm`7O$lݶ_˷$B!MQ%/9T4yAgQ<*1h;G+Z8ѡ1B!B jR V{!(kxvDDgk{ XG`,ww}8ew&|]Һ=V *4KfX!^yL3/ӖT][a߬6vTINNcV88YcX]{-4kf0]-!^7HMM=8~z[uLԴ2\|Ƙ;~GaGo.mi%OY3c;p=2g]Y^ۋ56 ׯ_e4uGQC[Zju{cbR"E(m1f739KXB:BB=ک6e YEV܌ϤY>`oWE ӽ#  ?ÇU?6#ၕe=Vp6&~KV+7íoT@ ^KpEF.7 G~K/'Y35kHi"ԡ97o&|ŏ}gXSVˉ&^ZV|R,Ak1\=ڱ?d7qϕf}d*9&u=4kڒB 1lNEsD>ɪ{(.4lИelش&K=u/ԩS/ˋtfo׌/^PƂhDx˨UIɏya !L P*@T2M[`hhH uСPk>N?@[ӭ/IIW?3MyLUrˁ.OUcnV ###ݿɨlܹs Eڇ!ߌ$.,Mw)j['!sԲ2g9G=EMZl#0hLlLz;ٻo'?.%wNjUǚJ>w<'"ٻi\TwJ%ѧObV<[71||}SQxGݽ;WItDo_ʕ-efnTyIٝK`k%ٰ̟L9Kr򛂃]3> 7o&>jӺ=61*ӝ31L1}} *an^ysгO'R_!Oɉ'^ SS34q$$t/ܣt2LZ~>IiӺz^g4sl};Q.Vyde *D ZLuZjj*GkXT3T=ŋח jq4rB!S0S:⿷rJ Zs.J|J !\!B!3B!B!(B!B:B!B!(B!B:B!B!(B!B:B|>|DgMV?~pϞ?{˽|" =F |muΘkׯWSjj* =6U]zIIԷKQ))0ۋM)] V%h_1o vx&zڳyK尴.mxB.CUװ*?Ajj*KcU25il_K^rB x dɤaӚwng֑^=<,P@{3WШ %'x(JhGDa5{?~ߙ-Y^CР{,'r>& dT$ ױV#iϟ?#h?GNcl\Yƅ=#C#bpf\㏧9ظ39B]D!c?_ ?=y!ӓcXrE)kfLM? sU[[\:4|b .cVl,)S059v]:vmi%E2[~ZOC|RN;~Gҩ3e͌)kf5=V݊DDFaDŽI#֓y[ǪAejխK¾Y=lji{DǮppֱ;ЬeCc w\NBoGyZ57qc/ `u4h\O*i]}}?SFm&p,MsfWȾG9~?%h"ƞm 4*٘h rHcfpȝ;ƮkޤkbQTgIESf٦|.mrjɨH|gLl@u}=\%:uꡯivxm,1F縌Z5됔G橜Bh"CLxϹ&--e\<}}bΰh| Y;r[_y\v4&ONNy/_Q cP\Qx+W/]?sOT*9C .A}9DꎢIt+qu?z>Z8fzF_q4*Hل,,`> _H@ IDATIHYu,1CC#8QC[~޹_=NrWHOOgpoڵȓ'Ɍ8Xձ1v۶@%پc VuIL u37bV.zWbk[!{4S6D:ܼ֛Ns &M3J2 *L>őa Έog:TTLBD!s];adTK1˴UKٸ9 ?Ce{VDդ?ҥ`hh D!HGcY6پZ%\ _wcέZrL̛JjZN+,'OEk{8{vfh}>Y6V:|F(JZ8fCq'n 9EճIK't}522C'0h9zzzt3O륺SII_vkZo]ڪH}I׶'vEMbcde4Ł֍59?K%)YT !t)b̢al?vT? .̕pM:[l#0hLlL2-[A__uHyQ4}}}B!{f8rP?#Plڲ ״֓FհnTMmKJzY%w.'"s-k|37i};HHd<B{f5iJXZn|u rWǁ\_!}T;[\uޛTckckfqm7~,_YM@^;?mUN픶ukd"8|$ujô3VuT3||_p2*wjvEbfT*>}Uf71||B:B|:uN}߷OԷaV٧Utϲv]V؈qcƎ"(xEo c͊ekyݙ9ۇ>QA^};x>on6xO>ބ ZЦu{n@/3uVLi4qb35sJ̛}:жm>w_Ǧu;8`(vMԩ4o :,_?3nbYS4ndG (J\q2ͯn2w 4ڹ{9f_nirjCxBlFe:aY|=vieΜyӨYU8Zu+bU2.cߣTN[*OɍýBQj/x+yzzo y8VOWixD!B!AB!B!D!B!AB!B!D!B!AB!B]BTB!u;B![jӖmP R٢ \mYt =vٞmڌ߱v*W.0km} mm&4wNNv![C BܹŠ|Z2cFN㇄ y'=55t1sv/mrM9o (Bn 556|;l,ӧsFPulK&88YssV݊DDFaDŽI#߿KǮ0PoCNz Epp#+W/Cs6&)R?i2=;r-2`ac9-[^٣q;-Z VLiCvӠ ff۠iY1?7ի"pޑ$L FF#xJz }\ε>]5/( =R B,{t5ǎa\vD(kTFH'!=!Զ#&JptBHQ!%?@B!^?yQ!B!tB!BHQ!B!tB!Bh"/B! !o(B!=R)B!B!wB!BHQ!B!tB!BHQ!B!F\IENDB`gr-satellites-4.4.0/docs/source/images/ccsds_deframer_options.png000066400000000000000000000660261414055407700252410ustar00rootroot00000000000000PNG  IHDRV-iCCPICC profile(}=H@_SKE+ ꐡ:Yq*BZu0 4$).kŪ "%/)=B4ktL%b&*_ы B@f1'IIt_.Ƴ:s9>xMAi*y^=rTDzw pHYstIME +*<tEXtCommentCreated with GIMPW IDATxw\70CH!Ep#(P7WVGJպp+ں!*@Xrw?S*:çM޻s1e< E@ c002,@!@B !@ mU~jdPTL8=@]X£'~{IHӾ]!>;Ar5vVE}kei1ǫEyKrvՠb]L[ve9s,3;Z`l\Z*IܸmPr9j$xFAW'Bٱ۸1r((,O ЯO\CŅm{b \d2)]:w2~Mġcǯ\OJ۵.t\f w%U֓d]:+/`9#URQ|uux'hirv 㯪GeFs^ڋL*ݴ}uuu&O=pڶ?Wr89bJc+oֺ:JFWoKtPڙDjcfEOWgWݻijhTTV=pry;ԵjrN7;2(t6Vf.SW`I,kov5mFCwRӞ=߳?V֩YlUݻv6x Bkp-P\Z49e`Ejjб㏞$͋iO;u\juEA޿=b萵VTV~>Aĸ1[=cI~V)Sjj}z:_~S1}wo׬X:cp!Ի󛜜WYtGOR`oGZZG)c.dukj71t{_Ӕy" 2'Ϝdc 3Sv j颬7~vӧXw8.cvok,V]]kW4'(T ߦxD=:s>bJXGFF#tux> ڊ`l{9wwl`0=wlgdh`km5;x3o={$qqPY?&Moaޮ}ձnw NQ8u{tfldԵK:Ml2alڵm3kg_fdֺjtttocf0mN`o;XrwMJNA5t'lu]h2'BklSOs_FQTN^ ǧΞ_0?~a7_0 mVHi+JRVb5=/H:!ڴ6}a/yyAX?)œ`Яq\X8ui]ʓllwSҙoA,i|#C6'c0jGv6:<.KL][s ZsF #;'y;jkVeeRznEEBpNV-I(4HU_ts3c W[Ir}zVidxܸI_b03xL&Suz9;=uAA!l?:5G3u :{W&($I*^+V.b?q@$E~NAϾ}t3p:XvlL[0LIgZ\vh(i>54gM{} G{W+}\;MwMp z4YQs{blm?yub0{bK%e|#Ð |iw޻sq;XFZqcw[V.u21DɪiǮ)9ZZ{AhN7x`mFhqյu>(k];@IB\ -1dh @ @B !h>r5S;@@u>)]^BxD<"ɆBKzd.h$Syybجtm9YmsC7bytkuR K1'>r@'_Y"`4V9Ӷ\X|m6yyѭ@RZ&~ !0'|uR& h @ Osޘ}׮/ӿhoB'<O31Лw1/wX;?ѝ%wS|ՕH$N u}}ŠnݱJY%ktڑH(FjpQ@َn˗._(d2* u]Hprtdkj~{? bBNG唠'Ѝ9 TFTSU wcAmݹko~.=x@Wq>z`}]nؘ'~7ɹY2Es.rwHnߵ{O ޟv㦫7ףؐvn]O~p_BΚ@Q`Mڟ׭hƬ9^C|?{e쭪mǎy!BoV>$Çq1{TTTBڴ9?V ]8}JMM !t=qO<~V&&ψ?u*0 sulptqQqشmXDJSg?rHGGmN׷񡾃}5Ћ/COIx9.f/b0ό=݄A^w.--p8A\ty 6Vo!Tjmm^h\눤Ф @qDs1STUU BCOWðCʪEi`޾c7Kn=G=eFTUGxJ2Y̊ʴ/p7jK(j;ۍBR1ッx<_h!}}]uokcmA;.jjj6{Ug``'Y͘2ŵ BHs=VXT1’2zz uuujR)B(77a8wӦnڲUVK>sgET/sނ¢\]B2i)|##1~=dcO :̹ |jXT*p8h KQUo Ep B[AH!#i!;72hi(tdC .))Yb官g)fHL5#ֳ5 + tg>wjMn͜1*ưfdrڈv o[d?oF}шi43_wI)Գ`-Ri9IWH32=yBШ~-KqA=[CSmJD"X'v;=QMU}v1~ ]]7JUkoqOJNeA=Fυ!e#IeӹVV:|Z6`ظCamTpMkaa H?FFyFEUձBB.^R&_=jӺ[Cxz+kjjS<\BBE"kHp䐁OZtbĐk׭Z9sƴC\Ey}Ίӭ_ʅd4zOkύ!tm6rs: i!ɆܳW ?Nyܼ<%gN~W%ĮΩ߱sJY`6qGː$w谷0M@l|a4B` quhaI @B hlҵ.PΥ-ج[ș0P9f9~rA+;@vխJ8=MxJז[\Z!yAא9$IR `/!a@>z0 F"8e`x5@>ɴ~]QYp27n>k/eZDob2çMEy \ں .KBHEEEOWz߰6UܫGv.^~}Zl6~5>ӥo~5S11 R`@s~32B<Ssܯaa>gֿ_S&q<7/܅#͝ @$A<Ң=O(ꃷY.10穿-" \/Ϸ99s.޼uےE ~i۲ekj BLz:;߲OlMͰ὜Fp".].)Tx ;p>ᒤ"bڔB&Osve'OYW^N/3<|1msw?F>~7o9}EB.?߯o؄UUՆ;4a &ifjvu1.]<Ѣ5Qk4f4Bu=Oȉ._!fT}=)apsCedf.Y2+.zz:<\ʼnPzq^+-wt}tŪW_+*gPZD$I"" B?rC=~ҫ3> [fӶ5VrB*+;p5VpaEGİ551 ;~O+Wl^-*)vW헃_P2&riV=)ۘϋZwHא@Si=Jogk33탇bvfΙΜݹn$>{=[g}F$>{]k .ZUH3oK[W/=֥'%ػcG32_%\L6sW$pUs)(TYQA$EQRDVQۊʣ-^dcAOW'48@_u:v( BI1/wێ62ow7B.Ox%%Rz ;.jw~?kTۚ1W(_63޽~$Aȹ\nǞq4)yǞ_,- 8ZZˇm޶a'e2c>eWmGEEE1Q__Q[;XZ _B*Τ 32 |>ULLj;8jjj%"ݚ"Ȩze.YXT$HEїϥ]k ڊvdJ:ԧUERt򹋿i ]]Ϛؿ/($Bz 8!$h>F9Zl=]&*!GKG'.҄8Wo+?`_PX@$¶m4=x---{2Y(H?\P4Da$Ɍ̤MM7lJe2كBVVzzcbrǏ/^icmv5PVv[\k+&#$I޻;5,QCI$Y2k"mu5Uzn¨l~tܤ-;wg~kTUklPT*Cuu۷H|X|dBkQ?/_CG <sL&35Wޱ{COwgr#֍[*,]'ۘ;,-XuV?v<9ybߴeӶFッ6mV2YHX ?1e&ƢAf̚ӯoC~̏H$"_l>Z^]CRʜ($\V&[.ӧ U1 (ҳ>xRUUc20EQ\.(JCSK.UI}i9 0LMC0aTTQ$)qUuR}RlL&a@ri5G[n-^0ɭBV>AUVT[:WK%PLZVJ ILRkr\^8.YB`dz5{YаQun ~C}aB hl ,4.d- |_Y dd-+-8|.2 @xѧ >_PR\Y?! _/P / A#8Z\^zZ!.y" ckqh4'#(( +ad\=<]&d2 DAGhB3:z}:i#Ig4?2j- h 6c`|?zl)B h\% R 5r1rReG;/ m5DA oJ*ʥ6(G},ñ} B QPqr s8hw!$))9氳9$Iv @/!a@&zrA  _9#d-+([ Mִ Doܴq؈oWO鍢UܼՑQCFxizgD=~BWw cb?)~32B<ϹڟgO&߼YZ2ov&ⲲL!06zVz IDATݻw.8t$bڔo5 sA @$A4Z/WSFh͆wPId֦ݺJD***6l~=u>M_O!4a^N/3<|1mswǣ?{`nY\>xsAĞ}'\YYZDL޼]]1񓧏<]y㿄M4zP:pxlmmN~}&6h|-ʧ04\]\=G]ko#tZ'fdf:mҚ䔈DcFlv^=;wV1aSvu:5s]=?>os_6 Mr2}rc3.d%Wԕu`}i W>}]^}{stz]x?`IɨډК>;Htᣠ1希I$BVYڸuOGE!;qt/ ^cdEEۀ陙tP!g߁YNg_T&Ϊ?͉K~)urӧN+Q2!&Ͽv㆙i+fΙΜݹn:$Ɉ9urj6+ ,[ǟwb$Igup~颅?\,->s\C'O>os\p^,ǟ:bRrʁ;v4#U¥˵Bq1{O<@=]6޾v UVV>;u#n_}FE Jf5( TGQT+II$e.Λ5U6V,]$)9-]ݶMݍ3^x]O \ҷ`TTT=l"z:A}vdrB*UiBjh ;.jw~V:18=ֿ?:UrCࢥ:;:y L/_Ș9}1\ubJjH$aXg''n5WSU=w)*sj<!YaQѤTTT{dn`޾c7KnUI1X,rZ-V7>8OHO0lСjjj,fEEeڋ8F;xv%ºI$If}K5"9-(z ㉷ozL&56g^N}x+Վ6KIf:g +S&ל6qBP8:}W,JJN=Aaaa0a8wͫ91F21_z"~՚HP7;͟*((\bŲUwlޔ_Phh`8Q&06CS2RWW׫Z**rZC6Ȉ~al/(,_~ܑ 0&VPPXRR1m-^ee3wV]E]~ &cڢ}!DD/ !`o zIQկw|)3Y]:SU^QpףdJ\&:$3BTۆuIsӊ:wߟ5AU2$Bh_HXYe%<`t8fsfsNz͂՜\\\x[T\LGF}?_ȵ!C| pkX-aR>WOH mByyyuvZ7GC :dpIIɒ+wΟ=KшY6ӭ/ǎ׷0Ebd&:vuG]k33i9vzfb0ߵ_?m۴a2׮_ww_^.6K9%%1YL\ZJQpz.ÆfddD&& H$Ifdf&%'[ZXԜhcmv5:TܼufosrڝULNBVVzzcbrǏ/^驨|\H$HLB7 32=yB`Y ?+6"F 'ϼz_66Ao8)˗~^kٮyߢ["\]._~?\]l~tܤ-;wg~ccER1=..'޾ERdQJE&?"lBh؄А@? #-7 ihhkŎQ7'6ͦaVQ?/_CG <lfN^XXvv>;<!aUk"[hUҹ!inA!"5$8!dcm$069BH*-12͛7*]hAɬK`lt0vν1|>wP>e,Y&qg"ɏ8_뵵l;RI 2Iݵw_aQOI#V?v<9yp ꒆߴeӶFッ6mVaeQ8(r0e&Ƣ)KD҃;3ޫ1Y,A\.eTY,@\^YQNԒe<&#qP%-j,UƠ(eEajhh.7K,:b $8^V*woEWzZ0 @R.-Cp$ʊZieEy%*HVBǘd5ө!IL~i]qy㸬f!9e0dd-'Y`ŇM,@GÕI`&iDÅqB 6Sp C/().$I  _/Pl o1 ckq$q;/M\EhOGhSGQEQA!.)~)zWEquLjtL&d0hZ' Dq:UϘo|Ѧ3o ФAlVQ0$!}BB hDىuᥒ4P^ ;Kז[6 HѭuKaK1'>rB(8;Sf)4 9Ӷ\X|?LZЄ¼7Y[Yp\-5Z( @Br7mܲ?65795 ʗX7Yϲ!B/V'}ҙa < иCΎN{_H, {4)仰\z{4A&pV@Kg 4U~xpclں.R&>sV=/;{d8e@A8%Q F04\]\=G]ko#tZ'fdf:mZnS"f}zܙ&lޮnCG_|u>z`}]nؘ'~7ɹY˕W`̸~×,_Qk|Rȟ f̚5c7^k;wy eT`?{EukFU6D]ܵgoPaVZW!ӡ#{5hдC M 3VE͜3'9s'oݮu"Is pw@/lV ,Y?I =ήӵK-agii{=Ǐ:yy /;b8)S۱.]V>@5 /?O_OoӺN<Ч>x0.fo~QVWvm{U.\TYYx2z].^dYuC(iҾݻ9$ c\A؅v&ēI4hz!pe<&IjvD/_fd̜>MMUؘ?zȋW:1%5U$0cKRSU=w)*sj<!YaQѤTTT{dn`޾c7KnUI1X,rZ-ꣅkzV`@jGUCOWðC26[[Y]~!{vl,V׆PRqH&d2OX8L7N_OOWWǵG =|Sf_PXX'q|بz.,-ssjN/(VP[/~=jM$BޝۍE.Yb٪;6o/(440d.(06NPtI\}==^RTyE[JD"µHUY=VXT1’|YuC([5tzzuAպh hn!!`0:v fm99ZZ'=Z=yVsbRrrqqmQq1}9opZ~kBA*'7PQR\%>brgodXs@k-.vN!a3o= ^QʗXZ7osr: ޾}k>fW_Ahj?ҍ64##D$21lؼE*-'I2#33)9¢Dkkuu+׮@8nߵ;իJ,+ͯl;"tvGU+ևNvuRWZ K$effosr:::ݺv]|@Юm, ߽{W"^s?Q=Fυ!e#I%|M jhhkŎQuXbeiðZ'y_q۴uۀm3{;C sa%I"Q2Wyicbu7vu;qdW5 X[y{zM>^w> ZWگuC((ѻaD,j뫥5r!Q^UK&f6v~ ޾ L[C@l񯤸\jaӉ"Iw39 )I.rA |[waBr`œl-6?'6GThXq6G["$٢VY r>ʊA\Y Y` [T`0[|1?{׶-?57:rMGkf cuX\j7}lYEE{T_OζSK%!kkc=oXGrx4iҘLy۶ӧN3~3iFxNDxk3wޝKxБiSZlA˖,240ͽvRl ;}d9坻pqRxĢs=BuՂJlYnYNNO&z"9AL7{v]z|#4zfCC;(HmkSn]E%" Qu&l۴-EQ&Nq\F7G2ddd~>{4Z`NNNH8f4jkӾsgzVAA܅{zÊDWOںs`\F{@QF8uYacP$.g.//W,w ;}Okp]ko#.ID> 3Z$I dJfٚwq$Id< !$镕#I=~@/`ɲCQ[CO'I2|mb%%(=w O!\GRV4ɓ/\dN$\1SgnB?E͜3sg3æMocf֧w(|,QJ $EQJfa lE+Zu7.ntxZp8-%"=D Xj5B(OodhZgύ 1p߂’2zz uuujR.Hсq|ب|G;|D")F~`dfn,8.U:Mˁ:::NST% %_Id@DB*+z05EFF 8m7Is1wO,.5p>6_WGGɬ{޽@\ZggqZloRQQյ7MU >u/_/.:oBhN TS|>lf7fDD63{ݹ6EɬEVl"Ck7o*e0ӧLxn^޹ 'G,;!TW- fvr݆"~ﻧϜ!mYoFolhh{EImmحDD!YҤm6t(Dé;/V55!V&= oڧwO ?] ܰyˬÆp8/OgaSvu:tyWOƌ 7|A b=ukFՂBEU9zݖ;B#.,*1kϞCy MNMmPB[wۣ˨{(¹ ;+Veedf:mRE Es.rw"GAcFq!$IBSS],6[SCCΝ;8$IrR(HWVV^V&}ZgY/AdnlٰiRԈ3SSBI)F]¥>^ޞ;-++c$I^ty}JZPbyoܬ~"֠ ڵishs.pZő$>{Nǎ6g~WaSZEĜyC篿Θ=gEQ3.iۘ@rr(j%|P(%0l??}ƺCO:<^q8V0@C=1   CKD" v;ϞM8AEEš 1X,r26[[Y]~!{vl .aÇUSS{Uk_x=wf[SSUUա}]JIMDッ0 ح/_fd̜>MMUؘ?zȋW|Mj,yܙ5Vt={!al^gg)EPZBO\sz aCa|Y -// L&V`lBPSS+U=|}_H0%-|=VXT1’Z~tY|>~9B "77a8wiF1zmѾ]g!8r֥;?'|2/H")h82$Bh_HXYe% X[q8 . :@? :*icW_ًh  555ZAΎ^kE{sﰺB P㸊e+Qod:ѯsbm[W_Я"H#Db1˭kW[~MrXQ!uGOkiidգ p?>:1mjM'O^zmuVVzzcbrǏ/^驤n].]D h׶ B-XYZ޾s!͍Dt]]7ߠH$effosr*ҲiRiL&{Q]˲VWWrbo޺M`iaab"ذyTZNdFffRrgRGR܈pa~WoxR2K$MuԴ/b޽wP%쬌W5N6wVZ2YaB&d ;>s7;fmF'ێ 0lctԪ5q-Y#d\ò3+9-̛=sU'OVĐk׭Z9s4EnڠX[y{z ;tlon^WI!:jMT_sb_ײG|1p؆Q7'6ͦ}-06:wޘMvb>߻gqcRUeusp?;V&,Z0\#n$޺xKյdsE;9kjj*K.<>5 ĐIB&~^.AI2`STT՘,HR.P,U5u&10IL&e!u MK*( pY%uDzZ0 @ m[ $++4KVYjK9*ʥJTW-h$ 6@@}7Uf4i[%Ll!..V^A"TYe\'R:Mґ#5Z( |x$s .0)^-] ] ] {52k<@)Z2O˱ZX,,?mBM"\.Wk=bW Wi.Trл$I$Y,ŒKMlKY`GP( LF k֥.Pa?Oo_Ύa?H ?ZD`JA\nZ ?86l??)x@ѐ$_+Ta[`,"|#>T*LK>luľ\.PZ\Ƭ|CơZE+B3?BҲ"43#%#XG4WrnOA?N ("@@@@@VZoACjjmbbnmoB6M|/}jS3?yԩk>xm6&23W[Ҳs=ݻo{ⱩJNbFUizVQ^p7&NxDV{zxѽ}vBO7}>{c[oX)4dg'<:uبы_Yb _;hp~^^T?fΝgF/Xv{b/]B$%L>gDc폌k?&?Ax)u1gnAuڲ7srs;msG=ʶF$iZ];7|[=v<:]l߿Ѫx۽7#*{[@gjO<=|yAgBuaB?٪e S&T*Je.cbc~ON^0gMRuh/ R^;qtn/_rryŋ9O?񸓓SX ؽwmǫT*Lc0L$ֵkN79};oxC8G8g gJ>2vJEIIil\d PhUl7f%dWwuߘ nNBK>zwb|e#w} !<=Yo0!22T #w ;qdRJJǎ4N=SX!DVvNuDm?{Y9ZV./ࠠ..YY3L&Cc~4L͛5k޴W^̝}Ѫ7+"@4zGUL\'6("1b[+l? ~8vlγ3x^@fVdrrrr\ޱcp,5-퉩S<5={c~YY$it]&///>Zn^u67dY[/@ۯeH>laz~kox~Sfߺ!Źxmx#~jMMKpW%%|m[7y*Հ~/sqZ*iެYh+Ye4:}vDiii`hټe>ko0gΞ rAmղÇI?;~ݵx''Tk͚6 |b՚xrԅ gΝX,jUD}<]E? -@VZNKOY=#>TKq GA+dX3dCرkmyhH[XoִU+<}πA//}m-[4{{n'Zڟ:e=#oݾf$ջ,-((4__WDCX,ONZӫl@͒ n.=#ccۣV)nm:юbɟ[l&jiVu_8jZY} ituu#p˒D D D D D 4 < ui/7/7,wضJJ$x!+6{-9 GqĬNI=n,P  h# N* HrP9ĒbIg6hm[к*E$)=΅V}Vt:XKDR@d/$"Nx&@=wVzk>BL㍿߸~qfteK(L}K} 1{N6-P cU5B|};ΞջgWmڴKg;쁡KKKyg=F3_?_x^2m̞G?2AC޲eبU=t3+..ǼF'|I'N?qg'<:uبы_YbXl/_83-((zC`׎P|nc?4va2-{3'7ٹ;AIYo} =&…[599+*[Dc. 8qL&Zk۶}{^Z奯^{БM?ٲ;_X0=m;vGc5hg>4n ږG]޸nw|xʾB:{s;9qܸ{̯M9jvnvqǧT1>]f/2337l$x|}W|k_\I1wڵeUk~%Ӷ+[DZ] c.^}ǝ:4`lw=6eWpPPX]:wjִkc/ٟ~ 4G.9JRL'T*Je.cbc11aIrn]vt3vKsfpVt:#c?x&'ȸ1 BPL7nϾUA$RQRRg2б@@/O⢢ )P_9PKHLpqqum4Oc_+Wȳsz}{l7mKZ\^AA7?kGKO0Lo[n27kv)ovNNbk7yӦgL_W{Z0w7Zتe F#GJeXlNXaM4B $I=8///cn^^Rmodl\WbF6r0^x57x-;ߏYӦAAXlZ/_pIϯ^7>Y?>=NNNjU/!1̹sEV*J^P]Qyzz~7Zڦ}O>6U.Z7mrE m PhղŐAM5oެIU\7_y_lؿ_z; ozQe&SАӦUx@eCvڭV+] p775wrcfVKq+|БFEGתReg?pUoywX,|qϾEE-5=4n$x;^=ݫK^_vο>;|[HJN{SU*:wpO0,ڊoX$Y%ahΝ:IHU̫Gq N=n]:Wf 4+YYl˷nԣ[sАvmؒĩӱqq%%%M.CCBb/ŝGa IDATpAo08;;7nذkN7a[־]vj|^D p7꩐A{Y?Y&W~v]O>x7^]{޹/ڼqM.oݾs[ov p _z_}Ə$X$$1s3 BB32-_S'MB-w{wW(,`0<}/MeE*u寿7w˾sjնBߥt 4TT6n(6.B衃W~?p#cvwwl_OٽސoS~dڹgaQt>ءC. 1di9 ^XS9 "BHGLe&!bc7۾{aݺxw ֹSII[EZ4~l$?_~=aoޭ[,.*qܵDl1 I Nxyע3O=yc7s%FRY3SѢeHXadZתX4d@ٜxڵu^9 gkp4nx CCuZaPmzc+d2٣{!mH[6o^?8X.;&\lJ d2'''/Dt^04O?+9-d2mb6 !,*HII-++Ɏ#gfn4nj!,fsƍSS }R||AAB?4~^쟯Lz|f.$qhv|yˋ^>0ep+PW >^~kڞtWWjK֦+ŅԷ矽gvmZ'˯nn""4*ҩL&;zR[.NNN˯]ޡ]~f'3[nW#I$愋QITZRPP* mNN2LZKKKloTJ'L.$b6H4m朡{xBRYilBrgW7\.I@tR9Vɤrq)*BekJBltm--KM.;J&fTV*IMMWkꦶHq h+Rd2,ܩ6a]ju͚nyԯ-ۆwb JKD韷JK*>}V᝱l2;|o鏿+6Vkw ՚ūUbcQ)`Fމt7EP6[k2LkFAC| &.GE] t (K&ݹ EՌEnjw~hP4!ZJe@m^kѿY,,/_!+GѪU4_LOu>?T(ZzJVGrUIuߕESk<\\?"Uht^1EuS_Ȕk2VbS zH xx) \nۛSp0;#.ku#ZNA$YwujMd2\;)- @-dBۮ*ĉSqWNnhVnCIENDB`gr-satellites-4.4.0/docs/source/images/fsk_demodulator_flowgraph.png000066400000000000000000000250541414055407700257510ustar00rootroot00000000000000PNG  IHDR_iCCPICC profile(}=H@_[KE**qP,8jP! :\MGbYWWAqrtRtZxp܏wwTcP5H%B&*^D/ŀL}N_.Ƴ9@.!´!BB!LkB!0A!5!B BaZB!i B!0A!xp ԃ̚5 wB ǝzV`bo B!z A ܃?/^# [B^BaZB!i B!5!B CXuC%y4CmmzzS]GDM{[5L!;IC%e?q8L!iVT6_g"jUM)2~%Piܸm}#4%ϊ@zcTBmii9r,j`R(%ϊ#: ?qsXNg58dš[I~_çIFIKf>(ӧϵ+ee߷5ڗ/ܐdm0.-[\|'8!F3]eKWg5I-$:aNI#++g:B]M TU5Դ,.>s䉞||b/Lonnv1RB\r٬'VS%iIK < aҦ&0c777~gPʐӃapOJ݄6*kqwߧO2%6ps}^^N> EDwSW w$qi9Tjpn.^_8z;`9q"^ȟ5쯏'%=wL MKK p꣎/6sݴ}xeedQ Χ#/3{9 ^J n7/_3_qtp勎PU]ỷύ#m9pqq\XU]y}fqWʪ NϾ|{ꙨHt3Jy-3qw.(۱;k6?iދf|SCçl@ԹS Ο;[ǟmU$!.+?|pHkXc"~FRfFqt44rQD{;O^giA37u:D"=3p)a>{j+BBz[\7cZP)x _HHxn%n N:'%?HO_h%EL\gەuW._wiE58GI rrY68(|ր§)RkF;fLw$a`4$FSu sXߧb!*WpPxsSӬIQ_b"kIMM&11ɍ%kE RbR'mnZԱ22%))$;G67!PQ!1~>}po.iEMU0--|h꽔O2tV>QO̜>m;8mCGR 2D +KJ^M݈Kks3B!ԭvYY -+{ug>lldZJUEr>~u$_cmt |0szظ膆Nmf B5fVzhç!ffV M8U>mǏvْ1jw *c3Vl+d>ݞ@!PNkL)?`:1ԒSE=yyyzN#l+aHKIYf]Ν{@!PwOkT#!sUD )1q#i4ـg[ =e6@YIgc-G;V!BL~Y aMb3$,pe56Ӝ7s[|;[M[׭Au.R*'Lv겵)$w-GKJMKZF^xQnhׯRPȭh 0Pߤ#_wejJ)$SAįMMMiIhHnݾvLkU 54G ۼy!5;v\N*)h1. `^UVUKW.`Qɶs70"A!'9?7&'e$>s"5-{4x⾟h?G\I 7&T{F6l}w)7bi4k P$)5>_jJmmܽEo\ XX3و9] d8؄i,JoHpA\,9Q[r0$\럳'ZJ{L!Gn dyG;```)*(ݾsӦx)W.ޜ8==^c&EdH/]@G[OCC5|XÐsҺ+x_ktwne)SJ\| h]o_~ƙUbcw|4;lIԓ$EEQo܌# I fCo$5(Zmoܰr:>^>z#D4)o-Voi7:=q۷o@ZJ@=BFhjhc_h1KWo޶mL1pss7551~q͛7cuu-!*1C bfR[I$A=ߵ8J]WǠ <'qԹS?HOl`?7z-gN p|K__?00kVG\9K{VUWjL289%ѻiDw1^s<}\VALǶ5;gaɳ<aΣo 8woBw"j'9%ʪ !#܆*K>]tcQNo0к2 /#Q8T{)QV5ro WQ[v_x^ޓt[1#$dny*yIrt40V{CBSS/\ڴy7tJwZH>d{P?7ϔI3MӞbP\rs튱ozzz5j(6e`5G"r뙀50Fo_q;B/ٍdɢ?,Z:;O>gSnBOhj'Nxxx(((rԄ{G@C\oBߩ57MFwGށzϟo޼YQQ&""u7k/>ⴆ };׮hR bTVUZZdpY+k*3+**T-=@n;1esC+*-e 5-ԒD-5QcRP^fql[cZd܉mrH<⏅NVp%X߱@^bMW i-a F7O hj;Ɯf6 MBiߺuk̙3fxE68pAe?\Ǔ/1~x2L!Y]:z5߻iQN]M7777;)(,7fgԒۏϝlqI s˥e/\:r'Fb|Zrbggr e5ysxpPb&1-rM mj tEe^s6;~D|Ub{{fp{NyF&`p(Y}'7 kz"uvq3~  45PkWHCvv<,mvvrpW5r\^PQVz4UVVNFZeHeUU--lͬ*: w %)= \G yJ|ln6I "r99KNa8 2ƺH+&QL!;ݻØ)WTex鬆6!>ЎOZVjeeI:E\QY~-  8t-#!wmz@WG'ƵZˣ%*MMMS)Ee+b]bmu~~~;jç?s-.j:Ă)Sjn {v# Y3營8~t{ؘdW>59b`uxECY8 "lo w]#TYXg̘1c QQieЗ_g/V@__VN^v=Ήӫp0F00кy'0[[{os4Mϸ'!.=o SNItWӒW9\RB'pRa8N}[جO-+jjjU=|T+_>5~rvӧ񦅐]m@FI8Ij嚼# Bc~F\Zw -|gMwӮ#"ՋMg][{^";]5;v݌'-%3{_'=c&gx3  60&FԈ١i |p<߭Dg*}@]M+9`˯{GYn3+b)^^^EƲWJi4&i_#F;C>z\YYm=PхN,!.r+uĈ+mg ۷'Y~2Y>,QF?H۲:?TC] c@65; NщGCx׿'fq@he,m 򻹎 淦7'NqOϸ'D~ ##fzzFltg.#o,\f9'O|Fgy7uO2K (ݮ˗61jnnutu}S'"}Re+ S50 IoZCG=o (-~lbbuTS%ϊݬeDT4$_~Y\RHL"1p8;j@]ב_ 60>q,j)@8kF̷ۅE*xPjݡBh~b<# 8t kĤ((|Jڑ1gBCGsVVUI 7 կj IDAT'ܯ߸8){m6BR b/F!51'Fû.) +7yGMm5=--ɯ޾-Ũ@s5Ҫe+÷@ڶ-loIMz7-9ܩ뱩fG;!:~1A_,YY9`#򊋖~Y_޼e^m]xXvrpWQ#=Bna18{llπ{p`8D^^(ꚪjhhF!0i|+ᙆ泝=$;rrѣ& nbd5~<!5(QpGe`e k+}0B"3=5 'E S]M3-I]u 1?-QO͚ <,#~W.k\Xyћ=!mBRՋ&Zgd ȿ{Z=3X"+$jcoͷ8E`H@;m^e~zZC *lE[[پ,v.ӱH#zg54-AxQOqt4D5|svϖ1Ub[8◯?t䉞Ks`j6ڥuW8p/ίRS^8;67~n$NF*@l@bCwn&S({^O͛(=?gOǤUHJJ ţ_'LNC455jJM9bkGPQ~:TM[a惌`BBĂ'h@?dggq :¶-6ﺦye0AJY]\\h``dg""d({Gq3q~jRl G]|.$&%׿i7?|OuD"@;nB%ܸBkyQ8DUECW/22}צAzfO2Kã.F׿?w*/^"1)뗜b1(-OL?k 60NiS]7Ơc-{yk0pP *i~HQ{-uw=mʬsSe&՗/QM痯_܋5U x]|CY7yGC 9p\Owp{z]HX,GA6rss+)5167f˨a/_>oiiJT@ D:5Ĝu!{O>w#X;gaxġ<5:#ˆJBBcGOھу b_|t>aDd [ ʞXo#3 Gz/M_xLeH>b2k&4_xx8=x~.c wE L!B>[B!LkB!0A!´!BBj< qBh-A!P/B!P5!´!BB!LkB!0A!5!B BaZB!i B!~C#PIENDB`gr-satellites-4.4.0/docs/source/images/fsk_demodulator_options.png000066400000000000000000000424411414055407700254520ustar00rootroot00000000000000PNG  IHDRV-iCCPICC profile(}=H@_[R+vqP,8jP! :\MGbYWWAqrtRtZxp܏wwTc P5H%B&*_D0L}N_.Ƴ9z@ xRf>Iз \\4ytɐ)@ӟgMY5q pp({{9rΥ7 pHYstIME  ZWtEXtCommentCreated with GIMPW IDATxw|SOFwӑδPJ DʽTD 졀 P &k*|ӓ3?'9|99Q 7%%ܘfgR " HG+p"D D D D D D D D 9 S|4'W?e;nz۶ [wTLZh~}Vl]%[6oфji۟P([:x` =pTRh<=cz̳˯ "P(j[P&];x8#+;TܥC;1"srgR>SZzFZzB|)Wa7fZ}ݵh3EEc'\l6l0)upwъ0OOuoA>OPLwWEE'N2Lrڝvy^}z{]NNr;~ٷc葃b]\cFg%+>Ι*LZ_ǍyQTPh<=E^-Z6mf1WXh#rr-SPJO-++;p:JO%9g08;^RZ*"?y);W،Ӊv:CGr Jj$0z┲rquqzŒ3gSv}&3x_~&%"8WTTTL2l?PZZsyzz.x%?3Ozi4EŅEEoؼ{6q]WV5#+[DBtAG(+/ rE~uIFVhh}]]\˳ra`BBM]:;;;L )lJҙQٽ4>7wZ,ly^{{"iDQ"b(,T(B{ulqwfvHDjk"?lY֬iߦUмsf,,xz^tgd`!nY+--hܨ]緐TKYSthgx/^MWe0ִ=ԍ3p;BɎl$'WhtR}'fU:YGuIR4͹RӳYDvo F IYrrM&R@\}jFfKDBCt"T( ",Dw:LFf.0ވ M8\^QXQYyE( Z\^^^^QQ`0jִ}[UڱK0VɌnᵦ0+<48HD|}o Frѝ@JaQHh49WXZ .O6 :rn]Ed߸%mO#oEQ/*,${pʞʞۥGObVb[D<|tU;n/hl;~j1|( تt}nFVbqws!.>AD6 ΦLjZ;E5mRý-rgzzx]>{I-"JEGNnbu:/P@}!V-[?i]p}5e 5wڵiݩ};1[,?јKjWJj8;9D9i&dol6SOKfNge!\APhtxzK8)"a!E"T*FxWKHL>c2wy{{fKhJU[xuD,KiYyjFƙ4;#ҳ흁^wo//VYqvv6#rjX3JqPk?& ^^5;2DLpڬ_?dKV|V^@8n]uKkl9b,,٭:WD dZW?V5MʶZJ"v@{BD~{>/-={N~Z}^/\BX.򊪭^{j=p$NRg\xi{E`2{jVN=x7lZq6q׎=i9A.(hsFa f>;G;|.8h]jɿ1W&5^?埻תi":ODt۷ X /#GKs)o/MѮ.YYeeeQM/q{:oݼ{yYjF.ڶh7 =[FE[!WBpR4z8صCnENNƍB{vbbm<*0_PujFRbh((_RrM|jwu>ɔHnv& tm7,"@@@@@@@@@p=_W/h@}ƬK?AE7Ғb\Dsr\5,+ l1l8ЦK>z;7tLL\VގZxYLPT^^ޒlއcoޣo&L}dn=yy/XIrsf>߬[Ĭg6[rVO{'}oy|:=p%;99]t>z{Ef͘d6}.?/C7 ݫg=:퉳lѺwuۃ_TTz:?O cj tsLSTWRv ̞Bz <ȡCiJrԈ...gRRjx|`wDR٣{n]T}tر RyII3~Y w۶գcg|yPThў#yeQvm1ӍbMDi@+2{u ZQQ=>:㛯 nJT)ss5͞V*+3>,4\fffdFdjѼy=:RsJO6a֥X߰A-ECw.۟X*j.4y gg1_{n9o?j)"ÆaDTaO_`0H`~~c9yUSJIM2)"AOoRM-Ï<>g緾~eh;E UYe"VEtȶME$P[ЭqPMyߎPfXJKK7mْ\DDbWWF"])[6og^IMKq.VѮ.vO\t-5-SMMQQ!oj&%';Vs`BlոU>ᷝ'r ftaht<ҫGƯRQ*o|\t-[^tMwޛ ^;o#17ߘ;1dj8il'eg L-}4ShL"+)Tݔa*P)JD݃Zkgu>aݮpP v< ajW ,Y5hBS-f1GepQsZNMBh6V`6>bi @M~jfmcGhRt:.#-UC)zS0$,ܞ%D Fd@:B7(.iP MG(\jG(МiCM|y~mX쓛1>І+)m!b|Ӛmϫ0#찤|)j2W%HK!"W ? "p"D D D D D`{c_E߼u#ѸLѷ_LdJ+Ep=f-xxc=a[ ˑqjbQ]O>8{Ӿ``Tq1^5=-`^𛇷i:eܟ2Iqpwuϙ=gfqz^:{e e>ď-zÄ\Ewϛ_o05z]:u!C?Ͽy>Oڥ민ff;wsQQqSՕ}}puu0vmU̐wio-yeG~pڴn˼J&]c敔=mo^ֽywjAC<{PC ~<␮ =>dzxwѯ&nʰ N_<_xggqSi_L!}wu<œk4V}i&+-ݳcѣLyy};W,x߮Y>7 5k:=|4ӏ^2;;{Ukf|288x~f=n؁W,<ԓ~~ qnv˼%V mN@VuҢQ֫OӐb>M[Ar 6exi=ZLpL6MD!"rGM=^fٮ S-v(11{G"fxl8‹@o8;/W=u{DdiFђgRRZDEȔ{'tСyTQDd`L '7fs1oS8:y餤O?^T*uqw޼m[^=m؄c+5mI]ymE -C[6ծs_jLן+-7,`w[\꘬m1N痐SPf:kYé\C/L/E Gt<ꟛ3煗_߻ E?+}^RTX*ˮ~UKJJV뫮.33d2qX&Enc-2qK_?%ev^~`ߣTJ-@V+' pۑ>bF,N?U("⤬-PX6d*E.Njǔڡ$"ysh]xhh?ryoy,]aTH6vJȈnBDj<=Ki&kRYe^)/2_dA]|[/5'=tVLGg'97kJNؖ2WRU;U*WTn82S/TWxV⏒Ϝ)HIMz͚mZHQQkxx#q׮:-vg;w`xɧU}yTThh.*))ZIqǎղDMMM{˼&~pF^É 4 pwR?Z;}m2K3y̼E_\fwrf8?7nϪ{fx@?^սM?n9t1&t-Z4oY4i}q`LIJo1wncdԤqӦղ{ssxQ#Fiׄi޺.6'>^_NWs)si\jZ~&~-|]w==fk8ӽW^.EIq{42tꚚ Á:Yu5vmP6Գfq: ܰԔsX HojOژƾ2 :BD D D D D 7e0+ІyU l BS-f1GepQsZNMBh6V`6>bi @M~jfwvlPE鸌"W Mp{=ܠAٔoʊ4rXD/spXxo?~PІceOF;T闯/Zذ|&-T.JcV}~4;quY`aʚ8Z-gg$HOK; &@ A/on '92}QL_S9f nشwwٻؗ^}h76-$82nàa6Loy@}5߼>T{|i=te"ҡџ|,. ٢ѝtAu+^n2|6EDld/b(pwz b+*yy<ӳiD զtt dLm^cT<,f2q;ksM&}|n=yy/XDyylfÿ[C:fv=/+xy}S e'2+V_ӥOTdk|q~N!"J9~k-s;ˤ3lu?|4ӏ^2;;{,٧[͍_,pFzɐ/}@Y b6#""%VYz}eC%Nó IDAT=WP^uZ?.Z-"o0,v}1U*3捷~`ꔆok'snwFFȹDoszNni+C[˨N$r$m^Ӕz^K+ǧj z_Z ~Z\qY`YnY$S%Sv$Ȉ.#P)^'m}HQH[z*FٲucLYYΟvuo,-=#r ==>f\`Fʆ$ʬX RQH(9<[diODlڲ(̙Ǟ|ae}vܹ%dٲy={HjZڏv|5##βᘈLygEwFni^ _BZV$Mx&%N}RĘ;x~l6whޫ%s^^Z]pP^=7yo.xy<4jĈr5b 1C.~QȆt չ;vY+[bc #GFP#PD܈mߴǒD D D D D 7^~뗯I2 JpX4YE)&AaD`+RϏF( pUyzP\.cbVZJQM)D/spX=JK@tnP5(YYtvpLh8{j@55E֝Zt6s|BjEi̪ϏFxG6> l0YYgPBe~쬴D`iT iqA""""7~͔X z:12.p; Y}8}F/i {>\79 h)Cc%D? s~exwڴy%[DɥWG6md岥{vl3z)//iv:}ݽ}1cox>xvmwl0YϿ򉄄zvgs7K%/ ϒeUPi&){wD[E-x- )g|oKpPc\}?+}^R4{N>88X|CzJtIIPW,,,zʩ);dAR)^'m}HQH[h^1#?uO777SE|c)-ŬIIM7ۼlXZ^a99KOedf#B+^R \^%gKB;#tV 32>XQ3)i_YӶMkC-7߳wkWչ}`0/4v )**vuu o$"?ڕQBZEGl۱Þ?Sm[}dl>t-[ R|;ˆc""3mfQIz|_ i/~2kYO7If㙼;]GGFfyT}ГϘ=5߮ճ\L<`0?A[jj}~4(W]Gh˘iTS &nϿҒb"p#G =f J)z}ŻR@5*Qx`+t\Ub,)T1[,IYycpZWI{p1)*"kAL"A3m:KR@*_3SS]A.-`ܠ@x}wwۇ:pM\õ?ߞF}51@Vu'OW<4}G>8mZHpU[ݠaVͼv@v<6>zmߺ׷o۶m aC+w=6;h OHJjڴ3p1nO3d藫W6};YSW>~K6G~wMnjK-Fz9>>)9y½SnЌ k[GWdMKb3>|.\BM;O&Nz]c_zmdW潮{䱙nU^B.I,h@찞>jtܱc0kݵN.*@' TuBZ>xvmwl0YϿ۶\իV~'g=3o`4׬]X_NӴI˖ٱ}QOz>>|W_&%ٴeX3Я['~K ff|288x~f=UgeūW^|<ԓ~~ qڪZr&?WZgǶ}' 88rpAMcCQO뾩NNN:v2hMwOXhhnڥyT3ww1O$t 2OU*Fpqq9Ry?cRjM]Dx|`wDR٣{n]\_ONJC.:]Fo޶w|ܘ*JR3fæ͵\I*<)H .> .---..9@!:]bR}>We1_NV}>/OR cpqq)0[TVyXhK2Lw5>d2hwO[#~~z}-e!nR=pgRRc}}}yV-5-[Fisrs,<xZ')/Xèf"2l6)  xz~ մ-[Hzzze[B.j漴xҧg-\uLo/\Z^_XXuWݲ%KfÇ7o:lȐ˵AEEŮD]32j hWWm;vس?tWWͣBCC~wQIIjMJNvI-;Ν;W`0|jiR%&%:rbxxxjp5Z"r;?]7绹m)J;xy{Ye*!LӵhѼYddmT/(o޹&SNVmvǩs7+=/ j+յhvi)%Ep/h U\vF_`peVUȿBcA~nNT6bPT*B8u8dӬ fB('+E\]X8W[]XxnVf(KU?VR\T^K<4^%EV[%VעGzRZx:>%\ٓ"b1(H-*8SM\#KG+ZAԊ hW<%(h@+4g(h@Ќ?֯?|ôZ46;i˻~tF>nj0d_7 uA=t1Z+RR*X6䩝vuܹSuQXؕ.8@Ʋq nؼj|}V)%5mL>svG}+*.Yrm:yT6mN۷onZix.n9qԂnc[U b,Yb- :ݿڳGw7lRT\ܲy,LC];wJ8yDw7G={yu#G9ֻi}}׭MWY߷ϴwCGN?va/|700`G٬65q]: 6ղ_=w;t!__M]Z۪m xC N>s&;''(0>]򜜜zv֤qj[qxxmISʼ47umpc Ȉn]߄߷k2:uh߱}˾_D PR*q6G.۶=5͚9{~_͏?]Cs_~Ǟzf%J]ΛwqΟf~K^~\~ǎl%bwY9YX'R\^EE/ zgͦ Hjjٯv~\]]Tj1^O XU©M7VՑM&:@;~|ؐ3gl1n5-:}7i} FW6k]|w;V.رAbd2 e:B \6n:(&Fl2;v*LbҒү|̙=wvԩ{.ee_^³ϴjO;e_o_N}ڴ.-.٣[}&6RRTTZ\,6[thnݲO1L׎JKjٵZ,Rmj}bjӺUYIA-fsbҙ:׶ʖ_^^ӧ fM޵/\D\\]#LM[ C:q~{JDdǦ ^^妊 1***:d6?Gڜ9Z쩧899][s准 Er٨fM7Gj/BYuVcjkf-c{<ܹ0''TMT;wWѭ89绹223 ƏS%ǏNjԛ1{i4]:wz&5CoԶ2,Ĥ}ǔisiidўɭOoo/RQXZV֩C{Z-"yyWs@j/6~YD<፶qר5",2"-=jvQ#~?QH-i-4CGڵoimMl:]𡸣rvv puuݵgw޽ΜMj[]{xl'?z߿ף3ƍVPPewiS'el.uMl6]sgΦHTdRYyTbb6mD$3++FN:?xԮM{~h-8(HV68WPp46nޫbY@gmGq{ łw!!Nf=z{/S}^קsNW&}yVkY'K^FU/=[ -|ANQBtA-O,|CLZlu]]WtJ8u*<#-ؾmԴ_~mPLAE. Ů=/onIDAT?{i4ݻ4__~m޽۷߮)J8Wcl6ٜx".E@W7wV^VZuJ.-. j-//_vrV(6b6Wli;x̝Tjj(/3M"T*]ܕJf+)*T]\E!6l29Elx$&liiX.KєJJl6*m6%QK}E"r h/ZV( "ȁnjvmQmZ_/̣~n׉V Pϔ\8L(/>AEyEEE3Z*f֚Ǯ~{Z1i?/^ږ76lD pZ&]$K \~?d=ь1pIMjkvQ4ܘAE+Z>עh@ (h Bp6+).rTEEwFP~b E%V9ljELK UJABILEߕ:~C<E; 9O.^q>Z?wrPʲ&jZ,BcANfZT ԅi|T*R)Z]V;(7+|qGW96zߗ6 BTUOo uU8_)D~ڔ* T꩜_CuIENDB`gr-satellites-4.4.0/docs/source/images/fsk_demodulator_output.png000066400000000000000000003704621414055407700253260ustar00rootroot00000000000000PNG  IHDR@s~CTiCCPICC profile(}=H@_[KT :Yq*BZu0 4$).kŪ "%/)=Ff8jN&lnU"0z0L}NS_.γ9z@B55BWH40i`$(@F;3-L;9{={g}}9K3k=Yҹs PYf``A  ,4``A  ,4``A  ,4``A  ,4``A  ,4``A  ,4``A  ,42>ϟ?8@@W} B>%+_k^O}Sdbcs9v̜8a67NXO>e9mk.\0fk˜:t(Ͼ0`׿?s?WO 7`}+_e/{LӧNYp֓O>ɱcOg:l?7}-ĉ}k__;ArRmmm=}׾7~x;:o}[Gc=#/x/| ΃/^|7μ.OxLBHdmǝ;wo~;/_ݽk1r-M.--/һ׽u=ςG`ogg5y>9c__oK_ZmcOE/zs__җ$7E/zQOo#G,--1`ys{=O,|]z?~9y׿/}}{?~;O=zy}CU.a)&a6)Vt΁>OF7M{zdbp-lXG?o~sii=yO_=z7tSO??QkYzŋ1wW[o}ы^裏?#cJ9HB蓟z>|G}\·>ۿOOI1`%rLӧ~{C=tҥ˿/q_/?g欓UO:tj_[.]я~dя~tҥޞZ^|ǎݫ>9~QnY]]}GW~_W菚_x}{ϟ?wvm]n_W?3?s뭷vm ~1JO$9kkkw}ƘᄏSU_L&cmΟ??}_:uj4B.fc .]7pC!8אB&F+NͥǏ_0aX(>^'"0*aaNb<:V"6katD'DΜir4P X;qFl66̩S@'`Jd21fw\`vw6,Ns.]+3gڟ>ͨV"ǎ?9~Q(DNhB !@`JdsJUa&ɨZ MVCV:UfcÜ:xtD&mvwͅ fwlma X%)9sӌ @y0`%rX`Jĉ'tD67t!\]5f21 @yeZ) sjs*aaNb:V"6katDq X9iF<9v @y0`%rDRV"W 3MF<ҙNtz@G`Jd21fw\`vw֖9uQ(DW X9iF<9v @y0`%rDRV"f21fullln2*tj+:V"6k̩S @y0`%bW@`J̙'O3*幖!hڱcfwOgCVs 8B.榙LY^6f}! XLfo\l._6{{4" XЈ0`C#BαcOhDP XЈ0`32+t(ҡ;@`J"=+t(ҡ;@`J"=+t(ҡ;@\X[[S~"=@Vs oR0`dkQ( tNl20*5zV: XP 0`C ,5zV: X8d|7|o|o{ێ9rwɓO&ä(ɂ^Wo>t?\}Q5y7peeo}kR 0 s3'/\/}̙3_noݫ>,35ww֖L&/"n=y'bXxkN/u5j`>?~_]/ u{^^^~o/u'E }%g#~_⣏>#x; ^|shc1l'tؠ;̆k:1+ )1`,39P=A```HVuV uܡ0b+ d¨@ߜ8BX$0`eA zbC,3W}BzCV XYP k0`eA ,űcOP XY8dÇƆ9u(,۟\h.\0fk  llzyV'OJJGB6`] `h8[Q  XY5?#8qBW04l7N۟Ffullln2B0,l7כ'0< .`O2"ix; {4Zق+'[[ ,4Zق+'۟L& ,l 0[0`qP2e  X? F˔_H0J@o\02/,O湦2JVTF&";!rfr"W824 Vs X0+Z应 ۆPVu -FM~ 3N -,改  ,NtN[4<`x!3GfoJJz-aT`wqߎ0  ‚/4Ȍvm l0` 9|ЛvI\κr]i\؆P5ry'BĉvOLP"r8j$-^B5,rHZx9 ' +t^I0 '…+Na@ Xo"irD2pPS`i0(8Lpqzy Bie 6qyV.OX Q`AM@Bdm&8`ɓxsbAM@A>;r0 gVהa#4pr9s0,;wQ𱶶V}gllݫ>YY1/N6D^[#n>Q}r0<03u7Ο? @V.v ۟>Mn㹷GkX+6d+ֳq:>t=싐6d |xLLJαG}q~i![̰#"s  :>t=ʊDd;@o:|M! Xb۳ALJFx4b_{fhEad;>(uDs=[ڛpCrN#D6ػϞe_{fhEUd;>(Yޔ` b~9|ygfَ֪G؇:0MiP A/;qb a0l5paB<i:`MiP Ar&eW 0>(Ak0! `t"~4(A7C)i,;wQ𱶶V}gFfo񷫫'Ɔm"E)VnwJk]masBN. JxlN6Ǐ_ZA539f?7 d`7lf>({9D/#t1) }͹irn$(gbGlNP\kj0_Geu02(TH>UUz1+O&f42PըOdq!juGvoEJ5Č. ,ut)bhWJA FKU]k #ȼ9<0dec:pPJ3V2XO?cNfhH˦$WJ:|@UAi3Q ,ڤ ̯6x(#<Q@V'nz|sb_3Ǩ_6e̷[\L:|ik m}5zl6MLUV3TcF> 1Mv "Cw>'M4qZy{7 VNl?YZ<l3O}jƑeSbٚ첃Fu'FLhS7 `&VA=U®]C9$̊s1 >֪1w}k dy\|':lZLp*y?N؜>m71ޡ> S :ؙ^A' a3WWO!<8<;" pMO60ͤ],M蔾mewU`Y+2?yl&홽=h ,/e3u;G YV9ʯ-)#LLt0L܀|xg>[[[kvFf(]w6r[,YæQggO6gvu>oYKԩzk s?SɳgϚg#4P܀7| ^og_-+.`Py?bVCr5[x꩞|h O3QjlX[^R9ʯ=_0Q/| Zd:9?M~2B\SS)8=鵣~d8^R9ʯOT瑤k%]~)~ܹW{kkkPw[y׭ ,Qsȴa2ER e `jXBwݼT“FxߩwHNDL?M IDATeBj鳗mXa2mSW_Vن: J=`Zb) #L߀#?ؿN8&l3ܶ aF)=\j͜R$͑^pҥK.=st}f_/L\g8gʟ6My)5was\}ȡ*36Ee@V:R?V OiTu*G@Xp<n|#3UdE=ElO3KmO&>z9t!.ilZ\\ Mq5gvZ Ҩ~m{*}=w@1))ǻ]9m: sWd|S#qޞk: muT%(!FW)sVǩ:k\s),3E.f7Kܥ9ǼHȱ'#?F&st4(//S^~aYiSO/Ej$;LN%>VV 4Mc.]2/|G$g 2 "$XO<*?v@t-ccd|aEOˊ60G`u6AJ>1hwyj;[ XeXup=ObǼH}[rCMS[~7i0cT RRPn) JȐ ')fGd( ,T3>?p$|Dpf<6++fiɬL%MҜ"a-eQy3ET3oTJ!M -j#|c2,TÉǶ1t@gN\hSs ۛwlbS曥QF &g5G0(H,/_9JA?2se- X4Ae~qQ]KEg< 9R} !MGuꊶcgEYSyRU8g-YoY ߜXfR;KϺquRVaS3bl̅(CxjJQm]yomfֺNoK5@o9fgRyθeFb"b7ΦяXs|E' X+gxRѩsЙa1T`HR~+oޞ;jVֺNoKEN73[3 Ru9p\lyBڻl9kf<6++fiɬ|Yؗ}nns9}8noh}3k9e^-aah5Zz<{m,ΫlCSޝWUƋtj.^4YYGs$9_P(fxTb}S\K|pvR[8|C1)5(`h1Fžu^4 wU8g nWdb.nHџ uH{wd&޾+Y3;;?9_V(3<9|jVooc̑# ܜ)/'Тԃ:}'d'=);s^:}YY1SfAjr|YYɋXd}6 kP[Kڻַڟ^2/6PRZHgҹskkkw}Ƙ[bvvUY_w[:()3ӧqϜy09Ulno_ipy!c\^;P>=vM Dc ~|-xrC;?mڻ'ܒu1g"ۃ8a4(mO&@"gG,﹊${64 {RAXfv_miXDe6 3î;;fg'<>y0ϡœs2QƂ q`*s6k'OqÑ,2]*sי4{ӾXsCEbz?'wޙe OhtYo BՁYm];gf ek c tM':␷{;ڋlZ'Q(7 QU_fڣjχɁR`PR:)Ff4}@0eQJ]gD>3'?N$z aύ|$A p{n4өy[ܢ !95#T(7P}h7ܞu򦛤,#CĞE{JJ2u"U<=f|G5ǪMuņ80`u2Ni3{{Z@w2. Nu H̱瀭z:',=cʞ<_ 0bog=0J9-yu9.iԝRv{;g5h9Hر̵SSO9 X++hPgb&ٝ}k<=v|y_nջLNSb]QR8vgsIX9C~! #ĔK#A#і'2[epWiʜovhd66/c|bXŶ{`aKUŧ?]h55 f)~TnweG?'{T@ЅP" aDZw0=,#ت9 5]1b!En&L2n&G>)]uJ+ ;PD`0.QЛJ^,/8K)ֆ{Q[>؎__7?'1UfC9GS=\i&|tBL*A4k‹ x99AC[ .ƬIE502 0Y%咽y0]ݹ>S8!Z2>+`!,b:b~Zx3 fI:Rj[2k/KtCETpJ&)9G %{.AKp=1f`푹8u:Z`g7{-eL4wv4Oa 񸀩{M+t䕳S4kWzuTu kޮ,z BU8䎖T l5V tʹt񷛛! +J> iCh1O? _sM.eEk^x+ 6W:R|v[N;Wa_I@sހƊfj:u;N9a_D>cTU(_RZs7v#]#N-8ŃB9¶rtC/^5 x/L&. "[ou|([Q6wyh.V[з=֏5f\U=X]VʓBGվzH7m_etdSO. A?Wi;-usH9arH0,,^>9؉u8-0X4N#{9-,AEw4}plvvx"&B{O|bɩ1W7M'N&?w-[-Sc-/OקQ@+(x zlKbf߹S7ni'F?\\ީRb'A& 6L*Y]ڲf0 sGD]"[["f;:SW%o N{ ϙ\D[3/˗i_ϯ =1FDOZDZܖo1^20H뾋*]_*~Lն5I4 qm9EXIq&^ mΰgz]R/󅢴2V‘"ƾ v v(w$TO4k1\CKVcWŹ YkN͗H X %ƛbۢUeuNС3ei>҃#\Kd<~fpEЩ|Dc (u`4{Dy"rK 3)mMu n>`rԀotn^«:>N$<-QG>dlh!_}Y1\3σ c2\FruZ^N+jZj;"_ɑ?Km?뮶xלȄxƒka:JmLΆ*om5Xު4۳linnWVTrUkc֩}6j>t*ֻsnլtct*YT?mUOM={81t^9ض.lh~/7V9p Q4a$+m(%9cgދ̑(U9:ե4^V+w[r;'fx2lN?Ksʊ\\nG˗P5 !8)93BѧFŷ7CjZQQ^++؊dV| R2۾2!Z_>~l ضlߎ_'ht%TֳTG;C'/1gTvpiD3nweM9R \ 43UM^r,UD-fȺjVs$co5YU^YjWI% ƪ]ֺ/9ztztiirEr y9u eV-2 xh&Μa]#lS[&g3A`euP:dwizwJꛗ+6=$߹ۑW@3ڭQ ?dFz udq`SX[o^-L4IYiBiJuVl-s^,}k0G4NE!6XRo˖WlTp& ϰ jQcX^䮅Q"hgN{Y^.E(" ѵ ev>S e/ڐ<`=ק볙{҈@o.O}m%}gH, X`TuIk-{d:iXZUyٜ=Hj>34w[i\M?U"-[Ui7y>_gAeR |0'ॏrGȜ(yz6`{z$5!VT!ZJ} C,YuiRy|4+p0FEEYT Rt\ra9t(謄'W14gϚ6O?m>a2P3lS]_E/By'N&k_ nGp2>x'b-W_*o=D  cLҭ=diwljߕA妛/7X%:±}ٖLWW>yꩫDhՔRwy2.K ^$"ݵz{ Yޣ`M~[8qB^u1j((?yJPP$k_|%N_U_}ԹeoK(LkF 'K ==oCtr=`;Zҙ7w2ۆmzAWkDK|ZTW[u I,\DxMJn}e*ǶQ>]ڙ =;; l pQ+(+$ =2)zpA:KW`G ӢPѶ7_+x[Aiy-/d9\$P.7HLO$~:J&d\1/U!OPV jE$J|:&[l l+$D\*g'=d1cc!p@,{Uk4 qi7٪LN[4/-]yj%y r=[^Kju'U*7~hEa3 :޳pk yFY}OED'I%7[kZH5%v^U y(MiN3`%uZCn%CPa\efk:x<]Y{oϪ\TW,U5drA1yBktF-'Y[ڔA{^lԑ|=e蝬w IDATX0` Ȁ_?4Ԉ'UX rXΞU%jק [ЕZ0 n,/{; e8rgJ7'EaZ bC~;4XMfFKsm"%ASЦZ= &7b塾Ll"Ai)h;xP%Q 6)kH Buh{U/J7jyzcU},@WOc.|LNX;c(HZ{JVK7},84Zۃمր XSD;-AzU~n)N-$6}~\)2Ksbg٨5P/hSVY9Yi (wJr+QGR$yވmܒ;=zҺkBjz7:[#BɪGE˕XM؇!v]^0q Z <5|W-bg%*_Ɔ.;蝹䜣?1 ǁ-5"R26*dlE‰:Gʬ4$Ks`8~$X{fj8==zYBnS,?p MKwL& 4Xp[w.% HLP[pmʼ8rjnu :4yQQh{hʜkV`g'G,u+AL P)ӓ]E*N6c2`$?]d=a55$X0` Ȁ`DЄ'o ´y.iMyoHoK`S^^*ٷvΣIAk`m 7eL:֙DY).Xk3 =+fm=2*z*\Nx/"g,;; _IPFzJ{z|d '_6LyfpK[ޱg| -AtSL b< "[qǁG`%|즢Mv :WK3_ZU#@'IB5Eb]ޭJ`>2i f:?\ {)]NdBAfF`v,}Z̟Ziª"FD buNcM8J2`[ž`wRS+铒Ʒ'Pou},L녒PܳY\Y'u{h"}U)1i"RLٳU%7ήf3wݪ AlqhDrZaB 㫾̍OG$\Ч3)I/Ժc/-])]7; ?zLKjRIFQ k;*w#׷ƬPdM}blj1+t$._m(imGѕ6G=.=zViA$ E[ShgOpʖ)Y_e>mť3$y:"PqOެ:gur.K |Zb|ZP0:gro2|lQ.{ K`)':^{le"Y;UNyqI{%88xy(OkӧEk=&T)RHޗ[O*}\9F@yF5P5ntP\kDkuBrAT)JHԦ)+)4lsKw!Ù#gl~BϵLQG=[)EeԬm*(:C%.K?XN??pTZ'XW6& bHxGEg?{"}0` ŀĥ^˷*ght}?vI {Rf{G$DƕI]VZnTP:@qOH:Fp': IM߉#>JrsefMl.^mǖ5:ɉPU9,ŵPt"ӱfހߩ :5Vpb8v[/Z;rg Xڅ0gAGgA0,uX/}9vP9X))!d4qxwHI Um+_PYXbM_ΤRR}"d oGN}v ΁'^FeEW]qWš Ȣ5-6`vZʶC)&&+l \;ç('slZc#(JFY14Cyx#a|^{㭋S{kKzikMvtU]B*(BiWMTΎ|ؑ &8c€5PV'z]*BUjr: Vr&gR*є fGh~Y@$GW!.vJ}^aQv&-nٝ|uN`̎lkԆ{rQhXji)-\-9Txz#8{A)9rGn.n ,N uQ3VwHeMi'L+9Y+8N ۗ.LJK/ !1`%BT]o,iA -tDV$EL 4u)dm6ֵ[wǣ])9Bmju-"粡=ulQ'O`HPC]-dJPY4ۙޓ,tɌN~;iX*訰.rwR Yh[7f,(xK)7ԾLkɗ%;Hl5C9a6/5;%UJ ,F)ڎz)|AݟY@37bR6iCBh58^€%̖M-m2s/~5b+ _O-⃲*,`F/aqS&;-M#4@()Swja80?ZZRr/ep/VrY)w-XNXwNב~̋oi '2X)6IdpԞ(F. .ʲ:Att~2Q\2e/[i:x 768=3s YMɲwVNJCF)% WQT3vU\ eUXV^_$  E1!bUXؗ;>T5EWrT gk#ߝ4]4.X+ȗ*9-eeuVg4tK.Z;/+dQV۰:̤D3B8;UZP5޲FTe% 5l[[lFp@X[.牜/Y,}3 OV37ԁ@E}NM۾=Rznk,+71q(❝1**'F)$>Q:U૴:%RB*UmF0`ah_C؆8uA^De^Ț\ATS|AJ9~3#2.M'`V0L{HiȯgQ%ۂ6lY[𪔉S_tI;|Jo._.bYѵce=+ Fj_PN^q![״dr2A?tJlSAR LX^6&fefɖ3Q=(#4@A#-HKH`^~8+ IX?H B.I9 X\vKlAɐLǗo;mUV_cbTjF uQ^f?rR3 xrƟ.Ŝ%{&LB2^%$5d ݨx҂Q'NsgXe r ,y8evzv\3]}-휓_︒c65u5 '+7&nG 7}:["vvYFŖRzVM+pYDSnQEZZ"e|]׵[A|9?jǍ-#4ppf'Da€5,+'G`+-jU}AgJDL "6kRYOYwySSS5Ot| t/4$͜hp3g:^p09%4%ڒ!u¶nYUiJ0@27gWNW{>®j!Zo[3X̙=WRuج4穥Z걕kofW*%X.5 uKlrU uތrbC=ek)ӛe$+Ữ 5+Ć5iac5iF5ij{}QD*zA])ʝ 򈥝DŽêk>.eT"WV릷%cgpr>OEl0 7m$~Niͧt[*yE ;HTG?!&VѓP (#ucprk>s ;^"Uvʫ%`hwsN61ؿ|U0D.ƢM-Rʒ[E0`MRZvl\_Qߑ !Y)9ɎC:M^beJh)C8S6a,Kon9rdfSՈ:ݥiV߱M^_ QfLm)YGqVrZ/!9Wc=*N(,Ysf47gSW]wukJkwѩIյvM-ٚ)ZL&sɉEYrwiYt޸ GjQEL ˧Hwr@Jc6YP,EV[Z}Yv :ʄa€5g,z )k85͵;8# I]iR@ց]xc#pSaLzLUT36V(.ٻD<([YNwHhV<]w]]gP l(]课)Z贖g 7d*J#k|9T˫B.p6/>gFTP{GAplW͉$DEDk}t_"mVvd֯عe2ǧo/U:}~߭lIuW> Ii|V]*Yxj X}iDl('/:+96o3\WBH2`O#FHiJXOT|bMx C%/)j rEg؇.xf:I^PfJT/c^"R3)hA?72˾8L*Ղ2m”,4kp5S~i|MI W:5707VgZpSᭉmiRNkfsR=z>77}Ο-n۾^5jcR{|k=^8A lrdS؏;ovQ[=w$O_Nq̬*K:* XKXRm?dZrPi *P/ROP"eɫ no$B3V XY5<86uOT|0jڪx0+KքbX|qU}ɹXrue9(B: KqѲ$Æ~@Y_ȏy O-r 'odB6jۮ/*\)QqQ'oB;OHakyx5CQQ ;*_P 6l&A󮻴X-<8Y3(Dz' v=~} }NS/4!9THW05*ú9u M.b`W,4&-יB:b֌B6_%BVXB+;~{ 5tc:&\ܨX{LUlS֯J^,M׽hT]H*i q۫mO-3O鴯COJO;d{/P}vJרj8p4=r$\GJ)qjBVnu,le)Y2(RVEU,Ml!_cql8םYIHhI)+pNX3-T*=H&.dXL6 XC1` NI7ZN\, irWl KvT=i3rFjtsSP4_>,[+"6}yozMLVN}uQ*SDW[F8{CV0`͙˹ZV,Ju:ӖKsӧ4ʨ"^)=BʓpoM0?ЩH8<}A]U2NU|17+lەir}_\'8MYZjQhOCԖ$ZAPUC{6isʚ zN{lpw9V@F_?82u.#KɹX?Y3С.Ee'X'}rֵT'&MV;.۬fje唫Gg)CZKKN@rz{l؝~TN[Qþ9Y˅ZZQdmYL諀6;`S<F]P.Ns8 Y-LGgj GVMV}o2Wxvn-W]سs*su_X'CK LXGX'W [M]:d.$Dْ*"/̊9AMNކj1p%BsiU:;-uW v@S4,=rnSP c K#J djk53OݜݨcM e5vP3ik%+9Zh2$XRuv0MRQ^(ß0i^NrtcZ5||{&hR|wIh|'g0_Ԧ8kƀk,M[0fA#2[!hJ*M1g/W˖PM_\NKP ,4-6Q4ޝzf|rKM~";.,xn^ATWi4Us 0{KIa/pWJTf)c { ʍ`<}Z4csX>STBJN+hysI#Ne ͜0V%T nMKƺ@du9SkG~?|T-4%ۛNNp~^|J+9ZlZ+#66Μ!kANm= ], X4Z5B4&(#8F>OxP6-9'DQgDՐǩ]*ؓ朢Q3ʾ},:yP.^ 5>Uc2CTK6rO;˺~KG,taM@+#8<*'IͻƬ%]{V{ɩU$*1GS=י(O}u49)ĻJmX)!* ptQ$nHPƍ5*ԿR2QtYVeCfbK8']SzJ"XB$^쉝*PJԴj N3s$u+F_ݙ|ѹ[%=XJ6'=A)#eIK:9_Gr^bOz$AKtfD!!bˡA95MWieGB^5iwFj'אtO_2oiɭh"J 3$ר zF@@ُgѩ8VS4ꅶm;$1`a'f? f)Qө;t$l5;ԲQ#+mCߢNھE/%orv[IV7FU}\prrTTi;FYoG]JK~zzoXDiG90juZY$X]Ic> BEl̋o:Mp+)'AW֋VRR%-hj4]}OܔT!1ͣ5} }76}.5ژShtZkKKa5"^z.g֙'-Qc%O@xبSV[?x0D$E2c'Qm +UsiiYf E} =|XA'8Xz}N-(jJ,QaDy?W&5˜<8=r$ڇDۄG_tE|Kɡ.:Qf\_z[ 1B>TSѬd"tʾPA_̂>IqJzV6*J2H}fIm7T;έj=9*1xI<%jb:4.̜ZA:& ,[]"'$iae]?|-㢱)@i1S쨄$>uEZge[p޼Mlb/yگO v0iw-`EjE K'|{X5~ˀ%,XPɂw~I *Ĉ$H>F )a<+)W9umњ\ ZSͭlfl,b)A Ыhu(t$ >@쉦/,v8vxT$I'[r6cOQJ[lW>_LoUdF5RTBTE&!YQ}56h萗mSh9 p{u;gu֤-Wʋ*,mLJ)d2ē +aGAe9B湔4Ʃw!56I|}NmSY]vWrBcnk;ueF`&>Si<+- sME lOTK>kHJe~_U;K##2{C}< 7S"CY ˉ€k#4ul5If"*>y}ݸJ>W?(|fbլi'/ ,EiO` UuB.볾pC!6ܘs?}?x}JAPct{ҨmQMc89Wv nDo4?T;r!y "2#ևJD4c~EcK}9#mZ.WYgwN'fAJ'oH, X`G4$Tc9sV4S0d_os,T}>-_P%#]l5y8 ʓgfGCqXMS(G`i %TP4}r51hں՛6iw^~ z _6.z\d sުyZ3\Y~Wޝ"[ʯefD]0ZlQ3/;FkĮhԗ߂='2yu5,Ne,bAL.;pAe>^27Ӄ`vyPe@pz}mf"OLes1`anB(2[WpDiνYY'(rxdSTk''Ҥ7F؝qz gك2_ZQiez`ӽi@yc|3:9"55z236{tok*!8qҼ`Tn4]zUNlyݪsnwQCivٚshuޝސ'vk>|Jlvj*kvF:}h_kENBolyYeluh.32##=C>U"ֿ Zp4oG7Ntd[}a*} pLhIOW?F4Yx)7~QZP{꒱>ߠ], 5J ԕmj׼9XL4BWAg;9O_!͐m PV˜S]3@-qͺo%iwBRʜ-k>G0h+@9}5;*7ےIq͞HGj2TM+&(P6_x)*Gwω} ݚ Ĩ#;02WLX۝bJ#!+Y^ԭBC1"'W 3bc`[- RzH=&L&2)Uؗ)͚E 1`M XQ4YZ3mG%cERmm1P5K6|h*(#Ʃ}QcN5c&2UzZڼDT\_´9,Q ѣްiܔvڇIKCj=0QCkh[@c[jZ`DuBMo#KKjٳ47 픷Z`V')x)!u!|tan+G(g&*VMF~QK".hϜ`v_eOfzVၾͿu vj8zgS|z*d՞d5ƶVJ4Z~}E E3`% :ʷVvQ%EQ.XQ;Ιʰ( Ac|*'YS/[$YI3iJ:-;ln mS~!"5YAsʚilUY_fo*09}" a4_w=y]2{uLO~g[Pz9L Ik_m QPDDH9DIjiE(㵩Q[+^ȗ/EQ5헦cZz=y_Μ~^{g=yқmٗN1tbW, >$\x%޴4A(Q}#OvrpRo@=Hџ·F2c$2GzY Ho2MXL"ƻ_ׯOs:u .Ђ֖3]Bް0[uT:9Sgqyf֪xUʲ̏Lm|;,Y =#WQy?H)-KLmkhG1zg: %rl!&"DK46@S xmlE d9 HR/7s1b| g6T6V< ^B0Vq ![prjy=3ozӛ^򗯭ȏAXvY&u~P](n".7yI[5BMw>i ]gb1]0%$Ԋ9$c*)~o@"4HUE.eHY{UᒾL@LFC굑?|q=]GD׊Y0U~$tM;} W1I{bzůb֓24&O){!3'm%us@- vl[ΓOwͨ+hg`Rs# (&U6N5 ,NSmQ[ !-2bJwa `5X??y…ʯ<`K+Y>Ay ,!8CZ042z )Ek spX4kUK7e]J? |<4Sz4QK#c Wɔ@`ă/.xFN'S]04UK7eJx`gwa2rtjNڑ8׀HBH?B"OK̸LQmfqiVcAl] rGg1e+O.1n}L?.ʹDy6XA{Ugj;8`A5ӗś/7F^X-=a"i*)ۙi!F4کEWk.7Գg3쵵ٳrC%RUxl4c7Jv~EKSWkV]FI3lQtl8DxH(_?fMDt*hIS J|,jA\3\D4RoEl T4L_lǂWhxK_S3UQ0%Su=TdAk tg:q"ćt݋]vgԞk\sߦ㧖^S<lw,=#P3uD,oJ$$+;6u\jK uc9}@k[Kh}dW0Qg?1W6m+H{oW#&~Z8eɄݥ0̑29gzAusJ!9˓'YRvJ 6Vr6v2#"Z!11[ֈ<{m<댶XPj@o΋Z'c\rk"ؐ&I?ٺ5:DkkWQp-Szt,[[6pV3 c"RH)z7dzG2 V˟Qi3YY1r_ `!X~@,S*/rW8MKelDɼ2~wo#bVhR|ڝ d:|ۘ7k^aw i!9 V3:t.#K3KuEg[DJ35+ˊPpWlQaU掯iLTykm@I$#"71fhx(Lwllo) ŬQT IDATh0aPpHm[W1vB/aq/kjŮe(vrEu(&YI\}x>opfH3ud*bNLFdƼٛu?zX]|H򙉊7|crxG%#kڝ"SO{\i1.0JI=t5Y 9 D4{4-~1lP 3gΞJ?0"Ԋr`爼4efv`Qrl}kbJY{Z4eK:THMcISٙEAzGe-!m5167 y'.'k./y& kK2.wۮ\]ak0[ҘѢe?ie, a֜'3G0Q3b/y1A\ kh2RI*# 8pkj Z%q^}nfk^ww.!nڡ(^ɟ܉/\x(E/*h0y)51~G<ʼnU=b`gG2(vRbh6-ӖZDY"Q.L`R3|n!u;²J=/o~&TDTv9r0_.P?杋AakYۅ4̈򵅬 %yh;䄩0@@cۮLe+ޚ̟S1f %cvBfzP]Ii_"X#rߠH Z$j1T?ܣ2awxd2lu`׌@֔U4ڄ< zbxj^ڢԎHjc Kl/SVCrevRBn&ۉX#:+tC1j&2q@x`fj li]0ڳ +rVbXY_/~-ұR@s4fDNQG4egcr SHK׌\O2$UF1T3H ߄O˓񻣍@j CR/@WV|gg@qXD: >DTXA%0:9lomA/Z֧N-(u} ȌVcCͩ"iA o襾4Hy^u-cKQpߣgϖȬek$0H!s5[vf# ~FdO^۳ŀ+POjJ:E{Y[vJָ s"W H'\ 6+ł1e=Add 3 uGQ$MfS3<+L0f1!*Kj ҫpHi,Rp渔^Z} :E.jVE~\4'0LXӍ驓zG[S@}iJ hދ"6832XG @ܺB^)$u}x,hWodTX+*xPsA(`%ʛM ^I5y쏑AXf0ܱl,xk1pN*cT=&e]<5fW[[귓}.O7apM1rixFa }x&F VXe,0@qY@rR)$yKv'hdY!nbuႣ\[J t!;9%0MgZ2q#ٳru^Κ$>fZԽxZ(dDH@'Υ>}&'C7$c#`ib4E/0;/*QT<"k0xU]/.iZ׋o6"&A7F 1,4oenak*|< hƂI?iI R$#p [)'xd kUCck^c3H8@vVf%<$1 _`Jm(\]TcA/x$*h}0/ D? b^Obc,@0> pFŏǰSsX٣6.jz2uc#`-Щ{B`$id=C3Ęwb qΉBH75̒ݱT1R(٦!>5[ I7s_11Xz%}"91QpRHō &ӝ@c.>:3NqXc5Mb,*I3#::Ih&6*M7xGq[3Z`e6C7ki*iW@S>T3i94YXC&1zMH;oo :W/"O**ƛi6H#am5.N}f`1D;$x>mMKݻ6 hqB^Z=H<2Xr)j34dk f`1=263:d)fצWTK۹k3' 〮B,7 GhDu[O)XS^aq,4naj-DTL!e zf kGjsM-ΥLo1̬@領; 6{„{`LdamPPI=F )|J{Ki7:X3u2X|703Ic7%rRW+2 L>s5!_#Np^6l18",IKZigezAƄT5!٤Ы'#`V_PێK6L I>|V4fI3c8XDoک^R΀@bR]`HjSufZb͠6_(ugxIc+d^*ۓ \ ţh@x˜QwsՇ]bX=%.} wЖ;X3ul)vYE?d nj|:*BP=siݴj;xtm^*ڤ|Y6YLj&1zɤp̄wlfxUg[juy>&텭-C3b@@[kL%⇩@Nƴ)<lXfhXUeDϜQ[gDlÏ&5ĝk9kAFeYvPj#Gnay-sr)o@]؛Fl-.C;1J<c >C50_шaal|1>XxfRAlSMˇom5L(3fb@9Qt~h6 h~ɠ@CcmõkkH}4^MU OZ,.}c&@dQcb7< ֓S eQnEёOlhk_<8\ig;3j> +n:f˭ u36X3ur,4Y_k'ͤDXP?pvՠ]΍yջPۊ_4٬'UhYy h2h1ko6ŝ1fqC`x2ql5JYsоxnDXo WCh\.n׊#Lb"-jD7gTP91U\pp!w%-e54U^fjmml>"j,.%(v2yeiK`.\d chT& 4 628&Ÿ2#LWSMj Vc%hCi7f:{횃bX3-]_mYa߶k{Jq4Q1{{9{+s8H+UsF4>&03eLY>1?M0ȾAPGblxR<u,$]j}]  %`ϯ;b>P,`*^9 ~e#L%7_('hlb ! Df8\D1:VYk1`c&D?is` цnL'=QMQqjL7!2&8@؁~nQ)ȝ+ڞ"2n C `E-}dQl@ 5&%. Y|?ƹgh<xXεpKmzfjFHR XuK_TH.R1}M=cfgl [8-D,0^|[ښćW.Mzh9m|\'p _pŋ3$*aB$63dBmaLYP%>M[,W/RD 3WXn<۴yI)ykF'a8)L`r9icR1_YՀ^m>:X\ GD 4EtEJD|[bK(h:&'P|5I`wwARt\sz5iILۈ‘,H o(`non([u1RzU5o@pWy3Һh1n7{%^[[%(:)e1yAc XhP7'fJe1`2X3uXbD~ց7nHcg%qt^ >< F࿘&d3bZɪzW5|WL)sj\v[UO~\AUlS3WͪOkvOq3`: Z[x>cLyzGBG5Pۣ~ح-CEH R)xyإDAw^Q|-|a7c &%* Üm5Fo}c9mB {bvdŊ[ڝk/{թrwMeeo42KZ'WNd׃Pw9J>7oM@Oe k1AtMEJ3%OEZSް;r]OZϟB i3ydAѐ*81Hrk#28x0f( 7X-;P/ZXK| bv{YUHLP Ԥp_(g kW{~fڊh“Nyk`>{\r8S}LLlFo c'raY<35&00'Ӎycǽ~1C[Lg8>)&^s>bWl]5@^%hd~M»; EЇ^䎐.$`m508+N9ND XI Tּ|ڝnT=) z];V}pd}i;Eݖ!#6R/[[r(<X3u"D.رbrZFb\cjZ`9؟oI'(mX:=~85q寤8c ZhIfg'bf0dYcEžzz]zrvc;E#3Jh+bf2OH40־7&1CT]X8>ܵwDFL3y6⯌FBPEX=HV^/"!\uy6W+~-"Hى(ݡY"#p@La^#l+< ,FQ]oeVmZ !Qfcv?rb0XSd'>+<X3uz-Y 1GѣTd~.3M'53 !Iզ! |Hd1AL2VNPQW 5M)2v!LB]uy2F 0VA I?Ϋ}աtQg?}HyBl.SK*hf1->u!n JE"6-]Q5~ث67ҿx,U#] _t5L#0FdkSH5&ok%ntP p3x)IA79 ?zX`bRxaE׌QTSi!3G! J)/`C]`RSSXAPx/' j=oG E>-0UDС{Ķ1qnmBos8& S,/@4) RiHqӁyIzNb{snkkFn|<[ڻ:.A [].K+R%ҫMzaZ:"|{{-+YRZ*"&DkvP/<@ hs]1jsƑv1fR&+UfxXaO_zKLEea7W|-un =Q&} ʛ8"Յkj2 (Hqnk Y6Yfb|r)wo yms$ǏovM>撱 մc93cT5 :g !ŏ5 c`L4Cn'ԏX SH/f M.~ uK>vJG'hL2giVC7ǬƽR-98L@>ظ1g2Q}z(ؘJ9 `I(kwiJ7ScQls"-Ƞ,&V`ThY ֕Ju"a9-ٵ/|T6 R8L7WöC&3i eJ‹ Gc=Iج"P?cݞ:ny<7 bje'1]=q9Hc\3qD` x5u/V~^[9EXcgvXN.f8EPA^y?ty׌̼4> p7g^a2EeA+.U-<`[@y7WV5vucr\0EQ4YpfDGtL8&go.{#OEh.i/i3'biAa_F~D Ӆ)=OFwNr{n;tuƎ{VE+S).2x g3 Cn9H-xKhfd0Dz^ P׃R'_Rr>j;ݘ(%ճۻXNQIF,+[s{Qp1: e6dt3w\`-W6jAE1#h2lhWGs1Od"͜?.X6>pb`|%DQL34ix͹[2.61Ղ=4jغ)mksma.DяQ[ՄE_/KlN`i$F3-YLkk)Sv#$Mx2}@a]Gi8bī w.Ij*N 4 ?9NA9N<\̎f@ hG ^ĭfk=eFQYb{V)e6x1gIᷟu[nf *`N\v@'5GPf3{x${ a:֫D|oa"}s=/`{%`Oe|1]oK=wzk֞⶙Twj0uU@oQe"qƕ0Y|>6b*Moã]` hMϜOaD+$Qyz<{tGx,:+۶5mm`_«5OxY ܗV5ɡ`ͤM &/5 -<35X3K`ߘ.,W\')5+FtQM[fݕ7S<>={ɘxUoU-CNvvGf3xu52-=>¾◒*$=>|D. H] 2'51>1dՋLRPʁ[q P Ӭݪ4TFc <:s2>5^uyD ^DM}~h\<:%Բ<7#Ӡ?}9@FwM,kҤ]@2`c`a Q}X?+a5܁ă]O%QŇL'R0[ <:šFUZN.#ΰ*0T1[晭*E]lps1/qJYl2.(f~XLXRQ'0"_2OTqH1İ{:߽XW)!iН `|8E:cǮZ]G6Vj|,+z8\Gb' (c7.is*6B8^"::Y_P+N^&q7\y_ Y\;j%d0 L\/paR"$:e#m ^+^䀡X`]o,`ZA̰ƣėͭ<> GxW8)[v>'2ka%ҢQF/3Sl[(C(@ަ5&~Nxq' 8QAX+eX"c7 1}fᱴKֆj[f0d3V1'ŀptLܼ 0 3E+tMADyCښ >!H9P]"o-KF\X|GO|M m~Ϯqdx]ĺz Ma˶*kEԬl{ vRyfATor`FXO!{0)b yZD 5\M-0,%' $DٚG =.VJmH=>^_7=qOdqNo h7vvQ$kWv_?(^ٶʌQb-p}\Ru"ti u#35bÊcQ*̝U)rz.u.(\`_Hߦ:j=IQEty>n\MD# f&e^#u#[F@ Jj]r(K t5bQ5^΅npP~yw9b 2&L`Ի.0wIN 1i) T l$i]xE+!7nY1֋hwA1dSc`Ŏbqj텋Z&`u~#<'3MX\KOAy)#[ӝ{3-qINa&<+,D1rZ,8E&~a~gJ.R~C8xE[dAf /(ҋCLs Fq'#oc[Zm[[17&lg_fw[@ thǏPuS^eXkkXr"[DM^̝'h3٥h:)<ɞXԍȬ8`RRDpӄD^`E[b Q"_hBNoP?a55c,3uXx0#2*eu'W%l 666הޖDnY_oUJEva '?˚SI_7`ph%Zؾ&g]d2Mlx1UUG4W Ov2T Nw$F.e;Ub~V>^\E] Ѹ ^UT~@cs&0agJ1Zf8 ,1w~ 5Ew @Edt \4j\ 4V~S:NVQ*zfRe] FL4M <aP1L~(Ғs|1WY@x.R1QQ8n[i%Ϙ: f̍}o&MI66' LS ?I&QZ2d@fH-iS1f%f'5Fг#Zmë<`:o{,\3FNƜ1:BVOޒLw7z675L'1)$|)<yXZLivt̊Bs|Iˢ/#<׸G˙KNEB1kɥ*ΓcX&+6, -=:N%{sk͢hkQ8柺E>'QfOt\ -M 14`ӭL~LHRcI5.v|(⊒63&|#/K(UTxfa<Խt* x{[TX^y~c `Iu dx-X Q5jw&`;g^K"]-H.1&62Uɥ<4ly!1+DDc܅JBҴB` i[tpbܜO}HiK(3FZi/rt Ƀy]ՙRث"ډ}L.&Y'b;W';]Sq44?^0DFTQIA:i.r wva`⾊:%^#FY- XρB/#X* epDzVAge4Ŝqs)6p~"67&c]61t#@%EZx^35X:΍Hs* 7@*9 N(49QX7sXEMbmJ֛[_h1Z&·@8%6mUD̬P8wJƥE2*J+Y,M Js !Af^V Ll LY/ki,z*r&`֖/⭎\ rd/&"%,"]n$pZJ^SS!q&MҊ852jrՅaz88f0ޑ8 |Gp /nMHb]dd w^!'KXFqt_S3u??_a.]?m;;'"q"^2&\ơF|gxYh0YBZ6u3>7"~('Tf_?!cOl 'd.oi6p~L~ajVSʹȁSDCSE&"qjl+q_^ 9=R/ N0:щk&x9X`YiocE)!b36, |욪Z.%)%ʧ@@ĵ!S|xj%37\wOWqJ"6G :nS=/ IDAT.{WԱ>_\.]a{dX+a0TL6?Lw%L`b_ X5;4EJDIj4]k[FK> F뢱 >5ByA%1U+:~~09i;"pā :hf`d˿şٟ}7}S}///rJ _[[mmZ3~)XFfjg8JMb .Vj8LٵvYg \mхE*G 奼UR7RQ,0DRDx&Hubl Rpż ZXR\O-f$:mX aLMA/p|u?oڀFa~A`WD5C9V>5; Q]۫7%(`ѳ4 !N4c$R)XfFy1G:Ƥ8)b% L돣G@/g}v `x㍋dX387ڒ%zv4W;`NJ } AFL7S{ ]-, ^.ȘyRn_.ٳ6N=ׯTWzGp 1{!WY9D$bh_GUHaB1AS zUGS :I8)%k&Fl9a3<`w:xbS6(f4Yza{&y;]zdZD\"x2LZfeX.,Zoh P8ݸY'Zuv%Z r%G]`g1*X=0 :V@]$ ,4W!;%3ZG+׸ ZS>4daf.҈!+%X*ƢZ \`H4t2ɚ@[?m xif5b>Oj[0Jj{i~6` ^k{媗x1f{^B[괡6ԅ5t&Ii7>t{N~yS]0扐b.@1a5'-vm])!,3>)" s)-by@ y^퍫3uB70|__> ÛaۿXvk=NCSIhHc%K$, EBI(^H.tO448ߏWG}v72Migaf+ah& 祣 ɼyuDaj5x=n89kb'ckRTM/1q eIҲk.H[j4'dڞ=kK lXF&f޻*xM#<5 Ngahɐ!-|</72X'?QW#cuTumMmw}p>X uȘ_o8ryPQv÷\kj qAX0"%@0;/5uA2o4{LRZ g^) >ȆI0e2+'&kP)o51`".Uc$h!WlC6m!kQQGq]CvW.ficZ -:JRe%<[ƙ͊(]hX +ffcy hMe`3[np(=#P zg?O>IdX T t1,-{3 O/jN#i arOoTZ6"͙`-:9~R3qtz fˉX U kQT 3#EQt3Ɠn9kA>hGldw#YYĊv\}3+}= '[qFH+̫$+*Vi&.1̆ ޥİ K%koӯ6ik͉G/@u>j]'ۅP Uzkk*6PF>#O g;vQII3Iv|FL{`\T5oF'1(l cg1m}}V7TF56ƱKl`  }5漧űΤk5M: YԙEH.@Akb7!5KGݡ)j$r>hGИs By]51"@DCDfneJN67t4[jăTLa?n-a1"2@ ˢy"gH;X4uԩ, eҝ}WԽn2#Qi-cD|-oLELA aKkhlN"C 07uٺ2'l5XrZ-tO誠 .SN5e+N#biUC|vr5Ċ˦<A.S qL j^xb{s}i%dfΉ͠kazkZq%̚Ф5ir~fXX}kax'WxI 8bvDg\r|D z ND-]f)/ ^s"]HkWuVf/*5b/0/2$ƙ9KL]GTM>"بW0Qkֽ w'9#̩`uRԽ7dӬ%U٭6#^ rV=(".R$]ȗhE1hN0K鋘wI 5hWYqwWd~6X(1 ;7~ԩ`H; (xb+̋|u-{O]t:L 1m_C,HtSaoѯ6(t i4zQy~uq^W_)bt0F'e`LjW}OZ0Y{4w[v#xH[A^'=@_@#*P:^;?U@bc3bX-Lʥ_V[.D[}|=#PN~׿0|W|ŵbTZ,K0$i? +%h,q!ll'UTol]tw"{{Vt%nlT*( ZG_5Pe֛njr잋r@L,DqPs1s㷃5|~D2evc}eivx7W)Jl4:"TCU'I8jhE@5 c Rˌl/ ̸@cшcv_:EP:6ֻ.т?I$FcmU Uhgl S.%enܹ&*X6Vq;//e*BE(bV^%ɾ hWv.r &GakR;$4c72!ޝ͛eC7egف/rˋV)Yn\~E7zd颱"颍x(_0X,=RbT>|Zq2pwL0x}1(HB̺H`-t$I&Aqӆ9 Wc{m-[t (s3&4F.=[_LNJ y)p:Nֳ>{ҥ~[''.]:xjY5aTibL1!?jMP\"A b 5I@-uC1_xZ8b P sfxtv2'׬sշʡ9cnfVcLc|ee:Yvl2Ú u`X ӡf^'NPR7fWS܃E3kitKL?vDž50A~cc?u# K"qxYߜnO[wS_1vΡxb~ fљoQ*zM:wCb8񖴰ma>o on J2v/J;y,9ڇf@l%3X' :uԠ\G0 `aլI7 p^K0'1 bמM,i!4|×ɧe.yy @Y3R2]\8[`>'O~󮞟. Ai߂j$:Ҹ0;bnz`nL^Bseҋ޴B'0&G٧))(݋Xf)fg˖߰Zmn|&VGr 5i@)rO1QX40Vu/pYq,9 67<kGb:f]h76d?9!_#kY@ҕ3o*g3@2蕅P`FHpM\mʧ0,z{{ެºr oƢEđl4PkFi5 uMW+tҾŽap|d`:5;7. b9Nv?\C@oovk*{h3P[4&,vO"bgr6(N\l+yߎ+/eԱus}|ٳgaX.{>O\# ,L24Q<و K-~$c"ƌ] ܵQ1mR-@|dҚ\ızE)\,/x5xy{paر`VY 8%⡤ A.yokMF@ϻ^)s^o~cw.`{P 6XΔI4_ybX:Iyi׊(JF46AbcfzvM:i.7píz"]  h.i-` #0M&-&͇)d1r6ˎ=L#0L@J094Ł&fwM$mln-E/ R]q_cF֗^#4B̉~)}{88`LZҒ7xnOdqG@<(MR)㵎I:qr'oPh X pZ"PcX R `();p `i IEFc M-ߢbgHO; IDAT nM0L) HZ\/Z.o4 My}!WMYc/R`y-8Iv&YRyVosWMA< jD'< Sl>_zrSaޅ\gx*fxx;m;M*{dt @5P9?IAkb2bXfӴ".XE֡UFS~/WkZ5Xע_ `69$8~{-h_!Ώ# Z_?6jXӷ:w 2ve):Ӹ[{j17I!([3: Ė4G/|T gG }7:C8зg0M7Y ͏1/:ZRu%IfR=f_c&Ȥ&rJwp3b,P 5\yq:.#vB3[:))s`=t`(\nϚ7aR]Eu<'AƤ3u^f&ZKxD@:.s޵`5측Աt!|^׿;;~#=:mXlyt>S)_4wb@Y:37iAԣ!ÜvQ/1Џ\UL/23LqҘQ7OD{bU+!ǜ>Ú]ZXVB'@N{aj_/Pqf5?A#+`|+:=x1%o$uAF=E 22)' B́b!.Ύ"]hV~uoh@h"kf]R""C2^&}SK+BYl˥ol0b!;ݘ1)/ɮ|(V:f-.]2X`*Z8١; ~0=bϮGssi]Zqtw .u' lܰWj\ΐ"(3WEL:I%]$f liPbl 2Kz>T*Qp-̐n Ѳ_X(#_ );"`acf)7 ŢSб\WMqaoOjeVaqOF-Z& 4fZ w]|ɽsΝ66:}o|?vw{NN_nux s}zS?sãyM3}93;7]d8wnxWg|ss՝wps,~Qkkƨw^?zI~3gy\Lxq4Un]t(>SO7 =6|3c wueշt $ _{륔 b.rz??mG}c_?%я3xxݫoSlgS=D9L p<3R^xaж]L&cW%n"5_3kspj5\8\<\<\xU2j%z6xE=yr9 g 0 /^I,E)I3އ.q=8q>pfg70 7;7??|s/P&8߉vXAog<|arn-g?^#iOQ^eF8-ס]S#dX 3?3}}0>}+<1 ,@xf<2Ūk.n@.;;vJ\Fj{{>mEGF$ -8dY51Y&=;K1q5F:_ɰ ~7kk$Rδ@| PvN:l<:g bHـU ^+KUj$s+;"֭VZ&5[0Pn 7arMw 9d BbBMf`+^񊓪4\^Qgh7PٹH}E0K4[iT^-QDp?H̚jF简!&~7uvH (Qp1RO! {o0 M̽5j(B,\qE)0bZoݙ3F6d#2p>р#官FԀXA_s:I5 `>}~%$zwvV -G2flBi{"jlfN ɋ\$*8yyyAc Dy7L@5/Sq8"N|5 0SNN)7l< ;|Wa$\b uIEm4\ƆQטof:A"+Ybg5ךPbS>SCO> N2Rq1nC`}ٟٟٟM-<@|;oǫe<8R5ķF)ג}6~TM LW].*Acf~6GM"m Y}PVDbL9M >M&E"S`F"+{O("HQ :<Ýw{{U?; ~._._jxawwx# ox?v]ùsK^2;7|?_V;;;94=;793;7 ߾X ?p2~{l^xaxᮻʛ|C66vw>o*'^?ŋO~³yUcR6 a֚gڢGjy ~Ǯm˪ez~UٹjnOU u}awW0U'S?V(oo<GR<˗.4L?cV[ߪd&c93;}nx᫾J7qfWM-oyGG?듟Dwo -ozӛf`a#Fd윁 q 0bW S@9ڿeMp![ǘ.p纊4obPS͇j`m}ƬM%M%@ed ,ߗXxHNEQRmTg|]SC|3|ww7dt 8c @;1 Qe6PjD0FymgnҢm@ۣXQb)F{YX{'~'^W !uT|cBU64q3~$DzM}epޜuܞVw*pN@jwRܳ &N cyw7Sz Bd='qǙ j,[f6j0tt%c|roY^943V^"|tLgq Bïq0-8KV'<16{:k%mvEB7,6/6);m o*pT㵖`X̼W}~ӟ_W~ǟ|^җ0 a.W x;7ַ?o巀oi̿aww3))5y=Ȱ;zUD3܏=E_ 0 ?_2`~Xx3gC߲;#I8XμOٽ=/xECh XަG.ާٞ0^y|kú0gv>B Qi&Wf}b׺$/37/y{;%+grz"02XqY]vG>/| _mv[vp ;;pj5<ɽ,;ww!2EX.ӋŰ3 O>y͋Z^ ˥CT)+a?ea3n`g \ư\Ű6,[RŀL+elwZϽ$|7lnC;kasS}kM#/ _B9ɷ|d8wN0wݵ̪zT{{ IK/CM _W.ƿ%Կ.FښxùsW"J51SfC&o!V{b(瞻ۿ~/{_oo /}i00n) w]"wv2gwnmo<]_|ʀǏmܹr|w-0bDS|]ɬuK̯F3yUN6'-FlяezMR-8_T`8_]P{};ʆяG: 8_IBxbF>EȁR1$eFt o0*&ƚ?$V<1*,YHa7E"Bzx~]w^w>'aSlHc.- Tbt+g3?C[51fb&3֭8L/iGXdS\!-42`Tyod3LR|k{e;$ԙKV%prSPW@bc||5LsO|u~=;aMBF̨&<]Dy G><-=~:^beAԵ$ Pko7|c -pwWp*pbnϲ\p0KKL`mLqzpѫy|vO3 +Ğ~Rc1xU@ @yO(Tf`1;NAɋ,|U<#PxW~W ~|ɓ` 1!.Fy=ޡӨ<ϨMY-zX16I͕J}DY Jp\#H 98fؑFHjWJsc7bW|1=b38_<LB쿬 |V[[OݥF#怬nUǼ ]2>(ޞ1DF0iwwj"O]0 tMcXcB?[G?9yb3 Ѹ0e ncl@ZԟaU7- IDATu_|yd*a݅ x0Ex౭ac*;Wύassظn^!0}88<6 vv.\66OЇDV"xq_^J)o6>:<^筩9s rɌO{K˿IҞa{{nP)RtVye}=@Ο&6_'5K3+2^~uzpmY@> [:|CP$#.ۿ=633kTѹa[77O_'oXy_l|[qW%,Qn{[̶,QakkX,b1bO/6"Vd>Nk) ?.oAj5VéSí=t>#%V>7:ŋW%/~+vQïkk2Z'l<_',KȘ׌aHv:0=9X\:|# G$&X8=K]a}NdgLѮK .insSq|;A|~k;;ߟ>-28̯:9_KKxmu] 0 b8yj_f|0%~%/K~J*n T^xaxqxᇇ/|axau(zC'^@[Qw$bB:?8#lV1E +W.@?Drz[ $gQ'yFDL"&@SOsu*Fؘ1E[ puW 6_('Я|%js̙|R[It K9yWx|q67T\AOc$ΰ\[j8~x[)4QEKkjX|~k9?J4d1S:f7M_yGax[z"];b֟ ˯|ٴO&[9mò|G (L/exO_%tL_9Ƶ6e`n:2K3)wp/jbXjo5S+@zwTORYfnlw`V |W x\Af]R`\Py;cL^,ݛj)9ΟCEoo˿_׼57|``SFi3@1v`97=$^ -ߋ7^!v];y‰Ї]`1q X\Enn66ګhiM񫩿%*on%&dh(oE2hy1fƞ+!5_>}A0,5$m14,t ZU $-cXytr<+_s^NS3uMXN2`.]v,tT+ ݐӞ!LcEf{3f7cI ƙzv!5Q-$gsMshmӵͳuN㥄gwX2UgQI̼@" \[kF2q7𑃙 /!.t3, Ps5-1;bIxȣIWZ<>waJvvqIpb]EKdgfb`PB&&;/k8df0oqNgyN8 w2H >'O蘯krMp=ϺJm v|0, + t3/ƪ:ߪ#/5T`LQȇ-N%4+/JX,}Ll"L#o'[ Fc$0B/Ls~^G{#җ4a뻾?`\BIEԯK޺ٳbQǯJU_#[>W7/P~K^R-m O<1rp}U3{;^X#y} rI?V!g ؾ;ޡ~p_.{WXߑWU&#HX ^vH}[nhPMlly曇aK13gsFΜ{zwOQO'>rk7f>o;꫟wnߔT/\3E;;ÓOo;:"K;yk |#'aȫfGs#&6<2mŋj5,+_9˿xgGY. ։MU#;6ߏmn=糛sx19S :M]qupbS9ub`i5OK+רg}Bmۮ2O۞㽩φ^Cʳ)h|W""h va[4=" Z ;B@K[roMCD+F%$ƒ?JȮWٕAԷiI9LY򒚄oZr Z3meWQ19 嬟dA;az̉wa^݆i>~܈mQ E~gwV2VI=`(mA81} q|)yXE۸ʜ=z #K~X/}?O}W{`1ѶMAf-nOEBڄ{ [&s0v=SJjbz`ĭ qMX(Ě(Dwd(xvck̴91=Xh])+'12N-15`嶞W&7OS qfB  )9e^8bas`eokl|uίT,OѠc%̼HEsٟ֟[ݮXMT׹QZpPɤ~9pn7JW4Au;zm:!5^ѝ4wܩR|?Z뮾ʂmݮ@ZUI'C͖-Zs؝ (襬>``+ EP=&=ۂE3F-XD2 .K*S%nI%/WtI2Aeyu(l6Z." ?]?I%9ͺX jY,cXw ѻb>f`1~u9&Z$7ݙ.yzDGU_+r3d)LvlA<R:8ut=<|Lc.;a\+\E3,JI_ݧi[ Y,VYrzMtjfXwBo/iUE25*N; #b._ %_TO[d͵(m"PY_f?ٶ}Icfc߿׾V1S'O6ɓ 7Oo6 ;lƒ#w6Q΅o~s˿Cu>k_N(ylQ_NɓͣG'Otk3Sg7l>^_N7?7oPg;C4'ynygfߜm6OIqc-/8|ao_M`O- ?]} }mm>g>cǏOHxm'z睛s,"ay/.,BQ=Ze~%|>u1\->|="ȭCB0xW5ַ6_|aM^N%_&uO~fdpN</)TgQ\w7Jd|*o_6On?WN:_4ooz8Q wqvО>9Bڝi F#{BxuulOKXൖx`3P&׬1,f0=dslW֮{+ty8ASh2!=&R]+4A]!^e%2z|ghZL8sҕl9R^Og)Rp'nN527\>N^ϡ6 f߮1C͓K1XB(3++0~~|ӟJXjХ^ lP}ClŮLLC>M>V ɃpiB*kD5z0_cf>?o7|+ƅ=Ǣyj5ڲ$lN/lTLHa {Yӽ=5"ãGJR U_3y/{Axl)UR< < ѽ L.MWwWV>F;ˑyOrxS+H|_S1qR5J3"ahF݅x'6hkWX@8G:f>i ={mUcȅ$z fi"#P;Իr8xMĈ.mY2ɷ R)j}%Śk ۯƑS^zuw`koPBGAVnI5}U -S Ҟ<5wIn4#eHn%X8.)_ܢWf=%u% pt3aPk$uFe[B-S~,K ro5 FWHJO>Ǘ@뭷zoX<-e`0u>mf!QKrlkYr?ÇXr3V!`' _B*Lǻ%DH0K6#PTl ȬbXP[:EpB̡Z4WWh[G;QG+wS=C:ӭ Nz'6v,H :0ܸ(θ@>޶; XFZٙ xE_iSdWxkX%/F󫐒jƗ@f_ϽqK!si5Zjh0)MBZ3U w? JvIRnRg%F; @$)DKȥGF%nLFRъ"ewIk 9fVZn\h!K1ut8ՍxXV7Yx(<5P+z%0DHlTH6xr#ϳ/qШ#2X'_ `O>~C?|#Lʻ/r\NI]G9/1"xaԂ;cjz Yd>awՖ6 }\ZrXtRCbLSX<9V$EޥSݺYZty.wqdr(V>_%^z}uå 5yI΁Y(\GjZ@hKu'=cfkB$#VILz)ܕ}c46Rx9nxqjV:kz,bꊊhrҕvKT=pTʫs*v3V[~3Ud-G;)Y(6Qt\;d: 0=|w[NAZ\(;};Z,J( trW$aغ #}5"dwHv*$PaP"b% ,a`Vtκ'Y3h5+ fԍ$7-c2ҹnĂe7%х[p,4o>Ν!qXes]\f!f: >/7=F>\DCB,hSM+ÇOEYw—3hXvw <ӽ~QB`U<`͢vsXǔ1ۦ}w2~#l3%$βu[.%=K50jkш]{v0UDyY+u4?rKLs*MUT#U7׹o9_]H :jMm@}G (PfW:ICne:0y^:4Jy8ۅADGNb&'<=zE˛3%D ([ /Yt[ tNЋ$-3v}sn%cM֫1chzR~ӯV53l熻{FT}|8Q.QUzL\Qk+_FͬZhԓrTR"߾Xw >Wկ~X] T`ן>:LO $WU&6WTdidXf6yLhf" ?$X+gS-w"bh*Nt%!ik<hb(h:{'\]:a (/~w~w~|c ,FW 4P7S(pXn _m.݋ѡ0R6Cx1S݀1o %:$y NotyUiǺ rŴ/ֵK{ =ut߿4$+h_Q3M?ۀs<:OYB[0p Oae~00(MUL3 `C_g>>)|=*nw{ѯ/ ^5ٙcoxE^ڣO\&߭S. Ԋd1҅9DGHj6Y`>RBLwT\eB 245.J}|'қv1oۚK aJ?5BN`%P1w#@M1LRL3~դ-TQuy` Q{V9!0qvF%rz%r(H_v./pğFwDaWQEM>̾X g?O|⭷Rdѫ2袛pRGFRfU_t*tStr~O(`~|LQauCǣ2ڟ,fu4SѐA']Nj džXmo$\,1j`g}|n8O}S ʉ4K 5.~'b: IJruV7 "®D=8`qbId+H: SI!_ &2J$T<Υ,Al0K葙($k.dͅ Wտw~~Wd;- `1 PƲ{Hk!hD!^in1Wڔ. -_5)TϖI" ݣ>ďċ*O.1k`v:g%IUycO'nXP(OV8[ $,~##I\7|ʒ8:E]nsGEh?Dnu[n@1 zJuǯ,~WbBW!4k:hk7c,Uk0ˠ9JS漛_=$K_*WJ3'Ȩ\savDM^' 0Q~W.-/LRP@ۯw%QƦA=$HNYiexb]VJDB? w``2? \ltٟ;1s )cayi^&"N8?xo壪Tls#dQ,CN+6d^ ."[ j{84`.T6.^(]7޳updMl5u1ܓ Zn.wyI$KsHlq}F+uG?[[x,u9*yhRg,i&#*tM"F 1QЅgxJ!x؟r:Ǯqa`rfԩTXem`1kjxRs{qߢ ;9E0b,n벻n"{~C!(CM9߆N.ćaR&1 H$MqSr\08eVrq:ӄs9)(Yů j!fbiy!%G̡O0?  +@tu1f5Z>Ns!rMyd \6!mM@Ui2m+>F85%+?)f ーʱ{p#\XтR~;dyX9\rUb=3KT4]’ [I')&]Evx +q[y֮n摀iHYzQraO"{s4x³q 5t<$̤^WBr9jc(Q^"mMbR -lqM$Xdj:HOx`д'PQ nLH( c 4+ ^% r'խqmf A-<~u釻rڞDR q4X*SI'MgY*&;Ya* `a|/?Ez8s>LVZX23o h>ZnbXKW[LXD][ZNNqUߧC(2ӦvF\!2 !% DK$㐭&u_@^d= ,?%>|f?-x]#s`Po3r:6$_MҎ2nnH G^." ;)_2Y_pw. @b"af@ݎ%'4J ȯBB !}LgUۣWh  kAsuPVXOOԧ~~+_ʽZ(CJ8gz0TżZb<ܖ_Kǐez 0Z9zieQ#>&L8k1F9aK@@3&!3T![N`1@ȉ Οjhz^pO[-zILr߲Tű7MW,ÿeS_JRzTg2)ԍZiYN;HDE #.P\R7qI܁l9s8իrdjZ3w]1T1X'zz|[; `݁XQ5G^"*exvJp`1op7++=A1be:/*>QJ𬝒$0pu!_e+/jUN!5%.Ώ8R ?3%~*d]# $DC? ;1oi})frvIBA4\ɪrT]Y.:Ct&V DFyj¬`!򻺭H%EZ~DR'HJsva x@53́F#M:ƷcYrhK )%S#մ$ u_ THV<їV?ᯆ#+svwmh_@sσ'Oln9yN9s*Us`yqq+{ 'qմ ءB#B8'IQtlcZ6򧎉W)aI)Ǒ; Ó57荔3^`U&KWWS#VhU=,ZʶQ]uE(I'x%>UYcm!V'sH)ք-cYܵ]06@Hڳ4qwB~ʧ+H<( cdl̜P򱳒tDzUgg8HfQ1Q;:ja;0*_X1-VZ&7W,A*>՝8'Ȍ<ox#s$(aC,fŐrszx֩:&{ff*ĩn귌Ы%<:ڈi2aXx^TCWc,'IuL8;gmi:=U47eB>Z+v>fiXyF빯N{ݎ`| rDN7eUg#f]H癆Y\WGԔ,R_1:9KFKIᾪ0BV 1c[M8JD[19a>}s:kʆ⢝e_ Qɹ^=ں$(͛~c5T䯀i3Ƨ8bB xa[<{fa VI*"r"F80`2Vv-9 9s4”{WNc50W0`UL4Q7(OעN4>} F5!hjQY{Փ鲌-i5$Vv~;Bl:_ 2’Pg~Yg=Jv.q($ !|JX}yw̥j8@}0ţd;_<{6mRKYV?xwHCڝd"~H@i!:Sse/LRr-RZ &*{]+ YkT/$ZXYKFeWb~}V*"%8j`ֽr!V!jvZYoY8_;'0 d4Qa*kO,d4fjtvfNTfmQ]]P7ciAhha…Fty':U >ɟCHլXʚPXA-y%EF pq" XgL=~x/JKŖ'(aXG$ƅrbߜ+{cNq@y3$yHN|oUR25ӾP7]\^Z֠sKol +"M2Xj T`:{M"nICB/dժ5\N>${R{qJY o!*>Yl.bz9>ҊJ죙.>Af5&PyI,6:s2lnSl7CKYPQEI 3X0v vTϔ&,%k9Y1V-D$HS XV ۂBHΓOFFo7IVaXR>~!H e"NqqNw[%$NQ׹t`JwψX$&,='Bn)%]qZκ/38ad,(A&G,q |?fNI"l1!OmL~lajn_ ;4 Ϥ#k>NhjU4JJlYR5D11x"QKϥ 9M/(O>yIRϵhγHK(a(0/MaH= ,kѹ*`=xօխVѠl.u˚\Y2IȇMltEɻM Ɏ)"&#ݿ:^K҇G9ʙNJ16aS[1Z ,YnҀZ坌pATϫû7m:А&WW{|ppHgꞚ'[:s$%f|!N0CGv۳]oggpuNک+c ].]L9za7.9+˕5SS %9=#9=W*doT1"ZO6ܕh9ed&3#c Oh[(q#C}&v5x]2j"DdGZ^TsL=jV{:)jϫv )o]*wv? \^:,-+uZ ,`H1P-e5j6=L3RMM{+`z8H{%%*'+妭xquiD/H~cz~=Ӑqaln5DvIv+*<"6-7C/RiL Rʍˈ֜uIemF6z?F'aZm曋Ǩ*ѣlmV×2=X  Z,^\z2pܾP@!q,I JiV{\_T+V/S9)`o1^\&nV3G6HZscϟCaw˪7ݨj# 1}& 0fQ}=HWA ssY]V^bXdDj%er3`%cXsP,JF7gԃ3$zU`I--"t\Ss}m,7T&t"Q@.UQJs7jA[I a9#9!IZU^lVhQ3886"󗐺p٢82eeEy(̦ǧSAv-(]pH$'Rz)V1jxwDwo 1LY/s\o9<:!Y'6:f ?[0CgI>Q3ճ߆3FA `]p[1qZōG5\܅o5Z.Lܙ;/%Y GGWIVfG uaNҮkls= :zcozp9c24񭚖a\qBV]Q> /1g{Rt^N</7>U!ڌX:P`zx˭DBd).SPCzM |Xi& ೮"cyhS9;BriMZ$gnDŽr#C:SZYrWT&Z U=I2MnWX[07^3m0pC]̣8xA5Ke7DZv9m;yAj!Ka\QNZ_׹S+X! Nh DscG]0o&GؓW$ܑ}O̕k7)nQXk"TJ gg0mWiHjm\v!qQmr-5]p[j{)%+$a{$BKn@>Қ_H&M K}dxIR>o$-Q*~dL%`VI?pVE__MC⮥T1+9bRh^^ xV6a78v0H $9(jqjV,a KQRQKK(r  cV'%{@Ye;w'f>jWUQjs-@u:Uqz ?o? U9! ,xⅴ'BMyЄJU#"CrDˉQzܣՉ摍4rު!BS 3Nm?r;X1Xd;BzHK:\1hɨHDd_5][N5vm8KU@s[ƹT:m/haX.mhuXRefT>īR]Íj0?vܺH(XX+u]%FCl(QTx0( mQSyW^}GӚEdQdv+Z8'v0!tAkfo>oT%]gY '&U!q8gYt5d<A"9=,Eڗ ǵ_@9PX"ڎ2E[KvbA`^+UL7čYix;߱dIyՐ"l^uWW#vdV<-A,fVJޙ/Fv냯ƫ;JTC IRyUktPOnv,P$pt1%MuK|ᕋZѴ\Mz؝[FB@(T-VkSzaZT5eqr qzȷ8:.v.F!!20]\ On:ɩId9* +[ËV*Uʛw7 |r<nݪ&UBV-xZNLR+gYJR3Q /.ծ ^gZj@`ͬ3 `cxd5|u'i@nXPyݰ0rOdLD1Z*CR.H76B(+ fO8qiMp8u˱5Qÿމ:cյn:X+uo,&B1f (*eNqˀ]·{CÍMZ nߩ'(tSt!6P鮯3DnaA"_q첬~ECV\BMtsS7I9AiOέrm X͇lωTw~~xLBc.AU~e[5_!:Z㪇,Pω:xyYqt"3zSVgyt,7•7^Y`dIOn A7fنفj!l8Xl5˻H:$[\yվS`dQ.S}0b,+uߥXI\f]ؼ#ڣ-T6y ZXmܬ7[M4mAd&RŐH|ˋ7 3&V˳up #Ya).ۂa!(|è%l^7jG&[Ŵ;YR4ezql,˕a:h(oL\L c[( a UjbJ-Ma1W .+rUK9#.0:թ#pa7 Ae7L\*oR/Nv'ZB/TFH5'Q&/X,.2,2WVgsBv0+8@b̺\-ߕX ;,'8X~n;VqMj|00̪a>3;׬!BD.U{g@K<7cȌ,. ]ߕZNZ-B :bžԺꨪ+L>W~L)I"g@0tT7*NNWN3Q'.2g./Պqj Gw2 1X7Lvy6)es|+4sX!yX^9qZIf\ 8&:W˪O:vUn^@5E,!9[o+Ռ;D2&:n| {=2 ӵX+u. -Mq0)mEΥE|*byJ+,ͣ$mY8^4SAY/QMd9cl9f'Lx֡H&+`fC6J΍r,oh19HE۱eF,5,T,kN'V Im:\)/Q)/HN+by/ŀWQׅ bs ,=2z.tB,6gn `4j'R) .@<Socd(˘ӑˢٕ,,%ʩ*K`*,uO8GɝxcfuIs :M$<1L``^}bm /PK)_bdHu \V4F2NتsJ+<ב/;*k6 Y-DMӼkqP0hZ)Ju;cIuɷ#OF $)Enxb*Ԉ@a_KjM2VɞeL1~=.*X% }H-\5y6idm$霘Ê֝a`q3gzûZ':sXv*LR(|4;Sw(,pxID`H=` IDATT !ORJh912edT >y7 0yucsqgu G(-p Z{`D?l̸mX\]R_6}TⲤ ;FbHۚs))61rsrڗ´QG)VTԪN&kǑ<LȣD%ˍM"~hsxyѾĮ۲_Y˸{-غYe%Vt:gpDžjD: \t=[uR>-:7R_Lb!""X$ݝi)ޑ˄L2V&`T+X(MX.'AXzGZ[yadB[Ϧq#?tq_DdX5V뾹b_6N=` .ŝ41'έZE,4d]FmkLPn/NNV_Mӝ͕scL2},`!ue0uf!1MĄ.B%;!BmhZ±7yV 9qhq:- GV(nՈDa~Bu;&K/m&;Vg , ߓWר`]Ech?xxSf&*1 lh';9`2i#1Gj;X#<,;WVխgW^ג`88ٳÊX@w| /+)Й rSf4\\A p#xg*ɟ;\5=Uck27Yt{H8RmlQNgӓ%~ B&$Vz^zI!`#No1[-D 7o 4iqBt#h ³~Qrt \QTg:n\]if cA 5D<^MZ7CJH>z#Ȑ}hXaӗrQ)GCr-uK5EzwbA;UԖd&U], >?u69r`X+uDPVcAT,K %dYq!\[Աu)U$׸Yߠ]l嚭2 POF[=Ò!vA%>P{$.f8*5@ѫtюH6疐8uԵ6-l=ֺQO2 ۃ~K;̅xN:N4(%iD+F{Uo)Оj4|d3OmNNp0-QU+aH3!БHdʢob8b؝L\,U> W: `4CS"V*@иp[[ É`Jb7!_J$I 0փj0أMRSgf [K P$)/[j\8j9JkSj|V E~+wNDFҤ~7WVfd)Og=3eI*:M!lK".#i|r{GiM 9\dG?7ȶ3/ *߻"Gxvj8hu6Jb-˱%f % q-'ǜ6?pZ3UàE)UcY`R.`<9sK|Ik&8 #kO8@,m#>>z9pZ"o+쪷w~0\LX w֑Tŭ-: JB츼lҬ47EA.D_y *d7vojS}..2q~b J?4%J(:,r^a2Q +EE Թ^S֠SϮ!YkEi CQ{ZOQz^I@~{R?VwlĴgh~B`0612\Z1Bw}c~n__<2e1d~:$vU.)"&#7!ˉ%T7oqn[P?ȃ fW ʅ6^Se֌{Tlrn:ΚQN+I=/oiKfmzZPai:>EXURC E~%M#WVSV%Lls趥qRfCtX+aӺiI`aC U#3\_}jr&)&- +D%ǔ$,E 2'I(曵Ts&X ܖ9V4JD$U G,$)?|h/kb-ػrwXU_<#3%ZLu}NnV+y `AflSҪq47V2u~uWs3]F\n螚73[щ .d@s+@mNA_EZqr^r%Ƀ!m (r1={3FENۍjIVGU ~ d>aII)҉<Ȃ/.tYĸoUZMf1 ,k_Js0|uD-ZԜ'c[ e"rŰZӆr#JӼ%L.]`b-PzJ*v)Y(ղvтB\,iJp%2aX+u,^PRm7ʦ6`rЁ;ln_N ̏JŠИjQg~uMjR7!E'JAoҩX(9P]cD 8|:vaOjҗ8*kZHhޞ=tCWF^n+{[`&@ZKz$jK);9)J3jYU( ø{ \Rzt2rVw,s_¬n*Z{zV0:y A"1§e8y]]rd.]l Ʌt 2F+X`-}P*/T bZ! y[ծyZ3Ŗ>Jo5@N *jǤR=q K} @4w_ESQe"H*YH@V*9(HskrlH(NNu7Eͭ-ٔI@+sWqtWLn)*Q@v!"r$մ+G^=}^׵V1KsPƢS#|%Tb`Yz9HʋYFUuro/t?¹On5EPi.K[f|O}X|rkh>Vqv57v7B8VZWj^ovŞX Ra}s8\ IjM0qCESJgN j)aTZ{wzݖPsy[$D MD`7&gҊV~cƜvfhsjK;'NĚ[P޸ۅlwصseaR,>d`w9-ץ"t*$){< Jy3T>B$DN! sVH/z9{IٽUJU.OԜ?j!K2`]͵VJvuj&n: Ժz΍mU4kD̲2V)~yshGvUK8hw3!70}~A62ʓF}n6.4g6wǒ unj~zmW _|\( S~ȣY{-c.62ՊEQ]efEv)h5Dsuإ:[- YǬgΡӧ,Δkܜ*%8,2#:R`.7i//UI[} ~M4f,P,p"5FM~ Op>[^ ꅵ?2O;!jj`R/~}xw// `ECҠzk;z>"O1u'@-^3g >If.a8T}V\x9sy :-jN.<Џ[~EsFiLr1ֲs궨|Y ,5,xl bW0Bw,?IʕC!O[04zUr/gqD!nSuPF-_"ǹ@a:7u&B!*.@C'|E 3}g1U]fqʑj`E$%#T:7t +QZIIZ筷j5~gvi+{?xGql6:eߟSŜ˻Um-++A(ɮ['!7r. :O"J觴})Pdts2,?0J,':1ڷ@60_򥒯Fi!rR_NjN<:nVQ|A@lMaUrU]Z\\8zif*XpY?2MųzM/3#O65Kնސ*)U^. }V*0I/3 ?:vs2:VȧC`$oh/)5jJ!T tX+uz ~\+ڌGP+_mIGE+DR7'թ:$DFmXF[mD+,Iմ i[VSj']-sgos e9(0U'JF_&%)qp#3nVw%dg==dATThT5 h)u9VqfB)DU+ C-qK&;p{Z {C|Iz2?ZmL+USay4[¹VPfYcy̚]ͫ2`P3u}QJT06X+u,&D^`.mGܰucZNC2enԶ.( g܈jt_FxJ?aj,V(&tLr9Ij_FJYU_pvyilfzrsOHBP­71oSph'o #ruqLWm?#`S5~{@ҦF0ܒ@ -ZA`Ӫ>oL# 7,["Y ,/}+%Sy"t"OxrUF7KҥU_5~0Y1:-Y!wdū.y*t6r䗇Ll2)~M* [0:v2Y#Dʲ浤F+sŭWV ?dX!-sc=e֩xF99C_A)G>3wPGbhXIF$ HEB}(1:rBK , 2?rOr~8,ӕ~S-]r,g16&VGk_uӀ SIA :hZT|d!ij0>E?KHGQ> 3EdD<&W&^DUe\4XHɛ- X\Gn.4 ݾhz'wj *4 @V?'Z< Ys5MSen0H#lEBE2LOKbzDw(pV^10 :0 .b;$ک >{6ۂ1uA-]XBw}U,/Y)Z];p%ʘBL},]K$+nʶknH⠙g_\ih3BՕTU?hEQ2 ߊuYz=DBi'\:JpsHqnyόڈ.A93 M /QB3jX~FDzPLsrdpҾn@TN/_AeAo~9f_t6xG>a7ܺYOJHb*ZiZ ~`[Ӣ!J6Dg 8_>0yd̔0Yq-APW=}jQ<`G+"$RiaA82dEjG~r`K>][;Rr)n,ގbp#Z\݋S',mlP+TC)[`HvȺWB&bDcI^ي?.=? `¶bPIR_9I (TnLL\Ц@`dF%XrL_WpDc+W{@F9e!F< kN<=.Rz{ԧi?ԩCahxj]]4kޢڸ=Z)GӇ*UfLTiV&t3퐨kġ5%%(KEbLƐl#J\"BrERs Z)M7 AbxW>߾D[܃uF1 GInHT).dRP抓vcX+uth,K݄x3t$xgҌ/֮] !y=\| :7U6( 3ن{nZ2Fۺm+W T`|KB%Dͣ'eC"婯r[7cqЭ.HE_!@/!eơSۮs^P&nPN0 WPY7 ֻdP,J$1Ǐ&>"qsX~?r8]ŰBvHn0H$mSe@gL:$ݠB*[}̜_=sW V:Wn3kTH:IJm2 pݺ^l QDꞗY[(RO@F9RաiIH2;ɥ絺sai212vfCSIo!_no^ٵa ̑=`Y'OtE9y匧ҋ#(?1uD!+eZوE쀪KӖCX@J@ h{G(!-i:1Q̵ /XB"! ͰPY$X{9fL"otbP|`XoO蔴ĄWg|UnYd՚ 16b NW$T;$1_e N؆>DZN2Z;`[պ#U;OL<@vB#YH!k;U+%#:$Kl/]=KbT;ydTO| 8ujLݷ3ԎZP4y3]"zC˶1qVXGf|D8@4`GE7z** Vh{PoH")vk `{?&nUFu qr'*]^NDwꁿ48YjnF^80$8p0 t.Iv@=ϒQ"s:3ET| D'銱|ЪD,r:qjZhGvJn}PM#>[5 %TŽ˒ i(vC6SGgSJV,-!y!09GbݯMDmbaPo/glӧK7][-ܬ]š;;ccC?xp!R<ثm8VqMfQ`R+.FJҦ2'_}TMvL@Nș?In2 UBʟy"uĬQ̫Es/9M 4@+Ò< \=%@Z1b$~FX ɰ3 _@([7ٙh jƴXUl/U+!J]Vv)byTaMBŃ?X}v|CÑ+(D(]Su N50qQn> I8ɫ $FEؑv&EtfkΕu~Z] ͎$wBm|ƕHT܎KvFجdMt1ɹ:w溪Yeƣ*apr0!ύVfNL&*TnU*(2H [^gM7#BVaaԴ.ib jۭ.&)Ӹ(#sd Ѯi; ֱri 0ӯeptauֹ ,bXJdȖ6L"PkV^_=X yNÇ?>ڃStx'_N̏־HIMJn1=T*xbN|DR7Dj$Oo*Khz4eRY\}Y.jX2)(&{eQÏgm C:)_IjlGĀt:ɥ]&ݎyXPbbxJ+r.?@N Ru$\?TcK. 5^ccPʙrQ;2JGO} j5b:Ƹ4sfoI\_%ҤiճKJ2H LMk(7pHj=w96ޤx}ugr}s-B LXQ->ƒ*ޣ:+XiKERBRS^%<侃0gF,r c%%j <܀9556ai&1#ҝs\F̌xȹ_ ʲJ0e9& rnX `8r>\nN2qX!3TA=[ˡ}ݳ*Qfu}` !F1,5?{s(mV#.oDe=\]..] F*lԫ:4rH`YޤB K J`>ɱH[V*<a[O:jXVD,sM@̟3!"C#E["8a*V("T@+s}ۗF=BWw`ܢC܎hw?v~>zf &*,]oE[$US騈7 k jBԪo:@`x!#3OB;|nsE5SLd٬eA5$ 0bP^m=#ȫչNc;ĸ9 *"܃h֪t,= /ə;~:ݕj:2<'XVe K|5W=!&>DžTB1dIqvc<rV@mSOVxzչB=D\mQ:nEI0[`r` Z;ӯf@-RK#c0!lwLD ZM”,,:nzf`fN'nzįC]R oy!f:[jzrz!rUxg`P !_,XztWVSN(.rvxR*E?bjew[h9C92LjQnf:>Dw4BlLSЏ0RԵGDfQ?qn,[d4;DۭoW0^й3NJ9v%7GPsadDzJKeVX ܼT-++L X&jus;_~=LT%G2?-/Xﮔ4yy'zc큙gazsPtF;v\ 6sJcɎJxF.#Ĝ)Qۮյ3nT&ϭw`˵\Oޣ0X)T>KQ [&v֞S&˔kvH ~e6T:Xάi%Zqx K|ȨmGuwVkV9t?d3\4%AMqjwa, z2J6x3[`Zc'  XYG9sUg HZckE1qJ}QvrZgW묥JJGUZ .B@9'tU/{Zb)`p(htMY+ VJکMBnV.^~_dS2<^]w)et6We!pM mJ$ J\iƙ2̂I[]QM A^AUf|,,FܩE CE)' ӑ>LO$ʩU̥ lX){]#s{h!<_gXnL̏fx.]X)yxd7pW$ [?6增f/CQ."S{R&-No:,Bt-5,12,񡛋w<{ <6J&\9h}sd&(y$->6We 67vxRHjƉ 8J9~ϟ 0]v{ h/*r:0Za Cv:QVhØpvU%]TF! `YrT ׈ƇrUk([`&ӧKɩf=9DP$="?l͵(Ub?L% V<兒;Xq{-.U_h VfQ*tR՚K`8&Rv)v&֧UbW +BJA'qtokɟnŤH{{j}$]hsVX*)?؝>單V0X)q|5j,vdݚ?WwNf!fP%`&Dp!H~NN*{.x >a+-J¯~yW![ǂDx]q`3PV.榄utqKt.1I;)|ꚁ.HL[[ksμU^9CBQ蜒iUFG 299"krv#3> I93\_YZj?s IZ-꣡܍VMR嚎C;WLY2b\&Xn,,uϧNPN0aˆjlXJl?BTa4,հ)=ڼf|7XB*l⌷0RsDl$D,LL5=vOf_+X+KY#U$^p}`._;MBt1K96, /V* O9TzWo ImT1f2sEpLP gU?KZ`Cs#lw;RiiX3sЩH 4N-v .5%z80#.YhB[$ &Y>z/BmDnČs5[6S֓bQuw:Xd [و0,+.'h2ݾ}\KJd0BR 5uۣbmkYǂT>c..+=t`ZA2`,Qu}t G>vtDY"'=rJ>i2ύ6ŃAϑ˭bZ.,fU] 7`E' Zs8D ZcJ6!pl>vȁdHq!`j9~컕h,e2VB=: J@ kn:dVҶ'r\#ս$aaU IDAT@*+Q۶\Ǜ׍Q~UWJunF<EĪg TnE#?2W^"1bB{4x9vLtVBV̑ߺyA Vh:Ir9 Sd{dS_wJFB)K-],NW(ߜs:72]?tXV\’qjj6i(>M-q>{N4jG3J;cɺfGbLN9ФRse%&.;id8R3NCt˸< (s>v``[zeVHWg9L>U8㰻bܹ.VZ0Qwc ȗi!>;*NjXxÓk(']rL(zc<dBX+ug\¡3q]!ܬWB=+#HGm%<<[gg2(eigA7ɦ6BUWsJU EUm-$qxZ=T>0r )Q.r 3#N\2acl.rd1A#֜\cǑo_k;g1^~H!uâe q1UQٚZ`nH|iаw D9We<KIOx(T/F.2gb 9lTM .Sd;e wSlҶ'j- xz YLP%z rL $K{j[hv ܼt/$&Ig$ 鷌''Wa)LjɿUJ)ڱWvgLD|XV,e,-mdtAez~QC.3UݶLFȬ4w{Kyc(e-D;EsGGaxҲК9A_^=buII<DX"}`5iHGBZ9Z]Uڃo@дg\ȹF"2ݼSPrLXnOو`rHpG&EXzF/ɼV`(V `\Ɏ@bC^iHYgQIYL>"wD#h1ܻ95_ﲨF ¶SV5b1CwvVhcF9AL(^Hv?-w:7\􍃝#LE׾6i{p1Gb 8i9e܉`JGdf9:<Ir$D`)%YobDTܸoIJX+uꄷ@wAU +0p0+,,wwv`,#Q]Q w 'R#ъZj! RA6CȦ)*(FoWw|ޙs9{w2AѨ)~1'vFL]]ӧJͽĦ|7=Kr/cQ$/H4Opl'yQͿsG<7|3hR]$rd-yfNu6ܦ];e =6TD4/A'1a؜rwvֽt Ǭ׉}[$zR|BMtN~M.qg: ъӈZTiոHz)n6!M3 W` `~+C8R&NŶk}c'hiW6sM9rgdtNTUsL*jOf`%t K_Jd[Ys.Ŏ476@][h/4RvEpvK_8՘',rg4Y/W _D6MLLĔpʑpإ\60ui O.}aYo}F+"lIgoҵətSK#O_XJ 7 wg ` ` 8R6wK)M4}x4p3jz r=qV wEcW;'3NʘN2*qJlMG㥟h'תtd[\F;I/}fkZ7h`܁\ۘ4i]BJ}vfk}Ny k/ΉetJRɹˊ,g 0 _H3}&eXXڹIG[ӵuLbe9城ͷohY='6)I/r/{o|p}(Xүi8~J]U:HZkf:j-]2cqU)+TBah`*e1ijSjԖ[˔9"2͆lKPH[Xr!G'f3_ѵt M~)o XB^)Z߱ue g.)t 5hS054|qw/83a-KgGV(?)Gn /&!v\DYx Q&Э|݉{֍VjvL('v2ZֵzPCm T S&xJ>)E=lI,)Gm~^^`l2ywh)gVMw/&gT.,⍫H|!M2a덮fYM7)6 j!̾3Aٰȓ)c3ZBu)$\72I1Ql($i6tgG/An"naɅv)Q^$StS8`~w)~rDRd#&j& m##_'[ӜىޒA5e45vV&HDT!ev?'/̝%7U/ߥlvSnnс|ftHmgصgBgYȌ7Q$DYYњyV|fA;_թg^ۻ=PsSK(~P傘ԆH~5M% JkHY;p~*YwNYsz%dn4=Gi\ixW 1 ` Itm6],;Ϳ&Պ瓯MWRi\ײ8fA޴S+?Ѱ]K;'=yCgM^{/.hJm~dݨYl .+8Dl]3 3t,qM+~=0TD#bՖRNVwkni޸N6k[Jeu$(̑$dzWjʜ9AE ѱ['hqd2Me u "UV>`̻c{3 ȬCRN^ش$8l4SY?"Mb{y\ԢD3@&G9Χmr̂K9L\Em ξGD+U-^I'nz)G +UG6{/rHs~2%wƢ0lE3&D/a QL\zUc*?h5[VuMYwt][B?Ț:'MSWfd|%O}r^UXsS~ܕ@ƚ?)Y{Btq(Q)&SEJ.kÎaǎwo W7D?ǚIE̾wdum[^OWϾNO7ۖ~I#1ysb+XZw.,{:PlYYGM`CHө.c+7&'ᆐMRTmHR{eMRC)lm+p¹rkE[wl3Z8OXj͉V:6n7l88xt {aϞl&z˖ +V@Á[ډfM_tNDcGѣ~_͊2ڴ4>ws.i=LSbD[!4l3֨97-ݨb[JWUJ]d̝7ziORw6ZQB慁v:/!`On;z}3I*XІ ߴLFF¶m]P s2$3}hlQGP[sl~z:9Fy޽EXoeu ;[s.k 0sG]LD(ǵ/4DGiJ#9kmrQN9?Guo-u5M4MXIӢ iHix+S5q|HJ0u[TV9[Oƀ\3g#ÑG{ KCErԟ/;wҥs%tJ'iک/iw6u>#ܡ3w$x_Ԝ4&w<Ľ35J2]) )2;s,%w--?Y4!%|n]X"l֭;xjCy.7lHG39L%ܨd/5GіF:iTiJRhkn1cQO[4qat4)m?򧩴D{֓F]KX}iH8p!adhm|| ?fqc/D)я;7li"D]y_)wjǢ觌\Oj0e-*̻WFEW^+s݅1!t饅.biAܼmu!"h!̛k;_ Ze*lԫosARgv<>>=o@R9[y.g'ku`}4bK| ף+zky.Li;G^ƙ,ikQ3kYu/rgXUo\+JϢ.]wwm|{>9.ؖv8Svfg9.>=2_Olgm"[[oG{Y%MKȟ5іus'"{ eʁ>)I4H ;_mĊ./ӪӌWfJ>*'/ղeal;6UWLkK̝D9ReiIdڐA \ѨI2UΗmF?(}^4szLU|&ԖlߞVeWO>ڗŵS{SdoǦme06UrMȺNv*Ҥ̒ fƒ3o&`T~vޏF&yFgIÑ)QT䔫w64Y=;2Be˞&3iQL [.stugZ*+1D1N^WF'T`T]jF@Ke{/9=[נf0v7|'+y{Yk᛾O H3;KoEhߎ-6_csZǗy ˖)ѹbz[u _4Z}|'ՑDmK_R{fԕW6Y~&2鯒`)͎"?|{l,,\X~U)7Ѷfbg)Mʕ-)_W  V~$QXJXֶϭm5ũiz ~*دݠ',J4O{l'MN*h޼Cme0Zn93g^ܱ#lTh|߾WZ~uhڊjC-?4t0x]m]=3 勌dl\g.:4>ҫJPz }/Zp7)%z!z[/ŇYT{@R5 ƈtݺ0>Si[(0v*r(ޯݠg'<]薽8bgoѻ{ߛ!'z:RO{ZKzyϫvMj!ׯvr`%ɔ+[:4lkmII:YQ!;E*avEѳiQ0WӤKoX95T\8{oʖ4zwx?<֭k/Wۜ/UD~=ԴwwDSm۴\\sI$M*> IDATx3o]sc=啡iND<4T` :xj* 25}71y$u^i:=5mP(94@zz:|;4cpI~1; 쳜k/&-DOНwfxSnE+vMe4z $H8e='aj* L*q_Ӛ| &Ua&s_qk~ȁ_JKtzukpIL#w/##ͻ.]q j3竻:ѩOVb5sVl>j_ϵ.qjeajet͚MjVW炟ڪur{s6vDф]R2~ #cz)^DjG, r4ju1\͐GWHook%o B￿,XmkulF?3'%_gɒ竻:E64b%s5ʹ1mӺVdm'yFij-jiMwPO~u5"TVh`Q٧{LJY5!S/6rȦSbC4>7mPX@lF=|aYn1\NsH\榛b. @/x9WhZ$,(О>E64bV{D&SS<5VV41>vUg2Ze8M|SSE?=ǵ&h!wܧ[D':s?<ǥ9E7̜rȄbgV:FR0{x\nǰY,29fٝp`奝}1.8pIKb yshK+5%$❇&q K>1NJe@=׭;a6S}Bzó7Sdu##a)+'H*du>1qpar)356:NP>wKkTNz9Ƕٰ!\|qؾ)z1W,]Nu5ZX\"- ݗ貦;͗_ۇ E+QhvVɝ "P7;Xgm-߽tˑ7c?7y/$qjm0V+jm#W蠺G) */qRNgsZV.+5YHkH{-[.|J3BYU+[*+3qk2 ./PMo.\:ŻjY!eO{CݾrGJ>yP.XYBX$V2X yfzG76=Ȳ&%U'At`YuӤO>)%LW.Rm;v9OS{YU+[*qR}rZGM.=6]FFz6Zoc.TJyxW-; b՞TnrS(CO|dG3dբYE : 'V4>=4V)|(N߆X-[ˣZm3blY}cp0jhZwY4=4+UeUzJoU5pMk |WJmApI/ݠ* 2{׭ {Y[W54{rcGxo족0>z՞oEd̒iv6ک_gSec70Pʍ7^^f_@eKDڐ>3yZnGOUEIbezWײom76-kiaY{AyXgjs;c}c͛Wv^>jbf]Ѷ@nijXX.LM<+^l04_1?a{mk%e;觔Hړ^u=/8=;㕰Z"uUkZya` ̛pz+ 9յS{Fyع3glԸEGn%`0I%Y5ЩHX}SwuNQ ~UG v]_T :^iXȒîK>Cgp2LnsIӛlq/rPVN6ъVX:K 2>k<9OV"j'0a,KqRK3]2y7/Tman) P^ba¤47L7_1})m)P?wvJUuvjB꛺E#}toSJ,*rꊴS@ӔX=p].X3aѷZlN3:ni.w.9vN5hC?0E K/_8)wk-UX可jWZ@uC X⋛|L eqX4Z6FH.yN[Ct_h?FAotIzl%)q~`rJaB'w|9|J"VSg>whwoth`Eg?Ke ,K㷜 a, K|&}Lt_`踄 HMrzu}߲^?tغenuKx=OFWI$kx9MSV$\lj/` epiL])6FS:_ذJY2,RuC+o SNiRC:[OjPY{`x 3ܭ^]f~Cb~F-woƾ;lՈ$ `%JD. [Td:e15H+]Hؾ.*ՠo%^joBQF.&ߦpV F= iA2O`d arp:=s1N%B旦ZdUsM;8 Uk8 B zn-+ne4jpjrO>ќ1h`$yEdd,/(+h?"%x߾QF7#"A=(}FMj?cY}-uCazr?ݸ1̝Ӟ'nߞrǠYG δB/!;c޽+VxW"XBXp~̤o_ɽDZJkcKl}e՟RSD̶]z邦_5)E*Pninġۢ69~vTnyv* ~?%w7m.hYRw5KCZwmϰn"1*Z/lG"_;*<;^tAo>[4մ+սD_sKXI.6 ۶)ȜZ_\>n|_¬>ɠ_jgPb:XX^ :;)L|TӁ0셱=TtvR@JPYX^ :>)LE@˾UXQ=XZ~ 0 J1XtCzn~Bc{Cz(XTVYmmقat4lؠ,J` a]v)51֬9dXZ$Us6@`fWlQ*Gz/SX:9=8T ҬXQʕJ ^R"J~^_ !VOzL,*B4ccg͟FGep!=X@E`il,l 7^bdR"0dR"0jR 0*X@+QzHo$a&@ `PiXT&@ `PisAaPXv5`@YB@ `􋉉0:,a做L15ar2&'Ft ,0>P&,uk+[(d@_X+ j2A /__Wt ,06vphccJ50GP5nd&@ `PiXT&@ `PiXTEPgxxX!TXv͢4D ѰaML5kdػ7LNիŰrk_:K uk+[(,ڊ\TZk׿b !T}ml.01Ɣ TE@J34atԖ*DX&LN{dXZ XfXغ-[ @ ʱbE++W*`cW,!(E5k,]:S/B8~ v`(ǜz ,˖,Yr衇yozӛ/^W56&hP` ~鵟,Y244sNg/ygu]vZd_zgEkݻw~[.\0 ê@5Z믿~9Ϲ7;]XguYg4tAE@ `PiXT&@ `PiXT&@ `PiXT&@Qu@u`۵kςYg !&@ `PiXT&@ `PiXa0:6lP*DX&LN{dXZ Xo 9`cWlQ*%*NJ\TJ U_X; at4LL1P9,ccV3 J49 +k׮:B*M J4,*M JJ31FGÂat4lؠ<!UfM {ɰz@91>r*֭l٢TJ U+_YR@׿b !@)16vphccJsAYg&@YBXoxxX!TV]v,qPiXT&@ `PiXT&@ `PiXT&@ `PiXT&@ `PisAaPXv5`@YB@ `PiXT&@ `PiXT&@ `PiXT&@KG?Gqy9ݥ/X{{i9]/Xyk?x~G?mWWN6@7_oy{>z 6<<]T_E~޹s'?WrJ_ TT@onN=x`Μ9!}8p`6mZ`AB^xtㄞhIDATd{nPD/!馛~_?-zXQ@ * :BTA:B   b, ` !&@ XOWlj`&@ `Pir`Pif`PiXT&@ `PiXbm޼s۲e˷Gug199Vsi;'?j[]wYguq==o^o#餓nO<1|; F65O;,\pϞ=JwLeϞ=},Y2wo}VCڴi5\3g(jkC+ ٳgzzvGj/*z^WyݺuO>Ffܹ!G}ty weu-ㅞ׾ҥKo|o{j D?mܸԧ>Wʽ간0UV=?S~3iDz衵xZӟ??ܴiS{Yj]&S{YjwyvOAo}?s9ǽJi55!l||뮻>O7 j~?~|?gjo#|Czы^$;=lzzzjjw]wԁB{?<_{ |SSS3}<]6lpW4>4117ꫯ~_>555555==^[{Mu؅0zK.wawyGbB?˗/a-G{ַuw}+V+FGG6jvws۶m=7 z׻әg9999okHq,*B*M J4,*M ;vNt%?˗nᣎ:ls9o}[ `u\hѢV|D-MMMva<[ne˖-!7M-O?}ҥ;wk/@_1 s}9k/q3/֖ |_ \[`OOׯ_t=ƍ<̣>E/z 706lW9y΢E|G+_Jaɒ%'pB학]tu]裏~k^_g?N˟xڟLMM}8-ZxN:OOoOyk_B馛vޭ>} ,/|Szj?_կ~hjj*}.hdd!|?B8Î8_\sw~ ,[o5pG?__[o=sC;v!۷+Xh[>/!=isw}駿/iBovNa|͵Յo6::=yO;w'?BxK_sέ[~ _!l۶l;o޼ !LG>r\2cǎ{NLL&mBXf]wݵm۶{;Sgj? X@_x_W2|!}C\|&p=n . ;<迮\~w3ΨzVhѢ|!ŋg?7y+VxK^rG̼G188xOX@_Xti퇡K, !dOg>î]nO|K_Zv2XE-\K. !|sU\W_}N<׾ 7f`෿^=(o֩˗?9Q@,!4,*M J4,*M J4,*M J4,*M J4,*M J4,*M J4,*M J?? PIENDB`gr-satellites-4.4.0/docs/source/images/image_receiver_flowgraph.png000066400000000000000000000344531414055407700255400ustar00rootroot00000000000000PNG  IHDR;]$3!iCCPICC profile(}=H@_["- ␡: *VBЪɥ_Ф!Iqq\ ~,V\uup'G'E)IExwq7L5{UL*)B+ %fsw }V &|, xxj9GYYRω]oKyff扣B.feC%$)F -j/ eF X2ꨠ Z5RLdh?r"drUȱTH~wk'ݤPл }lۭ \i Lh# \\w4ytɐ)@_,gMy`_s{kRW-Qǻ{Lrsy pHYstIME :xM`tEXtCommentCreated with GIMPW IDATxg\Y@ХtT@4E)*(bkwY{[V,Xѵ+(( * 6:~>fI!!Lf\;'9Z@!BvB!XB!Bg,!B! B!XB!B8cA!B! B!PSI@MOBQ B!BXBn>~ yiCIJNXdHJBl7L:f]Ԑa)I.KKKbRׯrE4MS/TN#!Ԇh4ZhpNJ{:48rU:6z'$_8SXH89>ksa!\ v 7ra!QёQё7n]yuŏ?V/ ϭ䔄:ۆW?z*A<|t}{#FIKL:zb^=f{# CYZJfDץe66yc'A9E侁degՎeefxݰa\US DDDϜ &؍[o4o]۷79nB.㦜pa!}^ 3'l|.߻"jkk`ْ5|^q~m›v @ᯕYy$hAB݄jIi||Y']l %<_^ڟ>mv.h:]sa P>m'яJEv骠HKTVVJJ8dp[n.]>6k|||?wZvCBBW'V*|=7/¥3?~a7r`[Dml=vȭg7" 3aĨ/_>{]vJTNs4q3_B P[A-k4/n._ u24u>uփ𻗯?'|[ߋD+h3ܴ\Mٱ՛#稕4u=}ڲ̍iڕ-[[ |!p zqDwB!F66zkk<ז5ycņ7}zϟ[oDeHJُuM mr[4NٍnXvwmYTVVԻ{uuuu v8r,fzlX3Z𶶦F!pʎxƝ#1qq#$Flح2a #5x%іþD?;ggO#*N'Qt`SOOciݸխVQ5~*m0b`dƨ6lEXȄ$*<~$)׀U%kkN饹cNP]l\**V!HJgЬ@UUA#E&%6HBv.488 29>^jt$CC]+7/'-=%::|PȊq1""}f^mRdpiN}75 lz8>$@K&F!BA03Ӂ0gff-ef~ڥ?VUW-Zꮡ#'S.HNIKJ/Ͷ<22i0g0 XY fdDEGnݱ~T!*x;VuU5$D!A]MaTm7B!Bm0c17GW 43v@NyYK7df[Qc1)BBz3$4SԒSҍVo^jNV!}6.6B!B8cimJJ* `d8K.o]LOe;s5="kkkҍFR+) 7%?zq;yB/ pKC^'^(**g{u39&]:r6.ު׮RmkoA~y_o7P;%Cm!Bg,Mcq~mЍ_?88ɷ $$,**vRp^Z)͙Ϟijm089$8`a Nq)k2|J/ @_ϐ<4zXXhtDzķ_=*!_R@u8%!u`n:ӰzZ(s7r;sI3dmY:VퟨCHNI3hKe6}xopZ!~9AgV7"2-g:2t MgЌʹsG>b;@VQDFAHGO\(vaH{)xafсͶ BIDz.#d&LGtġ{1*J4֍Q7-kl6l/ k}u|S> xlNC7DӾ;o\|+\VFZN>Oy?*.%ϟƨuvDnRs,̧7PQJܾ<*ar<3xuRpdxlf1/'%w뉋I%o9_ʋki^%}jZM>sjL~)@"DWa}ze{ [X?vAfQ^t:fRj9&V6F_&&SV$;%7)ySFVVVr |Mu._9GNS PR={*;ڏ#0}bB;:6yh8v␮$,x0'7ԲY={FZNrrX躹ORP4uNUSvh i^=z I:-nƩHu6tX|܅SS&x__{?kzp.Uר]%r 1ڗ413-%/hj'%5mH]n F.MM,珜b2?yT!וΠGcx=O.͟V^HgH%N)ANa#YLֲ"ϬKy?g/Mn^n3ǩ5O=iظ55AH1fxm "&0@`;T> CK.ٙrRrX,]>vȭ*gCN}:6 [wꈥP7!'1H˒OyV6FKW{66ΠY[ 7nXh5fΞ8y\v'[=~}u[GN$",FQUBAgt7o, = ~c_'|>O}}T'$#i.Yfsjkv&ڔ͐^Vn\b^MM⒅Әy$Q._reb^<|ܝ=$7m]ww\>}rpS=;qp7L:N}9}e3GDz&v_F w8qDSOΞ=ُ>ah:f{ qʓ.e_TQ!Ay@rJh48A4ׯϟhmލlp@KkE^-++֭^>8,y&7[5 6CY Bf,7aea>H! E_?t^$4E=-:: ?ܶμi1C{&6S=%)n<>u7TWӴsEE_A^ɞooOB٠l{ߔ`0Z(hbZ~Ι1f:fdFjkoA]K5*ޒmӦ䲕I6q̜ٞJIM\2ULpvO{ݎ&fR i%%OmړkT֐NP;11qA6d6kq^s`T2y@JJ*EE_y,澉ՠ!u9)lq Aڽn11[.o`6++"o:'X|DfOtMY}FiVl@RKH`oĤ>{^zxK~:lڲ6(»ncqbby99JJ*PO7o]wى.'HMq1gOZ```dg0L\LR㨇h9x%UV`QqQuu5??bÊe 3[lջ9N?x~lMXj!i~"h4~"W 0{LObϕlW.(+W/$Sz,<Κ3y媽ȷy\6a  9>ݻW<&}a% Y<IM.^> .3ZIiIj'|OMBaJJG>bٺZ;Ԃ~mX乂!)շ/r~?7ؐ螘aإyG:{1B6Pnv2g4f*5mls9L-<=?Aϰz1b2!qw<*(WՔRW@om5J;X-))\2歫O"^a %N6O^VQVmWxkqΜ\ע<ϊ{ܧ7ob%{tK} U53gUTT2228c;TTacuÆ ~;:Gϟ?Gm2J;XcBg4t䒓;ӕQQ4}B/n7ͨWĂ9UВ^l5 MԼ٣>_z>}4 k  G $$k׮D5$879շٟGGu掯WCdWnٴMH2曌l65<\DE?2338@EBJNn A;vWI j&gF?zw7[ԝ\ǩ8oDb {,rcmv.>k ?IG@f8i^Zo-P (((z1sL 3fP˩"[S j!0 Gñ=sLGG˗ʜɣvvvnݺ[[[rcښ'6([\z(m(Ȑhc5FX^ lخ@rNtSAqtƥjtD~mq~탻N^oaN،()d~(+ί3ۓuS/ik^{޿O=k~̒b;wobۥaD?zs- 8`<-##{ϗjywKdAnEE_f3YiNƭ]qpN̼;A0QY79DAZDt^Q`E(- BDaam͛}vNknݺΝ;aaaBBBղ3g,_(m*j uUXDX rJ!wM` 'QqRev?w^g|H6np'-M~SSRXށ֓Ǐ6I/""jo`?9?.m1 *NH|K3u5͡6vaB2ؖYy9 u :d-knfOѮ ~#煣cmpjԩSEEEOgJ  ՠ;Tڂpl Dkii |qBxx8OmQ0yd!!^(e***EEE-qfRs064'/c/ Y?o7M m&&&њ'oH.X߰vˆ[}\vIKSԙcno½8 uϙ婣wr8?QO IDATX̚9ܜ=;q2~>r57 b=g̘1c zW~G肉[ w,9HUuӱ@kãFp(űJK7(索vΝNc5+c\K1P9pxAcu=~򰛫J٣Ywaiam3t`1.vj5aCG<{e3d/ X[ SS[So* ӞAO@+v.|~nKׯ_%քc!BWW711ٳggϞUWWxeyyŋEDD233(@(űVc!6,$}΂yK[ZgM߮|J/b{AU+7SZa;R2-:c<ԟ`~uG~hp$ک8ʥ 3.mڵkISG-^f͜7k<σ#ImF=J兓Sΰ.|.C8R?{M_y G9 #!!qPKdk 9cQCF3T ՞jm[ժѣڵk}}}sss֬YC{zzn߾FM0Ze߾} #d!7ʣfZvҚ=4OpӘOdYԷ~N . u_ݧܼנ ^ic';+닐poU<$5jh7n' UFGU.]爷eʬDZ!єע雷*y% 3/ זUUW;kvaa0::-ڲy9ZlmoLMMMMM,*I.ԟQhm*.aa6>YcFOXaYSBY3]= g,IXhtٳC%\p;ܳ}=wݰȱ Izf5.\ywyݿTNV}ԳN3FK /;W]70BZJ?u) SMFڳN7}=CNrP vd>5Җo̘=.ټ$6hz# qo_ӱ)v=.-@ƇiSVٞC=TAV)yAs=R򂦖}RRHe!rQ1{Byr2T75ϟ?rIA$Π߸R(0*uFGXHN~^|"({'Ĥpl>$x|-ꠊP5hs&%/8qF ThBFTgHJDKvO+.ln1;ֈ^Hgߑ߰l񓇍Lr] Zx=cRgM8䳗4hbs9NGG6Qזe'ef{L풙,+!ŗ>)c`ǩ8[-4V:wx M !N)> \KfZ?g/Mn^ D-S&3gΜ9NKuyk;cr$ۛP7!qS?JMQPP죫W_ hk&}|]B~wl\,A*,Z"cHZR.ށ}F< ^^ j $7ZoĜnZ@H#* R i_4PןtueܽDV._M/\ϯ#'+6oqc&}(|,P75I.PKNGsdeURԜK;dު?kXtmnfD6vMٕsK7BnG?vr~OBXhW?}?wɶ{ݜz3-ί=}2ۍ%z3!Y !zz/  zCja0}#򨀀w>-\6c.~l߱Nbi!ALLr>}̗/SMͤJJ*`;^C] ~262%?D!v8UbEu8|pF-/:q:6,c+w^Ez2^j;l/vg!:]/CA2lna>H! E_1PQoU+u=tYy9r/lũjsV񧈈hbR"ϕ2Ҳlc 32{)0`]48t555q^=:6h5h2vXtu?}EE_FGfN Ťr9@ԈR7G*/Z6qCDo!+Zz-ǥ(+l=LXXduq1KMKK10023q1Knwi)|}O zrPnfygl=AsCS7 UWWsiu7w,a1ť~-9YnNDCׂn<. jտ! gϥ%i)P`-Wdڳ+l.Դd1x#_z@a]4x?ηoe"h4~lmRpik`_xUAA TLёczԈVm;$f$Sz DoNC1.Zj>||0gtypƂHHtOLz0ZAYR<#Ǝux:GI 4.=jKύReHDDtl[+Np }jGT#jJ'$.[pdY">$Z4qF ԥg]ުV?+ؙiŽ䵫V̚^ 5rޚrrg+w1y߿@nm_|.I:XvʺM^n]SՐJHxs^_v A&f%%ųf̥>6Kdf[?S#mq6{2Gٮ)#-KqYblt$M{t~ׯ?D? z^HԳ'oW!BW@Җ8kjM"$A^uMe^fzK/R[6Yzᨑ >r/=j|B&8G!BCjw,E'T!%;$A7oz7ӧy7n^W!BoHщ/l[o3ؖ-?{;)W(`7]HHuͱoxɶ,Ul>{=du1{o72n`a6h TVUu2n ҝɂB#$B7X$%a1еk'2>O)Ȯ$ߜMfz|)?s2@HH횚ёoI_n;cYq~-ͨsa"r_YW^5xSs>Z!Y|nGpNn>p;\@F#O(:G,j8tשּׁ/BB½U=ojJ|{rOg,ͭo7b_?*읬t >G,Vf=是?ȗ s:J+~T(YPTTnT;gO^ڼ5 o.[2kkkϞ;!Աn:t v#޾e}t B>5-YC]UP)>-U6JJ^\Gϰe$NE(եXթ^c)->|]EYհ SXHNhOy9jgϣ읬q :1tmß+`t^XjYٙ#eEH O62bu3hC,H˽)#+++kF("'7ԲςEnbFZ9 NWVPwsT_n ~#F -6PRp;m'B[K751__E+.LH|wuJQ[qCŬN*^O2| %"61QP󇣃3Y~j^ +_XMW"D̙vìe=oXׯFJAq~P،lKU뭑3}ۡIIM?vҲuysw#SeddOK3ei!ALLr>}̗/SMͤJJ*`;^C] GP) ۛ7q=d?HUҍz[f>rtmYV6F޽>evY_sCt P;G]FR=Qr,IHthA/cx &Lc^jr0H%[bHkjh@QW1Zo k|||WPSSƼx$(s;!!;Y|nZZ!s||5`Rr.uwTY@XzY^Hb&d.9ysB;gIMM*))i~} }6cqiipR5್\;;QUa ЅܑbH%gf} }ꙙZ rǟr~?BDĤwKKKR<tӗmݧz)*Gm**;N*O2[f,G9 1ّggN͙a@8HBִ)nW+bGEbCǍ$)عmT%+++osW^'&lc8Mc>mZo ~`bl6~dу?}PSSKT377tun$^ynqhl=svbI:zF8 g\B!P$B#RT B /B!B8cA!B! B!pƂB!By$~BaF~ǂB!j8VD!B6߱ B!pƂB!B8cA!B!B!pƂB! B!B!B!pƂB! B!B!B!?2IENDB`gr-satellites-4.4.0/docs/source/images/image_receiver_options.png000066400000000000000000000437451414055407700252460ustar00rootroot00000000000000PNG  IHDRV-iCCPICC profile(}=H@_[R+vqP,8jP! :\MGbYWWAqrtRtZxp܏wwTc P5H%B&*_D0L}N_.Ƴ9z@ xRf>Iз \\4ytɐ)@ӟgMY5q pp({{9rΥ7 pHYstIME  5i5tEXtCommentCreated with GIMPW IDATxwxTe{J&=!= B' 5eWDiXQWEE] *(*tAPTP HNʴc I&ťg993*CI)q*LFGO/x""""""""[y`Ļmۮ=Fc֭ݚջz>CiiV-[4kJ5[4KJjORԞmZ 4 nO'g'=x]t1@DT*Vql4VG22]:3%"03+{ sr666)i)i*z܀0LZ-ףMMP& \]y]j4 EEIiuutphlEߧipF~7;'WRwϸO7U{}ҧN߆(52;'w/'=0*J?fTZzϿIV^.^4V#{g9y *ɱ89-%L<{{ª/u؉4_on;l޶{l#;rlgg"DVoe-Cgf؄j=x.95PZhܚvIRY,3 RJKt>e em ޽sҲsee凎}"bXNMHM(++|=[Tu杻fsvm(7;ocϷeea-BKJ2#ڷ0;y˳C6ZFn]X<|$2 LBbc3azZ]ägdƞ5QDFte%ou닊#:v0-_~eoW_ɺ_9%'7efe_R_nr_]]\D'Oh۴n:t$=3+'//LS1gߥc{G齺Zgcֵq ƇMsN M"DА_Ph6k=+h4NN@??qvvJ̪bUxikeǺsUxD`2qݺ+ ݼ}+>Qڭ1TUm,*ϯgpʑʑ,?Y-"#Ą>z|7{QtZ;|'"fE16 } QUbV;@sr22f8'"͛7i{!%dj5ڼiB'GCi{xe6XǚgUO Ut:nbWU+ys/="nvt܎{>uvr*--EfNm":?Vuju%KUJJNOC!gfvfMU*UѸwlm|ͪijFbQT1)} _srSRӺwp1oOϜK?u&zWӳX,h4)iW3.Nz3 juIaD@WggOzfOtwXEEFeۼswM;;)|}328pj.zoZ]T*OԄs.^,E`KejFV;:8 i^Xc殝:xTױ^ iz7^f%b~xh#8vvŹ}p;;۴АW?څlP^V|Qiұ]X{;ܼ"GV!J/{xcT*9yȞw:6صcKJll=uQ1TnR"ڷh4bX=xyj5"Cyk|9vW&c()tjh$|e         ]"^HozR@/ ̩"7κp)QcITHJZj,#3{>g.-3&M/"Vu';thcܼNoԻWߑ|mP`@sqizm'/}QIIbZ"^CX,nK+xn~斚jO:]>]k3NDxh_Ҿ?oiFDo֨pg6:FEHAyjqfV!4^J)zPpAD ߙd1ЖCk,ՙaBDi("LyT6 o[\F_RbR+GHO0w4a-[*/'g?tNNNFf֥sfdfx{tW:Cbm۱s!۶]"V!H.@]g<:ͷ9ٻfhӧ*/K 3SczQzpVv(Pja갖ÔM욨UݾeyhXEK\~h2.陝mXlִx;;9m,Jj׶I_ymsf_:鸸̬,X}uȠ,3+k޽W|T"_5b翰pO͞ui5| Hlvl7n"V-~[jQК]g6wwFv0`T(*ɺw[^EnS%vvvAA"}ii":֬X,=た[CbI=pRoxˆ5hl4m+?tNJƒů,^2xH/oDW!1|M\p^+`0hqJJN׵sS\HJrm{{ t|yz'ܭy{Ww%Z87YP^I@ٟy[ٯ3:XDoN<6kN>ƌ:ϺO,hZ>1-b(#F|S #&i#G.Z{r], Srzvs~ ^f}ҋGYWG}Ly[a ݟF|7} i tdpAfMlPANFY)IgUu wkjd}AYnݺ"i|u2==9ZA)MN_4FJ2 h!I5)''PTP"q\cILAsb~Fn˨J  W1X7Ij@-4mŖD`nI'*JuPYҥ'' ٵ\I_ D "D D D D D`=lBB:7=+q׃\s|X3/'D6z=vе[߁O?3?{T} cct UF?7$&:5-퉹|̟7[Gf];'<*.'n_>?'h{swB :G~rnrN98̾svߦ}ID Vi4#9n䃇ȿج91#F~eԑcG#2jc'}+¨|;̺s;sNO}ٯ'>i|X.wػ y 95|u߮wΜ{nFqF5Z@LC5oOVc<1w^yy?zͥmߴq!ww6߱'v|ݐOeYS~+zzl G<|!„zhvt_-id>BD5S/f ^}-*zp߁DG Vnjekk{>)֥<=<ݢEk6͚4ޖ-  Unz:x^,X5[ Uӡ .\vp+k ?\mllD-[~yNnZϯu)//Oe.3+?QӪ+*QU)"TM,ix%kzםIɋ,][ھijHu6j'Vr"D``D "R\\bgg("ۗ%'488#0_妟ߑ#ن«ZϡC~ZywUc@d[ 4~Gq!!JCS_^QaCcv蔛78cĚw~UH90l~yz'}5Ee(){Gjq[;t`uCw=}G+럼~ڌk|S #k6#F^k@K :wۭ@*V^M40 @@@@@j4: 2S @G6( U'謔ꤳUŻU5 S,sR7nWFhu2==9ZA)MN_4FJ2 hFh#TaFFH!+Ԕb R@hiw%{݋<5Sܝ't\`C/OlwH7Bv&͚\Ch}s FaFƒLQ5/ HIRn DHOEU_     h@򕴢/!!AVM31"鏵kvjw _z뭛5 9LĿJEyoR0ʉ 踬(FV9l-[ }֭Cԟf3Ic`?'q~hk }K%_Ky8=&ߟ1YdJ A":rDYXX? :$7/"Čzʙd{3a/ =O _~h4*I)SM5`;wR]A!=1fXu [cQRLG9ϳd)Crto%ˤ V8-[;w$";wjܲE=pwlޔ7Mz)"^Ce;w^Tr{ON1#(0bnܼyORҴZj9Z7pYۈ8>B^%I?gɗGd ߅Wz7ˆCw]^^."_m:|3gϞML9Q[Ng؝w+3O0AөT*MnҤIWׇmN9utNnz&SlߡjFw=h8}/3C|QMw$Y@/Ա۞okۦ'.^tDhkeֲ2Y}Y_eBo/S~z}BbbXhG;瓒"{~b֌6pT,]fHqHRq練7Cڲ wvϪz{Uj4ddfo%"^"噕e6L]Y IDATKOQ#1zt/Cx 1rI.*ovyIb$.^ kws:=&^-dg7'T:ɛC0NjJ 0W_ؓ͞'ڨ?3g#ƌ=+"Qуk܄/b4k/>ξ&M>x萈|?|jW꒥ y,J :yv:%}HΗ$z@L>Rr鍛7[{v2///|O333WZ]c=͛6?f1O̝W^^>lplaCh/F*q}CKVMzJ<;L/DMUXU15ZMYYy\|hV?Vh4o۱JGpwWcF=ٹSw5qmުa>;%eFiߠ9@p ";'ťfXhG;瓒"{~b 777pPfΩՖk?<'7WQggȈaC?_1Fm޺vEΦg!2[DDEDr;^-#̙ԴN71|ͪnX_TR|J15-r"5ӳIɋ,][ھij~}Ϝ={6!(^NWR9|Qʌ""U3 ,lz73xj@T6U&$&9vl6;:::kO/|A.((PDݷ*,mu~f~6-"d~1TB欫9#2 Y$ȁDNN0N<8:84mt='[^ESRRlt#2Ei4*((5ijp&aa-[T5b6.xv~cy"̍WI( FȖKNJRE/ PR," dOT]=ۮPzFȻٱ̡:w?.#kbtAo \~уᄉjxfǶ]w{yf@@(ĭ&L~y .&"A lP I3o@ؠv w5Ǜk7+rRy~f_aBFJRH!\LAJJ@@cD FeGީŒ BRB 6&|ZhZ׽j@ ySS/9Hޜ xhnŁPVSTNUzuҷ}]A!=1fXyb?E?*EE^ɪ7fD{bA11#F^VFe2| ^0o󫑽<%dzT$GKVL xxk9y͛׭-5-MZ,giӦ/h'bOV|+>Z3<١C7M}tzӠ^={\ػWO9{rG_}FDɶ .98O<;L<"N.rŋ,zu"ҬYӏ?X~KiΝ:鸸 \ӉHDU3O0Ai?j^{ϸ;wQiZ~GSqqw^f,)3Jh<x<#Q"ED +:io޽5##3[<== x׸ MֲetWWe6~gUp""R\."T--D ]uXaT ZpԈF ϟ+V643+h4\oo>NNL=N]y9I^ItE)3֋V-NȤnT4<jD$9%}-!1ȱcf^ՆleCiEEšG.]ehom0Z,sNaj*P!sUv HEs@Y''yx<9{/~FO^=`(}i└k爇LQTo,Y%GZ"V?X@~K^_6FciSscU;ʂxeұ$s|q~a@à2'{noܝKz <}pP@E@@@@@@@< . k͞{}F?:coߣ6u !êg :~F/7,}c٬ϿlڼCv:np7z{֌kQ<$%L6WԀQcܵK?*zg }w>,#3{>g.--y#9n䃇U-U6e1`6s&@ȨGg***h"Z[n^sE1r_Gxqh-z5'7YsbFj[k%һ?3g#ƌ=fww[w]-@EEE ިR,gonώmΛO)f[M_=9O?1 oXӼiO?YÞoƏyJؓ>?Kh4xcksM\]KKKKJJj`VvFSyQf?>!1QP&Xd29zt׻DG_*.. oKMK7lw٣dw{9jHOI2\S /f6R WTںb1͔:FRO;:9WE E)u+*JKmVPK泧N @F`~n_hl֥L&J Hupt@vEl}@WG}@PvFzpHG ?j()vtv᭼*9:J-Jj4J\Qz4q:KJ/oRDl2RzT֧ݜ]MѤwDq7*q5hlܙu9cZ00 z^ иlzפ{&l۹뺼}_VM[JI)cڹx?5{Vqaէkoe Xݙm_킝:t [X,۹xܘuLW_f'NlӺRfy'b~^{fڶ⒒V-Cgo􌌈:up͏n.{iԪAozwU.㝻w?5gv-_\WÏWz+/eYO[jZ߆M^{sD={s]ee 8aj-5UOGӠE~ŔɓDDV۰/tIq>`?MƊF`gZ9mش__[j[#oVipV i<.>*EɓC}}ϝ7{{S]g-PS~ҭk&%%~sN+?j𠁦Qf qko]*EڳXaJ?_sݭkDD]?[k*&{yzAe=i::vhi󶊲2XM&D2b.;7qmӪ?}_EuԱԠj͡]ӢeX?V4meMW]j{~ xcFA+!Ujy`4kst\]+1NճG...AixXX`@ΝΝZyf*ƆPrVޚPuZ=璘,_X'j pwwԼY3^w߿_PPgb5ڳ`NnnyytUw5F7xv]PP7zpj+w/l2UPiYٱťXQ!"FcEƊ ª5LO#G n묧Zz_믬OR%]mѼfwRշVX֛^k?[V^ʏUX*R۱Z,m;vjտ_]jZzNF={&UҒ;}켋tcf\qYmtW[[Xb_HА#nn.. ۶'O?7h@VeccӾmQD< jjI͛5D,vۿWbZ~@D}zTo]XX7mVGsrsݚt:2{:<_yww2i47~vs_7y&wnr}?Z;q&MZW[[nXU=3Jvh69%uO?;8r"rG*j?8;wvMȾ:uoѩ %ż׫cZVɔpDHX뿾B;{Z^VZQgkjKKiJZ,e7t:[NVYVTQ^fZN9$fhZZQ^f2EDV;jj(.jmtvb2uvv%E"bd2U(!*fMVl5ZRd(ZWx\U;8*]@hZVRTS=acXж[^/~oA/͔.m(/ߧ+jPQ^QQ^kF_BRZ퓱d4UZocWj=>=[,긪~^j[j(i0l؈@o]ſ/Epd3j$4Thh@ܨ (@/Cz@åR E %N.FDDѹ0"GaEGg"W~^7bf9/;*Q*ZՓWZPh)I^z" a}s*EA!Ideus/n 1"a>z*o7B~ h@H68IƥEbG(ߥ[j۶\kh1I2N9Dԥ9J3CTOwB.VٻP8nAR5c8'3!m4` &BpW.&5?( Ҁ-/&IENDB`gr-satellites-4.4.0/docs/source/images/kiss_transport_flowgraph.png000066400000000000000000000615611414055407700256570ustar00rootroot00000000000000PNG  IHDRg,iCCPICC profile(}=H@_SKE* :Yq*BZu0 GbYWWAqrtRtZxp܏wwQe5hmfRI1_ï!0eJR%x?GZgaSy8ʲJ|N.Ь;4O3p `z[m⺭){dȦJAB7偾[g뭵 K]oC`Dk>3~\^r(> pHYstIME&/tEXtCommentCreated with GIMPW IDATxw\MmOiH),"#ھٛ72"%QD[eK{{{W)Zχ?s?=}=EP(B!B!B!&B!QB!B !B!pԄB!B8jB!B!5!B!B!BGM!B!MB!P/ `.kB!B!v\B!B?r&B!QB!B !B!pԄB!B8jB!B!5!B!PoOG!B3gF@8jB!BRGM!Bcjjړ.5!B!B!BGM!B@MMM޵kii}M!BBz;<ׄB!P\zuӦM{)ubHHslll_BܰaCkkM}}=n 5!B!)eeeiii۶m@>>WRKyСC;v찳ؓ&B!:]@@DGG'--GW͍Ȑ!UUU͸pԄB!BP_ 0!^HVn75!B!սz*==]GGm}M!BuČ3xxxeѢEaaa1qԄB!PJ;%22qډċSN:!B!M~iy&B!z12CgQB!BӳWٳgb =B!QB!Bu^z%}^@@nBx !B!sM݇"x.!B=kB!B!5!B!B!BGM!B!&B!Ize\|kX(++UӒPJOՍ0 :}B+D$2IZxѽtɲeep2iNaQĥTExΦ4tdDȤl-!=&r2J|_[؍t@D ^(F">xwo._i\tY.S7~+ed-Y)( VoQ]RYJ)T2iG.^>M WR:9+E3=E!B/+(2KWG<э:RWڼap؃DF޼}YڱЇO#Ǐsis E o&Jx!/h6Ăxml4HC]K[S =oljt=^JRmߍm>IJe?$ݧϡc06ihls품{a%ŭFWJᙜ„ؖBjgGM&((4rDṭQSNFڑC򹽓ŻԔ G7˭:q6kiiI|Jq'@Qq!1 P#.Ɓ #1cZುAgܧytJ .~ b+B!F@8jBJ<]}Ve>lsײF<<2d m.ݜ6c[[[/:?ܳknvv6TUo۾ S\ܵ4uYa[ ûM4r=G?7-Xq5jaIGއk7.1]o߈UՕWBӅ*)0])'$!SSӞ\Lu1 !5-Ibs-v6U1AAʊY.dі&&C.]+ckx97c* ]!7r)D"ik]b`FxFCG{)M.p9NWגJxGtj@AfLW%\JB_W C,ĥUp"P'd] QA!"A1}*Unmm=yHLnXg5=i-kRRZ[%Ȓ^s,[MZZZ899UU;iɢ<<<jTWl ⒢/||ݲ@Vl!S]G=K5w%z3gΔsMlMMM')|WJմ$5ԵӻsM!s-\2{I/^%dΙ5*++^d{qݟ> KJ-I12u7g ,b܆Jan#cucpW;7\\P&R&_zATT9yyEi)Y8O`5<1` k,V~g1Z+I6fо|0(36E+[4ueNe4cj{""{t/B9rlIoΤiRUM2љ,Xcryy! C"% !~w||).Aݱ{X+%Yaퟅ]x/݈- /hodo]X\&M@ذt\M]Yߣ{Y>mo*:'iSUiɦDD,M66+.XbbbYYٕ+W"##/];v~ddd}}Ν;,Xk.UUU&M]r۷׬YsƟUqc'++:o8r=$8z‪&y[0G=hiiqv'-%1˫=xgUY9{['e56U qԟƪb8jBt9}=<7"srrybteh3 .~qdNs*\p bGP_7+K)i)Y dr6dSI:L36UefEPwٳg<ڦ3gʪǗpv''璅`9͉&V= <H@Vv垌S]$S=_%`"%cpԄB}T_.SIiq`PV>Ϟ,>Wϟ?._E k,V`77,<ҕƦQcYw9:8 \HlF]z!#3Z[)g%EAg\6J*{XBWSTTc ?|]{@6$f!ƪ@u)) &XZZΟ?RJJJPP0??_QQQOOo߾} /_ KT{ȑ#yyyL;GgSW]Ck=7BM1bwijh8zn\ Ӿ*[|ItDQ c]kOo(޷} F338v$Yk.B&Y 3eMХNιsz[W^IMMtt"B=Ę1cƌC7qԩSN%^@GGýz#8KBI>vɊqasG}ɓCwl[w-w>|yY>^Y1I}wƩ?!~C{᱿CpԄ& Bܳ(&*F 6]:b:EbEmG n\k3ae2$c$3.MXb=!,\}~N9VTT_]sϾv@{G]8} ##쌌̴;7Oo"gڃtύBDd2033L] GMJ~RTG;i)R [ ZὀzkNn߹q%7p=&(| K{G{^[7\h5>=KdkF9¾֗/TgΞhS'.@`ᗃo= !B Ң={.OG}Ie)%>mEW3 '7iJ?um/_>E7 7`3AHH؊J9>24x/$q?6%%&ўh{$I^^9#3mӆe|ٹ{ !BGMu wV[[WBEv EtkK 쌪Gu55ѱp|?+ti[QUA 77m+477G uutDm}yE7de/r1>-B!ott5"56'K2_dǶ0qwn,[EІ`碀ĥ5綃gN .PCGTSCK5@QM41>]ZJsOk:Dƃφx̛i0G=;^5ߴRL:yTKsIRSރp2}Ď-XU;SاQ#( J*>N$!A&NTR ?F=|aa>4ucVo7>[:#DڻJDgqڕ'X-mk*K)+^d~#C&+ +9>31SN }[d;U# jYBkkkԵ}rڣVUez!\ٰ~̟y3Ҧ=]gq1D,?'DBOA!Q SIIJ'q'?36ЯF?Eͽgϟ,-+7gя؁3Aw7{*#S\RhhlpccȾOF5 5qq1,>FB</&Kd4š˚!G=bRC CLdV({' 9eaM]٥+UUUҾc^UU%0YB}[QO8) (,[UQ5'7[L "d uAgnjk&*B&8Y xIe)[Lt'Zȕ)tMUG;ou:2YiI/O-ֹLm!PO5IH55KdǚZX vNcރƦF$ݦq}#99 ]999#׹L7@IV6)*jo RJJr^qI ԹtӋgd-]rЭwOIbc'd()OvֵgOYt7,c iy+K)y*$$b>Ē( 55s2Jvn?z3I677 8z+f:qPRi=yxx:|]B6jj> No7bin> |fÂs*\p 7Wgg]]}[ߥҙ P`uԻRo[RQV;r?ͧ{񜜜RS*++H$: ~_)ҁj ~C+D&Sf:\,NPQUbpQQr'G?ف,!y99'H$$N CoTT|(kaZ&qq bFO^i 2aRGg~~S޶!n+: pr5$1Ԃx-zO}+ .R܎RPPjsQBBZoRhkyyyG`g˗)++^DIIMA;ϘW0t(]aVb-#̆XPG!p͔T`nnnAf3ϱuz-q>,!4 c6Ģ3P׺v%\II f*++fyjF[ t!;BB†&0kƼ#O oKP4ue7lZj4ɂxD@!:O[xFqIQ{fqvs7.) ]4 IDAT M8RJoi{[IR {kD~Q0uFRr"CG32T5k/pUUsfͧ:sQNN4WL´ܽ/0nd6a`w"d҉L BHQsϾxg/ ƙ>\gL=ONpq$bqbF55FԧOٴUo߾-]17ֵwh"~T]]ڸw;F\,9zͫ55|;@:=i-kRRZ[%Ȓ^s,[t"ejVk!ⷃnG<K=/6NAd 7cN9vā/4@" ]̉GX9mBBm#򈉉s3C&,m~Cwl[w;4RJR:i~c{B >Ȉ ^7Kgz]b5l䧜ww=a2e%ߎ|OP.fzRJ^Vtٸ)PvmzL;dlB`LqdL+3@1-hjjZCULL_x]Ɂ'V,IWq}< !5Buu}~t:t ӆ6-C"615IiO" .LF_@DD,G9YyjɄqNc3Ra P;:_M#,YB-BۉHqɘNI-sJxlTR~W/6eVnfie)J~kE el%~^L WR ^Y:KvNwTFTcA8wژ#D [ ZὀzϏޝL}'T' 8rL/ЎyJzc's2K^gSr鎯*ja7'6) ,@9tp3֚miiw NlOKMq$)ݧytJ-  /8HAjyo߹QXTx /golGMv|ބn҅/̧'%';g cC'ё6Gf9ɒP 6ʹKc̖!PdV˴&t:k&prrZ qyiڭnZ}/.Z6@߈o!(_ܓnb*)nn}}4'7{# Ha~ilݶ>,jW>}z'v2[GڳS9s=ѴOYYV'Z/eggAAk.JJqzh'{yf1ڇIjhHl˛jȈIf=ssͭZǏe˖|||TUUGqy뀯FaKF=I ;#3i7h$x (((#o?V||D/k% WTձy"""7TIH+K)DS/jmf"jO;A4Y/Z!,czF*0*lˀV0 P@d'n&0RZuTTٳI$^UUu:yp9p'N4ΎaߤfϞ477ӡ>v546?Ei-޾}-B&3S;^$13mI9)~.^vYdLsE 3m,!;Hk:T`P([*"B&۸t e,ĿnHD{}E=v'}NJ={U|555Ǐ6lhmmw붱zɓMFm666!!!Νcӌ+Lcbb&OBLa)P5%~Il1-@ьuY 6c|iYIV1y/WN+9"W)/j~,>&Ňq RSSSB_='qo_')%ZdMqqJ-u-iTdC"ޤ$U?TRy.a=XwƆ&̙ҕښ{a.Ե=1 J%RDIIi[vۜGv6A3~->7(,BijjyU3ZPCa_0&˒7' *CFV*B8>V}gW6i55u{O4*_?}}RJlT,ZVYJd(MJ+d9N/1;18Z,lߺv" W\R{VtޝkUVYJ {kæUNƾ(Оh曔wn?6e旼#왮nw;umϹV;HIн96;w.X $$DWWw׮]Jر]VÚUV=zJoeee+Wܷo1UUUgfӌ۬0ݒ8zbl}mDBId" Y%auu))6)1 VoR_>5TQh&rHG=vWJMM6559sfVVV]]]mnnnC @}Ol?f>w;u 褥Q[,_'1ݒ߽{?p@bS`k6QhCW77B_mR^EIke)FDNH%v{?}PRZ|5mm=ٵ?'?sAa?BP(ZD¢pOs !;*#... ._@tpBbp$Ɔ&YY1JJΟ~#X ٰy(~x֬Y S A ~'8{`[‹;6zp 4Ib)CEHdv Et+;ۿƃKD$4uGQkkk?yH" QjjYn <l`sK +ܗhKiD$yF"f/lGCRc dedbeJiLP;Hx@9 *j`Ex!kĬYBCCsss/ Qi=I'~)(>NC]nXခ?Ι6^:Ih_=;|!A4naiJ=qခcL$9y~o?o)Ԩ/X͘hh`޲9d ם^o۪jhGVC~ kژHx&~EMiWӒtrtF/Q!,Zߎ~ҲysQ7 qw3Ǽ.ٶeEtw;ljhǾf#{N9:sM1]ӤϢo~>~#NC&:fffffftG1bĉSN:uO)455N'&g]]۳B{2ꚛ%dIՍ]7Nm1 3.yذaYpqqa)PQS"wlFcAezLHUg&u|ANN/'''\zh8icnݹ>}.2Yi9n߾{D}H< 76jҨ~C}LBۗ~VRo7n }8&;ri+RYi>sv}#(ʚ.] $BPi)[GVo۲>ݸzƑqvU،p:SG>|֍΅ IIʓ_j _%dh;xQQʪ]'O'xDGJ~:dܗI/ '99Ɗ,YښԴfc鈓N_8~ʀ<1j"V HKHˊq>[吝gi(2듙K9|6ruqfm{+59~~:=v%l;pcS ewÞ 3v-G`ӓ!i5ޛ=f?}ĤĦ}\|̱UT|u}9Vw1X1/ׯ'KKN.;Q_zǯ961buv󑢢2tuk|f{Nq1>%)766QK6o>{ңϓN_3"opM=WI/TPNJL7ھ?ف,!yr&qq @;(M+kjmGL)(s_c5dB=?~񝌽?JH][`$$N5fbL LHwj灀C?İ?1yyxm͘ I-FcًBQB:ی/ķ쌪JӍ;<˗)++^DII8Q1ͥaqg<~kYuuՋxVc#$$&;b?(%)(%bׯ`.'q)RR2듕|mw>MHJJ@AA[Ŋ M%L/=|zL;L6.bL LIwj灀C:ЮL! t9( !5!/<"ST}fv+bL ᦃͫ*̚AW1\V"I)9vAm&MʪbLcv`댤lUXxh]]mn{]C%2F-~~qc'.s,..&f_[z-#.3 IDATlesbX")))zĿ~{p11q7quuI^~?&/iɴfڅ3XUYu?z P16ZL! t9( yMmyuII.wmez!yRL=֚Mf2iB`#@= Y;㙐pvz @@@07W]7ke3I"dRRrbǖô>}@U,>#_j\S())ijjÇ>C7І}`BQq,kkut9c lNN΍eͥԉ8[f :w0cHg1300bYU.dq^XS[C\g{3gƴFuek!DKKKX:O,QSt1(QsЛ!'N2-)-%C<%%9hrUe)6fӸ_˟E}rÈg)!/!ݼu-ٓys .X#'e] Z`Ebbꩅo߹q۔_Fϑ9fLmVLel>;i3"d u A™s~_Si3j*K)<Sf ea{C!?ה4L?n4Ф9}x,/ uu%U/:%x'0M6)nߺ{?NG{geeU4!{o}~~j`c!ӎtcw ;ܼqgRR⮽>!/ZZXt6 Ѧ?S`ċy? 5ƃhЫ:oӸhb-yrN?3~7Qfwݧ:{$Cn^9|l iO`•q;Hz%%)Q.߀M@SeeЛ!AOJJo޺rPo! >;3#3-KRr"YBRMU]el< o~)y? uvoaLR]]ˏ?@"?&AA}x}FD}wGcl>^>"[_Sn߹lHt^^b޹Ο:ߏt|6d`?|q#L58~ˤi'G"gO_^qݨ---z[p @HH쒐 3vBkQQw"KH.Z6vDjajߩԉDDYL>~8/,+/%fg|=j͉ƪfi3TSU?ߏ6ӇqЏjnn+())Yo@][&U^m |torϻjh?tdOUUelT/-ɽO`^B}xWjhh㳴ls@}^fz./)++UӒQƃ\d)m-׷47}oWӒtrtD5!,Zߎr%dI?4B#N}!&zU`vF&#^%Z8iO  O?)d(((!m;k_>B|^&nn!C}6jhl8*3+]LZjQyy۷E$awT[[sI kQ#HN6۷o c7() `m;8E]ۼ%h}EŅNr"d3czF*ׄQ I~RFQ@LThӗ  jlr~ m˜51bmBv^~&Ի`^Swﺍ+.^uvǴOkl+uYYY999BW>B}3ǎ8PP_F=?+5468+6xCׯ_pS z !zkX )'SIЯe:Ip;taaaMQBN355t]Oi2_`9LsAfdY2)]{}DȤw)DZZZ9 qdCu^ 2 纥 ""dҺ+jKSFL<xJ@+(=ZFQ(题VUU>pNx@Slr]x8lBGM!:hТ+-DΟ^Pb3'Co،t>}.7;,600/bmeko=xxklo!pԄBmޗGŘ ~1E=]{[N :w"jaܰe0Q``dԓQO.]Pu"lG: aښ15m $$l5ld{OTISCh3d"զ$[ .**vؾQ52bSa6U}Gv>?0_Lu4f. ,,lbb!&B|ﳌ@?~|ٚRKTG; 4 ׮_"2D"ٌt}$)9}Eg+((hqd<~D"0[x::1cc̠ ƙ$,ZV]]"1TMU>}ȣDL$%QyQݳ?2ӗn{]wiϙ=왶ٙvץpU(Z! o1$Ϟ !Wy'z>޿z9mGyxq ˲`Pg7 -[f,߿##K_RžXG߾'>4?e{**B:IQZR6<|gMvbعΝ]O !koTgү]q˄ +=U?XNLs~ոB>i6LԩfE'}tw>3չ1|צpObYf7=^]On;D[ ◟9+g i9 J0k¼ߧ7Gj\*qci˥׮pſ= /.s 0Zͧϕ8]}<#\.^gA&C<ǁѼ j=(eeʎi.-h\zKBW)+cU꧞{@0xsg]w>ZUk׭xy݌?lŽ1m&"Y[}lDeɋդt-ϟ?7cU9oE[v`Rݾ=/w`ϴ,qvV(X+x~?]O! ‱&WBv@ĕ zO HM@j ҥK# k rJ;|08` ba ~vM'̈Z:qXX`0XXXH? 5LC  yM ~njUeo|=l,z^&XrؕH\kR|>BHMQdgg&Fǎݚp8 5IQsU]]ڪh ԕЫ Z[[ZZZݫh7nr$I튢444ᚚ!DEE, 5G~t``d2%'' !FGGKJJdYnii9::ZZZԤ(JqqqMḾ$IyM`Zn,fh4 ǎB222 :0[kC4B$`FRx<g4`{:W塡!n(@0 ,PZɓIII[lQ'5Mf fŭV#l6m|##+/\& K,p{{=0z}aa,=ϖvOǗ߾}@jC l|С+++ 5& kqvV(Xx~?]& 5X ĉ(aɒ%tR@ZVO HM@j r9GW 5D<O0+$ N@j HMrR@,6- zb}7z}II Rݑb :DP(tĉE۷oS$Y.]cxBܼysxxxvWyy]-[t:`c `Nh4zredd\.ytz^YVk~~FxBdeem޼yBIaaauuB$VQPP IRGG3Y+**^eѢEQ[y澾n2\HϧAmڴl688xiSO744Y,7n.^X9DqAS_zrL&á:;;/_*?T$h4tnܸQ=X՝={'>Ba ,.l;ٳ'2R\\\SSsI~s犊L&Ssswء6::ZRR ?zwyTH222.]ښf6#ccc}}}ZkX------z~Æ [K,˥KGFFG}>X8ZZvՑp*)IRs,Y6l6wvv A4ꭉ0 x~MM:]zueB0 [ZZ,B\Yn}뭷" H$Iijjlˋ1 Y>… JWZiӦC=Q;2y<!:4\A3Ƣ Bd0<KOOiǎ]]]]vi4RW"==GegggggOtvttdffF2gRRn탃$M. B@͛k,I^vmpLΝ;ׯ_4epppsz}OOϢEFcRR$ICCC~3rT HM񖒒vZEQFFFRRRdYtFp|&r-[,T&… =L=7W\\|@ ̴X,BF;;;'LHmzt?~W:,Lund^ΞNꄫ7|s|S5 xह&X"c)3M{ŋ$%''Y&77Wr@ eW\u4yB޽{ܑP({e˖=0?>,cM NE1 |իW^zBfL%X,E"h4>c }/~ŋgddLs"BnHMjZկ>xi@j KZZo۷M 8todee%w HPItp8&膇+Xd &(͚|>],B`0HWH7^@jC&H <& 5–MHMSNR@,{HMQXV!+0B& @iZu)ȎUUU*RWfBK 5RTT4W[[=vَ)@j WWWWGGT|>U__t:{{{n&^r.]{I=}ҥSN{ǎ|0xkV8Ύ jU^~ $m۶n[I[[Tgy<rzommh4j.((hmmjiiٻwF޸q$n+***&4&j]]]/_B999a@ĉ{B^{V[f̈́ҁFɔ,-))e%rhiii___SS(555$i:5 .lݺ`08N#0_1 ̡4!5xZ`0lذaǎyyyZn,fh4 #ZhXFFFB][8恁ɔ.빃|XHd((Z_!(FQ_H<(S'_Ce'$ƚ@bZvGΎ_ {zz<hȲ<444͚Fcooo0vZIfn004^7)OZɓII)7IDATI[lQ'5Mf WZ-[ vܹs$/@j[nSl6f_rȊv +**:7vHFZrʕ+k׮&&9QޮqW3RKKKS_m###O_(}|mn@jx0:4u~򓟜 +++S@b = 5 HM@jR$ VZ:H85@,R8`*5 HM@jR Q@;osIENDB`gr-satellites-4.4.0/docs/source/images/satellite_decoder.png000066400000000000000000000122551414055407700241700ustar00rootroot00000000000000PNG  IHDRJ ֿyiCCPICC profile(}=H@_S*8dNDE EjVL.4$).kŪ "%/)=B4m tL%b&"^D:я,cV_.Ƴ9՜ŀH< &^'ڴ VUsQ.Hu71ө9XhaYԈ'SXY+UX᜾uCH` BA(FV )ڏ]D.\`Gd^R880U>v |\?I6г \\75e ٔ])HS3,{ tz5q pp({{r~ pHYstIME 3tEXtCommentCreated with GIMPWIDATxw\SgMXIH0 TkE@ VZ@VeUA@@ y"VE|?ssrsϽrA4.\D8qD/=ND|Yu x =wMߜ,@)@)@E P"P~`4&KhbTFebׯ`e1/÷~ĻT {{>G,|3++~"^tj:j nxا`Tљ++<ǍS<2[~ÔGh5C랽D"!+<.2š5qO4?ԧ\ho+{T \ P z!SP-Y#>t{%S@\̥@s۔h?TJK$$Άrb5R9qId3>)!){+/?s75O1nyF_.E&/MfP-[Dz/@E-ERu䈏yqJQfr4urT(vL9Oq凣w )הr4qԆS,x_M?bTiR;7_ccU,]7"z.>DoJY,,R)Ǣ30՞=r4\U U s>55&LN7P~ıC#Ǩ3J(kXO6ғYx^wŶ߼[#SPf_P/ءi9{.WJ5͟pϮympZ5,~ꅼL9b"E]I?trje߽e-*rgFx{KOݼm7vS; bКsE}75-}/zZW*>8oIOOSTT1N'ZOi˪g`3NZj5~M7A!5oy)+<ɓ)Imcb/=}k! {ANNv"dekĻn|Or,=5C}C.w%PKSƙ/++~!aÔ451(A'UEEEo`ղff^Ա%5-tD"o###Cㄻ4*LtăĻo9,)!Y]SJ$FZVmBF9;7-'ܽ Ĥ@%ܾs9⯄[2^'ni)sܨTZAa^UUk.B"jjk؍li92H axU 0}%C>;if=ֲ22X9ӭUg#6uL9z+V-12*+/uX]<؉SGf;g0iZ>Ӧ\,򏓊j(J$F'۷|4e3B45Ft؛k KK{}Vl*++F\5t" \035n㌉ ?Azl(p`w9\%}e=Λ77,h-h"SLiV]fY8IJJrwwwrrZzuQQ9;;㟶ƍ9 $enK#]G{їTUUzyyEGGusΝƍ$)%N*3533#nnnyyy =, P0hE);:}@ p8mykfõd2L{ ͎uP(4eC/uPZVba5:ްaÑ#Gf͚v'((MFFy_XN ͛"<\CέG]W^+---CyoKS};9-%oٴON^a! ܽ !i)jd2'N8qD|{̙ MNa}zپBRB]kNQ('xK jEH/(/AどTiTY=&ɴ(jW!6زm]3#5Y67{aB@kk˒ SmpƿLMDk*/o$)Hg-y(U< ?".ro7/mdJAN٣lpw["!9o\Jsv>t¥NJzRoOȟgRO߮FQVVUVV %ت ?yoeKWlSYҌ`1_Iضg-79\̷eytOAA;fxƛu+|,3zج/K^/ TpS?^˯}/ 33}s>wjFԕ/*zUP'hSUq>==MAE1R,CNEE l';hk@uۮFH}!(x ^R4SFؾ-k{=iM oOB&S\]~`2yTeJlVF@&tUMЫMMK]YPe %Q<烦'3>jYq#~{fAUTz J`G04hA#O_15n0c~b41jeVNn,C. Mћk^>Of7D 5/95CiZ1и廙Qg#imgŷ+*˃~{Nnf1 we+Sfȥ(Z"4ׯ_Bd _bb/ji[ L"2<0%%:Lbdp)/dim!9חধ(+/]+SG4^q)ɓthkwb4_vӷJʮ +*immM|x,,0p Fݱ}[זxc2jzqjMNmF >;*򒮎>JXvK/ە2Ԅ9dvg>YM{xog:ϱ *bOE3IX٘df>;|dDžo^ik޻ޔڲw!:]@Lneke*NUUnHC>mh\ϻ3] dE o;܊KdHOyW/{ *(FE^r]D5S[zOXwzEԭR({v40#pSF~0k 6:ryUmO'12=}?s9Ϲu|Zcc#0x ^@x ^+E0 | ttX_ۏcZߦ׫@x ^ 3@I+b ttyx1Waoo_[[YzRW;I찾8wɓ}tU111L&oՕ$::y=3kaDD sxei}@UtzqC+C|!Rm +x @x ^@W ^+KSGPP&@GWXXI+љveddox{ItqLB-=mvηhMrJB2t@BHmm~/:MMKSNIHUSjXkkk;b}l%b}elll"##w9/\}Ο|>NWfʭ;֯ߴރh8N2a}ظwvAc`]]JPy_jkk}yie4:m֜i%걜Aoe+BΆQӔ{H ѪyDS혨k|ffTTX&CYHt Qy X ;!dժU *..qo߾Z1pWWٳg;88xyyǷ}x.egdNtuJO~7 04,w+<}4!dӦM7n܈5kVxx͛ CCC'NhѢ˗//[lΝ55555ӫWlׯVUW=%D{!ԥq\DDmwlĦ-kvf?B\&NsF[voϲ uɰScnʞzMn%I.1&&&fys|i4׶[6P'"hijoۼWNNoʬ7W{rAuRӞ764fL;/7VnV~t+ʕ+4MNNnĉO>]zuʕ*((_b[sM6>|x߾}555_?:QѲ{X b5΄q,9&xLr\Gj?B֗j7_طW:{?*7 J3tr-J^ޛo!yy:6VVF=633333c|l``gϞN= v,==or`X_wnyyY7%e)I)II)E2t!DPPPIh 41/OQR fUSIJH9m\׆Xgd?2O ٸy g,ŵø{<{T^^f2`P;77NKOnYٮZz {wNZ?@5))gdS466nmYٮߕޚkm34蝔=7;T7'Bs9r 43q<3׆|׎w*5]#>̬.nZI YQ7͞YRZj|QgnjiR@t:;l{W~ "+`sTtdlظ\>F^.1#֔ TIj;7G؂kþ}WUUC+Q55)*(OpkY6OAǹbi{ޝ`5ÇK1\ cPڻ;0q)ee|:04/M5i6u*[I=%!. W9ݫ(..!EXEEMFFk^B4! =ia:6-z?(vkC{;G11 RӞ3\X!Кښm~xi&fl~eeӼ\4uv, tEBȔ~pɞzcYBW_LJУΌ{?5s-G_pϮ>Utck ׆=t~?BNcؙh;}ERR66嗽O'O? /^ϼr͢vo3y{Z__3#ף"\G; zSb]:cʍ_ҪE+: zf R;!a=BȣTw0yf:`a*-ܤW&>Ly~UU@WYBbcQQ8u&4 BBo~M?qնJKKȿ>~,OJZrcȉ3  <[_gei=>eV䕻evC}snVCځ&fuuN5T*o!$#3m嫿WV~ ?RLTed36X0;T⊩rظu=p${yp6 ((yjUUMJlnE9tdOUu Kss+BHޭfVCLuqc]dddx-5q{hBB[UUl0:pZ).|x̊.&&޷O^Ff:!̒WrISN1kd^+&{P, *'} ^: :hң!d.]W\JAWp9QOl 4 WpM ))o[cc5ymkd`!@;Bj6Sg̞A_+V/;36*o{ee ;t8Hg'G>~q4htea5-Yw^dQxC_ٜuWVV~zwż9K}$:4uKW̫Y̲W fLF VZܟdeg.1k}9[wlhuu Kub7qq *@KGZ# grGQAooDZN +rBHY:a!禎[HXr:m%vгu?*_"t:m-jظt&=cTIrrum]spm>某"!1NRRjp*^߄! tE=]BHiY 3^?%$$q1鯧~l]QAg}YbRӘ*K2ϒ<2ۃcW3Cm=K kB`s%lc]U[[J`ȨlC 7sT_Ntd}+25&x^4gcc܍> G,9X2 3!,]fɢU""TZWM6ge؇r;&|KA|plHX!bn }&FǘWWԗAQKI JIIgdEE_khlI #˪Dz57 8_8 /+5Eʨ1*Rgf͘?i„q /ato,9%!ou3{HRgH|T[o>iŒsOVѐu*-6g$BG]BZ>--k?2u'%=YmFQQaocͅU!CԵ{5h<}arJB2tH8}qC14ܒqd_)!$(4mZJ1QWW A=ӦM3fر\.97ϩ8'A~4NwWsdMTTgO鯧mXvrss455 Yx`}d5)22RXX3x fV`3;vm1覡#|nCCgWwu7~VuоYY/K-*[8 Ed责A !q,i4[‘Y!#3s-\{͕Z/<@]x!$5y^oNկ?ج#??L'Iv !U!u Dn3!L8K?H*j !ի )ڵgyy9F@+/,..qo߾%TTT7_=!dժU  eYcc/EG8wɓe\aчnaܽ nF?LMMMpye97"b>pĤ'lms2'xdSVVx117%,9rjy* C|wQ!C%%\Kp$8𬁾QYa?ھ}:rvk3b䍨? ---y+҆1NkllI.MNo~HؐTϚM"4R|ZM$ jlr`Yr֬Yᆆ7oUsӦM7n܈ԯ(44tѢE۷og[^^***BCC/^o߾L[;w\dIhhhAA3^a~t':kf 7VV~JNN"j))r_pg>/3$,04,PNaok}ޓ:z#ѷߎ>̖*:wݺtaRMND$dPpttlz%%%\ZIabM*@IMM755:ujfffeel>e0`AZZU.**։ؠA˩kc9%%W^4¡ l|S->ׯ_}(,y}}#BP.ԳF7n?#/Ov}=CwT>l))=yɀA[}O~BBB< Ϟhq(3޽}>/%80:pUSSt32l[8tcŶ#l#+HKpOs#ǃ{{jr}W Oڼ%˗/o߾=m4'H=h=\?!555,);;X_8g,4fNw(,큅c]٘j9x cU #m"5̪x{ힺRR{쐡xMq%⢓x-gl) &M˨͙@T،81N_6#FHMMnhl02ӜMF6%wI?e")L$ITԒ,-B^Gȴi.^_UCCoЎ㫪N8#......$$Ӫ3g0+KHH}GVXXXeeӧO Zֳϟ>}ZYY N/A^yU;2ZyG _)`ek5=IbfߚB` IDAT״^m߶n??׷w~|0mHQAv%͜%_|=k ko\9E3M̮Gg{[G",:H86J%I<,"or8jDhd!Iy _}:uidee;h93W#V\yС}}+VPsټy3FsuueVvqqիW;%//?eaaa__ߖy gϋ/ޱcϟոN/txbؙ%3+OɒS:rEZ9QquGB=}dc\˰75ꞔd6^}bhM&K"l?.-"?7p⠆ɿv}INS3۽$:y'ddE\)+tjv: gΝ8Ծ/IBBa]ꞅhL-T g"#G>/XLLf3QpM ((z_-;pǮMG}<}_F}l>OJM0q|NjS}jq?ZJDQVؘ[!,f\b9xhYa#$LcKJޥ~}w/©SSS/i) B&dg3y{"99IEE2L^n;WeU%gMuu9~+9#!L%R6| !ꚄcҞ_ ?V;%iS~=i<*..҄6˵fsQn7UW׼G8!ׯ_}(,y}}#~x"!!}>#>W?OOi+<{5!ޜba>dXa6&fzz.'Љi=vwH8UC; ޏwgޖppe2h5jZ#Z!z-3 rW++?%'J%O:<0yb.[Vа@:myܣC&))Iλ+4XOy_wl/##}tI 4661;"-%+!D@@XPP7F8G$&I~īgV-_OUk6NtB2KJ !*gN^r2.-=pjn~[%vM2jǏtyY3v`h/A}47*(?+`s]]!$G ITO6f 0naL9rDNIhC^f6gYwPYYi:Pc^le9 ; jn!7 яWHsWp@GWâra໇m @Оp-@A#/оWۦ+EIENDB`gr-satellites-4.4.0/docs/source/images/satellite_decoder_options.png000066400000000000000000000461461414055407700257510ustar00rootroot00000000000000PNG  IHDRV-iCCPICC profile(}=H@_[R+vqP,8jP! :\MGbYWWAqrtRtZxp܏wwTc P5H%B&*_D0L}N_.Ƴ9z@ xRf>Iз \\4ytɐ)@ӟgMY5q pp({{9rΥ7 pHYstIME 14D'tEXtCommentCreated with GIMPW IDATxw|'Itt1Jޫed! .\ C@\LAD{((JGZf8"|ޯr{KrId9.#f +nD$Mdegk3TKЪic{:i)<_jd2ٰA:wttpξx^DM]IsvvjӲ+ŭS{Lդy츣~}:whW핐B_2p8~^wsskתŠ~}U4jod2CfVvlBS5鮂SΧ֪^ZΆ'xy6mX_a4w?h44:RRJj~AhV%H.[˪UOLNTOa2DE'[).M֗d&踄|_ZE*>4nϏMH|5:?͛!L&+WJ/ժJ6v۞F^RH7שժe$8;4SSӟ_PQvM+B+#+;[z=$$֩åQw܏w\Б? -aKx p9LbR BЎArtlܠ~Me}7eee7Wh4u܅ qKW8;i/YZ~޲NNB&BG\SF!~޼Mgn IfYęsɩd6>c0,k !R4i̤Tdmm!Ф27Ww7KW#\-\k7Ze^~ܼ{>42! CHpB􌌬!ıg/_wpcud22s%ZRJdN/(0 qIWߵNJ'tjI&pv%<=N̬MK'0館kUXA&9O㓒M&\& ^[!8v"UЬQw7MZ3g<<4鷗﫾prAW:g2N W(q iOtjtlB\.YR{{'&'u┇ljo'][hҷoikkӰNm%WRrʙץTsR^r+d !R S[-lS~UkԡOtMj('7߀ @a_FzZ~^npfIьU.G] D F j}| z=o>ZA&$':?qƇ"CL,ʉ{L);Sk2#@<_AO<&}a;F0 ă ι*xQSQ __ǒ,=_pljbE Q oաӺ ?޵/Ma4igÞ7d.aWOX+r-7 *SQcン={.?PXU4n+4(nݞ]0oN͐2U1fh_{^AkW}+ptpj,k,7S4ӧNJLLsܙ> 7W-0˾]s윜U'}JP;6@=͚\YzelfM/_:y괫넱4kXqJ˷kҕKoX[Y͚ٵ17MHHj ԺezuJw}͒=m'O !>&-ma=znݾC;Su su"]գ ٢]'eeeY߾{g>_y=&r>Ch߭ˆ}N1S֔$ˊ1qnjkաS~'U\iѣGzd2 :]KbܘW~\棙Od֦-jiԠ~h..B>c6L&+/%KG!%K]+bb~ܴvB[[!į'$H˻IU||877d2EEG?_rueZFHH#\o)dR+ 3g-GմW&Lڶsׅ˗W؉Z6=|w}M,1T}NKMh2諯<~oF_.]iRU7Kho[)eҟNW0xsG=j䈡Ct0 _FԬi_{MQ#z. UUZ%(HZgϝǏׂ۫s}}tz} cF.2.?錏>^f{N-Zodb9Κz:wS ^l{{F lڲUz-?u۵5 ?E}aC}ʐ燫T_6}՗],VҰAWWR~-z`6jN7bB?ܑd !'{F1_AjuyJ. !Lf^3uB++k d땶9YRrٜ%P*m2l6 ]Alw0 IKYԿ`YޥwP }q-L&spt2LB+kkFzjdDM \.M^nk6|q7]fL[q]!Tt)wZ>7'^l6ggsA.*eD`yPRQ q ]`y3>UQ @F(rd;$gd>Dy23n\8rqqpTh~;Btfl6FјF<*ή~\ Bd ;B(P!$֏ru#Ҡ\.,W)(M&ht@<L<$t*^5D`9T"|\)b (h3Fe$UPKDEyQp1 NlSFJD"Xh4濔BǛOP<216,W:PYGjD |y…;N^diV.?q;}|ciZ~hzﻶXޢ=˾c:ђFwvMJ%\^Uks~?qLdiz̸姖Ok;M&oûFBTԙ3ן/Blݾc 4B(bbb^tSWZrugimcJŵ]u/4 lMmtl6oc%`P"O!D.+XlT(7o|TQ6X{nSJ(-7p<=̦%rnyx#ӣOϞBΞ7o !m6r?So//?~Tc=茺WNo7=%\]fxAχLr2*rW>܊eom_ѥf?<ɫ+uY yH'BZ4ڵ.&6Mjת)α Bzp|Bkll4]58wssL&STtt%WW׶_*$5oZ®+JK1ր ' Nw=Bٹrg!6_;r7GF\\\rbɱc[\`܂d27K IDATx#!!1la^6eFH]  Ϟ$-.jաO"̝yw6LAVVv%ŵ4c{vi[VVUlҶB _[{B,A kn֗~ԶSC\ Az<{j <{.|KmתCFɓ/ TqӺֻi33KXsgI{3G:ݸ^x~Ƴ­ǡ;>~Ф}o_N}7:mL'[e$ELpW7nMmBF 6STf[nvP*/xBrF`U:8*:W?z*^Q~ֳEϚk@êO-*qJjU?vߑkIG%M|[ep4mױGju =jUם'-';2!(B-[X%[mfj|}b Bߨ<קN~ŋ5e{dg4_ɯ[[[4-=}֜N2p0( ov&-mVcFLYoY,7̟tkV96#{ϿTNHkgf6ک̽'hAhW{!ǩboխMeߟã{.5men:^;]KznЄuU:rC;:99y)tKo Gs"sy433]+V\# wH8zŲeڙܴye3¿]d5+W.\l8M۶t#5/9%௿פwz}lL2%e̢k@?g:jՐ4$Z@%76}?klegB*ڢVm #S3ƷV=i5]M,֫V6}kUjYgш\ʡ2u U[ vf+ܝunV9Ó= Q*W-_rỎOHl޴)ox{ !v۫+T B>ťAzUT "ԡKb P( قFuʕ+QQ.["jAٿuE6e)Ӧ !jլפ5?*!ޮm|g}&$k }TNxMy{SyB;*>*{!D]_Ԝmߟ8y쵾 ;^jVc͐NvZ˲fe2Z~lLlYL_–^bkmeY-uz!D̑n6>ã]>^*G_~\/K jת9tYs}tIqMP#LvA|un:uű/Gw:wPZ !$CŤNX2Zi0ފޮVr΋1CD@,v@qӦڵj !slmm>Pb7ndhV|֥sỪ.|qnnd?+**cNJkkllܽMuԙxmΆ3We2QJzk-"{4oQ Geslbf=:1!3'=5'n9娴̣ד'o#"OZO(!!1i4iNN͚6yׄ5Bw 2`P_ZUTlXFfvaİz|9>[l>:b1GP݀~}t%_߱I/>{g͞8~l^TCdyz<_z})d.= }N͝|㖭ۇ}'w$ܘѣ}}|c:w{%Dq!33s9ڴ_%~>b?oX}m}g΅tukWZ]B swmd/gB[Кh,>)6,JVLk-"Z !DN|O|AAbڳB,v\ybNȰs/!D|4mgg|_0CO'4"5K&|B.vUŧ}ři"2I&j3fܫ/]p޽׮Mzmgs}72e+ YYj#G !b~=|ᓛkll\y~.^)vBDp9vM%ĉ ḐDej/^m'&(Qq4JL("y.xmZ,pիyX=RQLX/aMEq.y{Ev-6B1p,2h_Mx8\đd !쟰u5/+B.rq#O=ܰ߉wwhHHO(g2g!x#P5 4F=;{';%@@@@@1a42Ҫv%Dh(r͛mE ;Qwd2R"rEI4:])ccrc Z. O)"@@@@@>-\p 'GX~з9@GlҪMΡc'Ll\.oެiƍJ巗vʕ+QQǍQ*jAٿ>h@?BP(s-ۛRD^|}}S{.yyy999ER0%UPRf_jT4.Mں͵~en߱nMZ\!OMdddX#MdhRK|||AW-$^߻@i^Vj)7憸{j4%[B!7Zpc-ZLL֭ߘ4ՕG-<R]Rڻo^f#%5h4JD7:=o%W Btl6GzzfZzzRo//?dUW܆'$T&9ĖTѽWSg~dʷ^ģNL;fނE~٬h8OCWwws_b`8}̞ޯeg!~=|8>!Đ𠔝Źy&)*:'%lwƍ vيon{W2ըgF{;;+++0FBvvvvγ]F pkyO4/jTejujUrgs>ǫ֬pҩz9 /;gg GW8f" a]:V٩CÆJ3_1|Κ=qXHL9qqqJe 7bY_d9B;{u%vaJ{=Fi PS<>8{'     )Jh. ,Wz4P,YT$jG[gY|ƂPO3QUC-;B˕"Z: Pʿ"4"                       D D D D D D D D D D D D D D D D D D D D D D D  D D D D D D D D D D D D D D D D D D D D D D D """""""""""""""""""""""@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                       D D D D D ]iǐܜ,:ߝQ;82 v%yx'kRc= r贲v$1.&7;KBGq#9!搚VCȿ̌Ԕ&h[ S(2rDQe@:L&[VfFJB|Z ^hr!\PA 2 F fi|| z=f`0d2߀x{GKie4!Dzj?+᥃?05)BPCC?ٜrP^B/9rsM贲v437'ŕ)]RF=HI !=Rc9ie4QQ@a!WtQ SF0  : |;~|{`gΝ}Q >ر{'soafvmZۧ|tZbRU:~<33Kݼips} a#/]>tp ԫ[t3 .2h=Ọ g/ƍzeL'ݲ%o>);'w՚u[;,ujՊ|+֯[7?n2O ]ܘr:p5n~h\{կ4efFqٷvޛSjV , D^|U{;ܺe>sܙ> 7W-ر{McbcT۶=jRVoָѥ+WO=7l>6o^^+~m6&S 5fh\vlըNNJ&ڷh;~Nhvv-9%K/R5MZufM+VPd-۷l= 8IDATW [dO|9??Ij֤qKϝ?UԴq#EOlפ%&%5W~ݺ}@IoۺB.ҩ㮽-d{kUTv˾]uYܾkפ[^.˖s?mؠC3Vp)N 8l67敊RfϙC!r_6~@՞8uzw zeh5%lOlt˶3>ږoځE^RB++ʕ#/_D"<"[hO{9GGWj5C)}d65m9;'؜U6_fwءkΆ3PD(oמ};tfѩ}}uzayy6-5uwsmܠAƍ o4)5Wsws9l_i߶M!y99-7WΖm;ufa6y99,z#+Dן oղE!ժT*O FG[V\RL&D(q|DfVV*zzmZ&$:j !Qqq: ,MUd2FJP;T~e/]-Pz_!0CbӴW}[ggL=my[ nnvvcb*W$ϥ.nZmLVױ㚴!Rinh44Jl jƾ56Ji!E.$-Ѐmq`/;{>+Ჲ^l6;,om^:@ƎrṘo5MvוzYY_}~i-{w!dCy9cSsGyy^'_ BGFJK/Fv=NE2!._4,,a`ppuzO,ٝ:}-:Ʒoz_v?́WQJ?M]\|4q0=Qosuuކ;h9ޚ~?|{G>q('Ȼ||‚/m%*.*c_64- nyxߞ\.ٚ _6K`զе z|A !5lvNu<`(;okv[v_Uё$+-WaUbt$'MbI R\ !v( #O>: 7$!1pI1NNhw8 %LڝȄFqInHJow!e*Zca30 _.I6߈ @)\T]o?xφPEEnc^츯@rL<Ʉ' => =gѷos826qob8z8b_ۋ[6W7,e#\iOH;E ,MDkMOa DͫYQ&&\ !] Bjg D! D!Z(e(LJN/- 4B$+:AS%YP6ǗPn_R؍S04Kl`2f6<4a D(KUQtɒ[#YetlbhVCC=.?_25BZ^2T*5ׇ&Q1LWPTx|61f2OF#7Fs䧟#J XXruɲ&3J)e61easl8?L 4s(_yXJ&IENDB`gr-satellites-4.4.0/docs/source/images/telemetry_parser_flowgraph.png000066400000000000000000000375061414055407700261620ustar00rootroot00000000000000PNG  IHDRkvsiCCPICC profile(}=H@_SKE* :Yq*BZu0 GbYWWAqrtRtZxp܏wwQe5hmfRI1_ï!0eJR%x?GZgaSy8ʲJ|N.Ь;4O3p `z[m⺭){dȦJAB7偾[g뭵 K]oC`Dk>3~\^r(> pHYstIMEv@NtEXtCommentCreated with GIMPW IDATxy\LgiҾҢJd߷׾,Q("YQ"}OT2)c|?̜{{3wKRB!o wB!ˆ!B!hB!ˆ!BaDB!F!BaDB!8p_.00wB hB! h_w9Bs!B#ZB!0E!B#ZB!-B!B"zQI>$SH&BaD-;'L!))AIoY0n@)y~IY^m>C{ViYIL!Jr)Yػ{kkk9jZRd  B"D"ݼyFXXR~Vi qNNΛQ׋ujԹ+!.ɸҦ]>7o[a\h!8G'aC洴{BW%߼)ccc{LZ|=}=nܲJGջLY\߽ǔUqN2 Ϩ++/M )8(kK8ZVVU@ܽ6&2 Z.Y[[CDZ?d cÈD%9ɭXMP $eyӕ.NNB#Z~q1%EN^s*kS JR9*.vl!H#(EߡwRvvv#CH|0/?g8'vw}N,_9(F"#;^[[2:2~r}}ܵ:s|YydyiZWI-ymģ =4ˊ*LWJ[<(|uYoT!0E"Bر55ut'=M͢UAy'xpD߈-*FIH߶s0Nq7Dz^*JĬQMM+ swedeMkk6GD8t?fԵ;wo;.!.1iZ5vyCsKյ|윌Ne ddFΎ= !FTG޸S)zLWx66:=-=Ⴡlf_?z۟>{ ͨ@%Vs]%5#幼`7B%SH7&[AğQߟ5-)2 EKPnpf%,LlL Ct *u+oM[V1hU;voVLRτăB_ϴ@Yy)\XMAUDYC\BղRze )K:E6&d 7d ɼ6䔧ĜHШS偧]।N!Ξɴ FHLY^Qoblnn68q|sKsrS~~~}*uԒL}%)IL GA}@NnS]ԙ |j[;9(|uY Qc r߯F'~Pԏ?F.)9>+['I 4L!۰InFQV-S")UkedF5-)WG*Rr|Vzħ5QpEeƝ#I$PFZғ'W̬t<m)@"#;^[[2:2~eT\ qI(+jv<W`$ﮚ]SS}?.1 QdsA{dWUR~ÉxxcD ݏ} s.{ФmRr|#9f&T5E!b/oW3YQ8DEG457=L/,<L4<<7xxQ\4c"[Z[\GJK}3Z{[;陮KFFnqQMMnc&gx&,ζmzQg )!EtԔgw/{cO)*bmOœRJ. 3˺J>7^d˨ 9y#Oܾ9s:O;||K46ӖU"z&߃BCjjhFnMYYyZg %Ŭ"Ɔ#"ë¯ d]]5ƍu$8WIbhynZH[;+53Ghjn2haj:|3A!'Os*{״o?Nnlkԑ#do*,Y;*/UTP>? DvvԺZ'+J"@GG455v6) @= 1Umm9 RVQHUSm^^NEN_AACX"/Jm<9 #u+Cjj /ͩd 4CKCKii/Y~ɛe%]>h >A?m) DG+LRYE0{–֖6x6f>:MU~|,oUhD_˨$ '7k"nZz1ʈddd@WSS `_G\f@p?90c4Ι3YL :Q⃆||\\d37wDdxyEٹ[Z[:fcc+|_V^z:Q\xy.Mxb3P">|Â&߾eorRdG{;annV}}]hbn\LC{N3Ov\ܵ0g,[W^L 4Vv쪃5+7nG% 4R:OJ55 --r}Ȍ4<!wo{;j)AA!(/+ep1R2'wܳPVZqrR(fOEYYy04 gm988 M&Ofotbq""&4t8JP2h= PSոx>OEz&)~ZO/7%usg‰/. ke3;. yn*-fҮV(%E{'sa_l!)/@O`=r%3Ԉ@]McWhyeG'9}~ȹ YE!Z `\QISG]Fl߲PωfؚEe奦-:1P֐\h}'-cnHϞ?h#*x :BqWK-"&osrrN:o&tѻ~hy_dAbʛ)"m8S)f4؍>q2ș99@016?q,ٻwEoYXoX]EY D%9ەT=bcckmm?@XH6l $"b~AXAv%+a9C]Xãgg!~&%)=fԄ vpppttt=~0\`nn6'M3_IQeİ1.ꪵ q9N,X"')Sٻu܌GܾihZTl~AŐ^~NMIMMS*SS }vݻfR9jœ*m~_Ι?ujjI9ϟdOU]Ut-9饉Rtl޶ݥy"_ @iIrx7I[`DB=+USdcgU,mϞ gϟ܌.!.n6aa!}7nvSԃ~{[[[;NrŒ+fJ_z?KqsRddhdam;*%aa#de%%fld ^46~㯫:t>'kLkkk#bW)_vavvs.[1o-|1yҲ"䋧y.DJ^ >{r9dްv{W'*"VQYN\H<74jJ)_oo$%)=<' 7}*.b鈴?}Io9k>!^b%(*,(J/?sˆ`߾'AAn XzMpfmis$crCCn]\Rt u5{c Ms3V::lپ6qnZ}y5/A ]إaΞ09ٸꟍD>*o߾|qyE٧K/uttLឞjF9 mq(:y.yVvv6CUNXɈ]ĬG_lQhQ[[[}[dF,>l,|+a*^3&8ގJ 2sw1$u T"AEEŘfLػw<# _AErY3l\+$mvN)3ZDh惇}89&Nq0y> `p8Ҿ?>|#FTWSW &M>BhY9;N8QYYmHH@Tu31c}mg픲DTwLAiϞԴE޶A[OZשSFiӦ®o\~(Q䕅lzoץY}۲-C:8[kK({hhx;ub^ųёH?"GzpJeմƹvlںCɛUA@O׀ȁR]ju?cD{{{ʋߧ{d&'(7nTRR>ucUMr󲗯o9hڛ+;pӖUnc&WVUؽ1Z\vZ1J=r;X@LRWI ZΎnn֍7 uE V@`@h]%5:2=] !pr|yW%߼-Wt~U㯣$SH΢*Rr|Vzwb'+~սSU>y~}وz|mSӒRT[r~GGGYyE߹ dmܲnnn7V&[8MNgSБ T o AѺjd\\ԩSEDDNZ__8ƿ=_P=׳3^ 7/[]M+87=)%gekD\l6 .mlk".mb7'7ğ,8ڭ9OMKډBZ~W\# |rLdN“'W̬zzO7i} NtҢ"hhh9r$m֬Yaooocc;U}f۳xFrvhmll.]o] L_~dfH=sgqI,Z:KX4''@cv44:tE655ՙYG:q}A1mYGol}bHZU] 7hS^<#!7^d˨ 9y#;|_r+2>7TRRd'I ]:UraގJx(===5Y;]A]~aޭȄ//Sy9ދS'.ڳ\{ۖ{TY'vCo 77Omm;Qv6Cs61ON1=8$Jmmmrx7,k,L/vԭkA76Ë9pEً>M,<}֤&I )bOW-"$IDAT^>V^KS'7?_L#>?*o~%2X?_%d2]B0nUT6͙ǿdJc3mYE?*?{pWhUM :4L7>f۷o={vXX]n۶mllln݊}7K.=t.ͫ]L4v/\v"п%jnޠU0>"kiURTUQ,Q"?8fxcm>RG}32_J઩MIOOuwQPP1|lF+[Yڲef9ػH:ީr5U s+^^>3A奙YN22r.N#\G>kiQ3%7CUd?aa3e]GT8~՞WS(--~cq1Ckkk&* iOK{Y:_FZV]M;W_bm/ UPU@ ZBJɧ1VPeeeTSS$$$ĴrsUj,\}˾¼ꨈfaΆ]<_j)()YT6/￯QL)}(&Q,i/x.г<桛u*8tpBu4M|0-#_>/yӠg3m߹g,sNf?Vzz1ߔ)SrrrwzJgڳݝw]YPͫ]̬F`~NV[[C4Tnn6()"`q =c;đ_`}GGGʋ]UFk ee Y}+:諣kjb*wdz7efgVȷo_WT_zQSS88955unݾQ\FԵ˰џۚDҲb]PPc734}׆Iqpp0d i9#s&s|{0r͚Kml} F?~|yn.n/ϙ L|Fmmȝ[>4ܽwD"*7_ӈ[]*nj>4tUX^Yc#ӱݝGXJr)SGLO;QDQ#Yhjhh~B0j2qCtt` s++{AF9 Ip'@C+졻 J j~RO /((ذa_XX$3+y3s=zx-MKfW^[Vv:eE#3kѷ ]}\QISGNLZ utlc!d*FO[8A:tC3'O4559sFMMMMMŽ?~dqES&Lybcc/x&%1BMUf}gLi\Fl޸ZĿz*h9~|>?IAaބIGQTn/]' ʅշ]Ȃ3\L1FE>W}>G?eOOOa.*ok?oWe 3o~,.>{&iDOwi֫bZM}GxرrMM%KݻwI$Ҹq 44444Ç0-+g}>ZGGk׮qqqù3_ZL|s>Z .s6&O=5c񎻝bɯUV^-#{zvGUpd{ωRmLrrW4_+G:>v!%%E|*jcH/D,,#vՒ~2111115ѣ&L0a„=;h,DFFEKDDgߟyA F_Kyxo5Ϡ?}s#{LڳP^~.- zq9jX/9O?r0hQ5\7An }c um"۱̉WR ee-uOڌLlO] 8yX?~z9&qݛYS[ydjr[8o^||LjnipnJȸ|p񤧉`{=z@sp POcvMNy%ŏsD$=@߈"&wvܽ .KzNݤ%|l8ZJ&}9k&B98 3e QnMSYɸ!hB0LC.;o/khxOKnUCo=}89oc@ O~|655|یγh*d IYC|)-=0n )%qA;;9B? p;p8wWYE!%(\7a.6%EN# 8z@إ|ςVӒRRjAc㇪Jv}m*"hwp7^^> s\\ukP]6v{3gO/(~Nn &HgOv%zem?|D mooѭWF_>^cee_ZYQ=*9Uܧ@a#mnD];y\7:Ϛr.4&aܥCo\y'./9 .: p7Fnbl޽!9|dݸɤMtIzz#2,+/%IY=IJOv2`%kWoݰno+h>{6kk+a,p򰡉&Ee{;Ӈ≣%Ŵ糳=*##)&߄_NnVVvƶ-{7|j!kݺ6fȖM{/$=M$SH6,v)۱QB+ 2Q(brr}dao9.N#NF=F" BRNS";"r'oܲn)6K]% X\|W1LvN&myG}GT;sd9%H𾮾\\L!?ש>gҶ0nMc\FT?LO<| Q O~ :rcԩgTWWݸyRʋg`)%V?0e{ ʯ s2J>a,HTCUSREY` ɢJSsr|5߃BCjjhGZo @NVx(N)|]_\2 :/؉n+_l97o[S__p^KSz. ݘ''T@^~x7iiݻp7S2.5v<05#;X_`Ǯ_,O&r+nG_qӾą ,NԈ63QIcF` ]&$ Q<5i//urURՔ,*ztinYa9TG{% qf|>!zMMϷiIyLg.<]u)%cnz/-y'Ӈݟ8emyYMMAўdeg[ t PRR}]~!)QwEn,WQYҬ8}M% d::ڻ;u_q"(_>-e|PSհ033T^^`"++/#-wN)^u@0`~% FD}Ջ:8v F^ khx Οn\L+B1g7'}aƞ<9D}}]GGGGGGcS#%-;Ĵ1eCCO!;(]:amm qYU__G1krG;>{>/? bbovP;^<{,_MU HtR:n(.~WRZ|#ZWKqpr0o ga)y%E%ő7}{cC/aGM+(8;Է,ͱ0j2\`9ئ00=LTUԉۑ7oޣjgCOM2JO 0 TXX;zd}mXή7\NM r=2|E?/ON "f?!Dd|߆G{r Ǐ}s !0vA#E^5H=!B`I _rKހ ?B!ˆ!B!hB!ˆ!Bad!B  Cp#;'L!-Z: eVzxBX$VUU!\\\dF,[gnNd 2Z\mTyENb+|:~¯cVo#0@"Eokp;*yr9\-o|~UBʞQ_1^4~زiLII|vO"B"㓤psq{y3+/n&f^`޽Y~} Â&߾eorRdG{;<7wm}m;q>|h{6Ddc6ƫ֭JOn6eR=)--r}Ȍ4<!0E♔<5Uupq}˾KCe>4p1R2UU3H$JFpL}#2ӽJr:J{i捻E.PEcloFpYyiBƒ+a6 6Z>6ow#}T*=A 2cB?"B!hB!ˆ!B!hB!F!BaDB!āmR!c-B!B! hB!F!BaDB!F!B#ZB!0E!B#ZB!0E!B`@8QIENDB`gr-satellites-4.4.0/docs/source/images/u482c_deframer_flowgraph.png000066400000000000000000000371741414055407700253070ustar00rootroot00000000000000PNG  IHDRe>7iCCPICC profile(}=H@_S"- ꐡ:Y'B*ZUKIC(X:8* NN.RBX LMT".fb+!A2$)>xVsgaSy8ŠJ|N]QscigJo+u`ZK}uKSɐMٕ4|x?o[w뭹 M]%oC`@ۿgrJ pHYstIME utEXtCommentCreated with GIMPW IDATxy!B`' B!0^D!Pw zsrssqdx"B8 n TTpCu+~AE[˥f)$24kS`XHXƍ!!/.ͫ3Q+*hp B7()})z#SH2 Qc˫wBjjnq[_J{{;kK)$YE^ξр" ;$ƍkU)kht']f8T>fw:ϦNUuxmk4ԵIK2Y3tNvt:!XZZf].\ }WRk|4`~_C<54}BW%MP@"":c:>sF-!QWwU 'ݾ{YK jJ.[91)$&,lnm&*&ckoJ(w̭ 5,_5tυ"Kq/#SHfJT4$FJXCcM[[[u+4/BbR/8Vu 9N6aYoKKe hpJa{Z |G2/XPջnua/"e.~Wdea·w|VQM΅S̥f+؍`g'+)DEޥvRvvv|g[v>!k7,%H xq3:a8ؽ_eӮ3gO-[5/'7k ~>~jV#sL7NS8{.LZJ5,Wxyxei8zyyۭۛ͛fϞmggzꢢ"UAAA-uwwONNm[t'̥f/_zߡ烦Mu+ȥǏa^PK^t6/_n;_˷4O_UUWtw U0^DdWu5M-!ORy9g磧p'a aJbRl'v_[pAlOKn H17&>Urvw2Ҳ#T5@Ow&+)y+nD1Qqשo\{V[[qϘ>I$R7ijnZr ϑKTJ[Z@JJfDgvvvQnRRR***cccϟ?wfccuVlllcc… #""455xammmpp)S|||VZuڵP/33S]]o֬YT*QՕ'===??֋-hBCvvVe똏vy,!.=,YC%iz|4 ObnaƋ7 Ml%ҢFn.buS%ս䒖%+sLx|W+}cfii>j<7O9Y=oxn.Ȳ-l&cϕҐӌ¢166e%]]_ÇׄG0 ҒV \ܺuÃ1M7?#:::(((|͝Fw|{$'8 u@a...%,c,o\U9Z]ѭ;ο VPpp]5uywww= m;q2tX_n y9ŭv-[D"(] ޽w4e.;ףv]{ S" ͜}^!ڳN?g_^]U8s{q/\ 9aْ5;wo|Owx988D)LuOl^~B}So7~aBP(^\L?Ƌ!ã$n B!B!]GWTD4r@} L=a)M[W)|8BLt_W3Qo΄qcFHKj :| BJiRiY.nBW/:vGI -{WDbRG0pԷԟS."ߏjhex*''獘oq43XHhQӢv2d24ZWޔS>>F:gTmQ+p011%ŋP #"Ĥx024!&94ˬߴud ^m(.~;P}NO24PqVRrVΫְ RDDgLs_vT;ֆRre_]]_G,L!7g#  x?~B26l33F_t]̭~D4eZ==fn!BxQD^V^*`h`l# 5pڵ#.2ϵsʉps[W 0񁬢=<۱7f$&%޻v)ܼl7~Y\7b3))IcnF5668M5@?HBln8PxI&=t嚅-_{G\**;ƪSr/S Y%,k{Z&#Mkh];D߸i vsee]gNUlmQћwn̟ FjJ F&<8w_XUu5M!d8h?yh(# G -}xkghh##3},-sKjFCFJ|y_Y/LbggL&H /mI // yŋ޼ʧvz 1e 0k- h:jl26x|$s+>==+ȒLp?B1Jz|8㩌ǎiJy`oGB_/\j6//ΐQe\j6g } q:u;Y3~Kp_8Ų@zD;1#Ǧ0y_{HUU%HJH^u91+;2B/$/-- ÇO3 gNcea{bq""j;:a8[v1HZ~#em0cq~A8Gv^;]&5HDCBe%F#L؏6&K^b#P=Kω~Z"(HBI"+"CO*ٯc =MfET89hni>尷E e2-^J* ,֦qKː J ɯ%oh, OO_EXX (y%>,;||n={ h 666 q)\ܺ)yy\\rf^;;;;Ä)Kꪵ݉S 8؎N~!-Y>g%RKq󺘨ͻ1ͽZn.n!C}G;Γ,^殠J![XĭSnסw" 3'5;'sVo!Sdd!MumJvᬐGe$Mj]22|TWwv -75N\)9as[>ad"SHBlrֆjbRK}q\j˯Gz>hT\Z ~Sã?}UU]9ݱ}̯MM=5Ե//St/ss?ĤGئL1ߧή??d)Zw/$Κ'Dt3:SU/nF'Xawf./F^ŭ珱'L?"S>>P:a]<1' Hp*j[6e2$%,lty䕈D3Su܌*?ϥf566X2+_Nǥ2_(+/6B}$%iI _L5O D"D["ek;eWQVSWw%ݬQ3 G_~{ƋiˉKƭ1}#x񼡡F?,}>);;_4ٗ.Zfun<%׮_.)}GYy+`u"yi;jn2ū'O7{;47skÔl)QoaW1ά͚5L2|]R4~E.NNJJ&9<[ 14E5Qe5e%VƢRd TQHL724!HJlc-.\{ E57@fKcSݪʲRQ z!~'||؍wn,^riI9{{;H` BU%@M~|5F(U#߿?{l!!!77Z]p1(a${낼W*!AA >qSfKƜHMaJR܆&ԼbҼnΌxt/tw? k'z£d i˶5_s]S6y%>^>2Yĵt'9?X{Oc74{l;;իW@]]ĉs666yv+++ssF1ߩڮƳg7xK MCˆgg砠 K#5ǻ:::FDDKX3bħpo\ݴuI2Ҳ3'YH.ފN*8xҹ;1ɏ233#.j^d׷5nݎN|R?iO;U*:i5󝤤tՋ bJO;"Ezܽwk|}%Y6ǜEŵ5A'~&>a67g7wފ =KqnClnn;wc,ܼn'5cnHi:rڥN3fG^Kx a.~y*fo^} /caxʔ$3ABsLolj z2=t嚅Zy٥Cf-[&,jVvz~N׮CW"o=_RJXej!4w8󝫨;7/0 FjJhniC}aW4Ц7UVVzyy-\0""BSSsϞ.${n66[n7RQQj*oooejkkgdRuuuW>rHOW+++$!w'+e˴qjDt+;991Qq?^vqt\EY،oѨL+K[))F0;[~~c.NG#F3d eՑtu8htiY v*yxy-̿쫒ZIIg*j6nދ=vUuu!/ _KIJ?{cq +%-NOѿejjT]]}̙,Z*C.yUeLTȈK"./ȳ7.^TUWR + [Uu"n("B!r&g<omXlx7kLp?B1Jz|xFƋcz4ݿu w%E^{<(,4j1~[|||f͢R _7;=xf~1c߰a444>fYwuuT+//#jkkOvSC%z P{2sl-+n""1f磵t M^VGO̵Lbkhh߼rZٕյx֭}WRO5|&QqXPpC'v^|d`],ѱ~F4nqqqnnnf\dF}X+p=a0@p@xD^;>wRaggs7k|v_S]l; ;wb GߏMy_$%BΜcof?n 477w_/sƅ$x=|_]'񢝭C.I  \uUXVQx@qx1d ) }sOr(Ʈ'ol4zKjj &#M--pIN6J| SHI.gͿio7e,+~SGtb=DO_%+;L!'7ci1.IXku5ͷEo,-AdEmʵ %?]ffjNog%CH)[$ppA\Ե 44g͚YXX)//13i9OLQM,͸P=KωOff?zߙVvvvrrrccٳgUTT888={(_\\3ٳl /ZKSZZZ/_|YCCCpp0#0ecW.?:X[r3 xnϖ+:&ƋɃMwm $ p160mP#8jtdnnnnnnBB]Ox[>Zawwg㖕F:!XlS{'/&%%.Z=s >hRAᫎRJTwJJ{1|WR1i"i֋7DNUqrr27:βD#;% 2m"B,^[UUպu:.111ƚsssЊ"yՇAq1Fd :abko7 /[v[֊ ʹlPVR߻{@߃-Z֬_2eKܝ'D2,A{owJ@@^1f55Ֆo\ݼm+l9gikbԕrW]:dܥ61{{:eja{c)y@-^ql3'\z1Kϲ榮 ׮_F}:$%tamڵko=COƆ]BsvO-VgΞQ]]5wbFa㑣E)bjP]SEܧi:#sP=}h܃;q,[ӤH%RrZ;ƪ=3UԞ/3_XkAQc{~ITueP㑣>=nQnMS{aGB/"P2'XvAlѓOKKH$X넇SRfL#+#w1AZDJλqݿC"tuV[s܋]WIs|lR,_˘TU7 =0!B`Fq[_&&6y~,Y^EL!ݿV J*Rc,{:-oEUѬ~Gtt8;~KCIVs| x愘KsVS&tn٦"~ ̿I~w㟜di8~òs#^H{-"BVԏ{~bE*ID,B?d iEĿQCxz<x/MX؅z*"k7,e/P\^Z~cj I7wEP5uuU:Nv plH}Prp[z>PB\D";iFU~)erq[ I /?y;3e3[CZV=jhBjt+N O}_b s. xyƍpH//sI=Nxyxյ57l׎,ooٴχ\a,9g8UDup۽mﻒ"޻L& Gu+_,~mˑᇏzC)OWVVܹtX yk'T1QO9:cο0lBоy;͛崲+W/kfFQWR?8\hEEosbF/0cNh͎ӱ0$ ЯFPזaW]gNMBK}{~ "B!B!Ƌ!BEB!}.T !B7}\j6BZzw/#VC!_Ĥb)yP=ukjWALFF_qBECTC]+)TY3nݴ 8B/";v'&Yfڛ޺Pg2tԬ<x}Ds6ʸB}<~w# Fznx$;0% >cS{q`؋ KRNnsiY B"SH2|fO@[O'SH[x>!~.§ği>|@TBq ;$T%%d!SOmMs2q#x/@LquU&H˺ΜH(_0oY{{{ȹ榈KƘYj0^+.&QCie+,`2ҴFߵp􍫛7UNų^O)+eΜqw>d6opᄚЫjBaygOA1t=w:JDuu;6 TZ~xQћWnVDo1ֆ_`ψGhuMtq'N-4vtwn&+)}G;N7"B/">|H~cfn.nwz`ݚeMĬ3K?w۷n޶ZQA¶c !x<*&*F,⮮n/nܭ{H$!zF6Nmc>u.Uw[gϝ*&&uctXUי3p#xI{TBuڍ:C:x`_, which is necessary if gr-satellite has not been installed from the git repository. .. _git submodule: https://git-scm.com/book/en/v2/Git-Tools-Submodules gr-satellites-4.4.0/docs/source/installation_conda.rst000066400000000000000000000073701414055407700231430ustar00rootroot00000000000000.. _Installing using conda: Installing using conda ====================== gr-satellites and GNU Radio can also be installed using `conda`_, in Linux, macOS, and Windows. Conda is a multiplatform open-source package management system that can install packages and their dependencies in different virtual environments, independently from the rest of the packets installed in the OS. Using conda is the easiest and recommended way of installing gr-satellites in Windows. This section shows how to install `miniconda`_, GNU Radio, and gr-satellites from scratch. More details about installing GNU Radio with conda can be found in the `CondaInstall_` page of the GNU Radio wiki. Miniconda ^^^^^^^^^ `Miniconda`_ is a minimial installer for conda, so it is the recommended way to get GNU Radio and gr-satellites quickly running in an OS that does not have conda already installed. Miniconda can be installed by downloading and running the installer for the appropriate platform from Miniconda's page. The installer can be run as a regular user. It does not need root access. After installing Miniconda, its ``(base)`` virtual environment will be active by default. This means that ``(base)`` will be shown at the beginning of the command line prompt and software will be run from the version installed in the ``(base)`` virtual environment (when it is installed), and otherwise from the OS. Users might prefer to run things from the conda virtual environment only upon request. To disable the activation of the ``(base)`` environment by default, we can run .. code-block:: console $ conda config --set auto_activate_base false When the ``(base)`` environment is not enabled by default, we can enter it by running .. code-block:: console $ conda activate base and exit it by running .. code-block:: console $ conda deactivate When the ``(base)`` environment is activated, the prompt will start by ``(base)``. The ``(base)`` environment needs to be activated in order to install applications through conda into this environment, and also to run applications that have been previously installed in this environment. GNU Radio ^^^^^^^^^ To install GNU Radio, the ``(base)`` environment (or another conda virtual environment) needs to be activated as described above. Installing GNU Radio and all its dependencies is as simple as doing .. code-block:: console $ conda install -c conda-forge gnuradio Then GNU Radio may be used normally whenever the virtual environment where it was installed is activated. For instance, it is possible to run .. code-block:: console $ gnuradio-companion gr-satellites ^^^^^^^^^^^^^ gr-satellites needs to be installed into a virtual environment where GNU Radio has been previously installed (the ``(base)`` environment, if following the instructions here). To install gr-satellites and its dependecies, we do .. code-block:: console $ conda install -c conda-forge gnuradio-satellites After installation, the ``gr_satellites`` command line tool might be run as .. code-block:: console $ gr_satellites (provided that the virtual environment where it was installed is activated) and blocks from gr-satellites may be used in GNU Radio companion. It might be convenient to download the :ref:`sample recordings ` manually. Acknowledgments ^^^^^^^^^^^^^^^ Thanks to `Ryan Volz`_ and `Petrus Hyvönen`_ for their work in putting together recipies to install gr-satellites and its dependencies through Conda and for helping me make gr-satellites build on Windows. .. _conda: https://docs.conda.io/en/latest/ .. _miniconda: https://docs.conda.io/en/latest/miniconda.html .. _Ryan Volz: https://github.com/ryanvolz .. _Petrus Hyvönen: https://github.com/petrushy .. _CondaInstall: https://wiki.gnuradio.org/index.php/CondaInstall gr-satellites-4.4.0/docs/source/installation_intro.rst000066400000000000000000000023621414055407700232060ustar00rootroot00000000000000Installation ============ There are currently three major ways to install gr-satellites: * :ref:`Building from source ` * :ref:`Installing using conda ` * :ref:`Using the Ubuntu PPA ` Installing from the Ubuntu PPA is the easiest and recommended way to install gr-satellites in Ubuntu 20.10 and later versions. Conda is a multi-platform package manager that can be used to install gr-satellites and its dependencies (such as GNU Radio) in a virtual environment that does not clash with the system-wide set up. It is the recommended way to install gr-satellites in Windows and macOS, and also in Linux distributions which do not include GNU Radio 3.8. It is also possible to build gr-satellites from source, which is easy to do on Linux systems, and perhaps also macOS, but not in Windows. Finally, there are a number of distributions that provide their own packages for gr-satellites: * `Arch Linux`_, through the AUR * `Debian Linux`_ (testing and unstable releases) * `MacPorts`_ .. _Arch Linux: https://aur.archlinux.org/packages/gr-satellites-git/ .. _Debian Linux: https://packages.debian.org/sid/gr-satellites .. _MacPorts: https://ports.macports.org/port/gr-satellites/ gr-satellites-4.4.0/docs/source/installation_ppa.rst000066400000000000000000000011001414055407700226200ustar00rootroot00000000000000.. _Installing using the Ubuntu PPA: Installing from the Ubuntu PPA ============================== The `Ubuntu PPA`_ is an easy way to install the latest version of gr-satellites in Ubuntu 20.10 and later. To use the PPA, it must first be added to the system by doing .. code-block:: console $ sudo add-apt-repository ppa:daniestevez/gr-satellites $ sudo apt-get update Then gr-satellites can be installed by doing .. code-block:: console $ sudo apt-get install gr-satellites .. _Ubuntu PPA: https://launchpad.net/~daniestevez/+archive/ubuntu/gr-satellites/ gr-satellites-4.4.0/docs/source/introduction.rst000066400000000000000000000036221414055407700220130ustar00rootroot00000000000000Introduction ============ gr-satellites is a `GNU Radio`_ out-of-tree module encompassing a collection of telemetry decoders that supports many different `Amateur satellites`_. This open-source project started in 2015 with the goal of providing telemetry decoders for all the satellites that transmit on the `Amateur radio bands`_. It supports most popular protocols, such as `AX.25`_, the GOMspace NanoCom U482C and `AX100`_ modems, an important part of the `CCSDS stack`_, the `AO-40 protocol`_ used in the `FUNcube`_ satellites, and several ad-hoc protocols used in other satellites. This out-of-tree module can be used to decode frames transmitted from most Amateur satellites in orbit, performing demodulation, forward error correction, etc. Decoded frames can be saved to a file or displayed in hex format. For some satellites the telemetry format definition is included in gr-satellites, so the decoded telemetry frames can be printed out as human-readable values such as bus voltages and currents. Additionally, some satellites transmit files such as JPEG images. gr-satellites can be used to reassemble these files and even display the images in real-time as they are being received. gr-satellites can be used as a set of building blocks to implement decoders for other satellites or other groundstation solutions. Some of the low level blocks in gr-satellites are also useful for other kinds of RF communications protocols. .. _GNU Radio: https://gnuradio.org .. _Amateur satellites: https://en.wikipedia.org/wiki/Amateur_radio_satellite .. _Amateur radio bands: https://en.wikipedia.org/wiki/Amateur_radio_frequency_allocations .. _AX.25: http://www.ax25.net/ .. _AX100: https://gomspace.com/shop/subsystems/communication-systems/nanocom-ax100.aspx .. _CCSDS stack: https://public.ccsds.org/Publications/BlueBooks.aspx .. _AO-40 protocol: https://www.amsat.org/articles/g3ruh/125.html .. _FUNcube: https://funcube.org.uk/ gr-satellites-4.4.0/docs/source/low_level.rst000066400000000000000000000015361414055407700212640ustar00rootroot00000000000000.. _Low level blocks: Low level blocks ================ Low level blocks are the custom blocks offered by gr-satellites to implement the required functionality that is not available in the standard GNU Radio blocks. There are many different low level blocks, and some of them date back to the first versions of gr-satellites and have become somewhat outdated. A complete description of the low level blocks is outside the scope of the documentation for this version of gr-satellites. It is likely that low level blocks will be classified and documented better in the future, perhaps deprecating some of the most outdated old blocks. For the mean time, the user interested in learning how the different low level blocks can be used can explore which low level blocks are used by the components, by looking at the Python sources inside ``python/components/``. gr-satellites-4.4.0/docs/source/overview.rst000066400000000000000000000062641414055407700211450ustar00rootroot00000000000000Overview ======== gr-satellites can be used in different ways depending on the experience of the user and the desired degree of customization. This section gives an overview of the possibilities. Command line tool ^^^^^^^^^^^^^^^^^ The main way of using gr-satellites is through the ``gr_satellites`` command line tool. This allows users users to decode the satellites officially supported by gr-satellites by using a command line tool. Decoding options can be specified as command line parameters. The tool supports processing both RF samples streamed in real-time from an SDR receiver or a conventional radio connected to the computer's soundcard, and recordings in different formats. The command line tool is the most simple way of using gr-satellites and so it is recommended as the starting point for beginners. The usage of this tool is described in depth in the :ref:`gr_satellites command line tool` section. Satellite decoder block ^^^^^^^^^^^^^^^^^^^^^^^ The Satellite decoder block gives most of the functionality of the ``gr_satellites`` command line tool encapsulated as a GNU Radio block. .. figure:: images/satellite_decoder.png :alt: Satellite decoder GNU Radio block Satellite decoder GNU Radio block It can be included in any kind of `GNU Radio Companion`_ flowgraphs and it can be used to achieve a greater degree of customization and flexiblity than what it is possible with the command line tool. The input to the Satellite decoder block may be pre-processed freely using GNU Radio blocks. The decoded frames are output as PDUs and can be handled in any manner by the user's flowgraph. The Satellite decoder block is recommended for users who are already familiar with the command line tool and want a higher degree of customization. Its usage is described in the :ref:`Satellite decoder block` section. .. _GNU Radio Companion: https://wiki.gnuradio.org/index.php/Guided_Tutorial_GRC Components ^^^^^^^^^^ Components are the high level blocks in which gr-satellites is structured. Briefly speaking, the decoding chain is split into different tasks and the ``gr_satellites`` command line tool and Satellite decoder block perform decoding by selecting and connecting the appropriate components for each of these tasks depending on the satellite selected by the user. The architecture of components is described in more detail in the :ref:`Components` section. They can be used as GNU Radio Companion blocks to customize decoders further than what is allowed by the Satellite decoder block. Additionally, they can be useful to build receivers for other RF communication protocols. Users interesting in learning how the decoding process works or in adding new decoders to gr-satellites should be familiar with components. Low level blocks ^^^^^^^^^^^^^^^^ Finally, gr-satellites has a large number of lower level GNU Radio Companion blocks that may be useful in many different situations. Usage of these low level blocks is recommended only for users already familiar with gr-satellites or GNU Radio. Utilities ^^^^^^^^^ Besides the ``gr_satellites`` command line tool and the GNU Radio blocks, gr-satellites also contains a few :ref:`Miscellaneous utilities` that can be used with some of the satellites. gr-satellites-4.4.0/docs/source/satellite_decoder.rst000066400000000000000000000071011414055407700227410ustar00rootroot00000000000000.. _Satellite decoder block: Satellite decoder block ======================= The Satellite decoder block brings most of the functionality of the ``gr_satellites`` command line tool in the form of a GNU Radio block. This allows the experienced user to leverage the functionality of the satellite decoders in their own designs or to achieve a greater degree of customization than what is possible with the command line tool. The input of the Satellite decoder block is a stream of samples, which can be either real or complex, for IQ input (see :ref:`Real or IQ input`). The output of the block is PDUs with the decoded frames. The figure below shows a very basic use of the Satellite decoder block, where the input is taken from a WAV recording using the Wav File Source block and the output is printed using the Message Debug block. This example can be found in gr-satellites in ``examples/satellite_decoder/satellite_decoder.grc``. .. figure:: images/satellite_decoder_flowgraph.png :alt: Usage of Satellite decoder in a flowgraph Usage of Satellite decoder in a flowgraph The figure below shows the options for the Satellite decoder block. It is possible to specify the satellite to use in the same ways as for the ``gr_satellites`` command line tool (see :ref:`Specifying the satellite`). The method to specify the satellite is chosen in the *Satellite definition* dropdown menu. The sample rate needs to be entered in the *Sample Rate* field, and the *IQ input* field selects real or IQ input. The *Command line options* field is described below. .. figure:: images/satellite_decoder_options.png :alt: Options of Satellite decoder Options of Satellite decoder Here are a few ideas of how the Satellite decoder block can be employed by users to build custom decoders which are not possible with the command line tool. On the input side, it is possible to use all the standard GNU Radio blocks to support a large number of SDR hardware and recording formats. The different channeliser and filter blocks (especially "Frequency Xlating FIR Filter") can be used to adapt the sample rate and bandwidth of the signal into something useful for the satellite decoder. For example, a wideband SDR might be used to receive the signal of different satellites, performing Doppler correction with `gr-gpredict-doppler`_. The signals of these satellites might be channelised with a "Frequency Xlating FIR Filter" blocks and fed into independent Satellite decoder blocks. On the output side, it is possible to treat the received PDUs freely. This allows classifying and storing them in different ways. Upper layer complex protocols might be completely handled inside the GNU Radio flowgraph, provided there is a suitable implementation of these protocols. Additionally, it is possible to interface the decoder to external tools with default GNU Radio blocks, by using TCP sockets or ZeroMQ. .. _Command line options: Command line options ^^^^^^^^^^^^^^^^^^^^ The satellite decoder block allows entering the same kind of command line options supported by the ``gr_satellites`` command line tool into the *Command line options* parameter of the block. The set of options to use needs to be specified as a Python script. To see the available optioins, it is possible to use ``"--help"`` as the options, just as one would do when using a command line tool. When the flowgraph is run, it will print out the allowable options and stop. In the same manner, if invalid options are specified, when the flowgraph is run it will print the correct usage and stop. .. _gr-gpredict-doppler: https://github.com/ghostop14/gr-gpredict-doppler gr-satellites-4.4.0/docs/source/satyaml.rst000066400000000000000000000304211414055407700207410ustar00rootroot00000000000000.. _SatYAML files: SatYAML files ============= SatYAML files are used by gr-satellites to describe the properties of each specific satellite, such as what kind of protocols and telemetry formats it uses. They are `YAML`_ files and are based around the concept of components. Using SatYAML files, the ``gr_satellites`` command line tool and the Satellite decoder block can figure out which components to put together to decode a particular satellite. SatYAML files are stored in the ``python/satyaml`` directory. Below we show the SatYAML file ``1KUNS-PF.yml`` to give an overall idea of the format of these files. .. code-block:: none name: 1KUNS-PF alternative_names: norad: 43466 data: &tlm Telemetry: telemetry: sat_1kuns_pf &image JPEG Images: image: sat_1kuns_pf transmitters: 1k2 FSK downlink: frequency: 437.300e+6 modulation: FSK baudrate: 1200 framing: AX100 ASM+Golay data: - *tlm - *image 9k6 FSK downlink: frequency: 437.300e+6 modulation: FSK baudrate: 9600 framing: AX100 ASM+Golay data: - *tlm - *image First we can see some fields that give basic information about the satellite. The ``name`` field indicates the main name of the satellite, which is used by ``gr_satellites`` and the Satellite decoder block when calling up the satellite by name. There is an optional list of ``alternative_names`` which can also be used to call up the satellite by name. The ``norad`` field gives the NORAD ID of the satellite and it is used when calling up the satellite by NORAD ID. Additional telemetry servers used for this satellite can be specified with the ``telemetry_servers`` field (see ``python/satyaml/PW-Sat2.yml`` for an example). The ``data`` section indicates the different kinds of data transmissions that the satellite makes, and gives the decoders for them. The following can be used: * ``telemetry``, which specifies a telemetry decoder giving out the telemetry definition (see :ref:`Telemetry parser`) * ``file`` or ``image``, which specify a file receiver or image receiver giving out the ``FileReceiver`` or ``ImageReceiver`` class (see :ref:`File and Image receivers`) * ``decoder``, which specifies a custom decoder from ``satellites.components.datasinks``. This is used for more complex decoders not covered by the above. * ``unknown``, which specifies that the data format is not known, so hex dump should be used to show the data to the user The ``transmitters`` section lists the different transmitters used by the satellite, their properties, and ties them to the entries in the ``data`` section according as to which data is sent by each of the transmitters. A transmitter is understood as a specific combination of a frequency, modulation and coding. Each transmitter has a name (such as ``1k2 FSK downlink``) which is currently used only for documentation purposes, a ``frequency``, which gives the downlink frequency in Hz (currently used only for documentation), a ``modulation``, that specifies the demodulator component to use, a ``baudrate``, in symbols per second, a ``framing``, that specifies the deframer to use, and a list of ``data`` that has entries referring to the items in the ``data`` section. The modulations allowed in the ``modulation`` field are the following: * ``AFSK``, for which the :ref:`AFSK demodulator` is used * ``FSK``, for which the :ref:`FSK demodulator` with Subaudio set to ``False`` is used * ``FSK subaudio``, for which the :ref:`FSK demodulator` with Subaudio set to ``True`` is used * ``BPSK``. Coherent BPSK, for which the :ref:`BPSK demodulator` with Differential and Manchester set to ``False`` is used * ``BPSK Manchester``. Coherent Manchester-encoded BPSK, for which the :ref:`BPSK demodulator` with Differential set to ``False`` and Manchester set to ``True`` is used * ``DBPSK``. Differentially-encoded BPSK, for which the :ref:`BPSK demodulator` with Differential set to ``True`` and Manchester set to ``False`` is used to perform non-coherent demodulation * ``DBPSK Manchester``. Differentially-encoded and Manchester-encoded BPSK, for which the :ref:`BPSK demodulator` with Differential and Manchester set to ``True`` is used to perform non-coherent demodulation The ``AFSK`` modulation also needs the ``deviation`` and ``af_carrier`` fields that indicate the AFSK tone frequencies in Hz, as in the AFSK demodulator. The framings allowed in the ``framing`` field are the following: * ``AX.25``, `AX.25`_ with no scrambling (see :ref:`AX.25 deframer`) * ``AX.25 G3RUH``, `AX.25`_ with G3RUH scrambling (see :ref:`AX.25 deframer`) * ``AX100 ASM+Golay``, GOMspace NanoCom AX100 in ASM+Golay mode (see :ref:`GOMspace AX100 deframer`) * ``AX100 Reed Solomon``, GOMspace NanoCom AX100 in Reed-Solomon mode (see :ref:`GOMspace AX100 deframer`) * ``U482C``, the GOMspace NanoCom U482C (see :ref:`GOMspace U482C deframer`) * ``AO-40 FEC``, the AO-40 FEC protocol (see :ref:`AO-40 FEC deframer`) * ``AO-40 FEC short``, AO-40 FEC protocol with short frames, as used by SMOG-P and ATL-1 * ``AO-40 FEC CRC-16-ARC``, the AO-40 FEC protocol with an CRC-16 ARC, as used by SMOG-1 * ``AO-40 FEC CRC-16-ARC short``, AO-40 FEC protocol with short frames and a CRC-16 ARC, as used by SMOG-1 * ``CCSDS Uncoded``, uncoded CCSDS codeworks (see :ref:`CCSDS deframers`) * ``CCSDS Reed-Solomon``, CCSDS Reed-Solomon TM codewords (see :ref:`CCSDS deframers`) * ``CCSDS Concatenated``, CCSDS Concatenated TM codewords (see :ref:`CCSDS deframers`) * ``3CAT-1``, custom framing used by 3CAT-1. This uses a CC1101 chip with PN9 scrambler and a (255,223) Reed-Solomon code for the payload * ``Astrocast FX.25 NRZ-I``, custom framing used by Astrocast 0.1. This is a somewhat non compliant `FX.25`_ variant. * ``Astrocast FX.25 NRZ``, custom framing used by Astrocast 0.1. This is a somewhat non compliant `FX.25`_ variant that is identical to the FX.25 NRZ-I mode except that NRZ is used instead of NRZ-I. * ``AO-40 uncoded``, uncoded AO-40 beacon. It uses 512 byte frames and a CRC-16 * ``TT-64``, custom framing used by QB50 AT03, which uses a Reed-Solomon (64,48) code and CRC16-ARC * ``ESEO``, custom framing used by ESEO. It uses a custom protocol vaguely similar to AX.25 with some form of G3RUH scrambling and a (255,239) Reed-Solomon code * ``Lucky-7``, custom framing used by Lucky-7, which uses a SiLabs Si4463 transceiver with a PN9 scrambler and a CRC-16 * ``Reaktor Hello World``, custom framing used by Reaktor Hello World. It uses a Texas Intruments CC1125 transceiver with a PN9 scrambler and a CRC-16 * ``S-NET``, custom framing used by S-NET, which uses BCH FEC and interleaving * ``SALSAT``, custom framing used by SALSAT. It is like ``S-NET``, but without the bugs in the CRC implementation. * ``Swiatowid``, custom framing used by Swiatowid for image transmission, which includes a (58,48) Reed-Solomon code and a CRC-16CCITT. * ``NuSat``, custom framing used by ÑuSat with a (64, 60) Reed-Solomon code and a CRC-8 * ``K2SAT``, custom framing used by K2SAT for image transmission. This uses the CCSDS r=1/2, k=7 convolutional code and the IESS-308 (V.35) asynchronous scrambler. * ``LilacSat-1``, low latency decoder for LilacSat-1 codec2 digital voice and image data. This uses the CCSDS r=1/2, k=7 convolutional code and interleaved telemetry and Codec2 digital voice * ``AAUSAT-4``, custom framing used by AAUSAT-4, which is similar to the CCSDS Concatenated coding * ``NGHam``, `NGHam`_ protocol * ``NGHam no Reed Solomon``, `NGHam`_ protocol without Reed-Solomon, as used by FloripaSat-1 * ``SMOG-P RA``, Repeat-Accumulate FEC as used by SMOG-P and ATL-1 * ``SMOG-1 RA``, Repeat-Accumulate FEC as used by SMOG-1. The difference with ``SMOG-P RA`` is a longer 48 bit syncword (instead of 16 bit) and the inclusion of a CRC-16 ARC to check frame integrity. * ``SMOG-P Signalling``, custom signalling frames as used by SMOG-P and ATL-1 * ``SMOG-1 Signalling``, custom signalling frames as used by SMOG-1. The difference with ``SMOG-P Signalling`` is the addition of a different PRBS to mark transitions to TX mode. * ``OPS-SAT``, custom framing used by OPS-SAT, which consists of AX.25 frames with CCSDS Reed-Solomon codewords as payload * ``UA01``, non-AX.25 compliant framing used by QB50 UA01, which is like regular AX.25 but with two layers of NRZ-I encoding * ``Mobitex``, the Mobitex protocol, used by the D-STAR ONE satellites and some Russian whose communications payload has also been built by German Orbital Systems * ``Mobitex-NX``, the Mobitex-NX protocol, used by the BEESAT and TECHNOSAT satellites from TU Berlin * ``FOSSATSAT``, a custom protocol used by FOSSASAT * ``AISTECHSAT-2``, a custom CCSDS-like protocol used by AISTECHSAT-2 * ``AALTO-1``, custom framing used by AALTO-1. It uses a Texas Intruments CC1125 transceiver with a PN9 scrambler and a CRC-16 CCITT (as in AX.25) * ``Grizu-263A``, custom framing used by Grizu-263A. It uses a Semtech SX1268 with a PN9 scrambler and CRC-16. * ``IDEASSat``, custom framing used by IDEASSat. It uses NRZI encoding, an 1N8 UART-like encoding with MSB-bit-ordering, and HDLC ``0x7e`` flags to mark the frame boundaries. * ``YUSAT``, custom framing used by YUSAT-1. It is like AX.25 but without bit stuffing, LSB byte endianness, and NRZ-I. * ``AX5043``, FEC framing used by the AX5043 transceiver IC. This uses a convolutional code, a 4x4 interleaver, and HDLC framing with the CRC16-USB. * ``USP``, the `Unified SPUTNIX Protocol`_, which is based on CCSDS concatenate frames with custom synchronization and a PLS based on DVB-S2. * ``DIY-1``, the custom framing used by DIY-1, which uses an RFM22 chip transceiver. * ``BINAR-1``, the custom framing used by the BINAR-1 satellite. Some framings, such as the CCSDS protocols need the additional field ``frame size`` to indicate the frame size. The CCSDS framings need several additional fields to specify the details of the CCSDS protocol. These are: * ``precoding: differential`` should be used to specify differential precoding. It if is not specified, differential precoding will not used. * ``RS basis:`` should have the value ``conventional`` or ``dual`` to specify the Reed-Solomon basis. This field is mandatory. * ``RS interleaving:`` should be used to specify interleaved Reed-Solomon codewords. It defaults to 1 (i.e., no interleaving) if not specified. * ``scrambler:`` should have the value ``CCSDS`` or ``none``. This field is optional and defaults to ``CCSDS`` if not specified. * ``convolutional:`` should have one of the following values: ``CCSDS``, ``NASA-DSN``, ``CCSDS uninverted``, ``NASA-DSN uninverted``. This field is optional and defaults to ``CCSDS`` if not specified. The ``AX100 ASM+Golay`` mode also supports the ``scrambler`` field, with the possible values ``CCSDS`` and ``none``. The default is ``CCSDS``, but the value ``none`` can be used in case the scrambler needs to be disabled (which is a rarely used feature). The following example shows how transports are indicated in SatYAML files. .. code-block:: none name: KS-1Q norad: 41845 data: &tlm Telemetry: telemetry: csp transports: &kiss KISS: protocol: KISS KS-1Q data: - *tlm transmitters: 20k FSK downlink: frequency: 436.500e+6 modulation: FSK baudrate: 20000 framing: CCSDS Concatenated dual frame size: 223 transports: - *kiss Instead of specifying a ``data`` entry in the transmitter, a ``transports`` entry is used instead. Transports are defined in a section above. They have a name, used for documentation purposes, a ``protocol``, and a list of ``data`` entries to tie them with the appropriate data decoders. The allowable transport protocols are the following: * ``KISS``, KISS protocol with a control byte (see :ref:`KISS transport`) * ``KISS no control byte``, KISS protocol with no control byte (see :ref:`KISS transport`) * ``KISS KS-1Q``, KISS variant used by KS-1Q, which includes a header before the KISS bytes .. _YAML: https://yaml.org/ .. _AX.25: http://www.ax25.net/ .. _FX.25: https://en.wikipedia.org/wiki/FX.25_Forward_Error_Correction .. _NGHam: https://github.com/skagmo/ngham .. _Unified SPUTNIX Protocol: https://sputnix.ru/tpl/docs/amateurs/USP%20protocol%20description%20v1.04.pdf gr-satellites-4.4.0/docs/source/supported_satellites.rst000066400000000000000000001225631414055407700235560ustar00rootroot00000000000000.. _Supported satellites: Supported satellites ==================== This is a list of all the satellites supported by gr-satellites. The list is auto-generated by reading the SatYAML files and using the script ``docs/generate_supported_satellites.py``. **1KUNS-PF** NORAD ID: 43466 Transmitters: * **1k2 FSK downlink** (437.300 MHz): FSK modulation with AX100 ASM+Golay framing * **9k6 FSK downlink** (437.300 MHz): FSK modulation with AX100 ASM+Golay framing **3CAT-1** NORAD ID: 43728 Transmitters: * **9k6 FSK downlink** (437.250 MHz): FSK modulation with 3CAT-1 framing **3CAT-2** NORAD ID: 41732 Transmitters: * **9k6 BPSK downlink** (145.970 MHz): BPSK modulation with AX.25 framing **AALTO-1** NORAD ID: 42775 Transmitters: * **9k6 FSK AX.25 downlink** (437.216 MHz): FSK modulation with AX.25 G3RUH framing * **9k6 FSK CC1125 downlink** (437.216 MHz): FSK modulation with AALTO-1 framing **AAUSAT-4** NORAD ID: 41460 Transmitters: * **2k4 FSK downlink** (437.425 MHz): FSK modulation with AAUSAT-4 framing * **9k6 FSK downlink** (437.425 MHz): FSK modulation with AAUSAT-4 framing **ACRUX-1** NORAD ID: 44369 Transmitters: * **9k6 FSK downlink** (437.200 MHz): FSK modulation with AX.25 G3RUH framing **AISAT** NORAD ID: 40054 Transmitters: * **4k8 AFSK downlink** (437.250 MHz): AFSK modulation with U482C framing **AISTECHSAT-2** NORAD ID: 43768 Transmitters: * **1k2 FSK custom CCSDS downlink** (436.600 MHz): FSK modulation with AISTECHSAT-2 framing * **1k2 FSK AX100 downlink** (436.600 MHz): FSK modulation with AX100 ASM+Golay framing * **4k8 FSK custom CCSDS downlink** (436.600 MHz): FSK modulation with AISTECHSAT-2 framing * **4k8 FSK AX100 downlink** (436.600 MHz): FSK modulation with AX100 ASM+Golay framing * **9k6 FSK custom CCSDS downlink** (436.600 MHz): FSK modulation with AISTECHSAT-2 framing * **9k6 FSK AX100 downlink** (436.600 MHz): FSK modulation with AX100 ASM+Golay framing **AISTECHSAT-3** NORAD ID: 44103 Transmitters: * **4k8 FSK downlink** (436.730 MHz): FSK modulation with AX100 ASM+Golay framing * **9k6 FSK downlink** (436.730 MHz): FSK modulation with AX100 ASM+Golay framing **al-Farabi-2** Alternative names: UN1GWA NORAD ID: 43805 Transmitters: * **4k8 FSK downlink** (436.500 MHz): FSK modulation with AX.25 G3RUH framing **AMGU-1** Alternative names: AMURSAT NORAD ID: 44394 Transmitters: * **4k8 FSK downlink** (436.250 MHz): FSK modulation with Mobitex framing **AmicalSat** NORAD ID: 46287 Transmitters: * **1k2 AFSK telemetry downlink** (436.100 MHz): AFSK modulation with AX.25 framing **AO-27** Alternative names: EYESAT-1, AO27 NORAD ID: 22825 Transmitters: * **1k2 AFSK telemetry downlink** (436.795 MHz): AFSK modulation with AX.25 framing **AO-40** NORAD ID: 26609 Transmitters: * **400baud uncoded BPSK beacon** (2400.200 MHz): DBPSK Manchester modulation with AO-40 uncoded framing * **400baud FEC BPSK beacon** (2400.200 MHz): DBPSK Manchester modulation with AO-40 FEC framing **AO-73** Alternative names: FUNcube-1 NORAD ID: 39444 Transmitters: * **1k2 BPSK downlink** (145.935 MHz): DBPSK modulation with AO-40 FEC framing **ARMADILLO** NORAD ID: 44352 Transmitters: * **19k2 FSK downlink** (437.525 MHz): FSK modulation with AX.25 G3RUH framing **Astrocast 0.1** NORAD ID: 43798 Transmitters: * **1k2 FSK FX.25 NRZ-I downlink** (437.175 MHz): FSK modulation with Astrocast FX.25 NRZ-I framing * **1k2 FSK FX.25 NRZ downlink** (437.175 MHz): FSK modulation with Astrocast FX.25 NRZ framing * **9k6 FSK downlink** (437.175 MHz): FSK modulation with CCSDS Reed-Solomon framing **Astrocast 0.2** Alternative names: HB9GSF NORAD ID: 44083 Transmitters: * **9k6 FSK downlink** (437.175 MHz): FSK modulation with AX.25 G3RUH framing * **1k2 FSK FX.25 NRZ-I downlink** (437.175 MHz): FSK modulation with Astrocast FX.25 NRZ-I framing * **1k2 FSK FX.25 NRZ downlink** (437.175 MHz): FSK modulation with Astrocast FX.25 NRZ framing **AT03** Alternative names: Pegasus, QB50 AT03 NORAD ID: 42784 Transmitters: * **9k6 FSK downlink** (436.670 MHz): FSK modulation with TT-64 framing **ATHENOXAT-1** NORAD ID: 41168 Transmitters: * **4k8 AFSK downlink** (437.485 MHz): AFSK modulation with U482C framing **ATL-1** Alternative names: MO-106 NORAD ID: 44830 Transmitters: * **1k25 FSK long concatenated FEC** (437.175 MHz): FSK modulation with AO-40 FEC framing * **1k25 FSK short concatenated FEC** (437.175 MHz): FSK modulation with AO-40 FEC short framing * **1k25 FSK long RA FEC** (437.175 MHz): FSK modulation with SMOG-P RA framing * **1k25 FSK short RA FEC** (437.175 MHz): FSK modulation with SMOG-P RA framing * **1k25 FSK signalling** (437.175 MHz): FSK modulation with SMOG-P Signalling framing * **2k5 FSK long concatenated FEC** (437.175 MHz): FSK modulation with AO-40 FEC framing * **2k5 FSK short concatenated FEC** (437.175 MHz): FSK modulation with AO-40 FEC short framing * **2k5 FSK long RA FEC** (437.175 MHz): FSK modulation with SMOG-P RA framing * **2k5 FSK short RA FEC** (437.175 MHz): FSK modulation with SMOG-P RA framing * **5k FSK long concatenated FEC** (437.175 MHz): FSK modulation with AO-40 FEC framing * **5k FSK short concatenated FEC** (437.175 MHz): FSK modulation with AO-40 FEC short framing * **5k FSK long RA FEC** (437.175 MHz): FSK modulation with SMOG-P RA framing * **5k FSK short RA FEC** (437.175 MHz): FSK modulation with SMOG-P RA framing * **12k5 FSK long concatenated FEC** (437.175 MHz): FSK modulation with AO-40 FEC framing * **12k5 FSK short concatenated FEC** (437.175 MHz): FSK modulation with AO-40 FEC short framing * **12k5 FSK long RA FEC** (437.175 MHz): FSK modulation with SMOG-P RA framing * **12k5 FSK short RA FEC** (437.175 MHz): FSK modulation with SMOG-P RA framing **ATLANTIS** Alternative names: US02 ON02US NORAD ID: 42737 Transmitters: * **9k6 FSK downlink** (436.388 MHz): FSK modulation with AX.25 G3RUH framing **AU02** Alternative names: QB50 AU02, UNSW-EC0 NORAD ID: 42723 Transmitters: * **4k8 AFSK downlink** (436.525 MHz): AFSK modulation with U482C framing **AU03** Alternative names: QB50 AU03, i-INSPIRE II NORAD ID: 42731 Transmitters: * **4k8 AFSK downlink** (436.330 MHz): AFSK modulation with U482C framing **AztechSat-1** NORAD ID: 45258 Transmitters: * **9k6 FSK downlink** (437.300 MHz): FSK modulation with AX100 ASM+Golay framing **BCCSAT 1** NORAD ID: 48041 Transmitters: * **4k8 FSK downlink** (435.635 MHz): FSK modulation with AX.25 G3RUH framing **BEESAT-1** NORAD ID: 35933 Transmitters: * **4k8 FSK downlink** (435.950 MHz): FSK modulation with Mobitex-NX framing * **9k6 FSK downlink** (435.950 MHz): FSK modulation with Mobitex-NX framing **BEESAT-2** NORAD ID: 39136 Transmitters: * **4k8 FSK downlink** (435.950 MHz): FSK modulation with Mobitex-NX framing **BEESAT-4** NORAD ID: 41619 Transmitters: * **4k8 FSK downlink** (435.950 MHz): FSK modulation with Mobitex-NX framing **BEESAT-9** NORAD ID: 44412 Transmitters: * **4k8 FSK downlink** (435.950 MHz): FSK modulation with Mobitex-NX framing **BINAR-1** NORAD ID: 49272 Transmitters: * **1k2 FSK downlink** (435.810 MHz): FSK modulation with BINAR-1 framing * **9k6 FSK downlink** (435.810 MHz): FSK modulation with BINAR-1 framing * **1k2 FSK AX.25 downlink** (435.810 MHz): FSK modulation with AX.25 G3RUH framing * **9k6 FSK AX.25 downlink** (435.810 MHz): FSK modulation with AX.25 G3RUH framing **BISONSAT** Alternative names: N7SKC NORAD ID: 40968 Transmitters: * **9k6 FSK downlink** (437.375 MHz): FSK modulation with AX.25 G3RUH framing **BOBCAT-1** NORAD ID: 46922 Transmitters: * **100k FSK downlink** (436.600 MHz): FSK modulation with AX100 ASM+Golay framing * **75k FSK downlink** (436.600 MHz): FSK modulation with AX100 ASM+Golay framing * **57k6 FSK downlink** (436.600 MHz): FSK modulation with AX100 ASM+Golay framing * **38k4 FSK downlink** (436.600 MHz): FSK modulation with AX100 ASM+Golay framing * **19k2 FSK downlink** (436.600 MHz): FSK modulation with AX100 ASM+Golay framing * **9k6 FSK downlink** (436.600 MHz): FSK modulation with AX100 ASM+Golay framing * **4k8 FSK downlink** (436.600 MHz): FSK modulation with AX100 ASM+Golay framing * **1k2 FSK downlink** (436.600 MHz): FSK modulation with AX100 ASM+Golay framing **BRICSat-2** Alternative names: USNA-P1, USNAP1, NO-103 NORAD ID: 44355 Transmitters: * **1k2 AFSK downlink** (145.825 MHz): AFSK modulation with AX.25 framing * **9k6 FSK downlink** (437.600 MHz): FSK modulation with AX.25 G3RUH framing **BUGSAT-1** Alternative names: TITA NORAD ID: 40014 Transmitters: * **9k6 FSK downlink** (437.445 MHz): FSK modulation with AX.25 G3RUH framing **BY02** Alternative names: BY70-2 NORAD ID: 45857 Transmitters: * **9k6 BPSK downlink** (436.200 MHz): BPSK modulation with LilacSat-1 framing **BY03** Alternative names: BY70-3 NORAD ID: 46839 Transmitters: * **9k6 BPSK downlink** (437.600 MHz): BPSK modulation with AX.25 G3RUH framing **BY70-1** NORAD ID: 41909 Transmitters: * **9k6 BPSK downlink** (436.200 MHz): BPSK modulation with CCSDS Concatenated framing **CA03** Alternative names: QB50 CA03, ExAlta-1 NORAD ID: 42734 Transmitters: * **4k8 FSK downlink** (436.705 MHz): FSK modulation with AX100 Reed Solomon framing * **9k6 FSK downlink** (436.705 MHz): FSK modulation with AX100 Reed Solomon framing **CAPE-3** NORAD ID: 47309 Transmitters: * **1k2 AFSK AX.25 downlink** (437.325 MHz): AFSK modulation with AX.25 framing * **1k2 FSK AX5043 downlink** (437.325 MHz): FSK modulation with AX5043 framing **CAS-4A** NORAD ID: 42761 Transmitters: * **4k8 FSK downlink** (145.836 MHz): FSK modulation with AX.25 G3RUH framing **CAS-4B** NORAD ID: 42759 Transmitters: * **4k8 FSK downlink** (145.893 MHz): FSK modulation with AX.25 G3RUH framing **CAS-6** Alternative names: TIANQIN-1 NORAD ID: 44881 Transmitters: * **9k6 FSK downlink** (145.890 MHz): FSK modulation with AX.25 G3RUH framing **CHOMPTT** NORAD ID: 43855 Transmitters: * **9k6 FSK downlink** (437.560 MHz): FSK modulation with AX.25 G3RUH framing * **1k2 AFSK downlink** (437.560 MHz): AFSK modulation with AX.25 framing **COLUMBIA** Alternative names: US04, ON04US NORAD ID: 42702 Transmitters: * **9k6 FSK downlink** (437.055 MHz): FSK modulation with AX.25 G3RUH framing **CSIM-FD** NORAD ID: 43793 Transmitters: * **9k6 FSK downlink** (437.250 MHz): FSK modulation with AX.25 G3RUH framing **CUAVA-1** NORAD ID: 99521 Transmitters: * **9k6 FSK downlink** (437.075 MHz): BPSK modulation with AX.25 G3RUH framing **CUBE-L** NORAD ID: 47448 Transmitters: * **9k6 FSK downlink** (400.575 MHz): FSK modulation with AX100 ASM+Golay framing **CubeBel-1** Alternative names: BSUSat-1 NORAD ID: 43666 Transmitters: * **9k6 FSK downlink** (436.990 MHz): FSK modulation with AX.25 G3RUH framing **CUBEBUG-2** Alternative names: LO-74 NORAD ID: 39440 Transmitters: * **9k6 FSK downlink** (437.445 MHz): FSK modulation with AX.25 G3RUH framing **CubeSX-HSE** NORAD ID: 47952 Transmitters: * **1k2 FSK downlink** (435.650 MHz): FSK modulation with USP framing * **2k4 FSK downlink** (435.650 MHz): FSK modulation with USP framing * **4k8 FSK downlink** (435.650 MHz): FSK modulation with USP framing * **9k6 FSK downlink** (435.650 MHz): FSK modulation with USP framing **CubeSX-Sirius-HSE** NORAD ID: 47951 Transmitters: * **1k2 FSK downlink** (437.050 MHz): FSK modulation with USP framing * **2k4 FSK downlink** (437.050 MHz): FSK modulation with USP framing * **4k8 FSK downlink** (437.050 MHz): FSK modulation with USP framing * **9k6 FSK downlink** (437.050 MHz): FSK modulation with USP framing **CUTE** NORAD ID: 49263 Transmitters: * **9k6 FSK downlink** (437.250 MHz): FSK modulation with AX.25 G3RUH framing **CZ02** Alternative names: QB50 CZ0, VZLUSAT-1 NORAD ID: 42790 Transmitters: * **4k8 AFSK downlink** (437.240 MHz): AFSK modulation with U482C framing **D-SAT** NORAD ID: 42794 Transmitters: * **4k8 AFSK downlink** (437.505 MHz): AFSK modulation with U482C framing **D-STAR ONE iSat** NORAD ID: 43879 Transmitters: * **4k8 FSK downlink** (435.700 MHz): FSK modulation with Mobitex framing **D-STAR ONE Sparrow** NORAD ID: 43881 Transmitters: * **4k8 FSK downlink** (435.700 MHz): FSK modulation with Mobitex framing **DEKART** NORAD ID: 46493 Transmitters: * **4k8 FSK downlink** (437.000 MHz): FSK modulation with Mobitex framing **DELFI-C3** Alternative names: DO64 NORAD ID: 32789 Transmitters: * **1k2 BPSK downlink** (145.867 MHz): BPSK modulation with AX.25 framing **DELFI-n3xt** NORAD ID: 39428 Transmitters: * **2k4 BPSK downlink** (145.870 MHz): BPSK modulation with AX.25 framing **Delphini-1** NORAD ID: 44030 Transmitters: * **4k8 FSK downlink** (437.500 MHz): FSK modulation with AX100 ASM+Golay framing * **9k6 FSK downlink** (437.500 MHz): FSK modulation with AX100 ASM+Golay framing **DHABISAT** Alternative names: MYSat-2 NORAD ID: 49016 Transmitters: * **1k2 BPSK downlink** (436.908 MHz): BPSK modulation with AX.25 G3RUH framing * **2k4 BPSK downlink** (436.908 MHz): BPSK modulation with AX.25 G3RUH framing * **4k8 BPSK downlink** (436.908 MHz): BPSK modulation with AX.25 G3RUH framing * **9k6 BPSK downlink** (436.908 MHz): BPSK modulation with AX.25 G3RUH framing **DIY-1** NORAD ID: 47963 Transmitters: * **500 baud FSK downlink** (437.125 MHz): FSK modulation with DIY-1 framing **DUCHIFAT-3** NORAD ID: 44854 Transmitters: * **9k6 BPSK downlink** (436.400 MHz): BPSK modulation with AX.25 G3RUH framing **E-ST@R-II** NORAD ID: 41459 Transmitters: * **1k2 AFSK downlink** (437.485 MHz): AFSK modulation with AX.25 framing **Eaglet-I** NORAD ID: 43790 Transmitters: * **9k6 FSK downlink** (435.800 MHz): FSK modulation with AX.25 G3RUH framing **ECAMSAT** NORAD ID: 43019 Transmitters: * **1k2 AFSK downlink** (437.095 MHz): AFSK modulation with AX.25 framing **ELFIN-A** Alternative names: WJ2XNX NORAD ID: 43617 Transmitters: * **19k2 FSK downlink** (437.450 MHz): FSK modulation with AX.25 G3RUH framing * **9k6 FSK downlink** (437.450 MHz): FSK modulation with AX.25 G3RUH framing **ELFIN-B** Alternative names: ELFIN-STAR, WJ2XOX NORAD ID: 43616 Transmitters: * **19k2 FSK downlink** (437.475 MHz): FSK modulation with AX.25 G3RUH framing * **9k6 FSK downlink** (437.475 MHz): FSK modulation with AX.25 G3RUH framing **ENDUROSAT ONE** Alternative names: ENDUROSAT AD NORAD ID: 43551 Transmitters: * **9k6 FSK downlink** (437.050 MHz): FSK modulation with AX.25 G3RUH framing **EntrySat** NORAD ID: 44429 Transmitters: * **9k6 BPSK downlink** (436.950 MHz): BPSK modulation with AX.25 G3RUH framing **ESEO** Alternative names: FUNcube-4 NORAD ID: 43792 Transmitters: * **9k6 FSK downlink** (437.000 MHz): FSK modulation with ESEO framing * **4k8 FSK downlink** (437.000 MHz): FSK modulation with ESEO framing **EXOCUBE-2** Alternative names: CP12 NORAD ID: 47319 Transmitters: * **9k6 FSK downlink** (437.150 MHz): FSK modulation with AX.25 G3RUH framing **FACSAT-1** NORAD ID: 43721 Transmitters: * **9k6 FSK downlink** (437.350 MHz): FSK modulation with AX100 ASM+Golay framing **FALCONSAT-3** NORAD ID: 30776 Transmitters: * **9k6 FSK downlink** (435.103 MHz): FSK modulation with AX.25 G3RUH framing **FIREBIRD 3** NORAD ID: 40377 Transmitters: * **19k2 FSK downlink** (437.397 MHz): FSK modulation with AX.25 G3RUH framing **FIREBIRD 4** NORAD ID: 40378 Transmitters: * **19k2 FSK downlink** (437.220 MHz): FSK modulation with AX.25 G3RUH framing **FloripaSat-1** NORAD ID: 44885 Transmitters: * **1k2 FSK beacon** (145.900 MHz): FSK modulation with NGHam no Reed Solomon framing * **2k4 FSK downlink** (436.100 MHz): FSK modulation with NGHam no Reed Solomon framing **FMN-1** Alternative names: FengMaNiu-1 NORAD ID: 43192 Transmitters: * **9k6 BPSK downlink** (435.350 MHz): BPSK modulation with AX.25 G3RUH framing **FOSSASAT-1B** NORAD ID: 99999 Transmitters: * **9k6 FSK downlink** (436.980 MHz): FSK modulation with FOSSASAT framing **FOSSASAT-2** NORAD ID: 99998 Transmitters: * **9k6 FSK downlink** (436.900 MHz): FSK modulation with FOSSASAT framing **GALASSIA** NORAD ID: 41170 Transmitters: * **4k8 AFSK downlink** (436.400 MHz): AFSK modulation with U482C framing **GO-32** Alternative names: TECHSAT-1B NORAD ID: 25397 Transmitters: * **9k6 FSK downlink A** (435.325 MHz): FSK modulation with AX.25 G3RUH framing * **9k6 FSK downlink B** (435.225 MHz): FSK modulation with AX.25 G3RUH framing **GOMX-1** NORAD ID: 39430 Transmitters: * **4k8 AFSK downlink** (437.250 MHz): AFSK modulation with U482C framing **GOMX-3** NORAD ID: 40949 Transmitters: * **19k2 FSK downlink** (437.250 MHz): FSK modulation with AX100 Reed Solomon framing **GR01** Alternative names: QB50 GR01, DUTHSat NORAD ID: 42724 Transmitters: * **1k2 BPSK downlink** (436.420 MHz): BPSK modulation with AX.25 G3RUH framing * **9k6 BPSK downlink** (436.420 MHz): BPSK modulation with AX.25 G3RUH framing **GRBAlpha** NORAD ID: 47959 Transmitters: * **9k6 FSK downlink** (437.025 MHz): FSK modulation with AX.25 G3RUH framing **GRIFEX** NORAD ID: 40379 Transmitters: * **9k6 FSK downlink** (437.481 MHz): FSK modulation with AX.25 G3RUH framing **Grizu-263A** NORAD ID: 99990 Transmitters: * **2k4 FSK downlink** (435.675 MHz): FSK modulation with Grizu-263A framing **IDEASSat** NORAD ID: 47458 Transmitters: * **9k6 FSK downlink** (437.345 MHz): FSK modulation with IDEASSat framing **IL01** Alternative names: QB50 IL01, DUCHIFAT-2, Hoopoe NORAD ID: 42718 Transmitters: * **9k6 BPSK downlink** (437.740 MHz): BPSK modulation with AX.25 G3RUH framing **INNOSAT-2** NORAD ID: 43738 Transmitters: * **4k8 FSK downlink** (437.450 MHz): FSK modulation with AX100 ASM+Golay framing **INS-1C** NORAD ID: 43116 Transmitters: * **1k2 FSK downlink** (435.080 MHz): FSK modulation with AX.25 framing **ION SCV-003** NORAD ID: 48912 Transmitters: * **1k2 FSK downlink** (437.515 MHz): FSK modulation with AX100 ASM+Golay framing **ION-MK01** Alternative names: ION mk01, ION SVC Lucas NORAD ID: 46274 Transmitters: * **1k2 FSK downlink** (437.515 MHz): FSK modulation with AX100 ASM+Golay framing **IRAZU** Alternative names: Irazú NORAD ID: 43468 Transmitters: * **9k6 FSK downlink** (436.500 MHz): FSK modulation with AX.25 G3RUH framing **IRVINE-01** NORAD ID: 43693 Transmitters: * **9k6 FSK downlink** (437.800 MHz): FSK modulation with AX.25 G3RUH framing **IT-SPINS** NORAD ID: 49017 Transmitters: * **19k2 FSK downlink** (437.405 MHz): FSK modulation with AX.25 G3RUH framing **ITASAT 1** NORAD ID: 43786 Transmitters: * **1k2 BPSK downlink** (145.860 MHz): BPSK modulation with AX.25 framing **JAISAT-1** NORAD ID: 44419 Transmitters: * **4k8 FSK downlink** (435.700 MHz): FSK modulation with Mobitex framing **JY1-Sat** Alternative names: FUNcube-6, JO-97 NORAD ID: 43803 Transmitters: * **1k2 BPSK downlink** (145.840 MHz): DBPSK modulation with AO-40 FEC framing **KAIDUN-1** NORAD ID: 41915 Transmitters: * **1k2 BPSK downlink** (437.600 MHz): BPSK modulation with AX.25 G3RUH framing **KAITUO-1B** NORAD ID: 40912 Transmitters: * **9k6 FSK downlink** (145.475 MHz): FSK modulation with AX.25 G3RUH framing **KR01** Alternative names: QB50 KR01, LINK NORAD ID: 42714 Transmitters: * **1k2 BPSK downlink** (436.030 MHz): BPSK modulation with AX.25 G3RUH framing * **9k6 BPSK downlink** (436.030 MHz): BPSK modulation with AX.25 G3RUH framing **KrakSat** Alternative names: SR9KRA NORAD ID: 44427 Transmitters: * **9k6 FSK downlink** (435.500 MHz): FSK modulation with AX.25 G3RUH framing **KS-1Q** NORAD ID: 41845 Transmitters: * **20k FSK downlink** (436.500 MHz): FSK modulation with CCSDS Concatenated framing **KSU CubeSat** NORAD ID: 49754 Transmitters: * **4k8 FSK downlink** (437.130 MHz): FSK modulation with AX.25 G3RUH framing **LEDSAT** NORAD ID: 49069 Transmitters: * **1k2 FSK downlink** (435.190 MHz): FSK modulation with AX100 ASM+Golay framing * **9k6 FSK downlink** (435.190 MHz): FSK modulation with AX100 ASM+Golay framing **LightSail-2** Alternative names: WM9XPA, LightSail-B NORAD ID: 44420 Transmitters: * **9k6 FSK downlink** (437.025 MHz): FSK modulation with AX.25 G3RUH framing **LilacSat-1** Alternative names: CN02, QB50 CN02, LO-90 NORAD ID: 42725 Transmitters: * **9k6 BPSK downlink** (436.510 MHz): BPSK modulation with LilacSat-1 framing **LilacSat-2** NORAD ID: 40908 Transmitters: * **9k6 BPSK downlink** (437.200 MHz): BPSK modulation with CCSDS Concatenated framing * **4k8 FSK downlink** (437.225 MHz): FSK modulation with CCSDS Concatenated framing * **300baud subaudio downlink** (437.200 MHz): FSK subaudio modulation with CCSDS Reed-Solomon framing **LITUANICASAT-2** NORAD ID: 42768 Transmitters: * **9k6 FSK downlink** (437.265 MHz): FSK modulation with AX.25 G3RUH framing **Lucky-7** NORAD ID: 44406 Transmitters: * **4k8 FSK downlink** (437.525 MHz): FSK modulation with Lucky-7 framing **LUME-1** NORAD ID: 43908 Transmitters: * **4k8 FSK downlink** (437.060 MHz): FSK modulation with AX100 ASM+Golay framing **Luojia-1** NORAD ID: 43485 Transmitters: * **4k8 FSK downlink** (437.250 MHz): FSK modulation with AX100 ASM+Golay framing **M6P** NORAD ID: 44109 Transmitters: * **9k6 FSK downlink** (437.265 MHz): FSK modulation with AX.25 G3RUH framing **MCUBED-2** NORAD ID: 39469 Transmitters: * **9k6 FSK downlink** (437.480 MHz): FSK modulation with AX.25 G3RUH framing **MEZNSAT** NORAD ID: 46489 Transmitters: * **1k2 BPSK downlink** (436.600 MHz): BPSK modulation with AX.25 G3RUH framing * **2k4 BPSK downlink** (436.600 MHz): BPSK modulation with AX.25 G3RUH framing * **9k6 BPSK downlink** (436.600 MHz): BPSK modulation with AX.25 G3RUH framing **MINXSS** NORAD ID: 41474 Transmitters: * **9k6 FSK downlink** (437.345 MHz): FSK modulation with AX.25 G3RUH framing **MinXSS 2** NORAD ID: 43758 Transmitters: * **9k6 FSK downlink** (437.250 MHz): FSK modulation with AX.25 G3RUH framing * **19k2 FSK downlink** (437.250 MHz): FSK modulation with AX.25 G3RUH framing **MIR-SAT1** NORAD ID: 48868 Transmitters: * **9k6 FSK downlink** (436.925 MHz): FSK modulation with AX.25 G3RUH framing **MiTEE-1** NORAD ID: 47314 Transmitters: * **9k6 FSK downlink** (437.800 MHz): FSK modulation with AX.25 G3RUH framing **MYSAT 1** NORAD ID: 44045 Transmitters: * **1k2 BPSK downlink** (435.775 MHz): BPSK modulation with AX.25 G3RUH framing * **9k6 BPSK downlink** (435.775 MHz): BPSK modulation with AX.25 G3RUH framing **NanosatC-BR1** NORAD ID: 40024 Transmitters: * **1k2 BPSK downlink** (145.865 MHz): BPSK modulation with AX.25 framing **NanosatC-BR2** NORAD ID: 47950 Transmitters: * **1k2 BPSK downlink** (145.865 MHz): BPSK modulation with AX.25 framing * **4k8 BPSK downlink** (145.865 MHz): BPSK modulation with AX.25 framing **Nayif-1** Alternative names: FUNcube-5, EO-88 NORAD ID: 42017 Transmitters: * **1k2 BPSK downlink** (145.940 MHz): DBPSK modulation with AO-40 FEC framing **NETSAT 1** NORAD ID: 46506 Transmitters: * **9k6 FSK downlink** (435.600 MHz): FSK modulation with AX.25 G3RUH framing **NETSAT 2** NORAD ID: 46507 Transmitters: * **9k6 FSK downlink** (435.600 MHz): FSK modulation with AX.25 G3RUH framing **NETSAT 3** NORAD ID: 46505 Transmitters: * **9k6 FSK downlink** (435.600 MHz): FSK modulation with AX.25 G3RUH framing **NETSAT 4** NORAD ID: 46504 Transmitters: * **9k6 FSK downlink** (435.600 MHz): FSK modulation with AX.25 G3RUH framing **NEUTRON-1** NORAD ID: 46923 Transmitters: * **1k2 BPSK downlink** (435.300 MHz): BPSK modulation with AX.25 G3RUH framing * **9k6 BPSK downlink** (435.300 MHz): BPSK modulation with AX.25 G3RUH framing **NEXUS** Alternative names: JS1WAV, FO-99, Fuji-OSCAR 99 NORAD ID: 43937 Transmitters: * **1k2 AFSK downlink** (435.900 MHz): AFSK modulation with AX.25 framing * **9k6 FSK downlink** (435.900 MHz): FSK modulation with AX.25 G3RUH framing **NO-84** Alternative names: PSAT, ParkinsonSAT NORAD ID: 40654 Transmitters: * **1k2 AFSK downlink** (145.825 MHz): AFSK modulation with AX.25 framing **NODES 1** NORAD ID: 41478 Transmitters: * **1k2 AFSK downlink** (437.100 MHz): AFSK modulation with AX.25 framing * **19k2 FSK downlink** (2401.200 MHz): FSK modulation with AX.25 G3RUH framing **NODES 2** NORAD ID: 41477 Transmitters: * **1k2 AFSK downlink** (437.100 MHz): AFSK modulation with AX.25 framing * **19k2 FSK downlink** (2401.200 MHz): FSK modulation with AX.25 G3RUH framing **NORBI** NORAD ID: 46494 Transmitters: * **9k6 FSK downlink** (436.700 MHz): FSK modulation with AX.25 G3RUH framing **NSIGHT-1** Alternative names: AZ02 ON02AZ NORAD ID: 42726 Transmitters: * **9k6 FSK downlink** (435.900 MHz): FSK modulation with AX.25 G3RUH framing **NuSat 1** Alternative names: ÑuSat 1 NORAD ID: 41557 Transmitters: * **40k FSK downlink** (436.445 MHz): FSK modulation with NuSat framing **O/OREOS** Alternative names: USA 219 NORAD ID: 37224 Transmitters: * **1k2 AFSK downlink** (437.305 MHz): AFSK modulation with AX.25 framing **OPS-SAT** NORAD ID: 44878 Transmitters: * **9k6 FSK downlink** (437.200 MHz): FSK modulation with OPS-SAT framing **OrbiCraft-Zorkiy** NORAD ID: 47960 Transmitters: * **1k2 FSK downlink** (437.850 MHz): FSK modulation with USP framing * **2k4 FSK downlink** (437.850 MHz): FSK modulation with USP framing * **4k8 FSK downlink** (437.850 MHz): FSK modulation with USP framing * **9k6 FSK downlink** (437.850 MHz): FSK modulation with USP framing **PAINANI-1** NORAD ID: 44365 Transmitters: * **9k6 FSK downlink** (437.475 MHz): FSK modulation with AX.25 G3RUH framing **PHOENIX** Alternative names: TW01, ON01TW NORAD ID: 42706 Transmitters: * **9k6 FSK downlink** (436.915 MHz): FSK modulation with AX.25 G3RUH framing **PHONESAT 2.4** NORAD ID: 39381 Transmitters: * **1k2 AFSK downlink** (437.425 MHz): AFSK modulation with AX.25 framing **PicSat** NORAD ID: 43132 Transmitters: * **1k2 BPSK downlink** (435.525 MHz): BPSK modulation with AX.25 G3RUH framing * **9k6 BPSK downlink** (435.525 MHz): BPSK modulation with AX.25 G3RUH framing **POLYITAN-1** NORAD ID: 40042 Transmitters: * **1k2 AFSK downlink** (437.675 MHz): AFSK modulation with AX.25 framing * **9k6 FSK downlink** (437.676 MHz): FSK modulation with AX.25 G3RUH framing **PW-Sat2** NORAD ID: 43814 Transmitters: * **1k2 BPSK downlink** (435.275 MHz): BPSK modulation with AX.25 G3RUH framing * **9k6 BPSK downlink** (435.275 MHz): BPSK modulation with AX.25 G3RUH framing **QARMAN** NORAD ID: 45257 Transmitters: * **9k6 FSK downlink** (437.350 MHz): FSK modulation with AX.25 G3RUH framing **QBEE** Alternative names: SE01, ON01SE NORAD ID: 42708 Transmitters: * **9k6 FSK downlink** (435.800 MHz): FSK modulation with AX.25 G3RUH framing **QMR-KWT** NORAD ID: 48943 Transmitters: * **9k6 FSK downlink** (436.500 MHz): FSK modulation with AX.25 G3RUH framing **QO-100** Alternative names: Es'hail 2 NORAD ID: 43700 Transmitters: * **400baud uncoded BPSK beacon** (10489.800 MHz): DBPSK Manchester modulation with AO-40 uncoded framing * **400baud FEC BPSK beacon** (10489.800 MHz): DBPSK Manchester modulation with AO-40 FEC framing **Quetzal-1** NORAD ID: 45598 Transmitters: * **4k8 FSK downlink** (437.200 MHz): FSK modulation with AX.25 G3RUH framing **RAMSAT** NORAD ID: 48850 Transmitters: * **9k6 FSK downlink** (436.300 MHz): FSK modulation with AX.25 G3RUH framing **Reaktor Hello World** NORAD ID: 43743 Transmitters: * **9k6 FSK downlink** (437.775 MHz): FSK modulation with Reaktor Hello World framing **ROBUSTA-1B** NORAD ID: 42792 Transmitters: * **1k2 AFSK downlink** (437.325 MHz): AFSK modulation with AX.25 framing **S-NET A** Alternative names: DP0TBB NORAD ID: 43188 Transmitters: * **1k2 AFSK downlink** (435.950 MHz): AFSK modulation with S-NET framing **S-NET B** Alternative names: DP0TBC NORAD ID: 43187 Transmitters: * **1k2 AFSK downlink** (435.950 MHz): AFSK modulation with S-NET framing **S-NET C** Alternative names: DP0TBD NORAD ID: 43189 Transmitters: * **1k2 AFSK downlink** (435.950 MHz): AFSK modulation with S-NET framing **S-NET D** Alternative names: DP0TBE NORAD ID: 43186 Transmitters: * **1k2 AFSK downlink** (435.950 MHz): AFSK modulation with S-NET framing **SALSAT** NORAD ID: 46495 Transmitters: * **1k2 AFSK downlink** (435.950 MHz): AFSK modulation with SALSAT framing **Shaonian Xing** Alternative names: MXSat-1 NORAD ID: 43199 Transmitters: * **9k6 BPSK downlink** (436.375 MHz): BPSK modulation with AX.25 G3RUH framing **SIMBA** Alternative names: WildTrackCube-SIMBA NORAD ID: 47941 Transmitters: * **1k2 FSK downlink** (435.310 MHz): FSK modulation with AX100 ASM+Golay framing * **9k6 FSK downlink** (435.310 MHz): FSK modulation with AX100 ASM+Golay framing **SiriusSat-1** Alternative names: RS13S NORAD ID: 43595 Transmitters: * **4k8 FSK downlink** (435.570 MHz): FSK modulation with AX.25 G3RUH framing **SiriusSat-2** Alternative names: RS14S NORAD ID: 43596 Transmitters: * **4k8 FSK downlink** (435.670 MHz): FSK modulation with AX.25 G3RUH framing **SKCUBE** NORAD ID: 42789 Transmitters: * **9k6 FSK downlink** (437.100 MHz): FSK modulation with AX.25 G3RUH framing **SMOG-1** NORAD ID: 47964 Transmitters: * **1k25 FSK long concatenated FEC** (437.345 MHz): FSK modulation with AO-40 FEC CRC-16-ARC framing * **1k25 FSK short concatenated FEC** (437.345 MHz): FSK modulation with AO-40 FEC CRC-16-ARC short framing * **1k25 FSK long RA FEC** (437.345 MHz): FSK modulation with SMOG-1 RA framing * **1k25 FSK short RA FEC** (437.345 MHz): FSK modulation with SMOG-1 RA framing * **1k25 FSK signalling** (437.345 MHz): FSK modulation with SMOG-1 Signalling framing * **2k5 FSK long concatenated FEC** (437.345 MHz): FSK modulation with AO-40 FEC CRC-16-ARC framing * **2k5 FSK short concatenated FEC** (437.345 MHz): FSK modulation with AO-40 FEC CRC-16-ARC short framing * **2k5 FSK long RA FEC** (437.345 MHz): FSK modulation with SMOG-1 RA framing * **2k5 FSK short RA FEC** (437.345 MHz): FSK modulation with SMOG-1 RA framing * **5k FSK long concatenated FEC** (437.345 MHz): FSK modulation with AO-40 FEC CRC-16-ARC framing * **5k FSK short concatenated FEC** (437.345 MHz): FSK modulation with AO-40 FEC CRC-16-ARC short framing * **5k FSK long RA FEC** (437.345 MHz): FSK modulation with SMOG-1 RA framing * **5k FSK short RA FEC** (437.345 MHz): FSK modulation with SMOG-1 RA framing * **12k5 FSK long concatenated FEC** (437.345 MHz): FSK modulation with AO-40 FEC CRC-16-ARC framing * **12k5 FSK short concatenated FEC** (437.345 MHz): FSK modulation with AO-40 FEC CRC-16-ARC short framing * **12k5 FSK long RA FEC** (437.345 MHz): FSK modulation with SMOG-1 RA framing * **12k5 FSK short RA FEC** (437.345 MHz): FSK modulation with SMOG-1 RA framing **SMOG-P** Alternative names: MO-105 NORAD ID: 44832 Transmitters: * **1k25 FSK long concatenated FEC** (437.150 MHz): FSK modulation with AO-40 FEC framing * **1k25 FSK short concatenated FEC** (437.150 MHz): FSK modulation with AO-40 FEC short framing * **1k25 FSK long RA FEC** (437.150 MHz): FSK modulation with SMOG-P RA framing * **1k25 FSK short RA FEC** (437.150 MHz): FSK modulation with SMOG-P RA framing * **1k25 FSK signalling** (437.150 MHz): FSK modulation with SMOG-P Signalling framing * **2k5 FSK long concatenated FEC** (437.150 MHz): FSK modulation with AO-40 FEC framing * **2k5 FSK short concatenated FEC** (437.150 MHz): FSK modulation with AO-40 FEC short framing * **2k5 FSK long RA FEC** (437.150 MHz): FSK modulation with SMOG-P RA framing * **2k5 FSK short RA FEC** (437.150 MHz): FSK modulation with SMOG-P RA framing * **5k FSK long concatenated FEC** (437.150 MHz): FSK modulation with AO-40 FEC framing * **5k FSK short concatenated FEC** (437.150 MHz): FSK modulation with AO-40 FEC short framing * **5k FSK long RA FEC** (437.150 MHz): FSK modulation with SMOG-P RA framing * **5k FSK short RA FEC** (437.150 MHz): FSK modulation with SMOG-P RA framing * **12k5 FSK long concatenated FEC** (437.150 MHz): FSK modulation with AO-40 FEC framing * **12k5 FSK short concatenated FEC** (437.150 MHz): FSK modulation with AO-40 FEC short framing * **12k5 FSK long RA FEC** (437.150 MHz): FSK modulation with SMOG-P RA framing * **12k5 FSK short RA FEC** (437.150 MHz): FSK modulation with SMOG-P RA framing **SNUGLITE** Alternative names: DS0DH NORAD ID: 43784 Transmitters: * **9k6 FSK downlink** (437.275 MHz): FSK modulation with AX.25 G3RUH framing **SOAR** NORAD ID: 48851 Transmitters: * **4k8 FSK downlink** (401.725 MHz): FSK modulation with AX100 ASM+Golay framing **SOKRAT** NORAD ID: 44404 Transmitters: * **4k8 FSK downlink** (436.000 MHz): FSK modulation with Mobitex framing **SOMP 2b** NORAD ID: 47445 Transmitters: * **9k6 FSK downlink** (435.600 MHz): FSK modulation with AX.25 G3RUH framing **SPOC** NORAD ID: 46921 Transmitters: * **9k6 FSK downlink** (437.350 MHz): FSK modulation with AX.25 G3RUH framing **SpooQy-1** NORAD ID: 44332 Transmitters: * **9k6 FSK downlink** (436.200 MHz): FSK modulation with AX100 ASM+Golay framing * **4k8 FSK downlink** (436.200 MHz): FSK modulation with AX100 ASM+Golay framing **STECCO** NORAD ID: 47962 Transmitters: * **9k6 FSK downlink** (435.800 MHz): FSK modulation with AX.25 G3RUH framing **STRAND-1** Alternative names: STRaND-1 NORAD ID: 39090 Transmitters: * **9k6 FSK downlink** (437.568 MHz): FSK modulation with AX.25 G3RUH framing **Suomi 100** NORAD ID: 43804 Transmitters: * **9k6 FSK downlink** (437.775 MHz): FSK modulation with AX100 ASM+Golay framing **SwampSat-2** NORAD ID: 45115 Transmitters: * **9k6 FSK downlink** (436.350 MHz): FSK modulation with AX.25 G3RUH framing **Swiatowid** NORAD ID: 44426 Transmitters: * **1k2 AFSK telemetry downlink** (435.500 MHz): AFSK modulation with AX.25 framing * **9k6 FSK image downlink** (435.500 MHz): FSK modulation with Swiatowid framing **Tanusha-3** Alternative names: Tanusha-SWSU-3 (RS-8), RS8S NORAD ID: 43597 Transmitters: * **9k6 FSK downlink** (437.050 MHz): FSK modulation with AX.25 G3RUH framing * **1k2 AFSK downlink** (437.050 MHz): AFSK modulation with AX.25 framing **Taurus-1** NORAD ID: 44530 Transmitters: * **9k6 BPSK downlink** (435.840 MHz): BPSK modulation with LilacSat-1 framing **TAUSAT-1** NORAD ID: 47926 Transmitters: * **9k6 BPSK downlink** (436.400 MHz): BPSK modulation with AX.25 G3RUH framing **TBEX-A** NORAD ID: 44356 Transmitters: * **9k6 FSK downlink** (437.485 MHz): FSK modulation with AX.25 G3RUH framing **TBEX-B** NORAD ID: 44359 Transmitters: * **9k6 FSK downlink** (437.535 MHz): FSK modulation with AX.25 G3RUH framing * **9k6 FSK downlink 2** (437.485 MHz): FSK modulation with AX.25 G3RUH framing **TECHNOSAT** NORAD ID: 42829 Transmitters: * **4k8 FSK downlink** (435.950 MHz): FSK modulation with Mobitex-NX framing **TIGRISAT** NORAD ID: 40043 Transmitters: * **9k6 FSK downlink** (435.000 MHz): FSK modulation with AX.25 G3RUH framing **TRISAT** NORAD ID: 46280 Transmitters: * **9766 baud FSK downlink** (435.612 MHz): FSK modulation with CCSDS Concatenated framing **TSURU** NORAD ID: 47927 Transmitters: * **4k8 FSK downlink** (437.375 MHz): FSK modulation with AX.25 G3RUH framing **TTU-100** Alternative names: Hamarik NORAD ID: 46312 Transmitters: * **9k6 FSK downlink** (435.450 MHz): FSK modulation with AX.25 G3RUH framing **TUBIN** NORAD ID: 48900 Transmitters: * **4k8 FSK downlink** (435.950 MHz): FSK modulation with Mobitex-NX framing **TW-1A** NORAD ID: 40928 Transmitters: * **4k8 FSK downlink** (435.645 MHz): FSK modulation with AX100 Reed Solomon framing **TW-1B** NORAD ID: 40927 Transmitters: * **4k8 FSK downlink** (437.645 MHz): FSK modulation with AX100 Reed Solomon framing **TW-1C** NORAD ID: 40926 Transmitters: * **4k8 FSK downlink** (435.645 MHz): FSK modulation with AX100 Reed Solomon framing **TY 4-01** NORAD ID: 43669 Transmitters: * **9k6 FSK downlink** (435.925 MHz): FSK modulation with AX100 ASM+Golay framing **TY-2** NORAD ID: 43155 Transmitters: * **9k6 FSK downlink** (435.350 MHz): FSK modulation with AX100 ASM+Golay framing **TY-6** NORAD ID: 43158 Transmitters: * **9k6 FSK downlink** (436.100 MHz): FSK modulation with AX100 ASM+Golay framing **UA01** Alternative names: PolyITAN 2-SAU, QB50 UA01 NORAD ID: 42732 Transmitters: * **9k6 FSK downlink** (436.600 MHz): BPSK modulation with UA01 framing **UBAKUSAT** NORAD ID: 43467 Transmitters: * **9k6 FSK downlink** (437.325 MHz): FSK modulation with AX.25 G3RUH framing **UCLSAT** NORAD ID: 42765 Transmitters: * **9k6 FSK downlink** (435.975 MHz): FSK modulation with AX.25 G3RUH framing **UKube-1** Alternative names: FUNcube-2 NORAD ID: 40074 Transmitters: * **1k2 BPSK downlink** (145.840 MHz): DBPSK modulation with AO-40 FEC framing **UNISAT-6** NORAD ID: 40012 Transmitters: * **9k6 FSK downlink** (437.421 MHz): FSK modulation with AX.25 G3RUH framing **UNISAT-7** NORAD ID: 47945 Transmitters: * **9k6 FSK downlink** (437.425 MHz): FSK modulation with AX.25 G3RUH framing **UPMSat 2** NORAD ID: 46276 Transmitters: * **1k2 FSK telemetry downlink** (437.405 MHz): FSK modulation with AX.25 framing **URSA MAIOR** Alternative names: IT02 NORAD ID: 42776 Transmitters: * **9k6 FSK downlink** (435.950 MHz): FSK modulation with AX.25 G3RUH framing **US01** Alternative names: Challenger, QB50 US01, QBUS 1 NORAD ID: 42721 Transmitters: * **9k6 FSK downlink** (437.505 MHz): FSK modulation with AX.25 G3RUH framing **UVSQ-SAT** NORAD ID: 47438 Transmitters: * **1k2 BPSK downlink** (437.020 MHz): BPSK modulation with AX.25 G3RUH framing * **9k6 BPSK downlink** (437.020 MHz): BPSK modulation with AX.25 G3RUH framing **UWE-3** NORAD ID: 39446 Transmitters: * **1k2 AFSK downlink** (437.385 MHz): AFSK modulation with AX.25 framing * **9k6 FSK downlink** (437.384 MHz): FSK modulation with AX.25 G3RUH framing **UWE-4** Alternative names: DP0UWH NORAD ID: 43880 Transmitters: * **9k6 FSK downlink** (435.600 MHz): FSK modulation with AX.25 G3RUH framing **VZLUSAT-2** NORAD ID: 99997 Transmitters: * **9k6 FSK downlink** (437.325 MHz): FSK modulation with AX100 ASM+Golay framing * **4k8 FSK downlink** (437.325 MHz): FSK modulation with AX100 ASM+Golay framing **X-CUBESAT** Alternative names: FR01, ON01FR NORAD ID: 42707 Transmitters: * **9k6 FSK downlink** (437.020 MHz): FSK modulation with AX.25 G3RUH framing * **1k2 AFSK downlink** (437.020 MHz): AFSK modulation with AX.25 framing **XW-2A** Alternative names: CAS-3A NORAD ID: 40903 Transmitters: * **9k6 FSK downlink** (145.640 MHz): FSK modulation with AX.25 G3RUH framing **XW-2B** Alternative names: CAS-3B NORAD ID: 40911 Transmitters: * **9k6 FSK downlink** (145.705 MHz): FSK modulation with AX.25 G3RUH framing **XW-2C** Alternative names: CAS-3C NORAD ID: 40906 Transmitters: * **19k2 FSK downlink** (145.770 MHz): FSK modulation with AX.25 G3RUH framing **XW-2D** Alternative names: CAS-3D NORAD ID: 40907 Transmitters: * **9k6 FSK downlink** (145.835 MHz): FSK modulation with AX.25 G3RUH framing **XW-2E** Alternative names: CAS-3E NORAD ID: 40909 Transmitters: * **9k6 FSK downlink** (145.890 MHz): FSK modulation with AX.25 G3RUH framing **XW-2F** Alternative names: CAS-3F NORAD ID: 40910 Transmitters: * **9k6 FSK downlink** (145.955 MHz): FSK modulation with AX.25 G3RUH framing **YUSAT-1** NORAD ID: 47439 Transmitters: * **9k6 FSK downlink** (436.250 MHz): FSK modulation with YUSAT framing **ZACUBE-1** Alternative names: South Africa CubeSat-1, TshepisoSat, ZA003 NORAD ID: 39417 Transmitters: * **9k6 FSK downlink** (437.356 MHz): FSK modulation with AX.25 G3RUH framing **Zhou Enlai** NORAD ID: 43156 Transmitters: * **9k6 BPSK downlink** (436.420 MHz): BPSK modulation with AX.25 G3RUH framing gr-satellites-4.4.0/docs/source/utilities.rst000066400000000000000000000034361414055407700213100ustar00rootroot00000000000000.. _Miscellaneous utilities: Miscellaneous utilities ======================= Some small utilities are included in gr-satellties. These are described below. JY1SAT SSDV decoder ^^^^^^^^^^^^^^^^^^^ The JY1SAT SSDV decoder ``jy1sat_ssdv.py`` can be used to extract and decode SSDV images transmitted by `JY1SAT`_. To use the decoder, an `ssdv fork`_ supporting the JY1SAT SSDV frame format needs to be installed. The decoder operates over a KISS file containing JY1SAT frames. The KISS file can be produced with the ``--kiss_out`` option of ``gr_satellites`` and might contain information for one or several images collected over one or several passes. The decoder is run as .. code-block:: console $ jy1sat_ssdv.py frames.kss /tmp/output This will create files ``/tmp/output_n.ssdv`` with the extracted SSDV frames and ``/tmp/output_n.jpg`` with the decoded JPEG image data, where ``n`` is the number of the image. .. _JY1SAT: https://amsat-uk.org/tag/jy1sat/ .. _ssdv fork: https://github.com/daniestevez/ssdv SMOG-P spectrum plot ^^^^^^^^^^^^^^^^^^^^ The SMOG-P spectrum plot tool ``smog_p_spectrum.py`` can be used to plot spectrum data files transmitted by `SMOG-P`_ and `ATL-1`_ . These files are produced by the :ref:`file receiver component `. The ``smog_p_spectrum.py`` script can be run by using the name of the spectrum data file as argument. For instance, .. code-block:: console $ smog_p_spectrum.py spectrum_start_824000000_step_24000_rbw_6_measid_312 This will create an image ``spectrum_312.png`` in the same directory as the spectrum file (here ``312`` is the ID of the measurement, and is contained at the end of the spectrum file name). .. _SMOG-P: https://space.skyrocket.de/doc_sdat/smog-p.htm .. _ATL-1: https://space.skyrocket.de/doc_sdat/atl-1.htm gr-satellites-4.4.0/examples/000077500000000000000000000000001414055407700161235ustar00rootroot00000000000000gr-satellites-4.4.0/examples/README000066400000000000000000000002501414055407700170000ustar00rootroot00000000000000It is considered good practice to add examples in here to demonstrate the functionality of your OOT module. Python scripts, GRC flow graphs or other code can go here. gr-satellites-4.4.0/examples/ax25/000077500000000000000000000000001414055407700167025ustar00rootroot00000000000000gr-satellites-4.4.0/examples/ax25/README.md000066400000000000000000000003531414055407700201620ustar00rootroot00000000000000# AX.25 examples The set of example flowgraphs in this folder were originally created in [gr-kiss](https://github.com/daniestevez/gr-kiss), which has been deprecated. These examples are now housed within this folder in gr-satellites. gr-satellites-4.4.0/examples/ax25/afsk.grc000066400000000000000000000332231414055407700203260ustar00rootroot00000000000000options: parameters: author: Daniel Estevez category: Custom cmake_opt: '' comment: '' copyright: '' description: This example implements an FSK 1k2 AX.25 transceiver gen_cmake: 'On' gen_linking: dynamic generate_options: qt_gui hier_block_src_path: '.:' id: afsk max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: prompt sizing_mode: fixed thread_safe_setters: '' title: AFSK example window_size: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: samp_per_sym id: variable parameters: comment: '' value: '40' states: bus_sink: false bus_source: false bus_structure: null coordinate: [312, 13] rotation: 0 state: enabled - name: samp_rate id: variable parameters: comment: '' value: '48000' states: bus_sink: false bus_source: false bus_structure: null coordinate: [200, 13] rotation: 0 state: enabled - name: analog_frequency_modulator_fc_0 id: analog_frequency_modulator_fc parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' sensitivity: 2*math.pi*1000/samp_rate states: bus_sink: false bus_source: false bus_structure: null coordinate: [488, 780] rotation: 0 state: enabled - name: analog_quadrature_demod_cf_0 id: analog_quadrature_demod_cf parameters: affinity: '' alias: '' comment: '' gain: samp_rate/(2*math.pi*500) maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [512, 220] rotation: 0 state: enabled - name: analog_sig_source_x_0 id: analog_sig_source_x parameters: affinity: '' alias: '' amp: '1' comment: '' freq: '-1700' maxoutbuf: '0' minoutbuf: '0' offset: '0' phase: '0' samp_rate: samp_rate type: complex waveform: analog.GR_COS_WAVE states: bus_sink: false bus_source: false bus_structure: null coordinate: [168, 96] rotation: 0 state: enabled - name: analog_sig_source_x_1 id: analog_sig_source_x parameters: affinity: '' alias: '' amp: '1' comment: '' freq: '1200' maxoutbuf: '0' minoutbuf: '0' offset: '0' phase: '0' samp_rate: samp_rate type: complex waveform: analog.GR_SIN_WAVE states: bus_sink: false bus_source: false bus_structure: null coordinate: [496, 856] rotation: 0 state: enabled - name: audio_sink_0 id: audio_sink parameters: affinity: '' alias: '' comment: '' device_name: '' num_inputs: '1' ok_to_block: 'True' samp_rate: samp_rate states: bus_sink: false bus_source: false bus_structure: null coordinate: [1104, 796] rotation: 0 state: enabled - name: audio_source_0 id: audio_source parameters: affinity: '' alias: '' comment: '' device_name: '' maxoutbuf: '0' minoutbuf: '0' num_outputs: '1' ok_to_block: 'True' samp_rate: samp_rate states: bus_sink: false bus_source: false bus_structure: null coordinate: [40, 244] rotation: 0 state: enabled - name: blocks_char_to_float_0 id: blocks_char_to_float parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' scale: '1' vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [312, 780] rotation: 0 state: enabled - name: blocks_complex_to_real_0 id: blocks_complex_to_real parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [904, 801] rotation: 0 state: enabled - name: blocks_message_debug_0 id: blocks_message_debug parameters: affinity: '' alias: '' comment: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [592, 345] rotation: 0 state: enabled - name: blocks_multiply_xx_0 id: blocks_multiply_xx parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' num_inputs: '2' type: complex vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [392, 209] rotation: 0 state: enabled - name: blocks_multiply_xx_1 id: blocks_multiply_xx parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' num_inputs: '2' type: complex vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [696, 785] rotation: 0 state: enabled - name: blocks_pdu_to_tagged_stream_0 id: blocks_pdu_to_tagged_stream parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' tag: packet_len type: byte states: bus_sink: false bus_source: false bus_structure: null coordinate: [736, 508] rotation: 0 state: enabled - name: blocks_pdu_to_tagged_stream_0_0 id: blocks_pdu_to_tagged_stream parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' tag: packet_len type: byte states: bus_sink: false bus_source: false bus_structure: null coordinate: [416, 636] rotation: 0 state: enabled - name: blocks_repeat_0 id: blocks_repeat parameters: affinity: '' alias: '' comment: '' interp: samp_per_sym maxoutbuf: '0' minoutbuf: '0' type: byte vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [128, 780] rotation: 0 state: enabled - name: blocks_socket_pdu_0 id: blocks_socket_pdu parameters: affinity: '' alias: '' comment: '' host: '' maxoutbuf: '0' minoutbuf: '0' mtu: '10000' port: '52001' tcp_no_delay: 'True' type: TCP_SERVER states: bus_sink: false bus_source: false bus_structure: null coordinate: [536, 480] rotation: 0 state: enabled - name: digital_binary_slicer_fb_0 id: digital_binary_slicer_fb parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [960, 225] rotation: 0 state: enabled - name: digital_clock_recovery_mm_xx_0 id: digital_clock_recovery_mm_xx parameters: affinity: '' alias: '' comment: '' gain_mu: '0.175' gain_omega: 0.25*0.175*0.175 maxoutbuf: '0' minoutbuf: '0' mu: '0.5' omega: samp_per_sym*(1+0.0) omega_relative_limit: '0.005' type: float states: bus_sink: false bus_source: false bus_structure: null coordinate: [720, 192] rotation: 0 state: enabled - name: hilbert_fc_0 id: hilbert_fc parameters: affinity: '' alias: '' beta: '6.76' comment: '' maxoutbuf: '0' minoutbuf: '0' num_taps: '65' win: firdes.WIN_HAMMING states: bus_sink: false bus_source: false bus_structure: null coordinate: [224, 244] rotation: 0 state: enabled - name: qtgui_time_sink_x_0 id: qtgui_time_sink_x parameters: affinity: '' alias: '' alpha1: '1.0' alpha10: '1.0' alpha2: '1.0' alpha3: '1.0' alpha4: '1.0' alpha5: '1.0' alpha6: '1.0' alpha7: '1.0' alpha8: '1.0' alpha9: '1.0' autoscale: 'False' axislabels: 'True' color1: blue color10: dark blue color2: red color3: green color4: black color5: cyan color6: magenta color7: yellow color8: dark red color9: dark green comment: '' ctrlpanel: 'False' entags: 'True' grid: 'False' gui_hint: '' label1: '' label10: '' label2: '' label3: '' label4: '' label5: '' label6: '' label7: '' label8: '' label9: '' legend: 'True' marker1: '-1' marker10: '-1' marker2: '-1' marker3: '-1' marker4: '-1' marker5: '-1' marker6: '-1' marker7: '-1' marker8: '-1' marker9: '-1' name: '""' nconnections: '1' size: '1024' srate: samp_rate stemplot: 'False' style1: '1' style10: '1' style2: '1' style3: '1' style4: '1' style5: '1' style6: '1' style7: '1' style8: '1' style9: '1' tr_chan: '0' tr_delay: '0' tr_level: '0.0' tr_mode: qtgui.TRIG_MODE_FREE tr_slope: qtgui.TRIG_SLOPE_POS tr_tag: '""' type: float update_time: '0.10' width1: '1' width10: '1' width2: '1' width3: '1' width4: '1' width5: '1' width6: '1' width7: '1' width8: '1' width9: '1' ylabel: Amplitude ymax: '1' ymin: '-1' yunit: '""' states: bus_sink: false bus_source: false bus_structure: null coordinate: [728, 78] rotation: 0 state: enabled - name: qtgui_waterfall_sink_x_0 id: qtgui_waterfall_sink_x parameters: affinity: '' alias: '' alpha1: '1.0' alpha10: '1.0' alpha2: '1.0' alpha3: '1.0' alpha4: '1.0' alpha5: '1.0' alpha6: '1.0' alpha7: '1.0' alpha8: '1.0' alpha9: '1.0' axislabels: 'True' bw: samp_rate color1: '0' color10: '0' color2: '0' color3: '0' color4: '0' color5: '0' color6: '0' color7: '0' color8: '0' color9: '0' comment: '' fc: '0' fftsize: '1024' freqhalf: 'True' grid: 'False' gui_hint: '' int_max: '10' int_min: '-140' label1: '' label10: '' label2: '' label3: '' label4: '' label5: '' label6: '' label7: '' label8: '' label9: '' legend: 'True' maxoutbuf: '0' minoutbuf: '0' name: '""' nconnections: '1' showports: 'True' type: complex update_time: '0.10' wintype: firdes.WIN_BLACKMAN_hARRIS states: bus_sink: false bus_source: false bus_structure: null coordinate: [928, 710] rotation: 0 state: enabled - name: satellites_hdlc_deframer_0 id: satellites_hdlc_deframer parameters: affinity: '' alias: '' check_fcs: 'True' comment: '' max_length: '10000' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [232, 396.0] rotation: 0 state: enabled - name: satellites_hdlc_framer_0 id: satellites_hdlc_framer parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' postamble_bytes: '7' preamble_bytes: '50' states: bus_sink: false bus_source: false bus_structure: null coordinate: [160, 628.0] rotation: 0 state: enabled - name: satellites_kiss_to_pdu_0 id: satellites_kiss_to_pdu parameters: affinity: '' alias: '' comment: '' control_byte: 'True' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1040, 508.0] rotation: 0 state: enabled - name: satellites_nrzi_decode_0 id: satellites_nrzi_decode parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [64, 408.0] rotation: 0 state: enabled - name: satellites_nrzi_encode_0 id: satellites_nrzi_encode parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [712, 640.0] rotation: 0 state: enabled - name: satellites_pdu_to_kiss_0 id: satellites_pdu_to_kiss parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [352, 520.0] rotation: 0 state: enabled connections: - [analog_frequency_modulator_fc_0, '0', blocks_multiply_xx_1, '0'] - [analog_quadrature_demod_cf_0, '0', digital_clock_recovery_mm_xx_0, '0'] - [analog_quadrature_demod_cf_0, '0', qtgui_time_sink_x_0, '0'] - [analog_sig_source_x_0, '0', blocks_multiply_xx_0, '0'] - [analog_sig_source_x_1, '0', blocks_multiply_xx_1, '1'] - [audio_source_0, '0', hilbert_fc_0, '0'] - [blocks_char_to_float_0, '0', analog_frequency_modulator_fc_0, '0'] - [blocks_complex_to_real_0, '0', audio_sink_0, '0'] - [blocks_multiply_xx_0, '0', analog_quadrature_demod_cf_0, '0'] - [blocks_multiply_xx_1, '0', blocks_complex_to_real_0, '0'] - [blocks_multiply_xx_1, '0', qtgui_waterfall_sink_x_0, '0'] - [blocks_pdu_to_tagged_stream_0, '0', satellites_kiss_to_pdu_0, '0'] - [blocks_pdu_to_tagged_stream_0_0, '0', satellites_nrzi_encode_0, '0'] - [blocks_repeat_0, '0', blocks_char_to_float_0, '0'] - [blocks_socket_pdu_0, pdus, blocks_pdu_to_tagged_stream_0, pdus] - [digital_binary_slicer_fb_0, '0', satellites_nrzi_decode_0, '0'] - [digital_clock_recovery_mm_xx_0, '0', digital_binary_slicer_fb_0, '0'] - [hilbert_fc_0, '0', blocks_multiply_xx_0, '1'] - [satellites_hdlc_deframer_0, out, blocks_message_debug_0, print_pdu] - [satellites_hdlc_deframer_0, out, satellites_pdu_to_kiss_0, in] - [satellites_hdlc_framer_0, out, blocks_pdu_to_tagged_stream_0_0, pdus] - [satellites_kiss_to_pdu_0, out, satellites_hdlc_framer_0, in] - [satellites_nrzi_decode_0, '0', satellites_hdlc_deframer_0, '0'] - [satellites_nrzi_encode_0, '0', blocks_repeat_0, '0'] - [satellites_pdu_to_kiss_0, out, blocks_socket_pdu_0, pdus] metadata: file_format: 1 gr-satellites-4.4.0/examples/ax25/bpsk.grc000066400000000000000000000415601414055407700203440ustar00rootroot00000000000000options: parameters: author: Daniel Estevez category: Custom cmake_opt: '' comment: '' copyright: '' description: This example implements an FSK 9k6 AX.25 G3RUH transceiver gen_cmake: 'On' gen_linking: dynamic generate_options: qt_gui hier_block_src_path: '.:' id: bpsk max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: prompt sizing_mode: fixed thread_safe_setters: '' title: BPSK example window_size: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: samp_per_sym id: variable parameters: comment: '' value: '8' states: bus_sink: false bus_source: false bus_structure: null coordinate: [312, 13] rotation: 0 state: enabled - name: samp_rate id: variable parameters: comment: '' value: '9600' states: bus_sink: false bus_source: false bus_structure: null coordinate: [200, 13] rotation: 0 state: enabled - name: variable_constellation_0 id: variable_constellation parameters: comment: '' const_points: '[-1, 1]' dims: '1' precision: '8' rot_sym: '2' soft_dec_lut: None sym_map: '[0, 1]' type: calcdist states: bus_sink: false bus_source: false bus_structure: null coordinate: [488, 8] rotation: 0 state: enabled - name: analog_feedforward_agc_cc_0 id: analog_feedforward_agc_cc parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' num_samples: '1024' reference: '2' states: bus_sink: false bus_source: false bus_structure: null coordinate: [784, 149] rotation: 0 state: enabled - name: analog_sig_source_x_0 id: analog_sig_source_x parameters: affinity: '' alias: '' amp: '1' comment: '' freq: '-1500' maxoutbuf: '0' minoutbuf: '0' offset: '0' phase: '0' samp_rate: '48000' type: complex waveform: analog.GR_COS_WAVE states: bus_sink: false bus_source: false bus_structure: null coordinate: [192, 184] rotation: 0 state: enabled - name: analog_sig_source_x_0_0 id: analog_sig_source_x parameters: affinity: '' alias: '' amp: '0.5' comment: '' freq: '1500' maxoutbuf: '0' minoutbuf: '0' offset: '0' phase: '0' samp_rate: '48000' type: complex waveform: analog.GR_COS_WAVE states: bus_sink: false bus_source: false bus_structure: null coordinate: [48, 896] rotation: 0 state: enabled - name: audio_sink_0 id: audio_sink parameters: affinity: '' alias: '' comment: '' device_name: '' num_inputs: '1' ok_to_block: 'True' samp_rate: '48000' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1072, 956] rotation: 0 state: enabled - name: audio_source_0 id: audio_source parameters: affinity: '' alias: '' comment: '' device_name: '' maxoutbuf: '0' minoutbuf: '0' num_outputs: '1' ok_to_block: 'True' samp_rate: '48000' states: bus_sink: false bus_source: false bus_structure: null coordinate: [32, 116] rotation: 0 state: enabled - name: blocks_complex_to_float_0 id: blocks_complex_to_float parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [840, 945] rotation: 0 state: enabled - name: blocks_complex_to_real_0 id: blocks_complex_to_real parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [296, 601] rotation: 0 state: enabled - name: blocks_message_debug_0 id: blocks_message_debug parameters: affinity: '' alias: '' comment: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1112, 625] rotation: 0 state: enabled - name: blocks_multiply_const_vxx_0 id: blocks_multiply_const_vxx parameters: affinity: '' alias: '' comment: '' const: '0.5' maxoutbuf: '0' minoutbuf: '0' type: complex vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [120, 596] rotation: 0 state: enabled - name: blocks_multiply_xx_0 id: blocks_multiply_xx parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' num_inputs: '2' type: complex vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [392, 145] rotation: 0 state: enabled - name: blocks_multiply_xx_1 id: blocks_multiply_xx parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' num_inputs: '2' type: complex vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [704, 945] rotation: 0 state: enabled - name: blocks_pdu_to_tagged_stream_0 id: blocks_pdu_to_tagged_stream parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' tag: packet_len type: byte states: bus_sink: false bus_source: false bus_structure: null coordinate: [64, 812] rotation: 0 state: enabled - name: blocks_pdu_to_tagged_stream_0_0 id: blocks_pdu_to_tagged_stream parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' tag: packet_len type: byte states: bus_sink: false bus_source: false bus_structure: null coordinate: [488, 708] rotation: 0 state: enabled - name: blocks_socket_pdu_0 id: blocks_socket_pdu parameters: affinity: '' alias: '' comment: '' host: '' maxoutbuf: '0' minoutbuf: '0' mtu: '10000' port: '52001' tcp_no_delay: 'True' type: TCP_SERVER states: bus_sink: false bus_source: false bus_structure: null coordinate: [288, 672] rotation: 0 state: enabled - name: blocks_unpacked_to_packed_xx_0 id: blocks_unpacked_to_packed_xx parameters: affinity: '' alias: '' bits_per_chunk: '1' comment: '' endianness: gr.GR_MSB_FIRST maxoutbuf: '0' minoutbuf: '0' num_ports: '1' type: byte states: bus_sink: false bus_source: false bus_structure: null coordinate: [456, 805] rotation: 0 state: enabled - name: digital_binary_slicer_fb_0 id: digital_binary_slicer_fb parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [472, 601] rotation: 0 state: enabled - name: digital_costas_loop_cc_0_0 id: digital_costas_loop_cc parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' order: '2' use_snr: 'False' w: '0.02' states: bus_sink: false bus_source: false bus_structure: null coordinate: [392, 417] rotation: 0 state: enabled - name: digital_fll_band_edge_cc_0 id: digital_fll_band_edge_cc parameters: affinity: '' alias: '' comment: '' filter_size: '100' maxoutbuf: '0' minoutbuf: '0' rolloff: '0.350' samps_per_sym: samp_per_sym type: cc w: '0.010' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1008, 169] rotation: 0 state: enabled - name: digital_lms_dd_equalizer_cc_0_0 id: digital_lms_dd_equalizer_cc parameters: affinity: '' alias: '' cnst: variable_constellation_0 comment: '' maxoutbuf: '0' minoutbuf: '0' mu: '0.05' num_taps: '2' sps: '2' states: bus_sink: false bus_source: false bus_structure: null coordinate: [672, 415] rotation: 0 state: enabled - name: digital_pfb_clock_sync_xxx_0 id: digital_pfb_clock_sync_xxx parameters: affinity: '' alias: '' comment: '' filter_size: '16' init_phase: '8' loop_bw: '0.05' max_dev: '0.05' maxoutbuf: '0' minoutbuf: '0' osps: '2' sps: samp_per_sym taps: firdes.root_raised_cosine(16, 16, 1.0/float(samp_per_sym), 0.35, 11*samp_per_sym*16) type: ccf states: bus_sink: false bus_source: false bus_structure: null coordinate: [80, 385] rotation: 0 state: enabled - name: digital_psk_mod_0 id: digital_psk_mod parameters: affinity: '' alias: '' comment: '' constellation_points: '2' differential: 'False' excess_bw: '0.35' log: 'False' maxoutbuf: '0' minoutbuf: '0' mod_code: '"none"' samples_per_symbol: samp_per_sym*5 verbose: 'False' states: bus_sink: false bus_source: false bus_structure: null coordinate: [664, 784] rotation: 0 state: enabled - name: hilbert_fc_0 id: hilbert_fc parameters: affinity: '' alias: '' beta: '6.76' comment: '' maxoutbuf: '0' minoutbuf: '0' num_taps: '65' win: firdes.WIN_HAMMING states: bus_sink: false bus_source: false bus_structure: null coordinate: [232, 116] rotation: 0 state: enabled - name: low_pass_filter_0 id: low_pass_filter parameters: affinity: '' alias: '' beta: '6.76' comment: '' cutoff_freq: '1500' decim: '5' gain: '1' interp: '1' maxoutbuf: '0' minoutbuf: '0' samp_rate: '48000' type: fir_filter_ccf width: '500' win: firdes.WIN_HAMMING states: bus_sink: false bus_source: false bus_structure: null coordinate: [552, 114] rotation: 0 state: enabled - name: qtgui_const_sink_x_0 id: qtgui_const_sink_x parameters: affinity: '' alias: '' alpha1: '1.0' alpha10: '1.0' alpha2: '1.0' alpha3: '1.0' alpha4: '1.0' alpha5: '1.0' alpha6: '1.0' alpha7: '1.0' alpha8: '1.0' alpha9: '1.0' autoscale: 'False' axislabels: 'True' color1: '"blue"' color10: '"red"' color2: '"red"' color3: '"red"' color4: '"red"' color5: '"red"' color6: '"red"' color7: '"red"' color8: '"red"' color9: '"red"' comment: '' grid: 'False' gui_hint: '' label1: '' label10: '' label2: '' label3: '' label4: '' label5: '' label6: '' label7: '' label8: '' label9: '' legend: 'True' marker1: '0' marker10: '0' marker2: '0' marker3: '0' marker4: '0' marker5: '0' marker6: '0' marker7: '0' marker8: '0' marker9: '0' name: '""' nconnections: '1' size: '200' style1: '0' style10: '0' style2: '0' style3: '0' style4: '0' style5: '0' style6: '0' style7: '0' style8: '0' style9: '0' tr_chan: '0' tr_level: '0.0' tr_mode: qtgui.TRIG_MODE_FREE tr_slope: qtgui.TRIG_SLOPE_POS tr_tag: '""' type: complex update_time: '0.10' width1: '1' width10: '1' width2: '1' width3: '1' width4: '1' width5: '1' width6: '1' width7: '1' width8: '1' width9: '1' xmax: '2' xmin: '-2' ymax: '2' ymin: '-2' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1032, 365] rotation: 0 state: enabled - name: qtgui_freq_sink_x_0 id: qtgui_freq_sink_x parameters: affinity: '' alias: '' alpha1: '1.0' alpha10: '1.0' alpha2: '1.0' alpha3: '1.0' alpha4: '1.0' alpha5: '1.0' alpha6: '1.0' alpha7: '1.0' alpha8: '1.0' alpha9: '1.0' autoscale: 'False' average: '1.0' axislabels: 'True' bw: samp_rate color1: '"blue"' color10: '"dark blue"' color2: '"red"' color3: '"green"' color4: '"black"' color5: '"cyan"' color6: '"magenta"' color7: '"yellow"' color8: '"dark red"' color9: '"dark green"' comment: '' ctrlpanel: 'False' fc: '0' fftsize: '1024' freqhalf: 'True' grid: 'False' gui_hint: '' label: Relative Gain label1: '' label10: '' label2: '' label3: '' label4: '' label5: '' label6: '' label7: '' label8: '' label9: '' legend: 'True' maxoutbuf: '0' minoutbuf: '0' name: '""' nconnections: '2' showports: 'True' tr_chan: '0' tr_level: '0.0' tr_mode: qtgui.TRIG_MODE_FREE tr_tag: '""' type: complex units: dB update_time: '0.10' width1: '1' width10: '1' width2: '1' width3: '1' width4: '1' width5: '1' width6: '1' width7: '1' width8: '1' width9: '1' wintype: firdes.WIN_BLACKMAN_hARRIS ymax: '10' ymin: '-140' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1056, 30] rotation: 0 state: enabled - name: satellites_hdlc_deframer_0 id: satellites_hdlc_deframer parameters: affinity: '' alias: '' check_fcs: 'True' comment: '' max_length: '10000' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [792, 588.0] rotation: 0 state: enabled - name: satellites_hdlc_framer_0 id: satellites_hdlc_framer parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' postamble_bytes: '7' preamble_bytes: '50' states: bus_sink: false bus_source: false bus_structure: null coordinate: [912, 700.0] rotation: 0 state: enabled - name: satellites_kiss_to_pdu_0 id: satellites_kiss_to_pdu parameters: affinity: '' alias: '' comment: '' control_byte: 'True' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [704, 708.0] rotation: 0 state: enabled - name: satellites_nrzi_decode_0 id: satellites_nrzi_decode parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [640, 600.0] rotation: 0 state: enabled - name: satellites_nrzi_encode_0 id: satellites_nrzi_encode parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [296, 816.0] rotation: 0 state: enabled - name: satellites_pdu_to_kiss_0 id: satellites_pdu_to_kiss parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [112, 704.0] rotation: 0 state: enabled connections: - [analog_feedforward_agc_cc_0, '0', digital_fll_band_edge_cc_0, '0'] - [analog_feedforward_agc_cc_0, '0', qtgui_freq_sink_x_0, '0'] - [analog_sig_source_x_0, '0', blocks_multiply_xx_0, '1'] - [analog_sig_source_x_0_0, '0', blocks_multiply_xx_1, '1'] - [audio_source_0, '0', hilbert_fc_0, '0'] - [blocks_complex_to_float_0, '0', audio_sink_0, '0'] - [blocks_complex_to_real_0, '0', digital_binary_slicer_fb_0, '0'] - [blocks_multiply_const_vxx_0, '0', blocks_complex_to_real_0, '0'] - [blocks_multiply_xx_0, '0', low_pass_filter_0, '0'] - [blocks_multiply_xx_1, '0', blocks_complex_to_float_0, '0'] - [blocks_pdu_to_tagged_stream_0, '0', satellites_nrzi_encode_0, '0'] - [blocks_pdu_to_tagged_stream_0_0, '0', satellites_kiss_to_pdu_0, '0'] - [blocks_socket_pdu_0, pdus, blocks_pdu_to_tagged_stream_0_0, pdus] - [blocks_unpacked_to_packed_xx_0, '0', digital_psk_mod_0, '0'] - [digital_binary_slicer_fb_0, '0', satellites_nrzi_decode_0, '0'] - [digital_costas_loop_cc_0_0, '0', digital_lms_dd_equalizer_cc_0_0, '0'] - [digital_fll_band_edge_cc_0, '0', digital_pfb_clock_sync_xxx_0, '0'] - [digital_fll_band_edge_cc_0, '0', qtgui_freq_sink_x_0, '1'] - [digital_lms_dd_equalizer_cc_0_0, '0', blocks_multiply_const_vxx_0, '0'] - [digital_lms_dd_equalizer_cc_0_0, '0', qtgui_const_sink_x_0, '0'] - [digital_pfb_clock_sync_xxx_0, '0', digital_costas_loop_cc_0_0, '0'] - [digital_psk_mod_0, '0', blocks_multiply_xx_1, '0'] - [hilbert_fc_0, '0', blocks_multiply_xx_0, '0'] - [low_pass_filter_0, '0', analog_feedforward_agc_cc_0, '0'] - [satellites_hdlc_deframer_0, out, blocks_message_debug_0, print_pdu] - [satellites_hdlc_deframer_0, out, satellites_pdu_to_kiss_0, in] - [satellites_hdlc_framer_0, out, blocks_pdu_to_tagged_stream_0, pdus] - [satellites_kiss_to_pdu_0, out, satellites_hdlc_framer_0, in] - [satellites_nrzi_decode_0, '0', satellites_hdlc_deframer_0, '0'] - [satellites_nrzi_encode_0, '0', blocks_unpacked_to_packed_xx_0, '0'] - [satellites_pdu_to_kiss_0, out, blocks_socket_pdu_0, pdus] metadata: file_format: 1 gr-satellites-4.4.0/examples/ax25/bpsk9k6.grc000066400000000000000000000415771414055407700207060ustar00rootroot00000000000000options: parameters: author: Daniel Estevez category: Custom cmake_opt: '' comment: '' copyright: '' description: This example implements a BPSK 9k6 AX.25 transceiver gen_cmake: 'On' gen_linking: dynamic generate_options: qt_gui hier_block_src_path: '.:' id: bpsk9k6 max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: prompt sizing_mode: fixed thread_safe_setters: '' title: BPSK 9k6 example window_size: 1280, 1024 states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: samp_per_sym id: variable parameters: comment: '' value: '5' states: bus_sink: false bus_source: false bus_structure: null coordinate: [312, 13] rotation: 0 state: enabled - name: samp_rate id: variable parameters: comment: '' value: '48000' states: bus_sink: false bus_source: false bus_structure: null coordinate: [200, 13] rotation: 0 state: enabled - name: variable_constellation_0 id: variable_constellation parameters: comment: '' const_points: '[-1, 1]' dims: '1' precision: '8' rot_sym: '2' soft_dec_lut: None sym_map: '[0, 1]' type: calcdist states: bus_sink: false bus_source: false bus_structure: null coordinate: [488, 8] rotation: 0 state: enabled - name: analog_feedforward_agc_cc_0 id: analog_feedforward_agc_cc parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' num_samples: '1024' reference: '2' states: bus_sink: false bus_source: false bus_structure: null coordinate: [784, 149] rotation: 0 state: enabled - name: analog_sig_source_x_0 id: analog_sig_source_x parameters: affinity: '' alias: '' amp: '1' comment: '' freq: '-10000' maxoutbuf: '0' minoutbuf: '0' offset: '0' phase: '0' samp_rate: samp_rate type: complex waveform: analog.GR_COS_WAVE states: bus_sink: false bus_source: false bus_structure: null coordinate: [192, 184] rotation: 0 state: enabled - name: analog_sig_source_x_0_0 id: analog_sig_source_x parameters: affinity: '' alias: '' amp: '0.5' comment: '' freq: 10e3 maxoutbuf: '0' minoutbuf: '0' offset: '0' phase: '0' samp_rate: samp_rate type: complex waveform: analog.GR_COS_WAVE states: bus_sink: false bus_source: false bus_structure: null coordinate: [48, 896] rotation: 0 state: enabled - name: audio_sink_0 id: audio_sink parameters: affinity: '' alias: '' comment: '' device_name: '' num_inputs: '1' ok_to_block: 'True' samp_rate: samp_rate states: bus_sink: false bus_source: false bus_structure: null coordinate: [1088, 940] rotation: 0 state: enabled - name: audio_source_0 id: audio_source parameters: affinity: '' alias: '' comment: '' device_name: '' maxoutbuf: '0' minoutbuf: '0' num_outputs: '1' ok_to_block: 'True' samp_rate: '48000' states: bus_sink: false bus_source: false bus_structure: null coordinate: [32, 116] rotation: 0 state: enabled - name: blocks_complex_to_float_0 id: blocks_complex_to_float parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [840, 945] rotation: 0 state: enabled - name: blocks_complex_to_real_0 id: blocks_complex_to_real parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [296, 601] rotation: 0 state: enabled - name: blocks_message_debug_0 id: blocks_message_debug parameters: affinity: '' alias: '' comment: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1112, 625] rotation: 0 state: enabled - name: blocks_multiply_const_vxx_0 id: blocks_multiply_const_vxx parameters: affinity: '' alias: '' comment: '' const: '0.5' maxoutbuf: '0' minoutbuf: '0' type: complex vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [120, 596] rotation: 0 state: enabled - name: blocks_multiply_xx_0 id: blocks_multiply_xx parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' num_inputs: '2' type: complex vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [392, 145] rotation: 0 state: enabled - name: blocks_multiply_xx_1 id: blocks_multiply_xx parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' num_inputs: '2' type: complex vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [704, 945] rotation: 0 state: enabled - name: blocks_pdu_to_tagged_stream_0 id: blocks_pdu_to_tagged_stream parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' tag: packet_len type: byte states: bus_sink: false bus_source: false bus_structure: null coordinate: [64, 812] rotation: 0 state: enabled - name: blocks_pdu_to_tagged_stream_0_0 id: blocks_pdu_to_tagged_stream parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' tag: packet_len type: byte states: bus_sink: false bus_source: false bus_structure: null coordinate: [464, 700] rotation: 0 state: enabled - name: blocks_socket_pdu_0 id: blocks_socket_pdu parameters: affinity: '' alias: '' comment: '' host: '' maxoutbuf: '0' minoutbuf: '0' mtu: '10000' port: '52001' tcp_no_delay: 'True' type: TCP_SERVER states: bus_sink: false bus_source: false bus_structure: null coordinate: [272, 672] rotation: 0 state: enabled - name: blocks_unpacked_to_packed_xx_0 id: blocks_unpacked_to_packed_xx parameters: affinity: '' alias: '' bits_per_chunk: '1' comment: '' endianness: gr.GR_MSB_FIRST maxoutbuf: '0' minoutbuf: '0' num_ports: '1' type: byte states: bus_sink: false bus_source: false bus_structure: null coordinate: [456, 805] rotation: 0 state: enabled - name: digital_binary_slicer_fb_0 id: digital_binary_slicer_fb parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [472, 601] rotation: 0 state: enabled - name: digital_costas_loop_cc_0_0 id: digital_costas_loop_cc parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' order: '2' use_snr: 'False' w: '0.02' states: bus_sink: false bus_source: false bus_structure: null coordinate: [392, 417] rotation: 0 state: enabled - name: digital_fll_band_edge_cc_0 id: digital_fll_band_edge_cc parameters: affinity: '' alias: '' comment: '' filter_size: '100' maxoutbuf: '0' minoutbuf: '0' rolloff: '0.350' samps_per_sym: samp_per_sym type: cc w: '0.010' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1008, 169] rotation: 0 state: enabled - name: digital_lms_dd_equalizer_cc_0_0 id: digital_lms_dd_equalizer_cc parameters: affinity: '' alias: '' cnst: variable_constellation_0 comment: '' maxoutbuf: '0' minoutbuf: '0' mu: '0.05' num_taps: '2' sps: '2' states: bus_sink: false bus_source: false bus_structure: null coordinate: [672, 415] rotation: 0 state: enabled - name: digital_pfb_clock_sync_xxx_0 id: digital_pfb_clock_sync_xxx parameters: affinity: '' alias: '' comment: '' filter_size: '16' init_phase: '8' loop_bw: '0.05' max_dev: '0.05' maxoutbuf: '0' minoutbuf: '0' osps: '2' sps: samp_per_sym taps: firdes.root_raised_cosine(16, 16, 1.0/float(samp_per_sym), 0.35, 11*samp_per_sym*16) type: ccf states: bus_sink: false bus_source: false bus_structure: null coordinate: [80, 385] rotation: 0 state: enabled - name: digital_psk_mod_0 id: digital_psk_mod parameters: affinity: '' alias: '' comment: '' constellation_points: '2' differential: 'False' excess_bw: '0.35' log: 'False' maxoutbuf: '0' minoutbuf: '0' mod_code: '"none"' samples_per_symbol: samp_per_sym verbose: 'False' states: bus_sink: false bus_source: false bus_structure: null coordinate: [664, 784] rotation: 0 state: enabled - name: hilbert_fc_0 id: hilbert_fc parameters: affinity: '' alias: '' beta: '6.76' comment: '' maxoutbuf: '0' minoutbuf: '0' num_taps: '65' win: firdes.WIN_HAMMING states: bus_sink: false bus_source: false bus_structure: null coordinate: [232, 116] rotation: 0 state: enabled - name: low_pass_filter_0 id: low_pass_filter parameters: affinity: '' alias: '' beta: '6.76' comment: '' cutoff_freq: '10000' decim: '1' gain: '1' interp: '1' maxoutbuf: '0' minoutbuf: '0' samp_rate: '48000' type: fir_filter_ccf width: '1000' win: firdes.WIN_HAMMING states: bus_sink: false bus_source: false bus_structure: null coordinate: [552, 114] rotation: 0 state: enabled - name: qtgui_const_sink_x_0 id: qtgui_const_sink_x parameters: affinity: '' alias: '' alpha1: '1.0' alpha10: '1.0' alpha2: '1.0' alpha3: '1.0' alpha4: '1.0' alpha5: '1.0' alpha6: '1.0' alpha7: '1.0' alpha8: '1.0' alpha9: '1.0' autoscale: 'False' axislabels: 'True' color1: '"blue"' color10: '"red"' color2: '"red"' color3: '"red"' color4: '"red"' color5: '"red"' color6: '"red"' color7: '"red"' color8: '"red"' color9: '"red"' comment: '' grid: 'False' gui_hint: '' label1: '' label10: '' label2: '' label3: '' label4: '' label5: '' label6: '' label7: '' label8: '' label9: '' legend: 'True' marker1: '0' marker10: '0' marker2: '0' marker3: '0' marker4: '0' marker5: '0' marker6: '0' marker7: '0' marker8: '0' marker9: '0' name: '""' nconnections: '1' size: '200' style1: '0' style10: '0' style2: '0' style3: '0' style4: '0' style5: '0' style6: '0' style7: '0' style8: '0' style9: '0' tr_chan: '0' tr_level: '0.0' tr_mode: qtgui.TRIG_MODE_FREE tr_slope: qtgui.TRIG_SLOPE_POS tr_tag: '""' type: complex update_time: '0.10' width1: '1' width10: '1' width2: '1' width3: '1' width4: '1' width5: '1' width6: '1' width7: '1' width8: '1' width9: '1' xmax: '2' xmin: '-2' ymax: '2' ymin: '-2' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1032, 365] rotation: 0 state: enabled - name: qtgui_freq_sink_x_0 id: qtgui_freq_sink_x parameters: affinity: '' alias: '' alpha1: '1.0' alpha10: '1.0' alpha2: '1.0' alpha3: '1.0' alpha4: '1.0' alpha5: '1.0' alpha6: '1.0' alpha7: '1.0' alpha8: '1.0' alpha9: '1.0' autoscale: 'False' average: '1.0' axislabels: 'True' bw: samp_rate color1: '"blue"' color10: '"dark blue"' color2: '"red"' color3: '"green"' color4: '"black"' color5: '"cyan"' color6: '"magenta"' color7: '"yellow"' color8: '"dark red"' color9: '"dark green"' comment: '' ctrlpanel: 'False' fc: '0' fftsize: '1024' freqhalf: 'True' grid: 'False' gui_hint: '' label: Relative Gain label1: '' label10: '' label2: '' label3: '' label4: '' label5: '' label6: '' label7: '' label8: '' label9: '' legend: 'True' maxoutbuf: '0' minoutbuf: '0' name: '""' nconnections: '2' showports: 'True' tr_chan: '0' tr_level: '0.0' tr_mode: qtgui.TRIG_MODE_FREE tr_tag: '""' type: complex units: dB update_time: '0.10' width1: '1' width10: '1' width2: '1' width3: '1' width4: '1' width5: '1' width6: '1' width7: '1' width8: '1' width9: '1' wintype: firdes.WIN_BLACKMAN_hARRIS ymax: '10' ymin: '-140' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1056, 30] rotation: 0 state: enabled - name: satellites_hdlc_deframer_0 id: satellites_hdlc_deframer parameters: affinity: '' alias: '' check_fcs: 'True' comment: '' max_length: '10000' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [792, 572.0] rotation: 0 state: enabled - name: satellites_hdlc_framer_0 id: satellites_hdlc_framer parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' postamble_bytes: '7' preamble_bytes: '50' states: bus_sink: false bus_source: false bus_structure: null coordinate: [896, 692.0] rotation: 0 state: enabled - name: satellites_kiss_to_pdu_0 id: satellites_kiss_to_pdu parameters: affinity: '' alias: '' comment: '' control_byte: 'True' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [696, 700.0] rotation: 0 state: enabled - name: satellites_nrzi_decode_0 id: satellites_nrzi_decode parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [640, 584.0] rotation: 0 state: enabled - name: satellites_nrzi_encode_0 id: satellites_nrzi_encode parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [296, 816.0] rotation: 0 state: enabled - name: satellites_pdu_to_kiss_0 id: satellites_pdu_to_kiss parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [104, 704.0] rotation: 0 state: enabled connections: - [analog_feedforward_agc_cc_0, '0', digital_fll_band_edge_cc_0, '0'] - [analog_feedforward_agc_cc_0, '0', qtgui_freq_sink_x_0, '0'] - [analog_sig_source_x_0, '0', blocks_multiply_xx_0, '1'] - [analog_sig_source_x_0_0, '0', blocks_multiply_xx_1, '1'] - [audio_source_0, '0', hilbert_fc_0, '0'] - [blocks_complex_to_float_0, '0', audio_sink_0, '0'] - [blocks_complex_to_real_0, '0', digital_binary_slicer_fb_0, '0'] - [blocks_multiply_const_vxx_0, '0', blocks_complex_to_real_0, '0'] - [blocks_multiply_xx_0, '0', low_pass_filter_0, '0'] - [blocks_multiply_xx_1, '0', blocks_complex_to_float_0, '0'] - [blocks_pdu_to_tagged_stream_0, '0', satellites_nrzi_encode_0, '0'] - [blocks_pdu_to_tagged_stream_0_0, '0', satellites_kiss_to_pdu_0, '0'] - [blocks_socket_pdu_0, pdus, blocks_pdu_to_tagged_stream_0_0, pdus] - [blocks_unpacked_to_packed_xx_0, '0', digital_psk_mod_0, '0'] - [digital_binary_slicer_fb_0, '0', satellites_nrzi_decode_0, '0'] - [digital_costas_loop_cc_0_0, '0', digital_lms_dd_equalizer_cc_0_0, '0'] - [digital_fll_band_edge_cc_0, '0', digital_pfb_clock_sync_xxx_0, '0'] - [digital_fll_band_edge_cc_0, '0', qtgui_freq_sink_x_0, '1'] - [digital_lms_dd_equalizer_cc_0_0, '0', blocks_multiply_const_vxx_0, '0'] - [digital_lms_dd_equalizer_cc_0_0, '0', qtgui_const_sink_x_0, '0'] - [digital_pfb_clock_sync_xxx_0, '0', digital_costas_loop_cc_0_0, '0'] - [digital_psk_mod_0, '0', blocks_multiply_xx_1, '0'] - [hilbert_fc_0, '0', blocks_multiply_xx_0, '0'] - [low_pass_filter_0, '0', analog_feedforward_agc_cc_0, '0'] - [satellites_hdlc_deframer_0, out, blocks_message_debug_0, print_pdu] - [satellites_hdlc_deframer_0, out, satellites_pdu_to_kiss_0, in] - [satellites_hdlc_framer_0, out, blocks_pdu_to_tagged_stream_0, pdus] - [satellites_kiss_to_pdu_0, out, satellites_hdlc_framer_0, in] - [satellites_nrzi_decode_0, '0', satellites_hdlc_deframer_0, '0'] - [satellites_nrzi_encode_0, '0', blocks_unpacked_to_packed_xx_0, '0'] - [satellites_pdu_to_kiss_0, out, blocks_socket_pdu_0, pdus] metadata: file_format: 1 gr-satellites-4.4.0/examples/ax25/fsk.grc000066400000000000000000000310741414055407700201670ustar00rootroot00000000000000options: parameters: author: Daniel Estevez category: Custom cmake_opt: '' comment: '' copyright: '' description: This example implements an FSK 9k6 AX.25 G3RUH transceiver gen_cmake: 'On' gen_linking: dynamic generate_options: qt_gui hier_block_src_path: '.:' id: fsk max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: prompt sizing_mode: fixed thread_safe_setters: '' title: FSK example window_size: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: samp_per_sym id: variable parameters: comment: '' value: '5' states: bus_sink: false bus_source: false bus_structure: null coordinate: [312, 13] rotation: 0 state: enabled - name: samp_rate id: variable parameters: comment: '' value: '48000' states: bus_sink: false bus_source: false bus_structure: null coordinate: [200, 13] rotation: 0 state: enabled - name: audio_sink_0 id: audio_sink parameters: affinity: '' alias: '' comment: '' device_name: '' num_inputs: '1' ok_to_block: 'True' samp_rate: samp_rate states: bus_sink: false bus_source: false bus_structure: null coordinate: [1104, 628] rotation: 0 state: enabled - name: audio_source_0 id: audio_source parameters: affinity: '' alias: '' comment: '' device_name: '' maxoutbuf: '0' minoutbuf: '0' num_outputs: '1' ok_to_block: 'True' samp_rate: samp_rate states: bus_sink: false bus_source: false bus_structure: null coordinate: [40, 244] rotation: 0 state: enabled - name: blocks_add_const_vxx_0 id: blocks_add_const_vxx parameters: affinity: '' alias: '' comment: '' const: '-0.5' maxoutbuf: '0' minoutbuf: '0' type: float vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [632, 628] rotation: 0 state: enabled - name: blocks_char_to_float_0 id: blocks_char_to_float parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' scale: '1' vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [464, 628] rotation: 0 state: enabled - name: blocks_message_debug_0 id: blocks_message_debug parameters: affinity: '' alias: '' comment: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1088, 97] rotation: 0 state: enabled - name: blocks_multiply_const_vxx_0 id: blocks_multiply_const_vxx parameters: affinity: '' alias: '' comment: '' const: '0.5' maxoutbuf: '0' minoutbuf: '0' type: float vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [816, 628] rotation: 0 state: enabled - name: blocks_pdu_to_tagged_stream_0 id: blocks_pdu_to_tagged_stream parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' tag: packet_len type: byte states: bus_sink: false bus_source: false bus_structure: null coordinate: [744, 396] rotation: 0 state: enabled - name: blocks_pdu_to_tagged_stream_0_0 id: blocks_pdu_to_tagged_stream parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' tag: packet_len type: byte states: bus_sink: false bus_source: false bus_structure: null coordinate: [296, 532] rotation: 0 state: enabled - name: blocks_repeat_0 id: blocks_repeat parameters: affinity: '' alias: '' comment: '' interp: samp_per_sym maxoutbuf: '0' minoutbuf: '0' type: byte vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [240, 628] rotation: 0 state: enabled - name: blocks_socket_pdu_0 id: blocks_socket_pdu parameters: affinity: '' alias: '' comment: '' host: '' maxoutbuf: '0' minoutbuf: '0' mtu: '10000' port: '52001' tcp_no_delay: 'True' type: TCP_SERVER states: bus_sink: false bus_source: false bus_structure: null coordinate: [536, 376] rotation: 0 state: enabled - name: digital_binary_slicer_fb_0 id: digital_binary_slicer_fb parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [504, 249] rotation: 0 state: enabled - name: digital_clock_recovery_mm_xx_0 id: digital_clock_recovery_mm_xx parameters: affinity: '' alias: '' comment: '' gain_mu: '0.175' gain_omega: 0.25*0.175*0.175 maxoutbuf: '0' minoutbuf: '0' mu: '0.5' omega: samp_per_sym*(1+0.0) omega_relative_limit: '0.005' type: float states: bus_sink: false bus_source: false bus_structure: null coordinate: [264, 216] rotation: 0 state: enabled - name: digital_descrambler_bb_0 id: digital_descrambler_bb parameters: affinity: '' alias: '' comment: '' len: '16' mask: '0x21' maxoutbuf: '0' minoutbuf: '0' seed: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [832, 230] rotation: 0 state: enabled - name: digital_scrambler_bb_0 id: digital_scrambler_bb parameters: affinity: '' alias: '' comment: '' len: '16' mask: '0x21' maxoutbuf: '0' minoutbuf: '0' seed: '0x0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [544, 518] rotation: 0 state: enabled - name: qtgui_time_sink_x_0 id: qtgui_time_sink_x parameters: affinity: '' alias: '' alpha1: '1.0' alpha10: '1.0' alpha2: '1.0' alpha3: '1.0' alpha4: '1.0' alpha5: '1.0' alpha6: '1.0' alpha7: '1.0' alpha8: '1.0' alpha9: '1.0' autoscale: 'False' axislabels: 'True' color1: blue color10: dark blue color2: red color3: green color4: black color5: cyan color6: magenta color7: yellow color8: dark red color9: dark green comment: '' ctrlpanel: 'False' entags: 'True' grid: 'False' gui_hint: '' label1: '' label10: '' label2: '' label3: '' label4: '' label5: '' label6: '' label7: '' label8: '' label9: '' legend: 'True' marker1: '-1' marker10: '-1' marker2: '-1' marker3: '-1' marker4: '-1' marker5: '-1' marker6: '-1' marker7: '-1' marker8: '-1' marker9: '-1' name: '""' nconnections: '1' size: '1024' srate: samp_rate stemplot: 'False' style1: '1' style10: '1' style2: '1' style3: '1' style4: '1' style5: '1' style6: '1' style7: '1' style8: '1' style9: '1' tr_chan: '0' tr_delay: '0' tr_level: '0.0' tr_mode: qtgui.TRIG_MODE_FREE tr_slope: qtgui.TRIG_SLOPE_POS tr_tag: '""' type: float update_time: '0.10' width1: '1' width10: '1' width2: '1' width3: '1' width4: '1' width5: '1' width6: '1' width7: '1' width8: '1' width9: '1' ylabel: Amplitude ymax: '1' ymin: '-1' yunit: '""' states: bus_sink: false bus_source: false bus_structure: null coordinate: [264, 126] rotation: 0 state: enabled - name: qtgui_time_sink_x_0_0 id: qtgui_time_sink_x parameters: affinity: '' alias: '' alpha1: '1.0' alpha10: '1.0' alpha2: '1.0' alpha3: '1.0' alpha4: '1.0' alpha5: '1.0' alpha6: '1.0' alpha7: '1.0' alpha8: '1.0' alpha9: '1.0' autoscale: 'False' axislabels: 'True' color1: blue color10: dark blue color2: red color3: green color4: black color5: cyan color6: magenta color7: yellow color8: dark red color9: dark green comment: '' ctrlpanel: 'False' entags: 'True' grid: 'False' gui_hint: '' label1: '' label10: '' label2: '' label3: '' label4: '' label5: '' label6: '' label7: '' label8: '' label9: '' legend: 'True' marker1: '-1' marker10: '-1' marker2: '-1' marker3: '-1' marker4: '-1' marker5: '-1' marker6: '-1' marker7: '-1' marker8: '-1' marker9: '-1' name: '""' nconnections: '1' size: '1024' srate: samp_rate stemplot: 'False' style1: '1' style10: '1' style2: '1' style3: '1' style4: '1' style5: '1' style6: '1' style7: '1' style8: '1' style9: '1' tr_chan: '0' tr_delay: '0' tr_level: '0.0' tr_mode: qtgui.TRIG_MODE_FREE tr_slope: qtgui.TRIG_SLOPE_POS tr_tag: '""' type: float update_time: '0.10' width1: '1' width10: '1' width2: '1' width3: '1' width4: '1' width5: '1' width6: '1' width7: '1' width8: '1' width9: '1' ylabel: Amplitude ymax: '1' ymin: '-1' yunit: '""' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1056, 502] rotation: 0 state: enabled - name: satellites_hdlc_deframer_0 id: satellites_hdlc_deframer parameters: affinity: '' alias: '' check_fcs: 'True' comment: '' max_length: '10000' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [984, 236] rotation: 0 state: enabled - name: satellites_hdlc_framer_0 id: satellites_hdlc_framer parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' postamble_bytes: '7' preamble_bytes: '50' states: bus_sink: false bus_source: false bus_structure: null coordinate: [136, 468] rotation: 0 state: enabled - name: satellites_kiss_to_pdu_0 id: satellites_kiss_to_pdu parameters: affinity: '' alias: '' comment: '' control_byte: 'True' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1008, 396.0] rotation: 0 state: enabled - name: satellites_nrzi_decode_0 id: satellites_nrzi_decode parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [680, 248] rotation: 0 state: enabled - name: satellites_nrzi_encode_0 id: satellites_nrzi_encode parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [696, 536] rotation: 0 state: enabled - name: satellites_pdu_to_kiss_0 id: satellites_pdu_to_kiss parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [368, 392] rotation: 0 state: enabled connections: - [audio_source_0, '0', digital_clock_recovery_mm_xx_0, '0'] - [audio_source_0, '0', qtgui_time_sink_x_0, '0'] - [blocks_add_const_vxx_0, '0', blocks_multiply_const_vxx_0, '0'] - [blocks_char_to_float_0, '0', blocks_add_const_vxx_0, '0'] - [blocks_multiply_const_vxx_0, '0', audio_sink_0, '0'] - [blocks_multiply_const_vxx_0, '0', qtgui_time_sink_x_0_0, '0'] - [blocks_pdu_to_tagged_stream_0, '0', satellites_kiss_to_pdu_0, '0'] - [blocks_pdu_to_tagged_stream_0_0, '0', digital_scrambler_bb_0, '0'] - [blocks_repeat_0, '0', blocks_char_to_float_0, '0'] - [blocks_socket_pdu_0, pdus, blocks_pdu_to_tagged_stream_0, pdus] - [digital_binary_slicer_fb_0, '0', satellites_nrzi_decode_0, '0'] - [digital_clock_recovery_mm_xx_0, '0', digital_binary_slicer_fb_0, '0'] - [digital_descrambler_bb_0, '0', satellites_hdlc_deframer_0, '0'] - [digital_scrambler_bb_0, '0', satellites_nrzi_encode_0, '0'] - [satellites_hdlc_deframer_0, out, blocks_message_debug_0, print_pdu] - [satellites_hdlc_deframer_0, out, satellites_pdu_to_kiss_0, in] - [satellites_hdlc_framer_0, out, blocks_pdu_to_tagged_stream_0_0, pdus] - [satellites_kiss_to_pdu_0, out, satellites_hdlc_framer_0, in] - [satellites_nrzi_decode_0, '0', digital_descrambler_bb_0, '0'] - [satellites_nrzi_encode_0, '0', blocks_repeat_0, '0'] - [satellites_pdu_to_kiss_0, out, blocks_socket_pdu_0, pdus] metadata: file_format: 1 gr-satellites-4.4.0/examples/ber/000077500000000000000000000000001414055407700166735ustar00rootroot00000000000000gr-satellites-4.4.0/examples/ber/lilacsat1.png000066400000000000000000002737141414055407700212740ustar00rootroot00000000000000PNG  IHDR ,sBIT|d pHYsaa?i IDATxy\TU ,(K[KdZI=HirԲ̒,MKDMMEsIs=*T\T02̀*u_{ޡsl6@g,p' @@H"@@:D$t$ IH"@@:D$t$ IH"@@:D$t$ IH"@@:D$t$ IH"@@:D$t$ IH"@@:D$t$ IH"@@:D$t$ IH"@@:D$t$ IH"@@:D$t$ IH"@@:D$t$ F˖-e4y R*Un5?.Ѩg}^Py Fʕ+:t97ovx^朰02%JPڵ5rH%%%퉉6ljժ%RJjٲFGڔ7 wdn0nI=FQ>h׹Ubn`PDDf$)99YvtRmݺUuԱ;/((HwXtUu֕$9sFWԩStRٳG>>>yjO?-Z… zԿy{{+!!A?&M*Urs>3]t)Ok/oon F'3nߋ/(3g ;6_֭~it*..N3fѣTСCuEFF:<VbmPBz/)VW^yEڶm+٬g޶k_~2ڵkW۾}$KHZTF }@Ϛ~ڻwڷo/___W^:y$~?2e]>~Gyd45_JJz-jJ*^ʔ)]jǎ5 l?~@OLLUreuz={z6m#<"///y{{cǎ:x p"@ܳ[ L&I1ҥKK~<vRfd45`5jHK.U6mF?3<Ν;kjӦݔ7Zg}7TN4h hBחWn͚5Z`x ߚ3g4iW^yEF4iFO>Dfnj֬D?qBBB/}:uN:/Μ9)ShTǏzl6kZnM@ꫯjʔ)3gFQ;Yz)www?~yԵkWetQIҟUVĉj֬JII'|l6`0FС^|EUX15o&>>9s֮]'N觟~Rݺuoy5d2ٍpB3f/{z6N>-[t[B?Dr#M&mh4j29r5`AtK___I҉'gm#Gf͚vlјՓ$mݺqF :p9s4h ?ܱk=zTjҤmNHH:uCiy:g:~c:tTv[ lٳmoذA_|E of%""B)Y>'jӦ;iӦբEݻN@]_Ǐ?EAdduZZ<5k`0hҤI*]9ǎ9 &//<]Zj"##շo_96m"""T^=5lPKVrrۧ;vY3gΔsiԩ4i85k_ULLz<3l0 4HSϞ=m۶)>>^]tʕ+iժKuMSbԼys5k,̜9S?Fu֩aÆJHHPtt4w\h,~݃ uEe4 P IIKV׮]5d=;~x:9@[we˖i֬YkUVi͚5ڼy֮]3gΨXbPyVZ99_cJ͛5bmٲE[lQÆ ~z9rDK,ɱyw͛O?Utt}2ڰaVZ%ɤqYtG\٣ &hڼyԡCjР ۚ|k 0@;vla7:p ]xQ#GTvTLGiС ի/n1,-ty}JOOWs{O>/l-\PRǎo-EkPJ$Ϟ=aիWk/KZhcǎiĈ׿e ߟ|I= E#ЁBl2yzzW^6tiz~ff\Leddի2L=@!,;,uԑlO?Fx iohܹzʞ;wNk׮UPPn˗u1kNJ*wt?^w~???܌7Nƍӵ֮]~忑矫o߾ C=_AAA,# et]˖-+f(d .>>^ldɒG'%%I>VȚ=88X׿e<  ˾o\(>>^&f\\ j׮]H-.tt]/^Ԓ%Klϛ7O -ESXLLҔ"I:x5(ر\]]վ}{nZ RrrV jݺuZ`-]$)==@_~ؠA I2 Zx/^,I:z*V(IZl^{57NIII_wޅvgv  l6v#>S PzW/ 8Q,}~ }Pe{/` t01QԳqcvs0)܁" $s|=ZӧvtܹnuJ*e]J@E0Iޒ05:ZzdIxn``]twwww; -ZE)99Z=Ё"b<}Z$I%K*Ye\ec֟s |Osv32p78w.]?\kǫ_~:wO>ӧu tEYrd=[JJΟ4'%iמ*srExy`=맣}~~0IҾ}G2ZG11F=ԩ1$/);P`ٙn O:rxJ^NQLZ{*%9#)I̴ˍCwGừk^@7kF3y@/h~ߥ%,[J6ecO=ޗWq/ۊL&)5(~lo[Cw__K`220 W eeSTI:"wgwFK h.5s=+P-|?vyzĻe 55US_{MVGFҜմsg 8f!ݩK.ZbEa7@!/@?~:PDt4Pz=ߕi*պJ_L(٤'*]rAGR*TdUK]Z!=gCtq}>>y ݳ^^јcSSSճqcIIfIksF-ٱ=@ 2@_~;tHLPQQgqcOر O͓Xߧ\M{~Qk5|U̒K+W8ovggL˖W\_==)I:yR~,=ݾ.O]^/<٦7Hjo2GVk?jm۶-&@?Zl-[d2vS Ua< F5dFQ-[ƍo5xnt0djxF~[ӧGvn+uҳ)RBWF_Q)32#k?=4aلy8{{*[2-#sZ>#G]$mOEPe{I,^,MlYwc.3:駟駟``Ms_ױcTbE!f~3 RBB;bŊL2jܸPǏWʕm999dɒz衇n崫WWtt:˗/dɒWƍջwo5oZ~޼y S5gvϚ5KVZ|7#@{GRRR-뵷Tg4et1bt)NTBrcyA\_3O]rA^rsg`m0H-00Ofyp*%'&)CݺRhek2}QEDD6mRRRK/XݺunE>LrZNEVM.^8-]T˗/ʕ+ծ];s}||4l0f]rE?V^UV)**JY_Yf:pʗ/^zlٲ:s~͜9S6zn"## ]V)#@.^tĉf!Xz`Q؞mܝUd\sIf29f_@/{YTʽ]fҶfg0,,aߙ%//Ø1Ν҆ XJ!!CP}֭[a7@!/@?~;;nܹsC:u]-[H n迡wyGÇה)Sr njc/kQϪx6m8kŊ*V6;s>|6f )i#իg&yzJ+[r_i$il믥[C,3kK0*SKux:}MmU9]@w223nMM;w1pޖz<$]+ fH;Z!QԷ{RltM cѢEwd27Pꪊ+jȑJOOwX_~QUbE\r۷~W5x`U\YŋW2eԣGٳǮyd45|ZJ-Z Ԇfu lѨ*UX˴l2)׭[Ν;lٲgӭ[7mذZ&##C3fPǎ$WWWuZz㇞ǏhԳ>o޼YFQǏ?;WjѢo.ɤ3gUZ5 0@G)QFFrssڵk;;##CV*WWWUREcƌL233qׯ1c ծ][nnnP QYӰ={6<3ŋ?Ko.څTlY5m4zջwo͚5K-ZЖ-[nYxh"uEÆ %*FE4Ie4Q.K-!y^k6Kiiٳҹs[>wΒ=FeP9OTƣxSj:OD*zWTE 7=; IDAT ԶSnSnĉqjo2 Qӂdۊ}}m-dЎPlRzbEQU0/,&@? }֭[cKWԩSuY͝;צlLLzLuIUVɓ'tRZJ}GUӦMujJO>N8ŋkժUVΝma0W_)&&F;vԠAtر!""B˖-S\\T٧iq_u@>}Z۶mӂ ԪU+IRRRMm۶*]|ruI}܇ܦ߽{L&MhJHHPttZnFֲС6lؠ+_~Աc_Yf$I.\Pƍ믿*$$D={ԹsW_]vmһwoXBUVUxx5w\9lkԩS'[N۷\]]i&+66VϷ9祗^/ rvv˵k.x7󨭾[I[=J.-I9~FRSSեKmٲE=z… rSmʮO>ӧۧ ܲz{ :Pde4Qp4M@5 Rr弝se{nٳ9Z-ʗ.-YRm7TC9/^SBr{*VԂ7Sc|M]rvV.]dyzzWbv@<ՖQgMިSx1GU|8,{9%$'~g2Ùl.S[.N.̺f~w|uռys6"l6+&&Fk֬Q6mlڛ6;VGU\\\_nuOUBBm$''I&5jz[ի5o<Ϻ>{)**ʺܸqڰavJddd،9r~?o?b5lPCc=J*I.\+VI&ڸq5䍌TÆ ~`„ Zn SZ˘f 0@sU^ԥKIҎ;Zjڵks˖-|?iӦYp8_^-Zoz͛4(QBjՒ$=4zhzԠA%G5o\qqqz)^wa ʗ޽ӄ KnBŊYҥ༝sp=)M {yz4<5x&͚ЀPؚk$_UUJޕr-xHnwePw-ߘ5lGשc6w"7GZK{/vXC_k2s] ֩S~z_)ߤI=Zh-[fJR׮]󂴡} M:tN{91Bw?\Tf>!Ch}&I~ڄ쬒%KJ ,&mjժ)<<\&MÒ4w\ 6#  l6+**J6d}5w\-Xϙ3GAﳋ&MGy$OMŊիW/p"#-}իW5k`0hҤI/S9ϐn9>$g}~;.WM(I+k;wJo ˚СC %YB\GknZ .Ծ}Bސmo *66VAڵS7D]rz`0ԩSnp+VLe˖l:d5jg/|5kfTgiݺx ۷Ϻo2nٲݾ_UϟW5~xfYnnn:t5$yv5kp8vt>|X Ν;gٝlmԡC 2wjРA ӷ~۷kھ},X?\;v5BBBt_^'O֨Q tn:hO^=o\*?gJgd啷Y-'צjms:wn[g!e2u2'Vur/PJ[OC^]z)˾˗˖IӦY-k;J,\XXgp+Y^=l)R*^*NF\;(Ll6?ε/Jr d˗/oS.o … Ӵ;wTVVZk׮hԁ|r]zSPnfl/\ I a\''''9$~sgIKKkW֒F>E5kԂ {n-\PC [ RJ| WWWuY;wdY}znݺNY>cnZ\#CH*^\lya6[F4=k߯J۷[^g§L1j q㞊Y&S$$jƞڱTNF'UJ>rŐۧ*pu:f)Be&M,[3gl~2EJIGJjݝ aڶm[Mp/@?~@v2 |efGme1 96t&LЕ+WwߩYf6&O˗T[F_vfd񝗑\LQ=Yv]y9snsɤϫB[BbT~}?~\v oE Ҏ;`mܸ.@ڵkkjݺƏ˗/kʔ)-nD` /oddHII9O+ȑ믳eiKkS~2+>ެѣzO=T=SZ j8;[VQ}S&tI96~`\ӧ@_~5j%Kh˖-y ի'IںuL&47n`Rm$k`}u^j*[:*8'G]x.I}]___I҉'쎥Z|||3g8ŝFrwwׁl7JZ~}mذA[nU-loڴ)ܹaH~m޼.@߲eK_@()M&-7AM9-)Y>-[UVz뭷te}qvP^Բԫ4p4f4}`no ]$](;&-Y#͟/ԷTe0cӦYCj\Y;;KQQd29^dj%K&gOjq~J돼cwvK^a4Zn ,L9SWvP'-[Hˍ-ZdyR@Գͺ7PGڽ{q٬͛7[M6:v옦e-?ZhԽ{I֩9 l_#O>m}$O6e>[.I%m۶٬m24l0]|a45x`]tIV֧йs$I۷RSS>r{=詧 lkf3}RR&Nh7〓ui۬)?P||}e65qDݯ\+SݻKc֬YuxСCZx$9rFv+W֖-[TZ5͘1C (p#a0XF{xHrM*32UfᡔbI:.OO PAnޖ^ *^,穰&sx~Ӷmo(88XԤIkƌ]z%ggg-_\~~~ֵkڴi)\ÇkŊTxx֭[z%)&&F RPP6m@]zU֮]k׮饗^RÆ oXW #?]rEͳGwk_gФIiJI1˲ߙU\~۠'S'lOLz8d/U*!r8M:Uk׮֭["jJz)_reٳG&LիyfyyyCzWՠA|;mh۶y͞=[UR%5#""ԨQ#{ZjTL5l$KRv7h„ ꫯPmڴIGq |>Y~ifM:Uϗu릉'Gm-yGwvvVLLfΜk2WϞ=m뫝;wjҤIZtM&7775jH#FPVɓ'O?UTTʗ/{Ncƌ]{+e˖iOj*]xQKVʕ5qDӧFG}%KG8qԩg%tFQ~~~zG_p\zzK͛7Z׮]SٲeեKCyFٲeyfiF .իWhѢ5h@{C8EE5F XBS,߳/s)s{u[񜎾tTnnRjgu96VDIRf`5!+P_߲zХKX@?~#4qpmSIf1  xe̔3}N+f@[^\~tQ ϶n#M)ГR詓j{ /[^eJ{_|QMp/@?~:܃<==cVxGrv.]j„%,awY1-8`m*Ys2> 2={+~r$5z%~>x}-モ>P椌uzXw"2@ rG(OOOM%\n`ɝKs\ls7nLN=tGXnR¥,,Y-u6.zC-tf͒&LR.A>\~U+YMuՕϭ{p@Oye0H>>v˥Z]wony9*H^^Ngڱ,;v}zlt\t'@9)6@.w冲9||e4{Sp/"@<=l9|9}>i zsnP 2{HZ/nFaoɣ#F護*f(d#@ܤU-[NӥӧSxo-M縺f]TBCUxY HRwɸ{OJJ$m  ұRFR:˟TU[Uc-ϧbŊ^w )(Ȳ5HuG#ُnYgٹ[B6f-qX^U*+eȐ׷RoU.VѺɫW}:צ@>dȐ^MP#@aÆ[}Q>} 9X1) :.c2Ig:O4td5]OT\Wx@]cXՉ[rᆱBRS*Rrmw͏}'wh})JNVer-*IJMMkMʕ۔!g4uT'-y^-ҢE\Mhl.F}ۧ h޽_~a7(2fLCv)YU+ UBK>JIs_GKlP]*|EJ}>rsUOdPwBJ(~r_Zh\wcBtkI?gr>>wIHT·9| sj)7,6fȾ 5|jNaa[as t߿?>+]ʪ[y?c\:|vs]Ȟ@B!򁢀z4h/-6o_p쒖EF`}6+ [qSH\9@SfЄM8Tb%%}MS<(y9sC,u;a(%L̙3Ch7'kbibYwFaHgϞVZn€dB8 B!D$.B%ԩuh}-_M0:q7fC/WJWyřEBB!Ȟ B!Ŀ`du Ad :.>]dؙrGmu aJzʠ̟[zsộԯ`fЦ  s+4яqQk!B!BߣhXr?)9vE4 4tS^ aaah4Mou=B*$.B1Ht(aaSs@ӦЯL eл7X[?äI0ҷ2mjQ*t#G·mxwû|q 6LB!B!Daj UVPxqʕ+G MݘRgH>͔nMhbIP"hq>! ̙3?~3 !,2Nh9?jtԉPJ*ENX"wg՜;wΝ;_ӽ{wܰ˗6ګ0,kkk3QۄpBBBB7L׮]HHHয়~g oԫW{+++.]ĩSꫯR +WN/;a׮]mۖM6ajjE/H]!(NC{3wk4̫](X`W]AաѨXRSe5~B1.\p…JĜmFLKU(ժAP}{oCj_w߿o&! L!(JJJOgmRR06NsL> B[_pp04lؐ03'$$ᜅEU YL<9.]}v2eJtggL +0a{`3uT&MӧOS؋mwޥcǎ;v^zbŊ]'(x2K!(,,, 'b99qޞvNNDAHx8Ъ_/'m ͛Ú5KodNNЮ  QΟ;` h݃?Hk>؆ 6=W~%u1uTC7Aa`2!dEMRRnn,XF\\B\,p͛X9rEQ߿9Υ-MNNNTRdpppԔ e#lmmyw^X˘8q"FFF4m{{{ٷo~~~?~իWgӦMDGG3j(/.].]e˖tؑ{}vڷoŋy?~OOO~۷/L>\'%m m6hժ_SNq5qqqjՊ˗/ʰaj;wy1tP5ܶm[߿O.]]6111Y-[w^}܈E4oޜk׮1l0ڴiٻw/ФI_o[[[/Ο?OFrݎڵkիWꫯOr]`I]!x 1tEw0s&t[iyPzԯoBw3%&f+;;QC xjUu9PB! "cȑq@!(Jt:))f@V7WMque'W5חb*pP~}9r$AAAY<<<4h:tUf3Sre5kVqwwСCy֧ 5k/ѣG@.%SN[n0tP/_3g̐ё#GضG<,C~iyW'$$0mڴL6mJ׮]|sYlӦMK{Y&;vdȑzt,YEQ%x.D!"t!50p@nݚ ec'OV=aPh XZzc< 4wޝ.]p>̉'8|06mbƍ 4emmc*T ..i\~;;ݟݹsYfk.OErp}Á̳ܸqNٳgu?VZH]Q\3~@Ju6uGЮ]{ @>mڴ!<<(9{,ߧe˖HӪUL{*ё?3礤$N8QԩSeӜ:uSN`llgԪU+=1 .dԩ޽_3g-"$$z+Cжm[Ǘ_~IӦMuOB!k(jIX\]}JhP]޽W/5QWpN:}Z`_#G5U|CǸֵ`wtTӅ(,X (dB8 Ν`As{4ݼ;z/'ѦMڴiZCBB0`s/,Jb0iZZJJ6?K 4jԈ/ҸqcOҥ)V̛7G帼۷og٣7(Aʕ+7osӝE&ާGQ3^BBd;;;t:]}xs ZlɆ ^:Ǐ_~d׿\[[[><>>{˗oizMfƍoyBZ$.B=Eʔq` Ugc{侀k̻I%kV~2ip3䏿+pwoS/Ǐ|Pjiv{|.^cPq@!(jO j+f7k/B u}(L>}(W4 :'OdJK D`` qqqL:ɓ'gH;z(U҂1"oׯ_Uyu_cmmN|+++t:]v߇/RjUJ.ݻw9<򭭭Yh\|~ ggLzꅉ {k׮]]i[yKB!hCض S YjA6q#Xh4P"n>pzsNpbcg΅ނ?\Uq ʛoCz &ep \:{(B!E!S;Ԏ#";0t:t!TR\|9Ss\(駟^c2pN:ͩVW\!666SrTN/IcVհaC {ֿjժ)'O$))Io'0=h<-;("cvݻwgӦMh4zڵk=B!t!B{NNW_z5<|F`4u:w!VҸ$v^oFFjڵa|+#lذCQfMm+F>}HLL̴/BPPP }_o%%%2ePnݗ.gڴi\xQoچ 8{,K~a:t`혘зoL{ !^BXl LLO8uJ'},sU+U+uO"c Z8HѓG<.CuײXSn"Ñ#kJ_zubl%%%駳ٶ))f'ӹssO[3#ī!+K!니 Nʕ5иc>|H׮]p]~?<]|y|}}YbtԉDv܉'NQ9|׌=Pzu.\;C7믿sss>|8AAA曼̟?&M`mm_Ett4O&<<[[[ƌ͛ Ņzx֯_[l)"Wu֌?>:ϳw^Ξ=+V]vٓ.]PV-Ξ=˖-[bʕ/ٷo㸻sU֯_ONC4L:5D Ȉ ^2Ν? 6QFڒ@TTh"_X'wSN 83tЗn"H]!x DEEd E0s&Z k˽\D0)f\PN.Zz?Vr2j@߄%#;Cm{xz>[ی{jja$%%MLhͷ`A({ 2!^)2!d;v,5j`޽<|ZnM>}իW gmڒ%K(Wk֬a…8880zhƌs`f„ 9rZjh"<==Yn]rڵkǜ9s d޼y<~GG=|Djj*˗N:5*>ŋg߾}n:ϟSLK.lݺ5WI}y(qrr"**Yfyf,X@%prrbر-[6=oƍ9~8_|{e)S>}0i$Wl~gm۶I͚5Yx1z﹢($$$0mڴsƔ+W޽{燫kmVv] #44bŊQbE G}o67oޜ{Ҿ}{FÇBd-O!(\]]LF! B05iÆv 9 /KiCyFq`pq*T4 [9s`~{7߻!B!B! !///C7jքs T۱#Tf[naݵnin r_=h i~&O7߄ҥ ui`V|Y^>b,B+2!B= !#F 9gfk= -Z˽W9]{..Dסv|JGw˜AAУd?tmOԥcb 5`]9T!Dq@!B!+f!"kM=EQo/Ww_ 6aàW/5. <Z$ߖc4|ӰzJLysgur];?֮sY"ɱ@+2!dB!"{@5燗n߾ S;wV7vpwށ@3t+_+JWcUU*S+bŠN[j\7 ,{R_f`puHx@+X 2!`3tSx):|,DQ+9BQ0`*u5;l[ڻxJs+=OB#6܄u ~ +ou[VSI|H~5cP}zu~*U26;;W]!B!Bs@B!Dѥ(Ъz\x1,Y >t(@nk'm?֕[g/h\pc?4iM^M/[ zjB!B!zWB!x=TSŋq#B~P:3=6-z8Z;*(b Zu*Ý;s&C(^֬w߅5 ᣏ`2}ՅB!EFaʕnJh4*t:WϞ==z4۷o͛( <8\r(W\|j?WbEC7A!E!O!((_ >Q..NYRy캒gg\?u 8wŸBH컑\ ={B`m -Zȑ|x;'B!k*)) o77,`O\[\aO\n FRRRȑ#(B3pnŊz@wrrJ*$''燃4lؐ-[MF5(Y$ժUc…ͪ4&SyfG͚5177WWWj]r%:'''4 *Udw]&NH:u055ښ6mڰgmw1*UdɒԮ]9sd?;%Jo߾b yܹ͛G_~ԩTREQO;硡t[[[J(AjOHH{iDFŋgڴiXLMM)W ΔO@BU2]!B2e`83F8{B\0t(ԪeV\(U2=aBzi(nA yyE]ٿre57n<]  t:067x:[aChd!B! O??TZ-4 BY-::}K+BJJ m۶ݻtڕǏ̛7'OҡCLLLذa};/eL8###6m=۷????իi&5j\it\t-[ұcGݻi߾=/Oc<==_pvvo߾3}tr՗!C`-[رc3\G1h J,~e[nMBBٙ]9;;{ڴiSL~mʖ-Ktt4gf׮]V#PGI||<۷'' 3g{gϞtЁÇ|rˆ&˶ !DQ!t!5pa ݌I#.,Ka|TwRP*aŝOyMO=Z$6%mt$9sdԭ[Cet޽cǎQ>c͛DŽ  BLB!^f2t''K|Y>z>>SUCPKV% 0"6>R3K?v4ssh WTNCN0ct˃t~ 6@.V 1 2!dEN,%B `z*:WWȃCٵkחgWׯ_` GTR[[[|||صkW HSre5kVˎ믿۞GF?測hIO}ETGUv;/_&dħf۶#alL͙>}l%B׃'B8 ;`A=hp~||+JcddD6mhӦ μ aˋΝ;,>+ }>HKˏY 4jԈ/ҸqcOҥ)V̛7G帼۷og٣7(AeVs@c{͒%KXf C޽{L}n߾Mjj*ӦM2(ܻw/C=>E# !DQ&t!B`e#Fv? O5lVbjlʭqS?~8eLd?aV%/ʕ#MRU %E]zul`lY5xMLhsft,XބH]!BjcO{~t11jyǫ֮M_Q>}:Q=h4t:O<ɔj`` qqqL:ɓ'gH;z(U`Ĉ9M~zO3d/^ҥK:t(k֬!99cffRe> Nǭ[ru]NVGxA !(Jdt!B(åKj}N5٬^ ѿ?ܸqx뙒Zm{n==B=BQYXXX6_̞X-]P]{ _~=}_m}{VFh ܹs:.Sĉ̘1Co9666ཫ+-Z`ƍ,_\o7oLy2~ 966oeyJBQC1x`])DDDTWZɓ'3HHHwTBQB!kMx+ݺǹsYб[o?O׋%2qc>NO}2*)Fժ+͸r/| .^4kW ~2hBDQW(_ϧI&X[[_ӧ 1cưyfBBBpqq᭷">>-[^ݛcr!E>fff4i҄ү_?W^^^ԫWOOOfΜĉ^:;vrܻw/F-عsgޱcG7oN=СC9r*UW_#C7AY΅/ka *W?L{eOq{#}?cWezD,M,QcdӾ{v,aiL|ĉXZKŷl  2@E!d;v,5j`޽<|ZnM>}իW gmڒ%K(Wk֬a…8880zhƌs`f„ 9rZjh"<==Yn]rڵkǜ9s d޼y<~GG=|Djj*˗N:5z꥗Wxqۇ?֭c8991et֭[_! sss}]-[){6:V^w&88NGJ?n87o9|0[n {{{>\6M=z4ݺucܹ_sss)~hE! + R*** WWW"##qqq1tsBBC]5`7jJ O {KS!B!B=@B!^gϞ5tDN) kT|*Q G&kЏ՟-,aĈa[5X@ M`Lccuqmܾ 'NY`k Av`m.0~< c!Dn{!B!BdOB2?f888`mmMf7tO>M@u+' P6&@J[) C}'e 02gg9qNreX ~JVNM֭"W=B!B!'t! 'OPJÉ?ˋiBW_C7A,''K|֬GG=W0Y`mAXzNMz7?ÍԁCg;\QNXSݻUY] !^D!dB!"{@155eҤIV… nU`&zÇIfGG5?t{A( E2g|`2 _.@j0hXqqj޽n5jjڥKCB\BB!ȞЅ(Ξ=ÇZ"4hnB} ̛11ukjǧgMJJⳑ#iS2]+UM|6r$III( TlwVTm*ߟ;:B߾ի,m!<|}zeˢh6m޼Ɍ={{{J,IÆ Yn]{L<SSӼB F~~a!CH:ro77,`O\[\aO\n &AtB&L~9nSUWedY /ٛ7aFMy^]}}gH@]!B!B, n߾ҥKy1ݺuvYnݺj*Nݻiܸ1zbڵaaa%:uJ?y֭˄ OBa̙nOK`ع||4ZZbbf$CZ@^ulpl깉N;q=:F9L5x>w.DF;c.>r$-'N@jjuAג'B8 B!DB%ܹsP遁zܹ{vZzqqq7={{M޽3\x,]4{$(*߿o&bg'ĉP7fk2gV5*)^y=*YҵVlE]bo1zXYAǎp= aap gFZ0y^מ'B8 B!D$.lڴ |||20`}!""Mfy!C~:wF$/6uTC7A0fŋZ( `NvQj,ˎ ;W9ڴQرu̠Yƍ$!DQ 2$&&MBBEM!Ѕ0ӧOSvL߲ _te˖QdIlllP]vѼy|oBAQс Hh$x. woxg~1"Y;i2L)QB l1DE= Ϛ&M4z&B!C2e055o߾nB:)SPB۷)]tin߾hZIJJ"));v숗W͍͛7g?Çlٲ 碢֭[ޝX3rNHٚpIJ%ZHT):(HMBl#j҂JDɖbܿ?_ 3{~=y뾯|o\ww}T[r%,YdÇo߾]ۺu+̛7ow]py8<0UA> LZYCuӦGQp{ǧ>k䤛O\1?sύY`ki`LZN q^ӟZaf?py8 h_:T},HKc…$=4|~8i\V] P,gA8[ϵẏpͫx P>\{-KSOAz0a}6- ֮YI's@aH@x /9-"P~T 0 $ ÆF 'y0nFn)8LZEJQɂĄ<@:W^+~]>}z@ݺ_V}t.䀤gH@ܸ] AΝ矙4innjCʕ9餓BLRQVL~<b jNh 80ZEJQȂ'd#k_F}xe+lھ)ױWK.ѣ/o!==8w4q IDAT{wZjք.-RaVr@ҁ1$Y IRn\.ӧe6o FgAɒ%ر#m۶kaӦMԮ]^x3g!IRA:PxzOT2$ J`( njvڧ{T / ֯w Vϝ c*Uv_~s($I$I*"Ѩ'TF V\ז/_NժUغu+wq/7ncoK.ZOff&)))dddd$iE0qbpWaW&h43g|Xc_ Po 8]$IXd@ʝ#˗ǯ_KfȐ!|wl۶?0ߛѣG] Ht%Kᡇ_rB,^ PJk^<}#3a X hϘW^ k-@Ply#î]1+)KH;s@$$Iq 333TX)~49:vKîL,݉Oaņ}RolOЧlw MO>NB#s@9 IrRV,|« 7].T,ٰ65ЦFj^H;߱> yV, ͛I'y:$I$o Ta֭9ڵ+]v ,IRa}{Kk / } G0d|AN4!pc{]࣏~mN |J_-Z\$I$)ΦM;w ti/lKEOI 7Ot~s叧֑SX<KC}\X!9׆z˖*$I$R<]$IZ58f΄k 7AKE%'n^σljhKwש0$,$)7.@$KPQW ݺA~г'<M]YP0" \\fl" ކ65Фr'Hj.,VlSZ~uk^=?++eD(#G`Μs?IWI$0 $IʍgKEgHB1w.\=| <ʅ] G0sLm6g33Ϡ}.I$I/lK&Ov g*Q{ASeKRX&Y=P^:mk{6mߴOcE"9d ykP^n!''5p1$,$)76%Ia I'0mԩ> ;w]Y0 b!c펔+]nghe?^^)Km綽wY!!a_KHΙgE =Zʕ+?۷˔cI$0 $IʍgKEgHbƍp]P. vUR۾k;Z/XsaO+oG:rʢysY99 s0z0$VO'W_A2СtgeԩJ$I })w@$Iw0bddn?V 2),V 2*u_5k|ˎ-dIK[@Rի'-m _gww'.T+  ˗ K$I$d@8$$żh͛7!]TMj:=K[BruFD"QF{lGQDIdYY0cFLU'!55hPD>NB$IoIOOgӦM̝;n.ʼn!C0uTRѣG%HCa`cV-8t95- ",/ 4>^WC- g@Dr9ݨ=6}g߫MN4KHOO?6j\ZԆdH2$Y IRn"}Y& $%% .GRHnJҥ.C*g_½G]UL2 TPf= M`ɬ۲sӹ=ކ Smԩg :I'Abb>N I`Hξ;R_c +zzJ:hs|Vlȡ/cn<'3e Jpz pYA3m[(U*_$I$REI$~%J7ҥ˽zAaW&ŕĄDZVm֝[9|}tiHMѣaW\,YYYy%K2w4/,X׿!Z$I$I6%I} j 22m'N O9v P [#k3)[gGQq:ߑԫP oP4hQxxYdH@@$)TZ5X1: 8f̀; x"1dH@D LRRR 999r$I …,E=RlaWyy˼ūT,SiKD"=Νs3S_+V@R~:ts$IXg@ʝ+%I6ރQ`t[y$I eJsg}Lh5SNCs?n.ʗvSVʧH$IB$IGB\~yB~Ш̞veGSG4f$.Ȁo!CnV^cM$I$)@$),Y$r0|8dfBٲ.]`ʰ++Pf2pXhUf͂c`5o®]TxI$0 $Iʍ t)NӇT.ERv Rlj΅矇w߅cî@*Jjro/ٰ5??v_ ӧOm@ p%0is~ $s@RJOO'55>}]"ѨIEYff&)))dddv9BrJVvRl m:Ua3®*_'gp&}-nAc;sA 899vS_~  :Aj*uTLI`Hξ;WKXII0h,Z5jgYgeaWoœ1g៝Ief'!N<> |0X~5P4o=$s@$$I[̙͋qw֭aW&)ʖ.˥/eʅSXw=u{1[ZЧ6] >4 .օ~S!a"$I$頲.I$H=7XNzzz//;*'J+׶BulV-W.^~6lSuk3Z _\߶@g!I$I$Ł~8©t\>FKh.hBf{vm:gQZ4NRF .y˕Ν6KdH@@$)luiԪ,!}UX6[n͛î,Oʕ.ǣ5zN4?󘉉Т KuW{ϞP"|2<(,[_37$s@$&ao LRRR 999r$I*o^l~EO}J'P,mj󱝹" k5kW`=8`gCJ $$Id@ʝ?K$IyQ$~;,Yrܽ{pG]PB}-C; eW.F,ABd>(`C `DHN'Mk`.I$I.$IZ^z)XBѴ4ǰ+ϪZ^W}Hd/;NA^6yӟsaXX|??hv/\/?$I$@$)lذ!S㏃ǎ:u`( 1 W<^_o}44OM_++ _J߾ݺmapXr7$,$)76%I={ h+^n . ^q4k ]n`՞k\* ;С7ժ۾sOpzD^$s@$$Iq`a ŇJU;vI'A^~}ؕfTZVmIoxK&u<{pu0sfpnzzzţ '@p 0gnjh{mF}7YYYy",$)7-'$%% .G O=wW_,).]U#.^;rI7ҪZox-2%;88t8l eD( 3WQϟDRRRLP$IR`@ʝ+%I^ _|]@ސN:)\;[ɷ?JaHX ?XhQ;AH<ӑŋп#lѺ5[,$*?H@@$IҰ!̟}aW&)}[6vϵ\:Rsn-ԫ( J( Sͻի*Q. *U+ww$I$$IR",믇{㏇W^ 2I1aUYq 2eM,VrMJJbI-zT҉ۓ'DRA ͞ _ }м9ԯ<IJ$IH4RQIJJ $'']$I#K@gCBaW%Zeh@4%}3ANu\~9tŊt$I })w@$)]}u0c2|i|9,éD}sԩ>ݗË/3τj/ rI,$)76%Iiiia )/">n G0$6 scyILH/ʖ NC8lxqSN>ƌɗg|$$~f$Iq ws+I_%:ڴ®JR:C9cm v`$`M$I$&R\.I$ź5a6 VFa+T]QSƜgt_RpE0{vύ7Ьԯln]/I$IR.I$~P.<m.)M2q_yDt_$<0n+^ *UWD!Ll Irc]$I*>}/3+Y3i>r$V`w1k ɹ͛DϺ7S9~Qtllx#4k X$I$I!$Jкuk;0vJ׮].K$w߅4#XƀavuUVqHCPBΆٳah<9X _%I$tٴis%##˒b t_$řlV(оzuf-_~+T]>r[DzѮV;"ynxᅠhT ]=z@S$IHs wI@=.AAMHLR5Ν<_ 3n/pD(Wz>>N`H8_aXغ5k?H@@$)o>$dH-ŋo l)^HdO%URGrCO|c"HIᅦq !.*U %?H@@$)t-Yg1#׏M-8%)T (__ω_xJAn0g,[7' !~}~U/6f$I.I$Q?֫ ]^D۰tiJ7oxZ5ޚ5{a >;nT _$I$)@$I$&͟ς4WN*Uh_: I摴sgOϺٟ1Vlc$&BKz5 _|gժAjuCt IDATI$I tIy.ARH0l/tf-_΀aHj22Gb \I,#̖[yrm?RSa]N9{nͯꥢ!I$Iq`a ) 4h e3ԩ4%Y`TzWz5="hn\pKR%jX6$tp$ tI/v b^ࢋ 3; 7G["?\"nlv#~*Mn€yҥ[73'ʽwo6 N: 6CaÆ]*,b=$f$I{g]8PtKr͂ڵ:M7 g$չ{Yq ^ W&b:ԫAХKp-;;j XIY I@$I(Q^ :n|3$šb 8ΙW'?Y<^b"t/l>h,] ժAjuI$IlK$IiK5O=v *I? Y>'+7…ÇqrJp~֭P$I$P.IR۷o%Hyʂʕa`V,$E3%Si=F$'O<=\bT |,\E%$@.IRZj%Hy΂DxmX 7`tP<ȟJiŮ}9tí޽Wi4CaÆ^ WQI,$i"ѨRKEYff&)))dddv9$G ^~yJ *Iڣ禙7ѣq.?rjQ#cdgq< L\ .ڵ 1$I #R\.I$qL?GI'aW%I{԰bC:éXM1`;8, Uw _K$Ie]$IҾDC.;I`iZI13gMyӳ+_n- "3ǠV-hƍmxI$IRlK,Yv b@eAÆеkqnys-@g2%piKiWk h>'Oر3D_ *})[H3@.IR/ۖJ*z5 ʔQ =^}N8!hKi~&ݶۨ9&SLK7߄/4x啠ި 6@2$Y IRnlKFv b@dGAٲТ  9SgAݨ_S6w| ԭ }B*p0}:dgS2$Y IRnlKVv b@eA͚0ot8֭+%`wO4`{Cay|๢O> g{ jՂ6ma۶*\$IlK]wŷ~O?O?Mn.K$ :t?];ع3$iH,q口߬~T~27ϸ9cD"д)<$|= (t*$I$I᳁.BգXb$&&sN~KZT3f'K ~%[hu9J/7߄/뮃)Sq`y[.9 Irc]*wNR89S_~%Ia[n I1fABv^t&M:x_`T(S[UMʷ1k׆+a48\. x);;߾_$0 $Iʍ t)׏:PB{-[p7RJJ* '{7-[0c ڵk_STDs=a )͛GA۶pyp5+#a\&|6!&&ĉwCgб#Ԩw˗@ъ[$0 $Iʍ t)5;vйsg"^۹sg{9ONӦMڵ+/n{HJJC3ڶm̙3>}zI$~8< `PYN=^xg$I$@Qjظq#o&<ht{ט={6O<zO橧]vw."ؼy3ӦMx|W2'I|WCN4iF^>/IRaRxi.[R!aÆKb" _ W\^6]7b"-9u3իGB6lH4O?CRJʗ/#<„ hРAA,ٳg%H1K*_z O:@<@()Lę [7Fd%Tz}gݯqj׆oiӠV-`U̙Jm4s@$~#yy8y<uQl򿽁>}&IDݻK*?˗gu]֢E rrrxvS~}ЫW|#33222v2I3sfpo$=څ]$t}g*'r[GsIK[a{I$o R4hŋ-J-ZD$~!U&Ia"h(mΝaW%IMN4oeM4N2p%Pʻ@=L}/I$I*jlK!ܹ3?3&M1c\2'tRHI*wK(IPdAŊ#кJ: "XB$sӹ"|/t c"Q7'/$0 $Iʍ t)M>I&1uT ؖ}ҤIL4۷бcGڶm5\èQx뭷+9s& *3%ŷ̰K M$$@~0oY'&]T$E)=yG"Ae-l/ŪUY|Æ ))i{> +O<իIe$IT@$)]P$T3q"̚aW%E"Of}=wywskBxi~jAϞtiATf$I.ʼn>}JzzzإH AZZZ%HE* =>*WVsr®JyE* ]&0á`E0cԫ\?u3$Y ūtRSSӧOإH1-zpTeffBFFa#Iv =GvU.JZ8!|> ? ˗g+ԛ7/:%IHs$I«xq`;O?F%Zqwcxlclݹu;*yˡE hx\!I$(.I$;`?d;®JbR#kӶf[nq-F /+ݻ'/ж-4kSz$I$Iq`a ),PMA`Ȑl*)>[.Ϟ,_\ $yOVwlP9 Irc]8v b@\dABr .l'LJ]3"'5IZhH:ts?.=FrCXcH@@$)y$8˂M +`뾝+eq:`h!n˺}U+xuV_y%Ԫ=f s@$$IC`hxyh$8WOߺO=;aD3hn WMVI$I/6%I$],,^N<xѰ+Wڬ곊651p0`T'mH$IR.I$W{.;~1$)V0"SFЫ 4o . $I|b]8УGK> J#ah}7쪤*s@j_x}re<nOY ,$)76%I۷I1,;G'@vvUI9TLE^6?~(]!%%h`E9 Irc]80pK̂?} ?ɐvUR2sNsyfoG ]رsg\ę,$)7n.qn" `֭.]:2$,ȃ͛kG>ʔ *這* {/Wzu/%îp0$Y ;R\.IRbI`ɡ¸qФ |qUIP,tv7kSܬA͚#XhaH@@$I=D 39N: F7|ٺ88vı<3=6 NX$8oj{a,Z$IRf]$IrSn_W9Ό$+O教4:OSƜ19Feˠ[7x~뭰vm-I$H.IR۷o%Hf(Y{ &Osqc7/쪤c㴜?D)H:05Drؐ5!ڨ9V!Ih'(TJG!JTTM3kO&s|}b$] IDQ*\!---8$IΝ[ACݺaJ0Z&{m/s M)$IRsn +%I$V[nW_ 36m /v*I>C^{+{ڵ˖'q~:,^$I*4$ITZ向Lb ;$U:h?6)=jԀ/c'в%ts{4J$I$%իWAR dat0!|aة_d"ۿ1OժpᅰbL };BAIX$ $I$%CAR (+ ޺҂sѥcB?}פ@[0kVB3ݳ ~ydH@q.IR?~|$%ANu _ ۶J=*F*ϬzEž6ΝaWݺpp1cGv$I]$P^#HJvA9IMGGgtx睰SI=kXw:FugǭO60sf*iS<b:$$ $I$I]P4oA4v*IjU|zէeWzz+S``_n=83]$IR]J "33찣H$%E3τ͛N%IZՔElgME>z#ছ`Ӧ2$I*gdff2hРH $ƌիWQ$`ԨQaG삐Ԩӧ…p !R%Aq#kKa̘`>x0|yƑ= )YՋӧ3f̘H $II (L삐u~~aRoϩZ> > #/O>a8$] IDQ*\!---8$I*(n m!JT [+;8W/:8lGK$ŕsi\.I$IJfx5chf;$%h4kk_0ZXkj׆k v3̓FGɉcXI$Iq]$Iжm{֐ W]?v*IJZo}+lԬ |<X͚A.0~CK$I9$%M6AR ~s{gdJ= '1yX@{^U`d׿]Ď3!R$] I8@$) ']"`ҥ};J= ^rYr"غ5TdxҜGu-}"/sac?R1[B$ $I$%#HJvA^c0mCnnةTRF y(!}M$:CŋᨣJ}tp?1$] I8@$IDs<5Zc\I9_pŋWwKu}˗?`q ۶8$Is.I$I訣`Ѣ`rU 6JIuObUiqH2ݧIΆիkW:80obV$IR9@ IDAT$) v ;* {@5/_×۾,uºuпp6z?gH@݉D'UfCZZZq$ITáU+x 8аSI~7n_Oߴ\zo`xزzy?8$IIŹ{@$IJF7/Xش)<|ة$I?s}O'55ŋ2`RDݺgP~' XS_?eˠV-h?^$IHKŽ ))55c2gZ3]ˈcI=`ڵв%|QQU9l~9;kڵs;v?='=-IWaC.Q*0?HT4$%N:AR Dv}Y3XTURry@J deZh-ʓ $I*Z$Fi*\i۶-oիz ;$Ip K*as1fW΀0sb_|9  9pq ,I*;;l;ϟONNiiE#%+R%o$Iڭ~޽aT7;$)%fbDr/}((<\s l7Cq ,Iι{n.I$I=  a$A{ĝ!_xxš5ppMи1̚$IRp.IRX`A$%@*% .~1T!{@J^5Jk[/_]Ygu1 )@9@$) qaGەW”)sЩ|M؉#_imǶb]0w.L ˖Ÿ"3$IEs.IR@Vka'nyy[7V[n &gI]$0tа#HJvn]x 8d|2D*= )=;lضԨÆк5 <_gI]$0~#HJvvmxE8|#]JI˛]ΒKp^z`36n4Jۘǔ3~&$h%IJ ;`(Un;N$ţR")p eGǎ|yIm~ cQҮL IRK$Ib' }AߡGؾ=TyիWۺz*deۻ9$I3%I$Iw%0c*r |U؉$I!X2s(-‚b]S.<$:l ͚A~*I$tI¨QŽ )*w]g|vgH*8|qLԟ6,nj G ' ~&$h%IJyy2QRf(iix1Ԩ-[¢Ea'Jjk̉,d1B^[ZV ֬N}E xsxI$-FaTr/uz 6撞NNNiiiP$Io3 &O> gv"IR9+(,0ZH*J} aX<8-:ubR$@=WKP4eРA4o<($IR̞ г'{o؉$IJJ2 ZނqgaC>(($Iүr.U@<[c ;$IT|{0dH!d+I`|÷zn*п?|}f"Ip.U07o{exڴiS$%@ !%3X:8f aJD>i:uaRZ5X~ŰaC|2JIv$I#۶mcСtܙ8?soUW]Eݺus=9yꩧ 6!C*>}AR P Sa NISΙ]*յ' Ko+G cΝ1)U"$%Rl޼|;vpYgD|Ygc=-¬Y8ի'OyO>$Ԯ]N;\rssKr$U2#F;`(u^,\.D= )Q{nѥJ7a 8D??!J$Q@Ds7oN:1oyK~L{dz/Xti^ve|,_˗I3fLcK$IӠ,^ CvKa'$%w5tX&M9saC.ϏcPI$U ХrrJ=XRRv_&MFXkk֬ӯZjQvmgxǖ$INxU23aİIDzYZߘasWRR ++=+ 6sX$Itm޼}c7o.&MİaÊnݺ˯ {]/?ߟzhrssdӦM<>|pFcׯ'33իWqkvy,//L,XdeeO;uy:~uutСR fM:q}rMFԱ :~&}gu(;*Xe10ƽ9u߮+ѿX.Z~:\?>W:s:u:~a: Znl`РAI t)vwzÆ iР/.|9C,gHC Ž!)dv*h4gwP|W;U`H==~SQx زn5bR*zH*]*g/2~qu$(v*H$ldgSOAnwaI2<- a &hf͊Q@] IR<9@YƍYj<DhԨQH$I/CNig؉$I lͦ5~n0z4,_]Ygu'IT:,mԩSwyGy!%$IPvpaE xーIЇ?gS?s0w.L ˖Ÿ ?$IJxU U&fblٲAi{A.]ر#ᆪA<䓼<D"0_$Ix;/N֭gSN%IJ ms%6 f#رpq+I t)ǹ˥^J$aʔ){{|W?=oڴiݛÇӵkW-[ɓbzIYfff$%@ca'I"gsիT/= F 6;9H=q J v$I]kRPPիj֬ɘ1cy9sBL.0`@$%@^j*̘{E_ hة*{@R@ 0uj0L?xfˋc@%kHT%IJ:u ;`RV |Fn+;NUa i9%& XD"УZ\F'LwT9$cHT\%I$IK$ÇäI3τmN%IJP; vPN|D:֬ +W+{.]X$Ir.%AIvvvQ$Iʂ_y}{ذ!DTz-uDz˖WjU%Ax>>5[%;;L v)9@Ę1c>}:z ; [@f?_1+I]$ITy$,Z}{xᅰI*+s[{߹%Gpp0qۺK$%$I0w.t g[؉$IH*չ+[\Y{TW]kiA߾ТfJ$K,XvI .=)S`>쁲;7G=tG ??_vlү $I*t)I 4LÎ")wqG$%@*U{`h9.v;U$FV୷`8x`[8 dMff& ;"ђ|T撞NNNiiiaǑ,3mǎ;cR$I]$Icŋ᷿6m`ΜIX*з/|> ii0~$I*?$%k&] _ݺ#(I@xXxͿwXk-5];8UR $I*tI@zŽ )R1<.N'i#&4lGC~~ªҳ $I*Z$D%@%==Ž#I$U (ppp}PZة$IʯV >1_{|-|3L ǍSO}VIR@=WK$I"xQxāmN%I?x^ky雥7{/[w }۬$I$I$IEf΄ g2D .~pzӴ)̟=o#G?b]$I$II`aG:v `hV ;Q}~n$^kW'4n g1*@9@$) :4] A&d BVR d$UWQz%vm=/C.]ଳ`ݺ_~~4-{XUhv$IEs.IR?~|$%@*C Vxb*NTb${ ׁ\~9MlR?΅ɓa28XVغu+;rgr8p8[nPE`HTHԯJZnn.8 IDAT䐖vI$۱. Е$)l }7ԭž), D())9ػYx*aG$]$I^} +SI#.֯Laa9@.Z5ofTI]$ID!//TJX]װ!T?/, cP$rp.IR5jT$%@}atxe8Tظ1DeH*/}Iri`sx b]Fϯ3URH$ }; :t!CVa $I*tI#Ž )RL u |j{@=Pu<#״ׯ|kxHOߎ]>%@9@$) AR s{A駡E$*`yNT' ;wLbHT4$I$[˖h|=dd;H>7z#?,ޱ"ҥ0t(|3i~琒$I!s.I$IRyh/u a'$%/rsѝGk>b]Sz7`F8~FV$)$%IJ=P$%@Ji?Q= HnfQE|פ=Ʋϗږ- T.G"aWv$IEs.IR ;`H V-6 . #m= P岴ht@]^^w x8U\$-َT撞NNNiiiaǑ$I(_YYPZة$I*͛O? za$si\.I$IR":x xqn ;$IŲ~0yr66s&4n /v*Is.I$IR?fφ%Km[$0ZH~A~oc;À}{CJ$őtI$Iv)`AnF\v"IRk]}f۸O'K1$IR9@$) dffAR ר,^ { Z$5kGczPJ]o>@˖pM_9ʑ] IRK vI .*u7䓃}pcz{{@=_ i97l ˆ0r$h| @9@$) t)] UkË/B^FA4[UC^1PXv2] IRK$IhUn. T$Ws5\a8$I$I$%Hn|w#X'IR iH{zv,u{>;>7G*$I1]$sυAR K`ƌ`p)W= PiUI Ew|]ߡ.y&\|1 7'~] IRKÎ )Rֵ+̟{~XVJ$ů7pΔsp{ϟy&x[k(ʟ] IR"ђ~ʑT撞NNNiiiaǑ$ITAn*3a$Illqu+=. ^x!leHMaHIRH tI$I*aB8`/iN$IJBuj)ࠃ`t8z 47ވQ@I2p.I$IRE>0{6dfȎv"IJ%K/C];:~1d$)9@$I$cΆJ$}‚]s0r$ ͚CuI08@$) deeAR J&%Ə^v{= Pdd@nn؉$I*֭w_ ;$IK$ITY4h ;,v]~&t.u /@N4n <$I]$`#HJv$ԁW_{wx9:~8d֭a'?(,.fqS-,+V)9·!h $I*t)I 4LÎ")wqG$%@J"5kԩlӇ1g:ݴ9֑1a=32KI K尿 t{o,=~{,X޸1J&@JNdff2hРH -u6R%==Ž#)$yyyԬY3BfHgdO?O LIa;6|ʟ&,3VZ>}YY0w.O0rd1] %7]$%] %3fgߛy t),dJRWvw{,3SRVLIaL$+!//䔒ʓ^e&N$/M'з/\ut}Ð] IR"Q;*\!---8$I֭[},>UFLtFjϞм9̘5kU$Y-6IYYq K$ɹk@$I$Ojj*#ƎcFy>kt  k /$I9@ǎ{?EB$UBn.I$IR֭!e}pI'{ =SkAFa$I$II`aGIZِݺmLR*Gye/+g +V@zz𝱾}-.$h%IJC ;`H*Z o]<0Z܉ԊqKFKu^xx|6 b $I*tIÎ )v˰|yp.֭LR*H Ux8k =sR+ V/_mu?8t $I*tI@zŽ )~Z]pp_ $I*tI$I79sbt-[N$IOzۃ{U>M(,N;^$UP%I$IҮN>9\]Tp\ye0Po>$T$),%IJF ;`H*Qt Z;w/rUfh֨>7Oh|p˄fHT4$%#HJv@f}R%UV; v<ޓeO6Y]1 @I]-cǎaǐ[Ž )JS'Tn<*r|9r#|` d $I*t%͛O?;Srrrڵ+mڴaٲe!%$IsG9D$%Uk0x(츒$I8N<11w7a'$)ԁSGqcxհSIxrrM7j*.bƏyر#<z*>ǏN:a-Rs=]6kvyIjӦMaGIeNk:D*(?(YER_}4SOᅬarfHT4J*gꫯ桇_~yL4yqg3{l4hv_D4i[la˖-+aGvI .h4)t_]{J*7~P2Z Nx+ZYv CNNB3@9@WR׿ENvy?ܷo0"Zaaa$U #F;`HY4i ׯw.{wUyq;! EPjq5" R5;P u+U+XhEQ5"""K5q uC])j* Ld\<}.흔<2~;˗/gʕtԉ:~}+I$I~ }$)AU,[<3<ǟ5˕ 篾 _ 8RRNV/hݺu׫UkY|[ҵkW"n?k׮?aÆ1sLN?trrr0aB{'CNbŊtAQjU.\y%I$逝xbpK^R>|LlxzC-$tJ;T ֭5kyΝ˄  hѢ+V`{Ϟ=ٳMKK#J$%cҧOcH ] )n=p Uc<؏7%K?ِcF BƐ] I9@WJݻ7˗//O<7|S쵥KҼyXf UT;_[f?WZ^{uֱzj͛ǩ$IO=6]F_*D$SsyG8b쎊F?d 6l$)N+7ޱco裏}޺uxW%WN.ѸqcLRfϞMvvObر^+,,$;;իW{}Ȑ! >k+W$;;e˖{}ԨQ 8k6m";; {=??ܟdѣux^ux^uxt믃VH^ux^^GrȬQ#8}ك)EH^u:ƍGi֬dH4B*)iii,^O?e˖_'33[d M4aǎך5kVCeI&xbx≌3}?VXXHVVŮQ$I NW /իH|!\x!p0d+v*Iȹg@BpI'tRoD8CJ&)YꝮR] { nn]0H_O>_9[o9u9^yn FF[.$iK!ڵ+6l`ҤI^GQ5 )dկ_#HJvPzc! ѥҾFt;M6_ku륧 7зn,8a@s.̙34iӦM۲O4I&eKN:ЦM |Aϟϥ^ٳ tI]vaGIGCᬳ!ɟ}Dq뷮'kLOtL=T((~`@h V{.$i|RJZZݻw#w{\pTV[jO?~=~\r|rԩMx'Yv-{,_=ݻwߏ+=e"I$)a)fͰIW}ΗoQL^>>\|1] w5ɹgЕR Hdo$IGCr!zZa'$iDQn^~A.0f qD̷$sRJQQ^$\v2eJ$%@RB@Qmۂ۹I؉= RH$.sCɓaB8D:5.[v$I{]uEb.???] )az~`}{0DN$Itиqtz$tӧӫW/rss;w.{/5jԠQF4hЀݻm۶JRL81] )z^`cG0D_2@RjHȓ=ɊoVd#)Sࡇ`$8[f,$tӧӹsg&M3m[ZlRP~~>EJhh4 ;TRZlIzz:>,˗w<]tQy>}x7)((1mlEAAaǑ$IZ2G@nݰIO5;re|"9>ƏOҁpn 'ЕR{=G8p [lk׮>[n,_<$Izԁ^`bE؉$I'U8,.s=PPAFpͰ}{\$)9@WJYz5իWwjժ>o-lOaGI k˔q.QB=:DX !C3o-@sDv{IJfڵ ;`HJ9D/[Z &\dmcێm1Y\9x+8)(.$i >?;vlٲb,I]NNN$%@RZ!z˖}|h TR(= %EYDyǙpjR+&6io UWi0v,Ԭw_oH{ht_ߛ&^iii?9uFw{iVXXHVVdffG$IΧC͛!QGH?߆ IDAT t6o'ҺA똮?c[./) 97J)?p$I$I{fNu"}tة$IgMj7ޠ﴾T*W)wW^ 990u* U|+IRt.( ЬYcH ] @?sLةR$Vʔ_O&@.-O: zڷ$^Z$IR1"] T/~ 32!H*JeH+F?!oϵ $I=$ &AR $^=8}^2hg؉RV̜ ? 0`wP~ Î,IRBq.IR Xb$%@RC NA؉RT]~lULK NFI4hЍѣb>|:+Va4n!$I?]$I$G /UCeN$I[zvr| WտF(*ҥyx1["&???($IvѫV-aҰIt@n^3X6>wHOU^ϋ:0mګq[Rb';;H "Fɴi ; 80] )iz#!zjN$IZ4e۶9 ¶mF%LRIaڴi92(RBs.IR SN$%@RR@j0o^0Lw.I{%PFwAe7D$I%IJ ;`HJV-8^zL ;$ׅo(Zt@tܔY?z]0$%$I$Z5רDݰI3mfxG~s-pqw6NGIKAZH._|Ȓ$z%I$IRvk v"IbO-Ĭ^x7ņk -D~KW5kv^v뷄W^W_eи1,[ $r.IR X] ){`v`a'RRՖ7/[[Jr{ k(˗aΜX|w5&M2X>4W^axIJ!$AAR $%}TsBݺЪV؉= %56f,ϵkÂp)ж-8޺5<ddH87~'%I$IW =h<3x /HR緿3aѢ}v"I~tI$I]9Do<ϝv"IJĺcV ] 7ދɲ$ōtI$I)_L΂ΝaΜIwzO4{/rL;$X*WMa,+IR\8@$)dggAR $|y<Zl=;D~$w-oW5EdZWӠ}{0!&Js%IJ ;`H@3}ha֬I?Ubz?==w[oɾ+ï 990bD1YZD~{Yaa!YYYvI$I*ݾ??)СC؉$IEYJ F0x0|3\y%}7)-$si<.I$I:~ڵ.]`ƌI7i1D"?Ø1pЭlm$I/%I$I!zph%I>6 ΅V૯N$ItIR”)SŽ )*Wz :v]N${@$Vt/+V@a'$:$#HJv${ ʕ'φ΃g ;Ip]ol/} ޽N$fHCKW/X"IJ o.%9o"I$I@Q\uU0LT$Io( |\~9)$I$IaKK{+K. $o|Ki}YiM֌D`Pxj׮qc̖$%1$I$I ѣ^ cƄHO4kg?}spYjUL$%!$e˖AR $@$c_?R  jJ+ng>|&˿^;t_O>ƍb$)8@$) 4(] (%"n0 }HI 6dAjfd{ꩰx1/M| IRH;$I{'] (E"߂_[KuKD$uy׮к5<8t$I'%IJu ;`HJHFn鞠.$H.|Y!z$I1OK$I$%HҠF_%I~;y: w|$$I$IR"D ~0 ~v*IJכ l4><|H$6O%IR >|x$%@=PE"p0p`pKw7dH}G}>󵯺 yO6m`͚o!I*e<.IR شiS$%@=PE"QH$l4*{@.wh=?zΪwV\^|963~l%I*"h4vISXXHVVdffG$ItQzC؉$IJ t'O;-DR|87[K$I$&z+\w\sMpkwIt>. E`.IJ=%I$IJHnn #N$IRRV ̓m!;ƌ ;$9@$)^:] H2p?t~= f{6m.kV&WeWa:KzvI .d$Hn nH 6ĮnewOJVBغ5[HtIRСCÎ )$a0d\}pkwi7I<]pd#s:?YLmf71]?k 'cGۘn!IJ@%IJaGI@:4F(A zg1y|{ѣ̙Ь?qF KC=1CFF'p˗/;$I$) Fӟ[KNy:o_6WꪸѼ9,\CqJH7>,F瞣aÆ|GTR%X$ID1x0Ch4W4%NyH͸qqhsNpgMo+I*a@Jo;3 РA*Wr*InرaGI@ yCYu 06snڴ_!~S*$ /~/MDѰIbTo[oQvm:(n|Baaa$%@=bnChSk׮?aÆ1sLN?trrr0aB{'CϦB \{dddPn].2fΜk$I$N>,ws$CQNV‰$I*9ۊ/Yݺqわlذ!.[IJPzdQn]֮] x`3w\&L\@-XbG{IϞ=}}͚5x$IdF9x6vPq6.IRiU>W떒8T&OLFF~sssXd.bĈlذO>xs9'%I$IP$acٲQ`cٲ%IIϵm _|òe%$)K%#-N>d(~Ȑ!T^ZjѤIzENNN<#KJaGI@iڹ3v?3#Dʱ$]/x1|04i %ItY*UYf__lYƌ7|ʕ+SRrׯ_$%@=z<8f}= ̈DZŒ.X:ݧeծ )ҟz*[H=6(^ԩ>7n̔)S}ٳwԫc{lV^]!C0|b\lϽFi&Y`AI=zx^3Ѯ]:c߯cԩIq:¸LPǼ=_s=’~hW]j֤]z h7nG0`s</%IJVusn 'ХvI'tRoD8CJ&I$IJvzwåB>c$]tE<)&/LGZz+պw͛㲕$)K%k׮lذI&{GF4j(d>JRj $H.(xɰ)I`tq1tirM\2:f͂V-IJ0Х9s&&Mbڴi@p[I&1i$l@hӦ W\q> K/e~q{ԖvI .dh!'zɓN8$]cm*G}s΁ᣏI㾥$i? t)ׯʕ+wg˗/N:lڴn'|krrӽ{gY&$I}{0@2y&~IS};_s駇Hȹg@bhرc;+Vdȑ|l޼7x#.sI$IZz:<8}6tgV$Tp!s uf]$I$Ieah=^x!D$bޗesS'7.HtI$I$ࠃ駡ys^y%D$h4uc!qۣB8 km'I%IJaGIZ5 -Zv"ň= 삟Dc wy8)#GwˆЫ|]\$H*yyyT\rrrŽ#k.] >P}:v{Wa$]7pX핗k?ɓCKl{|oÎ"%H4BREAAaǑ$I$6m IDATCvlYLSO ;$IIiW3N)Y97[K$I$i22?hhy'D$%f`Bش 8|3DK$I$i=f /ۦ ,]v"IB1` z{o-53am%I $ AR $: U9pк5|a؉I`O} rWE 8l7..Hv$I)`ĈaGIXժ0w.T ZGHvMh3[^3m^L}@n. qJ? Io„ aGIb#a޼X\VKPnةI`MrhCd'D"퓞|zXw([6n[Jp.IRJXb$%@=Q^xVSi/.K.)}":]zO?^Rp$I$IҾ];o<N$IR f΄Eys쳰IRr.I$IS"l ѿ2D$%V`X7 ;$%'$AR $ N] m5a'.;ƯI'=6㶕$,$:uAR $ !_@۶a'n.?mqۣV-xe84h&LV"h4vISXXHVV͛7r䐓v,I$IR2zmh28>gTv"IJG_үr/ώ^[%0p D"qVX~~>|v,)8@%I$I%0x̙v"IV4 7ÕWwC2aRsn 홷p$I$IRdf¬Y;p9qc؉$IJZ0f ?t6JJ7$e˖AR $*13f@At7HeH ]r LsBVWa'$I)`РAaGIJTӦ0}:,\}v"aH %ˍ_uNॗ` h>0IRr.IR {Ž )-p/ݻ֭a'Jy$ 0j(:w7>YYh- MqNtIR@:uŽ )M<9x.zNlvfH CJSpԋdT\_^};Z)S~9h4$4s.I$Iz*8~ᅰ}{؉$I*Qep9sMkx$n~Uِpp]?z]^:>ޑu߭ڑHe7^lٍ%K$I$)W\~; vIBe\rqYs禤埥$;Y\$I)`aGI~#F7ßvgH 5ݘ/x-\qIZ ~8fPT4C7r.IR ݻw$%@=5p`0<<;MR$]222Xh-^vԬمz1`n7ݔA>ukI%)|a$I7tа#HJv${@ Z(WNI` k(wh3Ϗ?z? 1$$I) 333] P6 ~`~Ua'J:$ JUVqd#c揇zA:е+4iӧC1RJ o.I$ImWC~a'$)Tޟ1aq߫ysXo3΀ŋ㾥$%$R#;;H$I{y'\y%\v} 7x"DIvAirpy6Y:Ӊgժ0w.w\p hܷU aڴi92(RBs.IR (,, ;`HTÅO?v`H9( $OuU̞cpp%m[l-IDoHJfdeeQPP@fffq$I$I7;voC駡KIR} pa'ҁrn '%I$Iʔ K>D$ /9s6+N$I]$I$I-=cs愝HҢ,Z[@FH$I$I_ٲЪdga'$)t[wle䢑l/6ŋ裃IqRB]vI .d; xh 9,;QcH 0x`ٯZ57/xC4Z"[KRq.IR ׯ_$%@=Pbp6m૯NI`d<,^ uB0uj؉$iKڵkvI .d(}tpm[X6D$]mKl# ֩t D%$$#HJv${@)ca<h&D$] Xr nJl `D4ؾĶ]$I$Ia\#!$I)?.[nc%)8@$I$IR;=.φ N$IRh2/mBBK` xUh,Q$% $ AR $JyfoBΰiS؉J= %maB[h N$I$#FAR $p=l ;Q$]q x1Ԭ ͛óφHK&LvI .dHլ<{u>L)t3*j J*:*LJڠ2WюhŚv a05Dl-U;O,-+bc:fĀ@3&wKN8!y҉gj0❹wŽ} /L-Lch`G\yer5ɻ kp\yvm3nXH/Y8moK~"1f@0mڴ: =/1??SK'5zHt/u.מpmV?:?rɊ>$_Ţ hp@1bD@n{lsO:)x6 'zHte.f&Ccd#9qFDVJzOZMkkk< 6,ioo/ 7L|'JD֬E.JL)HGGGV\[n%iii)  f͚Bx)yOn]X78P'W]|c?w_/σN<{كw 3_:۹O5sFt(hР _Hvݵ&??bɀh= xe˖]x>K_JfLf( :k֭oWh3H6oOzh`2@>}z@WhԮ矟|3=$Wg9GVqɒ%' @n K.)*|]D?۹OV:kDNk,]ydrɷ5:4#F]x'LO?҉^5=$Wgv+aorKr %t2@w*ӟ:~]#6<?(Gt)o,^{2vlRN\욬}:]'8.t"'57'_M;ޑ~{D~9;'//y~i%X~}T@0@3gN@>4lX'#F$}wDIEk.x/ޖN.8I.081yҩz`@PuH z&{oDzH ;ozRTJxQJ' vj5LKKK_G~89dժ?Nvݵt"tv&'n,^-t tV^UVeժUկ~A裏. x!lɐ!?C5YtSD@)t.=:#F(x1mt=pt"(b}m}V=t4bDdI2ztrɜ9%Сwt c׈3]'҉ϝq9b. |{ɩvO$חN%:<ӧOرc6ۤ) w͚593;d6^{+};#{o9昞 `mmm#u@zސ|svm׈?@ (k^9e)j㼠_LfL?>yҩb@bŊ̞=;֭˄ RT^&Lܹssyn{,X`͟??:thƍΝ :W8LR:PtNKIK=4y>zHteքoe[>U:΋T|$k~KBV?܊+[gƌ9s6u]g8qs;6w}w/_$Z-;S#xUմ3---sA%;ɖ[N}f֭mP:Kϓ#L I/NF*赱@@.\z}ҤIy衇tҗ7tS~vaMoyKp?\Y:]?oNbŊle{+V׸2k֬=8∴mѣs5lo1mmm|3gUմ呿zV۹瞛3gn֖e˖m_iӦmڵk֖%KlzGGG&Mlwp%/?__ru8u u::p:>\sY]t7.Y׮K/u\~rcذ䤓:.2yrr}7xn:u23Сt v-#Gŋ7xC~|{$gIo௸1tvi{k6oDkU%_b2mZr]7ݴtns x_}$y?.ԽK/Nn-9oDP~z?Y$hrU5$_T@O1C{G瞬.ߞJw߽P2L-Jn%9dݺ҉?f}t'ݗo_N:0a„<7x.o}٧P2C:tJ'>q'3n뇼tmsKn>ztNVKnȚ5kjժ$wP>nܸl9r衇3ʕ+3r̟??7xc͛JRƎM:y;NJK<M?;ɱ&c$g'zWT:38#'N̩J+2'Nĉ? Oι瞛?d4#: aͷɬr.K/.wdd[H[[[NZ69:4YfeѢEioo/(`ɒ%#u@zOO.(O~zHtiFSgַ&TR۳hѢ̚5\ .: =ć>\xa%>U.y\ztWl뻞~Ɍn$lp@[`A@M֭:'>>M.4(\:ƫȑYg%udɀf@0dȐ: =YgugK~]T*]?.ɻߝ<`paחN%:W瞛X\yi(ʮ&ޚGr![@C1bD@RI.觜u;O|J*48JtWmOL~쳻~iʨjZ@VimmMgggZZZJz],X{lDPu=쳓w+Ү v0P45%gwDooON&L( x JO&쒼=Ƀ&N喥A tH J.,y;K%Է?#d[}ˀ `ٲe#u@zɼyGd;ߙs:*9dmsߘs?^tJ'mu}M~ӲyСAL:5mmm((`#u@zFe9zM2x [Y:JT3o}kL?J̀ G)]@c{o&ͯs(=䓓 VKt" &O\:Pt=$ƶMC>MKGqo{rɺuɾ&KN3JG.D@nm%ozSrAUWN@KKK@*d„c .Hjҩ\:s647/92ǒK>ՙ1 Kǃf@]snGc*]wMN=uu?:O<_ߖJǃ̙S:Pt=$ZVˏQگn/~qzܻߝyfG~aI*#A]3@V#u@z@ U*̝07#;Vt_41_jZ@VimḿaÆ=c@]g䜷S[N-jQOґde[ٙx:4Yf^vߙ -GU*lњ$'iORMZ61pd:1_0|4F})MM'tg@[[[@hD͹֫3elKǁf@0eʔ: = J=yJx͚sE3r_)1cJG.D+?g?S: < jT:  "vSvS@q wh\sM@@GGG@NVJzOZMkkk:;;R: Z-JtWns^_Uҿ˽+-atxU>6ˊ+Jz^ ϵ??w~Y̺ґb@0iҤ: = Svr\s5O.!Kzߘ1cJG.D@O7RJVjtvvt t- tHb@dɒ: = t@zHt4eԩ@]jZ@VimmMgggZZZJ Y|yFQ:P.D@@@@ =.g@~9ge}m}( PqgG~@3@9sf@G<>|0tQ]t@zHtԫMoZ:RjCZ5iii)(nsb@toϓO?Y:4:4Gyt@zHt\yPNީDf;th'O.]M+㾒oliO{Ek79HRƃ6F6*̧S#:38 Æ ȑ#3gΜґ`@0C?s'ʕ+sWfԩ/Y:PJG.D@w <9${WFe˖NԻ)S]@.С?sg~ѣKܘ1cJG.D@fݚ̩z+t!?xOcfmISSS?|5krgfvfm+W\q>cƌɷl9rgmKk6~\Q2CYbEfϞue„ T*/ &dܹ9r 7dN{{{,Xϟ :4ƍˣ> .Ⱥurf֬YYxqo_PLwjWוz<裹~6Zwu妛nWzyߞ}ky;ޑiӦmy'pBV^UVeo~s1T*ysG~_]&O]s5#u@z@ `fߟuϬ+: >7I&塇ҥK_swm<Ypaw瞽:::JG.D@7iPs^nzMxƥ@c@>v]weԨQij?=3Z-wy~nsss|ӟ^?~|N9ގ sW\qE@h[lEFn9t fŊu][nǻs!W@#s T*cG =zwt7y| sj<#~f̙|򴵵eٲe~gڴivڴeɒ%ёI&=/q:\pu:\pu:\puo~vms< L:yUj!`YbEz̘1#so~vm~wgw׿z=Z5iii鱯 /kZew,@7@>{{7xoOR^(0OGz@ Q-{dYvZ: 5: &W_]vY~>٘1cJG.D@Ȝ)9|d(P 7ܐ5kdժUInP>nܸl9r衇3ʕ+3r̟??7xc͛k@[{{{@hTTNCw Ѓ8,_h?Y`A=bС/}C ɬY2k֬^N\ `ɒ%#u@z@ ;th\pA@ JG.D@w<ԩS3lذt 2t@zHt4tttdʕ@]jZ@VimmMgggZZZJ @b@0mڴ: = :4#F]@.x: pe}z@%\R:Pt=$c@0bĈ: = :$\:7NaÆ=}#Yre(Pל@1k֬,Zx j̙#u@z@ QgѢE5kV(P ֮][:Pt=$Sj!SVښδd791@:4Gyt@zHttǀ `ɥ#u@z@ ;th3f(]1@hii)]1@ Ā aΜ9#u@z@ ;thjt@zHttRjCZ5iii)(nsb@$tHb@1uԴt: = Ш:::֖Sump@ߘ5kVZZZJ 2eJ@hTiooOZMkkk8P@0f̘: = :ĀI : = :4: = НJVjtvvt t t ¤IJG.D@w ƌS:Pt=$Sj!SVښδd791@:4%K]@.\p#u@z@ ;th ,(]1@2dH@b@$thӦM+]1@1bD@NVJzOZMkkk:;;R:P:ĀI -[V:Pt=$c@0}: = :4K.t@zHttǀ `Ĉ#u@z@ ;KԩS3lذtutt#+W,ZVJzOZMkkk:;;R:PfΜY:Pt=$c@v: = pέXg {N@ Ā G)]1@}zƎm&MMM9_k֬əgv!mYk\q/=vmlKOg޼yf͚`zKG.D@w CVXٳggݺu0aB*ʋw„ ;wn;p {ޞ l秹9C͸qFe…Y`An|;wܱ/@7!>h1K/}]wu馛`L81I=<@M;N 'o͒%Ktݾ}]w>޺,hNC[pas1lICeҥ~]wݕue>m6cƌ@>v]weԨQijWsjyw}_of٩jy;ޑ~~'x"Ir=@,jt 0]@#IDAT.F^~lȀ}lŊu][nǻs /|HtI/?$0 ]@.߿t ;t(gҏcǎ_w9mY~my'dر@]2C{_}${lV9{k^-@Oc=r=d~Rdw/ ؄ ꫯ.,o}gB;n!k֬ɪU$w}sCq馛ˡ38#+Wȑ#3x㍙7o^?xy@tgdĉ9SSTrWfĉ8qb~޷pœ|9ss?y,X?DzY&gyfvalfkrW7ߜSN9%F[lw1GuTjh@AgNSSSZ: ǖ,Yqe-̐!C79gJ/~uQagԨQԧ>'xt4<>}zƎm&MMM9_j5zh3|}ѹ81^N_>_җrgvo-'>+WJ=3<1 2$f~</~c=GL0!sy睗n!{w۳`>@}W|0gyf|_?}7?яJ x衇2mڴ}l9蠃2|̝;7_}>V{'/_/YxqsN(+VٳnݺL0Ex_2|py\uU7{7o{۲bŊ>N OvZȓO>Y 9ԇJ͟a2~,X 'N|c*Gy$[mY&#G{oP2#<2 sW?``{衇n=yO.q>|s˯Ͻ~K/ͣ>aÆ +Vd뭷Ό3r9l'?q~d7O,_|_}9csa;0-\0{wcUy##C])iD,tQIc[Ahh5FAVRQjA\(J0qOr=s瞄 syɈ#ꍏ5*k֬ҥKK h*;Ino PJg#<믿Q&vM7eӦM?~|%'IGr!)++ZnݚEeĈuyqݻwBYYYC+M^z)w\ҥKb^|%J3 6,g}vRJd烻 X,fݺuM (իW/Nn2dȐRǁiV@3=z.̛7/3fwRȂ hѢp<34 &dƍ('xb~7ߜGy]}X(r衇6u,D֯_}歷<ۗ:A;w/m۶R(<B^&L(u {ywr5פ2iٲe͛72#G,uLueb1IRVc=رc***w-I/"Pb:tH-lٲs˖-G߿ɀ~'zz9DÇgƍY`A[n%ڵK=J hJ]vY3eʔL`,YR:SҢEl&L<͚5K>}rW#lʸ@#ρbۂ7XKM tH@$ tH@$ tH@$ tH@$ tH@$ tn喔~;,ߵk׌7.Irg,;wNXlp?}wqQGS?nִi&{<,SNzgקM6ݻw-ZT{ׯ_}ݟ9|њ:_V(2k֬{ :vϻr}z:I|̚5+F9.L2%'NL~SOeҤIYfMn=~͛3iҤ\|9>)y3cƌ :4sO$9C3nܸwˠAҬ,hz~ԩSt =~_7vk׮Ksgyk/y睗.,IҫWlٲ%\rIƎf5kV֮]s9gˎSNIeee͛WW'/~L6-~{~՚y;4o1{l***ҩS̟?-\0Ço0~UWeժUu|G9덏5*۶m˝w޹Ǭ7pC>|s=7[AA?Ϸ]EEEoӦMv@cP^ںuk׶mw]we6mZ,Xo}[9ӳpzǭ^:O>dF=zsUWeK/%I:w\om۶iݺu^|ݾիWgٲeݻwaÆeΜ9 swgϞ8p`mw|YjU~dӦM93{I'G￿|BXL=7k,[l7VSS~:[N 80|.zu~I'5?SN+?qԤyiѢE-[fKPhpk/K,_2IҧOgҤI γSQQ3fo߾ ڵkmۖ'x"mFف{P(d]tӧʕ+3~93ַ}}hJv@y>)Ovx;m6cǎٳlٲ۟};3{w}ڵk덷j*q֭[Wo|gmwt͛7W^7}O@&xu_o۶-OҮ]$C Iyy7a„lr ͛g֬YgΜ 6l箪JXkVow)3gN9s&I;zS(ұc|.;be˖_:Iݺu''O׾\yW2$~衇rm}:L81ƍkP^WVVfə2eJ*++ӿ<䓩ι瞛ݞGiѢEx 2nիWƏ7Nȣ>odYxqN=Դo߾?xZj?3]")`/ ?M7T7W(2lذt1'OΛo:dܹ1bD;H3`]1cdYbE'_\s5i۶m&N'}gĈ뮻2mڴz\pꫳe˖x≹{SUU ÎCɑGk6Gn=ܓ3O{y'ҭ[F_o0`@/_oۍH駟}ݍ'c9&7pC;SVןt-sI'ջ]<45; v@:$Q@:$Q@:$Q@:$Q@:$Q@:$Q@:$Q@:$Q@:$Q@:$Q@:$Q@:$Q@:$Q@:$Q@:$Q@:$Q@:$Q@:$Q@:$Q@:$Q@:$Q@:$Q@:$Q@:$Q@:$Q@:$Q@:$Q@:$Q@:$Q@ Tue Aug 4 09:55:54 2015 options author Daniel Estevez window_size 1280,2048 category Custom comment description LilacSat-1 decoder _enabled True _coordinate (16, 8) _rotation 0 generate_options hb hier_block_src_path .: id lilacsat1_ber_bpsk max_nouts 0 qt_qss_theme realtime_scheduling run_command {python} -u {filename} run_options run run True thread_safe_setters title LilacSat-1 decoder variable comment _enabled True _coordinate (696, 604) _rotation 0 id alpha value 0.35 variable comment _enabled True _coordinate (616, 604) _rotation 0 id nfilts value 16 variable comment _enabled True _coordinate (1016, 140) _rotation 0 id nfilts_0 value 16 variable comment _enabled True _coordinate (408, 668) _rotation 0 id rrc_taps value firdes.root_raised_cosine(nfilts, nfilts, 1.0/float(sps), alpha, 11*sps*nfilts) variable comment _enabled True _coordinate (1104, 140) _rotation 0 id rrc_taps_0 value firdes.root_raised_cosine(nfilts, nfilts, 1.0/float(samp_per_sym), 0.35, 11*samp_per_sym*nfilts) variable comment _enabled True _coordinate (888, 140) _rotation 0 id samp_per_sym value 5 variable comment _enabled True _coordinate (904, 20) _rotation 0 id samp_rate value 48000 variable comment _enabled True _coordinate (536, 604) _rotation 0 id sps value 5 variable comment _enabled True _coordinate (1176, 212) _rotation 0 id threshold value 3 variable_constellation comment const_points [-1, 1] type calcdist dims 1 _enabled True _coordinate (1008, 8) _rotation 0 id variable_constellation_0_0 rot_sym 2 soft_dec_lut None precision 8 sym_map [0, 1] parameter alias comment _enabled True _coordinate (504, 16) _rotation 0 id bfo label carrier frequency of the BPSK signal short_id hide none type eng_float value 12000 blocks_complex_to_real alias comment affinity _enabled True _coordinate (72, 832) _rotation 0 id blocks_complex_to_real_0 maxoutbuf 0 minoutbuf 0 vlen 1 parameter alias comment _enabled True _coordinate (240, 112) _rotation 0 id callsign label your callsign short_id hide none type string value digital_binary_slicer_fb alias comment affinity _enabled True _coordinate (304, 832) _rotation 0 id digital_binary_slicer_fb_0 maxoutbuf 0 minoutbuf 0 digital_costas_loop_cc alias comment affinity _enabled True _coordinate (1088, 400) _rotation 0 id digital_costas_loop_cc_0_0 w 0.1 maxoutbuf 0 minoutbuf 0 order 2 use_snr False digital_fll_band_edge_cc alias comment affinity _enabled True rolloff 0.350 _coordinate (264, 392) _rotation 0 id digital_fll_band_edge_cc_0 w 0.01 maxoutbuf 0 minoutbuf 0 filter_size 100 samps_per_sym sps type cc digital_pfb_clock_sync_xxx alias comment affinity _enabled True filter_size nfilts _coordinate (792, 400) _rotation 0 id digital_pfb_clock_sync_xxx_0 init_phase nfilts/2 loop_bw 0.05 maxoutbuf 0 max_dev 0.01 minoutbuf 0 osps 1 sps sps taps rrc_taps type ccf pad_source comment _enabled True _coordinate (80, 284) _rotation 0 id inp label in num_streams 1 optional False type complex vlen 1 parameter alias comment _enabled True _coordinate (240, 16) _rotation 0 id ip label UDP listen IP short_id hide none type string value :: parameter alias comment _enabled True _coordinate (504, 120) _rotation 0 id latitude label latitude (format 00.000 or -00.000) short_id hide none type eng_float value 0 parameter alias comment _enabled True _coordinate (712, 120) _rotation 0 id longitude label longitude (format 00.000 or -00.000) short_id hide none type eng_float value 0 low_pass_filter beta 6.76 alias comment affinity cutoff_freq 6000 decim 1 _enabled 1 type fir_filter_ccf _coordinate (552, 400) _rotation 0 gain 1 id low_pass_filter_0 interp 1 maxoutbuf 0 minoutbuf 0 samp_rate samp_rate width 500 win firdes.WIN_HAMMING low_pass_filter beta 6.76 alias comment affinity cutoff_freq 10000 decim 1 _enabled 1 type fir_filter_ccf _coordinate (424, 236) _rotation 0 gain 1 id low_pass_filter_0_0 interp 1 maxoutbuf 0 minoutbuf 0 samp_rate samp_rate width 1000 win firdes.WIN_HAMMING pad_sink comment _enabled True _coordinate (464, 828) _rotation 0 id out type byte label out num_streams 1 optional False vlen 1 parameter alias comment _enabled True _coordinate (384, 16) _rotation 0 id port label UDP port short_id hide none type intx value 7355 parameter alias comment _enabled True _coordinate (712, 16) _rotation 0 id recstart label start of recording, if processing a recording (format YYYY-MM-DD HH:MM:SS) short_id hide none type string value rms_agc alpha 1e-2 alias comment affinity _enabled True _coordinate (48, 428) _rotation 0 id rms_agc_0 maxoutbuf 0 minoutbuf 0 reference 0.5 blocks_complex_to_real_0 digital_binary_slicer_fb_0 0 0 digital_binary_slicer_fb_0 out 0 0 digital_costas_loop_cc_0_0 blocks_complex_to_real_0 0 0 digital_fll_band_edge_cc_0 low_pass_filter_0 0 0 digital_pfb_clock_sync_xxx_0 digital_costas_loop_cc_0_0 0 0 inp low_pass_filter_0_0 0 0 low_pass_filter_0 digital_pfb_clock_sync_xxx_0 0 0 low_pass_filter_0_0 rms_agc_0 0 0 rms_agc_0 digital_fll_band_edge_cc_0 0 0 gr-satellites-4.4.0/examples/ber/lilacsat1_viterbi.grc000066400000000000000000000705271414055407700230040ustar00rootroot00000000000000 Tue Aug 4 09:55:54 2015 options author Daniel Estevez window_size 1280,2048 category Custom comment description LilacSat-1 decoder _enabled True _coordinate (16, 8) _rotation 0 generate_options hb hier_block_src_path .: id lilacsat1_ber_viterbi max_nouts 0 qt_qss_theme realtime_scheduling run_command {python} -u {filename} run_options run run True thread_safe_setters title LilacSat-1 decoder variable comment _enabled True _coordinate (696, 604) _rotation 0 id alpha value 0.35 variable comment _enabled True _coordinate (616, 604) _rotation 0 id nfilts value 16 variable comment _enabled True _coordinate (1016, 140) _rotation 0 id nfilts_0 value 16 variable comment _enabled True _coordinate (408, 668) _rotation 0 id rrc_taps value firdes.root_raised_cosine(nfilts, nfilts, 1.0/float(sps), alpha, 11*sps*nfilts) variable comment _enabled True _coordinate (1104, 140) _rotation 0 id rrc_taps_0 value firdes.root_raised_cosine(nfilts, nfilts, 1.0/float(samp_per_sym), 0.35, 11*samp_per_sym*nfilts) variable comment _enabled True _coordinate (888, 140) _rotation 0 id samp_per_sym value 5 variable comment _enabled True _coordinate (904, 20) _rotation 0 id samp_rate value 48000 variable comment _enabled True _coordinate (536, 604) _rotation 0 id sps value 5 variable comment _enabled True _coordinate (1176, 212) _rotation 0 id threshold value 3 variable_constellation comment const_points [-1, 1] type calcdist dims 1 _enabled True _coordinate (1008, 8) _rotation 0 id variable_constellation_0_0 rot_sym 2 soft_dec_lut None precision 8 sym_map [0, 1] parameter alias comment _enabled True _coordinate (504, 16) _rotation 0 id bfo label carrier frequency of the BPSK signal short_id hide none type eng_float value 12000 blocks_complex_to_real alias comment affinity _enabled True _coordinate (72, 832) _rotation 0 id blocks_complex_to_real_0 maxoutbuf 0 minoutbuf 0 vlen 1 blocks_delay alias comment affinity delay 1 _enabled True _coordinate (136, 884) _rotation 0 id blocks_delay_0 maxoutbuf 0 minoutbuf 0 num_ports 1 type float vlen 1 parameter alias comment _enabled True _coordinate (240, 112) _rotation 0 id callsign label your callsign short_id hide none type string value ccsds_viterbi alias comment affinity _enabled 1 _coordinate (264, 832) _rotation 0 id ccsds_viterbi_0 maxoutbuf 0 minoutbuf 0 ccsds_viterbi alias comment affinity _enabled 1 _coordinate (264, 888) _rotation 0 id ccsds_viterbi_0_0 maxoutbuf 0 minoutbuf 0 digital_costas_loop_cc alias comment affinity _enabled True _coordinate (1080, 408) _rotation 0 id digital_costas_loop_cc_0_0 w 0.1 maxoutbuf 0 minoutbuf 0 order 2 use_snr False digital_fll_band_edge_cc alias comment affinity _enabled 1 rolloff 0.350 _coordinate (264, 392) _rotation 0 id digital_fll_band_edge_cc_0 w 0.001 maxoutbuf 0 minoutbuf 0 filter_size 100 samps_per_sym sps type cc digital_pfb_clock_sync_xxx alias comment affinity _enabled True filter_size nfilts _coordinate (792, 400) _rotation 0 id digital_pfb_clock_sync_xxx_0 init_phase nfilts/2 loop_bw 0.05 maxoutbuf 0 max_dev 0.01 minoutbuf 0 osps 1 sps sps taps rrc_taps type ccf pad_source comment _enabled True _coordinate (96, 284) _rotation 0 id inp label in num_streams 1 optional False type complex vlen 1 parameter alias comment _enabled True _coordinate (240, 16) _rotation 0 id ip label UDP listen IP short_id hide none type string value :: parameter alias comment _enabled True _coordinate (504, 120) _rotation 0 id latitude label latitude (format 00.000 or -00.000) short_id hide none type eng_float value 0 parameter alias comment _enabled True _coordinate (712, 120) _rotation 0 id longitude label longitude (format 00.000 or -00.000) short_id hide none type eng_float value 0 low_pass_filter beta 6.76 alias comment affinity cutoff_freq 6000 decim 1 _enabled 1 type fir_filter_ccf _coordinate (552, 400) _rotation 0 gain 1 id low_pass_filter_0 interp 1 maxoutbuf 0 minoutbuf 0 samp_rate samp_rate width 500 win firdes.WIN_HAMMING low_pass_filter beta 6.76 alias comment affinity cutoff_freq 10000 decim 1 _enabled 1 type fir_filter_ccf _coordinate (424, 236) _rotation 0 gain 1 id low_pass_filter_0_0 interp 1 maxoutbuf 0 minoutbuf 0 samp_rate samp_rate width 1000 win firdes.WIN_HAMMING pad_sink comment _enabled True _coordinate (712, 828) _rotation 0 id out type byte label out num_streams 1 optional False vlen 1 pad_sink comment _enabled True _coordinate (712, 884) _rotation 0 id out_0 type byte label out num_streams 1 optional False vlen 1 parameter alias comment _enabled True _coordinate (384, 16) _rotation 0 id port label UDP port short_id hide none type intx value 7355 parameter alias comment _enabled True _coordinate (712, 16) _rotation 0 id recstart label start of recording, if processing a recording (format YYYY-MM-DD HH:MM:SS) short_id hide none type string value rms_agc alpha 1e-2 alias comment affinity _enabled True _coordinate (48, 428) _rotation 0 id rms_agc_0 maxoutbuf 0 minoutbuf 0 reference 0.5 blocks_complex_to_real_0 blocks_delay_0 0 0 blocks_complex_to_real_0 ccsds_viterbi_0 0 0 blocks_delay_0 ccsds_viterbi_0_0 0 0 ccsds_viterbi_0 out 0 0 ccsds_viterbi_0_0 out_0 0 0 digital_costas_loop_cc_0_0 blocks_complex_to_real_0 0 0 digital_fll_band_edge_cc_0 low_pass_filter_0 0 0 digital_pfb_clock_sync_xxx_0 digital_costas_loop_cc_0_0 0 0 inp low_pass_filter_0_0 0 0 low_pass_filter_0 digital_pfb_clock_sync_xxx_0 0 0 low_pass_filter_0_0 rms_agc_0 0 0 rms_agc_0 digital_fll_band_edge_cc_0 0 0 gr-satellites-4.4.0/examples/ccsds/000077500000000000000000000000001414055407700172225ustar00rootroot00000000000000gr-satellites-4.4.0/examples/ccsds/Space_Packet_with_PathID_Demux.grc000066400000000000000000000125261414055407700256350ustar00rootroot00000000000000options: parameters: author: '' category: '[GRC Hier Blocks]' cmake_opt: '' comment: '' copyright: '' description: '' gen_cmake: 'On' gen_linking: dynamic generate_options: no_gui hier_block_src_path: '.:' id: space_packet_pathID_demux max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: prompt sizing_mode: fixed thread_safe_setters: '' title: '' window_size: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: blocks_message_strobe_0 id: blocks_message_strobe parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' msg: pmt.intern("TEST") period: '1000' states: bus_sink: false bus_source: false bus_structure: null coordinate: [80, 116] rotation: 0 state: enabled - name: blocks_random_pdu_0 id: blocks_random_pdu parameters: affinity: '' alias: '' comment: '' length_modulo: '4' mask: '0xFF' maxoutbuf: '0' maxsize: '4' minoutbuf: '0' minsize: '4' states: bus_sink: false bus_source: false bus_structure: null coordinate: [384, 60] rotation: 0 state: enabled - name: satellites_pathID_demultiplexer_0 id: satellites_pathID_demultiplexer parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' pathID_outputs: 0,1 states: bus_sink: false bus_source: false bus_structure: null coordinate: [520, 300] rotation: 0 state: enabled - name: satellites_space_packet_parser_0 id: satellites_space_packet_parser parameters: affinity: '' alias: '' comment: '' id_time: '''default_value''' pfield: '1' time_format: '0' time_header: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [888, 260] rotation: 0 state: enabled - name: satellites_space_packet_parser_0_1 id: satellites_space_packet_parser parameters: affinity: '' alias: '' comment: '' id_time: '''default_value''' pfield: '1' time_format: '0' time_header: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [888, 316] rotation: 0 state: enabled - name: satellites_space_packet_parser_0_2 id: satellites_space_packet_parser parameters: affinity: '' alias: '' comment: '' id_time: '''default_value''' pfield: '1' time_format: '0' time_header: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [888, 372] rotation: 0 state: enabled - name: satellites_space_packet_primaryheader_adder_0 id: satellites_space_packet_primaryheader_adder parameters: AP_ID: '10' affinity: '' alias: '' ccsds_version: '0' comment: '' count_or_name: '0' data_length: '40000' maxoutbuf: '0' minoutbuf: '0' packet_sequence_count: '0' packet_sequence_name: '0' packet_type: '0' secondary_header_flag: '1' sequence_flags: '3' states: bus_sink: false bus_source: false bus_structure: null coordinate: [72, 488] rotation: 0 state: enabled - name: satellites_space_packet_primaryheader_adder_0_0 id: satellites_space_packet_primaryheader_adder parameters: AP_ID: '1' affinity: '' alias: '' ccsds_version: '0' comment: '' count_or_name: '0' data_length: '40000' maxoutbuf: '0' minoutbuf: '0' packet_sequence_count: '0' packet_sequence_name: '0' packet_type: '0' secondary_header_flag: '1' sequence_flags: '3' states: bus_sink: false bus_source: false bus_structure: null coordinate: [72, 240] rotation: 0 state: enabled - name: satellites_space_packet_primaryheader_adder_0_1 id: satellites_space_packet_primaryheader_adder parameters: AP_ID: '3' affinity: '' alias: '' ccsds_version: '0' comment: '' count_or_name: '0' data_length: '40000' maxoutbuf: '0' minoutbuf: '0' packet_sequence_count: '0' packet_sequence_name: '0' packet_type: '0' secondary_header_flag: '1' sequence_flags: '3' states: bus_sink: false bus_source: false bus_structure: null coordinate: [72, 360] rotation: 0 state: enabled connections: - [blocks_message_strobe_0, strobe, blocks_random_pdu_0, generate] - [blocks_random_pdu_0, pdus, satellites_space_packet_primaryheader_adder_0, in] - [blocks_random_pdu_0, pdus, satellites_space_packet_primaryheader_adder_0_0, in] - [blocks_random_pdu_0, pdus, satellites_space_packet_primaryheader_adder_0_1, in] - [satellites_pathID_demultiplexer_0, discarded, satellites_space_packet_parser_0_2, in] - [satellites_pathID_demultiplexer_0, out0, satellites_space_packet_parser_0, in] - [satellites_pathID_demultiplexer_0, out1, satellites_space_packet_parser_0_1, in] - [satellites_space_packet_primaryheader_adder_0, out, satellites_pathID_demultiplexer_0, in] - [satellites_space_packet_primaryheader_adder_0_0, out, satellites_pathID_demultiplexer_0, in] - [satellites_space_packet_primaryheader_adder_0_1, out, satellites_pathID_demultiplexer_0, in] metadata: file_format: 1 gr-satellites-4.4.0/examples/ccsds/Space_Packet_with_TimeStamp.grc000066400000000000000000000102271414055407700252610ustar00rootroot00000000000000options: parameters: author: '' category: '[GRC Hier Blocks]' cmake_opt: '' comment: '' copyright: '' description: '' gen_cmake: 'On' gen_linking: dynamic generate_options: no_gui hier_block_src_path: '.:' id: space_packet_timestamp max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: run sizing_mode: fixed thread_safe_setters: '' title: '' window_size: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: variable_time_format_parameters_0 id: variable_time_format_parameters parameters: add_z_terminator: '1' additional_basic_time: '0' additional_fractional_time: '0' ascii_dec_num: '1' basic_time: '3' calendar_variation_ccs: '0' comment: '' frac_time: '0' length_of_day_cds: '0' length_of_submillisecond_cds: '0' number_of_subsecond_ccs: '0' time_format_general: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [872, 24] rotation: 0 state: enabled - name: blocks_message_strobe_0 id: blocks_message_strobe parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' msg: pmt.intern("TEST") period: '1000' states: bus_sink: false bus_source: false bus_structure: null coordinate: [48, 140] rotation: 0 state: enabled - name: blocks_random_pdu_0 id: blocks_random_pdu parameters: affinity: '' alias: '' comment: '' length_modulo: '4' mask: '0xFF' maxoutbuf: '0' maxsize: '4' minoutbuf: '0' minsize: '4' states: bus_sink: false bus_source: false bus_structure: null coordinate: [560, 116] rotation: 0 state: enabled - name: satellites_space_packet_parser_0 id: satellites_space_packet_parser parameters: affinity: '' alias: '' comment: '' id_time: variable_time_format_parameters_0 pfield: '0' time_format: '0' time_header: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [952, 292] rotation: 0 state: enabled - name: satellites_space_packet_primaryheader_adder_0 id: satellites_space_packet_primaryheader_adder parameters: AP_ID: '0' affinity: '' alias: '' ccsds_version: '0' comment: '' count_or_name: '0' data_length: '40000' maxoutbuf: '0' minoutbuf: '0' packet_sequence_count: '0' packet_sequence_name: '0' packet_type: '0' secondary_header_flag: '1' sequence_flags: '3' states: bus_sink: false bus_source: false bus_structure: null coordinate: [520, 304] rotation: 0 state: enabled - name: satellites_space_packet_time_stamp_adder_0 id: satellites_space_packet_time_stamp_adder parameters: affinity: '' alias: '' comment: '' day: '0' epoch_day_cds: '1' epoch_day_cuc: '1' epoch_identification_cds: '0' epoch_month_cds: '1' epoch_month_cuc: '1' epoch_year_cds: '1' epoch_year_cuc: '1' hour: '0' id_time: variable_time_format_parameters_0 manual_automatic: '1' maxoutbuf: '0' microsecond: '0' minoutbuf: '0' minute: '0' month: '0' pfield: '0' pfield_extension: '0' pfield_extension_extended: '1' picosecond: '0' rsvd_cuc: '0' second: '0' time_code_identification_ccs: '5' time_code_identification_cds: '4' time_code_identification_cuc: '1' time_format: '0' year: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [64, 308] rotation: 0 state: enabled connections: - [blocks_message_strobe_0, strobe, blocks_random_pdu_0, generate] - [blocks_random_pdu_0, pdus, satellites_space_packet_time_stamp_adder_0, in] - [satellites_space_packet_primaryheader_adder_0, out, satellites_space_packet_parser_0, in] - [satellites_space_packet_time_stamp_adder_0, out, satellites_space_packet_primaryheader_adder_0, in] metadata: file_format: 1 gr-satellites-4.4.0/examples/ccsds/Space_Packet_without_TimeStamp.grc000066400000000000000000000050671414055407700260170ustar00rootroot00000000000000options: parameters: author: '' category: '[GRC Hier Blocks]' cmake_opt: '' comment: '' copyright: '' description: '' gen_cmake: 'On' gen_linking: dynamic generate_options: no_gui hier_block_src_path: '.:' id: space_packet_no_timestamp max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: prompt sizing_mode: fixed thread_safe_setters: '' title: '' window_size: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: blocks_message_strobe_0 id: blocks_message_strobe parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' msg: pmt.intern("TEST") period: '1000' states: bus_sink: false bus_source: false bus_structure: null coordinate: [80, 188] rotation: 0 state: enabled - name: blocks_random_pdu_0 id: blocks_random_pdu parameters: affinity: '' alias: '' comment: '' length_modulo: '4' mask: '0xFF' maxoutbuf: '0' maxsize: '4' minoutbuf: '0' minsize: '4' states: bus_sink: false bus_source: false bus_structure: null coordinate: [496, 164] rotation: 0 state: enabled - name: satellites_space_packet_parser_0 id: satellites_space_packet_parser parameters: affinity: '' alias: '' comment: '' id_time: '0' pfield: '1' time_format: '0' time_header: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [520, 356] rotation: 0 state: enabled - name: satellites_space_packet_primaryheader_adder_0 id: satellites_space_packet_primaryheader_adder parameters: AP_ID: '0' affinity: '' alias: '' ccsds_version: '0' comment: '' count_or_name: '0' data_length: '40000' maxoutbuf: '0' minoutbuf: '0' packet_sequence_count: '0' packet_sequence_name: '0' packet_type: '0' secondary_header_flag: '1' sequence_flags: '3' states: bus_sink: false bus_source: false bus_structure: null coordinate: [48, 336] rotation: 0 state: enabled connections: - [blocks_message_strobe_0, strobe, blocks_random_pdu_0, generate] - [blocks_random_pdu_0, pdus, satellites_space_packet_primaryheader_adder_0, in] - [satellites_space_packet_primaryheader_adder_0, out, satellites_space_packet_parser_0, in] metadata: file_format: 1 gr-satellites-4.4.0/examples/ccsds/TC_Packet.grc000066400000000000000000000046611414055407700215230ustar00rootroot00000000000000options: parameters: author: '' category: '[GRC Hier Blocks]' cmake_opt: '' comment: '' copyright: '' description: '' gen_cmake: 'On' gen_linking: dynamic generate_options: no_gui hier_block_src_path: '.:' id: tc_packet max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: run sizing_mode: fixed thread_safe_setters: '' title: '' window_size: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: blocks_message_strobe_0 id: blocks_message_strobe parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' msg: pmt.intern("TEST") period: '1000' states: bus_sink: false bus_source: false bus_structure: null coordinate: [88, 160] rotation: 0 state: enabled - name: blocks_random_pdu_0 id: blocks_random_pdu parameters: affinity: '' alias: '' comment: '' length_modulo: '4' mask: '0xFF' maxoutbuf: '0' maxsize: '8' minoutbuf: '0' minsize: '8' states: bus_sink: false bus_source: false bus_structure: null coordinate: [400, 136] rotation: 0 state: enabled - name: satellites_telecommand_parser_0 id: satellites_telecommand_parser parameters: affinity: '' alias: '' comment: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [544, 400] rotation: 0 state: enabled - name: satellites_telecommand_primaryheader_adder_0 id: satellites_telecommand_primaryheader_adder parameters: affinity: '' alias: '' bypass: '0' comment: '' control: '0' frame_length: '0' frame_sequence_number: '0' maxoutbuf: '0' minoutbuf: '0' rsvd_space: '0' spacecraft_id: '0' transfer_frame_version: '0' virtual_channel_id: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [120, 356] rotation: 0 state: enabled connections: - [blocks_message_strobe_0, strobe, blocks_random_pdu_0, generate] - [blocks_random_pdu_0, pdus, satellites_telecommand_primaryheader_adder_0, in] - [satellites_telecommand_primaryheader_adder_0, out, satellites_telecommand_parser_0, in] metadata: file_format: 1 gr-satellites-4.4.0/examples/ccsds/TM_Packet.grc000066400000000000000000000053771414055407700215420ustar00rootroot00000000000000options: parameters: author: '' category: '[GRC Hier Blocks]' cmake_opt: '' comment: '' copyright: '' description: '' gen_cmake: 'On' gen_linking: dynamic generate_options: no_gui hier_block_src_path: '.:' id: tm_packet max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: run sizing_mode: fixed thread_safe_setters: '' title: '' window_size: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 6] rotation: 0 state: enabled blocks: - name: blocks_message_strobe_0 id: blocks_message_strobe parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' msg: pmt.intern("TEST") period: '1000' states: bus_sink: false bus_source: false bus_structure: null coordinate: [280, 36] rotation: 0 state: enabled - name: blocks_random_pdu_0 id: blocks_random_pdu parameters: affinity: '' alias: '' comment: '' length_modulo: '4' mask: '0xFF' maxoutbuf: '0' maxsize: '4' minoutbuf: '0' minsize: '4' states: bus_sink: false bus_source: false bus_structure: null coordinate: [672, 28] rotation: 0 state: enabled - name: satellites_ccsds_telemetry_parser_0 id: satellites_ccsds_telemetry_parser parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [704, 348] rotation: 0 state: enabled - name: satellites_telemetry_primaryheader_adder_0 id: satellites_telemetry_primaryheader_adder parameters: I: '0' affinity: '' alias: '' coding: '1' comment: '' e: '0' first_header_pointer: '0' ldpc_tf: '0' ldpc_tf_size: '128' master_channel_frame_count: '1' maxoutbuf: '0' minoutbuf: '0' ocf_flag: '0' packet_order_flag: '1' q: '0' reed_solomon_concat: '0' segment_length_id: '0' size: '10' spacecraft_id: '25' synch_flag: '1' transfer_frame_secondary_header_flag: '1' transfer_frame_version_number: '0' turbo: '223' virtual_channel_frame_count: '1' virtual_channel_id: '2' states: bus_sink: false bus_source: false bus_structure: null coordinate: [88, 252] rotation: 0 state: enabled connections: - [blocks_message_strobe_0, strobe, blocks_random_pdu_0, generate] - [blocks_random_pdu_0, pdus, satellites_telemetry_primaryheader_adder_0, in] - [satellites_telemetry_primaryheader_adder_0, out, satellites_ccsds_telemetry_parser_0, in] metadata: file_format: 1 gr-satellites-4.4.0/examples/ccsds/TM_Packet_with_OCF.grc000066400000000000000000000067201414055407700232550ustar00rootroot00000000000000options: parameters: author: '' category: '[GRC Hier Blocks]' cmake_opt: '' comment: '' copyright: '' description: '' gen_cmake: 'On' gen_linking: dynamic generate_options: no_gui hier_block_src_path: '.:' id: tm_packet_ocf max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: run sizing_mode: fixed thread_safe_setters: '' title: '' window_size: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: blocks_message_strobe_0 id: blocks_message_strobe parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' msg: pmt.intern("TEST") period: '1000' states: bus_sink: false bus_source: false bus_structure: null coordinate: [280, 36] rotation: 0 state: enabled - name: blocks_random_pdu_0 id: blocks_random_pdu parameters: affinity: '' alias: '' comment: '' length_modulo: '2' mask: '0xFF' maxoutbuf: '0' maxsize: '2' minoutbuf: '0' minsize: '2' states: bus_sink: false bus_source: false bus_structure: null coordinate: [672, 28] rotation: 0 state: enabled - name: satellites_telemetry_ocf_adder_0 id: satellites_telemetry_ocf_adder parameters: affinity: '' alias: '' clcw_version_number: '0' comment: '' control_word_type: '0' cop_in_effect: '1' farmb_counter: '0' lockout: '0' maxoutbuf: '0' minoutbuf: '0' no_bit_lock: '0' no_rf_avail: '0' report_value: '0' retransmit: '0' rsvd_spare1: '0' rsvd_spare2: '0' status_field: '0' virtual_channel_identification: '0' wait: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [608, 284] rotation: 0 state: enabled - name: satellites_ccsds_telemetry_parser_0 id: satellites_ccsds_telemetry_parser parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1056, 348] rotation: 0 state: enabled - name: satellites_telemetry_primaryheader_adder_0 id: satellites_telemetry_primaryheader_adder parameters: I: '0' affinity: '' alias: '' coding: '1' comment: '' e: '0' first_header_pointer: '0' ldpc_tf: '0' ldpc_tf_size: '128' master_channel_frame_count: '1' maxoutbuf: '0' minoutbuf: '0' ocf_flag: '1' packet_order_flag: '1' q: '0' reed_solomon_concat: '0' segment_length_id: '0' size: '10' spacecraft_id: '25' synch_flag: '1' transfer_frame_secondary_header_flag: '1' transfer_frame_version_number: '0' turbo: '223' virtual_channel_frame_count: '1' virtual_channel_id: '2' states: bus_sink: false bus_source: false bus_structure: null coordinate: [88, 252] rotation: 0 state: enabled connections: - [blocks_message_strobe_0, strobe, blocks_random_pdu_0, generate] - [blocks_random_pdu_0, pdus, satellites_telemetry_primaryheader_adder_0, in] - [satellites_telemetry_ocf_adder_0, out, satellites_ccsds_telemetry_parser_0, in] - [satellites_telemetry_primaryheader_adder_0, out, satellites_telemetry_ocf_adder_0, in] metadata: file_format: 1 gr-satellites-4.4.0/examples/ccsds/TM_Packet_with_Space_Packet.grc000066400000000000000000000104611414055407700251650ustar00rootroot00000000000000options: parameters: author: '' category: '[GRC Hier Blocks]' cmake_opt: '' comment: '' copyright: '' description: '' gen_cmake: 'On' gen_linking: dynamic generate_options: no_gui hier_block_src_path: '.:' id: tm_packet_with_space_packet max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: run sizing_mode: fixed thread_safe_setters: '' title: '' window_size: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: blocks_message_strobe_0 id: blocks_message_strobe parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' msg: pmt.intern("TEST") period: '1000' states: bus_sink: false bus_source: false bus_structure: null coordinate: [80, 132] rotation: 0 state: enabled - name: blocks_random_pdu_0 id: blocks_random_pdu parameters: affinity: '' alias: '' comment: '' length_modulo: '2' mask: '0xFF' maxoutbuf: '0' maxsize: '2' minoutbuf: '0' minsize: '2' states: bus_sink: false bus_source: false bus_structure: null coordinate: [384, 36] rotation: 0 state: enabled - name: satellites_space_packet_parser_0 id: satellites_space_packet_parser parameters: affinity: '' alias: '' comment: '' id_time: '''default_value''' pfield: '1' time_format: '0' time_header: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [880, 412] rotation: 0 state: enabled - name: satellites_space_packet_primaryheader_adder_0 id: satellites_space_packet_primaryheader_adder parameters: AP_ID: '3' affinity: '' alias: '' ccsds_version: '0' comment: '' count_or_name: '0' data_length: '40000' maxoutbuf: '0' minoutbuf: '0' packet_sequence_count: '0' packet_sequence_name: '0' packet_type: '0' secondary_header_flag: '1' sequence_flags: '3' states: bus_sink: false bus_source: false bus_structure: null coordinate: [376, 192] rotation: 0 state: enabled - name: satellites_telemetry_packet_reconstruction_0 id: satellites_telemetry_packet_reconstruction parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [712, 360] rotation: 0 state: enabled - name: satellites_ccsds_telemetry_parser_0 id: satellites_ccsds_telemetry_parser parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [632, 424] rotation: 0 state: enabled - name: satellites_telemetry_primaryheader_adder_0 id: satellites_telemetry_primaryheader_adder parameters: I: '0' affinity: '' alias: '' coding: '1' comment: '' e: '0' first_header_pointer: '0' ldpc_tf: '0' ldpc_tf_size: '128' master_channel_frame_count: '0' maxoutbuf: '0' minoutbuf: '0' ocf_flag: '0' packet_order_flag: '1' q: '0' reed_solomon_concat: '0' segment_length_id: '0' size: '4' spacecraft_id: '0' synch_flag: '1' transfer_frame_secondary_header_flag: '1' transfer_frame_version_number: '0' turbo: '223' virtual_channel_frame_count: '0' virtual_channel_id: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [80, 308] rotation: 0 state: enabled connections: - [blocks_message_strobe_0, strobe, blocks_random_pdu_0, generate] - [blocks_random_pdu_0, pdus, satellites_space_packet_primaryheader_adder_0, in] - [satellites_space_packet_primaryheader_adder_0, out, satellites_telemetry_primaryheader_adder_0, in] - [satellites_telemetry_packet_reconstruction_0, out, satellites_space_packet_parser_0, in] - [satellites_ccsds_telemetry_parser_0, out, satellites_telemetry_packet_reconstruction_0, in] - [satellites_telemetry_primaryheader_adder_0, out, satellites_ccsds_telemetry_parser_0, in] metadata: file_format: 1 gr-satellites-4.4.0/examples/ccsds/TM_Packet_with_VC_demux.grc000066400000000000000000000120171414055407700243540ustar00rootroot00000000000000options: parameters: author: '' category: '[GRC Hier Blocks]' cmake_opt: '' comment: '' copyright: '' description: '' gen_cmake: 'On' gen_linking: dynamic generate_options: no_gui hier_block_src_path: '.:' id: tm_packet_vc_demux max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: run sizing_mode: fixed thread_safe_setters: '' title: '' window_size: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: blocks_message_strobe_0 id: blocks_message_strobe parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' msg: pmt.intern("TEST") period: '1000' states: bus_sink: false bus_source: false bus_structure: null coordinate: [280, 28] rotation: 0 state: enabled - name: blocks_random_pdu_0 id: blocks_random_pdu parameters: affinity: '' alias: '' comment: '' length_modulo: '2' mask: '0xFF' maxoutbuf: '0' maxsize: '2' minoutbuf: '0' minsize: '2' states: bus_sink: false bus_source: false bus_structure: null coordinate: [672, 32] rotation: 0 state: enabled - name: satellites_ccsds_telemetry_parser_0 id: satellites_ccsds_telemetry_parser parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1016, 328] rotation: 0 state: enabled - name: satellites_ccsds_telemetry_parser_0_0 id: satellites_ccsds_telemetry_parser parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1016, 448] rotation: 0 state: enabled - name: satellites_ccsds_telemetry_parser_0_1 id: satellites_ccsds_telemetry_parser parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1016, 384] rotation: 0 state: enabled - name: satellites_telemetry_primaryheader_adder_0 id: satellites_telemetry_primaryheader_adder parameters: I: '0' affinity: '' alias: '' coding: '1' comment: '' e: '0' first_header_pointer: '0' ldpc_tf: '0' ldpc_tf_size: '128' master_channel_frame_count: '1' maxoutbuf: '0' minoutbuf: '0' ocf_flag: '0' packet_order_flag: '1' q: '0' reed_solomon_concat: '0' segment_length_id: '0' size: '10' spacecraft_id: '25' synch_flag: '1' transfer_frame_secondary_header_flag: '1' transfer_frame_version_number: '0' turbo: '223' virtual_channel_frame_count: '1' virtual_channel_id: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [88, 108] rotation: 0 state: enabled - name: satellites_telemetry_primaryheader_adder_0_0 id: satellites_telemetry_primaryheader_adder parameters: I: '0' affinity: '' alias: '' coding: '1' comment: '' e: '0' first_header_pointer: '0' ldpc_tf: '0' ldpc_tf_size: '128' master_channel_frame_count: '1' maxoutbuf: '0' minoutbuf: '0' ocf_flag: '0' packet_order_flag: '1' q: '0' reed_solomon_concat: '0' segment_length_id: '0' size: '10' spacecraft_id: '25' synch_flag: '1' transfer_frame_secondary_header_flag: '1' transfer_frame_version_number: '0' turbo: '223' virtual_channel_frame_count: '1' virtual_channel_id: '2' states: bus_sink: false bus_source: false bus_structure: null coordinate: [88, 396] rotation: 0 state: enabled - name: satellites_virtual_channel_demultiplexer_0 id: satellites_virtual_channel_demultiplexer parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' vc_outputs: 0,2 states: bus_sink: false bus_source: false bus_structure: null coordinate: [584, 344] rotation: 0 state: enabled connections: - [blocks_message_strobe_0, strobe, blocks_random_pdu_0, generate] - [blocks_random_pdu_0, pdus, satellites_telemetry_primaryheader_adder_0, in] - [blocks_random_pdu_0, pdus, satellites_telemetry_primaryheader_adder_0_0, in] - [satellites_telemetry_primaryheader_adder_0, out, satellites_virtual_channel_demultiplexer_0, in] - [satellites_telemetry_primaryheader_adder_0_0, out, satellites_virtual_channel_demultiplexer_0, in] - [satellites_virtual_channel_demultiplexer_0, discarded, satellites_ccsds_telemetry_parser_0_0, in] - [satellites_virtual_channel_demultiplexer_0, out0, satellites_ccsds_telemetry_parser_0, in] - [satellites_virtual_channel_demultiplexer_0, out1, satellites_ccsds_telemetry_parser_0_1, in] metadata: file_format: 1 gr-satellites-4.4.0/examples/components/000077500000000000000000000000001414055407700203105ustar00rootroot00000000000000gr-satellites-4.4.0/examples/components/afsk_demodulator.grc000066400000000000000000000100251414055407700243260ustar00rootroot00000000000000options: parameters: author: Daniel Estevez category: '[GRC Hier Blocks]' cmake_opt: '' comment: '' copyright: '' description: '' gen_cmake: 'On' gen_linking: dynamic generate_options: qt_gui hier_block_src_path: '.:' id: afsk_demodulator max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: prompt sizing_mode: fixed thread_safe_setters: '' title: AFSK demodulator component example window_size: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: samp_rate id: variable parameters: comment: '' value: '48000' states: bus_sink: false bus_source: false bus_structure: null coordinate: [184, 12] rotation: 0 state: enabled - name: blocks_head_0 id: blocks_head parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' num_items: '8000' type: float vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [579, 225] rotation: 0 state: true - name: blocks_wavfile_source_0 id: blocks_wavfile_source parameters: affinity: '' alias: '' comment: '' file: ../../satellite-recordings/gomx_1.wav maxoutbuf: '0' minoutbuf: '0' nchan: '1' repeat: 'False' states: bus_sink: false bus_source: false bus_structure: null coordinate: [53, 217] rotation: 0 state: true - name: qtgui_time_sink_x_0 id: qtgui_time_sink_x parameters: affinity: '' alias: '' alpha1: '1.0' alpha10: '1.0' alpha2: '1.0' alpha3: '1.0' alpha4: '1.0' alpha5: '1.0' alpha6: '1.0' alpha7: '1.0' alpha8: '1.0' alpha9: '1.0' autoscale: 'False' axislabels: 'True' color1: blue color10: dark blue color2: red color3: green color4: black color5: cyan color6: magenta color7: yellow color8: dark red color9: dark green comment: '' ctrlpanel: 'False' entags: 'True' grid: 'False' gui_hint: '' label1: Signal 1 label10: Signal 10 label2: Signal 2 label3: Signal 3 label4: Signal 4 label5: Signal 5 label6: Signal 6 label7: Signal 7 label8: Signal 8 label9: Signal 9 legend: 'True' marker1: '0' marker10: '-1' marker2: '-1' marker3: '-1' marker4: '-1' marker5: '-1' marker6: '-1' marker7: '-1' marker8: '-1' marker9: '-1' name: '""' nconnections: '1' size: '6000' srate: '4800' stemplot: 'False' style1: '0' style10: '1' style2: '1' style3: '1' style4: '1' style5: '1' style6: '1' style7: '1' style8: '1' style9: '1' tr_chan: '0' tr_delay: '0' tr_level: '0.0' tr_mode: qtgui.TRIG_MODE_FREE tr_slope: qtgui.TRIG_SLOPE_POS tr_tag: '""' type: float update_time: '0.10' width1: '1' width10: '1' width2: '1' width3: '1' width4: '1' width5: '1' width6: '1' width7: '1' width8: '1' width9: '1' ylabel: Amplitude ymax: '4' ymin: '-4' yunit: '""' states: bus_sink: false bus_source: false bus_structure: null coordinate: [754, 209] rotation: 0 state: true - name: satellites_afsk_demodulator_0 id: satellites_afsk_demodulator parameters: af_carrier: '3600' affinity: '' alias: '' baudrate: '4800' comment: '' deviation: '-1200' iq: 'False' maxoutbuf: '0' minoutbuf: '0' samp_rate: samp_rate states: bus_sink: false bus_source: false bus_structure: null coordinate: [358, 201] rotation: 0 state: true connections: - [blocks_head_0, '0', qtgui_time_sink_x_0, '0'] - [blocks_wavfile_source_0, '0', satellites_afsk_demodulator_0, '0'] - [satellites_afsk_demodulator_0, '0', blocks_head_0, '0'] metadata: file_format: 1 gr-satellites-4.4.0/examples/components/ao40_fec_deframer.grc000066400000000000000000000051321414055407700242330ustar00rootroot00000000000000options: parameters: author: Daniel Estevez category: '[GRC Hier Blocks]' cmake_opt: '' comment: '' copyright: '' description: '' gen_cmake: 'On' gen_linking: dynamic generate_options: no_gui hier_block_src_path: '.:' id: ao40_fec_deframer max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: run sizing_mode: fixed thread_safe_setters: '' title: AO-40 FEC deframer component example window_size: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: samp_rate id: variable parameters: comment: '' value: '48000' states: bus_sink: false bus_source: false bus_structure: null coordinate: [208, 12] rotation: 0 state: enabled - name: blocks_message_debug_0 id: blocks_message_debug parameters: affinity: '' alias: '' comment: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [790, 165] rotation: 0 state: enabled - name: blocks_wavfile_source_0 id: blocks_wavfile_source parameters: affinity: '' alias: '' comment: '' file: ../../satellite-recordings/ao73.wav maxoutbuf: '0' minoutbuf: '0' nchan: '1' repeat: 'False' states: bus_sink: false bus_source: false bus_structure: null coordinate: [53, 217] rotation: 0 state: enabled - name: satellites_ao40_fec_deframer_0 id: satellites_ao40_fec_deframer parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' short_frames: 'False' threshold: '8' states: bus_sink: false bus_source: false bus_structure: null coordinate: [497, 217] rotation: 0 state: true - name: satellites_bpsk_demodulator_0 id: satellites_bpsk_demodulator parameters: affinity: '' alias: '' baudrate: '1200' comment: '' differential: 'True' f_offset: '1500' iq: 'False' manchester: 'False' maxoutbuf: '0' minoutbuf: '0' samp_rate: samp_rate states: bus_sink: false bus_source: false bus_structure: null coordinate: [276, 193] rotation: 0 state: true connections: - [blocks_wavfile_source_0, '0', satellites_bpsk_demodulator_0, '0'] - [satellites_ao40_fec_deframer_0, out, blocks_message_debug_0, print_pdu] - [satellites_bpsk_demodulator_0, '0', satellites_ao40_fec_deframer_0, '0'] metadata: file_format: 1 gr-satellites-4.4.0/examples/components/ax100_deframer.grc000066400000000000000000000113351414055407700235060ustar00rootroot00000000000000options: parameters: author: Daniel Estevez catch_exceptions: 'True' category: '[GRC Hier Blocks]' cmake_opt: '' comment: '' copyright: '' description: '' gen_cmake: 'On' gen_linking: dynamic generate_options: no_gui hier_block_src_path: '.:' id: ax100_deframer max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: run sizing_mode: fixed thread_safe_setters: '' title: GOMspace AX100 deframer component example states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: samp_rate id: variable parameters: comment: '' value: '48000' states: bus_sink: false bus_source: false bus_structure: null coordinate: [208, 12] rotation: 0 state: enabled - name: blocks_message_debug_0 id: blocks_message_debug parameters: affinity: '' alias: '' comment: '' en_uvec: 'True' states: bus_sink: false bus_source: false bus_structure: null coordinate: [792, 176.0] rotation: 0 state: enabled - name: blocks_message_debug_0_0 id: blocks_message_debug parameters: affinity: '' alias: '' comment: '' en_uvec: 'True' states: bus_sink: false bus_source: false bus_structure: null coordinate: [808, 392.0] rotation: 0 state: true - name: blocks_wavfile_source_0 id: blocks_wavfile_source parameters: affinity: '' alias: '' comment: '' file: ../../satellite-recordings/1kuns_pf.wav maxoutbuf: '0' minoutbuf: '0' nchan: '1' repeat: 'False' states: bus_sink: false bus_source: false bus_structure: null coordinate: [56, 228.0] rotation: 0 state: enabled - name: blocks_wavfile_source_0_0 id: blocks_wavfile_source parameters: affinity: '' alias: '' comment: '' file: ../../satellite-recordings/tw_1b.wav maxoutbuf: '0' minoutbuf: '0' nchan: '1' repeat: 'False' states: bus_sink: false bus_source: false bus_structure: null coordinate: [72, 444.0] rotation: 0 state: true - name: note_0 id: note parameters: alias: '' comment: '' note: ASM+Golay mode states: bus_sink: false bus_source: false bus_structure: null coordinate: [374, 128] rotation: 0 state: true - name: note_0_0 id: note parameters: alias: '' comment: '' note: Reed-Solomon mode states: bus_sink: false bus_source: false bus_structure: null coordinate: [392, 351] rotation: 0 state: true - name: satellites_ax100_deframer_0 id: satellites_ax100_deframer parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' mode: '"ASM"' options: '""' scrambler: '"CCSDS"' threshold: '4' states: bus_sink: false bus_source: false bus_structure: null coordinate: [488, 220.0] rotation: 0 state: enabled - name: satellites_ax100_deframer_0_0 id: satellites_ax100_deframer parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' mode: '"RS"' options: '""' scrambler: '"CCSDS"' threshold: '4' states: bus_sink: false bus_source: false bus_structure: null coordinate: [504, 444.0] rotation: 0 state: true - name: satellites_fsk_demodulator_0 id: satellites_fsk_demodulator parameters: affinity: '' alias: '' baudrate: '1200' comment: '' iq: 'False' maxoutbuf: '0' minoutbuf: '0' options: '""' samp_rate: samp_rate subaudio: 'False' states: bus_sink: false bus_source: false bus_structure: null coordinate: [288, 220.0] rotation: 0 state: enabled - name: satellites_fsk_demodulator_0_0 id: satellites_fsk_demodulator parameters: affinity: '' alias: '' baudrate: '4800' comment: '' iq: 'False' maxoutbuf: '0' minoutbuf: '0' options: '""' samp_rate: samp_rate subaudio: 'False' states: bus_sink: false bus_source: false bus_structure: null coordinate: [312, 436.0] rotation: 0 state: true connections: - [blocks_wavfile_source_0, '0', satellites_fsk_demodulator_0, '0'] - [blocks_wavfile_source_0_0, '0', satellites_fsk_demodulator_0_0, '0'] - [satellites_ax100_deframer_0, out, blocks_message_debug_0, print_pdu] - [satellites_ax100_deframer_0_0, out, blocks_message_debug_0_0, print_pdu] - [satellites_fsk_demodulator_0, '0', satellites_ax100_deframer_0, '0'] - [satellites_fsk_demodulator_0_0, '0', satellites_ax100_deframer_0_0, '0'] metadata: file_format: 1 gr-satellites-4.4.0/examples/components/ax25_deframer.grc000066400000000000000000000047411414055407700234370ustar00rootroot00000000000000options: parameters: author: Daniel Estevez category: '[GRC Hier Blocks]' cmake_opt: '' comment: '' copyright: '' description: '' gen_cmake: 'On' gen_linking: dynamic generate_options: no_gui hier_block_src_path: '.:' id: ax25_deframer max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: run sizing_mode: fixed thread_safe_setters: '' title: AX.25 deframer component example window_size: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: samp_rate id: variable parameters: comment: '' value: '48000' states: bus_sink: false bus_source: false bus_structure: null coordinate: [208, 12] rotation: 0 state: enabled - name: blocks_message_debug_0 id: blocks_message_debug parameters: affinity: '' alias: '' comment: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [790, 165] rotation: 0 state: true - name: blocks_wavfile_source_0 id: blocks_wavfile_source parameters: affinity: '' alias: '' comment: '' file: ../../satellite-recordings/us01.wav maxoutbuf: '0' minoutbuf: '0' nchan: '1' repeat: 'False' states: bus_sink: false bus_source: false bus_structure: null coordinate: [53, 217] rotation: 0 state: true - name: satellites_ax25_deframer_0 id: satellites_ax25_deframer parameters: affinity: '' alias: '' comment: '' g3ruh_scrambler: 'True' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [489, 225] rotation: 0 state: true - name: satellites_fsk_demodulator_0 id: satellites_fsk_demodulator parameters: affinity: '' alias: '' baudrate: '9600' comment: '' iq: 'False' maxoutbuf: '0' minoutbuf: '0' samp_rate: samp_rate states: bus_sink: false bus_source: false bus_structure: null coordinate: [291, 217] rotation: 0 state: true connections: - [blocks_wavfile_source_0, '0', satellites_fsk_demodulator_0, '0'] - [satellites_ax25_deframer_0, out, blocks_message_debug_0, print_pdu] - [satellites_fsk_demodulator_0, '0', satellites_ax25_deframer_0, '0'] metadata: file_format: 1 gr-satellites-4.4.0/examples/components/bpsk_demodulator.grc000066400000000000000000000107161414055407700243500ustar00rootroot00000000000000options: parameters: author: Daniel Estevez category: '[GRC Hier Blocks]' cmake_opt: '' comment: '' copyright: '' description: '' gen_cmake: 'On' gen_linking: dynamic generate_options: qt_gui hier_block_src_path: '.:' id: bpsk_demodulator max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: prompt sizing_mode: fixed thread_safe_setters: '' title: BPSK demodulator component example window_size: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: samp_rate id: variable parameters: comment: '' value: '48000' states: bus_sink: false bus_source: false bus_structure: null coordinate: [184, 12] rotation: 0 state: enabled - name: blocks_head_0 id: blocks_head parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' num_items: '20000' type: float vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [763, 224] rotation: 0 state: enabled - name: blocks_skiphead_0 id: blocks_skiphead parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' num_items: '10000' type: float vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [576, 224] rotation: 0 state: true - name: blocks_wavfile_source_0 id: blocks_wavfile_source parameters: affinity: '' alias: '' comment: '' file: /home/daniel/gr-satellites/satellite-recordings/lilacsat1.wav maxoutbuf: '0' minoutbuf: '0' nchan: '1' repeat: 'False' states: bus_sink: false bus_source: false bus_structure: null coordinate: [53, 216] rotation: 0 state: true - name: qtgui_time_sink_x_0 id: qtgui_time_sink_x parameters: affinity: '' alias: '' alpha1: '1.0' alpha10: '1.0' alpha2: '1.0' alpha3: '1.0' alpha4: '1.0' alpha5: '1.0' alpha6: '1.0' alpha7: '1.0' alpha8: '1.0' alpha9: '1.0' autoscale: 'False' axislabels: 'True' color1: blue color10: dark blue color2: red color3: green color4: black color5: cyan color6: magenta color7: yellow color8: dark red color9: dark green comment: '' ctrlpanel: 'False' entags: 'True' grid: 'False' gui_hint: '' label1: Signal 1 label10: Signal 10 label2: Signal 2 label3: Signal 3 label4: Signal 4 label5: Signal 5 label6: Signal 6 label7: Signal 7 label8: Signal 8 label9: Signal 9 legend: 'True' marker1: '0' marker10: '-1' marker2: '-1' marker3: '-1' marker4: '-1' marker5: '-1' marker6: '-1' marker7: '-1' marker8: '-1' marker9: '-1' name: '""' nconnections: '1' size: '20000' srate: '9600' stemplot: 'False' style1: '0' style10: '1' style2: '1' style3: '1' style4: '1' style5: '1' style6: '1' style7: '1' style8: '1' style9: '1' tr_chan: '0' tr_delay: '0' tr_level: '0.0' tr_mode: qtgui.TRIG_MODE_FREE tr_slope: qtgui.TRIG_SLOPE_POS tr_tag: '""' type: float update_time: '0.10' width1: '1' width10: '1' width2: '1' width3: '1' width4: '1' width5: '1' width6: '1' width7: '1' width8: '1' width9: '1' ylabel: Amplitude ymax: '4' ymin: '-4' yunit: '""' states: bus_sink: false bus_source: false bus_structure: null coordinate: [937, 208] rotation: 0 state: true - name: satellites_bpsk_demodulator_0 id: satellites_bpsk_demodulator parameters: affinity: '' alias: '' baudrate: '9600' comment: '' differential: 'False' f_offset: '12000' iq: 'False' manchester: 'False' maxoutbuf: '0' minoutbuf: '0' samp_rate: samp_rate states: bus_sink: false bus_source: false bus_structure: null coordinate: [337, 192] rotation: 0 state: true connections: - [blocks_head_0, '0', qtgui_time_sink_x_0, '0'] - [blocks_skiphead_0, '0', blocks_head_0, '0'] - [blocks_wavfile_source_0, '0', satellites_bpsk_demodulator_0, '0'] - [satellites_bpsk_demodulator_0, '0', blocks_skiphead_0, '0'] metadata: file_format: 1 gr-satellites-4.4.0/examples/components/ccsds_deframer.grc000066400000000000000000000054651414055407700237630ustar00rootroot00000000000000options: parameters: author: Daniel Estevez category: '[GRC Hier Blocks]' cmake_opt: '' comment: '' copyright: '' description: '' gen_cmake: 'On' gen_linking: dynamic generate_options: no_gui hier_block_src_path: '.:' id: ccsds_deframer max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: run sizing_mode: fixed thread_safe_setters: '' title: CCSDS Concatenated deframer component example window_size: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: samp_rate id: variable parameters: comment: '' value: '48000' states: bus_sink: false bus_source: false bus_structure: null coordinate: [208, 12] rotation: 0 state: enabled - name: blocks_message_debug_0 id: blocks_message_debug parameters: affinity: '' alias: '' comment: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [824, 168.0] rotation: 0 state: enabled - name: blocks_wavfile_source_0 id: blocks_wavfile_source parameters: affinity: '' alias: '' comment: '' file: ../../satellite-recordings/by701.wav maxoutbuf: '0' minoutbuf: '0' nchan: '1' repeat: 'False' states: bus_sink: false bus_source: false bus_structure: null coordinate: [48, 220.0] rotation: 0 state: enabled - name: satellites_bpsk_demodulator_0 id: satellites_bpsk_demodulator parameters: affinity: '' alias: '' baudrate: '9600' comment: '' differential: 'False' f_offset: '12000' iq: 'False' manchester: 'False' maxoutbuf: '0' minoutbuf: '0' options: '""' samp_rate: samp_rate states: bus_sink: false bus_source: false bus_structure: null coordinate: [280, 196.0] rotation: 0 state: true - name: satellites_ccsds_concatenated_deframer_0 id: satellites_ccsds_concatenated_deframer parameters: affinity: '' alias: '' comment: '' convolutional: CCSDS frame_size: '114' maxoutbuf: '0' minoutbuf: '0' options: '""' precoding: '"differential"' rs_basis: conventional rs_interleaving: '1' scrambler: CCSDS threshold: '4' states: bus_sink: false bus_source: false bus_structure: null coordinate: [520, 180.0] rotation: 0 state: true connections: - [blocks_wavfile_source_0, '0', satellites_bpsk_demodulator_0, '0'] - [satellites_bpsk_demodulator_0, '0', satellites_ccsds_concatenated_deframer_0, '0'] - [satellites_ccsds_concatenated_deframer_0, out, blocks_message_debug_0, print_pdu] metadata: file_format: 1 gr-satellites-4.4.0/examples/components/fsk_demodulator.grc000066400000000000000000000072111414055407700241700ustar00rootroot00000000000000options: parameters: author: Daniel Estevez category: '[GRC Hier Blocks]' cmake_opt: '' comment: '' copyright: '' description: '' gen_cmake: 'On' gen_linking: dynamic generate_options: qt_gui hier_block_src_path: '.:' id: fsk_demodulator max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: prompt sizing_mode: fixed thread_safe_setters: '' title: FSK demodulator component example window_size: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: samp_rate id: variable parameters: comment: '' value: '48000' states: bus_sink: false bus_source: false bus_structure: null coordinate: [184, 12] rotation: 0 state: enabled - name: blocks_wavfile_source_0 id: blocks_wavfile_source parameters: affinity: '' alias: '' comment: '' file: ../../satellite-recordings/aausat_4.wav maxoutbuf: '0' minoutbuf: '0' nchan: '1' repeat: 'False' states: bus_sink: false bus_source: false bus_structure: null coordinate: [53, 217] rotation: 0 state: true - name: qtgui_time_sink_x_0 id: qtgui_time_sink_x parameters: affinity: '' alias: '' alpha1: '1.0' alpha10: '1.0' alpha2: '1.0' alpha3: '1.0' alpha4: '1.0' alpha5: '1.0' alpha6: '1.0' alpha7: '1.0' alpha8: '1.0' alpha9: '1.0' autoscale: 'False' axislabels: 'True' color1: blue color10: dark blue color2: red color3: green color4: black color5: cyan color6: magenta color7: yellow color8: dark red color9: dark green comment: '' ctrlpanel: 'False' entags: 'True' grid: 'False' gui_hint: '' label1: Signal 1 label10: Signal 10 label2: Signal 2 label3: Signal 3 label4: Signal 4 label5: Signal 5 label6: Signal 6 label7: Signal 7 label8: Signal 8 label9: Signal 9 legend: 'True' marker1: '0' marker10: '-1' marker2: '-1' marker3: '-1' marker4: '-1' marker5: '-1' marker6: '-1' marker7: '-1' marker8: '-1' marker9: '-1' name: '""' nconnections: '1' size: '12000' srate: '4800' stemplot: 'False' style1: '0' style10: '1' style2: '1' style3: '1' style4: '1' style5: '1' style6: '1' style7: '1' style8: '1' style9: '1' tr_chan: '0' tr_delay: '0' tr_level: '0.0' tr_mode: qtgui.TRIG_MODE_FREE tr_slope: qtgui.TRIG_SLOPE_POS tr_tag: '""' type: float update_time: '0.10' width1: '1' width10: '1' width2: '1' width3: '1' width4: '1' width5: '1' width6: '1' width7: '1' width8: '1' width9: '1' ylabel: Amplitude ymax: '4' ymin: '-4' yunit: '""' states: bus_sink: false bus_source: false bus_structure: null coordinate: [652, 209] rotation: 0 state: true - name: satellites_fsk_demodulator_0 id: satellites_fsk_demodulator parameters: affinity: '' alias: '' baudrate: '4800' comment: '' iq: 'False' maxoutbuf: '0' minoutbuf: '0' samp_rate: samp_rate subaudio: 'False' states: bus_sink: false bus_source: false bus_structure: null coordinate: [361, 209] rotation: 0 state: true connections: - [blocks_wavfile_source_0, '0', satellites_fsk_demodulator_0, '0'] - [satellites_fsk_demodulator_0, '0', qtgui_time_sink_x_0, '0'] metadata: file_format: 1 gr-satellites-4.4.0/examples/components/image_receiver.grc000066400000000000000000000060671414055407700237640ustar00rootroot00000000000000options: parameters: author: Daniel Estevez category: '[GRC Hier Blocks]' cmake_opt: '' comment: '' copyright: '' description: '' gen_cmake: 'On' gen_linking: dynamic generate_options: no_gui hier_block_src_path: '.:' id: image_receiver max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: run sizing_mode: fixed thread_safe_setters: '' title: Image receiver component example window_size: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: samp_rate id: variable parameters: comment: '' value: '48000' states: bus_sink: false bus_source: false bus_structure: null coordinate: [208, 12] rotation: 0 state: enabled - name: blocks_throttle_0 id: blocks_throttle parameters: affinity: '' alias: '' comment: '' ignoretag: 'True' maxoutbuf: '0' minoutbuf: '0' samples_per_second: samp_rate type: float vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [273, 225] rotation: 0 state: true - name: blocks_wavfile_source_0 id: blocks_wavfile_source parameters: affinity: '' alias: '' comment: '' file: ../../satellite-recordings/lilacsat1-image.wav maxoutbuf: '0' minoutbuf: '0' nchan: '1' repeat: 'False' states: bus_sink: false bus_source: false bus_structure: null coordinate: [53, 217] rotation: 0 state: enabled - name: satellites_image_receiver_0 id: satellites_image_receiver parameters: affinity: '' alias: '' comment: '' display: 'True' fullscreen: 'True' path: /tmp/ receiver: by70_1 verbose: 'True' states: bus_sink: false bus_source: false bus_structure: null coordinate: [939, 209] rotation: 0 state: true - name: satellites_kiss_transport_0 id: satellites_kiss_transport parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' use_control: 'False' states: bus_sink: false bus_source: false bus_structure: null coordinate: [711, 225] rotation: 0 state: true - name: satellites_satellite_decoder_0 id: satellites_satellite_decoder parameters: affinity: '' alias: '' comment: '' definition: name file: '' iq: 'False' maxoutbuf: '0' minoutbuf: '0' name: LilacSat-1 norad: '' samp_rate: samp_rate states: bus_sink: false bus_source: false bus_structure: null coordinate: [453, 209] rotation: 0 state: true connections: - [blocks_throttle_0, '0', satellites_satellite_decoder_0, '0'] - [blocks_wavfile_source_0, '0', blocks_throttle_0, '0'] - [satellites_kiss_transport_0, out, satellites_image_receiver_0, in] - [satellites_satellite_decoder_0, out, satellites_kiss_transport_0, in] metadata: file_format: 1 gr-satellites-4.4.0/examples/components/kiss_transport.grc000066400000000000000000000066241414055407700241020ustar00rootroot00000000000000options: parameters: author: Daniel Estevez category: '[GRC Hier Blocks]' cmake_opt: '' comment: '' copyright: '' description: '' gen_cmake: 'On' gen_linking: dynamic generate_options: no_gui hier_block_src_path: '.:' id: kiss_transport max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: run sizing_mode: fixed thread_safe_setters: '' title: KISS Transport component example window_size: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: samp_rate id: variable parameters: comment: '' value: '48000' states: bus_sink: false bus_source: false bus_structure: null coordinate: [208, 12] rotation: 0 state: enabled - name: blocks_message_debug_0 id: blocks_message_debug parameters: affinity: '' alias: '' comment: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1047, 165] rotation: 0 state: enabled - name: blocks_message_debug_0_0 id: blocks_message_debug parameters: affinity: '' alias: '' comment: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [851, 305] rotation: 0 state: disabled - name: blocks_wavfile_source_0 id: blocks_wavfile_source parameters: affinity: '' alias: '' comment: '' file: ../../satellite-recordings/by701.wav maxoutbuf: '0' minoutbuf: '0' nchan: '1' repeat: 'False' states: bus_sink: false bus_source: false bus_structure: null coordinate: [53, 217] rotation: 0 state: enabled - name: satellites_bpsk_demodulator_0 id: satellites_bpsk_demodulator parameters: affinity: '' alias: '' baudrate: '9600' comment: '' differential: 'False' f_offset: '12000' iq: 'False' manchester: 'False' maxoutbuf: '0' minoutbuf: '0' samp_rate: samp_rate states: bus_sink: false bus_source: false bus_structure: null coordinate: [276, 193] rotation: 0 state: true - name: satellites_ccsds_concatenated_deframer_0 id: satellites_ccsds_concatenated_deframer parameters: affinity: '' alias: '' comment: '' differential: 'True' dual_basis: 'False' frame_size: '114' maxoutbuf: '0' minoutbuf: '0' threshold: '4' states: bus_sink: false bus_source: false bus_structure: null coordinate: [517, 201] rotation: 0 state: true - name: satellites_kiss_transport_0 id: satellites_kiss_transport parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' use_control: 'False' states: bus_sink: false bus_source: false bus_structure: null coordinate: [780, 225] rotation: 0 state: true connections: - [blocks_wavfile_source_0, '0', satellites_bpsk_demodulator_0, '0'] - [satellites_bpsk_demodulator_0, '0', satellites_ccsds_concatenated_deframer_0, '0'] - [satellites_ccsds_concatenated_deframer_0, out, blocks_message_debug_0_0, print_pdu] - [satellites_ccsds_concatenated_deframer_0, out, satellites_kiss_transport_0, in] - [satellites_kiss_transport_0, out, blocks_message_debug_0, print_pdu] metadata: file_format: 1 gr-satellites-4.4.0/examples/components/telemetry_parser.grc000066400000000000000000000051431414055407700243760ustar00rootroot00000000000000options: parameters: author: Daniel Estevez category: '[GRC Hier Blocks]' cmake_opt: '' comment: '' copyright: '' description: '' gen_cmake: 'On' gen_linking: dynamic generate_options: no_gui hier_block_src_path: '.:' id: telemetry_parser max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: run sizing_mode: fixed thread_safe_setters: '' title: Telemetry parser component example window_size: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: samp_rate id: variable parameters: comment: '' value: '48000' states: bus_sink: false bus_source: false bus_structure: null coordinate: [208, 12] rotation: 0 state: enabled - name: blocks_wavfile_source_0 id: blocks_wavfile_source parameters: affinity: '' alias: '' comment: '' file: ../../satellite-recordings/gomx_1.wav maxoutbuf: '0' minoutbuf: '0' nchan: '1' repeat: 'False' states: bus_sink: false bus_source: false bus_structure: null coordinate: [53, 217] rotation: 0 state: enabled - name: satellites_afsk_demodulator_0_0 id: satellites_afsk_demodulator parameters: af_carrier: '3600' affinity: '' alias: '' baudrate: '4800' comment: '' deviation: '-1200' iq: 'False' maxoutbuf: '0' minoutbuf: '0' samp_rate: samp_rate states: bus_sink: false bus_source: false bus_structure: null coordinate: [290, 201] rotation: 0 state: true - name: satellites_telemetry_parser_0 id: satellites_telemetry_parser parameters: affinity: '' alias: '' comment: '' definition: gomx_1 file: '' output: stdout states: bus_sink: false bus_source: false bus_structure: null coordinate: [760, 217] rotation: 0 state: true - name: satellites_u482c_deframer_0 id: satellites_u482c_deframer parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' threshold: '4' states: bus_sink: false bus_source: false bus_structure: null coordinate: [494, 225] rotation: 0 state: true connections: - [blocks_wavfile_source_0, '0', satellites_afsk_demodulator_0_0, '0'] - [satellites_afsk_demodulator_0_0, '0', satellites_u482c_deframer_0, '0'] - [satellites_u482c_deframer_0, out, satellites_telemetry_parser_0, in] metadata: file_format: 1 gr-satellites-4.4.0/examples/components/u482c_deframer.grc000066400000000000000000000050461414055407700235240ustar00rootroot00000000000000options: parameters: author: Daniel Estevez category: '[GRC Hier Blocks]' cmake_opt: '' comment: '' copyright: '' description: '' gen_cmake: 'On' gen_linking: dynamic generate_options: no_gui hier_block_src_path: '.:' id: u482c_deframer max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: run sizing_mode: fixed thread_safe_setters: '' title: GOMspace U482C deframer component example window_size: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: samp_rate id: variable parameters: comment: '' value: '48000' states: bus_sink: false bus_source: false bus_structure: null coordinate: [208, 12] rotation: 0 state: enabled - name: blocks_message_debug_0 id: blocks_message_debug parameters: affinity: '' alias: '' comment: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [790, 165] rotation: 0 state: enabled - name: blocks_wavfile_source_0 id: blocks_wavfile_source parameters: affinity: '' alias: '' comment: '' file: ../../satellite-recordings/gomx_1.wav maxoutbuf: '0' minoutbuf: '0' nchan: '1' repeat: 'False' states: bus_sink: false bus_source: false bus_structure: null coordinate: [53, 217] rotation: 0 state: enabled - name: satellites_afsk_demodulator_0_0 id: satellites_afsk_demodulator parameters: af_carrier: '3600' affinity: '' alias: '' baudrate: '4800' comment: '' deviation: '-1200' iq: 'False' maxoutbuf: '0' minoutbuf: '0' samp_rate: samp_rate states: bus_sink: false bus_source: false bus_structure: null coordinate: [290, 201] rotation: 0 state: true - name: satellites_u482c_deframer_0 id: satellites_u482c_deframer parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' threshold: '4' states: bus_sink: false bus_source: false bus_structure: null coordinate: [494, 225] rotation: 0 state: true connections: - [blocks_wavfile_source_0, '0', satellites_afsk_demodulator_0_0, '0'] - [satellites_afsk_demodulator_0_0, '0', satellites_u482c_deframer_0, '0'] - [satellites_u482c_deframer_0, out, blocks_message_debug_0, print_pdu] metadata: file_format: 1 gr-satellites-4.4.0/examples/csp_rx_asmgolay_vector.grc000066400000000000000000000453361414055407700234070ustar00rootroot00000000000000 Wed Jul 5 12:23:39 2017 options author window_size category [GRC Hier Blocks] comment description A simpmle test case of ASM + variable length packets _enabled True _coordinate (0, 4) _rotation 0 generate_options no_gui hier_block_src_path .: id rx_asmgolay_vector max_nouts 0 qt_qss_theme realtime_scheduling run_command {python} -u {filename} run_options prompt run True thread_safe_setters title Variable Length Packet Test variable comment _enabled True _coordinate (176, 4) _rotation 0 id samp_rate value 32000 blocks_message_debug alias comment affinity _enabled True _coordinate (320, 424) _rotation 180 id blocks_message_debug_0 blocks_tag_debug alias comment affinity display True _enabled 0 _coordinate (272, 68) _rotation 180 id blocks_tag_debug_0 type byte filter "" name T0 num_inputs 1 vlen 1 blocks_tag_debug alias comment affinity display True _enabled 1 _coordinate (752, 84) _rotation 0 id blocks_tag_debug_0_0_0 type byte filter "" name T1 num_inputs 1 vlen 1 blocks_tagged_stream_multiply_length alias comment affinity _enabled 1 _coordinate (728, 408) _rotation 180 id blocks_tagged_stream_multiply_length_0 type byte c 1/8.0 lengthtagname packet_len maxoutbuf 0 minoutbuf 0 vlen 1 blocks_tagged_stream_to_pdu alias comment affinity _enabled True _coordinate (496, 420) _rotation 180 id blocks_tagged_stream_to_pdu_0 type byte tag packet_len maxoutbuf 0 minoutbuf 0 blocks_unpacked_to_packed_xx bits_per_chunk 1 alias comment affinity _enabled True endianness gr.GR_MSB_FIRST _coordinate (1000, 196) _rotation 0 id blocks_unpacked_to_packed_xx_0 maxoutbuf 0 minoutbuf 0 num_ports 1 type byte blocks_vector_source_x alias comment ASM+Golay affinity _enabled 0 _coordinate (8, 148) _rotation 0 id blocks_vector_source_x_0 maxoutbuf 0 minoutbuf 0 type byte repeat False tags [] vlen 1 vector [1,0,0,1,0,0,1,1,0,0,0,0,1,0,1,1,0,1,0,1,0,0,0,1,1,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,0,0,0,1,0,1,1,0,1,0,1,0,0,0,1,1,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,] blocks_vector_source_x alias comment ASM+Golay+Randomization affinity _enabled 0 _coordinate (8, 228) _rotation 0 id blocks_vector_source_x_0_0 maxoutbuf 0 minoutbuf 0 type byte repeat False tags [] vlen 1 vector [1,0,0,1,0,0,1,1,0,0,0,0,1,0,1,1,0,1,0,1,0,0,0,1,1,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,1,1,0,1,0] blocks_vector_source_x alias comment ASM+Golay+a 5 byte packet of all zeros affinity _enabled 1 _coordinate (8, 324) _rotation 0 id blocks_vector_source_x_0_0_0 maxoutbuf 0 minoutbuf 0 type byte repeat False tags [] vlen 1 vector [1,0,0,1,0,0,1,1,0,0,0,0,1,0,1,1,0,1,0,1,0,0,0,1,1,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] digital_additive_scrambler_bb bits_per_byte 1 alias comment affinity count 0 _enabled 1 _coordinate (752, 168) _rotation 0 id digital_additive_scrambler_bb_0_0_0 len 7 mask 0xA9 maxoutbuf 0 minoutbuf 0 reset_tag_key "packet_len" seed 0xff digital_correlate_access_code_tag_bb access_code 10010011000010110101000111011110 alias comment affinity _enabled 1 _coordinate (224, 188) _rotation 0 id digital_correlate_access_code_tag_bb_0 maxoutbuf 0 minoutbuf 0 tagname syncword threshold 6 satellites_print_header alias comment affinity _enabled 0 _coordinate (512, 488) _rotation 0 id satellites_print_header_0 satellites_varlen_packet_tagger alias comment affinity _enabled 1 endianness gr.GR_MSB_FIRST _coordinate (472, 160) _rotation 0 use_golay True id satellites_varlen_packet_tagger_1 mtu 255*8 maxoutbuf 40 minoutbuf 0 length_field_size 55 packetlen_tag packet_len syncword_tag syncword verbose False blocks_tagged_stream_multiply_length_0 blocks_tagged_stream_to_pdu_0 0 0 blocks_tagged_stream_to_pdu_0 blocks_message_debug_0 pdus print_pdu blocks_tagged_stream_to_pdu_0 satellites_print_header_0 pdus in blocks_unpacked_to_packed_xx_0 blocks_tagged_stream_multiply_length_0 0 0 blocks_vector_source_x_0 digital_correlate_access_code_tag_bb_0 0 0 blocks_vector_source_x_0_0 digital_correlate_access_code_tag_bb_0 0 0 blocks_vector_source_x_0_0_0 digital_correlate_access_code_tag_bb_0 0 0 digital_additive_scrambler_bb_0_0_0 blocks_unpacked_to_packed_xx_0 0 0 digital_correlate_access_code_tag_bb_0 blocks_tag_debug_0 0 0 digital_correlate_access_code_tag_bb_0 satellites_varlen_packet_tagger_1 0 0 satellites_varlen_packet_tagger_1 blocks_tag_debug_0_0_0 0 0 satellites_varlen_packet_tagger_1 digital_additive_scrambler_bb_0_0_0 0 0 gr-satellites-4.4.0/examples/kiss_submitter.grc000066400000000000000000000155001414055407700216700ustar00rootroot00000000000000options: parameters: author: Daniel Estevez category: Custom cmake_opt: '' comment: '' copyright: '' description: KISS client telemetry submitter gen_cmake: 'On' gen_linking: dynamic generate_options: qt_gui hier_block_src_path: '.:' id: kiss_submitter max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: run sizing_mode: fixed thread_safe_setters: '' title: KISS client telemetry submitter window_size: (1280, 1024) states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: blocks_message_debug_0 id: blocks_message_debug parameters: affinity: '' alias: '' comment: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1152, 240.0] rotation: 0 state: enabled - name: blocks_pdu_to_tagged_stream_0 id: blocks_pdu_to_tagged_stream parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' tag: packet_len type: byte states: bus_sink: false bus_source: false bus_structure: null coordinate: [224, 204.0] rotation: 0 state: enabled - name: blocks_socket_pdu_0 id: blocks_socket_pdu parameters: affinity: '' alias: '' comment: '' host: host maxoutbuf: '0' minoutbuf: '0' mtu: '10000' port: port tcp_no_delay: 'False' type: TCP_CLIENT states: bus_sink: false bus_source: false bus_structure: null coordinate: [48, 132.0] rotation: 0 state: enabled - name: blocks_socket_pdu_0_0 id: blocks_socket_pdu parameters: affinity: '' alias: '' comment: '' host: localhost maxoutbuf: '0' minoutbuf: '0' mtu: '10000' port: '52002' tcp_no_delay: 'True' type: TCP_SERVER states: bus_sink: false bus_source: false bus_structure: null coordinate: [888, 316.0] rotation: 0 state: enabled - name: callsign id: parameter parameters: alias: '' comment: '' hide: none label: your callsign short_id: '' type: str value: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [680, 108.0] rotation: 0 state: enabled - name: host id: parameter parameters: alias: '' comment: '' hide: none label: Host short_id: '' type: str value: localhost states: bus_sink: false bus_source: false bus_structure: null coordinate: [256, 12.0] rotation: 0 state: enabled - name: latitude id: parameter parameters: alias: '' comment: '' hide: none label: latitude (format 00.000 or -00.000) short_id: '' type: eng_float value: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [656, 12.0] rotation: 0 state: enabled - name: longitude id: parameter parameters: alias: '' comment: '' hide: none label: longitude (format 00.000 or -00.000) short_id: '' type: eng_float value: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [816, 12.0] rotation: 0 state: enabled - name: norad id: parameter parameters: alias: '' comment: '' hide: none label: NORAD ID short_id: '' type: intx value: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1152, 12.0] rotation: 0 state: enabled - name: note_0 id: note parameters: alias: '' comment: '' note: IP of SoundModem Source states: bus_sink: false bus_source: false bus_structure: null coordinate: [216, 108.0] rotation: 0 state: true - name: note_1 id: note parameters: alias: '' comment: '' note: KISS port in SoundModem states: bus_sink: false bus_source: false bus_structure: null coordinate: [432, 124.0] rotation: 0 state: true - name: note_3 id: note parameters: alias: '' comment: '' note: Output to GETKISS states: bus_sink: false bus_source: false bus_structure: null coordinate: [1048, 380.0] rotation: 0 state: true - name: port id: parameter parameters: alias: '' comment: '' hide: none label: Port short_id: p type: str value: '8001' states: bus_sink: false bus_source: false bus_structure: null coordinate: [472, 12.0] rotation: 0 state: enabled - name: recstart id: parameter parameters: alias: '' comment: '' hide: none label: start of recording, if processing a recording (format YYYY-MM-DD HH:MM:SS) short_id: '' type: str value: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [976, 12.0] rotation: 0 state: enabled - name: satellites_kiss_to_pdu_0 id: satellites_kiss_to_pdu parameters: affinity: '' alias: '' comment: '' control_byte: 'True' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [472, 180.0] rotation: 0 state: enabled - name: satellites_pdu_to_kiss_0 id: satellites_pdu_to_kiss parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [688, 336.0] rotation: 0 state: enabled - name: satellites_print_timestamp_0 id: satellites_print_timestamp parameters: affinity: '' alias: '' comment: '' count: 'True' fmt: '%Y-%m-%d %H:%M:%S' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [720, 244.0] rotation: 0 state: enabled - name: satellites_submit_0 id: satellites_submit parameters: affinity: '' alias: '' comment: '' latitude: latitude longitude: longitude noradID: norad source: callsign tstamp: recstart url: https://db.satnogs.org/api/telemetry/ states: bus_sink: false bus_source: false bus_structure: null coordinate: [1000, 108.0] rotation: 0 state: disabled connections: - [blocks_pdu_to_tagged_stream_0, '0', satellites_kiss_to_pdu_0, '0'] - [blocks_socket_pdu_0, pdus, blocks_pdu_to_tagged_stream_0, pdus] - [satellites_kiss_to_pdu_0, out, satellites_pdu_to_kiss_0, in] - [satellites_kiss_to_pdu_0, out, satellites_print_timestamp_0, in] - [satellites_pdu_to_kiss_0, out, blocks_socket_pdu_0_0, pdus] - [satellites_print_timestamp_0, out, blocks_message_debug_0, print_pdu] - [satellites_print_timestamp_0, out, satellites_submit_0, in] metadata: file_format: 1 gr-satellites-4.4.0/examples/satellite_decoder/000077500000000000000000000000001414055407700215765ustar00rootroot00000000000000gr-satellites-4.4.0/examples/satellite_decoder/satellite_decoder.grc000066400000000000000000000042271414055407700257530ustar00rootroot00000000000000options: parameters: author: Daniel Estevez category: '[GRC Hier Blocks]' cmake_opt: '' comment: '' copyright: '' description: '' gen_cmake: 'On' gen_linking: dynamic generate_options: no_gui hier_block_src_path: '.:' id: satellite_decoder max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: run sizing_mode: fixed thread_safe_setters: '' title: Satellite decoder block example window_size: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: samp_rate id: variable parameters: comment: '' value: '48000' states: bus_sink: false bus_source: false bus_structure: null coordinate: [232, 11] rotation: 0 state: enabled - name: blocks_message_debug_0 id: blocks_message_debug parameters: affinity: '' alias: '' comment: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [687, 180] rotation: 0 state: true - name: blocks_wavfile_source_0 id: blocks_wavfile_source parameters: affinity: '' alias: '' comment: '' file: ../../satellite-recordings/aausat_4.wav maxoutbuf: '0' minoutbuf: '0' nchan: '1' repeat: 'False' states: bus_sink: false bus_source: false bus_structure: null coordinate: [81, 232] rotation: 0 state: true - name: satellites_satellite_decoder_0 id: satellites_satellite_decoder parameters: affinity: '' alias: '' comment: '' definition: name file: AAUSAT-4 iq: 'False' maxoutbuf: '0' minoutbuf: '0' name: AAUSAT-4 norad: '' samp_rate: samp_rate states: bus_sink: false bus_source: false bus_structure: null coordinate: [360, 224] rotation: 0 state: true connections: - [blocks_wavfile_source_0, '0', satellites_satellite_decoder_0, '0'] - [satellites_satellite_decoder_0, out, blocks_message_debug_0, print_pdu] metadata: file_format: 1 gr-satellites-4.4.0/examples/satellites/000077500000000000000000000000001414055407700202745ustar00rootroot00000000000000gr-satellites-4.4.0/examples/satellites/equisat.grc000066400000000000000000000243701414055407700224520ustar00rootroot00000000000000options: parameters: author: Brown Space Engineering category: '[GRC Hier Blocks]' cmake_opt: '' comment: '' copyright: '' description: EQUiSat Decoder gen_cmake: 'On' gen_linking: dynamic generate_options: no_gui hier_block_src_path: '.:' id: equisat max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: run sizing_mode: fixed thread_safe_setters: '' title: EQUiSat Decoder window_size: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 12] rotation: 0 state: enabled blocks: - name: decimation id: variable parameters: comment: '' value: '2' states: bus_sink: false bus_source: false bus_structure: null coordinate: [840, 196] rotation: 0 state: enabled - name: gain_mu id: variable parameters: comment: '' value: '0.300' states: bus_sink: false bus_source: false bus_structure: null coordinate: [936, 128] rotation: 0 state: enabled - name: samp_rate id: variable parameters: comment: '' value: '48000' states: bus_sink: false bus_source: false bus_structure: null coordinate: [844, 128] rotation: 0 state: enabled - name: symbol_depth id: variable parameters: comment: '' value: '40' states: bus_sink: false bus_source: false bus_structure: null coordinate: [936, 196] rotation: 0 state: enabled - name: variable_rrc_filter_taps_0 id: variable_rrc_filter_taps parameters: alpha: '0.2' comment: '' gain: '1.0' ntaps: int(symbol_depth*(samp_rate/decimation/4800)) samp_rate: samp_rate/decimation sym_rate: '4800' states: bus_sink: false bus_source: false bus_structure: null coordinate: [656, 130] rotation: 0 state: enabled - name: api_key id: parameter parameters: alias: '' comment: '' hide: none label: BSE data server API key short_id: '' type: str value: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [576, 14] rotation: 0 state: enabled - name: blocks_multiply_const_vxx_0_0 id: blocks_multiply_const_vxx parameters: affinity: '' alias: '' comment: '' const: '10' maxoutbuf: '0' minoutbuf: '0' type: float vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [336, 156] rotation: 0 state: enabled - name: blocks_short_to_float_0 id: blocks_short_to_float parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' scale: '32767' vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [192, 156] rotation: 0 state: enabled - name: blocks_udp_source_0 id: blocks_udp_source parameters: affinity: '' alias: '' comment: '' eof: 'False' ipaddr: ip maxoutbuf: '0' minoutbuf: '0' port: port psize: '1472' type: short vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [16, 134] rotation: 0 state: enabled - name: callsign id: parameter parameters: alias: '' comment: '' hide: none label: your callsign short_id: '' type: str value: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1104, 204] rotation: 0 state: enabled - name: digital_clock_recovery_mm_xx_0 id: digital_clock_recovery_mm_xx parameters: affinity: '' alias: '' comment: '' gain_mu: gain_mu gain_omega: 0.25*gain_mu*gain_mu maxoutbuf: '0' minoutbuf: '0' mu: '0.5' omega: samp_rate/decimation/4800.0 omega_relative_limit: '0.005' type: float states: bus_sink: false bus_source: false bus_structure: null coordinate: [92, 312] rotation: 0 state: enabled - name: equisat_decoder_equisat_4fsk_block_decode_0 id: equisat_decoder_equisat_4fsk_block_decode parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' msg_size: '255' print_packets: 'False' states: bus_sink: false bus_source: false bus_structure: null coordinate: [572, 332] rotation: 0 state: enabled - name: equisat_decoder_equisat_4fsk_preamble_detect_0 id: equisat_decoder_equisat_4fsk_preamble_detect parameters: affinity: '' alias: '' byte_buf_size: '255' comment: '' max_symbol_ratio: '0.33' maxoutbuf: '0' min_preamble_len: '96' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [308, 326] rotation: 0 state: enabled - name: equisat_decoder_equisat_fec_decoder_0 id: equisat_decoder_equisat_fec_decoder parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [88, 576] rotation: 0 state: enabled - name: equisat_decoder_equisat_submitter_0 id: equisat_decoder_equisat_submitter parameters: affinity: '' alias: '' api_key: api_key api_route: http://api.brownspace.org/equisat/receive/raw comment: '' latitude: latitude longitude: longitude post_publicly: bool(post_publicly) rec_start: recstart source_app: gr-satellites station_name: station_name states: bus_sink: false bus_source: false bus_structure: null coordinate: [944, 380] rotation: 0 state: enabled - name: equisat_decoder_equisat_telemetry_parser_0 id: equisat_decoder_equisat_telemetry_parser parameters: affinity: '' alias: '' comment: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [736, 704] rotation: 0 state: enabled - name: fir_filter_xxx_0 id: fir_filter_xxx parameters: affinity: '' alias: '' comment: '' decim: decimation maxoutbuf: '0' minoutbuf: '0' samp_delay: '0' taps: variable_rrc_filter_taps_0 type: fff states: bus_sink: false bus_source: false bus_structure: null coordinate: [472, 148] rotation: 0 state: enabled - name: ip id: parameter parameters: alias: '' comment: '' hide: none label: UDP listen IP short_id: '' type: str value: '::' states: bus_sink: false bus_source: false bus_structure: null coordinate: [192, 14] rotation: 0 state: enabled - name: latitude id: parameter parameters: alias: '' comment: '' hide: none label: your latitude (N is +, S is -, format 00.000) short_id: '' type: eng_float value: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [744, 14] rotation: 0 state: enabled - name: longitude id: parameter parameters: alias: '' comment: '' hide: none label: your longitude (W is -, E is +, format 00.000) short_id: '' type: eng_float value: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [908, 14] rotation: 0 state: enabled - name: port id: parameter parameters: alias: '' comment: '' hide: none label: UDP port short_id: '' type: intx value: '7355' states: bus_sink: false bus_source: false bus_structure: null coordinate: [312, 14] rotation: 0 state: enabled - name: post_publicly id: parameter parameters: alias: '' comment: '' hide: none label: whether to post any receptions publicly on Twitter using @equisat_bot (set to any value to post) short_id: '' type: str value: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1076, 102] rotation: 0 state: enabled - name: recstart id: parameter parameters: alias: '' comment: '' hide: none label: start of recording in UTC (format YYYY-MM-DD HH:MM:SS); default is realtime short_id: '' type: str value: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1076, 14] rotation: 0 state: enabled - name: satellites_print_timestamp_0 id: satellites_print_timestamp parameters: affinity: '' alias: '' comment: '' count: 'True' fmt: '%Y-%m-%d %H:%M:%S' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [296, 564] rotation: 0 state: enabled - name: satellites_submit_0 id: satellites_submit parameters: affinity: '' alias: '' comment: '' latitude: latitude longitude: longitude noradID: '43552' source: callsign tstamp: recstart url: https://db.satnogs.org/api/telemetry/ states: bus_sink: false bus_source: false bus_structure: null coordinate: [928, 564] rotation: 0 state: enabled - name: station_name id: parameter parameters: alias: '' comment: '' hide: none label: station name or callsign short_id: '' type: str value: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [416, 14] rotation: 0 state: enabled connections: - [blocks_multiply_const_vxx_0_0, '0', fir_filter_xxx_0, '0'] - [blocks_short_to_float_0, '0', blocks_multiply_const_vxx_0_0, '0'] - [blocks_udp_source_0, '0', blocks_short_to_float_0, '0'] - [digital_clock_recovery_mm_xx_0, '0', equisat_decoder_equisat_4fsk_preamble_detect_0, '0'] - [equisat_decoder_equisat_4fsk_block_decode_0, out, equisat_decoder_equisat_fec_decoder_0, in] - [equisat_decoder_equisat_4fsk_preamble_detect_0, out, equisat_decoder_equisat_4fsk_block_decode_0, in] - [equisat_decoder_equisat_fec_decoder_0, out, satellites_print_timestamp_0, in] - [fir_filter_xxx_0, '0', digital_clock_recovery_mm_xx_0, '0'] - [satellites_print_timestamp_0, out, equisat_decoder_equisat_submitter_0, in] - [satellites_print_timestamp_0, out, equisat_decoder_equisat_telemetry_parser_0, in] - [satellites_print_timestamp_0, out, satellites_submit_0, in] metadata: file_format: 1 gr-satellites-4.4.0/examples/satellites/k2sat_image.grc000066400000000000000000000204211414055407700231560ustar00rootroot00000000000000options: parameters: author: Daniel Estevez category: '[GRC Hier Blocks]' cmake_opt: '' comment: '' copyright: '' description: K2SAT S-band image decoder gen_cmake: 'On' gen_linking: dynamic generate_options: qt_gui hier_block_src_path: '.:' id: k2sat_image max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: prompt sizing_mode: fixed thread_safe_setters: '' title: K2SAT S-band image decoder window_size: (1920, 1080) states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: lowpass_taps id: variable_low_pass_filter_taps parameters: beta: '6.76' comment: '' cutoff_freq: 4*100e3 gain: '1.0' samp_rate: samp_rate width: 4*10e3 win: firdes.WIN_HAMMING states: bus_sink: false bus_source: false bus_structure: null coordinate: [440, 250] rotation: 0 state: enabled - name: nfilts id: variable parameters: comment: '' value: '16' states: bus_sink: false bus_source: false bus_structure: null coordinate: [688, 28] rotation: 0 state: enabled - name: rrc_taps id: variable parameters: comment: '' value: firdes.root_raised_cosine(nfilts, nfilts, 1.0/float(samp_per_sym), 0.35, 11*samp_per_sym*nfilts) states: bus_sink: false bus_source: false bus_structure: null coordinate: [776, 28] rotation: 0 state: enabled - name: samp_per_sym id: variable parameters: comment: '' value: '4' states: bus_sink: false bus_source: false bus_structure: null coordinate: [560, 28] rotation: 0 state: enabled - name: samp_rate id: variable parameters: comment: '' value: 2e6 states: bus_sink: false bus_source: false bus_structure: null coordinate: [256, 12] rotation: 0 state: enabled - name: syncword id: variable parameters: comment: '' value: '"0101010101111110"' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1056, 24] rotation: 0 state: enabled - name: blocks_complex_to_float_0 id: blocks_complex_to_float parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [120, 432] rotation: 0 state: enabled - name: blocks_file_source_0 id: blocks_file_source parameters: affinity: '' alias: '' begin_tag: pmt.PMT_NIL comment: '' file: /tmp/samp_rate_2M_photo_data_finalpacket_2 length: '0' maxoutbuf: '0' minoutbuf: '0' offset: '0' repeat: 'False' type: complex vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 124] rotation: 0 state: enabled - name: blocks_interleave_0 id: blocks_interleave parameters: affinity: '' alias: '' blocksize: '1' comment: '' maxoutbuf: '0' minoutbuf: '0' num_streams: '2' type: float vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [312, 432] rotation: 0 state: enabled - name: blocks_throttle_0 id: blocks_throttle parameters: affinity: '' alias: '' comment: '' ignoretag: 'True' maxoutbuf: '0' minoutbuf: '0' samples_per_second: samp_rate type: complex vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [235, 156] rotation: 0 state: enabled - name: digital_costas_loop_cc_1 id: digital_costas_loop_cc parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' order: '4' use_snr: 'False' w: '0.01' states: bus_sink: false bus_source: false bus_structure: null coordinate: [909, 145] rotation: 0 state: enabled - name: digital_pfb_clock_sync_xxx_0_0 id: digital_pfb_clock_sync_xxx parameters: affinity: '' alias: '' comment: '' filter_size: nfilts init_phase: nfilts/2 loop_bw: '0.005' max_dev: '0.001' maxoutbuf: '0' minoutbuf: '0' osps: '1' sps: samp_per_sym taps: rrc_taps type: ccf states: bus_sink: false bus_source: false bus_structure: null coordinate: [44, 266] rotation: 0 state: enabled - name: freq_xlating_fir_filter_xxx_0 id: freq_xlating_fir_filter_xxx parameters: affinity: '' alias: '' center_freq: 500e3 + 0*138e3/4 comment: '' decim: '1' maxoutbuf: '0' minoutbuf: '0' samp_rate: samp_rate taps: lowpass_taps type: ccc states: bus_sink: false bus_source: false bus_structure: null coordinate: [434, 148] rotation: 0 state: enabled - name: qtgui_const_sink_x_0 id: qtgui_const_sink_x parameters: affinity: '' alias: '' alpha1: '1.0' alpha10: '1.0' alpha2: '1.0' alpha3: '1.0' alpha4: '1.0' alpha5: '1.0' alpha6: '1.0' alpha7: '1.0' alpha8: '1.0' alpha9: '1.0' autoscale: 'False' axislabels: 'True' color1: '"blue"' color10: '"red"' color2: '"red"' color3: '"red"' color4: '"red"' color5: '"red"' color6: '"red"' color7: '"red"' color8: '"red"' color9: '"red"' comment: '' grid: 'False' gui_hint: '' label1: '' label10: '' label2: '' label3: '' label4: '' label5: '' label6: '' label7: '' label8: '' label9: '' legend: 'True' marker1: '0' marker10: '0' marker2: '0' marker3: '0' marker4: '0' marker5: '0' marker6: '0' marker7: '0' marker8: '0' marker9: '0' name: '""' nconnections: '1' size: '1024' style1: '0' style10: '0' style2: '0' style3: '0' style4: '0' style5: '0' style6: '0' style7: '0' style8: '0' style9: '0' tr_chan: '0' tr_level: '0.0' tr_mode: qtgui.TRIG_MODE_FREE tr_slope: qtgui.TRIG_SLOPE_POS tr_tag: '""' type: complex update_time: '0.10' width1: '1' width10: '1' width2: '1' width3: '1' width4: '1' width5: '1' width6: '1' width7: '1' width8: '1' width9: '1' xmax: '2' xmin: '-2' ymax: '2' ymin: '-2' states: bus_sink: false bus_source: false bus_structure: null coordinate: [675, 265] rotation: 0 state: enabled - name: rms_agc_0 id: rms_agc parameters: affinity: '' alias: '' alpha: 1e-2 comment: '' maxoutbuf: '0' minoutbuf: '0' reference: '0.5' states: bus_sink: false bus_source: false bus_structure: null coordinate: [702, 164] rotation: 0 state: enabled - name: satellites_image_receiver_0 id: satellites_image_receiver parameters: affinity: '' alias: '' comment: '' display: 'True' fullscreen: 'True' path: /tmp/ receiver: k2sat verbose: 'True' states: bus_sink: false bus_source: false bus_structure: null coordinate: [706, 428] rotation: 0 state: true - name: satellites_k2sat_deframer_component_0 id: satellites_k2sat_deframer_component parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' threshold: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [471, 444] rotation: 0 state: true connections: - [blocks_complex_to_float_0, '0', blocks_interleave_0, '0'] - [blocks_complex_to_float_0, '1', blocks_interleave_0, '1'] - [blocks_file_source_0, '0', blocks_throttle_0, '0'] - [blocks_interleave_0, '0', satellites_k2sat_deframer_component_0, '0'] - [blocks_throttle_0, '0', freq_xlating_fir_filter_xxx_0, '0'] - [digital_costas_loop_cc_1, '0', digital_pfb_clock_sync_xxx_0_0, '0'] - [digital_pfb_clock_sync_xxx_0_0, '0', blocks_complex_to_float_0, '0'] - [digital_pfb_clock_sync_xxx_0_0, '0', qtgui_const_sink_x_0, '0'] - [freq_xlating_fir_filter_xxx_0, '0', rms_agc_0, '0'] - [rms_agc_0, '0', digital_costas_loop_cc_1, '0'] - [satellites_k2sat_deframer_component_0, out, satellites_image_receiver_0, in] metadata: file_format: 1 gr-satellites-4.4.0/examples/satellites/nexus.grc000066400000000000000000000312241414055407700221350ustar00rootroot00000000000000options: parameters: author: Daniel Estevez category: '[GRC Hier Blocks]' cmake_opt: '' comment: '' copyright: '' description: '' gen_cmake: 'On' gen_linking: dynamic generate_options: qt_gui hier_block_src_path: '.:' id: nexus max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: prompt sizing_mode: fixed thread_safe_setters: '' title: NEXUS 19k2 pi/4-DQPSK decoder window_size: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: alpha id: variable parameters: comment: '' value: '0.35' states: bus_sink: false bus_source: false bus_structure: null coordinate: [288, 84.0] rotation: 0 state: true - name: baudrate id: variable parameters: comment: '' value: '19200' states: bus_sink: false bus_source: false bus_structure: null coordinate: [184, 84.0] rotation: 0 state: true - name: nfilts id: variable parameters: comment: '' value: '16' states: bus_sink: false bus_source: false bus_structure: null coordinate: [392, 12.0] rotation: 0 state: true - name: rrc_taps id: variable parameters: comment: '' value: firdes.root_raised_cosine(nfilts, nfilts, 1.0/float(sps), alpha, int(ceil(11*sps*nfilts))) states: bus_sink: false bus_source: false bus_structure: null coordinate: [392, 84.0] rotation: 0 state: true - name: samp_rate id: variable parameters: comment: '' value: '96000' states: bus_sink: false bus_source: false bus_structure: null coordinate: [184, 12] rotation: 0 state: enabled - name: sps id: variable parameters: comment: '' value: samp_rate/2/baudrate states: bus_sink: false bus_source: false bus_structure: null coordinate: [288, 12.0] rotation: 0 state: true - name: blocks_complex_to_float_0 id: blocks_complex_to_float parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [112, 776.0] rotation: 0 state: enabled - name: blocks_delay_0 id: blocks_delay parameters: affinity: '' alias: '' comment: '' delay: '1' maxoutbuf: '0' minoutbuf: '0' num_ports: '1' type: complex vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [608, 556.0] rotation: 0 state: true - name: blocks_interleave_0 id: blocks_interleave parameters: affinity: '' alias: '' blocksize: '1' comment: '' maxoutbuf: '0' minoutbuf: '0' num_streams: '2' type: float vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [336, 776.0] rotation: 0 state: true - name: blocks_multiply_conjugate_cc_0 id: blocks_multiply_conjugate_cc parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [752, 488.0] rotation: 0 state: true - name: blocks_multiply_const_vxx_0 id: blocks_multiply_const_vxx parameters: affinity: '' alias: '' comment: '' const: '-1' maxoutbuf: '0' minoutbuf: '0' type: float vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [464, 788.0] rotation: 0 state: true - name: blocks_pdu_to_tagged_stream_0 id: blocks_pdu_to_tagged_stream parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' tag: packet_len type: byte states: bus_sink: false bus_source: false bus_structure: null coordinate: [232, 956.0] rotation: 0 state: enabled - name: blocks_unpack_k_bits_bb_0 id: blocks_unpack_k_bits_bb parameters: affinity: '' alias: '' comment: '' k: '8' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [448, 956.0] rotation: 0 state: enabled - name: blocks_wavfile_source_0 id: blocks_wavfile_source parameters: affinity: '' alias: '' comment: '' file: /tmp/nexus.wav maxoutbuf: '0' minoutbuf: '0' nchan: '1' repeat: 'True' states: bus_sink: false bus_source: false bus_structure: null coordinate: [16, 196.0] rotation: 0 state: true - name: digital_symbol_sync_xx_0 id: digital_symbol_sync_xx parameters: affinity: '' alias: '' comment: '' constellation: digital.constellation_bpsk().base() damping: '1.0' loop_bw: '0.01' max_dev: '0.01' maxoutbuf: '0' minoutbuf: '0' nfilters: nfilts osps: '1' pfb_mf_taps: rrc_taps resamp_type: digital.IR_PFB_MF sps: sps ted_gain: '1.0' ted_type: digital.TED_SIGNAL_TIMES_SLOPE_ML type: cc states: bus_sink: false bus_source: false bus_structure: null coordinate: [216, 460.0] rotation: 0 state: true - name: freq_xlating_fir_filter_xxx_0 id: freq_xlating_fir_filter_xxx parameters: affinity: '' alias: '' center_freq: '18750' comment: '' decim: '2' maxoutbuf: '0' minoutbuf: '0' samp_rate: samp_rate taps: firdes.low_pass(1, samp_rate, 15e3, 2e3) type: fcf states: bus_sink: false bus_source: false bus_structure: null coordinate: [200, 196.0] rotation: 0 state: true - name: import_0 id: import parameters: alias: '' comment: '' imports: from math import ceil states: bus_sink: false bus_source: false bus_structure: null coordinate: [560, 12.0] rotation: 0 state: true - name: import_1 id: import parameters: alias: '' comment: '' imports: import numpy as np states: bus_sink: false bus_source: false bus_structure: null coordinate: [656, 12.0] rotation: 0 state: true - name: qtgui_const_sink_x_0 id: qtgui_const_sink_x parameters: affinity: '' alias: '' alpha1: '1.0' alpha10: '1.0' alpha2: '1.0' alpha3: '1.0' alpha4: '1.0' alpha5: '1.0' alpha6: '1.0' alpha7: '1.0' alpha8: '1.0' alpha9: '1.0' autoscale: 'False' axislabels: 'True' color1: '"blue"' color10: '"red"' color2: '"red"' color3: '"red"' color4: '"red"' color5: '"red"' color6: '"red"' color7: '"red"' color8: '"red"' color9: '"red"' comment: '' grid: 'False' gui_hint: '' label1: '' label10: '' label2: '' label3: '' label4: '' label5: '' label6: '' label7: '' label8: '' label9: '' legend: 'True' marker1: '0' marker10: '0' marker2: '0' marker3: '0' marker4: '0' marker5: '0' marker6: '0' marker7: '0' marker8: '0' marker9: '0' name: '""' nconnections: '1' size: '1024' style1: '0' style10: '0' style2: '0' style3: '0' style4: '0' style5: '0' style6: '0' style7: '0' style8: '0' style9: '0' tr_chan: '0' tr_level: '0.0' tr_mode: qtgui.TRIG_MODE_FREE tr_slope: qtgui.TRIG_SLOPE_POS tr_tag: '""' type: complex update_time: '0.10' width1: '1' width10: '1' width2: '1' width3: '1' width4: '1' width5: '1' width6: '1' width7: '1' width8: '1' width9: '1' xmax: '2' xmin: '-2' ymax: '2' ymin: '-2' states: bus_sink: false bus_source: false bus_structure: null coordinate: [952, 492.0] rotation: 0 state: enabled - name: qtgui_freq_sink_x_0 id: qtgui_freq_sink_x parameters: affinity: '' alias: '' alpha1: '1.0' alpha10: '1.0' alpha2: '1.0' alpha3: '1.0' alpha4: '1.0' alpha5: '1.0' alpha6: '1.0' alpha7: '1.0' alpha8: '1.0' alpha9: '1.0' autoscale: 'False' average: '1.0' axislabels: 'True' bw: samp_rate color1: '"blue"' color10: '"dark blue"' color2: '"red"' color3: '"green"' color4: '"black"' color5: '"cyan"' color6: '"magenta"' color7: '"yellow"' color8: '"dark red"' color9: '"dark green"' comment: '' ctrlpanel: 'False' fc: '0' fftsize: '4096' freqhalf: 'True' grid: 'False' gui_hint: '' label: Relative Gain label1: '' label10: '''''' label2: '''''' label3: '''''' label4: '''''' label5: '''''' label6: '''''' label7: '''''' label8: '''''' label9: '''''' legend: 'True' maxoutbuf: '0' minoutbuf: '0' name: '""' nconnections: '1' showports: 'False' tr_chan: '0' tr_level: '0.0' tr_mode: qtgui.TRIG_MODE_FREE tr_tag: '""' type: complex units: dB update_time: '0.10' width1: '1' width10: '1' width2: '1' width3: '1' width4: '1' width5: '1' width6: '1' width7: '1' width8: '1' width9: '1' wintype: firdes.WIN_BLACKMAN_hARRIS ymax: '10' ymin: '-140' states: bus_sink: false bus_source: false bus_structure: null coordinate: [480, 224.0] rotation: 0 state: true - name: satellites_ccsds_rs_deframer_0 id: satellites_ccsds_rs_deframer parameters: affinity: '' alias: '' comment: '' frame_size: '223' maxoutbuf: '0' minoutbuf: '0' options: '""' precoding: None rs_basis: '"dual"' rs_interleaving: '1' scrambler: '"CCSDS"' threshold: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [632, 748.0] rotation: 0 state: true - name: satellites_hdlc_deframer_0 id: satellites_hdlc_deframer parameters: affinity: '' alias: '' check_fcs: 'True' comment: '' max_length: '10000' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [592, 948.0] rotation: 0 state: enabled - name: satellites_hexdump_sink_0 id: satellites_hexdump_sink parameters: affinity: '' alias: '' comment: '' options: '""' states: bus_sink: false bus_source: false bus_structure: null coordinate: [912, 912.0] rotation: 0 state: disabled - name: satellites_reflect_bytes_0 id: satellites_reflect_bytes parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [80, 960.0] rotation: 0 state: true - name: satellites_rms_agc_0 id: satellites_rms_agc parameters: affinity: '' alias: '' alpha: 1e-2 comment: '' maxoutbuf: '0' minoutbuf: '0' reference: '1.0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [56, 524.0] rotation: 0 state: true - name: satellites_telemetry_parser_0 id: satellites_telemetry_parser parameters: affinity: '' alias: '' comment: '' definition: ax25 file: '' options: '""' output: stdout states: bus_sink: false bus_source: false bus_structure: null coordinate: [912, 988.0] rotation: 0 state: enabled connections: - [blocks_complex_to_float_0, '0', blocks_interleave_0, '1'] - [blocks_complex_to_float_0, '1', blocks_interleave_0, '0'] - [blocks_delay_0, '0', blocks_multiply_conjugate_cc_0, '1'] - [blocks_interleave_0, '0', blocks_multiply_const_vxx_0, '0'] - [blocks_multiply_conjugate_cc_0, '0', blocks_complex_to_float_0, '0'] - [blocks_multiply_conjugate_cc_0, '0', qtgui_const_sink_x_0, '0'] - [blocks_multiply_const_vxx_0, '0', satellites_ccsds_rs_deframer_0, '0'] - [blocks_pdu_to_tagged_stream_0, '0', blocks_unpack_k_bits_bb_0, '0'] - [blocks_unpack_k_bits_bb_0, '0', satellites_hdlc_deframer_0, '0'] - [blocks_wavfile_source_0, '0', freq_xlating_fir_filter_xxx_0, '0'] - [digital_symbol_sync_xx_0, '0', blocks_delay_0, '0'] - [digital_symbol_sync_xx_0, '0', blocks_multiply_conjugate_cc_0, '0'] - [freq_xlating_fir_filter_xxx_0, '0', qtgui_freq_sink_x_0, '0'] - [freq_xlating_fir_filter_xxx_0, '0', satellites_rms_agc_0, '0'] - [satellites_ccsds_rs_deframer_0, out, satellites_reflect_bytes_0, in] - [satellites_hdlc_deframer_0, out, satellites_hexdump_sink_0, in] - [satellites_hdlc_deframer_0, out, satellites_telemetry_parser_0, in] - [satellites_reflect_bytes_0, out, blocks_pdu_to_tagged_stream_0, pdus] - [satellites_rms_agc_0, '0', digital_symbol_sync_xx_0, '0'] metadata: file_format: 1 gr-satellites-4.4.0/examples/satellites/nx_decoder/000077500000000000000000000000001414055407700224065ustar00rootroot00000000000000gr-satellites-4.4.0/examples/satellites/nx_decoder/amgu_1.grc000066400000000000000000000155131414055407700242610ustar00rootroot00000000000000options: parameters: author: Daniel Estevez category: Custom cmake_opt: '' comment: '' copyright: '' description: AmGU-1 decoder gen_cmake: 'On' gen_linking: dynamic generate_options: no_gui hier_block_src_path: '.:' id: amgu_1 max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: run sizing_mode: fixed thread_safe_setters: '' title: AmGU-1 decoder window_size: (1280, 1024) states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: blocks_message_debug_0 id: blocks_message_debug parameters: affinity: '' alias: '' comment: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [872, 368] rotation: 0 state: enabled - name: blocks_multiply_const_vxx_0 id: blocks_multiply_const_vxx parameters: affinity: '' alias: '' comment: '' const: -invert*10 maxoutbuf: '0' minoutbuf: '0' type: float vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [464, 260] rotation: 0 state: enabled - name: blocks_short_to_float_0 id: blocks_short_to_float parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' scale: '32767.0' vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [248, 260] rotation: 0 state: enabled - name: blocks_udp_source_0 id: blocks_udp_source parameters: affinity: '' alias: '' comment: '' eof: 'False' ipaddr: ip maxoutbuf: '0' minoutbuf: '0' port: port psize: '1472' type: short vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 236] rotation: 0 state: enabled - name: callsign id: parameter parameters: alias: '' comment: '' hide: none label: your callsign short_id: '' type: str value: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [512, 15] rotation: 0 state: enabled - name: digital_binary_slicer_fb_0 id: digital_binary_slicer_fb parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [280, 432] rotation: 0 state: enabled - name: digital_clock_recovery_mm_xx_0_0 id: digital_clock_recovery_mm_xx parameters: affinity: '' alias: '' comment: '' gain_mu: '0.175' gain_omega: 0.25*0.175*0.175 maxoutbuf: '0' minoutbuf: '0' mu: '0.5' omega: 10*(1+0.0) omega_relative_limit: '0.005' type: float states: bus_sink: false bus_source: false bus_structure: null coordinate: [56, 396] rotation: 0 state: enabled - name: invert id: parameter parameters: alias: '' comment: '' hide: none label: invert the waveform (-1 to invert) short_id: i type: intx value: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 128] rotation: 0 state: enabled - name: ip id: parameter parameters: alias: '' comment: '' hide: none label: UDP listen IP short_id: '' type: str value: '::' states: bus_sink: false bus_source: false bus_structure: null coordinate: [248, 15] rotation: 0 state: enabled - name: latitude id: parameter parameters: alias: '' comment: '' hide: none label: latitude (format 00.000 or -00.000) short_id: '' type: eng_float value: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [512, 119] rotation: 0 state: enabled - name: longitude id: parameter parameters: alias: '' comment: '' hide: none label: longitude (format 00.000 or -00.000) short_id: '' type: eng_float value: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [720, 119] rotation: 0 state: enabled - name: low_pass_filter_0 id: low_pass_filter parameters: affinity: '' alias: '' beta: '6.76' comment: '' cutoff_freq: '3000' decim: '1' gain: '1' interp: '1' maxoutbuf: '0' minoutbuf: '0' samp_rate: '48000' type: interp_fir_filter_fff width: '100' win: firdes.WIN_HAMMING states: bus_sink: false bus_source: false bus_structure: null coordinate: [664, 212] rotation: 0 state: enabled - name: note_0 id: note parameters: alias: '' comment: '' note: 4k8 states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 332] rotation: 0 state: enabled - name: port id: parameter parameters: alias: '' comment: '' hide: none label: UDP port short_id: '' type: intx value: '7355' states: bus_sink: false bus_source: false bus_structure: null coordinate: [392, 15] rotation: 0 state: enabled - name: recstart id: parameter parameters: alias: '' comment: '' hide: none label: start of recording, if processing a recording (format YYYY-MM-DD HH:MM:SS) short_id: '' type: str value: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [720, 15] rotation: 0 state: enabled - name: satellites_print_timestamp_0 id: satellites_print_timestamp parameters: affinity: '' alias: '' comment: '' count: 'True' fmt: '%Y-%m-%d %H:%M:%S' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [616, 420] rotation: 0 state: enabled - name: tnc_nx_nx_decoder_1_0 id: tnc_nx_nx_decoder parameters: affinity: '' alias: '' beesat_mode: 'False' comment: '' framesync: '0x5765' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [440, 420] rotation: 0 state: enabled connections: - [blocks_multiply_const_vxx_0, '0', low_pass_filter_0, '0'] - [blocks_short_to_float_0, '0', blocks_multiply_const_vxx_0, '0'] - [blocks_udp_source_0, '0', blocks_short_to_float_0, '0'] - [digital_binary_slicer_fb_0, '0', tnc_nx_nx_decoder_1_0, '0'] - [digital_clock_recovery_mm_xx_0_0, '0', digital_binary_slicer_fb_0, '0'] - [low_pass_filter_0, '0', digital_clock_recovery_mm_xx_0_0, '0'] - [satellites_print_timestamp_0, out, blocks_message_debug_0, print_pdu] - [tnc_nx_nx_decoder_1_0, out, satellites_print_timestamp_0, in] metadata: file_format: 1 gr-satellites-4.4.0/examples/satellites/nx_decoder/beesat.grc000066400000000000000000000231441414055407700243520ustar00rootroot00000000000000options: parameters: author: Daniel Estevez category: Custom cmake_opt: '' comment: '' copyright: '' description: BEESAT and TECHNOSAT decoder gen_cmake: 'On' gen_linking: dynamic generate_options: no_gui hier_block_src_path: '.:' id: beesat max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: run sizing_mode: fixed thread_safe_setters: '' title: BEESAT and TECHNOSAT decoder window_size: (1280, 1024) states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: blocks_message_debug_0 id: blocks_message_debug parameters: affinity: '' alias: '' comment: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [976, 352] rotation: 0 state: enabled - name: blocks_multiply_const_vxx_0 id: blocks_multiply_const_vxx parameters: affinity: '' alias: '' comment: '' const: -invert*10 maxoutbuf: '0' minoutbuf: '0' type: float vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [464, 260] rotation: 0 state: enabled - name: blocks_short_to_float_0 id: blocks_short_to_float parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' scale: '32767.0' vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [248, 260] rotation: 0 state: enabled - name: blocks_udp_source_0 id: blocks_udp_source parameters: affinity: '' alias: '' comment: '' eof: 'False' ipaddr: ip maxoutbuf: '0' minoutbuf: '0' port: port psize: '1472' type: short vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 239] rotation: 0 state: enabled - name: callsign id: parameter parameters: alias: '' comment: '' hide: none label: your callsign short_id: '' type: str value: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [512, 15] rotation: 0 state: enabled - name: digital_binary_slicer_fb_0 id: digital_binary_slicer_fb parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [272, 416] rotation: 0 state: enabled - name: digital_clock_recovery_mm_xx_0_0 id: digital_clock_recovery_mm_xx parameters: affinity: '' alias: '' comment: '' gain_mu: '0.175' gain_omega: 0.25*0.175*0.175 maxoutbuf: '0' minoutbuf: '0' mu: '0.5' omega: 10*(1+0.0) omega_relative_limit: '0.005' type: float states: bus_sink: false bus_source: false bus_structure: null coordinate: [56, 384] rotation: 0 state: enabled - name: invert id: parameter parameters: alias: '' comment: '' hide: none label: invert the waveform (-1 to invert) short_id: i type: intx value: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 128] rotation: 0 state: enabled - name: ip id: parameter parameters: alias: '' comment: '' hide: none label: UDP listen IP short_id: '' type: str value: '::' states: bus_sink: false bus_source: false bus_structure: null coordinate: [248, 15] rotation: 0 state: enabled - name: latitude id: parameter parameters: alias: '' comment: '' hide: none label: latitude (format 00.000 or -00.000) short_id: '' type: eng_float value: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [512, 119] rotation: 0 state: enabled - name: longitude id: parameter parameters: alias: '' comment: '' hide: none label: longitude (format 00.000 or -00.000) short_id: '' type: eng_float value: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [720, 119] rotation: 0 state: enabled - name: low_pass_filter_0 id: low_pass_filter parameters: affinity: '' alias: '' beta: '6.76' comment: '' cutoff_freq: '3000' decim: '1' gain: '1' interp: '1' maxoutbuf: '0' minoutbuf: '0' samp_rate: '48000' type: interp_fir_filter_fff width: '100' win: firdes.WIN_HAMMING states: bus_sink: false bus_source: false bus_structure: null coordinate: [664, 216] rotation: 0 state: enabled - name: note_0 id: note parameters: alias: '' comment: '' note: 4k8 states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 332] rotation: 0 state: enabled - name: port id: parameter parameters: alias: '' comment: '' hide: none label: UDP port short_id: '' type: intx value: '7355' states: bus_sink: false bus_source: false bus_structure: null coordinate: [392, 15] rotation: 0 state: enabled - name: recstart id: parameter parameters: alias: '' comment: '' hide: none label: start of recording, if processing a recording (format YYYY-MM-DD HH:MM:SS) short_id: '' type: str value: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [720, 15] rotation: 0 state: enabled - name: satellites_beesat_classifier_0 id: satellites_beesat_classifier parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [64, 592.0] rotation: 0 state: true - name: satellites_print_timestamp_0 id: satellites_print_timestamp parameters: affinity: '' alias: '' comment: '' count: 'True' fmt: '%Y-%m-%d %H:%M:%S' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [656, 412] rotation: 0 state: enabled - name: satellites_submit_0 id: satellites_submit parameters: affinity: '' alias: '' comment: '' latitude: latitude longitude: longitude noradID: '35933' source: callsign tstamp: recstart url: https://db.satnogs.org/api/telemetry/ states: bus_sink: false bus_source: false bus_structure: null coordinate: [872, 488] rotation: 0 state: enabled - name: satellites_submit_0_0 id: satellites_submit parameters: affinity: '' alias: '' comment: '' latitude: latitude longitude: longitude noradID: '39136' source: callsign tstamp: recstart url: https://db.satnogs.org/api/telemetry/ states: bus_sink: false bus_source: false bus_structure: null coordinate: [872, 624] rotation: 0 state: enabled - name: satellites_submit_0_0_0 id: satellites_submit parameters: affinity: '' alias: '' comment: '' latitude: latitude longitude: longitude noradID: '41619' source: callsign tstamp: recstart url: https://db.satnogs.org/api/telemetry/ states: bus_sink: false bus_source: false bus_structure: null coordinate: [872, 760] rotation: 0 state: enabled - name: satellites_submit_0_0_0_0 id: satellites_submit parameters: affinity: '' alias: '' comment: '' latitude: latitude longitude: longitude noradID: '42829' source: callsign tstamp: recstart url: https://db.satnogs.org/api/telemetry/ states: bus_sink: false bus_source: false bus_structure: null coordinate: [88, 876] rotation: 0 state: enabled - name: satellites_submit_0_0_0_1 id: satellites_submit parameters: affinity: '' alias: '' comment: '' latitude: latitude longitude: longitude noradID: '99802' source: callsign tstamp: recstart url: https://db.satnogs.org/api/telemetry/ states: bus_sink: false bus_source: false bus_structure: null coordinate: [464, 876] rotation: 0 state: enabled - name: tnc_nx_nx_decoder_1_0 id: tnc_nx_nx_decoder parameters: affinity: '' alias: '' beesat_mode: 'True' comment: '' framesync: '0x0EF0' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [432, 416] rotation: 0 state: enabled connections: - [blocks_multiply_const_vxx_0, '0', low_pass_filter_0, '0'] - [blocks_short_to_float_0, '0', blocks_multiply_const_vxx_0, '0'] - [blocks_udp_source_0, '0', blocks_short_to_float_0, '0'] - [digital_binary_slicer_fb_0, '0', tnc_nx_nx_decoder_1_0, '0'] - [digital_clock_recovery_mm_xx_0_0, '0', digital_binary_slicer_fb_0, '0'] - [low_pass_filter_0, '0', digital_clock_recovery_mm_xx_0_0, '0'] - [satellites_beesat_classifier_0, BEESAT-1, satellites_submit_0, in] - [satellites_beesat_classifier_0, BEESAT-2, satellites_submit_0_0, in] - [satellites_beesat_classifier_0, BEESAT-4, satellites_submit_0_0_0, in] - [satellites_beesat_classifier_0, BEESAT-9, satellites_submit_0_0_0_1, in] - [satellites_beesat_classifier_0, TECHNOSAT, satellites_submit_0_0_0_0, in] - [satellites_print_timestamp_0, out, blocks_message_debug_0, print_pdu] - [satellites_print_timestamp_0, out, satellites_beesat_classifier_0, in] - [tnc_nx_nx_decoder_1_0, out, satellites_print_timestamp_0, in] metadata: file_format: 1 gr-satellites-4.4.0/examples/satellites/nx_decoder/dstar_one.grc000066400000000000000000000172361414055407700250720ustar00rootroot00000000000000options: parameters: author: Daniel Estevez category: Custom cmake_opt: '' comment: '' copyright: '' description: D-STAR One decoder gen_cmake: 'On' gen_linking: dynamic generate_options: no_gui hier_block_src_path: '.:' id: dstar_one max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: run sizing_mode: fixed thread_safe_setters: '' title: D-STAR One decoder window_size: (1280, 1024) states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: blocks_message_debug_0 id: blocks_message_debug parameters: affinity: '' alias: '' comment: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [600, 560] rotation: 0 state: disabled - name: blocks_multiply_const_vxx_0 id: blocks_multiply_const_vxx parameters: affinity: '' alias: '' comment: '' const: -invert*10 maxoutbuf: '0' minoutbuf: '0' type: float vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [464, 260] rotation: 0 state: enabled - name: blocks_short_to_float_0 id: blocks_short_to_float parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' scale: '32767.0' vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [248, 260] rotation: 0 state: enabled - name: blocks_udp_source_0 id: blocks_udp_source parameters: affinity: '' alias: '' comment: '' eof: 'False' ipaddr: ip maxoutbuf: '0' minoutbuf: '0' port: port psize: '1472' type: short vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 236] rotation: 0 state: enabled - name: callsign id: parameter parameters: alias: '' comment: '' hide: none label: your callsign short_id: '' type: str value: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [512, 15] rotation: 0 state: enabled - name: digital_binary_slicer_fb_0 id: digital_binary_slicer_fb parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [280, 432] rotation: 0 state: enabled - name: digital_clock_recovery_mm_xx_0_0 id: digital_clock_recovery_mm_xx parameters: affinity: '' alias: '' comment: '' gain_mu: '0.175' gain_omega: 0.25*0.175*0.175 maxoutbuf: '0' minoutbuf: '0' mu: '0.5' omega: 10*(1+0.0) omega_relative_limit: '0.005' type: float states: bus_sink: false bus_source: false bus_structure: null coordinate: [56, 396] rotation: 0 state: enabled - name: invert id: parameter parameters: alias: '' comment: '' hide: none label: invert the waveform (-1 to invert) short_id: i type: intx value: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 128] rotation: 0 state: enabled - name: ip id: parameter parameters: alias: '' comment: '' hide: none label: UDP listen IP short_id: '' type: str value: '::' states: bus_sink: false bus_source: false bus_structure: null coordinate: [248, 15] rotation: 0 state: enabled - name: latitude id: parameter parameters: alias: '' comment: '' hide: none label: latitude (format 00.000 or -00.000) short_id: '' type: eng_float value: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [512, 119] rotation: 0 state: enabled - name: longitude id: parameter parameters: alias: '' comment: '' hide: none label: longitude (format 00.000 or -00.000) short_id: '' type: eng_float value: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [720, 119] rotation: 0 state: enabled - name: low_pass_filter_0 id: low_pass_filter parameters: affinity: '' alias: '' beta: '6.76' comment: '' cutoff_freq: '3000' decim: '1' gain: '1' interp: '1' maxoutbuf: '0' minoutbuf: '0' samp_rate: '48000' type: interp_fir_filter_fff width: '100' win: firdes.WIN_HAMMING states: bus_sink: false bus_source: false bus_structure: null coordinate: [664, 212] rotation: 0 state: enabled - name: note_0 id: note parameters: alias: '' comment: '' note: 4k8 states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 332] rotation: 0 state: enabled - name: port id: parameter parameters: alias: '' comment: '' hide: none label: UDP port short_id: '' type: intx value: '7355' states: bus_sink: false bus_source: false bus_structure: null coordinate: [392, 15] rotation: 0 state: enabled - name: recstart id: parameter parameters: alias: '' comment: '' hide: none label: start of recording, if processing a recording (format YYYY-MM-DD HH:MM:SS) short_id: '' type: str value: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [720, 15] rotation: 0 state: enabled - name: satellites_dstar_one_telemetry_parser_0 id: satellites_dstar_one_telemetry_parser parameters: affinity: '' alias: '' comment: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [520, 688] rotation: 0 state: enabled - name: satellites_print_timestamp_0 id: satellites_print_timestamp parameters: affinity: '' alias: '' comment: '' count: 'True' fmt: '%Y-%m-%d %H:%M:%S' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [64, 612] rotation: 0 state: enabled - name: satellites_submit_0 id: satellites_submit parameters: affinity: '' alias: '' comment: '' latitude: latitude longitude: longitude noradID: '99999' source: callsign tstamp: recstart url: https://db.satnogs.org/api/telemetry/ states: bus_sink: false bus_source: false bus_structure: null coordinate: [872, 488] rotation: 0 state: disabled - name: tnc_nx_nx_decoder_1_0 id: tnc_nx_nx_decoder parameters: affinity: '' alias: '' beesat_mode: 'False' comment: '' framesync: '0x5765' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [440, 420] rotation: 0 state: enabled connections: - [blocks_multiply_const_vxx_0, '0', low_pass_filter_0, '0'] - [blocks_short_to_float_0, '0', blocks_multiply_const_vxx_0, '0'] - [blocks_udp_source_0, '0', blocks_short_to_float_0, '0'] - [digital_binary_slicer_fb_0, '0', tnc_nx_nx_decoder_1_0, '0'] - [digital_clock_recovery_mm_xx_0_0, '0', digital_binary_slicer_fb_0, '0'] - [low_pass_filter_0, '0', digital_clock_recovery_mm_xx_0_0, '0'] - [satellites_print_timestamp_0, out, blocks_message_debug_0, print_pdu] - [satellites_print_timestamp_0, out, satellites_dstar_one_telemetry_parser_0, in] - [tnc_nx_nx_decoder_1_0, out, satellites_print_timestamp_0, in] - [tnc_nx_nx_decoder_1_0, out, satellites_submit_0, in] metadata: file_format: 1 gr-satellites-4.4.0/examples/satellites/nx_decoder/sokrat.grc000066400000000000000000000155131414055407700244130ustar00rootroot00000000000000options: parameters: author: Daniel Estevez category: Custom cmake_opt: '' comment: '' copyright: '' description: Sokrat decoder gen_cmake: 'On' gen_linking: dynamic generate_options: no_gui hier_block_src_path: '.:' id: sokrat max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: run sizing_mode: fixed thread_safe_setters: '' title: Sokrat decoder window_size: (1280, 1024) states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: blocks_message_debug_0 id: blocks_message_debug parameters: affinity: '' alias: '' comment: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [872, 368] rotation: 0 state: enabled - name: blocks_multiply_const_vxx_0 id: blocks_multiply_const_vxx parameters: affinity: '' alias: '' comment: '' const: -invert*10 maxoutbuf: '0' minoutbuf: '0' type: float vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [464, 260] rotation: 0 state: enabled - name: blocks_short_to_float_0 id: blocks_short_to_float parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' scale: '32767.0' vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [248, 260] rotation: 0 state: enabled - name: blocks_udp_source_0 id: blocks_udp_source parameters: affinity: '' alias: '' comment: '' eof: 'False' ipaddr: ip maxoutbuf: '0' minoutbuf: '0' port: port psize: '1472' type: short vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 236] rotation: 0 state: enabled - name: callsign id: parameter parameters: alias: '' comment: '' hide: none label: your callsign short_id: '' type: str value: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [512, 15] rotation: 0 state: enabled - name: digital_binary_slicer_fb_0 id: digital_binary_slicer_fb parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [280, 432] rotation: 0 state: enabled - name: digital_clock_recovery_mm_xx_0_0 id: digital_clock_recovery_mm_xx parameters: affinity: '' alias: '' comment: '' gain_mu: '0.175' gain_omega: 0.25*0.175*0.175 maxoutbuf: '0' minoutbuf: '0' mu: '0.5' omega: 10*(1+0.0) omega_relative_limit: '0.005' type: float states: bus_sink: false bus_source: false bus_structure: null coordinate: [56, 396] rotation: 0 state: enabled - name: invert id: parameter parameters: alias: '' comment: '' hide: none label: invert the waveform (-1 to invert) short_id: i type: intx value: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 128] rotation: 0 state: enabled - name: ip id: parameter parameters: alias: '' comment: '' hide: none label: UDP listen IP short_id: '' type: str value: '::' states: bus_sink: false bus_source: false bus_structure: null coordinate: [248, 15] rotation: 0 state: enabled - name: latitude id: parameter parameters: alias: '' comment: '' hide: none label: latitude (format 00.000 or -00.000) short_id: '' type: eng_float value: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [512, 119] rotation: 0 state: enabled - name: longitude id: parameter parameters: alias: '' comment: '' hide: none label: longitude (format 00.000 or -00.000) short_id: '' type: eng_float value: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [720, 119] rotation: 0 state: enabled - name: low_pass_filter_0 id: low_pass_filter parameters: affinity: '' alias: '' beta: '6.76' comment: '' cutoff_freq: '3000' decim: '1' gain: '1' interp: '1' maxoutbuf: '0' minoutbuf: '0' samp_rate: '48000' type: interp_fir_filter_fff width: '100' win: firdes.WIN_HAMMING states: bus_sink: false bus_source: false bus_structure: null coordinate: [664, 212] rotation: 0 state: enabled - name: note_0 id: note parameters: alias: '' comment: '' note: 4k8 states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 332] rotation: 0 state: enabled - name: port id: parameter parameters: alias: '' comment: '' hide: none label: UDP port short_id: '' type: intx value: '7355' states: bus_sink: false bus_source: false bus_structure: null coordinate: [392, 15] rotation: 0 state: enabled - name: recstart id: parameter parameters: alias: '' comment: '' hide: none label: start of recording, if processing a recording (format YYYY-MM-DD HH:MM:SS) short_id: '' type: str value: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [720, 15] rotation: 0 state: enabled - name: satellites_print_timestamp_0 id: satellites_print_timestamp parameters: affinity: '' alias: '' comment: '' count: 'True' fmt: '%Y-%m-%d %H:%M:%S' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [616, 420] rotation: 0 state: enabled - name: tnc_nx_nx_decoder_1_0 id: tnc_nx_nx_decoder parameters: affinity: '' alias: '' beesat_mode: 'False' comment: '' framesync: '0x5765' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [440, 420] rotation: 0 state: enabled connections: - [blocks_multiply_const_vxx_0, '0', low_pass_filter_0, '0'] - [blocks_short_to_float_0, '0', blocks_multiply_const_vxx_0, '0'] - [blocks_udp_source_0, '0', blocks_short_to_float_0, '0'] - [digital_binary_slicer_fb_0, '0', tnc_nx_nx_decoder_1_0, '0'] - [digital_clock_recovery_mm_xx_0_0, '0', digital_binary_slicer_fb_0, '0'] - [low_pass_filter_0, '0', digital_clock_recovery_mm_xx_0_0, '0'] - [satellites_print_timestamp_0, out, blocks_message_debug_0, print_pdu] - [tnc_nx_nx_decoder_1_0, out, satellites_print_timestamp_0, in] metadata: file_format: 1 gr-satellites-4.4.0/examples/satellites/tanusha3_pm.grc000066400000000000000000000263651414055407700232270ustar00rootroot00000000000000options: parameters: author: Daniel Estevez category: Custom cmake_opt: '' comment: '' copyright: '' description: Decodes 1k2 FM + audio phase-modulation AX.25 gen_cmake: 'On' gen_linking: dynamic generate_options: no_gui hier_block_src_path: '.:' id: tanusha3_pm max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: run sizing_mode: fixed thread_safe_setters: '' title: TANUSHA-3 FM + PM decoder window_size: 1280, 1024 states: bus_sink: false bus_source: false bus_structure: null coordinate: [10, 10] rotation: 0 state: enabled blocks: - name: nfilts id: variable parameters: comment: '' value: '16' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1016, 132] rotation: 0 state: enabled - name: rrc_taps id: variable parameters: comment: '' value: firdes.root_raised_cosine(nfilts, nfilts, 1.0/float(samp_per_sym), 0.35, 11*samp_per_sym*nfilts) states: bus_sink: false bus_source: false bus_structure: null coordinate: [1104, 132] rotation: 0 state: enabled - name: samp_per_sym id: variable parameters: comment: '' value: '5' states: bus_sink: false bus_source: false bus_structure: null coordinate: [888, 132] rotation: 0 state: enabled - name: samp_rate id: variable parameters: comment: '' value: '48000' states: bus_sink: false bus_source: false bus_structure: null coordinate: [904, 12] rotation: 0 state: enabled - name: variable_constellation_0 id: variable_constellation parameters: comment: '' const_points: '[-1, 1]' dims: '1' precision: '8' rot_sym: '2' soft_dec_lut: None sym_map: '[0, 1]' type: calcdist states: bus_sink: false bus_source: false bus_structure: null coordinate: [1008, 8] rotation: 0 state: enabled - name: analog_pll_carriertracking_cc_0 id: analog_pll_carriertracking_cc parameters: affinity: '' alias: '' comment: '' max_freq: '0.1' maxoutbuf: '0' min_freq: '-0.1' minoutbuf: '0' w: '0.0005' states: bus_sink: false bus_source: false bus_structure: null coordinate: [704, 308] rotation: 0 state: enabled - name: analog_sig_source_x_0 id: analog_sig_source_x parameters: affinity: '' alias: '' amp: '1' comment: '' freq: '2400' maxoutbuf: '0' minoutbuf: '0' offset: '0' phase: '0' samp_rate: samp_rate type: complex waveform: analog.GR_COS_WAVE states: bus_sink: false bus_source: false bus_structure: null coordinate: [176, 364] rotation: 0 state: enabled - name: bfo id: parameter parameters: alias: '' comment: '' hide: none label: carrier frequency of the BPSK signal short_id: '' type: eng_float value: '12000' states: bus_sink: false bus_source: false bus_structure: null coordinate: [504, 15] rotation: 0 state: enabled - name: blocks_complex_to_arg_0_0 id: blocks_complex_to_arg parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [888, 328] rotation: 0 state: enabled - name: blocks_message_debug_0 id: blocks_message_debug parameters: affinity: '' alias: '' comment: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1112, 704] rotation: 0 state: enabled - name: blocks_multiply_conjugate_cc_1 id: blocks_multiply_conjugate_cc parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [528, 312] rotation: 0 state: enabled - name: blocks_short_to_float_0 id: blocks_short_to_float parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' scale: '32767' vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [240, 308] rotation: 0 state: enabled - name: blocks_socket_pdu_0 id: blocks_socket_pdu parameters: affinity: '' alias: '' comment: '' host: '' maxoutbuf: '0' minoutbuf: '0' mtu: '10000' port: '52001' tcp_no_delay: 'True' type: TCP_SERVER states: bus_sink: false bus_source: false bus_structure: null coordinate: [792, 912] rotation: 0 state: enabled - name: blocks_udp_source_0 id: blocks_udp_source parameters: affinity: '' alias: '' comment: '' eof: 'False' ipaddr: ip maxoutbuf: '0' minoutbuf: '0' port: port psize: '1472' type: short vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [24, 284] rotation: 0 state: enabled - name: callsign id: parameter parameters: alias: '' comment: '' hide: none label: your callsign short_id: '' type: str value: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [240, 111] rotation: 0 state: enabled - name: digital_binary_slicer_fb_0 id: digital_binary_slicer_fb parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [416, 656] rotation: 0 state: enabled - name: digital_clock_recovery_mm_xx_0 id: digital_clock_recovery_mm_xx parameters: affinity: '' alias: '' comment: '' gain_mu: 0.175*0.01 gain_omega: 0.25*0.175*0.175*0.01 maxoutbuf: '0' minoutbuf: '0' mu: '0.5' omega: '10' omega_relative_limit: '0.001' type: float states: bus_sink: false bus_source: false bus_structure: null coordinate: [200, 620] rotation: 0 state: enabled - name: hilbert_fc_0 id: hilbert_fc parameters: affinity: '' alias: '' beta: '6.76' comment: '' maxoutbuf: '0' minoutbuf: '0' num_taps: '65' win: firdes.WIN_HAMMING states: bus_sink: false bus_source: false bus_structure: null coordinate: [392, 308] rotation: 0 state: enabled - name: ip id: parameter parameters: alias: '' comment: '' hide: none label: UDP listen IP short_id: '' type: str value: '::' states: bus_sink: false bus_source: false bus_structure: null coordinate: [240, 15] rotation: 0 state: enabled - name: latitude id: parameter parameters: alias: '' comment: '' hide: none label: latitude (format 00.000 or -00.000) short_id: '' type: eng_float value: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [504, 119] rotation: 0 state: enabled - name: longitude id: parameter parameters: alias: '' comment: '' hide: none label: longitude (format 00.000 or -00.000) short_id: '' type: eng_float value: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [712, 119] rotation: 0 state: enabled - name: low_pass_filter_0 id: low_pass_filter parameters: affinity: '' alias: '' beta: '6.76' comment: '' cutoff_freq: '1000' decim: '4' gain: '1' interp: '1' maxoutbuf: '0' minoutbuf: '0' samp_rate: samp_rate type: fir_filter_fff width: '500' win: firdes.WIN_HAMMING states: bus_sink: false bus_source: false bus_structure: null coordinate: [1040, 276] rotation: 0 state: enabled - name: port id: parameter parameters: alias: '' comment: '' hide: none label: UDP port short_id: '' type: intx value: '7355' states: bus_sink: false bus_source: false bus_structure: null coordinate: [384, 15] rotation: 0 state: enabled - name: recstart id: parameter parameters: alias: '' comment: '' hide: none label: start of recording, if processing a recording (format YYYY-MM-DD HH:MM:SS) short_id: '' type: str value: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [712, 15] rotation: 0 state: enabled - name: satellites_check_address_0 id: satellites_check_address parameters: address: RS8S affinity: '' alias: '' comment: '' direction: '"from"' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [64, 768] rotation: 0 state: enabled - name: satellites_hdlc_deframer_0 id: satellites_hdlc_deframer parameters: affinity: '' alias: '' check_fcs: 'True' comment: '' max_length: '10000' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [704, 644] rotation: 0 state: enabled - name: satellites_nrzi_decode_0 id: satellites_nrzi_decode parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [560, 656] rotation: 0 state: enabled - name: satellites_pdu_to_kiss_0 id: satellites_pdu_to_kiss parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [600, 944] rotation: 0 state: enabled - name: satellites_print_timestamp_0 id: satellites_print_timestamp parameters: affinity: '' alias: '' comment: '' count: 'True' fmt: '%Y-%m-%d %H:%M:%S' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [280, 764] rotation: 0 state: enabled connections: - [analog_pll_carriertracking_cc_0, '0', blocks_complex_to_arg_0_0, '0'] - [analog_sig_source_x_0, '0', blocks_multiply_conjugate_cc_1, '1'] - [blocks_complex_to_arg_0_0, '0', low_pass_filter_0, '0'] - [blocks_multiply_conjugate_cc_1, '0', analog_pll_carriertracking_cc_0, '0'] - [blocks_short_to_float_0, '0', hilbert_fc_0, '0'] - [blocks_udp_source_0, '0', blocks_short_to_float_0, '0'] - [digital_binary_slicer_fb_0, '0', satellites_nrzi_decode_0, '0'] - [digital_clock_recovery_mm_xx_0, '0', digital_binary_slicer_fb_0, '0'] - [hilbert_fc_0, '0', blocks_multiply_conjugate_cc_1, '0'] - [low_pass_filter_0, '0', digital_clock_recovery_mm_xx_0, '0'] - [satellites_check_address_0, ok, satellites_print_timestamp_0, in] - [satellites_hdlc_deframer_0, out, satellites_check_address_0, in] - [satellites_hdlc_deframer_0, out, satellites_pdu_to_kiss_0, in] - [satellites_nrzi_decode_0, '0', satellites_hdlc_deframer_0, '0'] - [satellites_pdu_to_kiss_0, out, blocks_socket_pdu_0, pdus] - [satellites_print_timestamp_0, out, blocks_message_debug_0, print_pdu] - [satellites_print_timestamp_0, out, satellites_pdu_to_kiss_0, in] metadata: file_format: 1 gr-satellites-4.4.0/grc/000077500000000000000000000000001414055407700150605ustar00rootroot00000000000000gr-satellites-4.4.0/grc/CMakeLists.txt000066400000000000000000000073501414055407700176250ustar00rootroot00000000000000# Copyright 2011 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. install(FILES satellites_aausat4_remove_fsm.block.yml satellites_adsb_kml.block.yml satellites_append_crc32c.block.yml satellites_ax100_decode.block.yml satellites_beesat_classifier.block.yml satellites_bme_submitter.block.yml satellites_cc11xx_packet_crop.block.yml satellites_check_address.block.yml satellites_check_ao40_uncoded_crc.block.yml satellites_check_astrocast_crc.block.yml satellites_check_cc11xx_crc.block.yml satellites_check_crc16_ccitt.block.yml satellites_check_crc16_ccitt_false.block.yml satellites_check_crc.block.yml satellites_check_eseo_crc.block.yml satellites_check_swiatowid_crc.block.yml satellites_check_tt64_crc.block.yml satellites_convolutional_encoder.block.yml satellites_decode_ra_code.block.yml satellites_decode_rs.block.yml satellites_decode_rs_ccsds.block.yml satellites_descrambler308.block.yml satellites_distributed_syncframe_soft.block.yml satellites_dstar_one_telemetry_parser.block.yml satellites_encode_rs.block.yml satellites_encode_rs_ccsds.block.yml satellites_eseo_line_decoder.block.yml satellites_eseo_packet_crop.block.yml satellites_fixedlen_tagger.block.yml satellites_funcube_submit.block.yml satellites_hdlc_deframer.block.yml satellites_hdlc_framer.block.yml satellites_k2sat_deframer.block.yml satellites_kiss_to_pdu.block.yml satellites_ks1q_header_remover.block.yml satellites_lilacsat1_demux.block.yml satellites_lilacsat1_gps_kml.block.yml satellites_manchester_sync.block.yml satellites_matrix_deinterleaver_soft.block.yml satellites_ngham_check_crc.block.yml satellites_ngham_packet_crop.block.yml satellites_ngham_remove_padding.block.yml satellites_nrzi_decode.block.yml satellites_nrzi_encode.block.yml satellites_nusat_decoder.block.yml satellites_pdu_add_meta.block.yml satellites_pdu_head_tail.block.yml satellites_pdu_length_filter.block.yml satellites_pdu_to_kiss.block.yml satellites_print_header.block.yml satellites_print_timestamp.block.yml satellites_pwsat2_submitter.block.yml satellites_pwsat2_telemetry_parser.block.yml satellites_reflect_bytes.block.yml satellites_snet_classifier.block.yml satellites_snet_deframer.block.yml satellites_submit.block.yml satellites_swap_crc.block.yml satellites_swap_header.block.yml satellites_swiatowid_packet_crop.block.yml satellites_swiatowid_packet_split.block.yml satellites_sx12xx_check_crc.block.yml satellites_sx12xx_packet_crop.block.yml satellites_u482c_decode.block.yml satellites_varlen_packet_framer.block.yml satellites_varlen_packet_tagger.block.yml satellites_viterbi_decoder.block.yml DESTINATION share/gnuradio/grc/blocks ) add_subdirectory(ccsds) add_subdirectory(components) add_subdirectory(core) add_subdirectory(hier) add_subdirectory(usp) gr-satellites-4.4.0/grc/ccsds/000077500000000000000000000000001414055407700161575ustar00rootroot00000000000000gr-satellites-4.4.0/grc/ccsds/CMakeLists.txt000066400000000000000000000027731414055407700207300ustar00rootroot00000000000000# Copyright 2011 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. install(FILES satellites_ccsds_telemetry_parser.block.yml satellites_pathID_demultiplexer.block.yml satellites_space_packet_parser.block.yml satellites_space_packet_primaryheader_adder.block.yml satellites_telecommand_parser.block.yml satellites_telecommand_primaryheader_adder.block.yml satellites_telemetry_ocf_adder.block.yml satellites_telemetry_packet_reconstruction.block.yml satellites_telemetry_primaryheader_adder.block.yml satellites_space_packet_time_stamp_adder.block.yml satellites_virtual_channel_demultiplexer.block.yml variable_time_format_parameters.block.yml DESTINATION share/gnuradio/grc/blocks ) gr-satellites-4.4.0/grc/ccsds/satellites_ccsds_telemetry_parser.block.yml000066400000000000000000000004671414055407700270000ustar00rootroot00000000000000id: satellites_ccsds_telemetry_parser label: CCSDS Telemetry Parser category: '[Satellites]/CCSDS' inputs: - domain: message id: in outputs: - domain: message id: out optional: true templates: imports: import satellites.ccsds make: satellites.ccsds.telemetry_parser() file_format: 1 gr-satellites-4.4.0/grc/ccsds/satellites_pathID_demultiplexer.block.yml000066400000000000000000000010201414055407700263310ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_pathID_demultiplexer label: Path ID Demultiplexer category: '[Satellites]/CCSDS' parameters: - id: pathID_outputs label: Path ID outputs dtype: int_vector hide: none inputs: - domain: message id: in outputs: - domain: message id: out multiplicity: ${ len(pathID_outputs) } - domain: message id: discarded templates: imports: import satellites.ccsds make: satellites.ccsds.pathID_demultiplexer((${pathID_outputs})) file_format: 1 gr-satellites-4.4.0/grc/ccsds/satellites_space_packet_parser.block.yml000066400000000000000000000021011414055407700262140ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_space_packet_parser label: Space Packet Parser category: '[Satellites]/CCSDS' parameters: - id: time_header label: Time Header dtype: enum default: drop_down options: ['0', '1'] option_labels: ['Yes', 'No'] - id: id_time label: Time Format ID dtype: raw default: '''default_value''' hide: ${ ('none' if time_header == '0' else 'all') } - id: time_format label: Time Format dtype: enum default: drop_down options: ['0', '1', '2', '3', '4'] option_labels: [CUC, CDS, CCS, ASCII A, ASCII B] hide: ${ ('none' if time_header == '0' else 'all') } - id: pfield label: PField Presence dtype: enum default: drop_down options: ['1', '0'] option_labels: ['Yes', 'No'] hide: ${ ('all' if time_format > '2' or time_header == '1' else 'none') } inputs: - domain: message id: in templates: imports: import satellites.ccsds make: satellites.ccsds.space_packet_parser(${time_header}, ${time_format}, ${pfield}, ${id_time}) file_format: 1 gr-satellites-4.4.0/grc/ccsds/satellites_space_packet_primaryheader_adder.block.yml000066400000000000000000000031661414055407700307270ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_space_packet_primaryheader_adder label: Space Packet Primary Header Adder category: '[Satellites]/CCSDS' parameters: - id: ccsds_version label: CCSDS Version dtype: raw default: '0' hide: all - id: packet_type label: Packet Type dtype: enum default: drop_down options: ['0', '1'] option_labels: [Telemetry, Telecommand] - id: secondary_header_flag label: Secondary Header Flag dtype: enum default: drop_down options: ['1', '0'] option_labels: ['Yes', 'No'] hide: none - id: AP_ID label: Application ID dtype: raw default: '0' hide: none - id: sequence_flags label: Sequence Flags dtype: raw default: '3' hide: all - id: count_or_name label: Count or Name dtype: enum default: drop_down options: ['0', '1'] option_labels: [Count, Name] hide: ${ ('none' if packet_type == '1' else 'all') } - id: packet_sequence_count label: Packet Sequence Count dtype: raw default: '0' hide: all - id: packet_sequence_name label: Packet Sequence Name dtype: raw default: '0' hide: ${ ('none' if count_or_name == '1' and packet_type == '1' else 'all') } - id: data_length label: Data Length dtype: raw default: '40000' hide: all inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites.ccsds make: satellites.ccsds.space_packet_primaryheader_adder(${packet_type}, ${secondary_header_flag}, ${AP_ID}, ${count_or_name}, ${packet_sequence_name}) file_format: 1 gr-satellites-4.4.0/grc/ccsds/satellites_space_packet_time_stamp_adder.block.yml000066400000000000000000000117251414055407700302350ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_space_packet_time_stamp_adder label: Space Packet Time Stamp Adder category: '[Satellites]/CCSDS' parameters: - id: manual_automatic label: Manual or Automatic Time dtype: enum default: drop_down options: ['0', '1'] option_labels: [Manual, Automatic] - id: time_format label: Time Format dtype: enum default: drop_down options: ['0', '1', '2', '3', '4'] option_labels: [CUC, CDS, CCS, ASCII A, ASCII B] - id: id_time label: Time Format ID dtype: raw - id: pfield label: PField Presence dtype: enum default: drop_down options: ['1', '0'] option_labels: ['Yes', 'No'] hide: ${ ('all' if time_format > '2' else 'none') } - id: pfield_extension label: PField Extension dtype: enum default: drop_down options: ['1', '0'] option_labels: ['Yes', 'No'] hide: ${ ('none' if time_format == '0' and pfield == '1' else 'all') } - id: time_code_identification_cuc label: Time Code Identification dtype: enum default: drop_down options: ['1', '2'] option_labels: [1958 January 1 epoch, Agency Defined epoch] hide: ${ ('none' if time_format == '0' else 'all') } - id: epoch_year_cuc label: Epoch Year dtype: raw default: '1' hide: ${ ('none' if time_format == '0' and time_code_identification_cuc == '2' else 'all') } - id: epoch_month_cuc label: Epoch Month dtype: raw default: '1' hide: ${ ('none' if time_format == '0' and time_code_identification_cuc == '2' else 'all') } - id: epoch_day_cuc label: Epoch Day dtype: raw default: '1' hide: ${ ('none' if time_format == '0' and time_code_identification_cuc == '2' else 'all') } - id: pfield_extension_extended label: PField Extension extended dtype: enum default: drop_down options: ['1', '0'] option_labels: ['Yes', 'No'] hide: ${ ('none' if time_format == '0' and pfield == '1' and pfield_extension == '1' else 'all') } - id: rsvd_cuc label: Reserved for Mission Definition dtype: raw default: '0' hide: ${ ('none' if time_format == '0' and pfield == '1' and pfield_extension == '1' else 'all') } - id: time_code_identification_cds label: Time Code Identification dtype: raw default: '4' hide: all - id: epoch_identification_cds label: Epoch Identification dtype: enum default: drop_down options: ['0', '1'] option_labels: [1958 January 1 Epoch, Agency Defined Epoch] hide: ${ ('none' if time_format == '1' else 'all') } - id: epoch_year_cds label: Epoch Year dtype: raw default: '1' hide: ${ ('none' if time_format == '1' and epoch_identification_cds == '1' else 'all') } - id: epoch_month_cds label: Epoch Month dtype: raw default: '1' hide: ${ ('none' if time_format == '1' and epoch_identification_cds == '1' else 'all') } - id: epoch_day_cds label: Epoch Day dtype: raw default: '1' hide: ${ ('none' if time_format == '1' and epoch_identification_cds == '1' else 'all') } - id: time_code_identification_ccs label: Time Code Identification dtype: raw default: '5' hide: all - id: year label: Year dtype: raw default: '0' hide: ${ ('none' if manual_automatic == '0' else 'all') } - id: month label: Month dtype: raw default: '0' hide: ${ ('none' if manual_automatic == '0' else 'all') } - id: day label: Day dtype: raw default: '0' hide: ${ ('none' if manual_automatic == '0' else 'all') } - id: hour label: Hour dtype: raw default: '0' hide: ${ ('none' if manual_automatic == '0' else 'all') } - id: minute label: Minute dtype: raw default: '0' hide: ${ ('none' if manual_automatic == '0' else 'all') } - id: second label: Second dtype: raw default: '0' hide: ${ ('none' if manual_automatic == '0' else 'all') } - id: microsecond label: Microsecond dtype: raw default: '0' hide: ${ ('none' if manual_automatic == '0' else 'all') } - id: picosecond label: Picosecond dtype: raw default: '0' hide: ${ ('none' if manual_automatic == '0' and time_format == '1' and length_of_submillisecond_cds() == '2' else 'all') } inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites.ccsds make: satellites.ccsds.space_packet_time_stamp_adder(${manual_automatic}, ${time_format}, ${pfield}, ${pfield_extension}, ${time_code_identification_cuc}, ${epoch_year_cuc}, ${epoch_month_cuc}, ${epoch_day_cuc}, ${pfield_extension_extended}, ${rsvd_cuc}, ${time_code_identification_cds}, ${epoch_identification_cds}, ${epoch_year_cds}, ${epoch_month_cds}, ${epoch_day_cds}, ${time_code_identification_ccs}, ${year}, ${month}, ${day}, ${hour}, ${minute}, ${second}, ${microsecond}, ${picosecond}, ${id_time}) file_format: 1 gr-satellites-4.4.0/grc/ccsds/satellites_telecommand_parser.block.yml000066400000000000000000000004271414055407700260730ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_telecommand_parser label: Telecommand Parser category: '[Satellites]/CCSDS' inputs: - domain: message id: in templates: imports: import satellites.ccsds make: satellites.ccsds.telecommand_parser() file_format: 1 gr-satellites-4.4.0/grc/ccsds/satellites_telecommand_primaryheader_adder.block.yml000066400000000000000000000022621414055407700305710ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_telecommand_primaryheader_adder label: Telecommand Primary Header Adder category: '[Satellites]/CCSDS' parameters: - id: transfer_frame_version label: Transfer Frame Version dtype: raw default: '0' hide: all - id: bypass label: Bypass dtype: raw default: '0' hide: none - id: control label: Control dtype: raw default: '0' hide: none - id: rsvd_space label: RSVD Spare dtype: raw default: '0' hide: all - id: spacecraft_id label: Spacecraft ID dtype: raw default: '0' hide: none - id: virtual_channel_id label: Virtual Channel ID dtype: raw default: '0' hide: none - id: frame_length label: Frame Length dtype: raw default: '0' hide: all - id: frame_sequence_number label: Frame Sequence Number dtype: raw default: '0' hide: all inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites.ccsds make: satellites.ccsds.telecommand_primaryheader_adder(${bypass}, ${control}, ${spacecraft_id}, ${virtual_channel_id}) file_format: 1 gr-satellites-4.4.0/grc/ccsds/satellites_telemetry_ocf_adder.block.yml000066400000000000000000000036021414055407700262250ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_telemetry_ocf_adder label: Telemetry OCF Adder category: '[Satellites]/CCSDS' parameters: - id: control_word_type label: Control Word Type dtype: raw default: '0' hide: all - id: clcw_version_number label: CLCW version number dtype: raw default: '0' hide: all - id: status_field label: Status Field dtype: raw default: '0' hide: none - id: cop_in_effect label: COP in effect dtype: raw default: '1' hide: all - id: virtual_channel_identification label: Virtual Channel Identificationo dtype: raw default: '0' hide: none - id: rsvd_spare1 label: RSVD Spare 1 dtype: raw default: '0' hide: all - id: no_rf_avail label: No RF Avail dtype: raw default: '0' hide: none - id: no_bit_lock label: No Bit Lock dtype: raw default: '0' hide: none - id: lockout label: Lockout dtype: raw default: '0' hide: none - id: wait label: Wait dtype: raw default: '0' hide: none - id: retransmit label: Retransmit dtype: raw default: '0' hide: none - id: farmb_counter label: Farm-B Counter dtype: raw default: '0' hide: all - id: rsvd_spare2 label: RSVD Spare 2 dtype: raw default: '0' hide: all - id: report_value label: Report Value dtype: raw default: '0' hide: none inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites.ccsds make: satellites.ccsds.telemetry_ocf_adder(${control_word_type}, ${clcw_version_number}, ${status_field}, ${cop_in_effect}, ${virtual_channel_identification}, ${rsvd_spare1}, ${no_rf_avail}, ${no_bit_lock}, ${lockout}, ${wait}, ${retransmit}, ${farmb_counter}, ${rsvd_spare2}, ${report_value}) file_format: 1 gr-satellites-4.4.0/grc/ccsds/satellites_telemetry_packet_reconstruction.block.yml000066400000000000000000000005501414055407700307260ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_telemetry_packet_reconstruction label: Telemetry Packet Reconstruction category: '[Satellites]/CCSDS' inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites.ccsds make: satellites.ccsds.telemetry_packet_reconstruction() file_format: 1 gr-satellites-4.4.0/grc/ccsds/satellites_telemetry_primaryheader_adder.block.yml000066400000000000000000000075611414055407700303220ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_telemetry_primaryheader_adder label: Telemetry Primary Header Adder category: '[Satellites]/CCSDS' parameters: - id: coding label: Coding dtype: enum default: drop_down options: ['1', '2', '3', '4', '5', '6', '7'] option_labels: [Uncoded, Convolutional, Reed Solomon, Concatenated, Turbo, LDPC on a Transfer Frame, LDPC on a Stream of SMTFS] hide: none - id: reed_solomon_concat label: Reed Solomon or Concatenated dtype: enum default: drop_down options: ['0', '1'] option_labels: [32-bit Compatibility, Octet Compatibility] hide: ${ ('none' if coding == '3' or coding == '4' else 'all') } - id: e label: Error Correction Capability dtype: raw default: '0' hide: ${ ('none' if coding == '3' or coding == '4' else 'all') } - id: q label: Number of Virtuall Fill Symbols dtype: raw default: '0' hide: ${ ('none' if coding == '3' or coding == '4' else 'all') } - id: I label: Interleaving Depth dtype: raw default: '0' hide: ${ ('none' if coding == '3' or coding == '4' else 'all') } - id: turbo label: Turbo dtype: enum default: drop_down options: ['223', '446', '892', '1115'] hide: ${ ('none' if coding == '5' else 'all') } - id: ldpc_tf label: LDPC applied to TF dtype: enum default: drop_down options: ['0', '1', '2', '3'] option_labels: [rate-1/2, rate-2/3, rate-4/5, rate-7/8] hide: ${ ('none' if coding == '6' else 'all') } - id: ldpc_tf_size label: LDPC Size dtype: enum default: drop_down options: ['128', '512', '2048'] hide: ${ ('none' if coding == '6' and ldpc_tf < '3' else 'all') } - id: size label: Size dtype: raw default: '0' hide: ${ ('none' if coding == '1' or coding == '2' or coding == '7' else 'all') } - id: transfer_frame_version_number label: Transfer Frame Version Number dtype: raw default: '0' hide: all - id: spacecraft_id label: Spacecraft ID dtype: raw default: '0' hide: none - id: virtual_channel_id label: Virtual Channel ID dtype: raw default: '0' hide: none - id: ocf_flag label: OCF Flag dtype: enum default: drop_down options: ['1', '0'] option_labels: ['Yes', 'No'] hide: none - id: master_channel_frame_count label: Master Channel Frame Count dtype: raw default: '0' hide: none - id: virtual_channel_frame_count label: Virtual Channel Frame Count dtype: raw default: '0' hide: none - id: transfer_frame_secondary_header_flag label: Transfer Frame Secondary Header Flag dtype: enum default: drop_down options: ['1', '0'] option_labels: ['Yes', 'No'] hide: none - id: synch_flag label: Synch Flag dtype: enum default: drop_down options: ['1', '0'] option_labels: ['Yes', 'No'] hide: none - id: packet_order_flag label: Packet Order Flag dtype: enum default: drop_down options: ['1', '0'] option_labels: ['Yes', 'No'] hide: none - id: segment_length_id label: Segment Length ID dtype: raw default: '0' hide: none - id: first_header_pointer label: First Header Pointer dtype: raw default: '0' hide: all inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites.ccsds make: satellites.ccsds.telemetry_primaryheader_adder(${transfer_frame_version_number}, ${spacecraft_id}, ${virtual_channel_id}, ${ocf_flag}, ${master_channel_frame_count}, ${virtual_channel_frame_count}, ${transfer_frame_secondary_header_flag}, ${synch_flag}, ${packet_order_flag}, ${segment_length_id}, ${first_header_pointer}, ${coding}, ${reed_solomon_concat}, ${e}, ${q}, ${I}, ${turbo}, ${ldpc_tf}, ${ldpc_tf_size}, ${size}) file_format: 1 gr-satellites-4.4.0/grc/ccsds/satellites_virtual_channel_demultiplexer.block.yml000066400000000000000000000010511414055407700303420ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_virtual_channel_demultiplexer label: Virtual Channel Demultiplexer category: '[Satellites]/CCSDS' parameters: - id: vc_outputs label: Virtual Channel ID outputs dtype: int_vector hide: none inputs: - domain: message id: in outputs: - domain: message id: out multiplicity: ${ len(vc_outputs) } - domain: message id: discarded templates: imports: import satellites.ccsds make: satellites.ccsds.virtual_channel_demultiplexer((${vc_outputs})) file_format: 1 gr-satellites-4.4.0/grc/ccsds/variable_time_format_parameters.block.yml000066400000000000000000000100031414055407700263630ustar00rootroot00000000000000id: variable_time_format_parameters label: Time Format Parameters category: '[Satellites]/CCSDS' parameters: - id: time_format_general label: Time Format dtype: enum default: drop_down options: ['0', '1', '2', '3', '4'] option_labels: [CUC, CDS, CCS, ASCII A, ASCII B] - id: basic_time label: $basic_time_num_octets_cuc() dtype: raw default: '0' hide: ${ ('none' if time_format_general == '0' else 'all') } - id: frac_time label: $fractional_time_num_octets_cuc() dtype: raw default: '0' hide: ${ ('none' if time_format_general == '0' else 'all') } - id: additional_basic_time label: $additional_basic_time_num_octets_cuc() dtype: raw default: '0' hide: ${ ('none' if time_format_general == '0' else 'all') } - id: additional_fractional_time label: $additional_fractional_time_num_octets_cuc() dtype: raw default: '0' hide: ${ ('none' if time_format_general == '0' else 'all') } - id: length_of_day_cds label: $len_of_day() dtype: enum default: drop_down options: ['0', '1'] option_labels: [16-bit day segment, 24-bit day segments] hide: ${ ('none' if time_format_general == '1' else 'all') } - id: length_of_submillisecond_cds label: $len_of_submilsecs() dtype: enum default: drop_down options: ['0', '1', '2'] option_labels: [Millisecond, Microsecond, Picosecond] hide: ${ ('none' if time_format_general == '1' else 'all') } - id: calendar_variation_ccs label: $calendar_variation() dtype: enum default: drop_down options: ['0', '1'] option_labels: [Month of year/day of month, Day of year] hide: ${ ('none' if time_format_general == '2' else 'all') } - id: number_of_subsecond_ccs label: $num_of_subsecs() dtype: enum default: drop_down options: ['0', '1', '2', '3', '4', '5', '6'] option_labels: [1 s, 10^-2 s, 10^-4 s, 10^-6 s, 10^-8 s, 10^-10 s, 10^-12 s] hide: ${ ('none' if time_format_general == '2' else 'all') } - id: ascii_dec_num label: $ascii_dec() dtype: '' default: '1' hide: ${ ('none' if time_format_general > '2' else 'all') } - id: add_z_terminator label: $add_z() dtype: enum default: drop_down options: ['1', '0'] option_labels: ['Yes', 'No'] hide: ${ ('none' if time_format_general > '2' else 'all') } value: ${value} templates: imports: "def struct(data): return type('Struct', (object,), data)()" var_make: |- self.${id} = ${id} = struct({ 'basic_time_num_octets_cuc': ${context.get('basic_time')}, 'fractional_time_num_octets_cuc': ${context.get('frac_time')}, 'additional_basic_time_num_octets_cuc': ${context.get('additional_basic_time')}, 'additional_fractional_time_num_octets_cuc': ${context.get('additional_fractional_time')}, 'len_of_day': ${context.get('length_of_day_cds')}, 'len_of_submilsecs': ${context.get('length_of_submillisecond_cds')}, 'calendar_variation': ${context.get('calendar_variation_ccs')}, 'num_of_subsecs': ${context.get('number_of_subsecond_ccs')}, 'ascii_dec': ${context.get('ascii_dec_num')}, 'add_z': ${context.get('add_z_terminator')}, }) var_value: |- struct({ 'basic_time_num_octects_cuc': ${context.get('basic_time')}, 'fractional_time_num_octets_cuc': ${context.get('frac_time')}, 'additional_basic_time_num_octets_cuc': ${context.get('additional_basic_time')}, 'additional_fractional_time_num_octets_cuc': ${context.get('additional_fractional_time')}, 'len_of_day': ${context.get('length_of_day_cds')}, 'len_of_submilsecs': ${context.get('length_of_submillisecond_cds')}, 'calendar_variation': ${context.get('calendar_variation_ccs')}, 'num_of_subsecs': ${context.get('number_of_subsecond_ccs')}, 'ascii_dec': ${context.get('ascii_dec_num')}, 'add_z': ${context.get('add_z_terminator')}, }) file_format: 1 gr-satellites-4.4.0/grc/components/000077500000000000000000000000001414055407700172455ustar00rootroot00000000000000gr-satellites-4.4.0/grc/components/CMakeLists.txt000066400000000000000000000017601414055407700220110ustar00rootroot00000000000000# Copyright 2011 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. add_subdirectory(deframers) add_subdirectory(demodulators) add_subdirectory(datasinks) add_subdirectory(datasources) add_subdirectory(transports) gr-satellites-4.4.0/grc/components/datasinks/000077500000000000000000000000001414055407700212265ustar00rootroot00000000000000gr-satellites-4.4.0/grc/components/datasinks/CMakeLists.txt000066400000000000000000000023341414055407700237700ustar00rootroot00000000000000# Copyright 2011 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. install(FILES satellites_codec2_udp_sink.block.yml satellites_file_receiver.block.yml satellites_hexdump_sink.block.yml satellites_image_receiver.block.yml satellites_kiss_file_sink.block.yml satellites_kiss_server_sink.block.yml satellites_telemetry_parser.block.yml satellites_telemetry_submit.block.yml DESTINATION share/gnuradio/grc/blocks ) gr-satellites-4.4.0/grc/components/datasinks/satellites_codec2_udp_sink.block.yml000066400000000000000000000017721414055407700303350ustar00rootroot00000000000000id: satellites_codec2_udp_sink label: Codec2 UDP sink category: '[Satellites]/Data sinks' parameters: - id: ip label: IP dtype: string default: '127.0.0.1' - id: port label: Port dtype: int default: 7000 - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: message id: in templates: imports: import satellites.components.datasinks make: satellites.components.datasinks.codec2_udp_sink(ip=${ip}, port=${port}, options=${options}) documentation: |- Sends Codec2 digital voice frames by UDP Each 7 byte frame is sent in a different UDP packet to ensure minimum latency Input: A stream of PDUs containing Codec2 frames Parameters: IP: destination IP to send the UDP packets to Port: destination port to send the UDP packets to Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/datasinks/satellites_file_receiver.block.yml000066400000000000000000000021471414055407700301020ustar00rootroot00000000000000id: satellites_file_receiver label: File Receiver category: '[Satellites]/Data sinks' parameters: - id: receiver label: FileReceiver class dtype: string - id: path label: Path dtype: string - id: verbose label: Verbose dtype: bool default: False hide: part - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: message id: in templates: imports: import satellites.components.datasinks make: satellites.components.datasinks.file_receiver(${receiver}, ${path}, ${verbose}, options=${options}) documentation: |- Reassembles a files transmitted in chunks and saves them Input: PDUs with packets containing file chunks Parameters: FileReceiver class: chunk format definition, which is a class in satellites.filereceiver Path: path of the directory to save files to Verbose: print additional information to the standard output Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/datasinks/satellites_hexdump_sink.block.yml000066400000000000000000000012501414055407700277670ustar00rootroot00000000000000id: satellites_hexdump_sink label: Hexdump Sink category: '[Satellites]/Data sinks' parameters: - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: message id: in templates: imports: import satellites.components.datasinks make: satellites.components.datasinks.hexdump_sink(options=${options}) documentation: |- Prints PDUs in hex to the standard output This block is a wrapper over the Message Debug block Input: PDUs Parameters: Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/datasinks/satellites_image_receiver.block.yml000066400000000000000000000027401414055407700302440ustar00rootroot00000000000000id: satellites_image_receiver label: Image Receiver category: '[Satellites]/Data sinks' parameters: - id: receiver label: ImageReceiver class dtype: string - id: path label: Path dtype: string - id: verbose label: Verbose dtype: bool default: False hide: part - id: display label: Display dtype: bool default: True hide: part - id: fullscreen label: Fullscreen dtype: bool default: True - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: message id: in templates: imports: import satellites.components.datasinks make: satellites.components.datasinks.file_receiver(${receiver}, ${path}, ${verbose}, display=${display}, fullscreen=${fullscreen}, options=${options}) documentation: |- Reassembles images transmitted in chunks and displays them in real time The images are also saved to files in a directory Input: PDUs with packets containing image chunks Parameters: ImageReceiver class: chunk format definition, which is a class in satellites.filereceiver Path: path of the directory to save files to Verbose: print additional information to the standard output Display: show the image in real time using feh Fullscreen: run feh in fullscreen Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/datasinks/satellites_kiss_file_sink.block.yml000066400000000000000000000017541414055407700302760ustar00rootroot00000000000000id: satellites_kiss_file_sink label: KISS File Sink category: '[Satellites]/Data sinks' parameters: - id: file label: File dtype: file_save - id: append label: Append file dtype: bool default: 'False' options: ['True', 'False'] option_labels: [Append, Overwrite] - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: message id: in templates: imports: import satellites.components.datasinks make: satellites.components.datasinks.kiss_file_sink(${file}, append = ${append}, options=${options}) documentation: |- Saves PDUs to a file using the KISS protocol/format Input: PDUs with packets Parameters: File: path of the output file Append file: selects whether the output file should be overwritten or appended to Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/datasinks/satellites_kiss_server_sink.block.yml000066400000000000000000000016511414055407700306610ustar00rootroot00000000000000id: satellites_kiss_server_sink label: KISS Server Sink category: '[Satellites]/Data sinks' parameters: - id: address label: Address dtype: string default: '""' - id: port label: Port dtype: int default: 8100 - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: message id: in templates: imports: import satellites.components.datasinks make: satellites.components.datasinks.kiss_server_sink(${address}, ${port}, options=${options}) documentation: |- Saves PDUs using the KISS protocol to clients connected to this TCP server Input: PDUs with packets Parameters: Address: Address to bind to. Use "" to bind on all addresses. Port: Port to listen on Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/datasinks/satellites_telemetry_parser.block.yml000066400000000000000000000031351414055407700306630ustar00rootroot00000000000000id: satellites_telemetry_parser label: Telemetry Parser category: '[Satellites]/Data sinks' parameters: - id: definition label: Telemetry Definition dtype: string - id: output label: Output dtype: enum default: 'stdout' options: ['stdout', 'file'] option_labels: [Standard output (stdout), File] hide: ${ 'part' if output == 'file' else 'none' } - id: file label: File dtype: file_save hide: ${ 'all' if output == 'stdout' else 'none' } - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: message id: in templates: imports: import satellites.components.datasinks make: | % if context.get('output')() == 'stdout': satellites.components.datasinks.telemetry_parser(${definition}, options=${options}) % else: satellites.components.datasinks.telemetry_parser(${definition}, file = ${file}, options=${options}) % endif documentation: |- Parses telemetry frames according to a construct telemetry definition The parser prints the output to the standard output or a file Input: PDUs containing telemetry frames Parameters: Telemetry Definition: the telemetry definition to use for parsing, which must be an object of satellites.telemetry supporting the parse() method Output: selects standard output or file as output destination File: selects the path of the output file Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/datasinks/satellites_telemetry_submit.block.yml000066400000000000000000000035421414055407700306740ustar00rootroot00000000000000id: satellites_telemetry_submit label: Telemetry Submit category: '[Satellites]/Data sinks' parameters: - id: server label: Server dtype: enum default: '"SatNOGS"' options: ['"SatNOGS"', '"FUNcube"', '"PWSat"', '"BME"', '"HIT"', '"SIDS"'] option_labels: [SatNOGS DB, AMSAT-UK Data Warehouse, PW-Sat2 Ground Station, BME Ground Station, Harbin Institute of Technology, Custom SIDS server] - id: url label: URL dtype: string hide: ${ 'all' if server != '"SIDS"' else 'none' } - id: norad label: NORAD ID dtype: int default: 0 hide: ${ 'all' if server not in ['"SatNOGS"', '"BME"', '"SIDS"'] else 'none' } - id: port label: TCP server port dtype: int default: 0 hide: ${ 'none' if server == '"HIT"' else 'all' } - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: message id: in templates: imports: |- import satellites.components.datasinks import satellites.utils.config make: satellites.components.datasinks.telemetry_submit(${server}, norad=${norad}, port='${port}', url = ${url}, config=satellites.utils.config.open_config(), options=${options}) documentation: |- Sends telemetry frames to an online telemetry data base server This block uses the gr-satellites config file at ~/.gr_satellites/config.ini to set up the server configuration Input: PDUs with telemetry frames Parameters: Server: selects the server to submit telemetry to URL: url of the custom SIDS server (for Custom SIDS server) NORAD ID: NORAD ID of the satellite (for SatNOGS and BME) TCP server port: TCP port where the proxy is listening (for HIT) Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/datasources/000077500000000000000000000000001414055407700215625ustar00rootroot00000000000000gr-satellites-4.4.0/grc/components/datasources/CMakeLists.txt000066400000000000000000000017021414055407700243220ustar00rootroot00000000000000# Copyright 2011 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. install(FILES satellites_kiss_file_source.block.yml DESTINATION share/gnuradio/grc/blocks ) gr-satellites-4.4.0/grc/components/datasources/satellites_kiss_file_source.block.yml000066400000000000000000000014151414055407700311600ustar00rootroot00000000000000id: satellites_kiss_file_source label: KISS File Source category: '[Satellites]/Data sources' parameters: - id: file label: File dtype: file_open - id: options label: Command line options dtype: string default: '""' hide: part outputs: - domain: message id: out templates: imports: import satellites.components.datasources make: satellites.components.datasources.kiss_file_source(${file}, options=${options}) documentation: |- Reads a file in KISS format, outputing PDUs Output: The frames stored in the KISS file, as PDUs Parameters: File: the file to read from Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/000077500000000000000000000000001414055407700212155ustar00rootroot00000000000000gr-satellites-4.4.0/grc/components/deframers/CMakeLists.txt000066400000000000000000000046641414055407700237670ustar00rootroot00000000000000# Copyright 2011 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. install(FILES satellites_aalto1_deframer.block.yml satellites_aausat4_deframer.block.yml satellites_aistechsat_2_deframer.block.yml satellites_ao40_fec_deframer.block.yml satellites_ao40_uncoded_deframer.block.yml satellites_astrocast_fx25_deframer.block.yml satellites_ax100_deframer.block.yml satellites_ax25_deframer.block.yml satellites_ax5043_deframer.block.yml satellites_binar1_deframer.block.yml satellites_ccsds_concatenated_deframer.block.yml satellites_ccsds_uncoded_deframer.block.yml satellites_ccsds_rs_deframer.block.yml satellites_diy1_deframer.block.yml satellites_eseo_deframer.block.yml satellites_fossasat_deframer.block.yml satellites_grizu263a_deframer.block.yml satellites_ideassat_deframer.block.yml satellites_k2sat_deframer_component.block.yml satellites_lilacsat_1_deframer.block.yml satellites_lucky7_deframer.block.yml satellites_mobitex_deframer.block.yml satellites_ngham_deframer.block.yml satellites_nusat_deframer.block.yml satellites_ops_sat_deframer.block.yml satellites_reaktor_hello_world_deframer.block.yml satellites_sat_3cat_1_deframer.block.yml satellites_smogp_ra_deframer.block.yml satellites_smogp_signalling_deframer.block.yml satellites_snet_deframer_component.block.yml satellites_swiatowid_deframer.block.yml satellites_tt64_deframer.block.yml satellites_u482c_deframer.block.yml satellites_ua01_deframer.block.yml satellites_usp_deframer.block.yml satellites_yusat_deframer.block.yml DESTINATION share/gnuradio/grc/blocks ) gr-satellites-4.4.0/grc/components/deframers/satellites_aalto1_deframer.block.yml000066400000000000000000000021251414055407700303100ustar00rootroot00000000000000id: satellites_aalto1_deframer label: AALTO-1 Deframer category: '[Satellites]/Deframers' parameters: - id: threshold label: Syncword threshold dtype: int default: 0 - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.reaktor_hello_world_deframer(syncword_threshold = ${threshold}, options=${options}) documentation: |- Deframes AALTO-1 custom packets The frames are transmitted by a Texas Intruments CC1125 transceiver with a PN9 scrambler and a CRC-16 CCITT (as in AX.25) Input: A stream of soft symbols containing AALTO-1 packets Output: PDUs with the deframed AALTO-1 packets Parameters: Syncword threshold: number of bit errors to allow in syncword detection Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_aausat4_deframer.block.yml000066400000000000000000000020341414055407700304700ustar00rootroot00000000000000id: satellites_aausat4_deframer label: AAUSAT-4 Deframer category: '[Satellites]/Deframers' parameters: - id: threshold label: Syncword threshold dtype: int default: 0 - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.aausat4_deframer(syncword_threshold = ${threshold}, options=${options}) documentation: |- Deframes custom packets from AAUSAT-4 The AAUSAT-4 framing is similar to the CCSDS concatenated protocol Input: A stream of soft symbols containing AAUSAT-4 packets Output: PDUs with the deframed AAUSAT-4 packets Parameters: Syncword threshold: number of bit errors to allow in syncword detection Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_aistechsat_2_deframer.block.yml000066400000000000000000000022701414055407700315010ustar00rootroot00000000000000id: satellites_aistechsat_2_deframer label: AISTECHSAT-2 custom deframer category: '[Satellites]/Deframers' parameters: - id: threshold label: Syncword threshold dtype: int default: 0 - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.ccsds_rs_deframer(frame_size = ${frame_size}, precoding = ${precoding}, rs_basis = ${rs_basis}, rs_interleaving = ${rs_interleaving}, scrambler = ${scrambler}, syncword_threshold = ${threshold}, options=${options}) documentation: |- Deframes a signal using the AISTECHSAT-2 custom CCSDS-like protocol Input: A stream of soft symbols containing packets using the AISTECHSAT-2 custom protocol Output: PDUs with the deframed packets Parameters: Syncword threshold: number of bit errors to allow in the detection of the 32 bit syncword Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_ao40_fec_deframer.block.yml000066400000000000000000000026741414055407700305200ustar00rootroot00000000000000id: satellites_ao40_fec_deframer label: AO-40 FEC Deframer category: '[Satellites]/Deframers' parameters: - id: threshold label: Syncword threshold dtype: int default: 0 - id: short_frames label: Use short frames (SMOG-P) dtype: bool default: 'False' options: ['True', 'False'] - id: crc label: Use CRC-16 ARC dtype: bool default: 'False' options: ['True', 'False'] - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.ao40_fec_deframer(syncword_threshold = ${threshold}, short_frames = ${short_frames}, crc = ${crc}, options=${options}) documentation: |- Deframes a signal using the AO-40 FEC protocol Input: A stream of soft symbols containing packets using the AO-40 FEC protocol Output: PDUs with the deframed packets Parameters: Syncword threshold: number of bit errors to allow in the detection of the 32 bit syncword Use short frames (SMOG-P): enable usage of short frames, which is a variant employed by SMOG-P and ATL-1 Use CRC-16 ARC: use CRC-16 ARC (used in SMOG-1) Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_ao40_uncoded_deframer.block.yml000066400000000000000000000020261414055407700313730ustar00rootroot00000000000000id: satellites_ao40_uncoded_deframer label: AO-40 Uncoded Deframer category: '[Satellites]/Deframers' parameters: - id: threshold label: Syncword threshold dtype: int default: 0 - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.ao40_uncoded_deframer(syncword_threshold = ${threshold}, options=${options}) documentation: |- Deframes AO-40 uncoded packets The packets have 512 bytes of payload and a CRC-16 Input: A stream of soft symbols containing AO-40 uncoded packets Output: PDUs with the deframed AO-40 packets Parameters: Syncword threshold: number of bit errors to allow in syncword detection Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_astrocast_fx25_deframer.block.yml000066400000000000000000000023121414055407700317740ustar00rootroot00000000000000id: satellites_astrocast_fx25_deframer label: Astrocast FX.25 Deframer category: '[Satellites]/Deframers' parameters: - id: threshold label: Syncword threshold dtype: int default: 0 - id: nrzi label: Coding dtype: enum default: 'True' options: ['True', 'False'] option_labels: ['NRZ-I', 'NRZ'] - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.astrocast_fx25_deframer(nrzi = ${nrzi}, syncword_threshold = ${threshold}, options=${options}) documentation: |- Deframes Astrocast somewhat-noncompliant FX.25 packets Input: A stream of soft symbols containing Astrocast FX.25 packets Output: PDUs with the deframed Astrocast FX.25 packets Parameters: Syncword threshold: number of bit errors to allow in syncword detection Coding: selects NRZ-I or NRZ coding Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_ax100_deframer.block.yml000066400000000000000000000031221414055407700277560ustar00rootroot00000000000000id: satellites_ax100_deframer label: GOMspace AX100 Deframer category: '[Satellites]/Deframers' parameters: - id: mode label: Mode dtype: enum default: '"RS"' options: ['"RS"', '"ASM"'] option_labels: ['Reed Solomon', 'ASM+Golay'] - id: scrambler label: Scrambler dtype: enum default: '"CCSDS"' options: ['"CCSDS"', '"none"'] option_labels: [CCSDS, None] hide: ${ 'none' if mode == '"ASM"' else 'all' } - id: threshold label: Syncword threshold dtype: int default: 0 - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.ax100_deframer(mode = ${mode}, scrambler = ${scrambler}, syncword_threshold = ${threshold}, options=${options}) documentation: |- Deframes a signal using one of the two protocols of the GOMspace NanoCom AX100 Input: A stream of soft symbols containing packets from the AX100 transceiver Output: PDUs with the deframed packets Parameters: Mode: indicates the AX100 mode (protocol), which can be ASM+Golay or Reed Solomon Scrambler: enables or disables the CCSDS synchronous scrambler (only ASM+Golay mode) Syncword threshold: number of bit errors to allow in the detection of the 32 bit syncword Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_ax25_deframer.block.yml000066400000000000000000000020561414055407700277110ustar00rootroot00000000000000id: satellites_ax25_deframer label: AX.25 Deframer category: '[Satellites]/Deframers' parameters: - id: g3ruh_scrambler label: G3RUH scrambling dtype: bool default: 'True' options: ['True', 'False'] - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.ax25_deframer(g3ruh_scrambler=${g3ruh_scrambler}, options=${options}) documentation: |- Deframes AX.25 packets This block performs NRZ-I decoding, frame boundary detection, bit de-stuffing, and CRC-16 checking. Input: A stream of soft symbols containing AX.25 packets Output: PDUs with the deframed AX.25 packets Parameters: G3RUH scrambling: Perform G3RUH descrambling Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_ax5043_deframer.block.yml000066400000000000000000000013551414055407700300570ustar00rootroot00000000000000id: satellites_ax5043_deframer label: AX5043 Deframer category: '[Satellites]/Deframers' parameters: - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.ax5043_deframer(options=${options}) documentation: |- Deframes AX5043 FEC packets Input: A stream of soft symbols containing AX5043 FEC packets Output: PDUs with the deframed packets Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_binar1_deframer.block.yml000066400000000000000000000013551414055407700303070ustar00rootroot00000000000000id: satellites_binar1_deframer label: BINAR-1 Deframer category: '[Satellites]/Deframers' parameters: - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.binar1_deframer(options=${options}) documentation: |- Deframes Binary-1 custom packets Input: A stream of soft symbols containing BINAR-1 packets Output: PDUs with the deframed packets Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_ccsds_concatenated_deframer.block.yml000066400000000000000000000052051414055407700327400ustar00rootroot00000000000000id: satellites_ccsds_concatenated_deframer label: CCSDS Concatenated Deframer category: '[Satellites]/Deframers' parameters: - id: frame_size label: Frame size (bytes) dtype: int default: 223 - id: precoding label: Precoding dtype: enum default: 'None' options: ['None', '"differential"'] option_labels: ['None', 'Differential'] - id: rs_basis label: Reed-Solomon basis dtype: enum default: '"dual"' options: ['"conventional"', '"dual"'] option_labels: [Conventional, Dual] - id: rs_interleaving label: Reed-Solomon interleave depth default: 1 dtype: int - id: scrambler label: Scrambler dtype: enum default: '"CCSDS"' options: ['"CCSDS"', '"none"'] option_labels: [CCSDS, None] - id: convolutional label: Convolutional code dtype: enum default: '"CCSDS"' options: ['"CCSDS"', '"NASA-DSN"', '"CCSDS uninverted"', '"NASA-DSN uninverted"'] option_labels: [CCSDS, NASA-DSN, CCSDS uninverted, NASA-DSN uninverted] - id: threshold label: Syncword threshold dtype: int default: 0 - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.ccsds_concatenated_deframer(frame_size = ${frame_size}, precoding = ${precoding}, rs_basis = ${rs_basis}, rs_interleaving = ${rs_interleaving}, scrambler = ${scrambler}, convolutional = ${convolutional}, syncword_threshold = ${threshold}, options=${options}) documentation: |- Deframes a signal using the CCSDS concatenated TM protocol Input: A stream of soft symbols containing packets using the CCSDS concatenated TM protocol Output: PDUs with the deframed packets Parameters: Frame size (bytes): the size of the frame in bytes, after Reed-Solomon decoding Precoding: selects no precoding or differential precoding Reed-Solomon basis: toggles the usage of the conventional or dual basis definition for the Reed-Solomon code Reed-Solomon interleave depth: number of interleaved Reed-Solomon codewords Scrambler: enables or disables the CCSDS synchronous scrambler Convolutional code: selects the polynomials and inversion branches used to define the convolutional encoder Syncword threshold: number of bit errors to allow in the detection of the 32 bit syncword Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_ccsds_rs_deframer.block.yml000066400000000000000000000043501414055407700307340ustar00rootroot00000000000000id: satellites_ccsds_rs_deframer label: CCSDS Reed-Solomon Deframer category: '[Satellites]/Deframers' parameters: - id: frame_size label: Frame size (bytes) dtype: int default: 223 - id: precoding label: Precoding dtype: enum default: 'None' options: ['None', '"differential"'] option_labels: [None, Differential] - id: rs_basis label: Reed-Solomon basis dtype: enum default: '"dual"' options: ['"conventional"', '"dual"'] option_labels: [Conventional, Dual] - id: rs_interleaving label: Reed-Solomon interleave depth default: 1 dtype: int - id: scrambler label: Scrambler dtype: enum default: '"CCSDS"' options: ['"CCSDS"', '"none"'] option_labels: [CCSDS, None] - id: threshold label: Syncword threshold dtype: int default: 0 - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.ccsds_rs_deframer(frame_size = ${frame_size}, precoding = ${precoding}, rs_en = True, rs_basis = ${rs_basis}, rs_interleaving = ${rs_interleaving}, scrambler = ${scrambler}, syncword_threshold = ${threshold}, options=${options}) documentation: |- Deframes a signal using the CCSDS Reed-Solomon TM protocol Input: A stream of soft symbols containing packets using the CCSDS Reed-Solomon TM protocol Output: PDUs with the deframed packets Parameters: Frame size (bytes): the size of the frame in bytes, after Reed-Solomon decoding Precoding: selects no precoding or differential precoding Reed-Solomon basis: toggles the usage of the conventional or dual basis definition for the Reed-Solomon code Reed-Solomon interleave depth: number of interleaved Reed-Solomon codewords Scrambler: enables or disables the CCSDS synchronous scrambler Syncword threshold: number of bit errors to allow in the detection of the 32 bit syncword Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_ccsds_uncoded_deframer.block.yml000066400000000000000000000032351414055407700317320ustar00rootroot00000000000000id: satellites_ccsds_deframer label: CCSDS Uncoded Deframer category: '[Satellites]/Deframers' parameters: - id: frame_size label: Frame size (bytes) dtype: int default: 223 - id: precoding label: Precoding dtype: enum default: 'None' options: ['None', '"differential"'] option_labels: [None, Differential] - id: scrambler label: Scrambler dtype: enum default: '"CCSDS"' options: ['"CCSDS"', '"none"'] option_labels: [CCSDS, None] - id: threshold label: Syncword threshold dtype: int default: 0 - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.ccsds_rs_deframer(frame_size = ${frame_size}, precoding = ${precoding}, rs_en = False, scrambler = ${scrambler}, syncword_threshold = ${threshold}, options=${options}) documentation: |- Deframes a signal using the CCSDS TM protocol Input: A stream of soft symbols containing packets using the CCSDS TM protocol Output: PDUs with the deframed packets Parameters: Frame size (bytes): the size of the frame in bytes Precoding: selects no precoding or differential precoding Scrambler: enables or disables the CCSDS synchronous scrambler Syncword threshold: number of bit errors to allow in the detection of the 32 bit syncword Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_diy1_deframer.block.yml000066400000000000000000000013411414055407700277740ustar00rootroot00000000000000id: satellites_diy1_deframer label: DIY-1 Deframer category: '[Satellites]/Deframers' parameters: - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.diy1_deframer(options=${options}) documentation: |- Deframes DIY-1 RFM22 packets Input: A stream of soft symbols containing DIY-1 packets Output: PDUs with the deframed packets Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_eseo_deframer.block.yml000066400000000000000000000017541414055407700300710ustar00rootroot00000000000000id: satellites_eseo_deframer label: ESEO Deframer category: '[Satellites]/Deframers' parameters: - id: threshold label: Syncword threshold dtype: int default: 0 - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.eseo_deframer(syncword_threshold = ${threshold}, options=${options}) documentation: |- Deframes ESEO custom frames The frames use G3RUH scrambling and Reed-Solomon Input: A stream of soft symbols containing ESEO frames Output: PDUs with the deframed ESEO frames Parameters: Syncword threshold: number of bit errors to allow in syncword detection Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_fossasat_deframer.block.yml000066400000000000000000000021131414055407700307470ustar00rootroot00000000000000id: satellites_fossasat_deframer label: FOSSASAT Deframer category: '[Satellites]/Deframers' parameters: - id: threshold label: Syncword threshold dtype: int default: 0 - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.fossasat_deframer(syncword_threshold = ${threshold}, options=${options}) documentation: |- Deframes FOSSASAT-1/2 packets This framing is based on Semtech SX126x transceiver with PN9 scrambler, bit order swapping and a CRC-16. Input: A stream of soft symbols containing FOSSASAT-1/2 packets Output: PDUs with the deframed Reaktor Hello World packets Parameters: Syncword threshold: number of bit errors to allow in syncword detection Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_grizu263a_deframer.block.yml000066400000000000000000000021241414055407700306620ustar00rootroot00000000000000id: satellites_grizu263a_deframer label: Grizu-263A Deframer category: '[Satellites]/Deframers' parameters: - id: threshold label: Syncword threshold dtype: int default: 0 - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.grizu263a_deframer(syncword_threshold = ${threshold}, options=${options}) documentation: |- Deframes Grizu-263A packets This framing is based on Semtech SX1268 transceiver with PN9 scrambler, bit order swapping and a CRC-16. Input: A stream of soft symbols containing Reaktor Hello World packets Output: PDUs with the deframed Reaktor Hello World packets Parameters: Syncword threshold: number of bit errors to allow in syncword detection Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_ideassat_deframer.block.yml000066400000000000000000000013661414055407700307320ustar00rootroot00000000000000id: satellites_ideassat_deframer label: IDEASSat Deframer category: '[Satellites]/Deframers' parameters: - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.ideassat_deframer(options=${options}) documentation: |- Deframes IDEASSat ad-hoc packets Input: A stream of soft symbols containing IDEASSat packets Output: PDUs with the deframed packets Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_k2sat_deframer_component.block.yml000066400000000000000000000021031414055407700322310ustar00rootroot00000000000000id: satellites_k2sat_deframer_component label: K2SAT Deframer category: '[Satellites]/Deframers' parameters: - id: threshold label: Syncword threshold dtype: int default: 0 - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.k2sat_deframer(syncword_threshold = ${threshold}, options=${options}) documentation: |- Deframes K2SAT image packets The frames use the CCSDS r=1/2, k=7 convolutional code and the IESS-308 (V.35) asynchronous scrambler Input: A stream of soft symbols containing K2SAT image packets Output: PDUs with the deframed K2SAT image packets Parameters: Syncword threshold: number of bit errors to allow in syncword detection Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_lilacsat_1_deframer.block.yml000066400000000000000000000023661414055407700311520ustar00rootroot00000000000000id: satellites_lilacsat_1_deframer label: LilacSat-1 Deframer category: '[Satellites]/Deframers' parameters: - id: threshold label: Syncword threshold dtype: int default: 0 - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out optional: true - domain: message id: codec2 optional: true templates: imports: import satellites.components.deframers make: satellites.components.deframers.lilacsat_1_deframer(syncword_threshold = ${threshold}, options=${options}) documentation: |- Deframes LilacSat-1 packets The frames use CCSDS Viterbi and synchronous scrambling and have Codec2 digital voice frames interleaved with a KISS stream that contains telemetry packets Input: A stream of soft symbols containing LilacSat-1 frames Output: out port: PDUs with chunks of a KISS stream codec2 port: Codec2 digital voice frames Parameters: Syncword threshold: number of bit errors to allow in syncword detection Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_lucky7_deframer.block.yml000066400000000000000000000020431414055407700303440ustar00rootroot00000000000000id: satellites_lucky7_deframer label: Lucky-7 Deframer category: '[Satellites]/Deframers' parameters: - id: threshold label: Syncword threshold dtype: int default: 0 - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.lucky7_deframer(syncword_threshold = ${threshold}, options=${options}) documentation: |- Deframes Lucky-7 packets The frames are transmitted by a SiLabs Si4463 transceiver with a PN9 scrambler and a CRC-16 Input: A stream of soft symbols containing Lucky-7 packets Output: PDUs with the deframed Lucky-7 packets Parameters: Syncword threshold: number of bit errors to allow in syncword detection Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_mobitex_deframer.block.yml000066400000000000000000000020711414055407700305760ustar00rootroot00000000000000id: satellites_mobitex_deframer label: Mobitex Deframer category: '[Satellites]/Deframers' parameters: - id: nx label: Use Mobitex-NX dtype: bool default: 'False' options: ['True', 'False'] - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.mobitex_deframer(${nx}, options=${options}) documentation: |- Deframes Mobitex or Mobitex-NX packets This block performs frame synchronization, FEC, descrambling and deinterleaving as required by the Mobitex protocol Input: A stream of soft symbols containing Mobitex packets Output: PDUs with the deframed Mobitex packets Parameters: Use Mobitex-NX: Use Mobitex-NX mode instead of Mobitex Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_ngham_deframer.block.yml000066400000000000000000000023161414055407700302230ustar00rootroot00000000000000id: satellites_ngham_deframer label: NGHam Deframer category: '[Satellites]/Deframers' parameters: - id: decode_rs label: Use Reed-Solomon dtype: bool default: 'False' options: ['True', 'False'] - id: threshold label: Syncword threshold dtype: int default: 0 - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.ngham_deframer(decode_rs = ${decode_rs}, syncword_threshold = ${threshold}, options=${options}) documentation: |- Deframes NGHam packets The NGHam protocol is described in https://github.com/skagmo/ngham Input: A stream of soft symbols containing NGHam packets Output: PDUs with the deframed NGHam packets Parameters: Syncword threshold: number of bit errors to allow in syncword detection Use Reed-Solomon: enable or disable Reed-Solomon decoding Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_nusat_deframer.block.yml000066400000000000000000000017671414055407700302740ustar00rootroot00000000000000id: satellites_nusat_deframer label: NuSat Deframer category: '[Satellites]/Deframers' parameters: - id: threshold label: Syncword threshold dtype: int default: 0 - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.nusat_deframer(syncword_threshold = ${threshold}, options=${options}) documentation: |- Deframes Nusat packets The frames use a a (64, 60) Reed-Solomon code and a CRC-8 Input: A stream of soft symbols containing NuSat packets Output: PDUs with the deframed NuSat packets Parameters: Syncword threshold: number of bit errors to allow in syncword detection Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_ops_sat_deframer.block.yml000066400000000000000000000020131414055407700305730ustar00rootroot00000000000000id: satellites_ops_sat_deframer label: OPS-SAT Deframer category: '[Satellites]/Deframers' parameters: - id: threshold label: Syncword threshold dtype: int default: 0 - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.ops_sat_deframer(syncword_threshold = ${threshold}, options=${options}) documentation: |- Deframes OPS-SAT packets The frames are AX.25 with CCSDS Reed-Solomon codewords as payload Input: A stream of soft symbols containing OPS-SAT packets Output: PDUs with the deframed OPS-SAT packets Parameters: Syncword threshold: number of bit errors to allow in syncword detection Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_reaktor_hello_world_deframer.block.yml000066400000000000000000000021671414055407700331760ustar00rootroot00000000000000id: satellites_reaktor_hello_world_deframer label: Reaktor Hello World Deframer category: '[Satellites]/Deframers' parameters: - id: threshold label: Syncword threshold dtype: int default: 0 - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.reaktor_hello_world_deframer(syncword_threshold = ${threshold}, options=${options}) documentation: |- Deframes Reaktor Hello World packets The frames are transmitted by a Texas Intruments CC1125 transceiver with a PN9 scrambler and a CRC-16 Input: A stream of soft symbols containing Reaktor Hello World packets Output: PDUs with the deframed Reaktor Hello World packets Parameters: Syncword threshold: number of bit errors to allow in syncword detection Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_sat_3cat_1_deframer.block.yml000066400000000000000000000021001414055407700310410ustar00rootroot00000000000000id: satellites_sat_3cat_1_deframer label: 3CAT-1 Deframer category: '[Satellites]/Deframers' parameters: - id: threshold label: Syncword threshold dtype: int default: 0 - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.sat_3cat_1_deframer(syncword_threshold = ${threshold}, options=${options}) documentation: |- Deframes 3CAT-1 packets The frames are transmitted by a CC1101 chip with PN9 scrambler and use a (255,223) Reed-Solomon code for the payload Input: A stream of soft symbols containing 3CAT-1 packets Output: PDUs with the deframed 3CAT-1 packets Parameters: Syncword threshold: number of bit errors to allow in syncword detection Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_smogp_ra_deframer.block.yml000066400000000000000000000026261414055407700307440ustar00rootroot00000000000000id: satellites_smogp_ra_deframer label: SMOG-P RA Deframer category: '[Satellites]/Deframers' parameters: - id: frame_size label: Frame size (bytes) dtype: int default: 128 - id: threshold label: Syncword threshold dtype: int default: 0 - id: protocol label: Protocol dtype: enum default: 'False' options: ['False', 'True'] option_labels: ['SMOG-P', 'SMOG-1'] - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.smogp_ra_deframer(frame_size = ${frame_size}, syncword_threshold = ${threshold}, new_protocol=${protocol}, options=${options}) documentation: |- Deframes SMOG-P or SMOG-1 RA FEC frames The frames use a Repeat-Accumulate FEC Input: A stream of soft symbols containing RA frames Output: PDUs with the decoded RA frames Parameters: Frame size: size of the decode frame in bytes Syncword threshold: number of bit errors to allow in syncword detection Protocol: chooses between SMOG-P older protocol and SMOG-1 newer protocol Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_smogp_signalling_deframer.block.yml000066400000000000000000000023641414055407700324700ustar00rootroot00000000000000id: satellites_smogp_signalling_deframer label: SMOG-P Signalling Deframer category: '[Satellites]/Deframers' parameters: - id: threshold label: Syncword threshold dtype: int default: 0 - id: protocol label: Protocol dtype: enum default: 'False' options: ['False', 'True'] option_labels: ['SMOG-P', 'SMOG-1'] - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.smogp_signalling_deframer(syncword_threshold = ${threshold}, new_protocol=${protocol}, options=${options}) documentation: |- Deframes SMOG-P or SMOG-1 signalling frames Input: A stream of soft symbols containing signalling frames Output: PDUs with the deframed signalling frames Parameters: Syncword threshold: number of bit errors to allow in syncword detection Protocol: chooses between SMOG-P older protocol and SMOG-1 newer protocol Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_snet_deframer_component.block.yml000066400000000000000000000017611414055407700321670ustar00rootroot00000000000000id: satellites_snet_deframer_component label: S-NET Deframer category: '[Satellites]/Deframers' parameters: - id: threshold label: Syncword threshold dtype: int default: 0 - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.snet_deframer(syncword_threshold = ${threshold}, options=${options}) documentation: |- Deframes S-NET packets The frames use BCH FEC and interleaving Input: A stream of soft symbols containing S-NET packets Output: PDUs with the deframed S-NET packets Parameters: Syncword threshold: number of bit errors to allow in syncword detection Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_swiatowid_deframer.block.yml000066400000000000000000000020521414055407700311400ustar00rootroot00000000000000id: satellites_swiatowid_deframer label: Swiatowid Image Deframer category: '[Satellites]/Deframers' parameters: - id: threshold label: Syncword threshold dtype: int default: 0 - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.swiatowid_deframer(syncword_threshold = ${threshold}, options=${options}) documentation: |- Deframes Swiatowid image packets The frames use a (58,48) Reed-Solomon code and a CRC-16CCITT Input: A stream of soft symbols containing Swiatowid image packets Output: PDUs with the deframed Swiatowid image packets Parameters: Syncword threshold: number of bit errors to allow in syncword detection Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_tt64_deframer.block.yml000066400000000000000000000020431414055407700277270ustar00rootroot00000000000000id: satellites_tt64_deframer label: TT-64 Deframer category: '[Satellites]/Deframers' parameters: - id: threshold label: Syncword threshold dtype: int default: 0 - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.tt64_deframer(syncword_threshold = ${threshold}, options=${options}) documentation: |- Deframes packets with the TT64 protocol The TT64 protcol is used by QB50 AT03 and uses a Reed-Solomon (64,48) code and CRC16-ARC Input: A stream of soft symbols containing TT64 packets Output: PDUs with the deframed TT64 packets Parameters: Syncword threshold: number of bit errors to allow in syncword detection Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_u482c_deframer.block.yml000066400000000000000000000020161414055407700277730ustar00rootroot00000000000000id: satellites_u482c_deframer label: GOMspace U482C Deframer category: '[Satellites]/Deframers' parameters: - id: threshold label: Syncword threshold dtype: int default: 0 - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.u482c_deframer(syncword_threshold = ${threshold}, options=${options}) documentation: |- Deframes a signal using the protocol of the GOMspace NanoCom U482C Input: A stream of soft symbols containing packets from the U482C transceiver Output: PDUs with the deframed packets Parameters: Syncword threshold: number of bit errors to allow in the detection of the 32 bit syncword Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_ua01_deframer.block.yml000066400000000000000000000016011414055407700276730ustar00rootroot00000000000000id: satellites_ua01_deframer label: UA01 Deframer category: '[Satellites]/Deframers' parameters: - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.ua01_deframer(options=${options}) documentation: |- Deframes UA01 non-conformant AX.25 packets This block performs two layers of NRZ-I decoding, G3RUH descrambling, frame boundary detection, bit de-stuffing, and CRC-16 checking. Input: A stream of soft symbols containing UA01 packets Output: PDUs with the deframed AX.25 packets Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_usp_deframer.block.yml000066400000000000000000000023371414055407700277430ustar00rootroot00000000000000id: satellites_usp_deframer label: USP Deframer category: '[Satellites]/Deframers' parameters: - id: threshold label: Syncword threshold dtype: int default: 0 - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.usp_deframer(syncword_threshold = ${threshold}, options=${options}) documentation: |- Deframes Unified SPUTNIX Protocol (USP) frames This framing is based on the CCSDS concatenated framing, but is optimized for variable frame size and borrows some ideas from DVB-S2. The description of the protocol can be found in https://sputnix.ru/tpl/docs/amateurs/USP%20protocol%20description%20v1.04.pdf Input: A stream of soft symbols containing USP frames Output: PDUs with the deframed USP frames Parameters: Syncword threshold: number of bit errors to allow in syncword detection Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/deframers/satellites_yusat_deframer.block.yml000066400000000000000000000013471414055407700303010ustar00rootroot00000000000000id: satellites_yusat_deframer label: YUSAT Deframer category: '[Satellites]/Deframers' parameters: - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites.components.deframers make: satellites.components.deframers.yusat_deframer(options=${options}) documentation: |- Deframes Yusat ad-hoc packets Input: A stream of soft symbols containing YUSAT packets Output: PDUs with the deframed packets Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/demodulators/000077500000000000000000000000001414055407700217475ustar00rootroot00000000000000gr-satellites-4.4.0/grc/components/demodulators/CMakeLists.txt000066400000000000000000000020251414055407700245060ustar00rootroot00000000000000# Copyright 2011 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. install(FILES satellites_afsk_demodulator.block.yml satellites_bpsk_demodulator.block.yml satellites_fsk_demodulator.block.yml DESTINATION share/gnuradio/grc/blocks ) gr-satellites-4.4.0/grc/components/demodulators/satellites_afsk_demodulator.block.yml000066400000000000000000000034371414055407700313460ustar00rootroot00000000000000id: satellites_afsk_demodulator label: AFSK Demodulator category: '[Satellites]/Demodulators' parameters: - id: baudrate label: Baudrate dtype: float - id: samp_rate label: Sample rate dtype: float default: samp_rate - id: af_carrier label: AF carrier dtype: float - id: deviation label: Deviation dtype: float - id: iq label: IQ input dtype: bool default: False hide: part - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: ${ 'complex' if iq else 'float' } outputs: - domain: stream dtype: float templates: imports: import satellites.components.demodulators make: satellites.components.demodulators.afsk_demodulator(baudrate = ${baudrate}, samp_rate = ${samp_rate}, iq = ${iq}, af_carrier = ${af_carrier}, deviation = ${deviation}, options=${options}) documentation: |- Demodulates an AFSK signal Input: A stream of samples containing an AFSK signal. If real input is used, the signal is expected to be already FM-demodulated. If IQ (complex) input is used, the signal should not be FM-demodulated. Output: The demodulated AFSK soft symbols, normalized to amplitude one Parameters: Baudrate: The FSK baudrate in symbols per second Sample rate: The input sample rate in samples per second AF carrier: The audio frequency in Hz at which the FSK tones are centred Deviation: The separation in Hz between the tones and the AF carrier. A negative value indicates that the low tone represents the symbol 1. IQ input: enables IQ (complex) input Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/demodulators/satellites_bpsk_demodulator.block.yml000066400000000000000000000034511414055407700313550ustar00rootroot00000000000000id: satellites_bpsk_demodulator label: BPSK Demodulator category: '[Satellites]/Demodulators' parameters: - id: baudrate label: Baudrate dtype: float - id: samp_rate label: Sample rate dtype: float default: samp_rate - id: f_offset label: Frequency offset (Hz) dtype: float default: 0 - id: differential label: Differential dtype: bool default: False - id: manchester label: Manchester dtype: bool default: False - id: iq label: IQ input dtype: bool default: False hide: part - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: ${ 'complex' if iq else 'float' } outputs: - domain: stream dtype: float templates: imports: import satellites.components.demodulators make: satellites.components.demodulators.bpsk_demodulator(baudrate = ${baudrate}, samp_rate = ${samp_rate}, f_offset = ${f_offset}, differential = ${differential}, manchester = ${manchester}, iq = ${iq}, options=${options}) documentation: |- Demodulates a BPSK signal Input: A stream of RF samples containing a real or IQ (complex) BPSK signal Output: The demodulated BPSK soft symbols, normalized to amplitude one Parameters: Baudrate: The BPSK baudrate in symbols per second Sample rate: The input sample rate in samples per second Frequency offset: The centre frequency of the BPSK signal in the input in Hz Differential: Enables non-coherent differential demodulation of DBPSK Manchester: Enables Manchester decoding IQ input: enables IQ (complex) input Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/demodulators/satellites_fsk_demodulator.block.yml000066400000000000000000000030301414055407700311720ustar00rootroot00000000000000id: satellites_fsk_demodulator label: FSK Demodulator category: '[Satellites]/Demodulators' parameters: - id: baudrate label: Baudrate dtype: float - id: samp_rate label: Sample rate dtype: float default: samp_rate - id: iq label: IQ input dtype: bool default: False hide: part - id: subaudio label: Subaudio dtype: bool default: False - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: ${ 'complex' if iq else 'float' } outputs: - domain: stream dtype: float templates: imports: import satellites.components.demodulators make: satellites.components.demodulators.fsk_demodulator(baudrate = ${baudrate}, samp_rate = ${samp_rate}, iq = ${iq}, subaudio = ${subaudio}, options=${options}) documentation: |- Demodulates an FSK signal Input: A stream of samples containing an FSK signal. If real input is used, the signal is expected to be already FM-demodulated. If IQ (complex) input is used, the signal should not be FM-demodulated. Output: The demodulated FSK soft symbols, normalized to amplitude one Parameters: Baudrate: The FSK baudrate in symbols per second Sample rate: The input sample rate in samples per second IQ input: enables IQ (complex) input Subaudio: use subaudio demodulation Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/components/transports/000077500000000000000000000000001414055407700214645ustar00rootroot00000000000000gr-satellites-4.4.0/grc/components/transports/CMakeLists.txt000066400000000000000000000017001414055407700242220ustar00rootroot00000000000000# Copyright 2011 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. install(FILES satellites_kiss_transport.block.yml DESTINATION share/gnuradio/grc/blocks ) gr-satellites-4.4.0/grc/components/transports/satellites_kiss_transport.block.yml000066400000000000000000000020621414055407700306160ustar00rootroot00000000000000id: satellites_kiss_transport label: KISS Transport category: '[Satellites]/Transports' parameters: - id: use_control label: Expect control byte dtype: bool default: 'True' options: ['True', 'False'] - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites.components.transports make: satellites.components.transports.kiss_transport(control_byte=${use_control}, options=${options}) documentation: |- Implements fragmentation/defragmentation using the KISS protocol Input: PDUs containing consecutive bytes of a KISS stream Output: PDUs with the packets contained inside the KISS stream Parameters: Expect control byte: specifies whether the KISS stream uses a control byte before the packet payload Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/core/000077500000000000000000000000001414055407700160105ustar00rootroot00000000000000gr-satellites-4.4.0/grc/core/CMakeLists.txt000066400000000000000000000017031414055407700205510ustar00rootroot00000000000000# Copyright 2011 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. install(FILES satellites_satellite_decoder.block.yml DESTINATION share/gnuradio/grc/blocks ) gr-satellites-4.4.0/grc/core/satellites_satellite_decoder.block.yml000066400000000000000000000053741414055407700255410ustar00rootroot00000000000000id: satellites_satellite_decoder label: Satellite decoder category: '[Satellites]/Core' parameters: - id: definition label: Satellite definition dtype: enum options: ['file', 'name', 'norad'] option_labels: ['YAML file', 'Satellite name', 'NORAD ID'] - id: file label: File dtype: file_open hide: ${ 'none' if definition == 'file' else 'all' } - id: name label: Satellite name dtype: string hide: ${ 'none' if definition == 'name' else 'all' } - id: norad label: NORAD ID dtype: int hide: ${ 'none' if definition == 'norad' else 'all' } - id: samp_rate label: Sample Rate dtype: float default: samp_rate - id: iq label: IQ input dtype: bool default: False hide: part - id: options label: Command line options dtype: string default: '""' hide: part inputs: - domain: stream dtype: ${ 'complex' if iq else 'float' } outputs: - domain: message id: out templates: imports: import satellites.core make: | % if context.get('definition')() == 'file': satellites.core.gr_satellites_flowgraph(file = ${file}, samp_rate = ${samp_rate}, grc_block = True, iq = ${iq}, options = ${options}) % else: % if context.get('definition')() == 'name': satellites.core.gr_satellites_flowgraph(name = ${name}, samp_rate = ${samp_rate}, grc_block = True, iq = ${iq}, options = ${options}) % else: % if context.get('definition')() == 'norad': satellites.core.gr_satellites_flowgraph(norad = ${norad}, samp_rate = ${samp_rate}, grc_block = True, iq = ${iq}, options = ${options}) % else: raise ValueError('Unspecified satellite type') % endif % endif % endif documentation: |- This block brings into gnuradio-companion most of the functionality of the gr_satellites command line tool Input: A stream of samples, which can be either real or complex (for IQ input) Output: PDUs with decoded frames The block performs demodulation, deframing and FEC according to the protocols used by the satellite specified. Parameters: Satellite definition: Selects the method to specify the satellite to use File: Path to a YAML file with the SatYAML file describing the satellite, if using the YAML file definition method Satellite name: Name of the satellite, if using the satellite name definition method NORAD ID: NORAD ID of the satellite, if using the NORAD ID definition method Sample Rate: sample rate in sps of the input stream IQ input: selects whether IQ or real input is used Command line options: options to pass down to the block, following the syntax of the gr_satellites command line tool file_format: 1 gr-satellites-4.4.0/grc/hier/000077500000000000000000000000001414055407700160075ustar00rootroot00000000000000gr-satellites-4.4.0/grc/hier/CMakeLists.txt000066400000000000000000000023571414055407700205560ustar00rootroot00000000000000# Copyright 2011 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. install(FILES satellites_ccsds_descrambler.py.block.yml satellites_ccsds_viterbi.py.block.yml satellites_pn9_scrambler.py.block.yml satellites_rms_agc.py.block.yml satellites_si4463_scrambler.py.block.yml satellites_sync_to_pdu.py.block.yml satellites_sync_to_pdu_packed.py.block.yml satellites_sync_to_pdu_soft.py.block.yml DESTINATION share/gnuradio/grc/blocks ) gr-satellites-4.4.0/grc/hier/satellites_ccsds_descrambler.py.block.yml000066400000000000000000000005121414055407700261430ustar00rootroot00000000000000id: satellites_ccsds_descrambler label: CCSDS descrambler category: '[Satellites]/Scrambling' inputs: - label: in domain: message dtype: message outputs: - label: out domain: message dtype: message templates: imports: import satellites.hier make: satellites.hier.ccsds_descrambler() file_format: 1 gr-satellites-4.4.0/grc/hier/satellites_ccsds_viterbi.py.block.yml000066400000000000000000000005061414055407700253270ustar00rootroot00000000000000id: satellites_ccsds_viterbi label: CCSDS/NASA-GSFC Viterbi decoder category: '[Satellites]/FEC' inputs: - label: in dtype: float vlen: 1 outputs: - label: out dtype: byte vlen: 1 templates: imports: import satellites.hier make: satellites.hier.ccsds_viterbi() callbacks: [] file_format: 1 gr-satellites-4.4.0/grc/hier/satellites_pn9_scrambler.py.block.yml000066400000000000000000000005201414055407700252400ustar00rootroot00000000000000id: satellites_pn9_scrambler label: PN9 scrambler category: '[Satellites]/Scrambling' inputs: - label: in domain: message dtype: message outputs: - label: out domain: message dtype: message templates: imports: import satellites.hier make: satellites.hier.pn9_scrambler() callbacks: [] file_format: 1 gr-satellites-4.4.0/grc/hier/satellites_rms_agc.py.block.yml000066400000000000000000000011221414055407700241120ustar00rootroot00000000000000id: satellites_rms_agc label: RMS AGC category: '[Satellites]/Level Controllers' parameters: - id: alpha label: Alpha dtype: real default: 1e-2 hide: none - id: reference label: Reference dtype: real default: '1.0' hide: none inputs: - label: in dtype: complex vlen: 1 outputs: - label: out dtype: complex vlen: 1 templates: imports: import satellites.hier make: satellites.hier.rms_agc(alpha=${ alpha }, reference=${ reference }) callbacks: - set_alpha(${ alpha }) - set_reference(${ reference }) file_format: 1 gr-satellites-4.4.0/grc/hier/satellites_si4463_scrambler.py.block.yml000066400000000000000000000005071414055407700254730ustar00rootroot00000000000000id: satellites_si4463_scrambler label: SI4463 scrambler category: '[Satellites]/Scrambling' inputs: - label: in domain: message dtype: message outputs: - label: out domain: message dtype: message templates: imports: import satellites.hier make: satellites.hier.si4463_scrambler() file_format: 1 gr-satellites-4.4.0/grc/hier/satellites_sync_to_pdu.py.block.yml000066400000000000000000000015021414055407700250270ustar00rootroot00000000000000id: satellites_sync_to_pdu label: Sync and create PDU category: '[Satellites]/Packet Operators' parameters: - id: packlen label: Packet length (bits) dtype: int default: '0' hide: none - id: sync label: Syncword dtype: raw default: '"00011010110011111111110000011101"' hide: none - id: threshold label: Syncword threshold dtype: int default: '4' hide: none inputs: - label: in dtype: byte vlen: 1 outputs: - label: out domain: message dtype: message templates: imports: import satellites.hier make: "satellites.hier.sync_to_pdu(\n packlen=${ packlen },\n sync=${ sync },\n threshold=${\ \ threshold },\n)" callbacks: - set_packlen(${ packlen }) - set_sync(${ sync }) - set_threshold(${ threshold }) file_format: 1 gr-satellites-4.4.0/grc/hier/satellites_sync_to_pdu_packed.py.block.yml000066400000000000000000000015301414055407700263370ustar00rootroot00000000000000id: satellites_sync_to_pdu_packed label: Sync and create packed PDU category: '[Satellites]/Packet Operators' parameters: - id: packlen label: Packet length (bytes) dtype: int default: '0' hide: none - id: sync label: Syncword dtype: raw default: '"00011010110011111111110000011101"' hide: none - id: threshold label: Syncword threshold dtype: int default: '4' hide: none inputs: - label: in dtype: byte vlen: 1 outputs: - label: out domain: message dtype: message templates: imports: import satellites.hier make: "satellites.hier.sync_to_pdu_packed(\n packlen=${ packlen },\n sync=${ sync },\n \ \ threshold=${ threshold },\n)" callbacks: - set_packlen(${ packlen }) - set_sync(${ sync }) - set_threshold(${ threshold }) file_format: 1 gr-satellites-4.4.0/grc/hier/satellites_sync_to_pdu_soft.py.block.yml000066400000000000000000000015221414055407700260640ustar00rootroot00000000000000id: satellites_sync_to_pdu_soft label: Sync and create PDU soft category: '[Satellites]/Packet Operators' parameters: - id: packlen label: Packet length (bits) dtype: int default: '0' hide: none - id: sync label: Syncword dtype: raw default: '"00011010110011111111110000011101"' hide: none - id: threshold label: Syncword threshold dtype: int default: '4' hide: none inputs: - label: in dtype: float vlen: 1 outputs: - label: out domain: message dtype: message templates: imports: import satellites.hier make: "satellites.hier.sync_to_pdu_soft(\n packlen=${ packlen },\n sync=${ sync },\n \ \ threshold=${ threshold },\n)" callbacks: - set_packlen(${ packlen }) - set_sync(${ sync }) - set_threshold(${ threshold }) file_format: 1 gr-satellites-4.4.0/grc/satellites_aausat4_remove_fsm.block.yml000066400000000000000000000005341414055407700247130ustar00rootroot00000000000000id: satellites_aausat4_check_fsm label: AAUSAT-4 remove FSM category: '[Satellites]/Coding' inputs: - domain: message id: in outputs: - domain: message id: short optional: true - domain: message id: long optional: true templates: imports: import satellites make: satellites.aausat4_remove_fsm() file_format: 1 gr-satellites-4.4.0/grc/satellites_adsb_kml.block.yml000066400000000000000000000003731414055407700227040ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_adsb_kml label: GOMX-3 ADS-B to KML category: '[Satellites]/GOMspace' inputs: - domain: message id: in templates: imports: import satellites make: satellites.adsb_kml() file_format: 1 gr-satellites-4.4.0/grc/satellites_ao40_deinterleaver.block.yml000066400000000000000000000004671414055407700246100ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_ao40_deinterleaver label: AO-40 deinterleaver category: '[Satellites]/Coding' inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites make: satellites.ao40_deinterleaver() file_format: 1 gr-satellites-4.4.0/grc/satellites_ao40_syncframe.block.yml000066400000000000000000000006271414055407700237440ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_ao40_syncframe label: AO-40 synchronize frame category: '[Satellites]/Packet' parameters: - id: threshold label: Threshold dtype: int default: '0' inputs: - domain: stream dtype: byte outputs: - domain: message id: out templates: imports: import satellites make: satellites.ao40_syncframe(${threshold}) file_format: 1 gr-satellites-4.4.0/grc/satellites_append_crc32c.block.yml000066400000000000000000000007101414055407700235310ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_append_crc32c label: Append CRC-32C category: '[Satellites]/CSP' parameters: - id: include_header label: Include CSP header dtype: bool options: ['True', 'False'] option_labels: ['Yes', 'No'] inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites make: satellites.append_crc32c(${include_header}) file_format: 1 gr-satellites-4.4.0/grc/satellites_ax100_decode.block.yml000066400000000000000000000006701414055407700232640ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_ax100_decode label: NanoCom AX100 decode category: '[Satellites]/GOMspace' parameters: - id: verbose label: Verbose dtype: bool options: ['True', 'False'] option_labels: ['Yes', 'No'] inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites make: satellites.ax100_decode(${verbose}) file_format: 1 gr-satellites-4.4.0/grc/satellites_beesat_classifier.block.yml000066400000000000000000000010571414055407700245770ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_beesat_classifier label: BEESAT classifier category: '[Satellites]/Telemetry' inputs: - domain: message id: in outputs: - domain: message id: BEESAT-1 optional: true - domain: message id: BEESAT-2 optional: true - domain: message id: BEESAT-4 optional: true - domain: message id: BEESAT-9 optional: true - domain: message id: TECHNOSAT optional: true templates: imports: import satellites make: satellites.beesat_classifier() file_format: 1 gr-satellites-4.4.0/grc/satellites_bme_submitter.block.yml000066400000000000000000000006601414055407700237700ustar00rootroot00000000000000id: satellites_bme_submitter label: BME Telemetry Forwarder category: '[Satellites]/Misc' parameters: - id: user label: User dtype: string - id: password label: Password dtype: string - id: satellite label: Satellite dtype: string inputs: - domain: message id: in templates: imports: import satellites make: satellites.bme_submitter(${user}, ${password}, ${satellite}) file_format: 1 gr-satellites-4.4.0/grc/satellites_cc11xx_packet_crop.block.yml000066400000000000000000000007061414055407700246110ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_cc11xx_packet_crop label: CC11xx packet crop category: '[Satellites]/CC11xx' parameters: - id: use_crc16 label: Use CRC16 dtype: bool options: ['True', 'False'] option_labels: ['Yes', 'No'] inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites make: satellites.cc11xx_packet_crop(${use_crc16}) file_format: 1 gr-satellites-4.4.0/grc/satellites_check_address.block.yml000066400000000000000000000011031414055407700237020ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_check_address label: Check AX.25 address category: '[Satellites]/AX.25' parameters: - id: address label: Address dtype: string - id: direction label: Direction dtype: string options: ['"from"', '"to"'] option_labels: [From, To] inputs: - domain: message id: in outputs: - domain: message id: ok optional: true - domain: message id: fail optional: true templates: imports: import satellites make: satellites.check_address(${address}, ${direction}) file_format: 1 gr-satellites-4.4.0/grc/satellites_check_ao40_uncoded_crc.block.yml000066400000000000000000000010251414055407700253530ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_check_ao40_uncoded_crc label: Check AO-40 CRC (uncoded) category: '[Satellites]/Packet' parameters: - id: verbose label: Verbose dtype: bool options: ['True', 'False'] option_labels: ['Yes', 'No'] inputs: - domain: message id: in outputs: - domain: message id: ok optional: true - domain: message id: fail optional: true templates: imports: import satellites make: satellites.check_ao40_uncoded_crc(${verbose}) file_format: 1 gr-satellites-4.4.0/grc/satellites_check_astrocast_crc.block.yml000066400000000000000000000010141414055407700251100ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_check_astrocast_crc label: Check Astrocast CRC-16 category: '[Satellites]/Packet' parameters: - id: verbose label: Verbose dtype: bool options: ['True', 'False'] option_labels: ['Yes', 'No'] inputs: - domain: message id: in outputs: - domain: message id: ok optional: true - domain: message id: fail optional: true templates: imports: import satellites make: satellites.check_astrocast_crc(${verbose}) file_format: 1 gr-satellites-4.4.0/grc/satellites_check_cc11xx_crc.block.yml000066400000000000000000000010031414055407700242120ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_check_cc11xx_crc label: Check CC11xx CRC-16 category: '[Satellites]/CC11xx' parameters: - id: verbose label: Verbose dtype: bool options: ['True', 'False'] option_labels: ['Yes', 'No'] inputs: - domain: message id: in outputs: - domain: message id: ok optional: true - domain: message id: fail optional: true templates: imports: import satellites make: satellites.check_cc11xx_crc(${verbose}) file_format: 1 gr-satellites-4.4.0/grc/satellites_check_crc.block.yml000066400000000000000000000014121414055407700230270ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_check_crc label: Check CRC category: '[Satellites]/CSP' parameters: - id: include_header label: Include header dtype: bool options: ['True', 'False'] option_labels: ['Yes', 'No'] - id: verbose label: Verbose dtype: bool options: ['True', 'False'] option_labels: ['Yes', 'No'] - id: force label: Force dtype: bool default: 'False' options: ['True', 'False'] option_labels: ['Yes', 'No'] inputs: - domain: message id: in outputs: - domain: message id: ok optional: true - domain: message id: fail optional: true templates: imports: import satellites make: satellites.check_crc(${include_header}, ${verbose}, ${force}) file_format: 1 gr-satellites-4.4.0/grc/satellites_check_crc16_ccitt.block.yml000066400000000000000000000007361414055407700243740ustar00rootroot00000000000000id: satellites_check_crc16_ccitt label: Check CRC-16 CCITT category: '[Satellites]/CRC' parameters: - id: verbose label: Verbose dtype: bool options: ['True', 'False'] option_labels: ['Yes', 'No'] inputs: - domain: message id: in outputs: - domain: message id: ok optional: true - domain: message id: fail optional: true templates: imports: import satellites make: satellites.check_crc16_ccitt(${verbose}) file_format: 1 gr-satellites-4.4.0/grc/satellites_check_crc16_ccitt_false.block.yml000066400000000000000000000007601414055407700255430ustar00rootroot00000000000000id: satellites_check_crc16_ccitt_false label: Check CRC-16 CCITT False category: '[Satellites]/CRC' parameters: - id: verbose label: Verbose dtype: bool options: ['True', 'False'] option_labels: ['Yes', 'No'] inputs: - domain: message id: in outputs: - domain: message id: ok optional: true - domain: message id: fail optional: true templates: imports: import satellites make: satellites.check_crc16_ccitt_false(${verbose}) file_format: 1 gr-satellites-4.4.0/grc/satellites_check_eseo_crc.block.yml000066400000000000000000000007731414055407700240530ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_check_eseo_crc label: Check ESEO CRC-16 category: '[Satellites]/ESEO' parameters: - id: verbose label: Verbose dtype: bool options: ['True', 'False'] option_labels: ['Yes', 'No'] inputs: - domain: message id: in outputs: - domain: message id: ok optional: true - domain: message id: fail optional: true templates: imports: import satellites make: satellites.check_eseo_crc(${verbose}) file_format: 1 gr-satellites-4.4.0/grc/satellites_check_swiatowid_crc.block.yml000066400000000000000000000010111414055407700251140ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_check_swiatowid_crc label: Check Swiatowid CRC-16 category: '[Satellites]/CRC' parameters: - id: verbose label: Verbose dtype: bool options: ['True', 'False'] option_labels: ['Yes', 'No'] inputs: - domain: message id: in outputs: - domain: message id: ok optional: true - domain: message id: fail optional: true templates: imports: import satellites make: satellites.check_swiatowid_crc(${verbose}) file_format: 1 gr-satellites-4.4.0/grc/satellites_check_tt64_crc.block.yml000066400000000000000000000010011414055407700237020ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_check_tt64_crc label: Check TT-64 CRC-16 ARC category: '[Satellites]/TT-64' parameters: - id: verbose label: Verbose dtype: bool options: ['True', 'False'] option_labels: ['Yes', 'No'] inputs: - domain: message id: in outputs: - domain: message id: ok optional: true - domain: message id: fail optional: true templates: imports: import satellites make: satellites.check_tt64_crc(${verbose}) file_format: 1 gr-satellites-4.4.0/grc/satellites_convolutional_encoder.block.yml000066400000000000000000000016051414055407700255220ustar00rootroot00000000000000id: satellites_convolutional_encoder label: Convolutional Encoder category: '[Satellites]/FEC' parameters: - id: constraint label: Constraint length dtype: int default: 7 - id: polynomials label: Polynomials dtype: int_vector default: [79, 109] inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites make: satellites.convolutional_encoder(${constraint}, ${polynomials}) documentation: |- Generic convolutional encoder This convolutional encoder can use any constraint length and polynomials. The input should be a PDU containing the bits to be encoded (unpacked) Output: A PDU with the encoded bits (unpacked) Parameters: Contraint length: Constraint length (k) of the code Polynomials: Polynomials defining the convolutional encoder file_format: 1 gr-satellites-4.4.0/grc/satellites_decode_ra_code.block.yml000066400000000000000000000005001414055407700240170ustar00rootroot00000000000000id: satellites_decode_ra_code label: RA decoder category: '[Satellites]/FEC' parameters: - id: size label: Size dtype: int inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites make: satellites.decode_ra_code(${size}) file_format: 1 gr-satellites-4.4.0/grc/satellites_decode_rs.block.yml000066400000000000000000000014121414055407700230520ustar00rootroot00000000000000id: satellites_decode_rs label: Reed-Solomon Decoder category: '[Satellites]/FEC' parameters: - id: nsym label: Bits per symbol default: 8 dtype: int - id: gfpoly label: Generator polynomial default: 0x11d dtype: int - id: fcr label: First consecutive root default: 1 dtype: int - id: prim label: Primitive element default: 1 dtype: int - id: nroots label: Number of roots default: 1 dtype: int - id: interleave label: Interleave depth default: 1 dtype: int inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites make: satellites.decode_rs(${nsym}, ${gfpoly}, ${fcr}, ${prim}, ${nroots}, ${interleave}) file_format: 1 gr-satellites-4.4.0/grc/satellites_decode_rs_ccsds.block.yml000066400000000000000000000007631414055407700242410ustar00rootroot00000000000000id: satellites_decode_rs_ccsds label: CCSDS Reed-Solomon Decoder category: '[Satellites]/FEC' parameters: - id: basis label: Basis dtype: enum options: ['False', 'True'] option_labels: [Conventional, Dual] - id: interleave label: Interleave depth default: 1 dtype: int inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites make: satellites.decode_rs(${basis}, ${interleave}) file_format: 1 gr-satellites-4.4.0/grc/satellites_descrambler308.block.yml000066400000000000000000000004731414055407700236470ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_descrambler308 label: IESS-308 descrambler category: '[Satellites]/Scrambling' inputs: - domain: stream dtype: byte outputs: - domain: stream dtype: byte templates: imports: import satellites make: satellites.descrambler308() file_format: 1 gr-satellites-4.4.0/grc/satellites_distributed_syncframe_soft.block.yml000066400000000000000000000011761414055407700265560ustar00rootroot00000000000000id: satellites_distributed_syncframe_soft label: Distributed synchronize frame (soft symbols) category: '[Satellites]/Packet' parameters: - id: threshold label: Threshold dtype: int default: '0' - id: syncword label: Syncword dtype: string default: '11111110000111011110010110010010000001000100110001011101011011000' - id: step label: Step dtype: int default: '80' inputs: - domain: stream dtype: float outputs: - domain: message id: out templates: imports: import satellites make: satellites.distributed_syncframe_soft(${threshold}, ${syncword}, ${step}) file_format: 1 gr-satellites-4.4.0/grc/satellites_dstar_one_telemetry_parser.block.yml000066400000000000000000000004501414055407700265500ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_dstar_one_telemetry_parser label: D-STAR One Telemetry Parser category: '[Satellites]/Telemetry' inputs: - domain: message id: in templates: imports: import satellites make: satellites.dstar_one_telemetry_parser() file_format: 1 gr-satellites-4.4.0/grc/satellites_encode_rs.block.yml000066400000000000000000000014121414055407700230640ustar00rootroot00000000000000id: satellites_encode_rs label: Reed-Solomon Encoder category: '[Satellites]/FEC' parameters: - id: nsym label: Bits per symbol default: 8 dtype: int - id: gfpoly label: Generator polynomial default: 0x11d dtype: int - id: fcr label: First consecutive root default: 1 dtype: int - id: prim label: Primitive element default: 1 dtype: int - id: nroots label: Number of roots default: 1 dtype: int - id: interleave label: Interleave depth default: 1 dtype: int inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites make: satellites.encode_rs(${nsym}, ${gfpoly}, ${fcr}, ${prim}, ${nroots}, ${interleave}) file_format: 1 gr-satellites-4.4.0/grc/satellites_encode_rs_ccsds.block.yml000066400000000000000000000007631414055407700242530ustar00rootroot00000000000000id: satellites_encode_rs_ccsds label: CCSDS Reed-Solomon Encoder category: '[Satellites]/FEC' parameters: - id: basis label: Basis dtype: enum options: ['False', 'True'] option_labels: [Conventional, Dual] - id: interleave label: Interleave depth default: 1 dtype: int inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites make: satellites.encode_rs(${basis}, ${interleave}) file_format: 1 gr-satellites-4.4.0/grc/satellites_eseo_line_decoder.block.yml000066400000000000000000000004611414055407700245550ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_eseo_line_decoder label: ESEO Line Decoder category: '[Satellites]/ESEO' inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites make: satellites.eseo_line_decoder() file_format: 1 gr-satellites-4.4.0/grc/satellites_eseo_packet_crop.block.yml000066400000000000000000000007021414055407700244310ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_eseo_packet_crop label: ESEO Packet Crop category: '[Satellites]/ESEO' parameters: - id: drop_rs label: Drop Reed-Solomon dtype: bool options: ['True', 'False'] option_labels: ['Yes', 'No'] inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites make: satellites.eseo_packet_crop(${drop_rs}) file_format: 1 gr-satellites-4.4.0/grc/satellites_fixedlen_tagger.block.yml000066400000000000000000000017171414055407700242620ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_fixedlen_tagger label: Fixed Length Packet Tagger category: '[Satellites]/Packet' parameters: - id: stream_type label: Stream Type dtype: enum options: [complex, float, int, short, byte] option_attributes: t: [numpy.complex64, numpy.float32, numpy.int, numpy.short, numpy.byte] hide: part - id: syncword_tag label: Syncword tag dtype: string default: syncword - id: packetlen_tag label: Packet length tag dtype: string default: packet_len - id: packet_len label: Packet length dtype: int inputs: - domain: stream dtype: ${ stream_type } outputs: - domain: stream dtype: ${ stream_type } templates: imports: |- import satellites import numpy make: satellites.fixedlen_tagger(${syncword_tag}, ${packetlen_tag}, ${packet_len}, ${stream_type.t}) callbacks: - set_packet_len(${packet_len}) file_format: 1 gr-satellites-4.4.0/grc/satellites_funcube_submit.block.yml000066400000000000000000000007711414055407700241440ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_funcube_submit label: FUNcube Telemetry Forwarder category: '[Satellites]/Misc' parameters: - id: url label: URL dtype: string default: http://data.amsat-uk.org - id: site_id label: Site Id dtype: string - id: auth_code label: Auth Code dtype: string inputs: - domain: message id: in templates: imports: import satellites make: satellites.funcube_submit(${url}, ${site_id}, ${auth_code}) file_format: 1 gr-satellites-4.4.0/grc/satellites_hdlc_deframer.block.yml000066400000000000000000000010601414055407700237010ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_hdlc_deframer label: HDLC Deframer category: '[Satellites]/AX.25' parameters: - id: check_fcs label: Check FCS dtype: bool default: 'True' options: ['True', 'False'] - id: max_length label: Maximum frame length (bytes) dtype: int default: '10000' inputs: - domain: stream dtype: byte outputs: - domain: message id: out templates: imports: import satellites make: satellites.hdlc_deframer(check_fcs=${check_fcs}, max_length=${max_length}) file_format: 1 gr-satellites-4.4.0/grc/satellites_hdlc_framer.block.yml000066400000000000000000000010261414055407700233720ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_hdlc_framer label: HDLC Framer category: '[Satellites]/AX.25' parameters: - id: preamble_bytes label: Preamble bytes dtype: int default: '50' - id: postamble_bytes label: Postamble bytes dtype: int default: '7' inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites make: satellites.hdlc_framer(preamble_bytes=${preamble_bytes}, postamble_bytes=${postamble_bytes}) file_format: 1 gr-satellites-4.4.0/grc/satellites_k2sat_deframer.block.yml000066400000000000000000000004521414055407700240170ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_k2sat_deframer label: K2SAT deframer category: '[Satellites]/Packet' inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites make: satellites.k2sat_deframer() file_format: 1 gr-satellites-4.4.0/grc/satellites_kiss_to_pdu.block.yml000066400000000000000000000007271414055407700234560ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_kiss_to_pdu label: KISS to PDU category: '[Satellites]/KISS' parameters: - id: control_byte label: Expect control byte dtype: bool default: 'True' options: ['True', 'False'] option_labels: ['Yes', 'No'] inputs: - domain: stream dtype: byte outputs: - domain: message id: out templates: imports: import satellites make: satellites.kiss_to_pdu(${control_byte}) file_format: 1 gr-satellites-4.4.0/grc/satellites_ks1q_header_remover.block.yml000066400000000000000000000007041414055407700250540ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_ks1q_header_remover label: KS-1Q header remover category: '[Satellites]/Packet' parameters: - id: verbose label: Verbose dtype: bool options: ['True', 'False'] option_labels: ['Yes', 'No'] inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites make: satellites.ks1q_header_remover(${verbose}) file_format: 1 gr-satellites-4.4.0/grc/satellites_lilacsat1_demux.block.yml000066400000000000000000000006631414055407700242110ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_lilacsat1_demux label: LilacSat-1 demuxer category: '[Satellites]/Packet' parameters: - id: tag label: Tag dtype: string default: '"syncword"' inputs: - domain: stream dtype: byte outputs: - domain: message id: frame - domain: message id: codec2 templates: imports: import satellites make: satellites.lilacsat1_demux(${tag}) file_format: 1 gr-satellites-4.4.0/grc/satellites_lilacsat1_gps_kml.block.yml000066400000000000000000000004721414055407700245210ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_lilacsat1_gps_kml label: LilacSat-1 GPS to KML category: '[Satellites]/Telemetry' inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites make: satellites.lilacsat1_gps_kml() file_format: 1 gr-satellites-4.4.0/grc/satellites_manchester_sync.block.yml000066400000000000000000000005711414055407700243150ustar00rootroot00000000000000id: satellites_manchester_sync label: Manchester Sync category: '[Satellites]/Coding' parameters: - id: history label: History dtype: int default: 0 inputs: - domain: stream dtype: complex outputs: - domain: stream dtype: complex templates: imports: import satellites make: satellites.manchester_sync(history = ${history}) file_format: 1 gr-satellites-4.4.0/grc/satellites_matrix_deinterleaver_soft.block.yml000066400000000000000000000012101414055407700263670ustar00rootroot00000000000000id: satellites_matrix_deinterleaver_soft label: Matrix deinterleaver (soft symbols) category: '[Satellites]/Coding' parameters: - id: rows label: Rows dtype: int default: '80' - id: cols label: Columns dtype: int default: '65' - id: output_size label: Output size dtype: int default: '5132' - id: output_skip label: Output skip dtype: int default: '65' inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites make: satellites.matrix_deinterleaver_soft(${rows}, ${cols}, ${output_size}, ${output_skip}) file_format: 1 gr-satellites-4.4.0/grc/satellites_ngham_check_crc.block.yml000066400000000000000000000007341414055407700242070ustar00rootroot00000000000000id: satellites_ngham_check_crc label: Check NGHam CRC-16 category: '[Satellites]/NGHam' parameters: - id: verbose label: Verbose dtype: bool options: ['True', 'False'] option_labels: ['Yes', 'No'] inputs: - domain: message id: in outputs: - domain: message id: ok optional: true - domain: message id: fail optional: true templates: imports: import satellites make: satellites.ngham_check_crc(${verbose}) file_format: 1 gr-satellites-4.4.0/grc/satellites_ngham_packet_crop.block.yml000066400000000000000000000005271414055407700245750ustar00rootroot00000000000000id: satellites_ngham_packet_crop label: NGHam Packet Crop category: '[Satellites]/NGHam' inputs: - domain: message id: in outputs: - domain: message id: rs16 optional: true - domain: message id: rs32 optional: true templates: imports: import satellites make: satellites.ngham_packet_crop() file_format: 1 gr-satellites-4.4.0/grc/satellites_ngham_remove_padding.block.yml000066400000000000000000000004301414055407700252570ustar00rootroot00000000000000id: satellites_ngham_remove_padding label: NGHam Remove Padding category: '[Satellites]/NGHam' inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites make: satellites.ngham_remove_padding() file_format: 1 gr-satellites-4.4.0/grc/satellites_nrzi_decode.block.yml000066400000000000000000000004501414055407700234110ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_nrzi_decode label: NRZI Decode category: '[Satellites]/Coding' inputs: - domain: stream dtype: byte outputs: - domain: stream dtype: byte templates: imports: import satellites make: satellites.nrzi_decode() file_format: 1 gr-satellites-4.4.0/grc/satellites_nrzi_encode.block.yml000066400000000000000000000004501414055407700234230ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_nrzi_encode label: NRZI Encode category: '[Satellites]/Coding' inputs: - domain: stream dtype: byte outputs: - domain: stream dtype: byte templates: imports: import satellites make: satellites.nrzi_encode() file_format: 1 gr-satellites-4.4.0/grc/satellites_nusat_decoder.block.yml000066400000000000000000000004501414055407700237430ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_nusat_decoder label: NuSat FEC Decoder category: '[Satellites]/FEC' inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites make: satellites.nusat_decoder() file_format: 1 gr-satellites-4.4.0/grc/satellites_pdu_add_meta.block.yml000066400000000000000000000011311414055407700235270ustar00rootroot00000000000000id: satellites_pdu_add_meta label: PDU add metadata category: '[Satellites]/PDU' parameters: - id: meta label: Metadata dtype: object inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites make: satellites.pdu_add_meta(${meta}) documentation: |- Adds some metadata to all PDUs passing through The metadata should be a PMT dictionary, that is used to update the dictionary from the PDU car. Output: A PDU with added metadata Parameters: Meta: A PMT dicitionary file_format: 1 gr-satellites-4.4.0/grc/satellites_pdu_head_tail.block.yml000066400000000000000000000022761414055407700237160ustar00rootroot00000000000000id: satellites_pdu_head_tail label: PDU Head/Tail category: '[Satellites]/PDU' parameters: - id: mode label: Mode dtype: enum default: '0' options: ['0', '1', '2', '3'] option_labels: ['Head', 'Head-', 'Tail', 'Tail-'] - id: num label: Number dtype: int default: 0 inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites make: satellites.pdu_head_tail(${mode}, ${num}) documentation: |- Slices some bytes from the beginning or end of a PDU This works in the same manner that the head -c and tail -c UNIX commands, with the difference that the Tail- mode numbers the bytes of the PDU starting by 0, while the UNIX command numbers them starting by 1. Output: A PDU containing a slice of the bytes from the input PDU Parameters: Mode: the mode, which is: - Head to work as head -c num - Head+ to work as head -c +num - Tail to work as tail -c num - Tail- to work as tail -c -num (except for the numbering of the bytes) Num: the number of bytes, as the num parameter of head or tail file_format: 1 gr-satellites-4.4.0/grc/satellites_pdu_length_filter.block.yml000066400000000000000000000015751414055407700246330ustar00rootroot00000000000000id: satellites_pdu_length_filter label: PDU Length Filter category: '[Satellites]/PDU' parameters: - id: min label: Minimum dtype: int default: 0 - id: max label: Maximum dtype: int default: -1 inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites make: satellites.pdu_length_filter(${min}, ${max}) documentation: |- Filters PDUs according to its length PDUs whose length is between the minimum and maximum are passed through. Others are dropped. A maximum length of -1 can be used to represent unlimited maximum length. Output: The PDUs satisfying the lenght constraings Parameters: Minimum: Minimum length. A minimum length of 0 means no constraint. Maximum: Maximum length. A maximum length of -1 means no constraint. file_format: 1 gr-satellites-4.4.0/grc/satellites_pdu_to_kiss.block.yml000066400000000000000000000012511414055407700234470ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_pdu_to_kiss label: PDU to KISS category: '[Satellites]/KISS' parameters: - id: control_byte label: Include control byte dtype: bool default: 'True' options: ['True', 'False'] option_labels: ['Yes', 'No'] - id: include_timestamp label: Include timestamp dtype: bool default: 'False' options: ['True', 'False'] option_labels: ['Yes', 'No'] inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites make: satellites.pdu_to_kiss(control_byte = ${control_byte}, include_timestamp = ${include_timestamp}) file_format: 1 gr-satellites-4.4.0/grc/satellites_print_header.block.yml000066400000000000000000000003731414055407700235740ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_print_header label: Print CSP Header category: '[Satellites]/CSP' inputs: - domain: message id: in templates: imports: import satellites make: satellites.print_header() file_format: 1 gr-satellites-4.4.0/grc/satellites_print_timestamp.block.yml000066400000000000000000000010451414055407700243440ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_print_timestamp label: Print timestamp category: '[Satellites]/Misc' parameters: - id: fmt label: Format dtype: string default: '%Y-%m-%d %H:%M:%S' - id: count label: Packet counter dtype: bool default: 'True' options: ['True', 'False'] option_labels: ['Yes', 'No'] inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites make: satellites.print_timestamp(${fmt}, ${count}) file_format: 1 gr-satellites-4.4.0/grc/satellites_pwsat2_submitter.block.yml000066400000000000000000000007171414055407700244500ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_pwsat2_submitter label: PW-Sat2 Telemetry Forwarder category: '[Satellites]/Misc' parameters: - id: credentials label: Credentials file dtype: string - id: tstamp label: Start of recording UTC (blank for realtime) dtype: string inputs: - domain: message id: in templates: imports: import satellites make: satellites.pwsat2_submitter(${credentials}, ${tstamp}) file_format: 1 gr-satellites-4.4.0/grc/satellites_pwsat2_telemetry_parser.block.yml000066400000000000000000000006141414055407700260140ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_pwsat2_telemetry_parser label: PW-Sat2 Telemetry Parser category: '[Satellites]/Telemetry' parameters: - id: pwsat2_path label: PW-Sat2 FramePayloadDecoder path dtype: string inputs: - domain: message id: in templates: imports: import satellites make: satellites.pwsat2_telemetry_parser(${pwsat2_path}) file_format: 1 gr-satellites-4.4.0/grc/satellites_reflect_bytes.block.yml000066400000000000000000000004451414055407700237620ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_reflect_bytes label: Reflect bytes category: '[Satellites]/Misc' inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites make: satellites.reflect_bytes() file_format: 1 gr-satellites-4.4.0/grc/satellites_snet_classifier.block.yml000066400000000000000000000007501414055407700243040ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_snet_classifier label: SNET classifier category: '[Satellites]/Telemetry' inputs: - domain: message id: in outputs: - domain: message id: SNET-A optional: true - domain: message id: SNET-B optional: true - domain: message id: SNET-C optional: true - domain: message id: SNET-D optional: true templates: imports: import satellites make: satellites.snet_classifier() file_format: 1 gr-satellites-4.4.0/grc/satellites_snet_deframer.block.yml000066400000000000000000000007651414055407700237530ustar00rootroot00000000000000id: satellites_snet_deframer label: S-NET deframer category: '[Satellites]/FEC' parameters: - id: verbose label: Verbose dtype: bool options: ['True', 'False'] option_labels: ['Yes', 'No'] - id: buggy_crc label: Verbose dtype: bool default: True inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites make: satellites.snet_deframer(verbose=${verbose}, buggy_crc = ${buggy_crc}) file_format: 1 gr-satellites-4.4.0/grc/satellites_submit.block.yml000066400000000000000000000013211414055407700224250ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_submit label: Telemetry Forwarder category: '[Satellites]/Misc' parameters: - id: url label: URL dtype: string - id: noradID label: NORAD ID dtype: int - id: source label: Receiver callsign dtype: string - id: latitude label: Latitude (N is +, S is -) dtype: float - id: longitude label: Longitude (W is -, E is +) dtype: float - id: tstamp label: Start of recording UTC (blank for realtime) dtype: string inputs: - domain: message id: in templates: imports: import satellites make: satellites.submit(${url}, ${noradID}, ${source}, ${longitude}, ${latitude}, ${tstamp}) file_format: 1 gr-satellites-4.4.0/grc/satellites_swap_crc.block.yml000066400000000000000000000004401414055407700227240ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_swap_crc label: Swap CRC endianness category: '[Satellites]/CSP' inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites make: satellites.swap_crc() file_format: 1 gr-satellites-4.4.0/grc/satellites_swap_header.block.yml000066400000000000000000000004551414055407700234130ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_swap_header label: Swap CSP header endianness category: '[Satellites]/CSP' inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites make: satellites.swap_header() file_format: 1 gr-satellites-4.4.0/grc/satellites_swiatowid_packet_crop.block.yml000066400000000000000000000004771414055407700255210ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_swiatowid_packet_crop label: Swiatowid packet crop category: '[Satellites]/Packet' inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites make: satellites.swiatowid_packet_crop() file_format: 1 gr-satellites-4.4.0/grc/satellites_swiatowid_packet_split.block.yml000066400000000000000000000005021414055407700256760ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_swiatowid_packet_split label: Swiatowid packet split category: '[Satellites]/Packet' inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites make: satellites.swiatowid_packet_split() file_format: 1 gr-satellites-4.4.0/grc/satellites_sx12xx_check_crc.block.yml000066400000000000000000000012161414055407700242660ustar00rootroot00000000000000id: satellites_sx12xx_check_crc label: Check SX12xx CRC-16 category: '[Satellites]/SX12xx' parameters: - id: verbose label: Verbose dtype: bool options: ['True', 'False'] option_labels: ['Yes', 'No'] - id: initial label: CRC Initial dtype: int default: '0x1D0F' - id: final label: CRC Final XOR dtype: int default: '0xFFFF' inputs: - domain: message id: in outputs: - domain: message id: ok optional: true - domain: message id: fail optional: true templates: imports: import satellites make: satellites.sx12xx_check_crc(${verbose}, ${initial}, ${final}) file_format: 1 gr-satellites-4.4.0/grc/satellites_sx12xx_packet_crop.block.yml000066400000000000000000000006761414055407700246650ustar00rootroot00000000000000id: satellites_sx12xx_packet_crop label: SX12xx packet crop category: '[Satellites]/SX12xx' parameters: - id: crc_len label: CRC length dtype: int default: '2' options: ['0', '1', '2'] option_labels: ['No CRC', 'CRC-8', 'CRC-16'] inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites make: satellites.sx12xx_packet_crop(${crc_len}) file_format: 1 gr-satellites-4.4.0/grc/satellites_u482c_decode.block.yml000066400000000000000000000015741414055407700233040ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_u482c_decode label: NanoCom U482C FEC decode category: '[Satellites]/GOMspace' parameters: - id: verbose label: Verbose dtype: bool options: ['True', 'False'] option_labels: ['Yes', 'No'] - id: viterbi label: Viterbi dtype: int default: '-1' options: ['-1', '0', '1'] option_labels: [Auto, 'No', 'Yes'] - id: scrambler label: Scrambler dtype: int default: '-1' options: ['-1', '0', '1'] option_labels: [Auto, 'No', 'Yes'] - id: rs label: Reed-Solomon dtype: int default: '-1' options: ['-1', '0', '1'] option_labels: [Auto, 'No', 'Yes'] inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites make: satellites.u482c_decode(${verbose}, ${viterbi}, ${scrambler}, ${rs}) file_format: 1 gr-satellites-4.4.0/grc/satellites_varlen_packet_framer.block.yml000066400000000000000000000021231414055407700252750ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_varlen_packet_framer label: Variable Length Packet Framer category: '[Satellites]/Packet' parameters: - id: packetlen_tag label: Packet Length Tag dtype: string default: packet_len - id: length_field_size label: Packet Length Size dtype: int default: '12' - id: endianness label: Endianness dtype: int default: gr.GR_MSB_FIRST options: [gr.GR_MSB_FIRST, gr.GR_LSB_FIRST] option_labels: [MSB, LSB] - id: use_golay label: Golay Encoding dtype: bool default: 'True' options: ['False', 'True'] option_labels: ['Off', 'On'] - id: sync_word label: Sync Word dtype: raw default: () inputs: - domain: stream dtype: byte outputs: - domain: stream dtype: byte templates: imports: import satellites make: satellites.varlen_packet_framer(${packetlen_tag}, ${length_field_size}, ${endianness}, ${use_golay}, ${sync_word}) documentation: |- Prepends the packet length in the tagged stream. Optionally prepends a sync word. file_format: 1 gr-satellites-4.4.0/grc/satellites_varlen_packet_tagger.block.yml000066400000000000000000000023041414055407700252730ustar00rootroot00000000000000# auto-generated by grc.converter id: satellites_varlen_packet_tagger label: Variable Length Packet Tagger category: '[Satellites]/Packet' parameters: - id: syncword_tag label: Syncword Tag dtype: string default: syncword - id: packetlen_tag label: Packet Length Tag dtype: string default: packet_len - id: length_field_size label: Packet Length Size dtype: int default: '12' - id: mtu label: MTU dtype: int default: 255*8 - id: endianness label: Endianness dtype: int default: gr.GR_MSB_FIRST options: [gr.GR_MSB_FIRST, gr.GR_LSB_FIRST] option_labels: [MSB, LSB] - id: use_golay label: Golay Decoding dtype: bool default: 'True' options: ['False', 'True'] option_labels: ['Off', 'On'] inputs: - domain: stream dtype: byte outputs: - domain: stream dtype: byte templates: imports: import satellites make: satellites.varlen_packet_tagger(${syncword_tag}, ${packetlen_tag}, ${length_field_size}, ${mtu}, ${endianness}, ${use_golay}) documentation: |- Converts a stream of data into a tagged stream. The packet length is extracted from a header in the stream. file_format: 1 gr-satellites-4.4.0/grc/satellites_viterbi_decoder.block.yml000066400000000000000000000015371414055407700242640ustar00rootroot00000000000000id: satellites_viterbi_decoder label: Viterbi Decoder category: '[Satellites]/FEC' parameters: - id: constraint label: Constraint length dtype: int default: 7 - id: polynomials label: Polynomials dtype: int_vector default: [79, 109] inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites make: satellites.viterbi_decoder(${constraint}, ${polynomials}) documentation: |- Generic Viterbi decoder This decoder can use any constraint length and polynomials. The input should be a PDU containing the bits to be decoded (unpacked) Output: A PDU with the decoded bits (unpacked) Parameters: Contraint length: Constraint length (k) of the code Polynomials: Polynomials defining the convolutional encoder file_format: 1 gr-satellites-4.4.0/grc/usp/000077500000000000000000000000001414055407700156675ustar00rootroot00000000000000gr-satellites-4.4.0/grc/usp/CMakeLists.txt000066400000000000000000000017451414055407700204360ustar00rootroot00000000000000# Copyright 2011 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. install(FILES satellites_usp_ax25_crop.block.yml satellites_usp_pls_crop.block.yml DESTINATION share/gnuradio/grc/blocks ) gr-satellites-4.4.0/grc/usp/satellites_usp_ax25_crop.block.yml000066400000000000000000000012101414055407700244170ustar00rootroot00000000000000id: satellites_usp_ax.25_crop label: USP AX.25 Crop category: '[Satellites]/USP' inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites.usp make: satellites.usp.usp_pls_crop() documentation: |- Extracts the AX.25 encapsulated in a USP packet This block ignores the ethertype field, reads the length field, and crops and outputs the encapsulated AX.25 frame, cropping extra padding at the end according to the length field. Input: A PDU containing a USP packet Output: A PDU containing the encapsulated AX.25 frame file_format: 1 gr-satellites-4.4.0/grc/usp/satellites_usp_pls_crop.block.yml000066400000000000000000000015421414055407700244460ustar00rootroot00000000000000id: satellites_usp_pls_crop label: USP PLS Crop category: '[Satellites]/USP' inputs: - domain: message id: in outputs: - domain: message id: out templates: imports: import satellites.usp make: satellites.usp.usp_pls_crop() documentation: |- Crops USP frames according to the PLS The PLS is a 64 bit field at the beginning of the frame that indicates the coding and frame size. This block correlates the PLS against the set of all possible PLS's to detect the correct PLS for the frame and then crops out the PLS and the end of the message according to the frame size indicated by the detected PLS. Input: A PDU of soft symbols which contains the PLS followed by the FEC frame Output: The FEC frame; the PLS is removed and the FEC frame is trimmed to the correct size file_format: 1 gr-satellites-4.4.0/include/000077500000000000000000000000001414055407700157305ustar00rootroot00000000000000gr-satellites-4.4.0/include/satellites/000077500000000000000000000000001414055407700201015ustar00rootroot00000000000000gr-satellites-4.4.0/include/satellites/CMakeLists.txt000066400000000000000000000027661414055407700226540ustar00rootroot00000000000000# Copyright 2011,2012 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. ######################################################################## # Install public header files ######################################################################## install(FILES api.h ax100_decode.h convolutional_encoder.h decode_ra_code.h decode_rs.h descrambler308.h distributed_syncframe_soft.h encode_rs.h lilacsat1_demux.h matrix_deinterleaver_soft.h nrzi_decode.h nrzi_encode.h nusat_decoder.h pdu_add_meta.h pdu_head_tail.h pdu_length_filter.h u482c_decode.h varlen_packet_framer.h varlen_packet_tagger.h viterbi_decoder.h DESTINATION include/satellites ) gr-satellites-4.4.0/include/satellites/api.h000066400000000000000000000022071414055407700210240ustar00rootroot00000000000000/* * Copyright 2011 Free Software Foundation, Inc. * * This file was generated by gr_modtool, a tool from the GNU Radio framework * This file is a part of gr-satellites * * GNU Radio is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * GNU Radio is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNU Radio; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, * Boston, MA 02110-1301, USA. */ #ifndef INCLUDED_SATELLITES_API_H #define INCLUDED_SATELLITES_API_H #include #ifdef gnuradio_satellites_EXPORTS #define SATELLITES_API __GR_ATTR_EXPORT #else #define SATELLITES_API __GR_ATTR_IMPORT #endif #endif /* INCLUDED_SATELLITES_API_H */ gr-satellites-4.4.0/include/satellites/ax100_decode.h000066400000000000000000000017631414055407700224150ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2016 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_SATELLITES_AX100_DECODE_H #define INCLUDED_SATELLITES_AX100_DECODE_H #include #include namespace gr { namespace satellites { /*! * \brief <+description of block+> * \ingroup satellites * */ class SATELLITES_API ax100_decode : virtual public gr::block { public: typedef std::shared_ptr sptr; /*! * \brief Return a shared_ptr to a new instance of satellites::ax100_decode. * * To avoid accidental use of raw pointers, satellites::ax100_decode's * constructor is in a private implementation * class. satellites::ax100_decode::make is the public interface for * creating new instances. */ static sptr make(bool verbose); }; } // namespace satellites } // namespace gr #endif /* INCLUDED_SATELLITES_AX100_DECODE_H */ gr-satellites-4.4.0/include/satellites/convolutional_encoder.h000066400000000000000000000021371414055407700246500ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2021 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_SATELLITES_CONVOLUTIONAL_ENCODER_H #define INCLUDED_SATELLITES_CONVOLUTIONAL_ENCODER_H #include #include namespace gr { namespace satellites { /*! * \brief Convolutional encoder * \ingroup satellites * */ class SATELLITES_API convolutional_encoder : virtual public gr::block { public: typedef std::shared_ptr sptr; /*! * \brief Return a shared_ptr to a new instance of satellites::convolutional_encoder. * * To avoid accidental use of raw pointers, satellites::convolutional_encoder's * constructor is in a private implementation * class. satellites::convolutional_encoder::make is the public interface for * creating new instances. */ static sptr make(int constraint, const std::vector& polynomials); }; } // namespace satellites } // namespace gr #endif /* INCLUDED_SATELLITES_CONVOLUTIONAL_ENCODER_H */ gr-satellites-4.4.0/include/satellites/decode_ra_code.h000066400000000000000000000017771414055407700231650ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2019 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_SATELLITES_DECODE_RA_CODE_H #define INCLUDED_SATELLITES_DECODE_RA_CODE_H #include #include namespace gr { namespace satellites { /*! * \brief <+description of block+> * \ingroup satellites * */ class SATELLITES_API decode_ra_code : virtual public gr::block { public: typedef std::shared_ptr sptr; /*! * \brief Return a shared_ptr to a new instance of satellites::decode_ra_code. * * To avoid accidental use of raw pointers, satellites::decode_ra_code's * constructor is in a private implementation * class. satellites::decode_ra_code::make is the public interface for * creating new instances. */ static sptr make(int size); }; } // namespace satellites } // namespace gr #endif /* INCLUDED_SATELLITES_DECODE_RA_CODE_H */ gr-satellites-4.4.0/include/satellites/decode_rs.h000066400000000000000000000026241414055407700222050ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2016 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_SATELLITES_DECODE_RS_H #define INCLUDED_SATELLITES_DECODE_RS_H #include #include namespace gr { namespace satellites { /*! * \brief <+description of block+> * \ingroup satellites * */ class SATELLITES_API decode_rs : virtual public gr::block { public: typedef std::shared_ptr sptr; /*! * \brief Return a shared_ptr to a new instance of satellites::decode_rs. * * To avoid accidental use of raw pointers, satellites::decode_rs's * constructor is in a private implementation * class. satellites::decode_rs::make is the public interface for * creating new instances. */ static sptr make(int dual_basis, int interleave); /*! * \brief Return a shared_ptr to a new instance of satellites::decode_rs. * * To avoid accidental use of raw pointers, satellites::decode_rs's * constructor is in a private implementation * class. satellites::decode_rs::make is the public interface for * creating new instances. */ static sptr make(int symsize, int gfpoly, int fcr, int prim, int nroots, int interleave); }; } // namespace satellites } // namespace gr #endif /* INCLUDED_SATELLITES_DECODE_RS_H */ gr-satellites-4.4.0/include/satellites/descrambler308.h000066400000000000000000000017771414055407700230040ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2018 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_SATELLITES_DESCRAMBLER308_H #define INCLUDED_SATELLITES_DESCRAMBLER308_H #include #include namespace gr { namespace satellites { /*! * \brief <+description of block+> * \ingroup outernet * */ class SATELLITES_API descrambler308 : virtual public gr::sync_block { public: typedef std::shared_ptr sptr; /*! * \brief Return a shared_ptr to a new instance of satellites::descrambler308. * * To avoid accidental use of raw pointers, satellites::descrambler308's * constructor is in a private implementation * class. satellites::descrambler308::make is the public interface for * creating new instances. */ static sptr make(); }; } // namespace satellites } // namespace gr #endif /* INCLUDED_SATELLITES_DESCRAMBLER308_H */ gr-satellites-4.4.0/include/satellites/distributed_syncframe_soft.h000066400000000000000000000022271414055407700257010ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2019 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_SATELLITES_DISTRIBUTED_SYNCFRAME_SOFT_H #define INCLUDED_SATELLITES_DISTRIBUTED_SYNCFRAME_SOFT_H #include #include namespace gr { namespace satellites { /*! * \brief <+description of block+> * \ingroup satellites * */ class SATELLITES_API distributed_syncframe_soft : virtual public gr::sync_block { public: typedef std::shared_ptr sptr; /*! * \brief Return a shared_ptr to a new instance of * satellites::distributed_syncframe_soft. * * To avoid accidental use of raw pointers, satellites::distributed_syncframe_soft's * constructor is in a private implementation * class. satellites::distributed_syncframe_soft::make is the public interface for * creating new instances. */ static sptr make(int threshold, const std::string& syncword, int step); }; } // namespace satellites } // namespace gr #endif /* INCLUDED_SATELLITES_DISTRIBUTED_SYNCFRAME_H */ gr-satellites-4.4.0/include/satellites/encode_rs.h000066400000000000000000000026421414055407700222170ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2018,2020 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_SATELLITES_ENCODE_RS_H #define INCLUDED_SATELLITES_ENCODE_RS_H #include #include namespace gr { namespace satellites { /*! * \brief <+description of block+> * \ingroup satellites * */ class SATELLITES_API encode_rs : virtual public gr::block { public: typedef std::shared_ptr sptr; /*! * \brief Return a shared_ptr to a new instance of satellites::encode_rs. * * To avoid accidental use of raw pointers, satellites::encode_rs's * constructor is in a private implementation * class. satellites::encode_rs::make is the public interface for * creating new instances. */ static sptr make(bool dual_basis, int interleave = 1); /*! * \brief Return a shared_ptr to a new instance of satellites::encode_rs. * * To avoid accidental use of raw pointers, satellites::encode_rs's * constructor is in a private implementation * class. satellites::encode_rs::make is the public interface for * creating new instances. */ static sptr make(int symsize, int gfpoly, int fcr, int prim, int nroots, int interleave = 1); }; } // namespace satellites } // namespace gr #endif /* INCLUDED_SATELLITES_ENCODE_RS_H */ gr-satellites-4.4.0/include/satellites/lilacsat1_demux.h000066400000000000000000000020511414055407700233270ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2017 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_SATELLITES_LILACSAT1_DEMUX_H #define INCLUDED_SATELLITES_LILACSAT1_DEMUX_H #include #include #include namespace gr { namespace satellites { /*! * \brief <+description of block+> * \ingroup satellites * */ class SATELLITES_API lilacsat1_demux : virtual public gr::sync_block { public: typedef std::shared_ptr sptr; /*! * \brief Return a shared_ptr to a new instance of satellites::lilacsat1_demux. * * To avoid accidental use of raw pointers, satellits::lilacsat1_demux's * constructor is in a private implementation * class. satellites::lilacsat1_demux::make is the public interface for * creating new instances. */ static sptr make(std::string tag); }; } // namespace satellites } // namespace gr #endif /* INCLUDED_SATELLITES_LILACSAT1_DEMUX_H */ gr-satellites-4.4.0/include/satellites/matrix_deinterleaver_soft.h000066400000000000000000000022121414055407700255170ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2019 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_SATELLITES_MATRIX_DEINTERLEAVER_SOFT_H #define INCLUDED_SATELLITES_MATRIX_DEINTERLEAVER_SOFT_H #include #include namespace gr { namespace satellites { /*! * \brief <+description of block+> * \ingroup satellites * */ class SATELLITES_API matrix_deinterleaver_soft : virtual public gr::block { public: typedef std::shared_ptr sptr; /*! * \brief Return a shared_ptr to a new instance of * satellites::matrix_deinterleaver_soft. * * To avoid accidental use of raw pointers, satellites::matrix_deinterleaver_soft's * constructor is in a private implementation * class. satellites::matrix_deinterleaver_soft::make is the public interface for * creating new instances. */ static sptr make(int rows, int cols, int output_size, int output_skip); }; } // namespace satellites } // namespace gr #endif /* INCLUDED_SATELLITES_MATRIX_DEINTERLEAVER_SOFT_H */ gr-satellites-4.4.0/include/satellites/nrzi_decode.h000066400000000000000000000017341414055407700225440ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2020 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_SATELLITES_NRZI_DECODE_H #define INCLUDED_SATELLITES_NRZI_DECODE_H #include #include namespace gr { namespace satellites { /*! * \brief NRZI decode * \ingroup satellites * */ class SATELLITES_API nrzi_decode : virtual public gr::sync_block { public: typedef std::shared_ptr sptr; /*! * \brief Return a shared_ptr to a new instance of satellites::nrzi_decode. * * To avoid accidental use of raw pointers, satellites::nrzi_decode's * constructor is in a private implementation * class. satellites::nrzi_decode::make is the public interface for * creating new instances. */ static sptr make(); }; } // namespace satellites } // namespace gr #endif /* INCLUDED_SATELLITES_NRZI_DECODE_H */ gr-satellites-4.4.0/include/satellites/nrzi_encode.h000066400000000000000000000017341414055407700225560ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2020 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_SATELLITES_NRZI_ENCODE_H #define INCLUDED_SATELLITES_NRZI_ENCODE_H #include #include namespace gr { namespace satellites { /*! * \brief NRZI encode * \ingroup satellites * */ class SATELLITES_API nrzi_encode : virtual public gr::sync_block { public: typedef std::shared_ptr sptr; /*! * \brief Return a shared_ptr to a new instance of satellites::nrzi_encode. * * To avoid accidental use of raw pointers, satellites::nrzi_encode's * constructor is in a private implementation * class. satellites::nrzi_encode::make is the public interface for * creating new instances. */ static sptr make(); }; } // namespace satellites } // namespace gr #endif /* INCLUDED_SATELLITES_NRZI_ENCODE_H */ gr-satellites-4.4.0/include/satellites/nusat_decoder.h000066400000000000000000000017571414055407700231030ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2017 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_SATELLITES_NUSAT_DECODER_H #define INCLUDED_SATELLITES_NUSAT_DECODER_H #include #include namespace gr { namespace satellites { /*! * \brief <+description of block+> * \ingroup satellites * */ class SATELLITES_API nusat_decoder : virtual public gr::block { public: typedef std::shared_ptr sptr; /*! * \brief Return a shared_ptr to a new instance of satellites::nusat_decoder. * * To avoid accidental use of raw pointers, satellites::nusat_decoder's * constructor is in a private implementation * class. satellites::nusat_decoder::make is the public interface for * creating new instances. */ static sptr make(); }; } // namespace satellites } // namespace gr #endif /* INCLUDED_SATELLITES_NUSAT_DECODER_H */ gr-satellites-4.4.0/include/satellites/pdu_add_meta.h000066400000000000000000000017661414055407700226720ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2020 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_SATELLITES_PDU_ADD_META_H #define INCLUDED_SATELLITES_PDU_ADD_META_H #include #include namespace gr { namespace satellites { /*! * \brief <+description of block+> * \ingroup satellites * */ class SATELLITES_API pdu_add_meta : virtual public gr::block { public: typedef std::shared_ptr sptr; /*! * \brief Return a shared_ptr to a new instance of satellites::pdu_add_meta. * * To avoid accidental use of raw pointers, satellites::pdu_add_meta's * constructor is in a private implementation * class. satellites::pdu_add_meta::make is the public interface for * creating new instances. */ static sptr make(pmt::pmt_t meta); }; } // namespace satellites } // namespace gr #endif /* INCLUDED_SATELLITES_PDU_ADD_META_H */ gr-satellites-4.4.0/include/satellites/pdu_head_tail.h000066400000000000000000000020031414055407700230270ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2020 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_SATELLITES_PDU_HEAD_TAIL_H #define INCLUDED_SATELLITES_PDU_HEAD_TAIL_H #include #include namespace gr { namespace satellites { /*! * \brief <+description of block+> * \ingroup satellites * */ class SATELLITES_API pdu_head_tail : virtual public gr::block { public: typedef std::shared_ptr sptr; /*! * \brief Return a shared_ptr to a new instance of satellites::pdu_head_tail. * * To avoid accidental use of raw pointers, satellites::pdu_head_tail's * constructor is in a private implementation * class. satellites::pdu_head_tail::make is the public interface for * creating new instances. */ static sptr make(int mode, size_t num); }; } // namespace satellites } // namespace gr #endif /* INCLUDED_SATELLITES_PDU_HEAD_TAIL_H */ gr-satellites-4.4.0/include/satellites/pdu_length_filter.h000066400000000000000000000020371414055407700237520ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2021 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_SATELLITES_PDU_LENGTH_FILTER_H #define INCLUDED_SATELLITES_PDU_LENGTH_FILTER_H #include #include namespace gr { namespace satellites { /*! * \brief <+description of block+> * \ingroup satellites * */ class SATELLITES_API pdu_length_filter : virtual public gr::block { public: typedef std::shared_ptr sptr; /*! * \brief Return a shared_ptr to a new instance of satellites::pdu_length_filter. * * To avoid accidental use of raw pointers, satellites::pdu_length_filter's * constructor is in a private implementation * class. satellites::pdu_length_filter::make is the public interface for * creating new instances. */ static sptr make(int min, int max); }; } // namespace satellites } // namespace gr #endif /* INCLUDED_SATELLITES_PDU_LENGTH_FILTER_H */ gr-satellites-4.4.0/include/satellites/u482c_decode.h000066400000000000000000000020271414055407700224230ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2016 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_SATELLITES_U482C_DECODE_H #define INCLUDED_SATELLITES_U482C_DECODE_H #include #include namespace gr { namespace satellites { /*! * \brief <+description of block+> * \ingroup satellites * */ class SATELLITES_API u482c_decode : virtual public gr::block { public: typedef std::shared_ptr sptr; /*! * \brief Return a shared_ptr to a new instance of satellites::u482c_decode. * * To avoid accidental use of raw pointers, satellites::u482c_decode's * constructor is in a private implementation * class. satellites::u482c_decode::make is the public interface for * creating new instances. */ static sptr make(bool verbose, int viterbi, int scrambler, int rs); }; } // namespace satellites } // namespace gr #endif /* INCLUDED_SATELLITES_U482C_DECODE_H */ gr-satellites-4.4.0/include/satellites/varlen_packet_framer.h000066400000000000000000000027311414055407700244270ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2017 Glenn Richardson * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_VARLEN_PACKET_FRAMER_H #define INCLUDED_VARLEN_PACKET_FRAMER_H #include #include #include #include namespace gr { namespace satellites { /*! * \brief insert a packet length field into a tagged stream * \ingroup satellites * * \details * input: stream of bits (unpacked bytes) with packet_len tags * output: a tagged stream of bits containing field length + packet bits * * This block prepends a packet length field into a tagged stream. * */ class SATELLITES_API varlen_packet_framer : virtual public gr::block { public: typedef std::shared_ptr sptr; /*! * \param packet_key tag key used to mark packets * \param length_field_size size of the packet length header * \param endianness header inserted msb or lsb * \param use_golay compute 24-bit golay header from 12-bit length * \param sync_word optional pre-header sync pattern */ static sptr make(const std::string& packet_key, int length_field_size, endianness_t endianness, bool use_golay, const std::vector sync_word); }; } // namespace satellites } // namespace gr #endif gr-satellites-4.4.0/include/satellites/varlen_packet_tagger.h000066400000000000000000000030201414055407700244140ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2017 Glenn Richardson * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_VARLEN_PACKET_TAGGER_H #define INCLUDED_VARLEN_PACKET_TAGGER_H #include #include #include #include namespace gr { namespace satellites { /*! * \brief Examine input stream for sync tags and extract packet length. * \ingroup satellites * * \details * input: stream of bits (unpacked bytes) with sync tags * output: a tagged stream of bits containing just the received packets * * This block uses the sync tag on the input stream to identify * the header of packets. The length of each packet is extracted * from the stream's header. The length of the header field and * the endianness are parameters. * */ class SATELLITES_API varlen_packet_tagger : virtual public gr::block { public: typedef std::shared_ptr sptr; /*! * \param sync_key * \param packet_key * \param length_field_size * \param max_packet_size * \param endianness * \param use_golay For 24-bit golay headers */ static sptr make(const std::string& sync_key, const std::string& packet_key, int length_field_size, int max_packet_size, endianness_t endianness, bool use_golay); }; } // namespace satellites } // namespace gr #endif gr-satellites-4.4.0/include/satellites/viterbi_decoder.h000066400000000000000000000020511414055407700234010ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2021 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_SATELLITES_VITERBI_DECODER_H #define INCLUDED_SATELLITES_VITERBI_DECODER_H #include #include namespace gr { namespace satellites { /*! * \brief Viterbi decoder * \ingroup satellites * */ class SATELLITES_API viterbi_decoder : virtual public gr::block { public: typedef std::shared_ptr sptr; /*! * \brief Return a shared_ptr to a new instance of satellites::viterbi_decoder. * * To avoid accidental use of raw pointers, satellites::viterbi_decoder's * constructor is in a private implementation * class. satellites::viterbi_decoder::make is the public interface for * creating new instances. */ static sptr make(int constraint, const std::vector& polynomials); }; } // namespace satellites } // namespace gr #endif /* INCLUDED_SATELLITES_VITERBI_DECODER_H */ gr-satellites-4.4.0/lib/000077500000000000000000000000001414055407700150535ustar00rootroot00000000000000gr-satellites-4.4.0/lib/CMakeLists.txt000066400000000000000000000113461414055407700176200ustar00rootroot00000000000000# Copyright 2011,2012,2016,2018,2019 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. ######################################################################## # Setup library ######################################################################## include(GrPlatform) #define LIB_SUFFIX if(MSVC) # compile the golay24.c as C++ due to the lack of complex.h under MSVC # this is required by Volk, so we do the same trick as in Volk set_source_files_properties(golay24.c PROPERTIES LANGUAGE CXX) endif() # This workaround is taken from GNU Radio # gr-fec/lib/reed-solomon/CMakeLists.txt #MSVC workaround: we can't have dynamically sized arrays. #So ifdef a max array bounds that is larger than NN and NROOTS #Its a bit of a hack, but if you look at the code, its so full of ifdefs, #and lacks optimization where it should be pre-allocating these arrays. if(MSVC) set_source_files_properties( ${CMAKE_CURRENT_SOURCE_DIR}/libfec/decode_rs_char.c PROPERTIES COMPILE_DEFINITIONS "MAX_ARRAY=256;" ) endif(MSVC) list(APPEND satellites_sources ax100_decode_impl.cc convolutional_encoder_impl.cc decode_ra_code_impl.cc decode_rs_impl.cc descrambler308_impl.cc distributed_syncframe_soft_impl.cc encode_rs_impl.cc golay24.c lilacsat1_demux_impl.cc matrix_deinterleaver_soft_impl.cc nrzi_decode_impl.cc nrzi_encode_impl.cc nusat_decoder_impl.cc pdu_add_meta_impl.cc pdu_head_tail_impl.cc pdu_length_filter_impl.cc randomizer.c u482c_decode_impl.cc varlen_packet_framer_impl.cc varlen_packet_tagger_impl.cc viterbi.c viterbi_decoder_impl.cc libfec/decode_rs_8.c libfec/decode_rs_ccsds.c libfec/decode_rs_char.c libfec/encode_rs_8.c libfec/encode_rs_ccsds.c libfec/encode_rs_char.c libfec/taltab.c libfec/ccsds.c libfec/init_rs_char.c radecoder/ra_config.c radecoder/ra_decoder_gen.c radecoder/ra_lfsr.c radecoder/ra_encoder.c viterbi/viterbi.cc ) set(satellites_sources "${satellites_sources}" PARENT_SCOPE) if(NOT satellites_sources) MESSAGE(STATUS "No C++ sources... skipping lib/") return() endif(NOT satellites_sources) add_library(gnuradio-satellites SHARED ${satellites_sources}) target_link_libraries(gnuradio-satellites gnuradio::gnuradio-runtime) target_include_directories(gnuradio-satellites PUBLIC $ PUBLIC $ ) set_target_properties(gnuradio-satellites PROPERTIES DEFINE_SYMBOL "gnuradio_satellites_EXPORTS") if(APPLE) set_target_properties(gnuradio-satellites PROPERTIES INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib" ) endif(APPLE) ######################################################################## # Install built library files ######################################################################## include(GrMiscUtils) GR_LIBRARY_FOO(gnuradio-satellites) ######################################################################## # Print summary ######################################################################## message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}") message(STATUS "Building for version: ${VERSION} / ${LIBVER}") ######################################################################## # Build and register unit test ######################################################################## include(GrTest) # If your unit tests require special include paths, add them here #include_directories() # List all files that contain Boost.UTF unit tests here list(APPEND test_satellites_sources ) # Anything we need to link to for the unit tests go here list(APPEND GR_TEST_TARGET_DEPS gnuradio-satellites) if(NOT test_satellites_sources) MESSAGE(STATUS "No C++ unit tests... skipping") return() endif(NOT test_satellites_sources) foreach(qa_file ${test_satellites_sources}) GR_ADD_CPP_TEST("satellites_${qa_file}" ${CMAKE_CURRENT_SOURCE_DIR}/${qa_file} ) endforeach(qa_file) gr-satellites-4.4.0/lib/ax100_decode_impl.cc000066400000000000000000000046341414055407700205460ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2016,2020 Daniel Estevez . * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include "ax100_decode_impl.h" #include extern "C" { #include "libfec/fec.h" } namespace gr { namespace satellites { ax100_decode::sptr ax100_decode::make(bool verbose) { return gnuradio::get_initial_sptr(new ax100_decode_impl(verbose)); } /* * The private constructor */ ax100_decode_impl::ax100_decode_impl(bool verbose) : gr::block("ax100_decode", gr::io_signature::make(0, 0, 0), gr::io_signature::make(0, 0, 0)), d_verbose(verbose) { message_port_register_out(pmt::mp("out")); message_port_register_in(pmt::mp("in")); set_msg_handler(pmt::mp("in"), [this](pmt::pmt_t msg) { this->msg_handler(msg); }); } /* * Our virtual destructor. */ ax100_decode_impl::~ax100_decode_impl() {} void ax100_decode_impl::forecast(int noutput_items, gr_vector_int& ninput_items_required) { } int ax100_decode_impl::general_work(int noutput_items, gr_vector_int& ninput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items) { return 0; } void ax100_decode_impl::msg_handler(pmt::pmt_t pmt_msg) { size_t length(0); auto msg = pmt::u8vector_elements(pmt::cdr(pmt_msg), length); length = std::min(length, d_data.size()); std::memcpy(d_data.data(), msg, length); auto rs_res = decode_rs_8(&d_data[1], NULL, 0, 255 - d_data[0] + 1); // Send via GNUradio message if RS ok if (rs_res >= 0) { // 32 RS parity symbols, 1 includes the length byte auto frame_len = d_data[0] - 32 - 1; if (frame_len < 0) { return; } if (d_verbose) { std::printf( "RS decode OK. Length: %d. Bytes corrected: %d.\n", frame_len, rs_res); } // Send by GNUradio message message_port_pub( pmt::mp("out"), pmt::cons(pmt::PMT_NIL, pmt::init_u8vector(frame_len, &d_data[1]))); } else if (d_verbose) { std::printf("RS decode failed.\n"); } } } /* namespace satellites */ } /* namespace gr */ gr-satellites-4.4.0/lib/ax100_decode_impl.h000066400000000000000000000020141414055407700203760ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2016,2020 Daniel Estevez . * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_SATELLITES_AX100_DECODE_IMPL_H #define INCLUDED_SATELLITES_AX100_DECODE_IMPL_H #include #include namespace gr { namespace satellites { class ax100_decode_impl : public ax100_decode { private: std::array d_data; const bool d_verbose; public: ax100_decode_impl(bool verbose); ~ax100_decode_impl(); // Where all the action really happens void forecast(int noutput_items, gr_vector_int& ninput_items_required); int general_work(int noutput_items, gr_vector_int& ninput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items); void msg_handler(pmt::pmt_t pmt_msg); }; } // namespace satellites } // namespace gr #endif /* INCLUDED_SATELLITES_AX100_DECODE_IMPL_H */ gr-satellites-4.4.0/lib/convolutional_encoder_impl.cc000066400000000000000000000040611414055407700227770ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2021 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "convolutional_encoder_impl.h" #include #include #include namespace gr { namespace satellites { convolutional_encoder::sptr convolutional_encoder::make(int constraint, const std::vector& polynomials) { return gnuradio::get_initial_sptr( new convolutional_encoder_impl(constraint, polynomials)); } /* * The private constructor */ convolutional_encoder_impl::convolutional_encoder_impl( int constraint, const std::vector& polynomials) : gr::block("convolutional_encoder", gr::io_signature::make(0, 0, 0), gr::io_signature::make(0, 0, 0)), d_codec(constraint, polynomials) { message_port_register_out(pmt::mp("out")); message_port_register_in(pmt::mp("in")); set_msg_handler(pmt::mp("in"), [this](pmt::pmt_t msg) { this->msg_handler(msg); }); } /* * Our virtual destructor. */ convolutional_encoder_impl::~convolutional_encoder_impl() {} int convolutional_encoder_impl::general_work(int noutput_items, gr_vector_int& ninput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items) { return 0; } void convolutional_encoder_impl::msg_handler(pmt::pmt_t pmt_msg) { std::vector msg = pmt::u8vector_elements(pmt::cdr(pmt_msg)); std::string bits; for (auto b : msg) { bits.push_back(b ? '1' : '0'); } std::string outbits = d_codec.Encode(bits); std::vector out; for (auto b : outbits) { out.push_back(b == '1'); } message_port_pub(pmt::mp("out"), pmt::cons(pmt::car(pmt_msg), pmt::init_u8vector(out.size(), out))); return; } } /* namespace satellites */ } /* namespace gr */ gr-satellites-4.4.0/lib/convolutional_encoder_impl.h000066400000000000000000000017451414055407700226470ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2021 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_SATELLITES_CONVOLUTIONAL_ENCODER_IMPL_H #define INCLUDED_SATELLITES_CONVOLUTIONAL_ENCODER_IMPL_H #include "viterbi/viterbi.h" #include namespace gr { namespace satellites { class convolutional_encoder_impl : public convolutional_encoder { private: ViterbiCodec d_codec; public: convolutional_encoder_impl(int constraint, const std::vector& polynomials); ~convolutional_encoder_impl(); int general_work(int noutput_items, gr_vector_int& ninput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items); void msg_handler(pmt::pmt_t pmt_msg); }; } // namespace satellites } // namespace gr #endif /* INCLUDED_SATELLITES_CONVOLUTIONAL_ENCODER_IMPL_H */ gr-satellites-4.4.0/lib/decode_ra_code_impl.cc000066400000000000000000000062441414055407700213100ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2019,2020 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include "decode_ra_code_impl.h" #include #include extern "C" { #include "radecoder/ra_decoder_gen.h" #include "radecoder/ra_encoder.h" } namespace gr { namespace satellites { decode_ra_code::sptr decode_ra_code::make(int size) { return gnuradio::get_initial_sptr(new decode_ra_code_impl(size)); } /* * The private constructor */ decode_ra_code_impl::decode_ra_code_impl(int size) : gr::block("decode_ra_code", gr::io_signature::make(0, 0, 0), gr::io_signature::make(0, 0, 0)), d_size(size) { d_ra_context = std::unique_ptr(new struct ra_context); d_ra_out.reserve(d_size); message_port_register_out(pmt::mp("out")); message_port_register_in(pmt::mp("in")); set_msg_handler(pmt::mp("in"), [this](pmt::pmt_t msg) { this->msg_handler(msg); }); } /* * Our virtual destructor. */ decode_ra_code_impl::~decode_ra_code_impl() {} void decode_ra_code_impl::forecast(int noutput_items, gr_vector_int& ninput_items_required) { } int decode_ra_code_impl::general_work(int noutput_items, gr_vector_int& ninput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items) { return 0; } void decode_ra_code_impl::msg_handler(pmt::pmt_t pmt_msg) { size_t length(0); auto soft_bits = pmt::f32vector_elements(pmt::cdr(pmt_msg), length); ra_length_init(d_ra_context.get(), d_size / 2); const auto ra_code_length = d_ra_context->ra_code_length; if (length != ra_code_length * RA_BITCOUNT) { fprintf(stderr, "message length: %ld, expected: %d\n", (long)length, ra_code_length * RA_BITCOUNT); GR_LOG_ERROR(d_logger, "Invalid message length"); return; } d_ra_in.resize(ra_code_length * RA_BITCOUNT); // Weird bit organization: see radecoder/ra_decoder.c for (int i = 0; i < ra_code_length * RA_BITCOUNT; i += 8) { for (int j = 0; j < 8; j++) { d_ra_in[i + j] = -soft_bits[i + 7 - j]; } } ra_decoder_gen(d_ra_context.get(), d_ra_in.data(), (ra_word_t*)d_ra_out.data(), 20); d_ra_recode.resize(ra_code_length); ra_encoder(d_ra_context.get(), (const ra_word_t*)d_ra_out.data(), d_ra_recode.data()); unsigned errors = 0; for (int i = 0; i < ra_code_length; i++) { for (int j = 0; j < RA_BITCOUNT; j++) { bool bit = (d_ra_recode[i] & (1 << j)) != 0; errors += (d_ra_in[i * RA_BITCOUNT + j] >= 0) ? bit : !bit; } } if ((float)errors / (ra_code_length * RA_BITCOUNT) < d_error_threshold) { message_port_pub( pmt::mp("out"), pmt::cons(pmt::PMT_NIL, pmt::init_u8vector(d_size, d_ra_out.data()))); } } } /* namespace satellites */ } /* namespace gr */ gr-satellites-4.4.0/lib/decode_ra_code_impl.h000066400000000000000000000023761414055407700211540ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2017 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_SATELLITES_DECODE_RA_CODE_IMPL_H #define INCLUDED_SATELLITES_DECODE_RA_CODE_IMPL_H #include #include #include extern "C" { #include "radecoder/ra_config.h" } namespace gr { namespace satellites { class decode_ra_code_impl : public decode_ra_code { private: constexpr static float d_error_threshold = 0.35f; int d_size; std::unique_ptr d_ra_context; std::vector d_ra_in; std::vector d_ra_out; std::vector d_ra_recode; public: decode_ra_code_impl(int size); ~decode_ra_code_impl(); // Where all the action really happens void forecast(int noutput_items, gr_vector_int& ninput_items_required); int general_work(int noutput_items, gr_vector_int& ninput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items); void msg_handler(pmt::pmt_t pmt_msg); }; } // namespace satellites } // namespace gr #endif /* INCLUDED_SATELLITES_DECODE_RA_CODE_IMPL_H */ gr-satellites-4.4.0/lib/decode_rs_impl.cc000066400000000000000000000120251414055407700203320ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2016,2020 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "decode_rs_impl.h" #include #include #include #include extern "C" { #include "libfec/fec.h" } namespace gr { namespace satellites { decode_rs::sptr decode_rs::make(int dual_basis, int interleave) { return gnuradio::get_initial_sptr(new decode_rs_impl(dual_basis, interleave)); } decode_rs::sptr decode_rs::make(int symsize, int gfpoly, int fcr, int prim, int nroots, int interleave) { return gnuradio::get_initial_sptr( new decode_rs_impl(symsize, gfpoly, fcr, prim, nroots, interleave)); } /* * The private constructor */ decode_rs_impl::decode_rs_impl(bool dual_basis, int interleave) : gr::block( "decode_rs", gr::io_signature::make(0, 0, 0), gr::io_signature::make(0, 0, 0)), d_interleave(interleave) { if (dual_basis) { d_decode_rs = [](uint8_t* data) { return decode_rs_ccsds(data, NULL, 0, 0); }; } else { d_decode_rs = [](uint8_t* data) { return decode_rs_8(data, NULL, 0, 0); }; } d_rs_codeword.resize(d_ccsds_nn); d_nroots = d_ccsds_nroots; check_interleave(); set_message_ports(); } /* * The private constructor */ decode_rs_impl::decode_rs_impl( int symsize, int gfpoly, int fcr, int prim, int nroots, int interleave) : gr::block( "decode_rs", gr::io_signature::make(0, 0, 0), gr::io_signature::make(0, 0, 0)), d_interleave(interleave) { d_rs_p = init_rs_char(symsize, gfpoly, fcr, prim, nroots, 0); if (!d_rs_p) { throw std::runtime_error("Unable to initialize Reed-Solomon definition"); } d_decode_rs = [this](uint8_t* data) { return decode_rs_char(d_rs_p, data, 0, 0); }; d_rs_codeword.resize((1U << symsize) - 1); d_nroots = nroots; check_interleave(); set_message_ports(); } void decode_rs_impl::check_interleave() { if (d_interleave <= 0) { throw std::runtime_error( boost::str(boost::format("Invalid interleave value = %d") % d_interleave)); } } void decode_rs_impl::set_message_ports() { message_port_register_out(pmt::mp("out")); message_port_register_in(pmt::mp("in")); set_msg_handler(pmt::mp("in"), [this](pmt::pmt_t msg) { this->msg_handler(msg); }); } /* * Our virtual destructor. */ decode_rs_impl::~decode_rs_impl() { if (d_rs_p) { free_rs_char(d_rs_p); } } void decode_rs_impl::forecast(int noutput_items, gr_vector_int& ninput_items_required) {} int decode_rs_impl::general_work(int noutput_items, gr_vector_int& ninput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items) { return 0; } void decode_rs_impl::msg_handler(pmt::pmt_t pmt_msg) { auto msg = pmt::u8vector_elements(pmt::cdr(pmt_msg)); int errors = 0; if (msg.size() % d_interleave != 0) { GR_LOG_WARN(d_logger, boost::format("Reed-Solomon message size not divisible by interleave " "depth. size = %d, interleave = %d") % msg.size() % d_interleave); return; } int rs_nn = msg.size() / d_interleave; if (rs_nn <= d_nroots || (unsigned)rs_nn > d_rs_codeword.size()) { GR_LOG_ERROR( d_logger, boost::format("Wrong Reed-Solomon message size. size = %d, interleave " "= %d, RS code (%d, %d)") % msg.size() % d_interleave % d_rs_codeword.size() % (d_rs_codeword.size() - d_nroots)); return; } d_output_frame.resize(msg.size() - d_interleave * d_nroots); const auto pad = d_rs_codeword.size() - rs_nn; for (int j = 0; j < d_interleave; ++j) { std::fill(d_rs_codeword.begin(), d_rs_codeword.begin() + pad, 0); for (int k = 0; k < rs_nn; ++k) { d_rs_codeword[pad + k] = msg[j + k * d_interleave]; } auto rs_res = d_decode_rs(d_rs_codeword.data()); if (rs_res < 0) { GR_LOG_DEBUG(d_logger, boost::format("Reed-Solomon decode fail (interleaver path %d)") % j); return; } GR_LOG_DEBUG(d_logger, boost::format( "Reed-Solomon decode corrected %d bytes (interleaver path %d)") % rs_res % j); errors += rs_res; for (int k = 0; k < rs_nn - d_nroots; ++k) { d_output_frame[j + k * d_interleave] = d_rs_codeword[pad + k]; } } auto meta = pmt::dict_add(pmt::car(pmt_msg), pmt::mp("rs_errors"), pmt::from_long(errors)); message_port_pub( pmt::mp("out"), pmt::cons(meta, pmt::init_u8vector(d_output_frame.size(), d_output_frame))); } } /* namespace satellites */ } /* namespace gr */ gr-satellites-4.4.0/lib/decode_rs_impl.h000066400000000000000000000026661414055407700202060ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2016,2020 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_SATELLITES_DECODE_RS_IMPL_H #define INCLUDED_SATELLITES_DECODE_RS_IMPL_H #include #include #include #include namespace gr { namespace satellites { class decode_rs_impl : public decode_rs { private: int d_interleave; std::vector d_rs_codeword; std::vector d_output_frame; int d_nroots; void* d_rs_p = NULL; std::function d_decode_rs; constexpr static int d_ccsds_nn = 255; constexpr static int d_ccsds_nroots = 32; void check_interleave(); void set_message_ports(); public: decode_rs_impl(bool dual_basis, int interleave = 1); decode_rs_impl( int symsize, int gfpoly, int fcr, int prim, int nroots, int interleave = 1); ~decode_rs_impl(); // Where all the action really happens void forecast(int noutput_items, gr_vector_int& ninput_items_required); int general_work(int noutput_items, gr_vector_int& ninput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items); void msg_handler(pmt::pmt_t pmt_msg); }; } // namespace satellites } // namespace gr #endif /* INCLUDED_SATELLITES_DECODE_RS_IMPL_H */ gr-satellites-4.4.0/lib/descrambler308_impl.cc000066400000000000000000000033771414055407700211330ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2018,2020 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "descrambler308_impl.h" #include namespace gr { namespace satellites { descrambler308::sptr descrambler308::make() { return gnuradio::get_initial_sptr(new descrambler308_impl()); } /* * The private constructor */ descrambler308_impl::descrambler308_impl() : gr::sync_block("descrambler308", gr::io_signature::make(1, 1, sizeof(unsigned char)), gr::io_signature::make(1, 1, sizeof(unsigned char))), d_counter(0), d_shift_register(0) { } /* * Our virtual destructor. */ descrambler308_impl::~descrambler308_impl() {} int descrambler308_impl::work(int noutput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items) { const unsigned char* in = (const unsigned char*)input_items[0]; unsigned char* out = (unsigned char*)output_items[0]; for (int i = 0; i < noutput_items; i++) { out[i] = d_scramble_bit(in[i]); } return noutput_items; } unsigned char descrambler308_impl::d_scramble_bit(unsigned char inbit) { unsigned char outbit; outbit = ~(inbit ^ d_shift_register ^ (d_shift_register >> 17) ^ (d_counter == 0x1f)) & 1; if (((d_shift_register >> 19) ^ (d_shift_register >> 11)) & 1) { d_counter = 0; } else { d_counter++; d_counter &= 0x1f; } d_shift_register >>= 1; d_shift_register |= (inbit & 1) << 19; return outbit; } } /* namespace satellites */ } /* namespace gr */ gr-satellites-4.4.0/lib/descrambler308_impl.h000066400000000000000000000015731414055407700207710ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2018 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_SATELLITES_DESCRAMBLER308_IMPL_H #define INCLUDED_SATELLITES_DESCRAMBLER308_IMPL_H #include #include namespace gr { namespace satellites { class descrambler308_impl : public descrambler308 { private: uint32_t d_counter; uint32_t d_shift_register; unsigned char d_scramble_bit(unsigned char inbit); public: descrambler308_impl(); ~descrambler308_impl(); // Where all the action really happens int work(int noutput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items); }; } // namespace satellites } // namespace gr #endif /* INCLUDED_SATELLITES_DESCRAMBLER308_IMPL_H */ gr-satellites-4.4.0/lib/distributed_syncframe_soft_impl.cc000066400000000000000000000041511414055407700240300ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2019-2020 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "distributed_syncframe_soft_impl.h" #include namespace gr { namespace satellites { distributed_syncframe_soft::sptr distributed_syncframe_soft::make(int threshold, const std::string& syncword, int step) { return gnuradio::get_initial_sptr( new distributed_syncframe_soft_impl(threshold, syncword, step)); } /* * The private constructor */ distributed_syncframe_soft_impl::distributed_syncframe_soft_impl( int threshold, const std::string& syncword, int step) : gr::sync_block("distributed_syncframe_soft", gr::io_signature::make(1, 1, sizeof(float)), gr::io_signature::make(0, 0, 0)), d_threshold(threshold), d_step(step) { // look at LSB only, as in correlate_access_code_bb_impl.cc for (auto s : syncword) d_syncword.push_back(s & 1); set_history(d_syncword.size() * d_step); message_port_register_out(pmt::mp("out")); } /* * Our virtual destructor. */ distributed_syncframe_soft_impl::~distributed_syncframe_soft_impl() {} int distributed_syncframe_soft_impl::work(int noutput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items) { size_t match; const float* in = (const float*)input_items[0]; for (int i = 0; i < noutput_items; i++) { match = 0; for (size_t j = 0; j < d_syncword.size(); ++j) { match += (in[i + j * d_step] < 0.0) ^ d_syncword[j]; } if (match >= d_syncword.size() - d_threshold) { // sync found message_port_pub( pmt::mp("out"), pmt::cons(pmt::PMT_NIL, pmt::init_f32vector(d_syncword.size() * d_step, in + i))); } } return noutput_items; } } /* namespace satellites */ } /* namespace gr */ gr-satellites-4.4.0/lib/distributed_syncframe_soft_impl.h000066400000000000000000000020001414055407700236610ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2019-2020 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_SATELLITES_DISTRIBUTED_SYNCFRAME_SOFT_IMPL_H #define INCLUDED_SATELLITES_DISTRIBUTED_SYNCFRAME_SOFT_IMPL_H #include #include namespace gr { namespace satellites { class distributed_syncframe_soft_impl : public distributed_syncframe_soft { private: const size_t d_threshold; const size_t d_step; std::vector d_syncword; public: distributed_syncframe_soft_impl(int threshold, const std::string& syncword, int step); ~distributed_syncframe_soft_impl(); // Where all the action really happens int work(int noutput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items); }; } // namespace satellites } // namespace gr #endif /* INCLUDED_SATELLITES_DISTRIBUTED_SYNCFRAME_SOFT_IMPL_H */ gr-satellites-4.4.0/lib/encode_rs_impl.cc000066400000000000000000000113711414055407700203470ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2018,2020 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "encode_rs_impl.h" #include #include #include #include extern "C" { #include "libfec/fec.h" } #include "rs.h" namespace gr { namespace satellites { encode_rs::sptr encode_rs::make(bool dual_basis, int interleave) { return gnuradio::get_initial_sptr(new encode_rs_impl(dual_basis, interleave)); } encode_rs::sptr encode_rs::make(int symsize, int gfpoly, int fcr, int prim, int nroots, int interleave) { return gnuradio::get_initial_sptr( new encode_rs_impl(symsize, gfpoly, fcr, prim, nroots, interleave)); } /* * The private constructor */ encode_rs_impl::encode_rs_impl(bool dual_basis, int interleave) : gr::block( "encode_rs", gr::io_signature::make(0, 0, 0), gr::io_signature::make(0, 0, 0)), d_interleave(interleave) { static constexpr int parity_offset = d_ccsds_nn - d_ccsds_nroots; if (dual_basis) { d_encode_rs = [](uint8_t* data) { encode_rs_ccsds(data, &data[parity_offset], 0); }; } else { d_encode_rs = [](uint8_t* data) { encode_rs_8(data, &data[parity_offset], 0); }; } d_rs_codeword.resize(d_ccsds_nn); d_nroots = d_ccsds_nroots; check_interleave(); set_message_ports(); } /* * The private constructor */ encode_rs_impl::encode_rs_impl( int symsize, int gfpoly, int fcr, int prim, int nroots, int interleave) : gr::block( "encode_rs", gr::io_signature::make(0, 0, 0), gr::io_signature::make(0, 0, 0)), d_interleave(interleave) { d_rs_p = init_rs_char(symsize, gfpoly, fcr, prim, nroots, 0); const int codeword_size = (1U << symsize) - 1; const int parity_offset = codeword_size - nroots; if (!d_rs_p) { throw std::runtime_error("Unable to initialize Reed-Solomon definition"); } d_encode_rs = [this, parity_offset](uint8_t* data) { return encode_rs_char(d_rs_p, data, &data[parity_offset]); }; d_rs_codeword.resize((1U << symsize) - 1); d_nroots = nroots; check_interleave(); set_message_ports(); } void encode_rs_impl::check_interleave() { if (d_interleave <= 0) { throw std::runtime_error( boost::str(boost::format("Invalid interleave value = %d") % d_interleave)); } } void encode_rs_impl::set_message_ports() { message_port_register_out(pmt::mp("out")); message_port_register_in(pmt::mp("in")); set_msg_handler(pmt::mp("in"), [this](pmt::pmt_t msg) { this->msg_handler(msg); }); } /* * Our virtual destructor. */ encode_rs_impl::~encode_rs_impl() { if (d_rs_p) { free_rs_char(d_rs_p); } } void encode_rs_impl::forecast(int noutput_items, gr_vector_int& ninput_items_required) {} int encode_rs_impl::general_work(int noutput_items, gr_vector_int& ninput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items) { return 0; } void encode_rs_impl::msg_handler(pmt::pmt_t pmt_msg) { auto msg = pmt::u8vector_elements(pmt::cdr(pmt_msg)); if (msg.size() % d_interleave != 0) { GR_LOG_ERROR( d_logger, boost::format("Reed-Solomon message size not divisible by interleave " "depth. size = %d, interleave = %d") % msg.size() % d_interleave); return; } int rs_kk = msg.size() / d_interleave; if ((unsigned)(rs_kk + d_nroots) > d_rs_codeword.size()) { GR_LOG_ERROR( d_logger, boost::format("Reed-Solomon message too large. size = %d, interleave " "= %d, RS code (%d, %d)") % msg.size() % d_interleave % d_rs_codeword.size() % (d_rs_codeword.size() - d_nroots)); return; } d_output_frame.resize(msg.size() + d_interleave * d_nroots); const auto pad = d_rs_codeword.size() - rs_kk - d_nroots; for (int j = 0; j < d_interleave; ++j) { std::fill(d_rs_codeword.begin(), d_rs_codeword.begin() + pad, 0); for (int k = 0; k < rs_kk; ++k) { d_rs_codeword[pad + k] = msg[j + k * d_interleave]; } d_encode_rs(d_rs_codeword.data()); for (int k = 0; k < rs_kk + d_nroots; ++k) { d_output_frame[j + k * d_interleave] = d_rs_codeword[pad + k]; } } message_port_pub( pmt::mp("out"), pmt::cons(pmt::car(pmt_msg), pmt::init_u8vector(d_output_frame.size(), d_output_frame))); } } /* namespace satellites */ } /* namespace gr */ gr-satellites-4.4.0/lib/encode_rs_impl.h000066400000000000000000000026671414055407700202210ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2018,2020 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_SATELLITES_ENCODE_RS_IMPL_H #define INCLUDED_SATELLITES_ENCODE_RS_IMPL_H #include #include #include #include namespace gr { namespace satellites { class encode_rs_impl : public encode_rs { private: int d_interleave; std::vector d_rs_codeword; std::vector d_output_frame; int d_nroots; void* d_rs_p = NULL; std::function d_encode_rs; constexpr static int d_ccsds_nn = 255; constexpr static int d_ccsds_nroots = 32; void check_interleave(); void set_message_ports(); public: encode_rs_impl(bool dual_basis, int interleave = 1); encode_rs_impl( int symsize, int gfpoly, int fcr, int prim, int nroots, int interleave = 1); ~encode_rs_impl(); // Where all the action really happens void forecast(int noutput_items, gr_vector_int& ninput_items_required); int general_work(int noutput_items, gr_vector_int& ninput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items); void msg_handler(pmt::pmt_t pmt_msg); }; } // namespace satellites } // namespace gr #endif /* INCLUDED_SATELLITES_ENCODE_RS_IMPL_H */ gr-satellites-4.4.0/lib/golay24.c000066400000000000000000000055441414055407700165100ustar00rootroot00000000000000/* -*- c -*- */ /* * Copyright 2017 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ /* This algorithm is based on R.H. Morelos-Zaragoza, The Art of Error Correcting Coding, Wiley, 2002; Section 2.2.3 */ #include #include #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "golay24.h" // Replacement for __builtin_parity in compilers other than GCC and clang #if !defined(__GNUC__) && !defined(__clang__) static inline uint32_t __builtin_parity(uint32_t x) { uint32_t p; volk_32u_popcnt(&p, x); return p & 1; } #endif /* !defined(__GNUC__) && !defined(__clang__) */ #define N 12 static const uint32_t H[N] = { 0x8008ed, 0x4001db, 0x2003b5, 0x100769, 0x80ed1, 0x40da3, 0x20b47, 0x1068f, 0x8d1d, 0x4a3b, 0x2477, 0x1ffe }; #define B(i) (H[i] & 0xfff) int encode_golay24(uint32_t* data) { register uint32_t r = (*data) & 0xfff; register uint32_t s; register int i; s = 0; for (i = 0; i < N; i++) { s <<= 1; s |= __builtin_parity(H[i] & r); } *data = ((0xFFF & s) << N) | r; return 0; } int decode_golay24(uint32_t* data) { register uint32_t r = *data; register uint16_t s; /* syndrome */ register uint16_t q; /* modified syndrome */ register uint32_t e; /* estimated error vector */ register int i; uint32_t popcount; // Step 1. s = H*r s = 0; for (i = 0; i < N; i++) { s <<= 1; s |= __builtin_parity(H[i] & r); } // Step 2. if w(s) <= 3, then e = (s, 0) and go to step 8 volk_32u_popcnt(&popcount, s); if (popcount <= 3) { e = s; e <<= N; goto step8; } // Step 3. if w(s + B[i]) <= 2, then e = (s + B[i], e_{i+1}) and go to step 8 for (i = 0; i < N; i++) { volk_32u_popcnt(&popcount, s ^ B(i)); if (popcount <= 2) { e = s ^ B(i); e <<= N; e |= 1 << (N - i - 1); goto step8; } } // Step 4. compute q = B*s q = 0; for (i = 0; i < N; i++) { q <<= 1; q |= __builtin_parity(B(i) & s); } // Step 5. If w(q) <= 3, then e = (0, q) and go to step 8 volk_32u_popcnt(&popcount, q); if (popcount <= 3) { e = q; goto step8; } // Step 6. If w(q + B[i]) <= 2, then e = (e_{i+1}, q + B[i]) and got to step 8 for (i = 0; i < N; i++) { volk_32u_popcnt(&popcount, q ^ B(i)); if (popcount <= 2) { e = 1 << (2 * N - i - 1); e |= q ^ B(i); goto step8; } } // Step 7. r is uncorrectable return -1; step8: // Step 8. c = r + e *data = r ^ e; volk_32u_popcnt(&popcount, e); return popcount; } #ifdef __cplusplus } /* extern "C" */ #endif /* __cplusplus */ gr-satellites-4.4.0/lib/golay24.h000066400000000000000000000006611414055407700165100ustar00rootroot00000000000000/* -*- c -*- */ /* * Copyright 2017 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ /* This algorithm is based on R.H. Morelos-Zaragoza, The Art of Error Correcting Coding, Wiley, 2002; Section 2.2.3 */ #ifndef _GOLAY24_H #define _GOLAY24_H #include int decode_golay24(uint32_t* data); int encode_golay24(uint32_t* data); #endif gr-satellites-4.4.0/lib/libfec/000077500000000000000000000000001414055407700162775ustar00rootroot00000000000000gr-satellites-4.4.0/lib/libfec/README000066400000000000000000000111771414055407700171660ustar00rootroot00000000000000COPYRIGHT This package is copyright 2006 by Phil Karn, KA9Q. It may be used under the terms of the GNU Lesser General Public License (LGPL). See the file "lesser.txt" in this package for license details. INTRODUCTION This package provides a set of functions that implement several popular forward error correction (FEC) algorithms and several low-level routines useful in modems implemented with digital signal processing (DSP). The following routines are provided: 1. Viterbi decoders for the following convolutional codes: r=1/2 k=7 ("Voyager" code, now a widely used industry standard) r=1/2 k=9 (Used on the IS-95 CDMA forward link) r=1/6 k=15 ("Cassini" code, used by several NASA/JPL deep space missions) 2. Reed-Solomon encoders and decoders for any user-specified code. 3. Optimized encoder and decoder for the CCSDS-standard (255,223) Reed-Solomon code, with and without the CCSDS-standard "dual basis" symbol representation. 4. Compute dot product between a 16-bit buffer and a set of 16-bit coefficients. This is the basic DSP primitive for digital filtering and correlation. 4. Compute sum of squares of a buffer of 16-bit signed integers. This is useful in DSP for finding the total energy in a signal. 5. Find peak value in a buffer of 16-bit signed integers, useful for scaling a signal to prevent overflow. SIMD SUPPORT This package automatically makes use of various SIMD (Single Instruction stream, Multiple Data stream) instruction sets, when available: MMX, SSE and SSE2 on the IA-32 (Intel) architecture, and Altivec on the PowerPC G4 and G5 used by Power Macintoshes. "Altivec" is a Motorola trademark; Apple calls it "Velocity Engine", and IBM calls it "VMX". Altivec is roughly comparable to SSE2 on the IA-32. Many of the SIMD versions run more than an order of magnitude faster than their portable C versions. The available SIMD instruction sets, if any, are determined at run time and the proper version of each routine is automatically selected. If no SIMD instructions are available, the portable C version is invoked by default. On targets other than IA-32 and PPC, only the portable C version is built. The SIMD-assisted versions generally produce the same results as the C versions, with a few minor exceptions. The Viterbi decoders in C have a very slightly greater Eb/No performance due to their use of 32-bit path metrics. On the other hand, the SIMD versions use the "saturating" arithmetic available in these instructions to avoid the integer wraparounds that can occur in C when argument ranges are not properly constrained. This applies primarily to the "dotprod" (dot product) function. The MMX (MultiMedia eXtensions) instruction set was introduced on later Pentium CPUs; it is also implemented on the Pentium II and most AMD CPUs starting with the K6. SSE (SIMD Streaming Extensions) was introduced in the Pentium III; AMD calls it "3D Now! Professional". Intel introduced SSE2 on the Pentium 4, and it has been picked up by later AMD CPUs. SSE support implies MMX support, while SSE2 support implies both SSE and MMX support. The latest IA-32 SIMD instruction set, SSE3 (also known as "Prescott New Instructions") was introduced in early 2004 with the latest ("Prescott") revision of the Pentium 4. Relatively little was introduced with SSE3, and this library currently makes no use of it. See the various manual pages for details on how to use the library routines. Copyright 2006, Phil Karn, KA9Q karn@ka9q.net http://www.ka9q.net/ This software may be used under the terms of the GNU Lesser General Public License (LGPL); see the file lesser.txt for details. Revision history: Version 1.0 released 29 May 2001 Version 2.0 released 3 Dec 2001: Restructured to add support for shared libraries. Version 2.0.1 released 8 Dec 2001: Includes autoconf/configure script Version 2.0.2 released 4 Feb 2002: Add SIMD version override options Test for lack of SSE2 mnemonic support in 'as' Build only selected version Version 2.0.3 released 6 Feb 2002: Fix to parityb function in parity.h feclib version 1.0 released November 2003 Merged SIMD-Viterbi, RS and DSP libraries Changed SIMD Viterbi decoder to detect SSE2/SSE/MMX at runtime rather than build time feclib version 2.0 (unreleased) Mar 2004 General speedups and cleanups Switch from 4 to 8-bit input symbols on all Viterbi decoders Support for Altivec on PowerPC Support for k=15 r=1/6 Cassini/Mars Pathfinder/Mars Exploration Rover/STEREO code Changed license to GNU Lesser General Public License (LGPL) feclib version 2.1 June 5 2006 Added error checking, fixed alignment bug in SSE2 versions of Viterbi decoders causing segfaults feclib version 2.1.1 June 6 2006 Fix test/benchmark time measurement on Linux gr-satellites-4.4.0/lib/libfec/ccsds.c000066400000000000000000000061611414055407700175460ustar00rootroot00000000000000char CCSDS_alpha_to[] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x87, 0x89, 0x95, 0xad, 0xdd, 0x3d, 0x7a, 0xf4, 0x6f, 0xde, 0x3b, 0x76, 0xec, 0x5f, 0xbe, 0xfb, 0x71, 0xe2, 0x43, 0x86, 0x8b, 0x91, 0xa5, 0xcd, 0x1d, 0x3a, 0x74, 0xe8, 0x57, 0xae, 0xdb, 0x31, 0x62, 0xc4, 0x0f, 0x1e, 0x3c, 0x78, 0xf0, 0x67, 0xce, 0x1b, 0x36, 0x6c, 0xd8, 0x37, 0x6e, 0xdc, 0x3f, 0x7e, 0xfc, 0x7f, 0xfe, 0x7b, 0xf6, 0x6b, 0xd6, 0x2b, 0x56, 0xac, 0xdf, 0x39, 0x72, 0xe4, 0x4f, 0x9e, 0xbb, 0xf1, 0x65, 0xca, 0x13, 0x26, 0x4c, 0x98, 0xb7, 0xe9, 0x55, 0xaa, 0xd3, 0x21, 0x42, 0x84, 0x8f, 0x99, 0xb5, 0xed, 0x5d, 0xba, 0xf3, 0x61, 0xc2, 0x03, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x07, 0x0e, 0x1c, 0x38, 0x70, 0xe0, 0x47, 0x8e, 0x9b, 0xb1, 0xe5, 0x4d, 0x9a, 0xb3, 0xe1, 0x45, 0x8a, 0x93, 0xa1, 0xc5, 0x0d, 0x1a, 0x34, 0x68, 0xd0, 0x27, 0x4e, 0x9c, 0xbf, 0xf9, 0x75, 0xea, 0x53, 0xa6, 0xcb, 0x11, 0x22, 0x44, 0x88, 0x97, 0xa9, 0xd5, 0x2d, 0x5a, 0xb4, 0xef, 0x59, 0xb2, 0xe3, 0x41, 0x82, 0x83, 0x81, 0x85, 0x8d, 0x9d, 0xbd, 0xfd, 0x7d, 0xfa, 0x73, 0xe6, 0x4b, 0x96, 0xab, 0xd1, 0x25, 0x4a, 0x94, 0xaf, 0xd9, 0x35, 0x6a, 0xd4, 0x2f, 0x5e, 0xbc, 0xff, 0x79, 0xf2, 0x63, 0xc6, 0x0b, 0x16, 0x2c, 0x58, 0xb0, 0xe7, 0x49, 0x92, 0xa3, 0xc1, 0x05, 0x0a, 0x14, 0x28, 0x50, 0xa0, 0xc7, 0x09, 0x12, 0x24, 0x48, 0x90, 0xa7, 0xc9, 0x15, 0x2a, 0x54, 0xa8, 0xd7, 0x29, 0x52, 0xa4, 0xcf, 0x19, 0x32, 0x64, 0xc8, 0x17, 0x2e, 0x5c, 0xb8, 0xf7, 0x69, 0xd2, 0x23, 0x46, 0x8c, 0x9f, 0xb9, 0xf5, 0x6d, 0xda, 0x33, 0x66, 0xcc, 0x1f, 0x3e, 0x7c, 0xf8, 0x77, 0xee, 0x5b, 0xb6, 0xeb, 0x51, 0xa2, 0xc3, 0x00, }; char CCSDS_index_of[] = { 255, 0, 1, 99, 2, 198, 100, 106, 3, 205, 199, 188, 101, 126, 107, 42, 4, 141, 206, 78, 200, 212, 189, 225, 102, 221, 127, 49, 108, 32, 43, 243, 5, 87, 142, 232, 207, 172, 79, 131, 201, 217, 213, 65, 190, 148, 226, 180, 103, 39, 222, 240, 128, 177, 50, 53, 109, 69, 33, 18, 44, 13, 244, 56, 6, 155, 88, 26, 143, 121, 233, 112, 208, 194, 173, 168, 80, 117, 132, 72, 202, 252, 218, 138, 214, 84, 66, 36, 191, 152, 149, 249, 227, 94, 181, 21, 104, 97, 40, 186, 223, 76, 241, 47, 129, 230, 178, 63, 51, 238, 54, 16, 110, 24, 70, 166, 34, 136, 19, 247, 45, 184, 14, 61, 245, 164, 57, 59, 7, 158, 156, 157, 89, 159, 27, 8, 144, 9, 122, 28, 234, 160, 113, 90, 209, 29, 195, 123, 174, 10, 169, 145, 81, 91, 118, 114, 133, 161, 73, 235, 203, 124, 253, 196, 219, 30, 139, 210, 215, 146, 85, 170, 67, 11, 37, 175, 192, 115, 153, 119, 150, 92, 250, 82, 228, 236, 95, 74, 182, 162, 22, 134, 105, 197, 98, 254, 41, 125, 187, 204, 224, 211, 77, 140, 242, 31, 48, 220, 130, 171, 231, 86, 179, 147, 64, 216, 52, 176, 239, 38, 55, 12, 17, 68, 111, 120, 25, 154, 71, 116, 167, 193, 35, 83, 137, 251, 20, 93, 248, 151, 46, 75, 185, 96, 15, 237, 62, 229, 246, 135, 165, 23, 58, 163, 60, 183, }; char CCSDS_poly[] = { 0, 249, 59, 66, 4, 43, 126, 251, 97, 30, 3, 213, 50, 66, 170, 5, 24, 5, 170, 66, 50, 213, 3, 30, 97, 251, 126, 43, 4, 66, 59, 249, 0, }; gr-satellites-4.4.0/lib/libfec/ccsds.h000066400000000000000000000001511414055407700175440ustar00rootroot00000000000000typedef unsigned char data_t; extern unsigned char Taltab[], Tal1tab[]; #define NN 255 #define NROOTS 32 gr-satellites-4.4.0/lib/libfec/char.h000066400000000000000000000010261414055407700173640ustar00rootroot00000000000000/* Stuff specific to the 8-bit symbol version of the general purpose RS codecs * * Copyright 2003, Phil Karn, KA9Q * May be used under the terms of the GNU Lesser General Public License (LGPL) */ typedef unsigned char data_t; #define MODNN(x) modnn(rs, x) #define MM (rs->mm) #define NN (rs->nn) #define ALPHA_TO (rs->alpha_to) #define INDEX_OF (rs->index_of) #define GENPOLY (rs->genpoly) #define NROOTS (rs->nroots) #define FCR (rs->fcr) #define PRIM (rs->prim) #define IPRIM (rs->iprim) #define PAD (rs->pad) #define A0 (NN) gr-satellites-4.4.0/lib/libfec/decode_rs.h000066400000000000000000000236661414055407700204140ustar00rootroot00000000000000/* The guts of the Reed-Solomon decoder, meant to be #included * into a function body with the following typedefs, macros and variables supplied * according to the code parameters: * data_t - a typedef for the data symbol * data_t data[] - array of NN data and parity symbols to be corrected in place * retval - an integer lvalue into which the decoder's return code is written * NROOTS - the number of roots in the RS code generator polynomial, * which is the same as the number of parity symbols in a block. Integer variable or literal. * NN - the total number of symbols in a RS block. Integer variable or literal. * PAD - the number of pad symbols in a block. Integer variable or literal. * ALPHA_TO - The address of an array of NN elements to convert Galois field * elements in index (log) form to polynomial form. Read only. * INDEX_OF - The address of an array of NN elements to convert Galois field * elements in polynomial form to index (log) form. Read only. * MODNN - a function to reduce its argument modulo NN. May be inline or a macro. * FCR - An integer literal or variable specifying the first consecutive root of the * Reed-Solomon generator polynomial. Integer variable or literal. * PRIM - The primitive root of the generator poly. Integer variable or literal. * DEBUG - If set to 1 or more, do various internal consistency checking. Leave this * undefined for production code * The memset(), memmove(), and memcpy() functions are used. The appropriate header * file declaring these functions (usually ) must be included by the calling * program. */ #if !defined(NROOTS) #error "NROOTS not defined" #endif #if !defined(NN) #error "NN not defined" #endif #if !defined(PAD) #error "PAD not defined" #endif #if !defined(ALPHA_TO) #error "ALPHA_TO not defined" #endif #if !defined(INDEX_OF) #error "INDEX_OF not defined" #endif #if !defined(MODNN) #error "MODNN not defined" #endif #if !defined(FCR) #error "FCR not defined" #endif #if !defined(PRIM) #error "PRIM not defined" #endif #if !defined(NULL) #define NULL ((void*)0) #endif #undef MIN #define MIN(a, b) ((a) < (b) ? (a) : (b)) #undef A0 #define A0 (NN) { int deg_lambda, el, deg_omega; int i, j, r, k; data_t u, q, tmp, num1, num2, den, discr_r; #ifdef MAX_ARRAY data_t lambda[MAX_ARRAY], s[MAX_ARRAY]; /* Err+Eras Locator poly * and syndrome poly */ data_t b[MAX_ARRAY], t[MAX_ARRAY], omega[MAX_ARRAY]; data_t root[MAX_ARRAY], reg[MAX_ARRAY], loc[MAX_ARRAY]; #else /* MAX_ARRAY */ data_t lambda[NROOTS + 1], s[NROOTS]; /* Err+Eras Locator poly * and syndrome poly */ data_t b[NROOTS + 1], t[NROOTS + 1], omega[NROOTS + 1]; data_t root[NROOTS], reg[NROOTS + 1], loc[NROOTS]; #endif /* MAX_ARRAY */ int syn_error, count; /* form the syndromes; i.e., evaluate data(x) at roots of g(x) */ for (i = 0; i < NROOTS; i++) s[i] = data[0]; for (j = 1; j < NN - PAD; j++) { for (i = 0; i < NROOTS; i++) { if (s[i] == 0) { s[i] = data[j]; } else { s[i] = data[j] ^ ALPHA_TO[MODNN(INDEX_OF[s[i]] + (FCR + i) * PRIM)]; } } } /* Convert syndromes to index form, checking for nonzero condition */ syn_error = 0; for (i = 0; i < NROOTS; i++) { syn_error |= s[i]; s[i] = INDEX_OF[s[i]]; } if (!syn_error) { /* if syndrome is zero, data[] is a codeword and there are no * errors to correct. So return data[] unmodified */ count = 0; goto finish; } memset(&lambda[1], 0, NROOTS * sizeof(lambda[0])); lambda[0] = 1; if (no_eras > 0) { /* Init lambda to be the erasure locator polynomial */ lambda[1] = ALPHA_TO[MODNN(PRIM * (NN - 1 - eras_pos[0]))]; for (i = 1; i < no_eras; i++) { u = MODNN(PRIM * (NN - 1 - eras_pos[i])); for (j = i + 1; j > 0; j--) { tmp = INDEX_OF[lambda[j - 1]]; if (tmp != A0) lambda[j] ^= ALPHA_TO[MODNN(u + tmp)]; } } #if DEBUG >= 1 /* Test code that verifies the erasure locator polynomial just constructed Needed only for decoder debugging. */ /* find roots of the erasure location polynomial */ for (i = 1; i <= no_eras; i++) reg[i] = INDEX_OF[lambda[i]]; count = 0; for (i = 1, k = IPRIM - 1; i <= NN; i++, k = MODNN(k + IPRIM)) { q = 1; for (j = 1; j <= no_eras; j++) if (reg[j] != A0) { reg[j] = MODNN(reg[j] + j); q ^= ALPHA_TO[reg[j]]; } if (q != 0) continue; /* store root and error location number indices */ root[count] = i; loc[count] = k; count++; } if (count != no_eras) { printf("count = %d no_eras = %d\n lambda(x) is WRONG\n", count, no_eras); count = -1; goto finish; } #if DEBUG >= 2 printf("\n Erasure positions as determined by roots of Eras Loc Poly:\n"); for (i = 0; i < count; i++) printf("%d ", loc[i]); printf("\n"); #endif #endif } for (i = 0; i < NROOTS + 1; i++) b[i] = INDEX_OF[lambda[i]]; /* * Begin Berlekamp-Massey algorithm to determine error+erasure * locator polynomial */ r = no_eras; el = no_eras; while (++r <= NROOTS) { /* r is the step number */ /* Compute discrepancy at the r-th step in poly-form */ discr_r = 0; for (i = 0; i < r; i++) { if ((lambda[i] != 0) && (s[r - i - 1] != A0)) { discr_r ^= ALPHA_TO[MODNN(INDEX_OF[lambda[i]] + s[r - i - 1])]; } } discr_r = INDEX_OF[discr_r]; /* Index form */ if (discr_r == A0) { /* 2 lines below: B(x) <-- x*B(x) */ memmove(&b[1], b, NROOTS * sizeof(b[0])); b[0] = A0; } else { /* 7 lines below: T(x) <-- lambda(x) - discr_r*x*b(x) */ t[0] = lambda[0]; for (i = 0; i < NROOTS; i++) { if (b[i] != A0) t[i + 1] = lambda[i + 1] ^ ALPHA_TO[MODNN(discr_r + b[i])]; else t[i + 1] = lambda[i + 1]; } if (2 * el <= r + no_eras - 1) { el = r + no_eras - el; /* * 2 lines below: B(x) <-- inv(discr_r) * * lambda(x) */ for (i = 0; i <= NROOTS; i++) b[i] = (lambda[i] == 0) ? A0 : MODNN(INDEX_OF[lambda[i]] - discr_r + NN); } else { /* 2 lines below: B(x) <-- x*B(x) */ memmove(&b[1], b, NROOTS * sizeof(b[0])); b[0] = A0; } memcpy(lambda, t, (NROOTS + 1) * sizeof(t[0])); } } /* Convert lambda to index form and compute deg(lambda(x)) */ deg_lambda = 0; for (i = 0; i < NROOTS + 1; i++) { lambda[i] = INDEX_OF[lambda[i]]; if (lambda[i] != A0) deg_lambda = i; } /* Find roots of the error+erasure locator polynomial by Chien search */ memcpy(®[1], &lambda[1], NROOTS * sizeof(reg[0])); count = 0; /* Number of roots of lambda(x) */ for (i = 1, k = IPRIM - 1; i <= NN; i++, k = MODNN(k + IPRIM)) { q = 1; /* lambda[0] is always 0 */ for (j = deg_lambda; j > 0; j--) { if (reg[j] != A0) { reg[j] = MODNN(reg[j] + j); q ^= ALPHA_TO[reg[j]]; } } if (q != 0) continue; /* Not a root */ /* store root (index-form) and error location number */ #if DEBUG >= 2 printf("count %d root %d loc %d\n", count, i, k); #endif root[count] = i; loc[count] = k; /* If we've already found max possible roots, * abort the search to save time */ if (++count == deg_lambda) break; } if (deg_lambda != count) { /* * deg(lambda) unequal to number of roots => uncorrectable * error detected */ count = -1; goto finish; } /* * Compute err+eras evaluator poly omega(x) = s(x)*lambda(x) (modulo * x**NROOTS). in index form. Also find deg(omega). */ deg_omega = deg_lambda - 1; for (i = 0; i <= deg_omega; i++) { tmp = 0; for (j = i; j >= 0; j--) { if ((s[i - j] != A0) && (lambda[j] != A0)) tmp ^= ALPHA_TO[MODNN(s[i - j] + lambda[j])]; } omega[i] = INDEX_OF[tmp]; } /* * Compute error values in poly-form. num1 = omega(inv(X(l))), num2 = * inv(X(l))**(FCR-1) and den = lambda_pr(inv(X(l))) all in poly-form */ for (j = count - 1; j >= 0; j--) { num1 = 0; for (i = deg_omega; i >= 0; i--) { if (omega[i] != A0) num1 ^= ALPHA_TO[MODNN(omega[i] + i * root[j])]; } num2 = ALPHA_TO[MODNN(root[j] * (FCR - 1) + NN)]; den = 0; /* lambda[i+1] for i even is the formal derivative lambda_pr of lambda[i] */ for (i = MIN(deg_lambda, NROOTS - 1) & ~1; i >= 0; i -= 2) { if (lambda[i + 1] != A0) den ^= ALPHA_TO[MODNN(lambda[i + 1] + i * root[j])]; } #if DEBUG >= 1 if (den == 0) { printf("\n ERROR: denominator = 0\n"); count = -1; goto finish; } #endif /* Apply error to data */ if (num1 != 0 && loc[j] >= PAD) { data[loc[j] - PAD] ^= ALPHA_TO[MODNN(INDEX_OF[num1] + INDEX_OF[num2] + NN - INDEX_OF[den])]; } } finish: if (eras_pos != NULL) { for (i = 0; i < count; i++) eras_pos[i] = loc[i]; } retval = count; } gr-satellites-4.4.0/lib/libfec/decode_rs_8.c000066400000000000000000000007061414055407700206240ustar00rootroot00000000000000/* General purpose Reed-Solomon decoder for 8-bit symbols or less * Copyright 2003 Phil Karn, KA9Q * May be used under the terms of the GNU Lesser General Public License (LGPL) */ #ifdef DEBUG #include #endif #include #include "fixed.h" int decode_rs_8(data_t* data, int* eras_pos, int no_eras, int pad) { int retval; if (pad < 0 || pad > 222) { return -1; } #include "decode_rs.h" return retval; } gr-satellites-4.4.0/lib/libfec/decode_rs_ccsds.c000066400000000000000000000013611414055407700215520ustar00rootroot00000000000000/* This function wraps around the fixed 8-bit decoder, performing the * basis transformations necessary to meet the CCSDS standard * * Copyright 2002, Phil Karn, KA9Q * May be used under the terms of the GNU Lesser General Public License (LGPL) */ #include "ccsds.h" #include "fec.h" int decode_rs_ccsds(data_t* data, int* eras_pos, int no_eras, int pad) { int i, r; data_t cdata[NN]; /* Convert data from dual basis to conventional */ for (i = 0; i < NN - pad; i++) cdata[i] = Tal1tab[data[i]]; r = decode_rs_8(cdata, eras_pos, no_eras, pad); if (r > 0) { /* Convert from conventional to dual basis */ for (i = 0; i < NN - pad; i++) data[i] = Taltab[cdata[i]]; } return r; } gr-satellites-4.4.0/lib/libfec/decode_rs_char.c000066400000000000000000000007101414055407700213650ustar00rootroot00000000000000/* General purpose Reed-Solomon decoder for 8-bit symbols or less * Copyright 2003 Phil Karn, KA9Q * May be used under the terms of the GNU Lesser General Public License (LGPL) */ #ifdef DEBUG #include #endif #include #include "char.h" #include "rs-common.h" int decode_rs_char(void* p, data_t* data, int* eras_pos, int no_eras) { int retval; struct rs* rs = (struct rs*)p; #include "decode_rs.h" return retval; } gr-satellites-4.4.0/lib/libfec/encode_rs.h000066400000000000000000000046601414055407700204170ustar00rootroot00000000000000/* The guts of the Reed-Solomon encoder, meant to be #included * into a function body with the following typedefs, macros and variables supplied * according to the code parameters: * data_t - a typedef for the data symbol * data_t data[] - array of NN-NROOTS-PAD and type data_t to be encoded * data_t parity[] - an array of NROOTS and type data_t to be written with parity symbols * NROOTS - the number of roots in the RS code generator polynomial, * which is the same as the number of parity symbols in a block. Integer variable or literal. * * NN - the total number of symbols in a RS block. Integer variable or literal. * PAD - the number of pad symbols in a block. Integer variable or literal. * ALPHA_TO - The address of an array of NN elements to convert Galois field * elements in index (log) form to polynomial form. Read only. * INDEX_OF - The address of an array of NN elements to convert Galois field * elements in polynomial form to index (log) form. Read only. * MODNN - a function to reduce its argument modulo NN. May be inline or a macro. * GENPOLY - an array of NROOTS+1 elements containing the generator polynomial in index form * The memset() and memmove() functions are used. The appropriate header * file declaring these functions (usually ) must be included by the calling * program. * Copyright 2004, Phil Karn, KA9Q * May be used under the terms of the GNU Lesser General Public License (LGPL) */ #undef A0 #define A0 (NN) /* Special reserved value encoding zero in index form */ { int i, j; data_t feedback; memset(parity, 0, NROOTS * sizeof(data_t)); for (i = 0; i < NN - NROOTS - PAD; i++) { feedback = INDEX_OF[data[i] ^ parity[0]]; if (feedback != A0) { /* feedback term is non-zero */ #ifdef UNNORMALIZED /* This line is unnecessary when GENPOLY[NROOTS] is unity, as it must * always be for the polynomials constructed by init_rs() */ feedback = MODNN(NN - GENPOLY[NROOTS] + feedback); #endif for (j = 1; j < NROOTS; j++) parity[j] ^= ALPHA_TO[MODNN(feedback + GENPOLY[NROOTS - j])]; } /* Shift */ memmove(&parity[0], &parity[1], sizeof(data_t) * (NROOTS - 1)); if (feedback != A0) parity[NROOTS - 1] = ALPHA_TO[MODNN(feedback + GENPOLY[0])]; else parity[NROOTS - 1] = 0; } } gr-satellites-4.4.0/lib/libfec/encode_rs_8.c000066400000000000000000000004441414055407700206350ustar00rootroot00000000000000/* Reed-Solomon encoder * Copyright 2004, Phil Karn, KA9Q * May be used under the terms of the GNU Lesser General Public License (LGPL) */ #include #include "fixed.h" /* Portable C version */ void encode_rs_8(data_t* data, data_t* parity, int pad) { #include "encode_rs.h" } gr-satellites-4.4.0/lib/libfec/encode_rs_ccsds.c000066400000000000000000000013231414055407700215620ustar00rootroot00000000000000/* This function wraps around the fixed 8-bit encoder, performing the * basis transformations necessary to meet the CCSDS standard * * Copyright 2002, Phil Karn, KA9Q * fixed bug Aug 2007 * May be used under the terms of the GNU Lesser General Public License (LGPL) */ #include "ccsds.h" #include "fec.h" void encode_rs_ccsds(data_t* data, data_t* parity, int pad) { int i; data_t cdata[NN - NROOTS]; /* Convert data from dual basis to conventional */ for (i = 0; i < NN - NROOTS - pad; i++) cdata[i] = Tal1tab[data[i]]; encode_rs_8(cdata, parity, pad); /* Convert parity from conventional to dual basis */ for (i = 0; i < NROOTS; i++) parity[i] = Taltab[parity[i]]; } gr-satellites-4.4.0/lib/libfec/encode_rs_char.c000066400000000000000000000005071414055407700214030ustar00rootroot00000000000000/* Reed-Solomon encoder * Copyright 2002, Phil Karn, KA9Q * May be used under the terms of the GNU Lesser General Public License (LGPL) */ #include #include "char.h" #include "rs-common.h" void encode_rs_char(void* p, data_t* data, data_t* parity) { struct rs* rs = (struct rs*)p; #include "encode_rs.h" } gr-satellites-4.4.0/lib/libfec/fec.h000066400000000000000000000021661414055407700172120ustar00rootroot00000000000000/* User include file for libfec * Copyright 2004, Phil Karn, KA9Q * May be used under the terms of the GNU Lesser General Public License (LGPL) */ #ifndef _FEC_H_ #define _FEC_H_ /* General purpose RS codec, 8-bit symbols */ void encode_rs_char(void* rs, unsigned char* data, unsigned char* parity); int decode_rs_char(void* rs, unsigned char* data, int* eras_pos, int no_eras); void* init_rs_char(int symsize, int gfpoly, int fcr, int prim, int nroots, int pad); void free_rs_char(void* rs); /* CCSDS standard (255,223) RS codec with conventional (*not* dual-basis) * symbol representation */ void encode_rs_8(unsigned char* data, unsigned char* parity, int pad); int decode_rs_8(unsigned char* data, int* eras_pos, int no_eras, int pad); /* CCSDS standard (255,223) RS codec with dual-basis symbol representation */ void encode_rs_ccsds(unsigned char* data, unsigned char* parity, int pad); int decode_rs_ccsds(unsigned char* data, int* eras_pos, int no_eras, int pad); /* Tables to map from conventional->dual (Taltab) and * dual->conventional (Tal1tab) bases */ extern unsigned char Taltab[], Tal1tab[]; #endif /* _FEC_H_ */ gr-satellites-4.4.0/lib/libfec/fixed.h000066400000000000000000000014371414055407700175540ustar00rootroot00000000000000/* Stuff specific to the CCSDS (255,223) RS codec * (255,223) code over GF(256). Note: the conventional basis is still * used; the dual-basis mappings are performed in [en|de]code_rs_ccsds.c * * Copyright 2003 Phil Karn, KA9Q * May be used under the terms of the GNU Lesser General Public License (LGPL) */ typedef unsigned char data_t; static inline int mod255(int x) { while (x >= 255) { x -= 255; x = (x >> 8) + (x & 255); } return x; } #define MODNN(x) mod255(x) extern data_t CCSDS_alpha_to[]; extern data_t CCSDS_index_of[]; extern data_t CCSDS_poly[]; #define MM 8 #define NN 255 #define ALPHA_TO CCSDS_alpha_to #define INDEX_OF CCSDS_index_of #define GENPOLY CCSDS_poly #define NROOTS 32 #define FCR 112 #define PRIM 11 #define IPRIM 116 #define PAD pad gr-satellites-4.4.0/lib/libfec/init_rs.h000066400000000000000000000060341414055407700201220ustar00rootroot00000000000000/* Common code for intializing a Reed-Solomon control block (char or int symbols) * Copyright 2004 Phil Karn, KA9Q * May be used under the terms of the GNU Lesser General Public License (LGPL) */ #undef NULL #define NULL ((void*)0) { int i, j, sr, root, iprim; rs = NULL; /* Check parameter ranges */ if (symsize < 0 || (unsigned)symsize > 8 * sizeof(data_t)) { goto done; } if (fcr < 0 || fcr >= (1 << symsize)) goto done; if (prim <= 0 || prim >= (1 << symsize)) goto done; if (nroots < 0 || nroots >= (1 << symsize)) goto done; /* Can't have more roots than symbol values! */ if (pad < 0 || pad >= ((1 << symsize) - 1 - nroots)) goto done; /* Too much padding */ rs = (struct rs*)calloc(1, sizeof(struct rs)); if (rs == NULL) goto done; rs->mm = symsize; rs->nn = (1 << symsize) - 1; rs->pad = pad; rs->alpha_to = (data_t*)malloc(sizeof(data_t) * (rs->nn + 1)); if (rs->alpha_to == NULL) { free(rs); rs = NULL; goto done; } rs->index_of = (data_t*)malloc(sizeof(data_t) * (rs->nn + 1)); if (rs->index_of == NULL) { free(rs->alpha_to); free(rs); rs = NULL; goto done; } /* Generate Galois field lookup tables */ rs->index_of[0] = A0; /* log(zero) = -inf */ rs->alpha_to[A0] = 0; /* alpha**-inf = 0 */ sr = 1; for (i = 0; i < rs->nn; i++) { rs->index_of[sr] = i; rs->alpha_to[i] = sr; sr <<= 1; if (sr & (1 << symsize)) sr ^= gfpoly; sr &= rs->nn; } if (sr != 1) { /* field generator polynomial is not primitive! */ free(rs->alpha_to); free(rs->index_of); free(rs); rs = NULL; goto done; } /* Form RS code generator polynomial from its roots */ rs->genpoly = (data_t*)malloc(sizeof(data_t) * (nroots + 1)); if (rs->genpoly == NULL) { free(rs->alpha_to); free(rs->index_of); free(rs); rs = NULL; goto done; } rs->fcr = fcr; rs->prim = prim; rs->nroots = nroots; /* Find prim-th root of 1, used in decoding */ for (iprim = 1; (iprim % prim) != 0; iprim += rs->nn) ; rs->iprim = iprim / prim; rs->genpoly[0] = 1; for (i = 0, root = fcr * prim; i < nroots; i++, root += prim) { rs->genpoly[i + 1] = 1; /* Multiply rs->genpoly[] by @**(root + x) */ for (j = i; j > 0; j--) { if (rs->genpoly[j] != 0) rs->genpoly[j] = rs->genpoly[j - 1] ^ rs->alpha_to[modnn(rs, rs->index_of[rs->genpoly[j]] + root)]; else rs->genpoly[j] = rs->genpoly[j - 1]; } /* rs->genpoly[0] can never be zero */ rs->genpoly[0] = rs->alpha_to[modnn(rs, rs->index_of[rs->genpoly[0]] + root)]; } /* convert rs->genpoly[] to index form for quicker encoding */ for (i = 0; i <= nroots; i++) rs->genpoly[i] = rs->index_of[rs->genpoly[i]]; done:; } gr-satellites-4.4.0/lib/libfec/init_rs_char.c000066400000000000000000000015421414055407700211110ustar00rootroot00000000000000/* Initialize a RS codec * * Copyright 2002 Phil Karn, KA9Q * May be used under the terms of the GNU Lesser General Public License (LGPL) */ #include #include "char.h" #include "rs-common.h" void free_rs_char(void* p) { struct rs* rs = (struct rs*)p; free(rs->alpha_to); free(rs->index_of); free(rs->genpoly); free(rs); } /* Initialize a Reed-Solomon codec * symsize = symbol size, bits * gfpoly = Field generator polynomial coefficients * fcr = first root of RS code generator polynomial, index form * prim = primitive element to generate polynomial roots * nroots = RS code generator polynomial degree (number of roots) * pad = padding bytes at front of shortened block */ void* init_rs_char(int symsize, int gfpoly, int fcr, int prim, int nroots, int pad) { struct rs* rs; #include "init_rs.h" return rs; } gr-satellites-4.4.0/lib/libfec/lesser.txt000066400000000000000000000634761414055407700203550ustar00rootroot00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! gr-satellites-4.4.0/lib/libfec/rs-common.h000066400000000000000000000017031414055407700203630ustar00rootroot00000000000000/* Stuff common to all the general-purpose Reed-Solomon codecs * Copyright 2004 Phil Karn, KA9Q * May be used under the terms of the GNU Lesser General Public License (LGPL) */ /* Reed-Solomon codec control block */ struct rs { int mm; /* Bits per symbol */ int nn; /* Symbols per block (= (1<= rs->nn) { x -= rs->nn; x = (x >> rs->mm) + (x & rs->nn); } return x; } gr-satellites-4.4.0/lib/libfec/taltab.c000066400000000000000000000063271414055407700177220ustar00rootroot00000000000000unsigned char Taltab[] = { 0x00, 0x7b, 0xaf, 0xd4, 0x99, 0xe2, 0x36, 0x4d, 0xfa, 0x81, 0x55, 0x2e, 0x63, 0x18, 0xcc, 0xb7, 0x86, 0xfd, 0x29, 0x52, 0x1f, 0x64, 0xb0, 0xcb, 0x7c, 0x07, 0xd3, 0xa8, 0xe5, 0x9e, 0x4a, 0x31, 0xec, 0x97, 0x43, 0x38, 0x75, 0x0e, 0xda, 0xa1, 0x16, 0x6d, 0xb9, 0xc2, 0x8f, 0xf4, 0x20, 0x5b, 0x6a, 0x11, 0xc5, 0xbe, 0xf3, 0x88, 0x5c, 0x27, 0x90, 0xeb, 0x3f, 0x44, 0x09, 0x72, 0xa6, 0xdd, 0xef, 0x94, 0x40, 0x3b, 0x76, 0x0d, 0xd9, 0xa2, 0x15, 0x6e, 0xba, 0xc1, 0x8c, 0xf7, 0x23, 0x58, 0x69, 0x12, 0xc6, 0xbd, 0xf0, 0x8b, 0x5f, 0x24, 0x93, 0xe8, 0x3c, 0x47, 0x0a, 0x71, 0xa5, 0xde, 0x03, 0x78, 0xac, 0xd7, 0x9a, 0xe1, 0x35, 0x4e, 0xf9, 0x82, 0x56, 0x2d, 0x60, 0x1b, 0xcf, 0xb4, 0x85, 0xfe, 0x2a, 0x51, 0x1c, 0x67, 0xb3, 0xc8, 0x7f, 0x04, 0xd0, 0xab, 0xe6, 0x9d, 0x49, 0x32, 0x8d, 0xf6, 0x22, 0x59, 0x14, 0x6f, 0xbb, 0xc0, 0x77, 0x0c, 0xd8, 0xa3, 0xee, 0x95, 0x41, 0x3a, 0x0b, 0x70, 0xa4, 0xdf, 0x92, 0xe9, 0x3d, 0x46, 0xf1, 0x8a, 0x5e, 0x25, 0x68, 0x13, 0xc7, 0xbc, 0x61, 0x1a, 0xce, 0xb5, 0xf8, 0x83, 0x57, 0x2c, 0x9b, 0xe0, 0x34, 0x4f, 0x02, 0x79, 0xad, 0xd6, 0xe7, 0x9c, 0x48, 0x33, 0x7e, 0x05, 0xd1, 0xaa, 0x1d, 0x66, 0xb2, 0xc9, 0x84, 0xff, 0x2b, 0x50, 0x62, 0x19, 0xcd, 0xb6, 0xfb, 0x80, 0x54, 0x2f, 0x98, 0xe3, 0x37, 0x4c, 0x01, 0x7a, 0xae, 0xd5, 0xe4, 0x9f, 0x4b, 0x30, 0x7d, 0x06, 0xd2, 0xa9, 0x1e, 0x65, 0xb1, 0xca, 0x87, 0xfc, 0x28, 0x53, 0x8e, 0xf5, 0x21, 0x5a, 0x17, 0x6c, 0xb8, 0xc3, 0x74, 0x0f, 0xdb, 0xa0, 0xed, 0x96, 0x42, 0x39, 0x08, 0x73, 0xa7, 0xdc, 0x91, 0xea, 0x3e, 0x45, 0xf2, 0x89, 0x5d, 0x26, 0x6b, 0x10, 0xc4, 0xbf, }; unsigned char Tal1tab[] = { 0x00, 0xcc, 0xac, 0x60, 0x79, 0xb5, 0xd5, 0x19, 0xf0, 0x3c, 0x5c, 0x90, 0x89, 0x45, 0x25, 0xe9, 0xfd, 0x31, 0x51, 0x9d, 0x84, 0x48, 0x28, 0xe4, 0x0d, 0xc1, 0xa1, 0x6d, 0x74, 0xb8, 0xd8, 0x14, 0x2e, 0xe2, 0x82, 0x4e, 0x57, 0x9b, 0xfb, 0x37, 0xde, 0x12, 0x72, 0xbe, 0xa7, 0x6b, 0x0b, 0xc7, 0xd3, 0x1f, 0x7f, 0xb3, 0xaa, 0x66, 0x06, 0xca, 0x23, 0xef, 0x8f, 0x43, 0x5a, 0x96, 0xf6, 0x3a, 0x42, 0x8e, 0xee, 0x22, 0x3b, 0xf7, 0x97, 0x5b, 0xb2, 0x7e, 0x1e, 0xd2, 0xcb, 0x07, 0x67, 0xab, 0xbf, 0x73, 0x13, 0xdf, 0xc6, 0x0a, 0x6a, 0xa6, 0x4f, 0x83, 0xe3, 0x2f, 0x36, 0xfa, 0x9a, 0x56, 0x6c, 0xa0, 0xc0, 0x0c, 0x15, 0xd9, 0xb9, 0x75, 0x9c, 0x50, 0x30, 0xfc, 0xe5, 0x29, 0x49, 0x85, 0x91, 0x5d, 0x3d, 0xf1, 0xe8, 0x24, 0x44, 0x88, 0x61, 0xad, 0xcd, 0x01, 0x18, 0xd4, 0xb4, 0x78, 0xc5, 0x09, 0x69, 0xa5, 0xbc, 0x70, 0x10, 0xdc, 0x35, 0xf9, 0x99, 0x55, 0x4c, 0x80, 0xe0, 0x2c, 0x38, 0xf4, 0x94, 0x58, 0x41, 0x8d, 0xed, 0x21, 0xc8, 0x04, 0x64, 0xa8, 0xb1, 0x7d, 0x1d, 0xd1, 0xeb, 0x27, 0x47, 0x8b, 0x92, 0x5e, 0x3e, 0xf2, 0x1b, 0xd7, 0xb7, 0x7b, 0x62, 0xae, 0xce, 0x02, 0x16, 0xda, 0xba, 0x76, 0x6f, 0xa3, 0xc3, 0x0f, 0xe6, 0x2a, 0x4a, 0x86, 0x9f, 0x53, 0x33, 0xff, 0x87, 0x4b, 0x2b, 0xe7, 0xfe, 0x32, 0x52, 0x9e, 0x77, 0xbb, 0xdb, 0x17, 0x0e, 0xc2, 0xa2, 0x6e, 0x7a, 0xb6, 0xd6, 0x1a, 0x03, 0xcf, 0xaf, 0x63, 0x8a, 0x46, 0x26, 0xea, 0xf3, 0x3f, 0x5f, 0x93, 0xa9, 0x65, 0x05, 0xc9, 0xd0, 0x1c, 0x7c, 0xb0, 0x59, 0x95, 0xf5, 0x39, 0x20, 0xec, 0x8c, 0x40, 0x54, 0x98, 0xf8, 0x34, 0x2d, 0xe1, 0x81, 0x4d, 0xa4, 0x68, 0x08, 0xc4, 0xdd, 0x11, 0x71, 0xbd, }; gr-satellites-4.4.0/lib/lilacsat1_demux_impl.cc000066400000000000000000000060341414055407700214650ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2017,2020 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include "lilacsat1_demux_impl.h" #include #define CODEC2_FRAME_LEN 7 #define CHUNK_LEN 24 #define BITS_PER_BYTE 8 #define PACKET_LEN 116 #define HEADER_LEN 4 #define FRAME_LEN (5 * (CHUNK_LEN - CODEC2_FRAME_LEN) - HEADER_LEN) namespace gr { namespace satellites { lilacsat1_demux::sptr lilacsat1_demux::make(std::string tag) { return gnuradio::get_initial_sptr(new lilacsat1_demux_impl(tag)); } /* * The private constructor */ lilacsat1_demux_impl::lilacsat1_demux_impl(std::string tag) : gr::sync_block("lilacsat1_demux", gr::io_signature::make(1, 1, sizeof(uint8_t)), gr::io_signature::make(0, 0, 0)), d_position(-1), d_tag(pmt::string_to_symbol(tag)) { d_frame.fill(0); d_codec2.fill(0); message_port_register_out(pmt::mp("frame")); message_port_register_out(pmt::mp("codec2")); } /* * Our virtual destructor. */ lilacsat1_demux_impl::~lilacsat1_demux_impl() {} int lilacsat1_demux_impl::work(int noutput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items) { const uint8_t* in = (const uint8_t*)input_items[0]; std::vector tags; for (int i = 0; i < noutput_items; ++i) { get_tags_in_window(tags, 0, i, i + 1, d_tag); if (!tags.empty()) { d_position = 0; } if (d_position == d_packet_len * d_bits_per_byte) { d_position = -1; message_port_pub( pmt::mp("frame"), pmt::cons(pmt::PMT_NIL, pmt::init_u8vector(d_frame.size(), d_frame.data()))); d_frame.fill(0); } if (d_position == -1) continue; auto base = d_position / d_bits_per_byte + d_header_len; auto bit = d_bits_per_byte - 1 - d_position % d_bits_per_byte; auto idx = base % d_chunk_len; if (idx >= d_chunk_len - d_codec2_frame_len) { auto byte = idx - (d_chunk_len - d_codec2_frame_len); d_codec2.at(byte) |= (in[i] & 1) << bit; if ((byte == d_codec2.size() - 1) && (bit == 0)) { message_port_pub( pmt::mp("codec2"), pmt::cons(pmt::PMT_NIL, pmt::init_u8vector(d_codec2.size(), d_codec2.data()))); d_codec2.fill(0); } } else if (idx < d_chunk_len - d_codec2_frame_len) { auto byte = (base / d_chunk_len) * (d_chunk_len - d_codec2_frame_len) + idx - d_header_len; d_frame.at(byte) |= (in[i] & 1) << bit; } ++d_position; } return noutput_items; } } /* namespace satellites */ } /* namespace gr */ gr-satellites-4.4.0/lib/lilacsat1_demux_impl.h000066400000000000000000000025641414055407700213330ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2017,2020 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_SATELLITES_LILACSAT1_DEMUX_IMPL_H #define INCLUDED_SATELLITES_LILACSAT1_DEMUX_IMPL_H #include #include #include #include namespace gr { namespace satellites { class lilacsat1_demux_impl : public lilacsat1_demux { private: constexpr static size_t d_codec2_frame_len = 7; constexpr static size_t d_chunk_len = 24; constexpr static size_t d_bits_per_byte = 8; constexpr static size_t d_packet_len = 116; constexpr static size_t d_header_len = 4; constexpr static size_t d_frame_len = 5 * (d_chunk_len - d_codec2_frame_len) - d_header_len; int d_position; pmt::pmt_t d_tag; std::array d_frame; // Current frame without codec2 bytes std::array d_codec2; // Current codec2 frame public: lilacsat1_demux_impl(std::string tag); ~lilacsat1_demux_impl(); // Where all the action really happens int work(int noutput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items); }; } // namespace satellites } // namespace gr #endif /* INCLUDED_SATELLITES_LILACSAT1_DEMUX_IMPL_H */ gr-satellites-4.4.0/lib/matrix_deinterleaver_soft_impl.cc000066400000000000000000000053451414055407700236620ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2019-2020 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "matrix_deinterleaver_soft_impl.h" #include #include namespace gr { namespace satellites { matrix_deinterleaver_soft::sptr matrix_deinterleaver_soft::make(int rows, int cols, int output_size, int output_skip) { return gnuradio::get_initial_sptr( new matrix_deinterleaver_soft_impl(rows, cols, output_size, output_skip)); } /* * The private constructor */ matrix_deinterleaver_soft_impl::matrix_deinterleaver_soft_impl(int rows, int cols, int output_size, int output_skip) : gr::block("matrix_deinterleaver_soft", gr::io_signature::make(0, 0, 0), gr::io_signature::make(0, 0, 0)), d_rows(rows), d_cols(cols), d_output_size(output_size), d_output_skip(output_skip) { if (d_output_size + d_output_skip > d_rows * d_cols) { throw std::runtime_error("Invalid size parameters for matrix deinterleave"); } d_out.resize(d_rows * d_cols); message_port_register_out(pmt::mp("out")); message_port_register_in(pmt::mp("in")); set_msg_handler(pmt::mp("in"), [this](pmt::pmt_t msg) { this->msg_handler(msg); }); } /* * Our virtual destructor. */ matrix_deinterleaver_soft_impl::~matrix_deinterleaver_soft_impl() {} void matrix_deinterleaver_soft_impl::forecast(int noutput_items, gr_vector_int& ninput_items_required) { } int matrix_deinterleaver_soft_impl::general_work(int noutput_items, gr_vector_int& ninput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items) { return 0; } void matrix_deinterleaver_soft_impl::msg_handler(pmt::pmt_t pmt_msg) { size_t length(0); auto data = pmt::f32vector_elements(pmt::cdr(pmt_msg), length); if (length != d_rows * d_cols) return; // Full matrix deinterleave, ignoring output cropping for (size_t i = 0; i < length; ++i) { d_out[i] = data[d_rows * (i % d_cols) + i / d_cols]; } // Output cropping message_port_pub( pmt::mp("out"), pmt::cons(pmt::PMT_NIL, pmt::init_f32vector(d_output_size, &d_out[d_output_skip]))); } } /* namespace satellites */ } /* namespace gr */ gr-satellites-4.4.0/lib/matrix_deinterleaver_soft_impl.h000066400000000000000000000023561414055407700235230ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2019-2020 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_SATELLITES_MATRIX_DEINTERLEAVER_SOFT_IMPL_H #define INCLUDED_SATELLITES_MATRIX_DEINTERLEAVER_SOFT_IMPL_H #include #include namespace gr { namespace satellites { class matrix_deinterleaver_soft_impl : public matrix_deinterleaver_soft { private: const size_t d_rows; const size_t d_cols; const size_t d_output_size; const size_t d_output_skip; std::vector d_out; public: matrix_deinterleaver_soft_impl(int rows, int cols, int output_size, int output_skip); ~matrix_deinterleaver_soft_impl(); // Where all the action really happens void forecast(int noutput_items, gr_vector_int& ninput_items_required); int general_work(int noutput_items, gr_vector_int& ninput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items); void msg_handler(pmt::pmt_t pmt_msg); }; } // namespace satellites } // namespace gr #endif /* INCLUDED_SATELLITES_MATRIX_DEINTERLEAVER_SOFT_IMPL_H */ gr-satellites-4.4.0/lib/nrzi_decode_impl.cc000066400000000000000000000023431414055407700206720ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2020 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "nrzi_decode_impl.h" #include namespace gr { namespace satellites { nrzi_decode::sptr nrzi_decode::make() { return gnuradio::get_initial_sptr(new nrzi_decode_impl()); } /* * The private constructor */ nrzi_decode_impl::nrzi_decode_impl() : gr::sync_block("nrzi_decode", gr::io_signature::make(1, 1, sizeof(uint8_t)), gr::io_signature::make(1, 1, sizeof(uint8_t))), d_last(0) { } /* * Our virtual destructor. */ nrzi_decode_impl::~nrzi_decode_impl() {} int nrzi_decode_impl::work(int noutput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items) { const uint8_t* in = (const uint8_t*)input_items[0]; uint8_t* out = (uint8_t*)output_items[0]; for (int i = 0; i < noutput_items; ++i) { out[i] = ~(in[i] ^ d_last) & 1; d_last = in[i]; } return noutput_items; } } /* namespace satellites */ } /* namespace gr */ gr-satellites-4.4.0/lib/nrzi_decode_impl.h000066400000000000000000000013641414055407700205360ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2020 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_SATELLITES_NRZI_DECODE_IMPL_H #define INCLUDED_SATELLITES_NRZI_DECODE_IMPL_H #include namespace gr { namespace satellites { class nrzi_decode_impl : public nrzi_decode { private: uint8_t d_last; public: nrzi_decode_impl(); ~nrzi_decode_impl(); // Where all the action really happens int work(int noutput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items); }; } // namespace satellites } // namespace gr #endif /* INCLUDED_SATELLITES_NRZI_DECODE_IMPL_H */ gr-satellites-4.4.0/lib/nrzi_encode_impl.cc000066400000000000000000000023241414055407700207030ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2020 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "nrzi_encode_impl.h" #include namespace gr { namespace satellites { nrzi_encode::sptr nrzi_encode::make() { return gnuradio::get_initial_sptr(new nrzi_encode_impl()); } /* * The private constructor */ nrzi_encode_impl::nrzi_encode_impl() : gr::sync_block("nrzi_encode", gr::io_signature::make(1, 1, sizeof(uint8_t)), gr::io_signature::make(1, 1, sizeof(uint8_t))), d_last(0) { } /* * Our virtual destructor. */ nrzi_encode_impl::~nrzi_encode_impl() {} int nrzi_encode_impl::work(int noutput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items) { const uint8_t* in = (const uint8_t*)input_items[0]; uint8_t* out = (uint8_t*)output_items[0]; for (int i = 0; i < noutput_items; ++i) { out[i] = d_last = ~(in[i] ^ d_last) & 1; } return noutput_items; } } /* namespace satellites */ } /* namespace gr */ gr-satellites-4.4.0/lib/nrzi_encode_impl.h000066400000000000000000000013641414055407700205500ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2020 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_SATELLITES_NRZI_ENCODE_IMPL_H #define INCLUDED_SATELLITES_NRZI_ENCODE_IMPL_H #include namespace gr { namespace satellites { class nrzi_encode_impl : public nrzi_encode { private: uint8_t d_last; public: nrzi_encode_impl(); ~nrzi_encode_impl(); // Where all the action really happens int work(int noutput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items); }; } // namespace satellites } // namespace gr #endif /* INCLUDED_SATELLITES_NRZI_ENCODE_IMPL_H */ gr-satellites-4.4.0/lib/nusat_decoder_impl.cc000066400000000000000000000116721414055407700212310ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2017,2020 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include "nusat_decoder_impl.h" #include #include "rs.h" extern "C" { #include "libfec/fec.h" } namespace gr { namespace satellites { nusat_decoder::sptr nusat_decoder::make() { return gnuradio::get_initial_sptr(new nusat_decoder_impl()); } const uint8_t nusat_decoder_impl::d_scrambler_sequence[] = { 0x1D, 0x8B, 0x06, 0x0C, 0x54, 0xDF, 0x21, 0xCB, 0x5C, 0x74, 0xE3, 0x15, 0x68, 0x04, 0x41, 0x91, 0x7A, 0x3D, 0x7A, 0x81, 0x30, 0x57, 0x1A, 0x0A, 0x09, 0xDB, 0x33, 0x57, 0x1F, 0x86, 0xEF, 0x58, 0xE0, 0x16, 0xBD, 0x9B, 0xA6, 0x42, 0xFB, 0x09, 0xD6, 0xCB, 0xE1, 0x27, 0x8E, 0xE7, 0x95, 0x1B, 0x46, 0x4C, 0xEE, 0xC3, 0x75, 0x7D, 0xA6, 0x1C, 0xF2, 0x45, 0x01, 0x00, 0xFE, 0xAF, 0xFD, 0x03 }; const uint_fast8_t nusat_decoder_impl::crc8_table[256] = { 0x00, 0x07, 0x0e, 0x09, 0x1c, 0x1b, 0x12, 0x15, 0x38, 0x3f, 0x36, 0x31, 0x24, 0x23, 0x2a, 0x2d, 0x70, 0x77, 0x7e, 0x79, 0x6c, 0x6b, 0x62, 0x65, 0x48, 0x4f, 0x46, 0x41, 0x54, 0x53, 0x5a, 0x5d, 0xe0, 0xe7, 0xee, 0xe9, 0xfc, 0xfb, 0xf2, 0xf5, 0xd8, 0xdf, 0xd6, 0xd1, 0xc4, 0xc3, 0xca, 0xcd, 0x90, 0x97, 0x9e, 0x99, 0x8c, 0x8b, 0x82, 0x85, 0xa8, 0xaf, 0xa6, 0xa1, 0xb4, 0xb3, 0xba, 0xbd, 0xc7, 0xc0, 0xc9, 0xce, 0xdb, 0xdc, 0xd5, 0xd2, 0xff, 0xf8, 0xf1, 0xf6, 0xe3, 0xe4, 0xed, 0xea, 0xb7, 0xb0, 0xb9, 0xbe, 0xab, 0xac, 0xa5, 0xa2, 0x8f, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9d, 0x9a, 0x27, 0x20, 0x29, 0x2e, 0x3b, 0x3c, 0x35, 0x32, 0x1f, 0x18, 0x11, 0x16, 0x03, 0x04, 0x0d, 0x0a, 0x57, 0x50, 0x59, 0x5e, 0x4b, 0x4c, 0x45, 0x42, 0x6f, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7d, 0x7a, 0x89, 0x8e, 0x87, 0x80, 0x95, 0x92, 0x9b, 0x9c, 0xb1, 0xb6, 0xbf, 0xb8, 0xad, 0xaa, 0xa3, 0xa4, 0xf9, 0xfe, 0xf7, 0xf0, 0xe5, 0xe2, 0xeb, 0xec, 0xc1, 0xc6, 0xcf, 0xc8, 0xdd, 0xda, 0xd3, 0xd4, 0x69, 0x6e, 0x67, 0x60, 0x75, 0x72, 0x7b, 0x7c, 0x51, 0x56, 0x5f, 0x58, 0x4d, 0x4a, 0x43, 0x44, 0x19, 0x1e, 0x17, 0x10, 0x05, 0x02, 0x0b, 0x0c, 0x21, 0x26, 0x2f, 0x28, 0x3d, 0x3a, 0x33, 0x34, 0x4e, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5c, 0x5b, 0x76, 0x71, 0x78, 0x7f, 0x6a, 0x6d, 0x64, 0x63, 0x3e, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2c, 0x2b, 0x06, 0x01, 0x08, 0x0f, 0x1a, 0x1d, 0x14, 0x13, 0xae, 0xa9, 0xa0, 0xa7, 0xb2, 0xb5, 0xbc, 0xbb, 0x96, 0x91, 0x98, 0x9f, 0x8a, 0x8d, 0x84, 0x83, 0xde, 0xd9, 0xd0, 0xd7, 0xc2, 0xc5, 0xcc, 0xcb, 0xe6, 0xe1, 0xe8, 0xef, 0xfa, 0xfd, 0xf4, 0xf3 }; /* * The private constructor */ nusat_decoder_impl::nusat_decoder_impl() : gr::block("nusat_decoder", gr::io_signature::make(0, 0, 0), gr::io_signature::make(0, 0, 0)) { d_rs = init_rs_char(8, 0x11d, 1, 1, 4, 0); message_port_register_out(pmt::mp("out")); message_port_register_in(pmt::mp("in")); set_msg_handler(pmt::mp("in"), [this](pmt::pmt_t msg) { this->msg_handler(msg); }); } /* * Our virtual destructor. */ nusat_decoder_impl::~nusat_decoder_impl() { free_rs_char(d_rs); } void nusat_decoder_impl::forecast(int noutput_items, gr_vector_int& ninput_items_required) { } int nusat_decoder_impl::general_work(int noutput_items, gr_vector_int& ninput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items) { return 0; } uint_fast8_t nusat_decoder_impl::crc8(const uint8_t* data, size_t data_len) { const uint8_t* d = data; uint_fast8_t crc = 0; while (data_len--) crc = crc8_table[crc ^ *d++]; return crc; } void nusat_decoder_impl::msg_handler(pmt::pmt_t pmt_msg) { size_t length(0); auto msg = pmt::u8vector_elements(pmt::cdr(pmt_msg), length); d_data.fill(0); auto msg_length = std::min(length, d_data.size()); memcpy(d_data.data(), msg, msg_length); // Reed-Solomon decoding auto rs_res = decode_rs_char(d_rs, d_data.data(), NULL, 0); if (rs_res < 0) { GR_LOG_INFO(d_logger, "Reed-Solomon decoding failed"); return; } else { GR_LOG_INFO(d_logger, "Reed-Solomon decoding OK"); } length = d_data[d_len_byte]; if (length >= msg_length - d_header_len) { GR_LOG_INFO(d_logger, "Length field corrupted"); return; } auto packet = &d_data[d_header_len]; // Descramble for (size_t i = 0; i < length; ++i) { packet[i] ^= d_scrambler_sequence[i]; } // Compute CRC-8 if (crc8(packet, length) != d_data[d_crc_byte]) { GR_LOG_INFO(d_logger, "CRC-8 does not match"); return; } // Send by GNUradio message message_port_pub(pmt::mp("out"), pmt::cons(pmt::PMT_NIL, pmt::init_u8vector(length, packet))); } } /* namespace satellites */ } /* namespace gr */ gr-satellites-4.4.0/lib/nusat_decoder_impl.h000066400000000000000000000026131414055407700210660ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2017 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_SATELLITES_NUSAT_DECODER_IMPL_H #define INCLUDED_SATELLITES_NUSAT_DECODER_IMPL_H #include #include #include #include #include "rs.h" namespace gr { namespace satellites { class nusat_decoder_impl : public nusat_decoder { private: constexpr static size_t d_msg_len = 64; constexpr static size_t d_header_len = 2; constexpr static size_t d_len_byte = 0; constexpr static size_t d_crc_byte = 1; static const uint8_t d_scrambler_sequence[]; static const uint_fast8_t crc8_table[]; void* d_rs; std::array d_data; uint_fast8_t crc8(const uint8_t* data, size_t data_len); public: nusat_decoder_impl(); ~nusat_decoder_impl(); // Where all the action really happens void forecast(int noutput_items, gr_vector_int& ninput_items_required); int general_work(int noutput_items, gr_vector_int& ninput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items); void msg_handler(pmt::pmt_t pmt_msg); }; } // namespace satellites } // namespace gr #endif /* INCLUDED_SATELLITES_NUSAT_DECODER_IMPL_H */ gr-satellites-4.4.0/lib/pdu_add_meta_impl.cc000066400000000000000000000032611414055407700210130ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2020 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "pdu_add_meta_impl.h" #include #include #include namespace gr { namespace satellites { pdu_add_meta::sptr pdu_add_meta::make(pmt::pmt_t meta) { return gnuradio::get_initial_sptr(new pdu_add_meta_impl(meta)); } /* * The private constructor */ pdu_add_meta_impl::pdu_add_meta_impl(pmt::pmt_t meta) : gr::block("pdu_add_meta", gr::io_signature::make(0, 0, 0), gr::io_signature::make(0, 0, 0)), d_meta(meta) { message_port_register_out(pmt::mp("out")); message_port_register_in(pmt::mp("in")); set_msg_handler(pmt::mp("in"), [this](pmt::pmt_t msg) { this->msg_handler(msg); }); } /* * Our virtual destructor. */ pdu_add_meta_impl::~pdu_add_meta_impl() {} void pdu_add_meta_impl::forecast(int noutput_items, gr_vector_int& ninput_items_required) { } int pdu_add_meta_impl::general_work(int noutput_items, gr_vector_int& ninput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items) { return 0; } void pdu_add_meta_impl::msg_handler(pmt::pmt_t pmt_msg) { pmt::pmt_t car = pmt::car(pmt_msg); if (car == pmt::PMT_NIL) { car = pmt::make_dict(); } car = pmt::dict_update(car, d_meta); message_port_pub(pmt::mp("out"), pmt::cons(car, pmt::cdr(pmt_msg))); } } /* namespace satellites */ } /* namespace gr */ gr-satellites-4.4.0/lib/pdu_add_meta_impl.h000066400000000000000000000017201414055407700206530ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2020 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_SATELLITES_PDU_ADD_META_IMPL_H #define INCLUDED_SATELLITES_PDU_ADD_META_IMPL_H #include namespace gr { namespace satellites { class pdu_add_meta_impl : public pdu_add_meta { private: pmt::pmt_t d_meta; public: pdu_add_meta_impl(pmt::pmt_t meta); ~pdu_add_meta_impl(); // Where all the action really happens void forecast(int noutput_items, gr_vector_int& ninput_items_required); int general_work(int noutput_items, gr_vector_int& ninput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items); void msg_handler(pmt::pmt_t pmt_msg); }; } // namespace satellites } // namespace gr #endif /* INCLUDED_SATELLITES_PDU_ADD_META_IMPL_H */ gr-satellites-4.4.0/lib/pdu_head_tail_impl.cc000066400000000000000000000045161414055407700211730ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2020 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "pdu_head_tail_impl.h" #include #include #include namespace gr { namespace satellites { pdu_head_tail::sptr pdu_head_tail::make(int mode, size_t num) { return gnuradio::get_initial_sptr(new pdu_head_tail_impl(mode, num)); } /* * The private constructor */ pdu_head_tail_impl::pdu_head_tail_impl(int mode, size_t num) : gr::block("pdu_head_tail", gr::io_signature::make(0, 0, 0), gr::io_signature::make(0, 0, 0)), d_mode(mode), d_num(num) { message_port_register_out(pmt::mp("out")); message_port_register_in(pmt::mp("in")); set_msg_handler(pmt::mp("in"), [this](pmt::pmt_t msg) { this->msg_handler(msg); }); } /* * Our virtual destructor. */ pdu_head_tail_impl::~pdu_head_tail_impl() {} void pdu_head_tail_impl::forecast(int noutput_items, gr_vector_int& ninput_items_required) { } int pdu_head_tail_impl::general_work(int noutput_items, gr_vector_int& ninput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items) { return 0; } void pdu_head_tail_impl::msg_handler(pmt::pmt_t pmt_msg) { std::vector msg = pmt::u8vector_elements(pmt::cdr(pmt_msg)); std::vector cut_msg; auto num = std::min(d_num, msg.size()); switch (d_mode) { case PDU_HEADTAIL_HEAD: cut_msg = std::vector(msg.begin(), msg.begin() + num); break; case PDU_HEADTAIL_HEADMINUS: cut_msg = std::vector(msg.begin(), msg.end() - num); break; case PDU_HEADTAIL_TAIL: cut_msg = std::vector(msg.end() - num, msg.end()); break; case PDU_HEADTAIL_TAILPLUS: cut_msg = std::vector(msg.begin() + num, msg.end()); break; default: throw "Invalid pdu_head_tail mode"; break; } message_port_pub( pmt::mp("out"), pmt::cons(pmt::car(pmt_msg), pmt::init_u8vector(cut_msg.size(), cut_msg))); } } /* namespace satellites */ } /* namespace gr */ gr-satellites-4.4.0/lib/pdu_head_tail_impl.h000066400000000000000000000021421414055407700210260ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2020 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_SATELLITES_PDU_HEAD_TAIL_IMPL_H #define INCLUDED_SATELLITES_PDU_HEAD_TAIL_IMPL_H #include #define PDU_HEADTAIL_HEAD 0 #define PDU_HEADTAIL_HEADMINUS 1 #define PDU_HEADTAIL_TAIL 2 #define PDU_HEADTAIL_TAILPLUS 3 namespace gr { namespace satellites { class pdu_head_tail_impl : public pdu_head_tail { private: int d_mode; size_t d_num; public: pdu_head_tail_impl(int mode, size_t num); ~pdu_head_tail_impl(); // Where all the action really happens void forecast(int noutput_items, gr_vector_int& ninput_items_required); int general_work(int noutput_items, gr_vector_int& ninput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items); void msg_handler(pmt::pmt_t pmt_msg); }; } // namespace satellites } // namespace gr #endif /* INCLUDED_SATELLITES_PDU_HEAD_TAIL_IMPL_H */ gr-satellites-4.4.0/lib/pdu_length_filter_impl.cc000066400000000000000000000036141414055407700221050ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2021 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "pdu_length_filter_impl.h" #include #include #include namespace gr { namespace satellites { pdu_length_filter::sptr pdu_length_filter::make(int min, int max) { return gnuradio::get_initial_sptr(new pdu_length_filter_impl(min, max)); } /* * The private constructor */ pdu_length_filter_impl::pdu_length_filter_impl(int min, int max) : gr::block("pdu_length_filter", gr::io_signature::make(0, 0, 0), gr::io_signature::make(0, 0, 0)), d_min(min) { // max < 0 means unlimited length d_max = max < 0 ? (size_t)std::numeric_limits::max() : static_cast(max); message_port_register_out(pmt::mp("out")); message_port_register_in(pmt::mp("in")); set_msg_handler(pmt::mp("in"), [this](pmt::pmt_t msg) { this->msg_handler(msg); }); } /* * Our virtual destructor. */ pdu_length_filter_impl::~pdu_length_filter_impl() {} void pdu_length_filter_impl::forecast(int noutput_items, gr_vector_int& ninput_items_required) { } int pdu_length_filter_impl::general_work(int noutput_items, gr_vector_int& ninput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items) { return 0; } void pdu_length_filter_impl::msg_handler(pmt::pmt_t pmt_msg) { std::vector msg = pmt::u8vector_elements(pmt::cdr(pmt_msg)); if ((msg.size() >= d_min) && (msg.size() <= d_max)) { message_port_pub(pmt::mp("out"), pmt_msg); } } } /* namespace satellites */ } /* namespace gr */ gr-satellites-4.4.0/lib/pdu_length_filter_impl.h000066400000000000000000000017731414055407700217530ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2021 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_SATELLITES_PDU_LENGTH_FILTER_IMPL_H #define INCLUDED_SATELLITES_PDU_LENGTH_FILTER_IMPL_H #include namespace gr { namespace satellites { class pdu_length_filter_impl : public pdu_length_filter { private: size_t d_min, d_max; public: pdu_length_filter_impl(int min, int max); ~pdu_length_filter_impl(); // Where all the action really happens void forecast(int noutput_items, gr_vector_int& ninput_items_required); int general_work(int noutput_items, gr_vector_int& ninput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items); void msg_handler(pmt::pmt_t pmt_msg); }; } // namespace satellites } // namespace gr #endif /* INCLUDED_SATELLITES_PDU_LENGTH_FILTER_IMPL_H */ gr-satellites-4.4.0/lib/qa_satellites.cc000066400000000000000000000021441414055407700202150ustar00rootroot00000000000000/* * Copyright 2012 Free Software Foundation, Inc. * * This file is part of GNU Radio * * GNU Radio is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * GNU Radio is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNU Radio; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, * Boston, MA 02110-1301, USA. */ /* * This class gathers together all the test cases for the gr-filter * directory into a single test suite. As you create new test cases, * add them here. */ #include "qa_satellites.h" CppUnit::TestSuite* qa_satellites::suite() { CppUnit::TestSuite* s = new CppUnit::TestSuite("satellites"); return s; } gr-satellites-4.4.0/lib/qa_satellites.h000066400000000000000000000022321414055407700200550ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2012 Free Software Foundation, Inc. * * This file is part of GNU Radio * * GNU Radio is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * GNU Radio is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNU Radio; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, * Boston, MA 02110-1301, USA. */ #ifndef _QA_SATELLITES_H_ #define _QA_SATELLITES_H_ #include #include //! collect all the tests for the gr-filter directory class __GR_ATTR_EXPORT qa_satellites { public: //! return suite of tests for all of gr-filter directory static CppUnit::TestSuite* suite(); }; #endif /* _QA_SATELLITES_H_ */ gr-satellites-4.4.0/lib/radecoder/000077500000000000000000000000001414055407700170035ustar00rootroot00000000000000gr-satellites-4.4.0/lib/radecoder/README000066400000000000000000000003321414055407700176610ustar00rootroot00000000000000RA codes decoder by Miklos Maroti ---------------------------------- This decoder is used to decode the RA codes used by SMOG-P and ATL-1. The decoder source is taken from: https://github.com/szlldm/smogp_atl1_gndsw gr-satellites-4.4.0/lib/radecoder/ra_config.c000066400000000000000000000036511414055407700211030ustar00rootroot00000000000000/* -*- c -*- */ /* * Copyright 2015-2019 Miklos Maroti. * Copyright 2019 Daniel Estevez (reentrant version) * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #include "ra_config.h" #include /* masks selected from http://users.ece.cmu.edu/~koopman/lfsr/index.html */ static const uint16_t ra_lfsr_masks_table[9][4] = { { 0x12, 0x17, 0x1B, 0x1E }, // highbit 4, data_length <= 31 { 0x21, 0x2D, 0x30, 0x39 }, // highbit 5, data_length <= 63 { 0x41, 0x53, 0x69, 0x7B }, // highbit 6, data_length <= 127 { 0x8E, 0xAF, 0xC3, 0xE7 }, // highbit 7, data_length <= 255 { 0x108, 0x13B, 0x168, 0x1DC }, // highbit 8, data_length <= 511 { 0x204, 0x2E3, 0x369, 0x3AA }, // highbit 9, data_length <= 1023 { 0x415, 0x4BF, 0x553, 0x62B }, // highbit 10, data_length <= 2047 { 0x83E, 0x939, 0xAF5, 0xD70 }, // highbit 11, data_length <= 4095 { 0x1013, 0x109D, 0x117D, 0x1271 }, // highbit 12, data_length <= 8191 }; void ra_length_init(struct ra_context* ctx, ra_index_t data_length) { assert(4 <= data_length && data_length <= RA_MAX_DATA_LENGTH); ctx->ra_data_length = data_length; ctx->ra_chck_length = (data_length + RA_PUNCTURE_RATE - 1) / RA_PUNCTURE_RATE; ctx->ra_code_length = data_length + ctx->ra_chck_length * 3; assert(ctx->ra_code_length <= RA_MAX_CODE_LENGTH); ctx->ra_lfsr_highbit = 4; while (data_length >= 32) { data_length /= 2; ctx->ra_lfsr_highbit += 1; } assert(4 <= ctx->ra_lfsr_highbit && ctx->ra_lfsr_highbit <= 12); ctx->ra_lfsr_masks[0] = ra_lfsr_masks_table[ctx->ra_lfsr_highbit - 4][0]; ctx->ra_lfsr_masks[1] = ra_lfsr_masks_table[ctx->ra_lfsr_highbit - 4][1]; ctx->ra_lfsr_masks[2] = ra_lfsr_masks_table[ctx->ra_lfsr_highbit - 4][2]; ctx->ra_lfsr_masks[3] = ra_lfsr_masks_table[ctx->ra_lfsr_highbit - 4][3]; } gr-satellites-4.4.0/lib/radecoder/ra_config.h000066400000000000000000000030511414055407700211020ustar00rootroot00000000000000/* -*- c -*- */ /* * Copyright 2015-2019 Miklos Maroti * Copyright 2019 Daniel Estevez (reentrant version) * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef RA_CONFIG_H #define RA_CONFIG_H #include #ifdef __cplusplus extern "C" { #endif typedef uint16_t ra_word_t; /* use uint16_t for SSE4.1 soft decoder */ typedef uint16_t ra_index_t; /* use uint16_t for RA_PACKET_LENGTH >= 256 */ enum { /* number of words, must be at least 4 */ RA_MAX_DATA_LENGTH = 2048, /* 1 for rate 1/4, 2 for 2/5, 3 for 1/2, 5 for 5/8 */ RA_PUNCTURE_RATE = 3, /* use the test program to verify it */ RA_MAX_CODE_LENGTH = RA_MAX_DATA_LENGTH * 2 + 3, }; enum { RA_BITCOUNT = 8 * sizeof(ra_word_t), RA_BITSHIFT = RA_BITCOUNT - 1 }; struct ra_context { ra_index_t ra_data_length; ra_index_t ra_code_length; ra_index_t ra_chck_length; uint16_t ra_lfsr_masks[4]; uint8_t ra_lfsr_highbit; // for ra_lfsr ra_index_t ra_lfsr_mask; ra_index_t ra_lfsr_state; ra_index_t ra_lfsr_offset; // for ra_decoder_gen float ra_dataword_gen[RA_MAX_DATA_LENGTH * RA_BITCOUNT]; float ra_codeword_gen[RA_MAX_CODE_LENGTH * RA_BITCOUNT]; float ra_forward_gen[RA_MAX_DATA_LENGTH * RA_BITCOUNT]; // for ra_encoder const ra_word_t* ra_packet; ra_word_t ra_nextword; uint8_t ra_passno; }; /* data length in words */ void ra_length_init(struct ra_context* ctx, ra_index_t data_length); #ifdef __cplusplus } #endif #endif // RA_CONFIG_H gr-satellites-4.4.0/lib/radecoder/ra_decoder_gen.c000066400000000000000000000100711414055407700220660ustar00rootroot00000000000000/* -*- c -*- */ /* * Copyright 2015-2019 Miklos Maroti * Copyright 2019 Daniel Estevez (reentrant version) * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #include "ra_decoder_gen.h" #include "ra_lfsr.h" #include #include #include #include /* --- REPEAT ACCUMULATE GENERIC DECODER --- */ void ra_prepare_gen(struct ra_context* ctx, float* softbits) { int index; for (index = 0; index < ctx->ra_data_length * RA_BITCOUNT; index++) ctx->ra_dataword_gen[index] = 0.0f; for (index = 0; index < ctx->ra_code_length * RA_BITCOUNT; index++) ctx->ra_codeword_gen[index] = softbits[index]; } static inline float ra_llr_min(float a, float b) { float c; c = a * b; a = fabsf(a); b = fabsf(b); a = a < b ? a : b; return copysignf(a, c); } void ra_improve_gen(struct ra_context* ctx, float* codeword, int puncture, bool half) { int index, bit, pos = 0; /* to avoid pos uninitialized warning */ float accu[RA_BITCOUNT]; float data, left; assert(ctx->ra_data_length > 0); /* to avoid pos uninitialized warning */ for (bit = 0; bit < RA_BITCOUNT; bit++) accu[bit] = FLT_MAX; for (index = 0; index < ctx->ra_data_length; index++) { pos = ra_lfsr_next(ctx); for (bit = 0; bit < RA_BITCOUNT; bit++) { data = ctx->ra_dataword_gen[pos * RA_BITCOUNT + bit]; ctx->ra_forward_gen[index * RA_BITCOUNT + bit] = accu[bit]; accu[bit] = ra_llr_min(accu[bit], data); } if ((index + 1) % puncture == 0) { for (bit = 0; bit < RA_BITCOUNT; bit++) accu[bit] += *(codeword++); } data = accu[0]; for (bit = 0; bit < RA_BITCOUNT - 1; bit++) accu[bit] = accu[bit + 1]; accu[RA_BITCOUNT - 1] = data; } if (ctx->ra_data_length % puncture != 0) { for (bit = 0; bit < RA_BITCOUNT; bit++) { data = codeword[(bit + 1) % RA_BITCOUNT]; accu[bit] = accu[bit] + data + data; } } for (index = ctx->ra_data_length - 1; index >= 0; index--) { data = accu[RA_BITCOUNT - 1]; for (bit = RA_BITCOUNT - 1; bit >= 1; bit--) accu[bit] = accu[bit - 1]; accu[0] = data; if ((index + 1) % puncture == 0) { for (bit = RA_BITCOUNT - 1; bit >= 0; bit--) accu[bit] += *(--codeword); } for (bit = 0; bit < RA_BITCOUNT; bit++) { left = ctx->ra_forward_gen[index * RA_BITCOUNT + bit]; left = ra_llr_min(left, accu[bit]); data = ctx->ra_dataword_gen[pos * RA_BITCOUNT + bit]; accu[bit] = ra_llr_min(accu[bit], data); if (half) data *= 0.5f; left += data; ctx->ra_dataword_gen[pos * RA_BITCOUNT + bit] = left; } pos = ra_lfsr_prev(ctx); } } void ra_decide_gen(struct ra_context* ctx, ra_word_t* packet) { int index, bit; ra_word_t word; float data; for (index = 0; index < ctx->ra_data_length; index++) { word = 0; for (bit = 0; bit < RA_BITCOUNT; bit++) { data = ctx->ra_dataword_gen[index * RA_BITCOUNT + bit]; word |= (data < 0.0f) << bit; } packet[index] = word; } } void ra_decoder_gen(struct ra_context* ctx, float* softbits, ra_word_t* packet, int passes) { int count, seqno; float* codeword; ra_prepare_gen(ctx, softbits); for (count = 0; count < passes; count++) { codeword = ctx->ra_codeword_gen; for (seqno = 0; seqno < 4; seqno++) { ra_lfsr_init(ctx, seqno); ra_improve_gen(ctx, codeword, seqno == 0 ? 1 : RA_PUNCTURE_RATE, count > 0); codeword += (seqno == 0 ? ctx->ra_data_length : ctx->ra_chck_length) * RA_BITCOUNT; } assert(ctx->ra_codeword_gen + ctx->ra_code_length * RA_BITCOUNT == codeword); } ra_decide_gen(ctx, packet); } gr-satellites-4.4.0/lib/radecoder/ra_decoder_gen.h000066400000000000000000000010511414055407700220710ustar00rootroot00000000000000/* -*- c -*- */ /* * Copyright 2015-2019 Miklos Maroti * Copyright 2019 Daniel Estevez (reentrant version) * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef RA_DECODER_GEN_H #define RA_DECODER_GEN_H #include "ra_config.h" #ifdef __cplusplus extern "C" { #endif void ra_decoder_gen(struct ra_context* ctx, float* softbits, ra_word_t* packet, int passes); #ifdef __cplusplus } #endif #endif // RA_DECODER_GEN_H gr-satellites-4.4.0/lib/radecoder/ra_encoder.c000066400000000000000000000026101414055407700212470ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright (C) Miklos Maroti 2015 * Obtained from https://gitlab.com/phorvath/smogcli2 * Copyright 2020 Daniel Estevez (adaptation to gr-satellites) * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #include "ra_encoder.h" #include "ra_lfsr.h" /* --- REPEAT ACCUMULATE ENCODER: rate 1/4, punctured, twisted parallel --- */ void ra_encoder_init(struct ra_context* ctx, const ra_word_t* packet) { ctx->ra_packet = packet; ctx->ra_nextword = 0; ctx->ra_passno = 0; ra_lfsr_init(ctx, 0); } ra_word_t ra_encoder_next(struct ra_context* ctx) { ra_index_t pos; ra_word_t word; uint8_t count; word = ctx->ra_nextword; count = ctx->ra_passno == 0 ? 1 : RA_PUNCTURE_RATE; do { word = (word >> 1) | (word << RA_BITSHIFT); pos = ra_lfsr_next(ctx); word ^= ctx->ra_packet[pos]; } while (pos != ctx->ra_passno && --count != 0); if (count != 0) { ctx->ra_nextword = 0; ctx->ra_passno = (ctx->ra_passno + 1) % 4; ra_lfsr_init(ctx, ctx->ra_passno); } else ctx->ra_nextword = word; return word; } void ra_encoder(struct ra_context* ctx, const ra_word_t* packet, ra_word_t* output) { ra_encoder_init(ctx, packet); for (ra_index_t i = 0; i < ctx->ra_code_length; i++) *(output++) = ra_encoder_next(ctx); } gr-satellites-4.4.0/lib/radecoder/ra_encoder.h000066400000000000000000000014051414055407700212550ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright (C) Miklos Maroti 2015 * Obtained from https://gitlab.com/phorvath/smogcli2 * Copyright 2020 Daniel Estevez (adaptation to gr-satellites) * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef __RA_ENCODER_H__ #define __RA_ENCODER_H__ #include "ra_config.h" #ifdef __cplusplus extern "C" { #endif void ra_encoder_init(struct ra_context* ctx, const ra_word_t* packet); /* call this ra_code_length times to get all code words */ ra_word_t ra_encoder_next(struct ra_context* ctx); /* this calls the above two functions */ void ra_encoder(struct ra_context* ctx, const ra_word_t* packet, ra_word_t* output); #ifdef __cplusplus } #endif #endif //__RA_ENCODER_H__ gr-satellites-4.4.0/lib/radecoder/ra_lfsr.c000066400000000000000000000030561414055407700206030ustar00rootroot00000000000000/* -*- c -*- */ /* * Copyright 2015-2019 Miklos Maroti * Copyright 2017 Daniel Estevez (reentrant version) * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #include "ra_lfsr.h" #include /* last element returned will be seqno */ void ra_lfsr_init(struct ra_context* ctx, uint8_t seqno) { /* make sure that ra_length_init is called */ assert(ctx->ra_data_length > 0); ctx->ra_lfsr_mask = ctx->ra_lfsr_masks[seqno]; ctx->ra_lfsr_offset = ctx->ra_data_length >> (1 + seqno); ctx->ra_lfsr_state = 1 + seqno + ctx->ra_lfsr_offset; } ra_index_t ra_lfsr_next(struct ra_context* ctx) { ra_index_t b; /* this loop runs at most twice on average */ do { b = ctx->ra_lfsr_state & 0x1; ctx->ra_lfsr_state >>= 1; ctx->ra_lfsr_state ^= (-b) & ctx->ra_lfsr_mask; } while (ctx->ra_lfsr_state > ctx->ra_data_length); b = ctx->ra_lfsr_state - 1; if (b < ctx->ra_lfsr_offset) b += ctx->ra_data_length; b -= ctx->ra_lfsr_offset; return b; } ra_index_t ra_lfsr_prev(struct ra_context* ctx) { ra_index_t b; /* this loop runs at most twice on average */ do { b = ctx->ra_lfsr_state >> ctx->ra_lfsr_highbit; ctx->ra_lfsr_state <<= 1; ctx->ra_lfsr_state ^= (-b) & (0x01 | ctx->ra_lfsr_mask << 1); } while (ctx->ra_lfsr_state > ctx->ra_data_length); b = ctx->ra_lfsr_state - 1; if (b < ctx->ra_lfsr_offset) b += ctx->ra_data_length; b -= ctx->ra_lfsr_offset; return b; } gr-satellites-4.4.0/lib/radecoder/ra_lfsr.h000066400000000000000000000010271414055407700206040ustar00rootroot00000000000000/* -*- c -*- */ /* * Copyright 2015-2019 Miklos Maroti * Copyright 2019 Daniel Estevez (reentrant version) * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef RA_LFSR_H #define RA_LFSR_H #include "ra_config.h" #ifdef __cplusplus extern "C" { #endif void ra_lfsr_init(struct ra_context* ctx, uint8_t seqno); ra_index_t ra_lfsr_next(struct ra_context* ctx); ra_index_t ra_lfsr_prev(struct ra_context* ctx); #ifdef __cplusplus } #endif #endif // RA_LFSR_H gr-satellites-4.4.0/lib/randomizer.c000066400000000000000000000037251414055407700174000ustar00rootroot00000000000000/* * Copyright (c) 2008 Johan Christiansen * Copyright (c) 2012 Jeppe Ledet-Pedersen * * 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 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 void ccsds_generate_sequence(char* sequence, int length) { char x[9] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }; int i; /* Generate the sequence */ memset(sequence, 0, length); /* The pseudo random sequence shall be generated using the polynomial * h(x) = x8 + x7 + x5 + x3 + 1 */ for (i = 0; i < length * 8; i++) { sequence[i / 8] = sequence[i / 8] | x[1] << 7 >> (i % 8); x[0] = (x[8] + x[6] + x[4] + x[1]) % 2; x[1] = x[2]; x[2] = x[3]; x[3] = x[4]; x[4] = x[5]; x[5] = x[6]; x[6] = x[7]; x[7] = x[8]; x[8] = x[0]; } } void ccsds_xor_sequence(unsigned char* data, char* sequence, int length) { int i; for (i = 0; i < length; i++) data[i] ^= sequence[i]; } gr-satellites-4.4.0/lib/randomizer.h000066400000000000000000000025601414055407700174010ustar00rootroot00000000000000/* * Copyright (c) 2008 Johan Christiansen * Copyright (c) 2012 Jeppe Ledet-Pedersen * * 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 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 _RANDOMIZER_H_ #define _RANDOMIZER_H_ void ccsds_generate_sequence(char* sequence, int length); void ccsds_xor_sequence(unsigned char* data, char* sequence, int length); #endif /* _RANDOMIZER_H_ */ gr-satellites-4.4.0/lib/rs.h000066400000000000000000000004671414055407700156570ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2018 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef _RS_H #define _RS_H #define MAX_FRAME_LEN 255 #define PARITY_BYTES 32 #define BASIS_CONVENTIONAL 0 #define BASIS_DUAL 1 #endif gr-satellites-4.4.0/lib/u482c_decode_impl.cc000066400000000000000000000113051414055407700205530ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2016,2020 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include "u482c_decode_impl.h" #include extern "C" { #include "golay24.h" #include "libfec/fec.h" #include "randomizer.h" #include "viterbi.h" } #define AUTO -1 #define OFF 0 #define ON 1 namespace gr { namespace satellites { u482c_decode::sptr u482c_decode::make(bool verbose, int viterbi, int scrambler, int rs) { return gnuradio::get_initial_sptr( new u482c_decode_impl(verbose, viterbi, scrambler, rs)); } /* * The private constructor */ u482c_decode_impl::u482c_decode_impl(bool verbose, int viterbi, int scrambler, int rs) : gr::block("u482c_decode", gr::io_signature::make(0, 0, 0), gr::io_signature::make(0, 0, 0)), d_verbose(verbose), d_viterbi(viterbi), d_scrambler(scrambler), d_rs(rs) { // init FEC if (d_viterbi != OFF) { int16_t polys[2] = { V27POLYA, V27POLYB }; set_viterbi_polynomial_packed(polys); d_vp = create_viterbi_packed(d_rs_len * 8); if (!d_vp) throw std::bad_alloc(); } if (d_scrambler != OFF) { ccsds_generate_sequence(d_ccsds_sequence.data(), d_ccsds_sequence.size()); } message_port_register_out(pmt::mp("out")); message_port_register_in(pmt::mp("in")); set_msg_handler(pmt::mp("in"), [this](pmt::pmt_t msg) { this->msg_handler(msg); }); } /* * Our virtual destructor. */ u482c_decode_impl::~u482c_decode_impl() { if (d_vp) delete_viterbi_packed(d_vp); } void u482c_decode_impl::forecast(int noutput_items, gr_vector_int& ninput_items_required) { } int u482c_decode_impl::general_work(int noutput_items, gr_vector_int& ninput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items) { return 0; } void u482c_decode_impl::msg_handler(pmt::pmt_t pmt_msg) { size_t length(0); auto msg = pmt::u8vector_elements(pmt::cdr(pmt_msg), length); auto data_len = std::min(length, d_data.size()); memcpy(d_data.data(), msg, data_len); // decode length field uint32_t length_field = (d_data[0] << 16) | (d_data[1] << 8) | d_data[2]; auto golay_res = decode_golay24(&length_field); if (golay_res < 0) { if (d_verbose) { std::printf("Golay decode failed.\n"); } return; } auto frame_len = length_field & 0xff; bool viterbi_flag = length_field & 0x100; bool scrambler_flag = length_field & 0x200; bool rs_flag = length_field & 0x400; if (d_verbose) { std::printf("Golay decode OK. Bit errors: %d, Frame length: %d, Viterbi: %d, " "Scrambler %d, Reed-Solomon: %d.\n", golay_res, frame_len, viterbi_flag, scrambler_flag, rs_flag); } size_t rx_len; auto packet = &d_data[d_header_len]; // Viterbi decoding if ((d_viterbi == ON) || (d_viterbi == AUTO && viterbi_flag)) { int len = frame_len / VITERBI_RATE - VITERBI_TAIL; rx_len = len; // rx_len is unsigned if (len < 0) { if (d_verbose) { std::printf("Frame too short for Viterbi decoder.\n"); } return; } init_viterbi_packed(d_vp, 0); update_viterbi_packed(d_vp, packet, rx_len * 8 + VITERBI_CONSTRAINT - 1); auto viterbi_res = chainback_viterbi_packed(d_vp, packet, rx_len * 8, 0); if (d_verbose) { std::printf("Viterbi decode bit errors: %d\n", viterbi_res); } } else { rx_len = frame_len; } // Descrambling if ((d_scrambler == ON) || (d_scrambler == AUTO && scrambler_flag)) { ccsds_xor_sequence(packet, d_ccsds_sequence.data(), rx_len); } // RS decoding if ((d_rs == ON) || (d_rs == AUTO && rs_flag)) { auto rs_res = decode_rs_8(packet, NULL, 0, RS_LEN - rx_len); rx_len -= 32; if (rs_res < 0) { if (d_verbose) { std::printf("RS decode failed.\n"); } return; } if (d_verbose) { std::printf("RS decode OK. Byte errors: %d.\n", rs_res); } } // Send via GNU Radio message message_port_pub(pmt::mp("out"), pmt::cons(pmt::PMT_NIL, pmt::init_u8vector(rx_len, packet))); } } /* namespace satellites */ } /* namespace gr */ gr-satellites-4.4.0/lib/u482c_decode_impl.h000066400000000000000000000025401414055407700204160ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2016 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_SATELLITES_U482C_DECODE_IMPL_H #define INCLUDED_SATELLITES_U482C_DECODE_IMPL_H #include #include #define RS_LEN 255 #define HEADER_LEN 3 #include namespace gr { namespace satellites { class u482c_decode_impl : public u482c_decode { private: constexpr static size_t d_rs_len = 255; constexpr static size_t d_header_len = 3; const bool d_verbose; std::array d_ccsds_sequence; std::array d_data; void* d_vp; const int d_viterbi; const int d_scrambler; const int d_rs; public: u482c_decode_impl(bool verbose, int viterbi, int scrambler, int rs); ~u482c_decode_impl(); // Where all the action really happens void forecast(int noutput_items, gr_vector_int& ninput_items_required); int general_work(int noutput_items, gr_vector_int& ninput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items); void msg_handler(pmt::pmt_t pmt_msg); }; } // namespace satellites } // namespace gr #endif /* INCLUDED_SATELLITES_U482C_DECODE_IMPL_H */ gr-satellites-4.4.0/lib/varlen_packet_framer_impl.cc000066400000000000000000000142571414055407700225660ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2017 Glenn Richardson * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "varlen_packet_framer_impl.h" #include #include #include #include extern "C" { #include "golay24.h" #include "libfec/fec.h" } namespace gr { namespace satellites { varlen_packet_framer::sptr varlen_packet_framer::make(const std::string& packet_key, int length_field_size, endianness_t endianness, bool use_golay, const std::vector sync_word) { return gnuradio::get_initial_sptr(new varlen_packet_framer_impl( packet_key, length_field_size, endianness, use_golay, sync_word)); } varlen_packet_framer_impl::varlen_packet_framer_impl(const std::string& packet_key, int length_field_size, endianness_t endianness, bool use_golay, const std::vector sync_word) : gr::block("varlen_packet_framer", io_signature::make(1, 1, sizeof(char)), io_signature::make(1, 1, sizeof(char))), d_header_length(length_field_size), d_use_golay(use_golay), d_sync_word(sync_word), d_endianness(endianness), d_ninput_items_required(1) { d_packet_tag = pmt::string_to_symbol(packet_key); set_tag_propagation_policy(TPP_DONT); for (size_t ii = 0; ii < d_sync_word.size(); ii++) { d_sync_word.at(ii) = d_sync_word[ii] & 0x01; } d_header_length = ((d_header_length + 7) / 8) * 8; d_header_length = std::max(32, std::min(8, d_header_length)); if (d_use_golay) d_header_length = 24; #ifdef VLPF_DEBUG_TIMING d_last_debug1 = std::time(NULL); d_last_debug2 = std::time(NULL); d_start_time = std::time(NULL); #endif } varlen_packet_framer_impl::~varlen_packet_framer_impl() {} void varlen_packet_framer_impl::forecast(int noutput_items, gr_vector_int& ninput_items_required) { unsigned ninputs = ninput_items_required.size(); for (unsigned i = 0; i < ninputs; i++) ninput_items_required[i] = d_ninput_items_required; } int varlen_packet_framer_impl::general_work(int noutput_items, gr_vector_int& ninput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items) { const unsigned char* in = (const unsigned char*)input_items[0]; unsigned char* out = (unsigned char*)output_items[0]; int packet_len = 0; std::vector tags; uint32_t header = 0; unsigned int asm_len = d_sync_word.size(); // find the next packet_tag get_tags_in_range( tags, 0, nitems_read(0), nitems_read(0) + ninput_items[0], d_packet_tag); if (tags.size() > 0) { // check for packet size packet_len = to_uint64(tags[0].value); if ((unsigned)noutput_items < packet_len + d_header_length + asm_len) { set_min_noutput_items(packet_len + d_header_length + asm_len); #ifdef VLPF_DEBUG_TIMING if (std::time(NULL) - d_last_debug1 > 1) { std::cout << (std::time(NULL) - d_start_time) << "nouput:" << noutput_items << " req:" << (packet_len + d_header_length + asm_len) << std::endl; d_last_debug1 = std::time(NULL); } #endif return 0; } set_min_noutput_items(1); d_ninput_items_required = tags[0].offset - nitems_read(0) + packet_len; if (ninput_items[0] >= d_ninput_items_required) { // copy the option sync word if (asm_len > 0) { memcpy(out, (const void*)&d_sync_word[0], asm_len); out += asm_len; } // create the length field header header = packet_len / 8; if (d_use_golay) { encode_golay24(&header); } // copy header if (d_endianness == GR_MSB_FIRST) { for (int ii = 0; ii < d_header_length; ii++) { out[ii] = (header >> (d_header_length - ii - 1)) & 0x01; } } else { for (int ii = 0; ii < d_header_length; ii++) { out[ii] = (header >> ii) & 0x01; } } // copy data and tag memcpy(&out[d_header_length], in, packet_len); add_item_tag(0, nitems_written(0), d_packet_tag, pmt::from_long(packet_len + d_header_length + asm_len), alias_pmt()); consume_each(packet_len); #ifdef VLPF_DEBUG_TIMING std::cout << (std::time(NULL) - d_start_time) << ":\tASM Framed @ " << nitems_written(0) << " len " << packet_len << std::endl; std::cout << "\tread: " << nitems_read(0) << "\tini: " << ninput_items[0] << "\touti: " << noutput_items << std::endl; #endif GR_LOG_DEBUG(d_debug_logger, boost::format("%d byte packet output @ %ld") % packet_len % nitems_written(0)); d_ninput_items_required = 1; // d_header_length + asm_len + 1; // abs min return packet_len + d_header_length + asm_len; } else { #ifdef VLPF_DEBUG_TIMING if (std::time(NULL) - d_last_debug2 >= 1) { std::cout << (std::time(NULL) - d_start_time) << ":\tASM not enough input:" << ninput_items[0] << " req:" << d_ninput_items_required << std::endl; d_last_debug2 = std::time(NULL); } #endif } } return 0; } } /* namespace satellites */ } /* namespace gr */ gr-satellites-4.4.0/lib/varlen_packet_framer_impl.h000066400000000000000000000031221414055407700224150ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2017 Glenn Richardson * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_VARLEN_PACKET_FRAMER_IMPL_H #define INCLUDED_VARLEN_PACKET_FRAMER_IMPL_H #include #include //#define VLPF_DEBUG_TIMING namespace gr { namespace satellites { class varlen_packet_framer_impl : public varlen_packet_framer { private: int d_header_length; // size of packet length field in bits bool d_use_golay; // decode golay packet length std::vector d_sync_word; // option ASM endianness_t d_endianness; // header endianness pmt::pmt_t d_packet_tag; // packet length tag int d_ninput_items_required; #ifdef VLPF_DEBUG_TIMING std::time_t d_last_debug1; std::time_t d_last_debug2; std::time_t d_start_time; #endif public: varlen_packet_framer_impl(const std::string& packet_key, int length_field_size, endianness_t endianness, bool use_golay, const std::vector sync_word); ~varlen_packet_framer_impl(); void forecast(int noutput_items, gr_vector_int& ninput_items_required); int general_work(int noutput_items, gr_vector_int& ninput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items); }; } // namespace satellites } // namespace gr #endif gr-satellites-4.4.0/lib/varlen_packet_tagger_impl.cc000066400000000000000000000140121414055407700225500ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2017 Glenn Richardson * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "varlen_packet_tagger_impl.h" #include #include #include extern "C" { #include "golay24.h" #include "libfec/fec.h" } namespace gr { namespace satellites { varlen_packet_tagger::sptr varlen_packet_tagger::make(const std::string& sync_key, const std::string& packet_key, int length_field_size, int max_packet_size, endianness_t endianness, bool use_golay) { return gnuradio::get_initial_sptr(new varlen_packet_tagger_impl( sync_key, packet_key, length_field_size, max_packet_size, endianness, use_golay)); } varlen_packet_tagger_impl::varlen_packet_tagger_impl(const std::string& sync_key, const std::string& packet_key, int length_field_size, int max_packet_size, endianness_t endianness, bool use_golay) : gr::block("varlen_packet_tagger", io_signature::make(1, 1, sizeof(char)), io_signature::make(1, 1, sizeof(char))), d_header_length(length_field_size), d_mtu(max_packet_size), d_use_golay(use_golay), d_endianness(endianness), d_have_sync(false) { d_sync_tag = pmt::string_to_symbol(sync_key); d_packet_tag = pmt::string_to_symbol(packet_key); d_ninput_items_required = d_header_length + 1; set_tag_propagation_policy(TPP_DONT); if (d_use_golay) d_header_length = 24; } varlen_packet_tagger_impl::~varlen_packet_tagger_impl() {} int varlen_packet_tagger_impl::bits2len(const unsigned char* in) { // extract the packet length from the header int ret = 0; if (d_endianness == GR_MSB_FIRST) { for (int i = 0; i < d_header_length; i++) { ret = (ret << 0x01) + in[i]; } } else { for (int i = d_header_length - 1; i >= 0; i--) { ret = (ret << 0x01) + in[i]; } } return ret; } void varlen_packet_tagger_impl::forecast(int noutput_items, gr_vector_int& ninput_items_required) { unsigned ninputs = ninput_items_required.size(); for (unsigned i = 0; i < ninputs; i++) ninput_items_required[i] = d_ninput_items_required; } int varlen_packet_tagger_impl::general_work(int noutput_items, gr_vector_int& ninput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items) { const unsigned char* in = (const unsigned char*)input_items[0]; unsigned char* out = (unsigned char*)output_items[0]; int packet_len = 0; std::vector tags; uint32_t golay_field; int golay_res; if (d_have_sync) { if (d_header_length > ninput_items[0]) { // not enough data yet return 0; } if (d_use_golay) { golay_field = bits2len(in); golay_res = decode_golay24(&golay_field); if (golay_res >= 0) { packet_len = 8 * (0xFFF & golay_field); } else { GR_LOG_WARN(d_debug_logger, "Golay decode failed."); d_have_sync = false; consume_each(1); // skip ahead return 0; } } else { packet_len = 8 * bits2len(in); } if (packet_len > d_mtu) { GR_LOG_WARN(d_debug_logger, boost::format("Packet length %d > mtu %d.") % packet_len % d_mtu); d_have_sync = false; consume_each(1); // skip ahead return 0; } d_ninput_items_required = d_header_length + packet_len; if (noutput_items < packet_len) { set_min_noutput_items(packet_len); return 0; } set_min_noutput_items(1); if (ninput_items[0] >= packet_len + d_header_length) { if (d_use_golay) { GR_LOG_DEBUG(d_debug_logger, boost::format("Header: 0x%06x, Len: %d") % (0xFFFFFF & golay_field) % (0xFFF & packet_len)); if (golay_res >= 0) { GR_LOG_DEBUG(d_debug_logger, boost::format("Golay decoded. Errors: %d, Length: %d") % golay_res % packet_len); } } memcpy(out, &in[d_header_length], packet_len); add_item_tag(0, nitems_written(0), d_packet_tag, pmt::from_long(packet_len), alias_pmt()); d_have_sync = false; // consuming only the header allows for // ... multiple syncs per 'packet', // ... in case the sync was incorrectly tagged consume_each(d_header_length); d_ninput_items_required = d_header_length + 1; return packet_len; } } else { // find the next sync tag, drop all other data get_tags_in_range( tags, 0, nitems_read(0), nitems_read(0) + ninput_items[0], d_sync_tag); if (tags.size() > 0) { d_have_sync = true; consume_each(tags[0].offset - nitems_read(0)); } else { consume_each(ninput_items[0]); } } return 0; } } /* namespace satellites */ } /* namespace gr */ gr-satellites-4.4.0/lib/varlen_packet_tagger_impl.h000066400000000000000000000032141414055407700224140ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2017 Glenn Richardson * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_VARLEN_PACKET_TAGGER_IMPL_H #define INCLUDED_VARLEN_PACKET_TAGGER_IMPL_H #include #include namespace gr { namespace satellites { class varlen_packet_tagger_impl : public varlen_packet_tagger { private: int d_header_length; // bit size of packet length field int d_mtu; // maximum packet size in bits bool d_use_golay; // decode golay packet length endianness_t d_endianness; // header endianness pmt::pmt_t d_sync_tag; // marker tag on input for start of packet pmt::pmt_t d_packet_tag; // packet_len tag for output stream bool d_have_sync; // interal state int d_ninput_items_required; // forecast int bits2len(const unsigned char* in); public: varlen_packet_tagger_impl(const std::string& sync_key, const std::string& packet_key, int length_field_size, int max_packet_size, endianness_t endianness, bool use_golay); ~varlen_packet_tagger_impl(); void forecast(int noutput_items, gr_vector_int& ninput_itens_required); int general_work(int noutput_items, gr_vector_int& ninput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items); }; } // namespace satellites } // namespace gr #endif gr-satellites-4.4.0/lib/viterbi.c000066400000000000000000000177011414055407700166710ustar00rootroot00000000000000/* * K=7 r=1/2 Viterbi decoder in portable C * Copyright Feb 2004, Phil Karn, KA9Q * May be used under the terms of the GNU Lesser General Public License (LGPL) */ #include #include #include #include #include #include #include "viterbi.h" #ifndef BITS_PER_BYTE #define BITS_PER_BYTE 8 #endif #ifdef __GNUC__ #define likely(x) __builtin_expect((x), 1) #define unlikely(x) __builtin_expect((x), 0) #else #define likely(x) (x) #define unlikely(x) (x) #endif #define get_bit(_p, _n) \ (_p[(_n) / (uint8_t)BITS_PER_BYTE] >> \ ((uint8_t)BITS_PER_BYTE - 1 - ((_n) % (uint8_t)BITS_PER_BYTE)) & \ (uint8_t)0x01) typedef union { uint8_t w[64]; } metric_t; typedef union { uint8_t w[8]; } decision_t; typedef union { uint8_t c[32]; } branchtab_t; /* We use the CCSDS convention * (see CCSDS 131.0-B-2 TM Synchronization and Channel Coding p3-2) */ static int16_t polys[2] = { V27POLYB, -V27POLYA }; static bool init = false; static uint8_t partab[256]; static bool p_init; /* State info for Viterbi decoder instance */ struct v27 { metric_t metrics1; /* path metric buffer 1 */ metric_t metrics2; /* path metric buffer 2 */ decision_t* dp; /* Pointer to current decision */ metric_t *old_metrics, *new_metrics; /* Pointers to path metrics, swapped on every bit */ decision_t* decisions; /* Beginning of decisions for block */ uint16_t dlen; /* Length of decisions array for block */ }; static branchtab_t branchtab[2]; static struct v27 v27_local; static decision_t decisions_local; /* Create 256-entry odd-parity lookup table */ static void partab_init(void) { int i, cnt, ti; /* Initialize parity lookup table */ for (i = 0; i < 256; i++) { cnt = 0; ti = i; while (ti) { if (ti & 1) cnt++; ti >>= 1; } partab[i] = cnt & 1; } p_init = true; } static inline int parityb(unsigned char x) { extern uint8_t partab[256]; extern bool p_init; if (!p_init) partab_init(); return partab[x]; } static inline int parity(uint32_t x) { /* Fold down to one byte */ x ^= (x >> 16); x ^= (x >> 8); return parityb(x); } /* Initialize Viterbi decoder for start of new frame */ int init_viterbi_packed(void* p, int starting_state) { struct v27* vp = p; int i; if (p == NULL) return -1; for (i = 0; i < 64; i++) vp->metrics1.w[i] = 63; vp->old_metrics = &vp->metrics1; vp->new_metrics = &vp->metrics2; vp->dp = vp->decisions; vp->old_metrics->w[starting_state & 63] = 0; /* Bias known start state */ return 0; } void set_viterbi_polynomial_packed(int16_t polys[2]) { int state; for (state = 0; state < 32; state++) { branchtab[0].c[state] = (polys[0] < 0) ^ parity((2 * state) & abs(polys[0])) ? 1 : 0; branchtab[1].c[state] = (polys[1] < 0) ^ parity((2 * state) & abs(polys[1])) ? 1 : 0; } init = true; } /* Create a new instance of a Viterbi decoder */ void* create_viterbi_packed(int16_t len) { /* Keep state in internal RAM */ struct v27* vp = &v27_local; if (!init) set_viterbi_polynomial_packed(polys); vp->dlen = (len + 6) * sizeof(decision_t); if ((vp->decisions = malloc(vp->dlen)) == NULL) return NULL; init_viterbi_packed(vp, 0); return vp; } /* Viterbi chainback */ int chainback_viterbi_packed(void* p, unsigned char* data, unsigned int nbits, unsigned int endstate) { int k; struct v27* vp = p; decision_t* d; int errors = vp->old_metrics->w[endstate]; if (unlikely(p == NULL)) return -1; d = vp->decisions; /* Make room beyond the end of the encoder register so we can * accumulate a full byte of decoded data */ endstate %= 64; endstate <<= 2; /* The store into data[] only needs to be done every 8 bits. * But this avoids a conditional branch, and the writes will * combine in the cache anyway (no they wont because we have * a crappy AVR, but nevermind ...) */ d += VITERBI_CONSTRAINT - 1; // Look past tail while (likely(nbits--)) { k = (d[nbits].w[(endstate >> 2) / 8] >> ((endstate >> 2) & 7)) & 1; data[nbits >> 3] = endstate = (endstate >> 1) | (k << 7); } return errors; } /* Delete instance of a Viterbi decoder */ void delete_viterbi_packed(void* p) { struct v27* vp = p; if (vp->decisions != NULL) free((void*)vp->decisions); } /* C-language butterfly */ #define BFLY(b) \ do { \ metric = (branchtab[0].c[b] ^ sym0) + (branchtab[1].c[b] ^ sym1); \ \ m0 = vp->old_metrics->w[b] + metric; \ m1 = vp->old_metrics->w[b + 32] + (2 - metric); \ decision = m0 > m1; \ vp->new_metrics->w[(b << 1)] = decision ? m1 : m0; \ d->w[b >> 2] |= decision << (((b << 1)) & 7); \ \ m0 -= (metric + metric - 2); \ m1 += (metric + metric - 2); \ decision = m0 > m1; \ vp->new_metrics->w[(b << 1) + 1] = decision ? m1 : m0; \ d->w[b >> 2] |= decision << (((b << 1) + 1) & 7); \ } while (0) /* * Update decoder with a block of demodulated symbols * Note that nbits is the number of decoded data bits, not the number * of symbols! */ int update_viterbi_packed(void* p, uint8_t* syms, uint16_t nbits) { struct v27* vp = p; void* tmp; decision_t *dp, *d = &decisions_local; uint16_t i = 0; uint8_t m0, m1, decision, metric, sym0, sym1; if (unlikely(p == NULL)) return -1; dp = vp->dp; while (likely(nbits--)) { /* Cache decisions in internal memory */ memset(d, 0, sizeof(decision_t)); /* Read symbols */ sym0 = get_bit(syms, i); sym1 = get_bit(syms, i + 1); i += 2; /* Unrolled butterflies */ BFLY(0); BFLY(1); BFLY(2); BFLY(3); BFLY(4); BFLY(5); BFLY(6); BFLY(7); BFLY(8); BFLY(9); BFLY(10); BFLY(11); BFLY(12); BFLY(13); BFLY(14); BFLY(15); BFLY(16); BFLY(17); BFLY(18); BFLY(19); BFLY(20); BFLY(21); BFLY(22); BFLY(23); BFLY(24); BFLY(25); BFLY(26); BFLY(27); BFLY(28); BFLY(29); BFLY(30); BFLY(31); /* Writeback cached data */ memcpy(dp++, d, sizeof(decision_t)); /* Swap pointers to old and new metrics */ tmp = vp->old_metrics; vp->old_metrics = vp->new_metrics; vp->new_metrics = tmp; } vp->dp = d; return 0; } void encode_viterbi_packed(unsigned char* channel, unsigned char* data, int framebits) { int i; unsigned char bit; unsigned char in_sr = 0; unsigned char out_sr = 0; unsigned char temp[256]; for (i = 0; i < framebits + 8; i++) { bit = (i >= framebits) ? 0 : get_bit(data, i); in_sr = (in_sr << 1) | bit; out_sr = (out_sr << 1) | ((polys[0] < 0) ^ parity(in_sr & abs(polys[0]))); out_sr = (out_sr << 1) | ((polys[1] < 0) ^ parity(in_sr & abs(polys[1]))); temp[i >> 2] = out_sr; } memcpy(channel, temp, 2 * (framebits / 8) + 2); } gr-satellites-4.4.0/lib/viterbi.h000066400000000000000000000021311414055407700166650ustar00rootroot00000000000000/* * K=7 r=1/2 Viterbi decoder in portable C * Copyright Feb 2004, Phil Karn, KA9Q * May be used under the terms of the GNU Lesser General Public License (LGPL) */ #ifndef VITERBI_H_ #define VITERBI_H_ #include #define VITERBI_CONSTRAINT 7 #define VITERBI_TAIL 1 #define VITERBI_RATE 2 /* r=1/2 k=7 convolutional encoder polynomials * The NASA-DSN convention is to use V27POLYA inverted, then V27POLYB * The CCSDS/NASA-GSFC convention is to use V27POLYB, then V27POLYA inverted */ #define V27POLYA 0x6d #define V27POLYB 0x4f void* create_viterbi_packed(int16_t len); int init_viterbi_packed(void* vp, int starting_state); int update_viterbi_packed(void* vp, unsigned char sym[], uint16_t npairs); int chainback_viterbi_packed(void* vp, unsigned char* data, unsigned int nbits, unsigned int endstate); void delete_viterbi_packed(void* vp); void encode_viterbi_packed(unsigned char* channel, unsigned char* data, int framebits); void set_viterbi_polynomial_packed(int16_t polys[2]); #endif // VITERBI_H_ gr-satellites-4.4.0/lib/viterbi/000077500000000000000000000000001414055407700165175ustar00rootroot00000000000000gr-satellites-4.4.0/lib/viterbi/LICENSE.md000066400000000000000000000261351414055407700201320ustar00rootroot00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright {yyyy} {name of copyright owner} Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. gr-satellites-4.4.0/lib/viterbi/README.md000066400000000000000000000001041414055407700177710ustar00rootroot00000000000000This viterbi decoder is taken from https://github.com/xukmin/viterbigr-satellites-4.4.0/lib/viterbi/viterbi.cc000066400000000000000000000140221414055407700204710ustar00rootroot00000000000000// Implementation of ViterbiCodec. // // Author: Min Xu // Date: 01/30/2015 #include "viterbi.h" #include #include #include #include #include #include #include namespace { int HammingDistance(const std::string& x, const std::string& y) { assert(x.size() == y.size()); int distance = 0; for (int i = 0; i < (int)x.size(); i++) { distance += x[i] != y[i]; } return distance; } } // namespace std::ostream& operator<<(std::ostream& os, const ViterbiCodec& codec) { os << "ViterbiCodec(" << codec.constraint() << ", {"; const std::vector& polynomials = codec.polynomials(); assert(!polynomials.empty()); os << polynomials.front(); for (int i = 1; i < (int)polynomials.size(); i++) { os << ", " << polynomials[i]; } return os << "})"; } int ReverseBits(int num_bits, int input) { assert(input < (1 << num_bits)); int output = 0; while (num_bits-- > 0) { output = (output << 1) + (input & 1); input >>= 1; } return output; } ViterbiCodec::ViterbiCodec(int constraint, const std::vector& polynomials) : constraint_(constraint), polynomials_(polynomials) { assert(!polynomials_.empty()); for (int i = 0; i < (int)polynomials_.size(); i++) { assert(polynomials_[i] > 0); assert(polynomials_[i] < (1 << constraint_)); } InitializeOutputs(); } int ViterbiCodec::num_parity_bits() const { return polynomials_.size(); } int ViterbiCodec::NextState(int current_state, int input) const { return (current_state >> 1) | (input << (constraint_ - 2)); } std::string ViterbiCodec::Output(int current_state, int input) const { return outputs_.at(current_state | (input << (constraint_ - 1))); } std::string ViterbiCodec::Encode(const std::string& bits) const { std::string encoded; int state = 0; // Encode the message bits. for (int i = 0; i < (int)bits.size(); i++) { char c = bits[i]; assert(c == '0' || c == '1'); int input = c - '0'; encoded += Output(state, input); state = NextState(state, input); } // Encode (constaint_ - 1) flushing bits. for (int i = 0; i < constraint_ - 1; i++) { encoded += Output(state, 0); state = NextState(state, 0); } return encoded; } void ViterbiCodec::InitializeOutputs() { outputs_.resize(1 << constraint_); for (int i = 0; i < (int)outputs_.size(); i++) { for (int j = 0; j < num_parity_bits(); j++) { // Reverse polynomial bits to make the convolution code simpler. int polynomial = ReverseBits(constraint_, polynomials_[j]); int input = i; int output = 0; for (int k = 0; k < constraint_; k++) { output ^= (input & 1) & (polynomial & 1); polynomial >>= 1; input >>= 1; } outputs_[i] += output ? "1" : "0"; } } } int ViterbiCodec::BranchMetric(const std::string& bits, int source_state, int target_state) const { assert(bits.size() == num_parity_bits()); assert((target_state & ((1 << (constraint_ - 2)) - 1)) == source_state >> 1); const std::string output = Output(source_state, target_state >> (constraint_ - 2)); return HammingDistance(bits, output); } std::pair ViterbiCodec::PathMetric(const std::string& bits, const std::vector& prev_path_metrics, int state) const { int s = (state & ((1 << (constraint_ - 2)) - 1)) << 1; int source_state1 = s | 0; int source_state2 = s | 1; int pm1 = prev_path_metrics[source_state1]; if (pm1 < std::numeric_limits::max()) { pm1 += BranchMetric(bits, source_state1, state); } int pm2 = prev_path_metrics[source_state2]; if (pm2 < std::numeric_limits::max()) { pm2 += BranchMetric(bits, source_state2, state); } if (pm1 <= pm2) { return std::make_pair(pm1, source_state1); } else { return std::make_pair(pm2, source_state2); } } void ViterbiCodec::UpdatePathMetrics(const std::string& bits, std::vector* path_metrics, Trellis* trellis) const { std::vector new_path_metrics(path_metrics->size()); std::vector new_trellis_column(1 << (constraint_ - 1)); for (int i = 0; i < (int)path_metrics->size(); i++) { std::pair p = PathMetric(bits, *path_metrics, i); new_path_metrics[i] = p.first; new_trellis_column[i] = p.second; } *path_metrics = new_path_metrics; trellis->push_back(new_trellis_column); } std::string ViterbiCodec::Decode(const std::string& bits) const { // Compute path metrics and generate trellis. Trellis trellis; std::vector path_metrics(1 << (constraint_ - 1), std::numeric_limits::max()); path_metrics.front() = 0; for (int i = 0; i < (int)bits.size(); i += num_parity_bits()) { std::string current_bits(bits, i, num_parity_bits()); // If some bits are missing, fill with trailing zeros. // This is not ideal but it is the best we can do. if ((int)current_bits.size() < num_parity_bits()) { current_bits.append( std::string(num_parity_bits() - current_bits.size(), '0')); } UpdatePathMetrics(current_bits, &path_metrics, &trellis); } // Traceback. std::string decoded; int state = std::min_element(path_metrics.begin(), path_metrics.end()) - path_metrics.begin(); for (int i = trellis.size() - 1; i >= 0; i--) { decoded += state >> (constraint_ - 2) ? "1" : "0"; state = trellis[i][state]; } std::reverse(decoded.begin(), decoded.end()); // Remove (constraint_ - 1) flushing bits. return decoded.substr(0, decoded.size() - constraint_ + 1); } gr-satellites-4.4.0/lib/viterbi/viterbi.h000066400000000000000000000065461414055407700203470ustar00rootroot00000000000000// Viterbi Codec. // // Author: Min Xu // Date: 01/30/2015 #ifndef VITERBI_H_ #define VITERBI_H_ #include #include #include #include // This class implements both a Viterbi Decoder and a Convolutional Encoder. class ViterbiCodec { public: // Note about Polynomial Descriptor of a Convolutional Encoder / Decoder. // A generator polymonial is built as follows: Build a binary number // representation by placing a 1 in each spot where a connection line from // the shift register feeds into the adder, and a zero elsewhere. There are 2 // ways to arrange the bits: // 1. msb-current // The MSB of the polynomial corresponds to the current input, while the // LSB corresponds to the oldest input that still remains in the shift // register. // This representation is used by MATLAB. See // http://radio.feld.cvut.cz/matlab/toolbox/comm/tutor124.html // 2. lsb-current // The LSB of the polynomial corresponds to the current input, while the // MSB corresponds to the oldest input that still remains in the shift // register. // This representation is used by the Spiral Viterbi Decoder Software // Generator. See http://www.spiral.net/software/viterbi.html // We use 2. ViterbiCodec(int constraint, const std::vector& polynomials); std::string Encode(const std::string& bits) const; std::string Decode(const std::string& bits) const; int constraint() const { return constraint_; } const std::vector& polynomials() const { return polynomials_; } private: // Suppose // // Trellis trellis; // // Then trellis[i][s] is the state in the (i - 1)th iteration which leads to // the current state s in the ith iteration. // It is used for traceback. typedef std::vector> Trellis; int num_parity_bits() const; void InitializeOutputs(); int NextState(int current_state, int input) const; std::string Output(int current_state, int input) const; int BranchMetric(const std::string& bits, int source_state, int target_state) const; // Given num_parity_bits() received bits, compute and returns path // metric and its corresponding previous state. std::pair PathMetric(const std::string& bits, const std::vector& prev_path_metrics, int state) const; // Given num_parity_bits() received bits, update path metrics of all states // in the current iteration, and append new traceback vector to trellis. void UpdatePathMetrics(const std::string& bits, std::vector* path_metrics, Trellis* trellis) const; const int constraint_; const std::vector polynomials_; // The output table. // The index is current input bit combined with previous inputs in the shift // register. The value is the output parity bits in string format for // convenience, e.g. "10". For example, suppose the shift register contains // 0b10 (= 2), and the current input is 0b1 (= 1), then the index is 0b110 (= // 6). std::vector outputs_; }; std::ostream& operator<<(std::ostream& os, const ViterbiCodec& codec); int ReverseBits(int num_bits, int input); #endif // VITERBI_H_ gr-satellites-4.4.0/lib/viterbi_decoder_impl.cc000066400000000000000000000040461414055407700215400ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2021 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "viterbi_decoder_impl.h" #include #include #include namespace gr { namespace satellites { viterbi_decoder::sptr viterbi_decoder::make(int constraint, const std::vector& polynomials) { return gnuradio::get_initial_sptr(new viterbi_decoder_impl(constraint, polynomials)); } /* * The private constructor */ viterbi_decoder_impl::viterbi_decoder_impl(int constraint, const std::vector& polynomials) : gr::block("viterbi_decoder", gr::io_signature::make(0, 0, 0), gr::io_signature::make(0, 0, 0)), d_codec(constraint, polynomials) { message_port_register_out(pmt::mp("out")); message_port_register_in(pmt::mp("in")); set_msg_handler(pmt::mp("in"), [this](pmt::pmt_t msg) { this->msg_handler(msg); }); } /* * Our virtual destructor. */ viterbi_decoder_impl::~viterbi_decoder_impl() {} int viterbi_decoder_impl::general_work(int noutput_items, gr_vector_int& ninput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items) { return 0; } void viterbi_decoder_impl::msg_handler(pmt::pmt_t pmt_msg) { std::vector msg = pmt::u8vector_elements(pmt::cdr(pmt_msg)); std::string bits; for (auto b : msg) { bits.push_back(b ? '1' : '0'); } std::string outbits = d_codec.Decode(bits); std::vector out; for (auto b : outbits) { out.push_back(b == '1'); } message_port_pub(pmt::mp("out"), pmt::cons(pmt::car(pmt_msg), pmt::init_u8vector(out.size(), out))); return; } } /* namespace satellites */ } /* namespace gr */ gr-satellites-4.4.0/lib/viterbi_decoder_impl.h000066400000000000000000000016651414055407700214060ustar00rootroot00000000000000/* -*- c++ -*- */ /* * Copyright 2021 Daniel Estevez * * This file is part of gr-satellites * * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef INCLUDED_SATELLITES_VITERBI_DECODER_IMPL_H #define INCLUDED_SATELLITES_VITERBI_DECODER_IMPL_H #include "viterbi/viterbi.h" #include namespace gr { namespace satellites { class viterbi_decoder_impl : public viterbi_decoder { private: ViterbiCodec d_codec; public: viterbi_decoder_impl(int constraint, const std::vector& polynomials); ~viterbi_decoder_impl(); int general_work(int noutput_items, gr_vector_int& ninput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items); void msg_handler(pmt::pmt_t pmt_msg); }; } // namespace satellites } // namespace gr #endif /* INCLUDED_SATELLITES_VITERBI_DECODER_IMPL_H */ gr-satellites-4.4.0/python/000077500000000000000000000000001414055407700156265ustar00rootroot00000000000000gr-satellites-4.4.0/python/CMakeLists.txt000066400000000000000000000075271414055407700204010ustar00rootroot00000000000000# Copyright 2011 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. ######################################################################## # Include python install macros ######################################################################## include(GrPython) if(NOT PYTHONINTERP_FOUND) return() endif() add_subdirectory(bindings) ######################################################################## # Install python sources ######################################################################## GR_PYTHON_INSTALL( FILES __init__.py aausat4_remove_fsm.py adapters.py adsb_kml.py ao40_uncoded_crc.py append_crc32c.py bch15.py beesat_classifier.py bme_submitter.py cc11xx_packet_crop.py check_address.py check_ao40_uncoded_crc.py check_astrocast_crc.py check_cc11xx_crc.py check_crc16_ccitt.py check_crc16_ccitt_false.py check_crc.py check_eseo_crc.py check_swiatowid_crc.py check_tt64_crc.py crc32c.py csp_header.py ecss_pus.py eseo_line_decoder.py eseo_packet_crop.py feh.py fixedlen_tagger.py funcube_submit.py hdlc.py hdlc_deframer.py hdlc_framer.py k2sat_deframer.py kiss.py kiss_to_pdu.py ks1q_header_remover.py lilacsat1_gps_kml.py manchester_sync.py ngham_check_crc.py ngham_packet_crop.py ngham_remove_padding.py pdu_to_kiss.py print_header.py print_timestamp.py pwsat2_submitter.py pwsat2_telemetry_parser.py reflect_bytes.py snet_classifier.py snet_deframer.py submit.py swap_crc.py swap_header.py swiatowid_packet_crop.py swiatowid_packet_split.py sx12xx_check_crc.py sx12xx_packet_crop.py DESTINATION ${GR_PYTHON_DIR}/satellites ) add_subdirectory(ccsds) add_subdirectory(components) add_subdirectory(core) add_subdirectory(hier) add_subdirectory(filereceiver) add_subdirectory(satyaml) add_subdirectory(telemetry) add_subdirectory(usp) add_subdirectory(utils) ######################################################################## # Handle the unit tests ######################################################################## include(GrTest) set(GR_TEST_TARGET_DEPS gnuradio-satellites) set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}/swig) GR_ADD_TEST(qa_fixedlen_tagger ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_fixedlen_tagger.py) GR_ADD_TEST(qa_hdlc ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_hdlc.py) GR_ADD_TEST(qa_kiss ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_kiss.py) GR_ADD_TEST(qa_nrzi ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_nrzi.py) GR_ADD_TEST(qa_pdu_add_meta ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_pdu_add_meta.py) GR_ADD_TEST(qa_pdu_head_tail ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_pdu_head_tail.py) GR_ADD_TEST(qa_pdu_length_filter ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_pdu_length_filter.py) GR_ADD_TEST(qa_rs ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_rs.py) GR_ADD_TEST(qa_viterbi ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_viterbi.py) gr-satellites-4.4.0/python/__init__.py000066400000000000000000000062701414055407700177440ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020-2021 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # """ GNU Radio gr-satellites out-of-tree module. gr-satellites is a GNU Radio out-of-tree module encompassing a collection of telemetry decoders that supports many different Amateur satellites. It suports most popular protocols, such as AX.25, the GOMspace NanoCom U482C and AX100 modems, an important part of the CCSDS stack, the AO-40 protocol used in the FUNcube satellites, and several ad-hoc protocols used in other satellites. """ __version__ = 'v4.4.0' __author__ = 'Daniel Estevez' __copyright__ = 'Copyright 2016-2021 Daniel Estevez' __email__ = 'daniel@destevez.net' __license__ = 'GPL-3.0' __all__ = [ 'ccsds', 'components', 'core', 'filereceiver', 'hier', 'satyaml', 'telemetry', 'usp', 'utils', ] # Import bindings into the satellites namespace. # The first try works when we are importing from the build dir try: from .bindings.satellites_python import * except ModuleNotFoundError: from .satellites_python import * # Import any pure python here from .aausat4_remove_fsm import aausat4_remove_fsm from .adsb_kml import adsb_kml from .append_crc32c import append_crc32c from .beesat_classifier import beesat_classifier from .bme_submitter import bme_submitter from .cc11xx_packet_crop import cc11xx_packet_crop from .check_address import check_address from .check_ao40_uncoded_crc import check_ao40_uncoded_crc from .check_astrocast_crc import check_astrocast_crc from .check_cc11xx_crc import check_cc11xx_crc from .check_crc16_ccitt import check_crc16_ccitt from .check_crc16_ccitt_false import check_crc16_ccitt_false from .check_crc import check_crc from .check_eseo_crc import check_eseo_crc from .check_swiatowid_crc import check_swiatowid_crc from .check_tt64_crc import check_tt64_crc from .eseo_line_decoder import eseo_line_decoder from .eseo_packet_crop import eseo_packet_crop from .fixedlen_tagger import fixedlen_tagger from .funcube_submit import funcube_submit from .hdlc_deframer import hdlc_deframer from .hdlc_framer import hdlc_framer from .k2sat_deframer import k2sat_deframer from .kiss_to_pdu import kiss_to_pdu from .ks1q_header_remover import ks1q_header_remover from .lilacsat1_gps_kml import lilacsat1_gps_kml from .manchester_sync import manchester_sync from .ngham_check_crc import ngham_check_crc from .ngham_packet_crop import ngham_packet_crop from .ngham_remove_padding import ngham_remove_padding from .pdu_to_kiss import pdu_to_kiss from .print_header import print_header from .print_timestamp import print_timestamp from .pwsat2_submitter import pwsat2_submitter from .pwsat2_telemetry_parser import pwsat2_telemetry_parser from .reflect_bytes import reflect_bytes from .snet_classifier import snet_classifier from .snet_deframer import snet_deframer from .submit import submit from .swap_crc import swap_crc from .swap_header import swap_header from .swiatowid_packet_crop import swiatowid_packet_crop from .swiatowid_packet_split import swiatowid_packet_split from .sx12xx_check_crc import sx12xx_check_crc from .sx12xx_packet_crop import sx12xx_packet_crop gr-satellites-4.4.0/python/aausat4_remove_fsm.py000066400000000000000000000026121414055407700217650ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2018-2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import array from gnuradio import gr import numpy import pmt class aausat4_remove_fsm(gr.basic_block): """docstring for block aausat4_remove_fsm""" def __init__(self): gr.basic_block.__init__( self, name='aausat4_remove_fsm', in_sig=[], out_sig=[]) self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('short')) self.message_port_register_out(pmt.intern('long')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_f32vector(msg): print('[ERROR] Received invalid message type. Expected f32vector') return packet_short = pmt.f32vector_elements(msg)[8:8+1020] packet_long = pmt.f32vector_elements(msg)[8:8+1996] self.message_port_pub( pmt.intern('short'), pmt.cons(pmt.PMT_NIL, pmt.init_f32vector(len(packet_short), packet_short))) self.message_port_pub( pmt.intern('long'), pmt.cons(pmt.PMT_NIL, pmt.init_f32vector(len(packet_long), packet_long))) gr-satellites-4.4.0/python/adapters.py000066400000000000000000000026351414055407700200110ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2018 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import datetime from construct import * class AffineAdapter(Adapter): def __init__(self, c, a, *args, **kwargs): self.c = c self.a = a return Adapter.__init__(self, *args, **kwargs) def _encode(self, obj, context, path=None): return int(round(obj * self.c + self.a)) def _decode(self, obj, context, path=None): return (float(obj) - self.a) / self.c class LinearAdapter(AffineAdapter): def __init__(self, c, *args, **kwargs): return AffineAdapter.__init__(self, c, 0, *args, **kwargs) class UNIXTimestampAdapter(Adapter): def _encode(self, obj, context, path=None): return round(obj.timestamp()) def _decode(self, obj, context, path=None): return datetime.datetime.utcfromtimestamp(obj) class TableAdapter(Adapter): def __init__(self, table, *args, **kwargs): self.table = table return Adapter.__init__(self, *args, **kwargs) def _encode(self, obj, context, path=None): try: return self.table.index(obj) except ValueError: return None def _decode(self, obj, context, path=None): try: return self.table[obj] except IndexError: return None gr-satellites-4.4.0/python/adsb_kml.py000066400000000000000000000031401414055407700177520ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2016 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr import numpy import pmt from .telemetry import gomx_3 as tlm class adsb_kml(gr.basic_block): """docstring for block adsb_kml""" def __init__(self): gr.basic_block.__init__( self, name='adsb_kml', in_sig=None, out_sig=None) self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = bytes(pmt.u8vector_elements(msg)) beacon = tlm.parse(packet) # check that message is beacon if (beacon.csp_header.destination != 10 or beacon.csp_header.destination_port != 30): return if beacon.csp_header.source != 1 or beacon.beacon_type != 0: return adsb = beacon.beacon.adsb print(""" {} Altitude: {}ft Time: {} #plane {},{} """.format( hex(adsb.last_icao), adsb.last_alt, adsb.last_time, adsb.last_lon if adsb.last_lon <= 180 else adsb.last_lon - 360, adsb.last_lat)) gr-satellites-4.4.0/python/ao40_uncoded_crc.py000066400000000000000000000015461414055407700213010ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2017 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # # TODO: improve this computation. # Probably bit reversal is not the best way to do it. def crc(data): poly = 0x8408 crc = 0xffff for byte in data: # reverse byte byte = (byte & 0x55) << 1 | (byte & 0xAA) >> 1 byte = (byte & 0x33) << 2 | (byte & 0xCC) >> 2 byte = (byte & 0x0F) << 4 | (byte & 0xF0) >> 4 crc ^= byte for _ in range(8): crc = (crc >> 1) ^ poly if crc & 1 else crc >> 1 crc = (crc & 0x5555) << 1 | (crc & 0xAAAA) >> 1 crc = (crc & 0x3333) << 2 | (crc & 0xCCCC) >> 2 crc = (crc & 0x0F0F) << 4 | (crc & 0xF0F0) >> 4 crc = (crc & 0x00FF) << 8 | (crc & 0xFF00) >> 8 return crc gr-satellites-4.4.0/python/append_crc32c.py000066400000000000000000000023511414055407700206070ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2017 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import struct from gnuradio import gr import numpy import pmt from . import crc32c class append_crc32c(gr.basic_block): """docstring for block append_crc32c""" def __init__(self, include_header): gr.basic_block.__init__( self, name='append_crc32c', in_sig=[], out_sig=[]) self.include_header = include_header self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('out')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = bytes(pmt.u8vector_elements(msg)) crc = crc32c.crc(packet if self.include_header else packet[4:]) packet += struct.pack('>I', crc) self.message_port_pub( pmt.intern('out'), pmt.cons(pmt.PMT_NIL, pmt.init_u8vector(len(packet), packet))) gr-satellites-4.4.0/python/bch15.py000066400000000000000000000100201414055407700170730ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2018 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # # BCH(15,k,d) implementation following https://en.wikipedia.org/wiki/BCH_code import numpy as np # Arithmetic in GF(16) # exp_table[k] = a^k exp_table = [8, 4, 2, 1, 12, 6, 3, 13, 10, 5, 14, 7, 15, 11, 9] # j+1 = a^log_table[j] log_table = [3, 2, 6, 1, 9, 5, 11, 0, 14, 8, 13, 4, 7, 10, 12] def gf_mult(x, y): if x == 0 or y == 0: return 0 return exp_table[(log_table[x-1] + log_table[y-1]) % len(exp_table)] def gf_inv(x): if x == 0: raise(ValueError) return exp_table[-log_table[x-1] % len(exp_table)] def compute_syndrome(p, j): # Syndrome calculation by polynomial evaluation s = 0 n = 15 for k in range(n - 1, -1, -1): if p & 1: s ^= exp_table[(k * j) % len(exp_table)] p >>= 1 return s def compute_error_locations(s): # Peterson-Gorenstein-Zierler algorithm L = [1, 0, 0, 0] # coefficients of error locator polynomial if len(s) == 2: # This will raise ValueError if s[0] == 0, indicating decoding failure L[1] = gf_mult(s[1], gf_inv(s[0])) elif len(s) == 4: det_S = gf_mult(s[0], s[2]) ^ gf_mult(s[1], s[1]) if det_S == 0: # Matrix is non-invertible. Throw away 2 syndromes. return compute_error_locations(s[:-2]) inv_det_S = gf_inv(det_S) L[2] = gf_mult(s[2], s[2]) ^ gf_mult(s[3], s[1]) L[2] = gf_mult(L[2], inv_det_S) L[1] = gf_mult(s[0], s[3]) ^ gf_mult(s[2], s[1]) L[1] = gf_mult(L[1], inv_det_S) elif len(s) == 6: det_S = ( gf_mult(gf_mult(s[0], s[2]), s[4]) ^ gf_mult(gf_mult(s[2], s[2]), s[2]) ^ gf_mult(gf_mult(s[1], s[1]), s[4]) ^ gf_mult(gf_mult(s[3], s[3]), s[0])) if det_S == 0: # Matrix is non-invertible. Throw away 2 syndromes. return compute_error_locations(s[:-2]) inv_det_S = gf_inv(det_S) L[3] = ( gf_mult(gf_mult(s[3], s[2]), s[4]) ^ gf_mult(gf_mult(s[1], s[3]), s[5]) ^ gf_mult(gf_mult(s[4], s[3]), s[2]) ^ gf_mult(gf_mult(s[2], s[2]), s[5]) ^ gf_mult(gf_mult(s[1], s[4]), s[4]) ^ gf_mult(gf_mult(s[3], s[3]), s[3])) L[3] = gf_mult(L[3], inv_det_S) L[2] = ( gf_mult(gf_mult(s[0], s[4]), s[4]) ^ gf_mult(gf_mult(s[1], s[2]), s[5]) ^ gf_mult(gf_mult(s[3], s[3]), s[2]) ^ gf_mult(gf_mult(s[2], s[2]), s[4]) ^ gf_mult(gf_mult(s[1], s[3]), s[4]) ^ gf_mult(gf_mult(s[0], s[3]), s[5])) L[2] = gf_mult(L[2], inv_det_S) L[1] = ( gf_mult(gf_mult(s[0], s[2]), s[5]) ^ gf_mult(gf_mult(s[1], s[3]), s[3]) ^ gf_mult(gf_mult(s[4], s[1]), s[2]) ^ gf_mult(gf_mult(s[2], s[2]), s[3]) ^ gf_mult(gf_mult(s[1], s[1]), s[5]) ^ gf_mult(gf_mult(s[0], s[3]), s[4])) L[1] = gf_mult(L[1], inv_det_S) # Brute-force search roots of error locator polynomial return [j for j in range(15) if exp_table[0] ^ gf_mult(L[1], exp_table[-j % len(exp_table)]) ^ gf_mult(L[2], exp_table[-2*j % len(exp_table)]) ^ gf_mult(L[3], exp_table[-3*j % len(exp_table)]) == 0] def decode_bch15(bits, d=7): """BCH(15,k,d) decode function The following values of (n,k,d) are supported: (15,11,3), (15,7,5), (15,5,7) Expects an np.array() as bits and modifies it in place returns True if decode is successful """ b = np.packbits(bits) p = (b[0] << 7) | (b[1] >> 1) syndromes = [compute_syndrome(p, j) for j in range(d - 1)] if not any(syndromes): # If all syndromes are zero, there are no errors return True try: errors = compute_error_locations(syndromes) except ValueError: return False for e in errors: bits[e] ^= 1 return True gr-satellites-4.4.0/python/beesat_classifier.py000066400000000000000000000034451414055407700216550ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2016 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import struct from gnuradio import gr import numpy import pmt class beesat_classifier(gr.basic_block): """docstring for block beesat_classifier""" def __init__(self): gr.basic_block.__init__( self, name='beesat_classifier', in_sig=[], out_sig=[]) self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('BEESAT-1')) self.message_port_register_out(pmt.intern('BEESAT-2')) self.message_port_register_out(pmt.intern('BEESAT-4')) self.message_port_register_out(pmt.intern('BEESAT-9')) self.message_port_register_out(pmt.intern('TECHNOSAT')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = bytes(pmt.u8vector_elements(msg)) satellite = None if len(packet) < 2 + 6 + 2: # 2byte header, 6byte callsign, 2byte callsign crc return callsign = struct.unpack('6s', packet[2:8])[0] if callsign == 'DP0BEE': satellite = 'BEESAT-1' elif callsign == 'DP0BEF': satellite = 'BEESAT-2' elif callsign == 'DP0BEH': satellite = 'BEESAT-4' elif callsign == 'DP0BEM': satellite = 'BEESAT-9' elif callsign == 'DP0TBA': satellite = 'TECHNOSAT' if satellite: self.message_port_pub(pmt.intern(satellite), msg_pmt) gr-satellites-4.4.0/python/bindings/000077500000000000000000000000001414055407700174235ustar00rootroot00000000000000gr-satellites-4.4.0/python/bindings/CMakeLists.txt000066400000000000000000000032631414055407700221670ustar00rootroot00000000000000# Copyright 2020 Free Software Foundation, Inc. # # This file is part of GNU Radio # # SPDX-License-Identifier: GPL-3.0-or-later # ######################################################################## # Check if there is C++ code at all ######################################################################## if(NOT satellites_sources) MESSAGE(STATUS "No C++ sources... skipping python bindings") return() endif(NOT satellites_sources) ######################################################################## # Check for pygccxml ######################################################################## GR_PYTHON_CHECK_MODULE_RAW( "pygccxml" "import pygccxml" PYGCCXML_FOUND ) include(GrPybind) ######################################################################## # Python Bindings ######################################################################## list(APPEND satellites_python_files ax100_decode_python.cc convolutional_encoder_python.cc decode_ra_code_python.cc decode_rs_python.cc descrambler308_python.cc distributed_syncframe_soft_python.cc encode_rs_python.cc lilacsat1_demux_python.cc matrix_deinterleaver_soft_python.cc nrzi_decode_python.cc nrzi_encode_python.cc nusat_decoder_python.cc pdu_add_meta_python.cc pdu_head_tail_python.cc pdu_length_filter_python.cc python_bindings.cc u482c_decode_python.cc varlen_packet_framer_python.cc varlen_packet_tagger_python.cc viterbi_decoder_python.cc ) GR_PYBIND_MAKE_OOT(satellites ../.. gr::satellites "${satellites_python_files}") install(TARGETS satellites_python DESTINATION ${GR_PYTHON_DIR}/satellites COMPONENT pythonapi) gr-satellites-4.4.0/python/bindings/README.md000066400000000000000000000000001414055407700206700ustar00rootroot00000000000000gr-satellites-4.4.0/python/bindings/ax100_decode_python.cc000066400000000000000000000027301414055407700234710ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ /***********************************************************************************/ /* This file is automatically generated using bindtool and can be manually edited */ /* The following lines can be configured to regenerate this file during cmake */ /* If manual edits are made, the following tags should be modified accordingly. */ /* BINDTOOL_GEN_AUTOMATIC(0) */ /* BINDTOOL_USE_PYGCCXML(0) */ /* BINDTOOL_HEADER_FILE(ax100_decode.h) */ /* BINDTOOL_HEADER_FILE_HASH(15904d5b29f5f9981f3c2b50a5958064) */ /***********************************************************************************/ #include #include #include namespace py = pybind11; #include // pydoc.h is automatically generated in the build directory #include void bind_ax100_decode(py::module& m) { using ax100_decode = ::gr::satellites::ax100_decode; py::class_>( m, "ax100_decode", D(ax100_decode)) .def(py::init(&ax100_decode::make), py::arg("verbose"), D(ax100_decode, make)) ; } gr-satellites-4.4.0/python/bindings/bind_oot_file.py000066400000000000000000000040221414055407700225670ustar00rootroot00000000000000import warnings import argparse import os from gnuradio.bindtool import BindingGenerator import pathlib import sys parser = argparse.ArgumentParser(description='Bind a GR Out of Tree Block') parser.add_argument('--module', type=str, help='Name of gr module containing file to bind (e.g. fft digital analog)') parser.add_argument('--output_dir', default='/tmp', help='Output directory of generated bindings') parser.add_argument('--prefix', help='Prefix of Installed GNU Radio') parser.add_argument('--src', help='Directory of gnuradio source tree', default=os.path.dirname(os.path.abspath(__file__))+'/../../..') parser.add_argument( '--filename', help="File to be parsed") parser.add_argument( '--defines', help='Set additional defines for precompiler',default=(), nargs='*') parser.add_argument( '--include', help='Additional Include Dirs, separated', default=(), nargs='*') parser.add_argument( '--status', help='Location of output file for general status (used during cmake)', default=None ) parser.add_argument( '--flag_automatic', default='0' ) parser.add_argument( '--flag_pygccxml', default='0' ) args = parser.parse_args() prefix = args.prefix output_dir = args.output_dir defines = tuple(','.join(args.defines).split(',')) includes = ','.join(args.include) name = args.module namespace = ['gr', name] prefix_include_root = name with warnings.catch_warnings(): warnings.filterwarnings("ignore", category=DeprecationWarning) bg = BindingGenerator(prefix, namespace, prefix_include_root, output_dir, define_symbols=defines, addl_includes=includes, catch_exceptions=False, write_json_output=False, status_output=args.status, flag_automatic=True if args.flag_automatic.lower() in [ '1', 'true'] else False, flag_pygccxml=True if args.flag_pygccxml.lower() in ['1', 'true'] else False) bg.gen_file_binding(args.filename) gr-satellites-4.4.0/python/bindings/convolutional_encoder_python.cc000066400000000000000000000032631414055407700257320ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ /***********************************************************************************/ /* This file is automatically generated using bindtool and can be manually edited */ /* The following lines can be configured to regenerate this file during cmake */ /* If manual edits are made, the following tags should be modified accordingly. */ /* BINDTOOL_GEN_AUTOMATIC(0) */ /* BINDTOOL_USE_PYGCCXML(0) */ /* BINDTOOL_HEADER_FILE(convolutional_encoder.h) */ /* BINDTOOL_HEADER_FILE_HASH(a6495f8aaff7b500ea1b88467f005622) */ /***********************************************************************************/ #include #include #include namespace py = pybind11; #include // pydoc.h is automatically generated in the build directory #include void bind_convolutional_encoder(py::module& m) { using convolutional_encoder = ::gr::satellites::convolutional_encoder; py::class_>( m, "convolutional_encoder", D(convolutional_encoder)) .def(py::init(&convolutional_encoder::make), py::arg("constraint"), py::arg("polynomials"), D(convolutional_encoder, make)) ; } gr-satellites-4.4.0/python/bindings/decode_ra_code_python.cc000066400000000000000000000030211414055407700242260ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ /***********************************************************************************/ /* This file is automatically generated using bindtool and can be manually edited */ /* The following lines can be configured to regenerate this file during cmake */ /* If manual edits are made, the following tags should be modified accordingly. */ /* BINDTOOL_GEN_AUTOMATIC(0) */ /* BINDTOOL_USE_PYGCCXML(0) */ /* BINDTOOL_HEADER_FILE(decode_ra_code.h) */ /* BINDTOOL_HEADER_FILE_HASH(0989a332db956a68a30ddfc4332ec90f) */ /***********************************************************************************/ #include #include #include namespace py = pybind11; #include // pydoc.h is automatically generated in the build directory #include void bind_decode_ra_code(py::module& m) { using decode_ra_code = ::gr::satellites::decode_ra_code; py::class_>(m, "decode_ra_code", D(decode_ra_code)) .def(py::init(&decode_ra_code::make), py::arg("size"), D(decode_ra_code, make)) ; } gr-satellites-4.4.0/python/bindings/decode_rs_python.cc000066400000000000000000000035621414055407700232700ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ /***********************************************************************************/ /* This file is automatically generated using bindtool and can be manually edited */ /* The following lines can be configured to regenerate this file during cmake */ /* If manual edits are made, the following tags should be modified accordingly. */ /* BINDTOOL_GEN_AUTOMATIC(0) */ /* BINDTOOL_USE_PYGCCXML(0) */ /* BINDTOOL_HEADER_FILE(decode_rs.h) */ /* BINDTOOL_HEADER_FILE_HASH(f2a632f6d952d303afb5d6698cc3ac3f) */ /***********************************************************************************/ #include #include #include namespace py = pybind11; #include // pydoc.h is automatically generated in the build directory #include void bind_decode_rs(py::module& m) { using decode_rs = ::gr::satellites::decode_rs; py::class_>( m, "decode_rs", D(decode_rs)) .def(py::init(py::overload_cast(&decode_rs::make)), py::arg("dual_basis"), py::arg("interleave"), D(decode_rs, make)) .def(py::init(py::overload_cast(&decode_rs::make)), py::arg("symsize"), py::arg("gfpoly"), py::arg("fcr"), py::arg("prim"), py::arg("nroots"), py::arg("interleave") //, // D(decode_rs,make) ) ; } gr-satellites-4.4.0/python/bindings/descrambler308_python.cc000066400000000000000000000030371414055407700240540ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ /***********************************************************************************/ /* This file is automatically generated using bindtool and can be manually edited */ /* The following lines can be configured to regenerate this file during cmake */ /* If manual edits are made, the following tags should be modified accordingly. */ /* BINDTOOL_GEN_AUTOMATIC(0) */ /* BINDTOOL_USE_PYGCCXML(0) */ /* BINDTOOL_HEADER_FILE(descrambler308.h) */ /* BINDTOOL_HEADER_FILE_HASH(bff741b093f515cd5bfbefff15efc533) */ /***********************************************************************************/ #include #include #include namespace py = pybind11; #include // pydoc.h is automatically generated in the build directory #include void bind_descrambler308(py::module& m) { using descrambler308 = ::gr::satellites::descrambler308; py::class_>(m, "descrambler308", D(descrambler308)) .def(py::init(&descrambler308::make), D(descrambler308, make)) ; } gr-satellites-4.4.0/python/bindings/distributed_syncframe_soft_python.cc000066400000000000000000000034011414055407700267550ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ /***********************************************************************************/ /* This file is automatically generated using bindtool and can be manually edited */ /* The following lines can be configured to regenerate this file during cmake */ /* If manual edits are made, the following tags should be modified accordingly. */ /* BINDTOOL_GEN_AUTOMATIC(0) */ /* BINDTOOL_USE_PYGCCXML(0) */ /* BINDTOOL_HEADER_FILE(distributed_syncframe_soft.h) */ /* BINDTOOL_HEADER_FILE_HASH(569378679955c86ca9300f6cf1d68b4d) */ /***********************************************************************************/ #include #include #include namespace py = pybind11; #include // pydoc.h is automatically generated in the build directory #include void bind_distributed_syncframe_soft(py::module& m) { using distributed_syncframe_soft = ::gr::satellites::distributed_syncframe_soft; py::class_>( m, "distributed_syncframe_soft", D(distributed_syncframe_soft)) .def(py::init(&distributed_syncframe_soft::make), py::arg("threshold"), py::arg("syncword"), py::arg("step"), D(distributed_syncframe_soft, make)) ; } gr-satellites-4.4.0/python/bindings/docstrings/000077500000000000000000000000001414055407700216025ustar00rootroot00000000000000gr-satellites-4.4.0/python/bindings/docstrings/README.md000066400000000000000000000001541414055407700230610ustar00rootroot00000000000000This directory stores templates for docstrings that are scraped from the include header files for each blockgr-satellites-4.4.0/python/bindings/docstrings/ax100_decode_pydoc_template.h000066400000000000000000000012141414055407700271760ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ #include "pydoc_macros.h" #define D(...) DOC(gr, satellites, __VA_ARGS__) /* This file contains placeholders for docstrings for the Python bindings. Do not edit! These were automatically extracted during the binding process and will be overwritten during the build process */ static const char* __doc_gr_satellites_ax100_decode = R"doc()doc"; static const char* __doc_gr_satellites_ax100_decode_ax100_decode = R"doc()doc"; static const char* __doc_gr_satellites_ax100_decode_make = R"doc()doc"; gr-satellites-4.4.0/python/bindings/docstrings/convolutional_encoder_pydoc_template.h000066400000000000000000000012641414055407700314420ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ #include "pydoc_macros.h" #define D(...) DOC(gr, satellites, __VA_ARGS__) /* This file contains placeholders for docstrings for the Python bindings. Do not edit! These were automatically extracted during the binding process and will be overwritten during the build process */ static const char* __doc_gr_satellites_convolutional_encoder = R"doc()doc"; static const char* __doc_gr_satellites_convolutional_encoder_convolutional_encoder = R"doc()doc"; static const char* __doc_gr_satellites_convolutional_encoder_make = R"doc()doc"; gr-satellites-4.4.0/python/bindings/docstrings/decode_ra_code_pydoc_template.h000066400000000000000000000012241414055407700277420ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ #include "pydoc_macros.h" #define D(...) DOC(gr, satellites, __VA_ARGS__) /* This file contains placeholders for docstrings for the Python bindings. Do not edit! These were automatically extracted during the binding process and will be overwritten during the build process */ static const char* __doc_gr_satellites_decode_ra_code = R"doc()doc"; static const char* __doc_gr_satellites_decode_ra_code_decode_ra_code = R"doc()doc"; static const char* __doc_gr_satellites_decode_ra_code_make = R"doc()doc"; gr-satellites-4.4.0/python/bindings/docstrings/decode_rs_pydoc_template.h000066400000000000000000000012001414055407700267640ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ #include "pydoc_macros.h" #define D(...) DOC(gr, satellites, __VA_ARGS__) /* This file contains placeholders for docstrings for the Python bindings. Do not edit! These were automatically extracted during the binding process and will be overwritten during the build process */ static const char* __doc_gr_satellites_decode_rs = R"doc()doc"; static const char* __doc_gr_satellites_decode_rs_decode_rs = R"doc()doc"; static const char* __doc_gr_satellites_decode_rs_make = R"doc()doc"; gr-satellites-4.4.0/python/bindings/docstrings/descrambler308_pydoc_template.h000066400000000000000000000012241414055407700275610ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ #include "pydoc_macros.h" #define D(...) DOC(gr, satellites, __VA_ARGS__) /* This file contains placeholders for docstrings for the Python bindings. Do not edit! These were automatically extracted during the binding process and will be overwritten during the build process */ static const char* __doc_gr_satellites_descrambler308 = R"doc()doc"; static const char* __doc_gr_satellites_descrambler308_descrambler308 = R"doc()doc"; static const char* __doc_gr_satellites_descrambler308_make = R"doc()doc"; gr-satellites-4.4.0/python/bindings/docstrings/distributed_syncframe_soft_pydoc_template.h000066400000000000000000000013201414055407700324640ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ #include "pydoc_macros.h" #define D(...) DOC(gr, satellites, __VA_ARGS__) /* This file contains placeholders for docstrings for the Python bindings. Do not edit! These were automatically extracted during the binding process and will be overwritten during the build process */ static const char* __doc_gr_satellites_distributed_syncframe_soft = R"doc()doc"; static const char* __doc_gr_satellites_distributed_syncframe_soft_distributed_syncframe_soft = R"doc()doc"; static const char* __doc_gr_satellites_distributed_syncframe_soft_make = R"doc()doc"; gr-satellites-4.4.0/python/bindings/docstrings/encode_rs_pydoc_template.h000066400000000000000000000012001414055407700267760ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ #include "pydoc_macros.h" #define D(...) DOC(gr, satellites, __VA_ARGS__) /* This file contains placeholders for docstrings for the Python bindings. Do not edit! These were automatically extracted during the binding process and will be overwritten during the build process */ static const char* __doc_gr_satellites_encode_rs = R"doc()doc"; static const char* __doc_gr_satellites_encode_rs_encode_rs = R"doc()doc"; static const char* __doc_gr_satellites_encode_rs_make = R"doc()doc"; gr-satellites-4.4.0/python/bindings/docstrings/lilacsat1_demux_pydoc_template.h000066400000000000000000000012301414055407700301170ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ #include "pydoc_macros.h" #define D(...) DOC(gr, satellites, __VA_ARGS__) /* This file contains placeholders for docstrings for the Python bindings. Do not edit! These were automatically extracted during the binding process and will be overwritten during the build process */ static const char* __doc_gr_satellites_lilacsat1_demux = R"doc()doc"; static const char* __doc_gr_satellites_lilacsat1_demux_lilacsat1_demux = R"doc()doc"; static const char* __doc_gr_satellites_lilacsat1_demux_make = R"doc()doc"; gr-satellites-4.4.0/python/bindings/docstrings/matrix_deinterleaver_soft_pydoc_template.h000066400000000000000000000013041414055407700323120ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ #include "pydoc_macros.h" #define D(...) DOC(gr, satellites, __VA_ARGS__) /* This file contains placeholders for docstrings for the Python bindings. Do not edit! These were automatically extracted during the binding process and will be overwritten during the build process */ static const char* __doc_gr_satellites_matrix_deinterleaver_soft = R"doc()doc"; static const char* __doc_gr_satellites_matrix_deinterleaver_soft_matrix_deinterleaver_soft = R"doc()doc"; static const char* __doc_gr_satellites_matrix_deinterleaver_soft_make = R"doc()doc"; gr-satellites-4.4.0/python/bindings/docstrings/nrzi_decode_pydoc_template.h000066400000000000000000000012101414055407700273230ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ #include "pydoc_macros.h" #define D(...) DOC(gr, satellites, __VA_ARGS__) /* This file contains placeholders for docstrings for the Python bindings. Do not edit! These were automatically extracted during the binding process and will be overwritten during the build process */ static const char* __doc_gr_satellites_nrzi_decode = R"doc()doc"; static const char* __doc_gr_satellites_nrzi_decode_nrzi_decode = R"doc()doc"; static const char* __doc_gr_satellites_nrzi_decode_make = R"doc()doc"; gr-satellites-4.4.0/python/bindings/docstrings/nrzi_encode_pydoc_template.h000066400000000000000000000012101414055407700273350ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ #include "pydoc_macros.h" #define D(...) DOC(gr, satellites, __VA_ARGS__) /* This file contains placeholders for docstrings for the Python bindings. Do not edit! These were automatically extracted during the binding process and will be overwritten during the build process */ static const char* __doc_gr_satellites_nrzi_encode = R"doc()doc"; static const char* __doc_gr_satellites_nrzi_encode_nrzi_encode = R"doc()doc"; static const char* __doc_gr_satellites_nrzi_encode_make = R"doc()doc"; gr-satellites-4.4.0/python/bindings/docstrings/nusat_decoder_pydoc_template.h000066400000000000000000000012201414055407700276560ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ #include "pydoc_macros.h" #define D(...) DOC(gr, satellites, __VA_ARGS__) /* This file contains placeholders for docstrings for the Python bindings. Do not edit! These were automatically extracted during the binding process and will be overwritten during the build process */ static const char* __doc_gr_satellites_nusat_decoder = R"doc()doc"; static const char* __doc_gr_satellites_nusat_decoder_nusat_decoder = R"doc()doc"; static const char* __doc_gr_satellites_nusat_decoder_make = R"doc()doc"; gr-satellites-4.4.0/python/bindings/docstrings/pdu_add_meta_pydoc_template.h000066400000000000000000000012141414055407700274500ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ #include "pydoc_macros.h" #define D(...) DOC(gr, satellites, __VA_ARGS__) /* This file contains placeholders for docstrings for the Python bindings. Do not edit! These were automatically extracted during the binding process and will be overwritten during the build process */ static const char* __doc_gr_satellites_pdu_add_meta = R"doc()doc"; static const char* __doc_gr_satellites_pdu_add_meta_pdu_add_meta = R"doc()doc"; static const char* __doc_gr_satellites_pdu_add_meta_make = R"doc()doc"; gr-satellites-4.4.0/python/bindings/docstrings/pdu_head_tail_pydoc_template.h000066400000000000000000000012201414055407700276210ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ #include "pydoc_macros.h" #define D(...) DOC(gr, satellites, __VA_ARGS__) /* This file contains placeholders for docstrings for the Python bindings. Do not edit! These were automatically extracted during the binding process and will be overwritten during the build process */ static const char* __doc_gr_satellites_pdu_head_tail = R"doc()doc"; static const char* __doc_gr_satellites_pdu_head_tail_pdu_head_tail = R"doc()doc"; static const char* __doc_gr_satellites_pdu_head_tail_make = R"doc()doc"; gr-satellites-4.4.0/python/bindings/docstrings/pdu_length_filter_pydoc_template.h000066400000000000000000000012401414055407700305370ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ #include "pydoc_macros.h" #define D(...) DOC(gr, satellites, __VA_ARGS__) /* This file contains placeholders for docstrings for the Python bindings. Do not edit! These were automatically extracted during the binding process and will be overwritten during the build process */ static const char* __doc_gr_satellites_pdu_length_filter = R"doc()doc"; static const char* __doc_gr_satellites_pdu_length_filter_pdu_length_filter = R"doc()doc"; static const char* __doc_gr_satellites_pdu_length_filter_make = R"doc()doc"; gr-satellites-4.4.0/python/bindings/docstrings/u482c_decode_pydoc_template.h000066400000000000000000000012141414055407700272120ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ #include "pydoc_macros.h" #define D(...) DOC(gr, satellites, __VA_ARGS__) /* This file contains placeholders for docstrings for the Python bindings. Do not edit! These were automatically extracted during the binding process and will be overwritten during the build process */ static const char* __doc_gr_satellites_u482c_decode = R"doc()doc"; static const char* __doc_gr_satellites_u482c_decode_u482c_decode = R"doc()doc"; static const char* __doc_gr_satellites_u482c_decode_make = R"doc()doc"; gr-satellites-4.4.0/python/bindings/docstrings/varlen_packet_framer_pydoc_template.h000066400000000000000000000012601414055407700312150ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ #include "pydoc_macros.h" #define D(...) DOC(gr, satellites, __VA_ARGS__) /* This file contains placeholders for docstrings for the Python bindings. Do not edit! These were automatically extracted during the binding process and will be overwritten during the build process */ static const char* __doc_gr_satellites_varlen_packet_framer = R"doc()doc"; static const char* __doc_gr_satellites_varlen_packet_framer_varlen_packet_framer = R"doc()doc"; static const char* __doc_gr_satellites_varlen_packet_framer_make = R"doc()doc"; gr-satellites-4.4.0/python/bindings/docstrings/varlen_packet_tagger_pydoc_template.h000066400000000000000000000012601414055407700312120ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ #include "pydoc_macros.h" #define D(...) DOC(gr, satellites, __VA_ARGS__) /* This file contains placeholders for docstrings for the Python bindings. Do not edit! These were automatically extracted during the binding process and will be overwritten during the build process */ static const char* __doc_gr_satellites_varlen_packet_tagger = R"doc()doc"; static const char* __doc_gr_satellites_varlen_packet_tagger_varlen_packet_tagger = R"doc()doc"; static const char* __doc_gr_satellites_varlen_packet_tagger_make = R"doc()doc"; gr-satellites-4.4.0/python/bindings/docstrings/viterbi_decoder_pydoc_template.h000066400000000000000000000012301414055407700301710ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ #include "pydoc_macros.h" #define D(...) DOC(gr, satellites, __VA_ARGS__) /* This file contains placeholders for docstrings for the Python bindings. Do not edit! These were automatically extracted during the binding process and will be overwritten during the build process */ static const char* __doc_gr_satellites_viterbi_decoder = R"doc()doc"; static const char* __doc_gr_satellites_viterbi_decoder_viterbi_decoder = R"doc()doc"; static const char* __doc_gr_satellites_viterbi_decoder_make = R"doc()doc"; gr-satellites-4.4.0/python/bindings/encode_rs_python.cc000066400000000000000000000035241414055407700233000ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ /***********************************************************************************/ /* This file is automatically generated using bindtool and can be manually edited */ /* The following lines can be configured to regenerate this file during cmake */ /* If manual edits are made, the following tags should be modified accordingly. */ /* BINDTOOL_GEN_AUTOMATIC(0) */ /* BINDTOOL_USE_PYGCCXML(0) */ /* BINDTOOL_HEADER_FILE(encode_rs.h) */ /* BINDTOOL_HEADER_FILE_HASH(99021331d1740a77b5cd3f667010f815) */ /***********************************************************************************/ #include #include #include namespace py = pybind11; #include // pydoc.h is automatically generated in the build directory #include void bind_encode_rs(py::module& m) { using encode_rs = ::gr::satellites::encode_rs; py::class_>( m, "encode_rs", D(encode_rs)) .def(py::init(py::overload_cast(&encode_rs::make)), py::arg("dual_basis"), py::arg("interleave") = 1, D(encode_rs, make)) .def(py::init(py::overload_cast(&encode_rs::make)), py::arg("symsize"), py::arg("gfpoly"), py::arg("fcr"), py::arg("prim"), py::arg("nroots"), py::arg("interleave"), D(encode_rs, make)) ; } gr-satellites-4.4.0/python/bindings/header_utils.py000066400000000000000000000051571414055407700224550ustar00rootroot00000000000000# Utilities for reading values in header files from argparse import ArgumentParser import re class PybindHeaderParser: def __init__(self, pathname): with open(pathname,'r') as f: self.file_txt = f.read() def get_flag_automatic(self): # p = re.compile(r'BINDTOOL_GEN_AUTOMATIC\(([^\s])\)') # m = p.search(self.file_txt) m = re.search(r'BINDTOOL_GEN_AUTOMATIC\(([^\s])\)', self.file_txt) if (m and m.group(1) == '1'): return True else: return False def get_flag_pygccxml(self): # p = re.compile(r'BINDTOOL_USE_PYGCCXML\(([^\s])\)') # m = p.search(self.file_txt) m = re.search(r'BINDTOOL_USE_PYGCCXML\(([^\s])\)', self.file_txt) if (m and m.group(1) == '1'): return True else: return False def get_header_filename(self): # p = re.compile(r'BINDTOOL_HEADER_FILE\(([^\s]*)\)') # m = p.search(self.file_txt) m = re.search(r'BINDTOOL_HEADER_FILE\(([^\s]*)\)', self.file_txt) if (m): return m.group(1) else: return None def get_header_file_hash(self): # p = re.compile(r'BINDTOOL_HEADER_FILE_HASH\(([^\s]*)\)') # m = p.search(self.file_txt) m = re.search(r'BINDTOOL_HEADER_FILE_HASH\(([^\s]*)\)', self.file_txt) if (m): return m.group(1) else: return None def get_flags(self): return f'{self.get_flag_automatic()};{self.get_flag_pygccxml()};{self.get_header_filename()};{self.get_header_file_hash()};' def argParse(): """Parses commandline args.""" desc='Reads the parameters from the comment block in the pybind files' parser = ArgumentParser(description=desc) parser.add_argument("function", help="Operation to perform on comment block of pybind file", choices=["flag_auto","flag_pygccxml","header_filename","header_file_hash","all"]) parser.add_argument("pathname", help="Pathname of pybind c++ file to read, e.g. blockname_python.cc") return parser.parse_args() if __name__ == "__main__": # Parse command line options and set up doxyxml. args = argParse() pbhp = PybindHeaderParser(args.pathname) if args.function == "flag_auto": print(pbhp.get_flag_automatic()) elif args.function == "flag_pygccxml": print(pbhp.get_flag_pygccxml()) elif args.function == "header_filename": print(pbhp.get_header_filename()) elif args.function == "header_file_hash": print(pbhp.get_header_file_hash()) elif args.function == "all": print(pbhp.get_flags())gr-satellites-4.4.0/python/bindings/lilacsat1_demux_python.cc000066400000000000000000000030731414055407700244150ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ /***********************************************************************************/ /* This file is automatically generated using bindtool and can be manually edited */ /* The following lines can be configured to regenerate this file during cmake */ /* If manual edits are made, the following tags should be modified accordingly. */ /* BINDTOOL_GEN_AUTOMATIC(0) */ /* BINDTOOL_USE_PYGCCXML(0) */ /* BINDTOOL_HEADER_FILE(lilacsat1_demux.h) */ /* BINDTOOL_HEADER_FILE_HASH(0c0dfcb2ca665db072bf659bc6b08d45) */ /***********************************************************************************/ #include #include #include namespace py = pybind11; #include // pydoc.h is automatically generated in the build directory #include void bind_lilacsat1_demux(py::module& m) { using lilacsat1_demux = ::gr::satellites::lilacsat1_demux; py::class_>(m, "lilacsat1_demux", D(lilacsat1_demux)) .def(py::init(&lilacsat1_demux::make), py::arg("tag"), D(lilacsat1_demux, make)) ; } gr-satellites-4.4.0/python/bindings/matrix_deinterleaver_soft_python.cc000066400000000000000000000033711414055407700266070ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ /***********************************************************************************/ /* This file is automatically generated using bindtool and can be manually edited */ /* The following lines can be configured to regenerate this file during cmake */ /* If manual edits are made, the following tags should be modified accordingly. */ /* BINDTOOL_GEN_AUTOMATIC(0) */ /* BINDTOOL_USE_PYGCCXML(0) */ /* BINDTOOL_HEADER_FILE(matrix_deinterleaver_soft.h) */ /* BINDTOOL_HEADER_FILE_HASH(ff360136b96f6fe6a1b3db61c269098e) */ /***********************************************************************************/ #include #include #include namespace py = pybind11; #include // pydoc.h is automatically generated in the build directory #include void bind_matrix_deinterleaver_soft(py::module& m) { using matrix_deinterleaver_soft = ::gr::satellites::matrix_deinterleaver_soft; py::class_>( m, "matrix_deinterleaver_soft", D(matrix_deinterleaver_soft)) .def(py::init(&matrix_deinterleaver_soft::make), py::arg("rows"), py::arg("cols"), py::arg("output_size"), py::arg("output_skip"), D(matrix_deinterleaver_soft, make)) ; } gr-satellites-4.4.0/python/bindings/nrzi_decode_python.cc000066400000000000000000000027731414055407700236310ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ /***********************************************************************************/ /* This file is automatically generated using bindtool and can be manually edited */ /* The following lines can be configured to regenerate this file during cmake */ /* If manual edits are made, the following tags should be modified accordingly. */ /* BINDTOOL_GEN_AUTOMATIC(0) */ /* BINDTOOL_USE_PYGCCXML(0) */ /* BINDTOOL_HEADER_FILE(nrzi_decode.h) */ /* BINDTOOL_HEADER_FILE_HASH(259d1f7d20af4751aca36aee5e9c8cd8) */ /***********************************************************************************/ #include #include #include namespace py = pybind11; #include // pydoc.h is automatically generated in the build directory #include void bind_nrzi_decode(py::module& m) { using nrzi_decode = ::gr::satellites::nrzi_decode; py::class_>(m, "nrzi_decode", D(nrzi_decode)) .def(py::init(&nrzi_decode::make), D(nrzi_decode, make)) ; } gr-satellites-4.4.0/python/bindings/nrzi_encode_python.cc000066400000000000000000000027731414055407700236430ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ /***********************************************************************************/ /* This file is automatically generated using bindtool and can be manually edited */ /* The following lines can be configured to regenerate this file during cmake */ /* If manual edits are made, the following tags should be modified accordingly. */ /* BINDTOOL_GEN_AUTOMATIC(0) */ /* BINDTOOL_USE_PYGCCXML(0) */ /* BINDTOOL_HEADER_FILE(nrzi_encode.h) */ /* BINDTOOL_HEADER_FILE_HASH(a546ea66d18820f702b93d16ee4c2d23) */ /***********************************************************************************/ #include #include #include namespace py = pybind11; #include // pydoc.h is automatically generated in the build directory #include void bind_nrzi_encode(py::module& m) { using nrzi_encode = ::gr::satellites::nrzi_encode; py::class_>(m, "nrzi_encode", D(nrzi_encode)) .def(py::init(&nrzi_encode::make), D(nrzi_encode, make)) ; } gr-satellites-4.4.0/python/bindings/nusat_decoder_python.cc000066400000000000000000000027201414055407700241530ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ /***********************************************************************************/ /* This file is automatically generated using bindtool and can be manually edited */ /* The following lines can be configured to regenerate this file during cmake */ /* If manual edits are made, the following tags should be modified accordingly. */ /* BINDTOOL_GEN_AUTOMATIC(0) */ /* BINDTOOL_USE_PYGCCXML(0) */ /* BINDTOOL_HEADER_FILE(nusat_decoder.h) */ /* BINDTOOL_HEADER_FILE_HASH(de87e9f1aadcef6362016dccdf923c23) */ /***********************************************************************************/ #include #include #include namespace py = pybind11; #include // pydoc.h is automatically generated in the build directory #include void bind_nusat_decoder(py::module& m) { using nusat_decoder = ::gr::satellites::nusat_decoder; py::class_>( m, "nusat_decoder", D(nusat_decoder)) .def(py::init(&nusat_decoder::make), D(nusat_decoder, make)) ; } gr-satellites-4.4.0/python/bindings/pdu_add_meta_python.cc000066400000000000000000000027251414055407700237470ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ /***********************************************************************************/ /* This file is automatically generated using bindtool and can be manually edited */ /* The following lines can be configured to regenerate this file during cmake */ /* If manual edits are made, the following tags should be modified accordingly. */ /* BINDTOOL_GEN_AUTOMATIC(0) */ /* BINDTOOL_USE_PYGCCXML(0) */ /* BINDTOOL_HEADER_FILE(pdu_add_meta.h) */ /* BINDTOOL_HEADER_FILE_HASH(5616773612a078dc68cc90cf7423e56a) */ /***********************************************************************************/ #include #include #include namespace py = pybind11; #include // pydoc.h is automatically generated in the build directory #include void bind_pdu_add_meta(py::module& m) { using pdu_add_meta = ::gr::satellites::pdu_add_meta; py::class_>( m, "pdu_add_meta", D(pdu_add_meta)) .def(py::init(&pdu_add_meta::make), py::arg("meta"), D(pdu_add_meta, make)) ; } gr-satellites-4.4.0/python/bindings/pdu_head_tail_python.cc000066400000000000000000000030301414055407700241110ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ /***********************************************************************************/ /* This file is automatically generated using bindtool and can be manually edited */ /* The following lines can be configured to regenerate this file during cmake */ /* If manual edits are made, the following tags should be modified accordingly. */ /* BINDTOOL_GEN_AUTOMATIC(0) */ /* BINDTOOL_USE_PYGCCXML(0) */ /* BINDTOOL_HEADER_FILE(pdu_head_tail.h) */ /* BINDTOOL_HEADER_FILE_HASH(c81adfbaac5123c9a94fa332471ae6ad) */ /***********************************************************************************/ #include #include #include namespace py = pybind11; #include // pydoc.h is automatically generated in the build directory #include void bind_pdu_head_tail(py::module& m) { using pdu_head_tail = ::gr::satellites::pdu_head_tail; py::class_>( m, "pdu_head_tail", D(pdu_head_tail)) .def(py::init(&pdu_head_tail::make), py::arg("mode"), py::arg("num"), D(pdu_head_tail, make)) ; } gr-satellites-4.4.0/python/bindings/pdu_length_filter_python.cc000066400000000000000000000031641414055407700250350ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ /***********************************************************************************/ /* This file is automatically generated using bindtool and can be manually edited */ /* The following lines can be configured to regenerate this file during cmake */ /* If manual edits are made, the following tags should be modified accordingly. */ /* BINDTOOL_GEN_AUTOMATIC(0) */ /* BINDTOOL_USE_PYGCCXML(0) */ /* BINDTOOL_HEADER_FILE(pdu_length_filter.h) */ /* BINDTOOL_HEADER_FILE_HASH(769ba1190b6ecee9caf4743126ebc68b) */ /***********************************************************************************/ #include #include #include namespace py = pybind11; #include // pydoc.h is automatically generated in the build directory #include void bind_pdu_length_filter(py::module& m) { using pdu_length_filter = ::gr::satellites::pdu_length_filter; py::class_>( m, "pdu_length_filter", D(pdu_length_filter)) .def(py::init(&pdu_length_filter::make), py::arg("min"), py::arg("max"), D(pdu_length_filter, make)) ; } gr-satellites-4.4.0/python/bindings/python_bindings.cc000066400000000000000000000052121414055407700231300ustar00rootroot00000000000000/* * Copyright 2020 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ #include #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION #include namespace py = pybind11; // Headers for binding functions /**************************************/ // The following comment block is used for // gr_modtool to insert function prototypes // Please do not delete /**************************************/ // BINDING_FUNCTION_PROTOTYPES( void bind_ax100_decode(py::module& m); void bind_convolutional_encoder(py::module& m); void bind_decode_ra_code(py::module& m); void bind_decode_rs(py::module& m); void bind_descrambler308(py::module& m); void bind_distributed_syncframe_soft(py::module& m); void bind_encode_rs(py::module& m); void bind_lilacsat1_demux(py::module& m); void bind_matrix_deinterleaver_soft(py::module& m); void bind_nrzi_decode(py::module& m); void bind_nrzi_encode(py::module& m); void bind_nusat_decoder(py::module& m); void bind_pdu_add_meta(py::module& m); void bind_pdu_head_tail(py::module& m); void bind_pdu_length_filter(py::module& m); void bind_u482c_decode(py::module& m); void bind_varlen_packet_framer(py::module& m); void bind_varlen_packet_tagger(py::module& m); void bind_viterbi_decoder(py::module& m); // ) END BINDING_FUNCTION_PROTOTYPES // We need this hack because import_array() returns NULL // for newer Python versions. // This function is also necessary because it ensures access to the C API // and removes a warning. void* init_numpy() { import_array(); return NULL; } PYBIND11_MODULE(satellites_python, m) { // Initialize the numpy C API // (otherwise we will see segmentation faults) init_numpy(); // Allow access to base block methods py::module::import("gnuradio.gr"); /**************************************/ // The following comment block is used for // gr_modtool to insert binding function calls // Please do not delete /**************************************/ // BINDING_FUNCTION_CALLS( bind_ax100_decode(m); bind_convolutional_encoder(m); bind_decode_ra_code(m); bind_decode_rs(m); bind_descrambler308(m); bind_distributed_syncframe_soft(m); bind_encode_rs(m); bind_lilacsat1_demux(m); bind_matrix_deinterleaver_soft(m); bind_nrzi_decode(m); bind_nrzi_encode(m); bind_nusat_decoder(m); bind_pdu_add_meta(m); bind_pdu_head_tail(m); bind_pdu_length_filter(m); bind_u482c_decode(m); bind_varlen_packet_framer(m); bind_varlen_packet_tagger(m); bind_viterbi_decoder(m); // ) END BINDING_FUNCTION_CALLS } gr-satellites-4.4.0/python/bindings/u482c_decode_python.cc000066400000000000000000000031221414055407700235010ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ /***********************************************************************************/ /* This file is automatically generated using bindtool and can be manually edited */ /* The following lines can be configured to regenerate this file during cmake */ /* If manual edits are made, the following tags should be modified accordingly. */ /* BINDTOOL_GEN_AUTOMATIC(0) */ /* BINDTOOL_USE_PYGCCXML(0) */ /* BINDTOOL_HEADER_FILE(u482c_decode.h) */ /* BINDTOOL_HEADER_FILE_HASH(0be7889ffa99c1ff24f997fa4119bc5b) */ /***********************************************************************************/ #include #include #include namespace py = pybind11; #include // pydoc.h is automatically generated in the build directory #include void bind_u482c_decode(py::module& m) { using u482c_decode = ::gr::satellites::u482c_decode; py::class_>( m, "u482c_decode", D(u482c_decode)) .def(py::init(&u482c_decode::make), py::arg("verbose"), py::arg("viterbi"), py::arg("scrambler"), py::arg("rs"), D(u482c_decode, make)) ; } gr-satellites-4.4.0/python/bindings/varlen_packet_framer_python.cc000066400000000000000000000034271414055407700255130ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ /***********************************************************************************/ /* This file is automatically generated using bindtool and can be manually edited */ /* The following lines can be configured to regenerate this file during cmake */ /* If manual edits are made, the following tags should be modified accordingly. */ /* BINDTOOL_GEN_AUTOMATIC(0) */ /* BINDTOOL_USE_PYGCCXML(0) */ /* BINDTOOL_HEADER_FILE(varlen_packet_framer.h) */ /* BINDTOOL_HEADER_FILE_HASH(f953ce0ebc0525c7b2f5d0c81a12950c) */ /***********************************************************************************/ #include #include #include namespace py = pybind11; #include // pydoc.h is automatically generated in the build directory #include void bind_varlen_packet_framer(py::module& m) { using varlen_packet_framer = ::gr::satellites::varlen_packet_framer; py::class_>( m, "varlen_packet_framer", D(varlen_packet_framer)) .def(py::init(&varlen_packet_framer::make), py::arg("packet_key"), py::arg("length_field_size"), py::arg("endianness"), py::arg("use_golay"), py::arg("sync_word"), D(varlen_packet_framer, make)) ; } gr-satellites-4.4.0/python/bindings/varlen_packet_tagger_python.cc000066400000000000000000000034771414055407700255150ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ /***********************************************************************************/ /* This file is automatically generated using bindtool and can be manually edited */ /* The following lines can be configured to regenerate this file during cmake */ /* If manual edits are made, the following tags should be modified accordingly. */ /* BINDTOOL_GEN_AUTOMATIC(0) */ /* BINDTOOL_USE_PYGCCXML(0) */ /* BINDTOOL_HEADER_FILE(varlen_packet_tagger.h) */ /* BINDTOOL_HEADER_FILE_HASH(0ece53d0fe74c0301bf92e4ee6d6b39d) */ /***********************************************************************************/ #include #include #include namespace py = pybind11; #include // pydoc.h is automatically generated in the build directory #include void bind_varlen_packet_tagger(py::module& m) { using varlen_packet_tagger = ::gr::satellites::varlen_packet_tagger; py::class_>( m, "varlen_packet_tagger", D(varlen_packet_tagger)) .def(py::init(&varlen_packet_tagger::make), py::arg("sync_key"), py::arg("packet_key"), py::arg("length_field_size"), py::arg("max_packet_size"), py::arg("endianness"), py::arg("use_golay"), D(varlen_packet_tagger, make)) ; } gr-satellites-4.4.0/python/bindings/viterbi_decoder_python.cc000066400000000000000000000031421414055407700244640ustar00rootroot00000000000000/* * Copyright 2021 Free Software Foundation, Inc. * * This file is part of GNU Radio * * SPDX-License-Identifier: GPL-3.0-or-later * */ /***********************************************************************************/ /* This file is automatically generated using bindtool and can be manually edited */ /* The following lines can be configured to regenerate this file during cmake */ /* If manual edits are made, the following tags should be modified accordingly. */ /* BINDTOOL_GEN_AUTOMATIC(0) */ /* BINDTOOL_USE_PYGCCXML(0) */ /* BINDTOOL_HEADER_FILE(viterbi_decoder.h) */ /* BINDTOOL_HEADER_FILE_HASH(f90dc54ba31b621d6fe835d643cc9b20) */ /***********************************************************************************/ #include #include #include namespace py = pybind11; #include // pydoc.h is automatically generated in the build directory #include void bind_viterbi_decoder(py::module& m) { using viterbi_decoder = ::gr::satellites::viterbi_decoder; py::class_>(m, "viterbi_decoder", D(viterbi_decoder)) .def(py::init(&viterbi_decoder::make), py::arg("constraint"), py::arg("polynomials"), D(viterbi_decoder, make)) ; } gr-satellites-4.4.0/python/bme_submitter.py000066400000000000000000000053731414055407700210510ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # This contains code by Peter Horvath # (source: private communication) import json from gnuradio import gr import pmt import requests from requests.auth import HTTPBasicAuth class bme_submitter(gr.basic_block): """ Submits telemetry to https://gnd.bme.hu:8080/ """ def __init__(self, user, password, satellite): gr.basic_block.__init__( self, name='bme_submitter', in_sig=[], out_sig=[]) self.satellite = satellite self.authenticate(user, password) self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) def authenticate(self, user, password): self.auth_token = None rauth = requests.post( 'https://gnd.bme.hu:8080/api/tokens', auth=HTTPBasicAuth(user, password), timeout=10) if rauth.status_code == 200: # We hit the jackpot. # Let's use the token obtained in the authentication header. auth_resp = rauth.json() # The token is valid for 60 minutes. # After 45 a new one can be requested. self.auth_token = auth_resp['token'] elif rauth.status_code == 401: # Unauthorized (wrong credentials) print('Wrong credentials, have you registered at' 'https://gnd.bme.hu:8080/ ?') else: print(f'Authentication failed, error code = {rauth.status_code}') def putPacket(self, frame): if self.auth_token is None: print('Not uploading packet to BME, as we are not authenticated') return packets = [{'satellite': self.satellite, 'packet': frame.hex().upper()}] auth_header = {'Authorization': 'Bearer ' + self.auth_token} rpacket = requests.post( 'https://gnd.bme.hu:8080/api/packets/bulk', json={'packets': packets}, headers=auth_header, timeout=10) packet_resp = rpacket.json() if rpacket.status_code == 200: uploaded_packets = packet_resp["results"] for p in uploaded_packets: if 'error' in p: print('Checksum error') else: print('Packet upload failed, token might have expired!') def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return frame = bytes(pmt.u8vector_elements(msg)) self.putPacket(frame) gr-satellites-4.4.0/python/build_utils.py000066400000000000000000000162601414055407700205240ustar00rootroot00000000000000# # Copyright 2004,2009,2012 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # """Misc utilities used at build time """ import re import os import os.path from .build_utils_codes import * # set srcdir to the directory that contains Makefile.am try: srcdir = os.environ['srcdir'] except KeyError as e: srcdir = "." srcdir = srcdir + '/' # set do_makefile to either true or false dependeing on the environment try: if os.environ['do_makefile'] == '0': do_makefile = False else: do_makefile = True except KeyError as e: do_makefile = False # set do_sources to either true or false dependeing on the environment try: if os.environ['do_sources'] == '0': do_sources = False else: do_sources = True except KeyError as e: do_sources = True name_dict = {} def log_output_name(name): (base, ext) = os.path.splitext(name) ext = ext[1:] # drop the leading '.' entry = name_dict.setdefault(ext, []) entry.append(name) def open_and_log_name(name, dir): global do_sources if do_sources: f = open(name, dir) else: f = None log_output_name(name) return f def expand_template(d, template_filename, extra=''): """Given a dictionary D and a TEMPLATE_FILENAME, expand template into output file""" global do_sources output_extension = extract_extension(template_filename) template = open_src(template_filename, 'r') output_name = d['NAME'] + extra + '.' + output_extension log_output_name(output_name) if do_sources: output = open(output_name, 'w') do_substitution(d, template, output) output.close() template.close() def output_glue(dirname): output_makefile_fragment() output_ifile_include(dirname) def output_makefile_fragment(): global do_makefile if not do_makefile: return # Overwrite the source, which must be writable. This should have been # checked for beforehand in the top-level Makefile.gen.gen . f = open( os.path.join( os.environ.get('gendir', os.environ.get('srcdir', '.')), 'Makefile.gen'), 'w') f.write('#\n# This file is machine generated. ' ' All edits will be overwritten\n#\n') output_subfrag(f, 'h') output_subfrag(f, 'i') output_subfrag(f, 'cc') f.close() def output_ifile_include(dirname): global do_sources if do_sources: f = open('%s_generated.i' % (dirname,), 'w') f.write('//\n// This file is machine generated. ' 'All edits will be overwritten\n//\n') files = name_dict.setdefault('i', []) files.sort() f.write('%{\n') for file in files: f.write('#include <%s>\n' % (file[0:-1] + 'h',)) f.write('%}\n\n') for file in files: f.write('%%include <%s>\n' % (file,)) def output_subfrag(f, ext): files = name_dict.setdefault(ext, []) files.sort() f.write('GENERATED_%s =' % ext.upper()) for file in files: f.write(' \\\n\t%s' % (file,)) f.write('\n\n') def extract_extension(template_name): # template name is something like: GrFIRfilterXXX.h.t # we return everything between the penultimate . and .t mo = re.search(r'\.([a-z]+)\.t$', template_name) if not mo: raise ValueError( "Incorrectly formed template_name '%s'" % (template_name,)) return mo.group(1) def open_src(name, mode): global srcdir return open(os.path.join(srcdir, name), mode) def do_substitution(d, in_file, out_file): def repl(match_obj): key = match_obj.group(1) # print key return d[key] inp = in_file.read() out = re.sub(r'@([a-zA-Z0-9_]+)@', repl, inp) out_file.write(out) copyright = '''/* -*- c++ -*- */ /* * Copyright 2003,2004 Free Software Foundation, Inc. * * This file is part of GNU Radio * * GNU Radio is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * GNU Radio is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNU Radio; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, * Boston, MA 02110-1301, USA. */ ''' def is_complex(code3): if i_code(code3) == 'c' or o_code(code3) == 'c': return '1' else: return '0' def standard_dict(name, code3, package='gr'): d = {} d['NAME'] = name d['NAME_IMPL'] = name+'_impl' d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper()) d['GUARD_NAME_IMPL'] = ( 'INCLUDED_%s_%s_IMPL_H' % (package.upper(), name.upper())) d['BASE_NAME'] = re.sub('^' + package + '_', '', name) d['SPTR_NAME'] = '%s_sptr' % name d['WARNING'] = ( 'WARNING: this file is machine generated. Edits will be overwritten') d['COPYRIGHT'] = copyright d['TYPE'] = i_type(code3) d['I_TYPE'] = i_type(code3) d['O_TYPE'] = o_type(code3) d['TAP_TYPE'] = tap_type(code3) d['IS_COMPLEX'] = is_complex(code3) return d def standard_dict2(name, code3, package): d = {} d['NAME'] = name d['BASE_NAME'] = name d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper()) d['WARNING'] = ( 'WARNING: this file is machine generated. Edits will be overwritten') d['COPYRIGHT'] = copyright d['TYPE'] = i_type(code3) d['I_TYPE'] = i_type(code3) d['O_TYPE'] = o_type(code3) d['TAP_TYPE'] = tap_type(code3) d['IS_COMPLEX'] = is_complex(code3) return d def standard_impl_dict2(name, code3, package): d = {} d['NAME'] = name d['IMPL_NAME'] = name d['BASE_NAME'] = name.rstrip("impl").rstrip("_") d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper()) d['WARNING'] = ( 'WARNING: this file is machine generated. Edits will be overwritten') d['COPYRIGHT'] = copyright d['FIR_TYPE'] = "fir_filter_" + code3 d['CFIR_TYPE'] = "fir_filter_" + code3[0:2] + 'c' d['TYPE'] = i_type(code3) d['I_TYPE'] = i_type(code3) d['O_TYPE'] = o_type(code3) d['TAP_TYPE'] = tap_type(code3) d['IS_COMPLEX'] = is_complex(code3) return d gr-satellites-4.4.0/python/build_utils_codes.py000066400000000000000000000025511414055407700216770ustar00rootroot00000000000000# # Copyright 2004 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # def i_code(code3): return code3[0] def o_code(code3): if len(code3) >= 2: return code3[1] else: return code3[0] def tap_code(code3): if len(code3) >= 3: return code3[2] else: return code3[0] def i_type(code3): return char_to_type[i_code(code3)] def o_type(code3): return char_to_type[o_code(code3)] def tap_type(code3): return char_to_type[tap_code(code3)] char_to_type = {} char_to_type['s'] = 'short' char_to_type['i'] = 'int' char_to_type['f'] = 'float' char_to_type['c'] = 'gr_complex' char_to_type['b'] = 'unsigned char' gr-satellites-4.4.0/python/cc11xx_packet_crop.py000066400000000000000000000023021414055407700216560ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2018 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr import numpy import pmt class cc11xx_packet_crop(gr.basic_block): """docstring for block cc11xx_packet_crop""" def __init__(self, use_crc16): gr.basic_block.__init__( self, name='cc11xx_packet_handler', in_sig=[], out_sig=[]) self.crc16 = use_crc16 self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('out')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = pmt.u8vector_elements(msg) crc_len = 2 if self.crc16 else 0 packet_length = packet[0] + 1 + crc_len self.message_port_pub( pmt.intern('out'), pmt.cons(pmt.car(msg_pmt), pmt.init_u8vector(packet_length, packet))) gr-satellites-4.4.0/python/ccsds/000077500000000000000000000000001414055407700167255ustar00rootroot00000000000000gr-satellites-4.4.0/python/ccsds/CMakeLists.txt000066400000000000000000000040371414055407700214710ustar00rootroot00000000000000# Copyright 2011 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. ######################################################################## # Include python install macros ######################################################################## include(GrPython) if(NOT PYTHONINTERP_FOUND) return() endif() ######################################################################## # Install python sources ######################################################################## GR_PYTHON_INSTALL( FILES __init__.py pathID_demultiplexer.py space_packet.py space_packet_parser.py space_packet_primaryheader_adder.py space_packet_time_stamp_adder.py telecommand.py telecommand_parser.py telecommand_primaryheader_adder.py telemetry.py telemetry_ocf_adder.py telemetry_packet_reconstruction.py telemetry_parser.py telemetry_primaryheader_adder.py virtual_channel_demultiplexer.py DESTINATION ${GR_PYTHON_DIR}/satellites/ccsds ) ######################################################################## # Handle the unit tests ######################################################################## include(GrTest) set(GR_TEST_TARGET_DEPS gnuradio-satellites) set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig) gr-satellites-4.4.0/python/ccsds/__init__.py000066400000000000000000000022171414055407700210400ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Athanasios Theocharis # This was made under ESA Summer of Code in Space 2019 # by Athanasios Theocharis, mentored by Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # ''' gr-satellites ccsds This module contains construct definitions and GNU Radio blocks to handle CCSDS Space DataLink frames and SpacePackets ''' from .pathID_demultiplexer import pathID_demultiplexer from .space_packet_parser import space_packet_parser from .space_packet_primaryheader_adder import space_packet_primaryheader_adder from .space_packet_time_stamp_adder import space_packet_time_stamp_adder from .telecommand_parser import telecommand_parser from .telecommand_primaryheader_adder import telecommand_primaryheader_adder from .telemetry_ocf_adder import telemetry_ocf_adder from .telemetry_packet_reconstruction import telemetry_packet_reconstruction from .telemetry_parser import telemetry_parser from .telemetry_primaryheader_adder import telemetry_primaryheader_adder from .virtual_channel_demultiplexer import virtual_channel_demultiplexer gr-satellites-4.4.0/python/ccsds/pathID_demultiplexer.py000066400000000000000000000034351414055407700234200ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Athanasios Theocharis # This was made under ESA Summer of Code in Space 2019 # by Athanasios Theocharis, mentored by Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import numpy from gnuradio import gr import pmt from . import space_packet class pathID_demultiplexer(gr.basic_block): """ docstring for block pathID_demultiplexer """ def __init__(self, pathID_outputs): gr.basic_block.__init__(self, name="pathID_demultiplexer", in_sig=[], out_sig=[]) self.pathID_outputs = pathID_outputs self.message_port_register_in(pmt.intern('in')) self.outputDict = {} for i in range(len(pathID_outputs)): self.outputDict[pathID_outputs[i]] = i self.message_port_register_out(pmt.intern('out'+str(i))) self.message_port_register_out(pmt.intern('discarded')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print("[ERROR] Received invalid message type. Expected u8vector") return packet = bytearray(pmt.u8vector_elements(msg)) try: data = space_packet.PrimaryHeader.parse(packet[:]) except: print("Could not decode space packet primary header") return outPort = data.AP_ID try: port = self.outputDict[outPort] except KeyError: self.message_port_pub(pmt.intern('discarded'), msg_pmt) print("Discarded message") else: self.message_port_pub(pmt.intern('out' + str(port)), msg_pmt) gr-satellites-4.4.0/python/ccsds/space_packet.py000066400000000000000000000275611414055407700217340ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Athanasios Theocharis # This was made under ESA Summer of Code in Space 2019 # by Athanasios Theocharis, mentored by Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # ''' Construct for the CCSDS Space Packet ( CCSDS 133.0-B-1 ) The User, in case of utilizing the secondary header, should be careful and define the sizes of the payload. After choosing which time format will be used, the User should check the sizes of the secondary header construct, as well as the payload variable size of the FullPacket[TimeCodeFormat]. ''' from construct import * PrimaryHeader = BitStruct('ccsds_version' / BitsInteger(3), 'packet_type' / BitsInteger(1), 'secondary_header_flag' / Flag, 'AP_ID' / BitsInteger(11), 'sequence_flags' / BitsInteger(2), 'packet_sequence_count_or_name' / BitsInteger(14), 'data_length' / BitsInteger(16)) ######################################### ## CUC related structs ######################################### PFieldCUC = BitStruct('pfield_extension' / Flag, 'time_code_identification' / BitsInteger(3), 'number_of_basic_time_unit_octets' / BitsInteger(2), 'number_of_fractional_time_unit_octets' / BitsInteger(2)) PFieldCUCExtension = BitStruct('pfieldextension' / Flag, 'number_of_additional_basic_time_unit_octets' / BitsInteger(2), 'number_of_additional_fractional_time_unit_octets' / BitsInteger(3), 'reserved_for_mission_definition' / BitsInteger(2)) TimeCodeCUCWithPField = Struct('pfield' / PFieldCUC, 'pfield_extended' / If(this.pfield.pfield_extension == 1, PFieldCUCExtension), 'basic_time_unit' / IfThenElse(this.pfield.pfield_extension == 0, BytesInteger( this.pfield.number_of_basic_time_unit_octets + 1), BytesInteger( this.pfield.number_of_basic_time_unit_octets + 1 + this.pfield_extended.number_of_additional_basic_time_unit_octets)), 'fractional_time_unit' / IfThenElse(this.pfield.pfield_extension == 0, BytesInteger( this.pfield.number_of_fractional_time_unit_octets), BytesInteger( this.pfield.number_of_fractional_time_unit_octets + this.pfield_extended.number_of_additional_fractional_time_unit_octets))) FullPacketCUCWithPField = Struct('primary' / PrimaryHeader, 'timestamp' / TimeCodeCUCWithPField, 'payload' / IfThenElse(this.timestamp.pfield.pfield_extension == 0, Byte[ this.primary.data_length - 2 - this.timestamp.pfield.number_of_basic_time_unit_octets - this.timestamp.pfield.number_of_fractional_time_unit_octets], Byte[ this.primary.data_length - 3 - this.timestamp.pfield.number_of_basic_time_unit_octets - this.timestamp.pfield.number_of_fractional_time_unit_octets - this.timestamp.pfield_extended.number_of_additional_basic_time_unit_octets - this.timestamp.pfield_extended.number_of_additional_fractional_time_unit_octets])) TimeCodeCUCNoPField = Struct('basic_time_unit' / BytesInteger(this._._.num_of_basic_time_units), 'fractional_time_unit' / BytesInteger(this._._.num_of_fractional_time_units)) FullPacketCUCNoPField = Struct('primary' / PrimaryHeader, 'timestamp' / TimeCodeCUCNoPField, 'payload' / Byte[this.primary.data_length - this._.num_of_basic_time_units - this._.num_of_fractional_time_units]) ######################################### ## CDS related structs ######################################### PFieldCDS = BitStruct('pfield_extension' / Flag, 'time_code_identification' / BitsInteger(3), 'epoch_identification' / BitsInteger(1), 'length_of_day_segment' / BitsInteger(1), 'length_of_submillisecond_segment' / BitsInteger(2)) TimeCodeCDSWithPField = Struct('pfield' / PFieldCDS, 'days' / BytesInteger(2 + this.pfield.length_of_day_segment), 'ms_of_day' / BytesInteger(4), 'submilliseconds_of_ms' / BytesInteger(2 * this.pfield.length_of_submillisecond_segment)) FullPacketCDSWithPField = Struct('primary' / PrimaryHeader, 'timestamp' / TimeCodeCDSWithPField, 'payload' / Byte[ this.primary.data_length - 7 - this.timestamp.pfield.length_of_day_segment - 2 * this.timestamp.pfield.length_of_submillisecond_segment]) TimeCodeCDSNoPField = Struct('days' / BytesInteger(2 + this._._.length_of_day_segment), 'ms_of_day' / BytesInteger(4), 'submilliseconds_of_ms' / BytesInteger(2 * this._._.length_of_submillisecond_segment)) FullPacketCDSNoPField = Struct('primary' / PrimaryHeader, 'timestamp' / TimeCodeCDSNoPField, 'payload' / Byte[ this.primary.data_length - 6 - this._._.length_of_day_segment - 2 * this._._.length_of_submillisecond_segment]) ######################################### ## CCS related structs ######################################### PFieldCCS = BitStruct('pfield_extension' / Flag, 'time_code_identification' / BitsInteger(3), 'calendar_variation_flag' / Flag, 'resolution' / BitsInteger(3)) TimeCodeCCSWithPField = Struct('pfield' / PFieldCCS, 'year' / BytesInteger(2), 'month' / If(this.pfield.calendar_variation_flag == 0, BytesInteger(1)), 'dayOfMonth' / If(this.pfield.calendar_variation_flag == 0, BytesInteger(1)), 'dayOfYear' / If(this.pfield.calendar_variation_flag == 1, BytesInteger(1)), 'hour' / BytesInteger(1), 'minute' / BytesInteger(1), 'second' / BytesInteger(1), 'subseconds' / Byte[this.pfield.resolution]) FullPacketCCSWithPField = Struct('primary' / PrimaryHeader, 'timestamp' / TimeCodeCCSWithPField, 'payload' / Byte[this.primary.data_length - 8 - this.timestamp.pfield.resolution]) TimeCodeCCSNoPField = Struct('year' / BytesInteger(2), 'month' / If(this._._.calendar_variation_flag == 0, BytesInteger(1)), 'dayOfMonth' / If(this._._.calendar_variation_flag == 0, BytesInteger(1)), 'dayOfYear' / If(this._._.calendar_variation_flag == 1, BytesInteger(2)), 'hour' / BytesInteger(1), 'minute' / BytesInteger(1), 'second' / BytesInteger(1), 'subseconds' / Byte[this._._.resolution]) FullPacketCCSNoPField = Struct('primary' / PrimaryHeader, 'timestamp' / TimeCodeCCSNoPField, 'payload' / Byte[this.primary.data_length - 7 - this._.resolution]) ######################################### ## ASCII A (Month - Day Format) related structs ######################################### TimeCodeASCIIA = Struct('yearChar1' / BytesInteger(1), 'yearChar2' / BytesInteger(1), 'yearChar3' / BytesInteger(1), 'yearChar4' / BytesInteger(1), 'hyphen1' / BytesInteger(1), 'monthChar1' / BytesInteger(1), 'monthChar2' / BytesInteger(1), 'hyphen2' / BytesInteger(1), 'dayChar1' / BytesInteger(1), 'dayChar2' / BytesInteger(1), 'calendar_time_separator' / BytesInteger(1), 'hourChar1' / BytesInteger(1), 'hourChar2' / BytesInteger(1), 'colon1' / BytesInteger(1), 'minuteChar1' / BytesInteger(1), 'minuteChar2' / BytesInteger(1), 'colon2' / BytesInteger(1), 'secondChar1' / BytesInteger(1), 'secondChar2' / BytesInteger(1), 'dot' / BytesInteger(1), 'decimal_fraction_of_second' / Byte[this._._.number_of_decimals], 'time_code_terminator' / If(this._._.add_Z == 1, BytesInteger(1))) FullPacketASCIIA = Struct('primary' / PrimaryHeader, 'timestamp' / TimeCodeASCIIA, 'payload' / Byte[this.primary.data_length - 20 - this._.number_of_decimals - this._.add_Z]) ######################################### ## ASCII B (Day of the year Format) related structs ######################################### TimeCodeASCIIB = Struct('yearChar1' / BytesInteger(1), 'yearChar2' / BytesInteger(1), 'yearChar3' / BytesInteger(1), 'yearChar4' / BytesInteger(1), 'hyphen1' / BytesInteger(1), 'dayChar1' / BytesInteger(1), 'dayChar2' / BytesInteger(1), 'dayChar3' / BytesInteger(1), 'calendar_time_separator' / BytesInteger(1), 'hourChar1' / BytesInteger(1), 'hourChar2' / BytesInteger(1), 'colon1' / BytesInteger(1), 'minuteChar1' / BytesInteger(1), 'minuteChar2' / BytesInteger(1), 'colon2' / BytesInteger(1), 'secondChar1' / BytesInteger(1), 'secondChar2' / BytesInteger(1), 'dot' / BytesInteger(1), 'decimal_fraction_of_second' / Byte[this._._.number_of_decimals], 'time_code_terminator' / If(1 == this._._.add_Z, BytesInteger(1))) FullPacketASCIIB = Struct('primary' / PrimaryHeader, 'timestamp' / TimeCodeASCIIB, 'payload' / Byte[ this.primary.data_length - 18 - this._.number_of_decimals - this._.add_Z]) ######################################### ## No Time Stamps ######################################### FullPacketNoTimeStamp = Struct('primary' / PrimaryHeader, 'payload' / Byte[this.primary.data_length]) gr-satellites-4.4.0/python/ccsds/space_packet_parser.py000066400000000000000000000107141414055407700233000ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Athanasios Theocharis # This was made under ESA Summer of Code in Space 2019 # by Athanasios Theocharis, mentored by Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import numpy from gnuradio import gr import pmt from . import space_packet class space_packet_parser(gr.basic_block): """ """ def __init__(self, time_header, time_format, pfield, id_time): gr.basic_block.__init__(self, name="Space Packet Parser", in_sig=[], out_sig=[]) self.time_header = time_header self.time_format = time_format if time_header == 0 else 0 self.pfield = pfield if time_header == 0 else 0 self.basic_time_num_octets_cuc = id_time.basic_time_num_octets_cuc if time_header == 0 else 0 self.fractional_time_num_octets_cuc = id_time.fractional_time_num_octets_cuc if time_header == 0 else 0 self.additional_octets_basic_time_cuc = id_time.additional_basic_time_num_octets_cuc if time_header == 0 else 0 self.additional_octets_fractional_time_cuc = id_time.additional_fractional_time_num_octets_cuc if time_header == 0 else 0 self.length_of_day_cds = id_time.len_of_day if time_header == 0 else 0 self.length_of_submillisecond_cds = id_time.len_of_submilsecs if time_header == 0 else 0 self.calendar_variation_ccs = id_time.calendar_variation if time_header == 0 else 0 self.number_of_subsecond_ccs = id_time.num_of_subsecs if time_header == 0 else 0 self.add_z_terminator = id_time.add_z if time_header == 0 else 0 self.ascii_dec_num = id_time.ascii_dec if time_header == 0 else 0 self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print("[ERROR] Received invalid message type. Expected u8vector") return packet = bytearray(pmt.u8vector_elements(msg)) if self.pfield == 1: packet_formats = [space_packet.FullPacketCUCWithPField, space_packet.FullPacketCDSWithPField, space_packet.FullPacketCCSWithPField] else: packet_formats = [space_packet.FullPacketCUCNoPField, space_packet.FullPacketCDSNoPField, space_packet.FullPacketCCSNoPField] packet_formats.extend([space_packet.FullPacketASCIIA, space_packet.FullPacketASCIIB, space_packet.FullPacketNoTimeStamp]) try: if self.time_header == 0: try: packet_format = packet_formats[self.time_format] except IndexError: print("Time Format Unknown") return else: packet_format = packet_formats[5] if self.pfield == 0 and self.time_format <= 2 and self.time_header == 0: if self.time_format == 0: data = packet_format.parse(packet[:], num_of_basic_time_units = 1+ self.basic_time_num_octets_cuc + self.additional_octets_basic_time_cuc, num_of_fractional_time_units = self.fractional_time_num_octets_cuc + self.additional_octets_fractional_time_cuc) elif self.time_format == 1: data = packet_format.parse(packet[:], length_of_day_segment = self.length_of_day_cds, length_of_submillisecond_segment = self.length_of_submillisecond_cds) else: data = packet_format.parse(packet[:], calendar_variation_flag = self.calendar_variation_ccs, resolution = self.number_of_subsecond_ccs) else: if self.time_header == 0 and self.time_format > 2: if self.ascii_dec_num < 0 or self.ascii_dec_num > 6: print() "Decimals of ASCII in Space Packet Parser block should be between 0 and 6. The number was automatically set to 1." self.ascii_dec_num = 1 data = packet_format.parse(packet[:], number_of_decimals=self.ascii_dec_num, add_Z=self.add_z_terminator) else: data = packet_format.parse(packet[:]) except: print("Could not decode space packet") return print(data) gr-satellites-4.4.0/python/ccsds/space_packet_primaryheader_adder.py000066400000000000000000000057321414055407700260030ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Athanasios Theocharis # This was made under ESA Summer of Code in Space 2019 # by Athanasios Theocharis, mentored by Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import numpy from gnuradio import gr import pmt from . import space_packet import array class space_packet_primaryheader_adder(gr.basic_block): """ docstring for block space_packet_primaryheader_adder """ def __init__(self, packet_type, secondary_header_flag, AP_ID, count_or_name, packet_sequence_name): gr.basic_block.__init__(self, name="space_packet_primaryheader_adder", in_sig=[], out_sig=[]) ################################################## # Parameters ################################################## self.ccsds_version = 0 self.packet_type = packet_type self.secondary_header_flag = secondary_header_flag self.AP_ID = AP_ID self.sequence_flags = 3 self.packet_sequence_count = 0 self.packet_sequence_name = packet_sequence_name self.count_or_name = count_or_name self.data_length = 0 ################################################## # Blocks ################################################## self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('out')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print("[ERROR] Received invalid message type. Expected u8vector") return packet = pmt.u8vector_elements(msg) self.data_length = len(packet) self.packet_sequence_count += 1 count_or_name = self.packet_sequence_count if self.packet_type == 0 or self.count_or_name == 0 else self.packet_sequence_name finalHeader = array.array('B', space_packet.PrimaryHeader.build(dict(ccsds_version = self.ccsds_version, packet_type = self.packet_type, secondary_header_flag = self.secondary_header_flag, AP_ID = self.AP_ID, sequence_flags = self.sequence_flags, packet_sequence_count_or_name = count_or_name, data_length = self.data_length))).tolist() finalPacket = numpy.append(finalHeader, packet) finalPacket = array.array('B', finalPacket[:]) finalPacket = pmt.cons(pmt.PMT_NIL, pmt.init_u8vector(len(finalPacket), finalPacket)) self.message_port_pub(pmt.intern('out'), finalPacket) gr-satellites-4.4.0/python/ccsds/space_packet_time_stamp_adder.py000066400000000000000000000276061414055407700253150ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Athanasios Theocharis # This was made under ESA Summer of Code in Space 2019 # by Athanasios Theocharis, mentored by Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import numpy from gnuradio import gr from datetime import datetime from datetime import timedelta import construct import pmt import array from . import space_packet class space_packet_time_stamp_adder(gr.basic_block): """ Time Stamp Adder (CCSDS 301.0-B-4) --- The user should study the time code formats book and fill only the necessary fields. --- The user, in general, should check the code of the preferred time format and confirm that the behavior is the wanted one. Great care should be taken on the variability of the size. (E.g. in ASCII A time format, the user should define the size of the decimal fraction of the second subfield and should change the finalHeader array.) --- Automated time only prints a timestamp down to microseconds --- When defining an epoch, the user should check that it fits into the bytes that were assigned to hold the difference. E.g. If the epoch "0001 January 1" is defined in CDS, then it will not be able to fit today's date into a 16-bit DAYS part. """ def __init__(self, input_manual_automatic, time_format, pfield, pfield_extension, time_code_identification_cuc, epoch_year_cuc, epoch_month_cuc, epoch_day_cuc, pfield_extension_extended,rsvd_cuc, time_code_identification_cds, epoch_identification_cds, epoch_year_cds, epoch_month_cds, epoch_day_cds, time_code_identification_ccs, year, month, day, hour, minute, second, microsecond, picosecond, id_time): gr.basic_block.__init__(self, name="space_packet_time_stamp_adder", in_sig=[], out_sig=[]) ################################################## # Parameters ################################################## self.input_manual_automatic = input_manual_automatic self.time_format = time_format self.pfield = pfield #Checks if the P-Field will be used self.pfield_extension = pfield_extension #Checks if the PField will be extended self.time_code_identification_cuc = time_code_identification_cuc self.epoch_year_cuc = epoch_year_cuc self.epoch_month_cuc = epoch_month_cuc self.epoch_day_cuc = epoch_day_cuc self.basic_time_num_octets_cuc = id_time.basic_time_num_octets_cuc self.fractional_time_num_octets_cuc = id_time.fractional_time_num_octets_cuc self.pfield_extension_extended = pfield_extension_extended #Checks if the PField Extension will be extended self.additional_octets_basic_time_cuc = id_time.additional_basic_time_num_octets_cuc self.additional_octets_fractional_time_cuc = id_time.additional_fractional_time_num_octets_cuc self.rsvd_cuc = rsvd_cuc self.time_code_identification_cds = time_code_identification_cds self.epoch_identification_cds = epoch_identification_cds self.epoch_year_cds = epoch_year_cds self.epoch_month_cds = epoch_month_cds self.epoch_day_cds = epoch_day_cds self.length_of_day_cds = id_time.len_of_day self.length_of_submillisecond_cds = id_time.len_of_submilsecs self.time_code_identification_ccs = time_code_identification_ccs self.calendar_variation_ccs = id_time.calendar_variation self.number_of_subsecond_ccs = id_time.num_of_subsecs self.add_z_terminator = id_time.add_z self.ascii_dec_num = id_time.ascii_dec self.year = year self.month = month self.day = day self.hour = hour self.minute = minute self.second = second self.microsecond = microsecond self.picosecond = picosecond self.id_time = id_time if self.time_code_identification_cuc == 1: self.epoch_cuc = datetime(1958, 1, 1) else: self.epoch_cuc = datetime(self.epoch_year_cuc, self.epoch_month_cuc, self.epoch_day_cuc) if self.epoch_identification_cds == 0: self.epoch_cds = datetime(1958, 1, 1) else: self.epoch_cds = datetime(self.epoch_year_cds, self.epoch_month_cds, self.epoch_day_cds) ################################################## # Blocks ################################################## self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('out')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print() "[ERROR] Received invalid message type. Expected u8vector" return packet = pmt.u8vector_elements(msg) if self.input_manual_automatic == 1: self.now = datetime.utcnow() if self.length_of_submillisecond_cds >= 2: self.length_of_submillisecond_cds = 1 if self.number_of_subsecond_ccs >= 4: self.length_of_susecond_ccs = 3 else: self.now = datetime(self.year, self.month, self.day, self.hour, self.minute, self.second, self.microsecond) finalHeader = [] if self.time_format == 0: #CUC basic_time = 1 + self.basic_time_num_octets_cuc fractional_time = self.fractional_time_num_octets_cuc if self.pfield == 1: #If it exists finalHeader.extend(array.array('B', space_packet.PFieldCUC.build( dict(pfield_extension=self.pfield_extension, time_code_identification=self.time_code_identification_cuc, number_of_basic_time_unit_octets=self.basic_time_num_octets_cuc, number_of_fractional_time_unit_octets=self.fractional_time_num_octets_cuc))).tolist()) if self.pfield_extension == 1: #If it is extended basic_time += self.additional_octets_basic_time_cuc fractional_time +=self.additional_octets_fractional_time_cuc finalHeader.extend(array.array('B', space_packet.PFieldCUCExtension.build( dict(pfieldextension=self.pfield_extension_extended, number_of_additional_basic_time_unit_octets=self.additional_octets_basic_time_cuc, number_of_additional_fractional_time_unit_octets=self.additional_octets_fractional_time_cuc, reserved_for_mission_definition=self.rsvd_cuc))).tolist()) temp_diff = self.now - self.epoch_cuc total_basic = int(temp_diff.total_seconds()) total_frac = int((temp_diff.total_seconds() - total_basic)*(256**fractional_time)) finalHeader.extend(array.array('B', construct.BytesInteger(basic_time).build(total_basic)).tolist()) finalHeader.extend(array.array('B', construct.BytesInteger(fractional_time).build(total_frac)).tolist()) elif self.time_format == 1: #CDS if self.pfield == 1: finalHeader.extend(array.array('B', space_packet.PFieldCDS.build(dict(pfield_extension = self.pfield_extension, time_code_identification = self.time_code_identification_cds, epoch_identification = self.epoch_identification_cds, length_of_day_segment = self.length_of_day_cds, length_of_submillisecond_segment = self.length_of_submillisecond_cds))).tolist()) days_len = 2 if self.length_of_day_cds == 0 else 3 finalHeader.extend( array.array('B', construct.BytesInteger(days_len).build((self.now - self.epoch_cds).days)).tolist()) finalHeader.extend(array.array('B', construct.Int32ub.build(self.now.microsecond/1000)).tolist()) if self.length_of_submillisecond_cds == 1: finalHeader.extend(array.array('B', construct.Int16ub.build(self.now.microsecond % 1000)).tolist()) elif self.length_of_submillisecond_cds == 2: finalHeader.extend(array.array('B', construct.Int32ub.build(self.picosecond)).tolist()) elif self.time_format == 2: #CCS if self.pfield == 1: finalHeader.extend(array.array('B', space_packet.PFieldCCS.build(dict(pfield_extension = self.pfield_extension, time_code_identification = self.time_code_identification_ccs, calendar_variation_flag = self.calendar_variation_ccs, resolution=self.number_of_subsecond_ccs))).tolist()) finalHeader.extend(array.array('B', construct.Int16ub.build(self.now.year)).tolist()) if self.calendar_variation_ccs == 0: finalHeader.extend(array.array('B', construct.Int8ub.build(self.now.month)).tolist()) finalHeader.extend(array.array('B', construct.Int8ub.build(self.now.day)).tolist()) else: finalHeader.extend(array.array('B', construct.Int16ub.build(self.now.timetuple().tm_yday)).tolist()) finalHeader.extend(array.array('B', construct.Int8ub.build(self.now.hour)).tolist()) finalHeader.extend(array.array('B', construct.Int8ub.build(self.now.minute)).tolist()) finalHeader.extend(array.array('B', construct.Int8ub.build(self.now.second)).tolist()) if self.number_of_subsecond_ccs >= 1: finalHeader.extend(array.array('B', construct.Int8ub.build(self.now.microsecond / 10 ** 4)).tolist()) if self.number_of_subsecond_ccs >= 2: finalHeader.extend( array.array('B', construct.Int8ub.build((self.now.microsecond / 10 ** 2) % 10 ** 2)).tolist()) if self.number_of_subsecond_ccs >= 3: finalHeader.extend(array.array('B', construct.Int8ub.build(self.now.microsecond % 10 ** 2)).tolist()) if self.number_of_subsecond_ccs >= 4: finalHeader.extend( array.array('B', construct.Int8ub.build((self.picosecond % 10 ** 6) / 10 ** 4)).tolist()) if self.number_of_subsecond_ccs >= 5: finalHeader.extend( array.array('B', construct.Int8ub.build((self.picosecond % 10 ** 4) / 10 ** 2)).tolist()) if self.number_of_subsecond_ccs >= 6: finalHeader.extend(array.array('B', construct.Int8ub.build(self.picosecond % 10 ** 2)).tolist()) elif self.time_format == 3 or self.time_format == 4: if(self.ascii_dec_num < 0 or self.ascii_dec_num > 6): print("Decimals of ASCII in Time Stamp Adder block should be between 0 and 6. The number was automatically set to 1.") self.ascii_dec_num = 1 if self.time_format == 3: # ASCII A arr = self.now.isoformat() else: #ASCII B arr = self.now.strftime("%Y-%jT%H:%M:%S.%f") arr = arr[: -(6 - self.ascii_dec_num)] if (self.add_z_terminator == 1): arr += 'Z' finalHeader= array.array('B', arr).tolist() else: print("Time Format Unknown") finalPacket = numpy.append(finalHeader, packet) finalPacket = array.array('B', finalPacket[:]) finalPacket = pmt.cons(pmt.PMT_NIL, pmt.init_u8vector(len(finalPacket), finalPacket)) self.message_port_pub(pmt.intern('out'), finalPacket) gr-satellites-4.4.0/python/ccsds/telecommand.py000066400000000000000000000020161414055407700215660ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Athanasios Theocharis # This was made under ESA Summer of Code in Space 2019 # by Athanasios Theocharis, mentored by Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # ''' Construct for the Transfer Frame Primary Header of Fig the CCSDS TC Space Data Link Protocol ( CCSDS 232.0-B-3 ) ''' from construct import * PrimaryHeader = BitStruct('transfer_frame_version' / BitsInteger(2), 'bypass' / Flag, 'control' / Flag, 'RSVD_spare' / BitsInteger(2), 'spacecraft_id' / BitsInteger(10), 'virtual_channel_id' / BitsInteger(6), 'frame_length' / BitsInteger(10), 'frame_sequence_number' / BitsInteger(8)) FullPacket = Struct('primary' / PrimaryHeader, 'pyaload' / Byte[this.primary.frame_length - 5]) gr-satellites-4.4.0/python/ccsds/telecommand_parser.py000066400000000000000000000022561414055407700231500ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Athanasios Theocharis # This was made under ESA Summer of Code in Space 2019 # by Athanasios Theocharis, mentored by Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import numpy from gnuradio import gr import pmt from . import telecommand class telecommand_parser(gr.basic_block): """ docstring for block CCSDS telemetry_parser """ def __init__(self): gr.basic_block.__init__(self, name="telecommand_parser", in_sig=[], out_sig=[]) self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print("[ERROR] Received invalid message type. Expected u8vector") return packet = bytearray(pmt.u8vector_elements(msg)) try: data = telecommand.FullPacket.parse(packet[:]) except: print("Could not decode telecommand packet") return print(data) gr-satellites-4.4.0/python/ccsds/telecommand_primaryheader_adder.py000066400000000000000000000060201414055407700256400ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Athanasios Theocharis # This was made under ESA Summer of Code in Space 2019 # by Athanasios Theocharis, mentored by Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import numpy from gnuradio import gr import pmt from . import telecommand import array class telecommand_primaryheader_adder(gr.basic_block): """ docstring for block telecommand_primaryheader_adder """ def __init__(self, bypass, control, spacecraft_id, virtual_channel_id): gr.basic_block.__init__(self, name="telecommand_primaryheader_adder", in_sig=[], out_sig=[]) ################################################## # Parameters ################################################## self.transfer_frame_version = 0 self.bypass = bypass self.control = control self.RSVD_spare = 0 self.spacecraft_id = spacecraft_id self.virtual_channel_id = virtual_channel_id self.frame_length = 0 self.frame_sequence_number = 0 ################################################## # Blocks ################################################## self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('out')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print("[ERROR] Received invalid message type. Expected u8vector") return packet = pmt.u8vector_elements(msg) self.frame_length = len(packet) + 5 if self.bypass == 1: self.frame_sequence_number = 0 else: self.frame_sequence_number += 1 finalHeader = array.array('B', telecommand.PrimaryHeader.build(dict(transfer_frame_version = self.transfer_frame_version, bypass = self.bypass, control = self.control, RSVD_spare = self.RSVD_spare, spacecraft_id = self.spacecraft_id, virtual_channel_id = self.virtual_channel_id, frame_length = self.frame_length, frame_sequence_number = self.frame_sequence_number))).tolist() finalPacket = numpy.append(finalHeader, packet) finalPacket = array.array('B', finalPacket[:]) finalPacket = pmt.cons(pmt.PMT_NIL, pmt.init_u8vector(len(finalPacket), finalPacket)) self.message_port_pub(pmt.intern('out'), finalPacket) gr-satellites-4.4.0/python/ccsds/telemetry.py000066400000000000000000000040001414055407700213030ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Athanasios Theocharis # This was made under ESA Summer of Code in Space 2019 # by Athanasios Theocharis, mentored by Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # ''' Construct for the Primary Header of the CCSDS Telemetry Space Data Link Protocol ( CCSDS 132.0-B-2 ) ''' from construct import * PrimaryHeader = BitStruct('transfer_frame_version_number' / BitsInteger(2), 'spacecraft_id' / BitsInteger(10), 'virtual_channel_id' / BitsInteger(3), 'ocf_flag' / Flag, 'master_channel_frame_count' / BitsInteger(8), 'virtual_channel_frame_count' / BitsInteger(8), 'transfer_frame_secondary_header_flag' / Flag, 'synch_flag' / Flag, 'packet_order_flag' / Flag, 'segment_length_id' / BitsInteger(2), 'first_header_pointer' / BitsInteger(11)) OCFTrailer = BitStruct('control_word_type' / Flag, 'clcw_version_number' / BitsInteger(2), 'status_field' / BitsInteger(3), 'cop_in_effect' / BitsInteger(2), 'virtual_channel_identification' / BitsInteger(6), 'rsvd_spare1' / BitsInteger(2), 'no_rf_avail' / Flag, 'no_bit_lock' / Flag, 'lockout' / Flag, 'wait' / Flag, 'retransmit' / Flag, 'farmb_counter' / BitsInteger(2), 'rsvd_spare2' / Flag, 'report_value' / BitsInteger(8)) FullPacket = Struct('primary' / PrimaryHeader, 'payload' / Byte[this._.size], 'ocftrailer' / If(this.primary.ocf_flag == 1, OCFTrailer)) gr-satellites-4.4.0/python/ccsds/telemetry_ocf_adder.py000066400000000000000000000100241414055407700232740ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Athanasios Theocharis # This was made under ESA Summer of Code in Space 2019 # by Athanasios Theocharis, mentored by Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import numpy from gnuradio import gr from . import telemetry import pmt import array class telemetry_ocf_adder(gr.basic_block): """ docstring for block telemetry_ocf_adder """ def __init__(self, control_word_type, clcw_version_number, status_field, cop_in_effect, virtual_channel_identification, rsvd_spare1, no_rf_avail, no_bit_lock, lockout, wait, retransmit, farmb_counter, rsvd_spare2, report_value): gr.basic_block.__init__(self, name="telemetry_ocf_adder", in_sig=[], out_sig=[]) ################################################## # Parameters ################################################## self.control_word_type = control_word_type self.clcw_version_number = clcw_version_number self.status_field = status_field self.cop_in_effect = cop_in_effect self.virtual_channel_identification = virtual_channel_identification self.rsvd_spare1 = rsvd_spare1 self.no_rf_avail = no_rf_avail self.no_bit_lock = no_bit_lock self.lockout = lockout self.wait = wait self.retransmit = retransmit self.farmb_counter = farmb_counter self.rsvd_spare2 = rsvd_spare2 self.report_value = report_value ################################################## # Blocks ################################################## self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('out')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print() "[ERROR] Received invalid message type. Expected u8vector" return packet = pmt.u8vector_elements(msg) finalHeader = array.array('B', telemetry.OCFTrailer.build(dict(control_word_type = self.control_word_type, clcw_version_number = self.clcw_version_number, status_field = self.status_field, cop_in_effect = self.cop_in_effect, virtual_channel_identification = self.virtual_channel_identification, rsvd_spare1 = self.rsvd_spare1, no_rf_avail = self.no_rf_avail, no_bit_lock = self.no_bit_lock, lockout = self.lockout, wait = self.wait, retransmit = self.retransmit, farmb_counter = self.farmb_counter, rsvd_spare2 = self.rsvd_spare2, report_value = self.report_value))).tolist() finalPacket = numpy.append(packet, finalHeader) finalPacket = array.array('B', finalPacket[:]) finalPacket = pmt.cons(pmt.PMT_NIL, pmt.init_u8vector(len(finalPacket), finalPacket)) self.message_port_pub(pmt.intern('out'), finalPacket) gr-satellites-4.4.0/python/ccsds/telemetry_packet_reconstruction.py000066400000000000000000000054011414055407700260010ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Athanasios Theocharis # This was made under ESA Summer of Code in Space 2019 # by Athanasios Theocharis, mentored by Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr import pmt from . import telemetry from . import space_packet import array class telemetry_packet_reconstruction(gr.basic_block): """ docstring for block telemetry_packet_reconstruction """ def __init__(self): gr.basic_block.__init__(self, name="telemetry_packet_reconstruction", in_sig=[], out_sig=[]) self.space_packet = [] self.length_of_space_packet = 0 ################################################## # Blocks ################################################## self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('out')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print("[ERROR] Received invalid message type. Expected u8vector") return packet = bytearray(pmt.u8vector_elements(msg)) size = len(packet) - 6 try: header = telemetry.PrimaryHeader.parse(packet[:]) if header.ocf_flag == 1: size -= 4 except: print("Could not decode telemetry packet") return parsed = telemetry.FullPacket.parse(packet[:], size=size) payload = parsed.payload #The number 6 is used here, because that's the length of the Primary Header. #todo: Add a variable for this while len(payload) != 0: if len(self.space_packet) < 6: left = 6 - len(self.space_packet) self.space_packet.extend(payload[:left]) payload = payload[left:] if len(self.space_packet) >= 6: self.length_of_space_packet = space_packet.PrimaryHeader.parse(bytearray(self.space_packet)).data_length left = self.length_of_space_packet + 6 - len(self.space_packet) self.space_packet.extend(payload[:left]) payload = payload[left:] if 6 + self.length_of_space_packet == len(self.space_packet): self.sendPacket() def sendPacket(self): packet = self.space_packet packet = array.array('B', packet[:]) packet = pmt.cons(pmt.PMT_NIL, pmt.init_u8vector(len(packet), packet)) self.message_port_pub(pmt.intern('out'), packet) self.length_of_space_packet = 0 self.space_packet = [] gr-satellites-4.4.0/python/ccsds/telemetry_parser.py000066400000000000000000000026761414055407700227000ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Athanasios Theocharis # This was made under ESA Summer of Code in Space 2019 # by Athanasios Theocharis, mentored by Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import numpy from gnuradio import gr import pmt from . import telemetry class telemetry_parser(gr.basic_block): """ docstring for block CCSDS telemetry_parser """ def __init__(self): gr.basic_block.__init__(self, name="telemetry_parser", in_sig=[], out_sig=[]) self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('out')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print("[ERROR] Received invalid message type. Expected u8vector") return packet = bytearray(pmt.u8vector_elements(msg)) size = len(packet) - 6 try: header = telemetry.PrimaryHeader.parse(packet[:]) if header.ocf_flag == 1: size -= 4 data = telemetry.FullPacket.parse(packet[:], size=size) except: print("Could not decode telemetry packet") return print(data) self.message_port_pub(pmt.intern('out'), msg_pmt) gr-satellites-4.4.0/python/ccsds/telemetry_primaryheader_adder.py000066400000000000000000000133631414055407700253720ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Athanasios Theocharis # This was made under ESA Summer of Code in Space 2019 # by Athanasios Theocharis, mentored by Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import numpy from gnuradio import gr import pmt from . import telemetry import array from collections import deque class telemetry_primaryheader_adder(gr.basic_block): """space_packet_parser docstring for block telemetry_primaryheader_adder """ def __init__(self, transfer_frame_version_number, spacecraft_id, virtual_channel_id, ocf_flag, master_channel_frame_count, virtual_channel_frame_count, transfer_frame_secondary_header_flag, synch_flag, packet_order_flag, segment_length_id, first_header_pointer, coding, reed_solomon_concat, e, q, I, turbo, ldpc_tf, ldpc_tf_size, num_of_octets): gr.basic_block.__init__(self, name="telemetry_primaryheader_adder", in_sig=[], out_sig=[]) ################################################## # Parameters ################################################## num_of_octets += 1 self.transfer_frame_version_number = 0 self.spacecraft_id = spacecraft_id self.virtual_channel_id = virtual_channel_id self.ocf_flag = ocf_flag self.master_channel_frame_count = master_channel_frame_count self.virtual_channel_frame_count = virtual_channel_frame_count self.transfer_frame_secondary_header_flag = transfer_frame_secondary_header_flag self.synch_flag = synch_flag self.packet_order_flag = packet_order_flag self.segment_length_id = segment_length_id self.first_header_pointer = 0 self.coding = coding self.reed_solomon_concat = reed_solomon_concat self.e = e self.q = q self.I = I self.turbo = turbo self.ldpc_tf = ldpc_tf self.ldpc_tc_size = ldpc_tf_size self.num_of_octets = num_of_octets ################################################## # Variables ################################################## self.list = [] self.size = self.calculateSize() ################################################## # Blocks ################################################## self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('out')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print("[ERROR] Received invalid message type. Expected u8vector") return packet = pmt.u8vector_elements(msg) next_pointer = 0 while len(packet) > 0: limit = self.size - len(self.list) if len(packet) > limit: if len(packet) >= limit + self.size: next_pointer = 0x3ff else: next_pointer = len(packet) - limit elif len(packet) == limit: next_pointer = 0 self.list.extend(packet[:limit]) packet = packet[limit:] if len(self.list) == self.size: finalPacket = numpy.append(self.calculateFinalHeader(), self.list) self.sendPacket(finalPacket) self.list = [] self.first_header_pointer = next_pointer def sendPacket(self, packet): packet = array.array('B', packet[:]) packet = pmt.cons(pmt.PMT_NIL, pmt.init_u8vector(len(packet), packet)) self.message_port_pub(pmt.intern('out'), packet) def calculateSize(self): if self.coding == 1 or self.coding == 2 or self.coding == 7: size = self.num_of_octets elif self.coding == 3 or self.coding == 4: size = (255 - 2 * self.e - self.q) * self.I if self.reed_solomon_concat == 0: if ((255-self.q)*self.I)%4!=0: print("Codeblock (255-q)*I is not a multiple of 4") elif self.coding == 5: size = self.turbo else: if self.ldpc_tf < 3: size = self.ldpc_tc_size else: size = 892 return size def calculateFinalHeader(self): finalHeader = array.array('B', telemetry.PrimaryHeader.build(dict(transfer_frame_version_number = self.transfer_frame_version_number, spacecraft_id = self.spacecraft_id, virtual_channel_id = self.virtual_channel_id, ocf_flag = self.ocf_flag, master_channel_frame_count = self.master_channel_frame_count, virtual_channel_frame_count = self.virtual_channel_frame_count, transfer_frame_secondary_header_flag = self.transfer_frame_secondary_header_flag, synch_flag = self.synch_flag, packet_order_flag = self.packet_order_flag, segment_length_id = self.segment_length_id, first_header_pointer = self.first_header_pointer))) return finalHeader gr-satellites-4.4.0/python/ccsds/virtual_channel_demultiplexer.py000066400000000000000000000034521414055407700254240ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Athanasios Theocharis # This was made under ESA Summer of Code in Space 2019 # by Athanasios Theocharis, mentored by Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import numpy from gnuradio import gr from . import telemetry import pmt class virtual_channel_demultiplexer(gr.basic_block): """ docstring for block virtual_channel_demultiplexer """ def __init__(self, vc_outputs): gr.basic_block.__init__(self, name="virtual_channel_demultiplexer", in_sig=[], out_sig=[]) self.vc_outputs = vc_outputs self.message_port_register_in(pmt.intern('in')) self.outputDict = {} for i in range(len(vc_outputs)): self.outputDict[vc_outputs[i]] = i self.message_port_register_out(pmt.intern('out' + str(i))) self.message_port_register_out(pmt.intern('discarded')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print("[ERROR] Received invalid message type. Expected u8vector") return packet = bytearray(pmt.u8vector_elements(msg)) try: data = telemetry.PrimaryHeader.parse(packet[:]) except: print("Could not decode telemetry primary header") return outPort = data.virtual_channel_id try: port = self.outputDict[outPort] except KeyError: self.message_port_pub(pmt.intern('discarded'), msg_pmt) print("Discarded message") else: self.message_port_pub(pmt.intern('out' + str(port)), msg_pmt) gr-satellites-4.4.0/python/check_address.py000066400000000000000000000036301414055407700207640ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2017 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import struct from gnuradio import gr import numpy import pmt class check_address(gr.basic_block): """docstring for block check_address""" def __init__(self, address, direction): gr.basic_block.__init__( self, name='check_address', in_sig=[], out_sig=[]) a = address.split('-') self.callsign = a[0] self.ssid = int(a[1]) if len(a) > 1 else None self.direction = direction self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('ok')) self.message_port_register_out(pmt.intern('fail')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = bytes(pmt.u8vector_elements(msg)) # Check packet length. # An AX.25 header with 2 addresses, control and PID is 16 bytes. if len(packet) < 16: self.message_port_pub(pmt.intern('fail'), msg_pmt) return if self.direction == 'to': address = packet[:7] else: address = packet[7:14] callsign = [c >> 1 for c in address[:6]] callsign = bytes(callsign).decode('ascii').rstrip(' ') ssid = (address[6] >> 1) & 0x0f if (callsign != self.callsign or (self.ssid is not None and ssid != self.ssid)): # Incorrect address self.message_port_pub(pmt.intern('fail'), msg_pmt) else: # Correct address self.message_port_pub(pmt.intern('ok'), msg_pmt) gr-satellites-4.4.0/python/check_ao40_uncoded_crc.py000066400000000000000000000024761414055407700224410ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2017 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr import pmt from .ao40_uncoded_crc import crc class check_ao40_uncoded_crc(gr.basic_block): """docstring for block check_ao40_uncoded_crc""" def __init__(self, verbose): gr.basic_block.__init__( self, name='check_ao40_uncoded_crc', in_sig=[], out_sig=[]) self.verbose = verbose self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('ok')) self.message_port_register_out(pmt.intern('fail')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = pmt.u8vector_elements(msg) if crc(packet) == 0: if self.verbose: print('CRC OK') self.message_port_pub(pmt.intern('ok'), msg_pmt) else: if self.verbose: print('CRC failed') self.message_port_pub(pmt.intern('fail'), msg_pmt) gr-satellites-4.4.0/python/check_astrocast_crc.py000066400000000000000000000031671414055407700221760ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2018 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr import numpy import pmt from .hdlc_deframer import fcs_ok class check_astrocast_crc(gr.basic_block): """docstring for block check_astrocast_crc""" def __init__(self, verbose): gr.basic_block.__init__( self, name='check_astrocast_crc', in_sig=[], out_sig=[]) self.verbose = verbose self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('ok')) self.message_port_register_out(pmt.intern('fail')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = pmt.u8vector_elements(msg)[1:] # drop initial 0x7e # Find final 0x7e try: idx = packet.index(0x7e) except ValueError: return packet_out = packet[:idx-2] msg_out = pmt.cons(pmt.car(msg_pmt), pmt.init_u8vector(len(packet_out), packet_out)) if fcs_ok(packet[:idx]): if self.verbose: print('CRC OK') self.message_port_pub(pmt.intern('ok'), msg_out) else: if self.verbose: print('CRC failed') self.message_port_pub(pmt.intern('fail'), msg_out) gr-satellites-4.4.0/python/check_cc11xx_crc.py000066400000000000000000000074731414055407700213060ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2018 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import struct from gnuradio import gr import numpy import pmt crc_table = [ 0x0000, 0x8005, 0x800f, 0x000a, 0x801b, 0x001e, 0x0014, 0x8011, 0x8033, 0x0036, 0x003c, 0x8039, 0x0028, 0x802d, 0x8027, 0x0022, 0x8063, 0x0066, 0x006c, 0x8069, 0x0078, 0x807d, 0x8077, 0x0072, 0x0050, 0x8055, 0x805f, 0x005a, 0x804b, 0x004e, 0x0044, 0x8041, 0x80c3, 0x00c6, 0x00cc, 0x80c9, 0x00d8, 0x80dd, 0x80d7, 0x00d2, 0x00f0, 0x80f5, 0x80ff, 0x00fa, 0x80eb, 0x00ee, 0x00e4, 0x80e1, 0x00a0, 0x80a5, 0x80af, 0x00aa, 0x80bb, 0x00be, 0x00b4, 0x80b1, 0x8093, 0x0096, 0x009c, 0x8099, 0x0088, 0x808d, 0x8087, 0x0082, 0x8183, 0x0186, 0x018c, 0x8189, 0x0198, 0x819d, 0x8197, 0x0192, 0x01b0, 0x81b5, 0x81bf, 0x01ba, 0x81ab, 0x01ae, 0x01a4, 0x81a1, 0x01e0, 0x81e5, 0x81ef, 0x01ea, 0x81fb, 0x01fe, 0x01f4, 0x81f1, 0x81d3, 0x01d6, 0x01dc, 0x81d9, 0x01c8, 0x81cd, 0x81c7, 0x01c2, 0x0140, 0x8145, 0x814f, 0x014a, 0x815b, 0x015e, 0x0154, 0x8151, 0x8173, 0x0176, 0x017c, 0x8179, 0x0168, 0x816d, 0x8167, 0x0162, 0x8123, 0x0126, 0x012c, 0x8129, 0x0138, 0x813d, 0x8137, 0x0132, 0x0110, 0x8115, 0x811f, 0x011a, 0x810b, 0x010e, 0x0104, 0x8101, 0x8303, 0x0306, 0x030c, 0x8309, 0x0318, 0x831d, 0x8317, 0x0312, 0x0330, 0x8335, 0x833f, 0x033a, 0x832b, 0x032e, 0x0324, 0x8321, 0x0360, 0x8365, 0x836f, 0x036a, 0x837b, 0x037e, 0x0374, 0x8371, 0x8353, 0x0356, 0x035c, 0x8359, 0x0348, 0x834d, 0x8347, 0x0342, 0x03c0, 0x83c5, 0x83cf, 0x03ca, 0x83db, 0x03de, 0x03d4, 0x83d1, 0x83f3, 0x03f6, 0x03fc, 0x83f9, 0x03e8, 0x83ed, 0x83e7, 0x03e2, 0x83a3, 0x03a6, 0x03ac, 0x83a9, 0x03b8, 0x83bd, 0x83b7, 0x03b2, 0x0390, 0x8395, 0x839f, 0x039a, 0x838b, 0x038e, 0x0384, 0x8381, 0x0280, 0x8285, 0x828f, 0x028a, 0x829b, 0x029e, 0x0294, 0x8291, 0x82b3, 0x02b6, 0x02bc, 0x82b9, 0x02a8, 0x82ad, 0x82a7, 0x02a2, 0x82e3, 0x02e6, 0x02ec, 0x82e9, 0x02f8, 0x82fd, 0x82f7, 0x02f2, 0x02d0, 0x82d5, 0x82df, 0x02da, 0x82cb, 0x02ce, 0x02c4, 0x82c1, 0x8243, 0x0246, 0x024c, 0x8249, 0x0258, 0x825d, 0x8257, 0x0252, 0x0270, 0x8275, 0x827f, 0x027a, 0x826b, 0x026e, 0x0264, 0x8261, 0x0220, 0x8225, 0x822f, 0x022a, 0x823b, 0x023e, 0x0234, 0x8231, 0x8213, 0x0216, 0x021c, 0x8219, 0x0208, 0x820d, 0x8207, 0x0202] def crc16(data): crc = 0xffff for byte in data: tbl_idx = ((crc >> 8) ^ byte) & 0xff crc = (crc_table[tbl_idx] ^ (crc << 8)) & 0xffff return crc & 0xffff class check_cc11xx_crc(gr.basic_block): """docstring for block check_cc11xx_crc""" def __init__(self, verbose): gr.basic_block.__init__( self, name='check_cc11xx_crc', in_sig=[], out_sig=[]) self.verbose = verbose self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('ok')) self.message_port_register_out(pmt.intern('fail')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = pmt.u8vector_elements(msg) if len(packet) < 3: return packet_out = packet[:-2] msg_out = pmt.cons(pmt.car(msg_pmt), pmt.init_u8vector(len(packet_out), packet_out)) if crc16(packet) == 0: if self.verbose: print('CRC OK') self.message_port_pub(pmt.intern('ok'), msg_out) else: if self.verbose: print('CRC failed') self.message_port_pub(pmt.intern('fail'), msg_out) gr-satellites-4.4.0/python/check_crc.py000066400000000000000000000042651414055407700201130ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2017 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import struct from gnuradio import gr import numpy import pmt from . import crc32c from . import csp_header class check_crc(gr.basic_block): """docstring for block check_crc""" def __init__(self, include_header, verbose, force=False): gr.basic_block.__init__( self, name='check_crc', in_sig=[], out_sig=[]) self.include_header = include_header self.verbose = verbose self.force = force self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('ok')) self.message_port_register_out(pmt.intern('fail')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = pmt.u8vector_elements(msg) try: header = csp_header.CSP(packet[:4]) except ValueError as e: if self.verbose: print(e) return if not self.force and not header.crc: if self.verbose: print('CRC not used') self.message_port_pub(pmt.intern('ok'), msg_pmt) else: if len(packet) < 8: # 4 bytes CSP header, 4 bytes CRC-32C if self.verbose: print('Malformed CSP packet (too short)') return crc = crc32c.crc(packet[:-4] if self.include_header else packet[4:-4]) packet_crc = struct.unpack('>I', bytes(packet[-4:]))[0] if crc == packet_crc: if self.verbose: print('CRC OK') self.message_port_pub(pmt.intern('ok'), msg_pmt) else: if self.verbose: print('CRC failed') self.message_port_pub(pmt.intern('fail'), msg_pmt) gr-satellites-4.4.0/python/check_crc16_ccitt.py000066400000000000000000000031611414055407700214420ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import struct from gnuradio import gr import numpy import pmt from . import hdlc class check_crc16_ccitt(gr.basic_block): """docstring for block check_crc16_ccitt""" def __init__(self, verbose): gr.basic_block.__init__( self, name='check_crc16_ccitt', in_sig=[], out_sig=[]) self.verbose = verbose self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('ok')) self.message_port_register_out(pmt.intern('fail')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = pmt.u8vector_elements(msg) if len(packet) < 3: return packet_out = packet[:-2] msg_out = pmt.cons(pmt.car(msg_pmt), pmt.init_u8vector(len(packet_out), packet_out)) crc = hdlc.crc_ccitt(packet_out) packet_crc = struct.unpack(' # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import struct from gnuradio import gr import numpy import pmt crc_table = [ 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0] def crc16_ccitt_false(data): crc = 0xffff for byte in data: tbl_idx = ((crc >> 8) ^ byte) & 0xff crc = (crc_table[tbl_idx] ^ (crc << 8)) & 0xffff return crc & 0xffff class check_crc16_ccitt_false(gr.basic_block): """docstring for block check_crc16_ccitt_false""" def __init__(self, verbose): gr.basic_block.__init__( self, name='check_crc16_ccitt_false', in_sig=[], out_sig=[]) self.verbose = verbose self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('ok')) self.message_port_register_out(pmt.intern('fail')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = pmt.u8vector_elements(msg) if len(packet) < 3: return packet_out = packet[:-2] msg_out = pmt.cons(pmt.car(msg_pmt), pmt.init_u8vector(len(packet_out), packet_out)) crc = crc16_ccitt_false(packet_out) if crc == struct.unpack(' # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr import numpy import pmt crc_table = [ 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0] def crc16_ccitt_zero(data): crc = 0 for byte in data: tbl_idx = ((crc >> 8) ^ byte) & 0xff crc = (crc_table[tbl_idx] ^ (crc << 8)) & 0xffff return crc & 0xffff class check_eseo_crc(gr.basic_block): """docstring for block check_eseo_crc""" def __init__(self, verbose): gr.basic_block.__init__( self, name='check_eseo_crc', in_sig=[], out_sig=[]) self.verbose = verbose self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('ok')) self.message_port_register_out(pmt.intern('fail')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = pmt.u8vector_elements(msg) if len(packet) < 3: return packet_out = packet[:-2] msg_out = pmt.cons(pmt.car(msg_pmt), pmt.init_u8vector(len(packet_out), packet_out)) if crc16_ccitt_zero(packet) == 0: if self.verbose: print('CRC OK') self.message_port_pub(pmt.intern('ok'), msg_out) else: if self.verbose: print('CRC failed') self.message_port_pub(pmt.intern('fail'), msg_out) gr-satellites-4.4.0/python/check_swiatowid_crc.py000066400000000000000000000031711414055407700222000ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr import numpy import pmt from .check_eseo_crc import crc16_ccitt_zero as crc16_ccitt_zero class check_swiatowid_crc(gr.basic_block): """docstring for block check_swiatowid_crc""" def __init__(self, verbose): gr.basic_block.__init__( self, name='check_swiatowid_crc', in_sig=[], out_sig=[]) self.verbose = verbose self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('ok')) self.message_port_register_out(pmt.intern('fail')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = pmt.u8vector_elements(msg) if len(packet) < 3: return packet_out = packet[:-2] msg_out = pmt.cons(pmt.car(msg_pmt), pmt.init_u8vector(len(packet_out), packet_out)) crc = crc16_ccitt_zero(packet_out) if packet[-2] == crc & 0xff and packet[-1] == crc >> 8: if self.verbose: print('CRC OK') self.message_port_pub(pmt.intern('ok'), msg_out) else: if self.verbose: print('CRC failed') self.message_port_pub(pmt.intern('fail'), msg_out) gr-satellites-4.4.0/python/check_tt64_crc.py000066400000000000000000000102431414055407700207650ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2017 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr import numpy import pmt crc_table = [ 0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241, 0xc601, 0x06c0, 0x0780, 0xc741, 0x0500, 0xc5c1, 0xc481, 0x0440, 0xcc01, 0x0cc0, 0x0d80, 0xcd41, 0x0f00, 0xcfc1, 0xce81, 0x0e40, 0x0a00, 0xcac1, 0xcb81, 0x0b40, 0xc901, 0x09c0, 0x0880, 0xc841, 0xd801, 0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81, 0x1a40, 0x1e00, 0xdec1, 0xdf81, 0x1f40, 0xdd01, 0x1dc0, 0x1c80, 0xdc41, 0x1400, 0xd4c1, 0xd581, 0x1540, 0xd701, 0x17c0, 0x1680, 0xd641, 0xd201, 0x12c0, 0x1380, 0xd341, 0x1100, 0xd1c1, 0xd081, 0x1040, 0xf001, 0x30c0, 0x3180, 0xf141, 0x3300, 0xf3c1, 0xf281, 0x3240, 0x3600, 0xf6c1, 0xf781, 0x3740, 0xf501, 0x35c0, 0x3480, 0xf441, 0x3c00, 0xfcc1, 0xfd81, 0x3d40, 0xff01, 0x3fc0, 0x3e80, 0xfe41, 0xfa01, 0x3ac0, 0x3b80, 0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840, 0x2800, 0xe8c1, 0xe981, 0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41, 0xee01, 0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1, 0xec81, 0x2c40, 0xe401, 0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640, 0x2200, 0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0, 0x2080, 0xe041, 0xa001, 0x60c0, 0x6180, 0xa141, 0x6300, 0xa3c1, 0xa281, 0x6240, 0x6600, 0xa6c1, 0xa781, 0x6740, 0xa501, 0x65c0, 0x6480, 0xa441, 0x6c00, 0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41, 0xaa01, 0x6ac0, 0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840, 0x7800, 0xb8c1, 0xb981, 0x7940, 0xbb01, 0x7bc0, 0x7a80, 0xba41, 0xbe01, 0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40, 0xb401, 0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1, 0xb681, 0x7640, 0x7200, 0xb2c1, 0xb381, 0x7340, 0xb101, 0x71c0, 0x7080, 0xb041, 0x5000, 0x90c1, 0x9181, 0x5140, 0x9301, 0x53c0, 0x5280, 0x9241, 0x9601, 0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440, 0x9c01, 0x5cc0, 0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40, 0x5a00, 0x9ac1, 0x9b81, 0x5b40, 0x9901, 0x59c0, 0x5880, 0x9841, 0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81, 0x4a40, 0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41, 0x4400, 0x84c1, 0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641, 0x8201, 0x42c0, 0x4380, 0x8341, 0x4100, 0x81c1, 0x8081, 0x4040] def crc16_arc(data): crc = 0 for byte in data: tbl_idx = (crc ^ byte) & 0xff crc = (crc_table[tbl_idx] ^ (crc >> 8)) & 0xffff return crc & 0xffff class check_tt64_crc(gr.basic_block): """docstring for block check_tt64_crc""" def __init__(self, verbose, packet_len=48, strip=True): gr.basic_block.__init__( self, name='check_tt64_crc', in_sig=[], out_sig=[]) self.verbose = verbose self.packet_len = packet_len self.strip = strip self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('ok')) self.message_port_register_out(pmt.intern('fail')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = pmt.u8vector_elements(msg) if self.packet_len is not None: packet = packet[:self.packet_len] if ((self.packet_len is not None and len(packet) < self.packet_len) or (self.packet_len is None and len(packet) < 2)): if self.verbose: print('Packet too short') return packet_out = packet[:-2] if self.strip else packet msg_out = pmt.cons(pmt.PMT_NIL, pmt.init_u8vector(len(packet_out), packet_out)) if crc16_arc(packet) == 0: if self.verbose: print('CRC OK') self.message_port_pub(pmt.intern('ok'), msg_out) else: if self.verbose: print('CRC failed') self.message_port_pub(pmt.intern('fail'), msg_out) gr-satellites-4.4.0/python/components/000077500000000000000000000000001414055407700200135ustar00rootroot00000000000000gr-satellites-4.4.0/python/components/CMakeLists.txt000066400000000000000000000034221414055407700225540ustar00rootroot00000000000000# Copyright 2011 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. ######################################################################## # Include python install macros ######################################################################## include(GrPython) if(NOT PYTHONINTERP_FOUND) return() endif() ######################################################################## # Install python sources ######################################################################## GR_PYTHON_INSTALL( FILES __init__.py DESTINATION ${GR_PYTHON_DIR}/satellites/components ) add_subdirectory(deframers) add_subdirectory(demodulators) add_subdirectory(datasinks) add_subdirectory(datasources) add_subdirectory(transports) ######################################################################## # Handle the unit tests ######################################################################## include(GrTest) set(GR_TEST_TARGET_DEPS gnuradio-satellites) set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig) gr-satellites-4.4.0/python/components/__init__.py000066400000000000000000000005601414055407700221250ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # ''' gr-satellites components These components are the basic high-level building blocks of gr-satellites. ''' __all__ = ['deframers', 'demodulators', 'datasinks', 'transports'] gr-satellites-4.4.0/python/components/datasinks/000077500000000000000000000000001414055407700217745ustar00rootroot00000000000000gr-satellites-4.4.0/python/components/datasinks/CMakeLists.txt000066400000000000000000000036441414055407700245430ustar00rootroot00000000000000# Copyright 2011 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. ######################################################################## # Include python install macros ######################################################################## include(GrPython) if(NOT PYTHONINTERP_FOUND) return() endif() ######################################################################## # Install python sources ######################################################################## GR_PYTHON_INSTALL( FILES __init__.py codec2_udp_sink.py file_receiver.py hexdump_sink.py kiss_file_sink.py kiss_server_sink.py telemetry_parser.py telemetry_submit.py DESTINATION ${GR_PYTHON_DIR}/satellites/components/datasinks ) ######################################################################## # Handle the unit tests ######################################################################## include(GrTest) set(GR_TEST_TARGET_DEPS gnuradio-satellites) set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}/swig) GR_ADD_TEST(qa_telemetry_parser ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_telemetry_parser.py) gr-satellites-4.4.0/python/components/datasinks/__init__.py000066400000000000000000000013511414055407700241050ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # ''' gr-satellites datasink components The datasinks consume frames or packets in order to do something useful with them (printing telemetry, reconstructing images, storing to file, etc.) The input to these blocks are PDUs with the frames. ''' from .codec2_udp_sink import codec2_udp_sink from .file_receiver import file_receiver from .hexdump_sink import hexdump_sink from .kiss_file_sink import kiss_file_sink from .kiss_server_sink import kiss_server_sink from .telemetry_submit import telemetry_submit from .telemetry_parser import telemetry_parser gr-satellites-4.4.0/python/components/datasinks/codec2_udp_sink.py000066400000000000000000000035611414055407700254060ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, blocks from ...utils.options_block import options_block class codec2_udp_sink(gr.hier_block2, options_block): """ Hierarchical block for Codec2 UDP output The input are PDUs with Codec2 data The Codec2 data is sent to by PDU, a single frame (7 bytes) per packet for lowest latency. Args: ip: Detination IP (string) port: Destination UDP port (int) """ def __init__(self, ip=None, port=None, options=None): gr.hier_block2.__init__( self, 'codec2_udp_sink', gr.io_signature(0, 0, 0), gr.io_signature(0, 0, 0)) options_block.__init__(self, options) self.message_port_register_hier_in('in') if ip is None: ip = self.options.codec2_ip if port is None: port = self.options.codec2_port self.pdu2tag = blocks.pdu_to_tagged_stream(blocks.byte_t, 'packet_len') payload_bytes = 7 self.udp = blocks.udp_sink(gr.sizeof_char*1, ip, port, payload_bytes, False) self.msg_connect((self, 'in'), (self.pdu2tag, 'pdus')) self.connect(self.pdu2tag, self.udp) _default_ip = '127.0.0.1' _default_port = 7000 @classmethod def add_options(cls, parser): """ Adds Codec2 UDP output specific options to the argparse parser """ parser.add_argument( '--codec2_ip', type=str, default=cls._default_ip, help='Codec2 output IP [default=%(default)r]') parser.add_argument( '--codec2_port', type=int, default=cls._default_port, help='Codec2 output UDP port [default=%(default)r]') gr-satellites-4.4.0/python/components/datasinks/file_receiver.py000066400000000000000000000047001414055407700251520ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr import pmt from ... import filereceiver class file_receiver(gr.basic_block): """ Block for file reception The input are PDUs with frames The frames are expected to contain file chunks, which are saved into files using a FileReceiver object. Args: receiver: FileReceiver object (to load from the filereceiver package) (str) path: path to save files to (str) verbose: use verbose messages in FileReceiver (bool) options: options from argparse **kwargs: these are passed straight to the FileReceiver object """ def __init__(self, receiver, path=None, verbose=None, options=None, **kwargs): gr.basic_block.__init__( self, 'file_receiver', in_sig=[], out_sig=[]) if verbose is None: if options is not None: verbose = options.verbose_file_receiver else: raise ValueError( 'Must indicate verbose in function arguments or options') if path is None: if options is not None: path = options.file_output_path else: raise ValueError( 'Must indicate path in function arguments or options') self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.receiver = getattr(filereceiver, receiver)(path, verbose, **kwargs) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = bytes(pmt.u8vector_elements(msg)) self.receiver.push_chunk(packet) @classmethod def add_options(cls, parser): """ Adds telemetry parser specific options to the argparse parser """ parser.add_argument( '--file_output_path', default='.', help='File output path [default=%(default)r]') parser.add_argument( '--verbose_file_receiver', action='store_true', help='Verbose file receiver') gr-satellites-4.4.0/python/components/datasinks/hexdump_sink.py000066400000000000000000000014451414055407700250500ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, blocks class hexdump_sink(gr.hier_block2): """ Hierarchical block for hexdump output The input are PDUs with frames. These are printed in hex. Args: options: options from argparse """ def __init__(self, options=None): gr.hier_block2.__init__( self, 'hexdump_sink', gr.io_signature(0, 0, 0), gr.io_signature(0, 0, 0)) self.message_port_register_hier_in('in') self.message_debug = blocks.message_debug() self.msg_connect((self, 'in'), (self.message_debug, 'print_pdu')) gr-satellites-4.4.0/python/components/datasinks/kiss_file_sink.py000066400000000000000000000032701414055407700253440ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, blocks from ... import pdu_to_kiss from ...utils.options_block import options_block class kiss_file_sink(gr.hier_block2, options_block): """ Hierarchical block for KISS file output The input are PDUs with frames. These are saved to a KISS file. Args: file: output filename (string) append: append to file (bool) options: options from argparse """ def __init__(self, file, append=False, options=None): gr.hier_block2.__init__( self, 'kiss_file_sink', gr.io_signature(0, 0, 0), gr.io_signature(0, 0, 0)) options_block.__init__(self, options) self.message_port_register_hier_in('in') initial_timestamp = getattr(self.options, 'start_time', '') self.kiss = pdu_to_kiss(include_timestamp=True, initial_timestamp=initial_timestamp) self.pdu2tag = blocks.pdu_to_tagged_stream(blocks.byte_t, 'packet_len') self.filesink = blocks.file_sink(gr.sizeof_char, file, append) self.connect(self.pdu2tag, self.filesink) self.msg_connect((self, 'in'), (self.kiss, 'in')) self.msg_connect((self.kiss, 'out'), (self.pdu2tag, 'pdus')) @classmethod def add_options(cls, parser): """ Adds KISS file sink specific options to the argparse parser """ parser.add_argument( '--start_time', type=str, default='', help='Recording start timestamp') gr-satellites-4.4.0/python/components/datasinks/kiss_server_sink.py000066400000000000000000000021641414055407700257340ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, blocks from ... import pdu_to_kiss class kiss_server_sink(gr.hier_block2): """ Hierarchical block for KISS TCP server The input are PDUs with frames. These are sent to TCP clients connected to the TCP server Args: address: address to bind to, use '' for all (str) port: port to listen on (int) options: options from argparse """ def __init__(self, address, port, options=None): gr.hier_block2.__init__( self, 'kiss_file_sink', gr.io_signature(0, 0, 0), gr.io_signature(0, 0, 0)) self.message_port_register_hier_in('in') self.kiss = pdu_to_kiss(include_timestamp=True) self.server = blocks.socket_pdu( 'TCP_SERVER', address, port, 10000, False) self.msg_connect((self, 'in'), (self.kiss, 'in')) self.msg_connect((self.kiss, 'out'), (self.server, 'pdus')) gr-satellites-4.4.0/python/components/datasinks/qa_telemetry_parser.py000077500000000000000000000022521414055407700264210ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import sys from gnuradio import gr, blocks, gr_unittest import numpy as np import pmt # bootstrap satellites module, even from build dir try: import python as satellites except ImportError: pass else: import sys sys.modules['satellites'] = satellites from satellites.components.datasinks import telemetry_parser class qa_telemetry_parser(gr_unittest.TestCase): def setUp(self): self.tb = gr.top_block() def tearDown(self): self.tb = None def test_instance(self): """Tries to create a telemetry parser instance It uses several combinations of parameters """ definition = 'by02' telemetry_parser(definition) telemetry_parser(definition, file=sys.stderr) telemetry_parser(definition, file='/dev/null') telemetry_parser(definition, options='') telemetry_parser(definition, options='--telemetry_output /dev/null') if __name__ == '__main__': gr_unittest.run(qa_telemetry_parser) gr-satellites-4.4.0/python/components/datasinks/telemetry_parser.py000066400000000000000000000045551414055407700257450ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import os import sys from construct.core import ConstructError from gnuradio import gr import pmt from ... import telemetry class telemetry_parser(gr.basic_block): """ Block for telemetry parsing The input are PDUs with frames These are parsed with construct and the text output is printed or saved to file Args: definition: telemetry definition name (to load from the telemetry package) (str) file: file or file path to print output (defaults to sys.stdout) options: options from argparse """ def __init__(self, definition, file=sys.stdout, options=None): gr.basic_block.__init__( self, 'telemetry_parser', in_sig=[], out_sig=[]) self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.format = getattr(telemetry, definition) if getattr(options, 'telemetry_output', None): file = options.telemetry_output if type(file) in [str, bytes] or isinstance(file, os.PathLike): file = open(file, 'a') self.file = file def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = bytes(pmt.u8vector_elements(msg)) meta = pmt.car(msg_pmt) transmitter = pmt.dict_ref( meta, pmt.intern('transmitter'), pmt.PMT_NIL) if pmt.is_symbol(transmitter): print('-> Packet from', pmt.symbol_to_string(transmitter), file=self.file) try: data = self.format.parse(packet) except ConstructError as e: print(f'Could not parse telemetry beacon {e}', file=self.file) return if data: print(data, file=self.file) @classmethod def add_options(cls, parser): """ Adds telemetry parser specific options to the argparse parser """ parser.add_argument( '--telemetry_output', default=sys.stdout, help='Telemetry output file [default=stdout]') gr-satellites-4.4.0/python/components/datasinks/telemetry_submit.py000066400000000000000000000063201414055407700257440ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, blocks from ... import submit, funcube_submit from ... import pwsat2_submitter, bme_submitter, pdu_to_kiss from ...utils.options_block import options_block class telemetry_submit(gr.hier_block2, options_block): """ Hierarchical block for telemetry submission The input are PDUs with frames These are submitted to a telemetry server Args: server: 'SatNOGS', 'FUNcube', 'PWSat', 'BME' or 'SIDS' (string) norad: NORAD ID (int) port: TCP port to connect to (used by HIT) (str) url: SIDS URL (used by SIDS) (str) config: configuration file from configparser options: options from argparse """ def __init__(self, server, norad=None, port=None, url=None, config=None, options=None): gr.hier_block2.__init__( self, 'telemetry_submit', gr.io_signature(0, 0, 0), gr.io_signature(0, 0, 0)) options_block.__init__(self, options) self.message_port_register_hier_in('in') if server in ['SatNOGS', 'SIDS']: if server == 'SatNOGS': url = 'https://db.satnogs.org/api/telemetry/' initial_timestamp = getattr(self.options, 'start_time', '') self.submit = submit(url, norad, config['Groundstation']['callsign'], float(config['Groundstation']['longitude']), float(config['Groundstation']['latitude']), initial_timestamp) elif server == 'FUNcube': url = 'http://data.amsat-uk.org' self.submit = funcube_submit( url, config['FUNcube']['site_id'], config['FUNcube']['auth_code']) elif server == 'PWSat': self.submit = pwsat2_submitter( config['PW-Sat2']['credentials_file'], '') elif server == 'BME': satellites = {44830: 'atl1', 44832: 'smogp', 47964: 'smog1'} satellite = satellites[norad] self.submit = bme_submitter( config['BME']['user'], config['BME']['password'], satellite) elif server == 'HIT': try: self.tcp = blocks.socket_pdu( 'TCP_CLIENT', '127.0.0.1', port, 10000, False) except RuntimeError as e: print('Could not connect to telemetry proxy:', e) print('Disabling telemetry submission...') return self.submit = pdu_to_kiss(control_byte=False) self.msg_connect((self.submit, 'out'), (self.tcp, 'pdus')) else: raise ValueError('Unsupported telemetry server') self.msg_connect((self, 'in'), (self.submit, 'in')) @classmethod def add_options(cls, parser): """ Adds telemetry submit specific options to the argparse parser """ parser.add_argument( '--start_time', type=str, default='', help='Recording start timestamp') gr-satellites-4.4.0/python/components/datasources/000077500000000000000000000000001414055407700223305ustar00rootroot00000000000000gr-satellites-4.4.0/python/components/datasources/CMakeLists.txt000066400000000000000000000032431414055407700250720ustar00rootroot00000000000000# Copyright 2011 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. ######################################################################## # Include python install macros ######################################################################## include(GrPython) if(NOT PYTHONINTERP_FOUND) return() endif() ######################################################################## # Install python sources ######################################################################## GR_PYTHON_INSTALL( FILES __init__.py kiss_file_source.py DESTINATION ${GR_PYTHON_DIR}/satellites/components/datasources ) ######################################################################## # Handle the unit tests ######################################################################## include(GrTest) set(GR_TEST_TARGET_DEPS gnuradio-satellites) set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig) gr-satellites-4.4.0/python/components/datasources/__init__.py000066400000000000000000000006361414055407700244460ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # ''' gr-satellites datasource components The datasources read frames or packets from some source, such as a KISS file The output of these blocks are PDUs with the frames. ''' from .kiss_file_source import kiss_file_source gr-satellites-4.4.0/python/components/datasources/kiss_file_source.py000066400000000000000000000017441414055407700262400ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, blocks from ... import kiss_to_pdu class kiss_file_source(gr.hier_block2): """ Hierarchical block for KISS file input The output are PDUs with frames. These are read from a KISS file. Args: file: input filename (string) options: options from argparse """ def __init__(self, file, append=False, options=None): gr.hier_block2.__init__( self, 'kiss_file_source', gr.io_signature(0, 0, 0), gr.io_signature(0, 0, 0)) self.message_port_register_hier_out('out') self.filesource = blocks.file_source(gr.sizeof_char, file) self.kiss = kiss_to_pdu() self.connect(self.filesource, self.kiss) self.msg_connect((self.kiss, 'out'), (self, 'out')) gr-satellites-4.4.0/python/components/deframers/000077500000000000000000000000001414055407700217635ustar00rootroot00000000000000gr-satellites-4.4.0/python/components/deframers/CMakeLists.txt000066400000000000000000000053131414055407700245250ustar00rootroot00000000000000# Copyright 2011 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. ######################################################################## # Include python install macros ######################################################################## include(GrPython) if(NOT PYTHONINTERP_FOUND) return() endif() ######################################################################## # Install python sources ######################################################################## GR_PYTHON_INSTALL( FILES __init__.py aalto1_deframer.py aausat4_deframer.py aistechsat_2_deframer.py ao40_fec_deframer.py ao40_uncoded_deframer.py astrocast_fx25_deframer.py ax100_deframer.py ax25_deframer.py ax5043_deframer.py binar1_deframer.py ccsds_concatenated_deframer.py ccsds_rs_deframer.py diy1_deframer.py eseo_deframer.py fossasat_deframer.py grizu263a_deframer.py ideassat_deframer.py k2sat_deframer.py lilacsat_1_deframer.py lucky7_deframer.py mobitex_deframer.py ngham_deframer.py nusat_deframer.py ops_sat_deframer.py reaktor_hello_world_deframer.py sat_3cat_1_deframer.py smogp_ra_deframer.py smogp_signalling_deframer.py snet_deframer.py swiatowid_deframer.py tt64_deframer.py u482c_deframer.py ua01_deframer.py usp_deframer.py yusat_deframer.py DESTINATION ${GR_PYTHON_DIR}/satellites/components/deframers ) ######################################################################## # Handle the unit tests ######################################################################## include(GrTest) set(GR_TEST_TARGET_DEPS gnuradio-satellites) set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}/swig) GR_ADD_TEST(qa_ao40_fec_deframer ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_ao40_fec_deframer.py) GR_ADD_TEST(qa_usp_deframer ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_usp_deframer.py) gr-satellites-4.4.0/python/components/deframers/__init__.py000066400000000000000000000041761414055407700241040ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # ''' gr-satellites deframer components The deframers transform soft symbols into frames, detecting packet boundaries and performing error correction and checking as needed. The input to these hierarchical blocks is a stream of soft symbols and the output are PDUs with the frames. ''' from .aalto1_deframer import aalto1_deframer from .aausat4_deframer import aausat4_deframer from .aistechsat_2_deframer import aistechsat_2_deframer from .ao40_fec_deframer import ao40_fec_deframer from .ao40_uncoded_deframer import ao40_uncoded_deframer from .astrocast_fx25_deframer import astrocast_fx25_deframer from .ax100_deframer import ax100_deframer from .ax25_deframer import ax25_deframer from .ax5043_deframer import ax5043_deframer from .binar1_deframer import binar1_deframer from .ccsds_concatenated_deframer import ccsds_concatenated_deframer from .ccsds_rs_deframer import ccsds_rs_deframer from .diy1_deframer import diy1_deframer from .eseo_deframer import eseo_deframer from .fossasat_deframer import fossasat_deframer from .grizu263a_deframer import grizu263a_deframer from .ideassat_deframer import ideassat_deframer from .k2sat_deframer import k2sat_deframer from .lilacsat_1_deframer import lilacsat_1_deframer from .lucky7_deframer import lucky7_deframer from .mobitex_deframer import mobitex_deframer from .ngham_deframer import ngham_deframer from .nusat_deframer import nusat_deframer from .ops_sat_deframer import ops_sat_deframer from .reaktor_hello_world_deframer import reaktor_hello_world_deframer from .sat_3cat_1_deframer import sat_3cat_1_deframer from .smogp_ra_deframer import smogp_ra_deframer from .smogp_signalling_deframer import smogp_signalling_deframer from .snet_deframer import snet_deframer from .swiatowid_deframer import swiatowid_deframer from .tt64_deframer import tt64_deframer from .u482c_deframer import u482c_deframer from .ua01_deframer import ua01_deframer from .usp_deframer import usp_deframer from .yusat_deframer import yusat_deframer gr-satellites-4.4.0/python/components/deframers/aalto1_deframer.py000066400000000000000000000050721414055407700253670ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, digital from ... import check_crc16_ccitt, cc11xx_packet_crop, pdu_head_tail from ...hier.pn9_scrambler import pn9_scrambler from ...hier.sync_to_pdu_packed import sync_to_pdu_packed from ...utils.options_block import options_block _syncword = '00110101001011100011010100101110' class aalto1_deframer(gr.hier_block2, options_block): """ Hierarchical block to deframe the AALTO-1 custom framing This framing is based in a TI CC1125 transceiver with a PN9 scrambler, and a CRC-16 CCITT (as in AX.25). The input is a float stream of soft symbols. The output are PDUs with frames. Args: syncword_threshold: number of bit errors allowed in syncword (int) options: Options from argparse """ def __init__(self, syncword_threshold=None, options=None): gr.hier_block2.__init__( self, 'aalto1_deframer', gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(0, 0, 0)) options_block.__init__(self, options) self.message_port_register_hier_out('out') if syncword_threshold is None: syncword_threshold = self.options.syncword_threshold self.slicer = digital.binary_slicer_fb() self.deframer = sync_to_pdu_packed( packlen=255, sync=_syncword, threshold=syncword_threshold) self.scrambler = pn9_scrambler() self.crop = cc11xx_packet_crop(True) self.crc = check_crc16_ccitt(self.options.verbose_crc) self.crop2 = pdu_head_tail(3, 1) self.connect(self, self.slicer, self.deframer) self.msg_connect((self.deframer, 'out'), (self.scrambler, 'in')) self.msg_connect((self.scrambler, 'out'), (self.crop, 'in')) self.msg_connect((self.crop, 'out'), (self.crc, 'in')) self.msg_connect((self.crc, 'ok'), (self.crop2, 'in')) self.msg_connect((self.crop2, 'out'), (self, 'out')) _default_sync_threshold = 4 @classmethod def add_options(cls, parser): """ Adds AALTO-1 deframer specific options to the argparse parser """ parser.add_argument( '--syncword_threshold', type=int, default=cls._default_sync_threshold, help='Syncword bit errors [default=%(default)r]') parser.add_argument( '--verbose_crc', action='store_true', help='Verbose CRC decoder') gr-satellites-4.4.0/python/components/deframers/aausat4_deframer.py000066400000000000000000000074611414055407700255540ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, blocks, digital, fec from ... import decode_rs, aausat4_remove_fsm from ...hier.sync_to_pdu_soft import sync_to_pdu_soft from ...hier.ccsds_descrambler import ccsds_descrambler from ...utils.options_block import options_block _syncword = '010011110101101000110100010000110101010101000010' class aausat4_deframer(gr.hier_block2, options_block): """ Hierarchical block to deframe AAUSAT-4 frames These frames use a terminated CCSDS convolutional code, a CCSDS scrambler and CCSDS Reed-Solomon. The input is a float stream of soft symbols. The output are PDUs with frames. Args: syncword_threshold: number of bit errors allowed in syncword (int) options: Options from argparse """ def __init__(self, syncword_threshold=None, options=None): gr.hier_block2.__init__( self, 'aausat4_deframer', gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(0, 0, 0)) options_block.__init__(self, options) self.message_port_register_hier_out('out') if syncword_threshold is None: syncword_threshold = self.options.syncword_threshold self.deframer = sync_to_pdu_soft( packlen=1996 + 8, sync=_syncword, threshold=syncword_threshold) self.fsm = aausat4_remove_fsm() self.viterbi_short = fec.cc_decoder.make( 1020, 7, 2, [79, -109], 0, -1, fec.CC_TERMINATED, False) self.viterbi_decoder_short = fec.async_decoder( self.viterbi_short, True, False, 1020//8) self.viterbi_long = fec.cc_decoder.make( 1996, 7, 2, [79, -109], 0, -1, fec.CC_TERMINATED, False) self.viterbi_decoder_long = fec.async_decoder( self.viterbi_long, False, False, 1996//8) # Workaround for bug https://github.com/gnuradio/gnuradio/pull/2965 # We use packed output for Viterbi short decoder and then # we unpack the PDUs. self.pdu2tag = blocks.pdu_to_tagged_stream(blocks.byte_t, 'packet_len') self.unpack = blocks.packed_to_unpacked_bb(1, gr.GR_MSB_FIRST) self.taglength = blocks.tagged_stream_multiply_length( gr.sizeof_char*1, 'packet_len', 8) self.tag2pdu = blocks.tagged_stream_to_pdu(blocks.byte_t, 'packet_len') self.scrambler = ccsds_descrambler() self.rs = decode_rs(False, 1) self.connect(self, self.deframer) self.msg_connect((self.deframer, 'out'), (self.fsm, 'in')) self.msg_connect((self.fsm, 'short'), (self.viterbi_decoder_short, 'in')) self.msg_connect((self.fsm, 'long'), (self.viterbi_decoder_long, 'in')) # Workaround self.msg_connect((self.viterbi_decoder_short, 'out'), (self.pdu2tag, 'pdus')) self.connect(self.pdu2tag, self.unpack, self.taglength, self.tag2pdu) self.msg_connect((self.tag2pdu, 'pdus'), (self.scrambler, 'in')) self.msg_connect((self.viterbi_decoder_long, 'out'), (self.scrambler, 'in')) self.msg_connect((self.scrambler, 'out'), (self.rs, 'in')) self.msg_connect((self.rs, 'out'), (self, 'out')) _default_sync_threshold = 8 @classmethod def add_options(cls, parser): """ Adds AAUSAT-4 deframer specific options to the argparse parser """ parser.add_argument( '--syncword_threshold', type=int, default=cls._default_sync_threshold, help='Syncword bit errors [default=%(default)r]') parser.add_argument( '--verbose_rs', action='store_true', help='Verbose RS decoder') gr-satellites-4.4.0/python/components/deframers/aistechsat_2_deframer.py000066400000000000000000000043051414055407700265550ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, digital from ... import decode_rs, pdu_head_tail from .ccsds_rs_deframer import _syncword from ...hier.sync_to_pdu import sync_to_pdu from ...hier.ccsds_descrambler import ccsds_descrambler from ...utils.options_block import options_block class aistechsat_2_deframer(gr.hier_block2, options_block): """ Hierarchical block to deframe AISTECHSAT-2 custom frames The input is a float stream of soft symbols. The output are PDUs with frames. Args: syncword_threshold: number of bit errors allowed in syncword (int) options: Options from argparse """ def __init__(self, syncword_threshold=None, options=None): gr.hier_block2.__init__( self, 'aistechast_2_deframer', gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(0, 0, 0)) options_block.__init__(self, options) self.message_port_register_hier_out('out') if syncword_threshold is None: syncword_threshold = self.options.syncword_threshold self.slicer = digital.binary_slicer_fb() self.deframer = sync_to_pdu( packlen=(93 + 32) * 8, sync=_syncword, threshold=syncword_threshold) self.scrambler = ccsds_descrambler() self.tail = pdu_head_tail(3, 10) self.fec = decode_rs(False, 1) self.connect(self, self.slicer, self.deframer) self.msg_connect((self.deframer, 'out'), (self.scrambler, 'in')) self.msg_connect((self.scrambler, 'out'), (self.tail, 'in')) self.msg_connect((self.tail, 'out'), (self.fec, 'in')) self.msg_connect((self.fec, 'out'), (self, 'out')) _default_sync_threshold = 4 @classmethod def add_options(cls, parser): """ Adds AISTECHSAT-2 deframer specific options to the argparse parser """ parser.add_argument( '--syncword_threshold', type=int, default=cls._default_sync_threshold, help='Syncword bit errors [default=%(default)r]') gr-satellites-4.4.0/python/components/deframers/ao40_fec_deframer.py000066400000000000000000000071171414055407700255700ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, digital, fec, blocks from ... import ( distributed_syncframe_soft, matrix_deinterleaver_soft, decode_rs, check_tt64_crc, ) from ...hier.ccsds_descrambler import ccsds_descrambler from ...utils.options_block import options_block _syncword = '11111110000111011110010110010010000001000100110001011101011011000' _syncword_short = '1111111000011101111001011001001000000100010011000101' class ao40_fec_deframer(gr.hier_block2, options_block): """ Hierarchical block to deframe the AO-40 FEC protocol. The input is a float stream of soft symbols. The output are PDUs with frames. Args: syncword_threshold: number of bit errors allowed in syncword (int) short_frames: use short frames (used in SMOG-P) (bool) crc: use CRC-16 ARC (used in SMOG-P) (bool) options: Options from argparse """ def __init__(self, syncword_threshold=None, short_frames=False, crc=False, options=None): gr.hier_block2.__init__( self, 'ao40_fec_deframer', gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(0, 0, 0)) options_block.__init__(self, options) self.message_port_register_hier_out('out') if syncword_threshold is None: syncword_threshold = self.options.syncword_threshold self.deframer = distributed_syncframe_soft( syncword_threshold, _syncword_short if short_frames else _syncword, 51 if short_frames else 80) self.deinterleaver = matrix_deinterleaver_soft( 51 if short_frames else 80, 52 if short_frames else 65, 2572 if short_frames else 5132, 80 if short_frames else 65) self.viterbi = fec.cc_decoder.make( 2572 if short_frames else 5132, 7, 2, [79, -109], 0, -1, fec.CC_TERMINATED, False) self.viterbi_decoder = fec.async_decoder( self.viterbi, False, False, 2572//8 if short_frames else 5132//8) self.scrambler = ccsds_descrambler() self.rs = decode_rs(False, 1 if short_frames else 2) if crc: # CRC-16 ARC self.crc = check_tt64_crc( verbose=self.options.verbose_crc, packet_len=None, strip=False) self.connect(self, self.deframer) self.msg_connect((self.deframer, 'out'), (self.deinterleaver, 'in')) self.msg_connect((self.deinterleaver, 'out'), (self.viterbi_decoder, 'in')) self.msg_connect((self.viterbi_decoder, 'out'), (self.scrambler, 'in')) self.msg_connect((self.scrambler, 'out'), (self.rs, 'in')) if crc: self.msg_connect((self.rs, 'out'), (self.crc, 'in')) self.msg_connect((self.crc, 'ok'), (self, 'out')) else: self.msg_connect((self.rs, 'out'), (self, 'out')) _default_sync_threshold = 8 @classmethod def add_options(cls, parser): """ Adds AO-40 FEC deframer specific options to the argparse parser """ parser.add_argument( '--syncword_threshold', type=int, default=cls._default_sync_threshold, help='Syncword bit errors [default=%(default)r]') parser.add_argument( '--verbose_rs', action='store_true', help='Verbose RS decoder') parser.add_argument( '--verbose_crc', action='store_true', help='Verbose CRC decoder') gr-satellites-4.4.0/python/components/deframers/ao40_uncoded_deframer.py000066400000000000000000000040761414055407700264550ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, digital from ... import check_ao40_uncoded_crc from ...hier.sync_to_pdu_packed import sync_to_pdu_packed from ...utils.options_block import options_block _syncword = '00111001000101011110110100110000' class ao40_uncoded_deframer(gr.hier_block2, options_block): """ Hierarchical block to deframe the AO-40 uncoded framing. The input is a float stream of soft symbols. The output are PDUs with frames. Args: syncword_threshold: number of bit errors allowed in syncword (int) options: Options from argparse """ def __init__(self, syncword_threshold=None, options=None): gr.hier_block2.__init__( self, 'ao40_uncoded_deframer', gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(0, 0, 0)) options_block.__init__(self, options) self.message_port_register_hier_out('out') if syncword_threshold is None: syncword_threshold = self.options.syncword_threshold self.slicer = digital.binary_slicer_fb() self.deframer = sync_to_pdu_packed( packlen=512 + 2, sync=_syncword, threshold=syncword_threshold) self.crc = check_ao40_uncoded_crc(self.options.verbose_crc) self.connect(self, self.slicer, self.deframer) self.msg_connect((self.deframer, 'out'), (self.crc, 'in')) self.msg_connect((self.crc, 'ok'), (self, 'out')) _default_sync_threshold = 3 @classmethod def add_options(cls, parser): """ Adds AO-40 uncoded deframer specific options to the argparse parser """ parser.add_argument( '--syncword_threshold', type=int, default=cls._default_sync_threshold, help='Syncword bit errors [default=%(default)r]') parser.add_argument( '--verbose_crc', action='store_true', help='Verbose CRC decoder') gr-satellites-4.4.0/python/components/deframers/astrocast_fx25_deframer.py000066400000000000000000000052421414055407700270540ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, digital from ... import nrzi_decode, reflect_bytes, decode_rs, check_astrocast_crc from ...hier.sync_to_pdu_packed import sync_to_pdu_packed from ...utils.options_block import options_block _syncword = '0111010111111010110000011010001101011000110100000110010001110110' class astrocast_fx25_deframer(gr.hier_block2, options_block): """ Hierarchical block to deframe the Astrocast (somewhat non-compliant) FX.25 The input is a float stream of soft symbols. The output are PDUs with frames. Args: syncword_threshold: number of bit errors allowed in syncword (int) nrzi: use NRZ-I instead of NRZ (bool) options: Options from argparse """ def __init__(self, syncword_threshold=None, nrzi=True, options=None): gr.hier_block2.__init__( self, 'astrocast_fx25_deframer', gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(0, 0, 0)) options_block.__init__(self, options) self.message_port_register_hier_out('out') if syncword_threshold is None: syncword_threshold = self.options.syncword_threshold self.slicer = digital.binary_slicer_fb() if nrzi: self.nrzi = nrzi_decode() self.deframer = sync_to_pdu_packed( packlen=255, sync=_syncword, threshold=syncword_threshold) self.reflect = reflect_bytes() self.rs = decode_rs(True, 1) self.crc = check_astrocast_crc(self.options.verbose_crc) blocks = [self, self.slicer] if nrzi: blocks.append(self.nrzi) blocks.append(self.deframer) self.connect(*blocks) self.msg_connect((self.deframer, 'out'), (self.reflect, 'in')) self.msg_connect((self.reflect, 'out'), (self.rs, 'in')) self.msg_connect((self.rs, 'out'), (self.crc, 'in')) self.msg_connect((self.crc, 'ok'), (self, 'out')) _default_sync_threshold = 8 @classmethod def add_options(cls, parser): """ Adds Astrocast FX.25 deframer specific options to the argparse parser """ parser.add_argument( '--syncword_threshold', type=int, default=cls._default_sync_threshold, help='Syncword bit errors [default=%(default)r]') parser.add_argument( '--verbose_rs', action='store_true', help='Verbose RS decoder') parser.add_argument( '--verbose_crc', action='store_true', help='Verbose CRC decoder') gr-satellites-4.4.0/python/components/deframers/ax100_deframer.py000066400000000000000000000056311414055407700250400ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, digital from ... import ax100_decode, u482c_decode from ...hier.sync_to_pdu_packed import sync_to_pdu_packed from ...utils.options_block import options_block _syncword = '10010011000010110101000111011110' class ax100_deframer(gr.hier_block2, options_block): """ Hierarchical block to deframe the GOMspace AX100 protocols. The input is a float stream of soft symbols. The output are PDUs with frames (most likely CSP frames). Args: mode: mode to use ('RS' or 'ASM') (string) scrambler: scrambler to use, either 'CCSDS' or 'none' (only for ASM mode) (str) syncword_threshold: number of bit errors allowed in syncword (int) options: Options from argparse """ def __init__(self, mode, scrambler='CCSDS', syncword_threshold=None, options=None): gr.hier_block2.__init__( self, 'ax100_deframer', gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(0, 0, 0)) options_block.__init__(self, options) if scrambler not in ['CCSDS', 'none']: raise ValueError(f'invalid scrambler {scrambler}') self.message_port_register_hier_out('out') if syncword_threshold is None: syncword_threshold = self.options.syncword_threshold if mode not in ['RS', 'ASM']: raise Exception("Unsupported AX100 mode. Use 'RS' or 'ASM'") self.slicer = digital.binary_slicer_fb() if mode == 'RS': self.descrambler = digital.descrambler_bb(0x21, 0, 16) self.deframer = sync_to_pdu_packed( packlen=256 if mode == 'RS' else 255, sync=_syncword, threshold=syncword_threshold) self.fec = (ax100_decode(self.options.verbose_fec) if mode == 'RS' else u482c_decode( self.options.verbose_fec, 0, 1 if scrambler == 'CCSDS' else 0, 1)) self._blocks = [self, self.slicer] if mode == 'RS': self._blocks.append(self.descrambler) self._blocks += [self.deframer] self.connect(*self._blocks) self.msg_connect((self.deframer, 'out'), (self.fec, 'in')) self.msg_connect((self.fec, 'out'), (self, 'out')) _default_sync_threshold = 4 @classmethod def add_options(cls, parser): """ Adds AX100 deframer specific options to the argparse parser """ parser.add_argument( '--syncword_threshold', type=int, default=cls._default_sync_threshold, help='Syncword bit errors [default=%(default)r]') parser.add_argument( '--verbose_fec', action='store_true', help='Verbose FEC decoder') gr-satellites-4.4.0/python/components/deframers/ax25_deframer.py000066400000000000000000000026071414055407700247660ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, digital from ... import nrzi_decode, hdlc_deframer class ax25_deframer(gr.hier_block2): """ Hierarchical block to deframe AX.25. The input is a float stream of soft symbols. The output are PDUs with AX.25 frames. The input should be NRZ-I encoded and optionally G3RUH scrambled. Args: g3ruh_scrambler: use G3RUH descrambling (boolean) options: Options from argparse """ def __init__(self, g3ruh_scrambler, options=None): gr.hier_block2.__init__( self, 'ax25_deframer', gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(0, 0, 0)) self.message_port_register_hier_out('out') self.slicer = digital.binary_slicer_fb() self.nrzi = nrzi_decode() if g3ruh_scrambler: self.descrambler = digital.descrambler_bb(0x21, 0, 16) self.deframer = hdlc_deframer(True, 10000) self._blocks = [self, self.slicer, self.nrzi] if g3ruh_scrambler: self._blocks.append(self.descrambler) self._blocks += [self.deframer] self.connect(*self._blocks) self.msg_connect((self.deframer, 'out'), (self, 'out')) gr-satellites-4.4.0/python/components/deframers/ax5043_deframer.py000066400000000000000000000076501414055407700251360ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2021 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, blocks, digital import numpy as np import pmt from ... import viterbi_decoder from ...hdlc_deframer import hdlc_deframer from ...hier.sync_to_pdu import sync_to_pdu from ...utils.options_block import options_block from ...check_tt64_crc import crc_table # Two HDLC flags encoded and interleaved (32 bits) _syncword = '10001010111001101000101011100110' class deinterleave(gr.basic_block): """ Helper block to perform 4x4 matrix deinterleaving The input and output are PDUs with unpacked bits """ def __init__(self): gr.basic_block.__init__( self, name='deinterleave', in_sig=[], out_sig=[]) self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('out')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = np.array(pmt.u8vector_elements(msg), dtype='uint8') if packet.size % 16 != 0: print('[ERROR] Packet size is not a multiple of 16 bits') return packet = np.einsum('ijk->ikj', packet.reshape((-1, 4, 4))).ravel() # Invert every other bit, since the g0 branch of the convolutional # encoder is inverted. packet[::2] ^= 1 self.message_port_pub( pmt.intern('out'), pmt.cons(pmt.PMT_NIL, pmt.init_u8vector(len(packet), packet))) def crc16_usb(data): crc = 0xffff for byte in data: tbl_idx = (crc ^ byte) & 0xff crc = (crc_table[tbl_idx] ^ (crc >> 8)) & 0xffff return (crc ^ 0xffff) & 0xffff def crc_check(frame): if len(frame) <= 2: return False crc = crc16_usb(frame[:-2]) return frame[-2] == (crc & 0xff) and frame[-1] == ((crc >> 8) & 0xff) class ax5043_deframer(gr.hier_block2, options_block): """ Hierarchical block to deframe AX5043 FEC packets The input is a float stream of soft symbols. The output are PDUs with the FEC frames. The AX5043 uses a k = 5, r = 1/2 convolutional code, 4x4 matrix interleaving, and HDLC framing. This deframer uses a Viterbi decoder that works on hard-decision bits. Args: options: Options from argparse """ def __init__(self, options=None): gr.hier_block2.__init__( self, 'ax5043_deframer', gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(0, 0, 0)) options_block.__init__(self, options) self.message_port_register_hier_out('out') self.slicer = digital.binary_slicer_fb() # 4000 bits will leave enough room for the 200 byte packets self.deframer = sync_to_pdu( packlen=4000, sync=_syncword, threshold=4) self.deinterleave = deinterleave() self.viterbi = viterbi_decoder(5, [25, 23]) self.pdu2tag = blocks.pdu_to_tagged_stream(blocks.byte_t, 'packet_len') self.hdlc = hdlc_deframer(True, 10000, crc_check_func=crc_check) self.connect(self, self.slicer, self.deframer) self.msg_connect((self.deframer, 'out'), (self.deinterleave, 'in')) self.msg_connect((self.deinterleave, 'out'), (self.viterbi, 'in')) self.msg_connect((self.viterbi, 'out'), (self.pdu2tag, 'pdus')) self.connect(self.pdu2tag, self.hdlc) self.msg_connect((self.hdlc, 'out'), (self, 'out')) @classmethod def add_options(cls, parser): """ Adds AX5043 deframer specific options to the argparse parser """ parser.add_argument( '--verbose_crc', action='store_true', help='Verbose CRC') gr-satellites-4.4.0/python/components/deframers/binar1_deframer.py000066400000000000000000000050551414055407700253630ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2021 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, digital from ... import sx12xx_check_crc, cc11xx_packet_crop from ...hier.sync_to_pdu_packed import sync_to_pdu_packed from ...utils.options_block import options_block # As syncword we use the last 0xAA from the preamble # followed by the 0x7E synchronization marker _syncword = '1010101001111110' class binar1_deframer(gr.hier_block2, options_block): """ Hierarchical block to deframe the BINAR-1 custom framing This framing uses a custom syncword, a 1-byte packet length field, no scrambling, and CRC-16 CCITT FALSE (as in CCSDS transfer frames). the packet length field was supposed to always have the value 0x56, but we have seen other values such as 0x4b being used. The input is a float stream of soft symbols. The output are PDUs with frames. Args: syncword_threshold: number of bit errors allowed in syncword (int) options: Options from argparse """ def __init__(self, syncword_threshold=None, options=None): gr.hier_block2.__init__( self, 'binar1_deframer', gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(0, 0, 0)) options_block.__init__(self, options) self.message_port_register_hier_out('out') if syncword_threshold is None: syncword_threshold = self.options.syncword_threshold self.slicer = digital.binary_slicer_fb() self.deframer = sync_to_pdu_packed( packlen=255+3, sync=_syncword, threshold=syncword_threshold) self.crop = cc11xx_packet_crop(use_crc16=True) self.crc = sx12xx_check_crc(self.options.verbose_crc, 0xffff, 0x0) self.connect(self, self.slicer, self.deframer) self.msg_connect((self.deframer, 'out'), (self.crop, 'in')) self.msg_connect((self.crop, 'out'), (self.crc, 'in')) self.msg_connect((self.crc, 'ok'), (self, 'out')) _default_sync_threshold = 0 @classmethod def add_options(cls, parser): """ Adds BINAR-1 deframer specific options to the argparse parser """ parser.add_argument( '--syncword_threshold', type=int, default=cls._default_sync_threshold, help='Syncword bit errors [default=%(default)r]') parser.add_argument( '--verbose_crc', action='store_true', help='Verbose CRC decoder') gr-satellites-4.4.0/python/components/deframers/ccsds_concatenated_deframer.py000066400000000000000000000060361414055407700300160ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, blocks from .ccsds_rs_deframer import ccsds_rs_deframer from ...hier.ccsds_viterbi import ccsds_viterbi from ...utils.options_block import options_block class ccsds_concatenated_deframer(gr.hier_block2, options_block): """ Hierarchical block to deframe CCSDS concatenated (convolutional + Reed-Solomon) TM frames The input is a float stream of soft symbols. The output are PDUs with frames. Args: frame_size: frame size (not including parity check bytes) (int) precoding: either None or 'differential' for differential precoding (str) rs_en: If Reed-Solomon should be enabled or not (bool) rs_basis: Reed-Solomon basis, either 'conventional' or 'dual' (str) rs_interleaving: Reed-Solomon interleaving depth (int) scrambler: scrambler to use, either 'CCSDS' or 'none' (str) convolutional: convolutional code to use, one of the following: 'CCSDS', 'NASA-DSN', 'CCSDS uninverted', 'NASA-DSN uninverted' (str) syncword_threshold: number of bit errors allowed in syncword (int) options: Options from argparse """ def __init__(self, frame_size=223, precoding=None, rs_en=True, rs_basis='dual', rs_interleaving=1, scrambler='CCSDS', convolutional='CCSDS', syncword_threshold=None, options=None): gr.hier_block2.__init__( self, 'ccsds_concatenated_deframer', gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(0, 0, 0)) options_block.__init__(self, options) self.message_port_register_hier_out('out') self.delay1 = blocks.delay(gr.sizeof_float, 1) self.viterbi0 = ccsds_viterbi(convolutional) self.viterbi1 = ccsds_viterbi(convolutional) self.char2float0 = blocks.char_to_float(1, 1) self.char2float1 = blocks.char_to_float(1, 1) self.addconst0 = blocks.add_const_ff(-0.5) self.addconst1 = blocks.add_const_ff(-0.5) self.rs0 = ccsds_rs_deframer( frame_size, precoding, rs_en, rs_basis, rs_interleaving, scrambler, syncword_threshold, options) self.rs1 = ccsds_rs_deframer( frame_size, precoding, rs_en, rs_basis, rs_interleaving, scrambler, syncword_threshold, options) self.connect(self, self.viterbi0, self.char2float0, self.addconst0, self.rs0) self.connect(self, self.delay1, self.viterbi1, self.char2float1, self.addconst1, self.rs1) self.msg_connect((self.rs0, 'out'), (self, 'out')) self.msg_connect((self.rs1, 'out'), (self, 'out')) @classmethod def add_options(cls, parser): """ Adds CCSDS concatenated deframer options to the argparse parser """ ccsds_rs_deframer.add_options(parser) gr-satellites-4.4.0/python/components/deframers/ccsds_rs_deframer.py000066400000000000000000000076371414055407700260220ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, digital from ... import decode_rs from ...hier.sync_to_pdu import sync_to_pdu from ...hier.sync_to_pdu_packed import sync_to_pdu_packed from ...hier.ccsds_descrambler import ccsds_descrambler from ...utils.options_block import options_block _syncword = '00011010110011111111110000011101' class ccsds_rs_deframer(gr.hier_block2, options_block): """ Hierarchical block to deframe CCSDS Reed-Solomon TM frames The input is a float stream of soft symbols. The output are PDUs with frames. Args: frame_size: frame size (not including parity check bytes) (int) precoding: either None or 'differential' for differential precoding (str) rs_en: If Reed-Solomon should be enabled or not (bool) rs_basis: Reed-Solomon basis, either 'conventional' or 'dual' (str) rs_interleaving: Reed-Solomon interleaving depth (int) scrambler: scrambler to use, either 'CCSDS' or 'none' (str) syncword_threshold: number of bit errors allowed in syncword (int) options: Options from argparse """ def __init__(self, frame_size=223, precoding=None, rs_en=True, rs_basis='dual', rs_interleaving=1, scrambler='CCSDS', syncword_threshold=None, options=None): gr.hier_block2.__init__( self, 'ccsds_rs_deframer', gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(0, 0, 0)) options_block.__init__(self, options) if precoding not in [None, 'differential']: raise ValueError(f'invalid precoding {precoding}') if rs_basis not in ['conventional', 'dual']: raise ValueError(f'invalid Reed-Solomon basis {rs_basis}') if scrambler not in ['CCSDS', 'none']: raise ValueError(f'invalid scrambler {scrambler}') self.message_port_register_hier_out('out') if syncword_threshold is None: syncword_threshold = self.options.syncword_threshold self.slicer = digital.binary_slicer_fb() if precoding == 'differential': self.differential = digital.diff_decoder_bb(2) deframe_func = (sync_to_pdu if scrambler == 'CCSDS' else sync_to_pdu_packed) packlen_mult = 8 if scrambler == 'CCSDS' else 1 self.deframer = deframe_func( packlen=((frame_size + (32 * rs_interleaving if rs_en else 0)) * packlen_mult), sync=_syncword, threshold=syncword_threshold) if scrambler == 'CCSDS': self.scrambler = ccsds_descrambler() self.fec = decode_rs(rs_basis == 'dual', rs_interleaving) self._blocks = [self, self.slicer] if precoding == 'differential': self._blocks.append(self.differential) self._blocks += [self.deframer] self.connect(*self._blocks) if rs_en: out = (self.fec, 'in') else: out = (self, 'out') if scrambler == 'CCSDS': self.msg_connect((self.deframer, 'out'), (self.scrambler, 'in')) self.msg_connect((self.scrambler, 'out'), out) else: self.msg_connect((self.deframer, 'out'), out) if rs_en: self.msg_connect((self.fec, 'out'), (self, 'out')) _default_sync_threshold = 4 @classmethod def add_options(cls, parser): """ Adds CCSDS RS deframer specific options to the argparse parser """ parser.add_argument( '--syncword_threshold', type=int, default=cls._default_sync_threshold, help='Syncword bit errors [default=%(default)r]') parser.add_argument( '--verbose_rs', action='store_true', help='Verbose RS decoder') gr-satellites-4.4.0/python/components/deframers/diy1_deframer.py000066400000000000000000000110211414055407700250430ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2021 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import struct from gnuradio import gr, digital import numpy as np import pmt from ...check_eseo_crc import check_eseo_crc from ...hier.sync_to_pdu_packed import sync_to_pdu_packed from ...utils.options_block import options_block # Syncword is 0x2dd4 _syncword = '0010110111010100' class uart_decode(gr.basic_block): """ Helper block to remove UART-like encoding The input is unpacked bits having 10 bits per byte consisting of a start bit (which should be 0 but we don't look at), an 8-bit byte in MSB-first order, and a stop bit (which should be 1 but we don't look at). The output consists of the 8-bit bytes as packed bytes. """ def __init__(self): gr.basic_block.__init__( self, name='uart_decode', in_sig=[], out_sig=[]) self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('out')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = np.array(pmt.u8vector_elements(msg), dtype='uint8') if packet.size % 10 != 0: print('[ERROR] Packet size is not a multiple of 10 bits') return packet = np.packbits(packet.reshape((-1, 10))[:, 1:-1]) self.message_port_pub( pmt.intern('out'), pmt.cons(pmt.PMT_NIL, pmt.init_u8vector(len(packet), packet))) class crop(gr.basic_block): """ Helper block to crop DIY-1 packets according to packet length The format of DIY-1 packets is: - Header: 4 bytes - Length field: 1 byte (contains length of data field) - Data - CRC-16 This crop block reads the length field and trims the PDU accordingly. Its is a PDU with all the fields listed above. """ def __init__(self, verbose=False): gr.basic_block.__init__( self, name='crop', in_sig=[], out_sig=[]) self.verbose = verbose self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('out')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = pmt.u8vector_elements(msg) if len(packet) < 7: # Packet is too short return length = packet[4] packet = packet[:5+length+2] self.message_port_pub( pmt.intern('out'), pmt.cons(pmt.PMT_NIL, pmt.init_u8vector(len(packet), packet))) class diy1_deframer(gr.hier_block2, options_block): """ Hierarchical block to deframe DIY-1 RFM22 frames The input is a float stream of soft symbols. The output are PDUs with DIY-1 frames. Args: options: Options from argparse """ def __init__(self, options=None): gr.hier_block2.__init__( self, 'diy1_deframer', gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(0, 0, 0)) options_block.__init__(self, options) self.message_port_register_hier_out('out') self.slicer = digital.binary_slicer_fb() self.deframer = sync_to_pdu_packed( packlen=262, sync=_syncword, threshold=self.options.syncword_threshold) self.crop = crop() self.crc = check_eseo_crc(self.options.verbose_crc) self.connect(self, self.slicer, self.deframer) self.msg_connect((self.deframer, 'out'), (self.crop, 'in')) self.msg_connect((self.crop, 'out'), (self.crc, 'in')) self.msg_connect((self.crc, 'ok'), (self, 'out')) _default_sync_threshold = 0 @classmethod def add_options(cls, parser): """ Adds DIY-1 deframer specific options to the argparse parser """ parser.add_argument( '--syncword_threshold', type=int, default=cls._default_sync_threshold, help='Syncword bit errors [default=%(default)r]') parser.add_argument( '--verbose_crc', action='store_true', help='Verbose CRC decoder') gr-satellites-4.4.0/python/components/deframers/eseo_deframer.py000066400000000000000000000047701414055407700251450ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, digital from ... import decode_rs, check_eseo_crc, eseo_packet_crop, eseo_line_decoder from ...hier.sync_to_pdu_packed import sync_to_pdu_packed from ...utils.options_block import options_block _syncword = '0111111001111110' class eseo_deframer(gr.hier_block2, options_block): """ Hierarchical block to deframe the ESEO non AX.25-compliant framing The input is a float stream of soft symbols. The output are PDUs with frames. Args: syncword_threshold: number of bit errors allowed in syncword (int) options: Options from argparse """ def __init__(self, syncword_threshold=None, options=None): gr.hier_block2.__init__( self, 'eseo_deframer', gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(0, 0, 0)) options_block.__init__(self, options) self.message_port_register_hier_out('out') if syncword_threshold is None: syncword_threshold = self.options.syncword_threshold self.slicer = digital.binary_slicer_fb() self.deframer = sync_to_pdu_packed( packlen=257, sync=_syncword, threshold=syncword_threshold) self.crop = eseo_packet_crop(drop_rs=False) self.rs = decode_rs(8, 0x11d, 1, 1, 16, 1) self.line = eseo_line_decoder() self.crc = check_eseo_crc(self.options.verbose_crc) self.connect(self, self.slicer, self.deframer) self.msg_connect((self.deframer, 'out'), (self.crop, 'in')) self.msg_connect((self.crop, 'out'), (self.rs, 'in')) self.msg_connect((self.rs, 'out'), (self.line, 'in')) self.msg_connect((self.line, 'out'), (self.crc, 'in')) self.msg_connect((self.crc, 'ok'), (self, 'out')) _default_sync_threshold = 0 @classmethod def add_options(cls, parser): """ Adds Astrocast 9k6 deframer specific options to the argparse parser """ parser.add_argument( '--syncword_threshold', type=int, default=cls._default_sync_threshold, help='Syncword bit errors [default=%(default)r]') parser.add_argument( '--verbose_rs', action='store_true', help='Verbose RS decoder') parser.add_argument( '--verbose_crc', action='store_true', help='Verbose CRC decoder') gr-satellites-4.4.0/python/components/deframers/fossasat_deframer.py000066400000000000000000000056161414055407700260350ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 jgromes # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, digital import pmt from ... import pdu_head_tail from ... import sx12xx_check_crc, sx12xx_packet_crop from ... import reflect_bytes from ...hier.pn9_scrambler import pn9_scrambler from ...hier.sync_to_pdu_packed import sync_to_pdu_packed from ...utils.options_block import options_block _syncword = '01010101010101010001001000010010' class fossasat_deframer(gr.hier_block2, options_block): """ Hierarchical block to deframe FOSSASAT-1/2 custom framing This framing is based on Semtech SX126x transceiver with PN9 scrambler, bit order swapping and a CRC-16. The input is a float stream of soft symbols. The output are PDUs with frames. Args: syncword_threshold: number of bit errors allowed in syncword (int) options: Options from argparse """ def __init__(self, syncword_threshold=None, options=None): gr.hier_block2.__init__( self, 'fossasat_deframer', gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(0, 0, 0)) options_block.__init__(self, options) self.message_port_register_hier_out('out') if syncword_threshold is None: syncword_threshold = self.options.syncword_threshold self.slicer = digital.binary_slicer_fb() self.sync = sync_to_pdu_packed( packlen=255, sync=_syncword, threshold=syncword_threshold) self.reflect_1 = reflect_bytes() self.scrambler = pn9_scrambler() self.reflect_2 = reflect_bytes() self.crop = sx12xx_packet_crop(crc_len=2) self.crc = sx12xx_check_crc( verbose=self.options.verbose_crc, initial=0x1D0F, final=0xFFFF) self.remove_length = pdu_head_tail(3, 1) self.connect(self, self.slicer, self.sync) self.msg_connect((self.sync, 'out'), (self.reflect_1, 'in')) self.msg_connect((self.reflect_1, 'out'), (self.scrambler, 'in')) self.msg_connect((self.scrambler, 'out'), (self.reflect_2, 'in')) self.msg_connect((self.reflect_2, 'out'), (self.crop, 'in')) self.msg_connect((self.crop, 'out'), (self.crc, 'in')) self.msg_connect((self.crc, 'ok'), (self.remove_length, 'in')) self.msg_connect((self.remove_length, 'out'), (self, 'out')) _default_sync_threshold = 0 @classmethod def add_options(cls, parser): """ Adds FOSSASAT deframer specific options to the argparse parser """ parser.add_argument( '--syncword_threshold', type=int, default=cls._default_sync_threshold, help='Syncword bit errors [default=%(default)r]') parser.add_argument( '--verbose_crc', action='store_true', help='Verbose CRC decoder') gr-satellites-4.4.0/python/components/deframers/grizu263a_deframer.py000066400000000000000000000066041414055407700257440ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2021 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, blocks, digital import pmt from ... import pdu_head_tail from ... import check_cc11xx_crc, sx12xx_packet_crop from ... import reflect_bytes from ...hier.sync_to_pdu_packed import sync_to_pdu_packed from ...utils.options_block import options_block _syncword = '0000000100100011010001010110011110001001101010111100110111101111' class grizu263a_deframer(gr.hier_block2, options_block): """ Hierarchical block to deframe Grizu-263A custom framing This framing is based on Semtech SX1268 transceiver with PN9 scrambler, bit order swapping and a CRC-16. The input is a float stream of soft symbols. The output are PDUs with frames. Args: syncword_threshold: number of bit errors allowed in syncword (int) options: Options from argparse """ def __init__(self, syncword_threshold=None, options=None): gr.hier_block2.__init__( self, 'grizu263a_deframer', gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(0, 0, 0)) options_block.__init__(self, options) self.message_port_register_hier_out('out') if syncword_threshold is None: syncword_threshold = self.options.syncword_threshold self.slicer = digital.binary_slicer_fb() self.sync = sync_to_pdu_packed( packlen=255, sync=_syncword, threshold=syncword_threshold) self.reflect_1 = reflect_bytes() # The scrambler is like the PN9, but uses 0x100 instead of 0x1FF # as seed. self.scrambler = digital.additive_scrambler_bb( 0x21, 0x100, 8, count=0, bits_per_byte=8, reset_tag_key='packet_len') self.stream2pdu = blocks.tagged_stream_to_pdu(blocks.byte_t, 'packet_len') self.pdu2stream = blocks.pdu_to_tagged_stream(blocks.byte_t, 'packet_len') self.reflect_2 = reflect_bytes() self.crop = sx12xx_packet_crop(crc_len=2) self.crc = check_cc11xx_crc(self.options.verbose_crc) self.remove_length = pdu_head_tail(3, 1) self.connect(self, self.slicer, self.sync) self.msg_connect((self.sync, 'out'), (self.reflect_1, 'in')) self.msg_connect((self.reflect_1, 'out'), (self.pdu2stream, 'pdus')) self.connect(self.pdu2stream, self.scrambler, self.stream2pdu) self.msg_connect((self.stream2pdu, 'pdus'), (self.reflect_2, 'in')) self.msg_connect((self.reflect_2, 'out'), (self.crop, 'in')) self.msg_connect((self.crop, 'out'), (self.crc, 'in')) self.msg_connect((self.crc, 'ok'), (self.remove_length, 'in')) self.msg_connect((self.remove_length, 'out'), (self, 'out')) _default_sync_threshold = 8 @classmethod def add_options(cls, parser): """ Adds Grizu-263A deframer specific options to the argparse parser """ parser.add_argument( '--syncword_threshold', type=int, default=cls._default_sync_threshold, help='Syncword bit errors [default=%(default)r]') parser.add_argument( '--verbose_crc', action='store_true', help='Verbose CRC decoder') gr-satellites-4.4.0/python/components/deframers/ideassat_deframer.py000066400000000000000000000125761414055407700260120ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2021 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import struct from gnuradio import gr, digital import numpy as np import pmt from ... import nrzi_decode from ...hier.sync_to_pdu import sync_to_pdu from ...utils.options_block import options_block from ...check_crc16_ccitt_false import crc16_ccitt_false # The 40 bit syncword is formed by 4130f000, which is the end of the # AX.25 address of the first subpacket (including the subpacket counter), # encoded as UART with 1 stop bit. _syncword = '0010000011000110000101111000010000000001' class uart_decode(gr.basic_block): """ Helper block to remove UART-like encoding The input is unpacked bits having 10 bits per byte consisting of a start bit (which should be 0 but we don't look at), an 8-bit byte in MSB-first order, and a stop bit (which should be 1 but we don't look at). The output consists of the 8-bit bytes as packed bytes. """ def __init__(self): gr.basic_block.__init__( self, name='uart_decode', in_sig=[], out_sig=[]) self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('out')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = np.array(pmt.u8vector_elements(msg), dtype='uint8') if packet.size % 10 != 0: print('[ERROR] Packet size is not a multiple of 10 bits') return packet = np.packbits(packet.reshape((-1, 10))[:, 1:-1]) self.message_port_pub( pmt.intern('out'), pmt.cons(pmt.PMT_NIL, pmt.init_u8vector(len(packet), packet))) class extract_payload(gr.basic_block): """ Helper block to throw subpacket headers and extract CRC-protected payload This also checks the CRC """ def __init__(self, verbose=False): gr.basic_block.__init__( self, name='extract_payload', in_sig=[], out_sig=[]) self.verbose = verbose self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('out')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = np.array(pmt.u8vector_elements(msg), dtype='uint8') # Put initial padding to account for the AX.25 header we've lost initial_padding = np.zeros(17, dtype='uint8') packet = np.concatenate((initial_padding, packet)) if packet.size != 40 * 9: print('[ERROR] Invalid packet size') return packet = packet.reshape((9, 40)) # Save AX.25 header. we take it from the 2nd message header = packet[1, 1:16] # Drop AX.25 headers and final 0x7e packet = packet[:, 17:-1].ravel() # Drop final padding packet = packet[:-11] # Check CRC crc = crc16_ccitt_false(packet[4:-2]) # do not include first 4 bytes if crc != struct.unpack(' # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, digital, blocks, fec from ... import descrambler308 from ... import k2sat_deframer as deframer from ...hier.sync_to_pdu_packed import sync_to_pdu_packed from ...utils.options_block import options_block _syncword = '0101010101111110' class k2sat_deframer(gr.hier_block2, options_block): """ Hierarchical block to deframe the K2SAT custom image protocol The input is a float stream of soft symbols. The output are PDUs with frames. Args: syncword_threshold: number of bit errors allowed in syncword (int) options: Options from argparse """ def __init__(self, syncword_threshold=None, options=None): gr.hier_block2.__init__( self, 'k2sat_deframer', gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(0, 0, 0)) options_block.__init__(self, options) self.message_port_register_hier_out('out') if syncword_threshold is None: syncword_threshold = self.options.syncword_threshold # For QPKS 90º abiguity self.deinterleave = blocks.deinterleave(gr.sizeof_float, 1) self.invert = blocks.multiply_const_ff(-1, 1) self.interleave = blocks.interleave(gr.sizeof_float, 1) self.cc0 = fec.cc_decoder.make( 80, 7, 2, [79, 109], 0, -1, fec.CC_STREAMING, False) self.cc1 = fec.cc_decoder.make( 80, 7, 2, [79, 109], 0, -1, fec.CC_STREAMING, False) self.viterbi0 = fec.extended_decoder( decoder_obj_list=self.cc0, threading=None, ann=None, puncpat='11') self.viterbi1 = fec.extended_decoder( decoder_obj_list=self.cc1, threading=None, ann=None, puncpat='11') self.diff0 = digital.diff_decoder_bb(2) self.diff1 = digital.diff_decoder_bb(2) self.scrambler0 = descrambler308() self.scrambler1 = descrambler308() self.deframer0 = sync_to_pdu_packed( packlen=2200, sync=_syncword, threshold=syncword_threshold) self.deframer1 = sync_to_pdu_packed( packlen=2200, sync=_syncword, threshold=syncword_threshold) self.deframer = deframer() self.connect(self, self.viterbi0, self.diff0, self.scrambler0, self.deframer0) self.connect(self, self.deinterleave) self.connect((self.deinterleave, 0), (self.interleave, 1)) self.connect((self.deinterleave, 1), self.invert, (self.interleave, 0)) self.connect(self.interleave, self.viterbi1, self.diff1, self.scrambler1, self.deframer1) self.msg_connect((self.deframer0, 'out'), (self.deframer, 'in')) self.msg_connect((self.deframer1, 'out'), (self.deframer, 'in')) self.msg_connect((self.deframer, 'out'), (self, 'out')) _default_sync_threshold = 0 @classmethod def add_options(cls, parser): """ Adds K2SAT deframer specific options to the argparse parser """ parser.add_argument( '--syncword_threshold', type=int, default=cls._default_sync_threshold, help='Syncword bit errors [default=%(default)r]') gr-satellites-4.4.0/python/components/deframers/lilacsat_1_deframer.py000066400000000000000000000057311414055407700262240ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, blocks, digital from .ccsds_rs_deframer import _syncword from ...hier.ccsds_viterbi import ccsds_viterbi from ...utils.options_block import options_block from ... import lilacsat1_demux class lilacsat_1_deframer(gr.hier_block2, options_block): """ Hierarchical block to deframe LilacSat-1 frames The input is a float stream of soft symbols. The output are PDUs with chunks of a KISS stream. The additional output is codec2 data. Args: syncword_threshold: number of bit errors allowed in syncword (int) options: Options from argparse """ def __init__(self, syncword_threshold=None, options=None): gr.hier_block2.__init__( self, 'lilacsat_1_deframer', gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(0, 0, 0)) options_block.__init__(self, options) self.message_port_register_hier_out('out') self.message_port_register_hier_out('codec2') if syncword_threshold is None: syncword_threshold = self.options.syncword_threshold self.delay1 = blocks.delay(gr.sizeof_float, 1) self.viterbi0 = ccsds_viterbi() self.viterbi1 = ccsds_viterbi() self.differential0 = digital.diff_decoder_bb(2) self.differential1 = digital.diff_decoder_bb(2) self.tag0 = digital.correlate_access_code_tag_bb( _syncword, syncword_threshold, 'syncword') self.tag1 = digital.correlate_access_code_tag_bb( _syncword, syncword_threshold, 'syncword') self.scrambler0 = digital.additive_scrambler_bb( 0xA9, 0xFF, 7, count=0, bits_per_byte=1, reset_tag_key='syncword') self.scrambler1 = digital.additive_scrambler_bb( 0xA9, 0xFF, 7, count=0, bits_per_byte=1, reset_tag_key='syncword') self.demux0 = lilacsat1_demux('syncword') self.demux1 = lilacsat1_demux('syncword') self.connect(self, self.viterbi0, self.differential0, self.tag0, self.scrambler0, self.demux0) self.connect(self, self.delay1, self.viterbi1, self.differential1, self.tag1, self.scrambler1, self.demux1) self.msg_connect((self.demux0, 'frame'), (self, 'out')) self.msg_connect((self.demux1, 'frame'), (self, 'out')) self.msg_connect((self.demux0, 'codec2'), (self, 'codec2')) self.msg_connect((self.demux1, 'codec2'), (self, 'codec2')) _default_sync_threshold = 4 @classmethod def add_options(cls, parser): """ Adds LilacSat-1 deframer specific options to the argparse parser """ parser.add_argument( '--syncword_threshold', type=int, default=cls._default_sync_threshold, help='Syncword bit errors [default=%(default)r]') gr-satellites-4.4.0/python/components/deframers/lucky7_deframer.py000066400000000000000000000044061414055407700254240ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, digital from ... import check_cc11xx_crc from ...hier.si4463_scrambler import si4463_scrambler from ...hier.sync_to_pdu import sync_to_pdu from ...utils.options_block import options_block _syncword = '0010110111010100' class lucky7_deframer(gr.hier_block2, options_block): """ Hierarchical block to deframe the Lucky-7 custom framing This framing is based in a SiLabs Si4463 transceiver with a PN9 scrambler, and a CRC-16. The input is a float stream of soft symbols. The output are PDUs with frames. Args: syncword_threshold: number of bit errors allowed in syncword (int) options: Options from argparse """ def __init__(self, syncword_threshold=None, options=None): gr.hier_block2.__init__( self, 'lucky7_deframer', gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(0, 0, 0)) options_block.__init__(self, options) self.message_port_register_hier_out('out') if syncword_threshold is None: syncword_threshold = self.options.syncword_threshold self.slicer = digital.binary_slicer_fb() self.deframer = sync_to_pdu( packlen=37*8, sync=_syncword, threshold=syncword_threshold) self.scrambler = si4463_scrambler() self.crc = check_cc11xx_crc(self.options.verbose_crc) self.connect(self, self.slicer, self.deframer) self.msg_connect((self.deframer, 'out'), (self.scrambler, 'in')) self.msg_connect((self.scrambler, 'out'), (self.crc, 'in')) self.msg_connect((self.crc, 'ok'), (self, 'out')) _default_sync_threshold = 1 @classmethod def add_options(cls, parser): """ Adds Lucky-7 deframer specific options to the argparse parser """ parser.add_argument( '--syncword_threshold', type=int, default=cls._default_sync_threshold, help='Syncword bit errors [default=%(default)r]') parser.add_argument( '--verbose_crc', action='store_true', help='Verbose CRC decoder') gr-satellites-4.4.0/python/components/deframers/mobitex_deframer.py000066400000000000000000000027211414055407700256530ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import importlib from gnuradio import gr, blocks, digital class mobitex_deframer(gr.hier_block2): """ Hierarchical block to deframe Mobitex and Mobitex-NX The input is a float stream of soft symbols. The output are PDUs with Mobitex-NX frames. This uses the gr-tnc_nx OOT module, but only attempts to import it when __init__() is called. Args: nx: use NX mode (boolean) options: Options from argparse """ def __init__(self, nx=False, options=None): gr.hier_block2.__init__( self, 'mobitex_deframer', gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(0, 0, 0)) self.message_port_register_hier_out('out') self.invert = blocks.multiply_const_ff(-1, 1) self.slicer = digital.binary_slicer_fb() try: tnc_nx = importlib.import_module('tnc_nx') except ImportError as e: print('Unable to import tnc_nx') print('gr-tnc_nx needs to be installed to use Mobitex') raise e syncword = 0x0ef0 if nx else 0x5765 self.mobitex = tnc_nx.nx_decoder(syncword, nx) self.connect(self, self.invert, self.slicer, self.mobitex) self.msg_connect((self.mobitex, 'out'), (self, 'out')) gr-satellites-4.4.0/python/components/deframers/ngham_deframer.py000066400000000000000000000066431414055407700253050ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, blocks, digital from ... import ( decode_rs, ngham_packet_crop, ngham_remove_padding, ngham_check_crc) from ...hier.sync_to_pdu_packed import sync_to_pdu_packed from ...hier.ccsds_descrambler import ccsds_descrambler from ...utils.options_block import options_block _syncword = '01011101111001100010101001111110' class ngham_deframer(gr.hier_block2, options_block): """ Hierarchical block to deframe NGHam frames These use a CCSDS scrambler and CCSDS Reed-Solomon Reed-Solomon decoding is currently not implemented The input is a float stream of soft symbols. The output are PDUs with frames. Args: decode_rs: use Reed-Solomon decoding (bool) syncword_threshold: number of bit errors allowed in syncword (int) options: Options from argparse """ def __init__(self, decode_rs=False, syncword_threshold=None, options=None): gr.hier_block2.__init__( self, 'ccsds_rs_deframer', gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(0, 0, 0)) options_block.__init__(self, options) self.message_port_register_hier_out('out') if decode_rs: raise ValueError('NGHam Reed-Solomon decoding not implemented yet') if syncword_threshold is None: syncword_threshold = self.options.syncword_threshold self.slicer = digital.binary_slicer_fb() self.deframer = sync_to_pdu_packed( packlen=255 + 3, sync=_syncword, threshold=syncword_threshold) self.crop = ngham_packet_crop() self.pdu2tag = blocks.pdu_to_tagged_stream(blocks.byte_t, 'packet_len') self.unpack = blocks.packed_to_unpacked_bb(1, gr.GR_MSB_FIRST) self.taglength = blocks.tagged_stream_multiply_length( gr.sizeof_char*1, 'packet_len', 8) self.tag2pdu = blocks.tagged_stream_to_pdu(blocks.byte_t, 'packet_len') self.scrambler = ccsds_descrambler() self.padding = ngham_remove_padding() self.crc = ngham_check_crc(self.options.verbose_crc) self.connect(self, self.slicer, self.deframer) self.msg_connect((self.deframer, 'out'), (self.crop, 'in')) self.msg_connect((self.crop, 'rs16'), (self.pdu2tag, 'pdus')) self.msg_connect((self.crop, 'rs32'), (self.pdu2tag, 'pdus')) self.connect(self.pdu2tag, self.unpack, self.taglength, self.tag2pdu) self.msg_connect((self.tag2pdu, 'pdus'), (self.scrambler, 'in')) self.msg_connect((self.scrambler, 'out'), (self.padding, 'in')) self.msg_connect((self.padding, 'out'), (self.crc, 'in')) self.msg_connect((self.crc, 'ok'), (self, 'out')) _default_sync_threshold = 4 @classmethod def add_options(cls, parser): """ Adds NGHam deframer specific options to the argparse parser """ parser.add_argument( '--syncword_threshold', type=int, default=cls._default_sync_threshold, help='Syncword bit errors [default=%(default)r]') parser.add_argument( '--verbose_rs', action='store_true', help='Verbose RS decoder') parser.add_argument( '--verbose_crc', action='store_true', help='Verbose CRC check') gr-satellites-4.4.0/python/components/deframers/nusat_deframer.py000066400000000000000000000036161414055407700253420ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, digital from ... import nusat_decoder from ...hier.sync_to_pdu_packed import sync_to_pdu_packed from ...utils.options_block import options_block _syncword = '00000001111001011010101011001100' class nusat_deframer(gr.hier_block2, options_block): """ Hierarchical block to deframe the NuSat custom protocol The input is a float stream of soft symbols. The output are PDUs with frames. Args: syncword_threshold: number of bit errors allowed in syncword (int) options: Options from argparse """ def __init__(self, syncword_threshold=None, options=None): gr.hier_block2.__init__( self, 'nusat_deframer', gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(0, 0, 0)) options_block.__init__(self, options) self.message_port_register_hier_out('out') if syncword_threshold is None: syncword_threshold = self.options.syncword_threshold self.slicer = digital.binary_slicer_fb() self.deframer = sync_to_pdu_packed( packlen=64, sync=_syncword, threshold=syncword_threshold) self.fec = nusat_decoder() self.connect(self, self.slicer, self.deframer) self.msg_connect((self.deframer, 'out'), (self.fec, 'in')) self.msg_connect((self.fec, 'out'), (self, 'out')) _default_sync_threshold = 0 @classmethod def add_options(cls, parser): """ Adds NuSat deframer specific options to the argparse parser """ parser.add_argument( '--syncword_threshold', type=int, default=cls._default_sync_threshold, help='Syncword bit errors [default=%(default)r]') gr-satellites-4.4.0/python/components/deframers/ops_sat_deframer.py000066400000000000000000000053121414055407700256530ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, blocks, digital from ... import ( nrzi_decode, hdlc_deframer, pdu_head_tail, decode_rs, pdu_length_filter) from ...utils.options_block import options_block class ops_sat_deframer(gr.hier_block2, options_block): """ Hierarchical block to deframe OPS-SAT AX.25 + Reed-Solomon. The input is a float stream of soft symbols. The output are PDUs with Reed-Solomon decoded data. The input should be NRZ-I encoded and G3RUH scrambled. Args: options: Options from argparse """ def __init__(self, options=None): gr.hier_block2.__init__( self, 'ops_sat_deframer', gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(0, 0, 0)) options_block.__init__(self, options) self.message_port_register_hier_out('out') self.slicer = digital.binary_slicer_fb() self.nrzi = nrzi_decode() self.descrambler = digital.descrambler_bb(0x21, 0, 16) self.deframer = hdlc_deframer(False, 10000) # we skip CRC-16 check self.strip = pdu_head_tail(3, 16) # CCSDS descrambler self.pdu2tag = blocks.pdu_to_tagged_stream(blocks.byte_t, 'packet_len') self.unpack = blocks.packed_to_unpacked_bb(1, gr.GR_MSB_FIRST) self.scramble = digital.additive_scrambler_bb( 0xA9, 0xFF, 7, count=0, bits_per_byte=1, reset_tag_key='packet_len') self.pack = blocks.unpacked_to_packed_bb(1, gr.GR_MSB_FIRST) self.tag2pdu = blocks.tagged_stream_to_pdu(blocks.byte_t, 'packet_len') # Prevents passing codewords of incorrect size to the RS decoder self.length_filter = pdu_length_filter(33, 255) self.fec = decode_rs(False, 1) self.connect(self, self.slicer, self.nrzi, self.descrambler, self.deframer) self.msg_connect((self.deframer, 'out'), (self.strip, 'in')) self.msg_connect((self.strip, 'out'), (self.pdu2tag, 'pdus')) self.connect(self.pdu2tag, self.unpack, self.scramble, self.pack, self.tag2pdu) self.msg_connect((self.tag2pdu, 'pdus'), (self.length_filter, 'in')) self.msg_connect((self.length_filter, 'out'), (self.fec, 'in')) self.msg_connect((self.fec, 'out'), (self, 'out')) @classmethod def add_options(cls, parser): """ Adds OPS-SAT deframer specific options to the argparse parser """ parser.add_argument( '--verbose_rs', action='store_true', help='Verbose RS decoder') gr-satellites-4.4.0/python/components/deframers/qa_ao40_fec_deframer.py000077500000000000000000000145201414055407700262500ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, blocks, gr_unittest import numpy as np import pmt # bootstrap satellites module, even from build dir try: import python as satellites except ImportError: pass else: import sys sys.modules['satellites'] = satellites from satellites.components.deframers import ao40_fec_deframer class qa_ao40_fec_deframer(gr_unittest.TestCase): def setUp(self): file_base = __file__.rstrip('.py') self.symbols_path = file_base + '_symbols.f32' self.frame_path = file_base + '_frame.f32' self.post_viterbi_reference = [ 118, 72, 14, 192, 154, 13, 112, 188, 142, 51, 95, 173, 105, 181, 151, 206, 90, 144, 117, 197, 59, 162, 191, 59, 11, 17, 241, 200, 135, 226, 34, 67, 162, 31, 41, 162, 199, 160, 234, 36, 126, 45, 118, 156, 165, 148, 228, 214, 47, 177, 251, 145, 138, 229, 97, 136, 179, 203, 169, 215, 166, 138, 149, 114, 227, 48, 204, 3, 86, 21, 166, 242, 239, 57, 182, 97, 10, 21, 136, 145, 64, 135, 165, 150, 196, 210, 242, 48, 39, 13, 199, 63, 115, 109, 170, 28, 110, 232, 220, 142, 72, 120, 41, 141, 123, 194, 53, 125, 219, 170, 164, 125, 108, 186, 190, 65, 241, 21, 46, 102, 248, 70, 7, 12, 131, 196, 252, 69, 58, 29, 252, 127, 175, 30, 27, 157, 227, 243, 26, 128, 123, 163, 251, 204, 161, 251, 148, 140, 131, 65, 169, 18, 5, 31, 33, 134, 55, 209, 45, 30, 160, 33, 188, 19, 150, 58, 31, 65, 79, 74, 95, 25, 156, 178, 167, 127, 92, 188, 183, 29, 90, 224, 230, 200, 98, 68, 49, 201, 0, 21, 164, 176, 58, 59, 31, 140, 9, 158, 177, 45, 85, 43, 163, 103, 220, 208, 130, 182, 255, 223, 189, 151, 96, 80, 71, 234, 159, 142, 8, 127, 249, 221, 163, 188, 170, 115, 110, 21, 7, 140, 126, 29, 22, 158, 77, 234, 192, 52, 223, 232, 251, 149, 220, 207, 228, 94, 244, 5, 98, 122, 90, 74, 101, 213, 75, 255, 52, 42, 128, 128, 193, 143, 179, 55, 197, 105, 56, 98, 35, 68, 178, 131, 1, 113, 101, 128, 64, 13, 5, 165, 169, 159, 118, 179, 112, 92, 119, 194, 35, 141, 77, 129, 180, 19, 23, 247, 52, 38, 233, 32, 158, 11, 230, 188, 228, 96, 46, 155, 115, 28, 15, 212, 110, 122, 27, 135, 117, 22, 44, 27] self.frame_reference = [ 137, 0, 0, 0, 0, 0, 0, 0, 0, 31, 204, 0, 206, 2, 209, 0, 0, 7, 8, 9, 9, 0, 0, 5, 1, 1, 0, 64, 19, 47, 200, 242, 92, 143, 52, 35, 243, 186, 11, 93, 98, 116, 81, 199, 234, 250, 105, 74, 154, 159, 0, 9, 239, 160, 31, 244, 167, 234, 74, 198, 143, 17, 64, 17, 30, 16, 247, 1, 62, 32, 100, 0, 215, 139, 248, 215, 148, 200, 147, 168, 42, 218, 82, 166, 14, 88, 14, 200, 15, 78, 1, 29, 32, 90, 0, 219, 148, 168, 170, 138, 152, 19, 172, 105, 10, 166, 168, 16, 230, 16, 146, 15, 184, 1, 80, 32, 100, 0, 215, 150, 168, 193, 139, 72, 37, 171, 169, 202, 206, 157, 16, 118, 15, 201, 16, 85, 1, 58, 32, 90, 0, 215, 151, 41, 8, 140, 72, 79, 169, 106, 90, 242, 164, 16, 57, 15, 123, 15, 134, 1, 73, 32, 100, 0, 215, 148, 8, 208, 138, 216, 42, 173, 106, 90, 126, 180, 14, 83, 14, 155, 14, 183, 1, 9, 32, 90, 0, 219, 153, 168, 242, 143, 232, 56, 175, 170, 138, 194, 158, 14, 222, 15, 72, 14, 49, 1, 49, 32, 90, 0, 206, 155, 200, 255, 136, 104, 27, 178, 106, 90, 202, 167, 15, 195, 14, 116, 14, 88, 1, 52, 32, 90, 0, 215, 155, 57, 27, 151, 184, 197, 176, 43, 58, 214, 181, 1, 107, 0, 106, 2, 158, 0, 3, 32, 19, 0] self.tb = gr.top_block() def tearDown(self): self.tb = None def test_ao40_fec_deframer(self): """Test AO-40 FEC deframer Loads symbols from an AO-73 packet and checks if ao40_fec_deframer produces the expected output and intermediate data (stored in reference files)""" test_data = blocks.file_source(gr.sizeof_float, self.symbols_path) deframer = ao40_fec_deframer() dbg_sync = blocks.message_debug() dbg_deinterleave = blocks.message_debug() dbg_frame = blocks.message_debug() dbg_viterbi = blocks.message_debug() self.tb.connect(test_data, deframer) self.tb.msg_connect((deframer.deframer, 'out'), (dbg_sync, 'store')) self.tb.msg_connect((deframer.deinterleaver, 'out'), (dbg_deinterleave, 'store')) self.tb.msg_connect((deframer.viterbi_decoder, 'out'), (dbg_viterbi, 'store')) self.tb.msg_connect((deframer, 'out'), (dbg_frame, 'store')) self.tb.start() self.tb.wait() synced = pmt.f32vector_elements(pmt.cdr(dbg_sync.get_message(0))) synced_reference = np.fromfile(self.frame_path, dtype='float32') self.assertFloatTuplesAlmostEqual( synced, synced_reference, "synchronizer output doesn't match expected result") deinterleaved = pmt.f32vector_elements(pmt.cdr( dbg_deinterleave.get_message(0))) rows = 80 cols = 65 skip = 65 output_size = 5132 deinterleaved_reference = ( synced_reference.reshape((cols, rows)).transpose() .ravel()[skip:][:output_size]) self.assertFloatTuplesAlmostEqual( deinterleaved, deinterleaved_reference, "deinterleaver output doesn't match expected result") post_viterbi = pmt.u8vector_elements(pmt.cdr( dbg_viterbi.get_message(0))) post_viterbi_reference = np.unpackbits(np.array( self.post_viterbi_reference, dtype='uint8')) np.testing.assert_equal( post_viterbi, post_viterbi_reference, "Viterbi decoder output doesn't match expected result") frame = pmt.u8vector_elements(pmt.cdr(dbg_frame.get_message(0))) self.assertEqual( frame, self.frame_reference, "ao40_fec_deframer() final output doesn't match expected frame") if __name__ == '__main__': gr_unittest.run(qa_ao40_fec_deframer) gr-satellites-4.4.0/python/components/deframers/qa_ao40_fec_deframer_frame.f32000066400000000000000000000505001414055407700273570ustar00rootroot00000000000000n>nȾhgξ@47: N׾bžbD>Ͼ08>h?? 3?9|1?{%>ZZ:>O? (?l$?e7 ?J۽:S>s?L*b?>Wʾ''L?#?-?"?q}?fO?69?%)67>?K"˾Z/?R><?@ ?%>n]?.p?bK?w><$>>ľ!_M fO9?K?+?D>0?s>"?Sꟾ= >UMI$?V?վSp>)^f&>g:>?o?a1?#?,(??bж>0־'Vþw("?Ⱦv> ??>ߨp>Z>J5?>UUx-vI־>nd>Lrܾs$t>30ϾCw>kԾJ>%>´KS?^#??>眭>4y"*K+>+?2h??Ԍ>̾?$>>xA>`}#?,)#U]?hqW|>sK?6>8?k7>9o >UξO<>HK+&1?NW>C)a- 8?Ղ?GV4/f?dj ?†>Ϻ >>>2)?* ?9?u{#|)??=?wN?w=?fN7?OP?X?('?J7?t־;'?0?4?v[>/p> ?T(>~徑>龏S>Ж U)?eǾ¾P0D$?0>u=L?@>AOa(;^?پDvX>?V?ǾC=о]n>?k%>>yW<# VH>{?P.??J>Zɾ2n?Ҿ!?rn(C۾;E ?."?*>sWȾ>龲 ?`4>澡YȾA>`Cپz>,龰ofOß>s?*>( 2.(a\ ??뾤>=ɾžOپ?8?@M>^>}y ?1?A5?v/?bhhJl§-4  ?dھD>ھm>???)>Q)M4 Pe>7_?ɾ`)[b?xpĿ ?3>þ?4ɾ\3>>0 ??97Y]ÿ?eV Z>gq?Ă IYʾMk?K(?=վ7f ?N>;vL?A?ps!?]>);_ܾ þ?A!?+?JnG-:ù>E|?y>Ͼ_M¾>z>/?jp-?>i%B羁ツq?+l0?(;?_Xb??o??C8?N>꾝T>jRs 6}(?I|W݋ >ľ>^þ>ZIP?8?? ?[Ia?h? VO "O?L)D?0U?74?5?5T!?B~")?s?Zd&?Q߾3?/f?>͐1*c2@?>JF?α>;b>:r>0T>ZҾ>v2>3{;?%>lS 7K  !?CJ?#=?M>VU V |>r=?xq? ?eh ĤP2?9?TkҾ >Y ?;?,HM?t@H>Ѿn< ?AKr>*!?Pw>z"=Q>ѡv?p ؑ8=,!6><'?^G?S,&u%>7&ľrf%O>?t ?B\C?-?3A#>ž$$, <?F$?LA-?%e?)>.>?帾඙>>6>?>1e>@n=K08 ??X?1? ?n¾ʫ> ¾H?2? ?mb>~=?τ"?7I?sE?&r?K=۾C>͵Q>,???9&?>#?uH??\|1|;/Qڌ>2bU>qt??ᢂ>lC>*&?j??zzQ?,?V@S?P??J?H?2G?-)?5VS> M?\Z?~#0cHfM?W> fR?>g T ?&T?a5?z>bUԾm?h2'@"?-׾4[?KD?=?Z?E{m])?\Y^*>)???0?'s|*???L½h8)?}ܾΒ=־6?Hֺ[e-?A4?8>T??Ql%?E,K7?(?%?G>kϾʀ>8?ދT ?[?Nl ?65>C>qԾ#;־0e!1?4?Ź>:.ZJ%>&?cT>k-0&3߾_>|߾,%>4j4o) >?-l4?% ??zq;򿒾Ճ>Ɨ>lB ?/¾ 2?yWv>ZQ/>?v>(E> ?Hg?b >5@.H?>>PԾwr,׾I&?)mZ>0徤v}|?ž>?G#$3>ܪ.$$>pY> վSi8b?s?;L?VP>>־6???.?@?>?r[?ٙ?S'! F{Ծ.>߆qt?z!?&M?H=?d>1 ?WvAp?8ܾj>Tf;?%Y,zl޾g›w?,"HU>L&s?Џ??8 ?O@X!?/֌Jcy>(%׾D>z?œɾН?~ʥ>}> $ԲS'Qz絾->$1??>زL?I`?̶1??;M ?j>ɾ3>~FP?#?v[=?]? ?HZ߾T ?7O !=].K Ĵ>,3̾?¾fy>O&?4?>:0h>>. ?} ?#>sql' ?f>z>Z?Ĥ]<@$>Pj?5"?Ͼ>,$ ?>Zؾob[>  ?{?3k.?.7r!>Eϑ<>Յ ?&9? ,??-?#?%>~#V?2r>8k`OM̬`>*?>>,{,U.?B ?"WϾLd!>9L ܛz>o?q>}þ6 ɗz$BIQ?|r>qp߾VRz>O8$g6lR?>3ؾ= G>3 ?f>xZž;> ؽ>f>4 RQ {B?^?4 .50>@?*>?cy?Y??>;ھ Z! G?׆پ]־>BԼeOt/?BT$*G9?2?y>Ⱦᾠw? ?#><>yp >\þپj>?Df?i`$6'4>j1?/?#?cn ^! .?"?l+?R;>>9<5?PHQ8Zj?JʾB־ܺ>t6{?Ԣ ?^Ͼf'$?E3?2:E?`2?|?4~*<?!"?CR ?N+~ˊ~W3?`>%zg ?tL?od??x|; ?G`=?T?r?ڀ9_} ?FE?$E4-5?>#(? c?/>L? 4 ?*?S*? ??H?-tU?.WV|>\?Oj>+?p+?Td?ؾ̰:?oԾ>!IU>hu0~?">>C>4|) >Zl>f?͘ ?}>Z?mھ>} >AB lV?P+7?X.?6?;?!!?C'? ?N5?\1>09?>>>> ?$???FQ?,JՌ-?b ?e(- ?ʮ4ucR ξz>?i?u?g>?z?xg~?8W? ?%cE?C?{?`?[}yXG?}A]s\>3D?g}?1\?K?I+;"?|?=6?Ǿf>a>>4Ⱦ oc?[?plA?G'?&q8u |}?6?e.?Ļ>#J!?msϾM?"?/R? 6:?/?[gT?lU? .>!žr>gfVt>W5?U?a =K ?9??P?_ƾ|#޾.?%Xr%X?TϾBd` A>R9Kɾq,?]?@9?%!]Ҿ-񽯰9\>> 糾O?˭ ?11?޾`k>p=E@j ?Ǽt>y~[6VS*̑?a ܾn_->a?v# NI]n>>S*?s>l?%}>?<ѾJ]=?GZ?:Z> ?&?Ư>dQ?d0?n ,P*t9>(N?b3?y1?j~E?F(?J?d8Ɩb>M3?e1?!ϓ&?Y?V?F׾>)̓پ)!D־ >ϔ>Mg ,? .?*#??F#? }r?jI~?-ב>>7 v﫾T>Ev>D>C?? ?B? |ŵ^ "nȾW'Qg>&&?|$hU>pl 8?&` ?$D?d/T??Q+?i>eL??(?C;Uʾ)1?%E?Bؠhd>Qel>|P?/>W"L>E@>6 Bc?v+?⾉ *Ӿ0 ?!1?|VDD.&??2>tx>?pľܾ8?c?{ ?ޗS??6>&~;?t>!}j??>׬ 0H?E$?AE?Z䕾GP5t?b?>Guپ{2T?-C'?\$?$,?A?ݗ?Eⷾ8x>a?E>!Ox1ܾJD$ @?q> 4@<'о娒><#?z*|9㽘0@ 7i>ͯ? t=k5*?N˾3Y.>A; >q>T ?:7!?k?2ھp?؞? ?)??pE?P?#É(P>{VK?0? HSt:?`D!ҽ VF?d/,ſ>>Mrf+ھOaӾOd־~??<8>#p辧A>+?"-}׾d>~s>r"ʾKq9 9S?7?$!֫.9"?lԄ>;L11?[?e?eF?<?>e$H?IW?XW? ze?[M?jNؾJk PMnN> پ( ??R"? 9??> ?qq>`uS}>(??,w˾"7>?q?􏴾@>>  Y?B5i?1g?| :?Z/׾-?UľV?$ 3?cƾ>Z>(?jI?WJf>"?]+?)?8q0?F9Z>?,P #F,>h??y5>ZP?<_32p>6f?Ki?0 :?#žY>tK˾.$>ǠѾ9?D?ݾB?Hd|"?>???6> ?:N(=Ɖ73a?S\?=oX?7J>*+?z;q)?Jz>>M޾{>9>@oݾ&?a>껾xR ?9 ?w>KI? /?>d ??>1T&?uV?'{?.!,c>O>? ?8?* ,2+?4V*?%?ɣ8 ;bʾ'6?Lо>(?`Q@?rl_>9? >y{ d=<U1 ,&*>?ӸW?<?* /s>Um?{Y??s?4?#?iؾ #;6ޣ2<>o8? -??u?>(- /&4)yR?pW?5[־;$>9>궾w?g?>`>06?g,nsMx&?۫,?;d8*? ?k&?>?X?ȾG> ;?^2kȾ ?o?gu>"> e>h"?IK?9(>&?˶ ;>B?*Z1z??,ƾ>Ҿ!?#_2?E?hg2Ie_ľ}.溾?Q&?J?,X>?_*hPsD"$1X) 5?|,??b? BX $??>@V>B̈Yʁ=;-$>A(?2G? @? ?:ɾT ?rNz1=?,?)7?g$L\?k?)X!K?]?0"??Lwþ 1??'??m?oa ?[>Aþ|>[ >޷3:*c'?i.?I5dn? ?<5̹{)>8?qARcF?leG?/?*R.??~?H7ܾ-8"u.;?>;I??y ?1z ?Hm(/#?Im8?{?l[۾T5?YL-?r?6?I??3?xm>=K>N?#o%??"?"(?N?a>~]>> ?M?8.J?&,Q?2>?[)?4?8?$E?H$?德M׾iĵ>K־9?%?,=ȴ>ଜ; $???gC?P)>M;j0Bx-?c3P?`&ctV6?&?w4?j=?>O B ?ccؾžv>Y/?S??:?"?z&@?˓G?| Q/}F?Đ?>T>,{S߾m꾴?" ?6pϾK^>*?¦?(8>yQ>ƾl4)᱾3$6^¾?>*?s^]%ݾ2>$?"H?hWZʾ;1?m+aCɾ0>?7оXξ8ؾEY>?:6d˾޾F-?[~D?AN?k0?@`-?o:? :?=? Q>z,?brQD?TO -O?X0? ?8,ž_ C?4p؞L,>1ӾpPD? ?5v?Q9?]?T6ɾ'?GM?1?Sv(Р>`>>$GžU->K{׷>M<;p>]?A$5h;>pV?m X/E?)$?^? ҹ>>>mM?$?,H?/?D?:?Qն ?¿4?=q?b՜r>ճ1Tn>?R@ :Q>2$^t>`.?? ž>>3Ⱦp׾ܾ> H:Z^ESG /??>Z0_=>D?BG 1ിD>??!?1>zJ(??J ??"AM#z$?(t.57j.z?6p`(l ɽ>Cc4⾩2?QL﻾p>V?vS9??1?[ʎxn^0>>ْ⥝맾Wd-1=Vͦ>>)n>@),?:>V>r>>oȾ8> FP>!? r?,&q7???1?4lzrCM?o޾ʾm?W ?Y >2?>./?Sྷ>xkG7L>*{?1]l?*+?>3? ? ( >.NNl> k"?O:?>'>@1?P?r"׾>< վw?_?t1?]::>uվa(?!>:> G?L t>?2?6/ þ?T?`?)(о>"?5X>Ͼ+z?752R4y-^>af>P۽Q D>EþD1ιLG?J?:K?ewH?ľㆫT.}B>>4??>~>&;ž6>L2 ?7>֮?3%6y M?>5=*>n>/;>Y??>ѾjE?9?D->f ?Ok?G>&9><0#>T?^8B2?6D?N$?r?<=}׾!?>5;7>FL!پf>ᑍ>$媾jP ? #Ǿ%þ7@ H9?6=ήO?-? 6Ȱ ?,?kNY6l!vd\>칾F=Lr2>@?r?V%?53>4꾪>1Y HԾw>4=۾w#DWcm ?>1?0?@ >}l?s?e9?8{þMξm?%¾e>?z ?b>4 ;6Lp9?N6A>?,?!???(&r(&>q'?6$ >I3??9"?k> 侘?UbϾ<:@t(Bm> ̾>^$?L'?՟>r!?n~c#d@?׃?=FLbZ?2?R?r)پ8?N=` -Y6?lKQ[?,?Ȓ!J>K?+?L3?3C?f-?MXF?C?y Y?,je4澌-{N>>OL'S)?[?r>{U ?`9?C?v1,? .1?B?z'?J?S?DK?6?9پ^:ᾅ?Wo ?^??>9?+_ ?l#??z?4,?>0?X߾v?D?Z þ>zZ?־wt@J`*?Eg󶻾*?!jd_0?޾  ?0oe㾎  ?Q?MqaR5? u>9{#?w>+?eʾtҾ>ޮǾ_ ?- *?lA??$>?>o)?F??? ?H??>{¾ɈlR6?V?<?k?ڐ]>؀9?cB2IEw!¾0> ,3F>.39⇾`(??O?[H? U?4?Ҿ"??h+پ:[vپ ?#???}>tQS@ >'[n$>$?ľ#>?%?n >¾4C?+@?6, Y>7?_W?.޾Z> 德e.??v˾ ?- U?>пG> l羥G?hs?1Q?V? ;?]>J(??-:]?D2pD=@;>y>z ?:/x4?6?M ?( ?? ?e]>t{3&྄ > Ӿ*˾?:;?G,Z? ȾE4Kp仾@ ???,+H# W(h< 40?Ⱦ6 ?gQ?><? p>^H:?6"J? ?R@ 8c=^ 9Ⱦ;U>x:} ?t vo9>߾c?Ӓ°|Q?#+>j14RQf?z?axMX>F&&#> ҈9up㢾Q7sa?o>&>ܱ ?Y,>!gM?J7+?$ ?P!K?{l6?D?>8˾v>> ݾ.[#Ȳ?v7p bN֙>dE?`>d-X>M?Ѽ>1 v >ʔ|tk.9b?e]4?jH?w\H> 3f5?[UQ??(>JҾ^UY9?(&?y#?̾=>?+W????f>%fG]??>P z,׾%?" E{?C]H>)7? U?&>Mc??ܾ>Oe&?)2?O>\3> ?>GVʾhw?k?BQ~Kž ?lmS ~$?)J )C+??~'?.?x:?F$>X ]b>t:>P* ?=1?\? nxq?/M?(?aླAW0q7B?WH'T>:?YuVv!? 7.#? dрII>fS >J*N>0 \>r?U ?9?N?,^>l ?d?* S5EXO?|?n>Ʋ>޾*?s$?mH?0b?Ⱦ?,?fQ>X-~?2?$?j?>(`˾c?,??#>>_U-?NH ?D)?&??X-?=F???'?Ik㾉8)?آ1?? 9 ? ?&&?G>J%߾pB?uC?1?j%#Ͼ?ΗR?)?B>lo ?3?0S?sǾj=C8>۾"X>]Y˾:%(0>E޾v4Ҿo4 ?Q¬拽 ḾaU=O>n >>Ta>L^?ED?;C?)?gQ>ܿ?Ӿv?\ľ И?",?I?9<(>wB?ZLY 7|>ʾF29I0?ؾh>jHCi\X??Z[?tw>icξf?HꜿփMP,?K ?H;?Y)?y>|T>\2S8B?K4??M ? '?m>;??aɾx׾>a߾?q>C6 ?`?>$徃 U?iO?>ĩ ?t?=>?4 O>վ{Z#;̲>$RP/? &{dlkȾB@>Vh/R:?1?ʌȺI!?$#?:!?־>R< X?U? ??>FpJ%>>1? "?D?.s?~2>bI?>/*?iNj!?6?,y2k>M?E~? k=UϾ\H>]>>jg?i);*m> ?c+ ?u>>+>> +?:?D?,?U?*~a>վ0 $F%q ?F?e?H~?~F><2>rE?:ξGĦ)/>\iS? ?5(? :?P?0w#?k)?:?>꾙=?P49?Q?H>o@'?Pj>Ui1F'8'?`:??z:E+?) ?çhY>8?f>\)>c?-? ?V!*j?`s?x@?JC>ku¾?ܹ>ď>l?a??pj]о7ٌ>K >Dƾ(#?l> ξ!? ^?vԱlG?X'?N%?nV??˔*?K?k(>Ҿ~xoپF'?.?$q$?-Ε>d??9Ծ.j>7޾l!ϣ ?~0ѾP $ ?T7˾Z{9Q\ĸru*?R?;>߾H,ž䥜p޾lp??c?=<0s?|Wվ?!3?gF+E*]>O()??M̾JL>PMƾ?>ç־Έ>_{8񾂶 %>mR? _ n??>:>RR?`,h?(@?sG˾Z|>䨯 ?R+? ?#??HE,?gk.?pN>nC ,->!?H@־>5?#?Zj>fG?"j>nᾷ0?DC8ʗ;>a @>w?k־*>WY?jޘ>??%?7)S`a"?j3?B2s4?C?{Ŵ8 ???y((Cƾ" H>+A|?>D&T>h#u1?U?%?'?ෝ>?>8T *?>b ߝ?>Azþ] 3gȒk?%???(16*m!?) ?xV#^+s뮾>dF?-Ҿ†>ܾ84?.}?ݜ ?,`>P-m$?~H?NG?]? ?žѬ.?d?->>),f?+?/?M(?V+> Ҿ>`+?gE"`k>K;?a ?>0?\F?h>#!?S)?mܾx>U?>bȾ&.'Z ?^\x>S'?<)g ?F_/?P??.)??;F\?$`3"` f;XX?(:$FTx?1龈Jr> U ??/?JF?$-Ҿjn&Kྱ@Ͼ/v>"%w>jKþO_꾅#?X޾>>Tg>8X>;LJ>!?byd>NXH?¾MV?R9?)^ ?9?ZZ&?>W w ?=??Ǿ׎<?tV>߾w>lQ:p͝.L P?\)?>Ul ?hξ"K>OOC?rM?b>?ܾ$-??>& >_ ?d=ĴZo>@?QZ1e?V%>@?S$}?R e?>\1Ծ//lߝ>N#?_CL>`kW ?w ޾RKK>iHf9hÅ?\k>{?M?gѾѾˡ>R>|?v ?֦?P\?R?J!?>2[Ѿ%?~6Ҿ<> ?@&?&־埻xpV"?t=ʽ=s?l>`M{?H>,H ?@d'|ʟrľ?ɥ$&:?%뾪>K ?>z?x:6Ad>>g˾>&<%vO?G?0 ?O/$?*'?o.?L7?7?C?GX?E%>E?ӄ=lh> /߾.*>pokt>1???1?-=>'ȳE?vQÞ>3oB\K/Ԕ>F .z>:??( Z03O?Z?uP?E?Fn?`?_8?hd7?,K׾1&?f4?&?x?&??.>?%?r4f)? ?L6@?OM#??$V>ƒ+?>W?ɪ>Щ+E? ?>Ln,?'?D2@+?7?JDT.3? k>¾1!2 Il07[\>5?c_?)A?PP>]t(q6>}.N?b= ?ˁѾp[8,?a:?]?q>\~3?᪾p>sھi9 ?z,?>}Y[羰>)?K;> 0 T? #?4?v>@ܾdfd%?^)?AJ>A0S۾?xz!'?f>ld E;?N"+|>7?ʙ>~qgb\>`,)? K?h8 ?ju {|?/?P4?Bu23־N?9H?2?!N:Wžx ?ny#8>0'?(!?N tjNV>Tʾ y>[ԝN'>ާ ?jϾ{\ؽӾ9 ?X?$T?D?3?7L>;㽾a>q+ѾrA|w?!$?j)?p>*оu'>>pA?&`R!.y??"?b>Y(|}4 SJ"Ij ?4?? =?ܾp?; ?%>>#??ګ?F1?pپ/]>&??ϴ'?n (?K?&2> n?3? B&?P?_?*|?4z(?+ R? ]:?A?" ?y\ȾZ>XH婾پ,T ?0=?Q> Pƾױzr>Β־A?(~>zv$G.?i>}>g߾* ?";l>> ?= +?ě'<̮>LSX6E>M ?<>?Ħ?l) ?>'uǾ/\UQ8;IǾP%5?|7?v?| ?/0:i}ྕ V6>'? *?㹾<1[ԕi>9?V''+76??nCk>6m9>.2u?k̴LF?)?z?&?R?/]>a50"?/zWSѧ%?H?=(>>jaz?, o>'>m:Q5#|>?!!;#^Q?O?\U?h55?c/?^7? ~>I辅bjXH??B??͵?:?S>ɾs'??JmW>1Ѝ>e Ol.Ge.?P>i  ?^^&>})??\T?@t?7x>>` >:ھ`?R,?ZJ5?>K2J?zӾ1St)W>K ?“ ?_aݽ7?u>.?/0 #~ ?% 8.޾I='e[ ??-¾B¾">> ?8>"Ծc'- I*.čQοMU!fS${>H꾔K2?]4?V>\>4; =z)up ?/?[4?>1'˾G?2)??`3Ny>m$kŹ>g> >?LG?Y?7ve>L)?F>! I?Y?8I۳>2y ?_Y\+?H7W*>^a?LQ>?QXپ R>y~WE??7þ(?k^V?:&?t{.*Z!k>bc>xݾ?7lľ.+>sg>(?W*?XU'(#CK>JØ >$?)1?0K?2y"A?A?nM?==ޏh￾p?;?i > ? ?R?M_I>0>>A;>e߾}$M<!E-+(ؾ(?x+?SV1X?Hmp??ܾ>Jț1q N ?yGSR PdE91>FP>8?s*?Xq"Y>{D>?b3?oYzJ~Eq<:>>ٿ>ֶ> }x>^` ?>ƶ%X6@GR,?\ ?`>?K? UD>Ѿ6 x? <>Gо+žީ>{O[?9?&񾖞>J1NN>>P%!$?>RԾ>>پ@?VȾ'?k9?.'_?>o>+?rs?>؄"?þJݾ| ?ԩ>/?|v??G^?.?[?$?f2U?;w C?wU> }?k>ݹU]cľǾd2F>6-8߾wJ u8ϼRd?ҾM?_? ?>әF;;8M]7?zV1.<+>s>9o>G>>f0?+>Ǿ" ?_>(>6*)>>|jQ$!>tԾ\? 5`پl>~` 9>8:#((3>?4x7?ȾW?7?<0?Y5?" F?>G? H?;6? Y ?$K?V?D;z>?dɾ}?r?/L/>+?a#? n5n6#%?4'?- 6@}q>8: 96ڇ?\ ?v*?#$?%??6 >m̓?>e r^>V復F???__>U߯Z>n??8%?E>wP׾G)g).?}?(F?l-?`o4!?>>>۾ =ھ?"?/3?֗%?n&?g+Ze)^vҾ&f^þx?T>??<?P/?W3?x u6>h>> ؾZھ? K,?T> ! ?u ? @  a.]!?>=?$ҙ>側-?-u¾> nt4?x6 w9U ?X?C"?!?<?>e 4?L>)?6%+?{\׈NB >n ?^X?b$?d?Q%?g ?qU:K? GP?N*?r*?]?90?zqؾ\>?gr-satellites-4.4.0/python/components/deframers/qa_ao40_fec_deframer_symbols.f32000066400000000000000000000524501414055407700277630ustar00rootroot00000000000000 Ҿ(p쾐ޢJҾyM]2# luԾ4-ylhspr"̾ ؾ V:Nc˓ b;f'h(@w' ԾPO޾JW !,þSO.zj$5}%HB9/{Z/ 'JF 0ӻU!Z!1L.VӽHK#M!7 봽h'X{:95Uڹi?KX!uqRXȾ- 0ھo ׾Qx8 ʾl >>lO8@>j;?>Θξ;O$?p2?[!?>?GK?OE?l6?(?ȄF?4T:?3p˾پpb4E(?Ė,?6I?$.龊h>n>nȾhgξ@47: N׾bžbD>Ͼ08>h?? 3?9|1?{%>ZZ:>O? (?l$?e7 ?J۽:S>s?L*b?>Wʾ''L?#?-?"?q}?fO?69?%)67>?K"˾Z/?R><?@ ?%>n]?.p?bK?w><$>>ľ!_M fO9?K?+?D>0?s>"?Sꟾ= >UMI$?V?վSp>)^f&>g:>?o?a1?#?,(??bж>0־'Vþw("?Ⱦv> ??>ߨp>Z>J5?>UUx-vI־>nd>Lrܾs$t>30ϾCw>kԾJ>%>´KS?^#??>眭>4y"*K+>+?2h??Ԍ>̾?$>>xA>`}#?,)#U]?hqW|>sK?6>8?k7>9o >UξO<>HK+&1?NW>C)a- 8?Ղ?GV4/f?dj ?†>Ϻ >>>2)?* ?9?u{#|)??=?wN?w=?fN7?OP?X?('?J7?t־;'?0?4?v[>/p> ?T(>~徑>龏S>Ж U)?eǾ¾P0D$?0>u=L?@>AOa(;^?پDvX>?V?ǾC=о]n>?k%>>yW<# VH>{?P.??J>Zɾ2n?Ҿ!?rn(C۾;E ?."?*>sWȾ>龲 ?`4>澡YȾA>`Cپz>,龰ofOß>s?*>( 2.(a\ ??뾤>=ɾžOپ?8?@M>^>}y ?1?A5?v/?bhhJl§-4  ?dھD>ھm>???)>Q)M4 Pe>7_?ɾ`)[b?xpĿ ?3>þ?4ɾ\3>>0 ??97Y]ÿ?eV Z>gq?Ă IYʾMk?K(?=վ7f ?N>;vL?A?ps!?]>);_ܾ þ?A!?+?JnG-:ù>E|?y>Ͼ_M¾>z>/?jp-?>i%B羁ツq?+l0?(;?_Xb??o??C8?N>꾝T>jRs 6}(?I|W݋ >ľ>^þ>ZIP?8?? ?[Ia?h? VO "O?L)D?0U?74?5?5T!?B~")?s?Zd&?Q߾3?/f?>͐1*c2@?>JF?α>;b>:r>0T>ZҾ>v2>3{;?%>lS 7K  !?CJ?#=?M>VU V |>r=?xq? ?eh ĤP2?9?TkҾ >Y ?;?,HM?t@H>Ѿn< ?AKr>*!?Pw>z"=Q>ѡv?p ؑ8=,!6><'?^G?S,&u%>7&ľrf%O>?t ?B\C?-?3A#>ž$$, <?F$?LA-?%e?)>.>?帾඙>>6>?>1e>@n=K08 ??X?1? ?n¾ʫ> ¾H?2? ?mb>~=?τ"?7I?sE?&r?K=۾C>͵Q>,???9&?>#?uH??\|1|;/Qڌ>2bU>qt??ᢂ>lC>*&?j??zzQ?,?V@S?P??J?H?2G?-)?5VS> M?\Z?~#0cHfM?W> fR?>g T ?&T?a5?z>bUԾm?h2'@"?-׾4[?KD?=?Z?E{m])?\Y^*>)???0?'s|*???L½h8)?}ܾΒ=־6?Hֺ[e-?A4?8>T??Ql%?E,K7?(?%?G>kϾʀ>8?ދT ?[?Nl ?65>C>qԾ#;־0e!1?4?Ź>:.ZJ%>&?cT>k-0&3߾_>|߾,%>4j4o) >?-l4?% ??zq;򿒾Ճ>Ɨ>lB ?/¾ 2?yWv>ZQ/>?v>(E> ?Hg?b >5@.H?>>PԾwr,׾I&?)mZ>0徤v}|?ž>?G#$3>ܪ.$$>pY> վSi8b?s?;L?VP>>־6???.?@?>?r[?ٙ?S'! F{Ծ.>߆qt?z!?&M?H=?d>1 ?WvAp?8ܾj>Tf;?%Y,zl޾g›w?,"HU>L&s?Џ??8 ?O@X!?/֌Jcy>(%׾D>z?œɾН?~ʥ>}> $ԲS'Qz絾->$1??>زL?I`?̶1??;M ?j>ɾ3>~FP?#?v[=?]? ?HZ߾T ?7O !=].K Ĵ>,3̾?¾fy>O&?4?>:0h>>. ?} ?#>sql' ?f>z>Z?Ĥ]<@$>Pj?5"?Ͼ>,$ ?>Zؾob[>  ?{?3k.?.7r!>Eϑ<>Յ ?&9? ,??-?#?%>~#V?2r>8k`OM̬`>*?>>,{,U.?B ?"WϾLd!>9L ܛz>o?q>}þ6 ɗz$BIQ?|r>qp߾VRz>O8$g6lR?>3ؾ= G>3 ?f>xZž;> ؽ>f>4 RQ {B?^?4 .50>@?*>?cy?Y??>;ھ Z! G?׆پ]־>BԼeOt/?BT$*G9?2?y>Ⱦᾠw? ?#><>yp >\þپj>?Df?i`$6'4>j1?/?#?cn ^! .?"?l+?R;>>9<5?PHQ8Zj?JʾB־ܺ>t6{?Ԣ ?^Ͼf'$?E3?2:E?`2?|?4~*<?!"?CR ?N+~ˊ~W3?`>%zg ?tL?od??x|; ?G`=?T?r?ڀ9_} ?FE?$E4-5?>#(? c?/>L? 4 ?*?S*? ??H?-tU?.WV|>\?Oj>+?p+?Td?ؾ̰:?oԾ>!IU>hu0~?">>C>4|) >Zl>f?͘ ?}>Z?mھ>} >AB lV?P+7?X.?6?;?!!?C'? ?N5?\1>09?>>>> ?$???FQ?,JՌ-?b ?e(- ?ʮ4ucR ξz>?i?u?g>?z?xg~?8W? ?%cE?C?{?`?[}yXG?}A]s\>3D?g}?1\?K?I+;"?|?=6?Ǿf>a>>4Ⱦ oc?[?plA?G'?&q8u |}?6?e.?Ļ>#J!?msϾM?"?/R? 6:?/?[gT?lU? .>!žr>gfVt>W5?U?a =K ?9??P?_ƾ|#޾.?%Xr%X?TϾBd` A>R9Kɾq,?]?@9?%!]Ҿ-񽯰9\>> 糾O?˭ ?11?޾`k>p=E@j ?Ǽt>y~[6VS*̑?a ܾn_->a?v# NI]n>>S*?s>l?%}>?<ѾJ]=?GZ?:Z> ?&?Ư>dQ?d0?n ,P*t9>(N?b3?y1?j~E?F(?J?d8Ɩb>M3?e1?!ϓ&?Y?V?F׾>)̓پ)!D־ >ϔ>Mg ,? .?*#??F#? }r?jI~?-ב>>7 v﫾T>Ev>D>C?? ?B? |ŵ^ "nȾW'Qg>&&?|$hU>pl 8?&` ?$D?d/T??Q+?i>eL??(?C;Uʾ)1?%E?Bؠhd>Qel>|P?/>W"L>E@>6 Bc?v+?⾉ *Ӿ0 ?!1?|VDD.&??2>tx>?pľܾ8?c?{ ?ޗS??6>&~;?t>!}j??>׬ 0H?E$?AE?Z䕾GP5t?b?>Guپ{2T?-C'?\$?$,?A?ݗ?Eⷾ8x>a?E>!Ox1ܾJD$ @?q> 4@<'о娒><#?z*|9㽘0@ 7i>ͯ? t=k5*?N˾3Y.>A; >q>T ?:7!?k?2ھp?؞? ?)??pE?P?#É(P>{VK?0? HSt:?`D!ҽ VF?d/,ſ>>Mrf+ھOaӾOd־~??<8>#p辧A>+?"-}׾d>~s>r"ʾKq9 9S?7?$!֫.9"?lԄ>;L11?[?e?eF?<?>e$H?IW?XW? ze?[M?jNؾJk PMnN> پ( ??R"? 9??> ?qq>`uS}>(??,w˾"7>?q?􏴾@>>  Y?B5i?1g?| :?Z/׾-?UľV?$ 3?cƾ>Z>(?jI?WJf>"?]+?)?8q0?F9Z>?,P #F,>h??y5>ZP?<_32p>6f?Ki?0 :?#žY>tK˾.$>ǠѾ9?D?ݾB?Hd|"?>???6> ?:N(=Ɖ73a?S\?=oX?7J>*+?z;q)?Jz>>M޾{>9>@oݾ&?a>껾xR ?9 ?w>KI? /?>d ??>1T&?uV?'{?.!,c>O>? ?8?* ,2+?4V*?%?ɣ8 ;bʾ'6?Lо>(?`Q@?rl_>9? >y{ d=<U1 ,&*>?ӸW?<?* /s>Um?{Y??s?4?#?iؾ #;6ޣ2<>o8? -??u?>(- /&4)yR?pW?5[־;$>9>궾w?g?>`>06?g,nsMx&?۫,?;d8*? ?k&?>?X?ȾG> ;?^2kȾ ?o?gu>"> e>h"?IK?9(>&?˶ ;>B?*Z1z??,ƾ>Ҿ!?#_2?E?hg2Ie_ľ}.溾?Q&?J?,X>?_*hPsD"$1X) 5?|,??b? BX $??>@V>B̈Yʁ=;-$>A(?2G? @? ?:ɾT ?rNz1=?,?)7?g$L\?k?)X!K?]?0"??Lwþ 1??'??m?oa ?[>Aþ|>[ >޷3:*c'?i.?I5dn? ?<5̹{)>8?qARcF?leG?/?*R.??~?H7ܾ-8"u.;?>;I??y ?1z ?Hm(/#?Im8?{?l[۾T5?YL-?r?6?I??3?xm>=K>N?#o%??"?"(?N?a>~]>> ?M?8.J?&,Q?2>?[)?4?8?$E?H$?德M׾iĵ>K־9?%?,=ȴ>ଜ; $???gC?P)>M;j0Bx-?c3P?`&ctV6?&?w4?j=?>O B ?ccؾžv>Y/?S??:?"?z&@?˓G?| Q/}F?Đ?>T>,{S߾m꾴?" ?6pϾK^>*?¦?(8>yQ>ƾl4)᱾3$6^¾?>*?s^]%ݾ2>$?"H?hWZʾ;1?m+aCɾ0>?7оXξ8ؾEY>?:6d˾޾F-?[~D?AN?k0?@`-?o:? :?=? Q>z,?brQD?TO -O?X0? ?8,ž_ C?4p؞L,>1ӾpPD? ?5v?Q9?]?T6ɾ'?GM?1?Sv(Р>`>>$GžU->K{׷>M<;p>]?A$5h;>pV?m X/E?)$?^? ҹ>>>mM?$?,H?/?D?:?Qն ?¿4?=q?b՜r>ճ1Tn>?R@ :Q>2$^t>`.?? ž>>3Ⱦp׾ܾ> H:Z^ESG /??>Z0_=>D?BG 1ിD>??!?1>zJ(??J ??"AM#z$?(t.57j.z?6p`(l ɽ>Cc4⾩2?QL﻾p>V?vS9??1?[ʎxn^0>>ْ⥝맾Wd-1=Vͦ>>)n>@),?:>V>r>>oȾ8> FP>!? r?,&q7???1?4lzrCM?o޾ʾm?W ?Y >2?>./?Sྷ>xkG7L>*{?1]l?*+?>3? ? ( >.NNl> k"?O:?>'>@1?P?r"׾>< վw?_?t1?]::>uվa(?!>:> G?L t>?2?6/ þ?T?`?)(о>"?5X>Ͼ+z?752R4y-^>af>P۽Q D>EþD1ιLG?J?:K?ewH?ľㆫT.}B>>4??>~>&;ž6>L2 ?7>֮?3%6y M?>5=*>n>/;>Y??>ѾjE?9?D->f ?Ok?G>&9><0#>T?^8B2?6D?N$?r?<=}׾!?>5;7>FL!پf>ᑍ>$媾jP ? #Ǿ%þ7@ H9?6=ήO?-? 6Ȱ ?,?kNY6l!vd\>칾F=Lr2>@?r?V%?53>4꾪>1Y HԾw>4=۾w#DWcm ?>1?0?@ >}l?s?e9?8{þMξm?%¾e>?z ?b>4 ;6Lp9?N6A>?,?!???(&r(&>q'?6$ >I3??9"?k> 侘?UbϾ<:@t(Bm> ̾>^$?L'?՟>r!?n~c#d@?׃?=FLbZ?2?R?r)پ8?N=` -Y6?lKQ[?,?Ȓ!J>K?+?L3?3C?f-?MXF?C?y Y?,je4澌-{N>>OL'S)?[?r>{U ?`9?C?v1,? .1?B?z'?J?S?DK?6?9پ^:ᾅ?Wo ?^??>9?+_ ?l#??z?4,?>0?X߾v?D?Z þ>zZ?־wt@J`*?Eg󶻾*?!jd_0?޾  ?0oe㾎  ?Q?MqaR5? u>9{#?w>+?eʾtҾ>ޮǾ_ ?- *?lA??$>?>o)?F??? ?H??>{¾ɈlR6?V?<?k?ڐ]>؀9?cB2IEw!¾0> ,3F>.39⇾`(??O?[H? U?4?Ҿ"??h+پ:[vپ ?#???}>tQS@ >'[n$>$?ľ#>?%?n >¾4C?+@?6, Y>7?_W?.޾Z> 德e.??v˾ ?- U?>пG> l羥G?hs?1Q?V? ;?]>J(??-:]?D2pD=@;>y>z ?:/x4?6?M ?( ?? ?e]>t{3&྄ > Ӿ*˾?:;?G,Z? ȾE4Kp仾@ ???,+H# W(h< 40?Ⱦ6 ?gQ?><? p>^H:?6"J? ?R@ 8c=^ 9Ⱦ;U>x:} ?t vo9>߾c?Ӓ°|Q?#+>j14RQf?z?axMX>F&&#> ҈9up㢾Q7sa?o>&>ܱ ?Y,>!gM?J7+?$ ?P!K?{l6?D?>8˾v>> ݾ.[#Ȳ?v7p bN֙>dE?`>d-X>M?Ѽ>1 v >ʔ|tk.9b?e]4?jH?w\H> 3f5?[UQ??(>JҾ^UY9?(&?y#?̾=>?+W????f>%fG]??>P z,׾%?" E{?C]H>)7? U?&>Mc??ܾ>Oe&?)2?O>\3> ?>GVʾhw?k?BQ~Kž ?lmS ~$?)J )C+??~'?.?x:?F$>X ]b>t:>P* ?=1?\? nxq?/M?(?aླAW0q7B?WH'T>:?YuVv!? 7.#? dрII>fS >J*N>0 \>r?U ?9?N?,^>l ?d?* S5EXO?|?n>Ʋ>޾*?s$?mH?0b?Ⱦ?,?fQ>X-~?2?$?j?>(`˾c?,??#>>_U-?NH ?D)?&??X-?=F???'?Ik㾉8)?آ1?? 9 ? ?&&?G>J%߾pB?uC?1?j%#Ͼ?ΗR?)?B>lo ?3?0S?sǾj=C8>۾"X>]Y˾:%(0>E޾v4Ҿo4 ?Q¬拽 ḾaU=O>n >>Ta>L^?ED?;C?)?gQ>ܿ?Ӿv?\ľ И?",?I?9<(>wB?ZLY 7|>ʾF29I0?ؾh>jHCi\X??Z[?tw>icξf?HꜿփMP,?K ?H;?Y)?y>|T>\2S8B?K4??M ? '?m>;??aɾx׾>a߾?q>C6 ?`?>$徃 U?iO?>ĩ ?t?=>?4 O>վ{Z#;̲>$RP/? &{dlkȾB@>Vh/R:?1?ʌȺI!?$#?:!?־>R< X?U? ??>FpJ%>>1? "?D?.s?~2>bI?>/*?iNj!?6?,y2k>M?E~? k=UϾ\H>]>>jg?i);*m> ?c+ ?u>>+>> +?:?D?,?U?*~a>վ0 $F%q ?F?e?H~?~F><2>rE?:ξGĦ)/>\iS? ?5(? :?P?0w#?k)?:?>꾙=?P49?Q?H>o@'?Pj>Ui1F'8'?`:??z:E+?) ?çhY>8?f>\)>c?-? ?V!*j?`s?x@?JC>ku¾?ܹ>ď>l?a??pj]о7ٌ>K >Dƾ(#?l> ξ!? ^?vԱlG?X'?N%?nV??˔*?K?k(>Ҿ~xoپF'?.?$q$?-Ε>d??9Ծ.j>7޾l!ϣ ?~0ѾP $ ?T7˾Z{9Q\ĸru*?R?;>߾H,ž䥜p޾lp??c?=<0s?|Wվ?!3?gF+E*]>O()??M̾JL>PMƾ?>ç־Έ>_{8񾂶 %>mR? _ n??>:>RR?`,h?(@?sG˾Z|>䨯 ?R+? ?#??HE,?gk.?pN>nC ,->!?H@־>5?#?Zj>fG?"j>nᾷ0?DC8ʗ;>a @>w?k־*>WY?jޘ>??%?7)S`a"?j3?B2s4?C?{Ŵ8 ???y((Cƾ" H>+A|?>D&T>h#u1?U?%?'?ෝ>?>8T *?>b ߝ?>Azþ] 3gȒk?%???(16*m!?) ?xV#^+s뮾>dF?-Ҿ†>ܾ84?.}?ݜ ?,`>P-m$?~H?NG?]? ?žѬ.?d?->>),f?+?/?M(?V+> Ҿ>`+?gE"`k>K;?a ?>0?\F?h>#!?S)?mܾx>U?>bȾ&.'Z ?^\x>S'?<)g ?F_/?P??.)??;F\?$`3"` f;XX?(:$FTx?1龈Jr> U ??/?JF?$-Ҿjn&Kྱ@Ͼ/v>"%w>jKþO_꾅#?X޾>>Tg>8X>;LJ>!?byd>NXH?¾MV?R9?)^ ?9?ZZ&?>W w ?=??Ǿ׎<?tV>߾w>lQ:p͝.L P?\)?>Ul ?hξ"K>OOC?rM?b>?ܾ$-??>& >_ ?d=ĴZo>@?QZ1e?V%>@?S$}?R e?>\1Ծ//lߝ>N#?_CL>`kW ?w ޾RKK>iHf9hÅ?\k>{?M?gѾѾˡ>R>|?v ?֦?P\?R?J!?>2[Ѿ%?~6Ҿ<> ?@&?&־埻xpV"?t=ʽ=s?l>`M{?H>,H ?@d'|ʟrľ?ɥ$&:?%뾪>K ?>z?x:6Ad>>g˾>&<%vO?G?0 ?O/$?*'?o.?L7?7?C?GX?E%>E?ӄ=lh> /߾.*>pokt>1???1?-=>'ȳE?vQÞ>3oB\K/Ԕ>F .z>:??( Z03O?Z?uP?E?Fn?`?_8?hd7?,K׾1&?f4?&?x?&??.>?%?r4f)? ?L6@?OM#??$V>ƒ+?>W?ɪ>Щ+E? ?>Ln,?'?D2@+?7?JDT.3? k>¾1!2 Il07[\>5?c_?)A?PP>]t(q6>}.N?b= ?ˁѾp[8,?a:?]?q>\~3?᪾p>sھi9 ?z,?>}Y[羰>)?K;> 0 T? #?4?v>@ܾdfd%?^)?AJ>A0S۾?xz!'?f>ld E;?N"+|>7?ʙ>~qgb\>`,)? K?h8 ?ju {|?/?P4?Bu23־N?9H?2?!N:Wžx ?ny#8>0'?(!?N tjNV>Tʾ y>[ԝN'>ާ ?jϾ{\ؽӾ9 ?X?$T?D?3?7L>;㽾a>q+ѾrA|w?!$?j)?p>*оu'>>pA?&`R!.y??"?b>Y(|}4 SJ"Ij ?4?? =?ܾp?; ?%>>#??ګ?F1?pپ/]>&??ϴ'?n (?K?&2> n?3? B&?P?_?*|?4z(?+ R? ]:?A?" ?y\ȾZ>XH婾پ,T ?0=?Q> Pƾױzr>Β־A?(~>zv$G.?i>}>g߾* ?";l>> ?= +?ě'<̮>LSX6E>M ?<>?Ħ?l) ?>'uǾ/\UQ8;IǾP%5?|7?v?| ?/0:i}ྕ V6>'? *?㹾<1[ԕi>9?V''+76??nCk>6m9>.2u?k̴LF?)?z?&?R?/]>a50"?/zWSѧ%?H?=(>>jaz?, o>'>m:Q5#|>?!!;#^Q?O?\U?h55?c/?^7? ~>I辅bjXH??B??͵?:?S>ɾs'??JmW>1Ѝ>e Ol.Ge.?P>i  ?^^&>})??\T?@t?7x>>` >:ھ`?R,?ZJ5?>K2J?zӾ1St)W>K ?“ ?_aݽ7?u>.?/0 #~ ?% 8.޾I='e[ ??-¾B¾">> ?8>"Ծc'- I*.čQοMU!fS${>H꾔K2?]4?V>\>4; =z)up ?/?[4?>1'˾G?2)??`3Ny>m$kŹ>g> >?LG?Y?7ve>L)?F>! I?Y?8I۳>2y ?_Y\+?H7W*>^a?LQ>?QXپ R>y~WE??7þ(?k^V?:&?t{.*Z!k>bc>xݾ?7lľ.+>sg>(?W*?XU'(#CK>JØ >$?)1?0K?2y"A?A?nM?==ޏh￾p?;?i > ? ?R?M_I>0>>A;>e߾}$M<!E-+(ؾ(?x+?SV1X?Hmp??ܾ>Jț1q N ?yGSR PdE91>FP>8?s*?Xq"Y>{D>?b3?oYzJ~Eq<:>>ٿ>ֶ> }x>^` ?>ƶ%X6@GR,?\ ?`>?K? UD>Ѿ6 x? <>Gо+žީ>{O[?9?&񾖞>J1NN>>P%!$?>RԾ>>پ@?VȾ'?k9?.'_?>o>+?rs?>؄"?þJݾ| ?ԩ>/?|v??G^?.?[?$?f2U?;w C?wU> }?k>ݹU]cľǾd2F>6-8߾wJ u8ϼRd?ҾM?_? ?>әF;;8M]7?zV1.<+>s>9o>G>>f0?+>Ǿ" ?_>(>6*)>>|jQ$!>tԾ\? 5`پl>~` 9>8:#((3>?4x7?ȾW?7?<0?Y5?" F?>G? H?;6? Y ?$K?V?D;z>?dɾ}?r?/L/>+?a#? n5n6#%?4'?- 6@}q>8: 96ڇ?\ ?v*?#$?%??6 >m̓?>e r^>V復F???__>U߯Z>n??8%?E>wP׾G)g).?}?(F?l-?`o4!?>>>۾ =ھ?"?/3?֗%?n&?g+Ze)^vҾ&f^þx?T>??<?P/?W3?x u6>h>> ؾZھ? K,?T> ! ?u ? @  a.]!?>=?$ҙ>側-?-u¾> nt4?x6 w9U ?X?C"?!?<?>e 4?L>)?6%+?{\׈NB >n ?^X?b$?d?Q%?g ?qU:K? GP?N*?r*?]?90?zqؾ\>?ҋ@g {׾<EǍdRfh KR^(hKj&b?Ծ=۾x@u ,=}ϾD#ؾ3.7ɾ5&ԾX p"K頾z־0 V۾{~"(2:h :2gB0X iM + zm˾ mо n=2(\ 3YkV0Q' ?u~hI6D:86'܊Ҿ3`X۾U8㛾Å;3澡#ANoт7~ľiwO=*]icǽ0|е,g>?t(ӾQݾgr-satellites-4.4.0/python/components/deframers/qa_usp_deframer.py000077500000000000000000000137771414055407700255140ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2021 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, blocks, gr_unittest import numpy as np import pmt # bootstrap satellites module, even from build dir try: import python as satellites except ImportError: pass else: import sys sys.modules['satellites'] = satellites from satellites.components.deframers import usp_deframer class qa_usp_deframer(gr_unittest.TestCase): def setUp(self): frame_long = """ 24 c8 d6 9c 06 17 78 af 8c f5 8d 82 57 a5 36 8e 58 c2 fa 4f ec bd 1a 64 95 5b 91 77 97 ce a8 09 f5 26 3e 74 a1 21 96 4c 8a 08 11 ec cf 08 8f bc 30 9f 88 7f 77 d3 8f b2 cf 77 07 59 c7 09 47 16 a5 ce 36 59 e8 ee 9a c7 80 69 23 35 26 3e ad 3a e4 53 21 08 12 bc 1f 43 46 4d c6 c2 8b e2 27 7c 4f fb f6 09 50 5e de 51 1c 3c 90 0e 66 e1 58 aa 0c 5b d5 da 18 75 f9 cb 3d d2 ec a7 f3 02 db 5a 97 38 d9 67 a3 ba 6b 1e 01 a4 8c d4 98 fa b4 eb 91 4c 84 20 4a f0 7d 0d 19 37 1b 0a 2c d6 bf 1f c7 10 cb 95 08 ae 91 05 be 3b fb 93 50 49 ad 3a 06 d8 62 5e 78 7a 9d b5 9c 48 0e ef c2 c1 6a 6a 85 75 d6 f6 f2 54 ce c0 c9 8a 95 cb e4 4a a3 74 5a f1 3c 68 6f 25 79 38 49 c8 8f b1 9f 92 77 c4 ff bf 60 95 05 ed e5 11 c3 c9 00 e6 6e 15 8a a0 c5 bd 5d a1 87 5f 9c b3 dd 2e ca 7f 30 2d b5 a9 73 8d 96 7a 3b a6 b1 e0 1a 48 cd 49 8f ab 4e b9 14 c8 42 04 af 07 d0 d1 93 71 b0 a2 f8 89 df 13 fe fd 82 54 17 b7 94 47 0f 24 03 99 b8 56 2a 83 16 f5 76 86 1d 7e 72 cf 74 bb 29 fc c0 b6 d6 a5 ce 36 59 e8 ee 9a c7 80 69 23 35 26 3e ad 3a e4 53 21 08 12 bc 1f 43 46 4d c6 c2 8b e2 27 7c 4f fb f6 09 50 5e de 51 1c 3c 90 0e 66 e1 58 aa 0c 5b d5 da 18 75 f9 cb 3d d2 ec a7 f3 02 db 5a 97 38 d9 67 a3 ba 6b 1e 01 a4 8c d4 98 fa b4 eb 91 4c 84 20 4a f0 7d 0d 19 37 1b 0a 2f 88 9d f1 3f ef d8 25 41 7b 79 44 70 f2 40 39 9b 85 62 a8 31 6f 57 68 61 d7 e7 2c f7 4b b2 9f cc 0b 6d 6a 5c e3 65 9e 8e e9 ac 75 48 a5 8a 95 f3 a4 12 87 01 0f 08 58 d8 fc 00 a1 9e 32 26 33 e3 00 c4 10 a0 df b5 3a b4 07 09 49 0b 27 d9 37 cf e9 59 8d 8c 93 65 49 05 01 70 b8 c5 d8 07 d0 ea b5 a4 06 46 eb 3a c8 05 f9 f3 """ frame_long = frame_long.replace(' ', '').replace('\n', '') self.frame_long = np.frombuffer(bytes.fromhex(frame_long), dtype='uint8') frame_short = """ 71 9d 83 c9 53 42 2d fa 8c f5 8d 82 6c 61 8a fe 58 c2 fa 4f ec bd 1a 64 95 5b 91 77 97 ce a8 09 f5 26 3e 74 a1 21 96 4c 8a 08 11 ec cf 08 8f bc e9 3f 50 49 a0 a3 8f b2 cf 77 07 59 fc cd fb 66 a5 ce 38 9d 1e 1b a1 9d 6f 57 8a 30 b3 04 b8 42 0a 8a c5 48 7f 98 18 3f a8 1d d8 8d 4f da 01 cc 4f fb f6 09 50 5e de 51 cb ba 35 b5 15 53 35 10 56 42 4d 4c bc b4 1e 52 4f 8a 5b f4 f7 2e 07 c9 5d 1e 20 5e d0 4c 7f 1f 13 1c 76 15 d9 46 b6 2d 75 51 c5 7e f8 50 72 67 42 5a 04 1e 6a e0 1a 7e 9d d0 29 f1 57 2c 20 fb 9e 20 1e fe ff ff f9 12 a0 d6 2d 46 76 1f 8d ee de f8 63 67 20 8c 8c bb 05 a7 95 0a d9 8b 4c 14 19 7b 07 29 46 99 5e 3c e5 e2 da ab 03 7c b5 25 53 14 ad e7 2b 61 ff 37 9e c8 d1 b3 8e db f8 6d 2c db f7 8e ed 31 b6 ab 5f 34 27 6e a5 1f 7b 31 b5 eb 6e 74 23 dc 5a bf 45 41 53 64 ad d5 9d 59 f2 2e e5 39 d6 e8 de b5 6b da 8b 84 3d b1 56 9f 51 4a c9 9d c6 34 7a aa 07 e4 bc 43 43 3d c5 9b 5b f1 8b 58 54 53 bb 59 c6 72 57 31 e3 83 af 4d d4 c5 68 4e 6e 7a 15 36 9e 3a 46 d0 4b c8 ae 7d 1b c4 f4 eb 65 87 49 ba 6f 9a 51 90 22 9e 12 95 ec b4 42 4a 85 76 5e 4f 49 50 83 4f 26 ea 29 5d a9 56 d3 24 b2 5c cd 1b ba 9e db d2 3b 72 1d 16 5b d1 57 72 ec 21 e6 7d 91 57 56 8a 0a dd 9a c2 a2 b7 b5 3d bb 11 bc 82 e9 9a 83 8d 8f 90 14 1b da c4 56 ca 2b b3 aa 9a 7b d2 49 2e cd 46 78 aa 6b f0 66 0f 64 cb 16 60 07 e6 55 12 67 2d 18 6a 17 12 92 db 25 97 69 45 b5 43 16 93 56 94 75 a1 fa a2 67 4e e8 d8 42 87 3b 2b e0 6b 5b 17 06 17 54 e4 c4 d6 d6 4b 7d 22 4f 33 2f b2 d2 59 45 49 ca b4 a5 53 c2 96 21 29 ec 88 a9 37 c3 0b 5e 58 c5 26 9c c2 ae a4 c4 4a 7a cc c0 74 1d 09 """ frame_short = frame_short.replace(' ', '').replace('\n', '') self.frame_short = np.frombuffer(bytes.fromhex(frame_short), dtype='uint8') self.frames = (self.frame_long, self.frame_short) frame_long_out = """ a464829c8c4060a4a66060a6406f00f01642020001004200000000 000000000000000000000000000000000000000000000000000000 000000000000000000000000000000001b1bff671f20250eaab140 60f43c01002400f01c """ frame_long_out = frame_long_out.replace('\n', '') self.frame_long_out = np.frombuffer(bytes.fromhex(frame_long_out), dtype='uint8') frame_short_out = """ a464829c8c4060a4a66060a6406f00f0e1ff020001000300002606 """ frame_short_out = frame_short_out.replace('\n', '') self.frame_short_out = np.frombuffer(bytes.fromhex(frame_short_out), dtype='uint8') self.frames_out = (self.frame_long_out, self.frame_short_out) self.sync = np.array([80, 114, 246, 75, 45, 144, 177, 245], dtype='uint8') self.tb = gr.top_block() def tearDown(self): self.tb = None def test_usp_fec_deframer(self): """Inserts a long and a short frame in the USP deframer It also check that the output is correct""" frames = [np.concatenate([self.sync, f, np.zeros(1500, dtype='uint8')]) for f in self.frames] frames = [2 * np.unpackbits(f).astype('float32') - 1 for f in frames] frames = np.concatenate(frames) vector = blocks.vector_source_f(frames, False, 1, []) deframer = usp_deframer() dbg = blocks.message_debug() self.tb.connect(vector, deframer) self.tb.msg_connect((deframer, 'out'), (dbg, 'store')) self.tb.start() self.tb.wait() for j, frame in enumerate(self.frames_out): out = np.array(pmt.u8vector_elements(pmt.cdr(dbg.get_message(j))), dtype='uint8') np.testing.assert_equal(out, frame, 'Output frame does not match') if __name__ == '__main__': gr_unittest.run(qa_usp_deframer) gr-satellites-4.4.0/python/components/deframers/reaktor_hello_world_deframer.py000066400000000000000000000051011414055407700302400ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, digital from ... import check_cc11xx_crc, cc11xx_packet_crop, pdu_head_tail from ...hier.pn9_scrambler import pn9_scrambler from ...hier.sync_to_pdu_packed import sync_to_pdu_packed from ...utils.options_block import options_block _syncword = '00110101001011100011010100101110' class reaktor_hello_world_deframer(gr.hier_block2, options_block): """ Hierarchical block to deframe the Reaktor Hello World custom framing This framing is based in a TI CC1125 transceiver with a PN9 scrambler, and a CRC-16. The input is a float stream of soft symbols. The output are PDUs with frames. Args: syncword_threshold: number of bit errors allowed in syncword (int) options: Options from argparse """ def __init__(self, syncword_threshold=None, options=None): gr.hier_block2.__init__( self, 'reaktor_hello_world_deframer', gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(0, 0, 0)) options_block.__init__(self, options) self.message_port_register_hier_out('out') if syncword_threshold is None: syncword_threshold = self.options.syncword_threshold self.slicer = digital.binary_slicer_fb() self.deframer = sync_to_pdu_packed( packlen=255, sync=_syncword, threshold=syncword_threshold) self.scrambler = pn9_scrambler() self.crop = cc11xx_packet_crop(True) self.crc = check_cc11xx_crc(self.options.verbose_crc) self.crop2 = pdu_head_tail(3, 1) self.connect(self, self.slicer, self.deframer) self.msg_connect((self.deframer, 'out'), (self.scrambler, 'in')) self.msg_connect((self.scrambler, 'out'), (self.crop, 'in')) self.msg_connect((self.crop, 'out'), (self.crc, 'in')) self.msg_connect((self.crc, 'ok'), (self.crop2, 'in')) self.msg_connect((self.crop2, 'out'), (self, 'out')) _default_sync_threshold = 4 @classmethod def add_options(cls, parser): """ Adds Reaktor Hello World deframer options to the argparse parser """ parser.add_argument( '--syncword_threshold', type=int, default=cls._default_sync_threshold, help='Syncword bit errors [default=%(default)r]') parser.add_argument( '--verbose_crc', action='store_true', help='Verbose CRC decoder') gr-satellites-4.4.0/python/components/deframers/sat_3cat_1_deframer.py000066400000000000000000000044601414055407700261270ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, digital from ... import decode_rs from ...hier.pn9_scrambler import pn9_scrambler from ...hier.sync_to_pdu_packed import sync_to_pdu_packed from ...utils.options_block import options_block _syncword = '11010011100100011101001110010001' class sat_3cat_1_deframer(gr.hier_block2, options_block): """ Hierarchical block to deframe the 3CAT-1 custom framing This framing is based in a Texas Intruments CC1101 transceiver with a PN9 scrambler, and a (255,223) Reed-Solomon code The input is a float stream of soft symbols. The output are PDUs with frames. Args: syncword_threshold: number of bit errors allowed in syncword (int) options: Options from argparse """ def __init__(self, syncword_threshold=None, options=None): gr.hier_block2.__init__( self, 'sat_3cat_1_deframer', gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(0, 0, 0)) options_block.__init__(self, options) self.message_port_register_hier_out('out') if syncword_threshold is None: syncword_threshold = self.options.syncword_threshold self.slicer = digital.binary_slicer_fb() self.deframer = sync_to_pdu_packed( packlen=255, sync=_syncword, threshold=syncword_threshold) self.scrambler = pn9_scrambler() self.rs = decode_rs(8, 0x11d, 1, 1, 32, 1) self.connect(self, self.slicer, self.deframer) self.msg_connect((self.deframer, 'out'), (self.scrambler, 'in')) self.msg_connect((self.scrambler, 'out'), (self.rs, 'in')) self.msg_connect((self.rs, 'out'), (self, 'out')) _default_sync_threshold = 4 @classmethod def add_options(cls, parser): """ Adds 3CAT-1 deframer specific options to the argparse parser """ parser.add_argument( '--syncword_threshold', type=int, default=cls._default_sync_threshold, help='Syncword bit errors [default=%(default)r]') parser.add_argument( '--verbose_rs', action='store_true', help='Verbose RS decoder') gr-satellites-4.4.0/python/components/deframers/smogp_ra_deframer.py000066400000000000000000000056771414055407700260300ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, digital from ... import decode_ra_code, check_tt64_crc from ...hier.sync_to_pdu_soft import sync_to_pdu_soft from ...utils.options_block import options_block _syncword = '0010110111010100' _syncword_new = '001011011101010001100011110001010011010110011001' fec_sizes = {128: 260, 256: 514} class smogp_ra_deframer(gr.hier_block2, options_block): """ Hierarchical block to deframe the SMOG-P RA FEC frames The input is a float stream of soft symbols. The output are PDUs with frames. Args: frame_size: size of the frame before FEC (int) new_protocol: enable new protocol used in SMOG-1 (bool) syncword_threshold: number of bit errors allowed in syncword (int) options: Options from argparse """ def __init__(self, frame_size, new_protocol=False, syncword_threshold=None, options=None): gr.hier_block2.__init__( self, 'smogp_ra_deframer', gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(0, 0, 0)) options_block.__init__(self, options) self.message_port_register_hier_out('out') if syncword_threshold is None: syncword_threshold = self.options.ra_syncword_threshold if syncword_threshold < 0: syncword_threshold = (self._default_sync_threshold_new if new_protocol else self._default_sync_threshold_old) syncword = _syncword_new if new_protocol else _syncword self.deframer = sync_to_pdu_soft( packlen=fec_sizes[frame_size] * 8, sync=syncword, threshold=syncword_threshold) self.fec = decode_ra_code(frame_size) if new_protocol: # CRC-16 ARC self.crc = check_tt64_crc( verbose=self.options.verbose_crc, packet_len=None, strip=False) self.connect(self, self.deframer) self.msg_connect((self.deframer, 'out'), (self.fec, 'in')) if new_protocol: self.msg_connect((self.fec, 'out'), (self.crc, 'in')) self.msg_connect((self.crc, 'ok'), (self, 'out')) else: self.msg_connect((self.fec, 'out'), (self, 'out')) _default_sync_threshold = -1 _default_sync_threshold_old = 0 _default_sync_threshold_new = 6 @classmethod def add_options(cls, parser): """ Adds SMOG-P RA deframer specific options to the argparse parser """ parser.add_argument( '--ra_syncword_threshold', type=int, default=cls._default_sync_threshold, help='RA syncword bit errors [default=%(default)r]') parser.add_argument( '--verbose_crc', action='store_true', help='Verbose CRC decoder') gr-satellites-4.4.0/python/components/deframers/smogp_signalling_deframer.py000066400000000000000000000045571414055407700275510ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, digital from ...hier.sync_to_pdu_packed import sync_to_pdu_packed from ...utils.options_block import options_block _syncword = '0010110111010100100101111111110111010011011110110000111100011111' _syncword_tx = ( '0010110111010100101000111001111000011010010101010110101111001011') class smogp_signalling_deframer(gr.hier_block2, options_block): """ Hierarchical block to deframe the SMOG-P signalling frames The input is a float stream of soft symbols. The output are PDUs with signalling frames. Args: new_protocol: enable new protocol used in SMOG-1 (bool) syncword_threshold: number of bit errors allowed in syncword (int) options: Options from argparse """ def __init__(self, new_protocol=False, syncword_threshold=None, options=None): gr.hier_block2.__init__( self, 'smogp_signalling_deframer', gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(0, 0, 0)) options_block.__init__(self, options) self.message_port_register_hier_out('out') if syncword_threshold is None: syncword_threshold = self.options.signalling_syncword_threshold self.slicer = digital.binary_slicer_fb() self.deframer = sync_to_pdu_packed( packlen=64, sync=_syncword, threshold=syncword_threshold) if new_protocol: self.deframer_tx = sync_to_pdu_packed( packlen=64, sync=_syncword_tx, threshold=syncword_threshold) self.connect(self, self.slicer, self.deframer) self.msg_connect((self.deframer, 'out'), (self, 'out')) if new_protocol: self.connect(self.slicer, self.deframer_tx) self.msg_connect((self.deframer_tx, 'out'), (self, 'out')) _default_sync_threshold = 8 @classmethod def add_options(cls, parser): """ Adds SMOG-P signalling deframer specific options to the argparse parser """ parser.add_argument( '--signalling_syncword_threshold', type=int, default=cls._default_sync_threshold, help='Signalling syncword bit errors [default=%(default)r]') gr-satellites-4.4.0/python/components/deframers/snet_deframer.py000066400000000000000000000041541414055407700251570ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, blocks, digital from ... import snet_deframer as deframer from ...hier.sync_to_pdu import sync_to_pdu from ...utils.options_block import options_block _syncword = '00000100110011110101111111001000' class snet_deframer(gr.hier_block2, options_block): """ Hierarchical block to deframe the S-NET custom framing. The input is a float stream of soft symbols. The output are PDUs with frames. Args: buggy_crc: use buggy CRC implementation of S-NET syncword_threshold: number of bit errors allowed in syncword (int) options: Options from argparse """ def __init__(self, buggy_crc=True, syncword_threshold=None, options=None): gr.hier_block2.__init__( self, 'snet_deframer', gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(0, 0, 0)) options_block.__init__(self, options) self.message_port_register_hier_out('out') if syncword_threshold is None: syncword_threshold = self.options.syncword_threshold self.slicer = digital.binary_slicer_fb() self.deframer = sync_to_pdu( packlen=8 * 512, sync=_syncword, threshold=syncword_threshold) self.fec = deframer(self.options.verbose_fec, buggy_crc=buggy_crc) self.connect(self, self.slicer, self.deframer) self.msg_connect((self.deframer, 'out'), (self.fec, 'in')) self.msg_connect((self.fec, 'out'), (self, 'out')) _default_sync_threshold = 4 @classmethod def add_options(cls, parser): """ Adds S-NET deframer specific options to the argparse parser """ parser.add_argument( '--syncword_threshold', type=int, default=cls._default_sync_threshold, help='Syncword bit errors [default=%(default)r]') parser.add_argument( '--verbose_fec', action='store_true', help='Verbose FEC decoder') gr-satellites-4.4.0/python/components/deframers/swiatowid_deframer.py000066400000000000000000000046551414055407700262260ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, digital from ... import ( reflect_bytes, swiatowid_packet_crop, swiatowid_packet_split, decode_rs) from ...hier.sync_to_pdu_packed import sync_to_pdu_packed from ...utils.options_block import options_block _syncword = '01011011010110111101110111011101' class swiatowid_deframer(gr.hier_block2, options_block): """ Hierarchical block to deframe the Swiatowid custom image protocol The input is a float stream of soft symbols. The output are PDUs with image frames. Args: syncword_threshold: number of bit errors allowed in syncword (int) options: Options from argparse """ def __init__(self, syncword_threshold=None, options=None): gr.hier_block2.__init__( self, 'swiatowid_deframer', gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(0, 0, 0)) options_block.__init__(self, options) self.message_port_register_hier_out('out') if syncword_threshold is None: syncword_threshold = self.options.syncword_threshold self.slicer = digital.binary_slicer_fb() self.deframer = sync_to_pdu_packed( packlen=8200, sync=_syncword, threshold=syncword_threshold) self.reflect = reflect_bytes() self.crop = swiatowid_packet_crop() self.split = swiatowid_packet_split() self.rs = decode_rs(8, 0x11d, 0, 1, 10, 1) self.connect(self, self.slicer, self.deframer) self.msg_connect((self.deframer, 'out'), (self.reflect, 'in')) self.msg_connect((self.reflect, 'out'), (self.crop, 'in')) self.msg_connect((self.crop, 'out'), (self.split, 'in')) self.msg_connect((self.split, 'out'), (self.rs, 'in')) self.msg_connect((self.rs, 'out'), (self, 'out')) _default_sync_threshold = 0 @classmethod def add_options(cls, parser): """ Adds Swiatowid deframer specific options to the argparse parser """ parser.add_argument( '--syncword_threshold', type=int, default=cls._default_sync_threshold, help='Syncword bit errors [default=%(default)r]') parser.add_argument( '--verbose_rs', action='store_true', help='Verbose RS decoder') gr-satellites-4.4.0/python/components/deframers/tt64_deframer.py000066400000000000000000000043761414055407700250150ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, digital from ... import decode_rs, check_tt64_crc from ...hier.sync_to_pdu_packed import sync_to_pdu_packed from ...utils.options_block import options_block _syncword = '0010110111010100' class tt64_deframer(gr.hier_block2, options_block): """ Hierarchical block to deframe the TT-64 framing, used by QB50 AT04 Pegasus The input is a float stream of soft symbols. The output are PDUs with frames. Args: syncword_threshold: number of bit errors allowed in syncword (int) options: Options from argparse """ def __init__(self, syncword_threshold=None, options=None): gr.hier_block2.__init__( self, 'tt64_deframer', gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(0, 0, 0)) options_block.__init__(self, options) self.message_port_register_hier_out('out') if syncword_threshold is None: syncword_threshold = self.options.syncword_threshold self.slicer = digital.binary_slicer_fb() self.deframer = sync_to_pdu_packed( packlen=64, sync=_syncword, threshold=syncword_threshold) self.rs = decode_rs(8, 0x11d, 1, 1, 16, 1) self.crc = check_tt64_crc(self.options.verbose_crc) self.connect(self, self.slicer, self.deframer) self.msg_connect((self.deframer, 'out'), (self.rs, 'in')) self.msg_connect((self.rs, 'out'), (self.crc, 'in')) self.msg_connect((self.crc, 'ok'), (self, 'out')) _default_sync_threshold = 1 @classmethod def add_options(cls, parser): """ Adds Astrocast 9k6 deframer specific options to the argparse parser """ parser.add_argument( '--syncword_threshold', type=int, default=cls._default_sync_threshold, help='Syncword bit errors [default=%(default)r]') parser.add_argument( '--verbose_rs', action='store_true', help='Verbose RS decoder') parser.add_argument( '--verbose_crc', action='store_true', help='Verbose CRC decoder') gr-satellites-4.4.0/python/components/deframers/u482c_deframer.py000066400000000000000000000040701414055407700250500ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, digital from ... import u482c_decode from ...hier.sync_to_pdu_packed import sync_to_pdu_packed from ...utils.options_block import options_block _syncword = '11000011101010100110011001010101' class u482c_deframer(gr.hier_block2, options_block): """ Hierarchical block to deframe the GOMspace U482C protocol. The input is a float stream of soft symbols. The output are PDUs with frames (most likely CSP frames). Args: syncword_threshold: number of bit errors allowed in syncword (int) options: Options from argparse """ def __init__(self, syncword_threshold=None, options=None): gr.hier_block2.__init__( self, 'u428c_deframer', gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(0, 0, 0)) options_block.__init__(self, options) self.message_port_register_hier_out('out') if syncword_threshold is None: syncword_threshold = self.options.syncword_threshold self.slicer = digital.binary_slicer_fb() self.deframer = sync_to_pdu_packed( packlen=258, sync=_syncword, threshold=syncword_threshold) self.fec = u482c_decode(self.options.verbose_fec, -1, -1, -1) self.connect(self, self.slicer, self.deframer) self.msg_connect((self.deframer, 'out'), (self.fec, 'in')) self.msg_connect((self.fec, 'out'), (self, 'out')) _default_sync_threshold = 4 @classmethod def add_options(cls, parser): """ Adds U482C deframer specific options to the argparse parser """ parser.add_argument( '--syncword_threshold', type=int, default=cls._default_sync_threshold, help='Syncword bit errors [default=%(default)r]') parser.add_argument( '--verbose_fec', action='store_true', help='Verbose FEC decoder') gr-satellites-4.4.0/python/components/deframers/ua01_deframer.py000066400000000000000000000023641414055407700247550ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, digital from ... import nrzi_decode, hdlc_deframer class ua01_deframer(gr.hier_block2): """ Hierarchical block to deframe UA01 non-conformant AX.25. The input is a float stream of soft symbols. The output are PDUs with UA01 frames. The input should be doubly NRZ-I encoded and G3RUH scrambled. Args: options: Options from argparse """ def __init__(self, options=None): gr.hier_block2.__init__( self, 'ua01_deframer', gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(0, 0, 0)) self.message_port_register_hier_out('out') self.slicer = digital.binary_slicer_fb() self.nrzi0 = nrzi_decode() self.nrzi1 = nrzi_decode() self.descrambler = digital.descrambler_bb(0x21, 0, 16) self.deframer = hdlc_deframer(True, 10000) self.connect(self, self.slicer, self.nrzi0, self.nrzi1, self.descrambler, self.deframer) self.msg_connect((self.deframer, 'out'), (self, 'out')) gr-satellites-4.4.0/python/components/deframers/usp_deframer.py000066400000000000000000000055331414055407700250170ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2021 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, digital, fec from ... import decode_rs from ...hier.ccsds_descrambler import ccsds_descrambler from ...hier.sync_to_pdu_soft import sync_to_pdu_soft from ...usp import usp_ax25_crop, usp_pls_crop from ...utils.options_block import options_block _syncword = '0101000001110010111101100100101100101101100100001011000111110101' class usp_deframer(gr.hier_block2, options_block): """ Hierarchical block to deframe the Unified SPUTNIX Protocol (USP) This framing is based on the CCSDS concatenated framing, but is optimized for variable frame size and borrows some ideas from DVB-S2. The description of the protocol can be found in https://sputnix.ru/tpl/docs/amateurs/ USP%20protocol%20description%20v1.04.pdf The input is a float stream of soft symbols. The output are PDUs with frames. Args: syncword_threshold: number of bit errors allowed in syncword (int) options: Options from argparse """ def __init__(self, syncword_threshold=None, options=None): gr.hier_block2.__init__( self, 'usp_deframer', gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(0, 0, 0)) options_block.__init__(self, options) self.message_port_register_hier_out('out') if syncword_threshold is None: syncword_threshold = self.options.syncword_threshold self.deframer = sync_to_pdu_soft( packlen=4144, sync=_syncword, threshold=syncword_threshold) self.pls = usp_pls_crop() self.viterbi = fec.cc_decoder.make( 4080, 7, 2, [79, -109], 0, -1, fec.CC_TRUNCATED, False) self.viterbi_decoder = fec.async_decoder( self.viterbi, False, False, 4080//8) self.scrambler = ccsds_descrambler() self.rs = decode_rs(True, 1) self.crop = usp_ax25_crop() self.connect(self, self.deframer) self.msg_connect((self.deframer, 'out'), (self.pls, 'in')) self.msg_connect((self.pls, 'out'), (self.viterbi_decoder, 'in')) self.msg_connect((self.viterbi_decoder, 'out'), (self.scrambler, 'in')) self.msg_connect((self.scrambler, 'out'), (self.rs, 'in')) self.msg_connect((self.rs, 'out'), (self.crop, 'in')) self.msg_connect((self.crop, 'out'), (self, 'out')) _default_sync_threshold = 13 @classmethod def add_options(cls, parser): """ Adds USP deframer specific options to the argparse parser """ parser.add_argument( '--syncword_threshold', type=int, default=cls._default_sync_threshold, help='Syncword bit errors [default=%(default)r]') gr-satellites-4.4.0/python/components/deframers/yusat_deframer.py000066400000000000000000000047041414055407700253540ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2021 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, digital import pmt from ...hier.sync_to_pdu_packed import sync_to_pdu_packed from ...hdlc_deframer import fcs_ok # HDLC 0x7e flag _syncword = '01111110' class crop_and_check_crc(gr.basic_block): """ Helper block to crop using the final 0x7e flag and check CRC-16 """ def __init__(self): gr.basic_block.__init__( self, name='crop_and_check_crc', in_sig=[], out_sig=[]) self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('out')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = pmt.u8vector_elements(msg) start = 0 while True: try: idx = packet[start:].index(0x7e) except ValueError: return start += idx + 1 p = packet[:idx] if fcs_ok(p): p = p[:-2] self.message_port_pub( pmt.intern('out'), pmt.cons(pmt.PMT_NIL, pmt.init_u8vector(len(p), p))) return class yusat_deframer(gr.hier_block2): """ Hierarchical block to deframe YUSAT ad-hoc AX.25-like protocol The input is a float stream of soft symbols. The output are PDUs with YUSAT frames. Args: options: Options from argparse """ def __init__(self, options=None): gr.hier_block2.__init__( self, 'yusat_deframer', gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(0, 0, 0)) self.message_port_register_hier_out('out') self.slicer = digital.binary_slicer_fb() # We hope that 256 bytes is long enough to contain the full packet self.deframer = sync_to_pdu_packed( packlen=256, sync=_syncword, threshold=0) self.crop = crop_and_check_crc() self.connect(self, self.slicer, self.deframer) self.msg_connect((self.deframer, 'out'), (self.crop, 'in')) self.msg_connect((self.crop, 'out'), (self, 'out')) gr-satellites-4.4.0/python/components/demodulators/000077500000000000000000000000001414055407700225155ustar00rootroot00000000000000gr-satellites-4.4.0/python/components/demodulators/CMakeLists.txt000066400000000000000000000033231414055407700252560ustar00rootroot00000000000000# Copyright 2011 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. ######################################################################## # Include python install macros ######################################################################## include(GrPython) if(NOT PYTHONINTERP_FOUND) return() endif() ######################################################################## # Install python sources ######################################################################## GR_PYTHON_INSTALL( FILES __init__.py afsk_demodulator.py bpsk_demodulator.py fsk_demodulator.py DESTINATION ${GR_PYTHON_DIR}/satellites/components/demodulators ) ######################################################################## # Handle the unit tests ######################################################################## include(GrTest) set(GR_TEST_TARGET_DEPS gnuradio-satellites) set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig) gr-satellites-4.4.0/python/components/demodulators/__init__.py000066400000000000000000000011401414055407700246220ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # ''' gr-satellites demodulators components The deframers transform IQ or real samples into soft symbols. Only demodulation is done, with no packet boundary detection. The input to these hierarchical blocks is a stream of samples and the output is a stream of soft symbols. ''' from .afsk_demodulator import afsk_demodulator from .bpsk_demodulator import bpsk_demodulator from .fsk_demodulator import fsk_demodulator gr-satellites-4.4.0/python/components/demodulators/afsk_demodulator.py000066400000000000000000000044671414055407700264250ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, filter, analog from gnuradio.filter import firdes from .fsk_demodulator import fsk_demodulator from ...utils.options_block import options_block class afsk_demodulator(gr.hier_block2, options_block): """ Hierarchical block to demodulate AFSK. The input can be either IQ or real. For IQ input, it is assumed that the data is FM modulated, so FM demodulation is performed. For real input, it is assumed that the data is already FM demodulated. Args: baudrate: Baudrate in symbols per second (float) sample_rate: Sample rate in samples per second (float) iq: Whether the input is IQ or real (bool) af_carrier: Audio frequency carrier in Hz (float) deviation: Deviation in Hz, negative inverts the sidebands (float) dump_path: Path to dump internal signals to files (str) options: Options from argparse """ def __init__(self, baudrate, samp_rate, iq, af_carrier, deviation, dump_path=None, options=None): gr.hier_block2.__init__( self, 'afsk_demodulator', gr.io_signature(1, 1, gr.sizeof_gr_complex if iq else gr.sizeof_float), gr.io_signature(1, 1, gr.sizeof_float)) options_block.__init__(self, options) if iq: self.demod = analog.quadrature_demod_cf(1) self.connect(self, self.demod) else: self.demod = self filter_cutoff = 2 * abs(deviation) filter_transition = 0.1 * abs(deviation) taps = firdes.low_pass(1, samp_rate, filter_cutoff, filter_transition) self.xlating = filter.freq_xlating_fir_filter_fcf( 1, taps, af_carrier, samp_rate) self.fsk = fsk_demodulator( baudrate, samp_rate, deviation=deviation, iq=True, dc_block=False, dump_path=dump_path, options=options) self.connect(self.demod, self.xlating, self.fsk, self) @classmethod def add_options(cls, parser): """Adds CCSDS concatenated deframer options to the argparse parser""" fsk_demodulator.add_options(parser) gr-satellites-4.4.0/python/components/demodulators/bpsk_demodulator.py000066400000000000000000000226311414055407700264310ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from math import ceil, pi import pathlib import sys from gnuradio import gr, analog, blocks, digital, filter from gnuradio.filter import firdes from ... import manchester_sync from ...hier.rms_agc import rms_agc from ...utils.options_block import options_block class bpsk_demodulator(gr.hier_block2, options_block): """ Hierarchical block to demodulate BPSK. The input can be either IQ or real. Args: baudrate: Baudrate in symbols per second (float) sample_rate: Sample rate in samples per second (float) iq: Whether the input is IQ or real (bool) f_offset: Frequency offset in Hz (float) differential: Perform non-coherent DBPSK decoding (bool) manchester: Use Manchester coding (bool) dump_path: Path to dump internal signals to files (str) options: Options from argparse """ def __init__(self, baudrate, samp_rate, iq, f_offset=None, differential=False, manchester=False, dump_path=None, options=None): gr.hier_block2.__init__( self, 'bpsk_demodulator', gr.io_signature(1, 1, gr.sizeof_gr_complex if iq else gr.sizeof_float), gr.io_signature(1, 1, gr.sizeof_float)) options_block.__init__(self, options) if dump_path is not None: dump_path = pathlib.Path(dump_path) if manchester: baudrate *= 2 # Prevent problems due to baudrate too high if baudrate >= samp_rate / 4: print( f'Sample rate {samp_rate} sps insufficient for {baudrate} ' 'baud BPSK demodulation. Demodulator will not work.', file=sys.stderr) baudrate = samp_rate / 4 sps = samp_rate / baudrate max_sps = 10 if sps > max_sps: decimation = ceil(sps / max_sps) else: decimation = 1 sps /= decimation filter_cutoff = baudrate * 2.0 filter_transition = baudrate * 0.2 if f_offset is None: f_offset = self.options.f_offset if f_offset is None: if iq: f_offset = 0 elif baudrate <= 2400: f_offset = 1500 else: f_offset = 12000 taps = firdes.low_pass(1, samp_rate, filter_cutoff, filter_transition) f = (filter.freq_xlating_fir_filter_ccf if iq else filter.freq_xlating_fir_filter_fcf) self.xlating = f(decimation, taps, f_offset, samp_rate) agc_constant = 2e-2 / sps # This gives a time constant of 50 symbols self.agc = rms_agc(agc_constant, 1) if dump_path is not None: self.agc_in = blocks.file_sink( gr.sizeof_gr_complex, str(dump_path / 'agc_in.c64'), False) self.agc_out = blocks.file_sink( gr.sizeof_gr_complex, str(dump_path / 'agc_out.c64'), False) self.connect(self.xlating, self.agc_in) self.connect(self.agc, self.agc_out) if not self.options.disable_fll: fll_bw = 2*pi*decimation/samp_rate*self.options.fll_bw self.fll = digital.fll_band_edge_cc( sps, self.options.rrc_alpha, 100, fll_bw) if dump_path is not None: self.fll_freq = blocks.file_sink( gr.sizeof_float, str(dump_path / 'fll_freq.f32'), False) self.fll_phase = blocks.file_sink( gr.sizeof_float, str(dump_path / 'fll_phase.f32'), False) self.fll_error = blocks.file_sink( gr.sizeof_float, str(dump_path / 'fll_error.f32'), False) self.connect((self.fll, 1), self.fll_freq) self.connect((self.fll, 2), self.fll_phase) self.connect((self.fll, 3), self.fll_error) nfilts = 16 rrc_taps = firdes.root_raised_cosine( nfilts, nfilts, 1.0/float(sps), self.options.rrc_alpha, int(ceil(11*sps*nfilts))) # "Empiric" formula for TED gain of a PFB MF TED for complex BPSK # 0.5 sample^{-1} ted_gain = 0.5 damping = 1.0 self.clock_recovery = digital.symbol_sync_cc( digital.TED_SIGNAL_TIMES_SLOPE_ML, sps, self.options.clk_bw, damping, ted_gain, self.options.clk_limit * sps, 1, digital.constellation_bpsk().base(), digital.IR_PFB_MF, nfilts, rrc_taps) if dump_path is not None: self.clock_recovery_out = blocks.file_sink( gr.sizeof_gr_complex, str(dump_path / 'clock_recovery_out.c64'), False) self.clock_recovery_err = blocks.file_sink( gr.sizeof_float, str(dump_path / 'clock_recovery_err.f32'), False) self.clock_recovery_T_inst = blocks.file_sink( gr.sizeof_float, str(dump_path / 'clock_recovery_T_inst.f32'), False) self.clock_recovery_T_avg = blocks.file_sink( gr.sizeof_float, str(dump_path / 'clock_recovery_T_avg.f32'), False) self.connect(self.clock_recovery, self.clock_recovery_out) self.connect((self.clock_recovery, 1), self.clock_recovery_err) self.connect((self.clock_recovery, 2), self.clock_recovery_T_inst) self.connect((self.clock_recovery, 3), self.clock_recovery_T_avg) self.connect(self, self.xlating, self.agc) if self.options.disable_fll: self.connect(self.agc, self.clock_recovery) else: self.connect(self.agc, self.fll, self.clock_recovery) self.complex_to_real = blocks.complex_to_real(1) if manchester: self.manchester = manchester_sync(self.options.manchester_history) self.connect(self.clock_recovery, self.manchester) else: self.manchester = self.clock_recovery if differential: self.delay = blocks.delay(gr.sizeof_gr_complex, 1) self.multiply_conj = blocks.multiply_conjugate_cc(1) sign = -1 if manchester else 1 # Take care about inverion in Manchester self.multiply_const = blocks.multiply_const_ff(sign, 1) self.connect(self.manchester, (self.multiply_conj, 0)) self.connect(self.manchester, self.delay, (self.multiply_conj, 1)) self.connect(self.multiply_conj, self.complex_to_real, self.multiply_const, self) else: costas_bw = 2*pi/baudrate*self.options.costas_bw self.costas = digital.costas_loop_cc(costas_bw, 2, False) if dump_path is not None: self.costas_out = blocks.file_sink( gr.sizeof_gr_complex, str(dump_path / 'costas_out.c64'), False) self.costas_frequency = blocks.file_sink( gr.sizeof_float, str(dump_path / 'costas_frequency.f32'), False) self.costas_phase = blocks.file_sink( gr.sizeof_float, str(dump_path / 'costas_phase.f32'), False) self.costas_error = blocks.file_sink( gr.sizeof_float, str(dump_path / 'costas_error.f32'), False) self.connect(self.costas, self.costas_out) self.connect((self.costas, 1), self.costas_frequency) self.connect((self.costas, 2), self.costas_phase) self.connect((self.costas, 3), self.costas_error) self.connect(self.manchester, self.costas, self.complex_to_real, self) _default_rrc_alpha = 0.35 _default_fll_bw = 25 _default_clk_rel_bw = 0.06 _default_clk_limit = 0.004 _default_costas_bw = 50 _default_manchester_history = 32 @classmethod def add_options(cls, parser): """Adds BPSK demodulator specific options to the argparse parser""" parser.add_argument( '--f_offset', type=float, default=None, help='Frequency offset (Hz) [default=1500 or 12000]') parser.add_argument( '--rrc_alpha', type=float, default=cls._default_rrc_alpha, help='RRC roll-off (Hz) [default=%(default)r]') parser.add_argument( '--disable_fll', action='store_true', help='Disable FLL') parser.add_argument( '--fll_bw', type=float, default=cls._default_fll_bw, help='FLL bandwidth (Hz) [default=%(default)r]') parser.add_argument( '--clk_bw', type=float, default=cls._default_clk_rel_bw, help=('Clock recovery bandwidth (relative to baudrate) ' '[default=%(default)r]')) parser.add_argument( '--clk_limit', type=float, default=cls._default_clk_limit, help=('Clock recovery limit (relative to baudrate) ' '[default=%(default)r]')) parser.add_argument( '--costas_bw', type=float, default=cls._default_costas_bw, help='Costas loop bandwidth (Hz) [default=%(default)r]') parser.add_argument( '--manchester_history', type=int, default=cls._default_manchester_history, help='Manchester recovery history (symbols) [default=%(default)r]') gr-satellites-4.4.0/python/components/demodulators/fsk_demodulator.py000066400000000000000000000170211414055407700262520ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from math import ceil, pi import pathlib import sys from gnuradio import gr, blocks, analog, digital, filter from gnuradio.filter import firdes import numpy as np from ...hier.rms_agc_f import rms_agc_f from ...utils.options_block import options_block class fsk_demodulator(gr.hier_block2, options_block): """ Hierarchical block to demodulate FSK. The input can be either IQ or real. For IQ input, it is assumed that the data is FM modulated, so FM demodulation is performed. For real input, it is assumed that the data is already FM demodulated. Args: baudrate: Baudrate in symbols per second (float) sample_rate: Sample rate in samples per second (float) iq: Whether the input is IQ or real (bool) deviation: Deviation in Hz, negative inverts sidebands (float) subaudio: Use subaudio demodulation (bool) dc_block: Use DC-block (bool) dump_path: Path to dump internal signals to files (str) options: Options from argparse """ def __init__(self, baudrate, samp_rate, iq, deviation=None, subaudio=False, dc_block=True, dump_path=None, options=None): gr.hier_block2.__init__( self, 'fsk_demodulator', gr.io_signature(1, 1, gr.sizeof_gr_complex if iq else gr.sizeof_float), gr.io_signature(1, 1, gr.sizeof_float)) options_block.__init__(self, options) use_agc = self.options.use_agc or not iq if self.options.disable_dc_block: dc_block = False if dump_path is not None: dump_path = pathlib.Path(dump_path) if deviation is not None: _deviation = deviation else: _deviation = self.options.deviation # Prevent problems due to baudrate too high if baudrate >= samp_rate: print(f'Sample rate {samp_rate} sps insufficient for {baudrate} ' 'baud FSK demodulation. Demodulator will not work.', file=sys.stderr) baudrate = samp_rate / 2 if iq: # Cut to Carson's bandwidth rule before quadrature demod. # Note that _deviation can be negative to encode that the # low tone corresponds to the symbol 1 and the high tone # corresponds to the symbol 0. carson_cutoff = abs(_deviation) + baudrate / 2 self.demod = analog.quadrature_demod_cf( samp_rate/(2*pi*_deviation)) if carson_cutoff >= samp_rate / 2: # Sample rate is already narrower than Carson's # bandwidth. Do not filter self.connect(self, self.demod) else: # Sample rate is wider than Carson's bandwidth. # Lowpass filter before demod. fir_taps = firdes.low_pass( 1, samp_rate, carson_cutoff, 0.1 * carson_cutoff) self.demod_filter = filter.fir_filter_ccf(1, fir_taps) self.connect(self, self.demod_filter, self.demod) else: self.demod = self sps = samp_rate / baudrate max_sps = 10 if sps > max_sps: decimation = ceil(sps / max_sps) else: decimation = 1 sps /= decimation if subaudio: # some not-so-bad filter parameters for subaudio processing subaudio_cutoff = 2.0/3.0 * baudrate subaudio_transition = subaudio_cutoff / 4.0 subaudio_taps = firdes.low_pass( 1, samp_rate, subaudio_cutoff, subaudio_transition) self.subaudio_lowpass = filter.fir_filter_fff(1, subaudio_taps) # square pulse filter sqfilter_len = int(samp_rate / baudrate) taps = np.ones(sqfilter_len)/sqfilter_len self.lowpass = filter.fir_filter_fff(decimation, taps) if dc_block: self.dcblock = filter.dc_blocker_ff(ceil(sps * 32), True) else: self.dcblock = self.lowpass # to simplify connections below if use_agc: # This gives a time constant of 50 symbols agc_constant = 2e-2 / sps self.agc = rms_agc_f(agc_constant, 1) if dump_path is not None: self.waveform = blocks.file_sink( gr.sizeof_float, str(dump_path / 'waveform.f32')) # "Eempiric" formula for TED gain of Gardner detector # 1.47 symbol^{-1} ted_gain = 1.47 damping = 1.0 self.clock_recovery = digital.symbol_sync_ff( digital.TED_GARDNER, sps, self.options.clk_bw, damping, ted_gain, self.options.clk_limit * sps, 1, digital.constellation_bpsk().base(), digital.IR_PFB_NO_MF) if dump_path is not None: self.clock_recovery_out = blocks.file_sink( gr.sizeof_float, str(dump_path / 'clock_recovery_out.f32'), False) self.clock_recovery_err = blocks.file_sink( gr.sizeof_float, str(dump_path / 'clock_recovery_err.f32'), False) self.clock_recovery_T_inst = blocks.file_sink( gr.sizeof_float, str(dump_path / 'clock_recovery_T_inst.f32'), False) self.clock_recovery_T_avg = blocks.file_sink( gr.sizeof_float, str(dump_path / 'clock_recovery_T_avg.f32'), False) self.connect(self.clock_recovery, self.clock_recovery_out) self.connect((self.clock_recovery, 1), self.clock_recovery_err) self.connect((self.clock_recovery, 2), self.clock_recovery_T_inst) self.connect((self.clock_recovery, 3), self.clock_recovery_T_avg) conns = [self.demod] if subaudio: conns.append(self.subaudio_lowpass) conns.append(self.lowpass) if dc_block: conns.append(self.dcblock) self.connect(*conns) if use_agc: self.connect(self.dcblock, self.agc, self.clock_recovery) if dump_path is not None: self.connect(self.agc, self.waveform) else: self.connect(self.dcblock, self.clock_recovery) if dump_path is not None: self.connect(self.dcblock, self.waveform) self.connect(self.clock_recovery, self) _default_clk_rel_bw = 0.06 _default_clk_limit = 0.004 _default_deviation_hz = 5000 @classmethod def add_options(cls, parser): """ Adds FSK demodulator specific options to the argparse parser """ parser.add_argument( '--clk_bw', type=float, default=cls._default_clk_rel_bw, help=('Clock recovery bandwidth (relative to baudrate) ' '[default=%(default)r]')) parser.add_argument( '--clk_limit', type=float, default=cls._default_clk_limit, help=('Clock recovery limit (relative to baudrate) ' '[default=%(default)r]')) parser.add_argument( '--deviation', type=float, default=cls._default_deviation_hz, help='Deviation (Hz) [default=%(default)r]') parser.add_argument( '--use_agc', action='store_true', help='Use AGC (for IQ input. AGC always on for real input)') parser.add_argument( '--disable_dc_block', action='store_true', help='Disable DC block') gr-satellites-4.4.0/python/components/transports/000077500000000000000000000000001414055407700222325ustar00rootroot00000000000000gr-satellites-4.4.0/python/components/transports/CMakeLists.txt000066400000000000000000000032401414055407700247710ustar00rootroot00000000000000# Copyright 2011 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. ######################################################################## # Include python install macros ######################################################################## include(GrPython) if(NOT PYTHONINTERP_FOUND) return() endif() ######################################################################## # Install python sources ######################################################################## GR_PYTHON_INSTALL( FILES __init__.py kiss_transport.py DESTINATION ${GR_PYTHON_DIR}/satellites/components/transports ) ######################################################################## # Handle the unit tests ######################################################################## include(GrTest) set(GR_TEST_TARGET_DEPS gnuradio-satellites) set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig) gr-satellites-4.4.0/python/components/transports/__init__.py000066400000000000000000000010211414055407700243350ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # ''' gr-satellites transport components The transports transform PDUs with packets in a certain protocol into PDUs with packets into another protocol. They are used to implement upper layer network protocols. The input to these hierarchical blocks are PDUs and the output are PDUs as well. ''' from .kiss_transport import kiss_transport gr-satellites-4.4.0/python/components/transports/kiss_transport.py000066400000000000000000000030631414055407700256730ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, blocks from ... import kiss_to_pdu, pdu_head_tail class kiss_transport(gr.hier_block2): """ Hierarchical block for KISS transport. The input are PDUs with a KISS stream. The output are PDUs with the frames encapsulated in the stream. Args: control_byte: Expect KISS control byte (bool) header_remove_bytes: Remove this many bytes from header (int) options: options from argparse """ def __init__(self, control_byte=True, header_remove_bytes=0, options=None): gr.hier_block2.__init__( self, 'kiss_transport', gr.io_signature(0, 0, 0), gr.io_signature(0, 0, 0)) self.message_port_register_hier_in('in') self.message_port_register_hier_out('out') if header_remove_bytes: self.header = pdu_head_tail(3, header_remove_bytes) self.pdu2tag = blocks.pdu_to_tagged_stream(blocks.byte_t, 'packet_len') self.kiss = kiss_to_pdu(control_byte) if header_remove_bytes: self.msg_connect((self, 'in'), (self.header, 'in')) self.msg_connect((self.header, 'out'), (self.pdu2tag, 'pdus')) else: self.msg_connect((self, 'in'), (self.pdu2tag, 'pdus')) self.connect(self.pdu2tag, self.kiss) self.msg_connect((self.kiss, 'out'), (self, 'out')) gr-satellites-4.4.0/python/core/000077500000000000000000000000001414055407700165565ustar00rootroot00000000000000gr-satellites-4.4.0/python/core/CMakeLists.txt000066400000000000000000000032301414055407700213140ustar00rootroot00000000000000# Copyright 2011 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. ######################################################################## # Include python install macros ######################################################################## include(GrPython) if(NOT PYTHONINTERP_FOUND) return() endif() ######################################################################## # Install python sources ######################################################################## GR_PYTHON_INSTALL( FILES __init__.py gr_satellites_flowgraph.py DESTINATION ${GR_PYTHON_DIR}/satellites/core ) ######################################################################## # Handle the unit tests ######################################################################## include(GrTest) set(GR_TEST_TARGET_DEPS gnuradio-satellites) set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig) gr-satellites-4.4.0/python/core/__init__.py000066400000000000000000000005341414055407700206710ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # ''' gr-satellites core module This module contains the core functionality of gr-satellites ''' from .gr_satellites_flowgraph import gr_satellites_flowgraph gr-satellites-4.4.0/python/core/gr_satellites_flowgraph.py000066400000000000000000000463651414055407700240600ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import argparse import functools import itertools import os import shlex import yaml from gnuradio import gr, zeromq import pmt from ..components import datasinks from ..components import datasources from ..components import deframers from ..components import demodulators from ..components import transports from ..satyaml import yamlfiles from .. import pdu_add_meta def set_options(cl, *args, **kwargs): """ Given a class, returns a derived class with some fixed options set in the constructor. This is intended to generate GNU Radio blocks with some options set by deriving from blocks that allow for options. Args: cl: the base class to derive from (class) *args: arguments to pass to the __init__ method **kwargs: keyword arguments to pass to the __init__ method """ class C(cl): __init__ = functools.partialmethod(cl.__init__, *args, **kwargs) return C def try_add_options(x, parser): """ Given an object x, calls x.add_options(parser) if add_options is an attribute of x. Args: x: an object parser: an argparser ArgumentParser """ if hasattr(x, 'add_options'): x.add_options(parser) def filter_translate_dict(d, key_translation): """ Filter and translate the keys of a dictionary Args: d: a dictionary to filter and translate keys_translation: a dictionary of key translations """ return {key_translation[k]: v for k, v in d.items() if k in key_translation} class gr_satellites_flowgraph(gr.hier_block2): """ gr-satellites decoder flowgraph Uses a YAML file with a satellite description to create a hierarchical flowgraph for that satellite. There are two modes of operation. If this is called from GRC, then only demodulation and deframing is done, getting all messages to the 'out' output port. If this is not called from GRC, then messages are routed to data sinks as appropriate. Args: file: filename of the YAML file to load (string) name: satellite name to search in all YAML files (string) norad: NORAD ID to search in all YAML files (int) samp_rate: sample rate (float) iq: use IQ or real input (bool) grc_block: whether this is called from GRC (bool) options: options from argparser config: configuration file from configparser pdu_in: use PDU input instead of samples (bool) dump_path: Path to dump internal signals to files (str) Note that exactly one of file, name and norad should be specified """ def __init__(self, file=None, name=None, norad=None, samp_rate=None, iq=False, grc_block=False, options=None, config=None, pdu_in=False, dump_path=None): gr.hier_block2.__init__( self, 'gr_satellites_flowgraph', gr.io_signature(0, 0, 0) if pdu_in else gr.io_signature(1, 1, gr.sizeof_gr_complex if iq else gr.sizeof_float), gr.io_signature(0, 0, 0)) self.samp_rate = samp_rate self.iq = iq self.grc_block = grc_block self.dump_path = dump_path self.config = config # Load up options, similarly to option block if type(options) is str: p = argparse.ArgumentParser(prog=self.__class__.__name__, conflict_handler='resolve') gr_satellites_flowgraph.add_options(p, file, name, norad) options = p.parse_args(shlex.split(options)) self.options = options if pdu_in: self.message_port_register_hier_in('in') elif samp_rate is None: raise ValueError('samp_rate not specified') self.satyaml = satyaml = self.open_satyaml(file, name, norad) if grc_block: self.message_port_register_hier_out('out') else: self._datasinks = dict() self._additional_datasinks = list() do_telemetry = not (self.options is not None and self.options.hexdump) for key, info in satyaml['data'].items(): is_telemetry = ('telemetry' in info or info == 'unknown') if not is_telemetry or do_telemetry: self._init_datasink(key, info) self._init_additional_datasinks() self._transports = dict() if 'transports' in satyaml: for key, info in satyaml['transports'].items(): self._init_transport(key, info) if pdu_in: for sink in itertools.chain( self._datasinks.values(), self._additional_datasinks): self.msg_connect((self, 'in'), (sink, 'in')) else: self._demodulators = dict() self._deframers = dict() self._taggers = dict() for key, transmitter in satyaml['transmitters'].items(): self._init_demodulator_deframer(key, transmitter) def _init_datasink(self, key, info): """Initialize a datasink Initializes a datasink according to a SatYAML entry Args: key: the name of the datasink entry in SatYAML info: the body of the datasink entry in SatYAML """ if 'decoder' in info: ds = getattr(datasinks, info['decoder']) try: datasink = ds(options=self.options) except TypeError: # raised if ds doesn't have an options parameter datasink = ds() elif 'telemetry' in info: datasink = datasinks.telemetry_parser(info['telemetry'], options=self.options) elif 'files' in info: datasink = datasinks.file_receiver(info['files'], options=self.options) elif 'image' in info: datasink = datasinks.file_receiver( info['image'], options=self.options, display=True) else: datasink = datasinks.hexdump_sink() self._datasinks[key] = datasink def _init_additional_datasinks(self): """Initialize additional datasinks Creates all the datasinks that are not explicitly indicated in the SatYAML (telemetry submit, KISS output, etc.) """ if self.options is not None and self.options.kiss_out: self._additional_datasinks.append( datasinks.kiss_file_sink(self.options.kiss_out, bool(self.options.kiss_append), options=self.options)) if self.options is not None and self.options.kiss_server: self._additional_datasinks.append( datasinks.kiss_server_sink(self.options.kiss_server_address, self.options.kiss_server)) if self.options is not None and self.options.zmq_pub: self._additional_datasinks.append( zeromq.pub_msg_sink(self.options.zmq_pub)) # The GR_SATELLITES_SUBMIT_TLM environment variable takes precendence # over the configuration to choose whether to enable telemetry # submission tlm_env = os.environ.get('GR_SATELLITES_SUBMIT_TLM') if tlm_env is not None: tlm_submit = bool(int(tlm_env)) else: tlm_submit = self.config.getboolean('Groundstation', 'submit_tlm') if tlm_submit: self._additional_datasinks.extend( self.get_telemetry_submitters(self.satyaml, self.config, self.options)) if self.options is not None and self.options.hexdump: self._additional_datasinks.append(datasinks.hexdump_sink()) def _init_transport(self, key, info): """Initialize a datasink Initializes a transport according to a SatYAML entry and connects it to the appropriate datasink Args: key: the name of the transport entry in SatYAML info: the body of the transport entry in SatYAML """ transport = self.get_transport(info['protocol'])() self._transports[key] = transport if not self.options.hexdump: for data in info['data']: self.msg_connect( (transport, 'out'), (self._datasinks[data], 'in')) def _init_demodulator_deframer(self, key, transmitter): """Initialize a demodulator and deframer Creates a demodulator and deframer according to a SatYAML entry and connects the deframer to the data and transports Args: key: name of the transmitter entry in the SatYAML transmitter: transmitter entry in the SatYAML """ baudrate = transmitter['baudrate'] demod_options = ['deviation', 'af_carrier'] demod_options = {k: k for k in demod_options} demodulator_additional_options = filter_translate_dict(transmitter, demod_options) demodulator = self.get_demodulator(transmitter['modulation'])( baudrate=baudrate, samp_rate=self.samp_rate, iq=self.iq, dump_path=self.dump_path, options=self.options, **demodulator_additional_options) deframe_options = { 'frame size': 'frame_size', 'precoding': 'precoding', 'RS basis': 'rs_basis', 'RS interleaving': 'rs_interleaving', 'convolutional': 'convolutional', 'scrambler': 'scrambler', } deframer_additional_options = filter_translate_dict(transmitter, deframe_options) deframer = self.get_deframer(transmitter['framing'])( options=self.options, **deframer_additional_options) self.connect(self, demodulator, deframer) self._demodulators[key] = demodulator self._deframers[key] = deframer self._connect_transmitter_to_data(key, transmitter, deframer) def _connect_transmitter_to_data(self, key, transmitter, deframer): """Connect a deframer to the datasinks and transports Connects a deframer to the datasinks and transports indicated in the SatYAML file Args: transmitter: the transmitter entry in SatYAML deframer: the deframer to connect """ # Add a tagger meta = pmt.make_dict() meta = pmt.dict_add(meta, pmt.intern('transmitter'), pmt.intern(key)) tagger = pdu_add_meta(meta) self._taggers[key] = tagger self.msg_connect((deframer, 'out'), (tagger, 'in')) if self.grc_block: # If we are a GRC block we have no datasinks # so we connect directly to our output self.msg_connect((tagger, 'out'), (self, 'out')) return for s in self._additional_datasinks: self.msg_connect((tagger, 'out'), (s, 'in')) for data in transmitter.get('data', []): if data in self._datasinks: # The datasink may not exist if it's a telemetry parser # and we're running in hexdump mode self.msg_connect( (tagger, 'out'), (self._datasinks[data], 'in')) for transport in transmitter.get('transports', []): self.msg_connect( (tagger, 'out'), (self._transports[transport], 'in')) if 'additional_data' in transmitter: for k, v in transmitter['additional_data'].items(): # Add a tagger tagger = pdu_add_meta(meta) self._taggers[(key, k)] = tagger self.msg_connect((deframer, k), (tagger, 'in')) self.msg_connect((tagger, 'out'), (self._datasinks[v], 'in')) def get_telemetry_submitters(self, satyaml, config, options): """ Returns a list of block instances of telemetry submitters The telemetry submitters are those appropriate for this satellite Args: satyaml: satellite YAML file, as returned by self.open_satyaml config: configuration file from configparser """ norad = satyaml['norad'] submitters = [ datasinks.telemetry_submit( 'SatNOGS', norad=norad, config=config, options=options)] for server in satyaml.get('telemetry_servers', []): port = None url = None if server.startswith('HIT '): port = server.split()[1] server = 'HIT' elif server.startswith('SIDS '): url = server.split()[1] server = 'SIDS' submitters.append(datasinks.telemetry_submit( server, norad=norad, port=port, url=url, config=config, options=options)) return submitters def get_demodulator(self, modulation): return self._demodulator_hooks[modulation] def get_deframer(self, framing): return self._deframer_hooks[framing] def get_transport(self, protocol): return self._transport_hooks[protocol] @staticmethod def open_satyaml(file, name, norad): if sum([x is not None for x in [file, name, norad]]) != 1: raise ValueError( 'exactly one of file, name and norad needs to be specified') if file is not None: satyaml = yamlfiles.get_yamldata(file) elif name is not None: satyaml = yamlfiles.search_name(name) else: satyaml = yamlfiles.search_norad(norad) return satyaml @classmethod def add_options(cls, parser, file=None, name=None, norad=None): satyaml = cls.open_satyaml(file, name, norad) demod_options = parser.add_argument_group('demodulation') deframe_options = parser.add_argument_group('deframing') data_options = parser.add_argument_group('data sink') for info in satyaml['data'].values(): if 'decoder' in info: try_add_options(getattr(datasinks, info['decoder']), data_options) if 'telemetry' in info: try_add_options(datasinks.telemetry_parser, data_options) if 'files' in info or 'image' in info: try_add_options(datasinks.file_receiver, data_options) for transmitter in satyaml['transmitters'].values(): try_add_options(cls._demodulator_hooks[transmitter['modulation']], demod_options) try_add_options(cls._deframer_hooks[transmitter['framing']], deframe_options) # Default parameters _demodulator_hooks = { 'AFSK': demodulators.afsk_demodulator, 'FSK': demodulators.fsk_demodulator, 'BPSK': demodulators.bpsk_demodulator, 'BPSK Manchester': set_options(demodulators.bpsk_demodulator, manchester=True), 'DBPSK': set_options(demodulators.bpsk_demodulator, differential=True), 'DBPSK Manchester': set_options(demodulators.bpsk_demodulator, differential=True, manchester=True), 'FSK subaudio': set_options(demodulators.fsk_demodulator, subaudio=True), } _deframer_hooks = { 'AX.25': set_options(deframers.ax25_deframer, g3ruh_scrambler=False), 'AX.25 G3RUH': set_options(deframers.ax25_deframer, g3ruh_scrambler=True), 'AX100 ASM+Golay': set_options(deframers.ax100_deframer, mode='ASM'), 'AX100 Reed Solomon': set_options(deframers.ax100_deframer, mode='RS'), '3CAT-1': deframers.sat_3cat_1_deframer, 'Astrocast FX.25 NRZ-I': set_options(deframers.astrocast_fx25_deframer, nrzi=True), 'Astrocast FX.25 NRZ': set_options(deframers.astrocast_fx25_deframer, nrzi=False), 'AO-40 FEC': deframers.ao40_fec_deframer, 'AO-40 FEC short': set_options(deframers.ao40_fec_deframer, short_frames=True), 'AO-40 FEC CRC-16-ARC': set_options(deframers.ao40_fec_deframer, crc=True), 'AO-40 FEC CRC-16-ARC short': set_options(deframers.ao40_fec_deframer, short_frames=True, crc=True), 'AO-40 uncoded': deframers.ao40_uncoded_deframer, 'TT-64': deframers.tt64_deframer, 'ESEO': deframers.eseo_deframer, 'Lucky-7': deframers.lucky7_deframer, 'Reaktor Hello World': deframers.reaktor_hello_world_deframer, 'S-NET': deframers.snet_deframer, 'SALSAT': set_options(deframers.snet_deframer, buggy_crc=False), 'Swiatowid': deframers.swiatowid_deframer, 'NuSat': deframers.nusat_deframer, 'K2SAT': deframers.k2sat_deframer, 'CCSDS Reed-Solomon': deframers.ccsds_rs_deframer, 'CCSDS Concatenated': deframers.ccsds_concatenated_deframer, 'CCSDS Uncoded': set_options(deframers.ccsds_rs_deframer, rs_en=False), 'LilacSat-1': deframers.lilacsat_1_deframer, 'AAUSAT-4': deframers.aausat4_deframer, 'NGHam': set_options(deframers.ngham_deframer, decode_rs=True), 'NGHam no Reed Solomon': set_options(deframers.ngham_deframer, decode_rs=False), 'SMOG-P RA': deframers.smogp_ra_deframer, 'SMOG-1 RA': set_options(deframers.smogp_ra_deframer, new_protocol=True), 'SMOG-P Signalling': deframers.smogp_signalling_deframer, 'SMOG-1 Signalling': set_options(deframers.smogp_signalling_deframer, new_protocol=True), 'OPS-SAT': deframers.ops_sat_deframer, 'U482C': deframers.u482c_deframer, 'UA01': deframers.ua01_deframer, 'Mobitex': deframers.mobitex_deframer, 'Mobitex-NX': set_options(deframers.mobitex_deframer, nx=True), 'FOSSASAT': deframers.fossasat_deframer, 'AISTECHSAT-2': deframers.aistechsat_2_deframer, 'AALTO-1': deframers.aalto1_deframer, 'Grizu-263A': deframers.grizu263a_deframer, 'IDEASSat': deframers.ideassat_deframer, 'YUSAT': deframers.yusat_deframer, 'AX5043': deframers.ax5043_deframer, 'USP': deframers.usp_deframer, 'DIY-1': deframers.diy1_deframer, 'BINAR-1': deframers.binar1_deframer, } _transport_hooks = { 'KISS': transports.kiss_transport, 'KISS no control byte': set_options(transports.kiss_transport, control_byte=False), 'KISS KS-1Q': set_options(transports.kiss_transport, control_byte=False, header_remove_bytes=3), } gr-satellites-4.4.0/python/crc32c.py000066400000000000000000000121731414055407700172630ustar00rootroot00000000000000#!/usr/bin/env python3 # # Copyright 2007 Google Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # """Implementation of CRC-32C checksumming. See http://en.wikipedia.org/wiki/Cyclic_redundancy_check for details on CRC-32C. This code is a manual python translation of c code generated by pycrc 0.7.1 (http://www.tty1.net/pycrc/). Command line used: './pycrc.py --model=crc-32c --generate c --algorithm=table-driven' """ CRC_TABLE = ( 0x00000000, 0xf26b8303, 0xe13b70f7, 0x1350f3f4, 0xc79a971f, 0x35f1141c, 0x26a1e7e8, 0xd4ca64eb, 0x8ad958cf, 0x78b2dbcc, 0x6be22838, 0x9989ab3b, 0x4d43cfd0, 0xbf284cd3, 0xac78bf27, 0x5e133c24, 0x105ec76f, 0xe235446c, 0xf165b798, 0x030e349b, 0xd7c45070, 0x25afd373, 0x36ff2087, 0xc494a384, 0x9a879fa0, 0x68ec1ca3, 0x7bbcef57, 0x89d76c54, 0x5d1d08bf, 0xaf768bbc, 0xbc267848, 0x4e4dfb4b, 0x20bd8ede, 0xd2d60ddd, 0xc186fe29, 0x33ed7d2a, 0xe72719c1, 0x154c9ac2, 0x061c6936, 0xf477ea35, 0xaa64d611, 0x580f5512, 0x4b5fa6e6, 0xb93425e5, 0x6dfe410e, 0x9f95c20d, 0x8cc531f9, 0x7eaeb2fa, 0x30e349b1, 0xc288cab2, 0xd1d83946, 0x23b3ba45, 0xf779deae, 0x05125dad, 0x1642ae59, 0xe4292d5a, 0xba3a117e, 0x4851927d, 0x5b016189, 0xa96ae28a, 0x7da08661, 0x8fcb0562, 0x9c9bf696, 0x6ef07595, 0x417b1dbc, 0xb3109ebf, 0xa0406d4b, 0x522bee48, 0x86e18aa3, 0x748a09a0, 0x67dafa54, 0x95b17957, 0xcba24573, 0x39c9c670, 0x2a993584, 0xd8f2b687, 0x0c38d26c, 0xfe53516f, 0xed03a29b, 0x1f682198, 0x5125dad3, 0xa34e59d0, 0xb01eaa24, 0x42752927, 0x96bf4dcc, 0x64d4cecf, 0x77843d3b, 0x85efbe38, 0xdbfc821c, 0x2997011f, 0x3ac7f2eb, 0xc8ac71e8, 0x1c661503, 0xee0d9600, 0xfd5d65f4, 0x0f36e6f7, 0x61c69362, 0x93ad1061, 0x80fde395, 0x72966096, 0xa65c047d, 0x5437877e, 0x4767748a, 0xb50cf789, 0xeb1fcbad, 0x197448ae, 0x0a24bb5a, 0xf84f3859, 0x2c855cb2, 0xdeeedfb1, 0xcdbe2c45, 0x3fd5af46, 0x7198540d, 0x83f3d70e, 0x90a324fa, 0x62c8a7f9, 0xb602c312, 0x44694011, 0x5739b3e5, 0xa55230e6, 0xfb410cc2, 0x092a8fc1, 0x1a7a7c35, 0xe811ff36, 0x3cdb9bdd, 0xceb018de, 0xdde0eb2a, 0x2f8b6829, 0x82f63b78, 0x709db87b, 0x63cd4b8f, 0x91a6c88c, 0x456cac67, 0xb7072f64, 0xa457dc90, 0x563c5f93, 0x082f63b7, 0xfa44e0b4, 0xe9141340, 0x1b7f9043, 0xcfb5f4a8, 0x3dde77ab, 0x2e8e845f, 0xdce5075c, 0x92a8fc17, 0x60c37f14, 0x73938ce0, 0x81f80fe3, 0x55326b08, 0xa759e80b, 0xb4091bff, 0x466298fc, 0x1871a4d8, 0xea1a27db, 0xf94ad42f, 0x0b21572c, 0xdfeb33c7, 0x2d80b0c4, 0x3ed04330, 0xccbbc033, 0xa24bb5a6, 0x502036a5, 0x4370c551, 0xb11b4652, 0x65d122b9, 0x97baa1ba, 0x84ea524e, 0x7681d14d, 0x2892ed69, 0xdaf96e6a, 0xc9a99d9e, 0x3bc21e9d, 0xef087a76, 0x1d63f975, 0x0e330a81, 0xfc588982, 0xb21572c9, 0x407ef1ca, 0x532e023e, 0xa145813d, 0x758fe5d6, 0x87e466d5, 0x94b49521, 0x66df1622, 0x38cc2a06, 0xcaa7a905, 0xd9f75af1, 0x2b9cd9f2, 0xff56bd19, 0x0d3d3e1a, 0x1e6dcdee, 0xec064eed, 0xc38d26c4, 0x31e6a5c7, 0x22b65633, 0xd0ddd530, 0x0417b1db, 0xf67c32d8, 0xe52cc12c, 0x1747422f, 0x49547e0b, 0xbb3ffd08, 0xa86f0efc, 0x5a048dff, 0x8ecee914, 0x7ca56a17, 0x6ff599e3, 0x9d9e1ae0, 0xd3d3e1ab, 0x21b862a8, 0x32e8915c, 0xc083125f, 0x144976b4, 0xe622f5b7, 0xf5720643, 0x07198540, 0x590ab964, 0xab613a67, 0xb831c993, 0x4a5a4a90, 0x9e902e7b, 0x6cfbad78, 0x7fab5e8c, 0x8dc0dd8f, 0xe330a81a, 0x115b2b19, 0x020bd8ed, 0xf0605bee, 0x24aa3f05, 0xd6c1bc06, 0xc5914ff2, 0x37faccf1, 0x69e9f0d5, 0x9b8273d6, 0x88d28022, 0x7ab90321, 0xae7367ca, 0x5c18e4c9, 0x4f48173d, 0xbd23943e, 0xf36e6f75, 0x0105ec76, 0x12551f82, 0xe03e9c81, 0x34f4f86a, 0xc69f7b69, 0xd5cf889d, 0x27a40b9e, 0x79b737ba, 0x8bdcb4b9, 0x988c474d, 0x6ae7c44e, 0xbe2da0a5, 0x4c4623a6, 0x5f16d052, 0xad7d5351, ) CRC_INIT = 0xffffffff def crc_update(crc, data): """Update CRC-32C checksum with data. Args: crc: 32-bit checksum to update as long. data: byte array, string or iterable over bytes. Returns: 32-bit updated CRC-32C as long. """ buf = bytes(data) for b in buf: table_index = (crc ^ b) & 0xff crc = (CRC_TABLE[table_index] ^ (crc >> 8)) & 0xffffffff return crc & 0xffffffff def crc_finalize(crc): """Finalize CRC-32C checksum. This function should be called as last step of crc calculation. Args: crc: 32-bit checksum as long. Returns: finalized 32-bit checksum as long """ return crc ^ 0xffffffff def crc(data): """Compute CRC-32C checksum of the data. Args: data: byte array, string or iterable over bytes. Returns: 32-bit CRC-32C checksum of data as long. """ return crc_finalize(crc_update(CRC_INIT, data)) gr-satellites-4.4.0/python/csp_header.py000066400000000000000000000024121414055407700202740ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2017 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import struct class CSP(object): def __init__(self, csp_packet): if len(csp_packet) < 4: raise ValueError('Malformed CSP packet (too short)') csp = struct.unpack('> 30) & 0x3 self.source = (csp >> 25) & 0x1f self.destination = (csp >> 20) & 0x1f self.dest_port = (csp >> 14) & 0x3f self.source_port = (csp >> 8) & 0x3f self.reserved = (csp >> 4) & 0xf self.hmac = (csp >> 3) & 1 self.xtea = (csp >> 2) & 1 self.rdp = (csp >> 1) & 1 self.crc = csp & 1 def __str__(self): return ("""CSP header: Priority:\t\t{} Source:\t\t\t{} Destination:\t\t{} Destination port:\t{} Source port:\t\t{} Reserved field:\t\t{} HMAC:\t\t\t{} XTEA:\t\t\t{} RDP:\t\t\t{} CRC:\t\t\t{}""".format( self.priority, self.source, self.destination, self.dest_port, self.source_port, self.reserved, self.hmac, self.xtea, self.rdp, self.crc)) gr-satellites-4.4.0/python/ecss_pus.py000066400000000000000000000007561414055407700200340ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2018 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from construct import * TMSecondaryHeader = BitStruct( 'version' / BitsInteger(4), 'time_reference_status' / BitsInteger(4), 'service_type_id' / BitsInteger(8), 'message_subtype_id' / BitsInteger(8), 'message_type_counter' / BitsInteger(16), 'destination_id' / BitsInteger(16)) gr-satellites-4.4.0/python/eseo_line_decoder.py000066400000000000000000000044051414055407700216320ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2018 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr import numpy as np import pmt def reflect_bytes(x): return np.fliplr(x[:x.size//8*8].reshape((-1, 8))).ravel() def destuff(x): y = list() run = 0 for i, bit in enumerate(x): if run == 5: if bit == 1: # Unexpected long run of ones return else: run = 0 elif bit == 0: run = 0 y.append(bit) elif bit == 1: run += 1 y.append(bit) return np.array(y, dtype='uint8') def descramble(x): y = np.concatenate((np.zeros(17, dtype='uint8'), x)) z = y[:-17] ^ y[5:-12] ^ y[17:] return z def nrzi_decode(x): return x ^ np.concatenate((np.zeros(1, dtype='uint8'), x[:-1])) ^ 1 class eseo_line_decoder(gr.basic_block): """docstring for block eseo_line_decoder""" def __init__(self): gr.basic_block.__init__( self, name='eseo_line_decoder', in_sig=[], out_sig=[]) self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('out')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = np.array(pmt.u8vector_elements(msg), dtype='uint8') # Decode ESEO "line coding" packet = np.unpackbits(packet) packet = destuff(packet) if packet is None: return packet = descramble(packet) packet = nrzi_decode(packet) packet = reflect_bytes(packet) # Remove dummy padding cutbits = packet.size % 8 if cutbits: packet = packet[:-cutbits] packet = np.packbits(packet) packet = bytes(packet) self.message_port_pub(pmt.intern('out'), pmt.cons(pmt.car(msg_pmt), pmt.init_u8vector(len(packet), packet))) gr-satellites-4.4.0/python/eseo_packet_crop.py000066400000000000000000000030771414055407700215140ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2018 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr import numpy as np import pmt from .eseo_line_decoder import reflect_bytes class eseo_packet_crop(gr.basic_block): """docstring for block eseo_packet_crop""" def __init__(self, drop_rs): gr.basic_block.__init__( self, name='eseo_packet_handler', in_sig=[], out_sig=[]) self.drop_rs = drop_rs self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('out')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = bytes(pmt.u8vector_elements(msg)) # Find packet end marker idx = packet.find(b'\x7e\x7e') if idx == -1: return crop = idx if not self.drop_rs else idx - 16 if crop < 0: return # Reverse byte ordering packet = np.frombuffer(packet[:crop], dtype='uint8') packet = np.packbits(reflect_bytes(np.unpackbits(packet))) packet = bytes(packet) self.message_port_pub(pmt.intern('out'), pmt.cons(pmt.car(msg_pmt), pmt.init_u8vector(len(packet), packet))) gr-satellites-4.4.0/python/feh.py000066400000000000000000000011501414055407700167370ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2018 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import subprocess class FehOpener(): def __init__(self, fullscreen=True, interval=1): self.fullscreen = fullscreen self.interval = interval def __params(self): p = ['-F'] if self.fullscreen else [] return p + ['-R', str(self.interval)] def open(self, filename): subprocess.Popen(['feh'] + self.__params() + [filename], stdin=subprocess.DEVNULL) gr-satellites-4.4.0/python/filereceiver/000077500000000000000000000000001414055407700202725ustar00rootroot00000000000000gr-satellites-4.4.0/python/filereceiver/CMakeLists.txt000066400000000000000000000034401414055407700230330ustar00rootroot00000000000000# Copyright 2011 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. ######################################################################## # Include python install macros ######################################################################## include(GrPython) if(NOT PYTHONINTERP_FOUND) return() endif() ######################################################################## # Install python sources ######################################################################## GR_PYTHON_INSTALL( FILES __init__.py by70_1.py dsat.py k2sat.py filereceiver.py imagereceiver.py lucky7.py mirsat1.py sat_1kuns_pf.py smogp.py swiatowid.py DESTINATION ${GR_PYTHON_DIR}/satellites/filereceiver ) ######################################################################## # Handle the unit tests ######################################################################## include(GrTest) set(GR_TEST_TARGET_DEPS gnuradio-satellites) set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig) gr-satellites-4.4.0/python/filereceiver/__init__.py000066400000000000000000000011341414055407700224020ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # ''' gr-satellites filereceiver This module contains the File Receiver class and child classes This class is used to reassemble files transmitted in chunks ''' from .by70_1 import by70_1 from .dsat import dsat from .k2sat import k2sat from .lucky7 import lucky7 from .mirsat1 import mirsat1 from .sat_1kuns_pf import sat_1kuns_pf from .smogp import smog1 from .smogp import smogp from .swiatowid import swiatowid gr-satellites-4.4.0/python/filereceiver/by70_1.py000066400000000000000000000011421414055407700216430ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from construct.core import ConstructError from .imagereceiver import ImageReceiver from ..telemetry import by70_1 as tlm class ImageReceiverBY701(ImageReceiver): def filename(self, fid): return f'{fid}.jpg' def parse_chunk(self, chunk): try: frame = tlm.parse(chunk) except ConstructError: return None return frame.camera by70_1 = ImageReceiverBY701 gr-satellites-4.4.0/python/filereceiver/dsat.py000066400000000000000000000056001414055407700216000ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import struct import datetime import types from .imagereceiver import ImageReceiver from ..telemetry.csp import CSPHeader class ImageReceiverDSAT(ImageReceiver): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self._dsat_reset_segments() def _dsat_reset_segments(self): self._dsat_old_offset = 0 self._dsat_current_segment = 0 self._dsat_current_segment_size = None def _dsat_segment_size(self, chunk): return struct.unpack('>I', chunk[-4:])[0] def chunk_offset(self, chunk): offset = struct.unpack('>I', chunk[-8:-4])[0] # handle offset rollover if self._dsat_old_offset > offset: self.log('D-SAT offset rollover') if self._dsat_current_segment_size is None: self.log('unknown last segment size, ' 'taking from current chunk') self._dsat_current_segment_size = ( self._dsat_segment_size(chunk)) self._dsat_current_segment += self._dsat_current_segment_size self.log(f'current segment now {self._dsat_current_segment}') self._dsat_old_offset = offset self._dsat_current_segment_size = self._dsat_segment_size(chunk) return self._dsat_current_segment + offset def chunk_data(self, chunk): return chunk[4:-8] def filename(self, fid): return f'{fid}.jpg' def parse_chunk(self, chunk): if len(chunk) <= 15+8: return None header = CSPHeader.parse(chunk) # destination port 30 is used for JPEG blocks if header.destination_port != 30: return None return chunk def _watch_file_announcements(self, chunk): if len(chunk) < 25: return header = CSPHeader.parse(chunk) # destination port 12 is used for announcements if header.destination_port != 12: return timestamp = datetime.datetime.utcfromtimestamp( struct.unpack(' # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import pathlib class File: """ Class to hold housekeeping data about a file being received """ def __init__(self, path): """ Builds a new file, initializing housekeeping data Args: path: path of the file (pathlib.Path) """ self.path = path mode = 'r+b' if path.exists() else 'wb' self.f = open(path, mode) self.broken = False self.expected_seq = 0 self.write_pointer = 0 self.size = None self.chunks = None class FileReceiver: """ Class to reassemble files transmitted in chunks This implements the generic framework. Specific protocols should inherit from this class and implement some functions """ def __init__(self, path, verbose=False): """ Builds a new FileReceiver Args: path: directory where files should be stored (str or pathlib.Path) verbose: verbose reporting of events (bool) """ self._files = dict() self._current_file = None self._next_fid = 0 self._path = pathlib.Path(path) self._verbose = verbose self._name = 'FileReceiver' def file_id(self, chunk): """ Returns the file ID of a given chunk If the file cannot be identified from a chunk, it should return None. The default implementation returns chunk.file_id if available else None Args: chunk: a file chunk (parsed by parse_chunk()) """ return getattr(chunk, 'file_id', None) def chunk_sequence(self, chunk): """ Returns the sequence number of a given chunk The sequence number should increase from 0. If the chunk number cannot be identified from a chunk, or if chunk_offset is used instead, it should return None. The default implementation returns chunk.sequence if available else None Args: chunk: a file chunk (parsed by parse_chunk()) """ return getattr(chunk, 'sequence', None) def chunk_size(self): """ Returns the size of a chunk if all chunks (except possibly the last one) have the same fixed size, None if not """ return None def chunk_offset(self, chunk): """ Returns the offset in bytes of a given chunk within the file This should return None if it is not possible to determine the chunk offset from the chunk. The default implementation first returns chunk.offset if available. If not, it tries to use chunk_sequence() and chunk_size() to determine the offset. Args: chunk: a file chunk (parsed by parse_chunk()) """ off = getattr(chunk, 'offset', None) if off is not None: return off s = self.chunk_size() i = self.chunk_sequence(chunk) if s is not None and i is not None: return s * i else: return None def chunk_data(self, chunk): """ Returns the file data in a given chunk The default implementation returns chunk.data. Args: chunk: a file chunk (parsed by parse_chunk()) Returns: bytes """ return chunk.data def file_chunks(self, chunk): """ Returns the total number of chunks in the file The default implementation returns chunk.chunks if available else None Args: chunk: a file chunk (parsed by parse_chunk()) """ return getattr(chunk, 'chunks', None) def file_size(self, chunk): """ Returns the total number of bytes in the file The default implementation returns chunk.filesize if available else None Args: chunk: a file chunk (parsed by parse_chunk()) """ return getattr(chunk, 'filesize', None) def is_last_chunk(self, chunk): """ Returns whether this is the last chunk in the file The default implementation returns None Args: chunk: a file chunk (parsed by parse_chunk()) Returns: True if this is is the last chunk, False if this is not the last chunk, None if it is unknown whether this is the last chunk. """ return None def parse_chunk(self, chunk): """ Parses the chunk into an object which is easier to handle The default implementation does nothing. A return of None means the chunk is invalid and should not be processed. Args: chunk: a file chunk (bytes) """ return chunk def filename(self, fid): """ Generates a filename based on the file id The default implementation uses the file id as filename Args: fid: file id (usually int) """ return str(fid) def on_completion(self, f): """ Function to be called on file completion The user should overload this function if some action needs to be done after a file is complete Args: f: the file just completed (File) """ def _new_file(self, fid): """ Creates a new file Args: fid: file id of the new file (usually int) Returns: the new file """ f = File(self._path / self.filename(fid)) self._files[fid] = f return f def _fill_file_data(self, f, chunk): """ Tries to fill some file data from the chunk Args: f: a File chunk: a file chunk (parsed by parse_chunk()) """ if f.size is None: f.size = self.file_size(chunk) if f.chunks is None: f.chunks = self.file_chunks(chunk) def log(self, message): if self._verbose: print(f'{self._name}: {message}') def push_chunk(self, chunk): """ Processes a new chunk The user should call this function whenever a new chunk is received. Args: chunk: the file chunk (bytes) """ chunk = self.parse_chunk(chunk) if chunk is None: return # Find file # TODO: logic about new file when file_id == None fid = self.file_id(chunk) if fid is None: fid = self._current_file if fid is None: fid = self._next_fid self._next_fid += 1 try: f = self._files[fid] except KeyError: self.log(f'new file {fid}') f = self._new_file(fid) seq = self.chunk_sequence(chunk) # Detect a new file if sequence has decreased if (self.file_id(chunk) is None and seq is not None and seq < f.expected_seq): # f is finished self.log(f'file {fid} is finished') fid = self._next_fid self._next_fid += 1 f = self._new_file(fid) self.log(f'receiving new file {fid}') self._current_file = fid self._fill_file_data(f, chunk) if seq is not None: self.log(f'received sequence {seq} for file {fid}') if f.broken: # File is broken, nothing can be done with the chunk return # Try to determine offset offset = self.chunk_offset(chunk) if seq is None and offset is not None: self.log(f'received offset {offset} for file {fid}') if offset is None: # Check sequence continuity if seq is None: raise Exception( 'FileReceiver unable to compute chunk_offset() ' 'nor chunk_sequence()') if seq != f.expected_seq: self.log(f'received sequence {seq} != expected sequence ' f'{f.expected_seq}. File reception is broken.') f.broken = True return offset = f.write_pointer data = self.chunk_data(chunk) new_write_pointer = offset + len(data) # check offset within size if f.size is not None and new_write_pointer > f.size: self.log(f'invalid offset {offset} (chunk size is {len(data)}, ' f'file size is {f.size})') return # write chunk at offset f.f.seek(offset) f.f.write(data) f.f.flush() # update pointers f.write_pointer = new_write_pointer f.expected_seq = seq + 1 if seq is not None else None # check if file is complete if ((f.size is not None and f.write_pointer >= f.size) or (f.chunks is not None and f.expected_seq >= f.chunks) or self.is_last_chunk(chunk)): self.log(f'file {fid} complete') self.on_completion(f) self._current_file = None gr-satellites-4.4.0/python/filereceiver/imagereceiver.py000066400000000000000000000045571414055407700234660ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import sys from ..feh import FehOpener from .filereceiver import FileReceiver class ImageReceiver(FileReceiver): """ Class to reassemble images transmitted in chunks and display them in real-time using feh This implements the generic framework. Specific protocols should inherit from this class and implement some FileReceiver methods """ def __init__(self, path, verbose=False, display=False, fullscreen=True): """ Builds a new ImageReceiver Args: path: directory where files should be stored (str or pathlib.Path) verbose: verbose reporting of events (bool) display: display image in real-time using feh (bool) fullscreen: run feh in fullscreen (bool) """ super().__init__(path, verbose) self._feh = FehOpener(fullscreen) if display else None self._name = 'ImageReceiver' def filename(self, fid): """ Generates a filename based on the file id The default implementation uses the fid.jpg as filename Args: fid: file id (usually int) """ return f'{fid}.jpg' def _new_file(self, fid): """ Creates a new file Args: fid: file id of the new file (usually int) Returns: the new file """ f = super()._new_file(fid) f.displaying = False return f def push_chunk(self, chunk): """ Processes a new chunk The user should call this function whenever a new chunk is received. Args: chunk: the file chunk (bytes) """ super().push_chunk(chunk) if self._current_file is None: return f = self._files[self._current_file] if f.write_pointer >= 10*64: # Enough data to display if self._feh is not None and not f.displaying: f.displaying = True try: self._feh.open(f.path) except Exception as e: print('Unable to open feh image viewer', file=sys.stderr) print(e, file=sys.stderr) gr-satellites-4.4.0/python/filereceiver/k2sat.py000066400000000000000000000033321414055407700216710ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import struct from .imagereceiver import ImageReceiver class ImageReceiverK2SAT(ImageReceiver): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self._last_frame_count = None self._unwrap = 0 self._first_header_frame_count = None def _first_header_pointer(self, chunk): return chunk[16 + 3] def _virtual_channel_frame_count(self, chunk): return chunk[16 + 2] def _unwrapped_frame_count(self, chunk): fc = self._virtual_channel_frame_count(chunk) + self._unwrap if self._last_frame_count is not None and fc < self._last_frame_count: self._unwrap += 256 fc += 256 self._last_frame_count = fc return fc def chunk_sequence(self, chunk): fh = self._first_header_pointer(chunk) if fh == 0x00: # First packet in image self._first_header_frame_count = self._unwrapped_frame_count(chunk) return 0 return (self._unwrapped_frame_count(chunk) - self._first_header_frame_count if self._first_header_frame_count is not None else None) def is_last_chunk(self, chunk): # 0xff indicates last packet in image return self._first_header_pointer(chunk) == 0xff def chunk_data(self, chunk): return chunk[20:-1] def filename(self, fid): return f'{fid}.jpg' def parse_chunk(self, chunk): return chunk if len(chunk) > 16 + 4 + 1 else None k2sat = ImageReceiverK2SAT gr-satellites-4.4.0/python/filereceiver/lucky7.py000066400000000000000000000016741414055407700220720ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # # Based on the decoder by Xerbo # https://github.com/Xerbo/Lucky7-Decoder import struct from .imagereceiver import ImageReceiver class ImageReceiverLucky7(ImageReceiver): def chunk_sequence(self, chunk): return struct.unpack('>H', chunk[3:5])[0] def chunk_size(self): return 28 def chunk_data(self, chunk): return chunk[7:] def file_size(self, chunk): return self.chunk_size() * struct.unpack('>H', chunk[5:7])[0] def parse_chunk(self, chunk): address = struct.unpack('>H', chunk[1:3])[0] if (address < 0xC000 or address >= ( 0xC000 + self.file_size(chunk)/self.chunk_size())): return None return chunk lucky7 = ImageReceiverLucky7 gr-satellites-4.4.0/python/filereceiver/mirsat1.py000066400000000000000000000016671414055407700222360ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2021 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import struct from construct import ConstructError from .filereceiver import FileReceiver from ..telemetry import ax25 class FileReceiverMirSat1(FileReceiver): def file_id(self, chunk): return struct.unpack(' # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import struct from .imagereceiver import ImageReceiver class ImageReceiver1KUNSPF(ImageReceiver): def chunk_sequence(self, chunk): return struct.unpack('>H', chunk[4:6])[0] def chunk_data(self, chunk): return chunk[6:-4] def filename(self, fid): return f'{fid}.jpg' def parse_chunk(self, chunk): if len(chunk) != 138: return None else: return chunk sat_1kuns_pf = ImageReceiver1KUNSPF gr-satellites-4.4.0/python/filereceiver/smogp.py000066400000000000000000000023161414055407700217730ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from construct.core import ConstructError from .filereceiver import FileReceiver from ..telemetry import smogp as tlm_smogp from ..telemetry import smog1 as tlm_smog1 class FileReceiverSMOG(FileReceiver): def file_id(self, chunk): return ( f'spectrum_start_{chunk.startfreq}_step_{chunk.stepfreq}' f'_rbw_{chunk.rbw}_measid_{chunk.measid}') def chunk_size(self): return 224 def chunk_sequence(self, chunk): return chunk.pckt_index def chunk_data(self, chunk): return chunk.spectrum_data def file_size(self, chunk): return chunk.pckt_count * self.chunk_size() def parse_chunk(self, chunk): try: frame = self._tlm.parse(chunk) except ConstructError: return None return frame.payload if frame.type == 5 else None class FileReceiverSMOGP(FileReceiverSMOG): _tlm = tlm_smogp class FileReceiverSMOG1(FileReceiverSMOG): _tlm = tlm_smog1 smogp = FileReceiverSMOGP smog1 = FileReceiverSMOG1 gr-satellites-4.4.0/python/filereceiver/swiatowid.py000066400000000000000000000014701414055407700226600ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from construct import * from .imagereceiver import ImageReceiver block_size = 46 swiatowid_image_block = Struct( 'sequence' / Int16ul, 'data' / Bytes(block_size) ) class ImageReceiverSwiatowid(ImageReceiver): def filename(self, fid): return f'{fid}.jpg' def chunk_size(self): return block_size def parse_chunk(self, chunk): if len(chunk) != swiatowid_image_block.sizeof(): return None try: frame = swiatowid_image_block.parse(chunk) except ConstructError: return None return frame swiatowid = ImageReceiverSwiatowid gr-satellites-4.4.0/python/fixedlen_tagger.py000066400000000000000000000062571414055407700213410ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2017 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import collections import numpy from gnuradio import gr import pmt class fixedlen_tagger(gr.basic_block): """ docstring for block fixedlen_tagger """ def __init__(self, syncword_tag, packetlen_tag, packet_len, stream_type): gr.basic_block.__init__( self, name='fixedlen_tagger', in_sig=[stream_type], out_sig=[stream_type]) self.syncword_tag = pmt.string_to_symbol(syncword_tag) self.packetlen_tag = pmt.string_to_symbol(packetlen_tag) self.packet_len = packet_len self.stream = collections.deque(maxlen=packet_len - 1) self.maxtag = -1 self.data = [] self.tags = [] self.tags_to_write = [] self.written = 0 self.really_written = 0 def set_packet_len(self, packet_len): self.packet_len = packet_len self.stream = collections.deque( self.stream, maxlen=self.packet_len - 1) def try_to_flush(self, out): # Try to send as much items as we have in buffer len_write = min(len(self.data), len(out)) out[:len_write] = self.data[:len_write] self.data = self.data[len_write:] self.really_written += len_write for tag in self.tags_to_write[:]: # Modifying self.tags_to_write during the loop would # disturb the loop control, so we copy it if tag < self.really_written: self.tags_to_write.remove(tag) self.add_item_tag(0, tag, self.packetlen_tag, pmt.from_long(self.packet_len)) return len_write def general_work(self, input_items, output_items): inp = input_items[0] out = output_items[0] if self.data: # Write as much as possible without consuming input return self.try_to_flush(out) window = list(self.stream) + inp.tolist() alltags = self.get_tags_in_range(0, self.maxtag + 1, self.nitems_read(0) + len(inp), self.syncword_tag) for tag in alltags: if tag.offset not in self.tags: self.maxtag = max(self.maxtag, tag.offset) self.tags.append(tag.offset) for tag in self.tags[:]: # Modifying self.tags during the loop would disturb the # loop control, so we copy it if (tag >= self.nitems_read(0) - len(self.stream) and tag < self.nitems_read(0) + len(inp) - self.packet_len + 1): self.tags.remove(tag) start = tag - self.nitems_read(0) + len(self.stream) packet = window[start:start+self.packet_len] self.data += packet self.tags_to_write.append(self.written) self.written += self.packet_len self.stream.extend(inp.tolist()) self.consume(0, len(inp)) return self.try_to_flush(out) gr-satellites-4.4.0/python/funcube_submit.py000066400000000000000000000035561414055407700212230ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2018 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import hashlib from gnuradio import gr import numpy import pmt import requests class funcube_submit(gr.basic_block): """docstring for block funcube_submit""" def __init__(self, url, site_id, auth_code): gr.basic_block.__init__( self, name='funcube_submit', in_sig=[], out_sig=[]) self.base_url = url self.site_id = site_id self.auth_code = auth_code self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) def digest(self, hex_string): md5 = hashlib.md5() md5.update(hex_string) md5.update(b':') md5.update(bytes(self.auth_code, encoding='ascii')) return md5.digest().hex() def handle_msg(self, msg_pmt): if not self.base_url or not self.site_id or not self.auth_code: return msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print("[ERROR] Received invalid message type. Expected u8vector") return frame = bytes(bytes(pmt.u8vector_elements(msg)).hex().upper(), encoding='ascii') # Add a space every two hex chars frame = b' '.join([frame[j:j+2] for j in range(0, len(frame), 2)]) url = (self.base_url + '/api/data/hex/' + self.site_id + '/?digest=' + self.digest(frame)) r = requests.post(url, data=frame, headers={'Content-Type': 'application/text'}) if r.status_code != 200: print('FUNcube server error while submitting telemetry') print('Reply:', r.text) print('HTTP code', r.status_code) gr-satellites-4.4.0/python/hdlc.py000066400000000000000000000010401414055407700171050ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2017 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import numpy flag = bytes([0] + 6*[1] + [0]) def crc_ccitt(data): # Implementation taken from # hdlc_framer_pb_impl.cc in gr-digital poly = 0x8408 # reflected 0x1021 crc = 0xffff for byte in data: crc ^= byte for _ in range(8): crc = (crc >> 1) ^ poly if crc & 1 else crc >> 1 return crc ^ 0xffff gr-satellites-4.4.0/python/hdlc_deframer.py000066400000000000000000000050521414055407700207610ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2017 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import collections from gnuradio import gr import numpy import pmt from . import hdlc def pack(s): d = bytearray() for i in range(0, len(s), 8): x = 0 for j in range(7, -1, -1): # LSB first x <<= 1 x += s[i+j] d.append(x) return d def fcs_ok(frame): if len(frame) <= 2: return False crc = hdlc.crc_ccitt(frame[:-2]) return frame[-2] == (crc & 0xff) and frame[-1] == ((crc >> 8) & 0xff) class hdlc_deframer(gr.sync_block): """docstring for block hdlc_deframer""" def __init__(self, check_fcs, max_length, crc_check_func=fcs_ok): gr.sync_block.__init__( self, name='hdlc_deframer', in_sig=[numpy.uint8], out_sig=None) self.bits = collections.deque(maxlen=(max_length+2)*8 + 7) self.ones = 0 # consecutive ones for flag checking self.check = check_fcs self.fcs_ok = crc_check_func self.message_port_register_out(pmt.intern('out')) def work(self, input_items, output_items): in0 = input_items[0] for x in in0: if x: self.ones += 1 self.bits.append(x) else: if self.ones == 5: # destuff = do nothing None elif self.ones > 5: # Should be ones == 6 unless packet is corrupted. # Flag received. Prepare to send frame for _ in range(min(7, len(self.bits))): # Remove 7 previous flag bits self.bits.pop() if len(self.bits) % 8: # Pad on the left with 0's self.bits.extendleft([0] * (8 - len(self.bits) % 8)) frame = pack(self.bits) self.bits.clear() if frame and (not self.check or self.fcs_ok(frame)): # Send frame buff = frame[:-2] # trim fcs self.message_port_pub( pmt.intern('out'), pmt.cons(pmt.PMT_NIL, pmt.init_u8vector(len(buff), buff))) else: self.bits.append(x) self.ones = 0 return len(input_items[0]) gr-satellites-4.4.0/python/hdlc_framer.py000066400000000000000000000035271414055407700204550ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2017 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import collections from gnuradio import gr import numpy import pmt from . import hdlc class hdlc_framer(gr.basic_block): """docstring for block hdlc_framer""" def __init__(self, preamble_bytes, postamble_bytes): gr.basic_block.__init__( self, name='hdlc_framer', in_sig=None, out_sig=None) self.preamble_bytes = preamble_bytes self.postamble_bytes = postamble_bytes self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('out')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return data = list(pmt.u8vector_elements(msg)) crc = hdlc.crc_ccitt(data) data.append(crc & 0xff) data.append((crc >> 8) & 0xff) buff = list(hdlc.flag * self.preamble_bytes) ones = 0 # number of consecutive ones for byte in data: for _ in range(8): # Transmit byte LSB first x = byte & 1 buff.append(x) if x: ones += 1 else: ones = 0 if ones == 5: # Bit-stuff buff.append(0) ones = 0 byte >>= 1 buff.extend(hdlc.flag * self.postamble_bytes) self.message_port_pub( pmt.intern('out'), pmt.cons(pmt.PMT_NIL, pmt.init_u8vector(len(buff), buff))) gr-satellites-4.4.0/python/hier/000077500000000000000000000000001414055407700165555ustar00rootroot00000000000000gr-satellites-4.4.0/python/hier/CMakeLists.txt000066400000000000000000000034711414055407700213220ustar00rootroot00000000000000# Copyright 2011 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. ######################################################################## # Include python install macros ######################################################################## include(GrPython) if(NOT PYTHONINTERP_FOUND) return() endif() ######################################################################## # Install python sources ######################################################################## GR_PYTHON_INSTALL( FILES __init__.py ccsds_descrambler.py ccsds_viterbi.py si4463_scrambler.py sync_to_pdu.py sync_to_pdu_packed.py sync_to_pdu_soft.py rms_agc.py rms_agc_f.py pn9_scrambler.py DESTINATION ${GR_PYTHON_DIR}/satellites/hier ) ######################################################################## # Handle the unit tests ######################################################################## include(GrTest) set(GR_TEST_TARGET_DEPS gnuradio-satellites) set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig) gr-satellites-4.4.0/python/hier/__init__.py000066400000000000000000000012421414055407700206650ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # ''' gr-satellites hierarchical flowgraphs These are Python files compiled from hierarchical flowgraphs ''' from .ccsds_descrambler import ccsds_descrambler from .ccsds_viterbi import ccsds_viterbi from .pn9_scrambler import pn9_scrambler from .rms_agc import rms_agc from .rms_agc_f import rms_agc_f from .si4463_scrambler import si4463_scrambler from .sync_to_pdu import sync_to_pdu from .sync_to_pdu_packed import sync_to_pdu_packed from .sync_to_pdu_soft import sync_to_pdu_soft gr-satellites-4.4.0/python/hier/ccsds_descrambler.grc000066400000000000000000000075441414055407700227260ustar00rootroot00000000000000options: parameters: author: Daniel Estevez category: '[Satellites]/Scrambling' cmake_opt: '' comment: '' copyright: '' description: CCSDS descrambler (input is unpacked, output is packed) gen_cmake: 'On' gen_linking: dynamic generate_options: hb hier_block_src_path: '.:' id: ccsds_descrambler max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: prompt sizing_mode: fixed thread_safe_setters: '' title: CCSDS descrambler window_size: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: blocks_pdu_to_tagged_stream_0 id: blocks_pdu_to_tagged_stream parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' tag: packet_len type: byte states: bus_sink: false bus_source: false bus_structure: null coordinate: [40, 236] rotation: 0 state: enabled - name: blocks_tagged_stream_multiply_length_0_0_0_0 id: blocks_tagged_stream_multiply_length parameters: affinity: '' alias: '' c: 1/8.0 comment: '' lengthtagname: packet_len maxoutbuf: '0' minoutbuf: '0' type: byte vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [720, 224] rotation: 0 state: enabled - name: blocks_tagged_stream_to_pdu_0_0_0_0_0 id: blocks_tagged_stream_to_pdu parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' tag: packet_len type: byte states: bus_sink: false bus_source: false bus_structure: null coordinate: [1016, 236] rotation: 0 state: enabled - name: blocks_unpacked_to_packed_xx_0_0_0_0 id: blocks_unpacked_to_packed_xx parameters: affinity: '' alias: '' bits_per_chunk: '1' comment: '' endianness: gr.GR_MSB_FIRST maxoutbuf: '0' minoutbuf: '0' num_ports: '1' type: byte states: bus_sink: false bus_source: false bus_structure: null coordinate: [504, 228] rotation: 0 state: enabled - name: digital_additive_scrambler_bb_0_0 id: digital_additive_scrambler_bb parameters: affinity: '' alias: '' bits_per_byte: '1' comment: '' count: '0' len: '7' mask: '0xA9' maxoutbuf: '0' minoutbuf: '0' reset_tag_key: '"packet_len"' seed: '0xFF' states: bus_sink: false bus_source: false bus_structure: null coordinate: [280, 200] rotation: 0 state: enabled - name: pad_sink_0 id: pad_sink parameters: affinity: '' alias: '' comment: '' label: out num_streams: '1' optional: 'False' type: message vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1152, 324] rotation: 0 state: enabled - name: pad_source_0 id: pad_source parameters: affinity: '' alias: '' comment: '' label: in maxoutbuf: '0' minoutbuf: '0' num_streams: '1' optional: 'False' type: message vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 148] rotation: 0 state: enabled connections: - [blocks_pdu_to_tagged_stream_0, '0', digital_additive_scrambler_bb_0_0, '0'] - [blocks_tagged_stream_multiply_length_0_0_0_0, '0', blocks_tagged_stream_to_pdu_0_0_0_0_0, '0'] - [blocks_tagged_stream_to_pdu_0_0_0_0_0, pdus, pad_sink_0, in] - [blocks_unpacked_to_packed_xx_0_0_0_0, '0', blocks_tagged_stream_multiply_length_0_0_0_0, '0'] - [digital_additive_scrambler_bb_0_0, '0', blocks_unpacked_to_packed_xx_0_0_0_0, '0'] - [pad_source_0, out, blocks_pdu_to_tagged_stream_0, pdus] metadata: file_format: 1 gr-satellites-4.4.0/python/hier/ccsds_descrambler.py000066400000000000000000000046411414055407700225760ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # SPDX-License-Identifier: GPL-3.0 # # GNU Radio Python Flow Graph # Title: CCSDS descrambler # Author: Daniel Estevez # Description: CCSDS descrambler (input is unpacked, output is packed) # GNU Radio version: 3.8.0.0 from gnuradio import blocks from gnuradio import digital from gnuradio import gr from gnuradio.filter import firdes class ccsds_descrambler(gr.hier_block2): def __init__(self): gr.hier_block2.__init__( self, 'CCSDS descrambler', gr.io_signature(0, 0, 0), gr.io_signature(0, 0, 0), ) self.message_port_register_hier_in("in") self.message_port_register_hier_out("out") ################################################## # Blocks ################################################## self.digital_additive_scrambler_bb_0_0 = digital.additive_scrambler_bb( 0xA9, 0xFF, 7, count=0, bits_per_byte=1, reset_tag_key="packet_len") self.blocks_unpacked_to_packed_xx_0_0_0_0 = ( blocks.unpacked_to_packed_bb(1, gr.GR_MSB_FIRST)) self.blocks_tagged_stream_to_pdu_0_0_0_0_0 = ( blocks.tagged_stream_to_pdu(blocks.byte_t, 'packet_len')) self.blocks_tagged_stream_multiply_length_0_0_0_0 = ( blocks.tagged_stream_multiply_length( gr.sizeof_char*1, 'packet_len', 1/8.0)) self.blocks_pdu_to_tagged_stream_0 = ( blocks.pdu_to_tagged_stream(blocks.byte_t, 'packet_len')) ################################################## # Connections ################################################## self.msg_connect( (self.blocks_tagged_stream_to_pdu_0_0_0_0_0, 'pdus'), (self, 'out')) self.msg_connect( (self, 'in'), (self.blocks_pdu_to_tagged_stream_0, 'pdus')) self.connect( (self.blocks_pdu_to_tagged_stream_0, 0), (self.digital_additive_scrambler_bb_0_0, 0)) self.connect( (self.blocks_tagged_stream_multiply_length_0_0_0_0, 0), (self.blocks_tagged_stream_to_pdu_0_0_0_0_0, 0)) self.connect( (self.blocks_unpacked_to_packed_xx_0_0_0_0, 0), (self.blocks_tagged_stream_multiply_length_0_0_0_0, 0)) self.connect( (self.digital_additive_scrambler_bb_0_0, 0), (self.blocks_unpacked_to_packed_xx_0_0_0_0, 0)) gr-satellites-4.4.0/python/hier/ccsds_viterbi.grc000066400000000000000000000046461414055407700221070ustar00rootroot00000000000000options: parameters: author: Daniel Estevez category: '[Satellites]/FEC' cmake_opt: '' comment: '' copyright: '' description: Viterbi27 decoder with convention (POLYB, ~POLYA) (output is unpacked) gen_cmake: 'On' gen_linking: dynamic generate_options: hb hier_block_src_path: '.:' id: ccsds_viterbi max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: prompt sizing_mode: fixed thread_safe_setters: '' title: CCSDS/NASA-GSFC Viterbi decoder window_size: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: dec_cc id: variable_cc_decoder_def parameters: comment: '' dim1: '4' dim2: '4' framebits: '80' k: '7' mode: fec.CC_STREAMING ndim: '0' padding: 'False' polys: '[79, -109]' rate: '2' state_end: '-1' state_start: '0' value: '"ok"' states: bus_sink: false bus_source: false bus_structure: null coordinate: [952, 252] rotation: 0 state: enabled - name: fec_extended_decoder_0_0 id: fec_extended_decoder parameters: affinity: '' alias: '' ann: None comment: '' decoder_list: dec_cc maxoutbuf: '0' minoutbuf: '0' puncpat: '''11''' threadtype: none value: fec_extended_decoder states: bus_sink: false bus_source: false bus_structure: null coordinate: [440, 124] rotation: 0 state: enabled - name: pad_sink_0 id: pad_sink parameters: affinity: '' alias: '' comment: '' label: out num_streams: '1' optional: 'False' type: byte vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1064, 148] rotation: 0 state: enabled - name: pad_source_0 id: pad_source parameters: affinity: '' alias: '' comment: '' label: in maxoutbuf: '0' minoutbuf: '0' num_streams: '1' optional: 'False' type: float vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 148] rotation: 0 state: enabled connections: - [fec_extended_decoder_0_0, '0', pad_sink_0, '0'] - [pad_source_0, '0', fec_extended_decoder_0_0, '0'] metadata: file_format: 1 gr-satellites-4.4.0/python/hier/ccsds_viterbi.py000066400000000000000000000034461414055407700217610ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # SPDX-License-Identifier: GPL-3.0 # # GNU Radio Python Flow Graph # Title: CCSDS/NASA-GSFC Viterbi decoder # Author: Daniel Estevez # Description: Viterbi27 decoder with convention (POLYB, ~POLYA) # (output is unpacked) # GNU Radio version: 3.8.0.0 from gnuradio import fec from gnuradio import gr from gnuradio.filter import firdes class ccsds_viterbi(gr.hier_block2): def __init__(self, code='CCSDS'): gr.hier_block2.__init__( self, 'CCSDS/NASA-GSFC Viterbi decoder', gr.io_signature(1, 1, gr.sizeof_float*1), gr.io_signature(1, 1, gr.sizeof_char*1), ) ################################################## # Variables ################################################## polys = {'CCSDS': [79, -109], 'NASA-DSN': [-109, 79], 'CCSDS uninverted': [79, 109], 'NASA-DSN uninverted': [109, 79], } self.dec_cc = dec_cc = fec.cc_decoder.make( 80, 7, 2, polys[code], 0, -1, fec.CC_STREAMING, False) ################################################## # Blocks ################################################## self.fec_extended_decoder_0_0 = fec.extended_decoder( decoder_obj_list=dec_cc, threading=None, ann=None, puncpat='11', integration_period=10000) ################################################## # Connections ################################################## self.connect((self.fec_extended_decoder_0_0, 0), (self, 0)) self.connect((self, 0), (self.fec_extended_decoder_0_0, 0)) def get_dec_cc(self): return self.dec_cc def set_dec_cc(self, dec_cc): self.dec_cc = dec_cc gr-satellites-4.4.0/python/hier/pn9_scrambler.grc000066400000000000000000000054441414055407700220210ustar00rootroot00000000000000options: parameters: author: Daniel Estevez category: '[Satellites]/Scrambling' cmake_opt: '' comment: '' copyright: '' description: PN9 scrambler gen_cmake: 'On' gen_linking: dynamic generate_options: hb hier_block_src_path: '.:' id: pn9_scrambler max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: prompt sizing_mode: fixed thread_safe_setters: '' title: PN9 scrambler window_size: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: blocks_pdu_to_tagged_stream_0 id: blocks_pdu_to_tagged_stream parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' tag: packet_len type: byte states: bus_sink: false bus_source: false bus_structure: null coordinate: [280, 228] rotation: 0 state: enabled - name: blocks_tagged_stream_to_pdu_0 id: blocks_tagged_stream_to_pdu parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' tag: packet_len type: byte states: bus_sink: false bus_source: false bus_structure: null coordinate: [720, 228] rotation: 0 state: enabled - name: digital_additive_scrambler_bb_0 id: digital_additive_scrambler_bb parameters: affinity: '' alias: '' bits_per_byte: '8' comment: '' count: '0' len: '8' mask: '0x21' maxoutbuf: '0' minoutbuf: '0' reset_tag_key: '"packet_len"' seed: '0x1FF' states: bus_sink: false bus_source: false bus_structure: null coordinate: [512, 188] rotation: 0 state: enabled - name: pad_sink_0 id: pad_sink parameters: affinity: '' alias: '' comment: '' label: out num_streams: '1' optional: 'False' type: message vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [952, 228] rotation: 0 state: enabled - name: pad_source_0 id: pad_source parameters: affinity: '' alias: '' comment: '' label: in maxoutbuf: '0' minoutbuf: '0' num_streams: '1' optional: 'False' type: message vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [144, 228] rotation: 0 state: enabled connections: - [blocks_pdu_to_tagged_stream_0, '0', digital_additive_scrambler_bb_0, '0'] - [blocks_tagged_stream_to_pdu_0, pdus, pad_sink_0, in] - [digital_additive_scrambler_bb_0, '0', blocks_tagged_stream_to_pdu_0, '0'] - [pad_source_0, out, blocks_pdu_to_tagged_stream_0, pdus] metadata: file_format: 1 gr-satellites-4.4.0/python/hier/pn9_scrambler.py000066400000000000000000000035041414055407700216710ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # SPDX-License-Identifier: GPL-3.0 # # GNU Radio Python Flow Graph # Title: PN9 scrambler # Author: Daniel Estevez # Description: PN9 scrambler # GNU Radio version: 3.8.0.0 from gnuradio import blocks from gnuradio import digital from gnuradio import gr from gnuradio.filter import firdes class pn9_scrambler(gr.hier_block2): def __init__(self): gr.hier_block2.__init__( self, 'PN9 scrambler', gr.io_signature(0, 0, 0), gr.io_signature(0, 0, 0), ) self.message_port_register_hier_in('in') self.message_port_register_hier_out('out') ################################################## # Blocks ################################################## self.digital_additive_scrambler_bb_0 = ( digital.additive_scrambler_bb(0x21, 0x1FF, 8, count=0, bits_per_byte=8, reset_tag_key='packet_len')) self.blocks_tagged_stream_to_pdu_0 = ( blocks.tagged_stream_to_pdu(blocks.byte_t, 'packet_len')) self.blocks_pdu_to_tagged_stream_0 = ( blocks.pdu_to_tagged_stream(blocks.byte_t, 'packet_len')) ################################################## # Connections ################################################## self.msg_connect( (self.blocks_tagged_stream_to_pdu_0, 'pdus'), (self, 'out')) self.msg_connect( (self, 'in'), (self.blocks_pdu_to_tagged_stream_0, 'pdus')) self.connect( (self.blocks_pdu_to_tagged_stream_0, 0), (self.digital_additive_scrambler_bb_0, 0)) self.connect( (self.digital_additive_scrambler_bb_0, 0), (self.blocks_tagged_stream_to_pdu_0, 0)) gr-satellites-4.4.0/python/hier/rms_agc.grc000066400000000000000000000100211414055407700206570ustar00rootroot00000000000000options: parameters: author: Daniel Estevez category: '[Satellites]/Level Controllers' cmake_opt: '' comment: '' copyright: '' description: AGC using RMS gen_cmake: 'On' gen_linking: dynamic generate_options: hb hier_block_src_path: '.:' id: rms_agc max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: prompt sizing_mode: fixed thread_safe_setters: '' title: RMS AGC window_size: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: alpha id: parameter parameters: alias: '' comment: '' hide: none label: Alpha short_id: '' type: eng_float value: 1e-2 states: bus_sink: false bus_source: false bus_structure: null coordinate: [240, 12] rotation: 0 state: enabled - name: blocks_add_const_vxx_0 id: blocks_add_const_vxx parameters: affinity: '' alias: '' comment: '' const: 1e-20 maxoutbuf: '0' minoutbuf: '0' type: float vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [432, 260] rotation: 0 state: enabled - name: blocks_divide_xx_0 id: blocks_divide_xx parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' num_inputs: '2' type: complex vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [776, 176] rotation: 0 state: enabled - name: blocks_float_to_complex_0 id: blocks_float_to_complex parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [576, 264] rotation: 0 state: enabled - name: blocks_multiply_const_vxx_0 id: blocks_multiply_const_vxx parameters: affinity: '' alias: '' comment: '' const: 1.0/reference maxoutbuf: '0' minoutbuf: '0' type: float vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [280, 260] rotation: 0 state: enabled - name: blocks_rms_xx_0 id: blocks_rms_xx parameters: affinity: '' alias: '' alpha: alpha comment: '' maxoutbuf: '0' minoutbuf: '0' type: complex states: bus_sink: false bus_source: false bus_structure: null coordinate: [152, 260] rotation: 0 state: enabled - name: pad_sink_0 id: pad_sink parameters: affinity: '' alias: '' comment: '' label: out num_streams: '1' optional: 'False' type: complex vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [920, 172] rotation: 0 state: enabled - name: pad_source_0 id: pad_source parameters: affinity: '' alias: '' comment: '' label: in maxoutbuf: '0' minoutbuf: '0' num_streams: '1' optional: 'False' type: complex vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 172] rotation: 0 state: enabled - name: reference id: parameter parameters: alias: '' comment: '' hide: none label: Reference short_id: '' type: eng_float value: '0.5' states: bus_sink: false bus_source: false bus_structure: null coordinate: [368, 12] rotation: 0 state: enabled connections: - [blocks_add_const_vxx_0, '0', blocks_float_to_complex_0, '0'] - [blocks_divide_xx_0, '0', pad_sink_0, '0'] - [blocks_float_to_complex_0, '0', blocks_divide_xx_0, '1'] - [blocks_multiply_const_vxx_0, '0', blocks_add_const_vxx_0, '0'] - [blocks_rms_xx_0, '0', blocks_multiply_const_vxx_0, '0'] - [pad_source_0, '0', blocks_divide_xx_0, '0'] - [pad_source_0, '0', blocks_rms_xx_0, '0'] metadata: file_format: 1 gr-satellites-4.4.0/python/hier/rms_agc.py000066400000000000000000000045311414055407700205450ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # SPDX-License-Identifier: GPL-3.0 # # GNU Radio Python Flow Graph # Title: RMS AGC # Author: Daniel Estevez # Description: AGC using RMS # GNU Radio version: 3.8.0.0 from gnuradio import blocks from gnuradio import gr from gnuradio.filter import firdes class rms_agc(gr.hier_block2): def __init__(self, alpha=1e-2, reference=0.5): gr.hier_block2.__init__( self, 'RMS AGC', gr.io_signature(1, 1, gr.sizeof_gr_complex*1), gr.io_signature(1, 1, gr.sizeof_gr_complex*1), ) ################################################## # Parameters ################################################## self.alpha = alpha self.reference = reference ################################################## # Blocks ################################################## self.blocks_rms_xx_0 = blocks.rms_cf(alpha) self.blocks_multiply_const_vxx_0 = ( blocks.multiply_const_ff(1.0/reference)) self.blocks_float_to_complex_0 = blocks.float_to_complex(1) self.blocks_divide_xx_0 = blocks.divide_cc(1) self.blocks_add_const_vxx_0 = blocks.add_const_ff(1e-20) ################################################## # Connections ################################################## self.connect( (self.blocks_add_const_vxx_0, 0), (self.blocks_float_to_complex_0, 0)) self.connect((self.blocks_divide_xx_0, 0), (self, 0)) self.connect( (self.blocks_float_to_complex_0, 0), (self.blocks_divide_xx_0, 1)) self.connect( (self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_const_vxx_0, 0)) self.connect( (self.blocks_rms_xx_0, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self, 0), (self.blocks_divide_xx_0, 0)) self.connect((self, 0), (self.blocks_rms_xx_0, 0)) def get_alpha(self): return self.alpha def set_alpha(self, alpha): self.alpha = alpha self.blocks_rms_xx_0.set_alpha(self.alpha) def get_reference(self): return self.reference def set_reference(self, reference): self.reference = reference self.blocks_multiply_const_vxx_0.set_k(1.0/self.reference) gr-satellites-4.4.0/python/hier/rms_agc_f.py000066400000000000000000000042271414055407700210540ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # SPDX-License-Identifier: GPL-3.0 # # GNU Radio Python Flow Graph # Title: RMS AGC # Author: Daniel Estevez # Description: AGC using RMS # GNU Radio version: 3.8.0.0 from gnuradio import blocks from gnuradio import gr from gnuradio.filter import firdes import sys import signal class rms_agc_f(gr.hier_block2): def __init__(self, alpha=1e-2, reference=0.5): gr.hier_block2.__init__( self, 'RMS AGC', gr.io_signature(1, 1, gr.sizeof_float*1), gr.io_signature(1, 1, gr.sizeof_float*1), ) ################################################## # Parameters ################################################## self.alpha = alpha self.reference = reference ################################################## # Blocks ################################################## self.blocks_rms_xx_0 = blocks.rms_ff(alpha) self.blocks_multiply_const_vxx_0 = ( blocks.multiply_const_ff(1.0/reference)) self.blocks_divide_xx_0 = blocks.divide_ff(1) self.blocks_add_const_vxx_0 = blocks.add_const_ff(1e-20) ################################################## # Connections ################################################## self.connect((self.blocks_divide_xx_0, 0), (self, 0)) self.connect( (self.blocks_add_const_vxx_0, 0), (self.blocks_divide_xx_0, 1)) self.connect( (self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_const_vxx_0, 0)) self.connect( (self.blocks_rms_xx_0, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self, 0), (self.blocks_divide_xx_0, 0)) self.connect((self, 0), (self.blocks_rms_xx_0, 0)) def get_alpha(self): return self.alpha def set_alpha(self, alpha): self.alpha = alpha self.blocks_rms_xx_0.set_alpha(self.alpha) def get_reference(self): return self.reference def set_reference(self, reference): self.reference = reference self.blocks_multiply_const_vxx_0.set_k(1.0/self.reference) gr-satellites-4.4.0/python/hier/si4463_scrambler.grc000066400000000000000000000072271414055407700222500ustar00rootroot00000000000000options: parameters: author: Daniel Estevez category: '[Satellites]/Scrambling' cmake_opt: '' comment: '' copyright: '' description: SI4463 scrambler gen_cmake: 'On' gen_linking: dynamic generate_options: hb hier_block_src_path: '.:' id: si4463_scrambler max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: prompt sizing_mode: fixed thread_safe_setters: '' title: SI4463 scrambler window_size: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: blocks_pack_k_bits_bb_0 id: blocks_pack_k_bits_bb parameters: affinity: '' alias: '' comment: '' k: '8' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [568, 228] rotation: 0 state: enabled - name: blocks_pdu_to_tagged_stream_0 id: blocks_pdu_to_tagged_stream parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' tag: packet_len type: byte states: bus_sink: false bus_source: false bus_structure: null coordinate: [144, 228] rotation: 0 state: enabled - name: blocks_tagged_stream_multiply_length_0 id: blocks_tagged_stream_multiply_length parameters: affinity: '' alias: '' c: 1.0/8 comment: '' lengthtagname: packet_len maxoutbuf: '0' minoutbuf: '0' type: byte vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [704, 232] rotation: 0 state: enabled - name: blocks_tagged_stream_to_pdu_0_0 id: blocks_tagged_stream_to_pdu parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' tag: packet_len type: byte states: bus_sink: false bus_source: false bus_structure: null coordinate: [984, 244] rotation: 0 state: enabled - name: digital_additive_scrambler_bb_0_0 id: digital_additive_scrambler_bb parameters: affinity: '' alias: '' bits_per_byte: '1' comment: '' count: '0' len: '8' mask: '0x21' maxoutbuf: '0' minoutbuf: '0' reset_tag_key: '"packet_len"' seed: '0x1e1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [360, 188] rotation: 0 state: enabled - name: pad_sink_0 id: pad_sink parameters: affinity: '' alias: '' comment: '' label: out num_streams: '1' optional: 'False' type: message vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1200, 244] rotation: 0 state: enabled - name: pad_source_0 id: pad_source parameters: affinity: '' alias: '' comment: '' label: in maxoutbuf: '0' minoutbuf: '0' num_streams: '1' optional: 'False' type: message vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 228] rotation: 0 state: enabled connections: - [blocks_pack_k_bits_bb_0, '0', blocks_tagged_stream_multiply_length_0, '0'] - [blocks_pdu_to_tagged_stream_0, '0', digital_additive_scrambler_bb_0_0, '0'] - [blocks_tagged_stream_multiply_length_0, '0', blocks_tagged_stream_to_pdu_0_0, '0'] - [blocks_tagged_stream_to_pdu_0_0, pdus, pad_sink_0, in] - [digital_additive_scrambler_bb_0_0, '0', blocks_pack_k_bits_bb_0, '0'] - [pad_source_0, out, blocks_pdu_to_tagged_stream_0, pdus] metadata: file_format: 1 gr-satellites-4.4.0/python/hier/si4463_scrambler.py000066400000000000000000000044611414055407700221220ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # SPDX-License-Identifier: GPL-3.0 # # GNU Radio Python Flow Graph # Title: SI4463 scrambler # Author: Daniel Estevez # Description: SI4463 scrambler # GNU Radio version: 3.8.0.0 from gnuradio import blocks from gnuradio import digital from gnuradio import gr from gnuradio.filter import firdes class si4463_scrambler(gr.hier_block2): def __init__(self): gr.hier_block2.__init__( self, 'SI4463 scrambler', gr.io_signature(0, 0, 0), gr.io_signature(0, 0, 0), ) self.message_port_register_hier_in('in') self.message_port_register_hier_out('out') ################################################## # Blocks ################################################## self.digital_additive_scrambler_bb_0_0 = ( digital.additive_scrambler_bb( 0x21, 0x1e1, 8, count=0, bits_per_byte=1, reset_tag_key="packet_len")) self.blocks_tagged_stream_to_pdu_0_0 = ( blocks.tagged_stream_to_pdu(blocks.byte_t, 'packet_len')) self.blocks_tagged_stream_multiply_length_0 = ( blocks.tagged_stream_multiply_length(gr.sizeof_char*1, 'packet_len', 1.0/8)) self.blocks_pdu_to_tagged_stream_0 = ( blocks.pdu_to_tagged_stream(blocks.byte_t, 'packet_len')) self.blocks_pack_k_bits_bb_0 = blocks.pack_k_bits_bb(8) ################################################## # Connections ################################################## self.msg_connect( (self.blocks_tagged_stream_to_pdu_0_0, 'pdus'), (self, 'out')) self.msg_connect( (self, 'in'), (self.blocks_pdu_to_tagged_stream_0, 'pdus')) self.connect( (self.blocks_pack_k_bits_bb_0, 0), (self.blocks_tagged_stream_multiply_length_0, 0)) self.connect( (self.blocks_pdu_to_tagged_stream_0, 0), (self.digital_additive_scrambler_bb_0_0, 0)) self.connect( (self.blocks_tagged_stream_multiply_length_0, 0), (self.blocks_tagged_stream_to_pdu_0_0, 0)) self.connect( (self.digital_additive_scrambler_bb_0_0, 0), (self.blocks_pack_k_bits_bb_0, 0)) gr-satellites-4.4.0/python/hier/sync_to_pdu.grc000066400000000000000000000075211414055407700216050ustar00rootroot00000000000000options: parameters: author: Daniel Estevez category: '[Satellites]/Packet Operators' cmake_opt: '' comment: '' copyright: '' description: Finds syncword and creates a PDU of fixed size gen_cmake: 'On' gen_linking: dynamic generate_options: hb hier_block_src_path: '.:' id: sync_to_pdu max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: prompt sizing_mode: fixed thread_safe_setters: '' title: Sync and create PDU window_size: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: blocks_tagged_stream_to_pdu_0_0_0 id: blocks_tagged_stream_to_pdu parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' tag: packet_len type: byte states: bus_sink: false bus_source: false bus_structure: null coordinate: [704, 148] rotation: 0 state: enabled - name: digital_correlate_access_code_tag_bb_0_0_0 id: digital_correlate_access_code_tag_xx parameters: access_code: sync affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' tagname: syncword threshold: threshold type: byte states: bus_sink: false bus_source: false bus_structure: null coordinate: [184, 132] rotation: 0 state: enabled - name: packlen id: parameter parameters: alias: '' comment: '' hide: none label: Packet length (bits) short_id: '' type: intx value: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [424, 16] rotation: 0 state: enabled - name: pad_sink_0 id: pad_sink parameters: affinity: '' alias: '' comment: '' label: out num_streams: '1' optional: 'False' type: message vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1040, 148] rotation: 0 state: enabled - name: pad_source_0 id: pad_source parameters: affinity: '' alias: '' comment: '' label: in maxoutbuf: '0' minoutbuf: '0' num_streams: '1' optional: 'False' type: byte vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 148] rotation: 0 state: enabled - name: satellites_fixedlen_tagger_0_0_0 id: satellites_fixedlen_tagger parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' packet_len: packlen packetlen_tag: packet_len stream_type: byte syncword_tag: syncword states: bus_sink: false bus_source: false bus_structure: null coordinate: [440, 132] rotation: 0 state: enabled - name: sync id: parameter parameters: alias: '' comment: '' hide: none label: Syncword short_id: '' type: '' value: '"00011010110011111111110000011101"' states: bus_sink: false bus_source: false bus_structure: null coordinate: [616, 16] rotation: 0 state: enabled - name: threshold id: parameter parameters: alias: '' comment: '' hide: none label: Syncword threshold short_id: '' type: intx value: '4' states: bus_sink: false bus_source: false bus_structure: null coordinate: [232, 16] rotation: 0 state: enabled connections: - [blocks_tagged_stream_to_pdu_0_0_0, pdus, pad_sink_0, in] - [digital_correlate_access_code_tag_bb_0_0_0, '0', satellites_fixedlen_tagger_0_0_0, '0'] - [pad_source_0, '0', digital_correlate_access_code_tag_bb_0_0_0, '0'] - [satellites_fixedlen_tagger_0_0_0, '0', blocks_tagged_stream_to_pdu_0_0_0, '0'] metadata: file_format: 1 gr-satellites-4.4.0/python/hier/sync_to_pdu.py000066400000000000000000000053101414055407700214540ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # SPDX-License-Identifier: GPL-3.0 # # GNU Radio Python Flow Graph # Title: Sync and create PDU # Author: Daniel Estevez # Description: Finds syncword and creates a PDU of fixed size # GNU Radio version: 3.8.0.0 from gnuradio import blocks from gnuradio import digital from gnuradio import gr from gnuradio.filter import firdes import satellites import numpy class sync_to_pdu(gr.hier_block2): def __init__(self, packlen=0, sync='00011010110011111111110000011101', threshold=4): gr.hier_block2.__init__( self, 'Sync and create PDU', gr.io_signature(1, 1, gr.sizeof_char*1), gr.io_signature(0, 0, 0), ) self.message_port_register_hier_out('out') ################################################## # Parameters ################################################## self.packlen = packlen self.sync = sync self.threshold = threshold ################################################## # Blocks ################################################## self.satellites_fixedlen_tagger_0_0_0 = ( satellites.fixedlen_tagger('syncword', 'packet_len', packlen, numpy.byte)) self.digital_correlate_access_code_tag_bb_0_0_0 = ( digital.correlate_access_code_tag_bb(sync, threshold, 'syncword')) self.blocks_tagged_stream_to_pdu_0_0_0 = ( blocks.tagged_stream_to_pdu(blocks.byte_t, 'packet_len')) ################################################## # Connections ################################################## self.msg_connect( (self.blocks_tagged_stream_to_pdu_0_0_0, 'pdus'), (self, 'out')) self.connect( (self.digital_correlate_access_code_tag_bb_0_0_0, 0), (self.satellites_fixedlen_tagger_0_0_0, 0)) self.connect( (self, 0), (self.digital_correlate_access_code_tag_bb_0_0_0, 0)) self.connect( (self.satellites_fixedlen_tagger_0_0_0, 0), (self.blocks_tagged_stream_to_pdu_0_0_0, 0)) def get_packlen(self): return self.packlen def set_packlen(self, packlen): self.packlen = packlen def get_sync(self): return self.sync def set_sync(self, sync): self.sync = sync (self.digital_correlate_access_code_tag_bb_0_0_0 .set_access_code(self.sync)) def get_threshold(self): return self.threshold def set_threshold(self, threshold): self.threshold = threshold (self.digital_correlate_access_code_tag_bb_0_0_0 .set_threshold(self.threshold)) gr-satellites-4.4.0/python/hier/sync_to_pdu_packed.grc000066400000000000000000000114771414055407700231210ustar00rootroot00000000000000options: parameters: author: Daniel Estevez category: '[Satellites]/Packet Operators' cmake_opt: '' comment: '' copyright: '' description: Finds syncword and creates a PDU of fixed size and packed bytes gen_cmake: 'On' gen_linking: dynamic generate_options: hb hier_block_src_path: '.:' id: sync_to_pdu_packed max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: prompt sizing_mode: fixed thread_safe_setters: '' title: Sync and create packed PDU window_size: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: blocks_tagged_stream_multiply_length_0 id: blocks_tagged_stream_multiply_length parameters: affinity: '' alias: '' c: 1/8.0 comment: '' lengthtagname: packet_len maxoutbuf: '0' minoutbuf: '0' type: byte vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [848, 152] rotation: 0 state: enabled - name: blocks_tagged_stream_to_pdu_0_0_0 id: blocks_tagged_stream_to_pdu parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' tag: packet_len type: byte states: bus_sink: false bus_source: false bus_structure: null coordinate: [944, 268] rotation: 0 state: enabled - name: blocks_unpacked_to_packed_xx_0 id: blocks_unpacked_to_packed_xx parameters: affinity: '' alias: '' bits_per_chunk: '1' comment: '' endianness: gr.GR_MSB_FIRST maxoutbuf: '0' minoutbuf: '0' num_ports: '1' type: byte states: bus_sink: false bus_source: false bus_structure: null coordinate: [648, 140] rotation: 0 state: enabled - name: digital_correlate_access_code_tag_bb_0_0_0 id: digital_correlate_access_code_tag_xx parameters: access_code: sync affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' tagname: syncword threshold: threshold type: byte states: bus_sink: false bus_source: false bus_structure: null coordinate: [144, 132] rotation: 0 state: enabled - name: packlen id: parameter parameters: alias: '' comment: '' hide: none label: Packet length (bytes) short_id: '' type: intx value: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [424, 16] rotation: 0 state: enabled - name: pad_sink_0 id: pad_sink parameters: affinity: '' alias: '' comment: '' label: out num_streams: '1' optional: 'False' type: message vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1192, 268] rotation: 0 state: enabled - name: pad_source_0 id: pad_source parameters: affinity: '' alias: '' comment: '' label: in maxoutbuf: '0' minoutbuf: '0' num_streams: '1' optional: 'False' type: byte vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 148] rotation: 0 state: enabled - name: satellites_fixedlen_tagger_0_0_0 id: satellites_fixedlen_tagger parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' packet_len: packlen*8 packetlen_tag: packet_len stream_type: byte syncword_tag: syncword states: bus_sink: false bus_source: false bus_structure: null coordinate: [400, 132] rotation: 0 state: enabled - name: sync id: parameter parameters: alias: '' comment: '' hide: none label: Syncword short_id: '' type: '' value: '"00011010110011111111110000011101"' states: bus_sink: false bus_source: false bus_structure: null coordinate: [616, 16] rotation: 0 state: enabled - name: threshold id: parameter parameters: alias: '' comment: '' hide: none label: Syncword threshold short_id: '' type: intx value: '4' states: bus_sink: false bus_source: false bus_structure: null coordinate: [232, 16] rotation: 0 state: enabled connections: - [blocks_tagged_stream_multiply_length_0, '0', blocks_tagged_stream_to_pdu_0_0_0, '0'] - [blocks_tagged_stream_to_pdu_0_0_0, pdus, pad_sink_0, in] - [blocks_unpacked_to_packed_xx_0, '0', blocks_tagged_stream_multiply_length_0, '0'] - [digital_correlate_access_code_tag_bb_0_0_0, '0', satellites_fixedlen_tagger_0_0_0, '0'] - [pad_source_0, '0', digital_correlate_access_code_tag_bb_0_0_0, '0'] - [satellites_fixedlen_tagger_0_0_0, '0', blocks_unpacked_to_packed_xx_0, '0'] metadata: file_format: 1 gr-satellites-4.4.0/python/hier/sync_to_pdu_packed.py000066400000000000000000000066201414055407700227700ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # SPDX-License-Identifier: GPL-3.0 # # GNU Radio Python Flow Graph # Title: Sync and create packed PDU # Author: Daniel Estevez # Description: Finds syncword and creates a PDU of fixed size and packed bytes # GNU Radio version: 3.8.0.0 from gnuradio import blocks from gnuradio import digital from gnuradio import gr from gnuradio.filter import firdes import satellites import numpy class sync_to_pdu_packed(gr.hier_block2): def __init__(self, packlen=0, sync='00011010110011111111110000011101', threshold=4): gr.hier_block2.__init__( self, 'Sync and create packed PDU', gr.io_signature(1, 1, gr.sizeof_char*1), gr.io_signature(0, 0, 0), ) self.message_port_register_hier_out('out') ################################################## # Parameters ################################################## self.packlen = packlen self.sync = sync self.threshold = threshold ################################################## # Blocks ################################################## self.satellites_fixedlen_tagger_0_0_0 = ( satellites.fixedlen_tagger('syncword', 'packet_len', packlen*8, numpy.byte)) self.digital_correlate_access_code_tag_bb_0_0_0 = ( digital.correlate_access_code_tag_bb(sync, threshold, 'syncword')) self.blocks_unpacked_to_packed_xx_0 = ( blocks.unpacked_to_packed_bb(1, gr.GR_MSB_FIRST)) self.blocks_tagged_stream_to_pdu_0_0_0 = ( blocks.tagged_stream_to_pdu(blocks.byte_t, 'packet_len')) self.blocks_tagged_stream_multiply_length_0 = ( blocks.tagged_stream_multiply_length(gr.sizeof_char*1, 'packet_len', 1/8.0)) ################################################## # Connections ################################################## self.msg_connect( (self.blocks_tagged_stream_to_pdu_0_0_0, 'pdus'), (self, 'out')) self.connect( (self.blocks_tagged_stream_multiply_length_0, 0), (self.blocks_tagged_stream_to_pdu_0_0_0, 0)) self.connect( (self.blocks_unpacked_to_packed_xx_0, 0), (self.blocks_tagged_stream_multiply_length_0, 0)) self.connect( (self.digital_correlate_access_code_tag_bb_0_0_0, 0), (self.satellites_fixedlen_tagger_0_0_0, 0)) self.connect( (self, 0), (self.digital_correlate_access_code_tag_bb_0_0_0, 0)) self.connect( (self.satellites_fixedlen_tagger_0_0_0, 0), (self.blocks_unpacked_to_packed_xx_0, 0)) def get_packlen(self): return self.packlen def set_packlen(self, packlen): self.packlen = packlen self.satellites_fixedlen_tagger_0_0_0.set_packet_len(self.packlen) def get_sync(self): return self.sync def set_sync(self, sync): self.sync = sync (self.digital_correlate_access_code_tag_bb_0_0_0 .set_access_code(self.sync)) def get_threshold(self): return self.threshold def set_threshold(self, threshold): self.threshold = threshold (self.digital_correlate_access_code_tag_bb_0_0_0 .set_threshold(self.threshold)) gr-satellites-4.4.0/python/hier/sync_to_pdu_soft.grc000066400000000000000000000075211414055407700226400ustar00rootroot00000000000000options: parameters: author: Daniel Estevez category: '[gr-satellites]' cmake_opt: '' comment: '' copyright: '' description: Finds syncword and creates a PDU of fixed size gen_cmake: 'On' gen_linking: dynamic generate_options: hb hier_block_src_path: '.:' id: sync_to_pdu_soft max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: prompt sizing_mode: fixed thread_safe_setters: '' title: Sync and create PDU soft window_size: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 8] rotation: 0 state: enabled blocks: - name: blocks_tagged_stream_to_pdu_0_0_0 id: blocks_tagged_stream_to_pdu parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' tag: packet_len type: float states: bus_sink: false bus_source: false bus_structure: null coordinate: [704, 148] rotation: 0 state: enabled - name: digital_correlate_access_code_tag_bb_0_0_0 id: digital_correlate_access_code_tag_xx parameters: access_code: sync affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' tagname: syncword threshold: threshold type: float states: bus_sink: false bus_source: false bus_structure: null coordinate: [184, 132] rotation: 0 state: enabled - name: packlen id: parameter parameters: alias: '' comment: '' hide: none label: Packet length (bits) short_id: '' type: intx value: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [424, 16] rotation: 0 state: enabled - name: pad_sink_0 id: pad_sink parameters: affinity: '' alias: '' comment: '' label: out num_streams: '1' optional: 'False' type: message vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1040, 148] rotation: 0 state: enabled - name: pad_source_0 id: pad_source parameters: affinity: '' alias: '' comment: '' label: in maxoutbuf: '0' minoutbuf: '0' num_streams: '1' optional: 'False' type: float vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [8, 148] rotation: 0 state: enabled - name: satellites_fixedlen_tagger_0_0_0 id: satellites_fixedlen_tagger parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' packet_len: packlen packetlen_tag: packet_len stream_type: float syncword_tag: syncword states: bus_sink: false bus_source: false bus_structure: null coordinate: [440, 132] rotation: 0 state: enabled - name: sync id: parameter parameters: alias: '' comment: '' hide: none label: Syncword short_id: '' type: '' value: '"00011010110011111111110000011101"' states: bus_sink: false bus_source: false bus_structure: null coordinate: [616, 16] rotation: 0 state: enabled - name: threshold id: parameter parameters: alias: '' comment: '' hide: none label: Syncword threshold short_id: '' type: intx value: '4' states: bus_sink: false bus_source: false bus_structure: null coordinate: [232, 16] rotation: 0 state: enabled connections: - [blocks_tagged_stream_to_pdu_0_0_0, pdus, pad_sink_0, in] - [digital_correlate_access_code_tag_bb_0_0_0, '0', satellites_fixedlen_tagger_0_0_0, '0'] - [pad_source_0, '0', digital_correlate_access_code_tag_bb_0_0_0, '0'] - [satellites_fixedlen_tagger_0_0_0, '0', blocks_tagged_stream_to_pdu_0_0_0, '0'] metadata: file_format: 1 gr-satellites-4.4.0/python/hier/sync_to_pdu_soft.py000066400000000000000000000054011414055407700225100ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # SPDX-License-Identifier: GPL-3.0 # # GNU Radio Python Flow Graph # Title: Sync and create PDU soft # Author: Daniel Estevez # Description: Finds syncword and creates a PDU of fixed size # GNU Radio version: 3.8.0.0 from gnuradio import blocks from gnuradio import digital from gnuradio import gr from gnuradio.filter import firdes import sys import signal import satellites import numpy class sync_to_pdu_soft(gr.hier_block2): def __init__(self, packlen=0, sync='00011010110011111111110000011101', threshold=4): gr.hier_block2.__init__( self, 'Sync and create PDU soft', gr.io_signature(1, 1, gr.sizeof_float*1), gr.io_signature(0, 0, 0), ) self.message_port_register_hier_out('out') ################################################## # Parameters ################################################## self.packlen = packlen self.sync = sync self.threshold = threshold ################################################## # Blocks ################################################## self.satellites_fixedlen_tagger_0_0_0 = ( satellites.fixedlen_tagger('syncword', 'packet_len', packlen, numpy.float32)) self.digital_correlate_access_code_tag_bb_0_0_0 = ( digital.correlate_access_code_tag_ff(sync, threshold, 'syncword')) self.blocks_tagged_stream_to_pdu_0_0_0 = ( blocks.tagged_stream_to_pdu(blocks.float_t, 'packet_len')) ################################################## # Connections ################################################## self.msg_connect( (self.blocks_tagged_stream_to_pdu_0_0_0, 'pdus'), (self, 'out')) self.connect( (self.digital_correlate_access_code_tag_bb_0_0_0, 0), (self.satellites_fixedlen_tagger_0_0_0, 0)) self.connect( (self, 0), (self.digital_correlate_access_code_tag_bb_0_0_0, 0)) self.connect( (self.satellites_fixedlen_tagger_0_0_0, 0), (self.blocks_tagged_stream_to_pdu_0_0_0, 0)) def get_packlen(self): return self.packlen def set_packlen(self, packlen): self.packlen = packlen def get_sync(self): return self.sync def set_sync(self, sync): self.sync = sync (self.digital_correlate_access_code_tag_bb_0_0_0 .set_access_code(self.sync)) def get_threshold(self): return self.threshold def set_threshold(self, threshold): self.threshold = threshold (self.digital_correlate_access_code_tag_bb_0_0_0 .set_threshold(self.threshold)) gr-satellites-4.4.0/python/k2sat_deframer.py000066400000000000000000000050171414055407700210740ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2018 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr import numpy import pmt from . import hdlc_deframer from . import hdlc class k2sat_deframer(gr.basic_block): """docstring for block k2sat_deframer""" def __init__(self): gr.basic_block.__init__( self, name='k2sat_deframer', in_sig=[], out_sig=[]) self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('out')) self.number = 0 # CRC-16 table construction self.crc_table = list() for i in range(256): tmp = 0 if i & 1: tmp ^= 0x1021 if i & 2: tmp ^= 0x2042 if i & 4: tmp ^= 0x4084 if i & 8: tmp ^= 0x8108 if i & 16: tmp ^= 0x1231 if i & 32: tmp ^= 0x2462 if i & 64: tmp ^= 0x48C4 if i & 128: tmp ^= 0x9188 self.crc_table.append(tmp) def check_packet(self, packet): data = b'\x7e' + packet # add 0x7e HDLC flag for CRC-16 check checksum = 0xFFFF for d in data: checksum = (((checksum << 8) & 0xFF00) ^ self.crc_table[((checksum >> 8) ^ d) & 0x00FF]) return checksum == 0 def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = bytes(pmt.u8vector_elements(msg)) # Search all packet end markers in current packet start = 0 while True: # Find packet end marker idx = packet[start:].find(b'\x7e\x55\x55\x55') if idx == -1: break # Check if this is a valid packet if self.check_packet(packet[:idx]): ax25_packet = packet[:-2+idx] ax25_packet = list(packet) # conversion to list for pybind11 self.message_port_pub( pmt.intern('out'), pmt.cons(pmt.PMT_NIL, pmt.init_u8vector(len(ax25_packet), ax25_packet))) start = idx + 2 return gr-satellites-4.4.0/python/kiss.py000066400000000000000000000013141414055407700171500ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2017 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import numpy FEND = numpy.uint8(0xc0) FESC = numpy.uint8(0xdb) TFEND = numpy.uint8(0xdc) TFESC = numpy.uint8(0xdd) def kiss_escape(a): """Escapes KISS control characters This replaces FEND and FESC according to the KISS escape rules """ buff = list() for x in a: if x == FESC: buff.append(FESC) buff.append(TFESC) elif x == FEND: buff.append(FESC) buff.append(TFEND) else: buff.append(numpy.uint8(x)) return buff gr-satellites-4.4.0/python/kiss_to_pdu.py000066400000000000000000000030751414055407700205300ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2017 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import collections from gnuradio import gr import numpy import pmt from .kiss import * class kiss_to_pdu(gr.sync_block): """docstring for block kiss_to_pdu""" def __init__(self, control_byte=True): gr.sync_block.__init__( self, name='kiss_to_pdu', in_sig=[numpy.uint8], out_sig=[]) self.pdu = list() self.transpose = False self.control_byte = control_byte self.message_port_register_out(pmt.intern('out')) def work(self, input_items, output_items): for c in input_items[0]: if c == FEND: if (self.pdu and (not self.control_byte or not self.pdu[0] & 0x0f)): msg = self.pdu[1:] if self.control_byte else self.pdu self.message_port_pub( pmt.intern('out'), pmt.cons(pmt.PMT_NIL, pmt.init_u8vector(len(msg), msg))) self.pdu = list() elif self.transpose: if c == TFEND: self.pdu.append(FEND) elif c == TFESC: self.pdu.append(FESC) self.transpose = False elif c == FESC: self.transpose = True else: self.pdu.append(c) return len(input_items[0]) gr-satellites-4.4.0/python/ks1q_header_remover.py000066400000000000000000000026011414055407700221250ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2016 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr import numpy import pmt class ks1q_header_remover(gr.basic_block): """docstring for block ks1q_header_remover""" def __init__(self, verbose): gr.basic_block.__init__( self, name='ks1q_header_remover', in_sig=[], out_sig=[]) self.verbose = verbose self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('out')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = bytes(pmt.u8vector_elements(msg)) if len(packet) <= 3: return if self.verbose: print('Spacecraft ID', packet[:2].hex()) if packet[2] == 0x50: print('CSP downlink, protocol version 0') else: print('Unknown packet type') data = packet[3:] self.message_port_pub( pmt.intern('out'), pmt.cons(pmt.PMT_NIL, pmt.init_u8vector(len(data), data))) gr-satellites-4.4.0/python/lilacsat1_gps_kml.py000066400000000000000000000030231414055407700215670ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2017 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr import numpy import pmt from .telemetry import by70_1 class lilacsat1_gps_kml(gr.basic_block): """docstring for block lilacsat1_gps_kml""" def __init__(self): gr.basic_block.__init__( self, name='lilacsat1_gps_kml', in_sig=None, out_sig=None) self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('out')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = bytes(pmt.u8vector_elements(msg)) if len(packet) <= 4+8: return frame = by70_1.parse(packet) # Destination 5 is used for telemetry if frame.csp_header.destination != 5: return data = by70_1.beacon if not data or 'latitude' not in data: return line = '{},{},{}\n'.format(data.longitude, data.latitude, data.altitude).encode('ascii') self.message_port_pub( pmt.intern('out'), pmt.cons(pmt.PMT_NIL, pmt.init_u8vector(len(line), line))) gr-satellites-4.4.0/python/manchester_sync.py000066400000000000000000000031751414055407700213730ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import collections import numpy as np from gnuradio import gr def branch_weight(x): return -np.sum(np.real(x[::2] * np.conjugate(x[1::2]))) class manchester_sync(gr.decim_block): """ Synchronize to a Manchester-coded signal and output symbols The input to this block is a BPSK Manchester-coded signal at 2 samples per symbol. The block finds the Manchester clock phase, wipes the Manchester clock and outputs the symbols at 1 samples per symbol. Args: history: The number of bits to look back to find the clock phase """ def __init__(self, history): gr.decim_block.__init__( self, name='manchester_sync', in_sig=[np.complex64], out_sig=[np.complex64], decim=2) size = 2 * (history + 1) self.samples = collections.deque(np.zeros(size, dtype=np.complex64), maxlen=size) def work(self, input_items, output_items): inp = input_items[0] out = output_items[0] for i, x in enumerate(zip(inp[::2], inp[1::2])): self.samples.extend(x) z = np.array(self.samples, dtype=np.complex64) b0 = branch_weight(z[2:]) b1 = branch_weight(z[1:-1]) if b0 >= b1: output = 0.5*(z[-2] - z[-1]) else: output = 0.5*(z[-3] - z[-2]) out[i] = output return len(out) gr-satellites-4.4.0/python/ngham_check_crc.py000066400000000000000000000103321414055407700212550ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2018-2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr import numpy import pmt # pycrc.py --width 16 --poly 0x1021 --reflect-in true \ # --xor-in 0xffff --reflect-out true --xor-out 0xffff \ # --algorithm=table-driven --generate=c crc_table = [ 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e, 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5, 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c, 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3, 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a, 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1, 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff, 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5, 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd, 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3, 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1, 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78] def crc16_x_25(data): crc = 0xffff for byte in data: tbl_idx = (crc ^ byte) & 0xff crc = (crc_table[tbl_idx] ^ (crc >> 8)) & 0xffff return (crc ^ 0xffff) & 0xffff class ngham_check_crc(gr.basic_block): """ Checks the CRC-16 of an NGHam frame Input: An NGHam frame with a CRC-16 at the end Output: The NGHame frame with the CRC-16 dropped, classified according as to whether the CRC is correct. """ def __init__(self, verbose): gr.basic_block.__init__( self, name='ngham_check_crc', in_sig=[], out_sig=[]) self.verbose = verbose self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('ok')) self.message_port_register_out(pmt.intern('fail')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = pmt.u8vector_elements(msg) if len(packet) < 3: return packet_out = packet[:-2] msg_out = pmt.cons(pmt.car(msg_pmt), pmt.init_u8vector(len(packet_out), packet_out)) crc = crc16_x_25(packet_out) if (crc >> 8) == packet[-2] and crc & 0xff == packet[-1]: if self.verbose: print('CRC OK') self.message_port_pub(pmt.intern('ok'), msg_out) else: if self.verbose: print('CRC failed') self.message_port_pub(pmt.intern('fail'), msg_out) gr-satellites-4.4.0/python/ngham_packet_crop.py000066400000000000000000000042721414055407700216510ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import numpy as np from gnuradio import gr import pmt # Details of the NGHam protocol taken from # https://github.com/skagmo/ngham/blob/master/ngham.c _tags = [ 0b001110110100100111001101, 0b010011011101101001010111, 0b011101101001001110011010, 0b100110111011010010101110, 0b101000001111110101100011, 0b110101100110111011111001, 0b111011010010011100110100] ngham_tags = np.array([list(map(int, ('0'*24 + bin(t)[2:])[-24:])) for t in _tags], dtype='uint8') ngham_rs_sizes = [47, 79, 111, 159, 191, 223, 255] class ngham_packet_crop(gr.basic_block): """ Crops an NGHam packet according to its size tag Input: An NGHam packet with size tag and RS codeword Output: The RS codeword appropriately cropped, routed to rs16 or rs32 according to the RS parity check bytes """ def __init__(self): gr.basic_block.__init__( self, name='ngham_packet_handler', in_sig=[], out_sig=[]) self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('rs16')) self.message_port_register_out(pmt.intern('rs32')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = pmt.u8vector_elements(msg) size_tag = np.unpackbits(np.array(packet[:3], dtype='uint8')) tag_dist = np.sum(size_tag ^ ngham_tags, axis=1) best_tag = np.argmin(tag_dist) rs_size = ngham_rs_sizes[best_tag] if len(packet[3:]) < rs_size: print('Packet is too short') return out = 'rs16' if best_tag < 3 else 'rs32' self.message_port_pub( pmt.intern(out), pmt.cons(pmt.car(msg_pmt), pmt.init_u8vector(rs_size, packet[3:3+rs_size]))) gr-satellites-4.4.0/python/ngham_remove_padding.py000066400000000000000000000033141414055407700223360ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr import pmt # Details of the NGHam protocol taken from # https://github.com/skagmo/ngham/blob/master/ngham.c ngham_rs_sizes = [47, 79, 111, 159, 191, 223, 255] ngham_non_rs_sizes = [47-16, 79-16, 111-16, 159-32, 191-32, 223-32, 255-32] class ngham_remove_padding(gr.basic_block): """ Removes the padding on an NGHam packet Also it automatically detects if RS check bytes are still in the packet and removes them as well """ def __init__(self): gr.basic_block.__init__( self, name='ngham_remove_padding', in_sig=[], out_sig=[]) self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('out')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = pmt.u8vector_elements(msg) if len(packet) in ngham_rs_sizes: size_idx = ngham_rs_sizes.index(len(packet)) packet = packet[:ngham_non_rs_sizes[size_idx]] if len(packet) not in ngham_non_rs_sizes: print('NGHam packet length invalid') return padding = packet[0] & 0x1f packet = packet[:-padding] self.message_port_pub( pmt.intern('out'), pmt.cons(pmt.car(msg_pmt), pmt.init_u8vector(len(packet), packet))) gr-satellites-4.4.0/python/pdu_to_kiss.py000066400000000000000000000061241414055407700205260ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2017,2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import collections import datetime import struct import warnings from gnuradio import gr import numpy import pmt from .kiss import * from .submit import parse_time class pdu_to_kiss(gr.basic_block): """docstring for block pdu_to_kiss""" def __init__(self, control_byte=True, include_timestamp=False, initial_timestamp=''): gr.basic_block.__init__( self, name='pdu_to_kiss', in_sig=None, out_sig=None) self.control_byte = control_byte self.include_timestamp = include_timestamp self.initial_timestamp = parse_time(initial_timestamp) \ if initial_timestamp != '' else None self.start_timestamp = datetime.datetime.utcnow() if not control_byte and include_timestamp: warnings.warn( 'Using no control byte and timestamps in pdu_to_kiss ' 'will usually give problems') self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('out')) def create_timestamp(self): """Returns the timestamp as a KISS control frame with control byte 09 The timestamp is the number of milliseconds elapsed since the UNIX epoch according to UTC and not counting leap seconds, stored as a big-endian 64 bit unsigned integer """ # It's tempting to use time.time() to get the timestamp. The docs # say that its epoch is often 1970-01-01, but they don't promise # that it's always the case. We use datetime.datetime() instead. epoch = datetime.datetime(1970, 1, 1) now = datetime.datetime.utcnow() if self.initial_timestamp: now = now - self.start_timestamp + self.initial_timestamp timestamp = (now - epoch).total_seconds() timestamp_int = round(timestamp * 1e3) control = b'\x09' return control + struct.pack('>Q', timestamp_int) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return control = [numpy.uint8(0)] if self.control_byte else [] frame = ([FEND] + control + kiss_escape(pmt.u8vector_elements(msg)) + [FEND]) if self.include_timestamp: timestamp_frame = ([FEND] + kiss_escape(self.create_timestamp()) + [FEND]) self.message_port_pub( pmt.intern('out'), pmt.cons(pmt.PMT_NIL, pmt.init_u8vector(len(timestamp_frame), timestamp_frame))) self.message_port_pub( pmt.intern('out'), pmt.cons(pmt.PMT_NIL, pmt.init_u8vector(len(frame), frame))) gr-satellites-4.4.0/python/print_header.py000066400000000000000000000017351414055407700206520ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2017 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr import numpy import pmt from . import csp_header class print_header(gr.basic_block): """Print the CSP header of a CSP packet""" def __init__(self): gr.basic_block.__init__( self, name='print_header', in_sig=[], out_sig=[]) self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = bytes(pmt.u8vector_elements(msg)) try: print(csp_header.CSP(packet[:4])) except ValueError as e: print(e) gr-satellites-4.4.0/python/print_timestamp.py000066400000000000000000000022561414055407700214240ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2017 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import datetime import numpy from gnuradio import gr import pmt class print_timestamp(gr.basic_block): """docstring for block print_timestamp""" def __init__(self, tstamp_format='', count_packets=False): gr.basic_block.__init__( self, name='print_timestamp', in_sig=[], out_sig=[]) self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('out')) self.count_packets = count_packets self.packet_counter = 0 self.tstamp_format = tstamp_format def handle_msg(self, msg_pmt): if self.tstamp_format: timestamp = datetime.datetime.utcnow() print((timestamp.strftime(self.tstamp_format))) if self.count_packets: print('Packet number', self.packet_counter) self.packet_counter += 1 self.message_port_pub(pmt.intern('out'), msg_pmt) gr-satellites-4.4.0/python/pwsat2_submitter.py000066400000000000000000000113651414055407700215240ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2018 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # # This contains code taken from # https://github.com/PW-Sat2/SimpleUploader-radio.pw-sat.pl # That code is licenced under the following terms: # MIT License # # Copyright (c) 2017 SoftwareMill # # 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 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. import base64 import datetime import json from gnuradio import gr import numpy import pmt from . import hdlc class pwsat2_submitter(gr.basic_block): """docstring for block pwsat2_submitter""" def __init__(self, credentials_file, initialTimestamp): gr.basic_block.__init__( self, name="pwsat2_submitter", in_sig=[], out_sig=[]) self.requests = __import__('requests') self.baseUrl = 'http://radio.pw-sat.pl' self.headers = {'content-type': 'application/json'} dtformat = '%Y-%m-%d %H:%M:%S' self.initialTimestamp = ( datetime.datetime.strptime(initialTimestamp, dtformat) if initialTimestamp != '' else None) self.startTimestamp = datetime.datetime.utcnow() self.authenticate(credentials_file) self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) def authenticate(self, credentials_path): try: credentials = self.loadCredentials(credentials_path) except (ValueError, IOError) as e: print('Could not load credentials for', self.baseUrl) print(e) self.cookies = None return url = self.baseUrl+'/api/authenticate' response = self.requests.post(url, data=json.dumps(credentials), headers=self.headers) if response.status_code == 200: self.cookies = response.cookies else: print('Could not authenticate to PW-Sat2 server') print('Reply:', response.text) print('HTTP code', response.status_code) self.cookies = None def loadCredentials(self, path): with open(path) as f: credentials = json.load(f) return credentials def putPacket(self, frame, timestamp): if self.cookies is None: print('Not uploading packet to', self.baseUrl, 'as we are not authenticated') return url = self.baseUrl+'/communication/frame' timestamp = (timestamp - datetime.datetime(1970, 1, 1)).total_seconds() timestamp = int(timestamp * 1000) payload = {'frame': str(base64.b64encode(frame), encoding='ascii'), 'timestamp': timestamp, 'traffic': 'Rx'} response = self.requests.put(url, data=json.dumps(payload), headers=self.headers, cookies=self.cookies) return response.text def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return data = bytearray(pmt.u8vector_elements(msg)) crc = hdlc.crc_ccitt(data) data.append(crc & 0xff) data.append((crc >> 8) & 0xff) frame = bytes(data) now = datetime.datetime.utcnow() timestamp = (now - self.startTimestamp + self.initialTimestamp if self.initialTimestamp else now) response = self.putPacket(frame, timestamp) if response: print('Packet uploaded to', self.baseUrl, response) gr-satellites-4.4.0/python/pwsat2_telemetry_parser.py000066400000000000000000000025221414055407700230670ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2018 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import pprint from gnuradio import gr import numpy import pmt class pwsat2_telemetry_parser(gr.basic_block): """docstring for block pwsat2_telemetry_parser""" def __init__(self, pwsat2_path): gr.basic_block.__init__( self, name='pwsat2_telemetry_parser', in_sig=[], out_sig=[]) import sys import pprint sys.path.append(pwsat2_path) sys.path.append(pwsat2_path + '/PWSat2OBC/integration_tests/') self.pwsat2_decoder = __import__('payload_decoder') self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = bytes(pmt.u8vector_elements(msg)) try: data = self.pwsat2_decoder.PayloadDecoder.decode(packet[16:]) except Exception as e: print('Could not decode telemetry beacon') print(e) return pprint.pprint(data) gr-satellites-4.4.0/python/qa_fixedlen_tagger.py000077500000000000000000000043661414055407700220240ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2021 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, blocks, gr_unittest import numpy as np import pmt # bootstrap satellites module, even from build dir try: import python as satellites except ImportError: pass else: import sys sys.modules['satellites'] = satellites from satellites import fixedlen_tagger class qa_fixedlen_tagger(gr_unittest.TestCase): def setUp(self): self.syncword_tag = 'syncword' self.packetlen_tag = 'packet_len' self.packet_len = 100 self.data = np.arange(3000, dtype='uint8') self.tag_positions = [50, 213, 217, 230, 1530, 1531] tags = [gr.python_to_tag((j, pmt.intern(self.syncword_tag), pmt.intern('sync'), pmt.intern('test_src'))) for j in self.tag_positions] self.source = blocks.vector_source_b(self.data, False, 1, tags) self.tag2pdu = blocks.tagged_stream_to_pdu(blocks.byte_t, self.packetlen_tag) self.debug = blocks.message_debug() self.tagger = fixedlen_tagger(self.syncword_tag, self.packetlen_tag, self.packet_len, np.byte) self.tb = gr.top_block() self.tb.connect(self.source, self.tagger, self.tag2pdu) self.tb.msg_connect((self.tag2pdu, 'pdus'), (self.debug, 'store')) def tearDown(self): self.tb = None def test_tagger(self): """Runs some test data through the tagger and checks resulting PDUs""" self.tb.start() self.tb.wait() self.assertEqual(self.debug.num_messages(), len(self.tag_positions), 'Unexpected number of PDUs') for j, pos in enumerate(self.tag_positions): pdu = np.array(pmt.u8vector_elements( pmt.cdr(self.debug.get_message(j))), dtype='uint8') expected = self.data[pos:pos+self.packet_len] np.testing.assert_equal(pdu, expected, 'PDU values do not match expected') if __name__ == '__main__': gr_unittest.run(qa_fixedlen_tagger) gr-satellites-4.4.0/python/qa_hdlc.py000077500000000000000000000037641414055407700176100ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, blocks, gr_unittest import numpy as np import pmt # bootstrap satellites module, even from build dir try: import python as satellites except ImportError: pass else: import sys sys.modules['satellites'] = satellites from satellites import hdlc_framer, hdlc_deframer class qa_hdlc(gr_unittest.TestCase): def setUp(self): self.tb = gr.top_block() def tearDown(self): self.tb = None def test_framer_deframer(self): """Connects an HDLC framer to a deframer and sends PDUs through""" framer = hdlc_framer(100, 20) deframer = hdlc_deframer(True, 10000) pdu2tag = blocks.pdu_to_tagged_stream(blocks.byte_t) dbg = blocks.message_debug() self.tb.connect(pdu2tag, deframer) self.tb.msg_connect((framer, 'out'), (pdu2tag, 'pdus')) self.tb.msg_connect((deframer, 'out'), (dbg, 'store')) test_size = 150 test_number_frames = 7 test_data = [bytes(np.random.randint(0, 256, test_size, dtype='uint8')) for _ in range(test_number_frames)] for td in test_data: test_frame = pmt.cons(pmt.PMT_NIL, pmt.init_u8vector(test_size, list(td))) framer.to_basic_block()._post(pmt.intern('in'), test_frame) framer.to_basic_block()._post( pmt.intern('system'), pmt.cons(pmt.intern('done'), pmt.from_long(1))) self.tb.start() self.tb.wait() for j, td in enumerate(test_data): result_data = bytes( pmt.u8vector_elements(pmt.cdr(dbg.get_message(j)))) self.assertEqual( td, result_data, 'HDLC deframer output does not match expected frame') if __name__ == '__main__': gr_unittest.run(qa_hdlc) gr-satellites-4.4.0/python/qa_kiss.py000077500000000000000000000037361414055407700176460ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, blocks, gr_unittest import pmt import numpy as np # bootstrap satellites module, even from build dir try: import python as satellites except ImportError: pass else: import sys sys.modules['satellites'] = satellites from satellites import kiss_to_pdu, pdu_to_kiss class qa_kiss(gr_unittest.TestCase): def setUp(self): self.tb = gr.top_block() def tearDown(self): self.tb = None def test_encoder_decoder(self): """Connects a PDU to KISS and KISS to PDU and sends PDUs through""" pdu2kiss = pdu_to_kiss(include_timestamp=True) kiss2pdu = kiss_to_pdu() pdu2tag = blocks.pdu_to_tagged_stream(blocks.byte_t) dbg = blocks.message_debug() self.tb.connect(pdu2tag, kiss2pdu) self.tb.msg_connect((pdu2kiss, 'out'), (pdu2tag, 'pdus')) self.tb.msg_connect((kiss2pdu, 'out'), (dbg, 'store')) test_size = 150 test_number_frames = 7 test_data = [np.random.randint(0, 256, test_size, dtype='uint8') for _ in range(test_number_frames)] for td in test_data: test_frame = pmt.cons(pmt.PMT_NIL, pmt.init_u8vector(test_size, td)) pdu2kiss.to_basic_block()._post(pmt.intern('in'), test_frame) pdu2kiss.to_basic_block()._post( pmt.intern('system'), pmt.cons(pmt.intern('done'), pmt.from_long(1))) self.tb.start() self.tb.wait() for j, td in enumerate(test_data): result_data = pmt.u8vector_elements(pmt.cdr(dbg.get_message(j))) np.testing.assert_equal( td, result_data, 'KISS to PDU output does not match expected frame') if __name__ == '__main__': gr_unittest.run(qa_kiss) gr-satellites-4.4.0/python/qa_nrzi.py000077500000000000000000000042651414055407700176550ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, blocks, gr_unittest import numpy as np import pmt # bootstrap satellites module, even from build dir try: import python as satellites except ImportError: pass else: import sys sys.modules['satellites'] = satellites from satellites import nrzi_encode, nrzi_decode class qa_nrzi(gr_unittest.TestCase): def setUp(self): test_size = 256 self.data = np.random.randint(0, 2, test_size, dtype='uint8') self.source = blocks.vector_source_b(self.data, False, 1, []) self.sink = blocks.vector_sink_b(1, 0) self.tb = gr.top_block() def tearDown(self): self.tb = None del(self.data) del(self.source) del(self.sink) def test_encode(self): """Performs NRZI encode and checks the result""" encode = nrzi_encode() self.tb.connect(self.source, encode, self.sink) self.tb.start() self.tb.wait() expected = np.cumsum((1 ^ self.data) & 1) & 1 np.testing.assert_equal( self.sink.data(), expected, 'NRZI encode output does not match expected result') def test_decode(self): """Performs NRZI decode and checks the result""" decode = nrzi_decode() self.tb.connect(self.source, decode, self.sink) self.tb.start() self.tb.wait() expected = self.data[1:] ^ self.data[:-1] ^ 1 np.testing.assert_equal( self.sink.data()[1:], expected, 'NRZI decode output does not match expected result') def test_encode_decode(self): """Performs NRZI encode and decode and checks the result""" encode = nrzi_encode() decode = nrzi_decode() self.tb.connect(self.source, encode, decode, self.sink) self.tb.start() self.tb.wait() np.testing.assert_equal( self.sink.data(), self.data, 'NRZI encoded and decoded output does not match input') if __name__ == '__main__': gr_unittest.run(qa_nrzi) gr-satellites-4.4.0/python/qa_pdu_add_meta.py000077500000000000000000000034231414055407700212740ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, blocks, gr_unittest import numpy as np import pmt # bootstrap satellites module, even from build dir try: import python as satellites except ImportError: pass else: import sys sys.modules['satellites'] = satellites from satellites import pdu_add_meta class qa_pdu_add_meta(gr_unittest.TestCase): def test_pdu_add_meta(self): tb = gr.top_block() dbg = blocks.message_debug() meta = pmt.make_dict() meta = pmt.dict_add(meta, pmt.intern('k1'), pmt.intern('v1')) meta = pmt.dict_add(meta, pmt.intern('k2'), pmt.intern('v2')) add_meta = pdu_add_meta(meta) pdu = pmt.cons(pmt.PMT_NIL, pmt.make_u8vector(10, 0)) tb.msg_connect((add_meta, 'out'), (dbg, 'store')) add_meta.to_basic_block()._post(pmt.intern('in'), pdu) add_meta.to_basic_block()._post( pmt.intern('system'), pmt.cons(pmt.intern('done'), pmt.from_long(1))) tb.start() tb.wait() pdu_out = dbg.get_message(0) meta_out = pmt.car(pdu_out) self.assertTrue(pmt.dict_has_key(meta_out, pmt.intern('k1')), 'Test key k1 not in output PDU metadata') self.assertTrue(pmt.dict_has_key(meta_out, pmt.intern('k2')), 'Test key k1 not in output PDU metadata') self.assertEqual(pmt.u8vector_elements(pmt.cdr(pdu_out)), pmt.u8vector_elements(pmt.cdr(pdu)), 'Output PDU data does not match input PDU data') if __name__ == '__main__': gr_unittest.run(qa_pdu_add_meta) gr-satellites-4.4.0/python/qa_pdu_head_tail.py000077500000000000000000000037321414055407700214530ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, blocks, gr_unittest import numpy as np import pmt # bootstrap satellites module, even from build dir try: import python as satellites except ImportError: pass else: import sys sys.modules['satellites'] = satellites from satellites import pdu_head_tail class qa_pdu_head_tail(gr_unittest.TestCase): def test_pdu_head_tail(self): for mode in range(4): with self.subTest(mode=mode): self.run_mode(mode) def run_mode(self, mode): tb = gr.top_block() dbg = blocks.message_debug() num = 10 sizes = [15, 8] test_data = list(range(np.max(sizes))) msgs = [test_data[:x] for x in sizes] pdus = [pmt.cons(pmt.PMT_NIL, pmt.init_u8vector(len(m), m)) for m in msgs] head_tail = pdu_head_tail(mode, num) tb.msg_connect((head_tail, 'out'), (dbg, 'store')) for pdu in pdus: head_tail.to_basic_block()._post(pmt.intern('in'), pdu) head_tail.to_basic_block()._post( pmt.intern('system'), pmt.cons(pmt.intern('done'), pmt.from_long(1))) tb.start() tb.wait() for j, msg in enumerate(msgs): out = pmt.u8vector_elements(pmt.cdr(dbg.get_message(j))) if mode == 0: expected = msg[:num] elif mode == 1: expected = msg[:-num] elif mode == 2: expected = msg[-num:] elif mode == 3: expected = msg[num:] else: raise ValueError('Invalid mode') self.assertEqual( out, expected, "PDU head/tail output does not match expected value") if __name__ == '__main__': gr_unittest.run(qa_pdu_head_tail) gr-satellites-4.4.0/python/qa_pdu_length_filter.py000077500000000000000000000031511414055407700223620ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2021 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, blocks, gr_unittest import numpy as np import pmt # bootstrap satellites module, even from build dir try: import python as satellites except ImportError: pass else: import sys sys.modules['satellites'] = satellites from satellites import pdu_length_filter class qa_pdu_length_filter(gr_unittest.TestCase): def test_pdu_length_filter(self): tb = gr.top_block() dbg = blocks.message_debug() sizes = [25, 50, 100] test_data = list(range(np.max(sizes))) msgs = [test_data[:x] for x in sizes] pdus = [pmt.cons(pmt.PMT_NIL, pmt.init_u8vector(len(m), m)) for m in msgs] length_filter = pdu_length_filter(40, 60) tb.msg_connect((length_filter, 'out'), (dbg, 'store')) for pdu in pdus: length_filter.to_basic_block()._post(pmt.intern('in'), pdu) length_filter.to_basic_block()._post( pmt.intern('system'), pmt.cons(pmt.intern('done'), pmt.from_long(1))) tb.start() tb.wait() self.assertEqual( dbg.num_messages(), 1, 'Incorrect number of messages passed by PDU Length Filter') out = pmt.u8vector_elements(pmt.cdr(dbg.get_message(0))) self.assertEqual( len(out), 50, 'PDU Length Filter output does not match expected') if __name__ == '__main__': gr_unittest.run(qa_pdu_length_filter) gr-satellites-4.4.0/python/qa_rs.py000077500000000000000000000045631414055407700173200ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, blocks, gr_unittest import numpy as np import pmt # bootstrap satellites module, even from build dir try: import python as satellites except ImportError: pass else: import sys sys.modules['satellites'] = satellites from satellites import encode_rs, decode_rs class qa_rs(gr_unittest.TestCase): def setUp(self): self.tb = gr.top_block() self.dbg = blocks.message_debug() def tearDown(self): self.tb.msg_connect((self.encode, 'out'), (self.decode, 'in')) self.tb.msg_connect((self.decode, 'out'), (self.dbg, 'store')) pdu = pmt.cons(pmt.PMT_NIL, pmt.init_u8vector(len(self.data), self.data)) self.encode.to_basic_block()._post(pmt.intern('in'), pdu) self.encode.to_basic_block()._post( pmt.intern('system'), pmt.cons(pmt.intern('done'), pmt.from_long(1))) self.tb.start() self.tb.wait() result = pmt.u8vector_elements(pmt.cdr(self.dbg.get_message(0))) np.testing.assert_equal(self.data, result, 'Decoded data does not match encoder input') self.tb = None def test_conventional(self): self.encode = encode_rs(False, 1) self.decode = decode_rs(False, 1) self.data = np.random.randint(0, 256, 223, dtype='uint8') def test_dual(self): self.encode = encode_rs(True, 1) self.decode = decode_rs(True, 1) self.data = np.random.randint(0, 256, 223, dtype='uint8') def test_shortened(self): self.encode = encode_rs(False, 1) self.decode = decode_rs(False, 1) self.data = np.random.randint(0, 256, 100, dtype='uint8') def test_interleave(self): interleave = 5 self.encode = encode_rs(False, interleave) self.decode = decode_rs(False, interleave) self.data = np.random.randint(0, 256, 150 * interleave, dtype='uint8') def test_custom_rs(self): self.encode = encode_rs(8, 0x11d, 1, 1, 16, 1) self.decode = decode_rs(8, 0x11d, 1, 1, 16, 1) self.data = np.random.randint(0, 256, 255 - 16, dtype='uint8') if __name__ == '__main__': gr_unittest.run(qa_rs) gr-satellites-4.4.0/python/qa_viterbi.py000077500000000000000000000027121414055407700203320ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2021 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr, blocks, gr_unittest import numpy as np import pmt # bootstrap satellites module, even from build dir try: import python as satellites except ImportError: pass else: import sys sys.modules['satellites'] = satellites from satellites import convolutional_encoder, viterbi_decoder class qa_viterbi(gr_unittest.TestCase): def test_viterbi(self): tb = gr.top_block() dbg = blocks.message_debug() k = 5 p = [25, 23] enc = convolutional_encoder(k, p) dec = viterbi_decoder(k, p) data = np.random.randint(2, size=1000, dtype='uint8') pdu = pmt.cons(pmt.PMT_NIL, pmt.init_u8vector(len(data), data)) tb.msg_connect((enc, 'out'), (dec, 'in')) tb.msg_connect((dec, 'out'), (dbg, 'store')) enc.to_basic_block()._post(pmt.intern('in'), pdu) enc.to_basic_block()._post( pmt.intern('system'), pmt.cons(pmt.intern('done'), pmt.from_long(1))) tb.start() tb.wait() out = pmt.u8vector_elements(pmt.cdr(dbg.get_message(0))) np.testing.assert_equal( out, np.array(data), 'Encoded and decoded message does not match original') if __name__ == '__main__': gr_unittest.run(qa_viterbi) gr-satellites-4.4.0/python/reflect_bytes.py000066400000000000000000000023231414055407700210320ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2018 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr import numpy as np import pmt from .eseo_line_decoder import reflect_bytes as reflect class reflect_bytes(gr.basic_block): """docstring for block reflect_bytes""" def __init__(self): gr.basic_block.__init__( self, name='reflect_bytes', in_sig=[], out_sig=[]) self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('out')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = np.array(pmt.u8vector_elements(msg), dtype='uint8') packet = np.unpackbits(packet) packet = reflect(packet) packet = np.packbits(packet) self.message_port_pub( pmt.intern('out'), pmt.cons(pmt.PMT_NIL, pmt.init_u8vector(len(packet), packet))) gr-satellites-4.4.0/python/satyaml/000077500000000000000000000000001414055407700173005ustar00rootroot00000000000000gr-satellites-4.4.0/python/satyaml/1KUNS-PF.yml000066400000000000000000000007071414055407700211730ustar00rootroot00000000000000name: 1KUNS-PF alternative_names: norad: 43466 data: &tlm Telemetry: telemetry: sat_1kuns_pf &image JPEG Images: image: sat_1kuns_pf transmitters: 1k2 FSK downlink: frequency: 437.300e+6 modulation: FSK baudrate: 1200 framing: AX100 ASM+Golay data: - *tlm - *image 9k6 FSK downlink: frequency: 437.300e+6 modulation: FSK baudrate: 9600 framing: AX100 ASM+Golay data: - *tlm - *image gr-satellites-4.4.0/python/satyaml/3CAT-1.yml000066400000000000000000000003301414055407700206470ustar00rootroot00000000000000name: 3CAT-1 norad: 43728 data: &tlm Telemetry: telemetry: sat_3cat_1 transmitters: 9k6 FSK downlink: frequency: 437.250e+6 modulation: FSK baudrate: 9600 framing: 3CAT-1 data: - *tlm gr-satellites-4.4.0/python/satyaml/3CAT-2.yml000066400000000000000000000003311414055407700206510ustar00rootroot00000000000000name: 3CAT-2 norad: 41732 data: &tlm Telemetry: telemetry: sat_3cat_2 transmitters: 9k6 BPSK downlink: frequency: 145.970e+6 modulation: BPSK baudrate: 9600 framing: AX.25 data: - *tlm gr-satellites-4.4.0/python/satyaml/AALTO-1.yml000066400000000000000000000006471414055407700210300ustar00rootroot00000000000000name: AALTO-1 norad: 42775 data: &tlm_ax25 AX.25 Telemetry: telemetry: ax25 &tlm_cc1125 CC1125 Telemetry: unknown transmitters: 9k6 FSK AX.25 downlink: frequency: 437.216e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm_ax25 9k6 FSK CC1125 downlink: frequency: 437.216e+6 modulation: FSK baudrate: 9600 framing: AALTO-1 data: - *tlm_cc1125 gr-satellites-4.4.0/python/satyaml/AAUSAT-4.yml000066400000000000000000000005311414055407700211410ustar00rootroot00000000000000name: AAUSAT-4 norad: 41460 data: &tlm Telemetry: telemetry: aausat4 transmitters: 2k4 FSK downlink: frequency: 437.425e+6 modulation: FSK baudrate: 2400 framing: AAUSAT-4 data: - *tlm 9k6 FSK downlink: frequency: 437.425e+6 modulation: FSK baudrate: 9600 framing: AAUSAT-4 data: - *tlm gr-satellites-4.4.0/python/satyaml/ACRUX-1.yml000066400000000000000000000003301414055407700210370ustar00rootroot00000000000000name: ACRUX-1 norad: 44369 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.200e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/AISAT.yml000066400000000000000000000003731414055407700206670ustar00rootroot00000000000000name: AISAT norad: 40054 data: &tlm Telemetry: telemetry: csp transmitters: 4k8 AFSK downlink: frequency: 437.250e+6 modulation: AFSK baudrate: 4800 af_carrier: 3600 deviation: -1200 framing: U482C data: - *tlm gr-satellites-4.4.0/python/satyaml/AISTECHSAT-2.yml000066400000000000000000000017451414055407700216210ustar00rootroot00000000000000name: AISTECHSAT-2 norad: 43768 data: &tlm Telemetry: telemetry: lume &custom Custom telemetry: unknown transmitters: 1k2 FSK custom CCSDS downlink: frequency: 436.600e+6 modulation: FSK baudrate: 1200 framing: AISTECHSAT-2 data: - *custom 1k2 FSK AX100 downlink: frequency: 436.600e+6 modulation: FSK baudrate: 1200 framing: AX100 ASM+Golay data: - *tlm 4k8 FSK custom CCSDS downlink: frequency: 436.600e+6 modulation: FSK baudrate: 4800 framing: AISTECHSAT-2 data: - *custom 4k8 FSK AX100 downlink: frequency: 436.600e+6 modulation: FSK baudrate: 4800 framing: AX100 ASM+Golay data: - *tlm 9k6 FSK custom CCSDS downlink: frequency: 436.600e+6 modulation: FSK baudrate: 9600 framing: AISTECHSAT-2 data: - *custom 9k6 FSK AX100 downlink: frequency: 436.600e+6 modulation: FSK baudrate: 9600 framing: AX100 ASM+Golay data: - *tlm gr-satellites-4.4.0/python/satyaml/AISTECHSAT-3.yml000066400000000000000000000005401414055407700216120ustar00rootroot00000000000000name: AISTECHSAT-3 norad: 44103 data: &tlm Telemetry: unknown transmitters: 4k8 FSK downlink: frequency: 436.730e+6 modulation: FSK baudrate: 4800 framing: AX100 ASM+Golay data: - *tlm 9k6 FSK downlink: frequency: 436.730e+6 modulation: FSK baudrate: 9600 framing: AX100 ASM+Golay data: - *tlm gr-satellites-4.4.0/python/satyaml/AMGU-1.yml000066400000000000000000000003521414055407700207120ustar00rootroot00000000000000name: AMGU-1 alternative_names: - AMURSAT norad: 44394 data: &tlm Telemetry: unknown transmitters: 4k8 FSK downlink: frequency: 436.250e+6 modulation: FSK baudrate: 4800 framing: Mobitex data: - *tlm gr-satellites-4.4.0/python/satyaml/AO-27.yml000066400000000000000000000004551414055407700205540ustar00rootroot00000000000000name: AO-27 alternative_names: - EYESAT-1 - AO27 norad: 22825 data: &tlm Telemetry: telemetry: ax25 transmitters: 1k2 AFSK telemetry downlink: frequency: 436.795e+6 modulation: AFSK baudrate: 1240 af_carrier: 1700 deviation: 500 framing: AX.25 data: - *tlm gr-satellites-4.4.0/python/satyaml/AO-40.yml000066400000000000000000000006021414055407700205410ustar00rootroot00000000000000name: AO-40 norad: 26609 data: &tlm Telemetry: telemetry: qo100 transmitters: 400baud uncoded BPSK beacon: frequency: 2400.2e+6 modulation: DBPSK Manchester baudrate: 400 framing: AO-40 uncoded data: - *tlm 400baud FEC BPSK beacon: frequency: 2400.2e+6 modulation: DBPSK Manchester baudrate: 400 framing: AO-40 FEC data: - *tlm gr-satellites-4.4.0/python/satyaml/AO-73.yml000066400000000000000000000004321414055407700205500ustar00rootroot00000000000000name: AO-73 alternative_names: - FUNcube-1 norad: 39444 telemetry_servers: - FUNcube data: &tlm Telemetry: telemetry: funcube transmitters: 1k2 BPSK downlink: frequency: 145.935e+6 modulation: DBPSK baudrate: 1200 framing: AO-40 FEC data: - *tlm gr-satellites-4.4.0/python/satyaml/ARMADILLO.yml000066400000000000000000000003341414055407700213270ustar00rootroot00000000000000name: ARMADILLO norad: 44352 data: &tlm Telemetry: telemetry: ax25 transmitters: 19k2 FSK downlink: frequency: 437.525e+6 modulation: FSK baudrate: 19200 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/AT03.yml000066400000000000000000000003641414055407700204750ustar00rootroot00000000000000name: AT03 alternative_names: - Pegasus - QB50 AT03 norad: 42784 data: &tlm Telemetry: unknown transmitters: 9k6 FSK downlink: frequency: 436.670e+6 modulation: FSK baudrate: 9600 framing: TT-64 data: - *tlm gr-satellites-4.4.0/python/satyaml/ATHENOXAT-1.yml000066400000000000000000000004011414055407700215070ustar00rootroot00000000000000name: ATHENOXAT-1 norad: 41168 data: &tlm Telemetry: telemetry: csp transmitters: 4k8 AFSK downlink: frequency: 437.485e+6 modulation: AFSK baudrate: 4800 af_carrier: 3600 deviation: -1200 framing: U482C data: - *tlm gr-satellites-4.4.0/python/satyaml/ATL-1.yml000066400000000000000000000057311414055407700206070ustar00rootroot00000000000000name: ATL-1 alternative_names: - MO-106 norad: 44830 telemetry_servers: - BME data: &tlm Telemetry: telemetry: smogp &signalling Signalling: telemetry: smogp_signalling &spectrum Spectrum: files: smogp transmitters: 1k25 FSK long concatenated FEC: frequency: 437.175e+6 modulation: FSK baudrate: 1250 framing: AO-40 FEC data: - *tlm - *spectrum 1k25 FSK short concatenated FEC: frequency: 437.175e+6 modulation: FSK baudrate: 1250 framing: AO-40 FEC short data: - *tlm - *spectrum 1k25 FSK long RA FEC: frequency: 437.175e+6 modulation: FSK baudrate: 1250 framing: SMOG-P RA frame size: 256 data: - *tlm - *spectrum 1k25 FSK short RA FEC: frequency: 437.175e+6 modulation: FSK baudrate: 1250 framing: SMOG-P RA frame size: 128 data: - *tlm - *spectrum 1k25 FSK signalling: frequency: 437.175e+6 modulation: FSK baudrate: 1250 framing: SMOG-P Signalling data: - *signalling 2k5 FSK long concatenated FEC: frequency: 437.175e+6 modulation: FSK baudrate: 2500 framing: AO-40 FEC data: - *tlm - *spectrum 2k5 FSK short concatenated FEC: frequency: 437.175e+6 modulation: FSK baudrate: 2500 framing: AO-40 FEC short data: - *tlm - *spectrum 2k5 FSK long RA FEC: frequency: 437.175e+6 modulation: FSK baudrate: 2500 framing: SMOG-P RA frame size: 256 data: - *tlm - *spectrum 2k5 FSK short RA FEC: frequency: 437.175e+6 modulation: FSK baudrate: 2500 framing: SMOG-P RA frame size: 128 data: - *tlm - *spectrum 5k FSK long concatenated FEC: frequency: 437.175e+6 modulation: FSK baudrate: 5000 framing: AO-40 FEC data: - *tlm - *spectrum 5k FSK short concatenated FEC: frequency: 437.175e+6 modulation: FSK baudrate: 5000 framing: AO-40 FEC short data: - *tlm - *spectrum 5k FSK long RA FEC: frequency: 437.175e+6 modulation: FSK baudrate: 5000 framing: SMOG-P RA frame size: 256 data: - *tlm - *spectrum 5k FSK short RA FEC: frequency: 437.175e+6 modulation: FSK baudrate: 5000 framing: SMOG-P RA frame size: 128 data: - *tlm - *spectrum 12k5 FSK long concatenated FEC: frequency: 437.175e+6 modulation: FSK baudrate: 12500 framing: AO-40 FEC data: - *tlm - *spectrum 12k5 FSK short concatenated FEC: frequency: 437.175e+6 modulation: FSK baudrate: 12500 framing: AO-40 FEC short data: - *tlm - *spectrum 12k5 FSK long RA FEC: frequency: 437.175e+6 modulation: FSK baudrate: 12500 framing: SMOG-P RA frame size: 256 data: - *tlm - *spectrum 12k5 FSK short RA FEC: frequency: 437.175e+6 modulation: FSK baudrate: 12500 framing: SMOG-P RA frame size: 128 data: - *tlm - *spectrum gr-satellites-4.4.0/python/satyaml/ATLANTIS.yml000066400000000000000000000003741414055407700212460ustar00rootroot00000000000000name: ATLANTIS alternative_names: - US02 ON02US norad: 42737 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 436.388e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/AU02.yml000066400000000000000000000004511414055407700204720ustar00rootroot00000000000000name: AU02 alternative_names: - QB50 AU02 - UNSW-EC0 norad: 42723 data: &tlm Telemetry: telemetry: au03 transmitters: 4k8 AFSK downlink: frequency: 436.525e+6 modulation: AFSK baudrate: 4800 af_carrier: 3600 deviation: -1200 framing: U482C data: - *tlm gr-satellites-4.4.0/python/satyaml/AU03.yml000066400000000000000000000004551414055407700204770ustar00rootroot00000000000000name: AU03 alternative_names: - QB50 AU03 - i-INSPIRE II norad: 42731 data: &tlm Telemetry: telemetry: au03 transmitters: 4k8 AFSK downlink: frequency: 436.330e+6 modulation: AFSK baudrate: 4800 af_carrier: 3600 deviation: -1200 framing: U482C data: - *tlm gr-satellites-4.4.0/python/satyaml/AmicalSat.yml000066400000000000000000000004151414055407700216610ustar00rootroot00000000000000name: AmicalSat norad: 46287 data: &tlm Telemetry: telemetry: amicalsat transmitters: 1k2 AFSK telemetry downlink: frequency: 436.100e+6 modulation: AFSK baudrate: 1200 af_carrier: 1700 deviation: 500 framing: AX.25 data: - *tlm gr-satellites-4.4.0/python/satyaml/Astrocast_0_1.yml000066400000000000000000000011641414055407700224270ustar00rootroot00000000000000name: Astrocast 0.1 norad: 43798 data: &tlm Telemetry: unknown &tlm_9k6 9k6 Telemetry: unknown transmitters: 1k2 FSK FX.25 NRZ-I downlink: frequency: 437.175e+6 modulation: FSK baudrate: 1200 framing: Astrocast FX.25 NRZ-I data: - *tlm 1k2 FSK FX.25 NRZ downlink: frequency: 437.175e+6 modulation: FSK baudrate: 1200 framing: Astrocast FX.25 NRZ data: - *tlm 9k6 FSK downlink: frequency: 437.175e+6 modulation: FSK baudrate: 9600 framing: CCSDS Reed-Solomon frame size: 1115 RS basis: dual RS interleaving: 5 data: - *tlm_9k6 gr-satellites-4.4.0/python/satyaml/Astrocast_0_2.yml000066400000000000000000000011211414055407700224210ustar00rootroot00000000000000name: Astrocast 0.2 alternative_names: - HB9GSF norad: 44083 data: &tlm Telemetry: telemetry: ax25 &tlm2 Other telemetry: unknown transmitters: 9k6 FSK downlink: frequency: 437.175e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm 1k2 FSK FX.25 NRZ-I downlink: frequency: 437.175e+6 modulation: FSK baudrate: 1200 framing: Astrocast FX.25 NRZ-I data: - *tlm2 1k2 FSK FX.25 NRZ downlink: frequency: 437.175e+6 modulation: FSK baudrate: 1200 framing: Astrocast FX.25 NRZ data: - *tlm2 gr-satellites-4.4.0/python/satyaml/AztechSat-1.yml000066400000000000000000000003631414055407700220510ustar00rootroot00000000000000name: AztechSat-1 norad: 45258 data: &tlm Telemetry: telemetry: csp transmitters: 9k6 FSK downlink: frequency: 437.300e+6 modulation: FSK baudrate: 9600 framing: AX100 ASM+Golay scrambler: none data: - *tlm gr-satellites-4.4.0/python/satyaml/BCCSAT_1.yml000066400000000000000000000003311414055407700211770ustar00rootroot00000000000000name: BCCSAT 1 norad: 48041 data: &tlm Telemetry: telemetry: ax25 transmitters: 4k8 FSK downlink: frequency: 435.635e+6 modulation: FSK baudrate: 4800 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/BEESAT-1.yml000066400000000000000000000005221414055407700211230ustar00rootroot00000000000000name: BEESAT-1 norad: 35933 data: &tlm Telemetry: unknown transmitters: 4k8 FSK downlink: frequency: 435.950e+6 modulation: FSK baudrate: 4800 framing: Mobitex-NX data: - *tlm 9k6 FSK downlink: frequency: 435.950e+6 modulation: FSK baudrate: 9600 framing: Mobitex-NX data: - *tlm gr-satellites-4.4.0/python/satyaml/BEESAT-2.yml000066400000000000000000000003201414055407700211200ustar00rootroot00000000000000name: BEESAT-2 norad: 39136 data: &tlm Telemetry: unknown transmitters: 4k8 FSK downlink: frequency: 435.950e+6 modulation: FSK baudrate: 4800 framing: Mobitex-NX data: - *tlm gr-satellites-4.4.0/python/satyaml/BEESAT-4.yml000066400000000000000000000003201414055407700211220ustar00rootroot00000000000000name: BEESAT-4 norad: 41619 data: &tlm Telemetry: unknown transmitters: 4k8 FSK downlink: frequency: 435.950e+6 modulation: FSK baudrate: 4800 framing: Mobitex-NX data: - *tlm gr-satellites-4.4.0/python/satyaml/BEESAT-9.yml000066400000000000000000000003201414055407700211270ustar00rootroot00000000000000name: BEESAT-9 norad: 44412 data: &tlm Telemetry: unknown transmitters: 4k8 FSK downlink: frequency: 435.950e+6 modulation: FSK baudrate: 4800 framing: Mobitex-NX data: - *tlm gr-satellites-4.4.0/python/satyaml/BINAR-1.yml000066400000000000000000000012261414055407700210150ustar00rootroot00000000000000name: BINAR-1 norad: 49272 data: &tlm Telemetry: telemetry: binar1 &ax25 AX.25 telemetry: telemetry: ax25 transmitters: 1k2 FSK downlink: frequency: 435.810e+6 modulation: FSK baudrate: 1200 framing: BINAR-1 data: - *tlm 9k6 FSK downlink: frequency: 435.810e+6 modulation: FSK baudrate: 9600 framing: BINAR-1 data: - *tlm 1k2 FSK AX.25 downlink: frequency: 435.810e+6 modulation: FSK baudrate: 1200 framing: AX.25 G3RUH data: - *ax25 9k6 FSK AX.25 downlink: frequency: 435.810e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *ax25 gr-satellites-4.4.0/python/satyaml/BISONSAT.yml000066400000000000000000000003661414055407700212520ustar00rootroot00000000000000name: BISONSAT alternative_names: - N7SKC norad: 40968 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.375e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/BOBCAT-1.yml000066400000000000000000000022201414055407700211070ustar00rootroot00000000000000name: BOBCAT-1 norad: 46922 data: &tlm Telemetry: unknown transmitters: 100k FSK downlink: frequency: 436.600e+6 modulation: FSK baudrate: 100000 framing: AX100 ASM+Golay data: - *tlm 75k FSK downlink: frequency: 436.600e+6 modulation: FSK baudrate: 75000 framing: AX100 ASM+Golay data: - *tlm 57k6 FSK downlink: frequency: 436.600e+6 modulation: FSK baudrate: 57600 framing: AX100 ASM+Golay data: - *tlm 38k4 FSK downlink: frequency: 436.600e+6 modulation: FSK baudrate: 38400 framing: AX100 ASM+Golay data: - *tlm 19k2 FSK downlink: frequency: 436.600e+6 modulation: FSK baudrate: 19200 framing: AX100 ASM+Golay data: - *tlm 9k6 FSK downlink: frequency: 436.600e+6 modulation: FSK baudrate: 9600 framing: AX100 ASM+Golay data: - *tlm 4k8 FSK downlink: frequency: 436.600e+6 modulation: FSK baudrate: 4800 framing: AX100 ASM+Golay data: - *tlm 1k2 FSK downlink: frequency: 436.600e+6 modulation: FSK baudrate: 1200 framing: AX100 ASM+Golay data: - *tlm gr-satellites-4.4.0/python/satyaml/BRICSat-2.yml000066400000000000000000000006661414055407700213610ustar00rootroot00000000000000name: BRICSat-2 alternative_names: - USNA-P1 - USNAP1 - NO-103 norad: 44355 data: &tlm Telemetry: telemetry: ax25 transmitters: 1k2 AFSK downlink: frequency: 145.825e+6 modulation: AFSK baudrate: 1200 af_carrier: 1700 deviation: 500 framing: AX.25 data: - *tlm 9k6 FSK downlink: frequency: 437.600e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/BUGSAT-1.yml000066400000000000000000000003651414055407700211520ustar00rootroot00000000000000name: BUGSAT-1 alternative_names: - TITA norad: 40014 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.445e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/BY02.yml000066400000000000000000000005561414055407700205050ustar00rootroot00000000000000name: BY02 alternative_names: - BY70-2 norad: 45857 telemetry_servers: - HIT 8001 data: &tlm Telemetry: telemetry: by02 &codec2 Codec2: decoder: codec2_udp_sink transmitters: 9k6 BPSK downlink: frequency: 436.200e+6 modulation: BPSK baudrate: 9600 framing: LilacSat-1 data: - *tlm additional_data: codec2: *codec2 gr-satellites-4.4.0/python/satyaml/BY03.yml000066400000000000000000000003651414055407700205040ustar00rootroot00000000000000name: BY03 alternative_names: - BY70-3 norad: 46839 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 BPSK downlink: frequency: 437.600e+6 modulation: BPSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/BY70-1.yml000066400000000000000000000006651414055407700206510ustar00rootroot00000000000000name: BY70-1 norad: 41909 data: &tlm Telemetry: telemetry: by70_1 &image Image: image: by70_1 transports: &kiss KISS: protocol: KISS no control byte data: - *tlm - *image transmitters: 9k6 BPSK downlink: frequency: 436.200e+6 modulation: BPSK baudrate: 9600 framing: CCSDS Concatenated precoding: differential RS basis: conventional frame size: 114 transports: - *kiss gr-satellites-4.4.0/python/satyaml/CA03.yml000066400000000000000000000006231414055407700204520ustar00rootroot00000000000000name: CA03 alternative_names: - QB50 CA03 - ExAlta-1 norad: 42734 data: &tlm Telemetry: telemetry: csp transmitters: 4k8 FSK downlink: frequency: 436.705e+6 modulation: FSK baudrate: 4800 framing: AX100 Reed Solomon data: - *tlm 9k6 FSK downlink: frequency: 436.705e+6 modulation: FSK baudrate: 9600 framing: AX100 Reed Solomon data: - *tlm gr-satellites-4.4.0/python/satyaml/CAPE-3.yml000066400000000000000000000006551414055407700207010ustar00rootroot00000000000000name: CAPE-3 norad: 47309 data: &tlm Telemetry: telemetry: ax25 &tlmfsk TelemetryFSK: unknown transmitters: 1k2 AFSK AX.25 downlink: frequency: 437.325e+6 modulation: AFSK baudrate: 1200 af_carrier: 1700 deviation: 500 framing: AX.25 data: - *tlm 1k2 FSK AX5043 downlink: frequency: 437.325e+6 modulation: FSK baudrate: 1200 framing: AX5043 data: - *tlmfsk gr-satellites-4.4.0/python/satyaml/CAS-4A.yml000066400000000000000000000003271414055407700206750ustar00rootroot00000000000000name: CAS-4A norad: 42761 data: &tlm Telemetry: telemetry: ax25 transmitters: 4k8 FSK downlink: frequency: 145.836e+6 modulation: FSK baudrate: 4800 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/CAS-4B.yml000066400000000000000000000003271414055407700206760ustar00rootroot00000000000000name: CAS-4B norad: 42759 data: &tlm Telemetry: telemetry: ax25 transmitters: 4k8 FSK downlink: frequency: 145.893e+6 modulation: FSK baudrate: 4800 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/CAS-6.yml000066400000000000000000000003671414055407700206020ustar00rootroot00000000000000name: CAS-6 alternative_names: - TIANQIN-1 norad: 44881 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 145.890e+6 modulation: FSK baudrate: 4800 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/CHOMPTT.yml000066400000000000000000000005771414055407700211520ustar00rootroot00000000000000name: CHOMPTT norad: 43855 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.560e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm 1k2 AFSK downlink: frequency: 437.560e+6 modulation: AFSK baudrate: 1200 af_carrier: 1700 deviation: 500 framing: AX.25 data: - *tlm gr-satellites-4.4.0/python/satyaml/CMakeLists.txt000066400000000000000000000035221414055407700220420ustar00rootroot00000000000000# Copyright 2011 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. ######################################################################## # Include python install macros ######################################################################## include(GrPython) if(NOT PYTHONINTERP_FOUND) return() endif() ######################################################################## # Install python sources ######################################################################## GR_PYTHON_INSTALL( FILES __init__.py satyaml.py DESTINATION ${GR_PYTHON_DIR}/satellites/satyaml ) file(GLOB satyamls *.yml) install(FILES ${satyamls} DESTINATION ${GR_PYTHON_DIR}/satellites/satyaml ) ######################################################################## # Handle the unit tests ######################################################################## include(GrTest) set(GR_TEST_TARGET_DEPS gnuradio-satellites) set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig) GR_ADD_TEST(qa_satyaml ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_satyaml.py) gr-satellites-4.4.0/python/satyaml/COLUMBIA.yml000066400000000000000000000004001414055407700212100ustar00rootroot00000000000000name: COLUMBIA alternative_names: - US04 - ON04US norad: 42702 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.055e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/CSIM-FD.yml000066400000000000000000000003301414055407700210410ustar00rootroot00000000000000name: CSIM-FD norad: 43793 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.250e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/CUAVA-1.yml000066400000000000000000000003311414055407700210150ustar00rootroot00000000000000name: CUAVA-1 norad: 99521 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.075e+6 modulation: BPSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/CUBE-L.yml000066400000000000000000000003401414055407700207270ustar00rootroot00000000000000name: CUBE-L norad: 47448 data: &tlm Telemetry: telemetry: csp transmitters: 9k6 FSK downlink: frequency: 400.575e+6 modulation: FSK baudrate: 9600 framing: AX100 ASM+Golay data: - *tlm gr-satellites-4.4.0/python/satyaml/CUBEBUG-2.yml000066400000000000000000000003671414055407700212440ustar00rootroot00000000000000name: CUBEBUG-2 alternative_names: - LO-74 norad: 39440 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.445e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/CUTE.yml000066400000000000000000000003321414055407700205610ustar00rootroot00000000000000name: CUTE norad: 49263 data: &tlm Telemetry: telemetry: cute_70cm transmitters: 9k6 FSK downlink: frequency: 437.250e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/CZ02.yml000066400000000000000000000004501414055407700205000ustar00rootroot00000000000000name: CZ02 alternative_names: - QB50 CZ0 - VZLUSAT-1 norad: 42790 data: &tlm Telemetry: telemetry: csp transmitters: 4k8 AFSK downlink: frequency: 437.240e+6 modulation: AFSK baudrate: 4800 af_carrier: 3600 deviation: -1200 framing: U482C data: - *tlm gr-satellites-4.4.0/python/satyaml/CubeBel-1.yml000066400000000000000000000003721414055407700214640ustar00rootroot00000000000000name: CubeBel-1 alternative_names: - BSUSat-1 norad: 43666 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 436.990e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/CubeSX-HSE.yml000066400000000000000000000011041414055407700215650ustar00rootroot00000000000000name: CubeSX-HSE norad: 47952 data: &tlm Telemetry: telemetry: ax25 transmitters: 1k2 FSK downlink: frequency: 435.650e+6 modulation: FSK baudrate: 1200 framing: USP data: - *tlm 2k4 FSK downlink: frequency: 435.650e+6 modulation: FSK baudrate: 2400 framing: USP data: - *tlm 4k8 FSK downlink: frequency: 435.650e+6 modulation: FSK baudrate: 4800 framing: USP data: - *tlm 9k6 FSK downlink: frequency: 435.650e+6 modulation: FSK baudrate: 9600 framing: USP data: - *tlm gr-satellites-4.4.0/python/satyaml/CubeSX-Sirius-HSE.yml000066400000000000000000000011131414055407700230410ustar00rootroot00000000000000name: CubeSX-Sirius-HSE norad: 47951 data: &tlm Telemetry: telemetry: ax25 transmitters: 1k2 FSK downlink: frequency: 437.050e+6 modulation: FSK baudrate: 1200 framing: USP data: - *tlm 2k4 FSK downlink: frequency: 437.050e+6 modulation: FSK baudrate: 2400 framing: USP data: - *tlm 4k8 FSK downlink: frequency: 437.050e+6 modulation: FSK baudrate: 4800 framing: USP data: - *tlm 9k6 FSK downlink: frequency: 437.050e+6 modulation: FSK baudrate: 9600 framing: USP data: - *tlm gr-satellites-4.4.0/python/satyaml/D-SAT.yml000066400000000000000000000004501414055407700206320ustar00rootroot00000000000000name: D-SAT norad: 42794 data: &tlm Telemetry: telemetry: csp &image Image: image: dsat transmitters: 4k8 AFSK downlink: frequency: 437.505e+6 modulation: AFSK baudrate: 4800 af_carrier: 3600 deviation: -1200 framing: U482C data: - *tlm - *image gr-satellites-4.4.0/python/satyaml/D-STAR_ONE_Sparrow.yml000066400000000000000000000003441414055407700231740ustar00rootroot00000000000000name: D-STAR ONE Sparrow norad: 43881 data: &tlm Telemetry: telemetry: dstar_one transmitters: 4k8 FSK downlink: frequency: 435.700e+6 modulation: FSK baudrate: 4800 framing: Mobitex data: - *tlm gr-satellites-4.4.0/python/satyaml/D-STAR_ONE_iSat.yml000066400000000000000000000003411414055407700224340ustar00rootroot00000000000000name: D-STAR ONE iSat norad: 43879 data: &tlm Telemetry: telemetry: dstar_one transmitters: 4k8 FSK downlink: frequency: 435.700e+6 modulation: FSK baudrate: 4800 framing: Mobitex data: - *tlm gr-satellites-4.4.0/python/satyaml/DEKART.yml000066400000000000000000000003131414055407700207720ustar00rootroot00000000000000name: DEKART norad: 46493 data: &tlm Telemetry: unknown transmitters: 4k8 FSK downlink: frequency: 437.000e+6 modulation: FSK baudrate: 4800 framing: Mobitex data: - *tlm gr-satellites-4.4.0/python/satyaml/DELFI-C3.yml000066400000000000000000000003611414055407700211110ustar00rootroot00000000000000name: DELFI-C3 alternative_names: - DO64 norad: 32789 data: &tlm Telemetry: telemetry: ax25 transmitters: 1k2 BPSK downlink: frequency: 145.867e+6 modulation: BPSK baudrate: 1200 framing: AX.25 data: - *tlm gr-satellites-4.4.0/python/satyaml/DELFI-n3xt.yml000066400000000000000000000003271414055407700215420ustar00rootroot00000000000000name: DELFI-n3xt norad: 39428 data: &tlm Telemetry: telemetry: ax25 transmitters: 2k4 BPSK downlink: frequency: 145.870e+6 modulation: BPSK baudrate: 2400 framing: AX.25 data: - *tlm gr-satellites-4.4.0/python/satyaml/DHABISAT.yml000066400000000000000000000012111414055407700211750ustar00rootroot00000000000000name: DHABISAT alternative_names: - MYSat-2 norad: 49016 data: &tlm Telemetry: telemetry: ax25 transmitters: 1k2 BPSK downlink: frequency: 436.908e+6 modulation: BPSK baudrate: 1200 framing: AX.25 G3RUH data: - *tlm 2k4 BPSK downlink: frequency: 436.908e+6 modulation: BPSK baudrate: 2400 framing: AX.25 G3RUH data: - *tlm 4k8 BPSK downlink: frequency: 436.908e+6 modulation: BPSK baudrate: 4800 framing: AX.25 G3RUH data: - *tlm 9k6 BPSK downlink: frequency: 436.908e+6 modulation: BPSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/DIY-1.yml000066400000000000000000000003141414055407700206040ustar00rootroot00000000000000name: DIY-1 norad: 47963 data: &tlm Telemetry: unknown transmitters: 500 baud FSK downlink: frequency: 437.125e+6 modulation: FSK baudrate: 500 framing: DIY-1 data: - *tlm gr-satellites-4.4.0/python/satyaml/DUCHIFAT-3.yml000066400000000000000000000003361414055407700213540ustar00rootroot00000000000000name: DUCHIFAT-3 norad: 44854 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 BPSK downlink: frequency: 436.400e+6 modulation: BPSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/Delphini-1.yml000066400000000000000000000005451414055407700217210ustar00rootroot00000000000000name: Delphini-1 norad: 44030 data: &tlm Telemetry: telemetry: csp transmitters: 4k8 FSK downlink: frequency: 437.500e+6 modulation: FSK baudrate: 4800 framing: AX100 ASM+Golay data: - *tlm 9k6 FSK downlink: frequency: 437.500e+6 modulation: FSK baudrate: 9600 framing: AX100 ASM+Golay data: - *tlm gr-satellites-4.4.0/python/satyaml/E-ST@R-II.yml000066400000000000000000000003761414055407700212620ustar00rootroot00000000000000name: E-ST@R-II norad: 41459 data: &tlm Telemetry: telemetry: ax25 transmitters: 1k2 AFSK downlink: frequency: 437.485e+6 modulation: AFSK baudrate: 1200 af_carrier: 1700 deviation: 500 framing: AX.25 data: - *tlm gr-satellites-4.4.0/python/satyaml/ECAMSAT.yml000066400000000000000000000003741414055407700211040ustar00rootroot00000000000000name: ECAMSAT norad: 43019 data: &tlm Telemetry: telemetry: ax25 transmitters: 1k2 AFSK downlink: frequency: 437.095e+6 modulation: AFSK baudrate: 1200 af_carrier: 1700 deviation: 500 framing: AX.25 data: - *tlm gr-satellites-4.4.0/python/satyaml/ELFIN-A.yml000066400000000000000000000005731414055407700210430ustar00rootroot00000000000000name: ELFIN-A alternative_names: - WJ2XNX norad: 43617 data: &tlm Telemetry: telemetry: ax25 transmitters: 19k2 FSK downlink: frequency: 437.450e+6 modulation: FSK baudrate: 19200 framing: AX.25 G3RUH data: - *tlm 9k6 FSK downlink: frequency: 437.450e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/ELFIN-B.yml000066400000000000000000000006121414055407700210360ustar00rootroot00000000000000name: ELFIN-B alternative_names: - ELFIN-STAR - WJ2XOX norad: 43616 data: &tlm Telemetry: telemetry: ax25 transmitters: 19k2 FSK downlink: frequency: 437.475e+6 modulation: FSK baudrate: 19200 framing: AX.25 G3RUH data: - *tlm 9k6 FSK downlink: frequency: 437.475e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/ENDUROSAT_ONE.yml000066400000000000000000000004021414055407700220640ustar00rootroot00000000000000name: ENDUROSAT ONE alternative_names: - ENDUROSAT AD norad: 43551 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.050e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/ESEO.yml000066400000000000000000000005531414055407700205610ustar00rootroot00000000000000name: ESEO alternative_names: - FUNcube-4 norad: 43792 data: &tlm Telemetry: telemetry: eseo transmitters: 9k6 FSK downlink: frequency: 437.000e+6 modulation: FSK baudrate: 9600 framing: ESEO data: - *tlm 4k8 FSK downlink: frequency: 437.000e+6 modulation: FSK baudrate: 4800 framing: ESEO data: - *tlm gr-satellites-4.4.0/python/satyaml/EXOCUBE-2.yml000066400000000000000000000003661414055407700212610ustar00rootroot00000000000000name: EXOCUBE-2 alternative_names: - CP12 norad: 47319 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.150e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/Eaglet-I.yml000066400000000000000000000003311414055407700214070ustar00rootroot00000000000000name: Eaglet-I norad: 43790 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 435.800e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/EntrySat.yml000066400000000000000000000003331414055407700215730ustar00rootroot00000000000000name: EntrySat norad: 44429 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 BPSK downlink: frequency: 436.950e+6 modulation: BPSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/FACSAT-1.yml000066400000000000000000000003351414055407700211230ustar00rootroot00000000000000name: FACSAT-1 norad: 43721 data: &tlm Telemetry: telemetry: csp transmitters: 9k6 FSK downlink: frequency: 437.350e+6 modulation: FSK baudrate: 9600 framing: AX100 ASM+Golay data: - *tlm gr-satellites-4.4.0/python/satyaml/FALCONSAT-3.yml000066400000000000000000000003341414055407700214750ustar00rootroot00000000000000name: FALCONSAT-3 norad: 30776 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 435.103e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/FIREBIRD_3.yml000066400000000000000000000003351414055407700214340ustar00rootroot00000000000000name: FIREBIRD 3 norad: 40377 data: &tlm Telemetry: telemetry: ax25 transmitters: 19k2 FSK downlink: frequency: 437.397e+6 modulation: FSK baudrate: 19200 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/FIREBIRD_4.yml000066400000000000000000000003351414055407700214350ustar00rootroot00000000000000name: FIREBIRD 4 norad: 40378 data: &tlm Telemetry: telemetry: ax25 transmitters: 19k2 FSK downlink: frequency: 437.220e+6 modulation: FSK baudrate: 19200 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/FMN-1.yml000066400000000000000000000003741414055407700206050ustar00rootroot00000000000000name: FMN-1 alternative_names: - FengMaNiu-1 norad: 43192 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 BPSK downlink: frequency: 435.350e+6 modulation: BPSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/FOSSASAT-1B.yml000066400000000000000000000003641414055407700215110ustar00rootroot00000000000000name: FOSSASAT-1B alternative_names: norad: 99999 data: &tlm Telemetry: telemetry: fossasat_1b transmitters: 9k6 FSK downlink: frequency: 436.9800e+6 modulation: FSK baudrate: 9600 framing: FOSSASAT data: - *tlm gr-satellites-4.4.0/python/satyaml/FOSSASAT-2.yml000066400000000000000000000003611414055407700214050ustar00rootroot00000000000000name: FOSSASAT-2 alternative_names: norad: 99998 data: &tlm Telemetry: telemetry: fossasat_2 transmitters: 9k6 FSK downlink: frequency: 436.900e+6 modulation: FSK baudrate: 9600 framing: FOSSASAT data: - *tlm gr-satellites-4.4.0/python/satyaml/FloripaSat-1.yml000066400000000000000000000006601414055407700222270ustar00rootroot00000000000000name: FloripaSat-1 norad: 44885 data: &beacon Beacon: telemetry: floripasat &downlink Downlink: telemetry: floripasat transmitters: 1k2 FSK beacon: frequency: 145.900e+6 modulation: FSK baudrate: 1200 framing: NGHam no Reed Solomon data: - *beacon 2k4 FSK downlink: frequency: 436.100e+6 modulation: FSK baudrate: 2400 framing: NGHam no Reed Solomon data: - *downlink gr-satellites-4.4.0/python/satyaml/GALASSIA.yml000066400000000000000000000003761414055407700212150ustar00rootroot00000000000000name: GALASSIA norad: 41170 data: &tlm Telemetry: telemetry: csp transmitters: 4k8 AFSK downlink: frequency: 436.400e+6 modulation: AFSK baudrate: 4800 af_carrier: 3600 deviation: -1200 framing: U482C data: - *tlm gr-satellites-4.4.0/python/satyaml/GO-32.yml000066400000000000000000000005771414055407700205630ustar00rootroot00000000000000name: GO-32 alternative_names: - TECHSAT-1B norad: 25397 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink A: frequency: 435.325e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm 9k6 FSK downlink B: frequency: 435.225e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/GOMX-1.yml000066400000000000000000000003771414055407700207420ustar00rootroot00000000000000name: GOMX-1 norad: 39430 data: &tlm Telemetry: telemetry: gomx_1 transmitters: 4k8 AFSK downlink: frequency: 437.250e+6 modulation: AFSK baudrate: 4800 af_carrier: 3600 deviation: -1200 framing: U482C data: - *tlm gr-satellites-4.4.0/python/satyaml/GOMX-3.yml000066400000000000000000000003421414055407700207340ustar00rootroot00000000000000name: GOMX-3 norad: 40949 data: &tlm Telemetry: telemetry: gomx_3 transmitters: 19k2 FSK downlink: frequency: 437.250e+6 modulation: FSK baudrate: 19200 framing: AX100 Reed Solomon data: - *tlm gr-satellites-4.4.0/python/satyaml/GR01.yml000066400000000000000000000006121414055407700204730ustar00rootroot00000000000000name: GR01 alternative_names: - QB50 GR01 - DUTHSat norad: 42724 data: &tlm Telemetry: telemetry: ax25 transmitters: 1k2 BPSK downlink: frequency: 436.420e+6 modulation: BPSK baudrate: 1200 framing: AX.25 G3RUH data: - *tlm 9k6 BPSK downlink: frequency: 436.420e+6 modulation: BPSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/GRBAlpha.yml000066400000000000000000000003311414055407700214000ustar00rootroot00000000000000name: GRBAlpha norad: 47959 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.025e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/GRIFEX.yml000066400000000000000000000003271414055407700210110ustar00rootroot00000000000000name: GRIFEX norad: 40379 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.481e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/Grizu-263A.yml000066400000000000000000000003221414055407700215310ustar00rootroot00000000000000name: Grizu-263A norad: 99990 data: &tlm Telemetry: unknown transmitters: 2k4 FSK downlink: frequency: 435.675e+6 modulation: FSK baudrate: 2400 framing: Grizu-263A data: - *tlm gr-satellites-4.4.0/python/satyaml/IDEASSat.yml000066400000000000000000000003161414055407700213200ustar00rootroot00000000000000name: IDEASSat norad: 47458 data: &tlm Telemetry: unknown transmitters: 9k6 FSK downlink: frequency: 437.345e+6 modulation: FSK baudrate: 9600 framing: IDEASSat data: - *tlm gr-satellites-4.4.0/python/satyaml/IL01.yml000066400000000000000000000004221414055407700204660ustar00rootroot00000000000000name: IL01 alternative_names: - QB50 IL01 - DUCHIFAT-2 - Hoopoe norad: 42718 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 BPSK downlink: frequency: 437.740e+6 modulation: BPSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/INNOSAT-2.yml000066400000000000000000000003351414055407700212760ustar00rootroot00000000000000name: INNOSAT-2 norad: 43738 data: &tlm Telemetry: telemetry: csp transmitters: 4k8 FSK downlink: frequency: 437.450e+6 modulation: FSK baudrate: 4800 framing: AX100 ASM+Golay data: - *tlm gr-satellites-4.4.0/python/satyaml/INS-1C.yml000066400000000000000000000003211414055407700207110ustar00rootroot00000000000000name: INS-1C norad: 43116 data: &tlm Telemetry: telemetry: ax25 transmitters: 1k2 FSK downlink: frequency: 435.080e+6 modulation: FSK baudrate: 1200 framing: AX.25 data: - *tlm gr-satellites-4.4.0/python/satyaml/ION-MK01.yml000066400000000000000000000004161414055407700211170ustar00rootroot00000000000000name: ION-MK01 alternative_names: - ION mk01 - ION SVC Lucas norad: 46274 data: &tlm Telemetry: telemetry: csp transmitters: 1k2 FSK downlink: frequency: 437.515e+6 modulation: FSK baudrate: 1200 framing: AX100 ASM+Golay data: - *tlm gr-satellites-4.4.0/python/satyaml/ION_SCV-003.yml000066400000000000000000000003371414055407700214660ustar00rootroot00000000000000name: ION SCV-003 norad: 48912 data: &tlm Telemetry: telemetry: csp transmitters: 1k2 FSK downlink: frequency: 437.515e+6 modulation: FSK baudrate: 1200 framing: AX100 ASM+Golay data: - *tlm gr-satellites-4.4.0/python/satyaml/IRAZU.yml000066400000000000000000000003641414055407700207200ustar00rootroot00000000000000name: IRAZU alternative_names: - Irazú norad: 43468 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 436.500e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/IRVINE-01.yml000066400000000000000000000003321414055407700212330ustar00rootroot00000000000000name: IRVINE-01 norad: 43693 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.800e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/IT-SPINS.yml000066400000000000000000000003331414055407700212300ustar00rootroot00000000000000name: IT-SPINS norad: 49017 data: &tlm Telemetry: telemetry: ax25 transmitters: 19k2 FSK downlink: frequency: 437.405e+6 modulation: FSK baudrate: 19200 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/ITASAT_1.yml000066400000000000000000000003301414055407700212240ustar00rootroot00000000000000name: ITASAT 1 norad: 43786 data: &tlm Telemetry: telemetry: ax25 transmitters: 1k2 BPSK downlink: frequency: 145.860e+6 modulation: BPSK baudrate: 1200 framing: AX.25 data: - *tlm gr-satellites-4.4.0/python/satyaml/JAISAT-1.yml000066400000000000000000000003151414055407700211330ustar00rootroot00000000000000name: JAISAT-1 norad: 44419 data: &tlm Telemetry: unknown transmitters: 4k8 FSK downlink: frequency: 435.700e+6 modulation: FSK baudrate: 4800 framing: Mobitex data: - *tlm gr-satellites-4.4.0/python/satyaml/JY1-Sat.yml000066400000000000000000000004461414055407700211570ustar00rootroot00000000000000name: JY1-Sat alternative_names: - FUNcube-6 - JO-97 norad: 43803 telemetry_servers: - FUNcube data: &tlm Telemetry: telemetry: funcube transmitters: 1k2 BPSK downlink: frequency: 145.840e+6 modulation: DBPSK baudrate: 1200 framing: AO-40 FEC data: - *tlm gr-satellites-4.4.0/python/satyaml/KAIDUN-1.yml000066400000000000000000000003331414055407700211330ustar00rootroot00000000000000name: KAIDUN-1 norad: 41915 data: &tlm Telemetry: telemetry: ax25 transmitters: 1k2 BPSK downlink: frequency: 437.600e+6 modulation: BPSK baudrate: 1200 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/KAITUO-1B.yml000066400000000000000000000003321414055407700212550ustar00rootroot00000000000000name: KAITUO-1B norad: 40912 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 145.475e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/KR01.yml000066400000000000000000000006061414055407700205020ustar00rootroot00000000000000name: KR01 alternative_names: - QB50 KR01 - LINK norad: 42714 data: &tlm Telemetry: telemetry: kr01 transmitters: 1k2 BPSK downlink: frequency: 436.030e+6 modulation: BPSK baudrate: 1200 framing: AX.25 G3RUH data: - *tlm 9k6 BPSK downlink: frequency: 436.030e+6 modulation: BPSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/KS-1Q.yml000066400000000000000000000005231414055407700206170ustar00rootroot00000000000000name: KS-1Q norad: 41845 data: &tlm Telemetry: telemetry: csp transports: &kiss KISS: protocol: KISS KS-1Q data: - *tlm transmitters: 20k FSK downlink: frequency: 436.500e+6 modulation: FSK baudrate: 20000 framing: CCSDS Concatenated RS basis: dual frame size: 223 transports: - *kiss gr-satellites-4.4.0/python/satyaml/KSU_CubeSat.yml000066400000000000000000000003341414055407700220730ustar00rootroot00000000000000name: KSU CubeSat norad: 49754 data: &tlm Telemetry: telemetry: ax25 transmitters: 4k8 FSK downlink: frequency: 437.130e+6 modulation: FSK baudrate: 4800 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/KrakSat.yml000066400000000000000000000003661414055407700213700ustar00rootroot00000000000000name: KrakSat alternative_names: - SR9KRA norad: 44427 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 435.500e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/LEDSAT.yml000066400000000000000000000005411414055407700207770ustar00rootroot00000000000000name: LEDSAT norad: 49069 data: &tlm Telemetry: telemetry: csp transmitters: 1k2 FSK downlink: frequency: 435.190e+6 modulation: FSK baudrate: 1200 framing: AX100 ASM+Golay data: - *tlm 9k6 FSK downlink: frequency: 435.190e+6 modulation: FSK baudrate: 9600 framing: AX100 ASM+Golay data: - *tlm gr-satellites-4.4.0/python/satyaml/LITUANICASAT-2.yml000066400000000000000000000003371414055407700220460ustar00rootroot00000000000000name: LITUANICASAT-2 norad: 42768 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.265e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/LUME-1.yml000066400000000000000000000003331414055407700207220ustar00rootroot00000000000000name: LUME-1 norad: 43908 data: &tlm Telemetry: telemetry: lume transmitters: 4k8 FSK downlink: frequency: 437.060e+6 modulation: FSK baudrate: 4800 framing: AX100 ASM+Golay data: - *tlm gr-satellites-4.4.0/python/satyaml/LightSail-2.yml000066400000000000000000000004121414055407700220370ustar00rootroot00000000000000name: LightSail-2 alternative_names: - WM9XPA - LightSail-B norad: 44420 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.025e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/LilacSat-1.yml000066400000000000000000000007641414055407700216640ustar00rootroot00000000000000name: LilacSat-1 alternative_names: - CN02 - QB50 CN02 - LO-90 norad: 42725 data: &tlm Telemetry: telemetry: by70_1 &image Image: image: by70_1 &codec2 Codec2: decoder: codec2_udp_sink transports: &kiss KISS: protocol: KISS no control byte data: - *tlm - *image transmitters: 9k6 BPSK downlink: frequency: 436.510e+6 modulation: BPSK baudrate: 9600 framing: LilacSat-1 transports: - *kiss additional_data: codec2: *codec2 gr-satellites-4.4.0/python/satyaml/LilacSat-2.yml000066400000000000000000000016431414055407700216620ustar00rootroot00000000000000name: LilacSat-2 norad: 40908 data: &tlm Telemetry: unknown transports: &kiss KISS: protocol: KISS no control byte data: - *tlm &kiss2 KISS2: protocol: KISS no control byte data: - *tlm &kiss3 KISS3: protocol: KISS no control byte data: - *tlm transmitters: 9k6 BPSK downlink: frequency: 437.200e+6 modulation: BPSK baudrate: 9600 framing: CCSDS Concatenated precoding: differential RS basis: conventional frame size: 114 transports: - *kiss 4k8 FSK downlink: frequency: 437.225e+6 modulation: FSK baudrate: 4800 framing: CCSDS Concatenated RS basis: conventional frame size: 114 transports: - *kiss2 300baud subaudio downlink: frequency: 437.200e+6 modulation: FSK subaudio baudrate: 300 framing: CCSDS Reed-Solomon RS basis: conventional frame size: 114 transports: - *kiss3 gr-satellites-4.4.0/python/satyaml/Lucky-7.yml000066400000000000000000000003731414055407700212610ustar00rootroot00000000000000name: Lucky-7 norad: 44406 data: &tlm Telemetry: unknown &image Image: image: lucky7 transmitters: 4k8 FSK downlink: frequency: 437.525e+6 modulation: FSK baudrate: 4800 framing: Lucky-7 data: - *tlm - *image gr-satellites-4.4.0/python/satyaml/Luojia-1.yml000066400000000000000000000003341414055407700214040ustar00rootroot00000000000000name: Luojia-1 norad: 43485 data: &tlm Telemetry: telemetry: csp transmitters: 4k8 FSK downlink: frequency: 437.250e+6 modulation: FSK baudrate: 4800 framing: AX100 ASM+Golay data: - *tlm gr-satellites-4.4.0/python/satyaml/M6P.yml000066400000000000000000000003241414055407700204240ustar00rootroot00000000000000name: M6P norad: 44109 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.265e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/MCUBED-2.yml000066400000000000000000000003311414055407700211160ustar00rootroot00000000000000name: MCUBED-2 norad: 39469 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.480e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/MEZNSAT.yml000066400000000000000000000007441414055407700211510ustar00rootroot00000000000000name: MEZNSAT norad: 46489 data: &tlm Telemetry: telemetry: ax25 transmitters: 1k2 BPSK downlink: frequency: 436.600e+6 modulation: BPSK baudrate: 1200 framing: AX.25 G3RUH data: - *tlm 2k4 BPSK downlink: frequency: 436.600e+6 modulation: BPSK baudrate: 2400 framing: AX.25 G3RUH data: - *tlm 9k6 BPSK downlink: frequency: 436.600e+6 modulation: BPSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/MINXSS.yml000066400000000000000000000003271414055407700210460ustar00rootroot00000000000000name: MINXSS norad: 41474 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.345e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/MIR-SAT1.yml000066400000000000000000000004121414055407700211550ustar00rootroot00000000000000name: MIR-SAT1 norad: 48868 data: &tlm Telemetry: telemetry: mirsat1 &file Files: files: mirsat1 transmitters: 9k6 FSK downlink: frequency: 436.925e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm - *file gr-satellites-4.4.0/python/satyaml/MYSAT_1.yml000066400000000000000000000005421414055407700211410ustar00rootroot00000000000000name: MYSAT 1 norad: 44045 data: &tlm Telemetry: telemetry: mysat1 transmitters: 1k2 BPSK downlink: frequency: 435.775e+6 modulation: BPSK baudrate: 1200 framing: AX.25 G3RUH data: - *tlm 9k6 BPSK downlink: frequency: 435.775e+6 modulation: BPSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/MiTEE-1.yml000066400000000000000000000003301414055407700210600ustar00rootroot00000000000000name: MiTEE-1 norad: 47314 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.800e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/MinXSS_2.yml000066400000000000000000000005361414055407700213710ustar00rootroot00000000000000name: MinXSS 2 norad: 43758 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.250e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm 19k2 FSK downlink: frequency: 437.250e+6 modulation: FSK baudrate: 19200 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/NETSAT_1.yml000066400000000000000000000003311414055407700212360ustar00rootroot00000000000000name: NETSAT 1 norad: 46506 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 435.600e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/NETSAT_2.yml000066400000000000000000000003311414055407700212370ustar00rootroot00000000000000name: NETSAT 2 norad: 46507 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 435.600e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/NETSAT_3.yml000066400000000000000000000003311414055407700212400ustar00rootroot00000000000000name: NETSAT 3 norad: 46505 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 435.600e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/NETSAT_4.yml000066400000000000000000000003311414055407700212410ustar00rootroot00000000000000name: NETSAT 4 norad: 46504 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 435.600e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/NEUTRON-1.yml000066400000000000000000000005411414055407700213130ustar00rootroot00000000000000name: NEUTRON-1 norad: 46923 data: &tlm Telemetry: telemetry: ax25 transmitters: 1k2 BPSK downlink: frequency: 435.300e+6 modulation: BPSK baudrate: 1200 framing: AX.25 G3RUH data: - *tlm 9k6 BPSK downlink: frequency: 435.300e+6 modulation: BPSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/NEXUS.yml000066400000000000000000000006671414055407700207360ustar00rootroot00000000000000name: NEXUS alternative_names: - JS1WAV - FO-99 - Fuji-OSCAR 99 norad: 43937 data: &tlm Telemetry: telemetry: ax25 transmitters: 1k2 AFSK downlink: frequency: 435.900e+6 modulation: AFSK baudrate: 1200 af_carrier: 1700 deviation: 500 framing: AX.25 data: - *tlm 9k6 FSK downlink: frequency: 435.900e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/NO-84.yml000066400000000000000000000004471414055407700205750ustar00rootroot00000000000000name: NO-84 alternative_names: - PSAT - ParkinsonSAT norad: 40654 data: &tlm Telemetry: telemetry: ax25 transmitters: 1k2 AFSK downlink: frequency: 145.825e+6 modulation: AFSK baudrate: 1200 af_carrier: 1700 deviation: 500 framing: AX.25 data: - *tlm gr-satellites-4.4.0/python/satyaml/NODES_1.yml000066400000000000000000000006021414055407700211110ustar00rootroot00000000000000name: NODES 1 norad: 41478 data: &tlm Telemetry: telemetry: ax25 transmitters: 1k2 AFSK downlink: frequency: 437.100e+6 modulation: AFSK baudrate: 1200 af_carrier: 1700 deviation: 500 framing: AX.25 data: - *tlm 19k2 FSK downlink: frequency: 2401.200e+6 modulation: FSK baudrate: 19200 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/NODES_2.yml000066400000000000000000000006021414055407700211120ustar00rootroot00000000000000name: NODES 2 norad: 41477 data: &tlm Telemetry: telemetry: ax25 transmitters: 1k2 AFSK downlink: frequency: 437.100e+6 modulation: AFSK baudrate: 1200 af_carrier: 1700 deviation: 500 framing: AX.25 data: - *tlm 19k2 FSK downlink: frequency: 2401.200e+6 modulation: FSK baudrate: 19200 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/NORBI.yml000066400000000000000000000003261414055407700206750ustar00rootroot00000000000000name: NORBI norad: 46494 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 436.700e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/NSIGHT-1.yml000066400000000000000000000003741414055407700211610ustar00rootroot00000000000000name: NSIGHT-1 alternative_names: - AZ02 ON02AZ norad: 42726 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 435.900e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/NanosatC-BR1.yml000066400000000000000000000003331414055407700221120ustar00rootroot00000000000000name: NanosatC-BR1 norad: 40024 data: &tlm Telemetry: telemetry: ax25 transmitters: 1k2 BPSK downlink: frequency: 145.865e+6 modulation: BPSK baudrate: 1200 framing: AX.25 data: - *tlm gr-satellites-4.4.0/python/satyaml/NanosatC-BR2.yml000066400000000000000000000005341414055407700221160ustar00rootroot00000000000000name: NanosatC-BR2 norad: 47950 data: &tlm Telemetry: telemetry: ax25 transmitters: 1k2 BPSK downlink: frequency: 145.865e+6 modulation: BPSK baudrate: 1200 framing: AX.25 data: - *tlm 4k8 BPSK downlink: frequency: 145.865e+6 modulation: BPSK baudrate: 4800 framing: AX.25 data: - *tlm gr-satellites-4.4.0/python/satyaml/Nayif-1.yml000066400000000000000000000004461414055407700212330ustar00rootroot00000000000000name: Nayif-1 alternative_names: - FUNcube-5 - EO-88 norad: 42017 telemetry_servers: - FUNcube data: &tlm Telemetry: telemetry: funcube transmitters: 1k2 BPSK downlink: frequency: 145.940e+6 modulation: DBPSK baudrate: 1200 framing: AO-40 FEC data: - *tlm gr-satellites-4.4.0/python/satyaml/NuSat_1.yml000066400000000000000000000003531414055407700212760ustar00rootroot00000000000000name: NuSat 1 alternative_names: - ÑuSat 1 norad: 41557 data: &tlm Telemetry: unknown transmitters: 40k FSK downlink: frequency: 436.445e+6 modulation: FSK baudrate: 40000 framing: NuSat data: - *tlm gr-satellites-4.4.0/python/satyaml/OPS-SAT.yml000066400000000000000000000003141414055407700211070ustar00rootroot00000000000000name: OPS-SAT norad: 44878 data: &tlm Telemetry: unknown transmitters: 9k6 FSK downlink: frequency: 437.200e+6 modulation: FSK baudrate: 9600 framing: OPS-SAT data: - *tlm gr-satellites-4.4.0/python/satyaml/O_OREOS.yml000066400000000000000000000004331414055407700211700ustar00rootroot00000000000000name: O/OREOS alternative_names: - USA 219 norad: 37224 data: &tlm Telemetry: telemetry: ax25 transmitters: 1k2 AFSK downlink: frequency: 437.305e+6 modulation: AFSK baudrate: 1200 af_carrier: 1700 deviation: 500 framing: AX.25 data: - *tlm gr-satellites-4.4.0/python/satyaml/OrbiCraft-Zorkiy.yml000066400000000000000000000011121414055407700231560ustar00rootroot00000000000000name: OrbiCraft-Zorkiy norad: 47960 data: &tlm Telemetry: telemetry: ax25 transmitters: 1k2 FSK downlink: frequency: 437.850e+6 modulation: FSK baudrate: 1200 framing: USP data: - *tlm 2k4 FSK downlink: frequency: 437.850e+6 modulation: FSK baudrate: 2400 framing: USP data: - *tlm 4k8 FSK downlink: frequency: 437.850e+6 modulation: FSK baudrate: 4800 framing: USP data: - *tlm 9k6 FSK downlink: frequency: 437.850e+6 modulation: FSK baudrate: 9600 framing: USP data: - *tlm gr-satellites-4.4.0/python/satyaml/PAINANI-1.yml000066400000000000000000000003321414055407700212360ustar00rootroot00000000000000name: PAINANI-1 norad: 44365 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.475e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/PHOENIX.yml000066400000000000000000000003771414055407700211440ustar00rootroot00000000000000name: PHOENIX alternative_names: - TW01 - ON01TW norad: 42706 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 436.915e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/PHONESAT_2_4.yml000066400000000000000000000004011414055407700217030ustar00rootroot00000000000000name: PHONESAT 2.4 norad: 39381 data: &tlm Telemetry: telemetry: ax25 transmitters: 1k2 AFSK downlink: frequency: 437.425e+6 modulation: AFSK baudrate: 1200 af_carrier: 1700 deviation: 500 framing: AX.25 data: - *tlm gr-satellites-4.4.0/python/satyaml/POLYITAN-1.yml000066400000000000000000000006021414055407700214160ustar00rootroot00000000000000name: POLYITAN-1 norad: 40042 data: &tlm Telemetry: telemetry: ax25 transmitters: 1k2 AFSK downlink: frequency: 437.675e+6 modulation: AFSK baudrate: 1200 af_carrier: 1700 deviation: 500 framing: AX.25 data: - *tlm 9k6 FSK downlink: frequency: 437.676e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/PW-Sat2.yml000066400000000000000000000005741414055407700211660ustar00rootroot00000000000000name: PW-Sat2 norad: 43814 telemetry_servers: - PWSat data: &tlm Telemetry: telemetry: ax25 transmitters: 1k2 BPSK downlink: frequency: 435.275e+6 modulation: BPSK baudrate: 1200 framing: AX.25 G3RUH data: - *tlm 9k6 BPSK downlink: frequency: 435.275e+6 modulation: BPSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/PicSat.yml000066400000000000000000000005411414055407700212060ustar00rootroot00000000000000name: PicSat norad: 43132 data: &tlm Telemetry: telemetry: picsat transmitters: 1k2 BPSK downlink: frequency: 435.525e+6 modulation: BPSK baudrate: 1200 framing: AX.25 G3RUH data: - *tlm 9k6 BPSK downlink: frequency: 435.525e+6 modulation: BPSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/QARMAN.yml000066400000000000000000000003271414055407700210040ustar00rootroot00000000000000name: QARMAN norad: 45257 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.350e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/QBEE.yml000066400000000000000000000003741414055407700205430ustar00rootroot00000000000000name: QBEE alternative_names: - SE01 - ON01SE norad: 42708 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 435.800e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/QMR-KWT.yml000066400000000000000000000003301414055407700211210ustar00rootroot00000000000000name: QMR-KWT norad: 48943 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 436.500e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/QO-100.yml000066400000000000000000000006521414055407700206430ustar00rootroot00000000000000name: QO-100 alternative_names: - Es'hail 2 norad: 43700 data: &tlm Telemetry: telemetry: qo100 transmitters: 400baud uncoded BPSK beacon: frequency: 10489.800e+6 modulation: DBPSK Manchester baudrate: 400 framing: AO-40 uncoded data: - *tlm 400baud FEC BPSK beacon: frequency: 10489.800e+6 modulation: DBPSK Manchester baudrate: 400 framing: AO-40 FEC data: - *tlm gr-satellites-4.4.0/python/satyaml/Quetzal-1.yml000066400000000000000000000003361414055407700216100ustar00rootroot00000000000000name: Quetzal-1 norad: 45598 data: &tlm Telemetry: telemetry: quetzal1 transmitters: 4k8 FSK downlink: frequency: 437.200e+6 modulation: FSK baudrate: 4800 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/RAMSAT.yml000066400000000000000000000003271414055407700210140ustar00rootroot00000000000000name: RAMSAT norad: 48850 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 436.300e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/ROBUSTA-1B.yml000066400000000000000000000003771414055407700214110ustar00rootroot00000000000000name: ROBUSTA-1B norad: 42792 data: &tlm Telemetry: telemetry: ax25 transmitters: 1k2 AFSK downlink: frequency: 437.325e+6 modulation: AFSK baudrate: 1200 af_carrier: 1700 deviation: 500 framing: AX.25 data: - *tlm gr-satellites-4.4.0/python/satyaml/Reaktor_Hello_World.yml000066400000000000000000000003441414055407700237250ustar00rootroot00000000000000name: Reaktor Hello World norad: 43743 data: &tlm Telemetry: unknown transmitters: 9k6 FSK downlink: frequency: 437.775e+6 modulation: FSK baudrate: 9600 framing: Reaktor Hello World data: - *tlm gr-satellites-4.4.0/python/satyaml/S-NET_A.yml000066400000000000000000000004331414055407700211110ustar00rootroot00000000000000name: S-NET A norad: 43188 alternative_names: - DP0TBB data: &tlm Telemetry: telemetry: snet transmitters: 1k2 AFSK downlink: frequency: 435.950e+6 modulation: AFSK baudrate: 1200 af_carrier: 1500 deviation: -600 framing: S-NET data: - *tlm gr-satellites-4.4.0/python/satyaml/S-NET_B.yml000066400000000000000000000004331414055407700211120ustar00rootroot00000000000000name: S-NET B norad: 43187 alternative_names: - DP0TBC data: &tlm Telemetry: telemetry: snet transmitters: 1k2 AFSK downlink: frequency: 435.950e+6 modulation: AFSK baudrate: 1200 af_carrier: 1500 deviation: -600 framing: S-NET data: - *tlm gr-satellites-4.4.0/python/satyaml/S-NET_C.yml000066400000000000000000000004331414055407700211130ustar00rootroot00000000000000name: S-NET C norad: 43189 alternative_names: - DP0TBD data: &tlm Telemetry: telemetry: snet transmitters: 1k2 AFSK downlink: frequency: 435.950e+6 modulation: AFSK baudrate: 1200 af_carrier: 1500 deviation: -600 framing: S-NET data: - *tlm gr-satellites-4.4.0/python/satyaml/S-NET_D.yml000066400000000000000000000004331414055407700211140ustar00rootroot00000000000000name: S-NET D norad: 43186 alternative_names: - DP0TBE data: &tlm Telemetry: telemetry: snet transmitters: 1k2 AFSK downlink: frequency: 435.950e+6 modulation: AFSK baudrate: 1200 af_carrier: 1500 deviation: -600 framing: S-NET data: - *tlm gr-satellites-4.4.0/python/satyaml/SALSAT.yml000066400000000000000000000003751414055407700210170ustar00rootroot00000000000000name: SALSAT norad: 46495 data: &tlm Telemetry: telemetry: snet transmitters: 1k2 AFSK downlink: frequency: 435.950e+6 modulation: AFSK baudrate: 1200 af_carrier: 1500 deviation: -600 framing: SALSAT data: - *tlm gr-satellites-4.4.0/python/satyaml/SIMBA.yml000066400000000000000000000006131414055407700206560ustar00rootroot00000000000000name: SIMBA alternative_names: - WildTrackCube-SIMBA norad: 47941 data: &tlm Telemetry: telemetry: csp transmitters: 1k2 FSK downlink: frequency: 435.310e+6 modulation: FSK baudrate: 1200 framing: AX100 ASM+Golay data: - *tlm 9k6 FSK downlink: frequency: 435.310e+6 modulation: FSK baudrate: 9600 framing: AX100 ASM+Golay data: - *tlm gr-satellites-4.4.0/python/satyaml/SKCUBE.yml000066400000000000000000000003271414055407700210010ustar00rootroot00000000000000name: SKCUBE norad: 42789 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.100e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/SMOG-1.yml000066400000000000000000000060241414055407700207300ustar00rootroot00000000000000name: SMOG-1 norad: 47964 telemetry_servers: - BME data: &tlm Telemetry: telemetry: smog1 &signalling Signalling: telemetry: smogp_signalling &spectrum Spectrum: files: smog1 transmitters: 1k25 FSK long concatenated FEC: frequency: 437.345e+6 modulation: FSK baudrate: 1250 framing: AO-40 FEC CRC-16-ARC data: - *tlm - *spectrum 1k25 FSK short concatenated FEC: frequency: 437.345e+6 modulation: FSK baudrate: 1250 framing: AO-40 FEC CRC-16-ARC short data: - *tlm - *spectrum 1k25 FSK long RA FEC: frequency: 437.345e+6 modulation: FSK baudrate: 1250 framing: SMOG-1 RA frame size: 256 data: - *tlm - *spectrum 1k25 FSK short RA FEC: frequency: 437.345e+6 modulation: FSK baudrate: 1250 framing: SMOG-1 RA frame size: 128 data: - *tlm - *spectrum 1k25 FSK signalling: frequency: 437.345e+6 modulation: FSK baudrate: 1250 framing: SMOG-1 Signalling data: - *signalling 2k5 FSK long concatenated FEC: frequency: 437.345e+6 modulation: FSK baudrate: 2500 framing: AO-40 FEC CRC-16-ARC data: - *tlm - *spectrum 2k5 FSK short concatenated FEC: frequency: 437.345e+6 modulation: FSK baudrate: 2500 framing: AO-40 FEC CRC-16-ARC short data: - *tlm - *spectrum 2k5 FSK long RA FEC: frequency: 437.345e+6 modulation: FSK baudrate: 2500 framing: SMOG-1 RA frame size: 256 data: - *tlm - *spectrum 2k5 FSK short RA FEC: frequency: 437.345e+6 modulation: FSK baudrate: 2500 framing: SMOG-1 RA frame size: 128 data: - *tlm - *spectrum 5k FSK long concatenated FEC: frequency: 437.345e+6 modulation: FSK baudrate: 5000 framing: AO-40 FEC CRC-16-ARC data: - *tlm - *spectrum 5k FSK short concatenated FEC: frequency: 437.345e+6 modulation: FSK baudrate: 5000 framing: AO-40 FEC CRC-16-ARC short data: - *tlm - *spectrum 5k FSK long RA FEC: frequency: 437.345e+6 modulation: FSK baudrate: 5000 framing: SMOG-1 RA frame size: 256 data: - *tlm - *spectrum 5k FSK short RA FEC: frequency: 437.345e+6 modulation: FSK baudrate: 5000 framing: SMOG-1 RA frame size: 128 data: - *tlm - *spectrum 12k5 FSK long concatenated FEC: frequency: 437.345e+6 modulation: FSK baudrate: 12500 framing: AO-40 FEC CRC-16-ARC data: - *tlm - *spectrum 12k5 FSK short concatenated FEC: frequency: 437.345e+6 modulation: FSK baudrate: 12500 framing: AO-40 FEC CRC-16-ARC short data: - *tlm - *spectrum 12k5 FSK long RA FEC: frequency: 437.345e+6 modulation: FSK baudrate: 12500 framing: SMOG-1 RA frame size: 256 data: - *tlm - *spectrum 12k5 FSK short RA FEC: frequency: 437.345e+6 modulation: FSK baudrate: 12500 framing: SMOG-1 RA frame size: 128 data: - *tlm - *spectrum gr-satellites-4.4.0/python/satyaml/SMOG-P.yml000066400000000000000000000057321414055407700207740ustar00rootroot00000000000000name: SMOG-P alternative_names: - MO-105 norad: 44832 telemetry_servers: - BME data: &tlm Telemetry: telemetry: smogp &signalling Signalling: telemetry: smogp_signalling &spectrum Spectrum: files: smogp transmitters: 1k25 FSK long concatenated FEC: frequency: 437.150e+6 modulation: FSK baudrate: 1250 framing: AO-40 FEC data: - *tlm - *spectrum 1k25 FSK short concatenated FEC: frequency: 437.150e+6 modulation: FSK baudrate: 1250 framing: AO-40 FEC short data: - *tlm - *spectrum 1k25 FSK long RA FEC: frequency: 437.150e+6 modulation: FSK baudrate: 1250 framing: SMOG-P RA frame size: 256 data: - *tlm - *spectrum 1k25 FSK short RA FEC: frequency: 437.150e+6 modulation: FSK baudrate: 1250 framing: SMOG-P RA frame size: 128 data: - *tlm - *spectrum 1k25 FSK signalling: frequency: 437.150e+6 modulation: FSK baudrate: 1250 framing: SMOG-P Signalling data: - *signalling 2k5 FSK long concatenated FEC: frequency: 437.150e+6 modulation: FSK baudrate: 2500 framing: AO-40 FEC data: - *tlm - *spectrum 2k5 FSK short concatenated FEC: frequency: 437.150e+6 modulation: FSK baudrate: 2500 framing: AO-40 FEC short data: - *tlm - *spectrum 2k5 FSK long RA FEC: frequency: 437.150e+6 modulation: FSK baudrate: 2500 framing: SMOG-P RA frame size: 256 data: - *tlm - *spectrum 2k5 FSK short RA FEC: frequency: 437.150e+6 modulation: FSK baudrate: 2500 framing: SMOG-P RA frame size: 128 data: - *tlm - *spectrum 5k FSK long concatenated FEC: frequency: 437.150e+6 modulation: FSK baudrate: 5000 framing: AO-40 FEC data: - *tlm - *spectrum 5k FSK short concatenated FEC: frequency: 437.150e+6 modulation: FSK baudrate: 5000 framing: AO-40 FEC short data: - *tlm - *spectrum 5k FSK long RA FEC: frequency: 437.150e+6 modulation: FSK baudrate: 5000 framing: SMOG-P RA frame size: 256 data: - *tlm - *spectrum 5k FSK short RA FEC: frequency: 437.150e+6 modulation: FSK baudrate: 5000 framing: SMOG-P RA frame size: 128 data: - *tlm - *spectrum 12k5 FSK long concatenated FEC: frequency: 437.150e+6 modulation: FSK baudrate: 12500 framing: AO-40 FEC data: - *tlm - *spectrum 12k5 FSK short concatenated FEC: frequency: 437.150e+6 modulation: FSK baudrate: 12500 framing: AO-40 FEC short data: - *tlm - *spectrum 12k5 FSK long RA FEC: frequency: 437.150e+6 modulation: FSK baudrate: 12500 framing: SMOG-P RA frame size: 256 data: - *tlm - *spectrum 12k5 FSK short RA FEC: frequency: 437.150e+6 modulation: FSK baudrate: 12500 framing: SMOG-P RA frame size: 128 data: - *tlm - *spectrum gr-satellites-4.4.0/python/satyaml/SNUGLITE.yml000066400000000000000000000003661414055407700212620ustar00rootroot00000000000000name: SNUGLITE alternative_names: - DS0DH norad: 43784 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.275e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/SOAR.yml000066400000000000000000000003211414055407700205630ustar00rootroot00000000000000name: SOAR norad: 48851 data: &tlm Telemetry: unknown transmitters: 4k8 FSK downlink: frequency: 401.725e+6 modulation: FSK baudrate: 4800 framing: AX100 ASM+Golay data: - *tlm gr-satellites-4.4.0/python/satyaml/SOKRAT.yml000066400000000000000000000003131414055407700210230ustar00rootroot00000000000000name: SOKRAT norad: 44404 data: &tlm Telemetry: unknown transmitters: 4k8 FSK downlink: frequency: 436.000e+6 modulation: FSK baudrate: 4800 framing: Mobitex data: - *tlm gr-satellites-4.4.0/python/satyaml/SOMP_2b.yml000066400000000000000000000003301414055407700211600ustar00rootroot00000000000000name: SOMP 2b norad: 47445 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 435.600e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/SPOC.yml000066400000000000000000000003251414055407700205670ustar00rootroot00000000000000name: SPOC norad: 46921 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.350e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/STECCO.yml000066400000000000000000000003271414055407700210050ustar00rootroot00000000000000name: STECCO norad: 47962 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 435.800e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/STRAND-1.yml000066400000000000000000000003711414055407700211550ustar00rootroot00000000000000name: STRAND-1 alternative_names: - STRaND-1 norad: 39090 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.568e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/Shaonian_Xing.yml000066400000000000000000000004001414055407700225420ustar00rootroot00000000000000name: Shaonian Xing alternative_names: - MXSat-1 norad: 43199 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 BPSK downlink: frequency: 436.375e+6 modulation: BPSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/SiriusSat-1.yml000066400000000000000000000003711414055407700221100ustar00rootroot00000000000000name: SiriusSat-1 alternative_names: - RS13S norad: 43595 data: &tlm Telemetry: telemetry: ax25 transmitters: 4k8 FSK downlink: frequency: 435.570e+6 modulation: FSK baudrate: 4800 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/SiriusSat-2.yml000066400000000000000000000003711414055407700221110ustar00rootroot00000000000000name: SiriusSat-2 alternative_names: - RS14S norad: 43596 data: &tlm Telemetry: telemetry: ax25 transmitters: 4k8 FSK downlink: frequency: 435.670e+6 modulation: FSK baudrate: 4800 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/SpooQy-1.yml000066400000000000000000000005341414055407700214150ustar00rootroot00000000000000name: SpooQy-1 norad: 44332 data: &tlm Telemetry: unknown transmitters: 9k6 FSK downlink: frequency: 436.200e+6 modulation: FSK baudrate: 9600 framing: AX100 ASM+Golay data: - *tlm 4k8 FSK downlink: frequency: 436.200e+6 modulation: FSK baudrate: 4800 framing: AX100 ASM+Golay data: - *tlm gr-satellites-4.4.0/python/satyaml/Suomi_100.yml000066400000000000000000000003421414055407700214760ustar00rootroot00000000000000name: Suomi 100 norad: 43804 data: &tlm Telemetry: telemetry: suomi100 transmitters: 9k6 FSK downlink: frequency: 437.775e+6 modulation: FSK baudrate: 9600 framing: AX100 ASM+Golay data: - *tlm gr-satellites-4.4.0/python/satyaml/SwampSat-2.yml000066400000000000000000000003331414055407700217200ustar00rootroot00000000000000name: SwampSat-2 norad: 45115 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 436.350e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/Swiatowid.yml000066400000000000000000000006661414055407700220050ustar00rootroot00000000000000name: Swiatowid norad: 44426 data: &tlm Telemetry: telemetry: ax25 &image Image: image: swiatowid transmitters: 1k2 AFSK telemetry downlink: frequency: 435.500e+6 modulation: AFSK baudrate: 1200 af_carrier: 1700 deviation: 500 framing: AX.25 data: - *tlm 9k6 FSK image downlink: frequency: 435.500e+6 modulation: FSK baudrate: 9600 framing: Swiatowid data: - *image gr-satellites-4.4.0/python/satyaml/TAUSAT-1.yml000066400000000000000000000003331414055407700211610ustar00rootroot00000000000000name: TAUSAT-1 norad: 47926 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 BPSK downlink: frequency: 436.400e+6 modulation: BPSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/TBEX-A.yml000066400000000000000000000003271414055407700207450ustar00rootroot00000000000000name: TBEX-A norad: 44356 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.485e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/TBEX-B.yml000066400000000000000000000005341414055407700207460ustar00rootroot00000000000000name: TBEX-B norad: 44359 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.535e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm 9k6 FSK downlink 2: frequency: 437.485e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/TECHNOSAT.yml000066400000000000000000000003211414055407700213470ustar00rootroot00000000000000name: TECHNOSAT norad: 42829 data: &tlm Telemetry: unknown transmitters: 4k8 FSK downlink: frequency: 435.950e+6 modulation: FSK baudrate: 4800 framing: Mobitex-NX data: - *tlm gr-satellites-4.4.0/python/satyaml/TIGRISAT.yml000066400000000000000000000003321414055407700212470ustar00rootroot00000000000000name: TIGRISAT norad: 40043 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 435.000e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/TRISAT.yml000066400000000000000000000004521414055407700210320ustar00rootroot00000000000000name: TRISAT norad: 46280 data: &tlm Telemetry: telemetry: trisat transmitters: 9766 baud FSK downlink: frequency: 435.6125e+6 modulation: FSK baudrate: 9766 framing: CCSDS Concatenated RS basis: dual convolutional: NASA-DSN frame size: 223 data: - *tlm gr-satellites-4.4.0/python/satyaml/TSURU.yml000066400000000000000000000003261414055407700207460ustar00rootroot00000000000000name: TSURU norad: 47927 data: &tlm Telemetry: telemetry: ax25 transmitters: 4k8 FSK downlink: frequency: 437.375e+6 modulation: FSK baudrate: 4800 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/TTU-100.yml000066400000000000000000000003671414055407700210030ustar00rootroot00000000000000name: TTU-100 alternative_names: - Hamarik norad: 46312 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 435.450e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/TUBIN.yml000066400000000000000000000004371414055407700207100ustar00rootroot00000000000000name: TUBIN norad: 48900 telemetry_servers: - SIDS http://fachgebiet.rft.tu-berlin.de/ham/telemetry/send data: &tlm Telemetry: unknown transmitters: 4k8 FSK downlink: frequency: 435.950e+6 modulation: FSK baudrate: 4800 framing: Mobitex-NX data: - *tlm gr-satellites-4.4.0/python/satyaml/TW-1A.yml000066400000000000000000000003341414055407700206140ustar00rootroot00000000000000name: TW-1A norad: 40928 data: &tlm Telemetry: telemetry: csp transmitters: 4k8 FSK downlink: frequency: 435.645e+6 modulation: FSK baudrate: 4800 framing: AX100 Reed Solomon data: - *tlm gr-satellites-4.4.0/python/satyaml/TW-1B.yml000066400000000000000000000003341414055407700206150ustar00rootroot00000000000000name: TW-1B norad: 40927 data: &tlm Telemetry: telemetry: csp transmitters: 4k8 FSK downlink: frequency: 437.645e+6 modulation: FSK baudrate: 4800 framing: AX100 Reed Solomon data: - *tlm gr-satellites-4.4.0/python/satyaml/TW-1C.yml000066400000000000000000000003341414055407700206160ustar00rootroot00000000000000name: TW-1C norad: 40926 data: &tlm Telemetry: telemetry: csp transmitters: 4k8 FSK downlink: frequency: 435.645e+6 modulation: FSK baudrate: 4800 framing: AX100 Reed Solomon data: - *tlm gr-satellites-4.4.0/python/satyaml/TY-2.yml000066400000000000000000000003301414055407700205120ustar00rootroot00000000000000name: TY-2 norad: 43155 data: &tlm Telemetry: telemetry: csp transmitters: 9k6 FSK downlink: frequency: 435.350e+6 modulation: FSK baudrate: 9600 framing: AX100 ASM+Golay data: - *tlm gr-satellites-4.4.0/python/satyaml/TY-6.yml000066400000000000000000000003301414055407700205160ustar00rootroot00000000000000name: TY-6 norad: 43158 data: &tlm Telemetry: telemetry: csp transmitters: 9k6 FSK downlink: frequency: 436.100e+6 modulation: FSK baudrate: 9600 framing: AX100 ASM+Golay data: - *tlm gr-satellites-4.4.0/python/satyaml/TY_4-01.yml000066400000000000000000000003331414055407700210170ustar00rootroot00000000000000name: TY 4-01 norad: 43669 data: &tlm Telemetry: telemetry: csp transmitters: 9k6 FSK downlink: frequency: 435.925e+6 modulation: FSK baudrate: 9600 framing: AX100 ASM+Golay data: - *tlm gr-satellites-4.4.0/python/satyaml/Tanusha-3.yml000066400000000000000000000006671414055407700215770ustar00rootroot00000000000000name: Tanusha-3 alternative_names: - Tanusha-SWSU-3 (RS-8) - RS8S norad: 43597 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.050e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm 1k2 AFSK downlink: frequency: 437.050e+6 modulation: AFSK baudrate: 1200 af_carrier: 1700 deviation: 500 framing: AX.25 data: - *tlm gr-satellites-4.4.0/python/satyaml/Taurus-1.yml000066400000000000000000000006201414055407700214420ustar00rootroot00000000000000name: Taurus-1 norad: 44530 data: &tlm Telemetry: telemetry: taurus1 &codec2 Codec2: decoder: codec2_udp_sink transports: &kiss KISS: protocol: KISS no control byte data: - *tlm transmitters: 9k6 BPSK downlink: frequency: 435.840e+6 modulation: BPSK baudrate: 9600 framing: LilacSat-1 transports: - *kiss additional_data: codec2: *codec2 gr-satellites-4.4.0/python/satyaml/UA01.yml000066400000000000000000000004031414055407700204660ustar00rootroot00000000000000name: UA01 alternative_names: - PolyITAN 2-SAU - QB50 UA01 norad: 42732 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 436.600e+6 modulation: BPSK baudrate: 9600 framing: UA01 data: - *tlm gr-satellites-4.4.0/python/satyaml/UBAKUSAT.yml000066400000000000000000000003311414055407700212370ustar00rootroot00000000000000name: UBAKUSAT norad: 43467 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.325e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/UCLSAT.yml000066400000000000000000000003271414055407700210200ustar00rootroot00000000000000name: UCLSAT norad: 42765 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 435.975e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/UKube-1.yml000066400000000000000000000004341414055407700211750ustar00rootroot00000000000000name: UKube-1 alternative_names: - FUNcube-2 norad: 40074 telemetry_servers: - FUNcube data: &tlm Telemetry: telemetry: funcube transmitters: 1k2 BPSK downlink: frequency: 145.840e+6 modulation: DBPSK baudrate: 1200 framing: AO-40 FEC data: - *tlm gr-satellites-4.4.0/python/satyaml/UNISAT-6.yml000066400000000000000000000003311414055407700211660ustar00rootroot00000000000000name: UNISAT-6 norad: 40012 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.421e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/UNISAT-7.yml000066400000000000000000000003311414055407700211670ustar00rootroot00000000000000name: UNISAT-7 norad: 47945 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.425e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/UPMSat_2.yml000066400000000000000000000003411414055407700213530ustar00rootroot00000000000000name: UPMSat 2 norad: 46276 data: &tlm Telemetry: telemetry: upmsat_2 transmitters: 1k2 FSK telemetry downlink: frequency: 437.405e+6 modulation: FSK baudrate: 1200 framing: AX.25 data: - *tlm gr-satellites-4.4.0/python/satyaml/URSA_MAIOR.yml000066400000000000000000000003671414055407700215320ustar00rootroot00000000000000name: URSA MAIOR alternative_names: - IT02 norad: 42776 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 435.950e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/US01.yml000066400000000000000000000004201414055407700205070ustar00rootroot00000000000000name: US01 alternative_names: - Challenger - QB50 US01 - QBUS 1 norad: 42721 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.505e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/UVSQ-SAT.yml000066400000000000000000000006441414055407700212520ustar00rootroot00000000000000name: UVSQ-SAT norad: 47438 telemetry_servers: - SIDS https://amsat.electrolab.fr/api/V2/SIDS data: &tlm Telemetry: telemetry: ax25 transmitters: 1k2 BPSK downlink: frequency: 437.020e+6 modulation: BPSK baudrate: 1200 framing: AX.25 G3RUH data: - *tlm 9k6 BPSK downlink: frequency: 437.020e+6 modulation: BPSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/UWE-3.yml000066400000000000000000000005751414055407700206320ustar00rootroot00000000000000name: UWE-3 norad: 39446 data: &tlm Telemetry: telemetry: ax25 transmitters: 1k2 AFSK downlink: frequency: 437.385e+6 modulation: AFSK baudrate: 1200 af_carrier: 1700 deviation: 500 framing: AX.25 data: - *tlm 9k6 FSK downlink: frequency: 437.384e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/UWE-4.yml000066400000000000000000000003641414055407700206270ustar00rootroot00000000000000name: UWE-4 alternative_names: - DP0UWH norad: 43880 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 435.600e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/VZLUSAT-2.yml000066400000000000000000000005521414055407700213340ustar00rootroot00000000000000name: VZLUSAT-2 norad: 99997 data: &tlm Telemetry: telemetry: vzlusat_2 transmitters: 9k6 FSK downlink: frequency: 437.325e+6 modulation: FSK baudrate: 9600 framing: AX100 ASM+Golay data: - *tlm 4k8 FSK downlink: frequency: 437.325e+6 modulation: FSK baudrate: 4800 framing: AX100 ASM+Golay data: - *tlm gr-satellites-4.4.0/python/satyaml/X-CUBESAT.yml000066400000000000000000000006501414055407700213170ustar00rootroot00000000000000name: X-CUBESAT alternative_names: - FR01 - ON01FR norad: 42707 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.020e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm 1k2 AFSK downlink: frequency: 437.020e+6 modulation: AFSK baudrate: 1200 af_carrier: 1700 deviation: 500 framing: AX.25 data: - *tlm gr-satellites-4.4.0/python/satyaml/XW-2A.yml000066400000000000000000000003641414055407700206240ustar00rootroot00000000000000name: XW-2A alternative_names: - CAS-3A norad: 40903 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 145.640e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/XW-2B.yml000066400000000000000000000003641414055407700206250ustar00rootroot00000000000000name: XW-2B alternative_names: - CAS-3B norad: 40911 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 145.705e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/XW-2C.yml000066400000000000000000000003661414055407700206300ustar00rootroot00000000000000name: XW-2C alternative_names: - CAS-3C norad: 40906 data: &tlm Telemetry: telemetry: ax25 transmitters: 19k2 FSK downlink: frequency: 145.770e+6 modulation: FSK baudrate: 19200 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/XW-2D.yml000066400000000000000000000003641414055407700206270ustar00rootroot00000000000000name: XW-2D alternative_names: - CAS-3D norad: 40907 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 145.835e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/XW-2E.yml000066400000000000000000000003641414055407700206300ustar00rootroot00000000000000name: XW-2E alternative_names: - CAS-3E norad: 40909 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 145.890e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/XW-2F.yml000066400000000000000000000003641414055407700206310ustar00rootroot00000000000000name: XW-2F alternative_names: - CAS-3F norad: 40910 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 145.955e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/YUSAT-1.yml000066400000000000000000000003221414055407700210630ustar00rootroot00000000000000name: YUSAT-1 norad: 47439 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 436.250e+6 modulation: FSK baudrate: 9600 framing: YUSAT data: - *tlm gr-satellites-4.4.0/python/satyaml/ZACUBE-1.yml000066400000000000000000000004411414055407700211310ustar00rootroot00000000000000name: ZACUBE-1 alternative_names: - South Africa CubeSat-1 - TshepisoSat - ZA003 norad: 39417 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 FSK downlink: frequency: 437.356e+6 modulation: FSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/Zhou_Enlai.yml000066400000000000000000000003351414055407700220610ustar00rootroot00000000000000name: Zhou Enlai norad: 43156 data: &tlm Telemetry: telemetry: ax25 transmitters: 9k6 BPSK downlink: frequency: 436.420e+6 modulation: BPSK baudrate: 9600 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/__init__.py000066400000000000000000000005171414055407700214140ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # ''' gr-satellites satellite YAML files This module contains satellite YAML files and supporting Python code ''' from .satyaml import yamlfiles gr-satellites-4.4.0/python/satyaml/al-Farabi-2.yml000066400000000000000000000003721414055407700217420ustar00rootroot00000000000000name: al-Farabi-2 alternative_names: - UN1GWA norad: 43805 data: &tlm Telemetry: telemetry: ax25 transmitters: 4k8 FSK downlink: frequency: 436.500e+6 modulation: FSK baudrate: 4800 framing: AX.25 G3RUH data: - *tlm gr-satellites-4.4.0/python/satyaml/qa_satyaml.py000077500000000000000000000010241414055407700220050ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr_unittest import satyaml class qa_satyaml(gr_unittest.TestCase): def test_check_all_satyaml_files(self): for yml in satyaml.yamlfiles.yaml_files(): with self.subTest(satyaml=yml): satyaml.yamlfiles.check_yaml(yml) if __name__ == '__main__': gr_unittest.run(qa_satyaml) gr-satellites-4.4.0/python/satyaml/satyaml.py000066400000000000000000000225571414055407700213370ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import pathlib import string import yaml class YAMLError(Exception): def __init__(self, message): self.message = message _default_path = pathlib.Path(__file__).parent class SatYAML: def __init__(self, path=_default_path): self._path = pathlib.Path(path) modulations = [ 'AFSK', 'FSK', 'BPSK', 'BPSK Manchester', 'DBPSK', 'DBPSK Manchester', 'FSK subaudio', ] framings = [ 'AX.25', 'AX.25 G3RUH', 'AX100 ASM+Golay', 'AX100 Reed Solomon', '3CAT-1', 'Astrocast FX.25 NRZ-I', 'Astrocast FX.25 NRZ', 'AO-40 FEC', 'AO-40 FEC short', 'AO-40 uncoded', 'TT-64', 'ESEO', 'Lucky-7', 'Reaktor Hello World', 'S-NET', 'Swiatowid', 'NuSat', 'K2SAT', 'CCSDS Reed-Solomon', 'CCSDS Concatenated', 'CCSDS Uncoded', 'LilacSat-1', 'AAUSAT-4', 'NGHam', 'NGHam no Reed Solomon', 'SMOG-P RA', 'SMOG-1 RA', 'SMOG-P Signalling', 'SMOG-1 Signalling', 'OPS-SAT', 'U482C', 'UA01', 'SALSAT', 'Mobitex', 'Mobitex-NX', 'FOSSASAT', 'AISTECHSAT-2', 'AALTO-1', 'Grizu-263A', 'IDEASSat', 'YUSAT', 'AX5043', 'USP', 'AO-40 FEC CRC-16-ARC', 'AO-40 FEC CRC-16-ARC short', 'DIY-1', 'BINAR-1', ] transports = [ 'KISS', 'KISS no control byte', 'KISS KS-1Q', ] top_level_words = [ 'name', 'alternative_names', 'norad', 'telemetry_servers', 'data', 'transports', 'transmitters', ] def check_yaml(self, yml): d = self.get_yamldata(yml) for word in d: if word not in self.top_level_words: raise YAMLError(f'Unknown word {word} in {yml}') if 'name' not in d: raise YAMLError(f'Missing name field in {yml}') if 'norad' not in d: raise YAMLError(f'Missing norad field in {yml}') if type(d['norad']) is not int: raise YAMLError(f'NORAD field does not contain a number in {yml}') if 'telemetry_servers' in d: for server in d['telemetry_servers']: if (server not in ['SatNOGS', 'FUNcube', 'PWSat', 'BME'] and not server.startswith('HIT ') and not server.startswith('SIDS ')): raise YAMLError(f'Unknown telemetry server {server}') if 'data' not in d: raise YAMLError(f'Missing data field in {yml}') if 'transports' in d: for key, transport in d['transports'].items(): if 'protocol' not in transport: raise YAMLError( f'Missing protocol field in transport {key}') if transport['protocol'] not in self.transports: raise YAMLError( f'Unknown protocol field in transport {key}') if 'transmitters' not in d: raise YAMLError(f'Missing transmitters field in {yml}') for key, transmitter in d['transmitters'].items(): if 'frequency' not in transmitter: raise YAMLError(f'Missing frequency field in {key} in {yml}') if type(transmitter['frequency']) not in [float, int]: raise YAMLError( 'Frequency field does not contain a float ' f'in {key} in {yml}') if 'modulation' not in transmitter: raise YAMLError(f'Missing modulation field in {key} in {yml}') if transmitter['modulation'] not in self.modulations: raise YAMLError(f'Unknown modulation in {key} in {yml}') if 'baudrate' not in transmitter: raise YAMLError(f'Missing baudrate field in {key} in {yml}') if type(transmitter['baudrate']) not in [float, int]: raise YAMLError( 'Baudrate field does not contain a float in ' f'{key} in {yml}') if transmitter['modulation'] == 'AFSK': if 'af_carrier' not in transmitter: raise YAMLError( f'Missing af_carrier field for AFSK in {key} in {yml}') if 'deviation' not in transmitter: raise YAMLError( f'Missing deviation field for AFSK in {key} in {yml}') if ('af_carrier' in transmitter and type(transmitter['af_carrier']) not in [float, int]): raise YAMLError( 'af_carrier field does not contain a float ' f'in {key} in {yml}') if ('deviation' in transmitter and type(transmitter['deviation']) not in [float, int]): raise YAMLError( 'Deviation field does not contain a float ' f'in {key} in {yml}') if 'framing' not in transmitter: raise YAMLError(f'Missing framing field in {key} in {yml}') if transmitter['framing'] not in self.framings: raise YAMLError(f'Unknown framing in {key} in {yml}') if transmitter['framing'] in ['CCSDS Reed-Solomon', 'CCSDS Concatenated']: if 'RS basis' not in transmitter: raise YAMLError(f'No RS basis field in {key} in {yml}') if ('precoding' in transmitter and transmitter['precoding'] != 'differential'): raise YAMLError( f'Invalid precoding value {transmitter["precoding"]} ' f'for {key} in {yml}') if transmitter['RS basis'] not in ['conventional', 'dual']: raise YAMLError( f'Invalid RS basis value {transmitter["RS basis"]} ' f'for {key} in {yml}') if ('RS interleaving' in transmitter and type(transmitter['RS interleaving']) is not int): raise YAMLError( f'RS interleaving does not contain an int ' f'in {key} in {yml}') if ('scrambler' in transmitter and transmitter['scrambler'] not in ['CCSDS', 'none']): raise YAMLError( f'Invalid scrambler value {transmitter["scrambler"]} ' f'for {key} in {yml}') if ('convolutional' in transmitter and transmitter['convolutional'] not in [ 'CCSDS', 'NASA-DSN', 'CCSDS uninverted', 'NASA-DSN uninverted']): raise YAMLError( 'Invalid convolutional value ' f'{transmitter["convolutional"]} for {key} in {yml}') if 'data' not in transmitter and 'transports' not in transmitter: raise YAMLError( f'No data or transport field in {key} in {yml}') if 'data' in transmitter: for dd in transmitter['data']: if dd not in d['data']: raise YAMLError( f'Data entry {dd} used in {key} is not defined ' f'in data field in {yml}') if 'transport' in transmitter: for t in transmitter['transports']: if t not in d['transports']: raise YAMLError( f'Transport entry {t} used in {key} is not ' f'defined in transports field in {yml}') if 'additional_data' in transmitter: for k, dd in transmitter['additional_data'].items(): if dd not in d['data']: raise YAMLError( f'Additional data entry {dd} used in {key} is not ' f'defined in data field in {yml}') def load_all_yaml(self): return [self.get_yamldata(f) for f in self.yaml_files()] def yaml_files(self): return self._path.glob('*.yml') def get_yamldata(self, yml): with open(yml, encoding='utf-8') as f: return yaml.safe_load(f) def _get_satnames(self, yml): d = self.get_yamldata(yml) alternative = d.get('alternative_names', []) if alternative is None: alternative = [] return [d['name']] + alternative def _get_satnorad(self, yml): d = self.get_yamldata(yml) return d['norad'] def _canonical_name(self, name): """Perform some substitutions to match names which are loosely equal""" return ''.join([a for a in name.casefold() if a not in string.punctuation + string.whitespace]) def search_name(self, name): name = self._canonical_name(name) for yml in self.yaml_files(): satnames = [self._canonical_name(n) for n in self._get_satnames(yml)] if name in satnames: return self.get_yamldata(yml) raise ValueError('satellite not found') def search_norad(self, norad): for yml in self.yaml_files(): if norad == self._get_satnorad(yml): return self.get_yamldata(yml) raise ValueError('satellite not found') yamlfiles = SatYAML() gr-satellites-4.4.0/python/snet_classifier.py000066400000000000000000000026061414055407700213610ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2018 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr import numpy import pmt class snet_classifier(gr.basic_block): """docstring for block snet_classifier""" def __init__(self): gr.basic_block.__init__( self, name='snet_classifier', in_sig=[], out_sig=[]) self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('SNET-A')) self.message_port_register_out(pmt.intern('SNET-B')) self.message_port_register_out(pmt.intern('SNET-C')) self.message_port_register_out(pmt.intern('SNET-D')) def handle_msg(self, msg_pmt): srcId = pmt.dict_ref(pmt.car(msg_pmt), pmt.intern('SNET SrcId'), pmt.PMT_NIL) if pmt.eq(srcId, pmt.PMT_NIL): return sat = pmt.to_long(srcId) >> 1 if sat == 0: satellite = 'SNET-A' elif sat == 1: satellite = 'SNET-B' elif sat == 2: satellite = 'SNET-C' elif sat == 3: satellite = 'SNET-D' else: return self.message_port_pub(pmt.intern(satellite), msg_pmt) gr-satellites-4.4.0/python/snet_deframer.py000066400000000000000000000131001414055407700210110ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2018,2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr import numpy as np import pmt from .bch15 import decode_bch15 from .telemetry.snet import LTUFrameHeader class snet_deframer(gr.basic_block): """docstring for block snet_deframer""" def __init__(self, verbose=False, buggy_crc=True): gr.basic_block.__init__( self, name='snet_deframer', in_sig=[], out_sig=[]) self.verbose = verbose self.buggy_crc = buggy_crc self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('out')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return bits = np.array(pmt.u8vector_elements(msg)) ltu = bits[:210].reshape((15, 14)).transpose() # Decode BCH(15,5,7) if not all((decode_bch15(ltu[j, :]) for j in range(14))): # Decode failure if self.verbose: print('BCH decode failure') return ltu = np.fliplr(ltu[:, -5:]).ravel() hdr = LTUFrameHeader.parse(np.packbits(ltu)) ltu_crc = np.concatenate((ltu[:-5], np.array([1, 0, 1, 1, 0, 1, 1]))) ltu_crc = ltu_crc.reshape((9, 8)) if self.buggy_crc: # Reverse byte ordering for CRC5 calculation ltu_crc = np.flipud(ltu_crc) if self.buggy_crc: # Force CRC5 bugs ltu_crc[4, :] = ltu_crc[3, :] # CRC5 calculation crc = 0x1F for bit in ltu_crc.ravel(): # Check most significant bit in the CRC buffer and save # in a variable. c = crc & 0x10 # Shift variable to make the compare op. possible (see beneath). c >>= 4 # Shift CRC to the left and write 0 into the least significant bit. crc <<= 1 if c != bit: crc ^= 0x15 # CRC polynomial crc &= 0x1F if crc != hdr.CRC5: if self.verbose: print('CRC5 fail') return if self.verbose: print(hdr) if hdr.PduLength == 0: return codewords_per_block = 16 uncoded = False if hdr.AiTypeSrc == 0: uncoded = True elif hdr.AiTypeSrc == 1: data_bits_per_codeword = 11 # BCH(15,11,3) bch_d = 3 elif hdr.AiTypeSrc == 2: data_bits_per_codeword = 7 # BCH(15,7,5) bch_d = 5 elif hdr.AiTypeSrc == 3: data_bits_per_codeword = 5 # BCH(15,5,7) bch_d = 7 else: if self.verbose: print('Invalid AiTypeSrc') return if uncoded: pdu_bytes = bits[210:210+hdr.PduLength*8] pdu_bytes = pdu_bytes.reshape((hdr.PduLength, 8)) pdu_bytes = np.fliplr(pdu_bytes) else: data_bytes_per_block = (codewords_per_block * data_bits_per_codeword // 8) num_blocks = int(np.ceil(float( hdr.PduLength) / data_bytes_per_block)) blocks = list() for k in range(num_blocks): block = bits[210+k*16*15:210+(k+1)*16*15].reshape((15, 16)) if bch_d: block = block.transpose() if not bch_d: print(block) # Decode BCH if (bch_d and not all((decode_bch15(block[j, :], d=bch_d) for j in range(16)))): # Decode failure if self.verbose: print('BCH decode failure') return if bch_d: blocks.append(block[:, -data_bits_per_codeword:].ravel()) else: blocks.append(block.ravel()) pdu_bytes = np.concatenate(blocks) pdu_bytes = pdu_bytes.reshape((data_bytes_per_block * num_blocks, 8)) pdu_bytes = np.fliplr(pdu_bytes) # Drop 0xDB padding bytes at the end pdu_bytes = pdu_bytes[:hdr.PduLength] if not bch_d: print(pdu_bytes) # CRC13 crc = 0x1FFF pdu_crc = np.flipud(pdu_bytes) if self.buggy_crc else pdu_bytes for bit in pdu_crc.ravel(): # Check most significant bit in the CRC buffer and save it # in a variable. c = crc & 0x1000 # Shift variable to make the compare op. possible (see beneath). c >>= 12 # Shift CRC to the left and write 0 into the least significant bit. crc <<= 1 if (c or bit if self.buggy_crc else c != bit): crc ^= 0x1CF5 # CRC polynomial crc &= 0x1FFF if crc != hdr.CRC13: if self.verbose: print('CRC13 fail') return pdu = np.packbits(pdu_bytes) pdu_tags = pmt.make_dict() pdu_tags = pmt.dict_add( pdu_tags, pmt.intern('SNET SrcId'), pmt.from_long(hdr.SrcId)) self.message_port_pub( pmt.intern('out'), pmt.cons(pdu_tags, pmt.init_u8vector(len(pdu), pdu))) gr-satellites-4.4.0/python/submit.py000066400000000000000000000057101414055407700175060ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2017,2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import datetime import urllib.error import urllib.parse import urllib.request from gnuradio import gr import pmt import numpy def parse_time(time): try: return datetime.datetime.fromisofromat(time) except AttributeError: # Workaround for Python version <3.7, which doesn't have # fromisoformat() return datetime.datetime.strptime(time, '%Y-%m-%dT%H:%M:%S') class submit(gr.basic_block): """docstring for block submit""" def __init__(self, url, noradID, source, longitude, latitude, initialTimestamp): gr.basic_block.__init__( self, name='submit', in_sig=[], out_sig=[]) self.url = url self.request = { 'noradID': noradID, 'source': source, 'locator': 'longLat', 'longitude': str( abs(longitude)) + ('E' if longitude >= 0 else 'W'), 'latitude': str( abs(latitude)) + ('N' if latitude >= 0 else 'S'), 'version': '1.6.6', } self.initialTimestamp = ( parse_time(initialTimestamp) if initialTimestamp != '' else None) self.startTimestamp = datetime.datetime.utcnow() self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) def handle_msg(self, msg_pmt): # Check that callsign and QTH have been entered if self.request['source'] == '': return if (self.request['longitude'] == 0.0 and self.request['latitude'] == 0.0): return msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return self.request['frame'] = bytes(pmt.u8vector_elements(msg)).hex().upper() now = datetime.datetime.utcnow() timestamp = ( now - self.startTimestamp + self.initialTimestamp if self.initialTimestamp else now) self.request['timestamp'] = timestamp.isoformat()[:-3] + 'Z' params = urllib.parse.urlencode(self.request) try: f = urllib.request.urlopen( '{}?{}'.format(self.url, params), data=bytes(params, encoding='ascii')) except Exception as e: print('Error while submitting telemetry:', e) return reply = f.read() code = f.getcode() if code < 200 or code >= 300: print('Server error while submitting telemetry') print('Reply:') print(reply) print('URL:', f.geturl()) print('HTTP code:', f.getcode()) print('Info:') print(f.info()) f.close() gr-satellites-4.4.0/python/swap_crc.py000066400000000000000000000027441414055407700200100ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2017 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr import numpy import pmt from . import csp_header class swap_crc(gr.basic_block): """docstring for block swap_crc""" def __init__(self): gr.basic_block.__init__( self, name='swap_crc', in_sig=[], out_sig=[]) self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('out')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = bytes(pmt.u8vector_elements(msg)) try: header = csp_header.CSP(packet[:4]) except ValueError as e: return if not header.crc: self.message_port_pub(pmt.intern('out'), msg_pmt) else: if len(packet) < 8: # 4 bytes CSP header, 4 bytes CRC-32C # Malformed return crc = packet[-4:] packet = packet[:-4] + crc[::-1] msg_pmt = pmt.cons(pmt.PMT_NIL, pmt.init_u8vector(len(packet), packet)) self.message_port_pub(pmt.intern('out'), msg_pmt) gr-satellites-4.4.0/python/swap_header.py000066400000000000000000000021621414055407700204630ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2017 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr import numpy import pmt class swap_header(gr.basic_block): """docstring for block swap_header""" def __init__(self): gr.basic_block.__init__( self, name='swap_header', in_sig=[], out_sig=[]) self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('out')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = bytes(pmt.u8vector_elements(msg)) header = packet[:4] packet = header[::-1] + packet[4:] msg_pmt = pmt.cons(pmt.PMT_NIL, pmt.init_u8vector(len(packet), packet)) self.message_port_pub(pmt.intern('out'), msg_pmt) gr-satellites-4.4.0/python/swiatowid_packet_crop.py000066400000000000000000000023321414055407700225640ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr import numpy import pmt class swiatowid_packet_crop(gr.basic_block): """docstring for block swiatowid_packet_crop""" def __init__(self): gr.basic_block.__init__( self, name='swiatowid_packet_crop', in_sig=[], out_sig=[]) self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('out')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = pmt.u8vector_elements(msg) packet_length = packet[0] + packet[1] * 256 - 8 if packet_length + 2 > len(packet): return self.message_port_pub( pmt.intern('out'), pmt.cons( pmt.car(msg_pmt), pmt.init_u8vector(packet_length, packet[2:2+packet_length]))) gr-satellites-4.4.0/python/swiatowid_packet_split.py000066400000000000000000000024051414055407700227550ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr import numpy import pmt class swiatowid_packet_split(gr.basic_block): """docstring for block swiatowid_packet_split""" def __init__(self): gr.basic_block.__init__( self, name='swiatowid_packet_split', in_sig=[], out_sig=[]) self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('out')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = pmt.u8vector_elements(msg) for j in range(0, len(packet) - 2, 58): # -2 above is included for the case when the packet # carriers a CRC-16 piece = packet[j:j+58] self.message_port_pub( pmt.intern('out'), pmt.cons(pmt.car(msg_pmt), pmt.init_u8vector(len(piece), piece))) gr-satellites-4.4.0/python/sx12xx_check_crc.py000066400000000000000000000101641414055407700213430ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 jgromes # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import struct from gnuradio import gr import numpy import pmt crc_table = [ 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7, 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF, 0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6, 0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE, 0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485, 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D, 0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4, 0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC, 0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823, 0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B, 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12, 0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A, 0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41, 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49, 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70, 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78, 0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F, 0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067, 0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E, 0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256, 0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D, 0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C, 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634, 0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB, 0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3, 0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A, 0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92, 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9, 0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1, 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8, 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0] def crc16(data, initial, final): crc = initial for byte in data: tbl_idx = ((crc >> 8) ^ byte) & 0xff crc = (crc_table[tbl_idx] ^ (crc << 8)) & 0xffff return (crc & 0xffff) ^ final class sx12xx_check_crc(gr.basic_block): """Check SX12xx FSK packet CRC-16 The CRC-16 is calculated from length field and payload. """ def __init__(self, verbose, initial, final): gr.basic_block.__init__( self, name='sx12xx_check_crc', in_sig=[], out_sig=[]) self.verbose = verbose self.initial = initial self.final = final self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('ok')) self.message_port_register_out(pmt.intern('fail')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet_orig = pmt.u8vector_elements(msg) packet = bytes(packet_orig) if len(packet) < 3: return packet_out = packet_orig[:-2] packet_crc = int.from_bytes(packet[-2:], 'big') msg_out = pmt.cons( pmt.car(msg_pmt), pmt.init_u8vector(len(packet_out), packet_out)) res = crc16(packet[:-2], self.initial, self.final) if res == packet_crc: if self.verbose: print('CRC OK') self.message_port_pub(pmt.intern('ok'), msg_out) else: if self.verbose: print('CRC failed') self.message_port_pub(pmt.intern('fail'), msg_out) gr-satellites-4.4.0/python/sx12xx_packet_crop.py000066400000000000000000000023501414055407700217270ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 jgromes # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr import numpy import pmt class sx12xx_packet_crop(gr.basic_block): """Crop SX12xx FSK packet This is based on the internal packet length field (first byte after sync word). """ def __init__(self, crc_len): gr.basic_block.__init__( self, name='sx12xx_packet_crop', in_sig=[], out_sig=[]) self.crc_len = crc_len self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('out')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return packet = bytes(pmt.u8vector_elements(msg)) packet_length = packet[0] + 1 + self.crc_len self.message_port_pub( pmt.intern('out'), pmt.cons(pmt.car(msg_pmt), pmt.init_u8vector(packet_length, packet))) gr-satellites-4.4.0/python/telemetry/000077500000000000000000000000001414055407700176405ustar00rootroot00000000000000gr-satellites-4.4.0/python/telemetry/CMakeLists.txt000066400000000000000000000044261414055407700224060ustar00rootroot00000000000000# Copyright 2011 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. ######################################################################## # Include python install macros ######################################################################## include(GrPython) if(NOT PYTHONINTERP_FOUND) return() endif() ######################################################################## # Install python sources ######################################################################## GR_PYTHON_INSTALL( FILES __init__.py aausat4.py amicalsat.py au03.py ax25.py binar1.py by02.py by70_1.py csp.py cute_70cm.py cute_bct_fsw.py cute_bct_soh.py cute_pld.py dstar_one.py eseo.py fossasat.py fossasat_1b.py fossasat_2.py floripasat.py funcube.py gomx_1.py gomx_3.py kr01.py lume.py mirsat1.py mysat1.py picsat.py qo100.py quetzal1.py sat_1kuns_pf.py sat_3cat_1.py sat_3cat_2.py smogp.py snet.py suomi100.py trisat.py upmsat_2.py vzlusat_2.py DESTINATION ${GR_PYTHON_DIR}/satellites/telemetry ) ######################################################################## # Handle the unit tests ######################################################################## include(GrTest) set(GR_TEST_TARGET_DEPS gnuradio-satellites) set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}/swig) GR_ADD_TEST(qa_by02 ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_by02.py) gr-satellites-4.4.0/python/telemetry/__init__.py000066400000000000000000000027511414055407700217560ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # ''' gr-satellites telemetry definitions These are telemetry defintions. Most of them are just a construct object, but in more complex cases, another class supporting the .parse method and relying on construct is used. ''' import construct from .aausat4 import aausat4 from .amicalsat import amicalsat from .au03 import au03 from .ax25 import ax25 from .binar1 import binar1 from .by02 import by02 from .by70_1 import by70_1 from .csp import csp from .cute_70cm import cute_70cm from .dstar_one import dstar_one from .eseo import eseo from .floripasat import floripasat from .fossasat_1b import fossasat_1b from .fossasat_2 import fossasat_2 from .funcube import funcube from .gomx_1 import gomx_1 from .gomx_3 import gomx_3 from .kr01 import kr01 from .lume import lume from .mirsat1 import mirsat1 from .mysat1 import mysat1 from .picsat import picsat from .qo100 import qo100 from .quetzal1 import quetzal1 from .sat_1kuns_pf import sat_1kuns_pf from .sat_3cat_1 import sat_3cat_1 from .sat_3cat_2 import sat_3cat_2 from .smogp import smog1 from .smogp import smogp from .smogp import smogp_signalling from .snet import snet from .suomi100 import suomi100 from .by70_1 import taurus1 from .trisat import trisat from .upmsat_2 import upmsat_2 from .vzlusat_2 import vzlusat_2 construct.setGlobalPrintFullStrings(True) gr-satellites-4.4.0/python/telemetry/aausat4.py000066400000000000000000000031061414055407700215540ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from construct import * from ..adapters import LinearAdapter from .csp import CSPHeader EPS = Struct( 'boot_count' / Int16ub, 'uptime' / Int32ub, 'rt_clock' / Int32ub, 'ping_status' / Int8ub, 'subsystem_status' / Int16ub, 'battery_voltage' / LinearAdapter(1/40.0, Int8ub), 'cell_diff' / LinearAdapter(1/4.0, Int8sb), 'battery_current' / LinearAdapter(1/10.0, Int8sb), 'solar_power' / LinearAdapter(1/20.0, Int8ub), 'temp' / Int8sb, 'pa_temp' / Int8sb, 'main_voltage' / Int8sb ) COM = Struct( 'boot_count' / Int16ub, 'packets_received' / Int16ub, 'packets_sent' / Int16ub, 'latest_rssi' / Int16sb, 'latest_bit_correction' / Int8ub, 'latest_byte_correction' / Int8ub ) # Reverse-engineered ADCS1 = Struct( 'bdot' / Int16sb[3], 'state' / Int8ub ) ADCS2 = Struct( 'gyro' / Int16sb[3] ) AIS = Struct( 'boot_count' / Int16ub, Padding(4), # unknown data 'unique_mssi' / Int16ub, Padding(12) # unknown data ) Valid = BitStruct( Padding(2), 'ais2' / Flag, 'ais1' / Flag, 'adcs2' / Flag, 'adcs1' / Flag, 'com' / Flag, 'eps' / Flag ) aausat4 = Struct( 'frame_length' / Int16ub, 'csp_header' / ByteSwapped(CSPHeader), 'valid' / Valid, 'eps' / EPS, 'com' / COM, 'adcs1' / ADCS1, 'adcs2' / ADCS2, 'ais1' / AIS, 'ais2' / AIS ) gr-satellites-4.4.0/python/telemetry/amicalsat.py000066400000000000000000000005221414055407700221470ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from construct import * from .ax25 import Header amicalsat = Struct( 'header' / Header, 'info' / GreedyString('ascii') ) gr-satellites-4.4.0/python/telemetry/au03.py000066400000000000000000000036241414055407700207670ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2017,2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import datetime from construct import * from ..adapters import UNIXTimestampAdapter from .csp import CSPHeader Timestamp = UNIXTimestampAdapter(Int32sb) class BatteryAdapter(Adapter): def _encode(self, obj, context, path=None): return int((obj - 4420) / 16.0) def _decode(self, obj, context, path=None): return obj * 16 + 4420 Battery = BatteryAdapter(Int8ub) class CurrInAdapter(Adapter): def _encode(self, obj, context, path=None): return int(obj * 255.0 / 2700.0) def _decode(self, obj, context, path=None): return obj * 2700.0 / 255.0 CurrIn = CurrInAdapter(Int8ub) class CurrOutAdapter(Adapter): def _encode(self, obj, context, path=None): return int(obj * 255.0 / 4000.0) def _decode(self, obj, context, path=None): return obj * 4000.0 / 255.0 CurrOut = CurrOutAdapter(Int8ub) class Curr3Adapter(Adapter): def _encode(self, obj, context, path=None): return int(obj * 255.0 / 5500.0) def _decode(self, obj, context, path=None): return obj * 5500.0 / 255.0 Curr3 = Curr3Adapter(Int8ub) class Curr5Adapter(Adapter): def _encode(self, obj, context, path=None): return int(obj * 255.0 / 4500.0) def _decode(self, obj, context, path=None): return obj * 4500.0 / 255.0 Curr5 = Curr5Adapter(Int8ub) au03 = Struct( 'csp_header' / CSPHeader, 'timestamp' / Timestamp, 'callsign' / Bytes(6), 'flags' / Byte, 'batt_voltage' / Battery, 'current_in' / CurrIn, 'current_out' / CurrOut, 'rail3_current' / Curr3, 'rail5_current' / Curr5, 'com_temp' / Int8sb, 'eps_temp' / Int8sb, 'bat_temp' / Int8sb ) gr-satellites-4.4.0/python/telemetry/ax25.py000066400000000000000000000023601414055407700207720ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from construct import * SSID = BitStruct( 'ch' / Flag, # C / H bit Default(BitsInteger(2), 3), # reserved bits 'ssid' / BitsInteger(4), 'extension' / Flag # last address bit ) class CallsignAdapter(Adapter): def _encode(self, obj, context, path=None): return bytes([x << 1 for x in bytes( (obj.upper() + ' '*6)[:6], encoding='ascii')]) def _decode(self, obj, context, path=None): return str(bytes([x >> 1 for x in obj]), encoding='ascii').strip() Callsign = CallsignAdapter(Bytes(6)) Address = Struct( 'callsign' / Callsign, 'ssid' / SSID ) Control = Hex(Int8ub) Control16 = Hex(Int16ub) PID = Hex(Int8ub) Header = Struct( 'addresses' / RepeatUntil(lambda x, lst, ctx: x.ssid.extension, Address), 'control' / Control, 'pid' / PID ) Header16 = Struct( 'addresses' / RepeatUntil(lambda x, lst, ctx: x.ssid.extension, Address), 'control' / Control16, 'pid' / PID ) Frame = Struct( 'header' / Header, 'info' / GreedyBytes ) ax25 = Frame gr-satellites-4.4.0/python/telemetry/binar1.py000066400000000000000000000072061414055407700213730ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2021 @dbusan # Copyright 2021 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from construct import * from .ax25 import Header as AX25Header telem_params = { # highR, lowR, offset, scale 'V_3V3': (10000, 10000, 0, 1), 'V_Batt': (24500, 10000, 0, 1), 'V_SolarPanelXX': (25000, 10000, 0, 1), 'V_SolarPanelYY': (25000, 10000, 0, 1), 'I_3V3': (0, 10000, 0.25, 0.8), 'I_Batt': (0, 10000, 0.25, 0.8), 'I_SolOutXX': (0, 10000, 0.25, 0.8), 'I_SolInXX': (0, 10000, 0.25, 0.8), 'I_SolOutYY': (0, 10000, 0.25, 0.8), 'I_SolInYY': (0, 10000, 0.25, 0.8), 'I_Magnetorquers0XX': (0, 10000, 0, 0.25), 'I_Magnetorquers0YY': (0, 10000, 0, 0.25), 'I_Magnetorquers0ZZ': (0, 10000, 0, 0.25), 'I_Magnetorquers1XX': (0, 10000, 0, 0.25), 'I_Magnetorquers1YY': (0, 10000, 0, 0.25), 'T_SolNegXX': (0, 10000, 67.8 / 160.0, 1.0 / 160.0), 'T_SolPosXX': (0, 10000, 67.8 / 160.0, 1.0 / 160.0), 'T_SolNegYY': (0, 10000, 67.8 / 160.0, 1.0 / 160.0), 'T_SolPosYY': (0, 10000, 67.8 / 160.0, 1.0 / 160.0), 'T_BHeat12': (0, 10000, 50.0 / 100.0, 1.0 / 100.0), 'T_BHeat34': (0, 10000, 50.0 / 100.0, 1.0 / 100.0), } class BinarAdapter(Adapter): def __init__(self, telemetry_id, *args, **kwargs): self.telemetry_id = telemetry_id return Adapter.__init__(self, *args, **kwargs) def _encode(self, obj, context, path=None): pass def _decode(self, obj, context, path=None): telem_obj_params = telem_params[self.telemetry_id] highR = telem_obj_params[0] lowR = telem_obj_params[1] offsetvalue = telem_obj_params[2] scaleratio = telem_obj_params[3] return generalised_decode(obj, lowR, highR, scaleratio, offsetvalue) Voltages = Struct( 'V_3V3' / BinarAdapter('V_3V3', Int16ul), 'V_Batt' / BinarAdapter('V_Batt', Int16ul), 'V_SolarPanelXX' / BinarAdapter('V_SolarPanelXX', Int16ul), 'V_SolarPanelYY' / BinarAdapter('V_SolarPanelYY', Int16ul), ) Currents = Struct( 'I_3V3' / BinarAdapter('I_3V3', Int16ul), 'I_Batt' / BinarAdapter('I_Batt', Int16ul), 'I_SolOutXX' / BinarAdapter('I_SolOutXX', Int16ul), 'I_SolInXX' / BinarAdapter('I_SolInXX', Int16ul), 'I_SolOutYY' / BinarAdapter('I_SolOutYY', Int16ul), 'I_SolInYY' / BinarAdapter('I_SolInYY', Int16ul), 'I_Magnetorquers0XX' / BinarAdapter('I_Magnetorquers0XX', Int16ul), 'I_Magnetorquers0YY' / BinarAdapter('I_Magnetorquers0YY', Int16ul), 'I_Magnetorquers0ZZ' / BinarAdapter('I_Magnetorquers0ZZ', Int16ul), 'I_Magnetorquers1XX' / BinarAdapter('I_Magnetorquers1XX', Int16ul), 'I_Magnetorquers1YY' / BinarAdapter('I_Magnetorquers1YY', Int16ul), ) Temperatures = Struct( 'T_SolNegXX' / BinarAdapter('T_SolNegXX', Int16ul), 'T_SolPosXX' / BinarAdapter('T_SolPosXX', Int16ul), 'T_SolNegYY' / BinarAdapter('T_SolNegYY', Int16ul), 'T_SolPosYY' / BinarAdapter('T_SolPosYY', Int16ul), 'T_BHeat12' / BinarAdapter('T_BHeat12', Int16ul), 'T_BHeat34' / BinarAdapter('T_BHeat34', Int16ul), ) Telemetry = Struct( 'Voltages' / Voltages, 'Currents' / Currents, 'Temperatures' / Temperatures, 'GPSPosn' / Float32l[2], ) StringMsg = Struct( 'Message' / Bytes(36) ) def generalised_decode(obj, lowR, highR, scaleratio, offsetvalue): vref = 3.36 vdiv_ratio = float(lowR)/float(highR+lowR) val = (obj/2**16*vref/vdiv_ratio-offsetvalue)/(scaleratio) return val binar1 = Struct( 'packetlen' / Int8ub, 'telemetry' / Telemetry, 'message' / StringMsg, ) gr-satellites-4.4.0/python/telemetry/by02.py000066400000000000000000000054721414055407700207760ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from construct import * from ..adapters import AffineAdapter, LinearAdapter TMPrimaryHeader = BitStruct( 'transfer_frame_version_number' / BitsInteger(2), 'spacecraft_id' / BitsInteger(10), 'virtual_channel_id' / BitsInteger(3), 'ocf_flag' / Flag, 'master_channel_frame_count' / BitsInteger(8), 'virtual_channel_frame_count' / BitsInteger(8), 'first_header_pointer' / BitsInteger(8) ) syncA = bytes([0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x08, 0x77, 0x80, 0x00, 0x00, 0x63]) syncB = bytes([0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x26]) IVbat = LinearAdapter(2.5, Int16sb) UVbat = LinearAdapter(2000.0, Int16sb) Id = BitStruct( 'other' / BitsInteger(13), 'transponder' / Flag, 'beacon' / Flag, 'telemetry' / Flag ) hk_STM32_first_half = Struct( 'id' / Id, 'config' / Int8ub, 'last_command' / Int8ub, 'payload_mode' / Int8ub, 'tx_mode' / Int8ub, 'gain_tx' / Int16sb, 'i_3v3' / LinearAdapter(10.0, Int16sb), 'u_3v3' / LinearAdapter(2000.0, Int16sb), 'i_vbat_tx' / IVbat, 'u_vbat_tx' / UVbat, 'i_vbat_rx' / IVbat, 'u_vbat_rx' / UVbat, 't_stm32' / AffineAdapter(1.0/0.29296875, (304.0 - 25.0) / 0.29296875, Int16sb), 't_pa' / LinearAdapter(8.0*16.0, Int16sb), 'n_tx_rf' / Int16ub, 'n_rx_rf' / Int16ub, 'n_tx_err_rf' / Int16ub, 'n_rx_err_rf' / Int16ub, 'n_tx_can' / Int16ub, 'n_rx_can' / Int16ub, 'n_tx_err_can' / Int16ub, 'n_rx_err_can' / Int16ub, 'n_tc' / Int32ub, 'dc_fm_tc' / Int16sb, 'dc_fm_ham' / Int16sb, 'rssi_fm_tc' / Int32ub, 'rssi_fm_ham' / Int32ub, 'reset_flag' / Int8ub, 'sys_flag' / Int8ub, 'dma_overflow' / Int16ub, 'runtime_msb' / Int16ub ) hk_STM32_second_half = Struct( 'runtime_lsb' / Int16ub, 'reset_count' / Int32ub, 'ctcss_count' / Int32ub, 'ctcss_det' / Float32b ) hk_AVR = Struct( 'adf7021_ld' / Int8ub, 'err_flag' / Int8ub, 'callsign' / Bytes(6), 'n_tx_232' / Int16ub, 'n_rx_232' / Int16ub, 'runtime' / Int32ub, 'rssi_analog' / Int8ub, 'n_rssi_const' / Int8ub, 'unlock_count' / Int8ub, 'reset_flag' / Int8ub, 'reset_count' / Int32ub ) frameA = Struct( 'header' / TMPrimaryHeader, Const(syncA), 'hk_STM32_first' / hk_STM32_first_half ) frameB = Struct( 'header' / TMPrimaryHeader, Const(syncB), 'hk_STM32_second' / hk_STM32_second_half, 'hk_AVR' / hk_AVR, 'padding' / Bytes(30) ) framePadding = Struct( 'header' / TMPrimaryHeader, 'padding' / Bytes(76) ) by02 = Select(frameA, frameB, framePadding) gr-satellites-4.4.0/python/telemetry/by70_1.py000066400000000000000000000306061414055407700212200ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from math import log10 from construct import * from .csp import CSPHeader from ..adapters import LinearAdapter PayloadMode = BitStruct( 'open_telecommand' / Flag, 'camera_task' / Flag, 'valid_image_data' / Flag, 'camera_power' / Flag, 'rest' / Nibble ) Iv3 = LinearAdapter(10.0, Int16sl) Ivbatt = LinearAdapter(2.5, Int16sl) Voltage = LinearAdapter(2000.0, Int16sl) class TSTM32Adapter(Adapter): def _encode(self, obj, context, path=None): return int(4096.0*(2.5*(obj - 25.0) + 760.0)/3000.0) def _decode(self, obj, context, path=None): return (obj * 3000.0 / 4096.0 - 760.0) / 2.5 + 25.0 TSTM32 = TSTM32Adapter(Int16sl) class TPAAdapter(Adapter): def _encode(self, obj, context, path=None): return int(obj*16.0) << 3 def _decode(self, obj, context, path=None): return (obj >> 3) / 16.0 TPA = TPAAdapter(Int16sl) DCFMTC = LinearAdapter(352.7, Int16sl) DCFMHam = LinearAdapter(6864.0, Int16sl) class RSSIAdapter(Adapter): def _encode(self, obj, context, path=None): return int(10**((obj + 147.0)/10.0)) def _decode(self, obj, context, path=None): return 10*log10(obj) - 147.0 RSSI = RSSIAdapter(Int32ul) Runtime = LinearAdapter(1000.0, Int32ul) CTCSSCount = LinearAdapter(0.04, Int32ul) # COM STM32 Housekeeping Packet Hk_STM32 = Struct( Const(b'\x1c\xa1'), 'config' / Int8ul, 'flag_direct_ins' / Int8ul, 'payload_mode' / PayloadMode, 'tx_mode' / Int8ul, 'gain_tx' / Int16sl, 'i_3v3' / Iv3, 'u_3v3' / Voltage, 'i_vbat_tx' / Ivbatt, 'u_vbat_tx' / Voltage, 'i_vbat_rx' / Ivbatt, 'u_vbat_rx' / Voltage, 't_stm32' / TSTM32, 't_pa' / TPA, 'n_tx_rf' / Int16ul, 'n_rx_rf' / Int16ul, 'n_tx_err_rf' / Int16ul, 'n_tx_err_rf' / Int16ul, 'n_tx_i2c' / Int16ul, 'n_rx_i2c' / Int16ul, 'n_tx_err_i2c' / Int16ul, 'n_rx_err_i2c' / Int16ul, 'n_tc' / Int32ul, 'dc_fm_tc' / DCFMTC, 'dc_fm_ham' / DCFMHam, 'rssi_fm_tc' / RSSI, 'rssi_fm_ham' / RSSI, 'reset_flag' / Int8ul, 'sys_flag' / Int8ul, 'dma_overflow' / Int16ul, 'runtime' / Runtime, 'reset_count' / Int32ul, 'ctcss_count' / CTCSSCount, 'ctcss_det' / Float32l ) # COM STM32 Config Packet Cfg = Struct( Const(b'\x1c\xa2'), 'gain_tx_HI' / Int16sl, 'gain_tx_LO' / Int16sl, 'bias_I' / Int16sl, 'bias_Q' / Int16sl, 'threshold_u_vbat_rx_powerdown' / Int16sl, 'threshold_u_vbat_rx_repeateroff' / Int16sl, 'threshold_t_pa' / Int8sl, 'cam_ham_interval' / Int8ul, 'cam_ham_en' / Int8ul, 'ctcss_en' / Int8ul, 'ctcss_n_integration' / Int8ul, 'ctcss_n_tail' / Int8ul, 'ctcss_coeff' / Float32l, 'ctcss_threshold' / Float32l, 'gain_fmdm_ham' / Float32l, 'gain_fmdm_tc' / Float32l, 'interval_hk_OBC' / Int32ul, 'interval_hk_TLM' / Int32ul, 'interval_hk_BEACON' / Int32ul, 'message' / Bytes(28), 'cam_delay' / Int32ul, 'crc' / Int32ul) # COM AVR Housekeeping Packet Hk_AVR = Struct( Const(b'\x1c\xa3'), 'adf7021_ld' / Int8ul, 'err_flag' / Int8ul, 'n_tx_i2c' / Int16ul, 'n_rx_i2c' / Int16ul, 'n_tx_232' / Int16ul, 'n_rx_232' / Int16ul, 'runtime' / Runtime, 'rssi_analog' / Int8ul, 'n_rssi_const' / Int8ul, 'unlock_count' / Int8ul, 'reset_flag' / Int8ul, 'reset_count' / Int32ul) # LilacSat-1 Generic Telemetry Data LilacSat1Tlm = Struct( Const(b'\xaa\xa1'), 'ttc_payload_mode' / Int8ul, 'ttc_tx_mode' / Int8ul, 'ttc_i_vbat_tx' / Int8ul, 'ttc_t_pa' / Int8sl, 'ttc_adf7021_lock' / Int8ul, 'ttc_n_tc' / Int32ul, 'ttc_rssi_fm_tc' / Int8ul, 'eps_bat_vol_average' / Int8ul, 'eps_bat_cur' / Int8sl, 'eps_5v_cur' / Int8ul, 'esp_3v3_cur' / Int8ul, 'eps_5v_dcdc_temp' / Int16sl, 'eps_bat_temp' / Int16sl, 'eps_reserved' / Byte[2], 'adcs_q1' / Int16sl, 'adcs_q2' / Int16sl, 'adcs_q3' / Int16sl, 'adcs_w1' / Int16sl, 'adcs_w2' / Int16sl, 'adcs_w3' / Int16sl, 'adcs_mode' / Int16sl, 'adcs_long' / Int16sl, 'adcs_lat' / Int16sl, 'adcs_height' / Int16sl, 'adcs_reserved' / Byte[5], 'obc_gps_power_state' / Int8ul, 'obc_eps_low_state' / Int8ul, 'obc_year' / Int16ul, 'obc_month' / Int8ul, 'obc_day' / Int8ul, 'obc_hour' / Int8ul, 'obc_minute' / Int8ul, 'obc_second' / Int8ul, 'obc_reserved' / Byte, 'inms_script_en' / Int8ul, 'inms_power_on' / Int8ul, 'inms_script_no' / Int8ul, 'inms_script_seq' / Int8ul, 'inms_script_execed' / Int8ul, 'inms_script_checksum_ok' / Int8ul, 'inms_slot_not_empty' / Int8ul, 'inms_reserved' / Byte[2]) # OBC Housekeeping Parameters Hk_OBC = Struct( Const(b'\x1a\xa1'), 'com_iic1_bus_status' / Int8ul, 'eps_iic1_bus_status' / Int8ul, 'gps_power_status' / Int8ul, 'battery_low_indicator' / Int8ul, 'gps_lock_status' / Int8ul, 'onboard_time_source' / Int8ul, 'time_onboard_year' / Int16ul, 'time_onboard_month' / Int8ul, 'time_onboard_day' / Int8ul, 'time_onboard_hour' / Int8ul, 'time_onboard_min' / Int8ul, 'time_onboard_sec' / Int8ul, 'delayed_command_count' / Int8ul, 'interface_board_3v3_current_a' / Int16ul, 'interface_board_5v_current_b' / Int16ul, 'obc_board_3v3_current_tsc103' / Int16ul, 'obc_board_5v_current_ina219' / Int16ul, 'obc_board_5v_voltage_ina219' / Int16ul, Padding(2), 'csp_sent_packet' / Int32ul, 'csp_received_packet' / Int32ul, 'received_command_count' / Int32ul, 'obc_power_on_time' / Int32ul, 'obc_reset_count' / Int16ul, 'obc_log_file_index' / Int16ul, 'com_log_file_index' / Int16ul, 'eps_log_file_index' / Int16ul, 'com_log_2_file_index' / Int16ul, 'inms_enable_status_script_power' / Int8ul, 'inms_running_status_script_no_seq_no' / Int8ul, 'adcs_log_file_index' / Int16ul, 'inms_temperature_sensing_point' / Float32l, 'stm32_temperature' / Int16ul, 'current_storage_card_telemetry_ftp' / Int8ul, 'gps_leap_second_correction' / Int8sl, 'inms_file_index' / Int32ul) Magnetometer = LinearAdapter(1/4.0, Int16sl) Gyroscope = LinearAdapter(32768.0/57.2958, Int16sl) TempADIS = LinearAdapter(1/0.0739, Int16sl) FineSun = LinearAdapter(16384.0, Int16sl) CoarseSun = LinearAdapter(32.0, Int16sl) Latitude = LinearAdapter(360.0, Int16sl) Longitude = LinearAdapter(180.0, Int16sl) Altitude = LinearAdapter(1/20.0, Int16sl) # ADCS Parameters (OBC) ADCS_Par = Struct( Const(b'\x1a\xa2'), 'magnetometer_hmc5883l' / Magnetometer[3], 'magnetometer_hmc1043l' / Magnetometer[3], 'gyroscope_mpu3300' / Gyroscope[3], 'gyroscope_mpu3300_temperature' / Int16sl, 'gyroscope_adis16448' / Gyroscope[3], 'temperature_adis16448' / TempADIS, 'magnetometer_adis16448' / Magnetometer[3], 'fine_sun_sensor' / FineSun[3], 'coarse_sun_sensor' / CoarseSun[5], 'magnetometer_mix' / Float32l, 'modeflag_2' / Int32ul, 'modeflag_1' / Int16ul, 'flywheel_speed' / Int16sl, 'adcs_interruption_counting' / Int16ul, 'kf_quaternions' / FineSun[3], 'gyroscope_quaternions' / FineSun[3], 'coarse_sun_sensor_temperature' / Int16sl[5], 'latitude' / Latitude, 'longitude' / Longitude, 'altitude' / Altitude, 'fine_sun_sensor_temperature' / Int16sl) # Orbit Paramaters (OBC) Orbit_Par = Struct( Const(b'\x1a\xa8'), 'year' / Int8ul, 'month' / Int8ul, 'day' / Int8ul, 'hour' / Int8ul, 'minute' / Int8ul, 'second' / Int8ul, 'position' / Float64l[3], 'velocity' / Float64l[3], 'oev_a' / Float64l, 'oev_e' / Float64l, 'oev_i' / Float64l, 'oev_omega' / Float64l, 'oev_w' / Float64l, 'oev_theta' / Float64l) # OBC Variable Threshold Parameter OBC_Threshold = Struct( Const(b'\x1a\xa9'), 'eps_batter_low_voltage_threshold' / Int16ul, 'eps_overcurrent_threshold' / Int16ul, 'eps_critical_battery_low_voltage_threshold' / Int16ul, 'eps_critical_overcurrent_threshold' / Int16ul, 'eps_overcurrent_hysteresis' / Int16ul, 'gps_time_error_threshold' / Int16ul, 'gps_position_malfunction_threshold' / Int16ul[3], 'gps_velocity_malfunction_threshold' / Int16ul[3]) # Orbit Parameter (OBC) Orbital_Par = Struct( Const(b'\x1a\xaa'), 'packet_header' / Int16ul, 'frame_header' / Int8ul, 'frame_length' / Int8ul, 'gps_bd_lock_status' / Int8ul, 'week_of_year' / Int16ul, 'second_of_week' / Float64l, 'gps_satellite_in_use_obs' / Int8ul, 'gps_satellite_in_use_pdop' / Int16ul, 'xyz' / Float64l[3], 'v' / Float64l[3], 'gps_clock_error' / Float32l, 'gps_clock_drift' / Float32l, 'bd_clock_error' / Float32l, 'bd_clock_drift' / Float32l, 'checksum' / Int8ul) CurrentVoltage = LinearAdapter(1000.0, Int16sl) Temp = LinearAdapter(16.0, Int16sl) EPS_Status = BitStruct( 'reboot_enable_2_status' / Flag, Padding(1), 'reboot_enable_1_status' / Flag, Padding(1), 'antenna_2_deploy_status' / Flag, Padding(1), 'antenna_1_deploy_status' / Flag, Padding(1), 'antenna_deploy_disable_control' / Flag, Padding(7)) # EPS Housekeeping Parameter Hk_EPS = Struct( Const(b'\x1e\xa1'), 'mppt_output_current' / CurrentVoltage[5], 'battery_output_current' / CurrentVoltage[3], '5v_output_current' / CurrentVoltage, '3v3_output_current' / CurrentVoltage, 'main_bus_output_current' / CurrentVoltage, 'antenna_deployment_current' / CurrentVoltage, 'mppt_output_voltage' / CurrentVoltage[5], 'battery_output_voltage' / CurrentVoltage[3], '5v_output_voltage' / CurrentVoltage, '3v3_output_voltage' / CurrentVoltage, 'main_bus_output_voltage' / CurrentVoltage, 'antenna_deployment_voltage' / CurrentVoltage, 'mptt_temperature' / Temp, 'battery_charger_temperature' / Temp, 'battery_temperature' / Temp, 'main_bus_diode_temperature' / Temp, '5v_regulator_temperature' / Temp, '3v3_regulator_temperature' / Temp, '5v_ocp_temperature' / Temp, '3v3_ocp_temperature' / Temp, 'status' / EPS_Status, 'power_on_time' / LinearAdapter(1000.0, Int32ul), 'iic_sent_packet_count' / Int16ul, 'iic_received_packet_count' / Int16ul, 'output_reboot_wdt_in_minute' / Int16ul, 'eps_reboot_wdt_in_minute' / Int16ul, 'eps_reboot_count' / Int16ul) # EPS Onboard Parameters EPS_Onboard = Struct( Const(b'\x1e\xa2'), 'onboard_software_version' / Int8ul[3], 'onboard_software_compile_date' / Int8ul[4], Padding(1), 'first_poweron_flag' / Int8ul, Padding(3), 'output_reboot_wdt_enabled' / Int8ul, 'output_reboot_timer_hr' / Int8ul, Padding(2), 'eps_reboot_wdt_enabled' / Int8ul, 'eps_reboot_timer_hr' / Int8ul, Padding(2), 'auto_send_hk_data_enabled' / Int8ul, 'auto_send_hk_data_period_sec' / Int8ul, Padding(2), 'antenna_deployed' / Int8ul) # EPS Reboot Log EPS_Reboot = Struct( Const(b'\x1e\xa3'), 'onboard_software_version' / Int8ul[3], 'onboard_software_compile_date' / Int8ul[4], Padding(1), 'last_output_reboot_source' / Int8ul, 'last_output_reboot_timer' / Int8ul[4], Padding(3), 'last_eps_reboot_source' / Int8ul, 'last_eps_reboot_timer' / Int8ul[4], Padding(3), 'current_onboard_reboot_timer' / Int8ul[4], Padding(4), 'eps_reboot_count' / Int8ul[4]) # EPS Command Log Command = Struct( 'cmd' / Int8ul[5], 'source' / Int8ul, 'received_time' / Int8ul[4]) EPS_Command = Struct( Const(b'\x1e\xa4'), 'cmds' / Command[4]) Error = Struct( 'code' / Int8ul, 'time' / Int8ul[4]) # EPS Error Log EPS_Error = Struct( Const(b'\x1e\xa5'), 'critical_error' / Error[4], 'error' / Error[4]) ImageData = Struct( 'file_id' / Int32ul, 'flag' / Int8sb, 'filesize' / Int24ul, 'offset' / Int24ul, 'data' / Bytes(64) ) Frame = Select( Hk_STM32, Cfg, Hk_AVR, LilacSat1Tlm, Hk_OBC, ADCS_Par, Orbit_Par, OBC_Threshold, Orbital_Par, Hk_EPS, EPS_Onboard, EPS_Reboot, EPS_Command, EPS_Error) by70_1 = Struct( 'csp_header' / CSPHeader, 'beacon' / If(this.csp_header.destination == 5, Frame), 'camera' / If(this.csp_header.destination == 6, ImageData), 'packet_count' / Int32ul, 'crc' / Hex(Int32ul) ) taurus1 = Struct( 'header' / Bytes(5+7), # This is a CCSDS header of some sort 'beacon' / Frame ) gr-satellites-4.4.0/python/telemetry/csp.py000066400000000000000000000012051414055407700207750ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from construct import * Address = BitsInteger(5) Port = BitsInteger(6) CSPHeader = BitStruct( 'priority' / BitsInteger(2), 'source' / Address, 'destination' / Address, 'destination_port' / Port, 'source_port' / Port, 'reserved' / BitsInteger(3), 'fragmentation' / Flag, 'hmac' / Flag, 'xtea' / Flag, 'rdp' / Flag, 'crc' / Flag ) csp = Struct( 'header' / CSPHeader, 'payload' / GreedyBytes ) gr-satellites-4.4.0/python/telemetry/cute_70cm.py000066400000000000000000000115641414055407700220070ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2017, 2018, 2019, 2020 Daniel Estevez # Copyright 2021 The Regents of the University of Colorado # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import copy from datetime import datetime from construct import Adapter, BitsInteger, BitStruct, Container, Enum, \ Flag, GreedyBytes, If, Int8ub, Int16ub, Int32ub, \ Padding, RawCopy, Struct, Switch from .ax25 import Header from .cute_bct_fsw import cute_bct_fsw from .cute_bct_soh import cute_bct_soh from .cute_pld import cute_pld_sw_stat PrimaryHeader = BitStruct( 'ccsds_version' / BitsInteger(3), 'packet_type' / Flag, 'secondary_header_flag' / Flag, 'is_stored_data' / Flag, 'APID' / BitsInteger(10), 'grouping_flag' / Enum(BitsInteger(2), GRP_MIDDLE=0, GRP_BEGIN=1, GRP_END=2, GRP_FIRST_AND_LAST=3), 'sequence_count' / BitsInteger(14), 'packet_length' / BitsInteger(16) ) class TimeAdapter(Adapter): def _encode(self, obj, context, path=None): return Container() def _decode(self, obj, context, path=None): offset = datetime(2000, 1, 1, 12) - datetime(1970, 1, 1) return (datetime.utcfromtimestamp(obj.time_stamp_seconds) + offset) SecondaryHeaderRaw = Struct( 'time_stamp_seconds' / Int32ub, 'sub_seconds' / Int8ub, Padding(1) ) SecondaryHeader = TimeAdapter( SecondaryHeaderRaw ) cute_ax25_packet_header = RawCopy(Struct( 'ax25_header' / Header, 'primary_header' / PrimaryHeader, 'secondary_header' / If( lambda c: c.primary_header.secondary_header_flag, SecondaryHeader ) )) cute_ax25_packet_fragment = Struct( 'header' / cute_ax25_packet_header, 'packet' / GreedyBytes ) cute_ax25_packet_complete = Struct( 'ax25_header' / Header, 'primary_header' / PrimaryHeader, 'secondary_header' / If( lambda c: c.primary_header.secondary_header_flag, SecondaryHeader ), 'packet' / Switch( lambda c: (c.primary_header.APID), { (0x55): cute_bct_fsw, (0x56): cute_bct_soh, (0x1FF): cute_pld_sw_stat } ) ) class FswParserState(Enum): SEARCH_START = 0 SEARCH_MIDDLE = 1 class CUTE: """Telemetry parser for the Colorado Ultraviolet Transit Experiment (CUTE) This is a stateful parser that reassembles flight software packets which span multiple AX.25 frames. """ def __init__(self): self.frames = [] self.state = FswParserState.SEARCH_START # Parses a reassembled frame def process(self): reassembled_packet = b''.join([self.frames[0].header.data] + [frame.packet for frame in self.frames]) self.frames = [] return cute_ax25_packet_complete.parse(reassembled_packet) def parse(self, packet): data = cute_ax25_packet_fragment.parse(packet) if data is None: return None primary_header = data.header.value.primary_header self.frames.append(data) if self.state == FswParserState.SEARCH_START: if primary_header.grouping_flag == 'GRP_MIDDLE': # This means we dropped/missed a frame self.frames = [] return None elif primary_header.grouping_flag == 'GRP_BEGIN': self.state = FswParserState.SEARCH_MIDDLE return None elif primary_header.grouping_flag == 'GRP_END': # This means we dropped/missed a frame self.frames = [] return None elif primary_header.grouping_flag == 'GRP_FIRST_AND_LAST': return self.process() elif self.state == FswParserState.SEARCH_MIDDLE: if primary_header.grouping_flag == 'GRP_BEGIN' or \ primary_header.grouping_flag == 'GRP_FIRST_AND_LAST': # This means we dropped/missed a frame self.state = FswParserState.SEARCH_START self.frames = [] return None prev_header = self.frames[-2].header.value.primary_header if primary_header.sequence_count != \ (prev_header.sequence_count + 1) % (1 << 14): # A frame was dropped. self.state = FswParserState.SEARCH_START self.frames = [] return None if primary_header.grouping_flag == 'GRP_MIDDLE': return None elif primary_header.grouping_flag == 'GRP_END': self.state = FswParserState.SEARCH_START return self.process() cute_70cm = CUTE() gr-satellites-4.4.0/python/telemetry/cute_bct_fsw.py000066400000000000000000002027721414055407700226730ustar00rootroot00000000000000from ..adapters import LinearAdapter from construct import Adapter, BitsInteger, BitStruct, Container, Enum, Flag, \ Int8ub, Int16ub, Int32ub, Padding, Struct, Switch L0 = BitStruct( 'L0__WDT_2SEC_CNT' / BitsInteger(3), 'L0__RESET_ARMED' / Enum(Flag, ARMED=1, NOT_ARMED=0), 'L0__WDT_STAT' / Enum(Flag, NO_WDT=0, WDT=1), 'L0__WDT_EN' / Enum(Flag, DISABLED=0, ENABLED=1), 'L0__TABLE_SELECT' / Enum(Flag, FLASH=0, COMPILED=1), 'L0__BOOT_RELAY' / Enum(Flag, PRIMARY=1, REDUNDANT=0), 'L0__L0_ACPT_CNT' / BitsInteger(8), 'L0__L0_RJCT_CNT' / BitsInteger(8), 'L0__HW_SEC_CNT' / BitsInteger(8), Padding(64), 'L0__TIME_TAG' / BitsInteger(32), Padding(32), 'L0__PLD_TLM_ACK_CNT' / BitsInteger(8), 'L0__PLD_CMD_CNT' / BitsInteger(8), 'L0__PLD_TLM_TO_CNT' / BitsInteger(8), 'L0__PLD_TLM_NAK_CNT' / BitsInteger(8), 'L0__SPARE_END' / BitsInteger(64), ) COMMAND_TLM = BitStruct( 'COMMAND_TLM__CMD_STATUS' / Enum(BitsInteger(8), OK=0, BAD_APID=1, BAD_OPCODE=2, BAD_DATA=3, NOW_READING=4, DONE_READING=5, IDLE=6, NO_CMD_DATA=7, CMD_SRVC_OVERRUN=8, CMD_APID_OVERRUN=9, INCORRECT_WHEEL_MODE=10, BAD_ELEMENT=11, TABLES_BUSY=12, FLASH_NOT_ARMED=13, THRUSTERS_DISABLED=14, ATT_ERR_TOO_HIGH=15, ASYNC_REFUSED=16, DRIVER_ERROR=17), 'COMMAND_TLM__CMD_REJECT_STATUS' / Enum(BitsInteger(8), OK=0, BAD_APID=1, BAD_OPCODE=2, BAD_DATA=3, NOW_READING=4, DONE_READING=5, IDLE=6, NO_CMD_DATA=7, CMD_SRVC_OVERRUN=8, CMD_APID_OVERRUN=9, INCORRECT_WHEEL_MODE=10, BAD_ELEMENT=11, TABLES_BUSY=12, FLASH_NOT_ARMED=13, THRUSTERS_DISABLED=14, ATT_ERR_TOO_HIGH=15, ASYNC_REFUSED=16, DRIVER_ERROR=17), 'COMMAND_TLM__REALTIME_CMD_ACCEPT_COUNT' / BitsInteger(8), 'COMMAND_TLM__REALTIME_CMD_REJECT_COUNT' / BitsInteger(8), 'COMMAND_TLM__STORED_CMD_ACCEPT_COUNT' / BitsInteger(8), 'COMMAND_TLM__STORED_CMD_REJECT_COUNT' / BitsInteger(8), 'COMMAND_TLM__LAST_ACC_CMD_BYTES1' / BitsInteger(8), 'COMMAND_TLM__LAST_ACC_CMD_BYTES2' / BitsInteger(8), 'COMMAND_TLM__LAST_ACC_CMD_BYTES3' / BitsInteger(8), 'COMMAND_TLM__LAST_ACC_CMD_BYTES4' / BitsInteger(8), 'COMMAND_TLM__LAST_ACC_CMD_BYTES5' / BitsInteger(8), 'COMMAND_TLM__LAST_ACC_CMD_BYTES6' / BitsInteger(8), 'COMMAND_TLM__LAST_ACC_CMD_BYTES7' / BitsInteger(8), 'COMMAND_TLM__LAST_ACC_CMD_BYTES8' / BitsInteger(8), 'COMMAND_TLM__LAST_REJ_CMD_BYTES1' / BitsInteger(8), 'COMMAND_TLM__LAST_REJ_CMD_BYTES2' / BitsInteger(8), 'COMMAND_TLM__LAST_REJ_CMD_BYTES3' / BitsInteger(8), 'COMMAND_TLM__LAST_REJ_CMD_BYTES4' / BitsInteger(8), 'COMMAND_TLM__LAST_REJ_CMD_BYTES5' / BitsInteger(8), 'COMMAND_TLM__LAST_REJ_CMD_BYTES6' / BitsInteger(8), 'COMMAND_TLM__LAST_REJ_CMD_BYTES7' / BitsInteger(8), 'COMMAND_TLM__LAST_REJ_CMD_BYTES8' / BitsInteger(8), 'COMMAND_TLM__HEALTH_STATUS_INTERVAL' / BitsInteger(16), 'COMMAND_TLM__NAV_TLM_INTERVAL' / BitsInteger(16), 'COMMAND_TLM__STORED_TIMED_CMDS_ENABLED' / Enum(BitsInteger(8), DS=0, EN=1), 'COMMAND_TLM__MACROS_ENABLED' / Enum(BitsInteger(8), DS=0, EN=1), 'COMMAND_TLM__LAST_ST_CMD_QUEUED' / BitsInteger(16), 'COMMAND_TLM__LAST_ST_CMD_EXPIRED' / BitsInteger(16), 'COMMAND_TLM__LAST_AUTONOMOUS_MACRO' / BitsInteger(16), 'COMMAND_TLM__STORED_TIMED_CMDS_QUEUED' / BitsInteger(32), 'COMMAND_TLM__STORED_TIMED_CMDS_EXPIRED' / BitsInteger(32), 'COMMAND_TLM__MACRO_CMDS_QUEUED' / BitsInteger(32), 'COMMAND_TLM__MACRO_CMDS_EXPIRED' / BitsInteger(32), 'COMMAND_TLM__MACROS_EXECUTING_PACK1' / BitsInteger(8), 'COMMAND_TLM__MACROS_EXECUTING_PACK2' / BitsInteger(8), 'COMMAND_TLM__MACROS_EXECUTING_PACK3' / BitsInteger(8), 'COMMAND_TLM__MACROS_EXECUTING_PACK4' / BitsInteger(8), 'COMMAND_TLM__MACROS_EXECUTING_PACK5' / BitsInteger(8), 'COMMAND_TLM__MACROS_EXECUTING_PACK6' / BitsInteger(8), 'COMMAND_TLM__MACROS_EXECUTING_PACK7' / BitsInteger(8), 'COMMAND_TLM__MACROS_EXECUTING_PACK8' / BitsInteger(8), 'COMMAND_TLM__MACROS_EXECUTING_PACK9' / BitsInteger(8), 'COMMAND_TLM__MACROS_EXECUTING_PACK10' / BitsInteger(8), 'COMMAND_TLM__MACROS_EXECUTING_PACK11' / BitsInteger(8), 'COMMAND_TLM__MACROS_EXECUTING_PACK12' / BitsInteger(8), 'COMMAND_TLM__PACKAGE_EXEC_TIME' / BitsInteger(32), 'COMMAND_TLM__LAST_RT_CMD_RUN_COUNT' / BitsInteger(32), ) GENERAL = BitStruct( 'GENERAL__SOFTWARE_VERSION1' / BitsInteger(32), 'GENERAL__SOFTWARE_VERSION2' / BitsInteger(32), 'GENERAL__HARDWARE_VERSION' / BitsInteger(32), 'GENERAL__ASYNC_RUNNING' / BitsInteger(8), 'GENERAL__SCRUB_STATUS_PART0' / Enum(BitsInteger(8), OK=0, FAIL=-1), 'GENERAL__SCRUB_STATUS_PART1' / Enum(BitsInteger(8), OK=0, FAIL=-1), 'GENERAL__SCRUB_STATUS_PART2' / Enum(BitsInteger(8), OK=0, FAIL=-1), 'GENERAL__SCRUB_STATUS_PART3' / Enum(BitsInteger(8), OK=0, FAIL=-1), 'GENERAL__SCRUB_STATUS_PART4' / Enum(BitsInteger(8), OK=0, FAIL=-1), 'GENERAL__SCRUB_STATUS_PART5' / Enum(BitsInteger(8), OK=0, FAIL=-1), 'GENERAL__SCRUB_STATUS_OVERALL' / Enum(BitsInteger(8), OK=0, FAIL=-1), 'GENERAL__SCRUB_COUNT' / BitsInteger(8), 'GENERAL__FLASH_CMD_SUCC_COUNT' / BitsInteger(8), 'GENERAL__FLASH_CMD_FAIL_COUNT' / BitsInteger(8), 'GENERAL__FLASH_LAST_PART' / BitsInteger(8), 'GENERAL__FLASH_LAST_OFF' / BitsInteger(32), 'GENERAL__FLASH_LAST_CHECK' / BitsInteger(32), 'GENERAL__IMAGE_BOOTED' / Enum(BitsInteger(8), PRIMARY=0, REDUNDANT=1), 'GENERAL__IMAGE_AUTO_FAILOVER' / Enum(BitsInteger(8), OK=0, FAIL=1), 'GENERAL__INERTIA1' / LinearAdapter(10000.000300000009, BitsInteger(32)), 'GENERAL__INERTIA2' / LinearAdapter(10000.000300000009, BitsInteger(32)), 'GENERAL__INERTIA3' / LinearAdapter(10000.000300000009, BitsInteger(32)), 'GENERAL__INERTIA4' / LinearAdapter(10000.000300000009, BitsInteger(32)), 'GENERAL__INERTIA5' / LinearAdapter(10000.000300000009, BitsInteger(32)), 'GENERAL__INERTIA6' / LinearAdapter(10000.000300000009, BitsInteger(32)), 'GENERAL__INERTIA7' / LinearAdapter(10000.000300000009, BitsInteger(32)), 'GENERAL__INERTIA8' / LinearAdapter(10000.000300000009, BitsInteger(32)), 'GENERAL__INERTIA9' / LinearAdapter(10000.000300000009, BitsInteger(32)), 'GENERAL__FS_LAST_OFF' / BitsInteger(32), 'GENERAL__FS_LAST_LEN' / BitsInteger(32), 'GENERAL__FS_LAST_CHECK' / BitsInteger(32), 'GENERAL__FS_OP_STATUS' / Enum(BitsInteger(8), SUCCESS_DONE=0, IN_PROG=1, BAD_PATH=2, BAD_PARAM=3, FAILURE=4, ABORTED=5), 'GENERAL__FS_MOUNTED' / Enum(BitsInteger(8), NOT_MOUNTED=0, PRIMARY_MOUNTED=1, REDUNDANT_MOUNTED=2, BOTH_MOUNTED=3), 'GENERAL__FS_LAST_OP' / Enum(BitsInteger(8), FS_NONE=0, FS_WRITE=1, FS_READ=2, FS_CRC=3, FS_COPY=4, FS_DELETE=5, FS_EXECUTE=6, FS_COMPRESS=7, FS_MOUNT=8, FS_MD5SUM=9, FS_CCSDS_FILE=10), 'GENERAL__RAM_SINGLE_BIT_ERROR_COUNT' / BitsInteger(32), ) TIME = BitStruct( 'TIME__TAI_SECONDS' / LinearAdapter(5.0, BitsInteger(32)), 'TIME__CYCLE_TIME' / LinearAdapter(5.0, BitsInteger(32)), 'TIME__JD_OF_NOW_WRT_TAI' / BitsInteger(32), 'TIME__GPS_UPDATE_CYCLE_PERIOD' / BitsInteger(32), 'TIME__GPS_UPDATE_CYCLE_COUNT' / BitsInteger(32), 'TIME__TIME_VALID' / Enum(BitsInteger(8), YES=1, NO=0), ) REFS = BitStruct( 'REFS__GPS_TIMER' / BitsInteger(32), 'REFS__TIME_NOW_32' / LinearAdapter(5.0, BitsInteger(32)), 'REFS__Q_ECEF_WRT_ECI1' / LinearAdapter(1000000030, BitsInteger(32)), 'REFS__Q_ECEF_WRT_ECI2' / LinearAdapter(1000000030, BitsInteger(32)), 'REFS__Q_ECEF_WRT_ECI3' / LinearAdapter(1000000030, BitsInteger(32)), 'REFS__Q_ECEF_WRT_ECI4' / LinearAdapter(1000000030, BitsInteger(32)), 'REFS__POSITION_WRT_ECI1' / LinearAdapter(50000, BitsInteger(32)), 'REFS__POSITION_WRT_ECI2' / LinearAdapter(50000, BitsInteger(32)), 'REFS__POSITION_WRT_ECI3' / LinearAdapter(50000, BitsInteger(32)), 'REFS__POSITION_WRT_ECEF1' / LinearAdapter(50000, BitsInteger(32)), 'REFS__POSITION_WRT_ECEF2' / LinearAdapter(50000, BitsInteger(32)), 'REFS__POSITION_WRT_ECEF3' / LinearAdapter(50000, BitsInteger(32)), 'REFS__VELOCITY_WRT_ECI1' / LinearAdapter(200000000, BitsInteger(32)), 'REFS__VELOCITY_WRT_ECI2' / LinearAdapter(200000000, BitsInteger(32)), 'REFS__VELOCITY_WRT_ECI3' / LinearAdapter(200000000, BitsInteger(32)), 'REFS__VELOCITY_WRT_ECEF1' / LinearAdapter(200000000, BitsInteger(32)), 'REFS__VELOCITY_WRT_ECEF2' / LinearAdapter(200000000, BitsInteger(32)), 'REFS__VELOCITY_WRT_ECEF3' / LinearAdapter(200000000, BitsInteger(32)), 'REFS__NADIR_VECTOR_BODY1' / LinearAdapter(25000, BitsInteger(16)), 'REFS__NADIR_VECTOR_BODY2' / LinearAdapter(25000, BitsInteger(16)), 'REFS__NADIR_VECTOR_BODY3' / LinearAdapter(25000, BitsInteger(16)), 'REFS__MODELED_SUN_VECTOR_BODY1' / LinearAdapter(25000, BitsInteger(16)), 'REFS__MODELED_SUN_VECTOR_BODY2' / LinearAdapter(25000, BitsInteger(16)), 'REFS__MODELED_SUN_VECTOR_BODY3' / LinearAdapter(25000, BitsInteger(16)), 'REFS__MOON_VECTOR_BODY1' / LinearAdapter(25000, BitsInteger(16)), 'REFS__MOON_VECTOR_BODY2' / LinearAdapter(25000, BitsInteger(16)), 'REFS__MOON_VECTOR_BODY3' / LinearAdapter(25000, BitsInteger(16)), 'REFS__MAG_MODEL_VECTOR_ECI1' / LinearAdapter(200000000, BitsInteger(16)), 'REFS__MAG_MODEL_VECTOR_ECI2' / LinearAdapter(200000000, BitsInteger(16)), 'REFS__MAG_MODEL_VECTOR_ECI3' / LinearAdapter(200000000, BitsInteger(16)), 'REFS__MAG_MODEL_VECTOR_BODY1' / LinearAdapter(200000000, BitsInteger(16)), 'REFS__MAG_MODEL_VECTOR_BODY2' / LinearAdapter(200000000, BitsInteger(16)), 'REFS__MAG_MODEL_VECTOR_BODY3' / LinearAdapter(200000000, BitsInteger(16)), 'REFS__SUN_MODEL_VECTOR_ECI1' / LinearAdapter(25000, BitsInteger(16)), 'REFS__SUN_MODEL_VECTOR_ECI2' / LinearAdapter(25000, BitsInteger(16)), 'REFS__SUN_MODEL_VECTOR_ECI3' / LinearAdapter(25000, BitsInteger(16)), 'REFS__MOON_MODEL_VECTOR_ECI1' / LinearAdapter(25000, BitsInteger(16)), 'REFS__MOON_MODEL_VECTOR_ECI2' / LinearAdapter(25000, BitsInteger(16)), 'REFS__MOON_MODEL_VECTOR_ECI3' / LinearAdapter(25000, BitsInteger(16)), 'REFS__ORBIT_METHOD' / Enum(BitsInteger(8), KEPLER=0, GRAVITY_POINT=1, GRAVITY_J2=2, GRAVITY_HARMONIC=3, SGP4=4, EXTERN_ACC_ONLY=5, POLYNOMIAL=6, GEONS=7), 'REFS__REFS_VALID' / Enum(BitsInteger(8), YES=1, NO=0), 'REFS__ESM_VALID' / Enum(BitsInteger(8), YES=1, NO=0), 'REFS__RUN_LOW_RATE_TASK' / Enum(BitsInteger(8), YES=1, NO=0), 'REFS__AUTO_GPS_USAGE' / Enum(BitsInteger(8), YES=1, NO=0), ) ATT_DET = BitStruct( 'ATT_DET__Q_BODY_WRT_ECI1' / LinearAdapter(2000000040, BitsInteger(32)), 'ATT_DET__Q_BODY_WRT_ECI2' / LinearAdapter(2000000040, BitsInteger(32)), 'ATT_DET__Q_BODY_WRT_ECI3' / LinearAdapter(2000000040, BitsInteger(32)), 'ATT_DET__Q_BODY_WRT_ECI4' / LinearAdapter(2000000040, BitsInteger(32)), 'ATT_DET__RESIDUAL1' / LinearAdapter(2000000040, BitsInteger(32)), 'ATT_DET__RESIDUAL2' / LinearAdapter(2000000040, BitsInteger(32)), 'ATT_DET__RESIDUAL3' / LinearAdapter(2000000040, BitsInteger(32)), 'ATT_DET__BODY_RATE1_RPM' / LinearAdapter(20943951, BitsInteger(32)), 'ATT_DET__BODY_RATE2_RPM' / LinearAdapter(20943951, BitsInteger(32)), 'ATT_DET__BODY_RATE3_RPM' / LinearAdapter(20943951, BitsInteger(32)), 'ATT_DET__GYRO_BIAS_EST1_RPM' / LinearAdapter(209439.5, BitsInteger(16)), 'ATT_DET__GYRO_BIAS_EST2_RPM' / LinearAdapter(209439.5, BitsInteger(16)), 'ATT_DET__GYRO_BIAS_EST3_RPM' / LinearAdapter(209439.5, BitsInteger(16)), 'ATT_DET__ATTITUDE_ALG' / Enum(BitsInteger(8), RAW=1, FIXED_GAIN_NO_BIAS=2, FIXED_GAIN=3, MEKF=4), 'ATT_DET__GOOD_ATT_RATE_TIMER' / BitsInteger(32), 'ATT_DET__BAD_ATT_TIMER' / BitsInteger(32), 'ATT_DET__BAD_RATE_TIMER' / BitsInteger(32), 'ATT_DET__REINIT_COUNT' / BitsInteger(32), 'ATT_DET__ATTITUDE_VALID' / Enum(BitsInteger(8), YES=1, NO=0), 'ATT_DET__MEAS_ATT_VALID' / Enum(BitsInteger(8), YES=1, NO=0), 'ATT_DET__MEAS_RATE_VALID' / Enum(BitsInteger(8), YES=1, NO=0), 'ATT_DET__TRACKER_USED' / BitsInteger(8), 'ATT_DET__TRACKER_PREFERENCE' / BitsInteger(8), ) ATT_CMD = BitStruct( 'ATT_CMD__CMD_Q_BODY_WRT_ECI1' / LinearAdapter(2e9, BitsInteger(32)), 'ATT_CMD__CMD_Q_BODY_WRT_ECI2' / LinearAdapter(2e9, BitsInteger(32)), 'ATT_CMD__CMD_Q_BODY_WRT_ECI3' / LinearAdapter(2e9, BitsInteger(32)), 'ATT_CMD__CMD_Q_BODY_WRT_ECI4' / LinearAdapter(2e9, BitsInteger(32)), 'ATT_CMD__CMD_BODY_RATE1_RPM' / LinearAdapter(20943951, BitsInteger(32)), 'ATT_CMD__CMD_BODY_RATE2_RPM' / LinearAdapter(20943951, BitsInteger(32)), 'ATT_CMD__CMD_BODY_RATE3_RPM' / LinearAdapter(20943951, BitsInteger(32)), 'ATT_CMD__CMD_BODY_ACCEL1' / LinearAdapter(200000000, BitsInteger(32)), 'ATT_CMD__CMD_BODY_ACCEL2' / LinearAdapter(200000000, BitsInteger(32)), 'ATT_CMD__CMD_BODY_ACCEL3' / LinearAdapter(200000000, BitsInteger(32)), 'ATT_CMD__COMMANDED_SUN1' / LinearAdapter(25000, BitsInteger(16)), 'ATT_CMD__COMMANDED_SUN2' / LinearAdapter(25000, BitsInteger(16)), 'ATT_CMD__COMMANDED_SUN3' / LinearAdapter(25000, BitsInteger(16)), 'ATT_CMD__HR_CYCLE_SAFE_MODE' / BitsInteger(32), 'ATT_CMD__ROTISSERIE_RATE_RPM' / LinearAdapter(2617.9939434413427, BitsInteger(16)), 'ATT_CMD__ADCS_MODE' / Enum(BitsInteger(8), SUN_POINT=0, FINE_REF_POINT=1, SEARCH_INIT=2, SEARCHING=3, WAITING=4, CONVERGING=5, ON_SUN=6, NOT_ACTIVE=7), 'ATT_CMD__SAFE_MODE_REASON' / Enum(BitsInteger(8), BOOT=1, COMMAND=2, ATTITUDE_INVALID=4, TIME_INVALID=8, ATTITUDE_TIME_INVALID=12, REFS_INVALID=16), 'ATT_CMD__RECOMMEND_SUN_POINT' / Enum(BitsInteger(8), YES=1, NO=0), ) RW_DRIVE = BitStruct( 'RW_DRIVE__THETA_ERR1' / LinearAdapter(1000, BitsInteger(16)), 'RW_DRIVE__THETA_ERR2' / LinearAdapter(1000, BitsInteger(16)), 'RW_DRIVE__THETA_ERR3' / LinearAdapter(1000, BitsInteger(16)), 'RW_DRIVE__DRAG_EST1' / LinearAdapter(100, BitsInteger(16)), 'RW_DRIVE__DRAG_EST2' / LinearAdapter(100, BitsInteger(16)), 'RW_DRIVE__DRAG_EST3' / LinearAdapter(100, BitsInteger(16)), 'RW_DRIVE__OBS_ANGLE_RESIDUAL1' / LinearAdapter(4000, BitsInteger(16)), 'RW_DRIVE__OBS_ANGLE_RESIDUAL2' / LinearAdapter(4000, BitsInteger(16)), 'RW_DRIVE__OBS_ANGLE_RESIDUAL3' / LinearAdapter(4000, BitsInteger(16)), 'RW_DRIVE__FILTERED_SPEED_RPM1' / LinearAdapter(2.5, BitsInteger(16)), 'RW_DRIVE__FILTERED_SPEED_RPM2' / LinearAdapter(2.5, BitsInteger(16)), 'RW_DRIVE__FILTERED_SPEED_RPM3' / LinearAdapter(2.5, BitsInteger(16)), 'RW_DRIVE__SPEED_CMD_RPM1' / LinearAdapter(2.5, BitsInteger(16)), 'RW_DRIVE__SPEED_CMD_RPM2' / LinearAdapter(2.5, BitsInteger(16)), 'RW_DRIVE__SPEED_CMD_RPM3' / LinearAdapter(2.5, BitsInteger(16)), 'RW_DRIVE__TORQUE_CMD1' / LinearAdapter(10000000, BitsInteger(16)), 'RW_DRIVE__TORQUE_CMD2' / LinearAdapter(10000000, BitsInteger(16)), 'RW_DRIVE__TORQUE_CMD3' / LinearAdapter(10000000, BitsInteger(16)), 'RW_DRIVE__MEAS_WHEEL_CURRENT1' / LinearAdapter(1000, BitsInteger(16)), 'RW_DRIVE__MEAS_WHEEL_CURRENT2' / LinearAdapter(1000, BitsInteger(16)), 'RW_DRIVE__MEAS_WHEEL_CURRENT3' / LinearAdapter(1000, BitsInteger(16)), 'RW_DRIVE__RW_TIME' / BitsInteger(32), 'RW_DRIVE__PWM_COUNTS1' / BitsInteger(32), 'RW_DRIVE__PWM_COUNTS2' / BitsInteger(32), 'RW_DRIVE__PWM_COUNTS3' / BitsInteger(32), 'RW_DRIVE__PW_MCMD_CT1' / BitsInteger(32), 'RW_DRIVE__PW_MCMD_CT2' / BitsInteger(32), 'RW_DRIVE__PW_MCMD_CT3' / BitsInteger(32), 'RW_DRIVE__MOTOR_TACH_COUNTS1' / BitsInteger(16), 'RW_DRIVE__MOTOR_TACH_COUNTS2' / BitsInteger(16), 'RW_DRIVE__MOTOR_TACH_COUNTS3' / BitsInteger(16), 'RW_DRIVE__SENSOR_CAL_TIMER1' / BitsInteger(16), 'RW_DRIVE__SENSOR_CAL_TIMER2' / BitsInteger(16), 'RW_DRIVE__SENSOR_CAL_TIMER3' / BitsInteger(16), 'RW_DRIVE__OPERATING_MODE1' / Enum(BitsInteger(8), IDLE=0, INT=1, EXT=2), 'RW_DRIVE__OPERATING_MODE2' / Enum(BitsInteger(8), IDLE=0, INT=1, EXT=2), 'RW_DRIVE__OPERATING_MODE3' / Enum(BitsInteger(8), IDLE=0, INT=1, EXT=2), 'RW_DRIVE__CONTROL_MODE1' / Enum(BitsInteger(8), TRQ=0, SPD=1, PWM=2, ISOLATE=3), 'RW_DRIVE__CONTROL_MODE2' / Enum(BitsInteger(8), TRQ=0, SPD=1, PWM=2, ISOLATE=3), 'RW_DRIVE__CONTROL_MODE3' / Enum(BitsInteger(8), TRQ=0, SPD=1, PWM=2, ISOLATE=3), 'RW_DRIVE__MOTOR_FAULT1' / Enum(BitsInteger(8), FAULT=0, OK=1), 'RW_DRIVE__MOTOR_FAULT2' / Enum(BitsInteger(8), FAULT=0, OK=1), 'RW_DRIVE__MOTOR_FAULT3' / Enum(BitsInteger(8), FAULT=0, OK=1), 'RW_DRIVE__MOTOR_HALL_STATE1' / BitsInteger(8), 'RW_DRIVE__MOTOR_HALL_STATE2' / BitsInteger(8), 'RW_DRIVE__MOTOR_HALL_STATE3' / BitsInteger(8), 'RW_DRIVE__PW_MENABLE1' / Enum(BitsInteger(8), YES=1, NO=0), 'RW_DRIVE__PW_MENABLE2' / Enum(BitsInteger(8), YES=1, NO=0), 'RW_DRIVE__PW_MENABLE3' / Enum(BitsInteger(8), YES=1, NO=0), 'RW_DRIVE__PW_MDIRECTION1' / Enum(BitsInteger(8), POS=0, NEG=1), 'RW_DRIVE__PW_MDIRECTION2' / Enum(BitsInteger(8), POS=0, NEG=1), 'RW_DRIVE__PW_MDIRECTION3' / Enum(BitsInteger(8), POS=0, NEG=1), 'RW_DRIVE__PW_MCMD_DIR1' / Enum(BitsInteger(8), POS=0, NEG=1), 'RW_DRIVE__PW_MCMD_DIR2' / Enum(BitsInteger(8), POS=0, NEG=1), 'RW_DRIVE__PW_MCMD_DIR3' / Enum(BitsInteger(8), POS=0, NEG=1), 'RW_DRIVE__RW_TEST_MODE' / Enum(BitsInteger(8), OFF=0, ON=1), ) TRACKER = BitStruct( 'TRACKER__ATTITUDE_ST1' / LinearAdapter(2048000000, BitsInteger(32)), 'TRACKER__ATTITUDE_ST2' / LinearAdapter(2048000000, BitsInteger(32)), 'TRACKER__ATTITUDE_ST3' / LinearAdapter(2048000000, BitsInteger(32)), 'TRACKER__ATTITUDE_ST4' / LinearAdapter(2048000000, BitsInteger(32)), 'TRACKER__RATE_EST1_RPM' / LinearAdapter(41887.9, BitsInteger(16)), 'TRACKER__RATE_EST2_RPM' / LinearAdapter(41887.9, BitsInteger(16)), 'TRACKER__RATE_EST3_RPM' / LinearAdapter(41887.9, BitsInteger(16)), 'TRACKER__RIGHT_ASC' / LinearAdapter(181.81818181818184, BitsInteger(16)), 'TRACKER__DECLINATION' / LinearAdapter(181.8181818181818, BitsInteger(16)), 'TRACKER__ROLL' / LinearAdapter(181.81818181818184, BitsInteger(16)), 'TRACKER__ATT_COVARIANCE1' / LinearAdapter(6.8e13, BitsInteger(32)), 'TRACKER__ATT_COVARIANCE2' / LinearAdapter(6.8e13, BitsInteger(32)), 'TRACKER__ATT_COVARIANCE3' / LinearAdapter(6.8e13, BitsInteger(32)), 'TRACKER__ATT_COVARIANCE4' / LinearAdapter(6.8e13, BitsInteger(32)), 'TRACKER__ATT_COVARIANCE5' / LinearAdapter(6.8e13, BitsInteger(32)), 'TRACKER__ATT_COVARIANCE6' / LinearAdapter(6.8e13, BitsInteger(32)), 'TRACKER__MAXIMUM_RESIDUAL' / BitsInteger(8), 'TRACKER__MAXIMUM_RESIDUAL_INIT' / BitsInteger(8), 'TRACKER__ANALOG_GAIN_EU' / LinearAdapter(2.0, BitsInteger(8)), 'TRACKER__MAG_BRIGHT' / LinearAdapter(25, BitsInteger(8)), 'TRACKER__MAG_DIM' / LinearAdapter(25, BitsInteger(8)), 'TRACKER__PEAK_NOISE_ALL_TRK_BLKS' / LinearAdapter(0.25, BitsInteger(8)), 'TRACKER__PEAK_BCKGND_ALL_TRK_BLKS' / LinearAdapter(0.25, BitsInteger(8)), 'TRACKER__MEDIAN_NOISE_ALL_TRK_BLKS' / LinearAdapter(0.25, BitsInteger(8)), 'TRACKER__MEDIAN_BCKGND_ALL_TRK_BLKS' / LinearAdapter(0.25, BitsInteger(8)), 'TRACKER__FOV_RATE_X_RPM' / LinearAdapter(20943.95, BitsInteger(16)), 'TRACKER__FOV_RATE_Y_RPM' / LinearAdapter(20943.95, BitsInteger(16)), 'TRACKER__OPERATING_MODE' / Enum(BitsInteger(8), IDLE=0, INITIALIZE=1, STARID=2, TRACK=3, PHOTO=4, CAL=5), 'TRACKER__STAR_ID_STEP' / Enum(BitsInteger(8), IDLE=0, INITIALIZE=1, WAITING_FOR_IMAGE1=2, WAITING_FOR_IMAGE2=3, CALCULATE_RATE=4, MAKE_UNIT_VECTORS=5, AWAITING_TRISTAR=6, OK_FOUND_4=7, OK_FOUND_3=8, TIME_OUT=9, SPARE=10, NO_MATCH=11), 'TRACKER__ID_STATUS' / Enum(BitsInteger(8), IDLE=0, INITIALIZE=1, WAITING_FOR_IMAGE1=2, WAITING_FOR_IMAGE2=3, CALCULATE_RATE=4, MAKE_UNIT_VECTORS=5, AWAITING_TRISTAR=6, OK_FOUND_4=7, OK_FOUND_3=8, TIME_OUT=9, SPARE=10, NO_MATCH=11), 'TRACKER__ID_STATUS_SAVE' / Enum(BitsInteger(8), IDLE=0, INITIALIZE=1, WAITING_FOR_IMAGE1=2, WAITING_FOR_IMAGE2=3, CALCULATE_RATE=4, MAKE_UNIT_VECTORS=5, AWAITING_TRISTAR=6, OK_FOUND_4=7, OK_FOUND_3=8, TIME_OUT=9, SPARE=10, NO_MATCH=11), 'TRACKER__ATT_STATUS' / Enum(BitsInteger(8), OK=0, PENDING=1, BAD=2, TOO_FEW_STARS=3, QUEST_FAILED=4, RESIDUALS_TOO_HIGH=5, TOO_CLOSE_TO_EDGE=6, PIX_AMP_TOO_LOW=7, PIX_AMP_TOO_HIGH=8, BACKGND_TOO_HIGH=9, TRACK_FAILURE=10, PIX_SUM_TOO_LOW=11, UNUSED=12, TOO_DIM_FOR_STARID=13, TOO_MANY_GROUPS=14, TOO_FEW_GROUPS=15, CHANNEL_DISABLED=16, TRACK_BLK_OVERLAP=17, OK_FOR_STARID=18, TOO_CLOSE_TO_OTHER=19, TOO_MANY_PIXELS=20, TOO_MANY_COLUMNS=21, TOO_MANY_ROWS=22, OPEN=23, CLOSED=24, RATE_TOO_HIGH=25), 'TRACKER__RATE_EST_STATUS' / Enum(BitsInteger(8), OK=0, PENDING=1, BAD=2, TOO_FEW_STARS=3, QUEST_FAILED=4, RESIDUALS_TOO_HIGH=5, TOO_CLOSE_TO_EDGE=6, PIX_AMP_TOO_LOW=7, PIX_AMP_TOO_HIGH=8, BACKGND_TOO_HIGH=9, TRACK_FAILURE=10, PIX_SUM_TOO_LOW=11, UNUSED=12, TOO_DIM_FOR_STARID=13, TOO_MANY_GROUPS=14, TOO_FEW_GROUPS=15, CHANNEL_DISABLED=16, TRACK_BLK_OVERLAP=17, OK_FOR_STARID=18, TOO_CLOSE_TO_OTHER=19, TOO_MANY_PIXELS=20, TOO_MANY_COLUMNS=21, TOO_MANY_ROWS=22, OPEN=23, CLOSED=24, RATE_TOO_HIGH=25), 'TRACKER__RATE_AID_STATUS' / Enum(BitsInteger(8), OK=0, PENDING=1, BAD=2, TOO_FEW_STARS=3, QUEST_FAILED=4, RESIDUALS_TOO_HIGH=5, TOO_CLOSE_TO_EDGE=6, PIX_AMP_TOO_LOW=7, PIX_AMP_TOO_HIGH=8, BACKGND_TOO_HIGH=9, TRACK_FAILURE=10, PIX_SUM_TOO_LOW=11, UNUSED=12, TOO_DIM_FOR_STARID=13, TOO_MANY_GROUPS=14, TOO_FEW_GROUPS=15, CHANNEL_DISABLED=16, TRACK_BLK_OVERLAP=17, OK_FOR_STARID=18, TOO_CLOSE_TO_OTHER=19, TOO_MANY_PIXELS=20, TOO_MANY_COLUMNS=21, TOO_MANY_ROWS=22, OPEN=23, CLOSED=24, RATE_TOO_HIGH=25), 'TRACKER__VEL_AID_STATUS' / Enum(BitsInteger(8), OK=0, PENDING=1, BAD=2, TOO_FEW_STARS=3, QUEST_FAILED=4, RESIDUALS_TOO_HIGH=5, TOO_CLOSE_TO_EDGE=6, PIX_AMP_TOO_LOW=7, PIX_AMP_TOO_HIGH=8, BACKGND_TOO_HIGH=9, TRACK_FAILURE=10, PIX_SUM_TOO_LOW=11, UNUSED=12, TOO_DIM_FOR_STARID=13, TOO_MANY_GROUPS=14, TOO_FEW_GROUPS=15, CHANNEL_DISABLED=16, TRACK_BLK_OVERLAP=17, OK_FOR_STARID=18, TOO_CLOSE_TO_OTHER=19, TOO_MANY_PIXELS=20, TOO_MANY_COLUMNS=21, TOO_MANY_ROWS=22, OPEN=23, CLOSED=24, RATE_TOO_HIGH=25), 'TRACKER__ATT_AID_STATUS' / Enum(BitsInteger(8), OK=0, PENDING=1, BAD=2, TOO_FEW_STARS=3, QUEST_FAILED=4, RESIDUALS_TOO_HIGH=5, TOO_CLOSE_TO_EDGE=6, PIX_AMP_TOO_LOW=7, PIX_AMP_TOO_HIGH=8, BACKGND_TOO_HIGH=9, TRACK_FAILURE=10, PIX_SUM_TOO_LOW=11, UNUSED=12, TOO_DIM_FOR_STARID=13, TOO_MANY_GROUPS=14, TOO_FEW_GROUPS=15, CHANNEL_DISABLED=16, TRACK_BLK_OVERLAP=17, OK_FOR_STARID=18, TOO_CLOSE_TO_OTHER=19, TOO_MANY_PIXELS=20, TOO_MANY_COLUMNS=21, TOO_MANY_ROWS=22, OPEN=23, CLOSED=24, RATE_TOO_HIGH=25), 'TRACKER__VECTOR_AID_STATUS' / Enum(BitsInteger(8), OK=0, PENDING=1, BAD=2, TOO_FEW_STARS=3, QUEST_FAILED=4, RESIDUALS_TOO_HIGH=5, TOO_CLOSE_TO_EDGE=6, PIX_AMP_TOO_LOW=7, PIX_AMP_TOO_HIGH=8, BACKGND_TOO_HIGH=9, TRACK_FAILURE=10, PIX_SUM_TOO_LOW=11, UNUSED=12, TOO_DIM_FOR_STARID=13, TOO_MANY_GROUPS=14, TOO_FEW_GROUPS=15, CHANNEL_DISABLED=16, TRACK_BLK_OVERLAP=17, OK_FOR_STARID=18, TOO_CLOSE_TO_OTHER=19, TOO_MANY_PIXELS=20, TOO_MANY_COLUMNS=21, TOO_MANY_ROWS=22, OPEN=23, CLOSED=24, RATE_TOO_HIGH=25), 'TRACKER__ATT_TIME_TAG' / BitsInteger(32), 'TRACKER__NUM_ID_PATTERNS_TRIED' / BitsInteger(32), 'TRACKER__PIXEL_AMP_THRESHOLD' / LinearAdapter(0.25, BitsInteger(8)), 'TRACKER__AMPLITUDE_OFFSET' / BitsInteger(8), 'TRACKER__CURRENT_TINT' / BitsInteger(32), 'TRACKER__VIDEO_ADDRESS' / BitsInteger(32), 'TRACKER__MAXIMUM_RESIDUAL_ID' / BitsInteger(16), 'TRACKER__MAXIMUM_RESIDUAL_ID_INIT' / BitsInteger(16), 'TRACKER__MAX_ROW_BCKGND_POST_COMP' / BitsInteger(16), 'TRACKER__NUM_PIX_GROUPS_FOR_ID' / BitsInteger(8), 'TRACKER__ID_TOLERANCE' / BitsInteger(8), 'TRACKER__NUM_OF_ATT_LOOPS' / BitsInteger(8), 'TRACKER__NUM_ATTITUDE_STARS' / BitsInteger(8), 'TRACKER__NUM_STARS_HIGH_RESIDUAL' / BitsInteger(8), 'TRACKER__AUTO_BLACK_ENABLE' / Enum(BitsInteger(8), YES=1, NO=0), 'TRACKER__BLACK_LEVEL' / BitsInteger(8), 'TRACKER__NUM_STARS_ON_FOV' / BitsInteger(8), 'TRACKER__NUM_TRACK_BLOCKS_ISSUED' / BitsInteger(8), 'TRACKER__NUM_TRACK_STARS' / BitsInteger(8), 'TRACKER__NUM_ID_STARS' / BitsInteger(8), 'TRACKER__FS_WCOUNTER' / BitsInteger(8), 'TRACKER__AUTO_TRACK' / Enum(BitsInteger(8), YES=1, NO=0), 'TRACKER__AUTO_INTEGRATION' / Enum(BitsInteger(8), YES=1, NO=0), 'TRACKER__AUTO_GAIN' / Enum(BitsInteger(8), YES=1, NO=0), 'TRACKER__TEST_MODE' / BitsInteger(8), 'TRACKER__FPGA_DET_TIMEOUT' / Enum(BitsInteger(8), YES=1, NO=0), 'TRACKER__STORE_SEQ_IMAGES' / Enum(BitsInteger(8), YES=1, NO=0), 'TRACKER__TRACK_REF_AVAILABLE' / Enum(BitsInteger(8), YES=1, NO=0), 'TRACKER__IMAGE_INDEX' / BitsInteger(8), 'TRACKER__REF_INDEX' / BitsInteger(8), 'TRACKER__NUM_BRIGHT_STARS' / BitsInteger(8), 'TRACKER__IMAGE_FILTER_ENABLED' / BitsInteger(8), ) ATT_CTRL = BitStruct( 'ATT_CTRL__POSITION_ERROR1' / LinearAdapter(5e8, BitsInteger(32)), 'ATT_CTRL__POSITION_ERROR2' / LinearAdapter(5e8, BitsInteger(32)), 'ATT_CTRL__POSITION_ERROR3' / LinearAdapter(5e8, BitsInteger(32)), 'ATT_CTRL__RATE_ERROR1_RPM' / LinearAdapter(20943951, BitsInteger(32)), 'ATT_CTRL__RATE_ERROR2_RPM' / LinearAdapter(20943951, BitsInteger(32)), 'ATT_CTRL__RATE_ERROR3_RPM' / LinearAdapter(20943951, BitsInteger(32)), 'ATT_CTRL__INTEGRAL_ERROR1' / LinearAdapter(100000, BitsInteger(16)), 'ATT_CTRL__INTEGRAL_ERROR2' / LinearAdapter(100000, BitsInteger(16)), 'ATT_CTRL__INTEGRAL_ERROR3' / LinearAdapter(100000, BitsInteger(16)), 'ATT_CTRL__MAX_RATE1_RPM' / LinearAdapter(523.5988, BitsInteger(16)), 'ATT_CTRL__MAX_RATE2_RPM' / LinearAdapter(523.5988, BitsInteger(16)), 'ATT_CTRL__MAX_RATE3_RPM' / LinearAdapter(523.5988, BitsInteger(16)), 'ATT_CTRL__MAX_ACCEL1' / LinearAdapter(5000, BitsInteger(16)), 'ATT_CTRL__MAX_ACCEL2' / LinearAdapter(5000, BitsInteger(16)), 'ATT_CTRL__MAX_ACCEL3' / LinearAdapter(5000, BitsInteger(16)), 'ATT_CTRL__FEEDBACK_CTRL_TORQ1' / LinearAdapter(5000000, BitsInteger(16)), 'ATT_CTRL__FEEDBACK_CTRL_TORQ2' / LinearAdapter(5000000, BitsInteger(16)), 'ATT_CTRL__FEEDBACK_CTRL_TORQ3' / LinearAdapter(5000000, BitsInteger(16)), 'ATT_CTRL__CTRL_TORQUE1' / LinearAdapter(5000000, BitsInteger(16)), 'ATT_CTRL__CTRL_TORQUE2' / LinearAdapter(5000000, BitsInteger(16)), 'ATT_CTRL__CTRL_TORQUE3' / LinearAdapter(5000000, BitsInteger(16)), 'ATT_CTRL__TIME_INTO_SEARCH' / BitsInteger(16), 'ATT_CTRL__WAIT_TIMER' / BitsInteger(16), 'ATT_CTRL__SUN_POINT_ANGLE_ERROR' / LinearAdapter(333.3334, BitsInteger(16)), 'ATT_CTRL__SUN_POINT_STATE' / Enum(BitsInteger(8), SUN_POINT=0, FINE_REF_POINT=1, SEARCH_INIT=2, SEARCHING=3, WAITING=4, CONVERGING=5, ON_SUN=6, NOT_ACTIVE=7), 'ATT_CTRL__GAIN_INDEX' / BitsInteger(8), 'ATT_CTRL__MOMENTUM_TOO_HIGH' / Enum(BitsInteger(8), YES=1, NO=0), ) MOMENTUM = BitStruct( 'MOMENTUM__MOMENTUM_VECTOR_BODY1' / LinearAdapter(5000, BitsInteger(16)), 'MOMENTUM__MOMENTUM_VECTOR_BODY2' / LinearAdapter(5000, BitsInteger(16)), 'MOMENTUM__MOMENTUM_VECTOR_BODY3' / LinearAdapter(5000, BitsInteger(16)), 'MOMENTUM__WHEEL_MOMENTUM_BODY1' / LinearAdapter(5000, BitsInteger(16)), 'MOMENTUM__WHEEL_MOMENTUM_BODY2' / LinearAdapter(5000, BitsInteger(16)), 'MOMENTUM__WHEEL_MOMENTUM_BODY3' / LinearAdapter(5000, BitsInteger(16)), 'MOMENTUM__BUS_MOMENTUM_BODY1' / LinearAdapter(5000, BitsInteger(16)), 'MOMENTUM__BUS_MOMENTUM_BODY2' / LinearAdapter(5000, BitsInteger(16)), 'MOMENTUM__BUS_MOMENTUM_BODY3' / LinearAdapter(5000, BitsInteger(16)), 'MOMENTUM__CMD_MOMENTUM_INERTIAL1' / LinearAdapter(5e5, BitsInteger(16)), 'MOMENTUM__CMD_MOMENTUM_INERTIAL2' / LinearAdapter(5e5, BitsInteger(16)), 'MOMENTUM__CMD_MOMENTUM_INERTIAL3' / LinearAdapter(5e5, BitsInteger(16)), 'MOMENTUM__DUTY_CYCLE1' / BitsInteger(8), 'MOMENTUM__DUTY_CYCLE2' / BitsInteger(8), 'MOMENTUM__DUTY_CYCLE3' / BitsInteger(8), 'MOMENTUM__CYCLE_AVG_MAGNET_TORQUE1' / LinearAdapter(5e7, BitsInteger(16)), 'MOMENTUM__CYCLE_AVG_MAGNET_TORQUE2' / LinearAdapter(5e7, BitsInteger(16)), 'MOMENTUM__CYCLE_AVG_MAGNET_TORQUE3' / LinearAdapter(5e7, BitsInteger(16)), 'MOMENTUM__TORQUE_ROD_MODE1' / Enum(BitsInteger(8), OFF=0, ON_POS=1, ON_NEG=2, AUTO=3, MEASURED=4, MODELED=5, DELAYED_AUTO=6, NO_FIELD_VALID=7), 'MOMENTUM__TORQUE_ROD_MODE2' / Enum(BitsInteger(8), OFF=0, ON_POS=1, ON_NEG=2, AUTO=3, MEASURED=4, MODELED=5, DELAYED_AUTO=6, NO_FIELD_VALID=7), 'MOMENTUM__TORQUE_ROD_MODE3' / Enum(BitsInteger(8), OFF=0, ON_POS=1, ON_NEG=2, AUTO=3, MEASURED=4, MODELED=5, DELAYED_AUTO=6, NO_FIELD_VALID=7), 'MOMENTUM__MAG_SOURCE_SETTING' / Enum(BitsInteger(8), OFF=0, ON_POS=1, ON_NEG=2, AUTO=3, MEASURED=4, MODELED=5, DELAYED_AUTO=6, NO_FIELD_VALID=7), 'MOMENTUM__MAG_SOURCE_USED' / Enum(BitsInteger(8), OFF=0, ON_POS=1, ON_NEG=2, AUTO=3, MEASURED=4, MODELED=5, DELAYED_AUTO=6, NO_FIELD_VALID=7), 'MOMENTUM__MOMENTUM_VECTOR_VALID' / Enum(BitsInteger(8), YES=1, NO=0), 'MOMENTUM__MOMENTUM_VECTOR_ENABLED' / Enum(BitsInteger(8), YES=1, NO=0), 'MOMENTUM__TORQUE_ROD_ENABLE1' / Enum(BitsInteger(8), DS=0, EN=1), 'MOMENTUM__TORQUE_ROD_ENABLE2' / Enum(BitsInteger(8), DS=0, EN=1), 'MOMENTUM__TORQUE_ROD_ENABLE3' / Enum(BitsInteger(8), DS=0, EN=1), 'MOMENTUM__TORQUE_ROD_DIRECTION1' / Enum(BitsInteger(8), POS=0, NEG=1), 'MOMENTUM__TORQUE_ROD_DIRECTION2' / Enum(BitsInteger(8), POS=0, NEG=1), 'MOMENTUM__TORQUE_ROD_DIRECTION3' / Enum(BitsInteger(8), POS=0, NEG=1), ) CSS = BitStruct( 'CSS__SUN_VECTOR_BODY1' / LinearAdapter(10000, BitsInteger(16)), 'CSS__SUN_VECTOR_BODY2' / LinearAdapter(10000, BitsInteger(16)), 'CSS__SUN_VECTOR_BODY3' / LinearAdapter(10000, BitsInteger(16)), 'CSS__SUN_VECTOR_STATUS' / Enum(BitsInteger(8), GOOD=0, COARSE=1, BAD=2), 'CSS__NUM_DIODES_USED1' / BitsInteger(8), 'CSS__NUM_DIODES_USED2' / BitsInteger(8), 'CSS__NUM_DIODES_USED3' / BitsInteger(8), 'CSS__RAW_SUN_SENSOR_DATA1' / BitsInteger(16), 'CSS__RAW_SUN_SENSOR_DATA2' / BitsInteger(16), 'CSS__RAW_SUN_SENSOR_DATA3' / BitsInteger(16), 'CSS__RAW_SUN_SENSOR_DATA4' / BitsInteger(16), 'CSS__RAW_SUN_SENSOR_DATA5' / BitsInteger(16), 'CSS__RAW_SUN_SENSOR_DATA6' / BitsInteger(16), 'CSS__RAW_SUN_SENSOR_DATA7' / BitsInteger(16), 'CSS__RAW_SUN_SENSOR_DATA8' / BitsInteger(16), 'CSS__RAW_SUN_SENSOR_DATA9' / BitsInteger(16), 'CSS__RAW_SUN_SENSOR_DATA10' / BitsInteger(16), 'CSS__RAW_SUN_SENSOR_DATA11' / BitsInteger(16), 'CSS__RAW_SUN_SENSOR_DATA12' / BitsInteger(16), 'CSS__SUN_VECTOR_ENABLED' / Enum(BitsInteger(8), YES=1, NO=0), 'CSS__SUN_SENSOR_USED' / BitsInteger(8), 'CSS__CSS_TEST_MODE' / Enum(BitsInteger(8), YES=1, NO=0), ) MAG = BitStruct( 'MAG__MAG_VECTOR_BODY1' / LinearAdapter(200000000, BitsInteger(16)), 'MAG__MAG_VECTOR_BODY2' / LinearAdapter(200000000, BitsInteger(16)), 'MAG__MAG_VECTOR_BODY3' / LinearAdapter(200000000, BitsInteger(16)), 'MAG__RAW_MAGNETOMETER_DATA1' / BitsInteger(16), 'MAG__RAW_MAGNETOMETER_DATA2' / BitsInteger(16), 'MAG__RAW_MAGNETOMETER_DATA3' / BitsInteger(16), 'MAG__RAW_MAGNETOMETER_DATA4' / BitsInteger(16), 'MAG__RAW_MAGNETOMETER_DATA5' / BitsInteger(16), 'MAG__RAW_MAGNETOMETER_DATA6' / BitsInteger(16), 'MAG__RAW_MAGNETOMETER_DATA7' / BitsInteger(16), 'MAG__RAW_MAGNETOMETER_DATA8' / BitsInteger(16), 'MAG__RAW_MAGNETOMETER_DATA9' / BitsInteger(16), 'MAG__RAW_MAGNETOMETER_DATA10' / BitsInteger(16), 'MAG__RAW_MAGNETOMETER_DATA11' / BitsInteger(16), 'MAG__RAW_MAGNETOMETER_DATA12' / BitsInteger(16), 'MAG__MAG_VECTOR_VALID' / Enum(BitsInteger(8), YES=1, NO=0), 'MAG__MAG_SENSOR_USED' / BitsInteger(8), 'MAG__MAG_TEST_MODE' / Enum(BitsInteger(8), YES=1, NO=0), ) IMU = BitStruct( 'IMU__AVG_CHANNEL_RATES1_RPM' / LinearAdapter(10471.98, BitsInteger(16)), 'IMU__AVG_CHANNEL_RATES2_RPM' / LinearAdapter(10471.98, BitsInteger(16)), 'IMU__AVG_CHANNEL_RATES3_RPM' / LinearAdapter(10471.98, BitsInteger(16)), 'IMU__IMU_AVG_VECTOR_BODY1_RPM' / LinearAdapter(10471.98, BitsInteger(16)), 'IMU__IMU_AVG_VECTOR_BODY2_RPM' / LinearAdapter(10471.98, BitsInteger(16)), 'IMU__IMU_AVG_VECTOR_BODY3_RPM' / LinearAdapter(10471.98, BitsInteger(16)), 'IMU__AVG_TIME_TAG' / BitsInteger(32), 'IMU__RAW_FIRST_PACKET_RATES1' / BitsInteger(16), 'IMU__RAW_FIRST_PACKET_RATES2' / BitsInteger(16), 'IMU__RAW_FIRST_PACKET_RATES3' / BitsInteger(16), 'IMU__IMU_INVALID_COUNT' / BitsInteger(16), 'IMU__NEW_PACKET_COUNT' / BitsInteger(8), 'IMU__FIRST_PACKET_ID' / BitsInteger(8), 'IMU__IMU_VECTOR_VALID' / Enum(BitsInteger(8), YES=1, NO=0), 'IMU__IMU_VECTOR_ENABLED' / Enum(BitsInteger(8), YES=1, NO=0), 'IMU__IMU_TEST_MODE' / Enum(BitsInteger(8), YES=1, NO=0), ) CLOCK_SYNC = BitStruct( 'CLOCK_SYNC__COUNTS_PER_SEC' / BitsInteger(32), 'CLOCK_SYNC__GPS_PPS_TIME_USEC' / BitsInteger(32), 'CLOCK_SYNC__HR_RUN_COUNT' / BitsInteger(32), 'CLOCK_SYNC__HR_TIME_USEC' / BitsInteger(32), 'CLOCK_SYNC__HR_CYCLE_NUM' / BitsInteger(32), 'CLOCK_SYNC__VHR_CYCLE_NUM' / BitsInteger(32), 'CLOCK_SYNC__HR_EXEC_TIME_MS1' / BitsInteger(8), 'CLOCK_SYNC__HR_EXEC_TIME_MS2' / BitsInteger(8), 'CLOCK_SYNC__HR_EXEC_TIME_MS3' / BitsInteger(8), 'CLOCK_SYNC__HR_EXEC_TIME_MS4' / BitsInteger(8), 'CLOCK_SYNC__HR_EXEC_TIME_MS5' / BitsInteger(8), 'CLOCK_SYNC__CLOCK_SYNC_ENABLE' / Enum(BitsInteger(8), DS=0, EN=1, SLOPE_ONLY=2), ) PAYLOAD = BitStruct( 'PAYLOAD__PAYLOAD_SEC_SINCE_LAST_TLM' / BitsInteger(32), 'PAYLOAD__PAYLOAD_TLM_RX_COUNT' / BitsInteger(16), 'PAYLOAD__PAYLOAD_TLM_ACK_COUNT' / BitsInteger(16), 'PAYLOAD__PAYLOAD_TLM_NAK_COUNT' / BitsInteger(16), 'PAYLOAD__PAYLOAD_TLM_TIMEOUT_COUNT' / BitsInteger(16), ) TLM_PROC = BitStruct( 'TLM_PROC__TLM_TABLE_USED' / BitsInteger(8), 'TLM_PROC__FILE_POINTER' / BitsInteger(32), 'TLM_PROC__BUFFER_INDEX' / BitsInteger(8), 'TLM_PROC__STREAMING' / Enum(BitsInteger(8), YES=1, NO=0), ) ANALOGS = BitStruct( 'ANALOGS__VOLTAGE_12P0' / LinearAdapter(10.0, BitsInteger(8)), 'ANALOGS__VOLTAGE_8P0' / LinearAdapter(10.0, BitsInteger(8)), 'ANALOGS__VOLTAGE_5P0' / LinearAdapter(40.0, BitsInteger(8)), 'ANALOGS__VOLTAGE_3P3' / LinearAdapter(66.66666, BitsInteger(8)), 'ANALOGS__DET_TEMP' / LinearAdapter(1.25, BitsInteger(8)), 'ANALOGS__DET2_TEMP' / LinearAdapter(1.25, BitsInteger(8)), 'ANALOGS__BOX1_TEMP' / LinearAdapter(200, BitsInteger(16)), 'ANALOGS__MOTOR1_TEMP' / LinearAdapter(200, BitsInteger(16)), 'ANALOGS__MOTOR2_TEMP' / LinearAdapter(200, BitsInteger(16)), 'ANALOGS__MOTOR3_TEMP' / LinearAdapter(200, BitsInteger(16)), 'ANALOGS__BUS_VOLTAGE' / LinearAdapter(1000, BitsInteger(16)), 'ANALOGS__BATTERY_VOLTAGE' / LinearAdapter(500, BitsInteger(16)), 'ANALOGS__BATTERY_CURRENT' / LinearAdapter(500, BitsInteger(16)), 'ANALOGS__BATTERY1_TEMP' / LinearAdapter(200, BitsInteger(16)), 'ANALOGS__BATTERY2_TEMP' / LinearAdapter(200, BitsInteger(16)), 'ANALOGS__RADIO_TEMP' / LinearAdapter(200, BitsInteger(16)), 'ANALOGS__USER_ANALOG1' / LinearAdapter(2000, BitsInteger(32)), 'ANALOGS__USER_ANALOG2' / LinearAdapter(2000, BitsInteger(32)), ) TABLES = BitStruct( 'TABLES__LENGTH32' / BitsInteger(32), 'TABLES__OFFSET32' / BitsInteger(32), 'TABLES__CHECKSUM' / BitsInteger(16), 'TABLES__TABLE_UPLOAD_STATUS' / Enum(BitsInteger(8), NEW_DATA_IN=0, COMMITTING=1, COMMITTED=2, EXTRACTING=3, EXTRACTED=4, CALCULATING_CRC=5, CRC_READY=6, INVALID_TABLE=7, IDLE=8, FLASH_BURN_COPY=9, FLASH_BURN_DIRECT=10, FLASH_EXTRACT=11, FLASH_BURN_DONE=12, FLASH_EXTRACT_DONE=13), 'TABLES__WHICH_TABLE' / BitsInteger(8), 'TABLES__IMAGE' / BitsInteger(8), 'TABLES__FLASH_BURN_ARMED' / Enum(BitsInteger(8), YES=1, NO=0), ) TRACKER2 = BitStruct( 'TRACKER2__ATTITUDE_ST1' / LinearAdapter(2048000000, BitsInteger(32)), 'TRACKER2__ATTITUDE_ST2' / LinearAdapter(2048000000, BitsInteger(32)), 'TRACKER2__ATTITUDE_ST3' / LinearAdapter(2048000000, BitsInteger(32)), 'TRACKER2__ATTITUDE_ST4' / LinearAdapter(2048000000, BitsInteger(32)), 'TRACKER2__RATE_EST1_RPM' / LinearAdapter(41887.9, BitsInteger(16)), 'TRACKER2__RATE_EST2_RPM' / LinearAdapter(41887.9, BitsInteger(16)), 'TRACKER2__RATE_EST3_RPM' / LinearAdapter(41887.9, BitsInteger(16)), 'TRACKER2__RIGHT_ASC' / LinearAdapter(181.81818181818184, BitsInteger(16)), 'TRACKER2__DECLINATION' / LinearAdapter(181.818181818181, BitsInteger(16)), 'TRACKER2__ROLL' / LinearAdapter(181.81818181818184, BitsInteger(16)), 'TRACKER2__ATT_COVARIANCE1' / LinearAdapter(6.8e13, BitsInteger(32)), 'TRACKER2__ATT_COVARIANCE2' / LinearAdapter(6.8e13, BitsInteger(32)), 'TRACKER2__ATT_COVARIANCE3' / LinearAdapter(6.8e13, BitsInteger(32)), 'TRACKER2__ATT_COVARIANCE4' / LinearAdapter(6.8e13, BitsInteger(32)), 'TRACKER2__ATT_COVARIANCE5' / LinearAdapter(6.8e13, BitsInteger(32)), 'TRACKER2__ATT_COVARIANCE6' / LinearAdapter(6.8e13, BitsInteger(32)), 'TRACKER2__MAXIMUM_RESIDUAL' / BitsInteger(8), 'TRACKER2__MAXIMUM_RESIDUAL_INIT' / BitsInteger(8), 'TRACKER2__ANALOG_GAIN_EU' / LinearAdapter(2.0, BitsInteger(8)), 'TRACKER2__MAG_BRIGHT' / LinearAdapter(25, BitsInteger(8)), 'TRACKER2__MAG_DIM' / LinearAdapter(25, BitsInteger(8)), 'TRACKER2__PEAK_NOISE_ALL_TRK_BLKS' / LinearAdapter(0.25, BitsInteger(8)), 'TRACKER2__PEAK_BCKGND_ALL_TRK_BLKS' / LinearAdapter(0.25, BitsInteger(8)), 'TRACKER2__MEDIAN_NOISE_ALL_TRK_BLKS' / LinearAdapter(0.25, BitsInteger(8)), 'TRACKER2__MEDIAN_BCKGND_ALL_TRK_BLKS' / LinearAdapter(0.25, BitsInteger(8)), 'TRACKER2__FOV_RATE_X_RPM' / LinearAdapter(20943.9, BitsInteger(16)), 'TRACKER2__FOV_RATE_Y_RPM' / LinearAdapter(20943.9, BitsInteger(16)), 'TRACKER2__OPERATING_MODE' / Enum(BitsInteger(8), IDLE=0, INITIALIZE=1, STARID=2, TRACK=3, PHOTO=4, CAL=5), 'TRACKER2__STAR_ID_STEP' / Enum(BitsInteger(8), IDLE=0, INITIALIZE=1, WAITING_FOR_IMAGE1=2, WAITING_FOR_IMAGE2=3, CALCULATE_RATE=4, MAKE_UNIT_VECTORS=5, AWAITING_TRISTAR=6, OK_FOUND_4=7, OK_FOUND_3=8, TIME_OUT=9, SPARE=10, NO_MATCH=11), 'TRACKER2__ID_STATUS' / Enum(BitsInteger(8), IDLE=0, INITIALIZE=1, WAITING_FOR_IMAGE1=2, WAITING_FOR_IMAGE2=3, CALCULATE_RATE=4, MAKE_UNIT_VECTORS=5, AWAITING_TRISTAR=6, OK_FOUND_4=7, OK_FOUND_3=8, TIME_OUT=9, SPARE=10, NO_MATCH=11), 'TRACKER2__ID_STATUS_SAVE' / Enum(BitsInteger(8), IDLE=0, INITIALIZE=1, WAITING_FOR_IMAGE1=2, WAITING_FOR_IMAGE2=3, CALCULATE_RATE=4, MAKE_UNIT_VECTORS=5, AWAITING_TRISTAR=6, OK_FOUND_4=7, OK_FOUND_3=8, TIME_OUT=9, SPARE=10, NO_MATCH=11), 'TRACKER2__ATT_STATUS' / Enum(BitsInteger(8), OK=0, PENDING=1, BAD=2, TOO_FEW_STARS=3, QUEST_FAILED=4, RESIDUALS_TOO_HIGH=5, TOO_CLOSE_TO_EDGE=6, PIX_AMP_TOO_LOW=7, PIX_AMP_TOO_HIGH=8, BACKGND_TOO_HIGH=9, TRACK_FAILURE=10, PIX_SUM_TOO_LOW=11, UNUSED=12, TOO_DIM_FOR_STARID=13, TOO_MANY_GROUPS=14, TOO_FEW_GROUPS=15, CHANNEL_DISABLED=16, TRACK_BLK_OVERLAP=17, OK_FOR_STARID=18, TOO_CLOSE_TO_OTHER=19, TOO_MANY_PIXELS=20, TOO_MANY_COLUMNS=21, TOO_MANY_ROWS=22, OPEN=23, CLOSED=24, RATE_TOO_HIGH=25), 'TRACKER2__RATE_EST_STATUS' / Enum(BitsInteger(8), OK=0, PENDING=1, BAD=2, TOO_FEW_STARS=3, QUEST_FAILED=4, RESIDUALS_TOO_HIGH=5, TOO_CLOSE_TO_EDGE=6, PIX_AMP_TOO_LOW=7, PIX_AMP_TOO_HIGH=8, BACKGND_TOO_HIGH=9, TRACK_FAILURE=10, PIX_SUM_TOO_LOW=11, UNUSED=12, TOO_DIM_FOR_STARID=13, TOO_MANY_GROUPS=14, TOO_FEW_GROUPS=15, CHANNEL_DISABLED=16, TRACK_BLK_OVERLAP=17, OK_FOR_STARID=18, TOO_CLOSE_TO_OTHER=19, TOO_MANY_PIXELS=20, TOO_MANY_COLUMNS=21, TOO_MANY_ROWS=22, OPEN=23, CLOSED=24, RATE_TOO_HIGH=25), 'TRACKER2__RATE_AID_STATUS' / Enum(BitsInteger(8), OK=0, PENDING=1, BAD=2, TOO_FEW_STARS=3, QUEST_FAILED=4, RESIDUALS_TOO_HIGH=5, TOO_CLOSE_TO_EDGE=6, PIX_AMP_TOO_LOW=7, PIX_AMP_TOO_HIGH=8, BACKGND_TOO_HIGH=9, TRACK_FAILURE=10, PIX_SUM_TOO_LOW=11, UNUSED=12, TOO_DIM_FOR_STARID=13, TOO_MANY_GROUPS=14, TOO_FEW_GROUPS=15, CHANNEL_DISABLED=16, TRACK_BLK_OVERLAP=17, OK_FOR_STARID=18, TOO_CLOSE_TO_OTHER=19, TOO_MANY_PIXELS=20, TOO_MANY_COLUMNS=21, TOO_MANY_ROWS=22, OPEN=23, CLOSED=24, RATE_TOO_HIGH=25), 'TRACKER2__VEL_AID_STATUS' / Enum(BitsInteger(8), OK=0, PENDING=1, BAD=2, TOO_FEW_STARS=3, QUEST_FAILED=4, RESIDUALS_TOO_HIGH=5, TOO_CLOSE_TO_EDGE=6, PIX_AMP_TOO_LOW=7, PIX_AMP_TOO_HIGH=8, BACKGND_TOO_HIGH=9, TRACK_FAILURE=10, PIX_SUM_TOO_LOW=11, UNUSED=12, TOO_DIM_FOR_STARID=13, TOO_MANY_GROUPS=14, TOO_FEW_GROUPS=15, CHANNEL_DISABLED=16, TRACK_BLK_OVERLAP=17, OK_FOR_STARID=18, TOO_CLOSE_TO_OTHER=19, TOO_MANY_PIXELS=20, TOO_MANY_COLUMNS=21, TOO_MANY_ROWS=22, OPEN=23, CLOSED=24, RATE_TOO_HIGH=25), 'TRACKER2__ATT_AID_STATUS' / Enum(BitsInteger(8), OK=0, PENDING=1, BAD=2, TOO_FEW_STARS=3, QUEST_FAILED=4, RESIDUALS_TOO_HIGH=5, TOO_CLOSE_TO_EDGE=6, PIX_AMP_TOO_LOW=7, PIX_AMP_TOO_HIGH=8, BACKGND_TOO_HIGH=9, TRACK_FAILURE=10, PIX_SUM_TOO_LOW=11, UNUSED=12, TOO_DIM_FOR_STARID=13, TOO_MANY_GROUPS=14, TOO_FEW_GROUPS=15, CHANNEL_DISABLED=16, TRACK_BLK_OVERLAP=17, OK_FOR_STARID=18, TOO_CLOSE_TO_OTHER=19, TOO_MANY_PIXELS=20, TOO_MANY_COLUMNS=21, TOO_MANY_ROWS=22, OPEN=23, CLOSED=24, RATE_TOO_HIGH=25), 'TRACKER2__VECTOR_AID_STATUS' / Enum(BitsInteger(8), OK=0, PENDING=1, BAD=2, TOO_FEW_STARS=3, QUEST_FAILED=4, RESIDUALS_TOO_HIGH=5, TOO_CLOSE_TO_EDGE=6, PIX_AMP_TOO_LOW=7, PIX_AMP_TOO_HIGH=8, BACKGND_TOO_HIGH=9, TRACK_FAILURE=10, PIX_SUM_TOO_LOW=11, UNUSED=12, TOO_DIM_FOR_STARID=13, TOO_MANY_GROUPS=14, TOO_FEW_GROUPS=15, CHANNEL_DISABLED=16, TRACK_BLK_OVERLAP=17, OK_FOR_STARID=18, TOO_CLOSE_TO_OTHER=19, TOO_MANY_PIXELS=20, TOO_MANY_COLUMNS=21, TOO_MANY_ROWS=22, OPEN=23, CLOSED=24, RATE_TOO_HIGH=25), 'TRACKER2__ATT_TIME_TAG' / BitsInteger(32), 'TRACKER2__NUM_ID_PATTERNS_TRIED' / BitsInteger(32), 'TRACKER2__PIXEL_AMP_THRESHOLD' / LinearAdapter(0.25, BitsInteger(8)), 'TRACKER2__AMPLITUDE_OFFSET' / BitsInteger(8), 'TRACKER2__CURRENT_TINT' / BitsInteger(32), 'TRACKER2__VIDEO_ADDRESS' / BitsInteger(32), 'TRACKER2__MAXIMUM_RESIDUAL_ID' / BitsInteger(16), 'TRACKER2__MAXIMUM_RESIDUAL_ID_INIT' / BitsInteger(16), 'TRACKER2__MAX_ROW_BCKGND_POST_COMP' / BitsInteger(16), 'TRACKER2__NUM_PIX_GROUPS_FOR_ID' / BitsInteger(8), 'TRACKER2__ID_TOLERANCE' / BitsInteger(8), 'TRACKER2__NUM_OF_ATT_LOOPS' / BitsInteger(8), 'TRACKER2__NUM_ATTITUDE_STARS' / BitsInteger(8), 'TRACKER2__NUM_STARS_HIGH_RESIDUAL' / BitsInteger(8), 'TRACKER2__AUTO_BLACK_ENABLE' / Enum(BitsInteger(8), YES=1, NO=0), 'TRACKER2__BLACK_LEVEL' / BitsInteger(8), 'TRACKER2__NUM_STARS_ON_FOV' / BitsInteger(8), 'TRACKER2__NUM_TRACK_BLOCKS_ISSUED' / BitsInteger(8), 'TRACKER2__NUM_TRACK_STARS' / BitsInteger(8), 'TRACKER2__NUM_ID_STARS' / BitsInteger(8), 'TRACKER2__FS_WCOUNTER' / BitsInteger(8), 'TRACKER2__AUTO_TRACK' / Enum(BitsInteger(8), YES=1, NO=0), 'TRACKER2__AUTO_INTEGRATION' / Enum(BitsInteger(8), YES=1, NO=0), 'TRACKER2__AUTO_GAIN' / Enum(BitsInteger(8), YES=1, NO=0), 'TRACKER2__TEST_MODE' / BitsInteger(8), 'TRACKER2__FPGA_DET_TIMEOUT' / Enum(BitsInteger(8), YES=1, NO=0), 'TRACKER2__STORE_SEQ_IMAGES' / Enum(BitsInteger(8), YES=1, NO=0), 'TRACKER2__TRACK_REF_AVAILABLE' / Enum(BitsInteger(8), YES=1, NO=0), 'TRACKER2__IMAGE_INDEX' / BitsInteger(8), 'TRACKER2__REF_INDEX' / BitsInteger(8), 'TRACKER2__NUM_BRIGHT_STARS' / BitsInteger(8), 'TRACKER2__IMAGE_FILTER_ENABLED' / BitsInteger(8), ) GPS = BitStruct( 'GPS__TIME' / BitsInteger(32), 'GPS__POSITION_ECEF1' / LinearAdapter(50000, BitsInteger(32)), 'GPS__POSITION_ECEF2' / LinearAdapter(50000, BitsInteger(32)), 'GPS__POSITION_ECEF3' / LinearAdapter(50000, BitsInteger(32)), 'GPS__VELOCITY_ECEF1' / LinearAdapter(200000000, BitsInteger(32)), 'GPS__VELOCITY_ECEF2' / LinearAdapter(200000000, BitsInteger(32)), 'GPS__VELOCITY_ECEF3' / LinearAdapter(200000000, BitsInteger(32)), 'GPS__SAMPLE_USEC_CT' / BitsInteger(32), 'GPS__CYCLES_SINCE_LATEST_DATA' / BitsInteger(32), 'GPS__GPS_LOCK_COUNT' / BitsInteger(16), 'GPS__MS_GTRACKED_SATELLITES' / BitsInteger(8), 'GPS__MS_GUSED_SATELLITES' / BitsInteger(8), 'GPS__MSG_DATA_VALID' / Enum(BitsInteger(8), YES=1, NO=0), 'GPS__GPS_VALID' / Enum(BitsInteger(8), YES=1, NO=0), 'GPS__GPS_ENABLE' / Enum(BitsInteger(8), YES=1, NO=0), 'GPS__NEW_DATA_RECEIVED' / Enum(BitsInteger(8), YES=1, NO=0), ) EVENT_CHECK = BitStruct( 'EVENT_CHECK__RESPONSE_FIRE_COUNT' / BitsInteger(8), 'EVENT_CHECK__CHECK_ENABLED_PACK1' / BitsInteger(8), 'EVENT_CHECK__CHECK_ENABLED_PACK2' / BitsInteger(8), 'EVENT_CHECK__CHECK_ENABLED_PACK3' / BitsInteger(8), 'EVENT_CHECK__CHECK_ENABLED_PACK4' / BitsInteger(8), 'EVENT_CHECK__CHECK_ENABLED_PACK5' / BitsInteger(8), 'EVENT_CHECK__CHECK_ENABLED_PACK6' / BitsInteger(8), 'EVENT_CHECK__CHECK_ENABLED_PACK7' / BitsInteger(8), 'EVENT_CHECK__CHECK_ENABLED_PACK8' / BitsInteger(8), 'EVENT_CHECK__CHECK_ENABLED_PACK9' / BitsInteger(8), 'EVENT_CHECK__CHECK_ENABLED_PACK10' / BitsInteger(8), 'EVENT_CHECK__CHECK_ENABLED_PACK11' / BitsInteger(8), 'EVENT_CHECK__CHECK_ENABLED_PACK12' / BitsInteger(8), 'EVENT_CHECK__CHECK_ENABLED_PACK13' / BitsInteger(8), 'EVENT_CHECK__CHECK_ENABLED_PACK14' / BitsInteger(8), 'EVENT_CHECK__CHECK_ENABLED_PACK15' / BitsInteger(8), 'EVENT_CHECK__CHECK_ENABLED_PACK16' / BitsInteger(8), 'EVENT_CHECK__RESPONSE_ENABLED_PACK1' / BitsInteger(8), 'EVENT_CHECK__RESPONSE_ENABLED_PACK2' / BitsInteger(8), 'EVENT_CHECK__RESPONSE_ENABLED_PACK3' / BitsInteger(8), 'EVENT_CHECK__RESPONSE_ENABLED_PACK4' / BitsInteger(8), 'EVENT_CHECK__RESPONSE_ENABLED_PACK5' / BitsInteger(8), 'EVENT_CHECK__RESPONSE_ENABLED_PACK6' / BitsInteger(8), 'EVENT_CHECK__RESPONSE_ENABLED_PACK7' / BitsInteger(8), 'EVENT_CHECK__RESPONSE_ENABLED_PACK8' / BitsInteger(8), 'EVENT_CHECK__RESPONSE_ENABLED_PACK9' / BitsInteger(8), 'EVENT_CHECK__RESPONSE_ENABLED_PACK10' / BitsInteger(8), 'EVENT_CHECK__RESPONSE_ENABLED_PACK11' / BitsInteger(8), 'EVENT_CHECK__RESPONSE_ENABLED_PACK12' / BitsInteger(8), 'EVENT_CHECK__RESPONSE_ENABLED_PACK13' / BitsInteger(8), 'EVENT_CHECK__RESPONSE_ENABLED_PACK14' / BitsInteger(8), 'EVENT_CHECK__RESPONSE_ENABLED_PACK15' / BitsInteger(8), 'EVENT_CHECK__RESPONSE_ENABLED_PACK16' / BitsInteger(8), 'EVENT_CHECK__LATCHED_RESP_FIRE_PACK1' / BitsInteger(8), 'EVENT_CHECK__LATCHED_RESP_FIRE_PACK2' / BitsInteger(8), 'EVENT_CHECK__LATCHED_RESP_FIRE_PACK3' / BitsInteger(8), 'EVENT_CHECK__LATCHED_RESP_FIRE_PACK4' / BitsInteger(8), 'EVENT_CHECK__LATCHED_RESP_FIRE_PACK5' / BitsInteger(8), 'EVENT_CHECK__LATCHED_RESP_FIRE_PACK6' / BitsInteger(8), 'EVENT_CHECK__LATCHED_RESP_FIRE_PACK7' / BitsInteger(8), 'EVENT_CHECK__LATCHED_RESP_FIRE_PACK8' / BitsInteger(8), 'EVENT_CHECK__LATCHED_RESP_FIRE_PACK9' / BitsInteger(8), 'EVENT_CHECK__LATCHED_RESP_FIRE_PACK10' / BitsInteger(8), 'EVENT_CHECK__LATCHED_RESP_FIRE_PACK11' / BitsInteger(8), 'EVENT_CHECK__LATCHED_RESP_FIRE_PACK12' / BitsInteger(8), 'EVENT_CHECK__LATCHED_RESP_FIRE_PACK13' / BitsInteger(8), 'EVENT_CHECK__LATCHED_RESP_FIRE_PACK14' / BitsInteger(8), 'EVENT_CHECK__LATCHED_RESP_FIRE_PACK15' / BitsInteger(8), 'EVENT_CHECK__LATCHED_RESP_FIRE_PACK16' / BitsInteger(8), ) RADIO = BitStruct( 'RADIO__SD_MINUTE_CUR' / BitsInteger(32), 'RADIO__SD_MINUTE_MIN' / BitsInteger(32), 'RADIO__SD_MINUTE_MIN_FSW' / BitsInteger(32), 'RADIO__SD_MINUTE_MIN_SOH' / BitsInteger(32), 'RADIO__SD_MINUTE_MIN_LINE' / BitsInteger(32), 'RADIO__SD_MINUTE_MIN_TBL' / BitsInteger(32), 'RADIO__SD_MINUTE_MIN_PAY' / BitsInteger(32), 'RADIO__SD_PERCENT_USED_TOTAL' / BitsInteger(8), 'RADIO__SD_PERCENT_USED_FSW' / BitsInteger(8), 'RADIO__SD_PERCENT_USED_SOH' / BitsInteger(8), 'RADIO__SD_PERCENT_USED_LINE' / BitsInteger(8), 'RADIO__SD_PERCENT_USED_TBL' / BitsInteger(8), 'RADIO__SD_PERCENT_USED_PAY' / BitsInteger(8), 'RADIO__SD_REDUCTION_FLAGS' / BitsInteger(8), 'RADIO__SD_OK' / Enum(BitsInteger(8), YES=1, NO=0), 'RADIO__SD_FAULT_COUNT' / BitsInteger(8), 'RADIO__SD_PRI_MOUNT_STATUS' / Enum(BitsInteger(8), NONE=0, MOUNT_DEV0=1, MOUNT_DEV1=2), 'RADIO__SD_RED_MOUNT_STATUS' / Enum(BitsInteger(8), NONE=0, MOUNT_DEV0=1, MOUNT_DEV1=2), 'RADIO__SDR_TX_TX_FREQ' / LinearAdapter(0.1, BitsInteger(32)), 'RADIO__SDR_TX_TX_SYM_RATE' / BitsInteger(32), 'RADIO__SDR_TX_TX_FRAMES' / BitsInteger(32), 'RADIO__SDR_TX_TX_BYTES' / BitsInteger(32), 'RADIO__SDR_TX_TX_MOD' / Enum(BitsInteger(8), BPSK=0, OQPSK=1, _8PSK=2), 'RADIO__SDR_TX_TX_CODE' / Enum(BitsInteger(8), NONE=0, CC7_1_2=1, CC7_1_2_IQSWAP=2, CC7_1_2_IG2=3, CC7_1_2_IQSWAP_IG2=4), 'RADIO__SDR_TX_TX_PCM' / Enum(BitsInteger(8), NRZL=0, NRZM=1), 'RADIO__SDR_TX_TX' / Enum(BitsInteger(8), NO=0, YES=1), 'RADIO__SDR_TX_TX_POWER' / BitsInteger(8), 'RADIO__SDR_TX_TEMP' / BitsInteger(8), 'RADIO__SDR_TX_COMM_ERROR' / Enum(BitsInteger(8), NO=0, YES=1), 'RADIO__SQ_CHANNEL' / BitsInteger(8), 'RADIO__SQ_CHECKSUM1' / BitsInteger(8), 'RADIO__SQ_CHECKSUM2' / BitsInteger(8), 'RADIO__SQ_CHECKSUM3' / BitsInteger(8), 'RADIO__SQ_WDT_COUNT' / BitsInteger(8), 'RADIO__SQ_TRAP_COUNT' / BitsInteger(8), 'RADIO__SQ_TX_PLL_COUNT' / BitsInteger(8), 'RADIO__SQ_TX_LOCK_STAT' / Enum(BitsInteger(8), LOCKED=0, UNLOCKED=1), 'RADIO__SQ_TEMP' / BitsInteger(8), 'RADIO__SQ_ECHO_STAT' / Enum(BitsInteger(8), ON=69, OFF=77), 'RADIO__SQ_AFC_STAT' / Enum(BitsInteger(8), ON=70, OFF=71), 'RADIO__SQ_SWD_STAT' / Enum(BitsInteger(8), ON=85, OFF=86), 'RADIO__SQ_READBACK_STAT' / Enum(BitsInteger(8), BINARY=66, DECIMAL=78, HEX=84), ) CAL = BitStruct( 'CAL__Q_TRACKER_WRT_BODY1' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__Q_TRACKER_WRT_BODY2' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__Q_TRACKER_WRT_BODY3' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__Q_TRACKER_WRT_BODY4' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__Q_TRACKER_WRT_BODY5' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__Q_TRACKER_WRT_BODY6' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__Q_TRACKER_WRT_BODY7' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__Q_TRACKER_WRT_BODY8' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__Q_TRACKER_WRT_BODY_EST1' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__Q_TRACKER_WRT_BODY_EST2' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__Q_TRACKER_WRT_BODY_EST3' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__Q_TRACKER_WRT_BODY_EST4' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__Q_TRACKER_WRT_BODY_EST5' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__Q_TRACKER_WRT_BODY_EST6' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__Q_TRACKER_WRT_BODY_EST7' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__Q_TRACKER_WRT_BODY_EST8' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__TRACKER_ALIGN_USED_RES1' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__TRACKER_ALIGN_USED_RES2' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__TRACKER_ALIGN_USED_RES3' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__TRACKER_ALIGN_EST_RES1' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__TRACKER_ALIGN_EST_RES2' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__TRACKER_ALIGN_EST_RES3' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__REJECTED_TRACKER_EST_COUNT' / BitsInteger(32), 'CAL__TRACKER_N' / BitsInteger(16), 'CAL__TRACKER_ALIGN_METHOD' / Enum(BitsInteger(8), BATCH=0, RUNNING=1), 'CAL__TRACKER_ALIGN_USAGE' / Enum(BitsInteger(8), TABLE=0, DYN=1), 'CAL__GYRO_CAL_ALIGN1' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__GYRO_CAL_ALIGN2' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__GYRO_CAL_ALIGN3' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__GYRO_CAL_ALIGN4' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__GYRO_CAL_ALIGN5' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__GYRO_CAL_ALIGN6' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__GYRO_CAL_ALIGN7' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__GYRO_CAL_ALIGN8' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__GYRO_CAL_ALIGN9' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__GYRO_CAL_ALIGN_BEST1' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__GYRO_CAL_ALIGN_BEST2' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__GYRO_CAL_ALIGN_BEST3' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__GYRO_CAL_ALIGN_BEST4' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__GYRO_CAL_ALIGN_BEST5' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__GYRO_CAL_ALIGN_BEST6' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__GYRO_CAL_ALIGN_BEST7' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__GYRO_CAL_ALIGN_BEST8' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__GYRO_CAL_ALIGN_BEST9' / LinearAdapter(1e9, BitsInteger(32)), 'CAL__GYRO_CAL_BEST_UNC' / LinearAdapter(2e9, BitsInteger(32)), 'CAL__GYRO_CAL_CURRENT_UNC' / LinearAdapter(2e9, BitsInteger(32)), 'CAL__GYRO_CAL_RUNNING' / Enum(BitsInteger(8), OFF=0, ON=1), ) TRACKER_CTRL = BitStruct( 'TRACKER_CTRL__Q_BODY_WRT_ECI1' / LinearAdapter(1e9, BitsInteger(32)), 'TRACKER_CTRL__Q_BODY_WRT_ECI2' / LinearAdapter(1e9, BitsInteger(32)), 'TRACKER_CTRL__Q_BODY_WRT_ECI3' / LinearAdapter(1e9, BitsInteger(32)), 'TRACKER_CTRL__Q_BODY_WRT_ECI4' / LinearAdapter(1e9, BitsInteger(32)), 'TRACKER_CTRL__Q_BODY_WRT_ECI5' / LinearAdapter(1e9, BitsInteger(32)), 'TRACKER_CTRL__Q_BODY_WRT_ECI6' / LinearAdapter(1e9, BitsInteger(32)), 'TRACKER_CTRL__Q_BODY_WRT_ECI7' / LinearAdapter(1e9, BitsInteger(32)), 'TRACKER_CTRL__Q_BODY_WRT_ECI8' / LinearAdapter(1e9, BitsInteger(32)), 'TRACKER_CTRL__TRACKER_ATT_VALID1' / Enum(BitsInteger(8), YES=1, NO=0), 'TRACKER_CTRL__TRACKER_ATT_VALID2' / Enum(BitsInteger(8), YES=1, NO=0), 'TRACKER_CTRL__TRACKER_USAGE_ENABLED1' / Enum(BitsInteger(8), YES=1, NO=0), 'TRACKER_CTRL__TRACKER_USAGE_ENABLED2' / Enum(BitsInteger(8), YES=1, NO=0), 'TRACKER_CTRL__MAX_BACKGND_TRIPPED1' / Enum(BitsInteger(8), YES=1, NO=0), 'TRACKER_CTRL__MAX_BACKGND_TRIPPED2' / Enum(BitsInteger(8), YES=1, NO=0), 'TRACKER_CTRL__MAX_ROT_RATE_TRIPPED1' / Enum(BitsInteger(8), YES=1, NO=0), 'TRACKER_CTRL__MAX_ROT_RATE_TRIPPED2' / Enum(BitsInteger(8), YES=1, NO=0), 'TRACKER_CTRL__AID_STATUS1' / BitsInteger(8), 'TRACKER_CTRL__AID_STATUS2' / BitsInteger(8), 'TRACKER_CTRL__STAR_ID_STATUS' / BitsInteger(8), ) POWER = BitStruct( 'POWER__HEATER_CTRL_CONFIG1' / Enum(BitsInteger(8), MANUAL_OFF=1, MANUAL_ON=2, SURVIVAL=3, OPERATING=4), 'POWER__HEATER_CTRL_CONFIG2' / Enum(BitsInteger(8), MANUAL_OFF=1, MANUAL_ON=2, SURVIVAL=3, OPERATING=4), 'POWER__HEATER_STATUS1' / Enum(BitsInteger(8), OFF=0, ON=1), 'POWER__HEATER_STATUS2' / Enum(BitsInteger(8), OFF=0, ON=1), Padding(6), 'POWER__IO26_OUT_PLD_RST_REQ' / Enum(Flag, ON=1, OFF=0), 'POWER__IO25_OUT_PLD_FLASH_CS' / Enum(Flag, ON=1, OFF=0), 'POWER__IO24_OUT_' / Enum(Flag, ON=1, OFF=0), 'POWER__IO23_OUT_' / Enum(Flag, ON=1, OFF=0), 'POWER__IO22_OUT_REL2_EN' / Enum(Flag, ON=1, OFF=0), 'POWER__IO21_OUT_' / Enum(Flag, ON=1, OFF=0), 'POWER__IO20_OUT_PLD_HTR2' / Enum(Flag, ON=1, OFF=0), 'POWER__IO19_OUT_PLD_VBUS' / Enum(Flag, ON=1, OFF=0), 'POWER__IO18_OUT_REL1_EN' / Enum(Flag, ON=1, OFF=0), 'POWER__IO17_OUT_' / Enum(Flag, ON=1, OFF=0), 'POWER__IO16_IN_BAT_CHG_STAT' / Enum(Flag, ON=1, OFF=0), 'POWER__IO15_OUT_' / Enum(Flag, ON=1, OFF=0), 'POWER__IO14_OUT_12V_MODE' / Enum(Flag, ON=1, OFF=0), 'POWER__IO13_IN_' / Enum(Flag, ON=1, OFF=0), 'POWER__IO12_OUT_12V_EN' / Enum(Flag, ON=1, OFF=0), 'POWER__IO11_IN_SEP_MON' / Enum(Flag, ON=1, OFF=0), 'POWER__IO10_OUT_PLD_12V' / Enum(Flag, ON=1, OFF=0), 'POWER__IO9_OUT_PLD_HTR1' / Enum(Flag, ON=1, OFF=0), 'POWER__IO8_OUT_PLD_5V' / Enum(Flag, ON=1, OFF=0), 'POWER__IO7_OUT_PLD_5V' / Enum(Flag, ON=1, OFF=0), 'POWER__IO6_OUT_PLD_5V' / Enum(Flag, ON=1, OFF=0), 'POWER__IO5_OUT_PLD_3P3V' / Enum(Flag, ON=1, OFF=0), 'POWER__IO4_OUT_PLD_3P3V' / Enum(Flag, ON=1, OFF=0), 'POWER__IO3_OUT_GPS' / Enum(Flag, ON=1, OFF=0), 'POWER__IO2_OUT_SDR_12V' / Enum(Flag, ON=1, OFF=0), 'POWER__IO1_OUT_RF_8V' / Enum(Flag, ON=1, OFF=0), 'POWER__I2C_ERR_COUNT' / BitsInteger(8), 'POWER__I2C_RETRY_COUNT' / BitsInteger(8) ) cute_bct_fsw = Struct( 'L0' / L0, 'COMMAND_TLM' / COMMAND_TLM, 'GENERAL' / GENERAL, 'TIME' / TIME, 'REFS' / REFS, 'ATT_DET' / ATT_DET, 'ATT_CMD' / ATT_CMD, 'RW_DRIVE' / RW_DRIVE, 'TRACKER' / TRACKER, 'ATT_CTRL' / ATT_CTRL, 'MOMENTUM' / MOMENTUM, 'CSS' / CSS, 'MAG' / MAG, 'IMU' / IMU, 'CLOCK_SYNC' / CLOCK_SYNC, 'PAYLOAD' / PAYLOAD, 'TLM_PROC' / TLM_PROC, 'ANALOGS' / ANALOGS, 'TABLES' / TABLES, 'TRACKER2' / TRACKER2, 'GPS' / GPS, 'EVENT_CHECK' / EVENT_CHECK, 'RADIO' / RADIO, 'CAL' / CAL, 'TRACKER_CTRL' / TRACKER_CTRL, 'POWER' / POWER, ) gr-satellites-4.4.0/python/telemetry/cute_bct_soh.py000066400000000000000000000340601414055407700226560ustar00rootroot00000000000000from ..adapters import LinearAdapter from construct import Adapter, BitsInteger, BitStruct, Container, Enum, Flag, \ Int8ub, Int16ub, Int32ub, Padding, Struct, Switch SOH_L0 = BitStruct( 'SOH_L0__WDT_2SEC_CNT' / BitsInteger(3), 'SOH_L0__RESET_ARMED' / Enum(Flag, ARMED=1, NOT_ARMED=0), 'SOH_L0__WDT_STAT' / Enum(Flag, NO_WDT=0, WDT=1), 'SOH_L0__WDT_EN' / Enum(Flag, DISABLED=0, ENABLED=1), 'SOH_L0__TABLE_SELECT' / Enum(Flag, FLASH=0, COMPILED=1), 'SOH_L0__BOOT_RELAY' / Enum(Flag, PRIMARY=1, REDUNDANT=0), 'SOH_L0__L0_ACPT_CNT' / BitsInteger(8), 'SOH_L0__L0_RJCT_CNT' / BitsInteger(8), 'SOH_L0__HW_SEC_CNT' / BitsInteger(8), Padding(64), 'SOH_L0__TIME_TAG' / BitsInteger(32), Padding(32), 'SOH_L0__PLD_TLM_ACK_CNT' / BitsInteger(8), 'SOH_L0__PLD_CMD_CNT' / BitsInteger(8), 'SOH_L0__PLD_TLM_TO_CNT' / BitsInteger(8), 'SOH_L0__PLD_TLM_NAK_CNT' / BitsInteger(8), 'SOH_L0__SPARE_END' / BitsInteger(64), ) SOH_COMMAND_TLM = BitStruct( 'SOH_COMMAND_TLM__CMD_STATUS' / Enum(BitsInteger(8), OK=0, BAD_APID=1, BAD_OPCODE=2, BAD_DATA=3, NOW_READING=4, DONE_READING=5, IDLE=6, NO_CMD_DATA=7, CMD_SRVC_OVERRUN=8, CMD_APID_OVERRUN=9, INCORRECT_WHEEL_MODE=10, BAD_ELEMENT=11, TABLES_BUSY=12, FLASH_NOT_ARMED=13, THRUSTERS_DISABLED=14, ATT_ERR_TOO_HIGH=15, ASYNC_REFUSED=16, DRIVER_ERROR=17), 'SOH_COMMAND_TLM__REALTIME_CMD_ACCEPT_COUNT' / BitsInteger(8), 'SOH_COMMAND_TLM__REALTIME_CMD_REJECT_COUNT' / BitsInteger(8), 'SOH_COMMAND_TLM__STORED_CMD_ACCEPT_COUNT' / BitsInteger(8), 'SOH_COMMAND_TLM__STORED_CMD_REJECT_COUNT' / BitsInteger(8), 'SOH_COMMAND_TLM__MACROS_EXECUTING_PACK1' / BitsInteger(8), 'SOH_COMMAND_TLM__MACROS_EXECUTING_PACK2' / BitsInteger(8), ) SOH_GENERAL = BitStruct( 'SOH_GENERAL__SCRUB_STATUS_OVERALL' / Enum(BitsInteger(8), OK=0, FAIL=-1), 'SOH_GENERAL__IMAGE_BOOTED' / Enum(BitsInteger(8), PRIMARY=0, REDUNDANT=1), 'SOH_GENERAL__IMAGE_AUTO_FAILOVER' / Enum(BitsInteger(8), OK=0, FAIL=1), ) SOH_TIME = BitStruct( 'SOH_TIME__TAI_SECONDS' / LinearAdapter(5.0, BitsInteger(32)), 'SOH_TIME__TIME_VALID' / Enum(BitsInteger(8), YES=1, NO=0), ) SOH_REFS = BitStruct( 'SOH_REFS__POSITION_WRT_ECI1' / LinearAdapter(50000, BitsInteger(32)), 'SOH_REFS__POSITION_WRT_ECI2' / LinearAdapter(50000, BitsInteger(32)), 'SOH_REFS__POSITION_WRT_ECI3' / LinearAdapter(50000, BitsInteger(32)), 'SOH_REFS__VELOCITY_WRT_ECI1' / LinearAdapter(200000000, BitsInteger(32)), 'SOH_REFS__VELOCITY_WRT_ECI2' / LinearAdapter(200000000, BitsInteger(32)), 'SOH_REFS__VELOCITY_WRT_ECI3' / LinearAdapter(200000000, BitsInteger(32)), 'SOH_REFS__REFS_VALID' / Enum(BitsInteger(8), YES=1, NO=0), ) SOH_ATT_DET = BitStruct( 'SOH_ATT_DET__Q_BODY_WRT_ECI1' / LinearAdapter(2e9, BitsInteger(32)), 'SOH_ATT_DET__Q_BODY_WRT_ECI2' / LinearAdapter(2e9, BitsInteger(32)), 'SOH_ATT_DET__Q_BODY_WRT_ECI3' / LinearAdapter(2e9, BitsInteger(32)), 'SOH_ATT_DET__Q_BODY_WRT_ECI4' / LinearAdapter(2e9, BitsInteger(32)), 'SOH_ATT_DET__BODY_RATE1' / LinearAdapter(200000000, BitsInteger(32)), 'SOH_ATT_DET__BODY_RATE2' / LinearAdapter(200000000, BitsInteger(32)), 'SOH_ATT_DET__BODY_RATE3' / LinearAdapter(200000000, BitsInteger(32)), 'SOH_ATT_DET__BAD_ATT_TIMER' / BitsInteger(32), 'SOH_ATT_DET__BAD_RATE_TIMER' / BitsInteger(32), 'SOH_ATT_DET__REINIT_COUNT' / BitsInteger(32), 'SOH_ATT_DET__ATTITUDE_VALID' / Enum(BitsInteger(8), YES=1, NO=0), 'SOH_ATT_DET__MEAS_ATT_VALID' / Enum(BitsInteger(8), YES=1, NO=0), 'SOH_ATT_DET__MEAS_RATE_VALID' / Enum(BitsInteger(8), YES=1, NO=0), 'SOH_ATT_DET__TRACKER_USED' / BitsInteger(8), ) SOH_ATT_CMD = BitStruct( 'SOH_ATT_CMD__HR_CYCLE_SAFE_MODE' / BitsInteger(32), 'SOH_ATT_CMD__ROTISSERIE_RATE' / LinearAdapter(25000, BitsInteger(16)), 'SOH_ATT_CMD__ADCS_MODE' / Enum(BitsInteger(8), SUN_POINT=0, FINE_REF_POINT=1, SEARCH_INIT=2, SEARCHING=3, WAITING=4, CONVERGING=5, ON_SUN=6, NOT_ACTIVE=7), 'SOH_ATT_CMD__SAFE_MODE_REASON' / Enum(BitsInteger(8), BOOT=1, COMMAND=2, ATTITUDE_INVALID=4, TIME_INVALID=8, ATTITUDE_TIME_INVALID=12, REFS_INVALID=16), 'SOH_ATT_CMD__RECOMMEND_SUN_POINT' / Enum(BitsInteger(8), YES=1, NO=0), ) SOH_RW_DRIVE = BitStruct( 'SOH_RW_DRIVE__FILTERED_SPEED_RPM1' / LinearAdapter(2.5, BitsInteger(16)), 'SOH_RW_DRIVE__FILTERED_SPEED_RPM2' / LinearAdapter(2.5, BitsInteger(16)), 'SOH_RW_DRIVE__FILTERED_SPEED_RPM3' / LinearAdapter(2.5, BitsInteger(16)), ) SOH_TRACKER = BitStruct( 'SOH_TRACKER__OPERATING_MODE' / Enum(BitsInteger(8), IDLE=0, INITIALIZE=1, STARID=2, TRACK=3, PHOTO=4, CAL=5), 'SOH_TRACKER__STAR_ID_STEP' / Enum(BitsInteger(8), IDLE=0, INITIALIZE=1, WAITING_FOR_IMAGE1=2, WAITING_FOR_IMAGE2=3, CALCULATE_RATE=4, MAKE_UNIT_VECTORS=5, AWAITING_TRISTAR=6, OK_FOUND_4=7, OK_FOUND_3=8, TIME_OUT=9, SPARE=10, NO_MATCH=11), 'SOH_TRACKER__ATT_STATUS' / Enum(BitsInteger(8), OK=0, PENDING=1, BAD=2, TOO_FEW_STARS=3, QUEST_FAILED=4, RESIDUALS_TOO_HIGH=5, TOO_CLOSE_TO_EDGE=6, PIX_AMP_TOO_LOW=7, PIX_AMP_TOO_HIGH=8, BACKGND_TOO_HIGH=9, TRACK_FAILURE=10, PIX_SUM_TOO_LOW=11, UNUSED=12, TOO_DIM_FOR_STARID=13, TOO_MANY_GROUPS=14, TOO_FEW_GROUPS=15, CHANNEL_DISABLED=16, TRACK_BLK_OVERLAP=17, OK_FOR_STARID=18, TOO_CLOSE_TO_OTHER=19, TOO_MANY_PIXELS=20, TOO_MANY_COLUMNS=21, TOO_MANY_ROWS=22, OPEN=23, CLOSED=24, RATE_TOO_HIGH=25), 'SOH_TRACKER__NUM_ATTITUDE_STARS' / BitsInteger(8), ) SOH_ATT_CTRL = BitStruct( 'SOH_ATT_CTRL__POSITION_ERROR1' / LinearAdapter(5e8, BitsInteger(32)), 'SOH_ATT_CTRL__POSITION_ERROR2' / LinearAdapter(5e8, BitsInteger(32)), 'SOH_ATT_CTRL__POSITION_ERROR3' / LinearAdapter(5e8, BitsInteger(32)), 'SOH_ATT_CTRL__TIME_INTO_SEARCH' / BitsInteger(16), 'SOH_ATT_CTRL__WAIT_TIMER' / BitsInteger(16), 'SOH_ATT_CTRL__SUN_POINT_ANGLE_ERROR' / LinearAdapter(333.3334, BitsInteger(16)), 'SOH_ATT_CTRL__SUN_POINT_STATE' / Enum(BitsInteger(8), SUN_POINT=0, FINE_REF_POINT=1, SEARCH_INIT=2, SEARCHING=3, WAITING=4, CONVERGING=5, ON_SUN=6, NOT_ACTIVE=7), ) SOH_MOMENTUM = BitStruct( 'SOH_MOMENTUM__MOMENTUM_VECTOR_BODY1' / LinearAdapter(5000, BitsInteger(16)), 'SOH_MOMENTUM__MOMENTUM_VECTOR_BODY2' / LinearAdapter(5000, BitsInteger(16)), 'SOH_MOMENTUM__MOMENTUM_VECTOR_BODY3' / LinearAdapter(5000, BitsInteger(16)), 'SOH_MOMENTUM__DUTY_CYCLE1' / BitsInteger(8), 'SOH_MOMENTUM__DUTY_CYCLE2' / BitsInteger(8), 'SOH_MOMENTUM__DUTY_CYCLE3' / BitsInteger(8), 'SOH_MOMENTUM__TORQUE_ROD_MODE1' / Enum(BitsInteger(8), OFF=0, ON_POS=1, ON_NEG=2, AUTO=3, MEASURED=4, MODELED=5, DELAYED_AUTO=6, NO_FIELD_VALID=7), 'SOH_MOMENTUM__TORQUE_ROD_MODE2' / Enum(BitsInteger(8), OFF=0, ON_POS=1, ON_NEG=2, AUTO=3, MEASURED=4, MODELED=5, DELAYED_AUTO=6, NO_FIELD_VALID=7), 'SOH_MOMENTUM__TORQUE_ROD_MODE3' / Enum(BitsInteger(8), OFF=0, ON_POS=1, ON_NEG=2, AUTO=3, MEASURED=4, MODELED=5, DELAYED_AUTO=6, NO_FIELD_VALID=7), 'SOH_MOMENTUM__MAG_SOURCE_USED' / Enum(BitsInteger(8), OFF=0, ON_POS=1, ON_NEG=2, AUTO=3, MEASURED=4, MODELED=5, DELAYED_AUTO=6, NO_FIELD_VALID=7), 'SOH_MOMENTUM__MOMENTUM_VECTOR_VALID' / Enum(BitsInteger(8), YES=1, NO=0), ) SOH_CSS = BitStruct( 'SOH_CSS__SUN_VECTOR_BODY1' / LinearAdapter(10000, BitsInteger(16)), 'SOH_CSS__SUN_VECTOR_BODY2' / LinearAdapter(10000, BitsInteger(16)), 'SOH_CSS__SUN_VECTOR_BODY3' / LinearAdapter(10000, BitsInteger(16)), 'SOH_CSS__SUN_VECTOR_STATUS' / Enum(BitsInteger(8), GOOD=0, COARSE=1, BAD=2), 'SOH_CSS__SUN_SENSOR_USED' / BitsInteger(8), ) SOH_MAG = BitStruct( 'SOH_MAG__MAG_VECTOR_BODY1' / LinearAdapter(200000000, BitsInteger(16)), 'SOH_MAG__MAG_VECTOR_BODY2' / LinearAdapter(200000000, BitsInteger(16)), 'SOH_MAG__MAG_VECTOR_BODY3' / LinearAdapter(200000000, BitsInteger(16)), 'SOH_MAG__MAG_VECTOR_VALID' / Enum(BitsInteger(8), YES=1, NO=0), ) SOH_IMU = BitStruct( 'SOH_IMU__NEW_PACKET_COUNT' / BitsInteger(8), 'SOH_IMU__IMU_VECTOR_VALID' / Enum(BitsInteger(8), YES=1, NO=0), ) SOH_CLOCK_SYNC = BitStruct( 'SOH_CLOCK_SYNC__HR_RUN_COUNT' / BitsInteger(32), 'SOH_CLOCK_SYNC__HR_EXEC_TIME_MS' / BitsInteger(8), ) SOH_ANALOGS = BitStruct( 'SOH_ANALOGS__BOX1_TEMP' / LinearAdapter(200, BitsInteger(16)), 'SOH_ANALOGS__BUS_VOLTAGE' / LinearAdapter(1000.0, BitsInteger(16)), 'SOH_ANALOGS__BATTERY_VOLTAGE' / LinearAdapter(500, BitsInteger(16)), 'SOH_ANALOGS__BATTERY_CURRENT' / LinearAdapter(500, BitsInteger(16)), ) SOH_TRACKER2 = BitStruct( 'SOH_TRACKER2__OPERATING_MODE' / Enum(BitsInteger(8), IDLE=0, INITIALIZE=1, STARID=2, TRACK=3, PHOTO=4, CAL=5), 'SOH_TRACKER2__STAR_ID_STEP' / Enum(BitsInteger(8), IDLE=0, INITIALIZE=1, WAITING_FOR_IMAGE1=2, WAITING_FOR_IMAGE2=3, CALCULATE_RATE=4, MAKE_UNIT_VECTORS=5, AWAITING_TRISTAR=6, OK_FOUND_4=7, OK_FOUND_3=8, TIME_OUT=9, SPARE=10, NO_MATCH=11), 'SOH_TRACKER2__ATT_STATUS' / Enum(BitsInteger(8), OK=0, PENDING=1, BAD=2, TOO_FEW_STARS=3, QUEST_FAILED=4, RESIDUALS_TOO_HIGH=5, TOO_CLOSE_TO_EDGE=6, PIX_AMP_TOO_LOW=7, PIX_AMP_TOO_HIGH=8, BACKGND_TOO_HIGH=9, TRACK_FAILURE=10, PIX_SUM_TOO_LOW=11, UNUSED=12, TOO_DIM_FOR_STARID=13, TOO_MANY_GROUPS=14, TOO_FEW_GROUPS=15, CHANNEL_DISABLED=16, TRACK_BLK_OVERLAP=17, OK_FOR_STARID=18, TOO_CLOSE_TO_OTHER=19, TOO_MANY_PIXELS=20, TOO_MANY_COLUMNS=21, TOO_MANY_ROWS=22, OPEN=23, CLOSED=24, RATE_TOO_HIGH=25), 'SOH_TRACKER2__NUM_ATTITUDE_STARS' / BitsInteger(8), ) SOH_GPS = BitStruct( 'SOH_GPS__GPS_LOCK_COUNT' / BitsInteger(16), 'SOH_GPS__GPS_VALID' / Enum(BitsInteger(8), YES=1, NO=0), 'SOH_GPS__GPS_ENABLE' / Enum(BitsInteger(8), YES=1, NO=0), ) SOH_EVENT_CHECK = BitStruct( 'SOH_EVENT_CHECK__LATCHED_RESP_FIRE_PACK1' / BitsInteger(8), 'SOH_EVENT_CHECK__LATCHED_RESP_FIRE_PACK2' / BitsInteger(8), ) SOH_RADIO = BitStruct( 'SOH_RADIO__SD_MINUTE_CUR' / BitsInteger(32), 'SOH_RADIO__SD_PERCENT_USED_TOTAL' / BitsInteger(8), 'SOH_RADIO__SD_OK' / Enum(BitsInteger(8), YES=1, NO=0), 'SOH_RADIO__SD_FAULT_COUNT' / BitsInteger(8), 'SOH_RADIO__SDR_TX_TX_FRAMES' / BitsInteger(32), 'SOH_RADIO__SDR_TX_TEMP' / BitsInteger(8), 'SOH_RADIO__SDR_TX_COMM_ERROR' / Enum(BitsInteger(8), NO=0, YES=1), 'SOH_RADIO__SQ_CHANNEL' / BitsInteger(8), 'SOH_RADIO__SQ_TRAP_COUNT' / BitsInteger(8), 'SOH_RADIO__SQ_TEMP' / BitsInteger(8), ) SOH_TRACKER_CTRL = BitStruct( 'SOH_TRACKER_CTRL__AID_STATUS1' / BitsInteger(8), 'SOH_TRACKER_CTRL__AID_STATUS2' / BitsInteger(8), 'SOH_TRACKER_CTRL__STAR_ID_STATUS' / BitsInteger(8) ) cute_bct_soh = Struct( 'SOH_L0' / SOH_L0, 'SOH_COMMAND_TLM' / SOH_COMMAND_TLM, 'SOH_GENERAL' / SOH_GENERAL, 'SOH_TIME' / SOH_TIME, 'SOH_REFS' / SOH_REFS, 'SOH_ATT_DET' / SOH_ATT_DET, 'SOH_ATT_CMD' / SOH_ATT_CMD, 'SOH_RW_DRIVE' / SOH_RW_DRIVE, 'SOH_TRACKER' / SOH_TRACKER, 'SOH_ATT_CTRL' / SOH_ATT_CTRL, 'SOH_MOMENTUM' / SOH_MOMENTUM, 'SOH_CSS' / SOH_CSS, 'SOH_MAG' / SOH_MAG, 'SOH_IMU' / SOH_IMU, 'SOH_CLOCK_SYNC' / SOH_CLOCK_SYNC, 'SOH_ANALOGS' / SOH_ANALOGS, 'SOH_TRACKER2' / SOH_TRACKER2, 'SOH_GPS' / SOH_GPS, 'SOH_EVENT_CHECK' / SOH_EVENT_CHECK, 'SOH_RADIO' / SOH_RADIO, 'SOH_TRACKER_CTRL' / SOH_TRACKER_CTRL, ) gr-satellites-4.4.0/python/telemetry/cute_pld.py000066400000000000000000000165301414055407700220160ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2021 The Regents of the University of Colorado # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from ..adapters import AffineAdapter, LinearAdapter from construct import Adapter, BitsInteger, BitStruct, Container, Enum, Flag, \ Float32b, Int8ub, Int16ub, Int16sb, Int32ub, Padding, \ Struct cute_pld_ccsds_header = BitStruct( 'ccsds_version' / BitsInteger(3), 'packet_type' / BitsInteger(1), 'secondary_header_flag' / BitsInteger(1), 'APID' / BitsInteger(11), 'sequence_flags' / BitsInteger(2), 'sequence_counter' / BitsInteger(14), 'packet_length' / BitsInteger(16) ) cute_pld_sw_stat = Struct( 'ccsds_header' / cute_pld_ccsds_header, 'shCoarse' / Int32ub, 'shFine' / Int16ub, 'pldSwVerMaj' / Int8ub, 'pldSwVerMin' / Int8ub, 'pldSwVerPatch' / Int8ub, 'sdState' / BitStruct( Padding(6), 'card1' / Enum(BitsInteger(1), DEAD=0, ALIVE=1), 'card0' / Enum(BitsInteger(1), DEAD=0, ALIVE=1) ), 'zynqTemp' / AffineAdapter(130.039011703511, 35520.15604681404, Int16ub), 'zynqVccInt' / LinearAdapter(21739.1304347826, Int16ub), 'zynqVccAux' / LinearAdapter(21739.1304347826, Int16ub), 'zynqVccBram' / LinearAdapter(21739.1304347826, Int16ub), 'zynqVccPint' / LinearAdapter(21739.1304347826, Int16ub), 'zynqVccPAux' / LinearAdapter(21739.1304347826, Int16ub), 'zynq_vccPdr0' / LinearAdapter(21739.1304347826, Int16ub), 'zynqStatus' / Int8ub, 'spare8' / Int8ub, 'procTemp' / LinearAdapter(256.0, Int16sb), 'ccdP5' / LinearAdapter(620.4551659097114, Int16ub), 'ccdP15' / LinearAdapter(223.5870972357927, Int16ub), 'ccdP32' / LinearAdapter(112.8099029045165, Int16ub), 'ccdN5' / AffineAdapter(318.9131440052302, 2305.604898505892, Int16ub), 'spare16' / Int16ub, 'cmdRecvCount' / Int16ub, 'cmdRjctCount' / Int16ub, 'cmdSuccCount' / Int16ub, 'cmdSuccOp' / Enum(Int16ub, NOOP=0, ARM=1, CMD_RST_STATS=2, CMD_XSUM=3, CMD_ECHO_STATE=4, LOG_ROUTE=48, LOG_STATE=49, LOG_RST_STATS=50, LOG_RESET_READ=52, LOG_ISSUE=53, LOG_DUMP_INFO=54, LOG_SET_PUBLISH=55, MEM_DUMP=80, MEM_LOAD=81, MEM_ERASE=82, MEM_XSUM=83, MEM_ABORT=84, MEM_RESET=85, MEM_LOAD_DWORD=86, MEM_LOAD_WORD=87, MEM_LOAD_BYTE=88, PKT_ISSUE=96, PKT_SET_RATE=97, PKT_SET_STREAM=98, PKT_SET_PRIORITY=99, PKT_QUERY_APID=100, PKT_SET_DELAY=101, TIME_RESET=112, TBL_DUMP=128, TBL_LOAD=129, TBL_LOAD_START=130, TBL_COMMIT=131, TBL_ABORT=132, TBL_VERIFY=133, OS_RESET=144, OS_SEND_HK=145, FS_MKDIR=160, FS_RMDIR=161, FS_RENAME=162, FS_DIRLIST=163, FS_RM=164, FS_DUMP=165, FS_DEV_STAT=166, FS_LOAD=167, FS_COMMIT=168, FS_FORMAT=169, FS_COPY=170, FS_SD_STATE=171, TEC_ENA=176, TEC_DIS=177, TEC_SET_SLEW_RATE=178, TEC_SET_TEMP=179, TEC_READ_REG=180, TEC_WRITE_REG=181, TEC_WRITE_DAC=182, TEC_SELECT_RTC=184, CCD_EXPOSE=192, CCD_ABORT=193, CCD_SHUTTER_OVER=194, CCD_SHUTTER_OPEN=195, CCD_SHUTTER_CLOSE=196, CCD_SET_ID=197, CCD_COPY_IMG_SLOT=198, CCD_COPY_REF_SLOT=199, CCD_ADD_REF=200, CCD_MULT_REF=201, CCD_LOAD_REF=202, CCD_REPLAY=203, CCD_DUMP=204, CCD_ENA=205, CCD_DIS=206, CCD_SET_DAC=207, IMAGE_PROCESS=208, IMAGE_ABORT=209, MODE_STANDBY=224, MODE_SCIENCE=225, CCD_STORE_REF=240), 'cmdRjctOp' / Enum(Int16ub, NOOP=0, ARM=1, CMD_RST_STATS=2, CMD_XSUM=3, CMD_ECHO_STATE=4, LOG_ROUTE=48, LOG_STATE=49, LOG_RST_STATS=50, LOG_RESET_READ=52, LOG_ISSUE=53, LOG_DUMP_INFO=54, LOG_SET_PUBLISH=55, MEM_DUMP=80, MEM_LOAD=81, MEM_ERASE=82, MEM_XSUM=83, MEM_ABORT=84, MEM_RESET=85, MEM_LOAD_DWORD=86, MEM_LOAD_WORD=87, MEM_LOAD_BYTE=88, PKT_ISSUE=96, PKT_SET_RATE=97, PKT_SET_STREAM=98, PKT_SET_PRIORITY=99, PKT_QUERY_APID=100, PKT_SET_DELAY=101, TIME_RESET=112, TBL_DUMP=128, TBL_LOAD=129, TBL_LOAD_START=130, TBL_COMMIT=131, TBL_ABORT=132, TBL_VERIFY=133, OS_RESET=144, OS_SEND_HK=145, FS_MKDIR=160, FS_RMDIR=161, FS_RENAME=162, FS_DIRLIST=163, FS_RM=164, FS_DUMP=165, FS_DEV_STAT=166, FS_LOAD=167, FS_COMMIT=168, FS_FORMAT=169, FS_COPY=170, FS_SD_STATE=171, TEC_ENA=176, TEC_DIS=177, TEC_SET_SLEW_RATE=178, TEC_SET_TEMP=179, TEC_READ_REG=180, TEC_WRITE_REG=181, TEC_WRITE_DAC=182, TEC_SELECT_RTC=184, CCD_EXPOSE=192, CCD_ABORT=193, CCD_SHUTTER_OVER=194, CCD_SHUTTER_OPEN=195, CCD_SHUTTER_CLOSE=196, CCD_SET_ID=197, CCD_COPY_IMG_SLOT=198, CCD_COPY_REF_SLOT=199, CCD_ADD_REF=200, CCD_MULT_REF=201, CCD_LOAD_REF=202, CCD_REPLAY=203, CCD_DUMP=204, CCD_ENA=205, CCD_DIS=206, CCD_SET_DAC=207, IMAGE_PROCESS=208, IMAGE_ABORT=209, MODE_STANDBY=224, MODE_SCIENCE=225, CCD_STORE_REF=240), 'cmdFailCode' / Enum(Int8ub, SUCCESS=0, MODE=1, ARM=2, SOURCE=3, OPCODE=4, METHOD=5, LENGTH=6, RANGE=7, CHECKSUM=8, PKT_TYPE=9), 'armState' / BitStruct( Padding(6), 'sc' / Enum(BitsInteger(1), OFF=0, ARMED=1), 'dbg' / Enum(BitsInteger(1), OFF=0, ARMED=1) ), 'logWriteCount' / Int16ub, 'logDropCount' / Int16ub, 'ccdEnaState' / Enum(Int8ub, DIS=0, ENA=1), 'ccdCtrlState' / Enum(Int8ub, IDLE=0, ERASE=1, OPEN=2, EXPOSE=3, READOUT=4, REPLAY=5, PROCESS=6, ENA=7, DIS=8), 'ccdShutter' / Enum(Int8ub, CLOSED=0, OPEN=1), 'shutterOverride' / Enum(Int8ub, DIS=0, ENA=1), 'frameId' / Int32ub, 'osCpuUsage' / Int16ub, 'osCpuMax' / Int16ub, 'timePPSCount' / Int16ub, 'timeRecvCount' / Int16ub, 'timeMissCount' / Int16ub, 'fswMode' / Enum(Int8ub, STANDBY=0, SCIENCE=1), 'tecState' / Enum(Int8ub, DIS=0, ENA=1), 'tecSlewRate' / Float32b, 'tecSetpoint' / Float32b, 'tecCcdRtdTemp' / AffineAdapter(12.615295, 3276.7, Int16ub), 'tecScRtd5Temp' / AffineAdapter(12.615295, 3276.7, Int16ub), 'tecScRtd4Temp' / AffineAdapter(12.615295, 3276.7, Int16ub), 'tecScRtd3Temp' / AffineAdapter(12.615295, 3276.7, Int16ub), 'tecScRtd2Temp' / AffineAdapter(12.615295, 3276.7, Int16ub), 'tecScRtd1Temp' / AffineAdapter(12.615295, 3276.7, Int16ub), 'tecShutter' / LinearAdapter(13106.8, Int16ub), 'tecVolt' / LinearAdapter(5234.636746976763, Int16ub), 'tecAvgCurr' / Int16ub, 'tecCurr' / Int16ub, 'imgState' / Int8ub, 'imgCurrProcType' / Enum(Int8ub, SKIP=0, RAW=1, BIN2D=2, BIAS=3, DARK=4, OUTSPEC=5, SPEC1D=6, TRIM2D=7, XDISP=8) ) gr-satellites-4.4.0/python/telemetry/dstar_one.py000066400000000000000000000036001414055407700221670ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2018,2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from construct import * from ..adapters import LinearAdapter Beacon = Struct( Const(b'\x6c'), Const(b'\xa3'), 'time' / Int32ul, 'reboots' / Int32ul, 'rtc_val' / Int32ul, 'bat_charge_in' / LinearAdapter(1/(2.5/(4096*20*0.05)), Int16ub), 'bat_charge_out' / LinearAdapter(1/(2.5/(4096*20*0.033)), Int16ub), 'bat_voltage' / LinearAdapter(1/(2.5/4096*((124+27.4)/27.4)), Int16ub), 'supply_5V' / LinearAdapter(1/(2.5/4096*((30.1+18.2)/18.2)), Int16ub), 'supply_3V3' / LinearAdapter(1/(2.5/4096*((18.2+18.2)/18.2)), Int16ub), 'pcu_total_curr' / LinearAdapter(1/(2.5/(4096*20*1)), Int16ub), 'solar_curr' / LinearAdapter(1/(2.5/(4096*20*0.1)), Int16ub)[6], 'solar_total_v' / LinearAdapter(1/(2.5/4096*(30.1+18.2)/18.2), Int16ub), 'vcc_curr' / LinearAdapter(1/(2.5/(4096*20*0.1)), Int16ub)[4], 'vcc_curr2' / LinearAdapter(1/(2.5/(4096*20*0.05)), Int16ub)[4], 'ss_total_curr' / LinearAdapter(1/(2.5/(4096*20*0.1)), Int16ub), 'eeprom_curr1' / LinearAdapter(1/(2.5/(4096*20*0.2)), Int16ub), 'eeprom_curr2' / LinearAdapter(1/(2.5/(4096*20*1)), Int16ub), 'ext_adc_curr' / LinearAdapter(1/(2.5/(4096*20*1)), Int16ub)[4], 'rtc_curr' / LinearAdapter(1/(2.5/(4096*20*1)), Int16ub), 'charger_dcdc_v' / LinearAdapter(1/(2.5/(4096*20*0.1)), Int16ub), 'system_v' / LinearAdapter(1/(2.5/(4096*20*0.1)), Int16ub), 'obc_curr' / LinearAdapter(1/(2.5/(4096*20*0.1)), Int16ub), 'switches' / Int8ub[3], 'reserved1' / Int8ub, 'battery_temp' / Int16sl, 'schedule' / Int8ub, 'reserved2' / Bytes(10), 'mode' / Int8ub, 'filler' / Bytes(10), 'crc' / Int16ub) dstar_one = Struct( 'control' / Bytes(2), 'beacon' / Beacon ) gr-satellites-4.4.0/python/telemetry/eseo.py000066400000000000000000000216251414055407700211530ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2017 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from construct import * from ..adapters import LinearAdapter, AffineAdapter from .ax25 import Header16 # Beacon of type 1 General = Struct( 'obd_mode' / Int8ul, 'obd_active_task' / Int8ul, 'obd_equipment_status' / Int32ul, 'obd_cpu_error' / Int32ul, 'obd_can_timeout_error' / Int32ul, 'obd_wd_reset_count' / Int8ul, 'obd_rs422m_err_count' / Int16ul, 'obd_rs422r_err_count' / Int16ul, 'obd_error_count' / Int16ul, 'obd_tc_error' / Int32ul[2], 'obd_rs422_status' / Int32ul, 'obd_rs422_error' / Int32ul, 'obd_rs485_status' / Int32ul, 'obd_rs485_error' / Int32ul, 'obd_status' / Int32ul, 'acs_state' / Int8ul, 'acs_omega' / Float32b[3], 'pm_current_bp' / Int16sl[6], 'pm_voltage_mb' / Int16ul, 'pm_safe_operating_mode' / Int8ul, 'pm_error_1' / Int32ul, 'tt_tx_status_main' / Int8ul, 'ttm_error' / Int16ul, 'platform_fdir_ttm' / Int32ul, 'tt_tx_status_redundant' / Int8ul, 'ttr_error_ttr' / Int16ul, 'platform_fdir_ttr' / Int32ul, 'ss_error' / Int32ul[2], 'ese_error' / Int16ul, 'mwr_error' / Int16ul, 'mwm_status' / Int32ul, 'mm_error' / Int16ul[2], 'mt_error' / Int16ul[2], 'tt_tx_status' / Int8ul, 'tt_error' / Int16ul) Temperature = LinearAdapter(10, Int16ul) # Beacon of type 2 PowerSystem = Struct( 'pm_voltage_sp' / Int16ul[6], 'pm_shunt_section' / Int16ul[6], 'pm_temp_sp' / Temperature[3], 'pm_current_bp' / Int16ul[6], 'pm_temp_pb' / Temperature[6], 'pm_voltage_mb' / Int16ul, 'pm_safe_operating_mode' / Int8ul, 'pm_pdu_control' / Int8ul, 'pm_temp' / Temperature[2], 'pm_obdh_main_current' / Int16ul, 'pm_rx_main_current' / Int16ul, 'pm_tx_main_current' / Int16ul, 'pm_ss_main_current' / Int16ul, 'pm_mm_main_current' / Int16ul, 'pm_mw_main_current' / Int16ul, 'pm_mt_main_current' / Int16ul, 'pm_mps_current' / Int16ul, 'pm_tritel_current' / Int16ul, 'pm_hstx_current' / Int16ul, 'pm_gps_current' / Int16ul, 'pm_mps_valve_m_current' / Int16ul, 'pm_dom_1_current' / Int16ul, 'pm_obdh_red_current' / Int16ul, 'pm_rx_red_current' / Int16ul, 'pm_tx_red_current' / Int16ul, 'pm_ss_red_current' / Int16ul, 'pm_mm_red_current' / Int16ul, 'pm_mw_red_current' / Int16ul, 'pm_mt_red_current' / Int16ul, 'pm_es_current' / Int16ul, 'pm_ucam' / Int16ul, 'pm_amsat_current' / Int16ul, 'pm_lmp_current' / Int16ul, 'pm_eq_pl_status' / Int32ul, 'pm_error' / Int32ul[2]) # Beacon of type 3 OBDH = Struct( 'obd_mode' / Int8ul, 'obd_old_mode' / Int8ul, 'obd_active_task' / Int8ul, 'obd_equipment_status' / Int32ul, 'obd_equipment_health' / Int32ul, 'obd_cpu_error' / Int32ul, 'obd_can_status' / Int32ul, 'obd_plcan_m_error' / Int32ul, 'obd_plcan_r_error' / Int32ul, 'obd_pycan_m_error' / Int32ul, 'obd_pycan_r_error' / Int32ul, 'obd_can_timeout_error' / Int32ul, 'obd_hk_status' / Int32ul, 'obd_power_time' / Int64ul, 'obd_mode_transition' / Int64ul, 'obd_wd_reset_count' / Int8ul, 'obd_temp_pdu1' / Temperature, 'obd_temp_bat1' / Temperature, 'obd_temp_pmb' / Temperature, 'obd_temp_hpa2' / Temperature, 'obd_temp_hpa1' / Temperature, 'obd_temp_tnk' / Temperature, 'obd_temp_bat2' / Temperature, 'obd_temp_mwm' / Temperature, 'obd_temp_mwr' / Temperature, 'obd_temp_mmm' / Temperature, 'obd_temp_mmr' / Temperature, 'obd_rs422m_err_count' / Int16ul, 'obd_rs422r_err_count' / Int16ul, 'obd_hk_error' / Int32ul, 'obd_rs422_status' / Int32ul, 'obd_rs422_error' / Int32ul, 'obd_rs485_status' / Int32ul, 'obd_rs485_error' / Int32ul, 'obd_status' / Int32ul, 'obd_error' / Int32ul, 'obd_temp_error' / Int16ul, 'obd_error2' / Int32ul, 'obd_temp_error2' / Int16ul) # Beacon of type 4 AOCS = Struct( 'acs_state' / Int8ul, 'acs_sun_mode' / Int8ul, 'acs_err' / Int32ul, 'acs_attitude_q' / Float32b[4], 'acs_omega' / Float32b[3], 'acs_orbit_xyz' / Float32b[3], 'acs_orbit_v' / Float32b[3], 'acs_state_transition' / Int64ul, 'acs_fdir_mps_time_err' / Float32b, 'pm_spin_rate' / Int32ul, 'ssm_uc_pcb_temp' / Temperature, 'ss_adc_pcb_temp' / Temperature[2], 'ssm_topcase_temp' / Temperature, 'ssm_sidecase_temp' / Temperature, 'ssr_uc_pcb_temp' / Temperature, 'ss_adc_pcb_temp' / Temperature[2], 'ss_dcdc_temp' / Temperature, 'ss_sidecase_temp' / Temperature, 'ese_uc_pcb_temp' / Temperature, 'ese_tau_temp' / Temperature, 'mwr_temp' / Temperature, 'mwr_if_temp' / Temperature, 'mwm_temp' / Temperature[3], 'mps_hpt' / Int16ul, 'mps_lpt' / Int16ul, 'mps_pvt_temp' / Temperature, 'mm_dcdc_temp' / Temperature[2], 'mt_temp' / Temperature[2]) # Beacon of type 5 FDIR = Struct( 'obd_plcan_m_txerr_count' / Int16ul, 'obd_plcan_m_rxerr_count' / Int16ul, 'obd_plcan_r_txerr_count' / Int16ul, 'obd_plcan_r_rxerr_count' / Int16ul, 'obd_pycan_m_txerr_count' / Int16ul, 'obd_pycan_m_rxerr_count' / Int16ul, 'obd_pycan_r_txerr_count' / Int16ul, 'obd_pycan_r_rxerr_count' / Int16ul, 'obd_edac_error_count' / Int32ul, 'obd_rs422m_err_count' / Int16ul, 'obd_rs422r_err_count' / Int16ul, 'obd_error_count' / Int16ul, 'obd_hk_error' / Int32ul, 'obd_tc_error' / Int32ul[2], 'obd_rs422_status' / Int32ul, 'obd_rs422_error' / Int32ul, 'obd_rs485_status' / Int32ul, 'obd_rs485_error' / Int32ul, 'obd_error' / Int32ul, 'obd_temp_error' / Int16ul, 'acs_err' / Int32ul, 'acs_fdir_mps_time_err' / Float32b, 'pm_voltage_mb' / Int16ul, 'pm_safe_operating_mode' / Int8ul, 'pm_eq_pl_status' / Int32ul, 'pm_undervoltage_status' / Int32ul, 'tt_m_tx_status' / Int8ul, 'tt_m_tx_status_1' / Int8ul, 'tt_m_rx_status' / Int8ul, 'tt_m_rx_status_1' / Int8ul, 'tt_m_rx_rssi' / Int8sl, 'tt_m_error' / Int16ul, 'tt_m_temp' / Temperature[2], 'tt_m_rx_afc' / LinearAdapter(1/16.0, Int8sl), 'platform_m_fdir' / Int32ul, 'tt_r_tx_status' / Int8ul, 'tt_r_tx_status_1' / Int8ul, 'tt_r_rx_status' / Int8ul, 'tt_r_rx_status_1' / Int8ul, 'tt_r_rx_rssi' / Int8sl, 'tt_r_error' / Int16ul, 'tt_r_temp' / Temperature[2], 'tt_r_rx_afc' / LinearAdapter(1/16.0, Int8sl), 'platform_r_fdir' / Int32ul[3]) TriTmp = AffineAdapter(0.5, -40, Int8ul) # Beacon of type 6 Payload = Struct( 'tri_tmp_xyz' / TriTmp[3], 'tri_tmp_psu' / TriTmp, 'tri_tmp_cpu' / TriTmp, 'tri_tmp_adc' / TriTmp[3], 'tri_uinput' / LinearAdapter(150, Int8ul), 'tri_iinput' / LinearAdapter(2, Int8ul), 'tri_60V' / LinearAdapter(300, Int8ul), 'tri_5V' / LinearAdapter(30, Int8ul), 'tri_3_3V' / LinearAdapter(20, Int8ul), 'tri_neg10V' / LinearAdapter(100, Int8ul), 'tri_6_5V' / LinearAdapter(50, Int8ul), 'tri_neg6_5V' / LinearAdapter(50, Int8ul), 'tri_mode' / Int8ul, 'tri_freq' / Int8ul, 'tri_error' / Int8ul, 'eeprom' / Int8ul, 'lmp_tt_psu' / Int8sl, 'lmp_vt_p12' / LinearAdapter(1/0.078, Int8ul), 'lmp_vt_m12' / LinearAdapter(-1/0.078, Int8ul), 'lmp_vt_p5' / LinearAdapter(1/0.029, Int8ul), 'lmp_vt_m5' / LinearAdapter(-1/0.029, Int8ul), 'lmp_ct_dig' / LinearAdapter(1/1.259, Int8ul), 'lmp_vt_dig' / LinearAdapter(1/0.02, Int8ul), 'lmp_mem' / LinearAdapter(1/4096.0, Int8ul), 'lmp_ofs' / LinearAdapter(1/4.88, Int8ul), 'lmp_sw' / Int24ul, 'pcam_mcur_curr' / Int8ul, 'pcam_img_curr' / Int8ul, 'pcam_mcu_temp' / Temperature, 'pcam_img_temp' / Temperature, 'pcam_dcdc_temp' / Temperature, 'scam_mcur_curr' / Int8ul, 'scam_img_curr' / Int8ul, 'scam_ram_curr' / Int8ul, 'scam_mcu_temp' / Temperature, 'scam_img_temp' / Temperature, 'scam_sdr_temp' / Temperature[2], 'ams_obc_p_up' / Int32ul, 'ams_obc_p_up_dropped' / Int32ul, 'ams_obc_mem_stat_ram' / Int32ul, 'ams_obc_mem_stat_flash' / Int32ul, 'ams_eps_dcdc_t' / Int8ul, 'ams_vhf_fm_pa_t' / Int8ul, 'ams_vhf_bpsk_pa_t' / Int8ul, 'stx_vol' / LinearAdapter(50, Int8ul)[2], 'stx_cur' / LinearAdapter(50, Int8ul)[2], 'stx_temp' / AffineAdapter(0.5, 230, Int8ul)[4], 'stx_stat' / Int32ul, 'stx_com' / Int32ul, 'stx_mem' / Int32ul, 'gps_current_3V3' / Int16ul, 'gps_current_5V' / Int16ul, 'gps_week' / Int16ul, 'gps_temperature' / Temperature[2], 'gps_frend_m_volt' / Int16ul, 'gps_frend_r_volt' / Int16ul, 'gps_seconds_of_week' / Int32ul, 'ade_in_estimator_on' / Int8ul, 'ade_in_omega' / Int8ul, 'ade_oprq_q' / Float32b[3]) eseo = Struct( 'header' / Header16, 'type' / Int8ul, 'byte' / Int8ul, 'data' / Switch(this.type, { 3: General, 4: PowerSystem, 5: OBDH, 6: AOCS, 7: FDIR, 8: Payload}) ) gr-satellites-4.4.0/python/telemetry/floripasat.py000066400000000000000000000050041414055407700223550ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from construct import * from ..adapters import AffineAdapter, LinearAdapter Id = Enum( Int8ub, beacon_ngham_obdh_data=0x00, beacon_ngham_eps_data=0x01, beacon_ngham_ttc_data=0x02, beacon_ax25_obdh_data=0x03, beacon_ax25_eps_data=0x04, beacon_ax25_ttc_data=0x05, downlink_telemetry=0x10, downlink_ping_answer=0x11, downlink_data_request_answer=0x12, downlink_hibernation_feedback=0x13, downlink_charge_reset_feedback=0x14, downlink_message_broadcast=0x15, downlink_payload_x_status=0x16, downlink_rush_status=0x17, uplink_ping_request=0x20, uplink_data_request=0x21, uplink_enter_hibernation=0x22, uplink_leave_hibernation=0x23, uplink_charge_reset=0x24, uplink_broadcast_message=0x25, uplink_payload_x_status_request=0x26, uplink_payload_x_status_swap=0x27, uplink_payload_x_data_upload=0x28, uplink_rush_enable=0x29) BatteryVoltage = LinearAdapter(32/4.883e-3, Int16ub) BatteryTemperature = LinearAdapter(32/0.125, Int24ub) BatteryCharge = LinearAdapter(1/6.25e-4, Int16ub) SolarPanelCurrent = LinearAdapter(1/((2.5/4095)*(1/(0.05*0.025*3300))), Int16ub) SolarPanelVoltage = AffineAdapter(4095/2.5, -93.1/100, Int16ub) ImuAccel = LinearAdapter(32768.0/16.0, Int16sb) ImuGyro = LinearAdapter(32768.0/250, Int16sb) OBDHStatus = BitStruct( Padding(3), 'antenna' / Flag, 'imu' / Flag, 'sd_card' / Flag, 'rush' / Flag, 'eps' / Flag ) SystemTime = Struct( 'seconds' / Int8ub, 'minutes' / Int24ub, ) EPS = Struct( 'battery_voltage' / BatteryVoltage[2], 'battery_temperature' / BatteryTemperature[2], 'battery_charge' / BatteryCharge, 'solar_panel_current' / SolarPanelCurrent[6], 'solar_panel_voltage' / SolarPanelVoltage[3], 'energy_level' / Int8ub, ) OBDH = Struct( 'eps' / EPS, 'status' / OBDHStatus, 'imu_accelerometer' / ImuAccel[3], 'imu_gyroscope' / ImuGyro[3], 'system_time' / SystemTime, 'odbh_resets' / Int8ub ) floripasat = Struct( 'ngham_padding' / Int8ub, 'id' / Id, 'callsign' / Bytes(7), 'payload' / Switch(this.id, { 'beacon_ngham_obdh_data': OBDH, 'beacon_ngham_eps_data': EPS, 'beacon_ax25_obdh_data': OBDH, 'beacon_ax25_eps_data': EPS, }, default=GreedyBytes) ) gr-satellites-4.4.0/python/telemetry/fossasat.py000066400000000000000000000157711414055407700220500ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 jgromes # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from construct import * from ..adapters import LinearAdapter FuncId = Enum( Int8ul, RESP_PONG=0x20, RESP_REPEATED_MESSAGE=0x21, RESP_REPEATED_MESSAGE_CUSTOM=0x22, RESP_SYSTEM_INFO=0x23, RESP_PACKET_INFO=0x24, RESP_STATISTICS=0x25, RESP_FULL_SYSTEM_INFO=0x26, RESP_STORE_AND_FORWARD_ASSIGNED_SLOT=0x27, RESP_FORWARDED_MESSAGE=0x28, RESP_PUBLIC_PICTURE=0x29, RESP_DEPLOYMENT_STATE=0x2A, RESP_RECORDED_SOLAR_CELLS=0x2B, RESP_CAMERA_STATE=0x2C, RESP_RECORDED_IMU=0x2D, RESP_MANUAL_ACS_RESULT=0x2E, RESP_GPS_LOG=0x2F, RESP_GPS_LOG_STATE=0x30, RESP_FLASH_CONTENTS=0x31, RESP_CAMERA_PICTURE=0x32, RESP_CAMERA_PICTURE_LENGTH=0x33, RESP_GPS_COMMAND_RESPONSE=0x34, RESP_ACKNOWLEDGE=0x3F, ) Pong = Struct() RepeatedMessage = Struct( 'sender_id' / Int32ul, 'msg' / HexDump(GreedyBytes), ) VoltageValue = LinearAdapter(1e3/20, Int8ul) CurrentValue = LinearAdapter(1e6/10, Int16sl) TempValue = LinearAdapter(1e3/10, Int16sl) SystemInfo = Struct( 'mppt_v_out' / VoltageValue, 'mmpt_i_out' / CurrentValue, 'onboard_time' / Int32ul, 'power_cfg' / BitStruct( Padding(1), 'mppt_keep_alive' / Flag, 'mppt_temp_switch' / Flag, Padding(2), 'lp_active' / Flag, 'lp_enabled' / Flag, 'tx_enabled' / Flag, ), 'reset_ctr' / Int16ul, 'xa_v_in' / VoltageValue, 'xb_v_in' / VoltageValue, 'za_v_in' / VoltageValue, 'zb_v_in' / VoltageValue, 'y_v_in' / VoltageValue, 'batt_temp' / TempValue, 'obc_temp' / TempValue, 'flash_err_ctr' / Int32ul, ) SNRValue = LinearAdapter(1/4, Int8sl) RSSIValue = LinearAdapter(1/-2, Int8ul) PacketInfo = Struct( 'last_snr' / SNRValue, 'last_rssi' / RSSIValue, 'lora_valid_ctr' / Int16ul, 'lora_invalid_ctr' / Int16ul, 'fsk_valid_ctr' / Int16ul, 'fsk_invalid_ctr' / Int16ul, ) StatsEntryTemp = Struct( 'min' / TempValue, 'avg' / TempValue, 'max' / TempValue, ) StatsEntryCurrent = Struct( 'min' / CurrentValue, 'avg' / CurrentValue, 'max' / CurrentValue, ) StatsEntryVoltage = Struct( 'min' / VoltageValue, 'avg' / VoltageValue, 'max' / VoltageValue, ) StatsEntryFloat = Struct( 'min' / Float32l, 'avg' / Float32l, 'max' / Float32l, ) StatsTemperatures = Struct( 'panel_y' / StatsEntryTemp, 'top' / StatsEntryTemp, 'bottom' / StatsEntryTemp, 'battery' / StatsEntryTemp, 'sec_battery' / StatsEntryTemp, ) StatsCurrents = Struct( 'xa' / StatsEntryCurrent, 'xb' / StatsEntryCurrent, 'za' / StatsEntryCurrent, 'zb' / StatsEntryCurrent, 'y' / StatsEntryCurrent, 'mppt' / StatsEntryCurrent, ) StatsVoltages = Struct( 'xa' / StatsEntryVoltage, 'xb' / StatsEntryVoltage, 'za' / StatsEntryVoltage, 'zb' / StatsEntryVoltage, 'y' / StatsEntryVoltage, 'mppt' / StatsEntryVoltage, ) StatsLight = Struct( 'panel_y' / StatsEntryFloat, 'top' / StatsEntryFloat, ) StatsAxes = Struct( 'x' / StatsEntryFloat, 'y' / StatsEntryFloat, 'z' / StatsEntryFloat, ) StatsIMU = Struct( 'gyro' / StatsAxes, 'accel' / StatsAxes, 'mag' / StatsAxes, ) Statistics = Struct( 'flags' / BitStruct( Padding(3), 'has_imu' / Flag, 'has_light' / Flag, 'has_volt' / Flag, 'has_curr' / Flag, 'has_temp' / Flag, ), 'stats' / Struct( 'temperature' / Optional(If(this._.flags.has_temp, StatsTemperatures)), 'current' / Optional(If(this._.flags.has_curr, StatsCurrents)), 'voltage' / Optional(If(this._.flags.has_volt, StatsVoltages)), 'light' / Optional(If(this._.flags.has_light, StatsLight)), 'imu' / Optional(If(this._.flags.has_imu, StatsIMU)), ), ) FullSystemInfo = Struct( 'mppt_v_out' / VoltageValue, 'mmpt_i_out' / CurrentValue, 'onboard_time' / Int32ul, 'power_cfg' / BitStruct( Padding(1), 'mppt_keep_alive' / Flag, 'mppt_temp_switch' / Flag, Padding(2), 'lp_active' / Flag, 'lp_enabled' / Flag, 'tx_enabled' / Flag, ), 'reset_ctr' / Int16ul, 'xa_v_in' / VoltageValue, 'xa_i_in' / CurrentValue, 'xb_v_in' / VoltageValue, 'xb_i_in' / CurrentValue, 'za_v_in' / VoltageValue, 'za_i_in' / CurrentValue, 'zb_v_in' / VoltageValue, 'zb_i_in' / CurrentValue, 'y_v_in' / VoltageValue, 'y_i_in' / CurrentValue, 'y_temp' / TempValue, 'obc_board_temp' / TempValue, 'bottom_temp' / TempValue, 'batt_temp' / TempValue, 'sec_batt_temp' / TempValue, 'mcu_temp' / TempValue, 'y_lux' / Float32l, 'top_lux' / Float32l, 'x_bridge_fault' / Int8ul, 'y_bridge_fault' / Int8ul, 'z_bridge_fault' / Int8ul, 'flash_err_ctr' / Int32ul, 'fsk_rx_len' / Int8ul, 'lora_rx_len' / Int8ul, 'sensors' / BitStruct( 'light_top' / Flag, 'light_y' / Flag, 'curr_mppt' / Flag, 'curr_y' / Flag, 'curr_zb' / Flag, 'curr_za' / Flag, 'curr_xb' / Flag, 'curr_xa' / Flag, ), 'last_adcs_res' / Int8ul, ) StoreAndForwardAssigned = Struct( 'assigned_slot' / Int16ul, ) ForwardedMessage = Struct( 'msg' / HexDump(GreedyBytes), ) DeploymentState = Struct( 'deploy_ctr' / Int8ul, ) CameraState = Struct( 'cam_state' / Int32ul, ) SampleAxes = Struct( 'x' / Float32l, 'y' / Float32l, 'z' / Float32l, ) RecordedIMU = Struct( 'flags' / BitStruct( Padding(5), 'has_mag' / Flag, 'has_accel' / Flag, 'has_gyro' / Flag, ), 'samples' / Struct( 'gyro' / Optional(If(this._.flags.has_gyro, SampleAxes)), 'accel' / Optional(If(this._.flags.has_accel, SampleAxes)), 'mag' / Optional(If(this._.flags.has_mag, SampleAxes)), ) ) ManualACSResult = Struct( 'x_bridge_fault' / Int8ul, 'y_bridge_fault' / Int8ul, 'z_bridge_fault' / Int8ul, 'adcs_elapsed' / Int32ul, ) GPSLog = Struct( 'time' / Int32ul, 'data' / HexDump(GreedyBytes), ) GPSLogState = Struct( 'length' / Int32ul, 'last_entry_addr' / Int32ul, 'last_fix_addr' / Int32ul, ) FlashContents = Struct( 'data' / HexDump(GreedyBytes), ) CameraPicture = Struct( 'packet_id' / Int16ul, 'data' / HexDump(GreedyBytes), ) CameraPictureLength = Struct( 'len' / Int32ul, ) GPSCommandResponse = Struct( 'resp' / HexDump(GreedyBytes), ) Acknowledge = Struct( 'acked_func_id' / FuncId, 'status' / Enum( Int8ul, ACK_OK=0x00, ACK_CALLSIGN_MISMATCH=0x01, ACK_RX_FAILED=0x02, ACK_FUNC_ID_FAILED=0x03, ACK_DECRYPT_FAILED=0x04, ACK_OPT_DATA_LEN_FAILED=0x05, ACK_FUNC_ID_UKNOWN=0x06, ), ) gr-satellites-4.4.0/python/telemetry/fossasat_1b.py000066400000000000000000000060001414055407700224130ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 jgromes # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from construct import * from ..adapters import LinearAdapter from .fossasat import ( VoltageValue, CurrentValue, TempValue, FuncId, StatsCurrents, StatsVoltages, StatsTemperatures, Pong, RepeatedMessage, SystemInfo, PacketInfo, Statistics, StoreAndForwardAssigned, ForwardedMessage, CameraPicture, DeploymentState) SystemInfo = Struct( 'v_batt' / VoltageValue, 'i_chrg' / CurrentValue, 'v_chrg' / VoltageValue, 'uptime' / Int32ul, 'power_cfg' / Struct( Padding(3), 'tx_enabled' / Flag, 'mppt_keep_alive' / Flag, 'mppt_temp_switch' / Flag, 'lp_enabled' / Flag, 'lp_active' / Flag, ), 'reset_ctr' / Int16ul, 'v_panel_a' / VoltageValue, 'v_panel_b' / VoltageValue, 'v_panel_c' / VoltageValue, 'batt_temp' / TempValue, 'obc_temp' / TempValue, 'mcu_temp' / Int8sl, ) Statistics = Struct( 'flags' / BitStruct( 'has_obc_temp' / Flag, 'has_batt_temp' / Flag, 'has_v_panel_c' / Flag, 'has_v_panel_b' / Flag, 'has_v_panel_a' / Flag, 'has_v_batt' / Flag, 'has_i_chrg' / Flag, 'has_v_chrg' / Flag, ), 'stats' / Struct( 'v_chrg' / Optional(If(this._.flags.has_v_chrg, StatsVoltages)), 'i_chrg' / Optional(If(this._.flags.has_i_chrg, StatsCurrents)), 'v_batt' / Optional(If(this._.flags.has_v_batt, StatsVoltages)), 'v_panel_a' / Optional(If(this._.flags.has_v_panel_a, StatsVoltages)), 'v_panel_b' / Optional(If(this._.flags.has_v_panel_b, StatsVoltages)), 'v_panel_c' / Optional(If(this._.flags.has_v_panel_c, StatsVoltages)), 'batt_temp' / Optional(If(this._.flags.has_batt_temp, StatsTemperatures)), 'obc_temp' / Optional(If(this._.flags.has_obc_temp, StatsTemperatures)), ), ) RecordedSolarCells = Struct( 'samples' / GreedyRange( Struct( 'v_panel_a' / VoltageValue, 'v_panel_b' / VoltageValue, 'v_panel_c' / VoltageValue, ) ) ) fossasat_1b = Struct( 'callsign' / Const(b"FOSSASAT-1B"), 'func_id' / FuncId, 'opt_data_len' / Optional(Int8ul), 'payload' / Switch(this.func_id, { 'RESP_PONG': Pong, 'RESP_REPEATED_MESSAGE': RepeatedMessage, 'RESP_REPEATED_MESSAGE_CUSTOM': RepeatedMessage, 'RESP_SYSTEM_INFO': SystemInfo, 'RESP_PACKET_INFO': PacketInfo, 'RESP_STATISTICS': Statistics, 'RESP_STORE_AND_FORWARD_ASSIGNED_SLOT': StoreAndForwardAssigned, 'RESP_FORWARDED_MESSAGE': ForwardedMessage, 'RESP_PUBLIC_PICTURE': CameraPicture, 'RESP_DEPLOYMENT_STATE': DeploymentState, 'RESP_RECORDED_SOLAR_CELLS': RecordedSolarCells, }, default=HexDump(GreedyBytes)), ) gr-satellites-4.4.0/python/telemetry/fossasat_2.py000066400000000000000000000026671414055407700222710ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 jgromes # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from construct import * from ..adapters import LinearAdapter from .fossasat import * fossasat_2 = Struct( 'callsign' / Const(b"FOSSASAT-2"), 'func_id' / FuncId, 'opt_data_len' / Optional(Int8ul), 'payload' / Switch(this.func_id, { 'RESP_PONG': Pong, 'RESP_REPEATED_MESSAGE': RepeatedMessage, 'RESP_REPEATED_MESSAGE_CUSTOM': RepeatedMessage, 'RESP_SYSTEM_INFO': SystemInfo, 'RESP_PACKET_INFO': PacketInfo, 'RESP_STATISTICS': Statistics, 'RESP_FULL_SYSTEM_INFO': FullSystemInfo, 'RESP_STORE_AND_FORWARD_ASSIGNED_SLOT': StoreAndForwardAssigned, 'RESP_FORWARDED_MESSAGE': ForwardedMessage, 'RESP_PUBLIC_PICTURE': CameraPicture, 'RESP_DEPLOYMENT_STATE': DeploymentState, 'RESP_CAMERA_STATE': CameraState, 'RESP_RECORDED_IMU': RecordedIMU, 'RESP_MANUAL_ACS_RESULT': ManualACSResult, 'RESP_GPS_LOG': GPSLog, 'RESP_GPS_LOG_STATE': GPSLogState, 'RESP_FLASH_CONTENTS': FlashContents, 'RESP_CAMERA_PICTURE': CameraPicture, 'RESP_CAMERA_PICTURE_LENGTH': CameraPictureLength, 'RESP_GPS_COMMAND_RESPONSE': GPSCommandResponse, 'RESP_ACKNOWLEDGE': Acknowledge, }, default=HexDump(GreedyBytes)), ) gr-satellites-4.4.0/python/telemetry/funcube.py000066400000000000000000000326111414055407700216440ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2017,2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from construct import * SatID = Enum( BitsInteger(2), FC1EM=0, FC2=1, FC1FM=2, extended=3, ) FrameType = Enum( BitsInteger(6), WO1=0, WO2=1, WO3=2, WO4=3, WO5=4, WO6=5, WO7=6, WO8=7, WO9=8, WO10=9, WO11=10, WO12=11, HR1=12, FM1=13, FM2=14, FM3=15, HR2=16, FM4=17, FM5=18, FM6=19, HR3=20, FM7=21, FM8=22, FM9=23) FrameTypeNayif1 = Enum( BitsInteger(6), WO1=0, WO2=1, WO3=2, WO4=3, WO5=4, WO6=5, WO7=6, WO8=7, WO9=8, WO10=9, WO11=10, WO12=11, HR1=12, HR2=13, HR3=14, HR4=15, HR5=16, FM1=17, FM2=18, FM3=19, FM4=20, FM5=21, FM6=22, FM7=23) class FrameTypeAdapter(Adapter): def _encode(self, obj, context, path=None): return obj.value def _decode(self, obj, context, path=None): return FrameType(obj) FrameTypeField = FrameTypeAdapter(BitsInteger(6)) Header = BitStruct( 'satid' / SatID, 'frametype' / IfThenElse(lambda c: c.satid != 'extended', FrameType, FrameTypeNayif1), ) EPSFC1 = Struct( 'photovoltage' / BitsInteger(16)[3], 'photocurrent' / BitsInteger(16), 'batteryvoltage' / BitsInteger(16), 'systemcurrent' / BitsInteger(16), 'rebootcount' / BitsInteger(16), 'softwareerrors' / BitsInteger(16), 'boostconvertertemp' / Octet[3], 'batterytemp' / Octet, 'latchupcount5v' / Octet, 'latchupcount3v3' / Octet, 'resetcause' / Octet, 'MPPTmode' / Octet, ) EPSNayif1 = Struct( 'photovoltage' / BitsInteger(14)[3], 'batteryvoltage' / BitsInteger(14), 'photocurrent' / BitsInteger(10)[3], 'totalphotocurrent' / BitsInteger(10), 'systemcurrent' / BitsInteger(10), 'rebootcount' / Octet, 'boostconvertertemp' / Octet[3], 'batterytemp' / Octet, 'latchupcount5v' / Octet, 'channelcurrent5v' / Octet, 'resetcause' / BitsInteger(4), 'MPTTmode' / BitsInteger(4), ) iMTQMode = Enum( BitsInteger(2), idle=0, selftest=1, detumble=2, ) iMTQ = Struct( 'imtqmode' / iMTQMode, 'imtqerrorcode' / BitsInteger(3), 'imtqconfigurationset' / BitsInteger(1), 'imtqmcutemperature' / Octet, ) class TempXpAdapter(Adapter): def _encode(self, obj, context, path=None): return int((obj-158.239)/-0.2073) def _decode(self, obj, context, path=None): return -0.2073*obj + 158.239 TempXp = TempXpAdapter(BitsInteger(10)) class TempXmAdapter(Adapter): def _encode(self, obj, context, path=None): return int((obj-159.227)/-0.2083) def _decode(self, obj, context, path=None): return -0.2083*obj + 159.227 TempXm = TempXmAdapter(BitsInteger(10)) class TempYpAdapter(Adapter): def _encode(self, obj, context, path=None): return int((obj-158.656)/-0.2076) def _decode(self, obj, context, path=None): return -0.2076*obj + 158.656 TempYp = TempYpAdapter(BitsInteger(10)) class TempYmAdapter(Adapter): def _encode(self, obj, context, path=None): return int((obj-159.045)/-0.2087) def _decode(self, obj, context, path=None): return -0.2087*obj + 159.045 TempYm = TempYmAdapter(BitsInteger(10)) class V3v3Adapter(Adapter): def _encode(self, obj, context, path=None): return int(obj/4.0) def _decode(self, obj, context, path=None): return 4*obj V3v3 = V3v3Adapter(BitsInteger(10)) class V5vAdapter(Adapter): def _encode(self, obj, context, path=None): return int(obj/6.0) def _decode(self, obj, context, path=None): return 6*obj V5v = V5vAdapter(BitsInteger(10)) # FC1 BOB = Struct( 'sunsensor' / BitsInteger(10)[3], 'paneltempX+' / TempXp, 'paneltempX-' / TempXm, 'paneltempY+' / TempYp, 'paneltempY-' / TempYm, '3v3voltage' / V3v3, '3v3current' / BitsInteger(10), '5voltage' / V5v, ) # Nayif-1 ASIB = Struct( 'sunsensor' / BitsInteger(10)[6], '3v3voltage' / V3v3, 'imtquptime' / BitsInteger(20), '5voltage' / V5v, ) class RFTempAdapter(Adapter): def _encode(self, obj, context, path=None): return int((obj-193.672)/-0.857) def _decode(self, obj, context, path=None): return -0.857*obj + 193.672 RFTemp = RFTempAdapter(Octet) class RXCurrAdapter(Adapter): def _encode(self, obj, context, path=None): return int(obj/0.636) def _decode(self, obj, context, path=None): return 0.636*obj RXCurr = RXCurrAdapter(Octet) class TXCurrAdapter(Adapter): def _encode(self, obj, context, path=None): return int(obj/1.272) def _decode(self, obj, context, path=None): return 1.272*obj TXCurr = TXCurrAdapter(Octet) RF = Struct( 'rxdoppler' / Octet, 'rxrssi' / Octet, 'temp' / RFTemp, 'rxcurrent' / RXCurr, 'tx3v3current' / RXCurr, 'tx5vcurrent' / TXCurr, ) class PwrAdapter(Adapter): def _encode(self, obj, context, path=None): return int((obj/5e-3)**(1.0/2.0629)) def _decode(self, obj, context, path=None): return 5e-3*obj**2.0629 Pwr = PwrAdapter(Octet) class PACurrAdapter(Adapter): def _encode(self, obj, context, path=None): return int((obj-2.5435)/0.5496) def _decode(self, obj, context, path=None): return 0.5496*obj + 2.5435 PACurr = PACurrAdapter(Octet) PA = Struct( 'revpwr' / Pwr, 'fwdpwr' / Pwr, 'boardtemp' / Octet, # TODO use lookup table 'boardcurr' / PACurr, ) Ants = Struct( 'temp' / Octet[2], # TODO use ISIS manual 'deployment' / Flag[4], ) # Also valid for Nayif-1 SWFC1 = Struct( 'seqnumber' / BitsInteger(24), 'dtmfcmdcount' / BitsInteger(6), 'dtmflastcmd' / BitsInteger(5), 'dtmfcmdsuccess' / Flag, 'datavalid' / Flag[7], 'eclipse' / Flag, 'safemode' / Flag, 'hwabf' / Flag, 'swabf' / Flag, 'deploymentwait' / Flag, ) RealTimeFC1 = BitStruct( 'eps' / EPSFC1, 'bob' / BOB, 'rf' / RF, 'pa' / PA, 'ants' / Ants, 'sw' / SWFC1, ) HighResolution = BitStruct( 'sunsensor' / BitsInteger(10)[5], 'photocurrent' / BitsInteger(15), 'batteryvoltage' / BitsInteger(15), ) HRPayload = HighResolution[20] class TempBlackChassisAdapter(Adapter): def _encode(self, obj, context, path=None): return int((obj-75.244)/-0.024) def _decode(self, obj, context, path=None): return -0.024*obj + 75.244 TempBlackChassis = TempBlackChassisAdapter(BitsInteger(12)) class TempSilverChassisAdapter(Adapter): def _encode(self, obj, context, path=None): return int((obj-74.750)/-0.024) def _decode(self, obj, context, path=None): return -0.024*obj + 74.750 TempSilverChassis = TempSilverChassisAdapter(BitsInteger(12)) class TempBlackPanelAdapter(Adapter): def _encode(self, obj, context, path=None): return int((obj-75.039)/-0.024) def _decode(self, obj, context, path=None): return -0.024*obj + 75.039 TempBlackPanel = TempBlackPanelAdapter(BitsInteger(12)) class TempSilverPanelAdapter(Adapter): def _encode(self, obj, context, path=None): return int((obj-75.987)/-0.024) def _decode(self, obj, context, path=None): return -0.024*obj + 75.987 TempSilverPanel = TempSilverPanelAdapter(BitsInteger(12)) WholeOrbitFC1 = BitStruct( 'tempblackchassis' / TempBlackChassis, 'tempsilverchassis' / TempSilverChassis, 'tempblackpanel' / TempBlackPanel, 'tempsilverpanel' / TempSilverPanel, 'paneltempX+' / TempXp, 'paneltempX-' / TempXm, 'paneltempY+' / TempYp, 'paneltempY-' / TempYm, 'photovoltage' / BitsInteger(16)[3], 'photocurrent' / BitsInteger(16), 'batteryvoltage' / BitsInteger(16), 'systemcurrent' / BitsInteger(16), ) Callsign = Bytes(8) FC2Battery = Struct( 'direction' / Flag, 'current' / Octet, 'voltage' / Octet, 'temp' / Octet, ) EPSFC2 = Struct( 'sunlight' / Flag, 'solarcurrent' / BitsInteger(10)[12], 'solartemp' / Octet, 'batteries' / FC2Battery[3], 'batteryheater' / Flag, ) SWFC2 = Struct( 'seqnumber' / BitsInteger(24), 'dtmfcmdcount' / BitsInteger(6), 'dtmflastcmd' / BitsInteger(5), 'dtmfcmdsuccess' / Flag, ) RealTimeFC2 = BitStruct( 'eps' / EPSFC2, 'antstimeout' / Octet, 'antsstatus' / BitsInteger(12), 'antstemp' / Octet, 'rf' / RF, 'pa' / PA, 'amacmode' / BitsInteger(3), 'magnetometer' / BitsInteger(12)[3], 'funtrxenable' / Flag, 'funtrxsampleenable' / Flag, 'modemanagermode' / BitsInteger(3), 'modemanagercommsnominal' / Flag, 'modemanagercommsstate' / BitsInteger(2), 'tmtcmanageridleenable' / Flag, 'tmtceventforwarding' / Flag, 'tcbufferreceiveenable' / BitsInteger(3), 'tcbuffersendenable' / BitsInteger(3), 'obcsoftresetcount' / Octet, 'epshardresetcount' / Octet, Padding(20), 'sw' / SWFC2, ) FC2Battery0 = Struct( 'current' / Octet, 'voltage' / Octet, 'temp' / Octet, ) FC2Battery2 = Struct( 'direction' / Flag, 'current' / Octet, 'voltage' / Octet, ) WholeOrbitFC2 = BitStruct( 'tempthermistor' / BitsInteger(12)[4], 'solartemps' / BitsInteger(8)[5], 'battery0' / FC2Battery0, 'battery1' / FC2Battery, 'battery2' / FC2Battery2, Padding(6), ) RealTimeNayif1 = BitStruct( 'eps' / EPSNayif1, 'imtq' / iMTQ, 'asib' / ASIB, 'rf' / RF, 'pa' / PA, 'ants' / Ants, 'sw' / SWFC1, ) FitterMessage = Bytes(200) Frame = Struct( 'header' / Header, 'extheader' / If(lambda c: c.header.satid == 'extended', Byte), 'realtime' / Switch(lambda c: c.header.satid, { 'FC1EM': RealTimeFC1, 'FC1FM': RealTimeFC1, 'FC2': RealTimeFC2, 'extended': Switch(lambda c: c.extheader, { 0x08: RealTimeNayif1, }, default=Bytes(54)), }), 'payload' / If(lambda c: hasattr(c.header.frametype, '__getitem__'), Switch(lambda c: c.header.frametype[:2], { 'WO': Bytes(200), 'HR': HRPayload, 'FM': FitterMessage, }) ), ) def WholeOrbit(satid): if satid == 'FC1EM' or satid == 'FC1FM': return WholeOrbitFC1 if satid == 'FC2': return WholeOrbitFC2 return Bytes(23) WHOLEORBIT_SIZE = 23 PAYLOAD_SIZE = 200 WHOLEORBIT_MAX = 12 class Funcube: """Telemetry parser for FUNcube This is a stateful parser that reassembles Whole Orbit data from consecutive frames """ def __init__(self): self.last_chunk = None self.last_seq = None def parse(self, packet): if len(packet) != 256: return data = Frame.parse(packet) if not data: return out = list() out.append(f'Frame type {data.header.frametype}') if not hasattr(data.header.frametype, '__getitem__'): print('Unknown frame type. Not processing frame.') return out.append('-'*40) out.append('Realtime telemetry:') out.append('-'*40) out.append(str(data.realtime)) out.append('-'*40) if data.header.frametype[:2] == 'FM': out.append(f'Fitter Message {data.header.frametype[2]}') out.append('-'*40) out.append(str(data.payload)) elif data.header.frametype[:2] == 'HR': out.append(f'High resolution {data.header.frametype[2]}') out.append('-'*40) out.append(str(data.payload)) elif data.header.frametype[:2] == 'WO': chunk = int(data.header.frametype[2:]) try: seq = data.realtime.search('seqnumber') except AttributeError: out.append( 'Unknown realtime format. Unable to get seqnumber.\n') return '\n'.join(out) remaining = (PAYLOAD_SIZE*chunk) % WHOLEORBIT_SIZE recover = True if chunk != 0: if self.last_chunk == chunk - 1 and self.last_seq == seq: # Can recover for last WO packet wo = self.last_wo + data.payload[:-remaining] else: recover = False last_chunk_remaining = ( (PAYLOAD_SIZE*(chunk-1)) % WHOLEORBIT_SIZE) wo = data.payload[ WHOLEORBIT_SIZE-last_chunk_remaining:-remaining] else: wo = data.payload[:-remaining] assert len(wo) % WHOLEORBIT_SIZE == 0 wos = WholeOrbit(data.header.satid)[ len(wo) // WHOLEORBIT_SIZE].parse(wo) self.last_chunk = chunk self.last_wo = data.payload[-remaining:] self.last_seq = seq out.append(f'Whole orbit {chunk}') if not recover: out.append('(could not recover data from previous beacon)') out.append('-'*40) out.append(str(wos)) if chunk == WHOLEORBIT_MAX: out.append('-'*40) # Callsign included out.append(f'Callsign: {Callsign.parse(self.last_wo)}') out.append('') return '\n'.join(out) funcube = Funcube() gr-satellites-4.4.0/python/telemetry/gomx_1.py000066400000000000000000000052071414055407700214100ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from construct import * from .csp import CSPHeader from ..adapters import UNIXTimestampAdapter, LinearAdapter Timestamp = UNIXTimestampAdapter(Int32ub) Temperature = LinearAdapter(4, Int16sb) OBC = Struct( 'boot_count' / Int16ub, 'temp' / Temperature[2], 'panel_temp' / Temperature[6] ) COM = Struct( 'byte_corr_tot' / Int16ub, # Bytes corrected by RS 'rx' / Int16ub, # RX packets 'rx_err' / Int16ub, 'tx' / Int16ub, 'last_temp' / Int16sb[2], 'last_rssi' / Int16sb, # dBm 'last_rferr' / Int16sb, # Hz 'last_batt_volt' / LinearAdapter(100.0, Int16ub), # V 'last_tx_current' / Int16ub, # mA 'boot_count' / Int16ub ) Battmode = Enum(Int8ub, normal=0, undervoltage=1, overvoltage=2) EPS = Struct( 'vboost' / LinearAdapter(1000.0, Int16ub)[3], 'vbatt' / LinearAdapter(1000.0, Int16ub), 'curout' / Int16ub[6], 'curin' / Int16ub[3], 'cursun' / Int16ub, # Boost converter current mA 'cursys' / Int16ub, # Battery current mA 'temp' / Int16sb[6], 'output' / Int8ub, # Output status 'counter_boot' / Int16ub, # EPS reboots 'counter_wdt_i2c' / Int16ub, # WDT I2C reboots 'counter_wdt_gnd' / Int16ub, # WDT GND reboots 'bootcause' / Int8ub, 'latchup' / Int16ub[6], 'battmode' / Battmode ) GATOSS = Struct( 'average_fps_5min' / Int16ub, 'average_fps_1min' / Int16ub, 'average_fps_10sec' / Int16ub, 'plane_count' / Int16ub, 'frame_count' / Int32ub, 'last_icao' / Hex(Int32ub), 'last_timestamp' / Timestamp, 'last_lat' / Float32b, 'last_lon' / Float32b, 'last_altitude' / Int32ub, 'crc_corrected' / Int32ub, 'boot_count' / Int16ub, 'boot_cause' / Int16ub ) Hub = Struct( 'temp' / Int8sb, 'boot_count' / Int16ub, 'reset_cause' / Int8ub, 'switch_status' / Int8ub, 'burns' / Int16ub[2] # burn tries ) ADCS = Struct( 'tumblerate' / Float32b[3], 'tumblenorm' / Float32b[2], 'magnetometer' / Float32b[3], 'status' / Int8ub, 'torquerduty' / Float32b[3], 'ads_state' / Int8ub, 'acs_state' / Int8ub, 'sunsensor' / Int8ub[8] ) beacon_a = Struct( 'obc' / OBC, 'com' / COM, 'eps' / EPS, 'gatoss' / GATOSS, 'hub' / Hub, 'adcs' / ADCS ) gomx_1 = Struct( 'csp_header' / CSPHeader, 'beacon_time' / Timestamp, 'beacon_flags' / Int8ub, # There is also an unsupported beacon_b which is shorter 'beacon' / Optional(beacon_a), ) gr-satellites-4.4.0/python/telemetry/gomx_3.py000066400000000000000000000037631414055407700214170ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from construct import * from .csp import CSPHeader from ..adapters import UNIXTimestampAdapter, LinearAdapter Voltage = LinearAdapter(1000.0, Int16ub) Timestamp = UNIXTimestampAdapter(Int32ub) EPS = Struct( 'timestamp' / Timestamp, 'vboost' / Voltage[3], 'vbatt' / Voltage, 'curout' / Int16ub[7], 'curin' / Int16ub[3], 'cursun' / Int16ub, 'cursys' / Int16ub, 'eps_temp' / Int16sb[6], 'battmode' / Int8ub ) Temperature = LinearAdapter(10.0, Int16sb) COM = Struct( 'timestamp' / Timestamp, 'temp_brd' / Temperature, 'temp_pa' / Temperature, 'last_rssi' / Int16sb, 'last_rferr' / Int16sb, 'bgnd_rssi' / Int16sb ) OBC = Struct( 'timestamp' / Timestamp, 'cur_gssb' / Int16ub[2], 'cur_flash' / Int16ub, 'temp' / Temperature[2] ) ADCS = Struct( 'timestamp' / Timestamp, 'cur_gssb' / Int16ub[2], 'cur_flash' / Int16ub, 'cur_pwm' / Int16ub, 'cur_gps' / Int16ub, 'cur_wde' / Int16ub, 'temp' / Temperature[2] ) ADSB = Struct( 'timestamp' / Timestamp, 'cur5v0brd' / Int16ub, 'cur3v3brd' / Int16ub, 'cur3v3sd' / Int16ub, 'cur1v2' / Int16ub, 'cur2v5' / Int16ub, 'cur3v3fpga' / Int16ub, 'cur3v3adc' / Int16ub, 'last_icao' / Hex(Int32ub), 'last_lat' / Float32b, 'last_lon' / Float32b, 'last_alt' / Int32ub, 'last_time' / Timestamp ) gomx_3 = Struct( 'csp_header' / CSPHeader, 'beacon_type' / Int8ub, 'beacon' / If( ((this.csp_header.destination == 10) & (this.csp_header.destination_port == 30) & (this.csp_header.source == 1) & (this.beacon_type == 0)), Struct( 'eps' / EPS, 'com' / COM, 'obc' / OBC, 'adcs' / ADCS, 'adsb' / ADSB ) ) ) gr-satellites-4.4.0/python/telemetry/kr01.py000066400000000000000000000033031414055407700207660ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2017,2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from construct import * Mode = Enum( Int8ub, Otherwise=0, MissionMode=1, ) class BatVoltageAdapter(Adapter): def _encode(self, obj, context, path=None): return int((obj - 3.0) * 20.0) def _decode(self, obj, context, path=None): return obj / 20.0 + 3.0 BatVoltage = BatVoltageAdapter(Int8ub) class BatCurrentAdapter(Adapter): def _encode(self, obj, context, path=None): return int((obj + 1.0) * 127.0) def _decode(self, obj, context, path=None): return obj / 127.0 - 1.0 BatCurrent = BatCurrentAdapter(Int8ub) class BusCurrentAdapter(Adapter): def _encode(self, obj, context, path=None): return int(obj * 40.0) def _decode(self, obj, context, path=None): return obj / 40.0 BusCurrent = BusCurrentAdapter(Int8ub) class TempAdapter(Adapter): def _encode(self, obj, context, path=None): return int((obj + 15.0) * 4.0) def _decode(self, obj, context, path=None): return obj / 4.0 - 15.0 Temp = TempAdapter(Int8ub) SpacecraftMode = Enum( Int8ub, GndDebug=0, Initial=1, Commissioning=2, Mission=3, Comm=4, Powersafe=17, Detumble=18, Debug=19, Standby=32, ) kr01 = Struct( 'header' / Bytes(0x23), 'mode' / Mode, 'batvoltage' / BatVoltage, 'batcurrent' / BatCurrent, '3v3buscurrent' / BusCurrent, '5vbuscurrent' / BusCurrent, 'tempcomm' / Temp, 'tempeps' / Temp, 'tempbattery' / Temp, 'spacecraftmode' / SpacecraftMode ) gr-satellites-4.4.0/python/telemetry/lume.py000066400000000000000000000110351414055407700211540ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2018-2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from construct import * from ..ccsds import space_packet as ccsds_space_packet from .. import ecss_pus from ..adapters import LinearAdapter from .csp import CSPHeader TMHeader = BitStruct( 'version' / BitsInteger(2), 'sc_id' / BitsInteger(10), 'virtual_channel_id' / BitsInteger(4), 'virtual_channel_frame_counter' / BitsInteger(8), 'first_header_pointer' / BitsInteger(11), 'empty_frame' / BitsInteger(1), 'ocf_presence' / BitsInteger(1), 'sequence_flags' / BitsInteger(2), 'fixed_length_frame' / BitsInteger(1) ) TMTail = Struct( 'packet_errors' / Int16ub, 'frame_errors' / Int16ub, 'frame_error_control' / Int16ub ) SPTail = Struct( 'PEC' / Int16ub ) TimeField = Struct( 'day' / Int16ub, 'milliseconds_of_day' / Int32ub ) OBC = Struct( 'boot_cause' / Int32ub, 'boot_count' / Int16ub, 'clock' / Int32ub, 'curr_flash' / Int16ub, 'fs_mounted' / Int8ub, 'ram_image' / Int8sb, 'temp' / LinearAdapter(10, Int16sb)[2], 'ticks' / Int32ub, 'mag' / Float32b[3], 'memfree' / Int32ub, 'bufferfree' / Int32ub, 'uptime' / Int32ub, 'gyro' / Float32b[3], 'gyro_temp' / Float32b, 'flash_total' / Int64ub, 'flash_used' / Int64ub, 'flash_free' / Int64ub, 'gpio_test' / Int8ub, 'gpio_sw' / Int8ub, 'gpio_pwr' / Int8ub, 'om_state' / Int8ub, 'om_sw_version' / Bytes(32), 'op_tr_conn' / Int8ub, 'op_tr_conn_active' / Int8ub ) EPS = Struct( 'output_off_delta' / Int16ub[8], 'output_on_delta' / Int16ub[8], 'wdt_csp_pings_left' / Int8ub[2], 'bootcause' / Int8ub, 'cursun' / Int16ub, 'curin' / Int16ub[3], 'curout' / Int16ub[6], 'cursys' / Int16ub, 'temp' / Int16ub[6], 'battmode' / Int8ub, 'pptmode' / Int8ub, 'counter_boot' / Int32ub, 'latchup' / Int16ub[6], 'counter_wdt_csp' / Int32ub[2], 'counter_wdt_gnd' / Int32ub, 'counter_wdt_i2c' / Int32ub, 'output' / Int8ub[8], 'wdt_gnd_time_left' / Int32ub, 'wdt_i2c_time_left' / Int32ub, 'vbatt' / Int16ub, 'vboost' / Int16ub[3], 'wdtcspc' / Int8ub[2] ) TTC = Struct( 'temp_brd' / LinearAdapter(10, Int16sb), 'last_rferr' / Int16sb, 'last_rssi' / Int16sb, 'tot_rx_bytes' / Int32ub, 'rx_bytes' / Int32ub, 'tot_rx_count' / Int32ub, 'rx_count' / Int32ub, 'tot_tx_bytes' / Int32ub, 'tx_bytes' / Int32ub, 'tot_tx_count' / Int32ub, 'tx_count' / Int32ub, 'temp_pa' / LinearAdapter(10, Int16sb), 'boot_cause' / Int32ub, 'bgnd_rssi' / Int16sb, 'active_conf' / Int8ub, 'boot_count' / Int16ub, 'last_contact' / Int32ub, 'tx_duty' / Int8ub ) GSSBEntry = Struct( 'reboots' / Int8ub, 'current_state' / Int8ub, 'antenna_state' / Int8ub, 'attempts_total' / Int16ub ) GSSB = GSSBEntry[4] TTCGSSB = Struct( 'gssb' / GSSB, 'ttc' / TTC ) AOCS = Struct( 'extmag_valid' / Int8ub, 'extmag' / Float32b[3], 'gps_pos_dev' / Float32b[3], 'gps_pos' / Float32b[3], 'gps_valid' / Int8ub, 'gyro_valid' / Int8ub, 'gyro' / Float32b[3], 'mag' / Float32b[3], 'mag_valid' / Int8ub, 'status_run' / Int8sb, 'acs_mode' / Int8sb, 'ads_mode' / Int8sb, 'ephem_mode' / Int8sb, 'bdot_detumb' / Int8ub, 'boot_cause' / Int32ub, 'boot_count' / Int16ub, 'cur_gssb' / Int16ub[2], 'cur_pwm' / Int16ub, 'cur_gps' / Int16ub, 'cur_wde' / Int16ub ) Temps = Struct( 'aocs_suns' / Float32b[5], 'not_used' / Float32b, 'aocs_extmag' / Float32b, 'aocs_fss' / Float32b[5], 'not_used2' / Float32b[3], 'aocs_gyro' / Float32b, 'aocs' / LinearAdapter(10, Int16sb)[2], 'eps' / Int16sb[6], 'obc' / LinearAdapter(10, Int16sb)[2], 'obc_gyro' / Float32b, 'ttc_brd' / LinearAdapter(10, Int16sb), 'ttc_pa' / LinearAdapter(10, Int16sb) ) payloads = {1: OBC, 2: EPS, 3: TTCGSSB, 4: AOCS, 5: Temps} UserData = Struct( 'id' / Int16ub, 'data' / Switch( this.id, payloads, default=Bytes(this._.space_packet_header.data_length-16)) ) lume = Struct( 'csp_header' / CSPHeader, 'tm_header' / TMHeader, 'space_packet_header' / ccsds_space_packet.PrimaryHeader, 'pus_header' / ecss_pus.TMSecondaryHeader, 'pus_time_field' / TimeField, 'payload' / UserData, 'space_packet_tail' / SPTail, 'tm_tail' / TMTail ) gr-satellites-4.4.0/python/telemetry/mirsat1.py000066400000000000000000000143661414055407700216040ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2021 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from construct import * from ..adapters import LinearAdapter, AffineAdapter from .ax25 import Header as AX25Header BeaconA = BitStruct( Bytewise(Const(b'\x00')), # start byte 'obc_boot_image' / BitsInteger(8), 'onboard_time' / BitsInteger(32), 'uptime' / BitsInteger(32), 'spacecraft_mode' / BitsInteger(3), 'separation_seq_state' / BitsInteger(4), 'solar_array_deploy' / BitsInteger(4)[4], 'antenna_deploy' / BitsInteger(16)[8], 'adm_soft_fire_count' / BitsInteger(8), 'adm_hard_fire_count' / BitsInteger(8), 'adm_tlm' / BitsInteger(80)[10], 'sadm_check_count' / BitsInteger(5), 'sadm_telemetry' / BitsInteger(64)[10], 'i2c_nack_addr_count' / BitsInteger(32), 'i2c_hw_state_err_count' / BitsInteger(32), 'i2c_isr_err_count' / BitsInteger(32), 'battery_current_dir' / Enum(BitsInteger(1), discharging=0, charging=1), 'battery_current_5v' / LinearAdapter(1/1.327547, BitsInteger(10)), 'battery_current_msb_3v3' / BitsInteger(1) ) class SignMagnitudeAdapter16(Adapter): def _encode(self, obj, context, path=None): mag = abs(obj) & 0x7fff sig = 1 if obj < 0 else 0 return (sig << 15) | mag def _decode(self, obj, context, path=None): mag = obj & 0x7fff return -mag if obj & 0x8000 else mag SignMagnitude16 = SignMagnitudeAdapter16(Int16ub) class SignMagnitudeAdapter8(Adapter): def _encode(self, obj, context, path=None): mag = abs(obj) & 0x7f sig = 1 if obj < 0 else 0 return (sig << 7) | mag def _decode(self, obj, context, path=None): mag = obj & 0x7f return -mag if obj & 0x80 else mag SignMagnitude8 = SignMagnitudeAdapter8(Int8ub) BeaconPartB = BitStruct( 'battery_current_lsbs_3v3' / BitsInteger(9), 'battery_current_vbat' / LinearAdapter(1/14.662757, BitsInteger(10)), 'battery_voltage_3v3' / LinearAdapter(1/0.004311, BitsInteger(10)), 'battery_voltage_5v' / LinearAdapter(1/0.005865, BitsInteger(10)), 'battery_voltage_vbat' / LinearAdapter(1/0.008993, BitsInteger(10)), 'battery_temp' / AffineAdapter(1/0.3976, 238.57/0.3976, BitsInteger(10)), 'solar_current' / LinearAdapter(1/0.977517107, BitsInteger(10)), # Last 5 solar_voltage's unused 'solar_voltage' / LinearAdapter(1/0.009971, BitsInteger(10))[9], 'eps_bus_voltage_vbat' / LinearAdapter(1/0.008978, BitsInteger(10)), 'eps_bus_voltage_3v3' / LinearAdapter(1/0.00431085, BitsInteger(10)), 'eps_bus_voltage_5v' / LinearAdapter(1/0.005865103, BitsInteger(10)), 'eps_bus_voltage_12v' / LinearAdapter(1/0.013489736, BitsInteger(10)), 'eps_bus_current_vbat' / LinearAdapter(1/2.07, BitsInteger(10)), 'eps_bus_current_3v3' / LinearAdapter(1/5.236698785, BitsInteger(10)), 'eps_bus_current_5v' / LinearAdapter(1/5.236698785, BitsInteger(10)), 'eps_bus_current_12v' / LinearAdapter(1/2.07, BitsInteger(10)), 'adcs_raw_gyro' / Bytewise(LinearAdapter(-1/0.0104166, SignMagnitude16)[3]), 'adcs_mtq_dir_duty' / BitsInteger(8)[6], 'adcs_status' / BitsInteger(16), 'adcs_bus_voltage_5v' / LinearAdapter(1/0.000152587, BitsInteger(16)), 'adcs_bus_voltage_3v3' / LinearAdapter(1/0.0000944, BitsInteger(16)), 'adcs_bus_voltage_1v5' / LinearAdapter(1/0.000152587, BitsInteger(16)), 'adcs_bus_current_5v' / LinearAdapter(1/0.00000600472, BitsInteger(16)), 'adcs_bus_current_3v3' / LinearAdapter(1/0.0000381, BitsInteger(16)), 'adcs_bus_current_1v5' / LinearAdapter(1/0.0000244230769230769, BitsInteger(16)), 'adcs_board_temp' / AffineAdapter( 1/0.00762, 273.150/0.00762, BitsInteger(16)), 'adcs_adc_ref' / BitsInteger(16), 'adcs_sensor_current' / LinearAdapter(1/0.0000015698342656893, BitsInteger(16)), 'adcs_mtq_current' / LinearAdapter(1/0.00000601213123029945, BitsInteger(16)), 'adcs_array_temp' / AffineAdapter(1/0.00762, 273.150/0.00762, BitsInteger(16))[6], 'adcs_css_raw' / LinearAdapter(1/0.0415032679738562, BitsInteger(16))[6], 'fss_active' / BitsInteger(2)[6], 'css_active_selected' / BitsInteger(2)[6], 'adcs_sun_processed' / AffineAdapter( 1/0.000030517578125, 1/0.000030517578125, BitsInteger(16))[3], 'reserved' / BitsInteger(16)[4], 'adcs_detumble_counter' / BitsInteger(16), 'adcs_mode' / Enum(BitsInteger(16), standby=0, detumble=1, coarse_point=2, fine_point=3), 'adcs_state' / Enum(BitsInteger(16), nadir=0, sun=1, velocity=2, LLA=3, moon=4), 'reservedA' / BitsInteger(10), 'reservedB' / BitsInteger(4), 'reservedC' / BitsInteger(16), 'reservedD' / BitsInteger(3), 'reservedE' / BitsInteger(4), 'cmc_rx_lock' / Flag, 'cmc_rx_frame_count' / BitsInteger(16), 'cmc_rx_packet_count' / BitsInteger(16), 'cmc_rx_dropped_error_count' / BitsInteger(16), 'cmc_rx_crc_error_count' / BitsInteger(16), 'cmc_rx_overrun_error_count' / BitsInteger(8), 'cmc_rx_protocol_error_count' / BitsInteger(16), 'cmc_smps_temperature' / Bytewise(SignMagnitude8), 'cmc_pa_temperature' / Bytewise(SignMagnitude8), 'ax25_mux_channel_enable' / Flag[3], 'digipeater_enable' / Flag, 'pacsat_broadcast_enable' / Flag, 'pacsat_broadcast_in_progress' / Flag, 'param_valid_flags' / Flag[40], Padding(5), 'checksum' / BitsInteger(16), ) BeaconHeader = Struct( 'packet_type' / Int8ub, 'apid' / Int8ub, 'sequence_count' / Int16ub, 'length' / Int16ub, 'reserved' / Int8ub, 'service_type' / Const(b'\x03'), 'service_subtype' / Const(b'\x19') ) BeaconPartA = Struct( 'beacon_header' / BeaconHeader, 'beacon' / BeaconA, ) mirsat1 = Struct( 'ax25_header' / AX25Header, 'telemetry' / If( this.ax25_header.pid == 0xF0, Struct( 'header' / Bytes(6), 'beacon' / Select(BeaconPartA, BeaconPartB) )) ) gr-satellites-4.4.0/python/telemetry/mysat1.py000066400000000000000000000042341414055407700214330ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2018-2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from construct import * from ..adapters import * from .ax25 import Header Timestamp = UNIXTimestampAdapter(Int32ul) Callsign = Struct( 'callsign' / Bytes(5) ) OBC = Struct( 'obc_mode' / Int8ul, 'obc_reset_counter' / Int32ul, 'obc_uptime' / Int32ul ) Gyro = Struct( 'gyro_norm' / Int8ul ) EPS = Struct( 'eps_counter_boot' / Int32ul, 'eps_last_boot_cause' / Int8ul, 'eps_battery_mode' / Int8ul ) Timestamp_Struct = Struct( 'timestamp' / Timestamp ) OBC_Temp = Struct( 'obc_temp' / AffineAdapter(1, 128, Int8ul), 'obc_daughter_board_temp' / AffineAdapter(1, 128, Int8ul) ) EPS_Temp = Struct( 'eps_battery_temp' / AffineAdapter(1, 128, Int8ul), 'eps_board_temp' / AffineAdapter(1, 128, Int8ul) ) Ants = Struct( 'ants_temp' / AffineAdapter(1, 128, Int8ul) ) TRXVU_Temp = Struct( 'trxvu_temp' / AffineAdapter(1, 128, Int8ul) ) ADCS = Struct( 'adcs_temp' / AffineAdapter(1, 128, Int8ul) ) OBC_Voltages = Struct( 'obc_3v3_voltage' / LinearAdapter(10.0, Int8ul), 'obc_5v0_voltage' / LinearAdapter(10.0, Int8ul) ) TRXVU_Voltage = Struct( 'trxvu_voltage' / LinearAdapter(10.0, Int8ul) ) EPS_Batt_Voltage = Struct( 'eps_batt_voltage' / LinearAdapter(10.0, Int8ul) ) OBC_Current = Struct( 'obc_5.0_current' / LinearAdapter(1000.0, Int16ul) ) EPS_Currents = Struct( 'eps_total_pv_current' / LinearAdapter(1000.0, Int16ul), 'eps_total_system_current' / LinearAdapter(1000.0, Int16ul) ) mysat1 = Struct( 'header' / Header, 'callsign' / Callsign, 'obc' / OBC, 'gyro' / Gyro, 'eps' / EPS, 'timestamp' / Timestamp_Struct, 'obc_temp' / OBC_Temp, 'eps_temp' / EPS_Temp, 'ants' / Ants, 'trxvu_temp' / TRXVU_Temp, 'adcs' / ADCS, 'obc_voltages' / OBC_Voltages, 'trxvu_voltage' / TRXVU_Voltage, 'eps_batt_voltage' / EPS_Batt_Voltage, 'obc_current' / OBC_Current, 'eps_currents' / EPS_Currents ) gr-satellites-4.4.0/python/telemetry/picsat.py000066400000000000000000000124111414055407700214740ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2018-2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import datetime from construct import * from .ax25 import Header # An adapted version of Space Packet primary header # where the APID is broken down as used by the PicSat mission PrimaryHeader = BitStruct( 'ccsds_version' / BitsInteger(3), 'packet_type' / Flag, 'secondary_header_flag' / Flag, 'process_id' / BitsInteger(4), 'level_flag' / Flag, 'payload_flag' / Flag, 'packet_category' / BitsInteger(5), 'sequence_flag' / BitsInteger(2), 'packet_id' / BitsInteger(14), 'data_length' / BitsInteger(16) ) class TimeAdapter(Adapter): def _encode(self, obj, context, path=None): d = obj - datetime.datetime(1970, 1, 1) return Container( days=d.days, milliseconds=d.seconds * 1000 + d.microseconds / 1000) def _decode(self, obj, context, path=None): return (datetime.datetime(1970, 1, 1) + datetime.timedelta( days=obj.days, seconds=obj.milliseconds/1000, microseconds=(obj.milliseconds % 1000) * 1000)) SecondaryHeaderTM = TimeAdapter( Struct('days' / Int16ub, 'milliseconds' / Int32ub)) SecondaryHeaderTC = BitStruct( 'req_ack_reception' / Flag, 'req_fmt_reception' / Flag, 'req_exe_reception' / Flag, 'telecommand_id' / BitsInteger(10), 'emitter_id' / BitsInteger(3), 'signature' / Bytes(16) ) AntStatus = Struct( 'undeployed' / Flag, 'timeout' / Flag, 'deploying' / Flag ) BeaconA = BitStruct( Padding(1), 'solar_panel_error_flags' / Flag[5], 'i_adcs_get_attitude_error' / Flag, 'i_adcs_get_status_register_error' / Flag, Padding(1), 'fram_enable_error_flag' / Flag, 'ants_error_flag' / Flag[2], 'trxvu_tx_error_flag' / Flag, 'trxvu_rx_error_flag' / Flag, 'obc_supervisor_error_flag' / Flag, 'gom_eps_error_flag' / Flag, 'ant1_status_b' / AntStatus, Padding(1), 'ant2_status_b' / AntStatus, 'ignore_flag_ants_b_status' / Flag, 'ant3_status_b' / AntStatus, Padding(1), 'ant4_status_b' / AntStatus, 'armed_ants_b_status' / Flag, 'ant1_status_a' / AntStatus, Padding(1), 'ant2_status_a' / AntStatus, 'ignore_flag_ants_a_status' / Flag, 'ant3_status_a' / AntStatus, Padding(1), 'ant4_status_a' / AntStatus, 'armed_ants_a_status' / Flag ) BeaconB = Struct( 'solar_panel_temps' / Int16ub[5], 'ants_temperature' / Int16ub[2], 'tx_trxvu_hk_current' / Int16ub, 'tx_trxvu_hk_forwardpower' / Int16ub, 'tx_trxvu_tx_reflectedpower' / Int16ub, 'tx_trxvu_hk_pa_temp' / Int16ub, 'rx_trxvu_hk_pa_temp' / Int16ub, 'rx_trxvu_hk_board_temp' / Int16ub, 'eps_hk_temp_batts' / Int16sb, 'eps_hk_batt_mode' / Int8ub, 'eps_h_kv_batt' / Int8ub, 'eps_hk_boot_cause' / Int32ub, 'n_reboots_eps' / Int32ub, 'n_reboots_obc' / Int32ub, 'quaternions' / Float32b[4], 'angular_rates' / Float32b[3] ) BeaconC = BitStruct( Padding(12), 'adcs_stat_flag_hl_op_tgt_cap' / Flag, 'adcs_stat_flag_hl_op_tgt_track_fix_wgs84' / Flag, 'adcs_stat_flag_hl_op_tgt_track_nadir' / Flag, 'adcs_stat_flag_hl_op_tgt_track' / Flag, 'adcs_stat_flag_hl_op_tgt_track_const_v' / Flag, 'adcs_stat_flag_hl_op_spin' / Flag, Padding(1), 'adcs_stat_flag_hl_op_sunp' / Flag, 'adcs_stat_flag_hl_op_detumbling' / Flag, 'adcs_stat_flag_hl_op_measure' / Flag, Padding(5), 'adcs_stat_flag_datetime_valid' / Flag, Padding(1), 'adcs_stat_flag_hl_op_safe' / Flag, 'adcs_stat_flag_hl_op_idle' / Flag, Padding(1) ) BeaconD = Struct( 'up_time' / Int32ub, 'last_fram_log_fun_err_code' / Int16sb, 'last_fram_log_line_code' / Int16ub, 'last_fram_log_file_crc_code' / Int32ub, 'last_fram_log_counter' / Int16ub, 'average_photon_count' / Int16ub, 'sat_mode' / Int8ub, 'tc_sequence_count' / Int16ub ) Beacon = Struct(Padding(3), BeaconA, BeaconB, BeaconC, BeaconD) PayloadBeaconFlags = BitStruct( 'hk_flag' / Flag, 'cheatmode_flag' / Flag, 'tec_flag' / Flag, 'sensors_flag' / Flag, 'hv_flag' / Flag, 'dac_flag' / Flag, 'interrupt_flag' / Flag, 'diode_flag' / Flag ) PayloadBeacon = Struct( 'message' / Bytes(29), 'phot' / Int16ub, 'mode' / Int8ub, 'acqmode' / Int8ub, PayloadBeaconFlags, 'proc_freq' / Int8ub, 'volt5' / Int16ub, 'amp5' / Int16ub, 'amp3' / Int16ub, 'volthv' / Int16ub, 'amphv' / Int16ub, 'temps' / Int16sb[4], 'vitec' / Int16ub, 'temp0' / Int16ub, 'errortherm' / Int16ub, 'vref' / Int16ub, 'pitch' / Int16sb, 'roll' / Int16sb, 'yaw' / Int16sb ) picsat = Struct( 'ax25_header' / Header, 'primary_header' / PrimaryHeader, 'secondary_header' / IfThenElse( lambda c: c.primary_header.packet_type, SecondaryHeaderTC, SecondaryHeaderTM), 'packet' / Switch( lambda c: (c.primary_header.payload_flag, c.primary_header.packet_category), { (False, 1): Beacon, (True, 7): PayloadBeacon, }, default=Pass ) ) gr-satellites-4.4.0/python/telemetry/qa_by02.py000077500000000000000000000033711414055407700214560ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr_unittest # bootstrap satellites module, even from build dir try: import python as satellites except ImportError: pass else: import sys sys.modules['satellites'] = satellites from satellites.telemetry.by02 import frameB class qa_by02(gr_unittest.TestCase): def test_frameB(self): """Tries to parse a frameB""" frame = """08 10 2c 2d 00 55 55 55 55 55 55 00 26 e7 90 ff ff ff ff 00 00 00 00 51 ee 65 00 01 00 49 4e 30 4f 52 59 0a 49 11 29 00 c8 d7 43 00 00 55 ff 00 00 1b 56 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa""" frame = bytes().fromhex(frame.replace(' ', '').replace('\n', '')) data = frameB.parse(frame) self.assertEqual(data.header.spacecraft_id, 129, 'TM header spacecraft ID is not correct') self.assertEqual(data.header.master_channel_frame_count, 44, 'TM header master channel frame count is not correct') self.assertEqual( data.header.virtual_channel_frame_count, 45, 'TM header virtual channel frame count is not correct') self.assertEqual(data.header.virtual_channel_id, 0, 'TM header virtual channel ID is not correct') self.assertEqual(data.hk_AVR.callsign, b'IN0ORY', 'Decoded callsign is not correct') self.assertEqual(frame, frameB.build(data), 'Rebuilt frame does not equal original frame') if __name__ == '__main__': gr_unittest.run(qa_by02) gr-satellites-4.4.0/python/telemetry/qo100.py000066400000000000000000000005771414055407700210630ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # class qo100: @staticmethod def parse(packet): text = packet[:-2].decode('ascii') lines = [text[k:k+64] for k in range(0, len(text), 64)] return '\n'.join(lines) gr-satellites-4.4.0/python/telemetry/quetzal1.py000066400000000000000000000110471414055407700217630ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # # This is based on the telemetry parser from # https://github.com/danalvarez/gr-quetzal1/blob/master/apps/quetzal1_parse.py from construct import * from ..adapters import * from .ax25 import Header as AX25Header from .csp import CSPHeader CDHS = Struct( 'rtc_hour' / Int8ub, 'rtc_min' / Int8ub, 'rtc_sec' / Int8ub, 'rtc_day' / Int8ub, 'rtc_month' / Int8ub, 'rtc_year' / Int8ub, 'adm_status' / Hex(Int8ub), 'eps_status' / Hex(Int8ub), 'htr_status' / Hex(Int8ub), 'adcs_status' / Hex(Int8ub), 'pld_status' / Hex(Int8ub), 'adm_reset_counter' / Int8ub, 'eps_reset_counter' / Int8ub, 'adcs_reset_counter1' / Int8ub, # software reset counter 'adcs_reset_counter2' / Int8ub, # hardware reset counter 'comm_reset_counter' / Int8ub, 'reset_counter' / Int16ub ) INA260 = Struct( 'voltage' / LinearAdapter(1/0.01785, Int8ub), 'current' / LinearAdapter(1/0.6109, Int16ub) ) FaultFlags = BitStruct( # bits 0, 1, 2, 3 = overcurrent flags; # bits 4, 5, 6, 7 = short circuit flags. # bits 0,4 = ADCS # bits 1,5 = COMMS # bits 2,6 = PLD # bits 3,7 = HEATER 'heater_short_circuit' / Flag, 'pld_short_circuit' / Flag, 'comms_short_circuit' / Flag, 'adcs_short_circuit' / Flag, 'heater_overcurrent' / Flag, 'pld_overcurrent' / Flag, 'comms_overcurrent' / Flag, 'adcs_overcurrent' / Flag ) CTFlags = BitStruct( Padding(3), # bit0 = INA260 1, bit1 = INA260 2, bit2 = INA260 3, # bit3 = BQ27441, bit4 = TMP100 'TMP100' / Flag, 'BQ27441' / Flag, 'INA260_3' / Flag, 'INA260_2' / Flag, 'INA260_1' / Flag ) EPS = Struct( # TMP100 'tmp' / AffineAdapter(1/0.377, 25/0.377, Int8ub), # BQ27441 No. 1 'SoC' / Int8ub, 'bat_voltage' / AffineAdapter(1/7.9681, -2492.0319/7.9681, Int8ub), 'ave_current' / AffineAdapter(1/1.2219, 2500/1.2219, Int16ub), 'remaining_capacity' / LinearAdapter(1/0.97752, Int16ub), 'ave_power' / AffineAdapter(1/4.1544, 8500/4.1544, Int16ub), 'SoH' / Int8ub, # INA260 No. 1 'ina260' / INA260[3], # Subsystem Currents 'ADCS_current' / Int16ub, 'COMM_current' / Int16ub, 'PLD_current' / Int16ub, 'HTR_current' / Int16ub, # Overcurrent and Short Circuit Flags 'fault_flags' / FaultFlags, # Communication and Transmission Flags 'comm_flag' / CTFlags, 'trans_flag' / CTFlags ) ADCSFlags = BitStruct( # bit0 = BNO055, bit1 = ADC1, bit2 = ADC2, bit3 = TMP100 Padding(4), 'TMP100' / Flag, 'ADC2' / Flag, 'ADC1' / Flag, 'BNO055' / Flag ) ADCS = Struct( # BNO055 Gyroscope 'gyr' / AffineAdapter(1.275, 127.5, Int8ub)[3], # BNO055 Magnetometer 'mag_x' / AffineAdapter(8192.0/325, 65536.0/2, Int16ub), 'mag_y' / AffineAdapter(8192.0/325, 65536.0/2, Int16ub), 'mag_z' / AffineAdapter(8192.0/625, 65536.0/2, Int16ub), # ADC No. 1 'adc' / LinearAdapter(77.27, Int8ub)[12], # Temperature Sensors 'bno_temp' / Int8sb, 'tmp100' / Int16sb, # Communication and Transmission Flags 'flags' / ADCSFlags ) Comm = Struct( 'package_counter' / Int32ub ) PLD = Struct( 'operation' / Hex(Int8ub), 'picture_counter' / Int16ub ) RamParams = Struct( 'cdhs_cycle_time' / Int8ub, 'cdhs_wdt_time' / Int8ub, 'adm_soc_lim' / Int8ub, 'adcs_soc_lim' / Int8ub, 'comm_soc_lim' / Int8ub, 'pld_soc_lim' / Int8ub, 'htr_cycle_time' / Int8ub, 'htr_on_time' / Int8ub, 'htr_off_time' / Int8ub, 'adm_cycle_time' / Int8ub, 'adm_burn_time' / Int8ub, 'adm_max_cycles' / Int8ub, 'adm_wait_time' / Int8ub[2], 'adm_enable' / Int8ub, 'comm_cycle_time' / Int8ub, 'pld_cycle_time' / Int8ub, 'pld_op_mode' / Int8ub, 'cam_res' / Int8ub, 'cam_expo' / Int8ub, 'cam_pic_save_time' / Int8ub, 'pay_enable' / Int8ub ) telemetry = Struct( 'identifier' / Bytes(8), 'CDHS' / CDHS, 'EPS' / EPS, 'ADCS' / ADCS, 'Comm' / Comm, 'PLD' / PLD, 'ram_params' / RamParams, 'uvg_message' / Bytes(27) ) ack = Struct( 'ack' / Int8ub[2] ) flash_params = Struct( 'flash_params' / RamParams[2] ) image_data = Struct( 'image_data' / Bytes(232) ) quetzal1 = Struct( 'ax25_header' / AX25Header, 'csp_header' / CSPHeader, 'payload' / Select(image_data, telemetry, flash_params, ack) ) gr-satellites-4.4.0/python/telemetry/sat_1kuns_pf.py000066400000000000000000000042211414055407700226060ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from construct import * from ..adapters import * from .csp import CSPHeader Timestamp = UNIXTimestampAdapter(Int32sb) Beacon = Struct( 'csp_header' / CSPHeader, 'beacon_counter' / Int16ub, 'solar_panel_voltage' / LinearAdapter(1/16.0, Int8ub)[3], 'eps_temp' / AffineAdapter(1, 100, Int8ub)[4], 'eps_boot_cause' / Int8ub, 'eps_batt_mode' / Int8ub, 'solar_panel_current' / LinearAdapter(1/10.0, Int8ub), 'system_input_current' / LinearAdapter(1/16.0, Int8ub), 'battery_voltage' / LinearAdapter(1/34.0, Int8ub), 'radio_PA_temp' / AffineAdapter(1, 100, Int8ub), 'tx_count' / Int16ub, 'rx_count' / Int16ub, 'obc_temp' / AffineAdapter(1, 100, Int8ub)[2], 'ang_velocity_mag' / Int8ub, 'magnetometer' / LinearAdapter(1/6.0, Int8sb)[3], 'main_axis_of_rot' / Int8ub ) WODBeacon = Struct( 'csp_header' / CSPHeader, 'timestamp' / Timestamp, 'sp_voltage' / LinearAdapter(1000, Int16ub)[3], 'sp_regulator_temp' / Int16sb[3], 'battery_temp' / Int16sb, 'boot_cause' / Int16ub, 'battery_mode' / Int16ub, 'solar_pannel_current' / Int16sb, 'system_current' / Int16ub, 'battery_voltage' / LinearAdapter(1000, Int16ub), 'eps_boot_count' / Int16ub, 'radio_amplifier_temp' / LinearAdapter(10, Int16sb), 'tx_count' / Int16ub, 'rx_count' / Int16ub, 'last_rx_rf_power' / Int16sb, 'last_rf_error' / Int16ub, 'radio_boot_count' / Int16ub, 'obc_temp' / LinearAdapter(10, Int16sb)[2], 'gyro' / LinearAdapter(100, Int16sb)[3], 'mag' / LinearAdapter(10, Int16sb)[3], 'sp_regulator_current' / Int16ub[3], 'sp_temp' / LinearAdapter(10, Int16sb)[6], 'sun_sensor' / Int16sb[6] ) class sat_1kuns_pf: @staticmethod def parse(packet): if len(packet) == 138: # This is most likely an image packet return if len(packet) >= 92: return WODBeacon.parse(packet) else: return Beacon.parse(packet) gr-satellites-4.4.0/python/telemetry/sat_3cat_1.py000066400000000000000000000055601414055407700221410ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2018 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import datetime from construct import * import construct.core from ..adapters import LinearAdapter, UNIXTimestampAdapter # Number of sensors VOLT_SENSORS = 7 CUR_SENSORS = 6 TEMP_SENSORS = 7 IRR_SENSORS = 6 def sensor(context): if context._.beacon_id == 'VoltageEvolution': return 'voltage' if context._.beacon_id == 'CurrentEvolution': return 'current' if context._.beacon_id == 'TemperatureEvolution': return 'temperature' if context._.beacon_id == 'IrradianceEvolution': return 'irradiance' if context._.beacon_id == 'StateOfChargeEvolution': return 'state_of_charge' idx = context._index if idx < VOLT_SENSORS: return 'voltage' idx -= VOLT_SENSORS if idx < CUR_SENSORS: return 'current' idx -= CUR_SENSORS if idx < TEMP_SENSORS: return 'temperature' return 'irradiance' VoltOrIrrAdapter = LinearAdapter(1000, Int16ub) TempAdapter = LinearAdapter(10, Int16ub) class DeltaTAdapter(Adapter): # def _encode(self, obj, context, path=None): # TODO def _decode(self, obj, context, path=None): if obj == 0: raise construct.core.StreamError delta_t = obj t1 = context._.last_timestamp t2 = t1 - datetime.timedelta( seconds=delta_t - 1 + context._.delta_min_delay) if context._.beacon_id != 'CurrentState': context._.last_timestamp = t2 return t2 def set_delta_min_delay(obj, context): context.delta_min_delay = 0 if obj == 'CurrentState' else 300 def set_last_timestamp(obj, context): context.last_timestamp = obj def set_context(obj, context): set_delta_min_delay(obj, context) set_last_timestamp(obj, context) BeaconID = Enum( Int8ub, CurrentState=0xB0, VoltageEvolution=0xB1, CurrentEvolution=0xB2, TemperatureEvolution=0xB3, IrradianceEvolution=0xB4, StateOfChargeEvolution=0xB5, ) Timestamp = UNIXTimestampAdapter(Int32sb) Value = Switch(this.parameter, {'voltage': VoltOrIrrAdapter, 'irradiance': VoltOrIrrAdapter, 'temperature': TempAdapter}, default=Int16ub) LongData = Struct( Const(b'\x00'), 'timestamp' / DeltaTAdapter(Int24ub), 'parameter' / Computed(sensor), 'value' / Value ) ShortData = Struct( 'timestamp' / DeltaTAdapter(Int8ub), 'parameter' / Computed(sensor), 'value' / Value ) Data = Select(LongData, ShortData) sat_3cat_1 = Struct( Const(b'\x00'), 'beacon_id' / BeaconID * set_delta_min_delay, 'sc_time' / Timestamp * set_last_timestamp, 'state_of_charge' / Int8ub, 'sensor_id' / Int8ub, 'data' / GreedyRange(Data) ) gr-satellites-4.4.0/python/telemetry/sat_3cat_2.py000066400000000000000000000023671414055407700221440ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2017,2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from gnuradio import gr import numpy import pmt class sat_3cat_2: def parse(self, packet): data = packet[17:].split() status = {b'1': 'Survival', b'2': 'Sun-safe', b'3': 'Nominal', b'4': 'TX', b'5': 'RX', b'6': 'Payload', b'7': 'Payload'} adcs = {b'0': 'auto', b'1': 'manual'} if data[5] == b'0': detumbling = ( 'Detumbling ({},{},{})nT'.format( float(data[7]), float(data[8]), float(data[9]))) else: detumbling = ( 'SS-nominal Sun: ({:.2f},{:.2f},{:.2f})'.format( float(data[7]), float(data[8]), float(data[9]))) string = ( status[data[0]] + ' {:.2f}V {}mA'.format(int(data[1])/1000.0, int(data[2])) + ' EPS: {}ºC Ant: {}ºC'.format(data[3], data[4]) + ' ADCS ' + adcs[data[6]] + ' ' + detumbling + ' Control: ({:.1e},{:.1e},{:.1e})V'.format( float(data[10]), float(data[11]), float(data[12]))) return string gr-satellites-4.4.0/python/telemetry/smogp.py000066400000000000000000000404151414055407700213430ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019-2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from construct import * import numpy as np from ..adapters import (AffineAdapter, LinearAdapter, UNIXTimestampAdapter, TableAdapter) Timestamp = UNIXTimestampAdapter(Int32sl) Temperature = LinearAdapter(10.0, Int16sl) Voltage = LinearAdapter(1000.0, Int16ul) AntennaStatus = Enum(BitsInteger(2), closed=0, open=1, not_monitored=2, invalid=3) PanelStatus = BitStruct( 'panel_number' / BitsInteger(3), 'antenna_status' / AntennaStatus, Padding(3) ) MPPT = Struct( 'timestamp' / Timestamp, 'temperature' / Temperature, 'light_sensor' / Voltage, 'input_current' / Int16ul, 'input_voltage' / Voltage, 'output_current' / Int16ul, 'output_voltage' / Voltage, 'panel_status' / PanelStatus ) AckInfo = Struct( 'serial' / Int16sl, 'rssi' / AffineAdapter(2.0, 2.0 * 131.0, Int8ul) ) Telemetry1 = Struct( 'timestamp' / Timestamp, 'mppts' / MPPT[6], 'ack_info' / AckInfo[3], ) DeploymentStatus = BitStruct( 'deployment_switch' / Flag[2], 'remove_before_flight' / Flag, Padding(1), 'pcu_deployment' / Flag, 'antenna_deployment' / Flag, Padding(2) ) PCU_DEP = Struct( 'timestamp' / Timestamp, 'deployment_status' / DeploymentStatus, 'pcu_boot_counter' / Int16ul, 'pcu_uptime_minutes' / Int16ul ) SDC = Struct( 'input_current' / Int16ul, 'output_current' / Int16ul, 'output_voltage' / Voltage) SDCLimiters = BitStruct( 'sdc1_overcurrent_status' / Flag, 'sdc1_overvoltage_status' / Flag, 'sdc2_overcurrent_status' / Flag, 'sdc2_overvoltage_status' / Flag, Padding(4) ) PCU_SDC = Struct( 'timestamp' / Timestamp, 'sdcs' / SDC[2], 'limiters' / SDCLimiters ) BatteryStatus = BitStruct( 'battery_charge_overcurrent' / Flag, 'battery_charge_overvoltage' / Flag, 'battery_discharge_overcurrent' / Flag, 'battery_discharge_overvoltage' / Flag, 'battery_charge_enabled' / Flag, 'battery_discharge_enabled' / Flag, Padding(2) ) PCU_Bat = Struct( 'timestamp' / Timestamp, 'battery_voltage' / Voltage, 'battery_charge_current' / Int16ul, 'battery_discharge_current' / Int16ul, 'battery_status' / BatteryStatus ) OBCLimiter = BitStruct( 'obc_overcurrent' / Flag[2], Padding(6) ) PCU_Bus = Struct( 'timestamp' / Timestamp, 'unregulated_bus_voltage' / Voltage, 'regulated_bus_voltage' / Voltage, 'obc_current_consumption' / Int16ul[2], 'obc_limiter' / OBCLimiter ) Telemetry2 = Struct( 'timestamp' / Timestamp, 'pcu_dep' / PCU_DEP[2], 'pcu_sdc' / PCU_SDC[2], # Note: ATL-1 doesn't use pcu_bat, but leaves these bytes unused 'pcu_bat' / PCU_Bat[2], 'pcu_bus' / PCU_Bus[2], 'ack_info' / AckInfo[3] ) # This is like SMOG-P but with some extra fields at the end Telemetry2_SMOG1 = Struct( 'timestamp' / Timestamp, 'pcu_dep' / PCU_DEP[2], 'pcu_sdc' / PCU_SDC[2], # Note: ATL-1 doesn't use pcu_bat, but leaves these bytes unused 'pcu_bat' / PCU_Bat[2], 'pcu_bus' / PCU_Bus[2], 'ack_info' / AckInfo[3], 'pcu_voltage' / Voltage[2] ) ComStatus = BitStruct( 'com_data_rate' / BitsInteger(3), 'tx_power_level' / BitsInteger(2), Padding(3) ) ComProtection = BitStruct( 'com1_overcurrent' / Flag, 'com2_overcurrent' / Flag, 'com1_limiter_switch' / Flag, 'com2_limiter_switch' / Flag, 'com1_limiter_switch_override' / Flag, 'com2_limiter_switch_override' / Flag, Padding(2) ) Functional = BitStruct( 'msen' / Flag[2], 'flash' / Flag[2], 'rtcc' / Flag[2], Padding(1), 'current_com' / BitsInteger(1) ) Functional_SMOG1 = BitStruct( 'msen' / Flag[2], 'flash' / Flag[2], 'rtcc' / Flag[2], 'obc' / BitsInteger(1), # active OBC 'current_com' / BitsInteger(1) # active COM ) COM = Struct( 'timestamp' / Timestamp, 'swr_bridge' / Int8ul, 'last_rx_rssi' / Int8sl, 'spectrum_analyzer_status' / Int8ul, 'active_com_voltage' / Voltage, 'active_com_temperature' / Temperature, 'active_com_spectrum_analyzer_temperature' / Temperature ) TID = Struct( 'timestamp' / Timestamp, 'temperature' / Temperature, 'voltage' / Voltage, 'radfet_voltage' / Int24ub[2], 'measurement_serial' / Int16ul ) MSEN = Struct( 'msen_gyroscope' / Int16sl[3], 'msen_magneto' / Int16sl[3], Padding(6), 'msen_temperature' / Temperature ) MSEN_SMOG1 = Struct( 'msen_gyroscope' / Int16sl[3], 'msen_magneto' / Int16sl[3], 'msen_accel' / Int16sl[3], 'msen_temperature' / Temperature ) Telemetry3 = Struct( 'timestamp' / Timestamp, 'obc_supply_voltage' / Voltage, 'rtcc_temperature' / Int16sl[2], Padding(2), 'eps2_panel_a_temperature' / Temperature[2], 'com_status' / ComStatus, 'com_tx_current' / Int16ul, 'com_rx_current' / Int16ul, 'com_protection' / ComProtection, 'msen' / MSEN[2], 'functional' / Functional, 'com' / COM, 'tid' / TID[2], 'ack_info' / AckInfo[3] ) # This is like SMOG-P but with an some fields instead of padding Telemetry3_SMOG1 = Struct( 'timestamp' / Timestamp, 'obc_supply_voltage' / Voltage, 'rtcc_temperature' / Temperature[2], 'obc_temperature' / Temperature, 'eps2_panel_a_temperature' / Temperature[2], 'com_status' / ComStatus, 'com_tx_current' / Int16ul, 'com_rx_current' / Int16ul, 'com_protection' / ComProtection, 'msen' / MSEN_SMOG1[2], 'functional' / Functional_SMOG1, 'com' / COM, 'tid' / TID[2], 'ack_info' / AckInfo[3] ) UplinkStats = Struct( 'valid_packets' / Int32sl, 'rx_error_wrong_size' / Int16ul, 'rx_error_golay_failed' / Int16ul, 'rx_error_wrong_signature' / Int16ul, 'rx_error_invalid_serial' / Int16ul, 'obc_com_trx_error_statistic' / Int32ul ) Beacon = Struct( 'timestamp' / Timestamp, 'beacon_message' / PaddedString(80, 'utf8'), 'uplink_stats' / UplinkStats, 'ack_info' / AckInfo[3] ) DiagnosticStatus = BitStruct( 'energy_mode' / BitsInteger(3), 'tcxo_works' / Flag, 'filesystem_works' / Flag, 'filesystem_uses_flash2' / Flag, Padding(2) ) DiagnosticInfo = Struct( Padding(1), 'num_recv_pkt_garbage' / Int8ul, 'num_recv_pkt_bad_serial' / Int8ul, 'num_recv_pkt_invalid' / Int8ul, 'last_uplink_timestamp' / Timestamp, 'obc_uptime_min' / Int24ub, 'com_uptime_min' / Int24ub, 'tx_voltage_drop_10mv' / Int8ul, 'timed_task_count' / Int8ul, 'status' / DiagnosticStatus ) # This includes notable changes with repect to SMOG-P # uplink_stats is replaced by diagnostic_stats and version Beacon_SMOG1 = Struct( 'timestamp' / Timestamp, 'beacon_message' / PaddedString(80, 'utf8'), 'diagnostic_stats' / DiagnosticInfo, 'version' / PaddedString(7, 'utf8'), 'ack_info' / AckInfo[3] ) SpectrumResult = Struct( 'timestamp' / Timestamp, 'startfreq' / Int32ul, 'stepfreq' / Int32ul, 'rbw' / Int8ul, 'pckt_index' / Int8ul, 'pckt_count' / Int8ul, 'spectrum_len' / Int16ul, Padding(2), 'measid' / Int16ul, 'spectrum_data' / Bytes(this.spectrum_len) ) # This adds the field request_uplink_serial # in comparison to SMOG-P SpectrumResult_SMOG1 = Struct( 'timestamp' / Timestamp, 'startfreq' / Int32ul, 'stepfreq' / Int32ul, 'rbw' / Int8ul, 'pckt_index' / Int8ul, 'pckt_count' / Int8ul, 'spectrum_len' / Int16ul, 'request_uplink_serial' / Int16ul, 'measid' / Int16ul, 'spectrum_data' / Bytes(this.spectrum_len) ) File = Struct( 'file_id' / Int8ul, 'file_type' / Int8ul, 'page_addr' / Int16ul, 'file_size' / Int24ub, 'timestamp' / Timestamp, 'filename' / PaddedString(10, 'utf8') ) FileInfo = Struct( 'timestamp' / Timestamp, 'files' / File[5] ) FileFragment = Struct( 'timestamp' / Timestamp, 'pckt_index' / Int16ul, 'pckt_count' / Int16ul, 'file_type' / Int8ul, 'page_addr' / Int16ul, 'file_size' / Int24ub, 'timestamp' / Timestamp, 'filename' / PaddedString(10, 'utf8'), 'data' / Bytes(217) ) ADCResultsEntry = Struct( 'vcc' / Voltage, 'vbg' / Voltage, 'vcore' / Voltage, 'vextref' / Voltage, 'an' / Voltage[4] ) ADCResults = Struct( 'timestamp' / Timestamp, 'internal_reference' / ADCResultsEntry, 'external_reference' / ADCResultsEntry ) ATLSPIStatus = BitStruct( 'spi_mux_functional' / Flag, 'msen_cs_pin_select_failed' / Flag, 'rtcc_cs_pin_select_failed' / Flag, 'flash_cs_pin_select_failed' / Flag, 'all_cs_pin_deselect_failed' / Flag, 'miso_pin_test_failed' / Flag, 'mosi_pin_test_failed' / Flag, 'sclk_pin_test_failed' / Flag ) ATLBusStatus = Enum(Int8sl, unknown=0, ok=1, bit_error=-1, no_response=-2, bus_error=-3) ValidFlag = Enum(Int8ul, valid=ord('V')) ATLTelemetry1 = Struct( 'uptime' / Int32sl, 'system_time' / Timestamp, 'obc_id' / Int8ul, 'oscillator' / Enum(Int8ul, internal=ord('I'), external=ord('E')), 'adc_results_valid' / ValidFlag, 'adc_results' / ADCResults, 'spi_status' / ATLSPIStatus, 'spi_flash_startcount' / Int8ul, 'spi_msen_startcount' / Int8ul, 'spi_rtcc_startcount' / Int8ul, 'random_number' / Int8ul, 'mppt_bus_status' / Enum(Int8sl, no_data=0, valid_data=1, channel_number_mismatch=-1, checksum_error=-2, no_response=-3, bus_error=-4)[6], 'accu_bus_status' / ATLBusStatus[2], 'pcu_bus_status' / ATLBusStatus[2], 'current_com' / Int8ul, 'com_uptime_seconds' / Int32sl, 'com_tx_power_level' / TableAdapter([10, 25, 50, 100], Int8ul), 'com_tx_current' / Int16sl, 'com_rx_current' / Int16sl, 'com_tx_voltage_drop' / Voltage, 'scheduled_spectrum_analysis_queue' / Int16ul, 'scheduled_file_download_queue' / Int16ul, 'energy_management_mod' / Enum(Int8ul, normal=0, normal_reduced=1, energy_saving=2, emergency=3), 'morse_period' / Int8ul, 'radio_cycle' / LinearAdapter(1e6, Int32sl), 'sleep' / LinearAdapter(1e6, Int32sl), 'last_telecomand_seconds_ago' / Int32sl, 'automatic_antenna_openings' / Int16ul, 'cpu_usage_cycles' / Int16ul, 'cpu_idle_us' / Int32sl, 'cpu_work_over_us' / Int32sl, 'obc_flash_checksum' / Hex(Int32ul), 'obc_flash_checksum_prev_diff' / Hex(Int32ul), 'scheduled_datalog_queue' / Int16ul, 'current_scheduled_datalog' / Int16ul ) ATLTelemetry2 = Struct( 'msen_data_valid' / ValidFlag, 'timestamp' / Timestamp, 'temperature' / Float32l, 'msen_gyroscope' / Float32l[3], 'msen_magneto_raw' / Int16sl[3], 'msen_magnto_min_max_valid' / Enum(Int8ul, yes=ord('Y')), 'msen_magneto_min_max' / Int16sl[6], 'msen_magneto_scale' / Float32l[3], 'msen_magneto' / Float32l[3], 'ack_info' / AckInfo[17] ) ATLACCUMeasurement = Struct( 'valid' / Int8ul, '1wbus' / Int8ul, 'timestamp' / Timestamp, # TODO implement corrections from # https://github.com/szlldm/smogp_atl1_gndsw/blob/master/main.h 'battery_current_raw' / Int16ul, 'temperatures_raw' / Int16ul[6] ) ATLTelemetry3 = Struct( 'timestamp' / Timestamp, 'accu_measurements' / ATLACCUMeasurement[4] ) SMOGPTelemetry1 = Struct( 'uptime' / Int32sl, 'system_time' / Timestamp, 'obc_id' / Int8ul, 'oscillator' / Enum(Int8ul, internal=ord('I'), external=ord('E')), 'adc_results_valid' / ValidFlag, 'adc_results' / ADCResults, 'spi_status' / ATLSPIStatus, 'spi_flash_startcount' / Int8ul, 'spi_msen_startcount' / Int8ul, 'spi_rtcc_startcount' / Int8ul, 'random_number' / Int8ul, 'mppt_bus_status' / Enum(Int8sl, no_data=0, valid_data=1, channel_number_mismatch=-1, checksum_error=-2, no_response=-3, bus_error=-4)[6], 'accu_bus_status' / ATLBusStatus[2], 'pcu_bus_status' / ATLBusStatus[2], 'current_com' / Int8ul, 'com_uptime_seconds' / Int32sl, 'com_tx_power_level' / TableAdapter( [10, 11, 12, 13, 14, 15, 16, 25, 29, 33, 38, 42, 46, 50, 75, 100], Int8ul), 'com_tx_current' / Int16sl, 'com_rx_current' / Int16sl, 'com_tx_voltage_drop' / Voltage, 'scheduled_spectrum_analysis_queue' / Int16ul, 'scheduled_file_download_queue' / Int16ul, 'energy_management_mod' / Enum(Int8ul, normal=0, normal_reduced=1, energy_saving=2, emergency=3), 'morse_period' / Int8ul, 'radio_cycle' / LinearAdapter(1e6, Int32sl), 'sleep' / LinearAdapter(1e6, Int32sl), 'last_telecomand_seconds_ago' / Int32sl, 'automatic_antenna_openings' / Int16ul, 'cpu_usage_cycles' / Int16ul, 'cpu_idle_us' / Int32sl, 'cpu_work_over_us' / Int32sl, 'obc_flash_checksum' / Hex(Int32ul), 'obc_flash_checksum_prev_diff' / Hex(Int32ul), 'scheduled_datalog_queue' / Int16ul, 'current_scheduled_datalog' / Int16ul ) smogp = Struct( 'type' / Int8ul, 'payload' / Switch(this.type, { 1: Telemetry1, 2: Telemetry2, 3: Telemetry3, 4: Beacon, 5: SpectrumResult, 6: FileInfo, 7: FileFragment, 33: SMOGPTelemetry1, # SMOGPTelemetry2 is exactly the same as ATLTelemetry2 34: ATLTelemetry2, 129: ATLTelemetry1, 130: ATLTelemetry2, 131: ATLTelemetry3, }, default=GreedyBytes) ) smog1 = Struct( 'type' / Int8ul, 'payload' / Switch(this.type, { 1: Telemetry1, 2: Telemetry2_SMOG1, 3: Telemetry3_SMOG1, 4: Beacon_SMOG1, 5: SpectrumResult_SMOG1, 7: FileFragment, }, default=GreedyBytes) ) signalling_prbs = np.array([ 0x97, 0xfd, 0xd3, 0x7b, 0x0f, 0x1f, 0x6d, 0x08, 0xf7, 0x83, 0x5d, 0x9e, 0x59, 0x82, 0xc0, 0xfd, 0x1d, 0xca, 0xad, 0x3b, 0x5b, 0xeb, 0xd4, 0x93, 0xe1, 0x4a, 0x04, 0xd2, 0x28, 0xdd, 0xf9, 0x01, 0x53, 0xd2, 0xe6, 0x6c, 0x5b, 0x25, 0x65, 0x31, 0xc5, 0x7c, 0xe7, 0xf1, 0x38, 0x61, 0x2d, 0x5c, 0x03, 0x3a, 0xc6, 0x88, 0x90, 0xdb, 0x8c, 0x8c, 0x42, 0xf3, 0x51, 0x75, 0x43, 0xa0, 0x83, 0x93], dtype='uint8') signalling_prbs_tx = np.array([ 0xA3, 0x9E, 0x1A, 0x55, 0x6B, 0xCB, 0x5C, 0x2F, 0x2A, 0x5C, 0xAD, 0xD5, 0x32, 0xFE, 0x85, 0x1D, 0xDC, 0xE8, 0xBC, 0xE5, 0x13, 0x7E, 0xBA, 0xBD, 0x9D, 0x44, 0x31, 0x51, 0x3C, 0x92, 0x26, 0x6C, 0xF3, 0x68, 0x98, 0xDA, 0xA3, 0xBA, 0x7F, 0x84, 0x86, 0x32, 0x95, 0xAC, 0x8D, 0x4E, 0x66, 0x8B, 0x7F, 0x7B, 0xE0, 0x14, 0xE2, 0x3C, 0x49, 0x45, 0x32, 0xE4, 0x5C, 0x44, 0xF5, 0x6D, 0x2D, 0x0A], dtype='uint8') downlink_speeds = [500, 1250, 2500, 5000, 12500] codings = ['RX', 'AO-40 short', 'AO-40', 'RA (260, 128)', 'RA (514, 256)'] class smogp_signalling: @staticmethod def parse(packet): if len(packet) != 64: print('Error: signalling packet length != 64') return prbs = np.frombuffer(packet[:-6], dtype='uint8') ber_prbs = ( np.sum((np.unpackbits(prbs) ^ np.unpackbits(signalling_prbs[6:])) .astype('int')) / (prbs.size * 8)) ber_prbs_tx = ( np.sum((np.unpackbits(prbs) ^ np.unpackbits(signalling_prbs_tx[6:])) .astype('int')) / (prbs.size * 8)) sig_type = 'RX' if ber_prbs < ber_prbs_tx else 'TX' ber_prbs = min(ber_prbs, ber_prbs_tx) flags = np.unpackbits( np.frombuffer(packet[-6:], dtype='uint8')).reshape((-1, 8)) decoded_flags = 1*(np.sum(flags, axis=1) > 4) try: downlink_speed = downlink_speeds[ np.packbits(decoded_flags[:3])[0] >> 5] except IndexError: print(f'Error: invalid downlink speed {decoded_flags[:3]}') return try: coding = codings[np.packbits(decoded_flags[3:])[0] >> 5] except IndexError: print(f'Error: invalid coding {decoded_flags[3:]}') return return (f'Signalling packet: mode {sig_type}, BER {ber_prbs:.4f}, ' f'rate {downlink_speed} baud, coding {coding}') gr-satellites-4.4.0/python/telemetry/snet.py000066400000000000000000000125551414055407700211730ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2018,2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import datetime from construct import * import construct from ..adapters import LinearAdapter # See # https://www.raumfahrttechnik.tu-berlin.de/fileadmin/fg169/ # amateur-radio/TUBiX10-COM.pdf # for documentation LTUFrameHeader = BitStruct( 'SrcId' / BitsInteger(7), 'DstId' / BitsInteger(7), 'FrCntTx' / BitsInteger(4), 'FrCntRx' / BitsInteger(4), 'SNR' / BitsInteger(4), 'AiTypeSrc' / BitsInteger(4), 'AiTypeDst' / BitsInteger(4), 'DfcId' / BitsInteger(2), 'Caller' / Flag, 'Arq' / Flag, 'PduTypeId' / Flag, 'BchRq' / Flag, 'Hailing' / Flag, 'UdFl1' / Flag, 'PduLength' / BitsInteger(10), 'CRC13' / BitsInteger(13), 'CRC5' / BitsInteger(5), Padding(2) ) class TimeAdapter(Adapter): def _encode(self, obj, context, path=None): d = int((obj - datetime.datetime(2000, 1, 1))*2) return Container( days=d.days, milliseconds=d.seconds * 1000 + d.microseconds / 1000) def _decode(self, obj, context, path=None): return (datetime.datetime(2000, 1, 1) + datetime.timedelta(seconds=float(obj)/2.0)) TimeStamp = TimeAdapter(BitsInteger(32, swapped=True)) SNETFrameHeaderExtension = BitStruct( 'VersNo' / BitsInteger(2), 'DFCID' / BitsInteger(2), 'ExtensionRFU' / BitsInteger(4), 'ChannelInfo' / BitsInteger(8), 'QoS' / Flag, 'PDUTypeID' / Flag, 'ARQ' / Flag, 'ControlRFU' / BitsInteger(5), 'TimeTagSub' / BitsInteger(16), 'SCID' / BitsInteger(10), 'SeqNo' / BitsInteger(14) ) SNETFrameHeader = BitStruct( Const(0b111100110101000000, BitsInteger(18)), 'CRC' / BitsInteger(14), 'FCIDMajor' / BitsInteger(6), 'FCIDSub' / BitsInteger(10), 'Urgent' / Flag, 'Extended' / Flag, 'CheckCRC' / Flag, 'Multiframe' / Flag, 'TimeTaggedSetting' / Flag, 'TimeTagged' / Flag, 'DataLength' / BitsInteger(10), 'TimeTag' / If(lambda c: c.TimeTagged, TimeStamp), 'Extension' / If(lambda c: c.Extended, SNETFrameHeaderExtension) ) Battery = Struct( 'V_BAT' / LinearAdapter(2, Int16sl), 'A_IN_CHARGER' / LinearAdapter(12, Int16sl), 'A_OUT_CHARGER' / LinearAdapter(6, Int16sl) ) BatteryCurrents = Struct( 'A_IN' / LinearAdapter(12, Int16sl), 'A_OUT' / LinearAdapter(12, Int16sl) ) EPSTelemetry = Struct( 'CUR_SOL' / LinearAdapter(50, Int16sl)[6], 'V_SOL' / Int16sl, 'BATTERIES' / Battery[2], 'V_SUM' / LinearAdapter(2, Int16sl), 'V_3V3' / LinearAdapter(8, Int16sl), 'V_5V' / LinearAdapter(5, Int16sl), 'TEMP_BATT' / LinearAdapter(256, Int16sl)[2], 'TEMP_OBC' / Int16sl, 'A_OBC' / Int16ul, 'V_OBC' / Int16ul, 'BATT_CURRENTS' / BatteryCurrents[2] ) ADCSFlags = BitStruct( Padding(4), 'AttDetTrackIGRFDeltaB' / Flag, 'AttDetSuseAlbedoTracking' / Flag, 'SUSE1AlbedoFlag' / Flag, 'SUSE2AlbedoFlag' / Flag, 'SUSE3AlbedoFlag' / Flag, 'SUSE4AlbedoFlag' / Flag, 'SUSE5AlbedoFlag' / Flag, 'SUSE6AlbedoFlag' / Flag, 'AttDetAutoVirtualizeMFSA' / Flag, 'AttDetAutoVirtualizeSUSEA' / Flag, 'AttDetNarrowVectors' / Flag, 'AttDetMismatchingVectors' / Flag ) ADCSTelemetry = Struct( 'iModeChkListThisStepActive' / Int8sl, 'iAttDetFinalState' / Int8ul, 'iSensorArrayAvailStatusGA' / Int8ul, 'iSensorArrayAvailStatusMFSA' / Int8ul, 'iSensorArrayAvailStatusSUSEA' / Int8ul, 'iActArrayAvailStatusRWA' / Int8ul, 'iActArrayAvailStatusMATA' / Int8ul, 'AttDetMfsDistCorrMode' / Int8ul, 'AttDetSuseDistCorrMode' / Int8ul, 'flags' / ADCSFlags, 'omegaXOptimal_SAT' / LinearAdapter(260, Int16sl), 'omegaYOptimal_SAT' / LinearAdapter(260, Int16sl), 'omegaZOptimal_SAT' / LinearAdapter(260, Int16sl), 'magXOptimal_SAT' / LinearAdapter(0.1, Int16sl), 'magYOptimal_SAT' / LinearAdapter(0.1, Int16sl), 'magZOptimal_SAT' / LinearAdapter(0.1, Int16sl), 'sunXOptimal_SAT' / LinearAdapter(32000, Int16sl), 'sunYOptimal_SAT' / LinearAdapter(32000, Int16sl), 'sunZOptimal_SAT' / LinearAdapter(32000, Int16sl), 'dCtrlTorqueRWAx_SAT_lr' / LinearAdapter(38484, Int8ul), 'dCtrlTorqueRWAy_SAT_lr' / LinearAdapter(38484, Int8ul), 'dCtrlTorqueRWAz_SAT_lr' / LinearAdapter(38484, Int8ul), 'dCtrlMagMomentMATAx_SAT_lr' / LinearAdapter(127, Int8ul), 'dCtrlMagMomentMATAy_SAT_lr' / LinearAdapter(127, Int8ul), 'dCtrlMagMomentMATAz_SAT_lr' / LinearAdapter(127, Int8ul), 'iReadTorqueRWx_MFR' / LinearAdapter(9696969, Int16ul), 'iReadTorqueRWy_MFR' / LinearAdapter(9696969, Int16ul), 'iReadTorqueRWz_MFR' / LinearAdapter(9696969, Int16ul), 'iReadRotSpeedRWx_MFR' / Int16ul, 'iReadRotSpeedRWy_MFR' / Int16ul, 'iReadRotSpeedRWz_MFR' / Int16ul, 'SGP4LatXPEF' / LinearAdapter(355, Int16ul), 'SGP4LongYPEF' / LinearAdapter(177, Int16ul), 'SGP4AltPEF' / LinearAdapter(0.25, Int8ul), 'AttitudeErrorAngle' / LinearAdapter(177, Int16ul), 'TargetData_Distance' / Int16ul, 'TargetData_ControlIsActive' / Int8ul # flag, really ) snet = Struct( 'header' / SNETFrameHeader, 'telemetry' / Switch(lambda c: (c.header.FCIDMajor, c.header.FCIDSub), { (0, 0): ADCSTelemetry, (9, 0): EPSTelemetry, }, default=Pass)) gr-satellites-4.4.0/python/telemetry/suomi100.py000066400000000000000000000042171414055407700215730ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2018-2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from construct import * from ..adapters import UNIXTimestampAdapter from .csp import CSPHeader Timestamp = UNIXTimestampAdapter(Int32ub) Beacon0EPS = Struct( 'timestamp' / Timestamp, 'pv_v' / Int16ub[3], 'batt_v' / Int16ub, 'output_cur' / Int16ub[7], 'pv_cur' / Int16ub[3], 'batt_in_cur' / Int16ub, 'batt_out_cur' / Int16ub, 'temp' / Int16ub[6], 'batt_mode' / Int8ub ) Beacon0COM = Struct( 'timestamp' / Timestamp, 'temp' / Int16sb[2], 'rssi' / Int16sb, 'rferr' / Int16sb, 'rssi_bgnd' / Int16sb ) Beacon0OBC = Struct( 'timestamp' / Timestamp, 'cur' / Int16ub[6], 'temp' / Int16sb[2] ) Beacon0 = Struct( 'beacon_type' / Const(b'\x00'), 'eps' / Beacon0EPS, 'com' / Beacon0COM, 'obc' / Beacon0OBC ) Beacon1EPS = Struct( 'timestamp' / Timestamp, 'wdt_i2c' / Int32ub, 'wdt_gnd' / Int32ub, 'boot_count' / Int32ub, 'wdt_i2c_count' / Int32ub, 'wdt_gnd_count' / Int32ub, 'wdt_csp_count' / Int32ub[2], 'wdt_csp' / Int8ub[2], 'boot_cause' / Int8ub, 'latchup' / Int16ub[6], 'out_val' / Int8ub[8], 'ppt_mode' / Int8ub ) Beacon1COM = Struct( 'timestamp' / Timestamp, 'tx_duty' / Int8ub, 'total_tx_count' / Int32ub, 'total_rx_count' / Int32ub, 'total_tx_bytes' / Int32ub, 'total_rx_bytes' / Int32ub, 'boot_count' / Int16ub, 'boot_cause' / Int32ub, 'tx_bytes' / Int32ub, 'rx_bytes' / Int32ub, 'config' / Int8ub, 'tx_count' / Int32ub, 'rx_count' / Int32ub ) Beacon1OBC = Struct( 'timestamp' / Timestamp, 'pwr' / Int8ub[6], 'sw_count' / Int16ub, 'filesystem' / Int8ub, 'boot_count' / Int16ub, 'boot_cause' / Int32ub, 'clock' / Timestamp ) Beacon1 = Struct( 'beacon_type' / Const(b'\x01'), 'eps' / Beacon1EPS, 'com' / Beacon1COM, 'obc' / Beacon1OBC ) suomi100 = Struct( 'header' / CSPHeader, 'payload' / Select(Beacon0, Beacon1) ) gr-satellites-4.4.0/python/telemetry/trisat.py000066400000000000000000000006311414055407700215200ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from construct import * from ..ccsds.telemetry import PrimaryHeader, OCFTrailer trisat = Struct( 'tm_primary_header' / PrimaryHeader, 'payload' / Bytes(211), 'ocf' / OCFTrailer, 'crc' / Int16ub ) gr-satellites-4.4.0/python/telemetry/upmsat_2.py000066400000000000000000000072261414055407700217530ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import math from construct import * from .ax25 import Header as AX25Header from ..adapters import LinearAdapter, AffineAdapter Header = Struct( 'command_id' / Int8ub, 'seq_number' / Int8ub, 'length' / Int8ub ) OperatingMode = Enum(Int8ub, off=0, test=1, await_launch=2, launch=3, latency=4, initialization=5, commissioning=6, safe=7, beacon=8, nominal=9, experiment=10) BatteryWarning = Enum(BitsInteger(2), none=0, low=1, critical=2, high=3) class TemperatureAdapter(Adapter): def __init__(self, *args, **kwargs): return Adapter.__init__(self, *args, **kwargs) def _decode(self, obj, context, path=None): return 0.336*(obj - 1708.1) if obj >= 1707.0 else \ 6.41 * (4.15 - math.sqrt(17.24 - 0.31 * (obj - 1712.2))) Temperature = TemperatureAdapter(BitsInteger(12)) class BatteryTempAdapter(Adapter): def __init__(self, *args, **kwargs): return Adapter.__init__(self, *args, **kwargs) def _decode(self, obj, context, path=None): return 1.2 * (60 - math.sqrt(3600 - 1.72 * (2333 - obj))) BatteryTemp = BatteryTempAdapter(BitsInteger(12)) PSUCurrent = AffineAdapter(232.6, 0.42, BitsInteger(12)) AnalogData = BitStruct( 'BATT_TBAT_TM' / BatteryTemp[3], 'reserved' / BitsInteger(12), 'BATT_VBAT_TM' / AffineAdapter(264.1, -4039.2, BitsInteger(12)), 'PSU_T_TM' / BitsInteger(12), 'p3V3_TM' / BitsInteger(12), 'p5V_TM' / BitsInteger(12), 'p15V_TM' / BitsInteger(12), 'n15V_TM' / BitsInteger(12), 'PSU_Ip5V_TM' / PSUCurrent, 'PSU_Ip15V_TM' / PSUCurrent, 'PSU_In15V_TM' / PSUCurrent, 'PSU_Ip3V3_TM' / PSUCurrent, 'PDU_IVBUS_TM' / PSUCurrent, 'PV_TPSXp_TM' / Temperature, 'PV_TPSXn_TM' / Temperature, 'PV_TPSYp_TM' / Temperature, 'PV_TPSYn_TM' / Temperature, 'PV_TPSZp_TM' / Temperature, 'PV_ISPXp_TM' / AffineAdapter(810.64, 1688.3, BitsInteger(12)), 'PV_ISPXn_TM' / AffineAdapter(656.02, 1622.3, BitsInteger(12)), 'PV_ISPYp_TM' / AffineAdapter(853.8, 1798.4, BitsInteger(12)), 'PV_ISPYn_TM' / AffineAdapter(810.64, 1688.3, BitsInteger(12)), 'PV_ISPZp_TM' / AffineAdapter(638.81, 1571.8, BitsInteger(12)), 'OBC_T_TM' / BitsInteger(12), 'MGM_T_TM' / Temperature[3], 'MGM_xyz_TM' / BitsInteger(12)[9], 'MGM_TX_TM' / BitsInteger(12), 'MODEM_T_TR_TM' / Temperature, 'EBOX_T_INT_TM' / Temperature, 'EBOX_T_EXT_TM' / Temperature, 'BATT_T_EXT_TM' / Temperature, 'BATT_T_INT_TM' / Temperature, 'SS6_XYZ_TM' / AffineAdapter(17.7, -201.4, BitsInteger(12))[6], 'RW_T_TM' / Temperature[2], 'TP_TM' / Temperature[6], ) DigitalData = BitStruct( 'battery_warning' / BatteryWarning, 'DAS_p3V' / Flag, 'DAS_p5V' / Flag, 'DAS_p15V' / Flag, 'DAS_n15V' / Flag, 'DAS_p3V3' / Flag, 'DAS_p5V_2' / Flag, 'MGM1_p5V' / Flag, 'MGM2_p5V' / Flag, 'MGM3_p15V' / Flag, 'MGM3_n15V' / Flag, 'MGT_X_VBUS' / Flag, 'TEMP_A_p5V' / Flag, 'TEMP_B_p5V' / Flag, 'MODEM_VBUS' / Flag, 'RW_p5V' / Flag, 'RW_VBUS' / Flag, 'MTS_VBUS' / Flag, Padding(5) ) Time = LinearAdapter(4.0, Int32ub) HousekeepingData = Struct( 'operating_mode' / OperatingMode, 'snapshot_time' / Time, 'analog_data' / AnalogData, 'digital_data' / DigitalData ) Data = Struct( 'sent_time' / Time, 'housekeeping' / HousekeepingData ) upmsat_2 = Struct( 'ax25_header' / AX25Header, 'header' / Header, 'data' / Data ) gr-satellites-4.4.0/python/telemetry/vzlusat_2.py000066400000000000000000000022751414055407700221510ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 jgromes # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # from construct import * from ..adapters import * from .csp import CSPHeader Beacon = Struct( Padding(8), 'obc_timestamp' / Int32ub, 'obc_boot_count' / Int32ub, 'obc_reset_cause' / Int32ub, 'eps_vbatt' / Int16ub, 'eps_cursun' / Int16ub, 'eps_cursys' / Int16ub, 'eps_temp_bat' / Int16sb, 'radio_temp_pa' / LinearAdapter(10, Int16sb), 'radio_tot_tx_count' / Int32ub, 'radio_tot_rx_count' / Int32ub ) Drop = Struct( 'flag' / Int8ub, 'chunk' / Int32ub, 'time' / Int32ub, 'data' / HexDump(GreedyBytes), ) vzlusat_2 = Struct( 'csp_header' / CSPHeader, 'cmd' / Hex(Int8ub), 'payload' / IfThenElse( ((this.csp_header.source == 1) & (this.csp_header.destination == 26) & (this.csp_header.source_port == 18) & (this.csp_header.destination_port == 18)), Switch(this.cmd, { 0x56: Beacon, 0x03: Drop }, default=HexDump(GreedyBytes)), HexDump(GreedyBytes) ) ) gr-satellites-4.4.0/python/usp/000077500000000000000000000000001414055407700164355ustar00rootroot00000000000000gr-satellites-4.4.0/python/usp/CMakeLists.txt000066400000000000000000000032411414055407700211750ustar00rootroot00000000000000# Copyright 2011 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. ######################################################################## # Include python install macros ######################################################################## include(GrPython) if(NOT PYTHONINTERP_FOUND) return() endif() ######################################################################## # Install python sources ######################################################################## GR_PYTHON_INSTALL( FILES __init__.py usp_ax25_crop.py usp_pls_crop.py DESTINATION ${GR_PYTHON_DIR}/satellites/usp ) ######################################################################## # Handle the unit tests ######################################################################## include(GrTest) set(GR_TEST_TARGET_DEPS gnuradio-satellites) set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig) gr-satellites-4.4.0/python/usp/__init__.py000066400000000000000000000005611414055407700205500ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # ''' gr-satellites USP This module contains low-level blocks for the Unified SPUTNIX Protocol ''' from .usp_ax25_crop import usp_ax25_crop from .usp_pls_crop import usp_pls_crop gr-satellites-4.4.0/python/usp/usp_ax25_crop.py000066400000000000000000000026311414055407700215020ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2021 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import struct from gnuradio import gr import numpy as np import pmt # This block is based on the Universal SPUNTIX Protocol (USP) # Protocol Description revision 1.04 # https://sputnix.ru/tpl/docs/amateurs/USP%20protocol%20description%20v1.04.pdf class usp_ax25_crop(gr.basic_block): """ Crop a USP packet to obtain the encapsulated AX.25 frame """ def __init__(self): gr.basic_block.__init__( self, name='usp_ax25_crop', in_sig=[], out_sig=[]) self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('out')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_u8vector(msg): print('[ERROR] Received invalid message type. Expected u8vector') return msg = pmt.u8vector_elements(msg) length_field = msg[2:4] length = struct.unpack(' # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import numpy as np from gnuradio import gr import pmt # This block is based on the Universal SPUNTIX Protocol (USP) # Protocol Description revision 1.04 # https://sputnix.ru/tpl/docs/amateurs/USP%20protocol%20description%20v1.04.pdf # Generator matrix for the (64,7) PLS linear code G = ( '0011001100110011001100110011001100110011001100110011001' '1001100110000111100001111000011110000111100001111000011' '1100001111000011110000000011111111000000001111111100000' '0001111111100000000111111110000000000000000111111111111' '1111000000000000000011111111111111110000000000000000000' '0000000000000111111111111111111111111111111111111111111' '1111111111111111111111111111111111111111111111111111110' '1010101010101010101010101010101010101010101010101010101' '01010101') G = np.array([int(a) for a in G], dtype='uint8').reshape((-1, 64)).T # Defined PLS codes PLS_codes = np.array([0, 1], dtype='uint8') PLS_vectors = np.unpackbits( np.array(PLS_codes, dtype='uint8')[np.newaxis, :], axis=0)[1:] # Encoded and scrambled PLS 64-bit vectors enc_PLS = (G @ PLS_vectors) % 2 scramble_seq = ( '0111000110011101100000111100100101010011010000100010110111111010') scramble_seq = np.array([int(a) for a in scramble_seq], dtype='uint8') scrambled_PLS = enc_PLS ^ scramble_seq[:, np.newaxis] scrambled_PLS_bipolar = 2 * scrambled_PLS.astype('float32') - 1 class usp_pls_crop(gr.basic_block): """ Crop a USP packet according to its PLS """ def __init__(self): gr.basic_block.__init__( self, name='usp_pls_crop', in_sig=[], out_sig=[]) self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.message_port_register_out(pmt.intern('out')) def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_f32vector(msg): print("[ERROR] Received invalid message type. Expected f32vector") return pls = np.array(pmt.f32vector_elements(msg)[:64], dtype='float32') correlations = np.sum(pls[:, np.newaxis] * scrambled_PLS_bipolar, axis=0) code = PLS_codes[np.argmax(correlations)] # It seems that there is a typo in the rev 1.04 document # PLS-code 0 is listed as corresponding to data length 223 # PLS-code 1 is listed as corresponding to data length 48 # However, according to the test IQ data it is the other way # around data_len = 48 if code == 0 else 223 payload_len = (data_len + 32) * 2 payload_out = pmt.f32vector_elements(msg)[64:][:8*payload_len] payload_out = pmt.init_f32vector(len(payload_out), payload_out) msg_out = pmt.cons(pmt.car(msg_pmt), payload_out) self.message_port_pub(pmt.intern('out'), msg_out) gr-satellites-4.4.0/python/utils/000077500000000000000000000000001414055407700167665ustar00rootroot00000000000000gr-satellites-4.4.0/python/utils/CMakeLists.txt000066400000000000000000000032351414055407700215310ustar00rootroot00000000000000# Copyright 2011 Free Software Foundation, Inc. # # This file was generated by gr_modtool, a tool from the GNU Radio framework # This file is a part of gr-satellites # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. ######################################################################## # Include python install macros ######################################################################## include(GrPython) if(NOT PYTHONINTERP_FOUND) return() endif() ######################################################################## # Install python sources ######################################################################## GR_PYTHON_INSTALL( FILES __init__.py config.py options_block.py DESTINATION ${GR_PYTHON_DIR}/satellites/utils ) ######################################################################## # Handle the unit tests ######################################################################## include(GrTest) set(GR_TEST_TARGET_DEPS gnuradio-satellites) set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig) gr-satellites-4.4.0/python/utils/__init__.py000066400000000000000000000004211414055407700210740ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # ''' gr-satellites utils This module contains assorted utils for gr-satellites ''' gr-satellites-4.4.0/python/utils/config.py000066400000000000000000000025611414055407700206110ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import configparser from pathlib import Path def open_config(): """ Opens and returns the gr-satellites config .ini file If the ini file does not exist, it creates a default one """ config_dir = Path.home() / '.gr_satellites' config_filename = config_dir / 'config.ini' if not config_dir.exists(): Path.mkdir(config_dir) if not config_filename.exists(): return write_default_config(config_filename) config = configparser.ConfigParser() config.read(config_filename) return config def write_default_config(file): """ Writes a default configuration and returns the default configuration values. Args: file: the filename to write to """ config = configparser.ConfigParser() config['Groundstation'] = { 'callsign': '', 'latitude': 0, 'longitude': 0, 'submit_tlm': 'yes', } config['FUNcube'] = { 'site_id': '', 'auth_code': '', } config['PW-Sat2'] = { 'credentials_file': '', } config['BME'] = { 'user': '', 'password': '', } with open(file, 'w') as f: config.write(f) return config gr-satellites-4.4.0/python/utils/options_block.py000066400000000000000000000023751414055407700222140ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2019 Daniel Estevez # # This file is part of gr-satellites # # SPDX-License-Identifier: GPL-3.0-or-later # import argparse import shlex class options_block: """ Class used to add default option parsing to blocks A block using this class should inherit both from a GNU Radio block class (gr.hier_block2, for example) and options_block. It should have a @classmethod add_options(cls, parser) that adds class specific options to an argparse parser. It should also have an options = None parameter in its __init__() method. The __init__() method should call options_block.__init__(options). Then options should be access as self.options. This class automatically set options to default values even if no options arguments was passed to the child class __init__() method. Args: options: options from argparse """ def __init__(self, options): if options is not None and type(options) is not str: self.options = options return p = argparse.ArgumentParser(prog=self.__class__.__name__) self.add_options(p) self.options = p.parse_args(shlex.split(options) if options else []) gr-satellites-4.4.0/readthedocs.yml000066400000000000000000000006641414055407700173230ustar00rootroot00000000000000# .readthedocs.yml # Read the Docs configuration file # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details # Required version: 2 # Build documentation in the docs/ directory with Sphinx sphinx: configuration: docs/source/conf.py # Optionally build your docs in additional formats such as PDF and ePub formats: all # Do not include submodules, as they are not needed to build docs submodules: exclude: all gr-satellites-4.4.0/satellite-recordings/000077500000000000000000000000001414055407700204305ustar00rootroot00000000000000gr-satellites-4.4.0/satellite_teams.md000066400000000000000000000053641414055407700200160ustar00rootroot00000000000000# A note to satellite teams planning to use gr-satellites gr-satellites gives a large number of tools that can be reused when developing a groundstation solution for a small satellite mission, and it is designed with that goal in mind. If you are working on a satellite mission (especially if it uses Amateur radio spectrum) and you are thinking about using some parts of gr-satellites to build your groundstation, rather than forking off a decoder that only works for your own satellite, please give some thought to the idea of contributing back to upstream the changes needed to incorporate support for your satellite in the upstream gr-satellites version. In this way, you get for free some advantages, such as a large user base of Amateur satellite observers and Amateur radio operators already familiar with the installation and operation of the software, maintainance to keep your software working with new versions of GNU Radio or future improvements of gr-satellites (this is especially important if you plan on a short main mission of a few months but your satellite will continue transmitting afterwards, perhaps for several years), and other advantages related to forming part of a large worldwide community. Additionally, if your satellite uses Amateur radio spectrum, it will eventually be supported in gr-satellites anyway, since gr-satellites strives to support all Amateur satellites. Therefore, by collaborating and incorporating your changes back to upstream, you save me work in adding to gr-satellites support for your satellite. Even if you are thinking about using an external tool to process your telemetry, such as a GUI tool to classify, show and store telemetry values, the gr_satellites command line tool can easily be connected to such a tool by using appropriate data sinks with TCP sockets, ZeroMQ or other IPC methods. By using the upstream gr_satellites command line tool as your decoding backend, you gain all the support from the community. So if you are planning to use gr-satellites for something as important as your next satellite mission, we are glad to have you on-board. You are more than welcome to write in the [Github discussions](https://github.com/daniestevez/gr-satellites/discussions/categories/satellite-teams) a heads-up message, such as a statement of interest or presentation letter (you can make it look the way you like) so that we are aware of your work and can start coordinating efforts with you. With gr-satellites, I have been supporting dozens of satellite missions over more than four years, so I have good experience about which communication technologies work best, and which work worse. Thus, I am also happy to give advice if you are in the early planning stages of your mission. --- Daniel Estévez, gr-satellites lead developer gr-satellites-4.4.0/test.sh000077500000000000000000000115021414055407700156220ustar00rootroot00000000000000#!/bin/sh export GR_SATELLITES_SUBMIT_TLM=0 echo 1KUNS-PF gr_satellites 1KUNS-PF --wavfile satellite-recordings/1kuns_pf.wav echo 3CAT-1 gr_satellites 3CAT-1 --wavfile satellite-recordings/sat_3cat_1.wav --hexdump echo "Astrocast 0.1" gr_satellites "Astrocast 0.1" --wav satellite-recordings/astrocast.wav --verbose_rs echo EntrySat gr_satellites EntrySat --wav satellite-recordings/entrysat.wav echo GOMX-3 gr_satellites GOMX-3 --wav satellite-recordings/gomx_3.wav echo US01 gr_satellites US01 --wav satellite-recordings/us01.wav echo "Astrocast 0.1 9k6" gr_satellites "Astrocast 0.1" --wav satellite-recordings/astrocast_9k6.wav --input_gain -1 --clk_limit 0.05 echo AO-73 gr_satellites FUNcube-1 --wavfile satellite-recordings/ao73.wav echo "Reaktor Hello World" gr_satellites "Reaktor Hello World" --wavfile satellite-recordings/reaktor_hello_world.wav echo "S-NET A" gr_satellites "S-NET A" --wavfile satellite-recordings/snet_a.wav --clk_bw 0.1 echo "Swiatowid" gr_satellites Swiatowid --wavfile satellite-recordings/swiatowid.wav echo "NuSat" gr_satellites "NuSat 1" --wavfile satellite-recordings/nusat.wav --iq --samp_rate 192e3 echo KS-1Q gr_satellites KS-1Q --wavfile satellite-recordings/ks_1q.wav --clk_bw 0.02 echo BY70-1 gr_satellites BY70-1 --wavfile satellite-recordings/by701.wav echo LilacSat-1 gr_satellites LilacSat-1 --wavfile satellite-recordings/lilacsat1.wav echo QO-100 gr_satellites QO-100 --wavfile satellite-recordings/qo100.wav echo AAUSAT-4 gr_satellites AAUSAT-4 --wavfile satellite-recordings/aausat_4.wav echo Floripasat-1 gr_satellites FloripaSat-1 --wavfile satellite-recordings/floripasat_1.wav echo SMOG-P gr_satellites SMOG-P --wavfile satellite-recordings/smog_p_5k.wav gr_satellites SMOG-P --wavfile satellite-recordings/smog_p_long.wav gr_satellites SMOG-P --wavfile satellite-recordings/smog_p.wav echo OPS-SAT gr_satellites OPS-SAT --wavfile satellite-recordings/ops_sat.wav echo AISAT gr_satellites AISAT --wavfile satellite-recordings/aisat.wav echo AISTECHSAT-3 gr_satellites AISTECHSAT-3 --wavfile satellite-recordings/aistechsat3.wav echo AO-40 gr_satellites AO-40 --wavfile satellite-recordings/ao40_uncoded.wav echo ATHENOXAT-1 gr_satellites ATHENOXAT-1 --wavfile satellite-recordings/athenoxat_1.wav echo AU02 gr_satellites AU02 --wavfile satellite-recordings/au02.wav --clk_bw 0.1 echo AU03 gr_satellites AU03 --wavfile satellite-recordings/au03.wav echo CA03 gr_satellites CA03 --wavfile satellite-recordings/ca03.wav gr_satellites CA03 --wavfile satellite-recordings/ca03_9k6.wav echo CZ02 gr_satellites CZ02 --wavfile satellite-recordings/cz02.wav --clk_bw 0.001 echo D-SAT gr_satellites D-SAT --wavfile satellite-recordings/dsat.wav echo DUCHIFAT-3 gr_satellites DUCHIFAT-3 --wavfile satellite-recordings/duchifat_3.wav echo FACSAT-1 gr_satellites FACSAT-1 --wavfile satellite-recordings/facsat_1.wav echo FMN-1 gr_satellites FMN-1 --wavfile satellite-recordings/fmn1.wav echo GALASSIA gr_satellites GALASSIA --wavfile satellite-recordings/galassia.wav echo GOMX-1 gr_satellites GOMX-1 --wavfile satellite-recordings/gomx_1.wav echo IL01 gr_satellites IL01 --wavfile satellite-recordings/il01.wav echo INNOSAT-2 gr_satellites INNOSAT-2 --wavfile satellite-recordings/innosat_2.wav echo ITASAT 1 gr_satellites "ITASAT 1" --wavfile satellite-recordings/itasat1.wav echo KR01 gr_satellites KR01 --wavfile satellite-recordings/kr01.wav --clk_limit 0.1 echo Luojia-1 gr_satellites Luojia-1 --wavfile satellite-recordings/luojia-1.wav echo "MYSAT 1" gr_satellites "MYSAT 1" --wavfile satellite-recordings/mysat1.wav --f_offset 2000 --disable_fll --clk_limit 0.1 echo PW-Sat2 gr_satellites PW-Sat2 --wavfile satellite-recordings/pwsat2.wav --clk_limit 0.1 echo "Shaonian Xing" gr_satellites "Shaonian Xing" --wavfile satellite-recordings/shaonian_xing.wav echo "Suomi 100" gr_satellites "Suomi 100" --wavfile satellite-recordings/suomi_100.wav echo TW-1B gr_satellites TW-1B --wavfile satellite-recordings/tw_1b.wav echo TW-1C gr_satellites TW-1C --wavfile satellite-recordings/tw_1c.wav echo TY-2 gr_satellites TY-2 --wavfile satellite-recordings/ty_2.wav echo "TY 4-01" gr_satellites "TY 4-01" --wavfile satellite-recordings/ty_4.wav echo "Quetzal-1" gr_satellites Quetzal-1 --wavfile satellite-recordings/quetzal1.wav echo "UA01" gr_satellites UA01 --wavfile satellite-recordings/ua01.wav --costas_bw 150 echo "BY02" gr_satellites BY02 --wavfile satellite-recordings/by02.wav echo "UPMSat 2" gr_satellites "UPMSat 2" --wavfile satellite-recordings/upmsat_2.wav --clk_bw 0.1 echo "TRISAT" gr_satellites TRISAT --wavfile satellite-recordings/trisat.wav echo "SOKRAT" gr_satellites SOKRAT --wavfile satellite-recordings/sokrat.wav echo "BEESAT-9" gr_satellites BEESAT-9 --wavfile satellite-recordings/beesat_9.wav echo "IDEASSat" gr_satellites IDEASSat --wavfile satellite-recordings/ideassat.wav echo "CAPE-3" gr_satellites CAPE-3 --wavfile satellite-recordings/cape3.wav gr-satellites-4.4.0/tests/000077500000000000000000000000001414055407700154475ustar00rootroot00000000000000gr-satellites-4.4.0/tests/Lock in BPSK.ipynb000066400000000000000000054474221414055407700205330ustar00rootroot00000000000000{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import pathlib" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "dumps = pathlib.Path('/home/daniel/debian_testing_chroot/tmp/lockin_bpsk/')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## AGC" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "

" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "agc_in = np.fromfile(dumps / 'agc_in.c64', dtype = 'complex64')\n", "agc_out = np.fromfile(dumps / 'agc_out.c64', dtype = 'complex64')\n", "fig, axs = plt.subplots(2, figsize = (14,8), facecolor = 'w')\n", "axs[0].plot(np.abs(agc_in), '.')\n", "axs[1].plot(np.abs(agc_out), '.')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## FLL" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fll_freq = np.fromfile(dumps / 'fll_freq.f32', dtype = 'float32')\n", "fig, ax = plt.subplots(figsize = (14, 8), facecolor = 'w')\n", "ax2 = ax.twinx()\n", "ax2.plot(agc_in.real, '.', color = 'C1', alpha = 0.1)\n", "ax.plot(fll_freq)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Clock recovery" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "lock_ins = np.int32(np.arange(0.1, 1, 0.2) * 9600) + 100\n", "lock_span = 100" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/png": "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334b8+fPt/0/OjoaS5YsCThBGzduxMaNGwEAt2/fRp8+fQI+phJMJpOtd48oUMxPpCTmJ1Ia8xQpqbvkJ7MQaDWZAQFAAtasj8JaSVI7WRHHVX66c+eOSqnxjddvwaFDhzy+/sknn6CkpASff/45JBeZT6/X48qVK7bHRqMRer3e7fFWrFiBFStWeEtWyE2ePBknTpxQOxnUTTA/kZKYn0hpzFOkJOYnUlI456eAhhru378f69atw969e9G7d2+X78nMzMT58+dx+fJltLW1oaioCPPmzQvktERERERERGEloMBr1apVaGpqQm5uLu6//3786le/AgBcvXoVjzzyCAAgOjoaf/rTnzBr1iykpKTgySefRGpqauApJyIiIiIiChMBDbi9cOGCy+eHDh2Kffv22R4/8sgjtkAsXGlx+COFL+YnUhLzEymNeYqUxPxESgrn/BTQPl5ERERERETknWLLyRMREREREZFrDLxk2L9/P5KTk2EwGPDOO++onRzSoCtXriA7Oxvjx49Hamoq1q9fDwC4ceMGcnNzMWbMGOTm5qKhwbLZohACL730EgwGAyZMmICTJ0/ajrV582aMGTMGY8aMwebNm1X5e0gbOjo6MGnSJMydOxcAcPnyZUydOhUGgwFPPfUU2traAACtra146qmnYDAYMHXqVFRXV9uOUVhYCIPBgOTkZBw4cECNP4M04ubNm8jLy8O4ceOQkpKCY8eOsYwiv/3xj39Eamoq0tLS8PTTT6OlpYVlFMm2bNkyxMfHIy0tzfackuVRVVUV0tPTYTAY8NJLL0EzA/wEeWQymURSUpK4ePGiaG1tFRMmTBBnz55VO1mkMVevXhVVVVVCCCEaGxvFmDFjxNmzZ8Wrr74qCgsLhRBCFBYWirVr1wohhCgtLRWzZ88WZrNZHDt2TEyZMkUIIUR9fb0YNWqUqK+vFzdu3BCjRo0SN27cUOePItW999574umnnxaPPvqoEEKIJ554QuzYsUMIIcTKlSvFBx98IIQQYsOGDWLlypVCCCF27NghnnzySSGEEGfPnhUTJkwQLS0t4tKlSyIpKUmYTCYV/hLSgvz8fLFp0yYhhBCtra2ioaGBZRT5xWg0ipEjR4rbt28LISxl08cff8wyimQrKysTVVVVIjU11fackuVRZmamOHbsmDCbzWL27Nli3759If4LXWOPlxeVlZUwGAxISkpCTEwMFi9ejOLiYrWTRRqTkJCABx54AAAQGxuLlJQU1NbWori4GM8++ywA4Nlnn8Vnn30GACguLkZ+fj4kSUJWVhZu3ryJuro6HDhwALm5uRg4cCDi4uKQm5uL/fv3q/Z3kXqMRiNKS0uxfPlyAJYWv8OHDyMvLw9A1/xkzWd5eXn4/PPPIYRAcXExFi9ejJ49e2LUqFEwGAyorKxU5w8iVf3000/44osv8PzzzwMAYmJiMGDAAJZR5DeTyYQ7d+7AZDLh9u3bSEhIYBlFsk2bNg0DBw50eE6p8qiurg6NjY3IysqCJEnIz8+3HUttDLy8qK2txbBhw2yPExMTUVtbq2KKSOuqq6tx6tQpTJ06FdeuXUNCQgIAYMiQIbh27RoA9/mK+Y2sVq9ejXXr1iEqylJM19fXY8CAAYiOtixGa5837PNNdHQ0+vfvj/r6euYnsrl8+TLuu+8+PPfcc5g0aRKWL1+O5uZmllHkF71ejzVr1mD48OFISEhA//79kZGRwTKKAqJUeVRbW4vExMQuz2sBAy8iBd26dQuLFi3C+++/j379+jm8JkkSJElSKWUUTkpKShAfH4+MjAy1k0LdhMlkwsmTJ/HCCy/g1KlT6NOnT5c5yyyjSK6GhgYUFxfj8uXLuHr1Kpqbm9nzSYrqruURAy8v9Ho9rly5YntsNBqh1+tVTBFpVXt7OxYtWoQlS5Zg4cKFAIDBgwejrq4OAFBXV4f4+HgA7vMV8xsBQHl5Ofbu3YuRI0di8eLFOHz4MF5++WXcvHkTJpMJgGPesM83JpMJP/30EwYNGsT8RDaJiYlITEzE1KlTAViGe508eZJlFPnl0KFDGDVqFO677z706NEDCxcuRHl5OcsoCohS5ZFer4fRaOzyvBYw8PIiMzMT58+fx+XLl9HW1oaioiLMmzdP7WSRxggh8PzzzyMlJQWvvPKK7fl58+bZVtnZvHkz5s+fb3t+y5YtEEKgoqIC/fv3R0JCAmbNmoWDBw+ioaEBDQ0NOHjwIGbNmqXK30TqKSwshNFoRHV1NYqKipCTk4Pt27cjOzsbO3fuBNA1P1nz2c6dO5GTkwNJkjBv3jwUFRWhtbUVly9fxvnz5zFlyhTV/i5Sz5AhQzBs2DB89913AIDPP/8c48ePZxlFfhk+fDgqKipw+/ZtCCFs+YllFAVCqfIoISEB/fr1Q0VFBYQQ2LJli+1YqlNtWY8wUlpaKsaMGSOSkpLEW2+9pXZySIO+/PJLAUCkp6eLiRMniokTJ4rS0lJx/fp1kZOTIwwGg3j44YdFfX29EEIIs9ksfv3rX4ukpCSRlpYmjh8/bjvWn//8ZzF69GgxevRo8dFHH6n1J5FGHDlyxLaq4cWLF0VmZqYYPXq0yMvLEy0tLUIIIe7cuSPy8vLE6NGjRWZmprh48aLt99966y2RlJQkxo4dq5lVnUgdp06dEhkZGSI9PV3Mnz9f3Lhxg2UU+a2goEAkJyeL1NRUsXTpUtHS0sIyimRbvHixGDJkiIiOjhZ6vV58+OGHipZHx48fF6mpqSIpKUm8+OKLwmw2h/xvdEUSQisL2xMREREREXVPHGpIREREREQUZAy8iIiIiIiIgoyBFxERERERUZAx8CIiIiIiIgoyBl5ERERERERBxsCLiIiIiIgoyBh4ERERERERBRkDLyIiIiIioiD7/y6PHnBuGWYbAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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LNauXevIpgjw9ttvl6odAzhy5Ajt2rUDYMmSJS4TiZRUqyaLmZmZzJw5kyVLltCkSROn81x77bXs3r2b/fv3c+nSJTIyMkhPT6/NZkVERERERGps+vTpLFmyBDCBWvfu3enWrRvHjh1j2rRpAIwePZouXbrQq1cvEhMTSUxM5NZbb3Ws41//+le5gOyvf/0rcXFxJCYm8te//pXXX3+90rLUqm7xoYce4uLFiwwbNgwwiT3+9re/cfjwYSZPnszy5cux2+28+OKL3HTTTRQWFjJp0iTi4uJqs1kREREREZFqGThwIAMHDgTgmWeecUwfPXo0o0ePLjd/cHAwf//7312ub9++feWmlayRq6paBWR79uxxOr19+/YsX77c8XzEiBGMGDGiNpvyOl9sRhlotI/rhvaz52kfe572sedpH3ue9nHd0H72PO3j2rFZlmV5uxAiIiIiIiL1kdvS3ouIiIiIiEj1KCCrgszMTLp3705MTAzPPfect4sTEA4ePMigQYPo2bMncXFxvPDCCwD87ne/IyIigqSkJJKSkko1fZXq69SpE7169SIpKYmUlBQATp48ybBhw+jatSvDhg3j1KlTXi6l//r2228dx2pSUhLNmjXjL3/5i45jN5g0aRJhYWHEx8c7prk6di3L4uGHHyYmJoaEhAS2bt3qrWL7FWf7+IknnqBHjx4kJCRw++23c/r0aQAOHDhA48aNHcf0fffd561i+xVn+7ii34cZM2YQExND9+7dWbFihTeK7Hec7eMxY8Y49m+nTp1ISkoCdBzXlKtrNv0mu5ElFSooKLCio6OtvXv3WhcvXrQSEhKsHTt2eLtYfu/w4cPWli1bLMuyrPz8fKtr167Wjh07rN/+9rfWn/70Jy+XLnBERUVZJ06cKDXtiSeesGbMmGFZlmXNmDHDevLJJ71RtIBTUFBghYeHWwcOHNBx7AZr1661tmzZYsXFxTmmuTp2ly1bZt18881WUVGRtX79eqtPnz5eKbO/cbaPV6xYYV2+fNmyLMt68sknHft4//79peaTqnG2j139PuzYscNKSEiwLly4YO3bt8+Kjo62CgoK6rK4fsnZPi7pscces37/+99blqXjuKZcXbPpN9l9VENWiY0bNxITE0N0dDQNGjTgrrvuYvHixd4ult9r164d11xzDQBXX301sbGxHDp0yMulqh8WL17sGDV+4sSJLFq0yMslCgwfffQRXbp0ISoqyttFCQipqamEhoaWmubq2F28eDETJkzAZrPRt29fTp8+zZEjR+q8zP7G2T5OS0tzDO7at29fcnJyvFG0gOFsH7uyePFi7rrrLho2bEjnzp2JiYlh48aNHi6h/6toH1uW5TQtuVSPq2s2/Sa7jwKyShw6dIgOHTo4nkdGRipwcLMDBw6wbds2rrvuOgBefPFFEhISmDRpkprT1ZLNZiMtLY3k5GRmz54NwLFjxxwDFrZt25Zjx455s4gBIyMjo9RJX8ex+7k6dvU77RmvvfYaw4cPdzzfv38/vXv35sYbb+STTz7xYsn8n7PfBx3H7vfJJ58QHh5O165dHdN0HNdOyWs2/Sa7jwIy8aqzZ89y55138pe//IVmzZpx//33s3fvXrZv3067du34z//8T28X0a99+umnbN26lffff5+XXnqJjz/+uNTrNpsNm83mpdIFjkuXLrFkyRJ+8pOfAOg4rgM6dj3r2WefxW63M27cOMDcIf/uu+/Ytm0bzz//PGPHjiU/P9/LpfRP+n2oO2+//XapG2U6jmun7DVbSfpNrh0FZJWIiIjg4MGDjuc5OTlERER4sUSB4/Lly9x5552MGzeOO+64A4Dw8HCCg4MJCgriF7/4hZpr1FLxsRoWFsbtt9/Oxo0bCQ8PdzQdOHLkCGFhYd4sYkB4//33ueaaawgPDwd0HHuKq2NXv9Pu9frrr7N06VLeeustxwVWw4YNadWqFQDJycl06dKFXbt2ebOYfsvV74OOY/cqKChgwYIFjBkzxjFNx3HNubpm02+yeyggq8S1117L7t272b9/P5cuXSIjI4P09HRvF8vvWZbFvffeS2xsLI899phjesk2xgsXLiyVNUmq59y5c5w5c8bx/wcffEB8fDzp6enMnTsXgLlz5zJq1ChvFjMglL0Lq+PYM1wdu+np6bzxxhtYlsWGDRto3ry5oxmNVE9mZiYzZ85kyZIlNGnSxDH9xIkTFBYWArBv3z52795NdHS0t4rp11z9PqSnp5ORkcHFixfZv38/u3fvpk+fPt4qpt9buXIlPXr0IDIy0jFNx3HNuLpm02+yG3k1pYifWLZsmdW1a1crOjra+sMf/uDt4gSETz75xAKsXr16WYmJiVZiYqK1bNkya/z48VZ8fLzVq1cv69Zbb7UOHz7s7aL6rb1791oJCQlWQkKC1bNnT8exm5ubaw0ePNiKiYmxhgwZYuXl5Xm5pP7t7NmzVmhoqHX69GnHNB3HtXfXXXdZbdu2tex2uxUREWHNmTPH5bFbVFRkPfDAA1Z0dLQVHx9vbdq0ycul9w/O9nGXLl2syMhIx+/yL3/5S8uyLGv+/PlWz549rcTERKt3797WkiVLvFx6/+BsH1f0+/CHP/zBio6Otrp162YtX77ciyX3H872sWVZ1sSJE62XX3651Lw6jmvG1TWbfpPdx2ZZluXtoFBERERERKQ+UpNFERERERERL1FAJiIiIiIi4iUKyERERERERLxEAZmIiIiIiIiXKCATERERERHxEgVkIiIiIiIiXqKATERERERExEsUkImIiIiIiHjJ/wfuyAg1zYb9awAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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4403mDFjBq+++qrdmLNnz9LQ6Ca8dOlS7rnnHgCSk5PJycnBbDZTV1dHTk4O6enpJCQk0LNnT7Zu3YrFYuHvf/87N910EwBz587llVdeAeCVV15pWu8OFWSKoiiKoiiKonQqnnzySVavXg3Ahg0bSEtLY8SIERQXF/PEE08AMH/+fIYNG8aYMWMYO3YsY8eOZc4cSa//3//9XxYtWkRqairDhg3juuuuA+Cxxx7jk08+Yfjw4axbt47HHnvM41xMFouz5i/BQVRUFNXV1YGehqIoiqIoiqIoQUqoawaNkCmKoiiKoiiKogQIFWSKoiiKoiiKoigBQgWZoiiKoiiKoihKgFBBpiiKoiiKoiiKEiBUkCmKoiiKoiiKogSINgmyRx55hJEjR5KZmcm8efM4f/6803EffvghaWlppKam8vTTT7flkIqiKIqiKIqiKB2GNgmyWbNmsX//fvbt28eIESNYunRpszH19fXcd999fPDBBxw4cIDXX3+dAwcOtOWwiqIoXrEzr4wXPjvGzryyQE9FURRFURTFKW0SZNdccw0REREAZGdnk5+f32zMtm3bSE1NZejQoXTt2pWFCxeyatWqthxWURTFIzvzyrjjpa38/uPD3PHSVhVliqIoiqIEJT6rIfvb3/7W1KHaloKCAgYNGtT0euDAgRQUFPjqsIqiKE7ZeuIcteYGGixQZ25g64lzgZ6SoiiKoihKMyI8Dbj66qspKipqtn7JkiXcdNNNTT9HRERwxx13tHlCy5YtY9myZQBcuHCBqKioNu/TF5jN5qZooOIf9By3D53lPDdYLFwyN4AFMMHDz4XxqMnULsfuLOc4kOg59j96jv2PnuP2Qc+z/wn0Ob548WLAju0LPJ65devWud2+fPly1qxZw6efforJyc1OUlISp06danqdn59PUlKSy/0tXryYxYsXe5pWuzNx4kR27NgR6Gl0aPQctw96nv2PnmP/o+fY/+g59j96jtsHPc/+R89x22hTyuKHH37IM888w+rVq+nRo4fTMZMmTeLo0aOcPHmS2tpa3njjDebOnduWwyqKoiiKoiiKonQI2iTI7r//fiorK5k1axZZWVn84Ac/AOD06dNcf/31AERERPDnP/+Z2bNnk56ezre+9S0yMjLaPnNFURRFURRFUZQQp03JnseOHXO6PjExkbVr1za9vv7665sEWqgS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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "clock_recovery_out = np.fromfile(dumps / 'clock_recovery_out.c64', dtype = 'complex64')\n", "clock_recovery_T_avg = np.fromfile(dumps / 'clock_recovery_T_avg.f32', dtype = 'float32')\n", "fig, ax = plt.subplots(figsize = (14, 6), facecolor = 'w')\n", "ax2 = ax.twinx()\n", "ax2.plot(clock_recovery_T_avg, color = 'C1')\n", "#ax2.set_ylim((4.9,5.1))\n", "ax.plot((clock_recovery_out[1:] * clock_recovery_out[:-1].conj()).real, '.', color = 'C0')\n", "ax.set_ylim((-2, 2))\n", "\n", "for lock in lock_ins:\n", " fig, ax = plt.subplots(figsize = (14, 6), facecolor = 'w')\n", " ax2 = ax.twinx()\n", " ax2.plot(clock_recovery_T_avg[lock-lock_span:lock+lock_span], color = 'C1')\n", " #ax2.set_ylim((4.9,5.1))\n", " ax.plot((clock_recovery_out[1:] * clock_recovery_out[:-1].conj()).real[lock-lock_span:lock+lock_span], '.', color = 'C0')\n", " ax.set_ylim((-2, 2))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Costas" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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nXh9cJ933nmnW4MYj2Pn9KyzXY/XZNsw8OqHRqNBRUWF+ffKykpoNBoJS+Q79Ho9brvtNixduhQ/+clPAABxcXFQKBSQy+V4+OGHOczCSVeP1djYWCxcuBCFhYWIi4szd/lXV1cjNjZWyiL6hJ07d2LSpEmIi4sDwONYLJaOXV6nXevNN9/E9u3bsXHjRnNFKiAgANHR0QCA9PR0DB8+HN9//72UxfRalq4PPI5dy2Aw4P3338eiRYvMr/E4dpylOhuvyfZh4NWPzMxMlJSUoKysDDqdDvn5+cjJyZG6WF5PEAQ8+OCDGD16NJ544gnz69ePAf7ggw+6ZSki+7S2tqK5udn88+7duzF27Fjk5ORg/fr1AID169djwYIFUhbTJ/RsVeVxLA5Lx25OTg42bNgAQRBQUFCAiIgI8/AXss+uXbvwwgsvYNu2bQgODja/XldXB6PRCAA4c+YMSkpKkJycLFUxvZql60NOTg7y8/PR2dmJsrIylJSUYPLkyVIV0+vt2bMHo0aNQkJCgvk1HseOsVRn4zXZAZKm9vASO3bsEEaMGCEkJycLzz//vNTF8QkHDhwQAAjjxo0TJkyYIEyYMEHYsWOHcNdddwljx44Vxo0bJ9x6663C+fPnpS6q1zp9+rQwfvx4Yfz48cKYMWPMx+7FixeFGTNmCFqtVvjRj34kXLp0SeKSereWlhYhKipKaGhoML/G49h5ixcvFgYNGiQolZXHxXoAACAASURBVEpBo9EI69ats3jsmkwm4ec//7mQnJwsjB07Vvjqq68kLr136GsfDx8+XEhISDBflx955BFBEARh8+bNwpgxY4QJEyYIEydOFLZt2yZx6b1DX/vY2vXh+eefF5KTk4WRI0cKH330kYQl9x597WNBEIR7771X+Pvf/95tWR7HjrFUZ+M12X4yQRAEqYM/IiIiIiIiX8ahhkRERERERCJj4EVERERERCQyBl5EREREREQiY+BFREREREQkMgZeREREREREImPgRUREREREJDIGXkRERERERCJj4EVERERERCQyBl5EREREREQiY+BFREREREQkMgZeREREREREImPgRUREREREJDIGXkRERERERCJj4EVERERERCQyBl5EREREREQiY+BFREREREQkMgZeREREREREImPgRUREREREJDIGXkRERERERCJj4EVERERERCQy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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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goICmjZtypo1a7j11lvZu3cvH3/88SlHr0ABS0REREREvJjVaiUtLa1OXrtv375s3ryZLVu2MHbsWC655BICAwNP+js+dVKJiIiIiIiIyWJjY8nIyKj+OTMzk9jY2BNu43A4KCoqIjLy6DWtHTt2JDQ0lE2bNp1ynwpYIiIiIiJSL/Xu3ZsdO3aQnp6OzWZj5syZjBgx4qhtRowYwYcffgjA7NmzGTx4MBaLhfT0dByOw02F9u7dy9atW0lISDjlPs8qYD388MN06NCBrl27MnLkSAoLC4+73bx582jfvj1JSUk899xzZ7NLERERERGR02K1Wpk2bRoXX3wxHTt25LrrrqNz585MnDiRuXPnAjBu3DgKCgpISkrilVdeqc4rP/74I926daN79+6MHDmSGTNm0LTpqe/vd1Zt2hcsWMDgwYOxWq08+uijADz//PNHbXM6rRFPRG3aRURERETkZDwtM5zVCNawYcOqO2n069ePzMzMY7b5Y2tEf3//6taIIiIiIiIi9U2trcF67733uOSSS455/HitEbOysmprtyIiIiIiIh7jlG3aL7roInJyco55fPLkyVx55ZXV/7ZarYwZM+asC0pJSSElJQWA8vJyQkJCzvo1a4PD4Titvvdy5nSM3UPHue7pGNc9HeO6p2Nc93SM3UPHue6ZfYwrKipM2/fxnPJILFq06KTPf/DBB3z99dcsXrz4uHc3Pp3WiH/0xxuDeZLk5OQ6668vh+kYu4eOc93TMa57OsZ1T8e47ukYu4eOc93TMT7aWU0RnDdvHi+88AJz584lODj4uNucTmtEERERERGR+uCsAtaECRMoKSlh6NChdO/enTvvvBOA7OxsLr30UuDErRFFRERERETqm7OaLLlz587jPt6iRQu+/fbb6p8vvfTS6sDlrTxx2mJ9o2PsHjrOdU/HuO7pGNc9HeO6p2PsHjrOdU/H+GhndR8sERERERER+V2ttWkXERERERFp6BSwTsO8efNo3749SUlJPPfcc2aXUy9kZGQwaNAgOnXqROfOnZk6dSoAkyZNIjY2lu7du9O9e/ejpppKzSUkJHDOOefQvXt3kpOTATh48CBDhw6lbdu2DB06lEOHDplcpffatm1b9bnavXt3wsPDee2113Qe14Jbb72VqKgounTpUv3Yic5dwzC45557SEpKomvXrqxfv96ssr3K8Y7xww8/TIcOHejatSsjR46ksLAQgD179hAUFFR9Th9Zcy0nd7xjfLLrw5QpU0hKSqJ9+/bMnz/fjJK9zvGO8ahRo6qPb0JCAt27dwd0Hp+pE31m0zX5JAw5KYfDYSQmJhq7du0yqqqqjK5duxqbN282uyyvl52dbaxbt84wDMMoLi422rZta2zevNl46qmnjBdffNHk6uqP+Ph4Iy8v76jHHn74YWPKlCmGYRjGlClTjEceecSM0uodh8NhREdHG3v27NF5XAuWLl1qrFu3zujcuXP1Yyc6d7/55htj+PDhhsvlMlatWmX06dPHlJq9zfGO8fz58w273W4YhmE88sgj1cc4PT39qO3k9BzvGJ/o+rB582aja9euRmVlpbF7924jMTHRcDgc7izXKx3vGP/RAw88YDz99NOGYeg8PlMn+syma/KJaQTrFNauXUtSUhKJiYn4+/szevRoUlNTzS7L6zVv3pyePXsCEBYWRseOHcnKyjK5qoYhNTWVsWPHAjB27Fj+85//mFxR/bB48WLatGlDfHy82aXUCxdccAFNmjQ56rETnbupqancfPPNWCwW+vXrR2FhIfv373d7zd7meMd42LBh1TcL7devH5mZmWaUVm8c7xifSGpqKqNHjyYgIIDWrVuTlJTE2rVr67hC73eyY2wYBl988QXXX3+9m6uqX070mU3X5BNTwDqFrKwsWrZsWf1zXFycgkAt27NnDz/99BN9+/YFYNq0aXTt2pVbb71V09fOksViYdiwYfTq1YuUlBQAcnNzad68OQAxMTHk5uaaWWK9MXPmzKPexHUe174Tnbu6TteN9957j0suuaT65/T0dHr06MGFF17I8uXLTazM+x3v+qDzuPYtX76c6Oho2rZtW/2YzuOz88fPbLomn5gClpiqtLSUq6++mtdee43w8HDuuusudu3axc8//0zz5s158MEHzS7Rq/3444+sX7+e7777junTp7Ns2bKjnrdYLFgsFpOqqz9sNhtz587l2muvBdB57AY6d+vW5MmTsVqtjBkzBjj8Dfa+ffv46aefeOWVV7jhhhsoLi42uUrvpOuD+3z++edHffGl8/js/P/PbH+ka/LRFLBOITY2loyMjOqfMzMziY2NNbGi+sNut3P11VczZswY/vSnPwEQHR2Nr68vPj4+3H777ZoecZaOnKtRUVGMHDmStWvXEh0dXT1Uv3//fqKioswssV747rvv6NmzJ9HR0YDO47pyonNX1+na9cEHH/D111/z6aefVn9gCggIIDIyEoBevXrRpk0btm/fbmaZXutE1wedx7XL4XAwZ84cRo0aVf2YzuMzd6LPbLomH58C1in07t2bHTt2kJ6ejs1mY+bMmYwYMcLssryeYRiMGzeOjh078sADD1Q//sc5ul999dVRXYGkZsrKyigpKan+94IFC+jSpQsjRozgww8/BODDDz/kyiuvNLPMeuH/f0uq87hunOjcHTFiBB999BGGYbB69WoiIiKqp61IzcybN48XXniBuXPnEhwcXP14Xl4eTqcTgN27d7Njxw4SExPNKtOrnej6MGLECGbOnElVVRXp6ens2LGDPn36mFWm11u0aBEdOnQgLi6u+jGdx2fmRJ/ZdE0+CVNbbHiJb775xmjbtq2RmJhoPPPMM2aXUy8sX77cAIxzzjnH6Natm9GtWzfjm2++MW688UajS5cuxjnnnGNcccUVRnZ2ttmleq1du3YZXbt2Nbp27Wp06tSp+tzNz883Bg8ebCQlJRlDhgwxCgoKTK7Uu5WWlhpNmjQxCgsLqx/TeXz2Ro8ebcTExBhWq9WIjY01/vWvf53w3HW5XMZf/vIXIzEx0ejSpYvxv//9z+TqvcPxjnGbNm2MuLi46uvyHXfcYRiGYcyePdvo1KmT0a1bN6NHjx7G3LlzTa7eOxzvGJ/s+vDMM88YiYmJRrt27Yxvv/3WxMq9x/GOsWEYxtixY40333zzqG11Hp+ZE31m0zX5xCyGYRhmhzwREREREZH6QFMERUREREREaokCloiIiIiISC1RwBIREREREaklClgiIiIiIiK1RAFLRERERESklihgiYiIiIiI1BIFLBERERERkVqigCUiIiIiIlJLFLBERERERERqiQKWiIiIiIhILVHAEhERERERqSUKWCIiIiIiIrVEAUtERERERKSWKGCJiIiIiIjUEgUsERERERGRWqKAJSIiIiIiUksUsERERERERGqJApaIiIiIiEgtUcASERERERGpJQpYIiIiIiIitUQBS0REREREpJYoYImIiIiIiNQSBSwREREREZFaYjW7gJNp2rQpCQkJZpchIiIiIiIeas+ePeTn55tdRjWPDlgJCQmkpaWZXYaIiIiIiHio5ORks0s4iqYIioiIiIiI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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "costas_out = np.fromfile(dumps / 'costas_out.c64', dtype = 'complex64')\n", "costas_frequency = np.fromfile(dumps / 'costas_frequency.f32', dtype = 'float32')\n", "costas_phase = np.fromfile(dumps / 'costas_phase.f32', dtype = 'float32')\n", "fig, axs = plt.subplots(2, figsize = (14, 8), facecolor = 'w')\n", "ax2 = axs[0].twinx()\n", "ax2.plot(costas_frequency, color = 'C2')\n", "axs[0].plot(costas_out.imag, '.', color = 'C1')\n", "axs[0].plot(costas_out.real, '.', color = 'C0')\n", "axs[0].set_ylim((-2, 2))\n", "axs[1].plot(costas_phase, color = 'C2')\n", "\n", "for lock in lock_ins:\n", " fig, axs = plt.subplots(2, figsize = (14, 8), facecolor = 'w')\n", " ax2 = axs[0].twinx()\n", " ax2.plot(costas_frequency[lock-lock_span:lock+lock_span], color = 'C2')\n", " axs[0].plot(costas_out.imag[lock-lock_span:lock+lock_span], '.', color = 'C1')\n", " axs[0].plot(costas_out.real[lock-lock_span:lock+lock_span], '.', color = 'C0')\n", " axs[0].set_ylim((-2, 2))\n", " axs[1].plot(costas_phase[lock-lock_span:lock+lock_span], color = 'C3')" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.9" } }, "nbformat": 4, "nbformat_minor": 2 } gr-satellites-4.4.0/tests/Lock in FSK.ipynb000066400000000000000000033473731414055407700204210ustar00rootroot00000000000000{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import pathlib" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "dumps = pathlib.Path('/home/daniel/debian_testing_chroot/tmp/lockin_fsk/')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Waveform" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/png": "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REREZEgMdoiIiIiIyJAY7BAREREREQCgwliz2BjsEBERERGRMTHYISIiIiIiQ2KwQ0REREREAACzwXJPM9ghIiIiIiIARks8zWCHiIiIiIgMisEOEREREREZEoMdIiIiIiICABhsyY46wU5CQgLat2+Ptm3bYs6cOWqckoiIiIiIfMxgsY73wU55eTmeeOIJrFixAgcPHsTChQtx8OBBNcrmc1n5xXoXgYiIiIiIVBLm7Ql27NiBtm3bonXr1gCAO+64A0uWLEGnTp28LpzWUrILsGzvWeQVleHo+XxsOpatd5GIiIiIiEglXo/snDlzBs2bN7f9u1mzZjhz5ozLcfHx8YiLi0NcXByysrK8vawqTl0owHt/H8V3W1ORdqEQDw1qpXeRiIiIiIh0Y7R9drwe2ZFr8uTJmDx5MgAgLi7OV5d1a1DbhjgycwwiwkJtr3254aSOJSIiIiIiIrV4Hew0bdoUp0+ftv07PT0dTZs29fa0PhEWGuK7aI+IiIiIiHzK62lsvXv3xrFjx5CSkoKSkhL8/PPPuOGGG9QoGxERERERkce8HtgICwvDJ598gtGjR6O8vBwPPvggOnfurEbZiIiIiIjIhwy2ZEedWVzXX389rr/+ejVORUREREREOjEbbKcdVTYVJSIiIiIi8jcMdoiIiIiICIDxprEx2CEiIiIiIkNisENERERERIbEYIeIiIiIiABwGhsRERERERkUs7EREREREREFAAY7REREREQEgNPYiIiIiIiIAgKDHSIiIiIiMiQGO0REREREZEgMdoiIiIiICAAMlouNwQ4REREREVkZLNphsENERERERIbEYIeIiIiIiABwU1EiIiIiIjIo7rNDREREREQUABjsEBERERGRITHYISIiIiIiAIZLxsZgh4iIiIiILMwGW7TDYIeIiIiIiAyJwQ4REREREQHgNDYiIiIiIqKAwGCHiIiIiIgMicEOEREREREB4KaiREREREREAYHBDhERERERAWCCAiIiIiIiooDAYIeIiIiIiCwMtmjHq2Bn0aJF6Ny5M0JCQpCUlKRWmYiIiIiIiLzmVbDTpUsX/P777xgyZIha5SEiIiIiMqRGtSP0LoIkY43rAGHevLljx45qlYOIiIiIyLB2vjoCxzIv4474bXoXxS2DzWLzLthRIj4+HvHx8QCArKwsX12WiIiIiEh3DWpFoEEt/x/ZMRrJaWwjRoxAly5dXP63ZMkSRReaPHkykpKSkJSUhOjoaI8LTPqrWS0UqXPG6V0MIiKigNCzRV29i0Akm9lgE9kkR3YSExN9UQ4KIJv+c53i9/RpVR87Ui5qUBoysp4t6mJXWo7exVDV3X1b4MftaXoXg4h85JZezTD46obYlbbb7XEhJuDk7HGInbrMRyUjEma0aWxMPU2K1atZTfF7OjWprUFJqhydOVbT85M+Zt/UVe8ieKR6eCj2TBsl+LOoyHAfl4aIhra3zCi5qk6kz6/dpE4kJnS9Svbxu6eNRGS4++bZY0PbeFssClBLnxqk+TVMJs0v4VNeBTt//PEHmjVrhq1bt2LcuHEYPXq0WuWiANKsXnXJY+4fEGv771kTu6hehmphjNuNqF2jWtg8VflIYtO60vekHIfeGAMAeP/Wbsre9+YY1KkRjnXPDwUAtKhfw/Yzoz1EiAJBoyhLkPPU8KsVv7dGtVCvrt20bnWEhMj/4tetUQ37Z7i2pyZ0qwqYpoxs51WZSB0bXxyGB+zaN77QokEN6YO8xJEdOxMnTkR6ejqKi4tx/vx5rFy5Uq1yUQAY1LYhAODG7tI9Vq0a1kTXZnUAAF2uqmN7/fa45toUjgzBZDJ5Fbi8NLaDV9evXrk+7eZezVx+tnfGKFQLlV+F3t+/JQCAsQ6R/xvZqZHtv7dOHS77fd892Ad3921h+/fYLo1xe2/Lc05qrWu4RH1ybbtofPtAbyx+rD/CQ0McrkP6aF6/BjpdVTVzRU7nr7dq+2B2AIMdokpf3x+HbS8NR3mF8vfuf300Dr4xGs+NZu8Uqc/68KmuoEe2W7M60gcBWPzYAGx7aThqR4bj6Cz30yftR3FaNKgJAKgZ4bMkmCSgV8t6ehdBUi3eI6r6/O6etgXXJgDXdYiRfE9Du4xZdWoINy5bNazp8tqQdtGYNfEa3NSjKQBgeMdGMLkZzq1TvercdUWuY29Yhxj0alkfADBr4jWSx5NyQ9tHY8+0UejQOMrtcdYpkfafrtxRwJYyR2eeHNZW1nGeenVcR/z67/6aXsMfMNghj0WGh6JxnUjbCI+93rH1sP91x2H4kR0tPWWNakeiVkQYalQLk71z1X39W2Lmv4SnvyW9OkJZwRXoE1tfs3OTdqybtpkA7HptpOTxm6deh58e6Sfr3L1a1kNjmfP+wyp7auvXrIZ7+7XEi2Pa4+HBrWS9lyzGdG6s6vnKK/y7y3LhI/1c6k7yXOqccRh7TRPbv+VOI42KFA84hTpGRnduJLiWwvlyX98X5/Bvs9mMxY+5NjaFAqSOTVwb341r+34NktGZYAlwf5ncH9PGd8KzI6o6ZW/q0dQWlP75xEAAwA12s1sa1JSXVnr504OxxWmKdoPK9dAD2zawvfb86PaYMaEThrRzzGLcUaV10LWrh6NPq/r44/EBqpzPXzHYIa8NurohHq9cLGnt6WhRv6ZL7+QTw9oi+bWRDg1Fa7MjOsp9BRFdKwL39GuJRY86PhTeuLGzQw+c2oyWfjFQLal8qMgRFRGGHs0tvfdXN4pCfRkJNZrWre7xiIvzSMH6F4Y6nHf2Tdcg/r5eqBYWgseHtkVEmHfz/4PNR3f2wD+vKOvQeOcW18QWnZrUxtKnBuE2nafONnETKL98fQf0b9NA9OekzJf39hJ83Ww3R0csWHh2RDtMGhiLPdNdE400qVM1Vem7B/sAACYPaYMuTV2DIOcniNCoUo/m9XB7XHPMv7+3YBmtOl8lb/TZ2Ytj2ssaNSILa6BZp0Y4HhzUCv83omqdV0iICdtfHo7Db45BTOW9ExEWiiMzx2DxY/3RNqaW4Dmrh4dixoROtn/XjAhzafckvToC307qjS/u6YUPb++GBZMs98MDA1vhP2PaOxyrZB3Z9w/1EXz9zRs74+aelinaPVo4PsfEfo9AxWCHVGFtwFkr+5GdXCv0kBCTSyY36xd2lN38aHd6yxxpUdrb1bBWBJ6zW/DZrbllTwSjzVsNBBtfHObyWrfmdbH6uWtxbTvXPbpaR9dEjN1DY83zQ3FTz6bY+OIw9GutfcNxwaTe+OtJSzBWLTQELRs4Tm25s08LxEQ53o/W3yM8lCt4pFQLC0F0VARGdJSeemQllPnqnVu6okvTOrhLYp2DkkZhV5lTHwFg8NUN8cCAWLejgo8Mbi37fOTeF/f0wmi7UUGxulxspKd6tVBMn9DZNs3Mvl66pXINnwmWaWupc8a5To8UOa9QooKQEBPerrw/lRLrkLu/f0s0rh2J1Dnj8PjQtlg95VrF5w5GLerXwFsC0wNfGG0JNq7rEIOIsFBEhjsGGxFhoejVsr6ts8J5veihN8fggYGOo/r29+TCR/rBZDJhWPsYREWGY2KPZhjavqrOaxNtCT6s9+vbN1+DMZ0bY+erI7Dq2SFuf6euzYT3eLq3fyxCRRJnBMJ0XyUY7DiRM5eXXFm/gO0bR+HozLEY08UybeC+/i1xR2/xntSoyHDseHk4Xr+hs+xrrXxmiGQjUe40I6u+reo7ZDiZXtkD8/gwpvdUm1SjtXl94bnMbaJrYYBAr/dnd/fElqnXIa5lPfz4cF9ER0XAZDKJnkdtUZHhaNfI/dxuZ+/e0hUPDIjFrUzQoZpN/3ENksWsfGYIJg2MRZTdaN4PD/UF4NhrL+WGbvLTCT8/qj1m3NDZ1sCx3svX2DVw7acufXxnD5dzSDVqqIp1Kqszk1MUYv+vPq3qI06kkde8fg2kzhmH1DnjbN/32tXFA+O61S0de0I98GI97fbCFCQ/EfL6jV2w7eWqxAoNakWwfSPDnJuuEWw/PDGsLQ6/OQbX202JFHL9NU2wb8Yo/PvaNlj9nPsA0xpnPDSoleSIbmR4KA6/OQbHKrfZaBsThS/u7YUGtSJwtcTzxz6gT3hmsNtjjYrBjhMuHvaMtQd9QJuGDmmg37ixC+bc7H6vlJjakZIVu33fVfvGUbijt2vv7Pz7q+ZCO08BeGhQVY/KC6Pbo16NcNtagHl3dMe7t3Z1mKPds0U9HJk5Btd1kDfiRPJ5OhUDAISWW9SpHo6w0BD89tgADBRYPyZlwwtVjWR32WGfvq6taAPKRuZATUztSMy4oTPCFaSjJVd/2k1vbFavBiIq6x6pdRntG0dh+oTO2Pf6aCx8pB+ubReNfq3r44EBsfj87p54bXwn29oKsZ5PAKhwqmd6tBDuQQWAmMp7x/qO50e3x5f39sIfjw8QHNme4BRIRUWESTZqSDn7APPbB3rjp0f6Yd8M4T2yrFo0qIHXb+iMeJFpcoDlOTNtfCfBNWexdqO/ciYPNK1bHZMGxgr+jPt2+Y7zaI4Y62fSJroWVj4zBNteEs7mFxYagmOzxuLVcR1lX1+srTROJAhrG1PLoVOnQ2N5a32EplEGMrbsnbDp4Zk+rerj2Kyxkqkz3Ul6dQRqRYShw2sJHr1/eMeqBoPz13Rij6aYvykFgKWH5olhbVFeYUZmfpGtJ3dY5ZCxNZW21NqK1tE1UT08FCezCnCltNyjMgejp4dfjXmrj7k9ZmyXxlixP8PldecpG0ufGiSrJ/6qOpE4m1sk+DP7Eb0dr4xAQXEZcgpLkZVf7HDclFHtMWVUe+e3e8VdliZSrkmdSKReKFT0nv5tGth6VWdUjjA/NKgVzudZ7pcGNavhq/vicOOnm/HOzV2Re6UUs5YfQo8WdV2C7wWT+mD1ofOY8useh9fn3dG96j6tbESEmEy2aVZf3NML5W4aFzf1aIqpXqZRD3b2f93BV0dj7ZEsAI6BsbWzU86+bfdL7K1SvVooHhzUyu0xcrnba2zBpN5I2J+BmcsOSZ7HaA3YQNBeIqObN20me01FUl6vfGYInzNgsOOC94TnvP3SWhMNrH7uWhSXVqDTVbWx9cQF3PnVNpch3mdHtkNBcZlt7rSzKSPb4YFv/7H9WyizTmiIyaGhbDKZcOiNMbI3KB3f9SpMGdkOGblF6Dd7taz3kPuecquP7uwhGEBan9WTh7TGE0PbiqaEdRYVGQ6IBDv2GtaKQMNaEWjJNeIBaeHk6zYHtAAAIABJREFUftiRchGR4aGoX7MaLhaU2H4mlCbYnfo1qyG2QQ28Mq4TujWv67BHythrGqN+zWr475ZTttcWP9YfdaqH46aezXDhcglmLa9qfEbbJVGxNjftvwUhISaECHS1TRoYi283p+KD27vbXlv17BA8tTAZhzPyFf0+VMlk+bv2aFEXEz/bokuab2tG0svFZW6PmzWxi8OGxEKa1auBhwe3lhfsKColBZKnh18Ns9mMrzam2F7r3ryurOetEGt6c6NgsEN+x7oQD7D0ugqNGNWvWc2hAWCV/NpIZOYXo33jKByZOQbrj2ThQkEJWjaoiQ0vDENRmfsRGLn7sozq1AjPVO7ErXR9EEkLDw1xGzyHhZhkBzqA9p0YIZUXaM9pRpp7YXR7vLvyCADXnuomdarjxu6W/U2SXhmB0XM34FjmZSx7epDiKcrhoSFY94LwOqBm9SwNUPtpbPaNg0eGtHYIdhrYBzuVb5FzT06f0BnTJziuZ7y6URSa1IlksCPBuTfb/lYxmUzo3rwu/jOmAyZ0a4JBb6/1admqhYVg89Tr0O31v91GIHf3ban43EPaRaOrB4kOqFKAdnjXigjDK+M6Yf6mFFSYgRX/N1h0g9NRnRq5nY1yfNZYr9eM+RsGO+T3lIwY1atZzZbxLSIsFKPs5ku3kLmJl7PFj/VH7chwjPxwg+212IY1BbPqkLh5d3THtpMXHV47+MZo5BeVITIsFN3e+FvyHNZ0mB283GPg8aFt8Nm6E16dw161sBD8+HBfdFJp7wMSd3VMLeyeZtk7KSW7QPS4kBATrusYg2OZlyVT23uqQsaePYsfG+AwleX+AbF4ftEeyR57d9hDL01sypa11jaZTHhsqH4JaNTugBnduRHCQ0PwyV091T0xBaR2jaIcRnWGd4hB8ukcAEC8015PVmM6N0bCgQzDBToAgx0XbL6SM6Hh3BDOd1Tsxu5Nbb3uVjWqWTaXvWQ33cid0Z0b4+9nhyjOfuYstoGyKU1yeJIcgeSzdnqYTCbUrWFNYS8e7ADAi6M7YNKAVi6pv9UyqnNjvL/qqMP+GVZ7po2CGWa7slrc0quZ6PRbCh7WZBo3q3QvfHmvcAOWlHHO1mcU8x/oLXnMR3f2QIHE1MpAxWDHCRdykZg5N12DCwUlWLH/HO4foHx6AYlTsreJJ4GO8/faX0blWN3I98aNXdC4TiSGta/aa0lq1Dc0xKTpNNP2jaMc1vLYUzLNkrTnbxtER4SF4uAboxHpw02GmZ/A+MJCQ1BSVlE5sqnsAVMtLATVwqQ34Q5EDHaIZLqjjyXd9RPD2rr8rHvzuthdOURM0r66L85hvYPWnQzOe13U85OGaGuFi+aDWXRUhMv6lc5XBee0QcbI0pzrlAaV05uFktXopUY1/ykLWQR6B9Sfjw/E3weNORXNG/ymOQnw+1xz9r2qVIUdZsqMFNhXZHiHGKw+nKnJ9T65qwd++ec05iZaUl5zcz1jMJlMqBZm6ckkcue5Ue3RqmEtW7pvIiPqdFVtdArSTiB3GOyQbCM7NcJXIgvbiLzlPNqjpiZ1quOZEe1swQ6nqxrHrtdGolxGogAKLs4JCiLDQ3FXX9fNqInI+BjsOGMbiEgXYnuNELmjxz4pRIFIq84kIn/Hp4QTo2biIG3xriEi8h9KRm//enIg6lT3j3V8RKQ+BjtEFJRCQ0z6T3/idDrygKe7opOwrs3q6l0En+D0XWn8CxkTgx0nrAvE8U9DRrL+haE4ffGK3sUgUuytidcg8dBqvYtBRBQQGOyQbJztK45BcuBpVq8GmtXzfBd7NfC2IU/E1NZu7yDB60VFIDO/2KfXJPU5J20gVxz9MiYGO054m4sL49QJUXyGBIaP7+yh6SaTRERE5F8Y7DhhUE9kXBO6XaV3EYgCDp+LFCx4rxsTt1glItIJH6wUCAJx5Dojl+vxiMiCwY4Tpp4mT7DRSkTkP5h8hIisGOwQ+ZmYqAi9i0BEFNDKA3E4SmP8k1CwYrDjJBB66Ae1bah3EUhDtbm5HRH5kWHtY/QugmIVbNmTBwKgCUgeYLDjJBCCnZ4tgmMDNCKj47RZ8lQdH3aKjOjUCIlTrvXZ9dTQPUg2CiUiaQx2SLZACAT9zbD20Yrfw70QiEjKMyOu9un1IsICq7lQr2Y1vYvgd8zcLY+ClFe11wsvvIAOHTqga9eumDhxInJyctQql478v0XP6ipwhIUGVgOBjOWefi30LgIR+Yl6NRgASmGnrjF51RIbOXIk9u/fj71796Jdu3aYPXu2WuUiMoRZE7sofg93cCa1REVy/Rd5LxBrJFajrsZ0aax3EYh04VWwM2rUKISFWfYl7devH9LT01UplJ5YQZKaYqIiFR3fsBZ73kg9/jIjcvqETnoXwXD4qCKluEZQDv6NjEi1OTbffPMNxo4dq9bpdBMIt3kglDHYqPWZLH1qsEpnIvIfcS3r610EChDXNK2jynn8JdD3J1yzQ8EqTOqAESNGICMjw+X1WbNm4cYbb7T9d1hYGO6++27R88THxyM+Ph4AkJWV5Wl5CVyz44/U+kwa11E2EkQUCNjIUh+nu5JSDAApWEkGO4mJiW5/vmDBAixduhSrV692W/lOnjwZkydPBgDExcUpLKbv8PlBemM2tuChdX3DIIPUoMV9em+/lvh+2ymfXIuIgptksONOQkIC3nnnHaxfvx41atRQq0xEAYfPZ/IE7xsKFL7qg+F3gvTEYNuYvFqz8+STTyI/Px8jR45E9+7d8eijj6pVLt3c0TuwUrVWDw/VuwjkgdAQ1qgkz4e3d9O7CF7jYKX6An0EWOtRRzZaXQXSHcO2DanJq5Gd48ePq1UOv9FFpcWRvuLLNjMzuRhP6+iaOJlVoHcxyI1u3AmedMbAgXxNr3uOt7oxccfDABTgHXrkA+/fKm804K4+LfDaeKYF9meto2t5/N6W9WuqWBIKVpF+3stes5p/l4/EzWBaevIBBjseePn6DnoXgcitsFD5/VOjOjXSsCSkpzv7NPfZtf7V/SqfXYuAET783vZv3UDV8/VqWU/8hyp16bNTMDDc2z9W7yI4YJZDY2Kw44FWDT3vaVUbv5j+p35Ny8agtSKUzRJd/jT32CEgMly9atmX9YO/9/4bTbN6vkkKFBZiUv0+ev2Gzqqej+Tp24r7XVFwYrAjoE+s+wohPNSE1DnjZJ2rW3Nt59sz1PFf7j4bocXF9WqGAwA+u7uXRiVSz1PXtdW7CIZVPTwU3TWuNzx18q3r9S4CGUD9mtU48qKDRrUj0bg293Kj4MNgR8B3D/VBi/rq9Jo1q1tdlfNQ4PA0S5I1AUT7xlG4oZtvpgSxwUFKhLjJiNKuUZQPS0L+RmzwZ3Rn1+l2V7l5LqrVgcdJD8qN69pE7yIQaYLBjoDI8FBER0XoXQwKIILTPBQ+bPXaALJujXDZx0YpnJpHngmUhtqeaaNs/z1pYCz+fGKg4HGe3NnfPtAbd/cNrK0AglXnq2qjh8BoZGiICZ/c1VPwPWL3RKDc+0YUFkBbIgxsq+46MjI2BjsasTYKNW/ABk7dRD7y08N9FR0fFRmOY7PG2v7dobF0Dz1vO9+Yf3+c3kUQ9cU9PVHHLlA2mUyqTr8b1iEGsyZeo9r5yDNygo/hHWJUW9fDuiW4+Nvn7W/lIXUw2Alw/GL6B6Gpa958Nt6EyM09mIIZHiqvKmjZ0HJuzn7TjhlV0wvr1qima1nck3+HB/oGmMFkvMypTJ/d3RNRke5Hej353NW6U3jLKefN30ws/Xe4gsygapXFHes66q7NAmtPRfIOgx2N+Kqe9Wk2NkZWsjw/ur1q53LOnqN06F4qrbTg7DuBF2tFhOGPxwdgZMfGiq5P3vHV19ub6YnfP9QHX93nfgRKqj7k1CXfqC0RnADAjd2byj7fw4NaSx4j9tG29WL/KPKc/WyTj+7sof31ZDSGEqdcq2kZRto9B6NrWZYoiJWLdZExMdiRqY9do1NOgMGezOBivSd+e7Q/xl3TxOE1If+SaFB0q+x1mjrWcU+nyDD90vv2aFG1NwafB8by6d2O6yqa1xdfQN66oeNGpYOvjnZoTJD/aqRhJi7B0W2BOrBpZXKCu0TWY3lSt3ALBv1980Bvj9/bNsY18JX6SJU0sUZ0jFFYIjIaBjsinOeeD2jTAIOvbqhTafTRtVkd9I51s/kbCbJWwu4q67dv6erSG25feT80qBUSpwxxCDA8oVYbwNqQkbsGrW+r+nhkcCt1Lh5ktGy2CWVb+s8Y102Sm9QWD3baCDRM7A2+uqFLvSGnYbL4sQFY9Gh/6QNJM9tfHu5y/1k/O3fffSVdeyGVrQ6xuomBi7bs939Ts1O2r8obz6rltfGdcEsv+82VLb+z6P3HrjxDYrAjwrkB4GmdoMUAjy+zdvW02+k6lA8hSXI/mfDQENSpLp4FzWQyoW2M96l8pe4/rQYgm9WrgVfGddLm5OSx+gJrgO7o3dyjoFjsPd8/1BeLHh3g8JrUvH0TgF4t66G3xB5n5B2pr7uSkR+z2b+n/Phz2fS0YFIfn17P089BrWfTQ4NaITSAssyRNhjsiPA2BaNQ71Sj2uqns375etdeWWdju3i2zsL5N5g+gY1XMWUVymtmXz+MuzSt7fF72duqDbE/q96TYNXuULmmKRcD66VJHe+mrqn91dei55zTxuVrXr8GBrSRHoV5eJB+I/M39ZC/bkxtfNQZE4MdD8ipWIUWkj8yWHoxp1K3xTVH6pxxbo/pIrOhIdQgqVmtasi7QS3uPSRmz+kcAMDR8/mym4lqdzY1ldjANv5ez9MYu9zzEk8EPjB8R+r7L8UXn5VUsMxg2n84fxQ9mgtPpfX2I+N0If1YPzt3TZlQD7OoqaGWjEQaREow2BEhN0uVmFinRbxWr9/Q2dMiVZVDo4fEGzc6ls0MbQI0I2tWryrts/On5DwKp3ZnpNTtKTe9tLvTWH+/ZhKBFSm3/oWhtv/252ag3Pt25TNDBF9vWKsaNr44TMUSkZqGtIt2+HdEuHi9YU3c089uvUakm+PdeXBgK0zs0VSy00aI0LOZgz3iPG1DLJjkeRICtVmfZ7f2agYAqF/Tn9P0k94Y7MikVsfjdR38NyuI0LzWiDDeInJYc/dHRYaJjvw9Mri126wwcu4x3/TCu75m/Y1u7tkU3z/UB7fGNXN7DoUDQQTL5q560aIDpX3l5rTO9UrSqyNd9oLi7aEd+7+ttW5y932U2ykCWIKcQ2+MwcC23ifv6XRVbXx4e3eur/BjfVq5X1PXrpFr8hKtgs53b+mKfw9pbUuMoMY9SMbFlqwCiuYF+6hXidM//I/1oxf6bL6+v7dt2pH9z58b2Q6NFSwOtqa3tvfmjV3Qon4NNKodqdkDxmQyYfDV0S6/Ww2RDeWstr00XJsCkSLVVOi8UFLl7HhlOHa9OtLra5K6BlU2DJ8f1Q4/PNRX1nuc7x1rHVPd6buv1/S0ni3qSh9EDpzX5kk9NmpU82562ZjOruuHBWfRyDhXTO1IvHR9RyiIzQFwxC9YMdjxgJIAQ4tYxJfZ2EgZk8h/S3lq+NWK7qt/CSzgHNYhBhteHObQKLE/pdB9o9b9+c4tXd3+XMv9PYxIi2/4E8PaYMrIdq7X0rA6iYmKRJ0a+o1YBSuxEXnnj7pGtTAMkrmlQpM61THvju7o19o/M+a96JRBlf2A0tx99yd0vcrh356OuNl/Di0b1hA/0OE92n14LRtYlhhMGhiLq7xM3kGBg8GOxuwrk1Yi63j0NLR9tOju6XxW+D9/mKecOmccxjs9GEme1hK7yKv5HXxhdAfUFPmuK6FFcMSGqfqsHRDeNhxv6Fb13b6xe1O/qHOEcPqbfEK3xIJJvR3qG7mJjaQ8MCBWlfOopU71cKTOGYeJPZrhvdu66V0c8hEGOzIpfsA7ZTsJDzVheEf/22X8wYGtbAtQnX9Hjh8pp+RvJrcNMrqz8H3z3YN9sOzpQfKvJ9B01qpXn6OP8sjdV2ZCN+2CScE1WjI+PjYt/ZtgemGFX8sTb12PW+OaSx/ocAl5F1EjwL3+Gsu0KN6L3mlQsxqGtne/ntjT9N71ayrP4moyWda/KnqPzOOk7k92vBgTgx0f6dTE8z1OvCX15V0wqQ9uj2vutz12gaZ25ULz50a1d3uc3Dr1S5GU0UPaRaNJHeHMRdbPPCLM/VoauTjPWV/WaUlv/quLziVRz9PDr7b9dzWlE+9JUMPK7QFMpqr1Fd7sceRutESs0WhfV5igbadZzxb1KstCRhJiMuHXf/eXdaz1fvNkYI/pz4MHnzAyGTXaN5ksw9Vv39IVIQK1hVF/b62YYFnImzpnHO7q20K3ctg3OBrWUhbEMrDRX+3KXs2wEMcqWqvsiC3qy5tLr6YpI9shdc44TBnZDr8/PtDn1zeiFf832Pbf9WtWw5InBuLD27ureg2xBqJQteFJVRIZzg4avXj7J1MzeBDbvkP02io1VhgAGRODHT9Uz4cLeu2/2PyK+5YvMukxWA0c9tNEPritO6aO7YAuTbUfETabgRYNHIMd940edVuRTw+/2pammrxTy2lNVrfmdV2ypQH+l8WzfaMoW1r+l+z2I5s1Uf5Ipn/9RoFB7YBQaLTvhu7Kp+D6avmVfXmto6INozjDxYgY7GjFi0okTGJKR6gKD6rqlb1ndZkpyWfUbGB4On/aU/ZTjmRhr6rHTCYToqMi8Oi1bXRtlDpvguvM3xrMweidm7viqjqR+OeVEdgy9TrJ461fyyeGtsGIjjG4RWK/LOFzeBcKO982ISZg5bNDULeGpZFZW6X9pnh7irN+d6u2SVD3/Pf2a2n7b/tNYifL3KS8VUP3iVuEyH0mPjioleDr/ze8LXZPG4mYKGZoMyIGOyLcPciV1Au2B4OC2sTdd3bSwFj8+9o2GO7l5qSvjOuIHx7qq1rGFfIV7Z7gcS0t89+db9XUOePw2NA2ml2X/NPkIW2Y4crP3da7Oba8NBzRURG4yq5RKfYMsTYIo6Mi8PX9vVULLBwv4vhPsTtIjTvL+nvyLvWMGp1mz41sh/6tHZNh3N1PeAp3g1rykhUoCb6UBmpi97zJZLIF3GQ8DHY8IKt60Kj2nT6hM2pGhOGze3pix8ueb9TYrlGU7P0VSBt6PKDXPHetT6/37aTe+Po+4QQLFFiswTD5L1+MZoitabC+WuHUgA4LDcF7t3qW4pfrbrQhdpt4Evw8NfxqLJzcr/K88m/A5vWrV15T8SXVw/sraDDYkcmXX0g5D6yIsFDEeLhR42+P9kefVv65MVygalL5WQjNjxejZcPEem7nS7SOroXuzat2Gh/RSdt06MPax2h+DaMRanA8NrQN2sbUwkgfpa933hvj72eH4L8P9gHABqg/k/psrNkZQ3w0x8t6lVt6KZ8uR9rT86u86N8D8MU9vQQTIznr0aKu5DHeYrVmbN7vMEduWTYNPI/HrpU3V1VrqXPG6V0EQ3rn1q4Y06UxOjTWL8W4vTFdGuOuvi3w/+3dfVRU550H8O/lXQUGBAYQUJgXAWEGlDdfEhNQlKjVGDDS2kpeXLJrsyaxSWOTTaNWxeQke5I9SdvlmHS1J0d317QlW1IlVpNTXVzF1iRlk9Q10AOKBlGiSUVFnv1jZAIyDPNyZ+7Mne/nnJwT7gzPfXCeuff+npffs758Kv5y7gr+5eApa2rx174zHb88+lc8vTDLoRuNSzivxGn2ps7qEyJxYL1jo3KR4SH46lq/W3UZ3NfnO8WT8cujf4U+IXLElDZ+xL5rtKa0o6YQ/3miE1NuS0jxr98rwHgnOmps8cTDojvTmRiUj+72zjC5pqs6usdSXqoGSZoIVGiSbL7u1FKBIadMio7Auct9Tvy2a+ck/8ORHQeNddEdbTFvdIRlt96K3GS3zv+LB4qw0snN3Qa5mkpx6CJDsi86IhT3Tk/x+HnWzTMgMTocJRk2NgwcIjwkGNuWmxAfGY7ZhnjsqZ1lvaGlxo7Hj+7JHjXQ4cJe//Xhjxc4nMHNkYfbTUtz8OlPKmw+DPFZ0v+kTRyP9eVTRwTWC3OScKcxwamyRl0XNMr/D5Lz8hIabCkt3ws9/2oUFxmGfywz4K01t6ahOXDxb1x3B+7JtR2kOOLkj8vx7w7uoeMMSZKs964XKk2yl0/+za1g57nnnoPZbEZ+fj4WLFiAs2fPylUvv3P7fhhyK83S4oUqs0fPMfTG1L59MVYUpjHjkgeFubBnijk1Bv/zzHxohmTRe27JNDSuu0POqpEC5FgsrLGRXXHbchM040JHlO9I+wsKkkbse8JLQoAb4/N3th3beneBg+vDxoUF451H5+Bn3y0Y8Rrb6dgkSPjBgkwYtJbsZ7dvfv7Moiz8bNWMYcdyJmkwS2/pbBscAR5a3lhixoeNuZeSM9PBhxpMH12a6V4CJ1Ift57Qn3rqKXz00Uc4efIklixZgs2bN8tVL/8nQ7dnwZRYZMRPQM2ssUdYnlww1f0TklcNpv9OjHYsQ81oHr4jAzmT5M+q9/d36fH+k3fLXi7ZJ3cHw3dKJuPD5xfIVq6rMVlVQap13Q+pl6PNw157nJpo2XfJkbZmTo0Zsb8Q2TchzPLvdfuIbcWtEZvBaY61c/V211zGjJMvm1/79sX4ZHMFnlmUhSVm5/fmAYA3agqx/T6Ty+uZSb3cukJER3/TC/D1119zFOAWdxf/D/1XPOTgw2ZC1OgPzBoHL0j89JQxuGjY1yREhTu9izW5JssPN9V09nrhakYu8i9DAxTeU3zTlntzLRlZDbYzsir1uY0LC0btXNe3OdBGR6C62HbaawpsbneHPPvss9i1axc0Gg0OHTo06vvq6+tRX18PAOju7nb3tIqydyF4YHY6Ni7NQd3vPrH5urd7oF6oNKGqIA3P/Ppjr56XHOfook5vcXWN1zC+9Sf5tNZNCxESLOGrPveSCsjlo40LlK4Cucib1xJHzmSr/zPewb1WRvt9cl/shDA8Nt/JjaKd4InkEL9aOxst7Rex7d1PHXr/fz16Bz49d9nue3ibChxjTmObP38+cnNzR/zX0NAAANi6dSs6OjqwatUqvPbaa6OWU1tbi5aWFrS0tCAhwbmFkL7AXpCy++9mIlljGTZNmzh+1PcBlovMwpzhw8Ib7hme3GCwN726yLWEBEOtLJrMjQF91GBQwaxBgW1CeIhPje55ZKNJ8ipZOixGLdu2SRrLvikRoUFD3jvy3bbW18iD9zm1kgDMmBzr1KiPKVWDFS4mdSL1GXOY4cCBAw4VtGrVKixatAibNm1yu1K+5rkl07B61hR88BfbI1Kz9HEQQuDfHizCXAcy2mxelov9recRMz4UJ39s6UXd/rtveiviI8OYIjoAONNrmZ0cjU+67PdSycXV3uEdqwuxZleLzLUhX+Pp2PyFSpPPpHCnkUb7/LdXmrAgJxG/ONKOkx29loO3XeM23JNld8q103Wx0xgZtMvLme+9N0fkJsVYgmxjYqT3Tkp+x605VadOnYLRaBkKbWhoQFaW7fTL/u7hOzLGfI8kSbjbwQwgIbdGWtgPRYBjIzu/Xjsb1/oHPFqPkftUOPdYy81Dfcto6fBv52rw4qkHmpVFnHOvtP2Pz8XAGN//2z/+qIhQLMtPwS+OtNt8jysdeK6MeudMisYLlWbrQzA5ztY139bXfJbOko1tkcm9LTXkMFMXh1+tnY38VKYfp9G5Fexs2LABn332GYKCgjBlyhT8/Oc/l6teqjZWIgc5piA8uygbE2RcH1SWxVSOSooIDR4zXadcPDkFhkY3+H19cHa6LOXlptjP0MdPmUaT6UDCjNHiEIezsTlcG4upiZFIj5uApv89b/d9YSFBY7Z9co8xMcpu8OrtqdkzJjuWqvx2k8dYdkDq4dbT8Ntvvy1XPfyKQ99jB97kyetBVUEqYieEyVLW4adLnVpUSoHhlZX5XA8mo4jQYId6vzXjQlE5IxVvHmlz63xcKkauGPMbP+RJ193Rv6G/3/TEXdj27iejvk7uczejrqc+D09l+k2bOB6LTclo/LjLI+WT72ByehpTaix7PwKBs71x905P8UxFyK4Pn7es83M32Bnk7GOEHJufknoNbR3eHCXOTYnGHEMcfnRPttfOScP546VhcCNmP6w6OcGtTUUDlUOXbztv8sTl39Edp+0Z/LJzFMc7BjurfO3hcbbBMh87P41zoP3R92amAwCMWttTkV6tzsfb/zDb+rOvrdkh14UGW27plQXKdUQM22dH5jZi71oZHhKMt9bM5BQ2N8h1L+K1gXwNR3YU8M1DrnxlGrSWObT5m5vQ+7cbbpUVGswrlTf46ia887MT8WipAVHMZuSXFpuTsdg8+nS4ZfmWB2HfbH3kjtDgILRuWuiV9X2jPRgPzebINuafbN2bnPksfaz/jojBjhK+2V9llCuCQncI3phoEAMdGgsfaHyTnIlpbBmrk2b4yM7YdxVn2hHbnG/z0f47u/ywyuQCTmMjUkhkmOWhZJY+XuGaDCfHAwWfSYgC09DrxwN2Mgv644NxIFP9NZ2RtKpxZEdBtr5aZVlabKhQ535FNJxmfCjef/Jun9kPgg8fgcXdWzvbC9kSHxUOdAHvPTEXxsSxU1g7o3xaInYcbkNuSjT+fOYyn0+9wFenW8tF5X8e3cJgx0MSoyIAAHGRNtI/2/lyvflAkYdqRL4oPX6C0lXwCN4//JNBy13IyT2vrszH/tZzsgc6AFCii0P79sV4eu9H+POZy7KXH+jkjB233JsLXYI89zdv3E8YN6sbgx07dj5UjHhbwYoDamanIzE6AotMSTLXyjWJ0eE4f/ma0tUgIh9x+wPEZ1sqEMRuTnJT7IQwVBdP9ug5BB9Nfd53Z05RugrDRIaH4Ktr/UpXgxTCYMeOu6YmDPvZmSHz4CAJi83JNl8b3Icx2ouLwBvX3YmzvVe9dj62MMX6AAAMgUlEQVQi8i/hIY5l8OJjJskp0o2ECozN5eWr/5xyfM5Hni7D1Rs33S+I/BKDHRe4+8WLigjF5mU5KM3UylOhIWbr4/Dux+cQFjI890R8ZDj3zyFSkcNPl1r3VVGCNzeMJPWRJAkbvzUNdxgTxn4zkZs040OhwcgOZl7HAgODHYWsnpXukXL/+f58rC+/6vH0o0SkrNTY8bKU42ub2lLgeGBOhtJVIA/wx0uKP9aZHMfU0y4Y/FL44mLeiNBgl+uVEBUOXcIEbF2eK3OtiEgt+FBApE6B+NXmVMjAwO5/J9z+pfj12tno/dsNZSrjAaHBQTj4g7uVrgYpZNtyE17Y9xny0jRKV4W8yOXUsnxICEj82NXP1mfsTCeHPwYQHOFWNwY7boiKCOVO86QaxsQo7KgplKUs3jaIfMfxZ+ejj4uzyQVKxi0pMeNwpvcqdPGem0Xjh3EZuYDT2IiIiFQsISocaRPlWePlDY/PN2JelhZL8yYpXRVygVyDJJUFqQCA5JgIeQq0oSw7EQBQmD7RY+cg5XFkh4gogDk7fWPiBMveY+Eh7CsLZJ6c9ZMYHYE3uMG2T1Fyapon29pdUxPw+bZFCAriGI+a8W7lBE7pJLJv47emKV0FcpCra3U2L8vB5mU5mKWLk7lG5A/8cT0GOSYjbgJqZk1B/eoCpasCwHtTzBjoqB+DHRfwYk9kW/Q4rmHzF64uyI2KCMXqWemuJzYgIp8UFCRh07JcGLRRbpUj16XB1hXq0VIDUmPHyXMCChgMdog8bP6tOcFEvohBCxHJSe5ZMEMvUU8uzMThp8vkPQGpHtfsEHnY66um40sVpSgndWHKVXJGVUEqGk6eRcGUWKWrQl7EywT5MwY7RB4WHhIMbXSw0tUgGoYjOuSKO40JaN++WOlqkJfwMkFqwGlsRERERORTosIt/fGR4eyXJ/cw2CEi2UTf2mQ3PjJM4ZoQEZE33V+YBgBI1sizL84Dc9LxT4uzUTM7XZbyKHAxXHZCXpoGh//vArRRntvgisifzcvW4qUVeVhiTla6KkRE5EUPzknHg3Pky9QYGhyENXfqZCmLAhuDHSesL8/EEvMkZCa5l5bRluYfleFKX7/s5RJ5kyRJqLq16zX5tpdWmPHS/r9Aw3Th5GfMqTH4j5ZOZMRHKl0VGoLrAMlXMdhxQnCQhOzkaI+UnawZh2SNR4omIpX77w1lCA9xblZyWVYiyrKYFp38z6qSyZilj4M+gcGOv4jiuhtSEFsfEZGfmxTDTfYocEiSxEDHj7xRU+iRGTFEjmKwQ0REREQ2zZgc49bamXncWJsUxmCHiIiIfNIzi7JgTo1RuhoBS5Ik/GrtHKWrQeQWWVJPv/zyy5AkCRcuXJCjOCIiIiLUztVjpi5O6WoQkR9zO9jp6OhAU1MTJk+eLEd9iIiIiIiIZOF2sPPEE0/gxRdfZMpBIiIiIiLyKW6t2WloaEBKSgry8vLGfG99fT3q6+sBAN3d3e6cloiIiIiIaExjBjvz58/HuXPnRhzfunUrtm3bhqamJodOVFtbi9raWgBAYWGhk9UkIiIiIiJyzpjBzoEDB2we//jjj9HW1mYd1ens7MSMGTNw7NgxJCUlyVtLIiIiIiIiJ7k8jc1kMuGLL76w/pyeno6WlhbEx8fLUjEiIiIiIiJ3yJJ6moiIiIiIyNfItqloe3u7XEURERERERG5jSM7RERERESkSgx2iIiIiIhIlRjsEBERERGRKjHYISIiIiIiVWKwQ0REREREqiQJIYS3TxofH4/09HRvn9am7u5uJCQkKF0NUgm2J5IT2xPJie2J5MT2RHIarT21t7fjwoULbpWtSLDjSwoLC9HS0qJ0NUgl2J5ITmxPJCe2J5IT2xPJyZPtidPYiIiIiIhIlRjsEBERERGRKgVv3Lhxo9KVUFpBQYHSVSAVYXsiObE9kZzYnkhObE8kJ0+1p4Bfs0NEREREROrEaWxERERERKRKAR3s7Nu3D5mZmTAYDNi+fbvS1SEf8tBDD0Gr1SI3N9d67OLFiygvL4fRaER5eTkuXboEABBCYN26dTAYDDCbzfjjH/9o/Z2dO3fCaDTCaDRi586d1uMnTpyAyWSCwWDAunXrwAFW9ero6EBpaSmmTZuGnJwcvPrqqwDYnsh1fX19KC4uRl5eHnJycvD8888DANra2lBSUgKDwYCVK1fi+vXrAIBr165h5cqVMBgMKCkpQXt7u7Wsuro6GAwGZGZmYv/+/dbjvD8Glps3b2L69OlYsmQJALYlcl16ejpMJhPy8/NRWFgIwAfudyJA9ff3C51OJ06fPi2uXbsmzGazaG1tVbpa5CM++OADceLECZGTk2M99tRTT4m6ujohhBB1dXXihz/8oRBCiMbGRlFRUSEGBgZEc3OzKC4uFkII0dPTIzIyMkRPT4+4ePGiyMjIEBcvXhRCCFFUVCSam5vFwMCAqKioEO+++66X/0LylrNnz4oTJ04IIYS4fPmyMBqNorW1le2JXDYwMCCuXLkihBDi+vXrori4WDQ3N4sVK1aI3bt3CyGEeOSRR8RPf/pTIYQQr7/+unjkkUeEEELs3r1b3H///UIIIVpbW4XZbBZ9fX3i888/FzqdTvT39/P+GIBefvll8e1vf1ssXrxYCCHYlshlU6ZMEd3d3cOOKX2/C9iRnWPHjsFgMECn0yEsLAzV1dVoaGhQulrkI+bOnYuJEycOO9bQ0ICamhoAQE1NDX7zm99Yj69evRqSJGHmzJno7e1FV1cX9u/fj/LyckycOBGxsbEoLy/Hvn370NXVhcuXL2PmzJmQJAmrV6+2lkXqk5ycjBkzZgAAoqKikJ2djTNnzrA9kcskSUJkZCQA4MaNG7hx4wYkScLBgwdRVVUFYGSbGmxrVVVV+P3vfw8hBBoaGlBdXY3w8HBkZGTAYDDg2LFjvD8GmM7OTjQ2NmLNmjUALL3tbEskJ6XvdwEb7Jw5cwZpaWnWn1NTU3HmzBkFa0S+7vz580hOTgYAJCUl4fz58wBGb0v2jqempo44TurX3t6OP/3pTygpKWF7IrfcvHkT+fn50Gq1KC8vh16vR0xMDEJCQgAMbwdD205ISAg0Gg16enqcbmukTo8//jhefPFFBAVZHgl7enrYlshlkiRhwYIFKCgoQH19PQDln59CZPnLiAKMJEmQJEnpapAf+eqrr1BZWYlXXnkF0dHRw15jeyJnBQcH4+TJk+jt7cXy5cvx6aefKl0l8kO//e1vodVqUVBQgPfff1/p6pAKHD58GCkpKfjiiy9QXl6OrKysYa8rcb8L2JGdlJQUdHR0WH/u7OxESkqKgjUiX5eYmIiuri4AQFdXF7RaLYDR25K9452dnSOOk3rduHEDlZWVWLVqFe677z4AbE8kj5iYGJSWlqK5uRm9vb3o7+8HMLwdDG07/f39+PLLLxEXF+d0WyP1OXLkCN555x2kp6ejuroaBw8exGOPPca2RC4b/Hy1Wi2WL1+OY8eOKX6/C9hgp6ioCKdOnUJbWxuuX7+OPXv2YOnSpUpXi3zY0qVLrRlBdu7ciWXLllmP79q1C0IIHD16FBqNBsnJyVi4cCGamppw6dIlXLp0CU1NTVi4cCGSk5MRHR2No0ePQgiBXbt2Wcsi9RFC4OGHH0Z2djbWr19vPc72RK7q7u5Gb28vAODq1at47733kJ2djdLSUuzduxfAyDY12Nb27t2LsrIySJKEpUuXYs+ePbh27Rra2tpw6tQpFBcX8/4YQOrq6tDZ2Yn29nbs2bMHZWVleOutt9iWyCVff/01rly5Yv3/pqYm5ObmKn+/cz/vgv9qbGwURqNR6HQ6sWXLFqWrQz6kurpaJCUliZCQEJGSkiJ27NghLly4IMrKyoTBYBDz5s0TPT09QghLZqS1a9cKnU4ncnNzxfHjx63lvPHGG0Kv1wu9Xi/efPNN6/Hjx4+LnJwcodPpxPe//30xMDDg9b+RvOMPf/iDACBMJpPIy8sTeXl5orGxke2JXPbhhx+K/Px8YTKZRE5Ojti0aZMQQojTp0+LoqIiodfrRVVVlejr6xNCCHH16lVRVVUl9Hq9KCoqEqdPn7aWtWXLFqHT6cTUqVOHZTXi/THwHDp0yJqNjW2JXHH69GlhNpuF2WwW06ZNs37eSt/vJCG4IQMREREREalPwE5jIyIiIiIidWOwQ0REREREqsRgh4iIiIiIVInBDhERERERqRKDHSIiIiIiUiUGO0REREREpEoMdoiIiIiISJUY7BARERERkSr9P8xi4++6/rR1AAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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3qnbb79db775pqZNm6atW7dKkrZu3app06bpzTff1O23364777wzrCUjZLfddpsuvfRS/f73v9fvfvc7LVu2jOsNxnTgwAF9+9vf1iuvvKLXX39dqVRKTzzxBNcbFHXTTTdp27ZteR8Leo05evSo7r77bv3qV7/Sr3/9a919991u4BMKM0699NJLZsOGDe779957r7n33ntDXBGa2ZVXXmm2b99ulixZYg4ePGiMMebgwYNmyZIlxhhjtmzZYh5//HH3872fh/Fl3759Zt26deb55583GzduNOl02vT09JiRkRFjTP61Z8OGDeall14yxhgzMjJienp6TDqdDm3tCMfx48fN/PnzC373XG8wlv3795u+vj5z5MgRMzIyYjZu3Gi2bdvG9Qaj2rNnj1m+fLn7ftBrzOOPP262bNniftz/eY02bjMxBw4c0Jw5c9z3+/r6dODAgRBXhGa1d+9e7dy5U2vXrtU777yj008/XZI0a9YsvfPOO5J4PSHn85//vB544AHF45nL65EjRzR16lQ5jiMp/7Xhfd04jqPu7m4dOXIknIUjNHv27NGMGTP08Y9/XOedd54++clPamBggOsNxjR79mx98Ytf1Ny5c3X66aeru7tbq1ev5nqDsgW9xjTbtWfcBjFAOU6ePKlrr71W3/rWt9TV1ZX3d7FYTLFYLKSVoRk9/fTTmjlzZiRGU6J5JJNJvfrqq7r11lu1c+dOdXZ2FvRpcr2B37Fjx/TUU09pz549OnjwoAYGBgrKhYByRfEaM26DmNmzZ2vfvn3u+/v379fs2bNDXBGazcjIiK699lpt3rxZ11xzjSTptNNO09tvvy1JevvttzVz5kxJvJ6Q8eKLL+qnP/2p5s+fr+uvv14/+9nPdNttt+n48eNKJpOS8l8b3tdNMpnUu+++q56entDWj3D09fWpr69Pa9eulSRt2rRJr776KtcbjOm5557TggULNGPGDLW1temaa67Riy++yPUGZQt6jWm2a8+4DWLWrFmj3bt3a8+ePRoeHtYTTzyhK6+8MuxloUkYY3TzzTdr2bJl+sIXvuB+/Morr3SncTz66KO66qqr3I8/9thjMsZox44d6u7udlO0GD/uu+8+7d+/X3v37tUTTzyhdevW6Yc//KEuvPBCPfnkk5IKXzf29fTkk09q3bp1kbsThurNmjVLc+bM0RtvvCFJev7553X22WdzvcGY5s6dqx07dujUqVMyxrivG643KFfQa8wll1yi7du369ixYzp27Ji2b9+uSy65JLwfILRunCbwzDPPmMWLF5szzzzTfP3rXw97OWgiv/jFL4wkc84555hVq1aZVatWmWeeecYcPnzYrFu3zixatMhcdNFF5siRI8YYY9LptPnUpz5lzjzzTLNixQrzm9/8JuSfAGF74YUXzMaNG40xxrz11ltmzZo1ZuHChWbTpk1mcHDQGGPMe++9ZzZt2mQWLlxo1qxZY956660wl4wQ7dy506xevdqcc8455qqrrjJHjx7leoOSvvKVr5izzjrLLF++3Nx4441mcHCQ6w2Kuv76682sWbOM4zhm9uzZ5nvf+15F15itW7eahQsXmoULF5pHHnkkrB/HGGNMzBhjwguhAAAAACCYcVtOBgAAACCaCGIAAAAARApBDAAAAIBIIYgBAAAAECkEMQAAAAAihSAGAAAAQKQQxAAAAACIFIIYAAAAAJHy/wFD5jz7+FJ2FgAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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ESrV0aNHtX//fi1atEiffvqpJkyYIElqamrSp59+KonrCf2+/vWva8uWLfL7Y7fXM2fOaNSoUQoGg5IGXhv26yYYDKqhoUFnzpxxZ+FwzZEjRzR27Fh96Utf0vz58/Xwww/r8uXL3G+QVnNzs5588klNmTJFEyZMUENDgxYsWMD9BlnL9R5Tafeeqg1igGxcunRJd999t77//e9r5MiRA/7N5/PJ5/O5tDJUojfeeEPjxo3zxGhKVI5wOKx9+/bpkUce0f79+zV8+PCkPk3uN3A6d+6cduzYoSNHjujkyZO6fPlyUrkQkC0v3mOqNohpbm7WsWPHEp8fP35czc3NLq4Ilaavr09333231q9fr7vuukuSNH78eH3yySeSpE8++UTjxo2TxPWEmHfffVevv/66pk6dqnvvvVe//OUv9fjjj+v8+fMKh8OSBl4b9usmHA7rwoULamxsdG39cMekSZM0adIkLVq0SJK0bt067du3j/sN0nr77bd10003aezYsQqFQrrrrrv07rvvcr9B1nK9x1Tavadqg5iFCxequ7tbR44cUW9vr7Zv3641a9a4vSxUCGOMHnroIbW3t+uJJ55IfH3NmjWJaRzbtm3T2rVrE19/5ZVXZIzRnj171NDQkEjRono8//zzOn78uI4ePart27dr6dKl+tnPfqYlS5botddek5R83VjX02uvvaalS5d67p0wFK6pqUmTJ0/Wxx9/LEnavXu3br75Zu43SGvKlCnas2ePrly5ImNM4rrhfoNs5XqPWbVqlXbt2qVz587p3Llz2rVrl1atWuXeL+BaN04FePPNN820adNMS0uL+e53v+v2clBBfv3rXxtJZvbs2Wbu3Llm7ty55s033zSnT582S5cuNW1tbWbZsmXmzJkzxhhjotGo+epXv2paWlrMrFmzzO9+9zuXfwO47Z133jGrV682xhhz+PBhs3DhQtPa2mrWrVtnrl27Zowx5urVq2bdunWmtbXVLFy40Bw+fNjNJcNF+/fvNwsWLDCzZ882a9euNWfPnuV+g4y+/e1vmxkzZpiOjg5z//33m2vXrnG/waDuvfde09TUZILBoGlubjY/+clP8rrHbN261bS2tprW1lbz8ssvu/XrGGOM8RljjHshFAAAAADkpmrLyQAAAAB4E0EMAAAAAE8hiAEAAADgKQQxAAAAADyFIAYAAACApxDEAAAAAPAUghgAAAAAnkIQAwAAAMBT/j9gzLnnMwTLCgAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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cNtF04M+lCGN08mIiIiIiEGMTyrLIvj5NWcEfRhDHntiiIiIiIi1TxQqnE5GRERERAxiKFSYiSEiIiIiBjEUKpxORkRERERcElKosJyMiIiIiBjEUKgwiCEiIiIiBjEUKuyJISIiIiIGMRQqKoMYIiIiomGPQQyFCje7JCIiIiIGMRQqKl+xRERERMMel4QUKszEEBERERGDGAoVNvYTEREREYMYChWFmRgiIiKiYY9BDIUKMzFERERExCCGQoU9MURERETEIIZChdPJiIiIiIhLQgoVZmKIiIiIiEEMhQp7YoiIiIiIQQyFCqeTERERERGDGCIiIiIiChUGMUREREREFCoMYoiIiIiIKFQYxBARERERUagwiCEiIiIiolBhEENERERERKHCIIaIiIiIiEKloCDm61//OubOnYt58+Zh2bJlOHDggF/HRUREREREZKugIObWW2/FW2+9hT/96U9YuXIlvv3tb/t1XERERERERLYKCmLq6+uNf588eZK7qRMRERERUdFFC72Dr371q3j00UfR0NCAF154wY9jIiIiIiIiyipvJuaCCy7A7NmzM/576qmnAAB33XUX9u7di3Xr1uFHP/pR1vt54IEH0NXVha6uLnR3d/v3DIiIiIiIaFhRhBDCjzt67733sHz5cmzbti3vbbu6uvD666/78bA0TEy6/VkAwJ4NKwI+EiIiIiIaDLlihoLKyXbs2IHOzk4AwFNPPYXp06cXcndEWT18RRcOHO0L+jCIiIiIqAQUFMTcfvvtePfdd6GqKiZOnIj777/fr+MiSrN4enPQh0BEREREJaKgIOYXv/iFX8dBRERERETkSEEjlomIiIiIiAYbgxgiIiIiIgoVBjFERERERBQqDGKIiIiIiChUGMQQEREREVGoMIghIiIiIqJQYRBDREREREShwiCGiIiIiIhChUEMERERERGFCoMYIiIiIiIKFQYxREREREQUKgxiiIiIiIgoVBQhhBjsBx09ejQmTZo02A9rq7u7G2PGjAn6MCiE+NohL/i6IS/4uiEv+LohL0rpdbNnzx589NFHtl8LJIgpJV1dXXj99deDPgwKIb52yAu+bsgLvm7IC75uyIuwvG5YTkZERERERKHCIIaIiIiIiEIl8q1vfetbQR9E0BYsWBD0IVBI8bVDXvB1Q17wdUNe8HVDXoThdTPse2KIiIiIiChcWE5GREREREShMqyDmI0bN2LatGno6OjAhg0bgj4cKiF79+7F+eefj5kzZ2LWrFm47777AACHDx/G0qVL0dnZiaVLl+LIkSMAACEEvvSlL6GjowNz587F1q1bgzx8ClgikcCpp56KlStXAgB2796NRYsWoaOjA5dddhkGBgYAAP39/bjsssvQ0dGBRYsWYc+ePQEeNQXp6NGjWLt2LaZPn44ZM2bglVde4fmG8vr+97+PWbNmYfbs2fjUpz6Fvr4+nm/I1lVXXYWmpibMnj3b+JyXc8wjjzyCzs5OdHZ24pFHHhn052E2bIOYRCKB66+/Hs899xy2b9+On/3sZ9i+fXvQh0UlIhqN4nvf+x62b9+OLVu24Mc//jG2b9+ODRs2YMmSJdixYweWLFliBL/PPfccduzYgR07duCBBx7AtddeG/AzoCDdd999mDFjhvHxbbfdhptuugk7d+7EyJEj8dBDDwEAHnroIYwcORI7d+7ETTfdhNtuuy2oQ6aA3Xjjjbjooovwzjvv4M0338SMGTN4vqGc9u/fjx/+8Id4/fXXsW3bNiQSCTzxxBM835CtK664Ahs3bkz7nNtzzOHDh3HnnXfi1VdfxWuvvYY777zTCHwCIYapl19+WSxbtsz4+O677xZ33313gEdEpWzVqlVi06ZNYurUqeLAgQNCCCEOHDggpk6dKoQQYv369eLxxx83bm++HQ0ve/fuFYsXLxbPP/+8WLFihdA0TTQ2NopYLCaESD/3LFu2TLz88stCCCFisZhobGwUmqYFduwUjKNHj4pJkyZl/O55vqFc9u3bJ8aNGycOHTokYrGYWLFihdi4cSPPN5TV7t27xaxZs4yP3Z5jHn/8cbF+/Xrj89bbDbZhm4nZv38/xo8fb3w8btw47N+/P8AjolK1Z88evPHGG1i0aBE++OADtLa2AgBaWlrwwQcfAODriVK+/OUv495774Wq6qfXQ4cOYcSIEYhGowDSXxvm1000GkVDQwMOHToUzIFTYHbv3o0xY8bgyiuvxKmnnoovfOELOHnyJM83lFNbWxtuueUWTJgwAa2trWhoaMCCBQt4viHH3J5jSu3cM2yDGCInTpw4gUsvvRQ/+MEPUF9fn/Y1RVGgKEpAR0al6JlnnkFTU1MoRlNS6YjH49i6dSuuvfZavPHGG6ipqcno0+T5hqyOHDmCp556Crt378aBAwdw8uTJjHIhIqfCeI4ZtkFMW1sb9u7da3y8b98+tLW1BXhEVGpisRguvfRSrFu3DpdccgkAoLm5Ge+/taLNlwAAAplJREFU/z4A4P3330dTUxMAvp5I99JLL+Hpp5/GpEmTcPnll+O3v/0tbrzxRhw9ehTxeBxA+mvD/LqJx+M4duwYGhsbAzt+Csa4ceMwbtw4LFq0CACwdu1abN26lecbymnz5s2YPHkyxowZg7KyMlxyySV46aWXeL4hx9yeY0rt3DNsg5iFCxdix44d2L17NwYGBvDEE09g1apVQR8WlQghBK6++mrMmDEDN998s/H5VatWGdM4HnnkEaxevdr4/KOPPgohBLZs2YKGhgYjRUvDxz333IN9+/Zhz549eOKJJ7B48WI89thjOP/88/Hkk08CyHzdyNfTk08+icWLF4fuShgVrqWlBePHj8e7774LAHj++ecxc+ZMnm8opwkTJmDLli3o6emBEMJ43fB8Q065PcdceOGF2LRpE44cOYIjR45g06ZNuPDCC4N7AoF145SAZ599VnR2doopU6aI73znO0EfDpWQF198UQAQc+bMEaeccoo45ZRTxLPPPis++ugjsXjxYtHR0SGWLFkiDh06JIQQQtM0cd1114kpU6aI2bNniz/+8Y8BPwMK2gsvvCBWrFghhBBi165dYuHChaK9vV2sXbtW9PX1CSGE6O3tFWvXrhXt7e1i4cKFYteuXUEeMgXojTfeEAsWLBBz5swRq1evFocPH+b5hvL6xje+IaZNmyZmzZolPvOZz4i+vj6eb8jW5ZdfLlpaWkQ0GhVtbW3iwQcf9HSOeeihh0R7e7tob28XDz/8cFBPRwghhCKEEMGFUERERERERO4M23IyIiIiIiIKJwYxREREREQUKgxiiIiIiIgoVBjEEBERERFRqDCIISIiIiKiUGEQQ0REREREocIghoiIiIiIQoVBDBERERERhcr/B0xgkrWJmROdAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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iJ8dKgY/N1QMfm6oGPzcUDFq6XOzd+9evP/++77fiySIqSXd3d14+eWXoz4MqkP87FAx+LmhYvBzQ8Xg54aKUS+fU3qmewAABqxJREFUG5aTERERERFRXWEQQ0REREREdcW4/fbbb4/6IKK2dOnSqA+B6hQ/O1QMfm6oGPzcUDH4uaFi1MPnpuF7YoiIiIiIqL6wnIyIiIiIiOpKQwcxTz/9NGbPno2uri7cddddUR8O1ZB9+/ZhxYoVmDdvHubPn4977rkHAHD48GGsWbMGM2fOxJo1a3DkyBEAgBAC119/Pbq6unDyySdj586dUR4+RSydTmPJkiU477zzAAB79uzBsmXL0NXVhU2bNmFgYAAA0N/fj02bNqGrqwvLli3D3r17IzxqitLRo0dx0UUXYc6cOZg7dy5+85vf8HxDgb797W9j/vz5WLBgAT7zmc+gr6+P5xvy9bnPfQ4dHR1YsGCB/bVizjH3338/Zs6ciZkzZ+L++++v+vNQNWwQk06ncc011+Cpp57Crl278LOf/Qy7du2K+rCoRpimibvvvhu7du3CSy+9hB/84AfYtWsX7rrrLqxatQq7d+/GqlWr7OD3qaeewu7du7F7925s374dW7dujfgZUJTuuecezJ071/77rbfeiptuuglvvfUWRo0ahXvvvRcAcO+992LUqFF46623cNNNN+HWW2+N6pApYjfccAPOOeccvPHGG3j11Vcxd+5cnm8orwMHDuC73/0uXn75Zbz++utIp9N4+OGHeb4hX5dddhmefvpp19cKPcccPnwY27Ztw29/+1v87ne/w7Zt2+zAJxKiQb344oti7dq19t/vvPNOceedd0Z4RFTLNmzYIJ555hkxa9YscfDgQSGEEAcPHhSzZs0SQgixZcsW8dBDD9k/r/4cNZZ9+/aJlStXimeffVasX79eWJYl2tvbRTKZFEK4zz1r164VL774ohBCiGQyKdrb24VlWZEdO0Xj6NGjYtq0aYPee55vKJ/9+/eLyZMni0OHDolkMinWr18vnn76aZ5vKKc9e/aI+fPn238v9Bzz0EMPiS1btthf9/5ctTVsJubAgQOYMmWK/ffJkyfjwIEDER4R1aq9e/filVdewbJly/Dee+9hwoQJAIDx48fjvffeA8DPEzluvPFGfOtb34KuZ06vhw4dwsiRI2GaJgD3Z0P93Jimiba2Nhw6dCiaA6fI7NmzB2PHjsXll1+OJUuW4Morr8Tx48d5vqG8Jk2ahC984QuYOnUqJkyYgLa2NixdupTnGwqt0HNMrZ17GjaIIQrjo48+woUXXojvfOc7GDFihOt7mqZB07SIjoxq0RNPPIGOjo66GE1JtSOVSmHnzp3YunUrXnnlFQwbNmxQnybPN+R15MgRPP7449izZw8OHjyI48ePDyoXIgqrHs8xDRvETJo0Cfv27bP/vn//fkyaNCnCI6Jak0wmceGFF2Lz5s244IILAADjxo3DO++8AwB455130NHRAYCfJ8p44YUX8POf/xzTpk3DJZdcgueeew433HADjh49ilQqBcD92VA/N6lUCh988AHa29sjO36KxuTJkzF58mQsW7YMAHDRRRdh586dPN9QXjt27MD06dMxduxYxGIxXHDBBXjhhRd4vqHQCj3H1Nq5p2GDmFNPPRW7d+/Gnj17MDAwgIcffhgbNmyI+rCoRgghcMUVV2Du3Lm4+eab7a9v2LDBnsZx//33Y+PGjfbXH3jgAQgh8NJLL6Gtrc1O0VLj+OY3v4n9+/dj7969ePjhh7Fy5Uo8+OCDWLFiBR555BEAgz838vP0yCOPYOXKlXV3JYxKN378eEyZMgVvvvkmAODZZ5/FvHnzeL6hvKZOnYqXXnoJJ06cgBDC/tzwfENhFXqOWbduHZ555hkcOXIER44cwTPPPIN169ZF9wQi68apAU8++aSYOXOmmDFjhvjGN74R9eFQDfnVr34lAIiFCxeKRYsWiUWLFoknn3xSvP/++2LlypWiq6tLrFq1Shw6dEgIIYRlWeLqq68WM2bMEAsWLBC///3vI34GFLXnn39erF+/XgghxNtvvy1OPfVU0dnZKS666CLR19cnhBCit7dXXHTRRaKzs1Oceuqp4u23347ykClCr7zyili6dKlYuHCh2Lhxozh8+DDPNxToq1/9qpg9e7aYP3++uPTSS0VfXx/PN+TrkksuEePHjxemaYpJkyaJH//4x0WdY+69917R2dkpOjs7xX333RfV0xFCCKEJIUR0IRQREREREVFhGracjIiIiIiI6hODGCIiIiIiqisMYoiIiIiIqK4wiCEiIiIiorrCIIaIiIiIiOoKgxgiIiIiIqorDGKIiIiIiKiuMIghIiIiIqK68v8BJlzn6VmvQggAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "lock_ins = np.int32(np.arange(0.1, 1, 0.2) * 48000) + 500\n", "lock_span = 500\n", "\n", "waveform = np.fromfile(dumps / 'waveform.f32', dtype = 'float32')\n", "plt.figure(figsize = (14, 6), facecolor = 'w')\n", "plt.plot(waveform)\n", "\n", "for lock in lock_ins:\n", " plt.figure(figsize = (14, 6), facecolor = 'w')\n", " plt.plot(waveform[lock-lock_span:lock+lock_span])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Clock recovery" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "lock_ins = np.int32(np.arange(0.1, 1, 0.2) * 9600) + 100\n", "lock_span = 100" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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rkoNoaqzoadzvGIqslxqrCEiIiIiXtqwL5cSeznlFpTay9mwLzfYQ6rX7Nmzyc7O5sCBAyxYsIARI0bUCLoATpw4QXl5eeX2t912GwDnn38+a9aswW63U1paypo1a0hLS8Nms3H11Vfz4YcfAvDBBx/Qp0/96+V6lfGaOHEiEydOrHV/ly5dWLZsGQApKSl8/vnn3hym6ame8TqdC5EtIaql6+0dnQ2jPCs13FMUTSqwJ/wCUhs2UhERERERALJS2hMVEUapvZzIiDCyUlxMlQkBDz30EJmZmUyYMIEPP/yQBx98EJvNxtChQ3n66acBmDRpEqtWraJfv37YbDbGjRvH1VdfDcCjjz7KD3/4Q+655x46duzIP//5z3qPabMczegbodjYWIqKioI9DN9793ew6SX43VFYOBO+XQ/3fOF6+xUPwpZX4beH3T7E5oN53P7Ch8ywFjLXdj0vzri8UaSCRURERCR0bT6Yx4Z9uWSltG8055ahEjM00baBjVyLtlB6GuwlFYsn19N+8tJfQO/ai73VZcO+XE7Zo3jMmkK4zfzcWP5ziIiIiEhoGtw1XueUDaTAKxhi2prbs6dMV8O4TnVv36pTzbbybmhKqWARERERkVCnwCsYWlQEXmdOmYxXYrrPDzG4azzzZmQ1ulSwiIiIiEhzpMArGKpnvIpOVLV99zGlgkVEREREGgev2slLAzkyXt8fgrJi12t4iYiIiIhIk6DAKxgcGa/cveY2tp7mGiIiIiIiEtIUeAWDI+OVu8fc1tfVUEREREREQpoCr2BwZLxO7Da3yniJiIiIiDRpCryCITwSImNVaigiIiIi0kwo8AqWmLZQ/L35u0oNRURERESaNAVeweKY5xUZC1EtgzsWERERERHxKwVeweKY5xXrnzW8RERERESk8VDgFSyOjJfW8BIRERERafIUeAWLI+Ol+V0iIiIiIk2eAq9gqcx4KfASEREREWnqFHgFS4wCLxERERGR5kKBV7C0UKmhiIiIiEhzocArWJTxEhERERFpNhR4BYu6GoqIiIiINBsKvILl/Itg0C1w3kXBHomIiIiIiPiZzbIsK9iDcCU2NpaioqJgD0NERERERBqpUIkZlPESERERERHxMwVeIiIiIiIifqbAS0RERERExM8UeImIiIiIiPiZAi8RERERERE/U+AlIiIiIiLiZwq8RERE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hGAPK+RZlsWPf/xj0tLS+NWvflV5f/Ua4LfffrtGlyLxTFFREQUFBZV/f++990hPT2fChAm88sorALzyyitcc801wRxmk3DuVVW9j/3D1Xt3woQJvPrqq1iWxYYNG2jTpk1l+Yt4ZsWKFTz22GMsXryYli1bVt5//PhxysrKANi3bx+7d+8mJSUlWMMMaa4+HyZMmMCCBQsoLi5m//797N69myFDhgRrmCFv5cqV9O7dm+Tk5Mr79D5uGFfnbPpMboCgtvYIEUuXLrV69OhhpaSkWH/+85+DPZwmYe3atRZg9evXz+rfv7/Vv39/a+nSpdbNN99spaenW/369bOuvvpq68iRI8Eeasjau3evlZGRYWVkZFh9+vSpfO+eOHHCGjFihJWammqNHDnSys3NDfJIQ1thYaHVrl0769SpU5X36X3svSlTplidOnWyIiIirKSkJOuFF15w+d4tLy+3fvazn1kpKSlWenq69dlnnwV59KHB2WvcvXt3Kzk5ufJz+Sc/+YllWZb15ptvWn369LH69+9vDRw40Fq8eHGQRx8anL3GdX0+/PnPf7ZSUlKsnj17WsuWLQviyEOHs9fYsixr+vTp1jPPPFNjW72PG8bVOZs+kz1nsyzLCnbwJyIiIiIi0pSp1FBERERERMTPFHiJiIiIiIj4mQIvERERERERP1PgJSIiIiIi4mcKvERERERERPxMgZeIiIiIiIifKfASERERERHxMwVeIiIiIiIifvb/R7lHgBgITmoAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA14AAAFpCAYAAACMOPnOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nOzdeXxU1f3/8ddkYckKAQJhwiKEXRBZFDfEhUXUIFoVsUWrNspXi639ttpFvrXfb/uzi121talW0OKKVpQCoi2oqIAEEFmEIBCTEAgJIQmBkG1+f5xM9oQks907834+HnlMMnPn3jNr7ud8zvkch8vlciEiIiIiIiI+ExboBoiIiIiIiAQ7BV4iIiIiIiI+psBLRERERETExxR4iYiIiIiI+JgCLxERERERER9T4CUiIiIiIuJjHgde2dnZXHHFFYwePZoxY8bwhz/8odk2LpeLRYsWkZKSwrhx49i6daunhxUREREREbGNCI93EBHBE088wYQJEygtLWXixIlMnz6d0aNH122zevVqMjMzyczMZNOmTSxcuJBNmzZ5emgRERERERFb8DjjlZSUxIQJEwCIjY1l1KhR5ObmNtpmxYoVLFiwAIfDwZQpUzhx4gR5eXmeHlpERERERMQWvDrH69ChQ2zbto0LL7yw0fW5ubkMGDCg7u/k5ORmwZmIiIiIiEiw8nioodvJkye56aab+P3vf09cXFyn95Oenk56ejoAGRkZREVFeauJIiIiIiISZE6fPk1NTU2gm3FWXgm8Kisruemmm7j99tu58cYbm93udDrJzs6u+zsnJwen09nivtLS0khLSwMgOjqasrIybzRRRERERESCUHR0dKCb0C4eDzV0uVzcfffdjBo1ioceeqjFbVJTU3n++edxuVxs3LiR+Ph4kpKSPD20iIiIiIiILXic8froo4944YUXGDt2LOPHjwfgF7/4BV999RUA9913H7Nnz2bVqlWkpKQQFRXFc8895+lhRUREREREbMPhcrlcgW5EazTUUERERERE2mKXmMGrVQ1FRERERESkOQVeIiIiIiIiPqbAS0RERERExMcUeImIiIiIiPiYAi8REREREREfU+BlERlZRTy1bj8ZWUWBboqIiIiIiHiZx+t4iecysoq4/ZmNVFTV0CUijGX3TGHioJ6BbpaIiIiIiHiJ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+vvf/37FeofDIYfDYVF00aOurk5r1qzR9773PUniPA4Dzl1zLV68WE6nU7Nnz5bk/8b73//+tz755BP99re/1axZs1RdXW1xlPbE9SF8Xn/99Su+EOM8Ds4362yX45rcOiReLXC5XDp69Gjg97KyMrlcLgsjih719fW6++67NXv2bH33u9+VJPXu3VuxsbGKiYnRD3/4Q7pZBOnSuZqUlKRp06Zpx44d6t27d6DJ//jx40pKSrIyxKiwfv16jRw5Ur1795bEeWyW5s5drtOh9eqrr2rt2rVasWJFoCLVuXNnJSYmSpKys7M1aNAgffHFF1aGaVvNXR84j0PL5/Np1apVmj59emAZ53H7NVdn45rcNiReLRg1apT279+vQ4cOqa6uTitXrlR+fr7VYdmeYRh64IEHlJqaqkcffTSw/PI+wKtXr75iliK0TU1Njc6cORP4+Z133lF6erry8/P12muvSZJee+01TZ061cowo8I3v1XlPDZHc+dufn6+/vSnP8kwDG3fvl09evQIdH9B25SUlGjJkiVas2aNunXrFlheUVGhhoYGSVJpaan2798vt9ttVZi21tz1IT8/XytXrtSFCxd06NAh7d+/XzfddJNVYdrexo0bNXToUCUnJweWcR63T3N1Nq7J7WDp1B42UVxcbAwePNhwu93GM888Y3U4UWHbtm2GJGP48OFGZmamkZmZaRQXFxv33XefkZ6ebgwfPtz4zne+Yxw7dszqUG3r4MGDRkZGhpGRkWEMGzYscO5WVlYa48ePNzwej3H77bcbXq/X4kjt7ezZs0ZCQoJRVVUVWMZ5HLwZM2YYffr0MZxOp+FyuYyXX3652XO3sbHReOihhwy3222kp6cbH3/8scXR20NTZTxo0CAjOTk5cF1+8MEHDcMwjDfffNMYNmyYkZmZaYwYMcJYs2aNxdHbQ1NlfK3rwzPPPGO43W4jJSXFWLdunYWR20dTZWwYhjFnzhzj97///RXbch63T3N1Nq7JbecwDMOwOvkDAAAAgGhGV0MAAAAAMBmJFwAAAACYjMQLAAAAAExG4gUAAAAAJiPxAgAAAACTkXgBAAAAgMlIvAAAAADAZCReAAAAAGCy/w9tmRs5ge9gWgAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "clock_recovery_out = np.fromfile(dumps / 'clock_recovery_out.f32', dtype = 'float32')\n", "clock_recovery_T_avg = np.fromfile(dumps / 'clock_recovery_T_avg.f32', dtype = 'float32')\n", "fig, ax = plt.subplots(figsize = (14, 6), facecolor = 'w')\n", "ax2 = ax.twinx()\n", "ax2.plot(clock_recovery_T_avg, color = 'C1')\n", "#ax2.set_ylim((4.9,5.1))\n", "ax.plot((clock_recovery_out[1:] * clock_recovery_out[:-1].conj()).real, '.', color = 'C0')\n", "ax.set_ylim((-2, 2))\n", "\n", "for lock in lock_ins:\n", " fig, ax = plt.subplots(figsize = (14, 6), facecolor = 'w')\n", " ax2 = ax.twinx()\n", " ax2.plot(clock_recovery_T_avg[lock-lock_span:lock+lock_span], color = 'C1')\n", " #ax2.set_ylim((4.9,5.1))\n", " ax.plot((clock_recovery_out[1:] * clock_recovery_out[:-1].conj()).real[lock-lock_span:lock+lock_span], '.', color = 'C0')\n", " ax.set_ylim((-2, 2))" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.9" } }, "nbformat": 4, "nbformat_minor": 2 } gr-satellites-4.4.0/tests/TED gain.ipynb000066400000000000000000000644441414055407700200410ustar00rootroot00000000000000{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import scipy.signal" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "def gain(sps):\n", " # Define some constants\n", " N_bits = 30000 # Number of bits used for timing error analysis\n", " baud_rate = 9600\n", " N_syms = N_bits # Number of symbols used for timing error analysis\n", " tea_sps = 100 # samples/symbol used for timing error analysis\n", " tea_Fs = tea_sps * baud_rate # sample rate used for timing error analysis\n", " a_sps = sps # actual samples per symbol used in application\n", " a_Fs = a_sps * baud_rate # actual sample rate used in application\n", "\n", " # Create rectangular pulse filter\n", " pf_taps = 1/tea_sps * np.ones(tea_sps)\n", " pf_len = pf_taps.size\n", " pf_delay = pf_len/2\n", "\n", " # Generate some bits\n", " bits = np.random.randint(0, 2, N_bits)\n", "\n", " # Convert the bits to NRZ symbols in [-1, 1]\n", " symbols = 2*bits-1;\n", "\n", " # Convert symbols to baseband pulses\n", " x = np.zeros((N_syms * tea_sps))\n", " x[::tea_sps] = tea_sps * symbols\n", " baseband = scipy.signal.lfilter(pf_taps, 1, x)\n", "\n", " # Create rectangular matched filter,\n", " # that's a little too long (7 sps vs 6.667 sps), to introduce more ISI\n", " #isi_sps = round((tea_sps/a_sps * 7) - tea_sps) # Play with isi samples to see S-curve effects\n", " isi_sps = 0\n", " if isi_sps % 2 != 0:\n", " isi_sps = isi_sps + 1\n", "\n", " mf_taps = 1/(tea_sps+isi_sps) * np.ones(tea_sps+isi_sps)\n", " mf_len = mf_taps.size\n", " mf_delay = mf_len/2\n", "\n", " # Matched filter the received baseband pulses\n", " mf_baseband = scipy.signal.lfilter(mf_taps, 1, baseband);\n", " mf_baseband = mf_baseband * 1.0 # Play with amplitude to see S-curve effects\n", "\n", "\n", " # Symbol centers are now at indices n*tea_sps + isi_sps/2 (I think!)\n", " # Symbol clock period is tea_sps samples\n", " # Symbol peaks are perfectly at +/-1.0\n", "\n", " # Timing offset granularity is in 1/tea_sps-th of a symbol\n", " tau = np.arange(-tea_sps//2+2, tea_sps//2)\n", " tau_norm = tau/tea_sps*a_sps\n", "\n", " # M&M TED. Contellation points at -1.0 and +1.0.\n", " # Gardener TED.\n", " # Perfect estimate of symbol clock period.\n", " # No external noise.\n", " mm_ted_output = np.zeros((N_syms, tau.size));\n", " ga_ted_output = np.zeros((N_syms, tau.size));\n", " # For each known symbol peak set (M&M needs prev and current symbol)\n", " for i in range(1, N_syms-1):\n", " # Cycle through all the timing offsets around this symbol\n", " # using a perfect symbol clock period estimate\n", " opt_prev_idx = (i-1)*tea_sps + isi_sps//2;\n", " opt_curr_idx = i*tea_sps + isi_sps//2;\n", " for j, t in enumerate(tau):\n", " prev_soft_sym = mf_baseband[opt_prev_idx - t];\n", " mid_soft_samp = mf_baseband[(opt_curr_idx+opt_prev_idx)//2 - t];\n", " curr_soft_sym = mf_baseband[opt_curr_idx - t];\n", " prev_decision = 1 if prev_soft_sym >= 0 else -1\n", " curr_decision = 1 if curr_soft_sym >= 0 else -1\n", " mm_ted_output[i,j] = prev_decision * curr_soft_sym - curr_decision * prev_soft_sym\n", " ga_ted_output[i,j] = (prev_soft_sym - curr_soft_sym) * mid_soft_samp\n", " \n", " mean_mm_ted_output = np.average(mm_ted_output, axis = 0)\n", " mean_ga_ted_output = np.average(ga_ted_output, axis = 0)\n", "\n", " # Plot the S-Curves\n", " #plt.figure()\n", " ##plt.plot()\n", " ##plt.plot(tau_norm, mean_mm_ted_output)\n", " ##plt.plot(tau_norm, mean_ga_ted_output)\n", " #title('S-Curve, 6.667 Samples/Symbol, Rectangular Pulses, Imperfect MF, E_s/N_0 = \\infty');\n", " #xlabel('Timing Error from Symbol Center, \\tau_\\epsilon (samples)');\n", " #ylabel('Expected Value of TED Output, E(e[n] | \\tau_\\epsilon)');\n", " #grid on;\n", "\n", " # Plot the TED gains\n", " ##plt.figure()\n", " tau_diff = tau[:-1]+0.5;\n", " tau_diff_norm = tau_diff/tea_sps*a_sps;\n", " diff_mm_ted_output = np.diff(mean_mm_ted_output)/(a_sps/tea_sps);\n", " diff_ga_ted_output = np.diff(mean_ga_ted_output)/(a_sps/tea_sps);\n", " ##plt.plot(tau_diff_norm, diff_mm_ted_output)#, '- .b;M and M TED;', ...\n", " ##plt.plot(tau_diff_norm, diff_ga_ted_output)#, '- +r;Gardner TED;');\n", " #title('TED Gain, 6.667 Samples/Symbol, Rectangular Pulses, Imperfect MF, E_s/N_0 = \\infty');\n", " #xlabel('Timing Error from Symbol Center, \\tau_\\epsilon (samples)');\n", " #ylabel('Timing Error Detector Gain, Slope of E(e[n] | \\tau_\\epsilon), (sample^{-1})');\n", " #grid on;\n", "\n", " # Print out the central TED gains\n", " k = diff_mm_ted_output.size\n", " mm_ted_gain = np.average(diff_mm_ted_output[(k-1)//2:(k-1)//2+2])\n", " k = diff_ga_ted_output.size\n", " ga_ted_gain = np.average(diff_ga_ted_output[(k-1)//2:(k-1)//2+2])\n", " \n", " return (mm_ted_gain*sps, ga_ted_gain*sps)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "sps = np.arange(2,10.25,0.25)\n", "gains = [gain(s) for s in sps]" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(sps, np.array([g[0] for g in gains]))\n", "plt.plot(sps, np.array([g[1] for g in gains]))\n", "plt.title('TED gain')\n", "plt.ylabel('TED gain (1/symbol)')\n", "plt.xlabel('Samples per symbol')\n", "plt.legend(['M&M TED', 'Gardner TED'])" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.4733694343435606" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.average(np.array([g[1] for g in gains]))" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.9" } }, "nbformat": 4, "nbformat_minor": 2 } gr-satellites-4.4.0/tests/ber.py000077500000000000000000000150071414055407700165770ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # # Copyright 2020 Daniel Estevez . # # This is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # This software is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this software; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. import numpy as np import matplotlib.pyplot as plt import scipy.signal import scipy.special from gnuradio import gr, digital, analog, blocks, fft, channels from gnuradio.fft import window from satellites.components.demodulators import bpsk_demodulator, fsk_demodulator RAND_SEED = 42 class BERSim(gr.top_block): def __init__(self, ber_block, ncorrelations, lfsr_bits = 16): gr.top_block.__init__(self) prn_len = 2**lfsr_bits prn = np.concatenate((scipy.signal.max_len_seq(lfsr_bits)[0], [1])) prn_fft_conj = np.conjugate(np.fft.fft(2*prn-1)) self.source = blocks.vector_source_b(prn, True, 1, []) self.ber_block = ber_block self.char2float = blocks.char_to_float(1, 0.5) self.add_const = blocks.add_const_ff(-1.0) self.source_vector = blocks.stream_to_vector(gr.sizeof_float, prn_len) self.fft = fft.fft_vfc(prn_len, True, window.rectangular(prn_len), 1) self.prn_fft_source = blocks.vector_source_c(prn_fft_conj, True, prn_len, []) self.multiply_ffts = blocks.multiply_vcc(prn_len) self.ifft = fft.fft_vcc(prn_len, False, np.ones(prn_len)/prn_len**2, False, 1) self.corr_mag = blocks.complex_to_mag(prn_len) self.max_corr = blocks.max_ff(prn_len, 1) self.multiply_const = blocks.multiply_const_ff(-0.5) self.add_const2 = blocks.add_const_ff(0.5) self.head = blocks.head(gr.sizeof_float, ncorrelations) self.sink = blocks.vector_sink_f() self.connect(self.source, self.ber_block, self.char2float, self.add_const, self.source_vector, self.fft, (self.multiply_ffts,0), self.ifft, self.corr_mag, self.max_corr, self.multiply_const, self.add_const2, self.head, self.sink) self.connect(self.prn_fft_source, (self.multiply_ffts,1)) class BPSK(gr.hier_block2): def __init__(self, ebn0, nbits): gr.hier_block2.__init__(self, 'BPSK', gr.io_signature(1, 1, gr.sizeof_char), gr.io_signature(1, 1, gr.sizeof_char)) samp_rate = 48e3 sps = 5 self.head = blocks.head(gr.sizeof_char, nbits) self.pack = blocks.pack_k_bits_bb(8) self.bpsk_constellation = digital.constellation_bpsk().base() self.modulator = digital.generic_mod( constellation = self.bpsk_constellation, differential = False, samples_per_symbol = sps, pre_diff_code = True, excess_bw = 0.35, verbose = False, log = False) spb = sps self.channel = channels.channel_model(np.sqrt(spb)/10**(ebn0/20), 0, 1.0, [1], RAND_SEED, False) self.demod = bpsk_demodulator(samp_rate/sps, samp_rate, iq = True) self.slice = digital.binary_slicer_fb() self.connect(self, self.head, self.pack, self.modulator, self.channel, self.demod, self.slice, self) class FSK(gr.hier_block2): def __init__(self, ebn0, nbits): gr.hier_block2.__init__(self, 'FSK', gr.io_signature(1, 1, gr.sizeof_char), gr.io_signature(1, 1, gr.sizeof_char)) samp_rate = 48e3 sps = 5 deviation = 5000 bt = 1.0 self.head = blocks.head(gr.sizeof_char, nbits) self.pack = blocks.pack_k_bits_bb(8) self.modulator = digital.gfsk_mod( samples_per_symbol = sps, sensitivity = 2*np.pi*deviation/samp_rate, bt = bt, verbose = False, log = False) spb = sps self.channel = channels.channel_model(np.sqrt(spb)/10**(ebn0/20), 0, 1.0, [1], RAND_SEED, False) self.demod = fsk_demodulator(samp_rate/sps, samp_rate, deviation = deviation, iq = True) self.slice = digital.binary_slicer_fb() self.connect(self, self.head, self.pack, self.modulator, self.channel, self.demod, self.slice, self) def compute_ber(ber_block_class, ebn0, drop_correlations = 2): ncorrelations = 100 nbits = int(ncorrelations * 2**16 * 1.1) # 1.1 to add a bit of margin fg = BERSim(ber_block_class(ebn0, nbits), ncorrelations) print(f'Computing BPSK BER for EbN0 = {ebn0:.01f} dB') fg.run() return np.average(fg.sink.data()[drop_correlations:]) def ber_bpsk_awgn(ebn0): """Calculates theoretical bit error rate in AWGN (for BPSK and given Eb/N0)""" return 0.5 * scipy.special.erfc(10**(ebn0/20)) def ber_fsk_awgn(ebn0): """Calculates theoretical bit error rate in AWGN (for FPSK and given Eb/N0)""" return 0.5 * np.exp(-0.5*10**(ebn0/10)) if __name__ == '__main__': print('Computing BPSK BER') ebn0s = np.arange(-2, 10.5, 0.5) bers = [compute_ber(BPSK, ebn0) for ebn0 in ebn0s] bers_theory = [ber_bpsk_awgn(ebn0) for ebn0 in ebn0s] fig, ax = plt.subplots() ax.semilogy(ebn0s, bers_theory, '.-', label = 'Theoretical BPSK BER') ax.semilogy(ebn0s, bers, '.-', label = 'gr-satellites demodulator') ax.set_title('BPSK BER') ax.set_xlabel('Eb/N0 (dB)') ax.set_ylabel('BER') ax.legend() ax.grid() fig.savefig('ber_bpsk.png') print('Saved output to ber_bpsk.png') print('Computing FSK BER') ebn0s = np.arange(-2, 17.5, 0.5) bers = [compute_ber(FSK, ebn0) for ebn0 in ebn0s] bers_theory = [ber_fsk_awgn(ebn0) for ebn0 in ebn0s] fig, ax = plt.subplots() ax.semilogy(ebn0s, bers_theory, '.-', label = 'Theoretical non-coherent FSK BER') ax.semilogy(ebn0s, bers, '.-', label = 'gr-satellites demodulator') ax.set_title('FSK BER deviation 5kHz, GFSK BT = 1') ax.set_xlabel('Eb/N0 (dB)') ax.set_ylabel('BER') ax.legend() ax.grid() fig.savefig('ber_fsk.png') print('Saved output to ber_fsk.png') gr-satellites-4.4.0/tests/ber_bpsk.png000066400000000000000000001064141414055407700177520ustar00rootroot00000000000000PNG  IHDR5sBIT|d pHYsaa?i8tEXtSoftwarematplotlib version3.1.2, http://matplotlib.org/%J IDATxwXTWEw$jif5n6Ѩ1fcd[-vE ?LA~>29 /jEQB!B!OB!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!BYd pqq!$$uJ`Z^OHHׯ7I̴iӨ_>K~عs1ݎ;h4/&OIIk׮XZZ?.\U&ׯϗ_~IvvI\sի*WΡpqq!44Ç"O.B,^Zj( W^eΜ9fBCCM>{ Ο?ϔ)S eڵtޝl:wLXXcƌYfDEEvZvMvZwÇ_ٳc^z ;wfybbb/L֨QKʣB M:ۓɱcǘ4iڵ?\BPBŋ@9tB ʋ/hrPFirٳ tIQEٶm(gvv۷+?+(׮]S4h+۶m{l@>}zkm۶UMεkN]c}\9;P&L<QPQX[[ceecŋ=Zm#_.^3<۷ٶmM4)dUz>_/2]vHB?2Pavdee˗yINN6v>۷P$KKKFҥK{liӆTvU`0EVVeƍ+yI{a0{h T>!xBkѢXYY… 3g]tɕVQcɀ0 0ի`bccyÃA{SP6nhd[C׮]IJJ*нS*U:;???p"WQ@!ٝ:u,@ V\ɖ-[ݻ7>>>k=ЪU+*WYl7ndTZ}MMM5}P-yKKKNJ~5k~# !H(0!C0c բE y&6661{lx1p@Z-K.lܸ{{={[ooo^}UƍIӲe<-ۗ͛3c (ݻw@-ma>X] !BBLL#,$|9[CIeffyf:we]H]UI]UI]_qUbb"^^^ⱬΝܹsX@[[[?ǐ??ʿQWyV~B#G$<}BQL#?&#BQHXs%((M(BT]pF]EQ&NhLbܸqØfo'''lmmgРAdeec4 w1'66:uЦM 1[J߾}xC,Y伫+>}HT- Kc19 .3_~%&f͚eeggc0 ~^c(nJ\\QQQL4S$MڵҥK̟?k2p@N>M׮]iڴ)v",,ٳgcii8wmڴۛ͛7?GA\\W\~#&&_~qѸqcJll,ׯ'99ݻQjO%MX3 `k{pa\= != KERBJq ;wbh4\r?ckkKÆ 9xI^#885jofTT [[[vJTT%KpttdݺuQBcŋ ښZj1o<|||hذ! w``ڴiQBOǍG@@ԨQǓY:\2nnnTVЪU+N8a777<==ѣFbͤeϨS<|7yowIڴiC; 777iѢ#Gѣ}KKKϊ;M4wŋ_3t20%ͭsA[^k 6`x߿ԯo_M@dV]! W9޳Ŝ|4<׸j:|9f={+++ҥ 1~-7n୷⭷bŀEEEf7nݺu#<<X駟7PreT¢E裏3g 6رc1+2h -b̙iӆ8"##Yd 1b;vl=z}>2 ,܈c׮]?}cK̞=`oݺ?L ݹs$H%%/hߴm + R@mH,0dB x$vNS4P*V{GEsuhuj7j4ZcEQff4aaP`o[VOUwtPDZխ[gy饗x端]v̟?֬Y޽{iժK.ˋիWL͛G/ӧpB  wU^޽ˬY3g ח6m|ƯW{NJ+ j VKFF1^x###?>͚5ޞ}i&ڵk-Zcǎ 8ݛ3w|o޼y|7(BJJ lڔsKHH@3Zj,u/`'BY6%ECe`KQ #Y Soaڝ;a??&A"h Rn{I7$VV:E?& QիW;ׯ_'((#GpY.]jL(q(,,,LZ*WL͚502ύ7aذa1x>++@rFDDNǎ_~/ٳ$%%+ʏ+VHff&aaa5 [[[f̘aL٤_ {.^)Sm68'|´i8xzɪUؽ{7m۶W |kט:u*;wȑ#z=z,vY`AK<=Bh YhE,+W˝F vϣ;( մ%QAuH)69[ >VV0NCZE9ac#|rjBfpߨ7}w6=>Q=8 0NJ0 k5*9sLy*bUmccc:'Eꦼ?yG^?p/&MK.z/__|{@Ν;DŽ :uq|^͚5Yfq r++”)S`L4ɘf…7]~zڵkzcoqwwgŊ ><ȋV5^UW^ڵ+$Ax@p($mP/KpVUy|Yjw,}ӱ)rK SoHRKGNkbyԠV2F˿W"[Qi4LS.%gQF>}CPPYYY.xΜ9~xzzry g1Ɔ?$ɱw^UflLFy:,222`1UR%M&Հ[p!:nݺ~z$ 5&;̘1UVѻw'K ˲F#:N5 ժ{7W[ HOނ{1@7K{gF UjT=*l#ʩM p;tUI0n8Ҝ lٲٳgOϞ=1b .ޞ_xzzҳgG=qDF]v%==Çsm}]T 7njժX[[ꩱfܸq;+++Zn͍78}4Æ ϏK.|r6mYjU">>WEXX_}m۶ww… 9~8{ח4{N>ٳsh4̛7NGYv-:txh)))\zPL5;w9=v>|8}z*IHIX=f]~I J$\/CB \;G+jc 9f7˅(6"Q^=v|@۶mQ___oLxbFM= 88 6-[ -G櫯_~}dhq ɉPɆ ֭[ٛF&&p\> WBV]Nj0db@hxG*ӟ"$uFtt4>>>m!)K 888xF*sXK iOߣZ!CYLˇ >JA|9 EuVB!rPG~u^_=SϥR[~x^4R W j2E!0u@xN B؊ E9c +VQAB *_P&BQNHXžȟG-tbsbkFS]hfod!t{آv.C=2 ^ mZK}!)P~Y4ZnQһu.4b-ZkUe B2A@Q>i4Z}FHk,ީ[ƃuT!zB!D)$ymcwvz\ wcѪuRBȄ!%B&tCf*\gs{LퟀmeuodNʄ!%,C.D'ͻFm{v*>vPA ~V ڲp>ĉiРիuHHq8sZd %wzFի󝾤?0%C0wh %N,)DA<+W_W^/#O|$I,Z+8U}m2jgk Qddd䄽!Pi  Qr&htkVhS .`f:B]PQ[^Q:$\]Oe(ݻw0`+Vݝ3g2^:SLaz^}<}6 Yxq֖5j0~x233;qҤI8qFFaɒ%$$$ꫯRJС'N3:up><?~'C7`׮]oߞ)Sٴi/2F"<< d>t1ԪU^z^{Ç j*F{ǩSx2d۷o`0ЧOt:`7u$u֭[9v]t!44K.#GЯ_?޽{0aǏ7㟸" lΜ9J``JBBB###CYzQy5.Qo*U#SQ\([2'T%<<\IMMdz}'܉?ݹsGUFm3q}R~}4ࠤU.\ ]vg̙&+ʫjrn݊VURSS_UqppPl/ϚU^oLӶm[eԩ&wwwk@߯ʷ~k4lؐ#GBb&-%T\BQ ]Qi4 ^#AP/u٭?8+dgAb,wB[XM]Q17bCgc:fp<8?; ',RoegBc0q ?Gk™f;\wJ"N5>ZC-r:5S!,a>h=07#{n:`&罜lj=j`bZz\B*7q)<(Q*VGcykJ6\=)`1Y6&%%rO%V޽{c:v/b\ EZ Ј \˙kID]ͤ bns+MW\[+᱉(}һ./6~%5HϚQPY󔫌t8::rsikk[4J @FFiiicH]_aJQRRR~:}CpԨQ :E]oç}0 }ڧ.qϕ6>)3ג8s.g%Z]KBj&7MxeH/G pvǠ{B,oQQ4Z4!:,^g?['spss0e(bccSݢ uOZWƟC[߾}{vabԛ>ivuk}*U]ZV6SwYu =qD%^ٖ@wp wu8N. $Z;}ͻ lU9π.ihpwwJ*dff8*33]v,m!uORW%:ܵkӧOȑ#űj*zef޼yL>8j׮͗_~I۶mT㮷_/6R*6FJ%Hxl"s!> )~1%n1R-ʤUSN.u<.&<+@tuxb:"tdeeamm-AcH]U*`rr2gȐ!E!KaP͞S?X^PXuU^W'uRWWu%,hL322w[)Fٹsgޱcsy,'2iҤ\Glmm}N:L]u҅GLժUYjM63ϻk|;w.Pff&[lg)c,/o1SzFNԕDb9u%SwIJB\H;Xh#Á$ed˱+DU ]VW%Y'WOY; OY] `_>f*O*rzʳRxp(.iӦ|P*n,̻ ^jC@7.Lqzz6R Ʉ]N®ԕD39t6.6נéhmEZU.* UW^g& mF1@o'2|O*8Jt\}ׯ_*XΝܹs.4z.juŎ^ ՠ ۠pF'/'U6_3y^~jӨZ%yW#>e,sYBP;~SWxo6܈The_a!(eJmheeEƍٲe-[гgbȑ#9r$bWYjp'՞~qdy `4"O~l-`Z%z;R#X:.! q ix;_uµ6 ͂ɾBQ0))g_GGGsqwW^I&lْK.믛Q<4^Kw8z6'$p;%?"GN:VBG0(:E ھvHkJ6:/B%:<|0۷7Ι1h ,YBgQN6l@jUdzkVZzWw%;\{?3c'iS5rwxyfj_hOMD+`I%c]oCz6tZgxBL[#5B6`Ajh^É>WUO@u߭`[v| k`u BQZH(J {M^ux<nq7-gn l,uj@D3'x;RBG\B*7qI3pd l淂 Y("oRSoZT ׭=r`_ qşLɞ7ц 7QPILR@ 4-,Vx2w BGB1%:5VCO=u< mu=Bgt<72XB~ #V zPV"̗*0bl} {oK' A^Zntg`(¯G.̕vs~g;+Z9ϙ.hX@/Fcg !@@Qi4Z;`8Z8q<&Iv<ߎ_Ŏ6δWg?0'0W>X9mnӡK'ޣN;9{=Q79y%ID]Ob X44D[?gPSN %9`Z9'~{}sN!- A=[i[1]NJų;&npv*oq0_l9J6M %9t/Vm? tNjsBJB1eS~v[]wuGQ.ƧMD`߹xR3IH47(_p uu\_ap~xtmp)PBh4TwHu犼ҢYG6Io,=ƒ.tU*m-Spsu37}QBgL !(V QD,tZ:2ii % $:*) jRMy h?bP(-BQ$=lB8v6[#-g%NIʶtU\iㄕ]evBV 7P! @ģ9;q ;w)kmxu;4{M}X@!Dy\`E+)(z63 14{4%h!x PQjt"^z #NJ$3;D~ KBR!D&iٿAk/AXA0b4C}}kulSpH- !$!䵞 >~*x~>r\3.m^͇ai ]NY܈X(ZL]dBXE]oCK&k Z贄`F+uG=go2d!:\$5 wR'boC•B { 4VsL{o$S|1kiO }7y%[aD!B ^N|# C1,M̭T8Ǣx %LϟU<B !J  mÎk8j IDATςӬ .{eXZ: E@X#g \=BBRIl7~z%Szu=[UG/Dh Yocd_ ֎wÉEBa> !Jy)٦3SW1 :xo ZCFz V w)PQ=VZ8u%wn_fX WAk+`A[rD!"(ZSVr9w.y.ox _3?=c+Z >p | 7teƃk :UbLZׁ;`mɼ8f1dfk[!`Ȃ-aspZ?B e֒;_ӥ&l-_N%ҳ M%K  Z٭BQ$B֖lǞqޝEUv QsAsܵҤgiҪVV[Msi3=,%]Eqr w b9?FEm$~>;sgA~/gՍ 3~F Kf+Jdgs0 v oJ""E("'׋g×ĵM PJ&j3]_+˘NW1wuX1#~4("ex,;wvdC=xO5s4-o6™oRM tZź| ,tۊf 0<s2zh&Luҥ 111$&MMTTT'99A[ow+?/ԒoGuGj:M>\H~ո-6`FFoQY_׭ϻQUGsɓ'3d )SXd :&M >>ʢo߾7;YYyOMM ''Wq+"W;__կ[[۞c6Oe;pףb\g8>oc40슳8u=;X}+d_0f=0X`} ;;͛G߾}O7j(Xt?4M @F8q??qD|?c2"Ra&$3Xh#)5rɵ 11 Q|_qZ%CX]dV?D_`du9(ԬY_5ߕ{{۷1WXA׮]iѢm|͛7/t®֪Ub!..={]ǮhWS_B*5n]8{5vH$gPj~?h b1tL@W>`Λ^O}徒TBCC=:[04Υs8N닯o%rIQ_O}>wn\ey{n6Oe50_sAJ~ܧr_I9Pv;ηѣg̘AӦMi׮]GDʟJ^ِ_NÛӄq7Eu]Ez020uYDCtt4qqq`kĈlٲիWyD^ُViG(|E :a!5d0o0'B")t|x)U2bFAjj*zn)_M׆؛Aƒw,m!nZ/5MExAlݣnv _WVeHEOU VHoj˻Nfq'uo~~կv{Wp"R)XG,ݕ=ecdzOYΤ[I?{Y۾gr$c=bB(m+n\$\ɛvs+KY`c05]'3lszGeCD"40"Rj0kp[ܖ!Ndo~k6`F|7P) /G2"R)!W4 1]s'3u\JgZ*. 3Vf*•Q""Ψ+зuMZ卥w.&g-+ W-oEcP|$| ׾ -J"R HUjc֠W#d׊"oʿ\6pOTVwndciH EA "RlƤ lw&{oһ]sj&Loj]aD@D5Qe;S2 6M/HH;ZS-)'EDʁSObv`dzr%WBׇ j3x/DKˈ4DD8{Y\SxpzoEE("D" 6ݘlO@N#v 5r=}X K(yukXţС^U2l=[OFvnh~#y0`;ݣ "e ?>z)cl̀;m[r(%)R2>fnoo)!^V ""f0\Z/QcןN[ibbgeLלNN6p1`+p*""@ իpYr&9M?S Wzb22EDU}=0M&5yt\K_* E|EDHUVܿ2 n0|g`Ŕ-NDKPDD$<؟IOXG叹^/RD (""Eֿ]m~y+#:~TGiNfrgM![_(ȿG`JLК=0g^(tzCfv)W," ""Rl +6{Y3g'5L\q""F {;R?{3;W~~4oÀOåu?$|bM"T`ff&/riDh-`4"/Gv}Ҳr2g5o/ۍyjEÀޓP/ê7a2H9`i"]${999L:u)ED ˇC/vp<8o90 y  = ”()AW\I %&&;e5kƴixHL,dj|lLלM X[^Ѵklg2h] )!q*6lQXz5^{-=;wdȑ)ED0 ;E b]_\?W6Hqp|O8t ׯ_?NTT< a /0h --":7ˑ_-C)Jm8!(䯤5# 5;vjժ@@@[.SH9Ȃި9NF~ɿy0쮝 0`|td[ZHES0 HMM%%%0 555ߏx ?o܎ൟ~-{*6#Cv.d8`iҰa|ϼh&a,""n3uUf,|%6c5p` Z]HW.É1bۜ& % ; n--X+ح[cۭ>/TU3 qH;u(""n)XtR **~QjUKH0_sB}.^n;'pul6~u[`LW&xZ Dn?4]ff&_ap7 lްykpf,YW_}W_}<~ɒ%te˖KDDap̜9Hft-[rzA5K=&_K6pk;72]c ~ xs=_Țlْ;n@ܹs=z43gΤSNİej׮ @tt4YYY>A*UX~=G_~x㍄]~m.J7?Zd;T z]#?nv8 viW)S5:<111Ĝ} 2C0e,Y믿ΤI?F-Xl7tӿ/^DDpȥ9g5x?w› N6 "eF INN>=b߾}dffK.]裏ޫW/V\19?AAAl2sjusrr)·8S+VD+ܧr_iU˚dh;|o-ۏqh"CR Zސ!Ӊhrt|{徒+17˾}hР~){&==ɓӧϿ>WRRڰ0>1ϐ!C0M49r$-Z8&M',?=ŕq+"WS_4KvI+Z\m{ҁ 7L} ɕZ+D_edd1,a111xyy#h"zŬYgժU^a`ԬY+WҡC=|l۶x XV- *sGϞ=.cW4+ܧrU}|"!e4}~k+:ԫ  {,4lL(W{垒TBCCIII)ˋbzj~'ZhAVx뭷>|k&\.+sb \;zh ׷S%rIQ_O}>Jj\ͧwwY+cͭy3_5Z0MKJ< ̱cǨQ*U"00]tiiir. \cǎrs1cM6]v%z9~̾1Q5v8Z>׀au`‚{ cK)}yi_v HHH`Ϟ=$$$Zrر̚5ٳguVƌCbb"Æ +pÈ#زe W.?3}@ni_ӄ 61ǝ4/bٔCWNw&,k߷d(omL F`` @Ϛ5kѣcǎ\s Ι3SO=šCbԩSvs}ô~畸Lہ w4{ނgP(♊5=  3h0uf>|8Çwaƌ̘1Qs3 z5f;9ӄ 6' y^4h5XX[+F#HMM%88rDD "C ls&{&+_#:E؟Rdh ?7!`)z%JF)HϤ~ͱ1^_XaO@G\qW)V"%\EgEDʶjӵa5&eP OW%eئ*z<?>z&V.R*t4 HOUs=^Zsʽ<ּq] Y9(D,@]-Y+wB`\,}~zZ!P*<@.7#(9@ R))nP6`O3yF@K+_%R,=("R~) W7v0/zj|BTH,""箮q:yd;vw5,Q7]u@H}im"@PDD<0on1s1z+~9ּkf&6 m_T,-`X_рhӋ5z? )JLb(""m̕ u/7oyaM ~tݥTHP,8 ࡫qwz_Vsp5 IDAT5w WE3"(`0 4Nuxd>;յdi&l[dI"E@DDDp'mim7 Űj&|0VV.[HEDDN2 u|["c&`D aӗˢ WrTY]S9fQ8&sOցl3`Rao >s+.[@l5wT L$08M`3M3>WYZȅR,l6)a=ކKzBMphU`hg_=̀>YA_s5\ @sgRB`H^' p= 2+rEDDΣ~kjt"&3/·j!+h(""ƒi·CĿ:ΓCm J8u;8㘵E.^Ycd^<aЗP9nn4k 9@ >2[0g^Y'1$u%?'@NEEn3leцym2]nG5`h@%;`;91kt ÚBE XPDD krU0Nz =㙿`M7c"S)"`ͭiS g<נks}[ *R EDD?o;#24sVs"+7o~;9t<^[-XDPDD_ a惩h-9g1L'|=R~"(:U}{;,'l̛#.L]uHiY fgkڏB껞 S1 ;pƵo)T<H1: ^q7lǟf#ױq^Z-ZzR(""R}[$irl>A$Wn{ ;l +Y]x@`/ЂwWs3nFvϻ^5GR)!>^6޸-5*s4-a1C)''n>~` EED]A~޼{G;{ofme]W .fLd EEDB:ӄ7q(ouTwwaa EDDJ؞}ޤ כJv.."ţ(@lFgzUy'IPDD3_!H:i#+R<H)߮6<ЕM|{_GW PJ&#>ZKÙO@^ 'ZWTX """$<؏&Tě9nffAzY>H(XxZ/5-o0[rqREDD,;5b[5^7k߇ճ,R*"@ =Ы]d؇d56z#g%J(""b!൛[sEp:ϸ~hL|6ﵬV8EDD,vQoɔw5Nu1ddXEDDʀf<Cs^q'?l9?pt3,sI)}[_0fn,^zem1TΣ'x gXpƚr+rA<>ܹm۶qW[]+hl<[v55)cqW˖-#66 `…9s&/> &M*EDDEtOl3^nj:BnRN˖->}zseL0uѥKbbbHLL111Ĝ} 2C0e,Y믿~^||9?j*>S͛lj'!(('x[;5յdONN999~N[ܧr}+sM#JeT}'C n {VkJRUW]4҆a`@vv6̛7}oԨQ$$$t :9sشi/98q"O>d1t>w˂7I5h_ɀN@ g.]v>EIl c:(g`du9(W')) AXXXaaa>|D9n8Ǝ{}jj*jբW^ C\\={ۻX]Ѩܧr}+";ދڸf+}[`Ӄ;&p#㋹WWyrO1 #{4 ls[`wWǮhWS_O}>Wލ6]*T&24 \~~'__^+QB՗ir>W=Z`q1cM6]v%z3ݵ4'arkotz'N`t-wJVnGǎK#F`˖-^D#""r&03NġP18 i`92O8ABB ٳӼ;Yf1{lnʘ1cHLLdذaV-""Rbe0M&eO.x,Pʃ2 5k#S0̜9s߿?Çg޽deeO׮]K.=(""V gRM%3 3˂J,+3""bjܖ*~?_m0\Ԇ]WǴRJEDDʡ`.oƴ[c3`|`~m^e!ϱV){EDDʱuC&,k-\qry# 9x""3""RwEZժBjf.c&8sH+!7*e`@)K6oEem6T +EDD*L㶳qJ^cj-ϭ)R @ 苉Aduk a!#”((a@@DDvoGl;F`;lg]R@HyU3{5ɯ')=1tzA:aAR@HyvWzt_l?]G`ڐ~~κ"D)xkI77[Y+C)O \;ٵou+%BPDD\r/NՉР'4wreQȵZ)n """M*;M?J`/iQRREDD8 ?t{z88fMRd """RJ^p EEDo[!/7-_z?zbVer)? &k/ ] ”(Xuy)[W/੯We <g _֕2JPDDD6[}TDrz6~5Qӡ(@qop-7/~?+?L\H}0ΊB~EDDD au2q9 S&R({w#j79~fFo_ G6[W\~hժZbСV#""R>79LIP3t<95CzR&xY]ժTBBBek וSAכ?-(kXȿϤ~ͱiDx덷{ lްm$|dMl2bcc0 .\X`3g,_ΑJtt4;wfҥU߮6+AJl?t֨ > ( 2iٲ%ӧO/}ܹ= &n:tBLL &**ػw/ 4Rn"""QD^% a_wx?i`8T)ebbb>yd rzƔ)SXd :&f?9"""iӦرmoVVYYyٜ 999px}܊H}>WS_SIX }[G`Az3mq~NkV7ĕ8VL(ɾ4Mwa,X>}M@@ͣo߾5j n=~8~:uĺu )t'OPo&""Rd3d; 7p&4ܨ։0Xh"K  @JJ AAAv޲L_<$aaaqauVl6a0us?q1vSSSUz*_ٳ'zF}>WS_*9xSE@~F3w.OȽ{=\}ǽq<8kiKǎٸq׷voo$]Ѩܧr}+yJ_ ހy8{1w~:qt3+^O8FI'?)Ӄ@'44^jѣG \,n3f̠iӦk׮D#""RO<]I̿Cpk׿, =W >>>DGGo{\\;v,s1-[z=Hyw]Z׮BFl/Ck@@nϖ2O8ABB:CBBi^ƎˬY={6[ne̘1$&&2l0+ klܟRpޓJm++ =Sk֬uִnp֭[OпLSO=EVXl/N:%ZnM*ӄm$~AMu¶o,ӓؽ{wL,3gΜ >{E||<]v-t XDD<ܻ1~6m*d:,=L"""R1DTxۭdAf}ὄnԃ\gPR1[=‚|wouo|[`رNkz+X~Z)p>^<5-̌ϴ;_[tף!@i@MV5iqq0'rWȴ0vg 1plw)EDDlO|iaBqV<1R* """R &-,3(KU%&NfKiaD(q1MX3 OPDDD,Wjwt &q8WEDDLB+;)r*4@)*y@SΆdC)WU1)HmkQ#ȗLe]huY`hH8ɑ &C)[XUţX,""R2$s,0doR5UP """RfDb3ouC)R2#<؟I6ExU0^V """rj!">[3wujV GWEDD AIxեTH """"FPDDD(x"D"""R)&LPDDD(x@("""aEDDD<񲺀4MRSS999dddw"Q_O}>WS_$ۧD BZZjղPiii[]% ӓt:9x +W0b=vjj*jb߾}+WS_O}>JL$--l6|NW_\ nR_O}>WS_S♱WDDDă)xĉ'Z]nӽ{wtܧr}+ܧ*9""""at XDDD(x@("""a˸{2d"##~?!;;ʄ3g,_ʜI&Ѯ];*WLӧ۷oraҤIѣ.:pjժЪU+.;gyzxꩧp:Vfe˖KDDap|i2qD"""{l޼٢j+2n۶m8N|M6o̫o.rseL0uѥKc :IDATbbbHLL2eҥ1UVGnn.z"==ʴիW[oѢE K)?NNoe˖-+TRʜ^x7xӧuV^|E^z%MfuiKOOe˖L>_|ɓ'3}tV^M5ٳ'iii\icJ/VaۛÆ ˷q棏>jQEѣGM\tեYiiif ̸8[nQ.LzGΝ;[]Fp5טwygm3hQEe`.X{i֨Q|Oo47xÊ+ ],RRR KeggO^mի+W!%%gĈ\s5\yVR}WmۖnիӺuk~m*:w̏?Ȏ;X~=+VꫯmϞ=>|8ߟtMKZٵkӦMW^K%%%p8 ˷=,,Ç[TUg&cǎsD{uywqיP:#b`Aƚ,5"f(t \qT ӫaR%-\O ϷO@f}>z>8>ϝӦG{=oQ;믨˱j*F/4~0 CEE͛v4Mv?qn5k@ |}:;;s碠@ڢdBEgɒ%8rԎI())]v HJJBee%xb,ZjGӜvݻڊZTUUVh7^o<Tɒ%Ks ;;ى48N\9l6 ݾs)>)R"444QQQjѤΝCrrTCss3~m`0P["## M:}JkŊ(++wN8 6 //Ote slUb`F4GZZvmhh(z-ս^/̙b2B| ߏ#ic=6Y-??(--e7?'~gDGGH]v  un"11@;_~%6nܨr@ģ> Á*?^6(X-_HII|6m… Վ?ǎ7|>?K.Eee%bccJf̟?_ԷuLvAb˖-"::Z$ vՎvS >ӦMFQ ˥v$Mr())CKikT^^`x aۅh}:>H i‹/NX222F=Www7f3~' :˗~Յ\XVXV=^yy9 aXFq 2vX$''+իW @`s]@"Ҍ >}ZՍz׋;|hjjv!77w}N::m&Ç=zTSOc޽h(lH3F#vlecN>ٳgd2!&&{QS__~ZZG~~>ʆAaZCI3fj⫯2Oss3RRRdCa…xW{^}}}$%%ɶ=8p@"ҌF;V[N6fܹ(((@\\֭[[" 55UߤIPRRr*}DDD(8s̐?I&j7oFzz:b+yW^w-7ydm_~ǏǬYܿz7o՝N'~?ZZZڡC*11?0hΑ0 ~{DDf(޷ fك̜9.ZZZcq!kעPV:u*222h"lݺK/!33SLrtP\\Txgo>_Nvwwb޽xe80lSKD4jH2ei eO(E]]}̙b۶mynZZooHHHDSSTxX`X,b asɓ' #رCDEE $DUU,햝hqqqBJN:%ƌ#:::HD4B:!F ]pnO;_+Vr(x0.]M6 W^7xnDDHDDDd-`""" (Ȱ$""" 2l @""" (Ȱ$""" 2l @""" 'jKIENDB`gr-satellites-4.4.0/tests/ber_fsk.png000066400000000000000000001146311414055407700175760ustar00rootroot00000000000000PNG  IHDR5sBIT|d pHYsaa?i8tEXtSoftwarematplotlib version3.1.2, http://matplotlib.org/%J IDATxw|SUO{J[h)!d˰ 2TASq~q S({W Je-6?҄IMB={҄~{=EQB!CmB!DŒP!H(B`$B!p0 !B8IB!$B!F@!B# B!P!H(B`$B!p0 !B8IB!$B!F@!B# B!P!H(B`$B!p0 !B8IB!$B!F@!B# B!P!H(B`$B!p0 !B8IB!$B!F@!B# B!P!H(B`$B!p0*cΜ9T*+b*'|Bˋz1dmf*uVT*dddVe޼yEg7͛7gt:ݺu+2:uXe4 իW߿w}JuG(In֭m;sL̙c^[;vtYYJ /PuϭQTŕW|2o-ZgggjժYjg裏wѦMpww',,|rSNO?J?,6qxxxШQ#NJzzzq*ʼyxiذ!j/DEruBٳ{_ {СCꫴmSNzjOvZSRRׯ_e%/2|pnܸUx饗8<_|Yٺu?[\bG}DL:]CKVfΜyGSO b׮]ԫW}>w6޽~EQ?~<۷ӓxV^3fydA߃#Fl2&MԩSqqqٳlذ72hР"caذaX3g2~裏/ƶmx8x -[d׮]f 4zmҥKm^OnnMB@QDDDкukǢٹs'?G6ӧ/z^r>}p֯_o(o,Z"tss3+[v___Fł :uja 7.k}[U%7n`xzzc̎?ٳgMe&M:@SK.SҮ];e˖̚5 EQLeԩÑ#GضmExQ]۷o www:vڵkpl ߟPv)oV~k׍y;݇?/_O?-{ҬY2nLϞ=ٱc+V(uWӭQQM>tmF[F2qD~gKޱcԩDGGGכHJJ⧟~bÆ 1j±:b @ J,0`Xx1} g϶(2i$zi~;r;v4%O?4/f޸q+WO/l2̋/o*|r֭}Ǯ]صk}cm۶=z¬YXh^^^ߟ%KX;v,Z 駟uV|KzF.&;;Ç3c V^3W_}܇zkϳfĉM-Iiiiڵ>tzxbkT^bСC͞sN|}}'==}1a\]]Mcs5[f *'|Ҭ5f͚4oޜ[=_|'NаaC00M6DDD͛裏طoE7+W ,|kuܳgǏӴ_0bs A?55kk֬Yk=<]t_~4mڔ~+WC{njժe?7-Xz׏,nZg,&Olc͚5fe>zavڦۗx6nȎ;ػw/+V`ҥ<̘1>}uV&O͛~3d933}|A~wnǾ}JU.<<\^O r5jTb7Æ cذa9r={o3Ϙ5jg1(uC233=:*b~3ƒ 5uԡSN޽޽{v~aX~n &裏rI ԩSddd/ɲQݺuK1p@@||<|7?ެۺgϞL8Aѽ{w6oL5J]իӹsgWΰaØ3g>lU-Z\ePk@4i?Nnn.'O8>ff͚Ett4}5#vKm_˶K.|{?|ŞWZ5sPTl߾}Yl+V07o:ٳgjJxbZ-k֬aȐ!tGVV ZmO;z(bCo7?~͛uzNcݺufk׮M֭iݺ5wIhh(ƍ ʕ+9s ݻw/ w0V[`$®$%%cǁ[-D=Yf}v"##IKK8bbbԚQ^{{?7oYÃm۲l2Lo޼ի>C(ŋM nM65+?zhXn ,`РA%vCT*ZG233?EYRyxxЮ];-[fV^׳`jժU2+66;v9[oy2e[oٳٳ]kرkjTiݼy̱cǀ{}aʕ={ݻ[㥴wGֶk qI+[laĉ<t\¢Eذa#G,[BV3zh"##Y~=fǛٵkӦM#,,̴m8/V壏>bȐ!|W[E5իW/^~et:| \~Tgܸq=ӥK<<|8ƍ#))?j7vӦMYx1K,nݺZ$FӦMW^tޝW^ygggfΜiVwٳ']tYfx{{s!>ST*(&N'ƍ#--ҥKyGiРŅ0Lw3zhfϞm1vAXӼysҥKtرLq8q>}ӵkWHNNfڵ|t֭kݛUV1`SwpQS]|~dee|o>U?=zG jD7+h amǠQzќ+畷zK5k*NNNҮ];믿6kٸtR̟?_h4JǎTem4ҠAeҤIKLť(ժUSnܸQj*Yf|;CXOJvMW2rHeex Pj׮m6R`= 駟 *...JݺuiӦ)fͲ[RIkEQOG۷o^ڬLQe˖DEQ&M4nXR`'TN8aQQ-ZHqrrRFt:S]>3g/ƟүZ 6[K.)SLQ5kxxx(ZV V̛7ld}IIEQd>Pz衄(ΊҢE >P222Le{~wMiذr"_{ju*GVN>]y3 <|wlp<*E2d*pl,U(lݺ :!D!-B!FF !B8IB!$B!F@!B# B!i`^'!!//r[u@!w(ܼy`kz;I@BBk׶uB! ϟ/vyP{ 5kxfر> 0|-˦Mݻ7Zb줮ˑ+u_T_uԮ]{9tɓٲe ޴lْWݾޥJv/>9R}ˑ+u-#߾K&M ˋ}qF[%BqWU0::JbŊefΜIxx8jՊ?t,!!Zjq ]!VtN͙1cK,aҤI8pΝ;I||<`T#7 !1T{###,_~ɘ1cL;Oƍo6m!!!f-~.\]vE^/;;lTpAnnnTH]#WjR:2b RT,_;K.eРAr'N$&&m۶GFغuiݻ.SNؿpBNńBQ222>|8)))%WU8׮]Ch?00K._|AkE&SLaɦa{.(ਨ(z#ɑ+u_T_uݶ@Y_+~Zz|a1?Bm*z4w-KVp'@A픿i k`ˇS[1bX$ !Dm!55RM$˺u۷ocanrT c2[mxȼnYZ88UAKXF j-hqӛQBx!V;k >| bxͮ9^CbweOFrkgv U_uemg TAW MJ1v.ކۏ/_Hv*ֲ|1iQz[$DWMR&zgB+vbY ̯(~wYinŮ SFCkXR > ><̈́JсNRO-Q[m ]aJCi4eWgGe\ F.A!VrQj[BQHX7ZJOfж$}CQVOBPTTzVO2$* W>"Xk4 -.)aze[/[!s-UeV~! MB0nyuzL-?:ǐus+!Y!.BY8etW9dWItڲlc%]r0ydž &?t$[CP7_Ypf3NL~E2ӻ")6$ `%} +/>+.ܴܝpwְRVgM'Lux%qYWШUVD׍_~C H.׸Q=]'e`0EiyrJٴX/kk|%?Γ+J~Ҙ 7,~_ooYi!/P0<?}kLɓQP!ibH/{ Bؐx=;\c{86WO'ܝpqYZXT6$ /W'<]x8ۉu+VM&׾wWЩ@B4,9ؔ_~up/]*_k&cEԃ"*I]Zyek={^̲-5'ĐXs3 m5Ff݀nvXZNniO z)>#'U_urV:Tn9Ð /JEfn:2st\I"Zdr}=t{٬+_劷ޮZ\v%|2swCQ"PwdDջA 'l]le)_k{Ѝ{7_ʷI^X'-G&,KْZS5ZCw=˔`DCbEH`x̼no6cc#]B qMycatFV[S2 $jWg<]H1$ydq!9+<+e瑖\# %.zZq >nZ|ܵiq%z\6L=3](Z\4VIt<q+U,̈́hƲ/{Z˜ihN_ڌc 5i=e8ELJhhP4Nܵ 1J(l/WR%篧 [VHfV.yfrzR-p)5KY[Q`)<5TpÙjTsr5-3\ m3.N $v2vj Se cþpH\9鐜~{ ӮB؞ IDAT]vp!#VRA>nJVJ,N~V̢ƢZ$>' 72rÍ\R2s9ʚQ 9:s2l C[ֳ8 tg=]z3WM-{6`udQ,E0j،typp : [HkTopt !ʑ$v/Khl٠Va~V'dPY¨Q~.Zg䐜Crzs8p>{[\IMv<=odrF _D䋨jr 5]JbJ;Z7fT:V[uTĔ,BkQҴ0jn7s}lf~ToXGQBr# (QYeNhW׵Rw-ZS=o0n}>nZrHJlҳ L0H&z׭+|8q%| aRA,-GK !+Hέ !n$RG!ǵIJX8a4Dm?wS. /˄]Qlfsfosj:g[+8Bz$zQ!nTsi^Fb@]^5ӆ-+NGVD|EGWA,BRP.0W7*j] /.מ<¥,SL޴:$RQ㆓ZkDRVR][d7$v.cWoxj`= M5 HBRPT9w#a,*Ylo/*<ձy\HLS)] 0sfn=A;§ina,.0,^D FA1[[!J$ {wcDuQ^ 'hy:=of%[snfq$!#V1+oGjԭi1Sֺ3ÁH7++.4z#B"H(D=I&׍Ȧ5`Qx+:=2KJ'z28~)˩fR3=tnuU^u.&g2wWګ]~pprFC?Ȁ!D$vKQ]u !4Ov1-|lw[-gк&^Ci1jM.\9* Œ$BTblK4^M4^gODPfl9Չ5 [3ϳbhO2 v2 B&.!D# x8Ѭ/jEv3NjVge-gc ]TZhxR6`nO}MЖ[G*!Iŵ8ihM`o]ZZN^eɫV_KeҠ;X02[hVO+pr]BP;R-Y:_)IHT%W0[ĐvھK`\SdRju/Ñ8IͣlH(*UEm_Z5N϶\KaDL 4jdeydRxcs k_68)zGA(PVP?>.4P?Ћ9\K )s!|/;Djt_wD<a`8݊񧡒yp !J;3,( 39p&e?g]]?څsoM/jtW4@<bWtp$B9IV*~sMjl:zB Qq== G.%0?aH57'DA+= &<#hdw!q&WR#M9ÉKiƕFvpJnoOn0lgRȖ#mvʡ EԨQ???_n㨄Ix& . [|CK0~;L]^Z?A#BE:RXbE3g+Z?ڿ?zڵkiBQVG u.3hSԸzfZStpd$ `zz:͛7gƌV/YI&or:wLdd$2Z"""bKH5-))#G: ![Q{g}!UUv'OgL9Rs} !dHRIdddǿKƌرc>}:7noeڴi_žFvv6 bʔ)tرB"X5 0ze_4-7׶Mk0{G/5gmЈZ =`Q a*uX/^u{fΝ(;;lTrss-\r;m!>|81㻄E]goܭ/㠑,V)]tuE|Z]N'P%ǢA?{^R._֑EQlDiT*/_HHH $$;v}G̝;'Nx۷ӥK5kf7|6mjԩS-/\wwVI!u#~Us0ٲ[:Tsn*mcITy{͔BBFFÇ'%%ooo[cUHU?EQ,SNʔ)L<<55ڵkӻw?@DEEѫW/Zm_*/Goek,}PwZ̐K+`ek_* izqkh4eJԷH]39*ht+WxW^Z_꤮ˑk뺆h6)o,;NQP eӝ߭ޮwZ,̈́F6s܈*"LjYUQqvvUVDEE폊B2M(_΢gڳsJOH:~dv~;bɳU*_0l8{Bl4m7[ *u `ZZO6=%&&???BCCn,y=qj:SWe8^{!-C}KʰuF˜Mq #s!BZNOMύߍ59s0tPxHLL$""ufBT*z5{_F$z/,<`*cS6:ڧaDsŪ]ݺuCQmΜ92&L ..l/tb9i oʶW1S11v;yt }V GR'B!JʼnjX+gFlY_9$vhސD($Ba'3×pRO_XCK_`zpoqJM~ʨaᰤP!L`vԭl&.Y{8{5Ĕ,NHLɲqLs*8{Aj* C=$ $ B8~bg^'5;N'h~͌}͒}iݠ$1ENV|LBؘ$B@\4У>Q/u}]?tq|^7ic[X5p~_# I((ߝo_(|UQJaE\;zɐig#($B«[6fꪣIH*BˑpL! #[<(|/MIA1&jxh8{--si`w0x0j5icVI2XDF!6t/0ow<\^泍'| _<֜: w& 8ߴs*L#솴 ! qB+.|7?O':L{Ρ{ t{ݐ ypl!ãL#$B!̨T*mU :Ӿ9:\~sq%5ĔLvf򘢃g+>&!ʙt !V5wmO;bt JϷCpM&֡? >;h$K ; -B!V۹.k^D@O2?py!`sq6q Q$BQ^կ~w-U# SŌZvfÿɔ1JP!D:o˩LE PD~ c6A{!4,&CD# BR1Qg:ʻ/L;S-< ]_NoYp("Ԇ K]ˠgƖ?n0:̻O&a pq?|(*9iBQ&A>ntOjҧ!FՉ78}!V ]ݦ9E%' B;@@ּؙA\OaĬ=|4z{\F:ZWt$BqBY6#CZBgO0n~R2smZg-l`w#E! Br䑦8;m'!`9gJ !/ ֿ x(D2D!D&&>WÀz ^AGz02xfGx#oa!lHZBfjmϰr!o lxT8jEX8Rmpp !+s,8y !z0z=z4.pjlB7P؄t !+

a$BQܝnDkFuCQux{tbFˑ0ZÄ]Pd^]vJ@!6Qx&կ*}q̕4_9Ĩ༁ D'Gr! BJŲSJ(]˰A4_]Cpq;0=gD& BJr%\ |L-$B!*+'.9cO !4 eYL{OL o8blT|,.H(R1(țEϴy-3r^al䷒FD4( !|ܵێVaH׹d[e'~0t~ٰlR$BQyjt[چq3;7ò ѵ!3@~ 7*B@!sFc=sti/;O_uXn<64pl5, B*D@!U?=Ն c}l;yĔLY:Κ&e vO2=($B! WGgdyz>:~?7d_C0z=xc0\9nD%& B*I'ZѭAutbKԌ1 ^:G!5щJF@!U1-;qFnm-d8aF@!U=5<-SNm,`වi@Tt(D@ ##0^y["KLݴ2sd>;;lTrss-xr@jRת?yWx>:շ8uBu/Eu4APg IY~/JQShVn*˗3p@rrrpwwgҥ 4Tnĉİm۶2]Μ9>|?2.SNؿpB|!d'u\݂ ӣR|S<=wGImm*TFFÇ'%%ooo[c8׮]Ch?00K.ݕל2e 'O6=OMMvݻPnn.QQQ V{W,ˑ+u$ڲlMTӦiCuZSd]WM@}7ڜO( `Ȳ\=x&FB)b4z˸b_Ֆ?꤮ˑ+uچ #%KLJ٦STr}/RTܗ#A&j@Fuh)N˞Blcy)>緣&h4־+WX !p\t˵lvv 3E3mpS q6_a(x?PaA[G(J= 8δjՊ(QQQtFQ !^^5o|+Ʋ$d248 U/0=Bs:LKK#&&bcc1M2yd~G~';K/D||<=-BQɨT*okҧSe JDcO{ xt8cԨQ̙3C{Gbb"[0[,'jH:r`ng\;XRNuFIL0 &TPDB! 7 nʔeLI` o\mXe`\;X)4iWmw]B!6l} ᤆ |ò_;dA"ٻ︦WA D:(VmZm^g]RGyZ?鸭vJX*jEQu8pdCF~J~$99,H8)LIĂA~{Įs s&(`r20z0K@f XȨ$""R nN…[9 .GO`-a`bU!H: 9ϷA7f-*/An!iN# [<%m*ĸ˙, 0 x[R9fpC56sc>=3׳t?ո 7iZ@߀o^RdD:661= iSeKPsOfK`,+EeIɽS~X ܿP$""9d<ۙI6R} l=j QXt1Q$"" 7,īSs199 72/:*!DDDUpR0gYuT-}Uӻ#H7mt ťJC].@a6c2kXՀ\/=?I{58Q5XՐ)>~=qbi歁׿rnKU Q-s«ϸA)%ޣBC'큂@RGCU`HDDTKϷOs )ĻߟkT2 g6#J$""%S#9V#]ӤI{8zLU}Ƚ'm.qdZf@N{cX= <6m9˖@CSթ`ӛxX=\z ) li[9V}Ƣj]&$$Gnpyaxo`zX+X|,}Apz_0] h̙34i?ŋ1aƗDDD`nl$!#gosA@Y*m,zӧ ,\ ?ƨQ DDDN- ϠD P8-u4zaoo033=0"""]= ,p#geÑpzz@XX @AldeeA!;;[ADDD63‚5.!%CV:@պE-=zְiXpGoY?AROzN? H26Q]"q=S1k X:9cRuLm0d|40BWfpRJZ#8Iu`)EEi4aɒ%^(,1eith/6׳{zD._y<|P=ݾ}{\zU=ٳgOtDDD:VvR3sJזʗ0FVwuթHUDDDT\>pvv ضm[u֬Y 00/^ 4:u‡~XoUIa`/;,lr\'uXpk8YnT.Jeo 4rssѡC|.߼y3&O9sԩSٳ'ÑwW@{ܼy8x ȑ#C\\\NDDTS-1kKkPN޽{h֬ڵkX~= >^˗c̘1;v,`ʕصk֮]ŋ+ݾE +`HJJB~*\1Q\\\e.e˫[O0WݥO2WݥNOI7ǭh*^ r}}jkz ^ه"M6jXqINNFDD]lڴ =rss!ɐ~ `֭ = ^oҤIHJJOAAAػw/ qa?o<̟?offzs]|07^@)LtȔEpz1rL:<ʂUO5c k_5k 8 ?G{LAcnݺU}?D^ "_igԩSpuuE#..akҧ||*q?Gpn..xb΀O?mqB@~ʠuGmr-;j]?~{EѱcG|?~GҥKT$%%nnn:u*FΝ;#889o[ DDDot+`yt%=UIΫu8zh#F[gԨQu1'N@޽e0F > Ƣe˖r|"""Lx?+ws4)uH 3TUBKΫuqƆB.5ǏOw(41Vc2Vv.=CU׎Eyo֐t=i{1.V)(JNò@i~Dht @"""-% x`t%qD H+% E$""b]DDDMPhBR|vԟUERtJ Q$~y*ngHQ='AzJbHDDDڣsK(f%é  bT+Uް$""jAVo~O:24\Qd`sQRGsX5aݼͫKE|WGZUGO5DDDMܴZO\ QQ.J5,t~ےnҝ!mHk@"b[j,tĔ~` -u8X֎VbϟGCڌ 2;ggIi)DDD:CZ>udd0qToXI}T=ħ]ӥ @"""ch @)=m9|"HǤV0H("-SG HxؙC&hΓ ̤  @"""04)|0.(*,t 7 J LcHDD&RUx:Ji DDD:pUD/Ҥ @"""&^EnaV`HDDn;sdckRCZ C(.UJI vF0RCcHDDL Xw DQzi,05|F6_'u8$!DDDzÃ\/K I r3qfDXW[3< >ѐTX陷zn L?ȓ8 @"""=@wf(UCiRC`HDDl:bHC'+cW @"""=$x8 ťGDI +Vm۶ĉygt"";YaGvP#ݻOd$&&ѣREDD( 2C +P*/h޼!5WbOmáF`||<""" Am۶rY011A`` W}쫣`UYfi߿?jWWW$$$ؿ?zJ_x1ϟ_nݻaffVch=]\u>\u>[]ryJ.v|McHM>׼<d LAcnݺU}t @@@d2AUٳ1uTtvv6\]]ѿXYYUybš_~044Q|Ms]/s]oMs*x< X&nR-5\&[AcZrh",ZFظ|CCfݦ.}ʗ.}ʷ\ xh;ޒ.?7;Fs՗Ͻ*Z *vvvZܹSU6< Ba*͌$R-X\\\u&QTDDDM9Fn Q˴|HMMERR6/SNņ HII)S~[ʰWA&Gå;V_x [=]cшq=,XGll,Zl)UDDDM)m=)ͱtVꐨhu Q1~FH {Rnk\+ʫ߈>LDDD/-lL]PoJ5DDDA&3nqH8]r=YRC cga;[DDDT)& % @"""P[4@^Q)!u8TXQAkeA^lt$""J lSC9'>:',RV&%,J#X%=*8,JZ(оEJ|x]p$""jxF ͱt( Ա$""j KKRCO U/tjAt @"""{rYGCO Ո%RS`HDDD5VvKMT)q4TW,aga;9G IDAT-P$""32aXgW"r&lXQExK @"""1m9˖& Jjfny< `HDDDagf# w;3iZcHDDD0PV >'aQ-$""ZFus8" DDDT'[59JE|KpXQZ.q4T,"\GT$"":s6EWO[OI7%j =>y(J  @"""z*al 廹H%u8T,X_[7$j = M*%ZO;Y^n+u8T DDD 2Dtpl9ڎ Ջqo#Xh*,^XJ%9Cp ,^S ڍ ՛Ȏ.X}\ϡ @"""7֦ S[ @"""WCN @"""WřN$""zeib~'VbHDDD7N+$""zvƸ[84aHDDD@.ài`Diดpڄ 5?g+ph87!C`cc_|ܲ;vUV $HkCi)'N/L:{ɓ'DHDD{"!iNMػwoXZZ...Āk. "$""=N S{ ZC+ xDDD `۶mYf <<<`bb@sU*ANNNk>+u1Qw(&i$׼:"A;~={{RЊ044({Ĩ?~ZV>QVوAGC޽akk 333`()):tr\y&ѣGJPd2K/իuʾ== ј;wN6xuse?o?: i cʕҘj*b+--R ՖT6nܨ=ΝCxx8d^~._=z w;o"##7nO?k׮aĈ۳gF| T//wxMܹxQTT 4,M  _,|$\nBA+sfffС9cǎ!44puuĉ^5 666033Cxx8.^^kkkرm۶dƍhӦ LLLкukYF 44@SJ1all 777,ZH|̙<==]4oΝ; ݺuÅ 4[v-`ddVZ᫯X.6l؀!C[ >|!!!033 m&N͛=z#11طoߎ@Wga077… ϟǀ`aa9BCC1qD̘1pttļyC X[[k|mmm:999aɒ%{9lذFFFs< ~j{NNNڵ+y9swERR|}}+'''_Đ!Cpl޼„ GEEĉqhYyyyXx16l؀sΡyX~=̙E!%%~!_~wlٲgϞ?8< YZZ"&&ϟǪU~zXNӲep 7P/ۺu+&MiӦٳ7n^u۷Ocǰap 0߿_1ЧOȑ#8t"""PZZ 1c~G|8y$VnUžk.1'Nn:h0w\ <x7t'N۷ocذa}077DZcǰd,X@}'be&jMHH@HHW:dM=|| nj~m` ǭfV?,++K fee[/?^EQKKKś3Ŗ3w4#ֹmܸQT(槦 6;wN (#FG-9x(|?V/MMMN}|bRR]]]oFc| kw)uF-sssDſ<AFާt]cݻkO}߇pV(..8!tRq=11 ,ʮy{|Ν;k311خu*:vˎ][+V@RRѯ_?\.ƍqu,YXhy]uVy׵#+]ₑ#GbȑXp!|}}gaܹu֭[3g"<<;wDHHHU(z{{/yf;Vkd2֭[֭[>|xN]im޶8s= 䡅 GjLllD ȠO{ ,Eأ?wڶm;vLͽ{M6...rJu(xz[>-[bΜ9ܹ3|||4nQ_ڴiCiKHH=xR˖- UYe}'Nq;u .TWN:ܹspww/ݓbU NNNտuaȑ0`_}'%?:sM2O֭[j?DR4FwU,6>jAnk<ۙIQu61cu &୷ނ9RRRիWƛouf͂ \͛' (,,ĉ'L:͛7)~Wh&&&U ̙31c {{.Ν;1cشisc;}t 6 :uB>}}vlٲ{yΞ=ڵoK/;;;#,Yyyy3fL{aРApuuK/L3g 99Y۷"֯_W^yӧO.]M6a5nuwwoݻ6665̺u됔!C /q9^ `͚5x}v<쳕?//O=۷pBݻwX-رc1w\DFFr7jq,>~={ c{zJ^a `0EW&Q;vŋٳ'qoƍ  QƱcbÆ Avu cݺupvvƴiM6>|cʔ)0a:v숄DGGӻHZ | n:lܸQ}뚺ݻqit駟``G}^x#GDNp%ڵVETXXv؁8k׮X|y8;;(--EXX1i$(_˖-C\\\]]#V.]#CHH=m۶UzW|;v,Xe~z899 {ݻwVZi׷o_zenr=i$￯}DZ9߅WvvA9K]eggCP ++ VVV @T";;VVVC1WݥO6\Nqq1bcc1`>r0N?Ă~^&ת~닦FDDD:%$:$icpQDDD$W[39[A)qoK`HDDDR` @"""TYo˙/fm,HR-ť"~Ki$ I4pw[X"q4 I%ܛD}HcH:g޼yرz:** PLsL FqO111?>N> A bbbYYYx뭷мysXYYgӧkի2e8eЫW/'NDnnz5kЪU+8:: /bǍ0dܻw:۷oG`` LLL磤Au0p@M68r.]P#88/_ڵk###j _}/W^011A۶m|>TKJJ HKK0˗/cpppg~~~066;-[~ia~V_yAlLz`?E߇(8ĩSɓODDGGWϟ/]vvv喖j*_+V >ӦM222ÇCE~-?-Z`@rr20tP9s7oơC0a'0qD̛7;bccѫWJs1?~<лwo,\Pc]vaĈ8q"Ο?u!&&-X>Q֭[W_Ÿq0{l8qq֭[1i$L6 gϞŸqc߾}RCB.ѣ0sZOz ={ԩS CDDT'&&bذax嗑y!::Z25QNUƥFQRht蕒|>jSE%Q WZNN |7ӧ`ƍpvv.>w߭:tsT6{ԯ1m4l޼3f̀),,,```GGGz{Err2ܹcccҥKm6x뭷q尴8'|W_}UR ڵksss 8( gժU ìYHHH^gѢE5kF |3f`ܹ^u 6 588 L4 zK"** Ǐ*=KwسgRRR-Z>C|RСC… uVϘ0aBѧOuQO>ATTz| t1"r&B[5:$@Rr ѥK};`ҥ8z(^~e̟?aaaP(شiSkT*[V Q*7n&NXnpIݻ;vy`?~8*z+:1trLLLԯ կ>)rl^E=~wuˮ׬ӱk.,]055ŋ/Xmc{VvXJIDAT|ޓ05Tw. 7-, Nִ"V'bX`hhl\x!!!Un~T*խOBTTzӧcҥ8|0Zl9s樷z>4Z|SNu ʝRʎs9x{{W.]`ѢE޽{+,ڶmGj{rSNpBǬ6mСC5jz^BBڴi-==7oT?r>¤*{ADEEaȐ!T>am۶8tƼsAD+#+=VE/_{8)L%LvF^}W[O@R6udiiѣGc鰵E1w\dr-251w\t~~~(,,Ď;E7ӱi&aΝغuHMMERRZhKKKVZ͛EdddN #>>/2agg3gk׮xwo)))իc\r=z􀁁<RYr8q"u%K 22wָPu8p \]]K/A&̙3HNN.a6OaÆ;l߾[lQ۷/ZjQFaٲe(c̙ȨADDA@ttF$P{?m4>q|XfM"j:R3s|ѿT@xlo߾޽;ڴiq 0{loz\.ǦMƔ)S0at zr xлwoo o|}}/#--M}=\m-XiiiRtoŋѳgO ::NN[[[c˖-۷/v?~-*,Xt9dO9v5jFkrqU(;; YYYXVPPTxxxD}Zʪj\`ٲe3fLiօ> WM9'S\\X 0@zR]O6\7OǿE(B.p&ת~ & N.] ++ ,j#""j Ãiyp3Yt).\###7p&""jhN S~  i@bbaQjZScdžw:,HY#"je;M'5.^@r9qPPPn)Q[J(}ʷ)*"pX[[s" sDQD~~>LMM4FS\u>۔sVU`NNNh޼9qKO#>> }ʷjhhȖ?" F all4?&u!˙ҧ|)W"?M""""7, @""""=kBV]yyy뉘ҧ|ҧ|knMY>đQm@PH$QߧT*qMXZZV{lڵkj\u>\u>\+&"rrrdn^d2ZhQmta檻)_檻)_ZϲH$"""3y͓:}! ?\u>\u>\"BDDDgx Hϰ$"""3, @""""=a̘1)0w\U]TTAxtڵ5k&&& \ <==g5Ruxb͛7Gdd$.\P6/ ?y敋ѱm ~NN75>>pvv=tqINiKնl#Wb$lź.e|eXXײ);vJVa7]'BBRg[%y_g|Kt;z=f>3}ޟ}^^}A$DÇ7>>055;;\SЉVWWcʕ۷/,--agg?=:f\\zx񢹧U}m5-ֶH$w}q̶Z fpM( DEEغu+كUV7 EEE_musa,[ WL&Ð!C鬒/((1c0dd2Z K,A||| gsa…@JJ jjjϟ7//OP޽{@o䝓1V_ YYYyL>;ߴilق;v ++ GVosu.^S"44W\Ahh(\h0m󭨨˗f\| uƏ_;vԺfff1אZzmHɓ'k-ֵk6m"'''1aaa4a„ʨHQxxm#oof˱9_u.]D޽{cbccI,7uzMJ\s ч6&L#Gjч$~rtҥ޸4sœ'OZ {%/ ŋUrmjrT~FBjjjsdagg'''Ν;cߖ|ٳ!k]XP7SSS 6L h>m\.H$BNptt= Z(75mǏq)|'k]/[۷}v̟?_k\`` Emm-w.h޽;)..V_SSO6[M|rO>lmmx$$$F[04h~'$''c޽(..JJJƿ uǏ 3gu}U9[O>mы/ӧcǎD:tfffU]iKB]vi|xb?4wkv߾}1cF׺6^`ѢE ӳgOϏ=ˆ# JѱM=:ʣ'O<#Hk׮͖kSYx1qyh̚%u{̙3HHHй>ֵSŰUk;rη5FAAΞ=?u 0`6!r ^pyyy8|}M_ց5ܴnu@>|Ç00W]RRBfbb+?5Y'%%>>>jHRӧO ͖"",Z 8{,5L&kS5l*j]_X`ر:Ǻ:99A"K;wN h>mE/??gΜiԃ"Bvvջ!}-3}M>}6{!ՋFI<"*WWWJHH "rZbSAAT*=z?&ccc7nвeҒ޽KDDsYXXN7nܠ266Gd$)--MPÊ esݺu+;vnݺE׮]p@1XΝ;AAAAdeeյNmm-988ʕ+Us]I&L&#edOFFFX,ɡiӦLhhSRdd$Rdd$QFFFu[]]MǏ'{{{UUU1^oDD%%%۷I&ѬYȈ233[cJkԶ1\.' ڽ{1 66^bcc[ndllLFooΝH&&&)j06l >--G&&&ԳgO'l[u5#Rƍ̨ٙsKNjaԩdkkKdggG&Mׯ+-uL(//O>׵+k^ˆ迯Yv-I$255CRNN`aÆ)9r\]]ؘW| 4ǩ1^eLLL[nG-?hkC!RDDQQQdnnNeeejЗk1c @cv1c /c1^2c3d1kgxc11c c1X; @ƘD8~xk"//cЩS'0`$=S @X0sLD"- @*++aaa7o"..N8eeeDHKKS"44bb(++V^ ʪ9UuWYYP( 1 @X"v!III;777~7j7}tdgg#)) IIIFhh><@bb"f͚s;vTS&Sƌ;r:c1fB"Ν; bsss899ȑ#*8qǏW[ZZb֬Yx۹HJJ?T T{ɓ~xxx^XXX`ĉ())Q+ݻ76l\zUchh1c4j!c1W֬Yɓ'ʕ+裏0m4*+ - !HZwڅ'N4˗5嗐刎nc{+<{ [liKť(//5 &1@cv?c11c c1X; @cv1c /c1^2c3d1kgxc1 <ܙIENDB`gr-satellites-4.4.0/tests/lockin.py000077500000000000000000000101031414055407700172760ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # # Copyright 2020 Daniel Estevez . # # This is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # This software is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this software; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. import numpy as np import matplotlib.pyplot as plt from gnuradio import gr, digital, blocks, channels, analog from satellites.components.demodulators import bpsk_demodulator, fsk_demodulator RAND_SEED = 42 samp_rate = 48e3 sps = 5 class LockInSim(gr.top_block): def __init__(self, lockin_block, time): gr.top_block.__init__(self) nbits = int(time * samp_rate / sps) self.source = blocks.vector_source_b(list(map(int, np.random.randint(0, 2, nbits))), False) self.lockin_block = lockin_block self.sink = blocks.null_sink(gr.sizeof_float) self.connect(self.source, self.lockin_block, self.sink) class BPSK(gr.hier_block2): def __init__(self, ebn0): gr.hier_block2.__init__(self, 'BPSK', gr.io_signature(1, 1, gr.sizeof_char), gr.io_signature(1, 1, gr.sizeof_float)) f_offset = 50 packet_length = 0.2 self.pack = blocks.pack_k_bits_bb(8) self.bpsk_constellation = digital.constellation_bpsk().base() self.modulator = digital.generic_mod( constellation = self.bpsk_constellation, differential = False, samples_per_symbol = sps, pre_diff_code = True, excess_bw = 0.35, verbose = False, log = False) self.packet_tx = analog.sig_source_f(samp_rate, analog.GR_SQR_WAVE, 1/packet_length, 1, 0, 0) self.packet_tx_c = blocks.float_to_complex(1) self.tx = blocks.multiply_vcc(1) spb = sps self.channel = channels.channel_model(np.sqrt(spb)/10**(ebn0/20), f_offset/samp_rate, 1.0, [0,0,1], RAND_SEED, False) self.demod = bpsk_demodulator(samp_rate/sps, samp_rate, iq = True, dump_path = '/tmp/lockin_bpsk') self.connect(self, self.pack, self.modulator, self.tx, self.channel, self.demod, self) self.connect(self.packet_tx, self.packet_tx_c, (self.tx, 1)) class FSK(gr.hier_block2): def __init__(self, ebn0): gr.hier_block2.__init__(self, 'FSK', gr.io_signature(1, 1, gr.sizeof_char), gr.io_signature(1, 1, gr.sizeof_float)) f_offset = 500 packet_length = 0.2 deviation = 5000 bt = 1 self.pack = blocks.pack_k_bits_bb(8) self.modulator = digital.gfsk_mod( samples_per_symbol = sps, sensitivity = 2*np.pi*deviation/samp_rate, bt = bt, verbose = False, log = False) self.packet_tx = analog.sig_source_f(samp_rate, analog.GR_SQR_WAVE, 1/packet_length, 1, 0, 0) self.packet_tx_c = blocks.float_to_complex(1) self.tx = blocks.multiply_vcc(1) spb = sps self.channel = channels.channel_model(np.sqrt(spb)/10**(ebn0/20), f_offset/samp_rate, 1.0, [0,0,1], RAND_SEED, False) self.demod = fsk_demodulator(samp_rate/sps, samp_rate, deviation = deviation, iq = True, dump_path = '/tmp/lockin_fsk') self.connect(self, self.pack, self.modulator, self.tx, self.channel, self.demod, self) self.connect(self.packet_tx, self.packet_tx_c, (self.tx, 1)) if __name__ == '__main__': fg = LockInSim(BPSK(10), 1) fg.run() fg = LockInSim(FSK(15), 1) fg.run() gr-satellites-4.4.0/tests/reed_solomon.grc000066400000000000000000000163371414055407700206430ustar00rootroot00000000000000 Tue Jan 2 19:38:06 2018 options author Daniel Estevez window_size category [GRC Hier Blocks] comment description _enabled True _coordinate (8, 8) _rotation 0 generate_options no_gui hier_block_src_path .: id reed_solomon max_nouts 0 qt_qss_theme realtime_scheduling run_command {python} -u {filename} run_options run run True thread_safe_setters title Test Reed-Solomon encoding and decoding variable comment _enabled True _coordinate (232, 12) _rotation 0 id samp_rate value 32000 blocks_message_debug alias comment affinity _enabled True _coordinate (1008, 272) _rotation 0 id blocks_message_debug_0 blocks_message_strobe alias comment affinity _enabled True _coordinate (16, 324) _rotation 0 id blocks_message_strobe_0 maxoutbuf 0 msg pmt.intern("TEST") minoutbuf 0 period 1000 blocks_random_pdu alias mask 0xFF comment affinity _enabled True _coordinate (192, 308) _rotation 0 id blocks_random_pdu_0 length_modulo 1 maxsize 223 maxoutbuf 0 minsize 1 minoutbuf 0 satellites_decode_rs basis 0 alias comment affinity _enabled 1 _coordinate (672, 324) _rotation 0 id satellites_decode_rs_0 maxoutbuf 0 minoutbuf 0 verbose True satellites_encode_rs basis 0 alias comment affinity _enabled True _coordinate (408, 332) _rotation 0 id satellites_encode_rs_0 maxoutbuf 0 minoutbuf 0 blocks_message_strobe_0 blocks_random_pdu_0 strobe generate blocks_random_pdu_0 satellites_encode_rs_0 pdus in satellites_decode_rs_0 blocks_message_debug_0 out print_pdu satellites_encode_rs_0 satellites_decode_rs_0 out in gr-satellites-4.4.0/tests/ted-gain/000077500000000000000000000000001414055407700171375ustar00rootroot00000000000000gr-satellites-4.4.0/tests/ted-gain/Makefile000066400000000000000000000005551414055407700206040ustar00rootroot00000000000000GNURADIO_SOURCE=/usr/src/gnuradio-3.8.0.0/ .PHONY: all all: test test: test.cc g++ -Wall -O2 -o test test.cc $(GNURADIO_SOURCE)/gr-digital/lib/timing_error_detector.cc $(GNURADIO_SOURCE)/gr-digital/lib/interpolating_resampler.cc -I$(GNURADIO_SOURCE)/gr-digital/lib/ -I$(GNURADIO_SOURCE)/gr-filter/include -lgnuradio-digital -lgnuradio-filter clean: rm -f test gr-satellites-4.4.0/tests/ted-gain/TED gain analysis.ipynb000066400000000000000000003613151414055407700233320ustar00rootroot00000000000000{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import subprocess" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "def run_test(sps):\n", " # you might need to change this for your system\n", " subprocess.run(['./test', str(sps)],\n", " env = {'LD_LIBRARY_PATH' : '/home/daniel/debian_testing_chroot/usr/lib/x86_64-linux-gnu/'})\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "sps = 4.1\n", "run_test(sps)\n", "interp_output = np.fromfile('interp_output.c64', dtype = 'complex64')\n", "interp_derivative = np.fromfile('interp_derivative.c64', dtype = 'complex64')\n", "ted_error = np.fromfile('ted_error.f32', dtype = 'float32')\n", "n_poly = 100\n", "sym = np.arange(interp_output.size)/(n_poly*sps)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "

" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(sym, interp_output.real)\n", "plt.grid()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(sym, interp_derivative.real)\n", "derivative_scale = np.average(interp_derivative.real[:-1]/np.diff(interp_output.real))\n", "plt.plot(sym[:-1], np.diff(interp_output.real)*derivative_scale)\n", "plt.grid()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "118.28524" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "derivative_scale" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(sym, ted_error)\n", "plt.plot(sym[:-1], 0.5*np.diff(interp_output.real)*derivative_scale*interp_output.real[:-1])\n", "plt.grid()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "def compute_K_ted(sps):\n", " K_ted = np.empty_like(sps)\n", " for j,s in enumerate(sps):\n", " run_test(s)\n", " ted_error = np.fromfile('ted_error.f32', dtype = 'float32')\n", " K_ted[j] = (ted_error[0]-ted_error[1])*n_poly\n", " return K_ted" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "sps = np.arange(2,10.01,0.01)\n", "plt.plot(sps, compute_K_ted(sps)*sps)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "sps = np.arange(2,10.5,0.5)\n", "plt.plot(sps, compute_K_ted(sps)*sps, '.-')" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "sps = np.arange(2,10.5,0.25)\n", "plt.plot(sps, compute_K_ted(sps)*sps, '.-')" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.9" } }, "nbformat": 4, "nbformat_minor": 2 } gr-satellites-4.4.0/tests/ted-gain/test.cc000066400000000000000000000056171414055407700204360ustar00rootroot00000000000000#include #include #include #include #include #include #include "interpolating_resampler.h" #include "timing_error_detector.h" using namespace gr::digital; int main(int argc, char** argv) { std::unique_ptr d_ted; std::unique_ptr d_interp; int n_filters = 16; double rrc_alpha = 0.35; gr_complex interp_output = gr_complex(0.0f, 0.0f); gr_complex interp_derivative = gr_complex(0.0f, 0.0f); int n_poly = 100; float ted_error = 0.0f; float ted_error_old = 0.0f; if (argc != 2) { std::cerr << "Usage: " << argv[0] << " sps" << std::endl; exit(1); } double sps = std::stof(argv[1]); std::vector pulse = gr::filter::firdes::root_raised_cosine( n_poly * sps, n_poly * sps, 1.0, rrc_alpha, ceil(11 * n_poly * sps)); std::vector taps = gr::filter::firdes::root_raised_cosine( n_filters, n_filters, 1.0 / sps, rrc_alpha, ceil(11 * sps * n_filters)); gr_complex* in = new gr_complex[pulse.size()](); d_ted.reset(timing_error_detector::make(TED_SIGNAL_TIMES_SLOPE_ML, nullptr)); d_interp.reset(interpolating_resampler_ccf::make( IR_PFB_MF, d_ted->needs_derivative(), n_filters, taps)); // d_ted->sync_reset(); // d_interp->sync_reset(sps); std::ofstream interp_output_f("interp_output.c64", std::ios::binary); ; std::ofstream interp_derivative_f("interp_derivative.c64", std::ios::binary); ; std::ofstream ted_error_f("ted_error.f32", std::ios::binary); ; const int sweep_n_symbols = 3; for (int ii = 0; ii < sweep_n_symbols * n_poly * sps; ii++) { for (int j = 0; j < 11 * sps; j++) { int idx = n_poly * j + ii + round(n_poly * fmod(sps, 1.0)); if (idx < static_cast(pulse.size())) { in[j] = gr_complex(pulse[idx], 0.0f); } } interp_output = d_interp->interpolate(in, d_interp->phase_wrapped()); // std::cout << "interp_output = " << interp_output << std::endl; interp_output_f.write((char*)&interp_output, sizeof(interp_output)); interp_derivative = d_interp->differentiate(in, d_interp->phase_wrapped()); // std::cout << "interp_derivative = " << interp_derivative << std::endl; interp_derivative_f.write((char*)&interp_derivative, sizeof(interp_derivative)); d_ted->input(interp_output, interp_derivative); ted_error = d_ted->error(); // std::cout << "ted_error = " << ted_error << std::endl; ted_error_f.write((char*)&ted_error, sizeof(ted_error)); if (ii == 1) { std::cout << "Gain " << (ted_error_old - ted_error) * n_poly << " sample^{-1}" << std::endl; } ted_error_old = ted_error; } return 0; } gr-satellites-4.4.0/tests/varlen_packet_block_qa.grc000066400000000000000000000624371414055407700226310ustar00rootroot00000000000000 Mon Jul 17 12:48:55 2017 options author window_size category [GRC Hier Blocks] comment description Test out the framing and tagging variable length packet blocks _enabled True _coordinate (8, 8) _rotation 0 generate_options no_gui hier_block_src_path .: id varlen_packet_test max_nouts 1000 qt_qss_theme realtime_scheduling run_command {python} -u {filename} run_options run run True thread_safe_setters title variable comment _enabled 1 _coordinate (528, 76) _rotation 0 id binary value "".join([bin(int(hex_bits[2*i:(2*i+2)], 16))[2:].zfill(8) for i in range(len(hex_bits)/2)]) variable comment _enabled 1 _coordinate (336, 76) _rotation 0 id hex_bits value hex_space.replace(' ','') variable comment _enabled 1 _coordinate (712, 76) _rotation 0 id hex_space value '94 50 73 00 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f 60 61 62 63' variable comment _enabled 1 _coordinate (472, 212) _rotation 0 id num_packets value 5 variable comment _enabled 1 _coordinate (712, 12) _rotation 0 id packet value [int(x) for x in list(binary)] variable comment _enabled True _coordinate (336, 12) _rotation 0 id preamble value (1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0) variable comment _enabled True _coordinate (528, 12) _rotation 0 id sync_word value (1,1,0,1,0,0,1,1,0,0,0,0,1,0,1,1,0,1,0,1,0,0,0,1,1,1,0,1,1,1,1,0) blocks_head alias comment affinity _enabled True _coordinate (464, 284) _rotation 0 id blocks_head_0 maxoutbuf 0 minoutbuf 0 num_items len(packet)*num_packets type byte vlen 1 blocks_message_debug alias comment affinity _enabled 1 _coordinate (832, 728) _rotation 180 id blocks_message_debug_0_0 blocks_message_strobe alias comment affinity _enabled 1 _coordinate (64, 276) _rotation 0 id blocks_message_strobe_0 maxoutbuf 0 msg pmt.cons(pmt.PMT_NIL, pmt.init_u8vector(len(packet), packet)) minoutbuf 0 period 100 blocks_pdu_to_tagged_stream alias comment affinity _enabled 1 _coordinate (240, 284) _rotation 0 id blocks_pdu_to_tagged_stream_0 type byte tag packet_len maxoutbuf 0 minoutbuf 0 blocks_tag_debug alias comment affinity display True _enabled 1 _coordinate (496, 340) _rotation 180 id blocks_tag_debug_0 type byte filter "" name T0 num_inputs 1 vlen 1 blocks_tag_debug alias comment affinity display True _enabled 1 _coordinate (776, 444) _rotation 0 id blocks_tag_debug_0_0 type byte filter "" name T2 num_inputs 1 vlen 1 blocks_tag_debug alias comment affinity display True _enabled 1 _coordinate (992, 196) _rotation 0 id blocks_tag_debug_0_0_0 type byte filter "" name T1 num_inputs 1 vlen 1 blocks_tagged_stream_multiply_length alias comment affinity _enabled 1 _coordinate (984, 544) _rotation 0 id blocks_tagged_stream_multiply_length_0_0_0 type byte c 1/8.0 lengthtagname packet_len maxoutbuf 0 minoutbuf 0 vlen 1 blocks_tagged_stream_to_pdu alias comment affinity _enabled 1 _coordinate (1008, 660) _rotation 180 id blocks_tagged_stream_to_pdu_0_0_0 type byte tag packet_len maxoutbuf 0 minoutbuf 0 blocks_unpacked_to_packed_xx bits_per_chunk 1 alias comment affinity _enabled 1 endianness gr.GR_MSB_FIRST _coordinate (776, 532) _rotation 0 id blocks_unpacked_to_packed_xx_0_0_0 maxoutbuf 0 minoutbuf 0 num_ports 1 type byte digital_correlate_access_code_tag_bb access_code "".join([str(x) for x in sync_word]) alias comment affinity _enabled 1 _coordinate (232, 524) _rotation 0 id digital_correlate_access_code_tag_bb_0_0 maxoutbuf 0 minoutbuf 0 tagname syncword threshold 1 import alias comment _enabled True _coordinate (208, 12) _rotation 0 id pi_0 import import pmt satellites_print_header alias comment affinity _enabled 1 _coordinate (560, 664) _rotation 180 id satellites_print_header_0_0 satellites_swap_header alias comment affinity _enabled 1 _coordinate (744, 664) _rotation 180 id satellites_swap_header_0_0 maxoutbuf 0 minoutbuf 0 satellites_varlen_packet_framer alias comment affinity _enabled 1 endianness gr.GR_MSB_FIRST _coordinate (712, 256) _rotation 0 use_golay True id satellites_varlen_packet_framer_1 maxoutbuf 0 minoutbuf 0 length_field_size 24 packetlen_tag packet_len sync_word preamble+sync_word satellites_varlen_packet_tagger alias comment affinity _enabled 1 endianness gr.GR_MSB_FIRST _coordinate (488, 504) _rotation 0 use_golay True id satellites_varlen_packet_tagger_0_0 mtu 255*8 maxoutbuf 0 minoutbuf 0 length_field_size 12 packetlen_tag packet_len syncword_tag syncword virtual_sink comment _enabled 1 _coordinate (984, 284) _rotation 0 id virtual_sink_0 stream_id 0 virtual_source comment _enabled 1 _coordinate (48, 540) _rotation 0 id virtual_source_0 stream_id 0 blocks_head_0 blocks_tag_debug_0 0 0 blocks_head_0 satellites_varlen_packet_framer_1 0 0 blocks_message_strobe_0 blocks_pdu_to_tagged_stream_0 strobe pdus blocks_pdu_to_tagged_stream_0 blocks_head_0 0 0 blocks_tagged_stream_multiply_length_0_0_0 blocks_tagged_stream_to_pdu_0_0_0 0 0 blocks_tagged_stream_to_pdu_0_0_0 blocks_message_debug_0_0 pdus print_pdu blocks_tagged_stream_to_pdu_0_0_0 satellites_swap_header_0_0 pdus in blocks_unpacked_to_packed_xx_0_0_0 blocks_tagged_stream_multiply_length_0_0_0 0 0 digital_correlate_access_code_tag_bb_0_0 satellites_varlen_packet_tagger_0_0 0 0 satellites_swap_header_0_0 satellites_print_header_0_0 out in satellites_varlen_packet_framer_1 blocks_tag_debug_0_0_0 0 0 satellites_varlen_packet_framer_1 virtual_sink_0 0 0 satellites_varlen_packet_tagger_0_0 blocks_tag_debug_0_0 0 0 satellites_varlen_packet_tagger_0_0 blocks_unpacked_to_packed_xx_0_0_0 0 0 virtual_source_0 digital_correlate_access_code_tag_bb_0_0 0 0 gr-satellites-4.4.0/tools/000077500000000000000000000000001414055407700154455ustar00rootroot00000000000000gr-satellites-4.4.0/tools/clang_format.py000077500000000000000000000641561414055407700204720ustar00rootroot00000000000000#!/usr/bin/env python # Copyright (C) 2015,2016 MongoDB Inc. # Copyright (C) 2018 Free Software Foundation # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License, version 3, # as published by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . """ A script that provides: 1. Validates clang-format is the right version. 2. Has support for checking which files are to be checked. 3. Supports validating and updating a set of files to the right coding style. """ import queue import difflib import glob import itertools import os import re import subprocess from subprocess import check_output, CalledProcessError import sys import threading import time from distutils import spawn from argparse import ArgumentParser from multiprocessing import cpu_count # Get relative imports to work when # the package is not installed on the PYTHONPATH. if __name__ == "__main__" and __package__ is None: sys.path.append( os.path.dirname( os.path.dirname(os.path.abspath(os.path.realpath(__file__))))) ############################################################################## # # Constants for clang-format # # # Expected version of clang-format CLANG_FORMAT_VERSION = "10.0.1" CLANG_FORMAT_SHORT_VERSION = "10.0" # Name of clang-format as a binary CLANG_FORMAT_PROGNAME = "clang-format" # only valid c/c++ implementations and headers files_match = re.compile('\\.(h|cc|c)$') ############################################################################## def callo(args): """Call a program, and capture its output """ return check_output(args).decode('utf-8') class ClangFormat(object): """Class encapsulates finding a suitable copy of clang-format, and linting/formatting an individual file """ def __init__(self, path): self.path = None clang_format_progname_ext = "" if sys.platform == "win32": clang_format_progname_ext += ".exe" # Check the clang-format the user specified if path is not None: if os.path.isfile(path): self.path = path else: print("WARNING: Could not find clang-format %s" % (path)) # Check the users' PATH environment variable now if self.path is None: # Check for various versions staring with binaries with version specific suffixes in the # user's path programs = [ CLANG_FORMAT_PROGNAME + "-" + CLANG_FORMAT_VERSION, CLANG_FORMAT_PROGNAME + "-" + CLANG_FORMAT_SHORT_VERSION, CLANG_FORMAT_PROGNAME, ] if sys.platform == "win32": for i in range(len(programs)): programs[i] += '.exe' for program in programs: self.path = spawn.find_executable(program) if self.path: if not self._validate_version(): self.path = None else: break # If Windows, try to grab it from Program Files # Check both native Program Files and WOW64 version if sys.platform == "win32": programfiles = [ os.environ["ProgramFiles"], os.environ["ProgramFiles(x86)"], ] for programfile in programfiles: win32bin = os.path.join(programfile, "LLVM\\bin\\clang-format.exe") if os.path.exists(win32bin): self.path = win32bin break if self.path is None or not os.path.isfile( self.path) or not self._validate_version(): print( "ERROR:clang-format not found in $PATH, please install clang-format " + CLANG_FORMAT_VERSION) raise NameError("No suitable clang-format found") self.print_lock = threading.Lock() def _validate_version(self): """Validate clang-format is the expected version """ cf_version = callo([self.path, "--version"]) if CLANG_FORMAT_VERSION in cf_version: return True print( "WARNING: clang-format found in path, but incorrect version found at " + self.path + " with version: " + cf_version) return False def _lint(self, file_name, print_diff): """Check the specified file has the correct format """ with open(file_name, 'rb') as original_text: original_file = original_text.read().decode("utf-8") # Get formatted file as clang-format would format the file formatted_file = callo([self.path, "--style=file", file_name]) if original_file != formatted_file: if print_diff: original_lines = original_file.splitlines() formatted_lines = formatted_file.splitlines() result = difflib.unified_diff(original_lines, formatted_lines) # Take a lock to ensure diffs do not get mixed when printed to the screen with self.print_lock: print("ERROR: Found diff for " + file_name) print("To fix formatting errors, run %s --style=file -i %s" % (self.path, file_name)) for line in result: print(line.rstrip()) return False return True def lint(self, file_name): """Check the specified file has the correct format """ return self._lint(file_name, print_diff=True) def format(self, file_name): """Update the format of the specified file """ if self._lint(file_name, print_diff=False): return True # Update the file with clang-format formatted = not subprocess.call( [self.path, "--style=file", "-i", file_name]) # Version 3.8 generates files like foo.cpp~RF83372177.TMP when it formats foo.cpp # on Windows, we must clean these up if sys.platform == "win32": glob_pattern = file_name + "*.TMP" for fglob in glob.glob(glob_pattern): os.unlink(fglob) return formatted def parallel_process(items, func): """Run a set of work items to completion """ try: cpus = cpu_count() except NotImplementedError: cpus = 1 task_queue = queue.Queue() # Use a list so that worker function will capture this variable pp_event = threading.Event() pp_result = [True] def worker(): """Worker thread to process work items in parallel """ while not pp_event.is_set(): try: item = task_queue.get_nowait() except queue.Empty: # if the queue is empty, exit the worker thread pp_event.set() return try: ret = func(item) finally: # Tell the queue we finished with the item task_queue.task_done() # Return early if we fail, and signal we are done if not ret: # with pp_lock: # pp_result[0] = False print("{} failed on item {}".format(func, item)) # pp_event.set() return # Enqueue all the work we want to process for item in items: task_queue.put(item) # Process all the work threads = [] for cpu in range(cpus): thread = threading.Thread(target=worker) thread.daemon = True thread.start() threads.append(thread) # Wait for the threads to finish # Loop with a timeout so that we can process Ctrl-C interrupts # Note: On Python 2.6 wait always returns None so we check is_set also, # This works because we only set the event once, and never reset it while not pp_event.wait(1) and not pp_event.is_set(): time.sleep(1) for thread in threads: thread.join() return pp_result[0] def get_base_dir(): """Get the base directory for mongo repo. This script assumes that it is running in buildscripts/, and uses that to find the base directory. """ try: return subprocess.check_output( ['git', 'rev-parse', '--show-toplevel']).rstrip().decode('utf-8') except CalledProcessError: # We are not in a valid git directory. Use the script path instead. return os.path.dirname(os.path.dirname(os.path.realpath(__file__))) def get_repos(): """Get a list of Repos to check clang-format for """ base_dir = get_base_dir() # Get a list of modules # GNU Radio is a single-git repo # paths = [os.path.join(base_dir, MODULE_DIR, m) for m in gnuradio_modules] paths = [base_dir] return [Repo(p) for p in paths] class Repo(object): """Class encapsulates all knowledge about a git repository, and its metadata to run clang-format. """ def __init__(self, path): self.path = path self.root = self._get_root() def _callgito(self, args): """Call git for this repository, and return the captured output """ # These two flags are the equivalent of -C in newer versions of Git # but we use these to support versions pre 1.8.5 but it depends on the command # and what the current directory is return callo([ 'git', '--git-dir', os.path.join(self.path, ".git"), '--work-tree', self.path ] + args) def _callgit(self, args): """Call git for this repository without capturing output This is designed to be used when git returns non-zero exit codes. """ # These two flags are the equivalent of -C in newer versions of Git # but we use these to support versions pre 1.8.5 but it depends on the command # and what the current directory is return subprocess.call([ 'git', '--git-dir', os.path.join(self.path, ".git"), '--work-tree', self.path ] + args) def _get_local_dir(self, path): """Get a directory path relative to the git root directory """ if os.path.isabs(path): return os.path.relpath(path, self.root) return path def get_candidates(self, candidates): """Get the set of candidate files to check by querying the repository Returns the full path to the file for clang-format to consume. """ if candidates is not None and len(candidates) > 0: candidates = [self._get_local_dir(f) for f in candidates] valid_files = list( set(candidates).intersection(self.get_candidate_files())) else: valid_files = list(self.get_candidate_files()) # Get the full file name here valid_files = [ os.path.normpath(os.path.join(self.root, f)) for f in valid_files ] return valid_files def get_root(self): """Get the root directory for this repository """ return self.root def _get_root(self): """Gets the root directory for this repository from git """ gito = self._callgito(['rev-parse', '--show-toplevel']) return gito.rstrip() def _git_ls_files(self, cmd): """Run git-ls-files and filter the list of files to a valid candidate list """ gito = self._callgito(cmd) # This allows us to pick all the interesting files # in the mongo and mongo-enterprise repos file_list = [ line.rstrip() for line in gito.splitlines() # TODO: exclude directories if needed # We don't want to lint volk if not "volk" in line ] file_list = [a for a in file_list if files_match.search(a)] return file_list def get_candidate_files(self): """Query git to get a list of all files in the repo to consider for analysis """ return self._git_ls_files(["ls-files", "--cached"]) def get_working_tree_candidate_files(self): """Query git to get a list of all files in the working tree to consider for analysis """ return self._git_ls_files(["ls-files", "--cached", "--others"]) def get_working_tree_candidates(self): """Get the set of candidate files to check by querying the repository Returns the full path to the file for clang-format to consume. """ valid_files = list(self.get_working_tree_candidate_files()) # Get the full file name here valid_files = [ os.path.normpath(os.path.join(self.root, f)) for f in valid_files ] return valid_files def is_detached(self): """Is the current working tree in a detached HEAD state? """ # symbolic-ref returns 1 if the repo is in a detached HEAD state return self._callgit(["symbolic-ref", "--quiet", "HEAD"]) def is_ancestor(self, parent, child): """Is the specified parent hash an ancestor of child hash? """ # merge base returns 0 if parent is an ancestor of child return not self._callgit( ["merge-base", "--is-ancestor", parent, child]) def is_commit(self, sha1): """Is the specified hash a valid git commit? """ # cat-file -e returns 0 if it is a valid hash return not self._callgit(["cat-file", "-e", "%s^{commit}" % sha1]) def is_working_tree_dirty(self): """Does the current working tree have changes? """ # diff returns 1 if the working tree has local changes return self._callgit(["diff", "--quiet"]) def does_branch_exist(self, branch): """Does the branch exist? """ # rev-parse returns 0 if the branch exists return not self._callgit(["rev-parse", "--verify", branch]) def get_merge_base(self, commit): """Get the merge base between 'commit' and HEAD """ return self._callgito(["merge-base", "HEAD", commit]).rstrip() def get_branch_name(self): """Get the current branch name, short form This returns "master", not "refs/head/master" Will not work if the current branch is detached """ branch = self.rev_parse(["--abbrev-ref", "HEAD"]) if branch == "HEAD": raise ValueError("Branch is currently detached") return branch def add(self, command): """git add wrapper """ return self._callgito(["add"] + command) def checkout(self, command): """git checkout wrapper """ return self._callgito(["checkout"] + command) def commit(self, command): """git commit wrapper """ return self._callgito(["commit"] + command) def diff(self, command): """git diff wrapper """ return self._callgito(["diff"] + command) def log(self, command): """git log wrapper """ return self._callgito(["log"] + command) def rev_parse(self, command): """git rev-parse wrapper """ return self._callgito(["rev-parse"] + command).rstrip() def rm(self, command): """git rm wrapper """ return self._callgito(["rm"] + command) def show(self, command): """git show wrapper """ return self._callgito(["show"] + command) def get_list_from_lines(lines): """"Convert a string containing a series of lines into a list of strings """ return [line.rstrip() for line in lines.splitlines()] def get_files_to_check_working_tree(): """Get a list of files to check form the working tree. This will pick up files not managed by git. """ repos = get_repos() valid_files = list( itertools.chain.from_iterable( [r.get_working_tree_candidates() for r in repos])) return valid_files def get_files_to_check(): """Get a list of files that need to be checked based on which files are managed by git. """ repos = get_repos() valid_files = list( itertools.chain.from_iterable([r.get_candidates(None) for r in repos])) return valid_files def get_files_to_check_from_patch(patches): """ Take a patch file generated by git diff, and scan the patch for a list of files to check. """ candidates = [] # Get a list of candidate_files check = re.compile( r"^diff --git a\/([a-z\/\.\-_0-9]+) b\/[a-z\/\.\-_0-9]+") candidates = [] for patch in patches: if patch == "-": infile = sys.stdin else: infile = open(patch, "rb") candidates.extend([ check.match(line).group(1) for line in infile.readlines() if check.match(line) ]) infile.close() repos = get_repos() valid_files = list( itertools.chain.from_iterable( [r.get_candidates(candidates) for r in repos])) return valid_files def _lint_files(clang_format, files): """Lint a list of files with clang-format """ try: clang_format = ClangFormat(clang_format) except NameError as e: print(e) return False lint_clean = parallel_process([os.path.abspath(f) for f in files], clang_format.lint) if not lint_clean: print("ERROR: Code Style does not match coding style") sys.exit(1) def lint(args): """Lint files command entry point """ if args.patch and args.all: print("Only specify patch or all, but not both!") return False if args.patch: files = get_files_to_check_from_patch(args.patch) elif args.all: files = get_files_to_check_working_tree() else: files = get_files_to_check() if files: _lint_files(args.clang_format, files) return True def _format_files(clang_format, files): """Format a list of files with clang-format """ try: clang_format = ClangFormat(clang_format) except NameError as e: print(e) return (False) format_clean = parallel_process([os.path.abspath(f) for f in files], clang_format.format) if not format_clean: print("ERROR: failed to format files") sys.exit(1) def _reformat_branch(clang_format, commit_prior_to_reformat, commit_after_reformat): """Reformat a branch made before a clang-format run """ try: clang_format = ClangFormat(clang_format) except NameError as e: print(e) return False if os.getcwd() != get_base_dir(): raise ValueError("reformat-branch must be run from the repo root") repo = Repo(get_base_dir()) # Validate that user passes valid commits if not repo.is_commit(commit_prior_to_reformat): raise ValueError( "Commit Prior to Reformat '%s' is not a valid commit in this repo" % commit_prior_to_reformat) if not repo.is_commit(commit_after_reformat): raise ValueError( "Commit After Reformat '%s' is not a valid commit in this repo" % commit_after_reformat) if not repo.is_ancestor(commit_prior_to_reformat, commit_after_reformat): raise ValueError(( "Commit Prior to Reformat '%s' is not a valid ancestor of Commit After" + " Reformat '%s' in this repo") % (commit_prior_to_reformat, commit_after_reformat)) # Validate the user is on a local branch that has the right merge base if repo.is_detached(): raise ValueError( "You must not run this script in a detached HEAD state") # Validate the user has no pending changes if repo.is_working_tree_dirty(): raise ValueError( "Your working tree has pending changes. You must have a clean working tree before proceeding." ) merge_base = repo.get_merge_base(commit_prior_to_reformat) if not merge_base == commit_prior_to_reformat: raise ValueError( "Please rebase to '%s' and resolve all conflicts before running this script" % (commit_prior_to_reformat)) # We assume the target branch is master, it could be a different branch if needed for testing merge_base = repo.get_merge_base("master") if not merge_base == commit_prior_to_reformat: raise ValueError( "This branch appears to already have advanced too far through the merge process" ) # Everything looks good so lets start going through all the commits branch_name = repo.get_branch_name() new_branch = "%s-reformatted" % branch_name if repo.does_branch_exist(new_branch): raise ValueError( "The branch '%s' already exists. Please delete the branch '%s', or rename the current branch." % (new_branch, new_branch)) commits = get_list_from_lines( repo.log([ "--reverse", "--pretty=format:%H", "%s..HEAD" % commit_prior_to_reformat ])) previous_commit_base = commit_after_reformat # Go through all the commits the user made on the local branch and migrate to a new branch # that is based on post_reformat commits instead for commit_hash in commits: repo.checkout(["--quiet", commit_hash]) deleted_files = [] # Format each of the files by checking out just a single commit from the user's branch commit_files = get_list_from_lines(repo.diff(["HEAD~", "--name-only"])) for commit_file in commit_files: # Format each file needed if it was not deleted if not os.path.exists(commit_file): print( "Skipping file '%s' since it has been deleted in commit '%s'" % (commit_file, commit_hash)) deleted_files.append(commit_file) continue if files_match.search(commit_file): clang_format.format(commit_file) else: print( "Skipping file '%s' since it is not a file clang_format should format" % commit_file) # Check if anything needed reformatting, and if so amend the commit if not repo.is_working_tree_dirty(): print("Commit %s needed no reformatting" % commit_hash) else: repo.commit(["--all", "--amend", "--no-edit"]) # Rebase our new commit on top the post-reformat commit previous_commit = repo.rev_parse(["HEAD"]) # Checkout the new branch with the reformatted commits # Note: we will not name as a branch until we are done with all commits on the local branch repo.checkout(["--quiet", previous_commit_base]) # Copy each file from the reformatted commit on top of the post reformat diff_files = get_list_from_lines( repo.diff([ "%s~..%s" % (previous_commit, previous_commit), "--name-only" ])) for diff_file in diff_files: # If the file was deleted in the commit we are reformatting, we need to delete it again if diff_file in deleted_files: repo.rm([diff_file]) continue if "volk" in diff_file: continue # The file has been added or modified, continue as normal file_contents = repo.show(["%s:%s" % (previous_commit, diff_file)]) root_dir = os.path.dirname(diff_file) if root_dir and not os.path.exists(root_dir): os.makedirs(root_dir) with open(diff_file, "w+") as new_file: new_file.write(file_contents) repo.add([diff_file]) # Create a new commit onto clang-formatted branch repo.commit(["--reuse-message=%s" % previous_commit]) previous_commit_base = repo.rev_parse(["HEAD"]) # Create a new branch to mark the hashes we have been using repo.checkout(["-b", new_branch]) print("reformat-branch is done running.\n") print( "A copy of your branch has been made named '%s', and formatted with clang-format.\n" % new_branch) print("The original branch has been left unchanged.") print("The next step is to rebase the new branch on 'master'.") def format_func(args): """Format files command entry point """ if args.all and args.branch is not None: print("Only specify branch or all, but not both!") return False if not args.branch: if args.all: files = get_files_to_check_working_tree() else: files = get_files_to_check() _format_files(args.clang_format, files) else: _reformat_branch(args.clang_format, *args.branch) def parse_args(): """ Parse commandline arguments """ parser = ArgumentParser() parser.add_argument( "-c", "--clang-format", default="clang-format", help="clang-format binary") subparsers = parser.add_subparsers(help="clang-format action", dest="action") subparsers.required = True lint_parser = subparsers.add_parser( "lint", help="Lint-only (no modifications)") lint_parser.add_argument("-a", "--all", action="store_true") lint_parser.add_argument("-p", "--patch", help="patch to check") lint_parser.set_defaults(func=lint) format_parser = subparsers.add_parser( "format", help="Format files in place") format_parser.add_argument( "-b", "--branch", nargs=2, default=None, help="specify the commit hash before the format and after the format has been done" ) format_parser.add_argument("-a", "--all", action="store_true") format_parser.set_defaults(func=format_func) return parser.parse_args() def main(): """Main entry point """ args = parse_args() if hasattr(args, "func"): args.func(args) if __name__ == "__main__": main()