commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] [gnuradio] 03/08: gr-dtv: Add DVB-S2X VL-SNR modulatio


From: git
Subject: [Commit-gnuradio] [gnuradio] 03/08: gr-dtv: Add DVB-S2X VL-SNR modulation and framing for AMSAT.
Date: Sat, 25 Jun 2016 19:08:00 +0000 (UTC)

This is an automated email from the git hooks/post-receive script.

jcorgan pushed a commit to branch master
in repository gnuradio.

commit 7abec697352c4db9700b42a336774d63b6b62bab
Author: Ron Economos <address@hidden>
Date:   Fri Jun 24 15:23:55 2016 -0700

    gr-dtv: Add DVB-S2X VL-SNR modulation and framing for AMSAT.
---
 gr-dtv/examples/dvbs2_tx.grc                  | 108 +++-
 gr-dtv/grc/dtv_dvb_bbheader_bb.xml            |  10 +-
 gr-dtv/grc/dtv_dvb_bbscrambler_bb.xml         |  10 +-
 gr-dtv/grc/dtv_dvb_bch_bb.xml                 |  10 +-
 gr-dtv/grc/dtv_dvb_ldpc_bb.xml                |  10 +-
 gr-dtv/grc/dtv_dvbs2_interleaver_bb.xml       | 245 +++++++-
 gr-dtv/grc/dtv_dvbs2_modulator_bc.xml         | 204 +++++-
 gr-dtv/grc/dtv_dvbs2_physical_cc.xml          | 151 ++++-
 gr-dtv/include/gnuradio/dtv/dvb_config.h      |   2 +
 gr-dtv/lib/dvb/dvb_defines.h                  |  12 +
 gr-dtv/lib/dvb/dvb_ldpc_bb_impl.cc            |  42 +-
 gr-dtv/lib/dvbs2/dvbs2_interleaver_bb_impl.cc |  64 +-
 gr-dtv/lib/dvbs2/dvbs2_modulator_bc_impl.cc   |  21 +
 gr-dtv/lib/dvbs2/dvbs2_modulator_bc_impl.h    |   3 +-
 gr-dtv/lib/dvbs2/dvbs2_physical_cc_impl.cc    | 872 ++++++++++++++++++++++++--
 gr-dtv/lib/dvbs2/dvbs2_physical_cc_impl.h     |  11 +-
 16 files changed, 1628 insertions(+), 147 deletions(-)

diff --git a/gr-dtv/examples/dvbs2_tx.grc b/gr-dtv/examples/dvbs2_tx.grc
index c6de308..99c797d 100644
--- a/gr-dtv/examples/dvbs2_tx.grc
+++ b/gr-dtv/examples/dvbs2_tx.grc
@@ -244,7 +244,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(784, 547)</value>
+      <value>(776, 548)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -291,7 +291,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(176, 43)</value>
+      <value>(176, 36)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -326,7 +326,7 @@
     <key>dtv_dvb_bbheader_bb</key>
     <param>
       <key>mode</key>
-      <value>FECFRAME_NORMAL</value>
+      <value>INPUTMODE_NORMAL</value>
     </param>
     <param>
       <key>alias</key>
@@ -346,6 +346,10 @@
     </param>
     <param>
       <key>rate4</key>
+      <value>C1_5_MEDIUM</value>
+    </param>
+    <param>
+      <key>rate5</key>
       <value>C1_4</value>
     </param>
     <param>
@@ -365,12 +369,16 @@
       <value>168</value>
     </param>
     <param>
-      <key>framesize</key>
+      <key>framesize1</key>
+      <value>FECFRAME_NORMAL</value>
+    </param>
+    <param>
+      <key>framesize2</key>
       <value>FECFRAME_NORMAL</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(400, 27)</value>
+      <value>(408, 24)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -425,6 +433,10 @@
     </param>
     <param>
       <key>rate4</key>
+      <value>C1_5_MEDIUM</value>
+    </param>
+    <param>
+      <key>rate5</key>
       <value>C1_4</value>
     </param>
     <param>
@@ -440,12 +452,16 @@
       <value>True</value>
     </param>
     <param>
-      <key>framesize</key>
+      <key>framesize1</key>
+      <value>FECFRAME_NORMAL</value>
+    </param>
+    <param>
+      <key>framesize2</key>
       <value>FECFRAME_NORMAL</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(608, 35)</value>
+      <value>(624, 28)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -488,6 +504,10 @@
     </param>
     <param>
       <key>rate4</key>
+      <value>C1_5_MEDIUM</value>
+    </param>
+    <param>
+      <key>rate5</key>
       <value>C1_4</value>
     </param>
     <param>
@@ -503,12 +523,16 @@
       <value>True</value>
     </param>
     <param>
-      <key>framesize</key>
+      <key>framesize1</key>
+      <value>FECFRAME_NORMAL</value>
+    </param>
+    <param>
+      <key>framesize2</key>
       <value>FECFRAME_NORMAL</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(824, 35)</value>
+      <value>(848, 28)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -551,6 +575,10 @@
     </param>
     <param>
       <key>rate4</key>
+      <value>C1_5_MEDIUM</value>
+    </param>
+    <param>
+      <key>rate5</key>
       <value>C1_4</value>
     </param>
     <param>
@@ -570,12 +598,16 @@
       <value>True</value>
     </param>
     <param>
-      <key>framesize</key>
+      <key>framesize1</key>
+      <value>FECFRAME_NORMAL</value>
+    </param>
+    <param>
+      <key>framesize2</key>
       <value>FECFRAME_NORMAL</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(1048, 27)</value>
+      <value>(1064, 24)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -605,8 +637,16 @@
       <value></value>
     </param>
     <param>
-      <key>rate</key>
-      <value>C_OTHER</value>
+      <key>rate1</key>
+      <value>C9_10</value>
+    </param>
+    <param>
+      <key>rate2</key>
+      <value>C1_5_MEDIUM</value>
+    </param>
+    <param>
+      <key>rate3</key>
+      <value>C1_4</value>
     </param>
     <param>
       <key>comment</key>
@@ -630,7 +670,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(192, 235)</value>
+      <value>(184, 220)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -660,10 +700,18 @@
       <value></value>
     </param>
     <param>
-      <key>rate</key>
+      <key>rate1</key>
       <value>C9_10</value>
     </param>
     <param>
+      <key>rate2</key>
+      <value>C1_5_MEDIUM</value>
+    </param>
+    <param>
+      <key>rate3</key>
+      <value>C1_4</value>
+    </param>
+    <param>
       <key>comment</key>
       <value></value>
     </param>
@@ -685,7 +733,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(472, 227)</value>
+      <value>(448, 216)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -711,10 +759,18 @@
       <value></value>
     </param>
     <param>
-      <key>rate</key>
+      <key>rate1</key>
       <value>C9_10</value>
     </param>
     <param>
+      <key>rate2</key>
+      <value>C1_5_MEDIUM</value>
+    </param>
+    <param>
+      <key>rate3</key>
+      <value>C1_4</value>
+    </param>
+    <param>
       <key>comment</key>
       <value></value>
     </param>
@@ -736,7 +792,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(192, 443)</value>
+      <value>(184, 432)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -787,7 +843,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(472, 459)</value>
+      <value>(464, 444)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1742,7 +1798,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(1040, 243)</value>
+      <value>(1040, 228)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -2509,7 +2565,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(1040, 427)</value>
+      <value>(1048, 416)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -2636,6 +2692,10 @@
       <value>False</value>
     </param>
     <param>
+      <key>hide_lo_controls</key>
+      <value>True</value>
+    </param>
+    <param>
       <key>stream_args</key>
       <value></value>
     </param>
@@ -2696,7 +2756,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(784, 203)</value>
+      <value>(776, 196)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -2720,7 +2780,7 @@
     </param>
     <param>
       <key>ref_level</key>
-      <value>0</value>
+      <value>-20</value>
     </param>
     <param>
       <key>ref_scale</key>
@@ -2744,7 +2804,7 @@
     </param>
     <param>
       <key>win_size</key>
-      <value></value>
+      <value>800,600</value>
     </param>
     <param>
       <key>win</key>
diff --git a/gr-dtv/grc/dtv_dvb_bbheader_bb.xml 
b/gr-dtv/grc/dtv_dvb_bbheader_bb.xml
index c3b78bf..b18b87b 100644
--- a/gr-dtv/grc/dtv_dvb_bbheader_bb.xml
+++ b/gr-dtv/grc/dtv_dvb_bbheader_bb.xml
@@ -189,11 +189,6 @@ $rolloff.val, $mode.val, $inband.val, $fecblocks, 
$tsrate)</make>
     <type>enum</type>
     <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize2.hide_normal 
else 'all'</hide>
     <option>
-      <name>2/9 VL-SNR</name>
-      <key>C2_9_VLSNR</key>
-      <opt>val:dtv.C2_9_VLSNR</opt>
-    </option>
-    <option>
       <name>1/4</name>
       <key>C1_4</key>
       <opt>val:dtv.C1_4</opt>
@@ -249,6 +244,11 @@ $rolloff.val, $mode.val, $inband.val, $fecblocks, 
$tsrate)</make>
       <opt>val:dtv.C9_10</opt>
     </option>
     <option>
+      <name>2/9 VL-SNR</name>
+      <key>C2_9_VLSNR</key>
+      <opt>val:dtv.C2_9_VLSNR</opt>
+    </option>
+    <option>
       <name>13/45</name>
       <key>C13_45</key>
       <opt>val:dtv.C13_45</opt>
diff --git a/gr-dtv/grc/dtv_dvb_bbscrambler_bb.xml 
b/gr-dtv/grc/dtv_dvb_bbscrambler_bb.xml
index 34f96d3..1dbf396 100644
--- a/gr-dtv/grc/dtv_dvb_bbscrambler_bb.xml
+++ b/gr-dtv/grc/dtv_dvb_bbscrambler_bb.xml
@@ -189,11 +189,6 @@ $rate5.val, #slurp
     <type>enum</type>
     <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize2.hide_normal 
else 'all'</hide>
     <option>
-      <name>2/9 VL-SNR</name>
-      <key>C2_9_VLSNR</key>
-      <opt>val:dtv.C2_9_VLSNR</opt>
-    </option>
-    <option>
       <name>1/4</name>
       <key>C1_4</key>
       <opt>val:dtv.C1_4</opt>
@@ -249,6 +244,11 @@ $rate5.val, #slurp
       <opt>val:dtv.C9_10</opt>
     </option>
     <option>
+      <name>2/9 VL-SNR</name>
+      <key>C2_9_VLSNR</key>
+      <opt>val:dtv.C2_9_VLSNR</opt>
+    </option>
+    <option>
       <name>13/45</name>
       <key>C13_45</key>
       <opt>val:dtv.C13_45</opt>
diff --git a/gr-dtv/grc/dtv_dvb_bch_bb.xml b/gr-dtv/grc/dtv_dvb_bch_bb.xml
index 99fa6aa..12ac8c6 100644
--- a/gr-dtv/grc/dtv_dvb_bch_bb.xml
+++ b/gr-dtv/grc/dtv_dvb_bch_bb.xml
@@ -189,11 +189,6 @@ $rate5.val, #slurp
     <type>enum</type>
     <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize2.hide_normal 
else 'all'</hide>
     <option>
-      <name>2/9 VL-SNR</name>
-      <key>C2_9_VLSNR</key>
-      <opt>val:dtv.C2_9_VLSNR</opt>
-    </option>
-    <option>
       <name>1/4</name>
       <key>C1_4</key>
       <opt>val:dtv.C1_4</opt>
@@ -249,6 +244,11 @@ $rate5.val, #slurp
       <opt>val:dtv.C9_10</opt>
     </option>
     <option>
+      <name>2/9 VL-SNR</name>
+      <key>C2_9_VLSNR</key>
+      <opt>val:dtv.C2_9_VLSNR</opt>
+    </option>
+    <option>
       <name>13/45</name>
       <key>C13_45</key>
       <opt>val:dtv.C13_45</opt>
diff --git a/gr-dtv/grc/dtv_dvb_ldpc_bb.xml b/gr-dtv/grc/dtv_dvb_ldpc_bb.xml
index ec5de0c..f1cff16 100644
--- a/gr-dtv/grc/dtv_dvb_ldpc_bb.xml
+++ b/gr-dtv/grc/dtv_dvb_ldpc_bb.xml
@@ -189,11 +189,6 @@ $constellation.val)</make>
     <type>enum</type>
     <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize2.hide_normal 
else 'all'</hide>
     <option>
-      <name>2/9 VL-SNR</name>
-      <key>C2_9_VLSNR</key>
-      <opt>val:dtv.C2_9_VLSNR</opt>
-    </option>
-    <option>
       <name>1/4</name>
       <key>C1_4</key>
       <opt>val:dtv.C1_4</opt>
@@ -249,6 +244,11 @@ $constellation.val)</make>
       <opt>val:dtv.C9_10</opt>
     </option>
     <option>
+      <name>2/9 VL-SNR</name>
+      <key>C2_9_VLSNR</key>
+      <opt>val:dtv.C2_9_VLSNR</opt>
+    </option>
+    <option>
       <name>13/45</name>
       <key>C13_45</key>
       <opt>val:dtv.C13_45</opt>
diff --git a/gr-dtv/grc/dtv_dvbs2_interleaver_bb.xml 
b/gr-dtv/grc/dtv_dvbs2_interleaver_bb.xml
index 9a6d2ef..675f70d 100644
--- a/gr-dtv/grc/dtv_dvbs2_interleaver_bb.xml
+++ b/gr-dtv/grc/dtv_dvbs2_interleaver_bb.xml
@@ -8,7 +8,15 @@
   <name>Interleaver</name>
   <key>dtv_dvbs2_interleaver_bb</key>
   <import>from gnuradio import dtv</import>
-  <make>dtv.dvbs2_interleaver_bb($framesize.val, $rate.val, 
$constellation.val)</make>
+  <make>dtv.dvbs2_interleaver_bb($framesize.val, #slurp
+#if str($framesize) == 'FECFRAME_NORMAL'
+$rate1.val, #slurp
+#else if str($framesize) == 'FECFRAME_MEDIUM'
+$rate2.val, #slurp
+#else
+$rate3.val, #slurp
+#end if
+$constellation.val)</make>
   <param>
     <name>FECFRAME size</name>
     <key>framesize</key>
@@ -17,21 +25,51 @@
       <name>Normal</name>
       <key>FECFRAME_NORMAL</key>
       <opt>val:dtv.FECFRAME_NORMAL</opt>
+      <opt>hide_normal:</opt>
+      <opt>hide_medium:all</opt>
+      <opt>hide_short:all</opt>
+    </option>
+    <option>
+      <name>Medium</name>
+      <key>FECFRAME_MEDIUM</key>
+      <opt>val:dtv.FECFRAME_MEDIUM</opt>
+      <opt>hide_normal:all</opt>
+      <opt>hide_medium:</opt>
+      <opt>hide_short:all</opt>
     </option>
     <option>
       <name>Short</name>
       <key>FECFRAME_SHORT</key>
       <opt>val:dtv.FECFRAME_SHORT</opt>
+      <opt>hide_normal:all</opt>
+      <opt>hide_medium:all</opt>
+      <opt>hide_short:</opt>
     </option>
   </param>
   <param>
     <name>Code rate</name>
-    <key>rate</key>
+    <key>rate1</key>
     <type>enum</type>
+    <hide>$framesize.hide_normal</hide>
+    <option>
+      <name>1/4</name>
+      <key>C1_4</key>
+      <opt>val:dtv.C1_4</opt>
+    </option>
+    <option>
+      <name>1/3</name>
+      <key>C1_3</key>
+      <opt>val:dtv.C1_3</opt>
+    </option>
+    <option>
+      <name>2/5</name>
+      <key>C2_5</key>
+      <opt>val:dtv.C2_5</opt>
+    </option>
     <option>
-      <name>Other</name>
-      <key>C_OTHER</key>
-      <opt>val:dtv.C_OTHER</opt>
+      <name>1/2</name>
+      <key>C1_2</key>
+      <opt>val:dtv.C1_2</opt>
     </option>
     <option>
       <name>3/5</name>
@@ -44,6 +82,11 @@
       <opt>val:dtv.C2_3</opt>
     </option>
     <option>
+      <name>3/4</name>
+      <key>C3_4</key>
+      <opt>val:dtv.C3_4</opt>
+    </option>
+    <option>
       <name>4/5</name>
       <key>C4_5</key>
       <opt>val:dtv.C4_5</opt>
@@ -54,6 +97,31 @@
       <opt>val:dtv.C5_6</opt>
     </option>
     <option>
+      <name>8/9</name>
+      <key>C8_9</key>
+      <opt>val:dtv.C8_9</opt>
+    </option>
+    <option>
+      <name>9/10</name>
+      <key>C9_10</key>
+      <opt>val:dtv.C9_10</opt>
+    </option>
+    <option>
+      <name>2/9 VL-SNR</name>
+      <key>C2_9_VLSNR</key>
+      <opt>val:dtv.C2_9_VLSNR</opt>
+    </option>
+    <option>
+      <name>13/45</name>
+      <key>C13_45</key>
+      <opt>val:dtv.C13_45</opt>
+    </option>
+    <option>
+      <name>9/20</name>
+      <key>C9_20</key>
+      <opt>val:dtv.C9_20</opt>
+    </option>
+    <option>
       <name>90/180</name>
       <key>C90_180</key>
       <opt>val:dtv.C90_180</opt>
@@ -64,16 +132,31 @@
       <opt>val:dtv.C96_180</opt>
     </option>
     <option>
+      <name>11/20</name>
+      <key>C11_20</key>
+      <opt>val:dtv.C11_20</opt>
+    </option>
+    <option>
       <name>100/180</name>
       <key>C100_180</key>
       <opt>val:dtv.C100_180</opt>
     </option>
     <option>
+      <name>104/180</name>
+      <key>C104_180</key>
+      <opt>val:dtv.C104_180</opt>
+    </option>
+    <option>
       <name>26/45</name>
       <key>C26_45</key>
       <opt>val:dtv.C26_45</opt>
     </option>
     <option>
+      <name>18/30</name>
+      <key>C18_30</key>
+      <opt>val:dtv.C18_30</opt>
+    </option>
+    <option>
       <name>28/45</name>
       <key>C28_45</key>
       <opt>val:dtv.C28_45</opt>
@@ -89,6 +172,11 @@
       <opt>val:dtv.C116_180</opt>
     </option>
     <option>
+      <name>20/30</name>
+      <key>C20_30</key>
+      <opt>val:dtv.C20_30</opt>
+    </option>
+    <option>
       <name>124/180</name>
       <key>C124_180</key>
       <opt>val:dtv.C124_180</opt>
@@ -109,6 +197,16 @@
       <opt>val:dtv.C13_18</opt>
     </option>
     <option>
+      <name>132/180</name>
+      <key>C132_180</key>
+      <opt>val:dtv.C132_180</opt>
+    </option>
+    <option>
+      <name>22/30</name>
+      <key>C22_30</key>
+      <opt>val:dtv.C22_30</opt>
+    </option>
+    <option>
       <name>135/180</name>
       <key>C135_180</key>
       <opt>val:dtv.C135_180</opt>
@@ -124,6 +222,103 @@
       <opt>val:dtv.C7_9</opt>
     </option>
     <option>
+      <name>154/180</name>
+      <key>C154_180</key>
+      <opt>val:dtv.C154_180</opt>
+    </option>
+  </param>
+  <param>
+    <name>Code rate</name>
+    <key>rate2</key>
+    <type>enum</type>
+    <hide>$framesize.hide_medium</hide>
+    <option>
+      <name>1/5</name>
+      <key>C1_5_MEDIUM</key>
+      <opt>val:dtv.C1_5_MEDIUM</opt>
+    </option>
+    <option>
+      <name>11/45</name>
+      <key>C11_45_MEDIUM</key>
+      <opt>val:dtv.C11_45_MEDIUM</opt>
+    </option>
+    <option>
+      <name>1/3</name>
+      <key>C1_3_MEDIUM</key>
+      <opt>val:dtv.C1_3_MEDIUM</opt>
+    </option>
+  </param>
+  <param>
+    <name>Code rate</name>
+    <key>rate3</key>
+    <type>enum</type>
+    <hide>$framesize.hide_short</hide>
+    <option>
+      <name>1/4</name>
+      <key>C1_4</key>
+      <opt>val:dtv.C1_4</opt>
+    </option>
+    <option>
+      <name>1/3</name>
+      <key>C1_3</key>
+      <opt>val:dtv.C1_3</opt>
+    </option>
+    <option>
+      <name>2/5</name>
+      <key>C2_5</key>
+      <opt>val:dtv.C2_5</opt>
+    </option>
+    <option>
+      <name>1/2</name>
+      <key>C1_2</key>
+      <opt>val:dtv.C1_2</opt>
+    </option>
+    <option>
+      <name>3/5</name>
+      <key>C3_5</key>
+      <opt>val:dtv.C3_5</opt>
+    </option>
+    <option>
+      <name>2/3</name>
+      <key>C2_3</key>
+      <opt>val:dtv.C2_3</opt>
+    </option>
+    <option>
+      <name>3/4</name>
+      <key>C3_4</key>
+      <opt>val:dtv.C3_4</opt>
+    </option>
+    <option>
+      <name>4/5</name>
+      <key>C4_5</key>
+      <opt>val:dtv.C4_5</opt>
+    </option>
+    <option>
+      <name>5/6</name>
+      <key>C5_6</key>
+      <opt>val:dtv.C5_6</opt>
+    </option>
+    <option>
+      <name>8/9</name>
+      <key>C8_9</key>
+      <opt>val:dtv.C8_9</opt>
+    </option>
+    <option>
+      <name>11/45</name>
+      <key>C11_45</key>
+      <opt>val:dtv.C11_45</opt>
+    </option>
+    <option>
+      <name>4/15</name>
+      <key>C4_15</key>
+      <opt>val:dtv.C4_15</opt>
+    </option>
+    <option>
+      <name>14/45</name>
+      <key>C14_45</key>
+      <opt>val:dtv.C14_45</opt>
+    </option>
+    <option>
       <name>7/15</name>
       <key>C7_15</key>
       <opt>val:dtv.C7_15</opt>
@@ -134,10 +329,40 @@
       <opt>val:dtv.C8_15</opt>
     </option>
     <option>
+      <name>26/45</name>
+      <key>C26_45</key>
+      <opt>val:dtv.C26_45</opt>
+    </option>
+    <option>
       <name>32/45</name>
       <key>C32_45</key>
       <opt>val:dtv.C32_45</opt>
     </option>
+    <option>
+      <name>1/5 VL-SNR SF2</name>
+      <key>C1_5_VLSNR_SF2</key>
+      <opt>val:dtv.C1_5_VLSNR_SF2</opt>
+    </option>
+    <option>
+      <name>11/45 VL-SNR SF2</name>
+      <key>C11_45_VLSNR_SF2</key>
+      <opt>val:dtv.C11_45_VLSNR_SF2</opt>
+    </option>
+    <option>
+      <name>1/5 VL-SNR</name>
+      <key>C1_5_VLSNR</key>
+      <opt>val:dtv.C1_5_VLSNR</opt>
+    </option>
+    <option>
+      <name>4/15 VL-SNR</name>
+      <key>C4_15_VLSNR</key>
+      <opt>val:dtv.C4_15_VLSNR</opt>
+    </option>
+    <option>
+      <name>1/3 VL-SNR</name>
+      <key>C1_3_VLSNR</key>
+      <opt>val:dtv.C1_3_VLSNR</opt>
+    </option>
   </param>
   <param>
     <name>Constellation</name>
@@ -208,6 +433,16 @@
       <key>MOD_256APSK</key>
       <opt>val:dtv.MOD_256APSK</opt>
     </option>
+    <option>
+      <name>PI/2 BPSK</name>
+      <key>MOD_BPSK</key>
+      <opt>val:dtv.MOD_BPSK</opt>
+    </option>
+    <option>
+      <name>PI/2 BPSK-SF2</name>
+      <key>MOD_BPSK_SF2</key>
+      <opt>val:dtv.MOD_BPSK_SF2</opt>
+    </option>
   </param>
   <sink>
     <name>in</name>
diff --git a/gr-dtv/grc/dtv_dvbs2_modulator_bc.xml 
b/gr-dtv/grc/dtv_dvbs2_modulator_bc.xml
index 8de645d..5f848ec 100644
--- a/gr-dtv/grc/dtv_dvbs2_modulator_bc.xml
+++ b/gr-dtv/grc/dtv_dvbs2_modulator_bc.xml
@@ -8,7 +8,15 @@
   <name>DVB-S2X Modulator</name>
   <key>dtv_dvbs2_modulator_bc</key>
   <import>from gnuradio import dtv</import>
-  <make>dtv.dvbs2_modulator_bc($framesize.val, $rate.val, $constellation.val, 
$interpolation.val)</make>
+  <make>dtv.dvbs2_modulator_bc($framesize.val,
+#if str($framesize) == 'FECFRAME_NORMAL'
+$rate1.val, #slurp
+#else if str($framesize) == 'FECFRAME_MEDIUM'
+$rate2.val, #slurp
+#else
+$rate3.val, #slurp
+#end if
+$constellation.val, $interpolation.val)</make>
   <param>
     <name>FECFRAME size</name>
     <key>framesize</key>
@@ -17,21 +25,51 @@
       <name>Normal</name>
       <key>FECFRAME_NORMAL</key>
       <opt>val:dtv.FECFRAME_NORMAL</opt>
+      <opt>hide_normal:</opt>
+      <opt>hide_medium:all</opt>
+      <opt>hide_short:all</opt>
+    </option>
+    <option>
+      <name>Medium</name>
+      <key>FECFRAME_MEDIUM</key>
+      <opt>val:dtv.FECFRAME_MEDIUM</opt>
+      <opt>hide_normal:all</opt>
+      <opt>hide_medium:</opt>
+      <opt>hide_short:all</opt>
     </option>
     <option>
       <name>Short</name>
       <key>FECFRAME_SHORT</key>
       <opt>val:dtv.FECFRAME_SHORT</opt>
+      <opt>hide_normal:all</opt>
+      <opt>hide_medium:all</opt>
+      <opt>hide_short:</opt>
     </option>
   </param>
   <param>
     <name>Code rate</name>
-    <key>rate</key>
+    <key>rate1</key>
     <type>enum</type>
+    <hide>$framesize.hide_normal</hide>
+    <option>
+      <name>1/4</name>
+      <key>C1_4</key>
+      <opt>val:dtv.C1_4</opt>
+    </option>
+    <option>
+      <name>1/3</name>
+      <key>C1_3</key>
+      <opt>val:dtv.C1_3</opt>
+    </option>
     <option>
-      <name>Other</name>
-      <key>C_OTHER</key>
-      <opt>val:dtv.C_OTHER</opt>
+      <name>2/5</name>
+      <key>C2_5</key>
+      <opt>val:dtv.C2_5</opt>
+    </option>
+    <option>
+      <name>1/2</name>
+      <key>C1_2</key>
+      <opt>val:dtv.C1_2</opt>
     </option>
     <option>
       <name>3/5</name>
@@ -69,6 +107,21 @@
       <opt>val:dtv.C9_10</opt>
     </option>
     <option>
+      <name>2/9 VL-SNR</name>
+      <key>C2_9_VLSNR</key>
+      <opt>val:dtv.C2_9_VLSNR</opt>
+    </option>
+    <option>
+      <name>13/45</name>
+      <key>C13_45</key>
+      <opt>val:dtv.C13_45</opt>
+    </option>
+    <option>
+      <name>9/20</name>
+      <key>C9_20</key>
+      <opt>val:dtv.C9_20</opt>
+    </option>
+    <option>
       <name>90/180</name>
       <key>C90_180</key>
       <opt>val:dtv.C90_180</opt>
@@ -79,6 +132,11 @@
       <opt>val:dtv.C96_180</opt>
     </option>
     <option>
+      <name>11/20</name>
+      <key>C11_20</key>
+      <opt>val:dtv.C11_20</opt>
+    </option>
+    <option>
       <name>100/180</name>
       <key>C100_180</key>
       <opt>val:dtv.C100_180</opt>
@@ -168,6 +226,98 @@
       <key>C154_180</key>
       <opt>val:dtv.C154_180</opt>
     </option>
+  </param>
+  <param>
+    <name>Code rate</name>
+    <key>rate2</key>
+    <type>enum</type>
+    <hide>$framesize.hide_medium</hide>
+    <option>
+      <name>1/5</name>
+      <key>C1_5_MEDIUM</key>
+      <opt>val:dtv.C1_5_MEDIUM</opt>
+    </option>
+    <option>
+      <name>11/45</name>
+      <key>C11_45_MEDIUM</key>
+      <opt>val:dtv.C11_45_MEDIUM</opt>
+    </option>
+    <option>
+      <name>1/3</name>
+      <key>C1_3_MEDIUM</key>
+      <opt>val:dtv.C1_3_MEDIUM</opt>
+    </option>
+  </param>
+  <param>
+    <name>Code rate</name>
+    <key>rate3</key>
+    <type>enum</type>
+    <hide>$framesize.hide_short</hide>
+    <option>
+      <name>1/4</name>
+      <key>C1_4</key>
+      <opt>val:dtv.C1_4</opt>
+    </option>
+    <option>
+      <name>1/3</name>
+      <key>C1_3</key>
+      <opt>val:dtv.C1_3</opt>
+    </option>
+    <option>
+      <name>2/5</name>
+      <key>C2_5</key>
+      <opt>val:dtv.C2_5</opt>
+    </option>
+    <option>
+      <name>1/2</name>
+      <key>C1_2</key>
+      <opt>val:dtv.C1_2</opt>
+    </option>
+    <option>
+      <name>3/5</name>
+      <key>C3_5</key>
+      <opt>val:dtv.C3_5</opt>
+    </option>
+    <option>
+      <name>2/3</name>
+      <key>C2_3</key>
+      <opt>val:dtv.C2_3</opt>
+    </option>
+    <option>
+      <name>3/4</name>
+      <key>C3_4</key>
+      <opt>val:dtv.C3_4</opt>
+    </option>
+    <option>
+      <name>4/5</name>
+      <key>C4_5</key>
+      <opt>val:dtv.C4_5</opt>
+    </option>
+    <option>
+      <name>5/6</name>
+      <key>C5_6</key>
+      <opt>val:dtv.C5_6</opt>
+    </option>
+    <option>
+      <name>8/9</name>
+      <key>C8_9</key>
+      <opt>val:dtv.C8_9</opt>
+    </option>
+    <option>
+      <name>11/45</name>
+      <key>C11_45</key>
+      <opt>val:dtv.C11_45</opt>
+    </option>
+    <option>
+      <name>4/15</name>
+      <key>C4_15</key>
+      <opt>val:dtv.C4_15</opt>
+    </option>
+    <option>
+      <name>14/45</name>
+      <key>C14_45</key>
+      <opt>val:dtv.C14_45</opt>
+    </option>
     <option>
       <name>7/15</name>
       <key>C7_15</key>
@@ -179,10 +329,40 @@
       <opt>val:dtv.C8_15</opt>
     </option>
     <option>
+      <name>26/45</name>
+      <key>C26_45</key>
+      <opt>val:dtv.C26_45</opt>
+    </option>
+    <option>
       <name>32/45</name>
       <key>C32_45</key>
       <opt>val:dtv.C32_45</opt>
     </option>
+    <option>
+      <name>1/5 VL-SNR SF2</name>
+      <key>C1_5_VLSNR_SF2</key>
+      <opt>val:dtv.C1_5_VLSNR_SF2</opt>
+    </option>
+    <option>
+      <name>11/45 VL-SNR SF2</name>
+      <key>C11_45_VLSNR_SF2</key>
+      <opt>val:dtv.C11_45_VLSNR_SF2</opt>
+    </option>
+    <option>
+      <name>1/5 VL-SNR</name>
+      <key>C1_5_VLSNR</key>
+      <opt>val:dtv.C1_5_VLSNR</opt>
+    </option>
+    <option>
+      <name>4/15 VL-SNR</name>
+      <key>C4_15_VLSNR</key>
+      <opt>val:dtv.C4_15_VLSNR</opt>
+    </option>
+    <option>
+      <name>1/3 VL-SNR</name>
+      <key>C1_3_VLSNR</key>
+      <opt>val:dtv.C1_3_VLSNR</opt>
+    </option>
   </param>
   <param>
     <name>Constellation</name>
@@ -234,7 +414,7 @@
       <opt>val:dtv.MOD_64APSK</opt>
     </option>
     <option>
-      <name>8+6+20+20APSK</name>
+      <name>8+16+20+20APSK</name>
       <key>MOD_8_16_20_20APSK</key>
       <opt>val:dtv.MOD_8_16_20_20APSK</opt>
     </option>
@@ -254,10 +434,20 @@
       <opt>val:dtv.MOD_256APSK</opt>
     </option>
     <option>
-      <name>64QAM</name>
+      <name>64QAM (ITU-T J.83B)</name>
       <key>MOD_64QAM</key>
       <opt>val:dtv.MOD_64QAM</opt>
     </option>
+    <option>
+      <name>PI/2 BPSK</name>
+      <key>MOD_BPSK</key>
+      <opt>val:dtv.MOD_BPSK</opt>
+    </option>
+    <option>
+      <name>PI/2 BPSK-SF2</name>
+      <key>MOD_BPSK_SF2</key>
+      <opt>val:dtv.MOD_BPSK_SF2</opt>
+    </option>
   </param>
   <param>
     <name>2X Interpolation</name>
diff --git a/gr-dtv/grc/dtv_dvbs2_physical_cc.xml 
b/gr-dtv/grc/dtv_dvbs2_physical_cc.xml
index ad9eb9a..91d03ae 100644
--- a/gr-dtv/grc/dtv_dvbs2_physical_cc.xml
+++ b/gr-dtv/grc/dtv_dvbs2_physical_cc.xml
@@ -8,7 +8,15 @@
   <name>Physical Layer Framer</name>
   <key>dtv_dvbs2_physical_cc</key>
   <import>from gnuradio import dtv</import>
-  <make>dtv.dvbs2_physical_cc($framesize.val, $rate.val, $constellation.val, 
$pilots.val, $goldcode)</make>
+  <make>dtv.dvbs2_physical_cc($framesize.val, #slurp
+#if str($framesize) == 'FECFRAME_NORMAL'
+$rate1.val, #slurp
+#else if str($framesize) == 'FECFRAME_MEDIUM'
+$rate2.val, #slurp
+#else
+$rate3.val, #slurp
+#end if
+$constellation.val, $pilots.val, $goldcode)</make>
   <param>
     <name>FECFRAME size</name>
     <key>framesize</key>
@@ -17,17 +25,32 @@
       <name>Normal</name>
       <key>FECFRAME_NORMAL</key>
       <opt>val:dtv.FECFRAME_NORMAL</opt>
+      <opt>hide_normal:</opt>
+      <opt>hide_medium:all</opt>
+      <opt>hide_short:all</opt>
+    </option>
+    <option>
+      <name>Medium</name>
+      <key>FECFRAME_MEDIUM</key>
+      <opt>val:dtv.FECFRAME_MEDIUM</opt>
+      <opt>hide_normal:all</opt>
+      <opt>hide_medium:</opt>
+      <opt>hide_short:all</opt>
     </option>
     <option>
       <name>Short</name>
       <key>FECFRAME_SHORT</key>
       <opt>val:dtv.FECFRAME_SHORT</opt>
+      <opt>hide_normal:all</opt>
+      <opt>hide_medium:all</opt>
+      <opt>hide_short:</opt>
     </option>
   </param>
   <param>
     <name>Code rate</name>
-    <key>rate</key>
+    <key>rate1</key>
     <type>enum</type>
+    <hide>$framesize.hide_normal</hide>
     <option>
       <name>1/4</name>
       <key>C1_4</key>
@@ -84,6 +107,11 @@
       <opt>val:dtv.C9_10</opt>
     </option>
     <option>
+      <name>2/9 VL-SNR</name>
+      <key>C2_9_VLSNR</key>
+      <opt>val:dtv.C2_9_VLSNR</opt>
+    </option>
+    <option>
       <name>13/45</name>
       <key>C13_45</key>
       <opt>val:dtv.C13_45</opt>
@@ -198,6 +226,83 @@
       <key>C154_180</key>
       <opt>val:dtv.C154_180</opt>
     </option>
+  </param>
+  <param>
+    <name>Code rate</name>
+    <key>rate2</key>
+    <type>enum</type>
+    <hide>$framesize.hide_medium</hide>
+    <option>
+      <name>1/5</name>
+      <key>C1_5_MEDIUM</key>
+      <opt>val:dtv.C1_5_MEDIUM</opt>
+    </option>
+    <option>
+      <name>11/45</name>
+      <key>C11_45_MEDIUM</key>
+      <opt>val:dtv.C11_45_MEDIUM</opt>
+    </option>
+    <option>
+      <name>1/3</name>
+      <key>C1_3_MEDIUM</key>
+      <opt>val:dtv.C1_3_MEDIUM</opt>
+    </option>
+  </param>
+  <param>
+    <name>Code rate</name>
+    <key>rate3</key>
+    <type>enum</type>
+    <hide>$framesize.hide_short</hide>
+    <option>
+      <name>1/4</name>
+      <key>C1_4</key>
+      <opt>val:dtv.C1_4</opt>
+    </option>
+    <option>
+      <name>1/3</name>
+      <key>C1_3</key>
+      <opt>val:dtv.C1_3</opt>
+    </option>
+    <option>
+      <name>2/5</name>
+      <key>C2_5</key>
+      <opt>val:dtv.C2_5</opt>
+    </option>
+    <option>
+      <name>1/2</name>
+      <key>C1_2</key>
+      <opt>val:dtv.C1_2</opt>
+    </option>
+    <option>
+      <name>3/5</name>
+      <key>C3_5</key>
+      <opt>val:dtv.C3_5</opt>
+    </option>
+    <option>
+      <name>2/3</name>
+      <key>C2_3</key>
+      <opt>val:dtv.C2_3</opt>
+    </option>
+    <option>
+      <name>3/4</name>
+      <key>C3_4</key>
+      <opt>val:dtv.C3_4</opt>
+    </option>
+    <option>
+      <name>4/5</name>
+      <key>C4_5</key>
+      <opt>val:dtv.C4_5</opt>
+    </option>
+    <option>
+      <name>5/6</name>
+      <key>C5_6</key>
+      <opt>val:dtv.C5_6</opt>
+    </option>
+    <option>
+      <name>8/9</name>
+      <key>C8_9</key>
+      <opt>val:dtv.C8_9</opt>
+    </option>
     <option>
       <name>11/45</name>
       <key>C11_45</key>
@@ -224,10 +329,40 @@
       <opt>val:dtv.C8_15</opt>
     </option>
     <option>
+      <name>26/45</name>
+      <key>C26_45</key>
+      <opt>val:dtv.C26_45</opt>
+    </option>
+    <option>
       <name>32/45</name>
       <key>C32_45</key>
       <opt>val:dtv.C32_45</opt>
     </option>
+    <option>
+      <name>1/5 VL-SNR SF2</name>
+      <key>C1_5_VLSNR_SF2</key>
+      <opt>val:dtv.C1_5_VLSNR_SF2</opt>
+    </option>
+    <option>
+      <name>11/45 VL-SNR SF2</name>
+      <key>C11_45_VLSNR_SF2</key>
+      <opt>val:dtv.C11_45_VLSNR_SF2</opt>
+    </option>
+    <option>
+      <name>1/5 VL-SNR</name>
+      <key>C1_5_VLSNR</key>
+      <opt>val:dtv.C1_5_VLSNR</opt>
+    </option>
+    <option>
+      <name>4/15 VL-SNR</name>
+      <key>C4_15_VLSNR</key>
+      <opt>val:dtv.C4_15_VLSNR</opt>
+    </option>
+    <option>
+      <name>1/3 VL-SNR</name>
+      <key>C1_3_VLSNR</key>
+      <opt>val:dtv.C1_3_VLSNR</opt>
+    </option>
   </param>
   <param>
     <name>Constellation</name>
@@ -279,7 +414,7 @@
       <opt>val:dtv.MOD_64APSK</opt>
     </option>
     <option>
-      <name>8+6+20+20APSK</name>
+      <name>8+16+20+20APSK</name>
       <key>MOD_8_16_20_20APSK</key>
       <opt>val:dtv.MOD_8_16_20_20APSK</opt>
     </option>
@@ -298,6 +433,16 @@
       <key>MOD_256APSK</key>
       <opt>val:dtv.MOD_256APSK</opt>
     </option>
+    <option>
+      <name>PI/2 BPSK</name>
+      <key>MOD_BPSK</key>
+      <opt>val:dtv.MOD_BPSK</opt>
+    </option>
+    <option>
+      <name>PI/2 BPSK-SF2</name>
+      <key>MOD_BPSK_SF2</key>
+      <opt>val:dtv.MOD_BPSK_SF2</opt>
+    </option>
   </param>
   <param>
     <name>Pilots</name>
diff --git a/gr-dtv/include/gnuradio/dtv/dvb_config.h 
b/gr-dtv/include/gnuradio/dtv/dvb_config.h
index ad26789..601fd5c 100644
--- a/gr-dtv/include/gnuradio/dtv/dvb_config.h
+++ b/gr-dtv/include/gnuradio/dtv/dvb_config.h
@@ -105,6 +105,8 @@ namespace gr {
       MOD_4_12_20_28APSK,
       MOD_128APSK,
       MOD_256APSK,
+      MOD_BPSK,
+      MOD_BPSK_SF2,
       MOD_OTHER,
     };
 
diff --git a/gr-dtv/lib/dvb/dvb_defines.h b/gr-dtv/lib/dvb/dvb_defines.h
index 885d640..97be4d0 100644
--- a/gr-dtv/lib/dvb/dvb_defines.h
+++ b/gr-dtv/lib/dvb/dvb_defines.h
@@ -57,5 +57,17 @@
 
 #define LDPC_ENCODE_TABLE_LENGTH (FRAME_SIZE_NORMAL * 10)
 
+#define NORMAL_PUNCTURING 3240
+#define MEDIUM_PUNCTURING 1620
+#define SHORT_PUNCTURING_SET1 810
+#define SHORT_PUNCTURING_SET2 1224
+
+#define VLSNR_OFF 0
+#define VLSNR_SET1 1
+#define VLSNR_SET2 2
+
+#define EXTRA_PILOT_SYMBOLS_SET1 ((18 * 34) + (3 * 36))
+#define EXTRA_PILOT_SYMBOLS_SET2 ((9 * 32) + 36)
+
 #endif /* INCLUDED_DTV_DVB_DEFINES_H */
 
diff --git a/gr-dtv/lib/dvb/dvb_ldpc_bb_impl.cc 
b/gr-dtv/lib/dvb/dvb_ldpc_bb_impl.cc
index b5b9065..568aac9 100644
--- a/gr-dtv/lib/dvb/dvb_ldpc_bb_impl.cc
+++ b/gr-dtv/lib/dvb/dvb_ldpc_bb_impl.cc
@@ -98,10 +98,10 @@ namespace gr {
           case C2_9_VLSNR:
             nbch = 14400;
             q_val = 140;
-            frame_size -= 3240;
-            frame_size_real -= 3240;
+            frame_size -= NORMAL_PUNCTURING;
+            frame_size_real -= NORMAL_PUNCTURING;
             P = 15;
-            Xp = 3240;
+            Xp = NORMAL_PUNCTURING;
             break;
           case C13_45:
             nbch = 18720;
@@ -276,8 +276,8 @@ namespace gr {
           case C1_5_VLSNR_SF2:
             nbch = 2680;
             q_val = 135;
-            frame_size -= 810;
-            frame_size_real -= 810;
+            frame_size -= SHORT_PUNCTURING_SET1;
+            frame_size_real -= SHORT_PUNCTURING_SET1;
             Xs = 560;
             P = 30;
             Xp = 250;
@@ -285,34 +285,34 @@ namespace gr {
           case C11_45_VLSNR_SF2:
             nbch = 3960;
             q_val = 34;
-            frame_size -= 810;
-            frame_size_real -= 810;
+            frame_size -= SHORT_PUNCTURING_SET1;
+            frame_size_real -= SHORT_PUNCTURING_SET1;
             P = 15;
-            Xp = 810;
+            Xp = SHORT_PUNCTURING_SET1;
             break;
           case C1_5_VLSNR:
             nbch = 3240;
             q_val = 135;
-            frame_size -= 1224;
-            frame_size_real -= 1224;
+            frame_size -= SHORT_PUNCTURING_SET2;
+            frame_size_real -= SHORT_PUNCTURING_SET2;
             P = 10;
-            Xp = 1224;
+            Xp = SHORT_PUNCTURING_SET2;
             break;
           case C4_15_VLSNR:
             nbch = 4320;
             q_val = 33;
-            frame_size -= 1224;
-            frame_size_real -= 1224;
+            frame_size -= SHORT_PUNCTURING_SET2;
+            frame_size_real -= SHORT_PUNCTURING_SET2;
             P = 8;
-            Xp = 1224;
+            Xp = SHORT_PUNCTURING_SET2;
             break;
           case C1_3_VLSNR:
             nbch = 5400;
             q_val = 120;
-            frame_size -= 1224;
-            frame_size_real -= 1224;
+            frame_size -= SHORT_PUNCTURING_SET2;
+            frame_size_real -= SHORT_PUNCTURING_SET2;
             P = 8;
-            Xp = 1224;
+            Xp = SHORT_PUNCTURING_SET2;
             break;
           default:
             nbch = 0;
@@ -321,8 +321,8 @@ namespace gr {
         }
       }
       else {
-        frame_size = FRAME_SIZE_MEDIUM - 1620;
-        frame_size_real = FRAME_SIZE_MEDIUM - 1620;
+        frame_size = FRAME_SIZE_MEDIUM - MEDIUM_PUNCTURING;
+        frame_size_real = FRAME_SIZE_MEDIUM - MEDIUM_PUNCTURING;
         switch (rate) {
           case C1_5_MEDIUM:
             nbch = 5840;
@@ -335,13 +335,13 @@ namespace gr {
             nbch = 7920;
             q_val = 68;
             P = 15;
-            Xp = 1620;
+            Xp = MEDIUM_PUNCTURING;
             break;
           case C1_3_MEDIUM:
             nbch = 10800;
             q_val = 60;
             P = 13;
-            Xp = 1620;
+            Xp = MEDIUM_PUNCTURING;
             break;
           default:
             nbch = 0;
diff --git a/gr-dtv/lib/dvbs2/dvbs2_interleaver_bb_impl.cc 
b/gr-dtv/lib/dvbs2/dvbs2_interleaver_bb_impl.cc
index 7abfbe3..35e2973 100644
--- a/gr-dtv/lib/dvbs2/dvbs2_interleaver_bb_impl.cc
+++ b/gr-dtv/lib/dvbs2/dvbs2_interleaver_bb_impl.cc
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /* 
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,2016 Free Software Foundation, Inc.
  * 
  * This is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -48,11 +48,35 @@ namespace gr {
       code_rate = rate;
       if (framesize == FECFRAME_NORMAL) {
         frame_size = FRAME_SIZE_NORMAL;
+        if (rate == C2_9_VLSNR) {
+          frame_size = FRAME_SIZE_NORMAL - NORMAL_PUNCTURING;
+        }
       }
-      else {
+      else if (framesize == FECFRAME_SHORT) {
         frame_size = FRAME_SIZE_SHORT;
+        if (rate == C1_5_VLSNR_SF2 || rate == C11_45_VLSNR_SF2) {
+          frame_size = FRAME_SIZE_SHORT - SHORT_PUNCTURING_SET1;
+        }
+        if (rate == C1_5_VLSNR || rate == C4_15_VLSNR || rate == C1_3_VLSNR) {
+          frame_size = FRAME_SIZE_SHORT - SHORT_PUNCTURING_SET2;
+        }
+      }
+      else {
+        frame_size = FRAME_SIZE_MEDIUM - MEDIUM_PUNCTURING;
       }
       switch (constellation) {
+        case MOD_BPSK:
+          mod = 1;
+          rows = frame_size / mod;
+          set_output_multiple(rows);
+          packed_items = rows;
+          break;
+        case MOD_BPSK_SF2:
+          mod = 1;
+          rows = frame_size / mod;
+          set_output_multiple(rows * 2);
+          packed_items = rows * 2;
+          break;
         case MOD_QPSK:
           mod = 2;
           rows = frame_size / mod;
@@ -69,7 +93,7 @@ namespace gr {
             rowaddr2 = 0;
           }
           /* 102 */
-          else if (rate == C25_36 || rate == C13_18 || rate == C7_15 || rate 
== C8_15) {
+          else if (rate == C25_36 || rate == C13_18 || rate == C7_15 || rate 
== C8_15 || rate == C26_45) {
             rowaddr0 = rows;
             rowaddr1 = 0;
             rowaddr2 = rows * 2;
@@ -156,6 +180,20 @@ namespace gr {
             rowaddr2 = 0;
             rowaddr3 = rows * 3;
           }
+          /* 3210 */
+          else if (rate == C140_180) {
+            rowaddr0 = rows * 3;
+            rowaddr1 = rows * 2;
+            rowaddr2 = rows;
+            rowaddr3 = 0;
+          }
+          /* 0321 */
+          else if (rate == C154_180) {
+            rowaddr0 = 0;
+            rowaddr1 = rows * 3;
+            rowaddr2 = rows * 2;
+            rowaddr3 = rows;
+          }
           /* 0123 */
           else {
             rowaddr0 = 0;
@@ -434,6 +472,9 @@ namespace gr {
       if (signal_constellation == MOD_128APSK) {
         ninput_items_required[0] = ((noutput_items / 9270) * 9258) * mod;
       }
+      else if (signal_constellation == MOD_BPSK_SF2) {
+        ninput_items_required[0] = (noutput_items * mod) / 2;
+      }
       else {
         ninput_items_required[0] = noutput_items * mod;
       }
@@ -452,6 +493,23 @@ namespace gr {
       int rows;
 
       switch (signal_constellation) {
+        case MOD_BPSK:
+          for (int i = 0; i < noutput_items; i += packed_items) {
+            rows = frame_size;
+            for (int j = 0; j < rows; j++) {
+              out[produced++] = in[consumed++];
+            }
+          }
+          break;
+        case MOD_BPSK_SF2:
+          for (int i = 0; i < noutput_items; i += packed_items) {
+            rows = frame_size;
+            for (int j = 0; j < rows; j++) {
+              out[produced++] = in[consumed];
+              out[produced++] = in[consumed++];
+            }
+          }
+          break;
         case MOD_QPSK:
           for (int i = 0; i < noutput_items; i += packed_items) {
             rows = frame_size / 2;
diff --git a/gr-dtv/lib/dvbs2/dvbs2_modulator_bc_impl.cc 
b/gr-dtv/lib/dvbs2/dvbs2_modulator_bc_impl.cc
index d1f3b4a..8443593 100644
--- a/gr-dtv/lib/dvbs2/dvbs2_modulator_bc_impl.cc
+++ b/gr-dtv/lib/dvbs2/dvbs2_modulator_bc_impl.cc
@@ -47,6 +47,12 @@ namespace gr {
       double m = 1.0;
       r1 = m;
       switch (constellation) {
+        case MOD_BPSK:
+        case MOD_BPSK_SF2:
+          m_bpsk[0][0] = gr_complex((r1 * cos(M_PI / 4.0)), (r1 * sin(M_PI / 
4.0)));
+          m_bpsk[0][1] = gr_complex((r1 * cos(5.0 * M_PI / 4.0)), (r1 * 
sin(5.0 * M_PI / 4.0)));
+          m_bpsk[1][0] = gr_complex((r1 * cos(5.0 * M_PI / 4.0)), (r1 * 
sin(M_PI / 4.0)));
+          m_bpsk[1][1] = gr_complex((r1 * cos(M_PI / 4.0)), (r1 * sin(5.0 * 
M_PI /4.0)));
         case MOD_QPSK:
           m_qpsk[0] = gr_complex((r1 * cos(M_PI / 4.0)), (r1 * sin(M_PI / 
4.0)));
           m_qpsk[1] = gr_complex((r1 * cos(7 * M_PI / 4.0)), (r1 * sin(7 * 
M_PI / 4.0)));
@@ -1771,6 +1777,13 @@ namespace gr {
 
       if (signal_interpolation == INTERPOLATION_OFF) {
         switch (signal_constellation) {
+          case MOD_BPSK:
+          case MOD_BPSK_SF2:
+            for (int i = 0; i < noutput_items; i++) {
+              index = *in++;
+              *out++ = m_bpsk[i & 1][index & 0x1];
+            }
+            break;
           case MOD_QPSK:
             for (int i = 0; i < noutput_items; i++) {
               index = *in++;
@@ -1830,6 +1843,14 @@ namespace gr {
       }
       else {
         switch (signal_constellation) {
+          case MOD_BPSK:
+          case MOD_BPSK_SF2:
+            for (int i = 0; i < noutput_items; i++) {
+              index = *in++;
+              *out++ = m_bpsk[i & 1][index & 0x1];
+              *out++ = zero;
+            }
+            break;
           case MOD_QPSK:
             for (int i = 0; i < noutput_items / 2; i++) {
               index = *in++;
diff --git a/gr-dtv/lib/dvbs2/dvbs2_modulator_bc_impl.h 
b/gr-dtv/lib/dvbs2/dvbs2_modulator_bc_impl.h
index 4fdbb14..ca042c2 100644
--- a/gr-dtv/lib/dvbs2/dvbs2_modulator_bc_impl.h
+++ b/gr-dtv/lib/dvbs2/dvbs2_modulator_bc_impl.h
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /* 
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,2016 Free Software Foundation, Inc.
  * 
  * This is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -32,6 +32,7 @@ namespace gr {
      private:
       int signal_constellation;
       int signal_interpolation;
+      gr_complex m_bpsk[2][2];
       gr_complex m_qpsk[4];
       gr_complex m_8psk[8];
       gr_complex m_16apsk[16];
diff --git a/gr-dtv/lib/dvbs2/dvbs2_physical_cc_impl.cc 
b/gr-dtv/lib/dvbs2/dvbs2_physical_cc_impl.cc
index 4a0472a..4f38581 100644
--- a/gr-dtv/lib/dvbs2/dvbs2_physical_cc_impl.cc
+++ b/gr-dtv/lib/dvbs2/dvbs2_physical_cc_impl.cc
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /* 
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,2016 Free Software Foundation, Inc.
  * 
  * This is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -47,14 +47,32 @@ namespace gr {
       int type, modcod;
       double r0 = 1.0;
 
+      signal_constellation = constellation;
       modcod = 0;
       if (framesize == FECFRAME_NORMAL) {
         frame_size = FRAME_SIZE_NORMAL;
         type = 0;
+        if (rate == C2_9_VLSNR) {
+          frame_size = (FRAME_SIZE_NORMAL - NORMAL_PUNCTURING) + 
(EXTRA_PILOT_SYMBOLS_SET1 * 2);
+          type = 1;    /* force pilots on for VL-SNR */
+        }
       }
-      else {
+
+      else if (framesize == FECFRAME_SHORT) {
         frame_size = FRAME_SIZE_SHORT;
         type = 2;
+        if (rate == C1_5_VLSNR_SF2 || rate == C11_45_VLSNR_SF2) {
+          frame_size = ((FRAME_SIZE_SHORT - SHORT_PUNCTURING_SET1) * 2) + 
EXTRA_PILOT_SYMBOLS_SET1;
+          type = 1;    /* force pilots on for VL-SNR */
+        }
+        if (rate == C1_5_VLSNR || rate == C4_15_VLSNR || rate == C1_3_VLSNR) {
+          frame_size = (FRAME_SIZE_SHORT - SHORT_PUNCTURING_SET2) + 
EXTRA_PILOT_SYMBOLS_SET2;
+          type = 1;    /* force pilots on for VL-SNR */
+        }
+      }
+      else  {
+        frame_size = FRAME_SIZE_MEDIUM - MEDIUM_PUNCTURING + 
EXTRA_PILOT_SYMBOLS_SET1;
+        type = 1;    /* force pilots on for VL-SNR */
       }
 
       pilot_mode = pilots;
@@ -68,6 +86,49 @@ namespace gr {
       }
       gold_code = goldcode;
 
+      vlsnr_set = VLSNR_OFF;
+      switch (rate) {
+        case C2_9_VLSNR:
+          vlsnr_header = 0;
+          vlsnr_set = VLSNR_SET1;
+          break;
+        case C1_5_MEDIUM:
+          vlsnr_header = 1;
+          vlsnr_set = VLSNR_SET1;
+          break;
+        case C11_45_MEDIUM:
+          vlsnr_header = 2;
+          vlsnr_set = VLSNR_SET1;
+          break;
+        case C1_3_MEDIUM:
+          vlsnr_header = 3;
+          vlsnr_set = VLSNR_SET1;
+          break;
+        case C1_5_VLSNR_SF2:
+          vlsnr_header = 4;
+          vlsnr_set = VLSNR_SET1;
+          break;
+        case C11_45_VLSNR_SF2:
+          vlsnr_header = 5;
+          vlsnr_set = VLSNR_SET1;
+          break;
+        case C1_5_VLSNR:
+          vlsnr_header = 9;
+          vlsnr_set = VLSNR_SET2;
+          break;
+        case C4_15_VLSNR:
+          vlsnr_header = 10;
+          vlsnr_set = VLSNR_SET2;
+          break;
+        case C1_3_VLSNR:
+          vlsnr_header = 11;
+          vlsnr_set = VLSNR_SET2;
+          break;
+        default:
+          vlsnr_header = 12;
+          break;
+      }
+
       m_bpsk[0][0] = gr_complex((r0 * cos(M_PI / 4.0)), (r0 * sin(M_PI / 
4.0)));
       m_bpsk[0][1] = gr_complex((r0 * cos(5.0 * M_PI / 4.0)), (r0 * sin(5.0 * 
M_PI / 4.0)));
       m_bpsk[1][0] = gr_complex((r0 * cos(5.0 * M_PI / 4.0)), (r0 * sin(M_PI / 
4.0)));
@@ -80,6 +141,46 @@ namespace gr {
       m_zero = gr_complex(0.0, 0.0);
 
       // Mode and code rate
+      if (constellation == MOD_BPSK) {
+        slots = (frame_size / 1) / 90;
+        pilot_symbols = (slots / 16) * 36;
+        if (!(slots % 16)) {
+          pilot_symbols -= 36;
+        }
+        switch (rate) {
+          case C1_5_MEDIUM:
+          case C11_45_MEDIUM:
+          case C1_3_MEDIUM:
+            modcod = 128;
+            break;
+          case C1_5_VLSNR:
+          case C4_15_VLSNR:
+          case C1_3_VLSNR:
+            modcod = 130;
+            break;
+          default:
+            modcod = 0;
+            break;
+        }
+      }
+
+      if (constellation == MOD_BPSK_SF2) {
+        slots = (frame_size / 1) / 90;
+        pilot_symbols = (slots / 16) * 36;
+        if (!(slots % 16)) {
+          pilot_symbols -= 36;
+        }
+        switch (rate) {
+          case C1_5_VLSNR_SF2:
+          case C11_45_VLSNR_SF2:
+            modcod = 128;
+            break;
+          default:
+            modcod = 0;
+            break;
+        }
+      }
+
       if (constellation == MOD_QPSK) {
         slots = (frame_size / 2) / 90;
         pilot_symbols = (slots / 16) * 36;
@@ -87,6 +188,9 @@ namespace gr {
           pilot_symbols -= 36;
         }
         switch (rate) {
+          case C2_9_VLSNR:
+            modcod = 128;
+            break;
           case C1_4:
             modcod = 1;
             break;
@@ -506,7 +610,6 @@ namespace gr {
       }
 
       // Now create the PL header.
-      int b[90];
       // Add the sync sequence SOF
       for (int i = 0; i < 26; i++) {
         b[i] = ph_sync_seq[i];
@@ -516,23 +619,46 @@ namespace gr {
 
       // BPSK modulate and create the header
       for (int i = 0; i < 26; i++) {
-        m_pl[i] =  m_bpsk[i & 1][b[i]];
+        m_pl[i] = m_bpsk[i & 1][b[i]];
       }
       if (modcod & 0x80) {
         for (int i = 26; i < 90; i++) {
-          m_pl[i] =  m_bpsk[(i & 1) + 2][b[i]];
+          m_pl[i] = m_bpsk[(i & 1) + 2][b[i]];
         }
       }
       else {
         for (int i = 26; i < 90; i++) {
-          m_pl[i] =  m_bpsk[i & 1][b[i]];
+          m_pl[i] = m_bpsk[i & 1][b[i]];
         }
       }
+
+      // Create the VL-SNR header.
+      // Add leading zeroes
+      for (int i = 0; i < 2; i++) {
+        b[i] = 0;
+      }
+      for (int i = 2; i < 898; i++) {
+        b[i] = ph_vlsnr_seq[vlsnr_header][i - 2];
+      }
+      // Add trailing zeroes
+      for (int i = 898; i < VLSNR_HEADER_LENGTH; i++) {
+        b[i] = 0;
+      }
+      // BPSK modulate and create the VL-SNR header
+      for (int i = 0; i < VLSNR_HEADER_LENGTH; i++) {
+        m_vlsnr_header[i] = m_bpsk[i & 1][b[i]];
+      }
+
       build_symbol_scrambler_table();
       if (!pilot_mode) {
         pilot_symbols = 0;
       }
-      set_output_multiple((((slots * 90) + 90) + pilot_symbols) * 2);
+      if (vlsnr_set == VLSNR_OFF) {
+        set_output_multiple((((slots * 90) + 90) + pilot_symbols) * 2);
+      }
+      else {
+        set_output_multiple((((slots * 90) + 90) + (pilot_symbols + 36) + 
VLSNR_HEADER_LENGTH) * 2);
+      }
     }
 
     /*
@@ -545,7 +671,15 @@ namespace gr {
     void
     dvbs2_physical_cc_impl::forecast (int noutput_items, gr_vector_int 
&ninput_items_required)
     {
-      ninput_items_required[0] = (noutput_items / ((((slots * 90) + 90) + 
pilot_symbols) * 2)) * (slots * 90);
+      if (vlsnr_set == VLSNR_OFF) {
+        ninput_items_required[0] = (noutput_items / ((((slots * 90) + 90) + 
pilot_symbols) * 2)) * (slots * 90);
+      }
+      else if (vlsnr_set == VLSNR_SET1) {
+        ninput_items_required[0] = (noutput_items / ((((slots * 90) + 90) + 
(pilot_symbols + 36) + VLSNR_HEADER_LENGTH) * 2)) * ((slots * 90) - 
EXTRA_PILOT_SYMBOLS_SET1);
+      }
+      else {
+        ninput_items_required[0] = (noutput_items / ((((slots * 90) + 90) + 
(pilot_symbols + 36) + VLSNR_HEADER_LENGTH) * 2)) * ((slots * 90) - 
EXTRA_PILOT_SYMBOLS_SET2);
+      }
     }
 
     void
@@ -595,7 +729,7 @@ namespace gr {
       unsigned char code;
 
       if (modcod & 0x80) {
-        code = modcod | type;
+        code = modcod | (type & 0x1);
       }
       else {
         code = (modcod << 2) | type;
@@ -673,42 +807,84 @@ namespace gr {
       gr_complex *out = (gr_complex *) output_items[0];
       int consumed = 0;
       int produced = 0;
-      int slot_count = 0;
-      int n;
+      int slot_count, n;
+      int group;
+      int symbols = 0;
       gr_complex tempin, tempout;
 
-      for (int i = 0; i < noutput_items / 2; i += (((slots * 90) + 90) + 
pilot_symbols)) {
-        n = 0;
-        for (int plh = 0; plh < 90; plh++) {
-          out[produced++] = m_pl[plh];
-          out[produced++] = m_zero;
-        }
-        for (int j = 0; j < slots; j++) {
-          for (int k = 0; k < 90; k++) {
-            tempin = in[consumed++];
-            switch (m_cscram[n++]) {
-              case 0:
-                tempout = tempin;
-                break;
-              case 1:
-                tempout = gr_complex(-tempin.imag(),  tempin.real());
-                break;
-              case 2:
-                tempout = -tempin;
-                break;
-              case 3:
-                tempout = gr_complex( tempin.imag(), -tempin.real());
-                break;
+      if (vlsnr_set == VLSNR_OFF) {
+        for (int i = 0; i < noutput_items / 2; i += (((slots * 90) + 90) + 
pilot_symbols)) {
+          n = 0;
+          slot_count = 0;
+          for (int plh = 0; plh < 90; plh++) {
+            out[produced++] = m_pl[plh];
+            out[produced++] = m_zero;
+          }
+          for (int j = 0; j < slots; j++) {
+            for (int k = 0; k < 90; k++) {
+              tempin = in[consumed++];
+              switch (m_cscram[n++]) {
+                case 0:
+                  tempout = tempin;
+                  break;
+                case 1:
+                  tempout = gr_complex(-tempin.imag(),  tempin.real());
+                  break;
+                case 2:
+                  tempout = -tempin;
+                  break;
+                case 3:
+                  tempout = gr_complex( tempin.imag(), -tempin.real());
+                  break;
+              }
+              out[produced++] = tempout;
+              out[produced++] = m_zero;
             }
-            out[produced++] = tempout;
+            slot_count = (slot_count + 1) % 16;
+            if ((slot_count == 0) && (j < slots - 1)) {
+              if (pilot_mode) {
+                // Add pilots if needed
+                for (int p = 0; p < 36; p++) {
+                  tempin = m_bpsk[0][0];
+                  switch (m_cscram[n++]) {
+                    case 0:
+                      tempout = tempin;
+                      break;
+                    case 1:
+                      tempout = gr_complex(-tempin.imag(),  tempin.real());
+                      break;
+                    case 2:
+                      tempout = -tempin;
+                      break;
+                    case 3:
+                      tempout = gr_complex( tempin.imag(), -tempin.real());
+                      break;
+                  }
+                  out[produced++] = tempout;
+                  out[produced++] = m_zero;
+                }
+              }
+            }
+          }
+        }
+      }
+      else if (vlsnr_set == VLSNR_SET1) {
+        for (int i = 0; i < noutput_items / 2; i += (((slots * 90) + 90) + 
pilot_symbols + VLSNR_HEADER_LENGTH + 36)) {
+          n = 0;
+          slot_count = 10;
+          group = 0;
+          for (int plh = 0; plh < 90; plh++) {
+            out[produced++] = m_pl[plh];
+            out[produced++] = m_zero;
+          }
+          for (int vlh = 0; vlh < VLSNR_HEADER_LENGTH; vlh++) {
+            out[produced++] = m_vlsnr_header[vlh];
             out[produced++] = m_zero;
           }
-          slot_count = (slot_count + 1) % 16;
-          if ((slot_count == 0) && (j < slots - 1)) {
-            if (pilot_mode) {
-              // Add pilots if needed
-              for (int p = 0; p < 36; p++) {
-                tempin = m_bpsk[0][0];
+          for (int j = 0; j < slots; j++) {
+            for (int k = 0; k < 90; k++) {
+              tempin = in[consumed++];
+              if (signal_constellation == MOD_QPSK) {
                 switch (m_cscram[n++]) {
                   case 0:
                     tempout = tempin;
@@ -719,12 +895,332 @@ namespace gr {
                   case 2:
                     tempout = -tempin;
                     break;
-                  case 03:
+                  case 3:
                     tempout = gr_complex( tempin.imag(), -tempin.real());
                     break;
                 }
-                out[produced++] = tempout;
-                out[produced++] = m_zero;
+              }
+              else {
+                switch (m_cscram[n++]) {
+                  case 0:
+                    tempout = tempin;
+                    break;
+                  case 1:
+                    tempout = -tempin;
+                    break;
+                  case 2:
+                    tempout = tempin;
+                    break;
+                  case 3:
+                    tempout = -tempin;
+                    break;
+                }
+              }
+              out[produced++] = tempout;
+              out[produced++] = m_zero;
+              symbols++;
+              if (group <= 18 && symbols == 703) {
+                for (int p = 0; p < 34; p++) {
+                  tempin = m_bpsk[0][0];
+                  switch (m_cscram[n++]) {
+                    case 0:
+                      tempout = tempin;
+                      break;
+                    case 1:
+                      tempout = gr_complex(-tempin.imag(),  tempin.real());
+                      break;
+                    case 2:
+                      tempout = -tempin;
+                      break;
+                    case 3:
+                      tempout = gr_complex( tempin.imag(), -tempin.real());
+                      break;
+                  }
+                  out[produced++] = tempout;
+                  out[produced++] = m_zero;
+                }
+                for (int x = (k + 1 + 34) - 90; x < 90; x++) {
+                  tempin = in[consumed++];
+                  if (signal_constellation == MOD_QPSK) {
+                    switch (m_cscram[n++]) {
+                      case 0:
+                        tempout = tempin;
+                        break;
+                      case 1:
+                        tempout = gr_complex(-tempin.imag(),  tempin.real());
+                        break;
+                      case 2:
+                        tempout = -tempin;
+                        break;
+                      case 3:
+                        tempout = gr_complex( tempin.imag(), -tempin.real());
+                        break;
+                    }
+                  }
+                  else {
+                    switch (m_cscram[n++]) {
+                      case 0:
+                        tempout = tempin;
+                        break;
+                      case 1:
+                        tempout = -tempin;
+                        break;
+                      case 2:
+                        tempout = tempin;
+                        break;
+                      case 3:
+                        tempout = -tempin;
+                        break;
+                    }
+                  }
+                  out[produced++] = tempout;
+                  out[produced++] = m_zero;
+                  symbols++;
+                }
+                slot_count = (slot_count + 1) % 16;
+                j++;
+                break;
+              }
+              else if ((group > 18 && group <= 21) && symbols == 702) {
+                for (int p = 0; p < 36; p++) {
+                  tempin = m_bpsk[0][0];
+                  switch (m_cscram[n++]) {
+                    case 0:
+                      tempout = tempin;
+                      break;
+                    case 1:
+                      tempout = gr_complex(-tempin.imag(),  tempin.real());
+                      break;
+                    case 2:
+                      tempout = -tempin;
+                      break;
+                    case 3:
+                      tempout = gr_complex( tempin.imag(), -tempin.real());
+                      break;
+                  }
+                  out[produced++] = tempout;
+                  out[produced++] = m_zero;
+                }
+                for (int x = (k + 1 + 36) - 90; x < 90; x++) {
+                  tempin = in[consumed++];
+                  if (signal_constellation == MOD_QPSK) {
+                    switch (m_cscram[n++]) {
+                      case 0:
+                        tempout = tempin;
+                        break;
+                      case 1:
+                        tempout = gr_complex(-tempin.imag(),  tempin.real());
+                        break;
+                      case 2:
+                        tempout = -tempin;
+                        break;
+                      case 3:
+                        tempout = gr_complex( tempin.imag(), -tempin.real());
+                        break;
+                    }
+                  }
+                  else {
+                    switch (m_cscram[n++]) {
+                      case 0:
+                        tempout = tempin;
+                        break;
+                      case 1:
+                        tempout = -tempin;
+                        break;
+                      case 2:
+                        tempout = tempin;
+                        break;
+                      case 3:
+                        tempout = -tempin;
+                        break;
+                    }
+                  }
+                  out[produced++] = tempout;
+                  out[produced++] = m_zero;
+                  symbols++;
+                }
+                slot_count = (slot_count + 1) % 16;
+                j++;
+                break;
+              }
+            }
+            slot_count = (slot_count + 1) % 16;
+            if ((slot_count == 0) && (j < slots - 1)) {
+              if (pilot_mode) {
+                // Add pilots if needed
+                group++;
+                symbols = 0;
+                for (int p = 0; p < 36; p++) {
+                  tempin = m_bpsk[0][0];
+                  switch (m_cscram[n++]) {
+                    case 0:
+                      tempout = tempin;
+                      break;
+                    case 1:
+                      tempout = gr_complex(-tempin.imag(),  tempin.real());
+                      break;
+                    case 2:
+                      tempout = -tempin;
+                      break;
+                    case 3:
+                      tempout = gr_complex( tempin.imag(), -tempin.real());
+                      break;
+                  }
+                  out[produced++] = tempout;
+                  out[produced++] = m_zero;
+                }
+              }
+            }
+          }
+        }
+      }
+      else {    /* VL-SNR set 2 */
+        for (int i = 0; i < noutput_items / 2; i += (((slots * 90) + 90) + 
pilot_symbols + VLSNR_HEADER_LENGTH + 36)) {
+          n = 0;
+          slot_count = 10;
+          group = 0;
+          for (int plh = 0; plh < 90; plh++) {
+            out[produced++] = m_pl[plh];
+            out[produced++] = m_zero;
+          }
+          for (int vlh = 0; vlh < VLSNR_HEADER_LENGTH; vlh++) {
+            out[produced++] = m_vlsnr_header[vlh];
+            out[produced++] = m_zero;
+          }
+          for (int j = 0; j < slots; j++) {
+            for (int k = 0; k < 90; k++) {
+              tempin = in[consumed++];
+              switch (m_cscram[n++]) {
+                case 0:
+                  tempout = tempin;
+                  break;
+                case 1:
+                  tempout = -tempin;
+                  break;
+                case 2:
+                  tempout = tempin;
+                  break;
+                case 3:
+                  tempout = -tempin;
+                  break;
+              }
+              out[produced++] = tempout;
+              out[produced++] = m_zero;
+              symbols++;
+              if (group <= 9 && symbols == 704) {
+                for (int p = 0; p < 32; p++) {
+                  tempin = m_bpsk[0][0];
+                  switch (m_cscram[n++]) {
+                    case 0:
+                      tempout = tempin;
+                      break;
+                    case 1:
+                      tempout = gr_complex(-tempin.imag(),  tempin.real());
+                      break;
+                    case 2:
+                      tempout = -tempin;
+                      break;
+                    case 3:
+                      tempout = gr_complex( tempin.imag(), -tempin.real());
+                      break;
+                  }
+                  out[produced++] = tempout;
+                  out[produced++] = m_zero;
+                }
+                for (int x = (k + 1 + 32) - 90; x < 90; x++) {
+                  tempin = in[consumed++];
+                  switch (m_cscram[n++]) {
+                    case 0:
+                      tempout = tempin;
+                      break;
+                    case 1:
+                      tempout = -tempin;
+                      break;
+                    case 2:
+                      tempout = tempin;
+                      break;
+                    case 3:
+                      tempout = -tempin;
+                      break;
+                  }
+                  out[produced++] = tempout;
+                  out[produced++] = m_zero;
+                  symbols++;
+                }
+                slot_count = (slot_count + 1) % 16;
+                j++;
+                break;
+              }
+              else if ((group == 10) && symbols == 702) {
+                for (int p = 0; p < 36; p++) {
+                  tempin = m_bpsk[0][0];
+                  switch (m_cscram[n++]) {
+                    case 0:
+                      tempout = tempin;
+                      break;
+                    case 1:
+                      tempout = gr_complex(-tempin.imag(),  tempin.real());
+                      break;
+                    case 2:
+                      tempout = -tempin;
+                      break;
+                    case 3:
+                      tempout = gr_complex( tempin.imag(), -tempin.real());
+                      break;
+                  }
+                  out[produced++] = tempout;
+                  out[produced++] = m_zero;
+                }
+                for (int x = (k + 1 + 36) - 90; x < 90; x++) {
+                  tempin = in[consumed++];
+                  switch (m_cscram[n++]) {
+                    case 0:
+                      tempout = tempin;
+                      break;
+                    case 1:
+                      tempout = -tempin;
+                      break;
+                    case 2:
+                      tempout = tempin;
+                      break;
+                    case 3:
+                      tempout = -tempin;
+                      break;
+                  }
+                  out[produced++] = tempout;
+                  out[produced++] = m_zero;
+                  symbols++;
+                }
+                slot_count = (slot_count + 1) % 16;
+                j++;
+                break;
+              }
+            }
+            slot_count = (slot_count + 1) % 16;
+            if ((slot_count == 0) && (j < slots - 1)) {
+              if (pilot_mode) {
+                // Add pilots if needed
+                group++;
+                symbols = 0;
+                for (int p = 0; p < 36; p++) {
+                  tempin = m_bpsk[0][0];
+                  switch (m_cscram[n++]) {
+                    case 0:
+                      tempout = tempin;
+                      break;
+                    case 1:
+                      tempout = gr_complex(-tempin.imag(),  tempin.real());
+                      break;
+                    case 2:
+                      tempout = -tempin;
+                      break;
+                    case 3:
+                      tempout = gr_complex( tempin.imag(), -tempin.real());
+                      break;
+                  }
+                  out[produced++] = tempout;
+                  out[produced++] = m_zero;
+                }
               }
             }
           }
@@ -755,25 +1251,279 @@ namespace gr {
       0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 
1, 0
     };
 
-    /* for future implementation */
-    const int dvbs2_physical_cc_impl::ph_vlsnr_seq[896] =
+    const int dvbs2_physical_cc_impl::ph_vlsnr_seq[16][896] =
     {
-      
1,1,1,1,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,1,0,0,0,1,0,0,
-      
1,0,0,1,1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,1,1,0,0,1,0,0,1,1,0,1,0,0,0,1,0,1,1,1,1,0,
-      
1,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,1,1,0,0,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,1,1,0,0,0,1,0,1,1,1,0,0,1,1,0,1,1,1,
-      
1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,1,1,0,0,1,0,1,1,1,1,0,1,0,
-      
0,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,0,1,0,1,0,
-      
0,1,0,1,1,1,1,0,0,1,1,1,1,0,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,1,0,1,0,1,0,1,0,0,0,1,1,0,1,0,
-      
0,0,1,0,0,1,1,1,1,0,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,1,1,0,0,1,0,1,0,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,1,0,1,0,0,0,0,
-      
0,0,1,1,0,1,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,0,0,1,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,0,1,1,1,1,1,0,1,
-      
1,0,1,0,1,1,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,0,0,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,0,1,0,0,1,0,1,1,1,1,
-      
0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,0,0,1,1,0,1,1,1,
-      
0,1,1,1,0,0,1,0,1,1,0,1,0,0,1,1,1,1,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,1,0,0,1,1,0,0,0,1,1,1,
-      
0,0,1,1,1,0,1,1,1,1,0,1,0,1,0,1,1,0,1,0,1,1,0,0,1,1,1,0,1,1,1,0,0,0,1,0,0,1,0,1,1,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,
-      
0,1,0,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,0,1,1,0,1,0,1,1,0,1,1,0,1,0,
-      
1,1,1,0,1,0,0,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,1,1,1,1,0,0,1,1,1,0,1,1,0,1,0,0,1,1,1,
-      
0,0,1,1,1,1,1,1,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,1,1,1,
-      
0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,0,1,1,0,1,0,1,0,0,0,0,0,1
+      
{1,1,1,1,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,1,0,0,0,1,0,0,
+       
1,0,0,1,1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,1,1,0,0,1,0,0,1,1,0,1,0,0,0,1,0,1,1,1,1,0,
+       
1,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,1,1,0,0,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,1,1,0,0,0,1,0,1,1,1,0,0,1,1,0,1,1,1,
+       
1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,1,1,0,0,1,0,1,1,1,1,0,1,0,
+       
0,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,0,1,0,1,0,
+       
0,1,0,1,1,1,1,0,0,1,1,1,1,0,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,1,0,1,0,1,0,1,0,0,0,1,1,0,1,0,
+       
0,0,1,0,0,1,1,1,1,0,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,1,1,0,0,1,0,1,0,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,1,0,1,0,0,0,0,
+       
0,0,1,1,0,1,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,0,0,1,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,0,1,1,1,1,1,0,1,
+       
1,0,1,0,1,1,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,0,0,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,0,1,0,0,1,0,1,1,1,1,
+       
0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,0,0,1,1,0,1,1,1,
+       
0,1,1,1,0,0,1,0,1,1,0,1,0,0,1,1,1,1,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,1,0,0,1,1,0,0,0,1,1,1,
+       
0,0,1,1,1,0,1,1,1,1,0,1,0,1,0,1,1,0,1,0,1,1,0,0,1,1,1,0,1,1,1,0,0,0,1,0,0,1,0,1,1,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,
+       
0,1,0,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,0,1,1,0,1,0,1,1,0,1,1,0,1,0,
+       
1,1,1,0,1,0,0,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,1,1,1,1,0,0,1,1,1,0,1,1,0,1,0,0,1,1,1,
+       
0,0,1,1,1,1,1,1,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,1,1,1,
+       
0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,0,1,1,0,1,0,1,0,0,0,0,0,1},
+
+      
{1,1,1,1,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,1,0,0,0,1,0,0,
+       
0,1,1,0,0,1,1,1,1,0,0,0,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,0,1,
+       
1,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,1,1,0,0,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,1,1,0,0,0,1,0,1,1,1,0,0,1,1,0,1,1,1,
+       
0,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,0,0,1,0,0,1,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,0,0,1,1,0,1,0,0,0,0,1,0,1,
+       
0,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,0,1,0,1,0,
+       
1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,1,0,1,0,1,1,1,0,0,1,0,1,
+       
0,0,1,0,0,1,1,1,1,0,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,1,1,0,0,1,0,1,0,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,1,0,1,0,0,0,0,
+       
1,1,0,0,1,0,1,1,1,1,0,1,0,1,0,0,1,1,1,1,1,0,1,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,1,0,0,0,0,0,1,0,
+       
1,0,1,0,1,1,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,0,0,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,0,1,0,0,1,0,1,1,1,1,
+       
1,1,1,0,1,1,1,1,1,0,0,1,1,1,1,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,1,1,0,0,1,0,0,0,
+       
0,1,1,1,0,0,1,0,1,1,0,1,0,0,1,1,1,1,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,1,0,0,1,1,0,0,0,1,1,1,
+       
1,1,0,0,0,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,1,0,
+       
0,1,0,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,0,1,1,0,1,0,1,1,0,1,1,0,1,0,
+       
0,0,0,1,0,1,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,0,1,0,0,1,1,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,1,0,0,0,
+       
0,0,1,1,1,1,1,1,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,1,1,1,
+       
1,1,0,1,1,1,0,0,0,0,1,1,0,1,1,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,1,1,0,0,0,0,1,1,0,1,0,0,0,1,0,0,1,0,1,0,1,1,1,1,1,0},
+
+      
{1,1,1,1,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,1,0,0,0,1,0,0,
+       
1,0,0,1,1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,1,1,0,0,1,0,0,1,1,0,1,0,0,0,1,0,1,1,1,1,0,
+       
0,0,0,0,1,0,0,1,0,1,0,1,1,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,
+       
0,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,0,0,1,0,0,1,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,0,0,1,1,0,1,0,0,0,0,1,0,1,
+       
0,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,0,1,0,1,0,
+       
0,1,0,1,1,1,1,0,0,1,1,1,1,0,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,1,0,1,0,1,0,1,0,0,0,1,1,0,1,0,
+       
1,1,0,1,1,0,0,0,0,1,1,0,0,0,1,1,0,0,1,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,1,1,1,
+       
1,1,0,0,1,0,1,1,1,1,0,1,0,1,0,0,1,1,1,1,1,0,1,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,1,0,0,0,0,0,1,0,
+       
1,0,1,0,1,1,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,0,0,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,0,1,0,0,1,0,1,1,1,1,
+       
0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,0,0,1,1,0,1,1,1,
+       
1,0,0,0,1,1,0,1,0,0,1,0,1,1,0,0,0,0,0,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,1,1,0,0,0,
+       
1,1,0,0,0,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,1,0,
+       
0,1,0,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,0,1,1,0,1,0,1,1,0,1,1,0,1,0,
+       
1,1,1,0,1,0,0,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,1,1,1,1,0,0,1,1,1,0,1,1,0,1,0,0,1,1,1,
+       
1,1,0,0,0,0,0,0,1,0,1,1,0,1,1,1,1,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,
+       
1,1,0,1,1,1,0,0,0,0,1,1,0,1,1,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,1,1,0,0,0,0,1,1,0,1,0,0,0,1,0,0,1,0,1,0,1,1,1,1,1,0},
+
+      
{1,1,1,1,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,1,0,0,0,1,0,0,
+       
0,1,1,0,0,1,1,1,1,0,0,0,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,0,1,
+       
0,0,0,0,1,0,0,1,0,1,0,1,1,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,
+       
1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,1,1,0,0,1,0,1,1,1,1,0,1,0,
+       
0,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,0,1,0,1,0,
+       
1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,1,0,1,0,1,1,1,0,0,1,0,1,
+       
1,1,0,1,1,0,0,0,0,1,1,0,0,0,1,1,0,0,1,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,1,1,1,
+       
0,0,1,1,0,1,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,0,0,1,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,0,1,1,1,1,1,0,1,
+       
1,0,1,0,1,1,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,0,0,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,0,1,0,0,1,0,1,1,1,1,
+       
1,1,1,0,1,1,1,1,1,0,0,1,1,1,1,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,1,1,0,0,1,0,0,0,
+       
1,0,0,0,1,1,0,1,0,0,1,0,1,1,0,0,0,0,0,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,1,1,0,0,0,
+       
0,0,1,1,1,0,1,1,1,1,0,1,0,1,0,1,1,0,1,0,1,1,0,0,1,1,1,0,1,1,1,0,0,0,1,0,0,1,0,1,1,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,
+       
0,1,0,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,0,1,1,0,1,0,1,1,0,1,1,0,1,0,
+       
0,0,0,1,0,1,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,0,1,0,0,1,1,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,1,0,0,0,
+       
1,1,0,0,0,0,0,0,1,0,1,1,0,1,1,1,1,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,
+       
0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,0,1,1,0,1,0,1,0,0,0,0,0,1},
+
+      
{1,1,1,1,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,1,0,0,0,1,0,0,
+       
1,0,0,1,1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,1,1,0,0,1,0,0,1,1,0,1,0,0,0,1,0,1,1,1,1,0,
+       
1,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,1,1,0,0,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,1,1,0,0,0,1,0,1,1,1,0,0,1,1,0,1,1,1,
+       
1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,1,1,0,0,1,0,1,1,1,1,0,1,0,
+       
1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,1,0,1,
+       
1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,1,0,1,0,1,1,1,0,0,1,0,1,
+       
1,1,0,1,1,0,0,0,0,1,1,0,0,0,1,1,0,0,1,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,1,1,1,
+       
1,1,0,0,1,0,1,1,1,1,0,1,0,1,0,0,1,1,1,1,1,0,1,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,1,0,0,0,0,0,1,0,
+       
1,0,1,0,1,1,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,0,0,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,0,1,0,0,1,0,1,1,1,1,
+       
0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,0,0,1,1,0,1,1,1,
+       
0,1,1,1,0,0,1,0,1,1,0,1,0,0,1,1,1,1,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,1,0,0,1,1,0,0,0,1,1,1,
+       
0,0,1,1,1,0,1,1,1,1,0,1,0,1,0,1,1,0,1,0,1,1,0,0,1,1,1,0,1,1,1,0,0,0,1,0,0,1,0,1,1,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,
+       
1,0,1,0,0,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,1,0,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,0,1,0,0,1,0,1,
+       
0,0,0,1,0,1,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,0,1,0,0,1,1,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,1,0,0,0,
+       
1,1,0,0,0,0,0,0,1,0,1,1,0,1,1,1,1,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,
+       
1,1,0,1,1,1,0,0,0,0,1,1,0,1,1,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,1,1,0,0,0,0,1,1,0,1,0,0,0,1,0,0,1,0,1,0,1,1,1,1,1,0},
+
+      
{1,1,1,1,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,1,0,0,0,1,0,0,
+       
0,1,1,0,0,1,1,1,1,0,0,0,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,0,1,
+       
0,0,0,0,1,0,0,1,0,1,0,1,1,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,
+       
1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,1,1,0,0,1,0,1,1,1,1,0,1,0,
+       
1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,1,0,1,
+       
0,1,0,1,1,1,1,0,0,1,1,1,1,0,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,1,0,1,0,1,0,1,0,0,0,1,1,0,1,0,
+       
0,0,1,0,0,1,1,1,1,0,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,1,1,0,0,1,0,1,0,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,1,0,1,0,0,0,0,
+       
1,1,0,0,1,0,1,1,1,1,0,1,0,1,0,0,1,1,1,1,1,0,1,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,1,0,0,0,0,0,1,0,
+       
1,0,1,0,1,1,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,0,0,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,0,1,0,0,1,0,1,1,1,1,
+       
1,1,1,0,1,1,1,1,1,0,0,1,1,1,1,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,1,1,0,0,1,0,0,0,
+       
1,0,0,0,1,1,0,1,0,0,1,0,1,1,0,0,0,0,0,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,1,1,0,0,0,
+       
0,0,1,1,1,0,1,1,1,1,0,1,0,1,0,1,1,0,1,0,1,1,0,0,1,1,1,0,1,1,1,0,0,0,1,0,0,1,0,1,1,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,
+       
1,0,1,0,0,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,1,0,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,0,1,0,0,1,0,1,
+       
1,1,1,0,1,0,0,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,1,1,1,1,0,0,1,1,1,0,1,1,0,1,0,0,1,1,1,
+       
0,0,1,1,1,1,1,1,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,1,1,1,
+       
1,1,0,1,1,1,0,0,0,0,1,1,0,1,1,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,1,1,0,0,0,0,1,1,0,1,0,0,0,1,0,0,1,0,1,0,1,1,1,1,1,0},
+
+      
{1,1,1,1,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,1,0,0,0,1,0,0,
+       
1,0,0,1,1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,1,1,0,0,1,0,0,1,1,0,1,0,0,0,1,0,1,1,1,1,0,
+       
0,0,0,0,1,0,0,1,0,1,0,1,1,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,
+       
0,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,0,0,1,0,0,1,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,0,0,1,1,0,1,0,0,0,0,1,0,1,
+       
0,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,0,1,0,1,0,
+       
0,1,0,1,1,1,1,0,0,1,1,1,1,0,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,1,0,1,0,1,0,1,0,0,0,1,1,0,1,0,
+       
1,1,0,1,1,0,0,0,0,1,1,0,0,0,1,1,0,0,1,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,1,1,1,
+       
1,1,0,0,1,0,1,1,1,1,0,1,0,1,0,0,1,1,1,1,1,0,1,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,1,0,0,0,0,0,1,0,
+       
0,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,0,1,0,0,1,0,0,0,1,0,1,1,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,0,0,0,0,
+       
1,1,1,0,1,1,1,1,1,0,0,1,1,1,1,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,1,1,0,0,1,0,0,0,
+       
0,1,1,1,0,0,1,0,1,1,0,1,0,0,1,1,1,1,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,1,0,0,1,1,0,0,0,1,1,1,
+       
0,0,1,1,1,0,1,1,1,1,0,1,0,1,0,1,1,0,1,0,1,1,0,0,1,1,1,0,1,1,1,0,0,0,1,0,0,1,0,1,1,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,
+       
1,0,1,0,0,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,1,0,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,0,1,0,0,1,0,1,
+       
0,0,0,1,0,1,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,0,1,0,0,1,1,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,1,0,0,0,
+       
0,0,1,1,1,1,1,1,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,1,1,1,
+       
0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,0,1,1,0,1,0,1,0,0,0,0,0,1},
+
+      
{1,1,1,1,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,1,0,0,0,1,0,0,
+       
0,1,1,0,0,1,1,1,1,0,0,0,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,0,1,
+       
0,0,0,0,1,0,0,1,0,1,0,1,1,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,
+       
1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,1,1,0,0,1,0,1,1,1,1,0,1,0,
+       
0,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,0,1,0,1,0,
+       
1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,1,0,1,0,1,1,1,0,0,1,0,1,
+       
1,1,0,1,1,0,0,0,0,1,1,0,0,0,1,1,0,0,1,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,1,1,1,
+       
0,0,1,1,0,1,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,0,0,1,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,0,1,1,1,1,1,0,1,
+       
0,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,0,1,0,0,1,0,0,0,1,0,1,1,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,0,0,0,0,
+       
0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,0,0,1,1,0,1,1,1,
+       
0,1,1,1,0,0,1,0,1,1,0,1,0,0,1,1,1,1,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,1,0,0,1,1,0,0,0,1,1,1,
+       
1,1,0,0,0,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,1,0,
+       
1,0,1,0,0,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,1,0,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,0,1,0,0,1,0,1,
+       
1,1,1,0,1,0,0,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,1,1,1,1,0,0,1,1,1,0,1,1,0,1,0,0,1,1,1,
+       
0,0,1,1,1,1,1,1,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,1,1,1,
+       
1,1,0,1,1,1,0,0,0,0,1,1,0,1,1,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,1,1,0,0,0,0,1,1,0,1,0,0,0,1,0,0,1,0,1,0,1,1,1,1,1,0},
+
+      
{1,1,1,1,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,1,0,0,0,1,0,0,
+       
1,0,0,1,1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,1,1,0,0,1,0,0,1,1,0,1,0,0,0,1,0,1,1,1,1,0,
+       
1,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,1,1,0,0,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,1,1,0,0,0,1,0,1,1,1,0,0,1,1,0,1,1,1,
+       
1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,1,1,0,0,1,0,1,1,1,1,0,1,0,
+       
1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,1,0,1,
+       
1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,1,0,1,0,1,1,1,0,0,1,0,1,
+       
1,1,0,1,1,0,0,0,0,1,1,0,0,0,1,1,0,0,1,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,1,1,1,
+       
1,1,0,0,1,0,1,1,1,1,0,1,0,1,0,0,1,1,1,1,1,0,1,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,1,0,0,0,0,0,1,0,
+       
0,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,0,1,0,0,1,0,0,0,1,0,1,1,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,0,0,0,0,
+       
1,1,1,0,1,1,1,1,1,0,0,1,1,1,1,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,1,1,0,0,1,0,0,0,
+       
1,0,0,0,1,1,0,1,0,0,1,0,1,1,0,0,0,0,0,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,1,1,0,0,0,
+       
1,1,0,0,0,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,1,0,
+       
0,1,0,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,0,1,1,0,1,0,1,1,0,1,1,0,1,0,
+       
1,1,1,0,1,0,0,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,1,1,1,1,0,0,1,1,1,0,1,1,0,1,0,0,1,1,1,
+       
0,0,1,1,1,1,1,1,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,1,1,1,
+       
0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,0,1,1,0,1,0,1,0,0,0,0,0,1},
+
+      
{1,1,1,1,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,1,0,0,0,1,0,0,
+       
1,0,0,1,1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,1,1,0,0,1,0,0,1,1,0,1,0,0,0,1,0,1,1,1,1,0,
+       
0,0,0,0,1,0,0,1,0,1,0,1,1,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,
+       
0,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,0,0,1,0,0,1,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,0,0,1,1,0,1,0,0,0,0,1,0,1,
+       
1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,1,0,1,
+       
1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,1,0,1,0,1,1,1,0,0,1,0,1,
+       
0,0,1,0,0,1,1,1,1,0,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,1,1,0,0,1,0,1,0,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,1,0,1,0,0,0,0,
+       
0,0,1,1,0,1,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,0,0,1,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,0,1,1,1,1,1,0,1,
+       
1,0,1,0,1,1,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,0,0,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,0,1,0,0,1,0,1,1,1,1,
+       
0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,0,0,1,1,0,1,1,1,
+       
1,0,0,0,1,1,0,1,0,0,1,0,1,1,0,0,0,0,0,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,1,1,0,0,0,
+       
1,1,0,0,0,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,1,0,
+       
1,0,1,0,0,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,1,0,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,0,1,0,0,1,0,1,
+       
0,0,0,1,0,1,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,0,1,0,0,1,1,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,1,0,0,0,
+       
0,0,1,1,1,1,1,1,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,1,1,1,
+       
0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,0,1,1,0,1,0,1,0,0,0,0,0,1},
+
+      
{1,1,1,1,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,1,0,0,0,1,0,0,
+       
0,1,1,0,0,1,1,1,1,0,0,0,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,0,1,
+       
0,0,0,0,1,0,0,1,0,1,0,1,1,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,
+       
1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,1,1,0,0,1,0,1,1,1,1,0,1,0,
+       
0,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,0,1,0,1,0,
+       
1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,1,0,1,0,1,1,1,0,0,1,0,1,
+       
1,1,0,1,1,0,0,0,0,1,1,0,0,0,1,1,0,0,1,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,1,1,1,
+       
0,0,1,1,0,1,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,0,0,1,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,0,1,1,1,1,1,0,1,
+       
1,0,1,0,1,1,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,0,0,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,0,1,0,0,1,0,1,1,1,1,
+       
1,1,1,0,1,1,1,1,1,0,0,1,1,1,1,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,1,1,0,0,1,0,0,0,
+       
1,0,0,0,1,1,0,1,0,0,1,0,1,1,0,0,0,0,0,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,1,1,0,0,0,
+       
0,0,1,1,1,0,1,1,1,1,0,1,0,1,0,1,1,0,1,0,1,1,0,0,1,1,1,0,1,1,1,0,0,0,1,0,0,1,0,1,1,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,
+       
0,1,0,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,0,1,1,0,1,0,1,1,0,1,1,0,1,0,
+       
0,0,0,1,0,1,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,0,1,0,0,1,1,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,1,0,0,0,
+       
1,1,0,0,0,0,0,0,1,0,1,1,0,1,1,1,1,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,
+       
0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,0,1,1,0,1,0,1,0,0,0,0,0,1},
+
+      
{0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,1,1,1,0,1,1,
+       
0,1,1,0,0,1,1,1,1,0,0,0,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,0,1,
+       
0,0,0,0,1,0,0,1,0,1,0,1,1,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,
+       
0,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,0,0,1,0,0,1,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,0,0,1,1,0,1,0,0,0,0,1,0,1,
+       
1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,1,0,1,
+       
1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,1,0,1,0,1,1,1,0,0,1,0,1,
+       
1,1,0,1,1,0,0,0,0,1,1,0,0,0,1,1,0,0,1,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,1,1,1,
+       
1,1,0,0,1,0,1,1,1,1,0,1,0,1,0,0,1,1,1,1,1,0,1,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,1,0,0,0,0,0,1,0,
+       
1,0,1,0,1,1,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,0,0,1,1,1,0,1,0,1,0,1,0,0,1,1,0,0,0,1,0,0,1,0,1,1,1,1,
+       
0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,0,0,1,1,0,1,1,1,
+       
0,1,1,1,0,0,1,0,1,1,0,1,0,0,1,1,1,1,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,1,0,0,1,1,0,0,0,1,1,1,
+       
0,0,1,1,1,0,1,1,1,1,0,1,0,1,0,1,1,0,1,0,1,1,0,0,1,1,1,0,1,1,1,0,0,0,1,0,0,1,0,1,1,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,
+       
0,1,0,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,0,1,1,0,1,0,1,1,0,1,1,0,1,0,
+       
1,1,1,0,1,0,0,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,1,1,1,1,0,0,1,1,1,0,1,1,0,1,0,0,1,1,1,
+       
0,0,1,1,1,1,1,1,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,1,1,1,
+       
0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,0,1,1,0,1,0,1,0,0,0,0,0,1},
+
+      
{1,1,1,1,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,1,0,0,0,1,0,0,
+       
0,1,1,0,0,1,1,1,1,0,0,0,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,0,1,
+       
1,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,1,1,0,0,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,1,1,0,0,0,1,0,1,1,1,0,0,1,1,0,1,1,1,
+       
0,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,0,0,1,0,0,1,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,0,0,1,1,0,1,0,0,0,0,1,0,1,
+       
0,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,0,1,0,1,0,
+       
1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,1,0,1,0,1,1,1,0,0,1,0,1,
+       
0,0,1,0,0,1,1,1,1,0,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,1,1,0,0,1,0,1,0,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,1,0,1,0,0,0,0,
+       
1,1,0,0,1,0,1,1,1,1,0,1,0,1,0,0,1,1,1,1,1,0,1,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,1,0,0,0,0,0,1,0,
+       
0,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,0,1,0,0,1,0,0,0,1,0,1,1,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,0,0,0,0,
+       
0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,0,0,1,1,0,1,1,1,
+       
1,0,0,0,1,1,0,1,0,0,1,0,1,1,0,0,0,0,0,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,1,1,0,0,0,
+       
0,0,1,1,1,0,1,1,1,1,0,1,0,1,0,1,1,0,1,0,1,1,0,0,1,1,1,0,1,1,1,0,0,0,1,0,0,1,0,1,1,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,
+       
1,0,1,0,0,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,1,0,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0,0,1,0,0,1,0,1,
+       
1,1,1,0,1,0,0,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,1,1,1,1,0,0,1,1,1,0,1,1,0,1,0,0,1,1,1,
+       
1,1,0,0,0,0,0,0,1,0,1,1,0,1,1,1,1,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,
+       
0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,0,1,1,0,1,0,1,0,0,0,0,0,1},
+
+      
{1,1,1,1,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,1,0,0,0,1,0,0,
+       
0,1,1,0,0,1,1,1,1,0,0,0,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,0,1,
+       
1,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,1,1,0,0,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,1,1,0,0,0,1,0,1,1,1,0,0,1,1,0,1,1,1,
+       
0,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,0,0,1,0,0,1,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,0,0,1,1,0,1,0,0,0,0,1,0,1,
+       
1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,1,0,1,
+       
0,1,0,1,1,1,1,0,0,1,1,1,1,0,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,1,0,1,0,1,0,1,0,0,0,1,1,0,1,0,
+       
1,1,0,1,1,0,0,0,0,1,1,0,0,0,1,1,0,0,1,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,1,1,1,
+       
0,0,1,1,0,1,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,0,0,1,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,0,1,1,1,1,1,0,1,
+       
0,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,0,1,0,0,1,0,0,0,1,0,1,1,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,0,0,0,0,
+       
0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,0,0,1,1,0,1,1,1,
+       
1,0,0,0,1,1,0,1,0,0,1,0,1,1,0,0,0,0,0,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,1,1,0,0,0,
+       
0,0,1,1,1,0,1,1,1,1,0,1,0,1,0,1,1,0,1,0,1,1,0,0,1,1,1,0,1,1,1,0,0,0,1,0,0,1,0,1,1,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,
+       
0,1,0,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,0,1,1,0,1,0,1,1,0,1,1,0,1,0,
+       
0,0,0,1,0,1,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,0,1,0,0,1,1,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,1,0,0,0,
+       
0,0,1,1,1,1,1,1,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,1,1,1,
+       
1,1,0,1,1,1,0,0,0,0,1,1,0,1,1,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,1,1,0,0,0,0,1,1,0,1,0,0,0,1,0,0,1,0,1,0,1,1,1,1,1,0},
+
+      
{1,1,1,1,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,1,0,0,0,1,0,0,
+       
1,0,0,1,1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,1,1,0,0,1,0,0,1,1,0,1,0,0,0,1,0,1,1,1,1,0,
+       
0,0,0,0,1,0,0,1,0,1,0,1,1,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,
+       
0,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,0,0,1,0,0,1,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,0,0,1,1,0,1,0,0,0,0,1,0,1,
+       
1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,1,0,1,
+       
1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,1,0,1,0,1,1,1,0,0,1,0,1,
+       
0,0,1,0,0,1,1,1,1,0,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,1,1,0,0,1,0,1,0,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,1,0,1,0,0,0,0,
+       
0,0,1,1,0,1,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,0,0,1,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,0,1,1,1,1,1,0,1,
+       
0,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,0,1,0,0,1,0,0,0,1,0,1,1,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,0,0,0,0,
+       
1,1,1,0,1,1,1,1,1,0,0,1,1,1,1,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,1,1,0,0,1,0,0,0,
+       
0,1,1,1,0,0,1,0,1,1,0,1,0,0,1,1,1,1,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,1,0,0,1,1,0,0,0,1,1,1,
+       
0,0,1,1,1,0,1,1,1,1,0,1,0,1,0,1,1,0,1,0,1,1,0,0,1,1,1,0,1,1,1,0,0,0,1,0,0,1,0,1,1,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,
+       
0,1,0,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,0,1,1,0,1,0,1,1,0,1,1,0,1,0,
+       
1,1,1,0,1,0,0,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,1,1,1,1,0,0,1,1,1,0,1,1,0,1,0,0,1,1,1,
+       
1,1,0,0,0,0,0,0,1,0,1,1,0,1,1,1,1,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,
+       
1,1,0,1,1,1,0,0,0,0,1,1,0,1,1,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,1,1,0,0,0,0,1,1,0,1,0,0,0,1,0,0,1,0,1,0,1,1,1,1,1,0},
+
+      
{1,1,1,1,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,1,0,0,0,1,0,0,
+       
0,1,1,0,0,1,1,1,1,0,0,0,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,0,1,
+       
0,0,0,0,1,0,0,1,0,1,0,1,1,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,1,1,1,0,1,0,0,0,1,1,0,0,1,0,0,0,
+       
1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,1,0,1,0,0,1,1,0,1,1,1,1,1,0,0,1,1,0,0,1,0,1,1,1,1,0,1,0,
+       
1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,1,0,1,
+       
0,1,0,1,1,1,1,0,0,1,1,1,1,0,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,1,0,1,0,1,0,1,0,0,0,1,1,0,1,0,
+       
0,0,1,0,0,1,1,1,1,0,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,1,1,0,0,1,0,1,0,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,1,0,1,0,0,0,0,
+       
1,1,0,0,1,0,1,1,1,1,0,1,0,1,0,0,1,1,1,1,1,0,1,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,1,0,0,0,0,0,1,0,
+       
0,1,0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,0,0,1,0,0,1,0,0,0,1,0,1,1,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,0,0,0,0,
+       
0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,0,0,1,1,0,1,1,1,
+       
0,1,1,1,0,0,1,0,1,1,0,1,0,0,1,1,1,1,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,1,0,0,1,1,0,0,0,1,1,1,
+       
1,1,0,0,0,1,0,0,0,0,1,0,1,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,1,0,
+       
0,1,0,1,1,0,0,1,0,0,0,0,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,0,1,1,0,1,0,1,1,0,1,1,0,1,0,
+       
0,0,0,1,0,1,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,0,1,0,0,1,1,0,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,1,0,0,0,
+       
1,1,0,0,0,0,0,0,1,0,1,1,0,1,1,1,1,1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,
+       
0,0,1,0,0,0,1,1,1,1,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,0,1,1,0,1,0,1,0,0,0,0,0,1}
     };
 
   } /* namespace dtv */
diff --git a/gr-dtv/lib/dvbs2/dvbs2_physical_cc_impl.h 
b/gr-dtv/lib/dvbs2/dvbs2_physical_cc_impl.h
index 6910776..47a0a3e 100644
--- a/gr-dtv/lib/dvbs2/dvbs2_physical_cc_impl.h
+++ b/gr-dtv/lib/dvbs2/dvbs2_physical_cc_impl.h
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /* 
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,2016 Free Software Foundation, Inc.
  * 
  * This is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -24,6 +24,8 @@
 #include <gnuradio/dtv/dvbs2_physical_cc.h>
 #include "dvb/dvb_defines.h"
 
+#define VLSNR_HEADER_LENGTH 900
+
 namespace gr {
   namespace dtv {
 
@@ -31,12 +33,17 @@ namespace gr {
     {
      private:
       int frame_size;
+      int signal_constellation;
       int slots;
       int pilot_mode;
       int pilot_symbols;
       int gold_code;
+      int vlsnr_header;
+      int vlsnr_set;
+      int b[VLSNR_HEADER_LENGTH];
       gr_complex m_bpsk[4][2];
       gr_complex m_pl[90];
+      gr_complex m_vlsnr_header[VLSNR_HEADER_LENGTH];
       gr_complex m_zero;
       int m_cscram[FRAME_SIZE_NORMAL];
       void b_64_8_code(unsigned char, int *);
@@ -47,7 +54,7 @@ namespace gr {
       const static unsigned long g[7];
       const static int ph_scram_tab[64];
       const static int ph_sync_seq[26];
-      const static int ph_vlsnr_seq[896];
+      const static int ph_vlsnr_seq[16][VLSNR_HEADER_LENGTH - 4];
 
      public:
       dvbs2_physical_cc_impl(dvb_framesize_t framesize, dvb_code_rate_t rate, 
dvb_constellation_t constellation, dvbs2_pilots_t pilots, int goldcode);



reply via email to

[Prev in Thread] Current Thread [Next in Thread]