Home | History | Annotate | Download | only in doc
      1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  
      2   "http://www.w3.org/TR/html4/loose.dtd">  
      3 <html > 
      4 <head><title>Vorbis I specification</title> 
      5 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
      6 <meta name="generator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)"> 
      7 <meta name="originator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)"> 
      8 <!-- html --> 
      9 <meta name="src" content="Vorbis_I_spec.tex"> 
     10 <meta name="date" content="2010-02-03 17:32:00"> 
     11 <link rel="stylesheet" type="text/css" href="Vorbis_I_spec.css"> 
     12 </head><body 
     13 >
     14 <div class="maketitle">
     15                                                                                         
     16 
     17                                                                                         
     18                                                                                         
     19 
     20                                                                                         
     21 
     22 <h2 class="titleHead">Vorbis I specification</h2>
     23 <div class="author" ><span 
     24 class="cmr-17">Xiph.org Foundation</span></div>
     25 <br />
     26 <div class="date" ><span 
     27 class="cmr-17">February 3, 2010</span></div>
     28 </div>
     29 <h3 class="likesectionHead"><a 
     30  id="x1-1000"></a>Contents</h3>
     31 <div class="tableofcontents">
     32 &#x00A0;<span class="sectionToc" >1 <a 
     33 href="#x1-20001" id="QQ2-1-2">Introduction and Description</a></span>
     34 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >1.1 <a 
     35 href="#x1-30001.1" id="QQ2-1-3">Overview</a></span>
     36 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.1 <a 
     37 href="#x1-40001.1.1" id="QQ2-1-4">Application</a></span>
     38 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.2 <a 
     39 href="#x1-50001.1.2" id="QQ2-1-5">Classification</a></span>
     40 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.3 <a 
     41 href="#x1-60001.1.3" id="QQ2-1-6">Assumptions</a></span>
     42 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.4 <a 
     43 href="#x1-70001.1.4" id="QQ2-1-7">Codec Setup and Probability Model</a></span>
     44 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.5 <a 
     45 href="#x1-90001.1.5" id="QQ2-1-9">Format Specification</a></span>
     46 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.6 <a 
     47 href="#x1-100001.1.6" id="QQ2-1-10">Hardware Profile</a></span>
     48 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >1.2 <a 
     49 href="#x1-110001.2" id="QQ2-1-11">Decoder Configuration</a></span>
     50 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.1 <a 
     51 href="#x1-120001.2.1" id="QQ2-1-13">Global Config</a></span>
     52 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.2 <a 
     53 href="#x1-130001.2.2" id="QQ2-1-14">Mode</a></span>
     54                                                                                         
     55 
     56                                                                                         
     57 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.3 <a 
     58 href="#x1-140001.2.3" id="QQ2-1-15">Mapping</a></span>
     59 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.4 <a 
     60 href="#x1-150001.2.4" id="QQ2-1-16">Floor</a></span>
     61 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.5 <a 
     62 href="#x1-160001.2.5" id="QQ2-1-17">Residue</a></span>
     63 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.6 <a 
     64 href="#x1-170001.2.6" id="QQ2-1-18">Codebooks</a></span>
     65 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >1.3 <a 
     66 href="#x1-180001.3" id="QQ2-1-19">High-level Decode Process</a></span>
     67 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.3.1 <a 
     68 href="#x1-190001.3.1" id="QQ2-1-20">Decode Setup</a></span>
     69 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.3.2 <a 
     70 href="#x1-230001.3.2" id="QQ2-1-24">Decode Procedure</a></span>
     71 <br />&#x00A0;<span class="sectionToc" >2 <a 
     72 href="#x1-360002" id="QQ2-1-39">Bitpacking Convention</a></span>
     73 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >2.1 <a 
     74 href="#x1-370002.1" id="QQ2-1-40">Overview</a></span>
     75 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.1 <a 
     76 href="#x1-380002.1.1" id="QQ2-1-41">octets, bytes and words</a></span>
     77 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.2 <a 
     78 href="#x1-390002.1.2" id="QQ2-1-42">bit order</a></span>
     79 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.3 <a 
     80 href="#x1-400002.1.3" id="QQ2-1-43">byte order</a></span>
     81 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.4 <a 
     82 href="#x1-410002.1.4" id="QQ2-1-44">coding bits into byte sequences</a></span>
     83 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.5 <a 
     84 href="#x1-420002.1.5" id="QQ2-1-45">signedness</a></span>
     85 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.6 <a 
     86 href="#x1-430002.1.6" id="QQ2-1-46">coding example</a></span>
     87 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.7 <a 
     88 href="#x1-440002.1.7" id="QQ2-1-47">decoding example</a></span>
     89 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.8 <a 
     90 href="#x1-450002.1.8" id="QQ2-1-48">end-of-packet alignment</a></span>
     91 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.9 <a 
     92 href="#x1-460002.1.9" id="QQ2-1-49">reading zero bits</a></span>
     93 <br />&#x00A0;<span class="sectionToc" >3 <a 
     94 href="#x1-470003" id="QQ2-1-50">Probability Model and Codebooks</a></span>
     95 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >3.1 <a 
     96 href="#x1-480003.1" id="QQ2-1-51">Overview</a></span>
     97 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >3.1.1 <a 
     98 href="#x1-490003.1.1" id="QQ2-1-52">Bitwise operation</a></span>
     99 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >3.2 <a 
    100 href="#x1-500003.2" id="QQ2-1-53">Packed codebook format</a></span>
    101 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >3.2.1 <a 
    102 href="#x1-510003.2.1" id="QQ2-1-54">codebook decode</a></span>
    103 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >3.3 <a 
    104 href="#x1-570003.3" id="QQ2-1-62">Use of the codebook abstraction</a></span>
    105 <br />&#x00A0;<span class="sectionToc" >4 <a 
    106 href="#x1-580004" id="QQ2-1-63">Codec Setup and Packet Decode</a></span>
    107 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >4.1 <a 
    108 href="#x1-590004.1" id="QQ2-1-64">Overview</a></span>
    109 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >4.2 <a 
    110 href="#x1-600004.2" id="QQ2-1-65">Header decode and decode setup</a></span>
    111 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.2.1 <a 
    112 href="#x1-610004.2.1" id="QQ2-1-66">Common header decode</a></span>
    113 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.2.2 <a 
    114 href="#x1-620004.2.2" id="QQ2-1-67">Identification header</a></span>
    115                                                                                         
    116 
    117                                                                                         
    118 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.2.3 <a 
    119 href="#x1-630004.2.3" id="QQ2-1-68">Comment header</a></span>
    120 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.2.4 <a 
    121 href="#x1-640004.2.4" id="QQ2-1-69">Setup header</a></span>
    122 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >4.3 <a 
    123 href="#x1-710004.3" id="QQ2-1-77">Audio packet decode and synthesis</a></span>
    124 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.1 <a 
    125 href="#x1-720004.3.1" id="QQ2-1-78">packet type, mode and window decode</a></span>
    126 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.2 <a 
    127 href="#x1-730004.3.2" id="QQ2-1-79">floor curve decode</a></span>
    128 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.3 <a 
    129 href="#x1-740004.3.3" id="QQ2-1-80">nonzero vector propagate</a></span>
    130 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.4 <a 
    131 href="#x1-750004.3.4" id="QQ2-1-81">residue decode</a></span>
    132 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.5 <a 
    133 href="#x1-760004.3.5" id="QQ2-1-82">inverse coupling</a></span>
    134 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.6 <a 
    135 href="#x1-770004.3.6" id="QQ2-1-83">dot product</a></span>
    136 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.7 <a 
    137 href="#x1-780004.3.7" id="QQ2-1-84">inverse MDCT</a></span>
    138 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.8 <a 
    139 href="#x1-790004.3.8" id="QQ2-1-85">overlap&#x02D9;add</a></span>
    140 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.9 <a 
    141 href="#x1-800004.3.9" id="QQ2-1-86">output channel order</a></span>
    142 <br />&#x00A0;<span class="sectionToc" >5 <a 
    143 href="#x1-810005" id="QQ2-1-87">comment field and header specification</a></span>
    144 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >5.1 <a 
    145 href="#x1-820005.1" id="QQ2-1-88">Overview</a></span>
    146 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >5.2 <a 
    147 href="#x1-830005.2" id="QQ2-1-89">Comment encoding</a></span>
    148 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >5.2.1 <a 
    149 href="#x1-840005.2.1" id="QQ2-1-90">Structure</a></span>
    150 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >5.2.2 <a 
    151 href="#x1-850005.2.2" id="QQ2-1-91">Content vector format</a></span>
    152 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >5.2.3 <a 
    153 href="#x1-880005.2.3" id="QQ2-1-94">Encoding</a></span>
    154 <br />&#x00A0;<span class="sectionToc" >6 <a 
    155 href="#x1-890006" id="QQ2-1-95">Floor type 0 setup and decode</a></span>
    156 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >6.1 <a 
    157 href="#x1-900006.1" id="QQ2-1-96">Overview</a></span>
    158 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >6.2 <a 
    159 href="#x1-910006.2" id="QQ2-1-97">Floor 0 format</a></span>
    160 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >6.2.1 <a 
    161 href="#x1-920006.2.1" id="QQ2-1-98">header decode</a></span>
    162 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >6.2.2 <a 
    163 href="#x1-930006.2.2" id="QQ2-1-99">packet decode</a></span>
    164 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >6.2.3 <a 
    165 href="#x1-940006.2.3" id="QQ2-1-100">curve computation</a></span>
    166 <br />&#x00A0;<span class="sectionToc" >7 <a 
    167 href="#x1-950007" id="QQ2-1-101">Floor type 1 setup and decode</a></span>
    168 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >7.1 <a 
    169 href="#x1-960007.1" id="QQ2-1-102">Overview</a></span>
    170 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >7.2 <a 
    171 href="#x1-970007.2" id="QQ2-1-103">Floor 1 format</a></span>
    172 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >7.2.1 <a 
    173 href="#x1-980007.2.1" id="QQ2-1-104">model</a></span>
    174 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >7.2.2 <a 
    175 href="#x1-990007.2.2" id="QQ2-1-109">header decode</a></span>
    176                                                                                         
    177 
    178                                                                                         
    179 <br />&#x00A0;<span class="sectionToc" >8 <a 
    180 href="#x1-1020008" id="QQ2-1-112">Residue setup and decode</a></span>
    181 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.1 <a 
    182 href="#x1-1030008.1" id="QQ2-1-113">Overview</a></span>
    183 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.2 <a 
    184 href="#x1-1040008.2" id="QQ2-1-114">Residue format</a></span>
    185 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.3 <a 
    186 href="#x1-1050008.3" id="QQ2-1-116">residue 0</a></span>
    187 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.4 <a 
    188 href="#x1-1060008.4" id="QQ2-1-117">residue 1</a></span>
    189 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.5 <a 
    190 href="#x1-1070008.5" id="QQ2-1-118">residue 2</a></span>
    191 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.6 <a 
    192 href="#x1-1080008.6" id="QQ2-1-120">Residue decode</a></span>
    193 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.1 <a 
    194 href="#x1-1090008.6.1" id="QQ2-1-121">header decode</a></span>
    195 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.2 <a 
    196 href="#x1-1100008.6.2" id="QQ2-1-122">packet decode</a></span>
    197 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.3 <a 
    198 href="#x1-1110008.6.3" id="QQ2-1-123">format 0 specifics</a></span>
    199 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.4 <a 
    200 href="#x1-1120008.6.4" id="QQ2-1-124">format 1 specifics</a></span>
    201 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.5 <a 
    202 href="#x1-1130008.6.5" id="QQ2-1-125">format 2 specifics</a></span>
    203 <br />&#x00A0;<span class="sectionToc" >9 <a 
    204 href="#x1-1140009" id="QQ2-1-126">Helper equations</a></span>
    205 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >9.1 <a 
    206 href="#x1-1150009.1" id="QQ2-1-127">Overview</a></span>
    207 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >9.2 <a 
    208 href="#x1-1160009.2" id="QQ2-1-128">Functions</a></span>
    209 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.1 <a 
    210 href="#x1-1170009.2.1" id="QQ2-1-129">ilog</a></span>
    211 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.2 <a 
    212 href="#x1-1180009.2.2" id="QQ2-1-130">float32&#x02D9;unpack</a></span>
    213 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.3 <a 
    214 href="#x1-1190009.2.3" id="QQ2-1-131">lookup1&#x02D9;values</a></span>
    215 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.4 <a 
    216 href="#x1-1200009.2.4" id="QQ2-1-132">low&#x02D9;neighbor</a></span>
    217 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.5 <a 
    218 href="#x1-1210009.2.5" id="QQ2-1-133">high&#x02D9;neighbor</a></span>
    219 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.6 <a 
    220 href="#x1-1220009.2.6" id="QQ2-1-134">render&#x02D9;point</a></span>
    221 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.7 <a 
    222 href="#x1-1230009.2.7" id="QQ2-1-135">render&#x02D9;line</a></span>
    223 <br />&#x00A0;<span class="sectionToc" >10 <a 
    224 href="#x1-12400010" id="QQ2-1-136">Tables</a></span>
    225 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >10.1 <a 
    226 href="#x1-12500010.1" id="QQ2-1-137">floor1_inverse_dB_table</a></span>
    227 <br />&#x00A0;<span class="sectionToc" >A <a 
    228 href="#x1-126000A" id="QQ2-1-138">Embedding Vorbis into an Ogg stream</a></span>
    229 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >A.1 <a 
    230 href="#x1-127000A.1" id="QQ2-1-139">Overview</a></span>
    231 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >A.1.1 <a 
    232 href="#x1-128000A.1.1" id="QQ2-1-140">Restrictions</a></span>
    233 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >A.1.2 <a 
    234 href="#x1-129000A.1.2" id="QQ2-1-141">MIME type</a></span>
    235 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >A.2 <a 
    236 href="#x1-130000A.2" id="QQ2-1-142">Encapsulation</a></span>
    237                                                                                         
    238 
    239                                                                                         
    240 <br />&#x00A0;<span class="sectionToc" >B <a 
    241 href="#x1-132000B" id="QQ2-1-144">Vorbis encapsulation in RTP</a></span>
    242 </div>
    243                                                                                         
    244 
    245                                                                                         
    246 <h3 class="sectionHead"><span class="titlemark">1  </span> <a 
    247  id="x1-20001"></a>Introduction and Description</h3>
    248 <!--l. 6--><p class="noindent" >
    249 <h4 class="subsectionHead"><span class="titlemark">1.1  </span> <a 
    250  id="x1-30001.1"></a>Overview</h4>
    251 <!--l. 8--><p class="noindent" >This document provides a high level description of the Vorbis codec&#8217;s construction. A bit-by-bit
    252 specification appears beginning in <a 
    253 href="#x1-580004">Section&#x00A0;4</a>, &#8220;<a 
    254 href="#x1-580004">Codec Setup and Packet Decode<!--tex4ht:ref: vorbis:spec:codec --></a>&#8221;. The later
    255 sections assume a high-level understanding of the Vorbis decode process, which is provided
    256 here.
    257 <!--l. 15--><p class="noindent" >
    258 <h5 class="subsubsectionHead"><span class="titlemark">1.1.1  </span> <a 
    259  id="x1-40001.1.1"></a>Application</h5>
    260 <!--l. 16--><p class="noindent" >Vorbis is a general purpose perceptual audio CODEC intended to allow maximum encoder
    261 flexibility, thus allowing it to scale competitively over an exceptionally wide range of bitrates. At
    262 the high quality/bitrate end of the scale (CD or DAT rate stereo, 16/24 bits) it is in the same
    263 league as MPEG-2 and MPC. Similarly, the 1.0 encoder can encode high-quality CD and DAT
    264 rate stereo at below 48kbps without resampling to a lower rate. Vorbis is also intended for lower
    265 and higher sample rates (from 8kHz telephony to 192kHz digital masters) and a range of channel
    266 representations (monaural, polyphonic, stereo, quadraphonic, 5.1, ambisonic, or up to 255
    267 discrete channels).
    268 <!--l. 29--><p class="noindent" >
    269 <h5 class="subsubsectionHead"><span class="titlemark">1.1.2  </span> <a 
    270  id="x1-50001.1.2"></a>Classification</h5>
    271 <!--l. 30--><p class="noindent" >Vorbis I is a forward-adaptive monolithic transform CODEC based on the Modified Discrete
    272 Cosine Transform. The codec is structured to allow addition of a hybrid wavelet filterbank in
    273 Vorbis II to offer better transient response and reproduction using a transform better suited to
    274 localized time events.
    275                                                                                         
    276 
    277                                                                                         
    278 <!--l. 37--><p class="noindent" >
    279 <h5 class="subsubsectionHead"><span class="titlemark">1.1.3  </span> <a 
    280  id="x1-60001.1.3"></a>Assumptions</h5>
    281 <!--l. 39--><p class="noindent" >The Vorbis CODEC design assumes a complex, psychoacoustically-aware encoder and simple,
    282 low-complexity decoder. Vorbis decode is computationally simpler than mp3, although it does
    283 require more working memory as Vorbis has no static probability model; the vector codebooks
    284 used in the first stage of decoding from the bitstream are packed in their entirety into the Vorbis
    285 bitstream headers. In packed form, these codebooks occupy only a few kilobytes; the extent to
    286 which they are pre-decoded into a cache is the dominant factor in decoder memory
    287 usage.
    288 <!--l. 50--><p class="noindent" >Vorbis provides none of its own framing, synchronization or protection against errors; it
    289 is solely a method of accepting input audio, dividing it into individual frames and
    290 compressing these frames into raw, unformatted &#8217;packets&#8217;. The decoder then accepts
    291 these raw packets in sequence, decodes them, synthesizes audio frames from them, and
    292 reassembles the frames into a facsimile of the original audio stream. Vorbis is a free-form
    293 variable bit rate (VBR) codec and packets have no minimum size, maximum size, or
    294 fixed/expected size. Packets are designed that they may be truncated (or padded)
    295 and remain decodable; this is not to be considered an error condition and is used
    296 extensively in bitrate management in peeling. Both the transport mechanism and
    297 decoder must allow that a packet may be any size, or end before or after packet decode
    298 expects.
    299 <!--l. 64--><p class="noindent" >Vorbis packets are thus intended to be used with a transport mechanism that provides free-form
    300 framing, sync, positioning and error correction in accordance with these design assumptions, such
    301 as Ogg (for file transport) or RTP (for network multicast). For purposes of a few examples in this
    302 document, we will assume that Vorbis is to be embedded in an Ogg stream specifically,
    303 although this is by no means a requirement or fundamental assumption in the Vorbis
    304 design.
    305 <!--l. 72--><p class="noindent" >The specification for embedding Vorbis into an Ogg transport stream is in <a 
    306 href="#x1-126000A">Section&#x00A0;A</a>,
    307 &#8220;<a 
    308 href="#x1-126000A">Embedding Vorbis into an Ogg stream<!--tex4ht:ref: vorbis:over:ogg --></a>&#8221;.
    309 <!--l. 77--><p class="noindent" >
    310 <h5 class="subsubsectionHead"><span class="titlemark">1.1.4  </span> <a 
    311  id="x1-70001.1.4"></a>Codec Setup and Probability Model</h5>
    312 <!--l. 79--><p class="noindent" >Vorbis&#8217; heritage is as a research CODEC and its current design reflects a desire to allow multiple
    313 decades of continuous encoder improvement before running out of room within the codec
    314 specification. For these reasons, configurable aspects of codec setup intentionally lean toward the
    315 extreme of forward adaptive.
    316                                                                                         
    317 
    318                                                                                         
    319 <!--l. 85--><p class="noindent" >The single most controversial design decision in Vorbis (and the most unusual for a Vorbis
    320 developer to keep in mind) is that the entire probability model of the codec, the Huffman and
    321 VQ codebooks, is packed into the bitstream header along with extensive CODEC setup
    322 parameters (often several hundred fields). This makes it impossible, as it would be with
    323 MPEG audio layers, to embed a simple frame type flag in each audio packet, or begin
    324 decode at any frame in the stream without having previously fetched the codec setup
    325 header.
    326 <!--l. 95--><p class="noindent" ><span class="likesubparagraphHead"><a 
    327  id="x1-80001.1.4"></a><span 
    328 class="cmbx-12">Note:</span></span> Vorbis <span 
    329 class="cmti-12">can </span>initiate decode at any arbitrary packet within a bitstream so long as the codec
    330 has been initialized/setup with the setup headers.
    331 <!--l. 101--><p class="noindent" >Thus, Vorbis headers are both required for decode to begin and relatively large as bitstream
    332 headers go. The header size is unbounded, although for streaming a rule-of-thumb of 4kB or less
    333 is recommended (and Xiph.Org&#8217;s Vorbis encoder follows this suggestion).
    334 <!--l. 106--><p class="noindent" >Our own design work indicates the primary liability of the required header is in mindshare; it is
    335 an unusual design and thus causes some amount of complaint among engineers as this runs
    336 against current design trends (and also points out limitations in some existing software/interface
    337 designs, such as Windows&#8217; ACM codec framework). However, we find that it does not
    338 fundamentally limit Vorbis&#8217; suitable application space.
    339 <!--l. 115--><p class="noindent" >
    340 <h5 class="subsubsectionHead"><span class="titlemark">1.1.5  </span> <a 
    341  id="x1-90001.1.5"></a>Format Specification</h5>
    342 <!--l. 116--><p class="noindent" >The Vorbis format is well-defined by its decode specification; any encoder that produces packets
    343 that are correctly decoded by the reference Vorbis decoder described below may be considered
    344 a proper Vorbis encoder. A decoder must faithfully and completely implement the
    345 specification defined below (except where noted) to be considered a proper Vorbis
    346 decoder.
    347 <!--l. 123--><p class="noindent" >
    348 <h5 class="subsubsectionHead"><span class="titlemark">1.1.6  </span> <a 
    349  id="x1-100001.1.6"></a>Hardware Profile</h5>
    350                                                                                         
    351 
    352                                                                                         
    353 <!--l. 124--><p class="noindent" >Although Vorbis decode is computationally simple, it may still run into specific limitations of an
    354 embedded design. For this reason, embedded designs are allowed to deviate in limited ways from
    355 the &#8216;full&#8217; decode specification yet still be certified compliant. These optional omissions are
    356 labelled in the spec where relevant.
    357 <!--l. 131--><p class="noindent" >
    358 <h4 class="subsectionHead"><span class="titlemark">1.2  </span> <a 
    359  id="x1-110001.2"></a>Decoder Configuration</h4>
    360 <!--l. 133--><p class="noindent" >Decoder setup consists of configuration of multiple, self-contained component abstractions that
    361 perform specific functions in the decode pipeline. Each different component instance of a specific
    362 type is semantically interchangeable; decoder configuration consists both of internal component
    363 configuration, as well as arrangement of specific instances into a decode pipeline. Componentry
    364 arrangement is roughly as follows:
    365 <div class="center" 
    366 >
    367 <!--l. 141--><p class="noindent" >
    368 
    369 <!--l. 142--><p class="noindent" ><img 
    370 src="components.png" alt="PIC"  
    371 >
    372 <br /> <div class="caption" 
    373 ><span class="id">Figure&#x00A0;1: </span><span  
    374 class="content">decoder pipeline configuration</span></div><!--tex4ht:label?: x1-110011 -->
    375 </div>
    376 <!--l. 146--><p class="noindent" >
    377 <h5 class="subsubsectionHead"><span class="titlemark">1.2.1  </span> <a 
    378  id="x1-120001.2.1"></a>Global Config</h5>
    379 <!--l. 147--><p class="noindent" >Global codec configuration consists of a few audio related fields (sample rate, channels), Vorbis
    380 version (always &#8217;0&#8217; in Vorbis I), bitrate hints, and the lists of component instances. All other
    381 configuration is in the context of specific components.
    382 <!--l. 152--><p class="noindent" >
    383 <h5 class="subsubsectionHead"><span class="titlemark">1.2.2  </span> <a 
    384  id="x1-130001.2.2"></a>Mode</h5>
    385                                                                                         
    386 
    387                                                                                         
    388 <!--l. 154--><p class="noindent" >Each Vorbis frame is coded according to a master &#8217;mode&#8217;. A bitstream may use one or many
    389 modes.
    390 <!--l. 157--><p class="noindent" >The mode mechanism is used to encode a frame according to one of multiple possible
    391 methods with the intention of choosing a method best suited to that frame. Different
    392 modes are, e.g. how frame size is changed from frame to frame. The mode number of a
    393 frame serves as a top level configuration switch for all other specific aspects of frame
    394 decode.
    395 <!--l. 164--><p class="noindent" >A &#8217;mode&#8217; configuration consists of a frame size setting, window type (always 0, the Vorbis
    396 window, in Vorbis I), transform type (always type 0, the MDCT, in Vorbis I) and a mapping
    397 number. The mapping number specifies which mapping configuration instance to use for low-level
    398 packet decode and synthesis.
    399 <!--l. 171--><p class="noindent" >
    400 <h5 class="subsubsectionHead"><span class="titlemark">1.2.3  </span> <a 
    401  id="x1-140001.2.3"></a>Mapping</h5>
    402 <!--l. 173--><p class="noindent" >A mapping contains a channel coupling description and a list of &#8217;submaps&#8217; that bundle sets
    403 of channel vectors together for grouped encoding and decoding. These submaps are
    404 not references to external components; the submap list is internal and specific to a
    405 mapping.
    406 <!--l. 178--><p class="noindent" >A &#8217;submap&#8217; is a configuration/grouping that applies to a subset of floor and residue vectors
    407 within a mapping. The submap functions as a last layer of indirection such that specific special
    408 floor or residue settings can be applied not only to all the vectors in a given mode, but also
    409 specific vectors in a specific mode. Each submap specifies the proper floor and residue
    410 instance number to use for decoding that submap&#8217;s spectral floor and spectral residue
    411 vectors.
    412 <!--l. 186--><p class="noindent" >As an example:
    413 <!--l. 188--><p class="noindent" >Assume a Vorbis stream that contains six channels in the standard 5.1 format. The sixth
    414 channel, as is normal in 5.1, is bass only. Therefore it would be wasteful to encode a
    415 full-spectrum version of it as with the other channels. The submapping mechanism can be used
    416 to apply a full range floor and residue encoding to channels 0 through 4, and a bass-only
    417 representation to the bass channel, thus saving space. In this example, channels 0-4 belong to
    418 submap 0 (which indicates use of a full-range floor) and channel 5 belongs to submap 1, which
    419 uses a bass-only representation.
    420                                                                                         
    421 
    422                                                                                         
    423 <!--l. 199--><p class="noindent" >
    424 <h5 class="subsubsectionHead"><span class="titlemark">1.2.4  </span> <a 
    425  id="x1-150001.2.4"></a>Floor</h5>
    426 <!--l. 201--><p class="noindent" >Vorbis encodes a spectral &#8217;floor&#8217; vector for each PCM channel. This vector is a low-resolution
    427 representation of the audio spectrum for the given channel in the current frame, generally used
    428 akin to a whitening filter. It is named a &#8217;floor&#8217; because the Xiph.Org reference encoder has
    429 historically used it as a unit-baseline for spectral resolution.
    430 <!--l. 208--><p class="noindent" >A floor encoding may be of two types. Floor 0 uses a packed LSP representation on a dB
    431 amplitude scale and Bark frequency scale. Floor 1 represents the curve as a piecewise linear
    432 interpolated representation on a dB amplitude scale and linear frequency scale. The two floors
    433 are semantically interchangeable in encoding/decoding. However, floor type 1 provides more
    434 stable inter-frame behavior, and so is the preferred choice in all coupled-stereo and
    435 high bitrate modes. Floor 1 is also considerably less expensive to decode than floor
    436 0.
    437 <!--l. 218--><p class="noindent" >Floor 0 is not to be considered deprecated, but it is of limited modern use. No known Vorbis
    438 encoder past Xiph.org&#8217;s own beta 4 makes use of floor 0.
    439 <!--l. 222--><p class="noindent" >The values coded/decoded by a floor are both compactly formatted and make use of entropy
    440 coding to save space. For this reason, a floor configuration generally refers to multiple
    441 codebooks in the codebook component list. Entropy coding is thus provided as an
    442 abstraction, and each floor instance may choose from any and all available codebooks when
    443 coding/decoding.
    444 <!--l. 230--><p class="noindent" >
    445 <h5 class="subsubsectionHead"><span class="titlemark">1.2.5  </span> <a 
    446  id="x1-160001.2.5"></a>Residue</h5>
    447 <!--l. 231--><p class="noindent" >The spectral residue is the fine structure of the audio spectrum once the floor curve has been
    448 subtracted out. In simplest terms, it is coded in the bitstream using cascaded (multi-pass) vector
    449 quantization according to one of three specific packing/coding algorithms numbered
    450 0 through 2. The packing algorithm details are configured by residue instance. As
    451 with the floor components, the final VQ/entropy encoding is provided by external
    452 codebook instances and each residue instance may choose from any and all available
    453 codebooks.
    454 <!--l. 241--><p class="noindent" >
    455                                                                                         
    456 
    457                                                                                         
    458 <h5 class="subsubsectionHead"><span class="titlemark">1.2.6  </span> <a 
    459  id="x1-170001.2.6"></a>Codebooks</h5>
    460 <!--l. 243--><p class="noindent" >Codebooks are a self-contained abstraction that perform entropy decoding and, optionally, use
    461 the entropy-decoded integer value as an offset into an index of output value vectors, returning
    462 the indicated vector of values.
    463 <!--l. 248--><p class="noindent" >The entropy coding in a Vorbis I codebook is provided by a standard Huffman binary tree
    464 representation. This tree is tightly packed using one of several methods, depending on whether
    465 codeword lengths are ordered or unordered, or the tree is sparse.
    466 <!--l. 253--><p class="noindent" >The codebook vector index is similarly packed according to index characteristic. Most commonly,
    467 the vector index is encoded as a single list of values of possible values that are then permuted
    468 into a list of n-dimensional rows (lattice VQ).
    469 <!--l. 260--><p class="noindent" >
    470 <h4 class="subsectionHead"><span class="titlemark">1.3  </span> <a 
    471  id="x1-180001.3"></a>High-level Decode Process</h4>
    472 <!--l. 262--><p class="noindent" >
    473 <h5 class="subsubsectionHead"><span class="titlemark">1.3.1  </span> <a 
    474  id="x1-190001.3.1"></a>Decode Setup</h5>
    475 <!--l. 264--><p class="noindent" >Before decoding can begin, a decoder must initialize using the bitstream headers matching the
    476 stream to be decoded. Vorbis uses three header packets; all are required, in-order, by
    477 this specification. Once set up, decode may begin at any audio packet belonging to
    478 the Vorbis stream. In Vorbis I, all packets after the three initial headers are audio
    479 packets.
    480 <!--l. 271--><p class="noindent" >The header packets are, in order, the identification header, the comments header, and the setup
    481 header.
    482 <!--l. 274--><p class="noindent" ><span class="paragraphHead"><a 
    483  id="x1-200001.3.1"></a><span 
    484 class="cmbx-12">Identification Header</span></span>
    485 The identification header identifies the bitstream as Vorbis, Vorbis version, and the simple audio
    486 characteristics of the stream such as sample rate and number of channels.
    487                                                                                         
    488 
    489                                                                                         
    490 <!--l. 279--><p class="noindent" ><span class="paragraphHead"><a 
    491  id="x1-210001.3.1"></a><span 
    492 class="cmbx-12">Comment Header</span></span>
    493 The comment header includes user text comments (&#8220;tags&#8221;) and a vendor string for the
    494 application/library that produced the bitstream. The encoding and proper use of the comment
    495 header is described in <a 
    496 href="#x1-810005">Section&#x00A0;5</a>, &#8220;<a 
    497 href="#x1-810005">comment field and header specification<!--tex4ht:ref: vorbis:spec:comment --></a>&#8221;.
    498 <!--l. 284--><p class="noindent" ><span class="paragraphHead"><a 
    499  id="x1-220001.3.1"></a><span 
    500 class="cmbx-12">Setup Header</span></span>
    501 The setup header includes extensive CODEC setup information as well as the complete VQ and
    502 Huffman codebooks needed for decode.
    503 <!--l. 289--><p class="noindent" >
    504 <h5 class="subsubsectionHead"><span class="titlemark">1.3.2  </span> <a 
    505  id="x1-230001.3.2"></a>Decode Procedure</h5>
    506 <!--l. 291--><p class="noindent" >The decoding and synthesis procedure for all audio packets is fundamentally the same.
    507       <ol  class="enumerate1" >
    508       <li 
    509   class="enumerate" id="x1-23002x1">decode packet type flag
    510       </li>
    511       <li 
    512   class="enumerate" id="x1-23004x2">decode mode number
    513       </li>
    514       <li 
    515   class="enumerate" id="x1-23006x3">decode window shape (long windows only)
    516       </li>
    517       <li 
    518   class="enumerate" id="x1-23008x4">decode floor
    519       </li>
    520       <li 
    521   class="enumerate" id="x1-23010x5">decode residue into residue vectors
    522       </li>
    523       <li 
    524   class="enumerate" id="x1-23012x6">inverse channel coupling of residue vectors
    525       </li>
    526       <li 
    527   class="enumerate" id="x1-23014x7">generate floor curve from decoded floor data
    528       </li>
    529       <li 
    530   class="enumerate" id="x1-23016x8">compute dot product of floor and residue, producing audio spectrum vector
    531       </li>
    532       <li 
    533   class="enumerate" id="x1-23018x9">inverse monolithic transform of audio spectrum vector, always an MDCT in Vorbis
    534       I
    535                                                                                         
    536 
    537                                                                                         
    538       </li>
    539       <li 
    540   class="enumerate" id="x1-23020x10">overlap/add left-hand output of transform with right-hand output of previous frame
    541       </li>
    542       <li 
    543   class="enumerate" id="x1-23022x11">store right hand-data from transform of current frame for future lapping
    544       </li>
    545       <li 
    546   class="enumerate" id="x1-23024x12">if not first frame, return results of overlap/add as audio result of current frame</li></ol>
    547 <!--l. 308--><p class="noindent" >Note that clever rearrangement of the synthesis arithmetic is possible; as an example, one can
    548 take advantage of symmetries in the MDCT to store the right-hand transform data of a partial
    549 MDCT for a 50% inter-frame buffer space savings, and then complete the transform later before
    550 overlap/add with the next frame. This optimization produces entirely equivalent output and is
    551 naturally perfectly legal. The decoder must be <span 
    552 class="cmti-12">entirely mathematically equivalent </span>to the
    553 specification, it need not be a literal semantic implementation.
    554 <!--l. 317--><p class="noindent" ><span class="paragraphHead"><a 
    555  id="x1-240001.3.2"></a><span 
    556 class="cmbx-12">Packet type decode</span></span>
    557 Vorbis I uses four packet types. The first three packet types mark each of the three Vorbis
    558 headers described above. The fourth packet type marks an audio packet. All other packet types
    559 are reserved; packets marked with a reserved type should be ignored.
    560 <!--l. 324--><p class="noindent" >Following the three header packets, all packets in a Vorbis I stream are audio. The first step of
    561 audio packet decode is to read and verify the packet type; <span 
    562 class="cmti-12">a non-audio packet when audio is</span>
    563 <span 
    564 class="cmti-12">expected indicates stream corruption or a non-compliant stream. The decoder must ignore the</span>
    565 <span 
    566 class="cmti-12">packet and not attempt decoding it to audio</span>.
    567 <!--l. 334--><p class="noindent" ><span class="paragraphHead"><a 
    568  id="x1-250001.3.2"></a><span 
    569 class="cmbx-12">Mode decode</span></span>
    570 Vorbis allows an encoder to set up multiple, numbered packet &#8217;modes&#8217;, as described earlier, all of
    571 which may be used in a given Vorbis stream. The mode is encoded as an integer used as a direct
    572 offset into the mode instance index.
    573 <!--l. 341--><p class="noindent" ><span class="paragraphHead"><a 
    574  id="x1-260001.3.2"></a><span 
    575 class="cmbx-12">Window shape decode (long windows only)</span></span>
    576 Vorbis frames may be one of two PCM sample sizes specified during codec setup. In Vorbis I,
    577 legal frame sizes are powers of two from 64 to 8192 samples. Aside from coupling, Vorbis
    578 handles channels as independent vectors and these frame sizes are in samples per
    579 channel.
    580                                                                                         
    581 
    582                                                                                         
    583 <!--l. 348--><p class="noindent" >Vorbis uses an overlapping transform, namely the MDCT, to blend one frame into the next,
    584 avoiding most inter-frame block boundary artifacts. The MDCT output of one frame is windowed
    585 according to MDCT requirements, overlapped 50% with the output of the previous frame and
    586 added. The window shape assures seamless reconstruction.
    587 <!--l. 354--><p class="noindent" >This is easy to visualize in the case of equal sized-windows:
    588 <div class="center" 
    589 >
    590 <!--l. 356--><p class="noindent" >
    591 
    592 <!--l. 357--><p class="noindent" ><img 
    593 src="window1.png" alt="PIC"  
    594 >
    595 <br /> <div class="caption" 
    596 ><span class="id">Figure&#x00A0;2: </span><span  
    597 class="content">overlap of two equal-sized windows</span></div><!--tex4ht:label?: x1-260012 -->
    598 </div>
    599 <!--l. 361--><p class="noindent" >And slightly more complex in the case of overlapping unequal sized windows:
    600 <div class="center" 
    601 >
    602 <!--l. 364--><p class="noindent" >
    603 
    604 <!--l. 365--><p class="noindent" ><img 
    605 src="window2.png" alt="PIC"  
    606 >
    607 <br /> <div class="caption" 
    608 ><span class="id">Figure&#x00A0;3: </span><span  
    609 class="content">overlap of a long and a short window</span></div><!--tex4ht:label?: x1-260023 -->
    610 </div>
    611 <!--l. 369--><p class="noindent" >In the unequal-sized window case, the window shape of the long window must be modified for
    612 seamless lapping as above. It is possible to correctly infer window shape to be applied to the
    613 current window from knowing the sizes of the current, previous and next window. It is legal for a
    614 decoder to use this method. However, in the case of a long window (short windows require no
    615 modification), Vorbis also codes two flag bits to specify pre- and post- window shape. Although
    616 not strictly necessary for function, this minor redundancy allows a packet to be fully decoded to
    617 the point of lapping entirely independently of any other packet, allowing easier abstraction of
    618 decode layers as well as allowing a greater level of easy parallelism in encode and
    619 decode.
    620 <!--l. 382--><p class="noindent" >A description of valid window functions for use with an inverse MDCT can be found in <span class="cite">[<a 
    621 href="#XSporer/Brandenburg/Edler">1</a>]</span>.
    622 Vorbis windows all use the slope function
    623 <center class="math-display" >
    624 <img 
    625 src="Vorbis_I_spec0x.png" alt="y = sin (.5 &lowast; &pi; sin2((x + .5)&#x2215;n &lowast; &pi;)).
    626                                                                                         
    627 
    628                                                                                         
    629 " class="math-display" ></center>
    630 <!--l. 385--><p class="nopar" >
    631 <!--l. 389--><p class="noindent" ><span class="paragraphHead"><a 
    632  id="x1-270001.3.2"></a><span 
    633 class="cmbx-12">floor decode</span></span>
    634 Each floor is encoded/decoded in channel order, however each floor belongs to a &#8217;submap&#8217; that
    635 specifies which floor configuration to use. All floors are decoded before residue decode
    636 begins.
    637 <!--l. 395--><p class="noindent" ><span class="paragraphHead"><a 
    638  id="x1-280001.3.2"></a><span 
    639 class="cmbx-12">residue decode</span></span>
    640 Although the number of residue vectors equals the number of channels, channel coupling may
    641 mean that the raw residue vectors extracted during decode do not map directly to specific
    642 channels. When channel coupling is in use, some vectors will correspond to coupled magnitude or
    643 angle. The coupling relationships are described in the codec setup and may differ from frame to
    644 frame, due to different mode numbers.
    645 <!--l. 404--><p class="noindent" >Vorbis codes residue vectors in groups by submap; the coding is done in submap order from
    646 submap 0 through n-1. This differs from floors which are coded using a configuration provided by
    647 submap number, but are coded individually in channel order.
    648 <!--l. 411--><p class="noindent" ><span class="paragraphHead"><a 
    649  id="x1-290001.3.2"></a><span 
    650 class="cmbx-12">inverse channel coupling</span></span>
    651 A detailed discussion of stereo in the Vorbis codec can be found in the document
    652 <a 
    653 href="stereo.html" >Stereo Channel Coupling in the Vorbis CODEC</a>. Vorbis is not limited to only stereo
    654 coupling, but the stereo document also gives a good overview of the generic coupling
    655 mechanism.
    656 <!--l. 419--><p class="noindent" >Vorbis coupling applies to pairs of residue vectors at a time; decoupling is done in-place a
    657 pair at a time in the order and using the vectors specified in the current mapping
    658 configuration. The decoupling operation is the same for all pairs, converting square polar
    659 representation (where one vector is magnitude and the second angle) back to Cartesian
    660 representation.
    661 <!--l. 426--><p class="noindent" >After decoupling, in order, each pair of vectors on the coupling list, the resulting residue vectors
    662 represent the fine spectral detail of each output channel.
    663                                                                                         
    664 
    665                                                                                         
    666 <!--l. 432--><p class="noindent" ><span class="paragraphHead"><a 
    667  id="x1-300001.3.2"></a><span 
    668 class="cmbx-12">generate floor curve</span></span>
    669 The decoder may choose to generate the floor curve at any appropriate time. It is reasonable to
    670 generate the output curve when the floor data is decoded from the raw packet, or it
    671 can be generated after inverse coupling and applied to the spectral residue directly,
    672 combining generation and the dot product into one step and eliminating some working
    673 space.
    674 <!--l. 441--><p class="noindent" >Both floor 0 and floor 1 generate a linear-range, linear-domain output vector to be multiplied
    675 (dot product) by the linear-range, linear-domain spectral residue.
    676 <!--l. 447--><p class="noindent" ><span class="paragraphHead"><a 
    677  id="x1-310001.3.2"></a><span 
    678 class="cmbx-12">compute floor/residue dot product</span></span>
    679 This step is straightforward; for each output channel, the decoder multiplies the floor curve and
    680 residue vectors element by element, producing the finished audio spectrum of each
    681 channel.
    682 <!--l. 455--><p class="noindent" >One point is worth mentioning about this dot product; a common mistake in a fixed point
    683 implementation might be to assume that a 32 bit fixed-point representation for floor and
    684 residue and direct multiplication of the vectors is sufficient for acceptable spectral depth
    685 in all cases because it happens to mostly work with the current Xiph.Org reference
    686 encoder.
    687 <!--l. 462--><p class="noindent" >However, floor vector values can span <span 
    688 class="cmsy-10x-x-120">&sim;</span>140dB (<span 
    689 class="cmsy-10x-x-120">&sim;</span>24 bits unsigned), and the audio spectrum
    690 vector should represent a minimum of 120dB (<span 
    691 class="cmsy-10x-x-120">&sim;</span>21 bits with sign), even when output is to a 16
    692 bit PCM device. For the residue vector to represent full scale if the floor is nailed
    693 to <span 
    694 class="cmsy-10x-x-120">&minus;</span>140dB, it must be able to span 0 to +140dB. For the residue vector to reach
    695 full scale if the floor is nailed at 0dB, it must be able to represent <span 
    696 class="cmsy-10x-x-120">&minus;</span>140dB to +0dB.
    697 Thus, in order to handle full range dynamics, a residue vector may span <span 
    698 class="cmsy-10x-x-120">&minus;</span>140dB to
    699 +140dB entirely within spec. A 280dB range is approximately 48 bits with sign; thus the
    700 residue vector must be able to represent a 48 bit range and the dot product must
    701 be able to handle an effective 48 bit times 24 bit multiplication. This range may be
    702 achieved using large (64 bit or larger) integers, or implementing a movable binary point
    703 representation.
    704 <!--l. 479--><p class="noindent" ><span class="paragraphHead"><a 
    705  id="x1-320001.3.2"></a><span 
    706 class="cmbx-12">inverse monolithic transform (MDCT)</span></span>
    707 The audio spectrum is converted back into time domain PCM audio via an inverse Modified
    708 Discrete Cosine Transform (MDCT). A detailed description of the MDCT is available in
    709 <span class="cite">[<a 
    710 href="#XSporer/Brandenburg/Edler">1</a>]</span>.
    711 <!--l. 485--><p class="noindent" >Note that the PCM produced directly from the MDCT is not yet finished audio; it must be
    712                                                                                         
    713 
    714                                                                                         
    715 lapped with surrounding frames using an appropriate window (such as the Vorbis window) before
    716 the MDCT can be considered orthogonal.
    717 <!--l. 492--><p class="noindent" ><span class="paragraphHead"><a 
    718  id="x1-330001.3.2"></a><span 
    719 class="cmbx-12">overlap/add data</span></span>
    720 Windowed MDCT output is overlapped and added with the right hand data of the previous
    721 window such that the 3/4 point of the previous window is aligned with the 1/4 point of the
    722 current window (as illustrated in the window overlap diagram). At this point, the audio data
    723 between the center of the previous frame and the center of the current frame is now finished and
    724 ready to be returned.
    725 <!--l. 501--><p class="noindent" ><span class="paragraphHead"><a 
    726  id="x1-340001.3.2"></a><span 
    727 class="cmbx-12">cache right hand data</span></span>
    728 The decoder must cache the right hand portion of the current frame to be lapped with the left
    729 hand portion of the next frame.
    730 <!--l. 507--><p class="noindent" ><span class="paragraphHead"><a 
    731  id="x1-350001.3.2"></a><span 
    732 class="cmbx-12">return finished audio data</span></span>
    733 The overlapped portion produced from overlapping the previous and current frame data
    734 is finished data to be returned by the decoder. This data spans from the center of
    735 the previous window to the center of the current window. In the case of same-sized
    736 windows, the amount of data to return is one-half block consisting of and only of the
    737 overlapped portions. When overlapping a short and long window, much of the returned
    738 range is not actually overlap. This does not damage transform orthogonality. Pay
    739 attention however to returning the correct data range; the amount of data to be returned
    740 is:
    741 <!--l. 519--><p class="noindent" >
    742 <div class="fancyvrb" id="fancyvrb1">
    743 <a 
    744  id="x1-35002r1"></a><span 
    745 class="cmr-6">1</span><span 
    746 class="cmtt-8">&#x00A0;</span><span 
    747 class="cmtt-8">&#x00A0;window_blocksize(previous_window)/4+window_blocksize(current_window)/4</span>
    748 </div>
    749 <!--l. 523--><p class="noindent" >from the center of the previous window to the center of the current window.
    750 <!--l. 526--><p class="noindent" >Data is not returned from the first frame; it must be used to &#8217;prime&#8217; the decode engine. The
    751 encoder accounts for this priming when calculating PCM offsets; after the first frame, the proper
    752 PCM output offset is &#8217;0&#8217; (as no data has been returned yet).
    753                                                                                         
    754 
    755                                                                                         
    756                                                                                         
    757 
    758                                                                                         
    759 <h3 class="sectionHead"><span class="titlemark">2  </span> <a 
    760  id="x1-360002"></a>Bitpacking Convention</h3>
    761 <!--l. 6--><p class="noindent" >
    762 <h4 class="subsectionHead"><span class="titlemark">2.1  </span> <a 
    763  id="x1-370002.1"></a>Overview</h4>
    764 <!--l. 8--><p class="noindent" >The Vorbis codec uses relatively unstructured raw packets containing arbitrary-width binary
    765 integer fields. Logically, these packets are a bitstream in which bits are coded one-by-one by the
    766 encoder and then read one-by-one in the same monotonically increasing order by the decoder.
    767 Most current binary storage arrangements group bits into a native word size of eight bits
    768 (octets), sixteen bits, thirty-two bits or, less commonly other fixed word sizes. The Vorbis
    769 bitpacking convention specifies the correct mapping of the logical packet bitstream into an actual
    770 representation in fixed-width words.
    771 <!--l. 19--><p class="noindent" >
    772 <h5 class="subsubsectionHead"><span class="titlemark">2.1.1  </span> <a 
    773  id="x1-380002.1.1"></a>octets, bytes and words</h5>
    774 <!--l. 21--><p class="noindent" >In most contemporary architectures, a &#8217;byte&#8217; is synonymous with an &#8217;octet&#8217;, that is, eight bits.
    775 This has not always been the case; seven, ten, eleven and sixteen bit &#8217;bytes&#8217; have been used.
    776 For purposes of the bitpacking convention, a byte implies the native, smallest integer
    777 storage representation offered by a platform. On modern platforms, this is generally
    778 assumed to be eight bits (not necessarily because of the processor but because of the
    779 filesystem/memory architecture. Modern filesystems invariably offer bytes as the fundamental
    780 atom of storage). A &#8217;word&#8217; is an integer size that is a grouped multiple of this smallest
    781 size.
    782 <!--l. 32--><p class="noindent" >The most ubiquitous architectures today consider a &#8217;byte&#8217; to be an octet (eight bits) and a word
    783 to be a group of two, four or eight bytes (16, 32 or 64 bits). Note however that the Vorbis
    784 bitpacking convention is still well defined for any native byte size; Vorbis uses the native
    785 bit-width of a given storage system. This document assumes that a byte is one octet for purposes
    786 of example.
    787 <!--l. 39--><p class="noindent" >
    788                                                                                         
    789 
    790                                                                                         
    791 <h5 class="subsubsectionHead"><span class="titlemark">2.1.2  </span> <a 
    792  id="x1-390002.1.2"></a>bit order</h5>
    793 <!--l. 41--><p class="noindent" >A byte has a well-defined &#8217;least significant&#8217; bit (LSb), which is the only bit set when the byte is
    794 storing the two&#8217;s complement integer value +1. A byte&#8217;s &#8217;most significant&#8217; bit (MSb) is at the
    795 opposite end of the byte. Bits in a byte are numbered from zero at the LSb to <span 
    796 class="cmmi-12">n </span>(<span 
    797 class="cmmi-12">n </span>= 7 in an
    798 octet) for the MSb.
    799 <!--l. 50--><p class="noindent" >
    800 <h5 class="subsubsectionHead"><span class="titlemark">2.1.3  </span> <a 
    801  id="x1-400002.1.3"></a>byte order</h5>
    802 <!--l. 52--><p class="noindent" >Words are native groupings of multiple bytes. Several byte orderings are possible in a word; the
    803 common ones are 3-2-1-0 (&#8217;big endian&#8217; or &#8217;most significant byte first&#8217; in which the
    804 highest-valued byte comes first), 0-1-2-3 (&#8217;little endian&#8217; or &#8217;least significant byte first&#8217; in
    805 which the lowest value byte comes first) and less commonly 3-1-2-0 and 0-2-1-3 (&#8217;mixed
    806 endian&#8217;).
    807 <!--l. 59--><p class="noindent" >The Vorbis bitpacking convention specifies storage and bitstream manipulation at the byte, not
    808 word, level, thus host word ordering is of a concern only during optimization when writing high
    809 performance code that operates on a word of storage at a time rather than by byte.
    810 Logically, bytes are always coded and decoded in order from byte zero through byte
    811 <span 
    812 class="cmmi-12">n</span>.
    813 <!--l. 68--><p class="noindent" >
    814 <h5 class="subsubsectionHead"><span class="titlemark">2.1.4  </span> <a 
    815  id="x1-410002.1.4"></a>coding bits into byte sequences</h5>
    816 <!--l. 70--><p class="noindent" >The Vorbis codec has need to code arbitrary bit-width integers, from zero to 32 bits
    817 wide, into packets. These integer fields are not aligned to the boundaries of the byte
    818 representation; the next field is written at the bit position at which the previous field
    819 ends.
    820 <!--l. 75--><p class="noindent" >The encoder logically packs integers by writing the LSb of a binary integer to the logical
    821 bitstream first, followed by next least significant bit, etc, until the requested number of bits
    822 have been coded. When packing the bits into bytes, the encoder begins by placing
    823 the LSb of the integer to be written into the least significant unused bit position of
    824 the destination byte, followed by the next-least significant bit of the source integer
    825 and so on up to the requested number of bits. When all bits of the destination byte
    826 have been filled, encoding continues by zeroing all bits of the next byte and writing
    827 the next bit into the bit position 0 of that byte. Decoding follows the same process
    828                                                                                         
    829 
    830                                                                                         
    831 as encoding, but by reading bits from the byte stream and reassembling them into
    832 integers.
    833 <!--l. 90--><p class="noindent" >
    834 <h5 class="subsubsectionHead"><span class="titlemark">2.1.5  </span> <a 
    835  id="x1-420002.1.5"></a>signedness</h5>
    836 <!--l. 92--><p class="noindent" >The signedness of a specific number resulting from decode is to be interpreted by the decoder
    837 given decode context. That is, the three bit binary pattern &#8217;b111&#8217; can be taken to represent
    838 either &#8217;seven&#8217; as an unsigned integer, or &#8217;-1&#8217; as a signed, two&#8217;s complement integer. The
    839 encoder and decoder are responsible for knowing if fields are to be treated as signed or
    840 unsigned.
    841 <!--l. 101--><p class="noindent" >
    842 <h5 class="subsubsectionHead"><span class="titlemark">2.1.6  </span> <a 
    843  id="x1-430002.1.6"></a>coding example</h5>
    844 <!--l. 103--><p class="noindent" >Code the 4 bit integer value &#8217;12&#8217; [b1100] into an empty bytestream. Bytestream result:
    845 <!--l. 106--><p class="noindent" >
    846 <div class="fancyvrb" id="fancyvrb2">
    847 <a 
    848  id="x1-43002r1"></a><span 
    849 class="cmr-6">1</span><span 
    850 class="cmtt-8">&#x00A0;</span><span 
    851 class="cmtt-8">&#x00A0;</span><span 
    852 class="cmtt-8">&#x00A0;</span><span 
    853 class="cmtt-8">&#x00A0;</span><span 
    854 class="cmtt-8">&#x00A0;</span><span 
    855 class="cmtt-8">&#x00A0;</span><span 
    856 class="cmtt-8">&#x00A0;</span><span 
    857 class="cmtt-8">&#x00A0;</span><span 
    858 class="cmtt-8">&#x00A0;</span><span 
    859 class="cmtt-8">&#x00A0;</span><span 
    860 class="cmtt-8">&#x00A0;</span><span 
    861 class="cmtt-8">&#x00A0;</span><span 
    862 class="cmtt-8">&#x00A0;</span><span 
    863 class="cmtt-8">&#x00A0;</span><span 
    864 class="cmtt-8">&#x00A0;</span><span 
    865 class="cmtt-8">&#x00A0;|</span>
    866 <br class="fancyvrb" /><a 
    867  id="x1-43004r2"></a><span 
    868 class="cmr-6">2</span><span 
    869 class="cmtt-8">&#x00A0;</span><span 
    870 class="cmtt-8">&#x00A0;</span><span 
    871 class="cmtt-8">&#x00A0;</span><span 
    872 class="cmtt-8">&#x00A0;</span><span 
    873 class="cmtt-8">&#x00A0;</span><span 
    874 class="cmtt-8">&#x00A0;</span><span 
    875 class="cmtt-8">&#x00A0;</span><span 
    876 class="cmtt-8">&#x00A0;</span><span 
    877 class="cmtt-8">&#x00A0;</span><span 
    878 class="cmtt-8">&#x00A0;</span><span 
    879 class="cmtt-8">&#x00A0;</span><span 
    880 class="cmtt-8">&#x00A0;</span><span 
    881 class="cmtt-8">&#x00A0;</span><span 
    882 class="cmtt-8">&#x00A0;</span><span 
    883 class="cmtt-8">&#x00A0;</span><span 
    884 class="cmtt-8">&#x00A0;V</span>
    885 <br class="fancyvrb" /><a 
    886  id="x1-43006r3"></a><span 
    887 class="cmr-6">3</span><span 
    888 class="cmtt-8">&#x00A0;</span><span 
    889 class="cmtt-8">&#x00A0;</span>
    890 <br class="fancyvrb" /><a 
    891  id="x1-43008r4"></a><span 
    892 class="cmr-6">4</span><span 
    893 class="cmtt-8">&#x00A0;</span><span 
    894 class="cmtt-8">&#x00A0;</span><span 
    895 class="cmtt-8">&#x00A0;</span><span 
    896 class="cmtt-8">&#x00A0;</span><span 
    897 class="cmtt-8">&#x00A0;</span><span 
    898 class="cmtt-8">&#x00A0;</span><span 
    899 class="cmtt-8">&#x00A0;</span><span 
    900 class="cmtt-8">&#x00A0;</span><span 
    901 class="cmtt-8">&#x00A0;</span><span 
    902 class="cmtt-8">&#x00A0;7</span><span 
    903 class="cmtt-8">&#x00A0;6</span><span 
    904 class="cmtt-8">&#x00A0;5</span><span 
    905 class="cmtt-8">&#x00A0;4</span><span 
    906 class="cmtt-8">&#x00A0;3</span><span 
    907 class="cmtt-8">&#x00A0;2</span><span 
    908 class="cmtt-8">&#x00A0;1</span><span 
    909 class="cmtt-8">&#x00A0;0</span>
    910 <br class="fancyvrb" /><a 
    911  id="x1-43010r5"></a><span 
    912 class="cmr-6">5</span><span 
    913 class="cmtt-8">&#x00A0;</span><span 
    914 class="cmtt-8">&#x00A0;byte</span><span 
    915 class="cmtt-8">&#x00A0;0</span><span 
    916 class="cmtt-8">&#x00A0;[0</span><span 
    917 class="cmtt-8">&#x00A0;0</span><span 
    918 class="cmtt-8">&#x00A0;0</span><span 
    919 class="cmtt-8">&#x00A0;0</span><span 
    920 class="cmtt-8">&#x00A0;1</span><span 
    921 class="cmtt-8">&#x00A0;1</span><span 
    922 class="cmtt-8">&#x00A0;0</span><span 
    923 class="cmtt-8">&#x00A0;0]</span><span 
    924 class="cmtt-8">&#x00A0;</span><span 
    925 class="cmtt-8">&#x00A0;&#x003C;-</span>
    926 <br class="fancyvrb" /><a 
    927  id="x1-43012r6"></a><span 
    928 class="cmr-6">6</span><span 
    929 class="cmtt-8">&#x00A0;</span><span 
    930 class="cmtt-8">&#x00A0;byte</span><span 
    931 class="cmtt-8">&#x00A0;1</span><span 
    932 class="cmtt-8">&#x00A0;[</span><span 
    933 class="cmtt-8">&#x00A0;</span><span 
    934 class="cmtt-8">&#x00A0;</span><span 
    935 class="cmtt-8">&#x00A0;</span><span 
    936 class="cmtt-8">&#x00A0;</span><span 
    937 class="cmtt-8">&#x00A0;</span><span 
    938 class="cmtt-8">&#x00A0;</span><span 
    939 class="cmtt-8">&#x00A0;</span><span 
    940 class="cmtt-8">&#x00A0;</span><span 
    941 class="cmtt-8">&#x00A0;</span><span 
    942 class="cmtt-8">&#x00A0;</span><span 
    943 class="cmtt-8">&#x00A0;</span><span 
    944 class="cmtt-8">&#x00A0;</span><span 
    945 class="cmtt-8">&#x00A0;</span><span 
    946 class="cmtt-8">&#x00A0;</span><span 
    947 class="cmtt-8">&#x00A0;]</span>
    948 <br class="fancyvrb" /><a 
    949  id="x1-43014r7"></a><span 
    950 class="cmr-6">7</span><span 
    951 class="cmtt-8">&#x00A0;</span><span 
    952 class="cmtt-8">&#x00A0;byte</span><span 
    953 class="cmtt-8">&#x00A0;2</span><span 
    954 class="cmtt-8">&#x00A0;[</span><span 
    955 class="cmtt-8">&#x00A0;</span><span 
    956 class="cmtt-8">&#x00A0;</span><span 
    957 class="cmtt-8">&#x00A0;</span><span 
    958 class="cmtt-8">&#x00A0;</span><span 
    959 class="cmtt-8">&#x00A0;</span><span 
    960 class="cmtt-8">&#x00A0;</span><span 
    961 class="cmtt-8">&#x00A0;</span><span 
    962 class="cmtt-8">&#x00A0;</span><span 
    963 class="cmtt-8">&#x00A0;</span><span 
    964 class="cmtt-8">&#x00A0;</span><span 
    965 class="cmtt-8">&#x00A0;</span><span 
    966 class="cmtt-8">&#x00A0;</span><span 
    967 class="cmtt-8">&#x00A0;</span><span 
    968 class="cmtt-8">&#x00A0;</span><span 
    969 class="cmtt-8">&#x00A0;]</span>
    970 <br class="fancyvrb" /><a 
    971  id="x1-43016r8"></a><span 
    972 class="cmr-6">8</span><span 
    973 class="cmtt-8">&#x00A0;</span><span 
    974 class="cmtt-8">&#x00A0;byte</span><span 
    975 class="cmtt-8">&#x00A0;3</span><span 
    976 class="cmtt-8">&#x00A0;[</span><span 
    977 class="cmtt-8">&#x00A0;</span><span 
    978 class="cmtt-8">&#x00A0;</span><span 
    979 class="cmtt-8">&#x00A0;</span><span 
    980 class="cmtt-8">&#x00A0;</span><span 
    981 class="cmtt-8">&#x00A0;</span><span 
    982 class="cmtt-8">&#x00A0;</span><span 
    983 class="cmtt-8">&#x00A0;</span><span 
    984 class="cmtt-8">&#x00A0;</span><span 
    985 class="cmtt-8">&#x00A0;</span><span 
    986 class="cmtt-8">&#x00A0;</span><span 
    987 class="cmtt-8">&#x00A0;</span><span 
    988 class="cmtt-8">&#x00A0;</span><span 
    989 class="cmtt-8">&#x00A0;</span><span 
    990 class="cmtt-8">&#x00A0;</span><span 
    991 class="cmtt-8">&#x00A0;]</span>
    992 <br class="fancyvrb" /><a 
    993  id="x1-43018r9"></a><span 
    994 class="cmr-6">9</span><span 
    995 class="cmtt-8">&#x00A0;</span><span 
    996 class="cmtt-8">&#x00A0;</span><span 
    997 class="cmtt-8">&#x00A0;</span><span 
    998 class="cmtt-8">&#x00A0;</span><span 
    999 class="cmtt-8">&#x00A0;</span><span 
   1000 class="cmtt-8">&#x00A0;</span><span 
   1001 class="cmtt-8">&#x00A0;</span><span 
   1002 class="cmtt-8">&#x00A0;</span><span 
   1003 class="cmtt-8">&#x00A0;</span><span 
   1004 class="cmtt-8">&#x00A0;</span><span 
   1005 class="cmtt-8">&#x00A0;</span><span 
   1006 class="cmtt-8">&#x00A0;</span><span 
   1007 class="cmtt-8">&#x00A0;</span><span 
   1008 class="cmtt-8">&#x00A0;</span><span 
   1009 class="cmtt-8">&#x00A0;...</span>
   1010 <br class="fancyvrb" /><a 
   1011  id="x1-43020r10"></a><span 
   1012 class="cmr-6">10</span><span 
   1013 class="cmtt-8">&#x00A0;</span><span 
   1014 class="cmtt-8">&#x00A0;byte</span><span 
   1015 class="cmtt-8">&#x00A0;n</span><span 
   1016 class="cmtt-8">&#x00A0;[</span><span 
   1017 class="cmtt-8">&#x00A0;</span><span 
   1018 class="cmtt-8">&#x00A0;</span><span 
   1019 class="cmtt-8">&#x00A0;</span><span 
   1020 class="cmtt-8">&#x00A0;</span><span 
   1021 class="cmtt-8">&#x00A0;</span><span 
   1022 class="cmtt-8">&#x00A0;</span><span 
   1023 class="cmtt-8">&#x00A0;</span><span 
   1024 class="cmtt-8">&#x00A0;</span><span 
   1025 class="cmtt-8">&#x00A0;</span><span 
   1026 class="cmtt-8">&#x00A0;</span><span 
   1027 class="cmtt-8">&#x00A0;</span><span 
   1028 class="cmtt-8">&#x00A0;</span><span 
   1029 class="cmtt-8">&#x00A0;</span><span 
   1030 class="cmtt-8">&#x00A0;</span><span 
   1031 class="cmtt-8">&#x00A0;]</span><span 
   1032 class="cmtt-8">&#x00A0;</span><span 
   1033 class="cmtt-8">&#x00A0;bytestream</span><span 
   1034 class="cmtt-8">&#x00A0;length</span><span 
   1035 class="cmtt-8">&#x00A0;==</span><span 
   1036 class="cmtt-8">&#x00A0;1</span><span 
   1037 class="cmtt-8">&#x00A0;byte</span>
   1038 <br class="fancyvrb" /><a 
   1039  id="x1-43022r11"></a><span 
   1040 class="cmr-6">11</span><span 
   1041 class="cmtt-8">&#x00A0;</span><span 
   1042 class="cmtt-8">&#x00A0;</span>
   1043 </div>
   1044 <!--l. 121--><p class="noindent" >Continue by coding the 3 bit integer value &#8217;-1&#8217; [b111]:
   1045 <!--l. 123--><p class="noindent" >
   1046 <div class="fancyvrb" id="fancyvrb3">
   1047 <a 
   1048  id="x1-43024r1"></a><span 
   1049 class="cmr-6">1</span><span 
   1050 class="cmtt-8">&#x00A0;</span><span 
   1051 class="cmtt-8">&#x00A0;</span><span 
   1052 class="cmtt-8">&#x00A0;</span><span 
   1053 class="cmtt-8">&#x00A0;</span><span 
   1054 class="cmtt-8">&#x00A0;</span><span 
   1055 class="cmtt-8">&#x00A0;</span><span 
   1056 class="cmtt-8">&#x00A0;</span><span 
   1057 class="cmtt-8">&#x00A0;</span><span 
   1058 class="cmtt-8">&#x00A0;</span><span 
   1059 class="cmtt-8">&#x00A0;|</span>
   1060 <br class="fancyvrb" /><a 
   1061  id="x1-43026r2"></a><span 
   1062 class="cmr-6">2</span><span 
   1063 class="cmtt-8">&#x00A0;</span><span 
   1064 class="cmtt-8">&#x00A0;</span><span 
   1065 class="cmtt-8">&#x00A0;</span><span 
   1066 class="cmtt-8">&#x00A0;</span><span 
   1067 class="cmtt-8">&#x00A0;</span><span 
   1068 class="cmtt-8">&#x00A0;</span><span 
   1069 class="cmtt-8">&#x00A0;</span><span 
   1070 class="cmtt-8">&#x00A0;</span><span 
   1071 class="cmtt-8">&#x00A0;</span><span 
   1072 class="cmtt-8">&#x00A0;V</span>
   1073 <br class="fancyvrb" /><a 
   1074  id="x1-43028r3"></a><span 
   1075 class="cmr-6">3</span><span 
   1076 class="cmtt-8">&#x00A0;</span><span 
   1077 class="cmtt-8">&#x00A0;</span>
   1078 <br class="fancyvrb" /><a 
   1079  id="x1-43030r4"></a><span 
   1080 class="cmr-6">4</span><span 
   1081 class="cmtt-8">&#x00A0;</span><span 
   1082 class="cmtt-8">&#x00A0;</span><span 
   1083 class="cmtt-8">&#x00A0;</span><span 
   1084 class="cmtt-8">&#x00A0;</span><span 
   1085 class="cmtt-8">&#x00A0;</span><span 
   1086 class="cmtt-8">&#x00A0;</span><span 
   1087 class="cmtt-8">&#x00A0;</span><span 
   1088 class="cmtt-8">&#x00A0;</span><span 
   1089 class="cmtt-8">&#x00A0;</span><span 
   1090 class="cmtt-8">&#x00A0;7</span><span 
   1091 class="cmtt-8">&#x00A0;6</span><span 
   1092 class="cmtt-8">&#x00A0;5</span><span 
   1093 class="cmtt-8">&#x00A0;4</span><span 
   1094 class="cmtt-8">&#x00A0;3</span><span 
   1095 class="cmtt-8">&#x00A0;2</span><span 
   1096 class="cmtt-8">&#x00A0;1</span><span 
   1097 class="cmtt-8">&#x00A0;0</span>
   1098 <br class="fancyvrb" /><a 
   1099  id="x1-43032r5"></a><span 
   1100 class="cmr-6">5</span><span 
   1101 class="cmtt-8">&#x00A0;</span><span 
   1102 class="cmtt-8">&#x00A0;byte</span><span 
   1103 class="cmtt-8">&#x00A0;0</span><span 
   1104 class="cmtt-8">&#x00A0;[0</span><span 
   1105 class="cmtt-8">&#x00A0;1</span><span 
   1106 class="cmtt-8">&#x00A0;1</span><span 
   1107 class="cmtt-8">&#x00A0;1</span><span 
   1108 class="cmtt-8">&#x00A0;1</span><span 
   1109 class="cmtt-8">&#x00A0;1</span><span 
   1110 class="cmtt-8">&#x00A0;0</span><span 
   1111 class="cmtt-8">&#x00A0;0]</span><span 
   1112 class="cmtt-8">&#x00A0;</span><span 
   1113 class="cmtt-8">&#x00A0;&#x003C;-</span>
   1114 <br class="fancyvrb" /><a 
   1115  id="x1-43034r6"></a><span 
   1116 class="cmr-6">6</span><span 
   1117 class="cmtt-8">&#x00A0;</span><span 
   1118 class="cmtt-8">&#x00A0;byte</span><span 
   1119 class="cmtt-8">&#x00A0;1</span><span 
   1120 class="cmtt-8">&#x00A0;[</span><span 
   1121 class="cmtt-8">&#x00A0;</span><span 
   1122 class="cmtt-8">&#x00A0;</span><span 
   1123 class="cmtt-8">&#x00A0;</span><span 
   1124 class="cmtt-8">&#x00A0;</span><span 
   1125 class="cmtt-8">&#x00A0;</span><span 
   1126 class="cmtt-8">&#x00A0;</span><span 
   1127 class="cmtt-8">&#x00A0;</span><span 
   1128 class="cmtt-8">&#x00A0;</span><span 
   1129 class="cmtt-8">&#x00A0;</span><span 
   1130 class="cmtt-8">&#x00A0;</span><span 
   1131 class="cmtt-8">&#x00A0;</span><span 
   1132 class="cmtt-8">&#x00A0;</span><span 
   1133 class="cmtt-8">&#x00A0;</span><span 
   1134 class="cmtt-8">&#x00A0;</span><span 
   1135 class="cmtt-8">&#x00A0;]</span>
   1136                                                                                         
   1137 
   1138                                                                                         
   1139 <br class="fancyvrb" /><a 
   1140  id="x1-43036r7"></a><span 
   1141 class="cmr-6">7</span><span 
   1142 class="cmtt-8">&#x00A0;</span><span 
   1143 class="cmtt-8">&#x00A0;byte</span><span 
   1144 class="cmtt-8">&#x00A0;2</span><span 
   1145 class="cmtt-8">&#x00A0;[</span><span 
   1146 class="cmtt-8">&#x00A0;</span><span 
   1147 class="cmtt-8">&#x00A0;</span><span 
   1148 class="cmtt-8">&#x00A0;</span><span 
   1149 class="cmtt-8">&#x00A0;</span><span 
   1150 class="cmtt-8">&#x00A0;</span><span 
   1151 class="cmtt-8">&#x00A0;</span><span 
   1152 class="cmtt-8">&#x00A0;</span><span 
   1153 class="cmtt-8">&#x00A0;</span><span 
   1154 class="cmtt-8">&#x00A0;</span><span 
   1155 class="cmtt-8">&#x00A0;</span><span 
   1156 class="cmtt-8">&#x00A0;</span><span 
   1157 class="cmtt-8">&#x00A0;</span><span 
   1158 class="cmtt-8">&#x00A0;</span><span 
   1159 class="cmtt-8">&#x00A0;</span><span 
   1160 class="cmtt-8">&#x00A0;]</span>
   1161 <br class="fancyvrb" /><a 
   1162  id="x1-43038r8"></a><span 
   1163 class="cmr-6">8</span><span 
   1164 class="cmtt-8">&#x00A0;</span><span 
   1165 class="cmtt-8">&#x00A0;byte</span><span 
   1166 class="cmtt-8">&#x00A0;3</span><span 
   1167 class="cmtt-8">&#x00A0;[</span><span 
   1168 class="cmtt-8">&#x00A0;</span><span 
   1169 class="cmtt-8">&#x00A0;</span><span 
   1170 class="cmtt-8">&#x00A0;</span><span 
   1171 class="cmtt-8">&#x00A0;</span><span 
   1172 class="cmtt-8">&#x00A0;</span><span 
   1173 class="cmtt-8">&#x00A0;</span><span 
   1174 class="cmtt-8">&#x00A0;</span><span 
   1175 class="cmtt-8">&#x00A0;</span><span 
   1176 class="cmtt-8">&#x00A0;</span><span 
   1177 class="cmtt-8">&#x00A0;</span><span 
   1178 class="cmtt-8">&#x00A0;</span><span 
   1179 class="cmtt-8">&#x00A0;</span><span 
   1180 class="cmtt-8">&#x00A0;</span><span 
   1181 class="cmtt-8">&#x00A0;</span><span 
   1182 class="cmtt-8">&#x00A0;]</span>
   1183 <br class="fancyvrb" /><a 
   1184  id="x1-43040r9"></a><span 
   1185 class="cmr-6">9</span><span 
   1186 class="cmtt-8">&#x00A0;</span><span 
   1187 class="cmtt-8">&#x00A0;</span><span 
   1188 class="cmtt-8">&#x00A0;</span><span 
   1189 class="cmtt-8">&#x00A0;</span><span 
   1190 class="cmtt-8">&#x00A0;</span><span 
   1191 class="cmtt-8">&#x00A0;</span><span 
   1192 class="cmtt-8">&#x00A0;</span><span 
   1193 class="cmtt-8">&#x00A0;</span><span 
   1194 class="cmtt-8">&#x00A0;</span><span 
   1195 class="cmtt-8">&#x00A0;</span><span 
   1196 class="cmtt-8">&#x00A0;</span><span 
   1197 class="cmtt-8">&#x00A0;</span><span 
   1198 class="cmtt-8">&#x00A0;</span><span 
   1199 class="cmtt-8">&#x00A0;</span><span 
   1200 class="cmtt-8">&#x00A0;...</span>
   1201 <br class="fancyvrb" /><a 
   1202  id="x1-43042r10"></a><span 
   1203 class="cmr-6">10</span><span 
   1204 class="cmtt-8">&#x00A0;</span><span 
   1205 class="cmtt-8">&#x00A0;byte</span><span 
   1206 class="cmtt-8">&#x00A0;n</span><span 
   1207 class="cmtt-8">&#x00A0;[</span><span 
   1208 class="cmtt-8">&#x00A0;</span><span 
   1209 class="cmtt-8">&#x00A0;</span><span 
   1210 class="cmtt-8">&#x00A0;</span><span 
   1211 class="cmtt-8">&#x00A0;</span><span 
   1212 class="cmtt-8">&#x00A0;</span><span 
   1213 class="cmtt-8">&#x00A0;</span><span 
   1214 class="cmtt-8">&#x00A0;</span><span 
   1215 class="cmtt-8">&#x00A0;</span><span 
   1216 class="cmtt-8">&#x00A0;</span><span 
   1217 class="cmtt-8">&#x00A0;</span><span 
   1218 class="cmtt-8">&#x00A0;</span><span 
   1219 class="cmtt-8">&#x00A0;</span><span 
   1220 class="cmtt-8">&#x00A0;</span><span 
   1221 class="cmtt-8">&#x00A0;</span><span 
   1222 class="cmtt-8">&#x00A0;]</span><span 
   1223 class="cmtt-8">&#x00A0;</span><span 
   1224 class="cmtt-8">&#x00A0;bytestream</span><span 
   1225 class="cmtt-8">&#x00A0;length</span><span 
   1226 class="cmtt-8">&#x00A0;==</span><span 
   1227 class="cmtt-8">&#x00A0;1</span><span 
   1228 class="cmtt-8">&#x00A0;byte</span>
   1229 </div>
   1230 <!--l. 137--><p class="noindent" >Continue by coding the 7 bit integer value &#8217;17&#8217; [b0010001]:
   1231 <!--l. 139--><p class="noindent" >
   1232 <div class="fancyvrb" id="fancyvrb4">
   1233 <a 
   1234  id="x1-43044r1"></a><span 
   1235 class="cmr-6">1</span><span 
   1236 class="cmtt-8">&#x00A0;</span><span 
   1237 class="cmtt-8">&#x00A0;</span><span 
   1238 class="cmtt-8">&#x00A0;</span><span 
   1239 class="cmtt-8">&#x00A0;</span><span 
   1240 class="cmtt-8">&#x00A0;</span><span 
   1241 class="cmtt-8">&#x00A0;</span><span 
   1242 class="cmtt-8">&#x00A0;</span><span 
   1243 class="cmtt-8">&#x00A0;</span><span 
   1244 class="cmtt-8">&#x00A0;</span><span 
   1245 class="cmtt-8">&#x00A0;</span><span 
   1246 class="cmtt-8">&#x00A0;</span><span 
   1247 class="cmtt-8">&#x00A0;|</span>
   1248 <br class="fancyvrb" /><a 
   1249  id="x1-43046r2"></a><span 
   1250 class="cmr-6">2</span><span 
   1251 class="cmtt-8">&#x00A0;</span><span 
   1252 class="cmtt-8">&#x00A0;</span><span 
   1253 class="cmtt-8">&#x00A0;</span><span 
   1254 class="cmtt-8">&#x00A0;</span><span 
   1255 class="cmtt-8">&#x00A0;</span><span 
   1256 class="cmtt-8">&#x00A0;</span><span 
   1257 class="cmtt-8">&#x00A0;</span><span 
   1258 class="cmtt-8">&#x00A0;</span><span 
   1259 class="cmtt-8">&#x00A0;</span><span 
   1260 class="cmtt-8">&#x00A0;</span><span 
   1261 class="cmtt-8">&#x00A0;</span><span 
   1262 class="cmtt-8">&#x00A0;V</span>
   1263 <br class="fancyvrb" /><a 
   1264  id="x1-43048r3"></a><span 
   1265 class="cmr-6">3</span><span 
   1266 class="cmtt-8">&#x00A0;</span><span 
   1267 class="cmtt-8">&#x00A0;</span>
   1268 <br class="fancyvrb" /><a 
   1269  id="x1-43050r4"></a><span 
   1270 class="cmr-6">4</span><span 
   1271 class="cmtt-8">&#x00A0;</span><span 
   1272 class="cmtt-8">&#x00A0;</span><span 
   1273 class="cmtt-8">&#x00A0;</span><span 
   1274 class="cmtt-8">&#x00A0;</span><span 
   1275 class="cmtt-8">&#x00A0;</span><span 
   1276 class="cmtt-8">&#x00A0;</span><span 
   1277 class="cmtt-8">&#x00A0;</span><span 
   1278 class="cmtt-8">&#x00A0;</span><span 
   1279 class="cmtt-8">&#x00A0;</span><span 
   1280 class="cmtt-8">&#x00A0;7</span><span 
   1281 class="cmtt-8">&#x00A0;6</span><span 
   1282 class="cmtt-8">&#x00A0;5</span><span 
   1283 class="cmtt-8">&#x00A0;4</span><span 
   1284 class="cmtt-8">&#x00A0;3</span><span 
   1285 class="cmtt-8">&#x00A0;2</span><span 
   1286 class="cmtt-8">&#x00A0;1</span><span 
   1287 class="cmtt-8">&#x00A0;0</span>
   1288 <br class="fancyvrb" /><a 
   1289  id="x1-43052r5"></a><span 
   1290 class="cmr-6">5</span><span 
   1291 class="cmtt-8">&#x00A0;</span><span 
   1292 class="cmtt-8">&#x00A0;byte</span><span 
   1293 class="cmtt-8">&#x00A0;0</span><span 
   1294 class="cmtt-8">&#x00A0;[1</span><span 
   1295 class="cmtt-8">&#x00A0;1</span><span 
   1296 class="cmtt-8">&#x00A0;1</span><span 
   1297 class="cmtt-8">&#x00A0;1</span><span 
   1298 class="cmtt-8">&#x00A0;1</span><span 
   1299 class="cmtt-8">&#x00A0;1</span><span 
   1300 class="cmtt-8">&#x00A0;0</span><span 
   1301 class="cmtt-8">&#x00A0;0]</span>
   1302 <br class="fancyvrb" /><a 
   1303  id="x1-43054r6"></a><span 
   1304 class="cmr-6">6</span><span 
   1305 class="cmtt-8">&#x00A0;</span><span 
   1306 class="cmtt-8">&#x00A0;byte</span><span 
   1307 class="cmtt-8">&#x00A0;1</span><span 
   1308 class="cmtt-8">&#x00A0;[0</span><span 
   1309 class="cmtt-8">&#x00A0;0</span><span 
   1310 class="cmtt-8">&#x00A0;0</span><span 
   1311 class="cmtt-8">&#x00A0;0</span><span 
   1312 class="cmtt-8">&#x00A0;1</span><span 
   1313 class="cmtt-8">&#x00A0;0</span><span 
   1314 class="cmtt-8">&#x00A0;0</span><span 
   1315 class="cmtt-8">&#x00A0;0]</span><span 
   1316 class="cmtt-8">&#x00A0;</span><span 
   1317 class="cmtt-8">&#x00A0;&#x003C;-</span>
   1318 <br class="fancyvrb" /><a 
   1319  id="x1-43056r7"></a><span 
   1320 class="cmr-6">7</span><span 
   1321 class="cmtt-8">&#x00A0;</span><span 
   1322 class="cmtt-8">&#x00A0;byte</span><span 
   1323 class="cmtt-8">&#x00A0;2</span><span 
   1324 class="cmtt-8">&#x00A0;[</span><span 
   1325 class="cmtt-8">&#x00A0;</span><span 
   1326 class="cmtt-8">&#x00A0;</span><span 
   1327 class="cmtt-8">&#x00A0;</span><span 
   1328 class="cmtt-8">&#x00A0;</span><span 
   1329 class="cmtt-8">&#x00A0;</span><span 
   1330 class="cmtt-8">&#x00A0;</span><span 
   1331 class="cmtt-8">&#x00A0;</span><span 
   1332 class="cmtt-8">&#x00A0;</span><span 
   1333 class="cmtt-8">&#x00A0;</span><span 
   1334 class="cmtt-8">&#x00A0;</span><span 
   1335 class="cmtt-8">&#x00A0;</span><span 
   1336 class="cmtt-8">&#x00A0;</span><span 
   1337 class="cmtt-8">&#x00A0;</span><span 
   1338 class="cmtt-8">&#x00A0;</span><span 
   1339 class="cmtt-8">&#x00A0;]</span>
   1340 <br class="fancyvrb" /><a 
   1341  id="x1-43058r8"></a><span 
   1342 class="cmr-6">8</span><span 
   1343 class="cmtt-8">&#x00A0;</span><span 
   1344 class="cmtt-8">&#x00A0;byte</span><span 
   1345 class="cmtt-8">&#x00A0;3</span><span 
   1346 class="cmtt-8">&#x00A0;[</span><span 
   1347 class="cmtt-8">&#x00A0;</span><span 
   1348 class="cmtt-8">&#x00A0;</span><span 
   1349 class="cmtt-8">&#x00A0;</span><span 
   1350 class="cmtt-8">&#x00A0;</span><span 
   1351 class="cmtt-8">&#x00A0;</span><span 
   1352 class="cmtt-8">&#x00A0;</span><span 
   1353 class="cmtt-8">&#x00A0;</span><span 
   1354 class="cmtt-8">&#x00A0;</span><span 
   1355 class="cmtt-8">&#x00A0;</span><span 
   1356 class="cmtt-8">&#x00A0;</span><span 
   1357 class="cmtt-8">&#x00A0;</span><span 
   1358 class="cmtt-8">&#x00A0;</span><span 
   1359 class="cmtt-8">&#x00A0;</span><span 
   1360 class="cmtt-8">&#x00A0;</span><span 
   1361 class="cmtt-8">&#x00A0;]</span>
   1362 <br class="fancyvrb" /><a 
   1363  id="x1-43060r9"></a><span 
   1364 class="cmr-6">9</span><span 
   1365 class="cmtt-8">&#x00A0;</span><span 
   1366 class="cmtt-8">&#x00A0;</span><span 
   1367 class="cmtt-8">&#x00A0;</span><span 
   1368 class="cmtt-8">&#x00A0;</span><span 
   1369 class="cmtt-8">&#x00A0;</span><span 
   1370 class="cmtt-8">&#x00A0;</span><span 
   1371 class="cmtt-8">&#x00A0;</span><span 
   1372 class="cmtt-8">&#x00A0;</span><span 
   1373 class="cmtt-8">&#x00A0;</span><span 
   1374 class="cmtt-8">&#x00A0;</span><span 
   1375 class="cmtt-8">&#x00A0;</span><span 
   1376 class="cmtt-8">&#x00A0;</span><span 
   1377 class="cmtt-8">&#x00A0;</span><span 
   1378 class="cmtt-8">&#x00A0;</span><span 
   1379 class="cmtt-8">&#x00A0;...</span>
   1380 <br class="fancyvrb" /><a 
   1381  id="x1-43062r10"></a><span 
   1382 class="cmr-6">10</span><span 
   1383 class="cmtt-8">&#x00A0;</span><span 
   1384 class="cmtt-8">&#x00A0;byte</span><span 
   1385 class="cmtt-8">&#x00A0;n</span><span 
   1386 class="cmtt-8">&#x00A0;[</span><span 
   1387 class="cmtt-8">&#x00A0;</span><span 
   1388 class="cmtt-8">&#x00A0;</span><span 
   1389 class="cmtt-8">&#x00A0;</span><span 
   1390 class="cmtt-8">&#x00A0;</span><span 
   1391 class="cmtt-8">&#x00A0;</span><span 
   1392 class="cmtt-8">&#x00A0;</span><span 
   1393 class="cmtt-8">&#x00A0;</span><span 
   1394 class="cmtt-8">&#x00A0;</span><span 
   1395 class="cmtt-8">&#x00A0;</span><span 
   1396 class="cmtt-8">&#x00A0;</span><span 
   1397 class="cmtt-8">&#x00A0;</span><span 
   1398 class="cmtt-8">&#x00A0;</span><span 
   1399 class="cmtt-8">&#x00A0;</span><span 
   1400 class="cmtt-8">&#x00A0;</span><span 
   1401 class="cmtt-8">&#x00A0;]</span><span 
   1402 class="cmtt-8">&#x00A0;</span><span 
   1403 class="cmtt-8">&#x00A0;bytestream</span><span 
   1404 class="cmtt-8">&#x00A0;length</span><span 
   1405 class="cmtt-8">&#x00A0;==</span><span 
   1406 class="cmtt-8">&#x00A0;2</span><span 
   1407 class="cmtt-8">&#x00A0;bytes</span>
   1408 <br class="fancyvrb" /><a 
   1409  id="x1-43064r11"></a><span 
   1410 class="cmr-6">11</span><span 
   1411 class="cmtt-8">&#x00A0;</span><span 
   1412 class="cmtt-8">&#x00A0;</span><span 
   1413 class="cmtt-8">&#x00A0;</span><span 
   1414 class="cmtt-8">&#x00A0;</span><span 
   1415 class="cmtt-8">&#x00A0;</span><span 
   1416 class="cmtt-8">&#x00A0;</span><span 
   1417 class="cmtt-8">&#x00A0;</span><span 
   1418 class="cmtt-8">&#x00A0;</span><span 
   1419 class="cmtt-8">&#x00A0;</span><span 
   1420 class="cmtt-8">&#x00A0;</span><span 
   1421 class="cmtt-8">&#x00A0;</span><span 
   1422 class="cmtt-8">&#x00A0;</span><span 
   1423 class="cmtt-8">&#x00A0;</span><span 
   1424 class="cmtt-8">&#x00A0;</span><span 
   1425 class="cmtt-8">&#x00A0;</span><span 
   1426 class="cmtt-8">&#x00A0;</span><span 
   1427 class="cmtt-8">&#x00A0;</span><span 
   1428 class="cmtt-8">&#x00A0;</span><span 
   1429 class="cmtt-8">&#x00A0;</span><span 
   1430 class="cmtt-8">&#x00A0;</span><span 
   1431 class="cmtt-8">&#x00A0;</span><span 
   1432 class="cmtt-8">&#x00A0;</span><span 
   1433 class="cmtt-8">&#x00A0;</span><span 
   1434 class="cmtt-8">&#x00A0;</span><span 
   1435 class="cmtt-8">&#x00A0;</span><span 
   1436 class="cmtt-8">&#x00A0;</span><span 
   1437 class="cmtt-8">&#x00A0;</span><span 
   1438 class="cmtt-8">&#x00A0;bit</span><span 
   1439 class="cmtt-8">&#x00A0;cursor</span><span 
   1440 class="cmtt-8">&#x00A0;==</span><span 
   1441 class="cmtt-8">&#x00A0;6</span>
   1442 </div>
   1443 <!--l. 154--><p class="noindent" >Continue by coding the 13 bit integer value &#8217;6969&#8217; [b110 11001110 01]:
   1444 <!--l. 156--><p class="noindent" >
   1445 <div class="fancyvrb" id="fancyvrb5">
   1446 <a 
   1447  id="x1-43066r1"></a><span 
   1448 class="cmr-6">1</span><span 
   1449 class="cmtt-8">&#x00A0;</span><span 
   1450 class="cmtt-8">&#x00A0;</span><span 
   1451 class="cmtt-8">&#x00A0;</span><span 
   1452 class="cmtt-8">&#x00A0;</span><span 
   1453 class="cmtt-8">&#x00A0;</span><span 
   1454 class="cmtt-8">&#x00A0;</span><span 
   1455 class="cmtt-8">&#x00A0;</span><span 
   1456 class="cmtt-8">&#x00A0;</span><span 
   1457 class="cmtt-8">&#x00A0;</span><span 
   1458 class="cmtt-8">&#x00A0;</span><span 
   1459 class="cmtt-8">&#x00A0;</span><span 
   1460 class="cmtt-8">&#x00A0;</span><span 
   1461 class="cmtt-8">&#x00A0;</span><span 
   1462 class="cmtt-8">&#x00A0;</span><span 
   1463 class="cmtt-8">&#x00A0;</span><span 
   1464 class="cmtt-8">&#x00A0;</span><span 
   1465 class="cmtt-8">&#x00A0;</span><span 
   1466 class="cmtt-8">&#x00A0;|</span>
   1467 <br class="fancyvrb" /><a 
   1468  id="x1-43068r2"></a><span 
   1469 class="cmr-6">2</span><span 
   1470 class="cmtt-8">&#x00A0;</span><span 
   1471 class="cmtt-8">&#x00A0;</span><span 
   1472 class="cmtt-8">&#x00A0;</span><span 
   1473 class="cmtt-8">&#x00A0;</span><span 
   1474 class="cmtt-8">&#x00A0;</span><span 
   1475 class="cmtt-8">&#x00A0;</span><span 
   1476 class="cmtt-8">&#x00A0;</span><span 
   1477 class="cmtt-8">&#x00A0;</span><span 
   1478 class="cmtt-8">&#x00A0;</span><span 
   1479 class="cmtt-8">&#x00A0;</span><span 
   1480 class="cmtt-8">&#x00A0;</span><span 
   1481 class="cmtt-8">&#x00A0;</span><span 
   1482 class="cmtt-8">&#x00A0;</span><span 
   1483 class="cmtt-8">&#x00A0;</span><span 
   1484 class="cmtt-8">&#x00A0;</span><span 
   1485 class="cmtt-8">&#x00A0;</span><span 
   1486 class="cmtt-8">&#x00A0;</span><span 
   1487 class="cmtt-8">&#x00A0;V</span>
   1488 <br class="fancyvrb" /><a 
   1489  id="x1-43070r3"></a><span 
   1490 class="cmr-6">3</span><span 
   1491 class="cmtt-8">&#x00A0;</span><span 
   1492 class="cmtt-8">&#x00A0;</span>
   1493 <br class="fancyvrb" /><a 
   1494  id="x1-43072r4"></a><span 
   1495 class="cmr-6">4</span><span 
   1496 class="cmtt-8">&#x00A0;</span><span 
   1497 class="cmtt-8">&#x00A0;</span><span 
   1498 class="cmtt-8">&#x00A0;</span><span 
   1499 class="cmtt-8">&#x00A0;</span><span 
   1500 class="cmtt-8">&#x00A0;</span><span 
   1501 class="cmtt-8">&#x00A0;</span><span 
   1502 class="cmtt-8">&#x00A0;</span><span 
   1503 class="cmtt-8">&#x00A0;</span><span 
   1504 class="cmtt-8">&#x00A0;</span><span 
   1505 class="cmtt-8">&#x00A0;7</span><span 
   1506 class="cmtt-8">&#x00A0;6</span><span 
   1507 class="cmtt-8">&#x00A0;5</span><span 
   1508 class="cmtt-8">&#x00A0;4</span><span 
   1509 class="cmtt-8">&#x00A0;3</span><span 
   1510 class="cmtt-8">&#x00A0;2</span><span 
   1511 class="cmtt-8">&#x00A0;1</span><span 
   1512 class="cmtt-8">&#x00A0;0</span>
   1513 <br class="fancyvrb" /><a 
   1514  id="x1-43074r5"></a><span 
   1515 class="cmr-6">5</span><span 
   1516 class="cmtt-8">&#x00A0;</span><span 
   1517 class="cmtt-8">&#x00A0;byte</span><span 
   1518 class="cmtt-8">&#x00A0;0</span><span 
   1519 class="cmtt-8">&#x00A0;[1</span><span 
   1520 class="cmtt-8">&#x00A0;1</span><span 
   1521 class="cmtt-8">&#x00A0;1</span><span 
   1522 class="cmtt-8">&#x00A0;1</span><span 
   1523 class="cmtt-8">&#x00A0;1</span><span 
   1524 class="cmtt-8">&#x00A0;1</span><span 
   1525 class="cmtt-8">&#x00A0;0</span><span 
   1526 class="cmtt-8">&#x00A0;0]</span>
   1527 <br class="fancyvrb" /><a 
   1528  id="x1-43076r6"></a><span 
   1529 class="cmr-6">6</span><span 
   1530 class="cmtt-8">&#x00A0;</span><span 
   1531 class="cmtt-8">&#x00A0;byte</span><span 
   1532 class="cmtt-8">&#x00A0;1</span><span 
   1533 class="cmtt-8">&#x00A0;[0</span><span 
   1534 class="cmtt-8">&#x00A0;1</span><span 
   1535 class="cmtt-8">&#x00A0;0</span><span 
   1536 class="cmtt-8">&#x00A0;0</span><span 
   1537 class="cmtt-8">&#x00A0;1</span><span 
   1538 class="cmtt-8">&#x00A0;0</span><span 
   1539 class="cmtt-8">&#x00A0;0</span><span 
   1540 class="cmtt-8">&#x00A0;0]</span>
   1541 <br class="fancyvrb" /><a 
   1542  id="x1-43078r7"></a><span 
   1543 class="cmr-6">7</span><span 
   1544 class="cmtt-8">&#x00A0;</span><span 
   1545 class="cmtt-8">&#x00A0;byte</span><span 
   1546 class="cmtt-8">&#x00A0;2</span><span 
   1547 class="cmtt-8">&#x00A0;[1</span><span 
   1548 class="cmtt-8">&#x00A0;1</span><span 
   1549 class="cmtt-8">&#x00A0;0</span><span 
   1550 class="cmtt-8">&#x00A0;0</span><span 
   1551 class="cmtt-8">&#x00A0;1</span><span 
   1552 class="cmtt-8">&#x00A0;1</span><span 
   1553 class="cmtt-8">&#x00A0;1</span><span 
   1554 class="cmtt-8">&#x00A0;0]</span>
   1555 <br class="fancyvrb" /><a 
   1556  id="x1-43080r8"></a><span 
   1557 class="cmr-6">8</span><span 
   1558 class="cmtt-8">&#x00A0;</span><span 
   1559 class="cmtt-8">&#x00A0;byte</span><span 
   1560 class="cmtt-8">&#x00A0;3</span><span 
   1561 class="cmtt-8">&#x00A0;[0</span><span 
   1562 class="cmtt-8">&#x00A0;0</span><span 
   1563 class="cmtt-8">&#x00A0;0</span><span 
   1564 class="cmtt-8">&#x00A0;0</span><span 
   1565 class="cmtt-8">&#x00A0;0</span><span 
   1566 class="cmtt-8">&#x00A0;1</span><span 
   1567 class="cmtt-8">&#x00A0;1</span><span 
   1568 class="cmtt-8">&#x00A0;0]</span><span 
   1569 class="cmtt-8">&#x00A0;</span><span 
   1570 class="cmtt-8">&#x00A0;&#x003C;-</span>
   1571 <br class="fancyvrb" /><a 
   1572  id="x1-43082r9"></a><span 
   1573 class="cmr-6">9</span><span 
   1574 class="cmtt-8">&#x00A0;</span><span 
   1575 class="cmtt-8">&#x00A0;</span><span 
   1576 class="cmtt-8">&#x00A0;</span><span 
   1577 class="cmtt-8">&#x00A0;</span><span 
   1578 class="cmtt-8">&#x00A0;</span><span 
   1579 class="cmtt-8">&#x00A0;</span><span 
   1580 class="cmtt-8">&#x00A0;</span><span 
   1581 class="cmtt-8">&#x00A0;</span><span 
   1582 class="cmtt-8">&#x00A0;</span><span 
   1583 class="cmtt-8">&#x00A0;</span><span 
   1584 class="cmtt-8">&#x00A0;</span><span 
   1585 class="cmtt-8">&#x00A0;</span><span 
   1586 class="cmtt-8">&#x00A0;</span><span 
   1587 class="cmtt-8">&#x00A0;</span><span 
   1588 class="cmtt-8">&#x00A0;...</span>
   1589 <br class="fancyvrb" /><a 
   1590  id="x1-43084r10"></a><span 
   1591 class="cmr-6">10</span><span 
   1592 class="cmtt-8">&#x00A0;</span><span 
   1593 class="cmtt-8">&#x00A0;byte</span><span 
   1594 class="cmtt-8">&#x00A0;n</span><span 
   1595 class="cmtt-8">&#x00A0;[</span><span 
   1596 class="cmtt-8">&#x00A0;</span><span 
   1597 class="cmtt-8">&#x00A0;</span><span 
   1598 class="cmtt-8">&#x00A0;</span><span 
   1599 class="cmtt-8">&#x00A0;</span><span 
   1600 class="cmtt-8">&#x00A0;</span><span 
   1601 class="cmtt-8">&#x00A0;</span><span 
   1602 class="cmtt-8">&#x00A0;</span><span 
   1603 class="cmtt-8">&#x00A0;</span><span 
   1604 class="cmtt-8">&#x00A0;</span><span 
   1605 class="cmtt-8">&#x00A0;</span><span 
   1606 class="cmtt-8">&#x00A0;</span><span 
   1607 class="cmtt-8">&#x00A0;</span><span 
   1608 class="cmtt-8">&#x00A0;</span><span 
   1609 class="cmtt-8">&#x00A0;</span><span 
   1610 class="cmtt-8">&#x00A0;]</span><span 
   1611 class="cmtt-8">&#x00A0;</span><span 
   1612 class="cmtt-8">&#x00A0;bytestream</span><span 
   1613 class="cmtt-8">&#x00A0;length</span><span 
   1614 class="cmtt-8">&#x00A0;==</span><span 
   1615 class="cmtt-8">&#x00A0;4</span><span 
   1616 class="cmtt-8">&#x00A0;bytes</span>
   1617 <br class="fancyvrb" /><a 
   1618  id="x1-43086r11"></a><span 
   1619 class="cmr-6">11</span><span 
   1620 class="cmtt-8">&#x00A0;</span><span 
   1621 class="cmtt-8">&#x00A0;</span>
   1622 </div>
   1623 <!--l. 173--><p class="noindent" >
   1624 <h5 class="subsubsectionHead"><span class="titlemark">2.1.7  </span> <a 
   1625  id="x1-440002.1.7"></a>decoding example</h5>
   1626 <!--l. 175--><p class="noindent" >Reading from the beginning of the bytestream encoded in the above example:
   1627 <!--l. 177--><p class="noindent" >
   1628 <div class="fancyvrb" id="fancyvrb6">
   1629                                                                                         
   1630 
   1631                                                                                         
   1632 <a 
   1633  id="x1-44002r1"></a><span 
   1634 class="cmr-6">1</span><span 
   1635 class="cmtt-8">&#x00A0;</span><span 
   1636 class="cmtt-8">&#x00A0;</span><span 
   1637 class="cmtt-8">&#x00A0;</span><span 
   1638 class="cmtt-8">&#x00A0;</span><span 
   1639 class="cmtt-8">&#x00A0;</span><span 
   1640 class="cmtt-8">&#x00A0;</span><span 
   1641 class="cmtt-8">&#x00A0;</span><span 
   1642 class="cmtt-8">&#x00A0;</span><span 
   1643 class="cmtt-8">&#x00A0;</span><span 
   1644 class="cmtt-8">&#x00A0;</span><span 
   1645 class="cmtt-8">&#x00A0;</span><span 
   1646 class="cmtt-8">&#x00A0;</span><span 
   1647 class="cmtt-8">&#x00A0;</span><span 
   1648 class="cmtt-8">&#x00A0;</span><span 
   1649 class="cmtt-8">&#x00A0;</span><span 
   1650 class="cmtt-8">&#x00A0;</span><span 
   1651 class="cmtt-8">&#x00A0;</span><span 
   1652 class="cmtt-8">&#x00A0;</span><span 
   1653 class="cmtt-8">&#x00A0;</span><span 
   1654 class="cmtt-8">&#x00A0;</span><span 
   1655 class="cmtt-8">&#x00A0;</span><span 
   1656 class="cmtt-8">&#x00A0;</span><span 
   1657 class="cmtt-8">&#x00A0;</span><span 
   1658 class="cmtt-8">&#x00A0;|</span>
   1659 <br class="fancyvrb" /><a 
   1660  id="x1-44004r2"></a><span 
   1661 class="cmr-6">2</span><span 
   1662 class="cmtt-8">&#x00A0;</span><span 
   1663 class="cmtt-8">&#x00A0;</span><span 
   1664 class="cmtt-8">&#x00A0;</span><span 
   1665 class="cmtt-8">&#x00A0;</span><span 
   1666 class="cmtt-8">&#x00A0;</span><span 
   1667 class="cmtt-8">&#x00A0;</span><span 
   1668 class="cmtt-8">&#x00A0;</span><span 
   1669 class="cmtt-8">&#x00A0;</span><span 
   1670 class="cmtt-8">&#x00A0;</span><span 
   1671 class="cmtt-8">&#x00A0;</span><span 
   1672 class="cmtt-8">&#x00A0;</span><span 
   1673 class="cmtt-8">&#x00A0;</span><span 
   1674 class="cmtt-8">&#x00A0;</span><span 
   1675 class="cmtt-8">&#x00A0;</span><span 
   1676 class="cmtt-8">&#x00A0;</span><span 
   1677 class="cmtt-8">&#x00A0;</span><span 
   1678 class="cmtt-8">&#x00A0;</span><span 
   1679 class="cmtt-8">&#x00A0;</span><span 
   1680 class="cmtt-8">&#x00A0;</span><span 
   1681 class="cmtt-8">&#x00A0;</span><span 
   1682 class="cmtt-8">&#x00A0;</span><span 
   1683 class="cmtt-8">&#x00A0;</span><span 
   1684 class="cmtt-8">&#x00A0;</span><span 
   1685 class="cmtt-8">&#x00A0;V</span>
   1686 <br class="fancyvrb" /><a 
   1687  id="x1-44006r3"></a><span 
   1688 class="cmr-6">3</span><span 
   1689 class="cmtt-8">&#x00A0;</span><span 
   1690 class="cmtt-8">&#x00A0;</span>
   1691 <br class="fancyvrb" /><a 
   1692  id="x1-44008r4"></a><span 
   1693 class="cmr-6">4</span><span 
   1694 class="cmtt-8">&#x00A0;</span><span 
   1695 class="cmtt-8">&#x00A0;</span><span 
   1696 class="cmtt-8">&#x00A0;</span><span 
   1697 class="cmtt-8">&#x00A0;</span><span 
   1698 class="cmtt-8">&#x00A0;</span><span 
   1699 class="cmtt-8">&#x00A0;</span><span 
   1700 class="cmtt-8">&#x00A0;</span><span 
   1701 class="cmtt-8">&#x00A0;</span><span 
   1702 class="cmtt-8">&#x00A0;</span><span 
   1703 class="cmtt-8">&#x00A0;7</span><span 
   1704 class="cmtt-8">&#x00A0;6</span><span 
   1705 class="cmtt-8">&#x00A0;5</span><span 
   1706 class="cmtt-8">&#x00A0;4</span><span 
   1707 class="cmtt-8">&#x00A0;3</span><span 
   1708 class="cmtt-8">&#x00A0;2</span><span 
   1709 class="cmtt-8">&#x00A0;1</span><span 
   1710 class="cmtt-8">&#x00A0;0</span>
   1711 <br class="fancyvrb" /><a 
   1712  id="x1-44010r5"></a><span 
   1713 class="cmr-6">5</span><span 
   1714 class="cmtt-8">&#x00A0;</span><span 
   1715 class="cmtt-8">&#x00A0;byte</span><span 
   1716 class="cmtt-8">&#x00A0;0</span><span 
   1717 class="cmtt-8">&#x00A0;[1</span><span 
   1718 class="cmtt-8">&#x00A0;1</span><span 
   1719 class="cmtt-8">&#x00A0;1</span><span 
   1720 class="cmtt-8">&#x00A0;1</span><span 
   1721 class="cmtt-8">&#x00A0;1</span><span 
   1722 class="cmtt-8">&#x00A0;1</span><span 
   1723 class="cmtt-8">&#x00A0;0</span><span 
   1724 class="cmtt-8">&#x00A0;0]</span><span 
   1725 class="cmtt-8">&#x00A0;</span><span 
   1726 class="cmtt-8">&#x00A0;&#x003C;-</span>
   1727 <br class="fancyvrb" /><a 
   1728  id="x1-44012r6"></a><span 
   1729 class="cmr-6">6</span><span 
   1730 class="cmtt-8">&#x00A0;</span><span 
   1731 class="cmtt-8">&#x00A0;byte</span><span 
   1732 class="cmtt-8">&#x00A0;1</span><span 
   1733 class="cmtt-8">&#x00A0;[0</span><span 
   1734 class="cmtt-8">&#x00A0;1</span><span 
   1735 class="cmtt-8">&#x00A0;0</span><span 
   1736 class="cmtt-8">&#x00A0;0</span><span 
   1737 class="cmtt-8">&#x00A0;1</span><span 
   1738 class="cmtt-8">&#x00A0;0</span><span 
   1739 class="cmtt-8">&#x00A0;0</span><span 
   1740 class="cmtt-8">&#x00A0;0]</span>
   1741 <br class="fancyvrb" /><a 
   1742  id="x1-44014r7"></a><span 
   1743 class="cmr-6">7</span><span 
   1744 class="cmtt-8">&#x00A0;</span><span 
   1745 class="cmtt-8">&#x00A0;byte</span><span 
   1746 class="cmtt-8">&#x00A0;2</span><span 
   1747 class="cmtt-8">&#x00A0;[1</span><span 
   1748 class="cmtt-8">&#x00A0;1</span><span 
   1749 class="cmtt-8">&#x00A0;0</span><span 
   1750 class="cmtt-8">&#x00A0;0</span><span 
   1751 class="cmtt-8">&#x00A0;1</span><span 
   1752 class="cmtt-8">&#x00A0;1</span><span 
   1753 class="cmtt-8">&#x00A0;1</span><span 
   1754 class="cmtt-8">&#x00A0;0]</span>
   1755 <br class="fancyvrb" /><a 
   1756  id="x1-44016r8"></a><span 
   1757 class="cmr-6">8</span><span 
   1758 class="cmtt-8">&#x00A0;</span><span 
   1759 class="cmtt-8">&#x00A0;byte</span><span 
   1760 class="cmtt-8">&#x00A0;3</span><span 
   1761 class="cmtt-8">&#x00A0;[0</span><span 
   1762 class="cmtt-8">&#x00A0;0</span><span 
   1763 class="cmtt-8">&#x00A0;0</span><span 
   1764 class="cmtt-8">&#x00A0;0</span><span 
   1765 class="cmtt-8">&#x00A0;0</span><span 
   1766 class="cmtt-8">&#x00A0;1</span><span 
   1767 class="cmtt-8">&#x00A0;1</span><span 
   1768 class="cmtt-8">&#x00A0;0]</span><span 
   1769 class="cmtt-8">&#x00A0;</span><span 
   1770 class="cmtt-8">&#x00A0;bytestream</span><span 
   1771 class="cmtt-8">&#x00A0;length</span><span 
   1772 class="cmtt-8">&#x00A0;==</span><span 
   1773 class="cmtt-8">&#x00A0;4</span><span 
   1774 class="cmtt-8">&#x00A0;bytes</span>
   1775 <br class="fancyvrb" /><a 
   1776  id="x1-44018r9"></a><span 
   1777 class="cmr-6">9</span><span 
   1778 class="cmtt-8">&#x00A0;</span><span 
   1779 class="cmtt-8">&#x00A0;</span>
   1780 </div>
   1781 <!--l. 190--><p class="noindent" >We read two, two-bit integer fields, resulting in the returned numbers &#8217;b00&#8217; and &#8217;b11&#8217;. Two things
   1782 are worth noting here:
   1783       <ul class="itemize1">
   1784       <li class="itemize">Although these four bits were originally written as a single four-bit integer, reading
   1785       some other combination of bit-widths from the bitstream is well defined. There are
   1786       no artificial alignment boundaries maintained in the bitstream.
   1787       </li>
   1788       <li class="itemize">The second value is the two-bit-wide integer &#8217;b11&#8217;. This value may be interpreted
   1789       either as the unsigned value &#8217;3&#8217;, or the signed value &#8217;-1&#8217;. Signedness is dependent on
   1790       decode context.</li></ul>
   1791 <!--l. 208--><p class="noindent" >
   1792 <h5 class="subsubsectionHead"><span class="titlemark">2.1.8  </span> <a 
   1793  id="x1-450002.1.8"></a>end-of-packet alignment</h5>
   1794 <!--l. 210--><p class="noindent" >The typical use of bitpacking is to produce many independent byte-aligned packets which are
   1795 embedded into a larger byte-aligned container structure, such as an Ogg transport bitstream.
   1796 Externally, each bytestream (encoded bitstream) must begin and end on a byte boundary. Often,
   1797 the encoded bitstream is not an integer number of bytes, and so there is unused (uncoded) space
   1798 in the last byte of a packet.
   1799 <!--l. 218--><p class="noindent" >Unused space in the last byte of a bytestream is always zeroed during the coding process. Thus,
   1800 should this unused space be read, it will return binary zeroes.
   1801 <!--l. 222--><p class="noindent" >Attempting to read past the end of an encoded packet results in an &#8217;end-of-packet&#8217; condition.
   1802 End-of-packet is not to be considered an error; it is merely a state indicating that there is
   1803 insufficient remaining data to fulfill the desired read size. Vorbis uses truncated packets as a
   1804 normal mode of operation, and as such, decoders must handle reading past the end of a packet as
   1805 a typical mode of operation. Any further read operations after an &#8217;end-of-packet&#8217; condition shall
   1806 also return &#8217;end-of-packet&#8217;.
   1807                                                                                         
   1808 
   1809                                                                                         
   1810 <!--l. 233--><p class="noindent" >
   1811 <h5 class="subsubsectionHead"><span class="titlemark">2.1.9  </span> <a 
   1812  id="x1-460002.1.9"></a>reading zero bits</h5>
   1813 <!--l. 235--><p class="noindent" >Reading a zero-bit-wide integer returns the value &#8217;0&#8217; and does not increment the stream cursor.
   1814 Reading to the end of the packet (but not past, such that an &#8217;end-of-packet&#8217; condition has not
   1815 triggered) and then reading a zero bit integer shall succeed, returning 0, and not trigger an
   1816 end-of-packet condition. Reading a zero-bit-wide integer after a previous read sets &#8217;end-of-packet&#8217;
   1817 shall also fail with &#8217;end-of-packet&#8217;.
   1818                                                                                         
   1819 
   1820                                                                                         
   1821                                                                                         
   1822 
   1823                                                                                         
   1824 <h3 class="sectionHead"><span class="titlemark">3  </span> <a 
   1825  id="x1-470003"></a>Probability Model and Codebooks</h3>
   1826 <!--l. 6--><p class="noindent" >
   1827 <h4 class="subsectionHead"><span class="titlemark">3.1  </span> <a 
   1828  id="x1-480003.1"></a>Overview</h4>
   1829 <!--l. 8--><p class="noindent" >Unlike practically every other mainstream audio codec, Vorbis has no statically configured
   1830 probability model, instead packing all entropy decoding configuration, VQ and Huffman, into the
   1831 bitstream itself in the third header, the codec setup header. This packed configuration consists of
   1832 multiple &#8217;codebooks&#8217;, each containing a specific Huffman-equivalent representation for decoding
   1833 compressed codewords as well as an optional lookup table of output vector values to which a
   1834 decoded Huffman value is applied as an offset, generating the final decoded output corresponding
   1835 to a given compressed codeword.
   1836 <!--l. 18--><p class="noindent" >
   1837 <h5 class="subsubsectionHead"><span class="titlemark">3.1.1  </span> <a 
   1838  id="x1-490003.1.1"></a>Bitwise operation</h5>
   1839 <!--l. 19--><p class="noindent" >The codebook mechanism is built on top of the vorbis bitpacker. Both the codebooks themselves
   1840 and the codewords they decode are unrolled from a packet as a series of arbitrary-width values
   1841 read from the stream according to <a 
   1842 href="#x1-360002">Section&#x00A0;2</a>, &#8220;<a 
   1843 href="#x1-360002">Bitpacking Convention<!--tex4ht:ref: vorbis:spec:bitpacking --></a>&#8221;.
   1844 <!--l. 27--><p class="noindent" >
   1845 <h4 class="subsectionHead"><span class="titlemark">3.2  </span> <a 
   1846  id="x1-500003.2"></a>Packed codebook format</h4>
   1847 <!--l. 29--><p class="noindent" >For purposes of the examples below, we assume that the storage system&#8217;s native byte width is
   1848 eight bits. This is not universally true; see <a 
   1849 href="#x1-360002">Section&#x00A0;2</a>, &#8220;<a 
   1850 href="#x1-360002">Bitpacking Convention<!--tex4ht:ref: vorbis:spec:bitpacking --></a>&#8221; for discussion
   1851 relating to non-eight-bit bytes.
   1852                                                                                         
   1853 
   1854                                                                                         
   1855 <!--l. 34--><p class="noindent" >
   1856 <h5 class="subsubsectionHead"><span class="titlemark">3.2.1  </span> <a 
   1857  id="x1-510003.2.1"></a>codebook decode</h5>
   1858 <!--l. 36--><p class="noindent" >A codebook begins with a 24 bit sync pattern, 0x564342:
   1859 <!--l. 38--><p class="noindent" >
   1860 <div class="fancyvrb" id="fancyvrb7">
   1861 <a 
   1862  id="x1-51002r1"></a><span 
   1863 class="cmr-6">1</span><span 
   1864 class="cmtt-8">&#x00A0;</span><span 
   1865 class="cmtt-8">&#x00A0;byte</span><span 
   1866 class="cmtt-8">&#x00A0;0:</span><span 
   1867 class="cmtt-8">&#x00A0;[</span><span 
   1868 class="cmtt-8">&#x00A0;0</span><span 
   1869 class="cmtt-8">&#x00A0;1</span><span 
   1870 class="cmtt-8">&#x00A0;0</span><span 
   1871 class="cmtt-8">&#x00A0;0</span><span 
   1872 class="cmtt-8">&#x00A0;0</span><span 
   1873 class="cmtt-8">&#x00A0;0</span><span 
   1874 class="cmtt-8">&#x00A0;1</span><span 
   1875 class="cmtt-8">&#x00A0;0</span><span 
   1876 class="cmtt-8">&#x00A0;]</span><span 
   1877 class="cmtt-8">&#x00A0;(0x42)</span>
   1878 <br class="fancyvrb" /><a 
   1879  id="x1-51004r2"></a><span 
   1880 class="cmr-6">2</span><span 
   1881 class="cmtt-8">&#x00A0;</span><span 
   1882 class="cmtt-8">&#x00A0;byte</span><span 
   1883 class="cmtt-8">&#x00A0;1:</span><span 
   1884 class="cmtt-8">&#x00A0;[</span><span 
   1885 class="cmtt-8">&#x00A0;0</span><span 
   1886 class="cmtt-8">&#x00A0;1</span><span 
   1887 class="cmtt-8">&#x00A0;0</span><span 
   1888 class="cmtt-8">&#x00A0;0</span><span 
   1889 class="cmtt-8">&#x00A0;0</span><span 
   1890 class="cmtt-8">&#x00A0;0</span><span 
   1891 class="cmtt-8">&#x00A0;1</span><span 
   1892 class="cmtt-8">&#x00A0;1</span><span 
   1893 class="cmtt-8">&#x00A0;]</span><span 
   1894 class="cmtt-8">&#x00A0;(0x43)</span>
   1895 <br class="fancyvrb" /><a 
   1896  id="x1-51006r3"></a><span 
   1897 class="cmr-6">3</span><span 
   1898 class="cmtt-8">&#x00A0;</span><span 
   1899 class="cmtt-8">&#x00A0;byte</span><span 
   1900 class="cmtt-8">&#x00A0;2:</span><span 
   1901 class="cmtt-8">&#x00A0;[</span><span 
   1902 class="cmtt-8">&#x00A0;0</span><span 
   1903 class="cmtt-8">&#x00A0;1</span><span 
   1904 class="cmtt-8">&#x00A0;0</span><span 
   1905 class="cmtt-8">&#x00A0;1</span><span 
   1906 class="cmtt-8">&#x00A0;0</span><span 
   1907 class="cmtt-8">&#x00A0;1</span><span 
   1908 class="cmtt-8">&#x00A0;1</span><span 
   1909 class="cmtt-8">&#x00A0;0</span><span 
   1910 class="cmtt-8">&#x00A0;]</span><span 
   1911 class="cmtt-8">&#x00A0;(0x56)</span>
   1912 </div>
   1913 <!--l. 44--><p class="noindent" >16 bit <span 
   1914 class="cmtt-12">[codebook_dimensions] </span>and 24 bit <span 
   1915 class="cmtt-12">[codebook_entries] </span>fields:
   1916 <!--l. 46--><p class="noindent" >
   1917 <div class="fancyvrb" id="fancyvrb8">
   1918 <a 
   1919  id="x1-51008r1"></a><span 
   1920 class="cmr-6">1</span><span 
   1921 class="cmtt-8">&#x00A0;</span><span 
   1922 class="cmtt-8">&#x00A0;</span>
   1923 <br class="fancyvrb" /><a 
   1924  id="x1-51010r2"></a><span 
   1925 class="cmr-6">2</span><span 
   1926 class="cmtt-8">&#x00A0;</span><span 
   1927 class="cmtt-8">&#x00A0;byte</span><span 
   1928 class="cmtt-8">&#x00A0;3:</span><span 
   1929 class="cmtt-8">&#x00A0;[</span><span 
   1930 class="cmtt-8">&#x00A0;X</span><span 
   1931 class="cmtt-8">&#x00A0;X</span><span 
   1932 class="cmtt-8">&#x00A0;X</span><span 
   1933 class="cmtt-8">&#x00A0;X</span><span 
   1934 class="cmtt-8">&#x00A0;X</span><span 
   1935 class="cmtt-8">&#x00A0;X</span><span 
   1936 class="cmtt-8">&#x00A0;X</span><span 
   1937 class="cmtt-8">&#x00A0;X</span><span 
   1938 class="cmtt-8">&#x00A0;]</span>
   1939 <br class="fancyvrb" /><a 
   1940  id="x1-51012r3"></a><span 
   1941 class="cmr-6">3</span><span 
   1942 class="cmtt-8">&#x00A0;</span><span 
   1943 class="cmtt-8">&#x00A0;byte</span><span 
   1944 class="cmtt-8">&#x00A0;4:</span><span 
   1945 class="cmtt-8">&#x00A0;[</span><span 
   1946 class="cmtt-8">&#x00A0;X</span><span 
   1947 class="cmtt-8">&#x00A0;X</span><span 
   1948 class="cmtt-8">&#x00A0;X</span><span 
   1949 class="cmtt-8">&#x00A0;X</span><span 
   1950 class="cmtt-8">&#x00A0;X</span><span 
   1951 class="cmtt-8">&#x00A0;X</span><span 
   1952 class="cmtt-8">&#x00A0;X</span><span 
   1953 class="cmtt-8">&#x00A0;X</span><span 
   1954 class="cmtt-8">&#x00A0;]</span><span 
   1955 class="cmtt-8">&#x00A0;[codebook_dimensions]</span><span 
   1956 class="cmtt-8">&#x00A0;(16</span><span 
   1957 class="cmtt-8">&#x00A0;bit</span><span 
   1958 class="cmtt-8">&#x00A0;unsigned)</span>
   1959 <br class="fancyvrb" /><a 
   1960  id="x1-51014r4"></a><span 
   1961 class="cmr-6">4</span><span 
   1962 class="cmtt-8">&#x00A0;</span><span 
   1963 class="cmtt-8">&#x00A0;</span>
   1964 <br class="fancyvrb" /><a 
   1965  id="x1-51016r5"></a><span 
   1966 class="cmr-6">5</span><span 
   1967 class="cmtt-8">&#x00A0;</span><span 
   1968 class="cmtt-8">&#x00A0;byte</span><span 
   1969 class="cmtt-8">&#x00A0;5:</span><span 
   1970 class="cmtt-8">&#x00A0;[</span><span 
   1971 class="cmtt-8">&#x00A0;X</span><span 
   1972 class="cmtt-8">&#x00A0;X</span><span 
   1973 class="cmtt-8">&#x00A0;X</span><span 
   1974 class="cmtt-8">&#x00A0;X</span><span 
   1975 class="cmtt-8">&#x00A0;X</span><span 
   1976 class="cmtt-8">&#x00A0;X</span><span 
   1977 class="cmtt-8">&#x00A0;X</span><span 
   1978 class="cmtt-8">&#x00A0;X</span><span 
   1979 class="cmtt-8">&#x00A0;]</span>
   1980 <br class="fancyvrb" /><a 
   1981  id="x1-51018r6"></a><span 
   1982 class="cmr-6">6</span><span 
   1983 class="cmtt-8">&#x00A0;</span><span 
   1984 class="cmtt-8">&#x00A0;byte</span><span 
   1985 class="cmtt-8">&#x00A0;6:</span><span 
   1986 class="cmtt-8">&#x00A0;[</span><span 
   1987 class="cmtt-8">&#x00A0;X</span><span 
   1988 class="cmtt-8">&#x00A0;X</span><span 
   1989 class="cmtt-8">&#x00A0;X</span><span 
   1990 class="cmtt-8">&#x00A0;X</span><span 
   1991 class="cmtt-8">&#x00A0;X</span><span 
   1992 class="cmtt-8">&#x00A0;X</span><span 
   1993 class="cmtt-8">&#x00A0;X</span><span 
   1994 class="cmtt-8">&#x00A0;X</span><span 
   1995 class="cmtt-8">&#x00A0;]</span>
   1996 <br class="fancyvrb" /><a 
   1997  id="x1-51020r7"></a><span 
   1998 class="cmr-6">7</span><span 
   1999 class="cmtt-8">&#x00A0;</span><span 
   2000 class="cmtt-8">&#x00A0;byte</span><span 
   2001 class="cmtt-8">&#x00A0;7:</span><span 
   2002 class="cmtt-8">&#x00A0;[</span><span 
   2003 class="cmtt-8">&#x00A0;X</span><span 
   2004 class="cmtt-8">&#x00A0;X</span><span 
   2005 class="cmtt-8">&#x00A0;X</span><span 
   2006 class="cmtt-8">&#x00A0;X</span><span 
   2007 class="cmtt-8">&#x00A0;X</span><span 
   2008 class="cmtt-8">&#x00A0;X</span><span 
   2009 class="cmtt-8">&#x00A0;X</span><span 
   2010 class="cmtt-8">&#x00A0;X</span><span 
   2011 class="cmtt-8">&#x00A0;]</span><span 
   2012 class="cmtt-8">&#x00A0;[codebook_entries]</span><span 
   2013 class="cmtt-8">&#x00A0;(24</span><span 
   2014 class="cmtt-8">&#x00A0;bit</span><span 
   2015 class="cmtt-8">&#x00A0;unsigned)</span>
   2016 <br class="fancyvrb" /><a 
   2017  id="x1-51022r8"></a><span 
   2018 class="cmr-6">8</span><span 
   2019 class="cmtt-8">&#x00A0;</span><span 
   2020 class="cmtt-8">&#x00A0;</span>
   2021 </div>
   2022 <!--l. 57--><p class="noindent" >Next is the <span 
   2023 class="cmtt-12">[ordered] </span>bit flag:
   2024 <!--l. 59--><p class="noindent" >
   2025 <div class="fancyvrb" id="fancyvrb9">
   2026 <a 
   2027  id="x1-51024r1"></a><span 
   2028 class="cmr-6">1</span><span 
   2029 class="cmtt-8">&#x00A0;</span><span 
   2030 class="cmtt-8">&#x00A0;</span>
   2031 <br class="fancyvrb" /><a 
   2032  id="x1-51026r2"></a><span 
   2033 class="cmr-6">2</span><span 
   2034 class="cmtt-8">&#x00A0;</span><span 
   2035 class="cmtt-8">&#x00A0;byte</span><span 
   2036 class="cmtt-8">&#x00A0;8:</span><span 
   2037 class="cmtt-8">&#x00A0;[</span><span 
   2038 class="cmtt-8">&#x00A0;</span><span 
   2039 class="cmtt-8">&#x00A0;</span><span 
   2040 class="cmtt-8">&#x00A0;</span><span 
   2041 class="cmtt-8">&#x00A0;</span><span 
   2042 class="cmtt-8">&#x00A0;</span><span 
   2043 class="cmtt-8">&#x00A0;</span><span 
   2044 class="cmtt-8">&#x00A0;</span><span 
   2045 class="cmtt-8">&#x00A0;</span><span 
   2046 class="cmtt-8">&#x00A0;</span><span 
   2047 class="cmtt-8">&#x00A0;</span><span 
   2048 class="cmtt-8">&#x00A0;</span><span 
   2049 class="cmtt-8">&#x00A0;</span><span 
   2050 class="cmtt-8">&#x00A0;</span><span 
   2051 class="cmtt-8">&#x00A0;</span><span 
   2052 class="cmtt-8">&#x00A0;X</span><span 
   2053 class="cmtt-8">&#x00A0;]</span><span 
   2054 class="cmtt-8">&#x00A0;[ordered]</span><span 
   2055 class="cmtt-8">&#x00A0;(1</span><span 
   2056 class="cmtt-8">&#x00A0;bit)</span>
   2057 <br class="fancyvrb" /><a 
   2058  id="x1-51028r3"></a><span 
   2059 class="cmr-6">3</span><span 
   2060 class="cmtt-8">&#x00A0;</span><span 
   2061 class="cmtt-8">&#x00A0;</span>
   2062 </div>
   2063 <!--l. 65--><p class="noindent" >Each entry, numbering a total of <span 
   2064 class="cmtt-12">[codebook_entries]</span>, is assigned a codeword length.
   2065 We now read the list of codeword lengths and store these lengths in the array
   2066 <span 
   2067 class="cmtt-12">[codebook_codeword_lengths]</span>. Decode of lengths is according to whether the <span 
   2068 class="cmtt-12">[ordered] </span>flag
   2069 is set or unset.
   2070       <ul class="itemize1">
   2071       <li class="itemize">If the <span 
   2072 class="cmtt-12">[ordered] </span>flag is unset, the codeword list is not length ordered and the decoder
   2073       needs to read each codeword length one-by-one.
   2074       <!--l. 77--><p class="noindent" >The decoder first reads one additional bit flag, the <span 
   2075 class="cmtt-12">[sparse] </span>flag. This flag determines
   2076       whether or not the codebook contains unused entries that are not to be included in
   2077                                                                                         
   2078 
   2079                                                                                         
   2080       the codeword decode tree:
   2081       <!--l. 82--><p class="noindent" >
   2082       <div class="fancyvrb" id="fancyvrb10">
   2083 <a 
   2084  id="x1-51030r1"></a><span 
   2085 class="cmr-6">1</span><span 
   2086 class="cmtt-8">&#x00A0;</span><span 
   2087 class="cmtt-8">&#x00A0;byte</span><span 
   2088 class="cmtt-8">&#x00A0;8:</span><span 
   2089 class="cmtt-8">&#x00A0;[</span><span 
   2090 class="cmtt-8">&#x00A0;</span><span 
   2091 class="cmtt-8">&#x00A0;</span><span 
   2092 class="cmtt-8">&#x00A0;</span><span 
   2093 class="cmtt-8">&#x00A0;</span><span 
   2094 class="cmtt-8">&#x00A0;</span><span 
   2095 class="cmtt-8">&#x00A0;</span><span 
   2096 class="cmtt-8">&#x00A0;</span><span 
   2097 class="cmtt-8">&#x00A0;</span><span 
   2098 class="cmtt-8">&#x00A0;</span><span 
   2099 class="cmtt-8">&#x00A0;</span><span 
   2100 class="cmtt-8">&#x00A0;</span><span 
   2101 class="cmtt-8">&#x00A0;</span><span 
   2102 class="cmtt-8">&#x00A0;X</span><span 
   2103 class="cmtt-8">&#x00A0;1</span><span 
   2104 class="cmtt-8">&#x00A0;]</span><span 
   2105 class="cmtt-8">&#x00A0;[sparse]</span><span 
   2106 class="cmtt-8">&#x00A0;flag</span><span 
   2107 class="cmtt-8">&#x00A0;(1</span><span 
   2108 class="cmtt-8">&#x00A0;bit)</span>
   2109 </div>
   2110       <!--l. 86--><p class="noindent" >The decoder now performs for each of the <span 
   2111 class="cmtt-12">[codebook_entries] </span>codebook entries:
   2112       <!--l. 89--><p class="noindent" >
   2113       <div class="fancyvrb" id="fancyvrb11">
   2114 <a 
   2115  id="x1-51032r1"></a><span 
   2116 class="cmr-6">1</span><span 
   2117 class="cmtt-8">&#x00A0;</span><span 
   2118 class="cmtt-8">&#x00A0;</span>
   2119 <br class="fancyvrb" /><a 
   2120  id="x1-51034r2"></a><span 
   2121 class="cmr-6">2</span><span 
   2122 class="cmtt-8">&#x00A0;</span><span 
   2123 class="cmtt-8">&#x00A0;</span><span 
   2124 class="cmtt-8">&#x00A0;</span><span 
   2125 class="cmtt-8">&#x00A0;1)</span><span 
   2126 class="cmtt-8">&#x00A0;if([sparse]</span><span 
   2127 class="cmtt-8">&#x00A0;is</span><span 
   2128 class="cmtt-8">&#x00A0;set)</span><span 
   2129 class="cmtt-8">&#x00A0;</span><span 
   2130 class="cmsy-8">{</span>
   2131 <br class="fancyvrb" /><a 
   2132  id="x1-51036r3"></a><span 
   2133 class="cmr-6">3</span><span 
   2134 class="cmtt-8">&#x00A0;</span><span 
   2135 class="cmtt-8">&#x00A0;</span>
   2136 <br class="fancyvrb" /><a 
   2137  id="x1-51038r4"></a><span 
   2138 class="cmr-6">4</span><span 
   2139 class="cmtt-8">&#x00A0;</span><span 
   2140 class="cmtt-8">&#x00A0;</span><span 
   2141 class="cmtt-8">&#x00A0;</span><span 
   2142 class="cmtt-8">&#x00A0;</span><span 
   2143 class="cmtt-8">&#x00A0;</span><span 
   2144 class="cmtt-8">&#x00A0;</span><span 
   2145 class="cmtt-8">&#x00A0;</span><span 
   2146 class="cmtt-8">&#x00A0;</span><span 
   2147 class="cmtt-8">&#x00A0;</span><span 
   2148 class="cmtt-8">&#x00A0;</span><span 
   2149 class="cmtt-8">&#x00A0;2)</span><span 
   2150 class="cmtt-8">&#x00A0;[flag]</span><span 
   2151 class="cmtt-8">&#x00A0;=</span><span 
   2152 class="cmtt-8">&#x00A0;read</span><span 
   2153 class="cmtt-8">&#x00A0;one</span><span 
   2154 class="cmtt-8">&#x00A0;bit;</span>
   2155 <br class="fancyvrb" /><a 
   2156  id="x1-51040r5"></a><span 
   2157 class="cmr-6">5</span><span 
   2158 class="cmtt-8">&#x00A0;</span><span 
   2159 class="cmtt-8">&#x00A0;</span><span 
   2160 class="cmtt-8">&#x00A0;</span><span 
   2161 class="cmtt-8">&#x00A0;</span><span 
   2162 class="cmtt-8">&#x00A0;</span><span 
   2163 class="cmtt-8">&#x00A0;</span><span 
   2164 class="cmtt-8">&#x00A0;</span><span 
   2165 class="cmtt-8">&#x00A0;</span><span 
   2166 class="cmtt-8">&#x00A0;</span><span 
   2167 class="cmtt-8">&#x00A0;</span><span 
   2168 class="cmtt-8">&#x00A0;3)</span><span 
   2169 class="cmtt-8">&#x00A0;if([flag]</span><span 
   2170 class="cmtt-8">&#x00A0;is</span><span 
   2171 class="cmtt-8">&#x00A0;set)</span><span 
   2172 class="cmtt-8">&#x00A0;</span><span 
   2173 class="cmsy-8">{</span>
   2174 <br class="fancyvrb" /><a 
   2175  id="x1-51042r6"></a><span 
   2176 class="cmr-6">6</span><span 
   2177 class="cmtt-8">&#x00A0;</span><span 
   2178 class="cmtt-8">&#x00A0;</span>
   2179 <br class="fancyvrb" /><a 
   2180  id="x1-51044r7"></a><span 
   2181 class="cmr-6">7</span><span 
   2182 class="cmtt-8">&#x00A0;</span><span 
   2183 class="cmtt-8">&#x00A0;</span><span 
   2184 class="cmtt-8">&#x00A0;</span><span 
   2185 class="cmtt-8">&#x00A0;</span><span 
   2186 class="cmtt-8">&#x00A0;</span><span 
   2187 class="cmtt-8">&#x00A0;</span><span 
   2188 class="cmtt-8">&#x00A0;</span><span 
   2189 class="cmtt-8">&#x00A0;</span><span 
   2190 class="cmtt-8">&#x00A0;</span><span 
   2191 class="cmtt-8">&#x00A0;</span><span 
   2192 class="cmtt-8">&#x00A0;</span><span 
   2193 class="cmtt-8">&#x00A0;</span><span 
   2194 class="cmtt-8">&#x00A0;</span><span 
   2195 class="cmtt-8">&#x00A0;</span><span 
   2196 class="cmtt-8">&#x00A0;</span><span 
   2197 class="cmtt-8">&#x00A0;4)</span><span 
   2198 class="cmtt-8">&#x00A0;[length]</span><span 
   2199 class="cmtt-8">&#x00A0;=</span><span 
   2200 class="cmtt-8">&#x00A0;read</span><span 
   2201 class="cmtt-8">&#x00A0;a</span><span 
   2202 class="cmtt-8">&#x00A0;five</span><span 
   2203 class="cmtt-8">&#x00A0;bit</span><span 
   2204 class="cmtt-8">&#x00A0;unsigned</span><span 
   2205 class="cmtt-8">&#x00A0;integer;</span>
   2206 <br class="fancyvrb" /><a 
   2207  id="x1-51046r8"></a><span 
   2208 class="cmr-6">8</span><span 
   2209 class="cmtt-8">&#x00A0;</span><span 
   2210 class="cmtt-8">&#x00A0;</span><span 
   2211 class="cmtt-8">&#x00A0;</span><span 
   2212 class="cmtt-8">&#x00A0;</span><span 
   2213 class="cmtt-8">&#x00A0;</span><span 
   2214 class="cmtt-8">&#x00A0;</span><span 
   2215 class="cmtt-8">&#x00A0;</span><span 
   2216 class="cmtt-8">&#x00A0;</span><span 
   2217 class="cmtt-8">&#x00A0;</span><span 
   2218 class="cmtt-8">&#x00A0;</span><span 
   2219 class="cmtt-8">&#x00A0;</span><span 
   2220 class="cmtt-8">&#x00A0;</span><span 
   2221 class="cmtt-8">&#x00A0;</span><span 
   2222 class="cmtt-8">&#x00A0;</span><span 
   2223 class="cmtt-8">&#x00A0;</span><span 
   2224 class="cmtt-8">&#x00A0;5)</span><span 
   2225 class="cmtt-8">&#x00A0;codeword</span><span 
   2226 class="cmtt-8">&#x00A0;length</span><span 
   2227 class="cmtt-8">&#x00A0;for</span><span 
   2228 class="cmtt-8">&#x00A0;this</span><span 
   2229 class="cmtt-8">&#x00A0;entry</span><span 
   2230 class="cmtt-8">&#x00A0;is</span><span 
   2231 class="cmtt-8">&#x00A0;[length]+1;</span>
   2232 <br class="fancyvrb" /><a 
   2233  id="x1-51048r9"></a><span 
   2234 class="cmr-6">9</span><span 
   2235 class="cmtt-8">&#x00A0;</span><span 
   2236 class="cmtt-8">&#x00A0;</span>
   2237 <br class="fancyvrb" /><a 
   2238  id="x1-51050r10"></a><span 
   2239 class="cmr-6">10</span><span 
   2240 class="cmtt-8">&#x00A0;</span><span 
   2241 class="cmtt-8">&#x00A0;</span><span 
   2242 class="cmtt-8">&#x00A0;</span><span 
   2243 class="cmtt-8">&#x00A0;</span><span 
   2244 class="cmtt-8">&#x00A0;</span><span 
   2245 class="cmtt-8">&#x00A0;</span><span 
   2246 class="cmtt-8">&#x00A0;</span><span 
   2247 class="cmtt-8">&#x00A0;</span><span 
   2248 class="cmtt-8">&#x00A0;</span><span 
   2249 class="cmtt-8">&#x00A0;</span><span 
   2250 class="cmtt-8">&#x00A0;</span><span 
   2251 class="cmtt-8">&#x00A0;</span><span 
   2252 class="cmtt-8">&#x00A0;</span><span 
   2253 class="cmtt-8">&#x00A0;</span><span 
   2254 class="cmsy-8">}</span><span 
   2255 class="cmtt-8">&#x00A0;else</span><span 
   2256 class="cmtt-8">&#x00A0;</span><span 
   2257 class="cmsy-8">{</span>
   2258 <br class="fancyvrb" /><a 
   2259  id="x1-51052r11"></a><span 
   2260 class="cmr-6">11</span><span 
   2261 class="cmtt-8">&#x00A0;</span><span 
   2262 class="cmtt-8">&#x00A0;</span>
   2263 <br class="fancyvrb" /><a 
   2264  id="x1-51054r12"></a><span 
   2265 class="cmr-6">12</span><span 
   2266 class="cmtt-8">&#x00A0;</span><span 
   2267 class="cmtt-8">&#x00A0;</span><span 
   2268 class="cmtt-8">&#x00A0;</span><span 
   2269 class="cmtt-8">&#x00A0;</span><span 
   2270 class="cmtt-8">&#x00A0;</span><span 
   2271 class="cmtt-8">&#x00A0;</span><span 
   2272 class="cmtt-8">&#x00A0;</span><span 
   2273 class="cmtt-8">&#x00A0;</span><span 
   2274 class="cmtt-8">&#x00A0;</span><span 
   2275 class="cmtt-8">&#x00A0;</span><span 
   2276 class="cmtt-8">&#x00A0;</span><span 
   2277 class="cmtt-8">&#x00A0;</span><span 
   2278 class="cmtt-8">&#x00A0;</span><span 
   2279 class="cmtt-8">&#x00A0;</span><span 
   2280 class="cmtt-8">&#x00A0;</span><span 
   2281 class="cmtt-8">&#x00A0;6)</span><span 
   2282 class="cmtt-8">&#x00A0;this</span><span 
   2283 class="cmtt-8">&#x00A0;entry</span><span 
   2284 class="cmtt-8">&#x00A0;is</span><span 
   2285 class="cmtt-8">&#x00A0;unused.</span><span 
   2286 class="cmtt-8">&#x00A0;</span><span 
   2287 class="cmtt-8">&#x00A0;mark</span><span 
   2288 class="cmtt-8">&#x00A0;it</span><span 
   2289 class="cmtt-8">&#x00A0;as</span><span 
   2290 class="cmtt-8">&#x00A0;such.</span>
   2291 <br class="fancyvrb" /><a 
   2292  id="x1-51056r13"></a><span 
   2293 class="cmr-6">13</span><span 
   2294 class="cmtt-8">&#x00A0;</span><span 
   2295 class="cmtt-8">&#x00A0;</span>
   2296 <br class="fancyvrb" /><a 
   2297  id="x1-51058r14"></a><span 
   2298 class="cmr-6">14</span><span 
   2299 class="cmtt-8">&#x00A0;</span><span 
   2300 class="cmtt-8">&#x00A0;</span><span 
   2301 class="cmtt-8">&#x00A0;</span><span 
   2302 class="cmtt-8">&#x00A0;</span><span 
   2303 class="cmtt-8">&#x00A0;</span><span 
   2304 class="cmtt-8">&#x00A0;</span><span 
   2305 class="cmtt-8">&#x00A0;</span><span 
   2306 class="cmtt-8">&#x00A0;</span><span 
   2307 class="cmtt-8">&#x00A0;</span><span 
   2308 class="cmtt-8">&#x00A0;</span><span 
   2309 class="cmtt-8">&#x00A0;</span><span 
   2310 class="cmtt-8">&#x00A0;</span><span 
   2311 class="cmtt-8">&#x00A0;</span><span 
   2312 class="cmtt-8">&#x00A0;</span><span 
   2313 class="cmsy-8">}</span>
   2314 <br class="fancyvrb" /><a 
   2315  id="x1-51060r15"></a><span 
   2316 class="cmr-6">15</span><span 
   2317 class="cmtt-8">&#x00A0;</span><span 
   2318 class="cmtt-8">&#x00A0;</span>
   2319 <br class="fancyvrb" /><a 
   2320  id="x1-51062r16"></a><span 
   2321 class="cmr-6">16</span><span 
   2322 class="cmtt-8">&#x00A0;</span><span 
   2323 class="cmtt-8">&#x00A0;</span><span 
   2324 class="cmtt-8">&#x00A0;</span><span 
   2325 class="cmtt-8">&#x00A0;</span><span 
   2326 class="cmtt-8">&#x00A0;</span><span 
   2327 class="cmtt-8">&#x00A0;</span><span 
   2328 class="cmtt-8">&#x00A0;</span><span 
   2329 class="cmsy-8">}</span><span 
   2330 class="cmtt-8">&#x00A0;else</span><span 
   2331 class="cmtt-8">&#x00A0;the</span><span 
   2332 class="cmtt-8">&#x00A0;sparse</span><span 
   2333 class="cmtt-8">&#x00A0;flag</span><span 
   2334 class="cmtt-8">&#x00A0;is</span><span 
   2335 class="cmtt-8">&#x00A0;not</span><span 
   2336 class="cmtt-8">&#x00A0;set</span><span 
   2337 class="cmtt-8">&#x00A0;</span><span 
   2338 class="cmsy-8">{</span>
   2339 <br class="fancyvrb" /><a 
   2340  id="x1-51064r17"></a><span 
   2341 class="cmr-6">17</span><span 
   2342 class="cmtt-8">&#x00A0;</span><span 
   2343 class="cmtt-8">&#x00A0;</span>
   2344 <br class="fancyvrb" /><a 
   2345  id="x1-51066r18"></a><span 
   2346 class="cmr-6">18</span><span 
   2347 class="cmtt-8">&#x00A0;</span><span 
   2348 class="cmtt-8">&#x00A0;</span><span 
   2349 class="cmtt-8">&#x00A0;</span><span 
   2350 class="cmtt-8">&#x00A0;</span><span 
   2351 class="cmtt-8">&#x00A0;</span><span 
   2352 class="cmtt-8">&#x00A0;</span><span 
   2353 class="cmtt-8">&#x00A0;</span><span 
   2354 class="cmtt-8">&#x00A0;</span><span 
   2355 class="cmtt-8">&#x00A0;</span><span 
   2356 class="cmtt-8">&#x00A0;7)</span><span 
   2357 class="cmtt-8">&#x00A0;[length]</span><span 
   2358 class="cmtt-8">&#x00A0;=</span><span 
   2359 class="cmtt-8">&#x00A0;read</span><span 
   2360 class="cmtt-8">&#x00A0;a</span><span 
   2361 class="cmtt-8">&#x00A0;five</span><span 
   2362 class="cmtt-8">&#x00A0;bit</span><span 
   2363 class="cmtt-8">&#x00A0;unsigned</span><span 
   2364 class="cmtt-8">&#x00A0;integer;</span>
   2365 <br class="fancyvrb" /><a 
   2366  id="x1-51068r19"></a><span 
   2367 class="cmr-6">19</span><span 
   2368 class="cmtt-8">&#x00A0;</span><span 
   2369 class="cmtt-8">&#x00A0;</span><span 
   2370 class="cmtt-8">&#x00A0;</span><span 
   2371 class="cmtt-8">&#x00A0;</span><span 
   2372 class="cmtt-8">&#x00A0;</span><span 
   2373 class="cmtt-8">&#x00A0;</span><span 
   2374 class="cmtt-8">&#x00A0;</span><span 
   2375 class="cmtt-8">&#x00A0;</span><span 
   2376 class="cmtt-8">&#x00A0;</span><span 
   2377 class="cmtt-8">&#x00A0;8)</span><span 
   2378 class="cmtt-8">&#x00A0;the</span><span 
   2379 class="cmtt-8">&#x00A0;codeword</span><span 
   2380 class="cmtt-8">&#x00A0;length</span><span 
   2381 class="cmtt-8">&#x00A0;for</span><span 
   2382 class="cmtt-8">&#x00A0;this</span><span 
   2383 class="cmtt-8">&#x00A0;entry</span><span 
   2384 class="cmtt-8">&#x00A0;is</span><span 
   2385 class="cmtt-8">&#x00A0;[length]+1;</span>
   2386 <br class="fancyvrb" /><a 
   2387  id="x1-51070r20"></a><span 
   2388 class="cmr-6">20</span><span 
   2389 class="cmtt-8">&#x00A0;</span><span 
   2390 class="cmtt-8">&#x00A0;</span>
   2391 <br class="fancyvrb" /><a 
   2392  id="x1-51072r21"></a><span 
   2393 class="cmr-6">21</span><span 
   2394 class="cmtt-8">&#x00A0;</span><span 
   2395 class="cmtt-8">&#x00A0;</span><span 
   2396 class="cmtt-8">&#x00A0;</span><span 
   2397 class="cmtt-8">&#x00A0;</span><span 
   2398 class="cmtt-8">&#x00A0;</span><span 
   2399 class="cmtt-8">&#x00A0;</span><span 
   2400 class="cmtt-8">&#x00A0;</span><span 
   2401 class="cmsy-8">}</span>
   2402 <br class="fancyvrb" /><a 
   2403  id="x1-51074r22"></a><span 
   2404 class="cmr-6">22</span><span 
   2405 class="cmtt-8">&#x00A0;</span><span 
   2406 class="cmtt-8">&#x00A0;</span>
   2407 </div>
   2408       </li>
   2409       <li class="itemize">If the <span 
   2410 class="cmtt-12">[ordered] </span>flag is set, the codeword list for this codebook is encoded in
   2411       ascending length order. Rather than reading a length for every codeword, the
   2412       encoder reads the number of codewords per length. That is, beginning at entry
   2413       zero:
   2414       <!--l. 120--><p class="noindent" >
   2415       <div class="fancyvrb" id="fancyvrb12">
   2416 <a 
   2417  id="x1-51076r1"></a><span 
   2418 class="cmr-6">1</span><span 
   2419 class="cmtt-8">&#x00A0;</span><span 
   2420 class="cmtt-8">&#x00A0;</span><span 
   2421 class="cmtt-8">&#x00A0;</span><span 
   2422 class="cmtt-8">&#x00A0;1)</span><span 
   2423 class="cmtt-8">&#x00A0;[current_entry]</span><span 
   2424 class="cmtt-8">&#x00A0;=</span><span 
   2425 class="cmtt-8">&#x00A0;0;</span>
   2426 <br class="fancyvrb" /><a 
   2427  id="x1-51078r2"></a><span 
   2428 class="cmr-6">2</span><span 
   2429 class="cmtt-8">&#x00A0;</span><span 
   2430 class="cmtt-8">&#x00A0;</span><span 
   2431 class="cmtt-8">&#x00A0;</span><span 
   2432 class="cmtt-8">&#x00A0;2)</span><span 
   2433 class="cmtt-8">&#x00A0;[current_length]</span><span 
   2434 class="cmtt-8">&#x00A0;=</span><span 
   2435 class="cmtt-8">&#x00A0;read</span><span 
   2436 class="cmtt-8">&#x00A0;a</span><span 
   2437 class="cmtt-8">&#x00A0;five</span><span 
   2438 class="cmtt-8">&#x00A0;bit</span><span 
   2439 class="cmtt-8">&#x00A0;unsigned</span><span 
   2440 class="cmtt-8">&#x00A0;integer</span><span 
   2441 class="cmtt-8">&#x00A0;and</span><span 
   2442 class="cmtt-8">&#x00A0;add</span><span 
   2443 class="cmtt-8">&#x00A0;1;</span>
   2444 <br class="fancyvrb" /><a 
   2445  id="x1-51080r3"></a><span 
   2446 class="cmr-6">3</span><span 
   2447 class="cmtt-8">&#x00A0;</span><span 
   2448 class="cmtt-8">&#x00A0;</span><span 
   2449 class="cmtt-8">&#x00A0;</span><span 
   2450 class="cmtt-8">&#x00A0;3)</span><span 
   2451 class="cmtt-8">&#x00A0;[number]</span><span 
   2452 class="cmtt-8">&#x00A0;=</span><span 
   2453 class="cmtt-8">&#x00A0;read</span><span 
   2454 class="cmtt-8">&#x00A0;</span><a 
   2455 href="#x1-1170009.2.1"><span 
   2456 class="cmtt-8">ilog</span></a><span 
   2457 class="cmtt-8">([codebook_entries]</span><span 
   2458 class="cmtt-8">&#x00A0;-</span><span 
   2459 class="cmtt-8">&#x00A0;[current_entry])</span><span 
   2460 class="cmtt-8">&#x00A0;bits</span><span 
   2461 class="cmtt-8">&#x00A0;as</span><span 
   2462 class="cmtt-8">&#x00A0;an</span><span 
   2463 class="cmtt-8">&#x00A0;unsigned</span><span 
   2464 class="cmtt-8">&#x00A0;integer</span>
   2465 <br class="fancyvrb" /><a 
   2466  id="x1-51082r4"></a><span 
   2467 class="cmr-6">4</span><span 
   2468 class="cmtt-8">&#x00A0;</span><span 
   2469 class="cmtt-8">&#x00A0;</span><span 
   2470 class="cmtt-8">&#x00A0;</span><span 
   2471 class="cmtt-8">&#x00A0;4)</span><span 
   2472 class="cmtt-8">&#x00A0;set</span><span 
   2473 class="cmtt-8">&#x00A0;the</span><span 
   2474 class="cmtt-8">&#x00A0;entries</span><span 
   2475 class="cmtt-8">&#x00A0;[current_entry]</span><span 
   2476 class="cmtt-8">&#x00A0;through</span><span 
   2477 class="cmtt-8">&#x00A0;[current_entry]+[number]-1,</span><span 
   2478 class="cmtt-8">&#x00A0;inclusive,</span>
   2479 <br class="fancyvrb" /><a 
   2480  id="x1-51084r5"></a><span 
   2481 class="cmr-6">5</span><span 
   2482 class="cmtt-8">&#x00A0;</span><span 
   2483 class="cmtt-8">&#x00A0;</span><span 
   2484 class="cmtt-8">&#x00A0;</span><span 
   2485 class="cmtt-8">&#x00A0;</span><span 
   2486 class="cmtt-8">&#x00A0;</span><span 
   2487 class="cmtt-8">&#x00A0;of</span><span 
   2488 class="cmtt-8">&#x00A0;the</span><span 
   2489 class="cmtt-8">&#x00A0;[codebook_codeword_lengths]</span><span 
   2490 class="cmtt-8">&#x00A0;array</span><span 
   2491 class="cmtt-8">&#x00A0;to</span><span 
   2492 class="cmtt-8">&#x00A0;[current_length]</span>
   2493 <br class="fancyvrb" /><a 
   2494  id="x1-51086r6"></a><span 
   2495 class="cmr-6">6</span><span 
   2496 class="cmtt-8">&#x00A0;</span><span 
   2497 class="cmtt-8">&#x00A0;</span><span 
   2498 class="cmtt-8">&#x00A0;</span><span 
   2499 class="cmtt-8">&#x00A0;5)</span><span 
   2500 class="cmtt-8">&#x00A0;set</span><span 
   2501 class="cmtt-8">&#x00A0;[current_entry]</span><span 
   2502 class="cmtt-8">&#x00A0;to</span><span 
   2503 class="cmtt-8">&#x00A0;[number]</span><span 
   2504 class="cmtt-8">&#x00A0;+</span><span 
   2505 class="cmtt-8">&#x00A0;[current_entry]</span>
   2506 <br class="fancyvrb" /><a 
   2507  id="x1-51088r7"></a><span 
   2508 class="cmr-6">7</span><span 
   2509 class="cmtt-8">&#x00A0;</span><span 
   2510 class="cmtt-8">&#x00A0;</span><span 
   2511 class="cmtt-8">&#x00A0;</span><span 
   2512 class="cmtt-8">&#x00A0;6)</span><span 
   2513 class="cmtt-8">&#x00A0;increment</span><span 
   2514 class="cmtt-8">&#x00A0;[current_length]</span><span 
   2515 class="cmtt-8">&#x00A0;by</span><span 
   2516 class="cmtt-8">&#x00A0;1</span>
   2517 <br class="fancyvrb" /><a 
   2518  id="x1-51090r8"></a><span 
   2519 class="cmr-6">8</span><span 
   2520 class="cmtt-8">&#x00A0;</span><span 
   2521 class="cmtt-8">&#x00A0;</span><span 
   2522 class="cmtt-8">&#x00A0;</span><span 
   2523 class="cmtt-8">&#x00A0;7)</span><span 
   2524 class="cmtt-8">&#x00A0;if</span><span 
   2525 class="cmtt-8">&#x00A0;[current_entry]</span><span 
   2526 class="cmtt-8">&#x00A0;is</span><span 
   2527 class="cmtt-8">&#x00A0;greater</span><span 
   2528 class="cmtt-8">&#x00A0;than</span><span 
   2529 class="cmtt-8">&#x00A0;[codebook_entries]</span><span 
   2530 class="cmtt-8">&#x00A0;ERROR</span><span 
   2531 class="cmtt-8">&#x00A0;CONDITION;</span>
   2532 <br class="fancyvrb" /><a 
   2533  id="x1-51092r9"></a><span 
   2534 class="cmr-6">9</span><span 
   2535 class="cmtt-8">&#x00A0;</span><span 
   2536 class="cmtt-8">&#x00A0;</span><span 
   2537 class="cmtt-8">&#x00A0;</span><span 
   2538 class="cmtt-8">&#x00A0;</span><span 
   2539 class="cmtt-8">&#x00A0;</span><span 
   2540 class="cmtt-8">&#x00A0;the</span><span 
   2541 class="cmtt-8">&#x00A0;decoder</span><span 
   2542 class="cmtt-8">&#x00A0;will</span><span 
   2543 class="cmtt-8">&#x00A0;not</span><span 
   2544 class="cmtt-8">&#x00A0;be</span><span 
   2545 class="cmtt-8">&#x00A0;able</span><span 
   2546 class="cmtt-8">&#x00A0;to</span><span 
   2547 class="cmtt-8">&#x00A0;read</span><span 
   2548 class="cmtt-8">&#x00A0;this</span><span 
   2549 class="cmtt-8">&#x00A0;stream.</span>
   2550 <br class="fancyvrb" /><a 
   2551  id="x1-51094r10"></a><span 
   2552 class="cmr-6">10</span><span 
   2553 class="cmtt-8">&#x00A0;</span><span 
   2554 class="cmtt-8">&#x00A0;</span><span 
   2555 class="cmtt-8">&#x00A0;</span><span 
   2556 class="cmtt-8">&#x00A0;8)</span><span 
   2557 class="cmtt-8">&#x00A0;if</span><span 
   2558 class="cmtt-8">&#x00A0;[current_entry]</span><span 
   2559 class="cmtt-8">&#x00A0;is</span><span 
   2560 class="cmtt-8">&#x00A0;less</span><span 
   2561 class="cmtt-8">&#x00A0;than</span><span 
   2562 class="cmtt-8">&#x00A0;[codebook_entries],</span><span 
   2563 class="cmtt-8">&#x00A0;repeat</span><span 
   2564 class="cmtt-8">&#x00A0;process</span><span 
   2565 class="cmtt-8">&#x00A0;starting</span><span 
   2566 class="cmtt-8">&#x00A0;at</span><span 
   2567 class="cmtt-8">&#x00A0;3)</span>
   2568 <br class="fancyvrb" /><a 
   2569  id="x1-51096r11"></a><span 
   2570 class="cmr-6">11</span><span 
   2571 class="cmtt-8">&#x00A0;</span><span 
   2572 class="cmtt-8">&#x00A0;</span><span 
   2573 class="cmtt-8">&#x00A0;</span><span 
   2574 class="cmtt-8">&#x00A0;9)</span><span 
   2575 class="cmtt-8">&#x00A0;done.</span>
   2576                                                                                         
   2577 
   2578                                                                                         
   2579 </div>
   2580       </li></ul>
   2581 <!--l. 136--><p class="noindent" >After all codeword lengths have been decoded, the decoder reads the vector lookup table. Vorbis
   2582 I supports three lookup types:
   2583       <ol  class="enumerate1" >
   2584       <li 
   2585   class="enumerate" id="x1-51098x1">No lookup
   2586       </li>
   2587       <li 
   2588   class="enumerate" id="x1-51100x2">Implicitly populated value mapping (lattice VQ)
   2589       </li>
   2590       <li 
   2591   class="enumerate" id="x1-51102x3">Explicitly populated value mapping (tessellated or &#8217;foam&#8217; VQ)</li></ol>
   2592 <!--l. 149--><p class="noindent" >The lookup table type is read as a four bit unsigned integer:
   2593 <div class="fancyvrb" id="fancyvrb13">
   2594 <a 
   2595  id="x1-51104r1"></a><span 
   2596 class="cmr-6">1</span><span 
   2597 class="cmtt-8">&#x00A0;</span><span 
   2598 class="cmtt-8">&#x00A0;</span><span 
   2599 class="cmtt-8">&#x00A0;</span><span 
   2600 class="cmtt-8">&#x00A0;1)</span><span 
   2601 class="cmtt-8">&#x00A0;[codebook_lookup_type]</span><span 
   2602 class="cmtt-8">&#x00A0;=</span><span 
   2603 class="cmtt-8">&#x00A0;read</span><span 
   2604 class="cmtt-8">&#x00A0;four</span><span 
   2605 class="cmtt-8">&#x00A0;bits</span><span 
   2606 class="cmtt-8">&#x00A0;as</span><span 
   2607 class="cmtt-8">&#x00A0;an</span><span 
   2608 class="cmtt-8">&#x00A0;unsigned</span><span 
   2609 class="cmtt-8">&#x00A0;integer</span>
   2610 </div>
   2611 <!--l. 154--><p class="noindent" >Codebook decode precedes according to <span 
   2612 class="cmtt-12">[codebook_lookup_type]</span>:
   2613       <ul class="itemize1">
   2614       <li class="itemize">Lookup type zero indicates no lookup to be read. Proceed past lookup decode.
   2615       </li>
   2616       <li class="itemize">Lookup types one and two are similar, differing only in the number of lookup values to
   2617       be read. Lookup type one reads a list of values that are permuted in a set pattern to
   2618       build a list of vectors, each vector of order <span 
   2619 class="cmtt-12">[codebook_dimensions] </span>scalars. Lookup
   2620       type two builds the same vector list, but reads each scalar for each vector explicitly,
   2621       rather than building vectors from a smaller list of possible scalar values. Lookup
   2622       decode proceeds as follows:
   2623       <!--l. 168--><p class="noindent" >
   2624       <div class="fancyvrb" id="fancyvrb14">
   2625 <a 
   2626  id="x1-51106r1"></a><span 
   2627 class="cmr-6">1</span><span 
   2628 class="cmtt-8">&#x00A0;</span><span 
   2629 class="cmtt-8">&#x00A0;</span><span 
   2630 class="cmtt-8">&#x00A0;</span><span 
   2631 class="cmtt-8">&#x00A0;1)</span><span 
   2632 class="cmtt-8">&#x00A0;[codebook_minimum_value]</span><span 
   2633 class="cmtt-8">&#x00A0;=</span><span 
   2634 class="cmtt-8">&#x00A0;</span><a 
   2635 href="#x1-1180009.2.2"><span 
   2636 class="cmtt-8">float32_unpack</span></a><span 
   2637 class="cmtt-8">(</span><span 
   2638 class="cmtt-8">&#x00A0;read</span><span 
   2639 class="cmtt-8">&#x00A0;32</span><span 
   2640 class="cmtt-8">&#x00A0;bits</span><span 
   2641 class="cmtt-8">&#x00A0;as</span><span 
   2642 class="cmtt-8">&#x00A0;an</span><span 
   2643 class="cmtt-8">&#x00A0;unsigned</span><span 
   2644 class="cmtt-8">&#x00A0;integer)</span>
   2645 <br class="fancyvrb" /><a 
   2646  id="x1-51108r2"></a><span 
   2647 class="cmr-6">2</span><span 
   2648 class="cmtt-8">&#x00A0;</span><span 
   2649 class="cmtt-8">&#x00A0;</span><span 
   2650 class="cmtt-8">&#x00A0;</span><span 
   2651 class="cmtt-8">&#x00A0;2)</span><span 
   2652 class="cmtt-8">&#x00A0;[codebook_delta_value]</span><span 
   2653 class="cmtt-8">&#x00A0;=</span><span 
   2654 class="cmtt-8">&#x00A0;</span><a 
   2655 href="#x1-1180009.2.2"><span 
   2656 class="cmtt-8">float32_unpack</span></a><span 
   2657 class="cmtt-8">(</span><span 
   2658 class="cmtt-8">&#x00A0;read</span><span 
   2659 class="cmtt-8">&#x00A0;32</span><span 
   2660 class="cmtt-8">&#x00A0;bits</span><span 
   2661 class="cmtt-8">&#x00A0;as</span><span 
   2662 class="cmtt-8">&#x00A0;an</span><span 
   2663 class="cmtt-8">&#x00A0;unsigned</span><span 
   2664 class="cmtt-8">&#x00A0;integer)</span>
   2665 <br class="fancyvrb" /><a 
   2666  id="x1-51110r3"></a><span 
   2667 class="cmr-6">3</span><span 
   2668 class="cmtt-8">&#x00A0;</span><span 
   2669 class="cmtt-8">&#x00A0;</span><span 
   2670 class="cmtt-8">&#x00A0;</span><span 
   2671 class="cmtt-8">&#x00A0;3)</span><span 
   2672 class="cmtt-8">&#x00A0;[codebook_value_bits]</span><span 
   2673 class="cmtt-8">&#x00A0;=</span><span 
   2674 class="cmtt-8">&#x00A0;read</span><span 
   2675 class="cmtt-8">&#x00A0;4</span><span 
   2676 class="cmtt-8">&#x00A0;bits</span><span 
   2677 class="cmtt-8">&#x00A0;as</span><span 
   2678 class="cmtt-8">&#x00A0;an</span><span 
   2679 class="cmtt-8">&#x00A0;unsigned</span><span 
   2680 class="cmtt-8">&#x00A0;integer</span><span 
   2681 class="cmtt-8">&#x00A0;and</span><span 
   2682 class="cmtt-8">&#x00A0;add</span><span 
   2683 class="cmtt-8">&#x00A0;1</span>
   2684 <br class="fancyvrb" /><a 
   2685  id="x1-51112r4"></a><span 
   2686 class="cmr-6">4</span><span 
   2687 class="cmtt-8">&#x00A0;</span><span 
   2688 class="cmtt-8">&#x00A0;</span><span 
   2689 class="cmtt-8">&#x00A0;</span><span 
   2690 class="cmtt-8">&#x00A0;4)</span><span 
   2691 class="cmtt-8">&#x00A0;[codebook_sequence_p]</span><span 
   2692 class="cmtt-8">&#x00A0;=</span><span 
   2693 class="cmtt-8">&#x00A0;read</span><span 
   2694 class="cmtt-8">&#x00A0;1</span><span 
   2695 class="cmtt-8">&#x00A0;bit</span><span 
   2696 class="cmtt-8">&#x00A0;as</span><span 
   2697 class="cmtt-8">&#x00A0;a</span><span 
   2698 class="cmtt-8">&#x00A0;boolean</span><span 
   2699 class="cmtt-8">&#x00A0;flag</span>
   2700 <br class="fancyvrb" /><a 
   2701  id="x1-51114r5"></a><span 
   2702 class="cmr-6">5</span><span 
   2703 class="cmtt-8">&#x00A0;</span><span 
   2704 class="cmtt-8">&#x00A0;</span>
   2705 <br class="fancyvrb" /><a 
   2706  id="x1-51116r6"></a><span 
   2707 class="cmr-6">6</span><span 
   2708 class="cmtt-8">&#x00A0;</span><span 
   2709 class="cmtt-8">&#x00A0;</span><span 
   2710 class="cmtt-8">&#x00A0;</span><span 
   2711 class="cmtt-8">&#x00A0;if</span><span 
   2712 class="cmtt-8">&#x00A0;(</span><span 
   2713 class="cmtt-8">&#x00A0;[codebook_lookup_type]</span><span 
   2714 class="cmtt-8">&#x00A0;is</span><span 
   2715 class="cmtt-8">&#x00A0;1</span><span 
   2716 class="cmtt-8">&#x00A0;)</span><span 
   2717 class="cmtt-8">&#x00A0;</span><span 
   2718 class="cmsy-8">{</span>
   2719 <br class="fancyvrb" /><a 
   2720  id="x1-51118r7"></a><span 
   2721 class="cmr-6">7</span><span 
   2722 class="cmtt-8">&#x00A0;</span><span 
   2723 class="cmtt-8">&#x00A0;</span>
   2724 <br class="fancyvrb" /><a 
   2725  id="x1-51120r8"></a><span 
   2726 class="cmr-6">8</span><span 
   2727 class="cmtt-8">&#x00A0;</span><span 
   2728 class="cmtt-8">&#x00A0;</span><span 
   2729 class="cmtt-8">&#x00A0;</span><span 
   2730 class="cmtt-8">&#x00A0;</span><span 
   2731 class="cmtt-8">&#x00A0;</span><span 
   2732 class="cmtt-8">&#x00A0;</span><span 
   2733 class="cmtt-8">&#x00A0;5)</span><span 
   2734 class="cmtt-8">&#x00A0;[codebook_lookup_values]</span><span 
   2735 class="cmtt-8">&#x00A0;=</span><span 
   2736 class="cmtt-8">&#x00A0;</span><a 
   2737 href="#x1-1190009.2.3"><span 
   2738 class="cmtt-8">lookup1_values</span></a><span 
   2739 class="cmtt-8">([codebook_entries],</span><span 
   2740 class="cmtt-8">&#x00A0;[codebook_dimensions]</span><span 
   2741 class="cmtt-8">&#x00A0;)</span>
   2742 <br class="fancyvrb" /><a 
   2743  id="x1-51122r9"></a><span 
   2744 class="cmr-6">9</span><span 
   2745 class="cmtt-8">&#x00A0;</span><span 
   2746 class="cmtt-8">&#x00A0;</span>
   2747 <br class="fancyvrb" /><a 
   2748  id="x1-51124r10"></a><span 
   2749 class="cmr-6">10</span><span 
   2750 class="cmtt-8">&#x00A0;</span><span 
   2751 class="cmtt-8">&#x00A0;</span><span 
   2752 class="cmtt-8">&#x00A0;</span><span 
   2753 class="cmtt-8">&#x00A0;</span><span 
   2754 class="cmsy-8">}</span><span 
   2755 class="cmtt-8">&#x00A0;else</span><span 
   2756 class="cmtt-8">&#x00A0;</span><span 
   2757 class="cmsy-8">{</span>
   2758 <br class="fancyvrb" /><a 
   2759  id="x1-51126r11"></a><span 
   2760 class="cmr-6">11</span><span 
   2761 class="cmtt-8">&#x00A0;</span><span 
   2762 class="cmtt-8">&#x00A0;</span>
   2763 <br class="fancyvrb" /><a 
   2764  id="x1-51128r12"></a><span 
   2765 class="cmr-6">12</span><span 
   2766 class="cmtt-8">&#x00A0;</span><span 
   2767 class="cmtt-8">&#x00A0;</span><span 
   2768 class="cmtt-8">&#x00A0;</span><span 
   2769 class="cmtt-8">&#x00A0;</span><span 
   2770 class="cmtt-8">&#x00A0;</span><span 
   2771 class="cmtt-8">&#x00A0;</span><span 
   2772 class="cmtt-8">&#x00A0;6)</span><span 
   2773 class="cmtt-8">&#x00A0;[codebook_lookup_values]</span><span 
   2774 class="cmtt-8">&#x00A0;=</span><span 
   2775 class="cmtt-8">&#x00A0;[codebook_entries]</span><span 
   2776 class="cmtt-8">&#x00A0;*</span><span 
   2777 class="cmtt-8">&#x00A0;[codebook_dimensions]</span>
   2778 <br class="fancyvrb" /><a 
   2779  id="x1-51130r13"></a><span 
   2780 class="cmr-6">13</span><span 
   2781 class="cmtt-8">&#x00A0;</span><span 
   2782 class="cmtt-8">&#x00A0;</span>
   2783 <br class="fancyvrb" /><a 
   2784  id="x1-51132r14"></a><span 
   2785 class="cmr-6">14</span><span 
   2786 class="cmtt-8">&#x00A0;</span><span 
   2787 class="cmtt-8">&#x00A0;</span><span 
   2788 class="cmtt-8">&#x00A0;</span><span 
   2789 class="cmtt-8">&#x00A0;</span><span 
   2790 class="cmsy-8">}</span>
   2791 <br class="fancyvrb" /><a 
   2792  id="x1-51134r15"></a><span 
   2793 class="cmr-6">15</span><span 
   2794 class="cmtt-8">&#x00A0;</span><span 
   2795 class="cmtt-8">&#x00A0;</span>
   2796 <br class="fancyvrb" /><a 
   2797  id="x1-51136r16"></a><span 
   2798 class="cmr-6">16</span><span 
   2799 class="cmtt-8">&#x00A0;</span><span 
   2800 class="cmtt-8">&#x00A0;</span><span 
   2801 class="cmtt-8">&#x00A0;</span><span 
   2802 class="cmtt-8">&#x00A0;7)</span><span 
   2803 class="cmtt-8">&#x00A0;read</span><span 
   2804 class="cmtt-8">&#x00A0;a</span><span 
   2805 class="cmtt-8">&#x00A0;total</span><span 
   2806 class="cmtt-8">&#x00A0;of</span><span 
   2807 class="cmtt-8">&#x00A0;[codebook_lookup_values]</span><span 
   2808 class="cmtt-8">&#x00A0;unsigned</span><span 
   2809 class="cmtt-8">&#x00A0;integers</span><span 
   2810 class="cmtt-8">&#x00A0;of</span><span 
   2811 class="cmtt-8">&#x00A0;[codebook_value_bits]</span><span 
   2812 class="cmtt-8">&#x00A0;each;</span>
   2813                                                                                         
   2814 
   2815                                                                                         
   2816 <br class="fancyvrb" /><a 
   2817  id="x1-51138r17"></a><span 
   2818 class="cmr-6">17</span><span 
   2819 class="cmtt-8">&#x00A0;</span><span 
   2820 class="cmtt-8">&#x00A0;</span><span 
   2821 class="cmtt-8">&#x00A0;</span><span 
   2822 class="cmtt-8">&#x00A0;</span><span 
   2823 class="cmtt-8">&#x00A0;</span><span 
   2824 class="cmtt-8">&#x00A0;</span><span 
   2825 class="cmtt-8">&#x00A0;store</span><span 
   2826 class="cmtt-8">&#x00A0;these</span><span 
   2827 class="cmtt-8">&#x00A0;in</span><span 
   2828 class="cmtt-8">&#x00A0;order</span><span 
   2829 class="cmtt-8">&#x00A0;in</span><span 
   2830 class="cmtt-8">&#x00A0;the</span><span 
   2831 class="cmtt-8">&#x00A0;array</span><span 
   2832 class="cmtt-8">&#x00A0;[codebook_multiplicands]</span>
   2833 </div>
   2834       </li>
   2835       <li class="itemize">A <span 
   2836 class="cmtt-12">[codebook_lookup_type] </span>of greater than two is reserved and indicates a stream that is
   2837       not decodable by the specification in this document.
   2838       </li></ul>
   2839 <!--l. 195--><p class="noindent" >An &#8217;end of packet&#8217; during any read operation in the above steps is considered an error condition
   2840 rendering the stream undecodable.
   2841 <!--l. 198--><p class="noindent" ><span class="paragraphHead"><a 
   2842  id="x1-520003.2.1"></a><span 
   2843 class="cmbx-12">Huffman decision tree representation</span></span>
   2844 The <span 
   2845 class="cmtt-12">[codebook_codeword_lengths] </span>array and <span 
   2846 class="cmtt-12">[codebook_entries] </span>value uniquely define the
   2847 Huffman decision tree used for entropy decoding.
   2848 <!--l. 204--><p class="noindent" >Briefly, each used codebook entry (recall that length-unordered codebooks support unused
   2849 codeword entries) is assigned, in order, the lowest valued unused binary Huffman codeword
   2850 possible. Assume the following codeword length list:
   2851 <!--l. 209--><p class="noindent" >
   2852 <div class="fancyvrb" id="fancyvrb15">
   2853 <a 
   2854  id="x1-52002r1"></a><span 
   2855 class="cmr-6">1</span><span 
   2856 class="cmtt-8">&#x00A0;</span><span 
   2857 class="cmtt-8">&#x00A0;entry</span><span 
   2858 class="cmtt-8">&#x00A0;0:</span><span 
   2859 class="cmtt-8">&#x00A0;length</span><span 
   2860 class="cmtt-8">&#x00A0;2</span>
   2861 <br class="fancyvrb" /><a 
   2862  id="x1-52004r2"></a><span 
   2863 class="cmr-6">2</span><span 
   2864 class="cmtt-8">&#x00A0;</span><span 
   2865 class="cmtt-8">&#x00A0;entry</span><span 
   2866 class="cmtt-8">&#x00A0;1:</span><span 
   2867 class="cmtt-8">&#x00A0;length</span><span 
   2868 class="cmtt-8">&#x00A0;4</span>
   2869 <br class="fancyvrb" /><a 
   2870  id="x1-52006r3"></a><span 
   2871 class="cmr-6">3</span><span 
   2872 class="cmtt-8">&#x00A0;</span><span 
   2873 class="cmtt-8">&#x00A0;entry</span><span 
   2874 class="cmtt-8">&#x00A0;2:</span><span 
   2875 class="cmtt-8">&#x00A0;length</span><span 
   2876 class="cmtt-8">&#x00A0;4</span>
   2877 <br class="fancyvrb" /><a 
   2878  id="x1-52008r4"></a><span 
   2879 class="cmr-6">4</span><span 
   2880 class="cmtt-8">&#x00A0;</span><span 
   2881 class="cmtt-8">&#x00A0;entry</span><span 
   2882 class="cmtt-8">&#x00A0;3:</span><span 
   2883 class="cmtt-8">&#x00A0;length</span><span 
   2884 class="cmtt-8">&#x00A0;4</span>
   2885 <br class="fancyvrb" /><a 
   2886  id="x1-52010r5"></a><span 
   2887 class="cmr-6">5</span><span 
   2888 class="cmtt-8">&#x00A0;</span><span 
   2889 class="cmtt-8">&#x00A0;entry</span><span 
   2890 class="cmtt-8">&#x00A0;4:</span><span 
   2891 class="cmtt-8">&#x00A0;length</span><span 
   2892 class="cmtt-8">&#x00A0;4</span>
   2893 <br class="fancyvrb" /><a 
   2894  id="x1-52012r6"></a><span 
   2895 class="cmr-6">6</span><span 
   2896 class="cmtt-8">&#x00A0;</span><span 
   2897 class="cmtt-8">&#x00A0;entry</span><span 
   2898 class="cmtt-8">&#x00A0;5:</span><span 
   2899 class="cmtt-8">&#x00A0;length</span><span 
   2900 class="cmtt-8">&#x00A0;2</span>
   2901 <br class="fancyvrb" /><a 
   2902  id="x1-52014r7"></a><span 
   2903 class="cmr-6">7</span><span 
   2904 class="cmtt-8">&#x00A0;</span><span 
   2905 class="cmtt-8">&#x00A0;entry</span><span 
   2906 class="cmtt-8">&#x00A0;6:</span><span 
   2907 class="cmtt-8">&#x00A0;length</span><span 
   2908 class="cmtt-8">&#x00A0;3</span>
   2909 <br class="fancyvrb" /><a 
   2910  id="x1-52016r8"></a><span 
   2911 class="cmr-6">8</span><span 
   2912 class="cmtt-8">&#x00A0;</span><span 
   2913 class="cmtt-8">&#x00A0;entry</span><span 
   2914 class="cmtt-8">&#x00A0;7:</span><span 
   2915 class="cmtt-8">&#x00A0;length</span><span 
   2916 class="cmtt-8">&#x00A0;3</span>
   2917 </div>
   2918 <!--l. 220--><p class="noindent" >Assigning codewords in order (lowest possible value of the appropriate length to highest) results
   2919 in the following codeword list:
   2920 <!--l. 223--><p class="noindent" >
   2921 <div class="fancyvrb" id="fancyvrb16">
   2922 <a 
   2923  id="x1-52018r1"></a><span 
   2924 class="cmr-6">1</span><span 
   2925 class="cmtt-8">&#x00A0;</span><span 
   2926 class="cmtt-8">&#x00A0;entry</span><span 
   2927 class="cmtt-8">&#x00A0;0:</span><span 
   2928 class="cmtt-8">&#x00A0;length</span><span 
   2929 class="cmtt-8">&#x00A0;2</span><span 
   2930 class="cmtt-8">&#x00A0;codeword</span><span 
   2931 class="cmtt-8">&#x00A0;00</span>
   2932 <br class="fancyvrb" /><a 
   2933  id="x1-52020r2"></a><span 
   2934 class="cmr-6">2</span><span 
   2935 class="cmtt-8">&#x00A0;</span><span 
   2936 class="cmtt-8">&#x00A0;entry</span><span 
   2937 class="cmtt-8">&#x00A0;1:</span><span 
   2938 class="cmtt-8">&#x00A0;length</span><span 
   2939 class="cmtt-8">&#x00A0;4</span><span 
   2940 class="cmtt-8">&#x00A0;codeword</span><span 
   2941 class="cmtt-8">&#x00A0;0100</span>
   2942 <br class="fancyvrb" /><a 
   2943  id="x1-52022r3"></a><span 
   2944 class="cmr-6">3</span><span 
   2945 class="cmtt-8">&#x00A0;</span><span 
   2946 class="cmtt-8">&#x00A0;entry</span><span 
   2947 class="cmtt-8">&#x00A0;2:</span><span 
   2948 class="cmtt-8">&#x00A0;length</span><span 
   2949 class="cmtt-8">&#x00A0;4</span><span 
   2950 class="cmtt-8">&#x00A0;codeword</span><span 
   2951 class="cmtt-8">&#x00A0;0101</span>
   2952 <br class="fancyvrb" /><a 
   2953  id="x1-52024r4"></a><span 
   2954 class="cmr-6">4</span><span 
   2955 class="cmtt-8">&#x00A0;</span><span 
   2956 class="cmtt-8">&#x00A0;entry</span><span 
   2957 class="cmtt-8">&#x00A0;3:</span><span 
   2958 class="cmtt-8">&#x00A0;length</span><span 
   2959 class="cmtt-8">&#x00A0;4</span><span 
   2960 class="cmtt-8">&#x00A0;codeword</span><span 
   2961 class="cmtt-8">&#x00A0;0110</span>
   2962 <br class="fancyvrb" /><a 
   2963  id="x1-52026r5"></a><span 
   2964 class="cmr-6">5</span><span 
   2965 class="cmtt-8">&#x00A0;</span><span 
   2966 class="cmtt-8">&#x00A0;entry</span><span 
   2967 class="cmtt-8">&#x00A0;4:</span><span 
   2968 class="cmtt-8">&#x00A0;length</span><span 
   2969 class="cmtt-8">&#x00A0;4</span><span 
   2970 class="cmtt-8">&#x00A0;codeword</span><span 
   2971 class="cmtt-8">&#x00A0;0111</span>
   2972 <br class="fancyvrb" /><a 
   2973  id="x1-52028r6"></a><span 
   2974 class="cmr-6">6</span><span 
   2975 class="cmtt-8">&#x00A0;</span><span 
   2976 class="cmtt-8">&#x00A0;entry</span><span 
   2977 class="cmtt-8">&#x00A0;5:</span><span 
   2978 class="cmtt-8">&#x00A0;length</span><span 
   2979 class="cmtt-8">&#x00A0;2</span><span 
   2980 class="cmtt-8">&#x00A0;codeword</span><span 
   2981 class="cmtt-8">&#x00A0;10</span>
   2982 <br class="fancyvrb" /><a 
   2983  id="x1-52030r7"></a><span 
   2984 class="cmr-6">7</span><span 
   2985 class="cmtt-8">&#x00A0;</span><span 
   2986 class="cmtt-8">&#x00A0;entry</span><span 
   2987 class="cmtt-8">&#x00A0;6:</span><span 
   2988 class="cmtt-8">&#x00A0;length</span><span 
   2989 class="cmtt-8">&#x00A0;3</span><span 
   2990 class="cmtt-8">&#x00A0;codeword</span><span 
   2991 class="cmtt-8">&#x00A0;110</span>
   2992 <br class="fancyvrb" /><a 
   2993  id="x1-52032r8"></a><span 
   2994 class="cmr-6">8</span><span 
   2995 class="cmtt-8">&#x00A0;</span><span 
   2996 class="cmtt-8">&#x00A0;entry</span><span 
   2997 class="cmtt-8">&#x00A0;7:</span><span 
   2998 class="cmtt-8">&#x00A0;length</span><span 
   2999 class="cmtt-8">&#x00A0;3</span><span 
   3000 class="cmtt-8">&#x00A0;codeword</span><span 
   3001 class="cmtt-8">&#x00A0;111</span>
   3002 </div>
   3003                                                                                         
   3004 
   3005                                                                                         
   3006 <!--l. 235--><p class="noindent" ><span class="likesubparagraphHead"><a 
   3007  id="x1-530003.2.1"></a><span 
   3008 class="cmbx-12">Note:</span></span> Unlike most binary numerical values in this document, we intend the above codewords to
   3009 be read and used bit by bit from left to right, thus the codeword &#8217;001&#8217; is the bit string &#8217;zero, zero,
   3010 one&#8217;. When determining &#8217;lowest possible value&#8217; in the assignment definition above, the leftmost
   3011 bit is the MSb.
   3012 <!--l. 243--><p class="noindent" >It is clear that the codeword length list represents a Huffman decision tree with the entry
   3013 numbers equivalent to the leaves numbered left-to-right:
   3014 <div class="center" 
   3015 >
   3016 <!--l. 247--><p class="noindent" >
   3017 
   3018 <!--l. 248--><p class="noindent" ><img 
   3019 src="hufftree.png" alt="PIC"  
   3020 >
   3021 <br /> <div class="caption" 
   3022 ><span class="id">Figure&#x00A0;4: </span><span  
   3023 class="content">huffman tree illustration</span></div><!--tex4ht:label?: x1-530014 -->
   3024 </div>
   3025 <!--l. 253--><p class="noindent" >As we assign codewords in order, we see that each choice constructs a new leaf in the leftmost
   3026 possible position.
   3027 <!--l. 256--><p class="noindent" >Note that it&#8217;s possible to underspecify or overspecify a Huffman tree via the length list.
   3028 In the above example, if codeword seven were eliminated, it&#8217;s clear that the tree is
   3029 unfinished:
   3030 <div class="center" 
   3031 >
   3032 <!--l. 260--><p class="noindent" >
   3033 
   3034 <!--l. 261--><p class="noindent" ><img 
   3035 src="hufftree-under.png" alt="PIC"  
   3036 >
   3037 <br /> <div class="caption" 
   3038 ><span class="id">Figure&#x00A0;5: </span><span  
   3039 class="content">underspecified huffman tree illustration</span></div><!--tex4ht:label?: x1-530025 -->
   3040 </div>
   3041 <!--l. 266--><p class="noindent" >Similarly, in the original codebook, it&#8217;s clear that the tree is fully populated and a ninth
   3042 codeword is impossible. Both underspecified and overspecified trees are an error condition
   3043 rendering the stream undecodable. Take special care that a codebook with a single used
   3044 entry is handled properly; it consists of a single codework of zero bits and &#8217;reading&#8217;
   3045 a value out of such a codebook always returns the single used value and sinks zero
   3046 bits.
   3047 <!--l. 274--><p class="noindent" >Codebook entries marked &#8217;unused&#8217; are simply skipped in the assigning process. They have no
   3048 codeword and do not appear in the decision tree, thus it&#8217;s impossible for any bit pattern read
   3049 from the stream to decode to that entry number.
   3050                                                                                         
   3051 
   3052                                                                                         
   3053 <!--l. 281--><p class="noindent" ><span class="paragraphHead"><a 
   3054  id="x1-540003.2.1"></a><span 
   3055 class="cmbx-12">VQ lookup table vector representation</span></span>
   3056 Unpacking the VQ lookup table vectors relies on the following values:
   3057 <div class="fancyvrb" id="fancyvrb17">
   3058 <a 
   3059  id="x1-54002r1"></a><span 
   3060 class="cmr-6">1</span><span 
   3061 class="cmtt-8">&#x00A0;</span><span 
   3062 class="cmtt-8">&#x00A0;the</span><span 
   3063 class="cmtt-8">&#x00A0;[codebook_multiplicands]</span><span 
   3064 class="cmtt-8">&#x00A0;array</span>
   3065 <br class="fancyvrb" /><a 
   3066  id="x1-54004r2"></a><span 
   3067 class="cmr-6">2</span><span 
   3068 class="cmtt-8">&#x00A0;</span><span 
   3069 class="cmtt-8">&#x00A0;[codebook_minimum_value]</span>
   3070 <br class="fancyvrb" /><a 
   3071  id="x1-54006r3"></a><span 
   3072 class="cmr-6">3</span><span 
   3073 class="cmtt-8">&#x00A0;</span><span 
   3074 class="cmtt-8">&#x00A0;[codebook_delta_value]</span>
   3075 <br class="fancyvrb" /><a 
   3076  id="x1-54008r4"></a><span 
   3077 class="cmr-6">4</span><span 
   3078 class="cmtt-8">&#x00A0;</span><span 
   3079 class="cmtt-8">&#x00A0;[codebook_sequence_p]</span>
   3080 <br class="fancyvrb" /><a 
   3081  id="x1-54010r5"></a><span 
   3082 class="cmr-6">5</span><span 
   3083 class="cmtt-8">&#x00A0;</span><span 
   3084 class="cmtt-8">&#x00A0;[codebook_lookup_type]</span>
   3085 <br class="fancyvrb" /><a 
   3086  id="x1-54012r6"></a><span 
   3087 class="cmr-6">6</span><span 
   3088 class="cmtt-8">&#x00A0;</span><span 
   3089 class="cmtt-8">&#x00A0;[codebook_entries]</span>
   3090 <br class="fancyvrb" /><a 
   3091  id="x1-54014r7"></a><span 
   3092 class="cmr-6">7</span><span 
   3093 class="cmtt-8">&#x00A0;</span><span 
   3094 class="cmtt-8">&#x00A0;[codebook_dimensions]</span>
   3095 <br class="fancyvrb" /><a 
   3096  id="x1-54016r8"></a><span 
   3097 class="cmr-6">8</span><span 
   3098 class="cmtt-8">&#x00A0;</span><span 
   3099 class="cmtt-8">&#x00A0;[codebook_lookup_values]</span>
   3100 </div>
   3101 <!--l. 297--><p class="noindent" >Decoding (unpacking) a specific vector in the vector lookup table proceeds according to
   3102 <span 
   3103 class="cmtt-12">[codebook_lookup_type]</span>. The unpacked vector values are what a codebook would return
   3104 during audio packet decode in a VQ context.
   3105 <!--l. 302--><p class="noindent" ><span class="paragraphHead"><a 
   3106  id="x1-550003.2.1"></a><span 
   3107 class="cmbx-12">Vector value decode: Lookup type 1</span></span>
   3108 Lookup type one specifies a lattice VQ lookup table built algorithmically from a list of
   3109 scalar values. Calculate (unpack) the final values of a codebook entry vector from
   3110 the entries in <span 
   3111 class="cmtt-12">[codebook_multiplicands] </span>as follows (<span 
   3112 class="cmtt-12">[value_vector] </span>is the output
   3113 vector representing the vector of values for entry number <span 
   3114 class="cmtt-12">[lookup_offset] </span>in this
   3115 codebook):
   3116 <!--l. 311--><p class="noindent" >
   3117 <div class="fancyvrb" id="fancyvrb18">
   3118 <a 
   3119  id="x1-55002r1"></a><span 
   3120 class="cmr-6">1</span><span 
   3121 class="cmtt-8">&#x00A0;</span><span 
   3122 class="cmtt-8">&#x00A0;</span><span 
   3123 class="cmtt-8">&#x00A0;</span><span 
   3124 class="cmtt-8">&#x00A0;1)</span><span 
   3125 class="cmtt-8">&#x00A0;[last]</span><span 
   3126 class="cmtt-8">&#x00A0;=</span><span 
   3127 class="cmtt-8">&#x00A0;0;</span>
   3128 <br class="fancyvrb" /><a 
   3129  id="x1-55004r2"></a><span 
   3130 class="cmr-6">2</span><span 
   3131 class="cmtt-8">&#x00A0;</span><span 
   3132 class="cmtt-8">&#x00A0;</span><span 
   3133 class="cmtt-8">&#x00A0;</span><span 
   3134 class="cmtt-8">&#x00A0;2)</span><span 
   3135 class="cmtt-8">&#x00A0;[index_divisor]</span><span 
   3136 class="cmtt-8">&#x00A0;=</span><span 
   3137 class="cmtt-8">&#x00A0;1;</span>
   3138 <br class="fancyvrb" /><a 
   3139  id="x1-55006r3"></a><span 
   3140 class="cmr-6">3</span><span 
   3141 class="cmtt-8">&#x00A0;</span><span 
   3142 class="cmtt-8">&#x00A0;</span><span 
   3143 class="cmtt-8">&#x00A0;</span><span 
   3144 class="cmtt-8">&#x00A0;3)</span><span 
   3145 class="cmtt-8">&#x00A0;iterate</span><span 
   3146 class="cmtt-8">&#x00A0;[i]</span><span 
   3147 class="cmtt-8">&#x00A0;over</span><span 
   3148 class="cmtt-8">&#x00A0;the</span><span 
   3149 class="cmtt-8">&#x00A0;range</span><span 
   3150 class="cmtt-8">&#x00A0;0</span><span 
   3151 class="cmtt-8">&#x00A0;...</span><span 
   3152 class="cmtt-8">&#x00A0;[codebook_dimensions]-1</span><span 
   3153 class="cmtt-8">&#x00A0;(once</span><span 
   3154 class="cmtt-8">&#x00A0;for</span><span 
   3155 class="cmtt-8">&#x00A0;each</span><span 
   3156 class="cmtt-8">&#x00A0;scalar</span><span 
   3157 class="cmtt-8">&#x00A0;value</span><span 
   3158 class="cmtt-8">&#x00A0;in</span><span 
   3159 class="cmtt-8">&#x00A0;the</span><span 
   3160 class="cmtt-8">&#x00A0;value</span><span 
   3161 class="cmtt-8">&#x00A0;vector)</span><span 
   3162 class="cmtt-8">&#x00A0;</span><span 
   3163 class="cmsy-8">{</span>
   3164 <br class="fancyvrb" /><a 
   3165  id="x1-55008r4"></a><span 
   3166 class="cmr-6">4</span><span 
   3167 class="cmtt-8">&#x00A0;</span><span 
   3168 class="cmtt-8">&#x00A0;</span>
   3169 <br class="fancyvrb" /><a 
   3170  id="x1-55010r5"></a><span 
   3171 class="cmr-6">5</span><span 
   3172 class="cmtt-8">&#x00A0;</span><span 
   3173 class="cmtt-8">&#x00A0;</span><span 
   3174 class="cmtt-8">&#x00A0;</span><span 
   3175 class="cmtt-8">&#x00A0;</span><span 
   3176 class="cmtt-8">&#x00A0;</span><span 
   3177 class="cmtt-8">&#x00A0;</span><span 
   3178 class="cmtt-8">&#x00A0;</span><span 
   3179 class="cmtt-8">&#x00A0;</span><span 
   3180 class="cmtt-8">&#x00A0;4)</span><span 
   3181 class="cmtt-8">&#x00A0;[multiplicand_offset]</span><span 
   3182 class="cmtt-8">&#x00A0;=</span><span 
   3183 class="cmtt-8">&#x00A0;(</span><span 
   3184 class="cmtt-8">&#x00A0;[lookup_offset]</span><span 
   3185 class="cmtt-8">&#x00A0;divided</span><span 
   3186 class="cmtt-8">&#x00A0;by</span><span 
   3187 class="cmtt-8">&#x00A0;[index_divisor]</span><span 
   3188 class="cmtt-8">&#x00A0;using</span><span 
   3189 class="cmtt-8">&#x00A0;integer</span>
   3190 <br class="fancyvrb" /><a 
   3191  id="x1-55012r6"></a><span 
   3192 class="cmr-6">6</span><span 
   3193 class="cmtt-8">&#x00A0;</span><span 
   3194 class="cmtt-8">&#x00A0;</span><span 
   3195 class="cmtt-8">&#x00A0;</span><span 
   3196 class="cmtt-8">&#x00A0;</span><span 
   3197 class="cmtt-8">&#x00A0;</span><span 
   3198 class="cmtt-8">&#x00A0;</span><span 
   3199 class="cmtt-8">&#x00A0;</span><span 
   3200 class="cmtt-8">&#x00A0;</span><span 
   3201 class="cmtt-8">&#x00A0;</span><span 
   3202 class="cmtt-8">&#x00A0;</span><span 
   3203 class="cmtt-8">&#x00A0;</span><span 
   3204 class="cmtt-8">&#x00A0;division</span><span 
   3205 class="cmtt-8">&#x00A0;)</span><span 
   3206 class="cmtt-8">&#x00A0;integer</span><span 
   3207 class="cmtt-8">&#x00A0;modulo</span><span 
   3208 class="cmtt-8">&#x00A0;[codebook_lookup_values]</span>
   3209 <br class="fancyvrb" /><a 
   3210  id="x1-55014r7"></a><span 
   3211 class="cmr-6">7</span><span 
   3212 class="cmtt-8">&#x00A0;</span><span 
   3213 class="cmtt-8">&#x00A0;</span>
   3214 <br class="fancyvrb" /><a 
   3215  id="x1-55016r8"></a><span 
   3216 class="cmr-6">8</span><span 
   3217 class="cmtt-8">&#x00A0;</span><span 
   3218 class="cmtt-8">&#x00A0;</span><span 
   3219 class="cmtt-8">&#x00A0;</span><span 
   3220 class="cmtt-8">&#x00A0;</span><span 
   3221 class="cmtt-8">&#x00A0;</span><span 
   3222 class="cmtt-8">&#x00A0;</span><span 
   3223 class="cmtt-8">&#x00A0;</span><span 
   3224 class="cmtt-8">&#x00A0;</span><span 
   3225 class="cmtt-8">&#x00A0;5)</span><span 
   3226 class="cmtt-8">&#x00A0;vector</span><span 
   3227 class="cmtt-8">&#x00A0;[value_vector]</span><span 
   3228 class="cmtt-8">&#x00A0;element</span><span 
   3229 class="cmtt-8">&#x00A0;[i]</span><span 
   3230 class="cmtt-8">&#x00A0;=</span>
   3231 <br class="fancyvrb" /><a 
   3232  id="x1-55018r9"></a><span 
   3233 class="cmr-6">9</span><span 
   3234 class="cmtt-8">&#x00A0;</span><span 
   3235 class="cmtt-8">&#x00A0;</span><span 
   3236 class="cmtt-8">&#x00A0;</span><span 
   3237 class="cmtt-8">&#x00A0;</span><span 
   3238 class="cmtt-8">&#x00A0;</span><span 
   3239 class="cmtt-8">&#x00A0;</span><span 
   3240 class="cmtt-8">&#x00A0;</span><span 
   3241 class="cmtt-8">&#x00A0;</span><span 
   3242 class="cmtt-8">&#x00A0;</span><span 
   3243 class="cmtt-8">&#x00A0;</span><span 
   3244 class="cmtt-8">&#x00A0;</span><span 
   3245 class="cmtt-8">&#x00A0;</span><span 
   3246 class="cmtt-8">&#x00A0;</span><span 
   3247 class="cmtt-8">&#x00A0;(</span><span 
   3248 class="cmtt-8">&#x00A0;[codebook_multiplicands]</span><span 
   3249 class="cmtt-8">&#x00A0;array</span><span 
   3250 class="cmtt-8">&#x00A0;element</span><span 
   3251 class="cmtt-8">&#x00A0;number</span><span 
   3252 class="cmtt-8">&#x00A0;[multiplicand_offset]</span><span 
   3253 class="cmtt-8">&#x00A0;)</span><span 
   3254 class="cmtt-8">&#x00A0;*</span>
   3255 <br class="fancyvrb" /><a 
   3256  id="x1-55020r10"></a><span 
   3257 class="cmr-6">10</span><span 
   3258 class="cmtt-8">&#x00A0;</span><span 
   3259 class="cmtt-8">&#x00A0;</span><span 
   3260 class="cmtt-8">&#x00A0;</span><span 
   3261 class="cmtt-8">&#x00A0;</span><span 
   3262 class="cmtt-8">&#x00A0;</span><span 
   3263 class="cmtt-8">&#x00A0;</span><span 
   3264 class="cmtt-8">&#x00A0;</span><span 
   3265 class="cmtt-8">&#x00A0;</span><span 
   3266 class="cmtt-8">&#x00A0;</span><span 
   3267 class="cmtt-8">&#x00A0;</span><span 
   3268 class="cmtt-8">&#x00A0;</span><span 
   3269 class="cmtt-8">&#x00A0;</span><span 
   3270 class="cmtt-8">&#x00A0;</span><span 
   3271 class="cmtt-8">&#x00A0;[codebook_delta_value]</span><span 
   3272 class="cmtt-8">&#x00A0;+</span><span 
   3273 class="cmtt-8">&#x00A0;[codebook_minimum_value]</span><span 
   3274 class="cmtt-8">&#x00A0;+</span><span 
   3275 class="cmtt-8">&#x00A0;[last];</span>
   3276 <br class="fancyvrb" /><a 
   3277  id="x1-55022r11"></a><span 
   3278 class="cmr-6">11</span><span 
   3279 class="cmtt-8">&#x00A0;</span><span 
   3280 class="cmtt-8">&#x00A0;</span>
   3281 <br class="fancyvrb" /><a 
   3282  id="x1-55024r12"></a><span 
   3283 class="cmr-6">12</span><span 
   3284 class="cmtt-8">&#x00A0;</span><span 
   3285 class="cmtt-8">&#x00A0;</span><span 
   3286 class="cmtt-8">&#x00A0;</span><span 
   3287 class="cmtt-8">&#x00A0;</span><span 
   3288 class="cmtt-8">&#x00A0;</span><span 
   3289 class="cmtt-8">&#x00A0;</span><span 
   3290 class="cmtt-8">&#x00A0;</span><span 
   3291 class="cmtt-8">&#x00A0;</span><span 
   3292 class="cmtt-8">&#x00A0;6)</span><span 
   3293 class="cmtt-8">&#x00A0;if</span><span 
   3294 class="cmtt-8">&#x00A0;(</span><span 
   3295 class="cmtt-8">&#x00A0;[codebook_sequence_p]</span><span 
   3296 class="cmtt-8">&#x00A0;is</span><span 
   3297 class="cmtt-8">&#x00A0;set</span><span 
   3298 class="cmtt-8">&#x00A0;)</span><span 
   3299 class="cmtt-8">&#x00A0;then</span><span 
   3300 class="cmtt-8">&#x00A0;set</span><span 
   3301 class="cmtt-8">&#x00A0;[last]</span><span 
   3302 class="cmtt-8">&#x00A0;=</span><span 
   3303 class="cmtt-8">&#x00A0;vector</span><span 
   3304 class="cmtt-8">&#x00A0;[value_vector]</span><span 
   3305 class="cmtt-8">&#x00A0;element</span><span 
   3306 class="cmtt-8">&#x00A0;[i]</span>
   3307 <br class="fancyvrb" /><a 
   3308  id="x1-55026r13"></a><span 
   3309 class="cmr-6">13</span><span 
   3310 class="cmtt-8">&#x00A0;</span><span 
   3311 class="cmtt-8">&#x00A0;</span>
   3312 <br class="fancyvrb" /><a 
   3313  id="x1-55028r14"></a><span 
   3314 class="cmr-6">14</span><span 
   3315 class="cmtt-8">&#x00A0;</span><span 
   3316 class="cmtt-8">&#x00A0;</span><span 
   3317 class="cmtt-8">&#x00A0;</span><span 
   3318 class="cmtt-8">&#x00A0;</span><span 
   3319 class="cmtt-8">&#x00A0;</span><span 
   3320 class="cmtt-8">&#x00A0;</span><span 
   3321 class="cmtt-8">&#x00A0;</span><span 
   3322 class="cmtt-8">&#x00A0;</span><span 
   3323 class="cmtt-8">&#x00A0;7)</span><span 
   3324 class="cmtt-8">&#x00A0;[index_divisor]</span><span 
   3325 class="cmtt-8">&#x00A0;=</span><span 
   3326 class="cmtt-8">&#x00A0;[index_divisor]</span><span 
   3327 class="cmtt-8">&#x00A0;*</span><span 
   3328 class="cmtt-8">&#x00A0;[codebook_lookup_values]</span>
   3329 <br class="fancyvrb" /><a 
   3330  id="x1-55030r15"></a><span 
   3331 class="cmr-6">15</span><span 
   3332 class="cmtt-8">&#x00A0;</span><span 
   3333 class="cmtt-8">&#x00A0;</span>
   3334 <br class="fancyvrb" /><a 
   3335  id="x1-55032r16"></a><span 
   3336 class="cmr-6">16</span><span 
   3337 class="cmtt-8">&#x00A0;</span><span 
   3338 class="cmtt-8">&#x00A0;</span><span 
   3339 class="cmtt-8">&#x00A0;</span><span 
   3340 class="cmtt-8">&#x00A0;</span><span 
   3341 class="cmtt-8">&#x00A0;</span><span 
   3342 class="cmtt-8">&#x00A0;</span><span 
   3343 class="cmtt-8">&#x00A0;</span><span 
   3344 class="cmsy-8">}</span>
   3345 <br class="fancyvrb" /><a 
   3346  id="x1-55034r17"></a><span 
   3347 class="cmr-6">17</span><span 
   3348 class="cmtt-8">&#x00A0;</span><span 
   3349 class="cmtt-8">&#x00A0;</span>
   3350 <br class="fancyvrb" /><a 
   3351  id="x1-55036r18"></a><span 
   3352 class="cmr-6">18</span><span 
   3353 class="cmtt-8">&#x00A0;</span><span 
   3354 class="cmtt-8">&#x00A0;</span><span 
   3355 class="cmtt-8">&#x00A0;</span><span 
   3356 class="cmtt-8">&#x00A0;8)</span><span 
   3357 class="cmtt-8">&#x00A0;vector</span><span 
   3358 class="cmtt-8">&#x00A0;calculation</span><span 
   3359 class="cmtt-8">&#x00A0;completed.</span>
   3360 </div>
   3361                                                                                         
   3362 
   3363                                                                                         
   3364 <!--l. 334--><p class="noindent" ><span class="paragraphHead"><a 
   3365  id="x1-560003.2.1"></a><span 
   3366 class="cmbx-12">Vector value decode: Lookup type 2</span></span>
   3367 Lookup type two specifies a VQ lookup table in which each scalar in each vector is explicitly set
   3368 by the <span 
   3369 class="cmtt-12">[codebook_multiplicands] </span>array in a one-to-one mapping. Calculate [unpack] the final
   3370 values of a codebook entry vector from the entries in <span 
   3371 class="cmtt-12">[codebook_multiplicands] </span>as follows
   3372 (<span 
   3373 class="cmtt-12">[value_vector] </span>is the output vector representing the vector of values for entry number
   3374 <span 
   3375 class="cmtt-12">[lookup_offset] </span>in this codebook):
   3376 <!--l. 344--><p class="noindent" >
   3377 <div class="fancyvrb" id="fancyvrb19">
   3378 <a 
   3379  id="x1-56002r1"></a><span 
   3380 class="cmr-6">1</span><span 
   3381 class="cmtt-8">&#x00A0;</span><span 
   3382 class="cmtt-8">&#x00A0;</span><span 
   3383 class="cmtt-8">&#x00A0;</span><span 
   3384 class="cmtt-8">&#x00A0;1)</span><span 
   3385 class="cmtt-8">&#x00A0;[last]</span><span 
   3386 class="cmtt-8">&#x00A0;=</span><span 
   3387 class="cmtt-8">&#x00A0;0;</span>
   3388 <br class="fancyvrb" /><a 
   3389  id="x1-56004r2"></a><span 
   3390 class="cmr-6">2</span><span 
   3391 class="cmtt-8">&#x00A0;</span><span 
   3392 class="cmtt-8">&#x00A0;</span><span 
   3393 class="cmtt-8">&#x00A0;</span><span 
   3394 class="cmtt-8">&#x00A0;2)</span><span 
   3395 class="cmtt-8">&#x00A0;[multiplicand_offset]</span><span 
   3396 class="cmtt-8">&#x00A0;=</span><span 
   3397 class="cmtt-8">&#x00A0;[lookup_offset]</span><span 
   3398 class="cmtt-8">&#x00A0;*</span><span 
   3399 class="cmtt-8">&#x00A0;[codebook_dimensions]</span>
   3400 <br class="fancyvrb" /><a 
   3401  id="x1-56006r3"></a><span 
   3402 class="cmr-6">3</span><span 
   3403 class="cmtt-8">&#x00A0;</span><span 
   3404 class="cmtt-8">&#x00A0;</span><span 
   3405 class="cmtt-8">&#x00A0;</span><span 
   3406 class="cmtt-8">&#x00A0;3)</span><span 
   3407 class="cmtt-8">&#x00A0;iterate</span><span 
   3408 class="cmtt-8">&#x00A0;[i]</span><span 
   3409 class="cmtt-8">&#x00A0;over</span><span 
   3410 class="cmtt-8">&#x00A0;the</span><span 
   3411 class="cmtt-8">&#x00A0;range</span><span 
   3412 class="cmtt-8">&#x00A0;0</span><span 
   3413 class="cmtt-8">&#x00A0;...</span><span 
   3414 class="cmtt-8">&#x00A0;[codebook_dimensions]-1</span><span 
   3415 class="cmtt-8">&#x00A0;(once</span><span 
   3416 class="cmtt-8">&#x00A0;for</span><span 
   3417 class="cmtt-8">&#x00A0;each</span><span 
   3418 class="cmtt-8">&#x00A0;scalar</span><span 
   3419 class="cmtt-8">&#x00A0;value</span><span 
   3420 class="cmtt-8">&#x00A0;in</span><span 
   3421 class="cmtt-8">&#x00A0;the</span><span 
   3422 class="cmtt-8">&#x00A0;value</span><span 
   3423 class="cmtt-8">&#x00A0;vector)</span><span 
   3424 class="cmtt-8">&#x00A0;</span><span 
   3425 class="cmsy-8">{</span>
   3426 <br class="fancyvrb" /><a 
   3427  id="x1-56008r4"></a><span 
   3428 class="cmr-6">4</span><span 
   3429 class="cmtt-8">&#x00A0;</span><span 
   3430 class="cmtt-8">&#x00A0;</span>
   3431 <br class="fancyvrb" /><a 
   3432  id="x1-56010r5"></a><span 
   3433 class="cmr-6">5</span><span 
   3434 class="cmtt-8">&#x00A0;</span><span 
   3435 class="cmtt-8">&#x00A0;</span><span 
   3436 class="cmtt-8">&#x00A0;</span><span 
   3437 class="cmtt-8">&#x00A0;</span><span 
   3438 class="cmtt-8">&#x00A0;</span><span 
   3439 class="cmtt-8">&#x00A0;</span><span 
   3440 class="cmtt-8">&#x00A0;</span><span 
   3441 class="cmtt-8">&#x00A0;</span><span 
   3442 class="cmtt-8">&#x00A0;4)</span><span 
   3443 class="cmtt-8">&#x00A0;vector</span><span 
   3444 class="cmtt-8">&#x00A0;[value_vector]</span><span 
   3445 class="cmtt-8">&#x00A0;element</span><span 
   3446 class="cmtt-8">&#x00A0;[i]</span><span 
   3447 class="cmtt-8">&#x00A0;=</span>
   3448 <br class="fancyvrb" /><a 
   3449  id="x1-56012r6"></a><span 
   3450 class="cmr-6">6</span><span 
   3451 class="cmtt-8">&#x00A0;</span><span 
   3452 class="cmtt-8">&#x00A0;</span><span 
   3453 class="cmtt-8">&#x00A0;</span><span 
   3454 class="cmtt-8">&#x00A0;</span><span 
   3455 class="cmtt-8">&#x00A0;</span><span 
   3456 class="cmtt-8">&#x00A0;</span><span 
   3457 class="cmtt-8">&#x00A0;</span><span 
   3458 class="cmtt-8">&#x00A0;</span><span 
   3459 class="cmtt-8">&#x00A0;</span><span 
   3460 class="cmtt-8">&#x00A0;</span><span 
   3461 class="cmtt-8">&#x00A0;</span><span 
   3462 class="cmtt-8">&#x00A0;</span><span 
   3463 class="cmtt-8">&#x00A0;</span><span 
   3464 class="cmtt-8">&#x00A0;(</span><span 
   3465 class="cmtt-8">&#x00A0;[codebook_multiplicands]</span><span 
   3466 class="cmtt-8">&#x00A0;array</span><span 
   3467 class="cmtt-8">&#x00A0;element</span><span 
   3468 class="cmtt-8">&#x00A0;number</span><span 
   3469 class="cmtt-8">&#x00A0;[multiplicand_offset]</span><span 
   3470 class="cmtt-8">&#x00A0;)</span><span 
   3471 class="cmtt-8">&#x00A0;*</span>
   3472 <br class="fancyvrb" /><a 
   3473  id="x1-56014r7"></a><span 
   3474 class="cmr-6">7</span><span 
   3475 class="cmtt-8">&#x00A0;</span><span 
   3476 class="cmtt-8">&#x00A0;</span><span 
   3477 class="cmtt-8">&#x00A0;</span><span 
   3478 class="cmtt-8">&#x00A0;</span><span 
   3479 class="cmtt-8">&#x00A0;</span><span 
   3480 class="cmtt-8">&#x00A0;</span><span 
   3481 class="cmtt-8">&#x00A0;</span><span 
   3482 class="cmtt-8">&#x00A0;</span><span 
   3483 class="cmtt-8">&#x00A0;</span><span 
   3484 class="cmtt-8">&#x00A0;</span><span 
   3485 class="cmtt-8">&#x00A0;</span><span 
   3486 class="cmtt-8">&#x00A0;</span><span 
   3487 class="cmtt-8">&#x00A0;</span><span 
   3488 class="cmtt-8">&#x00A0;[codebook_delta_value]</span><span 
   3489 class="cmtt-8">&#x00A0;+</span><span 
   3490 class="cmtt-8">&#x00A0;[codebook_minimum_value]</span><span 
   3491 class="cmtt-8">&#x00A0;+</span><span 
   3492 class="cmtt-8">&#x00A0;[last];</span>
   3493 <br class="fancyvrb" /><a 
   3494  id="x1-56016r8"></a><span 
   3495 class="cmr-6">8</span><span 
   3496 class="cmtt-8">&#x00A0;</span><span 
   3497 class="cmtt-8">&#x00A0;</span>
   3498 <br class="fancyvrb" /><a 
   3499  id="x1-56018r9"></a><span 
   3500 class="cmr-6">9</span><span 
   3501 class="cmtt-8">&#x00A0;</span><span 
   3502 class="cmtt-8">&#x00A0;</span><span 
   3503 class="cmtt-8">&#x00A0;</span><span 
   3504 class="cmtt-8">&#x00A0;</span><span 
   3505 class="cmtt-8">&#x00A0;</span><span 
   3506 class="cmtt-8">&#x00A0;</span><span 
   3507 class="cmtt-8">&#x00A0;</span><span 
   3508 class="cmtt-8">&#x00A0;</span><span 
   3509 class="cmtt-8">&#x00A0;5)</span><span 
   3510 class="cmtt-8">&#x00A0;if</span><span 
   3511 class="cmtt-8">&#x00A0;(</span><span 
   3512 class="cmtt-8">&#x00A0;[codebook_sequence_p]</span><span 
   3513 class="cmtt-8">&#x00A0;is</span><span 
   3514 class="cmtt-8">&#x00A0;set</span><span 
   3515 class="cmtt-8">&#x00A0;)</span><span 
   3516 class="cmtt-8">&#x00A0;then</span><span 
   3517 class="cmtt-8">&#x00A0;set</span><span 
   3518 class="cmtt-8">&#x00A0;[last]</span><span 
   3519 class="cmtt-8">&#x00A0;=</span><span 
   3520 class="cmtt-8">&#x00A0;vector</span><span 
   3521 class="cmtt-8">&#x00A0;[value_vector]</span><span 
   3522 class="cmtt-8">&#x00A0;element</span><span 
   3523 class="cmtt-8">&#x00A0;[i]</span>
   3524 <br class="fancyvrb" /><a 
   3525  id="x1-56020r10"></a><span 
   3526 class="cmr-6">10</span><span 
   3527 class="cmtt-8">&#x00A0;</span><span 
   3528 class="cmtt-8">&#x00A0;</span>
   3529 <br class="fancyvrb" /><a 
   3530  id="x1-56022r11"></a><span 
   3531 class="cmr-6">11</span><span 
   3532 class="cmtt-8">&#x00A0;</span><span 
   3533 class="cmtt-8">&#x00A0;</span><span 
   3534 class="cmtt-8">&#x00A0;</span><span 
   3535 class="cmtt-8">&#x00A0;</span><span 
   3536 class="cmtt-8">&#x00A0;</span><span 
   3537 class="cmtt-8">&#x00A0;</span><span 
   3538 class="cmtt-8">&#x00A0;</span><span 
   3539 class="cmtt-8">&#x00A0;</span><span 
   3540 class="cmtt-8">&#x00A0;6)</span><span 
   3541 class="cmtt-8">&#x00A0;increment</span><span 
   3542 class="cmtt-8">&#x00A0;[multiplicand_offset]</span>
   3543 <br class="fancyvrb" /><a 
   3544  id="x1-56024r12"></a><span 
   3545 class="cmr-6">12</span><span 
   3546 class="cmtt-8">&#x00A0;</span><span 
   3547 class="cmtt-8">&#x00A0;</span>
   3548 <br class="fancyvrb" /><a 
   3549  id="x1-56026r13"></a><span 
   3550 class="cmr-6">13</span><span 
   3551 class="cmtt-8">&#x00A0;</span><span 
   3552 class="cmtt-8">&#x00A0;</span><span 
   3553 class="cmtt-8">&#x00A0;</span><span 
   3554 class="cmtt-8">&#x00A0;</span><span 
   3555 class="cmtt-8">&#x00A0;</span><span 
   3556 class="cmtt-8">&#x00A0;</span><span 
   3557 class="cmtt-8">&#x00A0;</span><span 
   3558 class="cmsy-8">}</span>
   3559 <br class="fancyvrb" /><a 
   3560  id="x1-56028r14"></a><span 
   3561 class="cmr-6">14</span><span 
   3562 class="cmtt-8">&#x00A0;</span><span 
   3563 class="cmtt-8">&#x00A0;</span>
   3564 <br class="fancyvrb" /><a 
   3565  id="x1-56030r15"></a><span 
   3566 class="cmr-6">15</span><span 
   3567 class="cmtt-8">&#x00A0;</span><span 
   3568 class="cmtt-8">&#x00A0;</span><span 
   3569 class="cmtt-8">&#x00A0;</span><span 
   3570 class="cmtt-8">&#x00A0;7)</span><span 
   3571 class="cmtt-8">&#x00A0;vector</span><span 
   3572 class="cmtt-8">&#x00A0;calculation</span><span 
   3573 class="cmtt-8">&#x00A0;completed.</span>
   3574 </div>
   3575 <!--l. 370--><p class="noindent" >
   3576 <h4 class="subsectionHead"><span class="titlemark">3.3  </span> <a 
   3577  id="x1-570003.3"></a>Use of the codebook abstraction</h4>
   3578 <!--l. 372--><p class="noindent" >The decoder uses the codebook abstraction much as it does the bit-unpacking convention; a
   3579 specific codebook reads a codeword from the bitstream, decoding it into an entry number, and
   3580 then returns that entry number to the decoder (when used in a scalar entropy coding context), or
   3581 uses that entry number as an offset into the VQ lookup table, returning a vector of values (when
   3582 used in a context desiring a VQ value). Scalar or VQ context is always explicit; any
   3583 call to the codebook mechanism requests either a scalar entry number or a lookup
   3584 vector.
   3585 <!--l. 382--><p class="noindent" >Note that VQ lookup type zero indicates that there is no lookup table; requesting
   3586 decode using a codebook of lookup type 0 in any context expecting a vector return
   3587 value (even in a case where a vector of dimension one) is forbidden. If decoder setup
   3588 or decode requests such an action, that is an error condition rendering the packet
   3589                                                                                         
   3590 
   3591                                                                                         
   3592 undecodable.
   3593 <!--l. 389--><p class="noindent" >Using a codebook to read from the packet bitstream consists first of reading and decoding the
   3594 next codeword in the bitstream. The decoder reads bits until the accumulated bits match a
   3595 codeword in the codebook. This process can be though of as logically walking the
   3596 Huffman decode tree by reading one bit at a time from the bitstream, and using the
   3597 bit as a decision boolean to take the 0 branch (left in the above examples) or the 1
   3598 branch (right in the above examples). Walking the tree finishes when the decode process
   3599 hits a leaf in the decision tree; the result is the entry number corresponding to that
   3600 leaf. Reading past the end of a packet propagates the &#8217;end-of-stream&#8217; condition to the
   3601 decoder.
   3602 <!--l. 401--><p class="noindent" >When used in a scalar context, the resulting codeword entry is the desired return
   3603 value.
   3604 <!--l. 404--><p class="noindent" >When used in a VQ context, the codeword entry number is used as an offset into the VQ lookup
   3605 table. The value returned to the decoder is the vector of scalars corresponding to this
   3606 offset.
   3607                                                                                         
   3608 
   3609                                                                                         
   3610                                                                                         
   3611 
   3612                                                                                         
   3613 <h3 class="sectionHead"><span class="titlemark">4  </span> <a 
   3614  id="x1-580004"></a>Codec Setup and Packet Decode</h3>
   3615 <!--l. 7--><p class="noindent" >
   3616 <h4 class="subsectionHead"><span class="titlemark">4.1  </span> <a 
   3617  id="x1-590004.1"></a>Overview</h4>
   3618 <!--l. 9--><p class="noindent" >This document serves as the top-level reference document for the bit-by-bit decode specification
   3619 of Vorbis I. This document assumes a high-level understanding of the Vorbis decode
   3620 process, which is provided in <a 
   3621 href="#x1-20001">Section&#x00A0;1</a>, &#8220;<a 
   3622 href="#x1-20001">Introduction and Description<!--tex4ht:ref: vorbis:spec:intro --></a>&#8221;. <a 
   3623 href="#x1-360002">Section&#x00A0;2</a>,
   3624 &#8220;<a 
   3625 href="#x1-360002">Bitpacking Convention<!--tex4ht:ref: vorbis:spec:bitpacking --></a>&#8221; covers reading and writing bit fields from and to bitstream
   3626 packets.
   3627 <!--l. 17--><p class="noindent" >
   3628 <h4 class="subsectionHead"><span class="titlemark">4.2  </span> <a 
   3629  id="x1-600004.2"></a>Header decode and decode setup</h4>
   3630 <!--l. 19--><p class="noindent" >A Vorbis bitstream begins with three header packets. The header packets are, in order, the
   3631 identification header, the comments header, and the setup header. All are required for decode
   3632 compliance. An end-of-packet condition during decoding the first or third header packet renders
   3633 the stream undecodable. End-of-packet decoding the comment header is a non-fatal error
   3634 condition.
   3635 <!--l. 26--><p class="noindent" >
   3636 <h5 class="subsubsectionHead"><span class="titlemark">4.2.1  </span> <a 
   3637  id="x1-610004.2.1"></a>Common header decode</h5>
   3638 <!--l. 28--><p class="noindent" >Each header packet begins with the same header fields.
   3639 <!--l. 31--><p class="noindent" >
   3640 <div class="fancyvrb" id="fancyvrb20">
   3641 <a 
   3642  id="x1-61002r1"></a><span 
   3643 class="cmr-6">1</span><span 
   3644 class="cmtt-8">&#x00A0;</span><span 
   3645 class="cmtt-8">&#x00A0;</span><span 
   3646 class="cmtt-8">&#x00A0;</span><span 
   3647 class="cmtt-8">&#x00A0;1)</span><span 
   3648 class="cmtt-8">&#x00A0;[packet_type]</span><span 
   3649 class="cmtt-8">&#x00A0;:</span><span 
   3650 class="cmtt-8">&#x00A0;8</span><span 
   3651 class="cmtt-8">&#x00A0;bit</span><span 
   3652 class="cmtt-8">&#x00A0;value</span>
   3653 <br class="fancyvrb" /><a 
   3654  id="x1-61004r2"></a><span 
   3655 class="cmr-6">2</span><span 
   3656 class="cmtt-8">&#x00A0;</span><span 
   3657 class="cmtt-8">&#x00A0;</span><span 
   3658 class="cmtt-8">&#x00A0;</span><span 
   3659 class="cmtt-8">&#x00A0;2)</span><span 
   3660 class="cmtt-8">&#x00A0;0x76,</span><span 
   3661 class="cmtt-8">&#x00A0;0x6f,</span><span 
   3662 class="cmtt-8">&#x00A0;0x72,</span><span 
   3663 class="cmtt-8">&#x00A0;0x62,</span><span 
   3664 class="cmtt-8">&#x00A0;0x69,</span><span 
   3665 class="cmtt-8">&#x00A0;0x73:</span><span 
   3666 class="cmtt-8">&#x00A0;the</span><span 
   3667 class="cmtt-8">&#x00A0;characters</span><span 
   3668 class="cmtt-8">&#x00A0;&#8217;v&#8217;,&#8217;o&#8217;,&#8217;r&#8217;,&#8217;b&#8217;,&#8217;i&#8217;,&#8217;s&#8217;</span><span 
   3669 class="cmtt-8">&#x00A0;as</span><span 
   3670 class="cmtt-8">&#x00A0;six</span><span 
   3671 class="cmtt-8">&#x00A0;octets</span>
   3672 </div>
   3673                                                                                         
   3674 
   3675                                                                                         
   3676 <!--l. 36--><p class="noindent" >Decode continues according to packet type; the identification header is type 1, the comment
   3677 header type 3 and the setup header type 5 (these types are all odd as a packet with a leading
   3678 single bit of &#8217;0&#8217; is an audio packet). The packets must occur in the order of identification,
   3679 comment, setup.
   3680 <!--l. 44--><p class="noindent" >
   3681 <h5 class="subsubsectionHead"><span class="titlemark">4.2.2  </span> <a 
   3682  id="x1-620004.2.2"></a>Identification header</h5>
   3683 <!--l. 46--><p class="noindent" >The identification header is a short header of only a few fields used to declare the stream
   3684 definitively as Vorbis, and provide a few externally relevant pieces of information about the audio
   3685 stream. The identification header is coded as follows:
   3686 <!--l. 51--><p class="noindent" >
   3687 <div class="fancyvrb" id="fancyvrb21">
   3688 <a 
   3689  id="x1-62002r1"></a><span 
   3690 class="cmr-6">1</span><span 
   3691 class="cmtt-8">&#x00A0;</span><span 
   3692 class="cmtt-8">&#x00A0;</span><span 
   3693 class="cmtt-8">&#x00A0;1)</span><span 
   3694 class="cmtt-8">&#x00A0;[vorbis_version]</span><span 
   3695 class="cmtt-8">&#x00A0;=</span><span 
   3696 class="cmtt-8">&#x00A0;read</span><span 
   3697 class="cmtt-8">&#x00A0;32</span><span 
   3698 class="cmtt-8">&#x00A0;bits</span><span 
   3699 class="cmtt-8">&#x00A0;as</span><span 
   3700 class="cmtt-8">&#x00A0;unsigned</span><span 
   3701 class="cmtt-8">&#x00A0;integer</span>
   3702 <br class="fancyvrb" /><a 
   3703  id="x1-62004r2"></a><span 
   3704 class="cmr-6">2</span><span 
   3705 class="cmtt-8">&#x00A0;</span><span 
   3706 class="cmtt-8">&#x00A0;</span><span 
   3707 class="cmtt-8">&#x00A0;2)</span><span 
   3708 class="cmtt-8">&#x00A0;[audio_channels]</span><span 
   3709 class="cmtt-8">&#x00A0;=</span><span 
   3710 class="cmtt-8">&#x00A0;read</span><span 
   3711 class="cmtt-8">&#x00A0;8</span><span 
   3712 class="cmtt-8">&#x00A0;bit</span><span 
   3713 class="cmtt-8">&#x00A0;integer</span><span 
   3714 class="cmtt-8">&#x00A0;as</span><span 
   3715 class="cmtt-8">&#x00A0;unsigned</span>
   3716 <br class="fancyvrb" /><a 
   3717  id="x1-62006r3"></a><span 
   3718 class="cmr-6">3</span><span 
   3719 class="cmtt-8">&#x00A0;</span><span 
   3720 class="cmtt-8">&#x00A0;</span><span 
   3721 class="cmtt-8">&#x00A0;3)</span><span 
   3722 class="cmtt-8">&#x00A0;[audio_sample_rate]</span><span 
   3723 class="cmtt-8">&#x00A0;=</span><span 
   3724 class="cmtt-8">&#x00A0;read</span><span 
   3725 class="cmtt-8">&#x00A0;32</span><span 
   3726 class="cmtt-8">&#x00A0;bits</span><span 
   3727 class="cmtt-8">&#x00A0;as</span><span 
   3728 class="cmtt-8">&#x00A0;unsigned</span><span 
   3729 class="cmtt-8">&#x00A0;integer</span>
   3730 <br class="fancyvrb" /><a 
   3731  id="x1-62008r4"></a><span 
   3732 class="cmr-6">4</span><span 
   3733 class="cmtt-8">&#x00A0;</span><span 
   3734 class="cmtt-8">&#x00A0;</span><span 
   3735 class="cmtt-8">&#x00A0;4)</span><span 
   3736 class="cmtt-8">&#x00A0;[bitrate_maximum]</span><span 
   3737 class="cmtt-8">&#x00A0;=</span><span 
   3738 class="cmtt-8">&#x00A0;read</span><span 
   3739 class="cmtt-8">&#x00A0;32</span><span 
   3740 class="cmtt-8">&#x00A0;bits</span><span 
   3741 class="cmtt-8">&#x00A0;as</span><span 
   3742 class="cmtt-8">&#x00A0;signed</span><span 
   3743 class="cmtt-8">&#x00A0;integer</span>
   3744 <br class="fancyvrb" /><a 
   3745  id="x1-62010r5"></a><span 
   3746 class="cmr-6">5</span><span 
   3747 class="cmtt-8">&#x00A0;</span><span 
   3748 class="cmtt-8">&#x00A0;</span><span 
   3749 class="cmtt-8">&#x00A0;5)</span><span 
   3750 class="cmtt-8">&#x00A0;[bitrate_nominal]</span><span 
   3751 class="cmtt-8">&#x00A0;=</span><span 
   3752 class="cmtt-8">&#x00A0;read</span><span 
   3753 class="cmtt-8">&#x00A0;32</span><span 
   3754 class="cmtt-8">&#x00A0;bits</span><span 
   3755 class="cmtt-8">&#x00A0;as</span><span 
   3756 class="cmtt-8">&#x00A0;signed</span><span 
   3757 class="cmtt-8">&#x00A0;integer</span>
   3758 <br class="fancyvrb" /><a 
   3759  id="x1-62012r6"></a><span 
   3760 class="cmr-6">6</span><span 
   3761 class="cmtt-8">&#x00A0;</span><span 
   3762 class="cmtt-8">&#x00A0;</span><span 
   3763 class="cmtt-8">&#x00A0;6)</span><span 
   3764 class="cmtt-8">&#x00A0;[bitrate_minimum]</span><span 
   3765 class="cmtt-8">&#x00A0;=</span><span 
   3766 class="cmtt-8">&#x00A0;read</span><span 
   3767 class="cmtt-8">&#x00A0;32</span><span 
   3768 class="cmtt-8">&#x00A0;bits</span><span 
   3769 class="cmtt-8">&#x00A0;as</span><span 
   3770 class="cmtt-8">&#x00A0;signed</span><span 
   3771 class="cmtt-8">&#x00A0;integer</span>
   3772 <br class="fancyvrb" /><a 
   3773  id="x1-62014r7"></a><span 
   3774 class="cmr-6">7</span><span 
   3775 class="cmtt-8">&#x00A0;</span><span 
   3776 class="cmtt-8">&#x00A0;</span><span 
   3777 class="cmtt-8">&#x00A0;7)</span><span 
   3778 class="cmtt-8">&#x00A0;[blocksize_0]</span><span 
   3779 class="cmtt-8">&#x00A0;=</span><span 
   3780 class="cmtt-8">&#x00A0;2</span><span 
   3781 class="cmtt-8">&#x00A0;exponent</span><span 
   3782 class="cmtt-8">&#x00A0;(read</span><span 
   3783 class="cmtt-8">&#x00A0;4</span><span 
   3784 class="cmtt-8">&#x00A0;bits</span><span 
   3785 class="cmtt-8">&#x00A0;as</span><span 
   3786 class="cmtt-8">&#x00A0;unsigned</span><span 
   3787 class="cmtt-8">&#x00A0;integer)</span>
   3788 <br class="fancyvrb" /><a 
   3789  id="x1-62016r8"></a><span 
   3790 class="cmr-6">8</span><span 
   3791 class="cmtt-8">&#x00A0;</span><span 
   3792 class="cmtt-8">&#x00A0;</span><span 
   3793 class="cmtt-8">&#x00A0;8)</span><span 
   3794 class="cmtt-8">&#x00A0;[blocksize_1]</span><span 
   3795 class="cmtt-8">&#x00A0;=</span><span 
   3796 class="cmtt-8">&#x00A0;2</span><span 
   3797 class="cmtt-8">&#x00A0;exponent</span><span 
   3798 class="cmtt-8">&#x00A0;(read</span><span 
   3799 class="cmtt-8">&#x00A0;4</span><span 
   3800 class="cmtt-8">&#x00A0;bits</span><span 
   3801 class="cmtt-8">&#x00A0;as</span><span 
   3802 class="cmtt-8">&#x00A0;unsigned</span><span 
   3803 class="cmtt-8">&#x00A0;integer)</span>
   3804 <br class="fancyvrb" /><a 
   3805  id="x1-62018r9"></a><span 
   3806 class="cmr-6">9</span><span 
   3807 class="cmtt-8">&#x00A0;</span><span 
   3808 class="cmtt-8">&#x00A0;</span><span 
   3809 class="cmtt-8">&#x00A0;9)</span><span 
   3810 class="cmtt-8">&#x00A0;[framing_flag]</span><span 
   3811 class="cmtt-8">&#x00A0;=</span><span 
   3812 class="cmtt-8">&#x00A0;read</span><span 
   3813 class="cmtt-8">&#x00A0;one</span><span 
   3814 class="cmtt-8">&#x00A0;bit</span>
   3815 </div>
   3816 <!--l. 63--><p class="noindent" ><span 
   3817 class="cmtt-12">[vorbis_version] </span>is to read &#8217;0&#8217; in order to be compatible with this document. Both
   3818 <span 
   3819 class="cmtt-12">[audio_channels] </span>and <span 
   3820 class="cmtt-12">[audio_sample_rate] </span>must read greater than zero. Allowed final
   3821 blocksize values are 64, 128, 256, 512, 1024, 2048, 4096 and 8192 in Vorbis I. <span 
   3822 class="cmtt-12">[blocksize_0]</span>
   3823 must be less than or equal to <span 
   3824 class="cmtt-12">[blocksize_1]</span>. The framing bit must be nonzero. Failure to meet
   3825 any of these conditions renders a stream undecodable.
   3826 <!--l. 71--><p class="noindent" >The bitrate fields above are used only as hints. The nominal bitrate field especially may be
   3827 considerably off in purely VBR streams. The fields are meaningful only when greater than
   3828 zero.
   3829       <ul class="itemize1">
   3830       <li class="itemize">All three fields set to the same value implies a fixed rate, or tightly bounded, nearly
   3831       fixed-rate bitstream
   3832       </li>
   3833       <li class="itemize">Only nominal set implies a VBR or ABR stream that averages the nominal bitrate
   3834                                                                                         
   3835 
   3836                                                                                         
   3837       </li>
   3838       <li class="itemize">Maximum and or minimum set implies a VBR bitstream that obeys the bitrate limits
   3839       </li>
   3840       <li class="itemize">None set indicates the encoder does not care to speculate.</li></ul>
   3841 <!--l. 85--><p class="noindent" >
   3842 <h5 class="subsubsectionHead"><span class="titlemark">4.2.3  </span> <a 
   3843  id="x1-630004.2.3"></a>Comment header</h5>
   3844 <!--l. 86--><p class="noindent" >Comment header decode and data specification is covered in <a 
   3845 href="#x1-810005">Section&#x00A0;5</a>, &#8220;<a 
   3846 href="#x1-810005">comment field and
   3847 header specification<!--tex4ht:ref: vorbis:spec:comment --></a>&#8221;.
   3848 <!--l. 90--><p class="noindent" >
   3849 <h5 class="subsubsectionHead"><span class="titlemark">4.2.4  </span> <a 
   3850  id="x1-640004.2.4"></a>Setup header</h5>
   3851 <!--l. 92--><p class="noindent" >Vorbis codec setup is configurable to an extreme degree:
   3852 <div class="center" 
   3853 >
   3854 <!--l. 94--><p class="noindent" >
   3855 
   3856 <!--l. 95--><p class="noindent" ><img 
   3857 src="components.png" alt="PIC"  
   3858 >
   3859 <br /> <div class="caption" 
   3860 ><span class="id">Figure&#x00A0;6: </span><span  
   3861 class="content">decoder pipeline configuration</span></div><!--tex4ht:label?: x1-640016 -->
   3862 </div>
   3863 <!--l. 100--><p class="noindent" >The setup header contains the bulk of the codec setup information needed for decode. The setup
   3864 header contains, in order, the lists of codebook configurations, time-domain transform
   3865 configurations (placeholders in Vorbis I), floor configurations, residue configurations, channel
   3866 mapping configurations and mode configurations. It finishes with a framing bit of &#8217;1&#8217;. Header
   3867 decode proceeds in the following order:
   3868 <!--l. 108--><p class="noindent" ><span class="paragraphHead"><a 
   3869  id="x1-650004.2.4"></a><span 
   3870 class="cmbx-12">Codebooks</span></span>
   3871                                                                                         
   3872 
   3873                                                                                         
   3874       <ol  class="enumerate1" >
   3875       <li 
   3876   class="enumerate" id="x1-65002x1"><span 
   3877 class="cmtt-12">[vorbis_codebook_count] </span>= read eight bits as unsigned integer and add one
   3878       </li>
   3879       <li 
   3880   class="enumerate" id="x1-65004x2">Decode  <span 
   3881 class="cmtt-12">[vorbis_codebook_count] </span>codebooks  in  order  as  defined  in  <a 
   3882 href="#x1-470003">Section&#x00A0;3</a>,
   3883       &#8220;<a 
   3884 href="#x1-470003">Probability Model and Codebooks<!--tex4ht:ref: vorbis:spec:codebook --></a>&#8221;. Save each configuration, in order, in an array
   3885       of codebook configurations <span 
   3886 class="cmtt-12">[vorbis_codebook_configurations]</span>.</li></ol>
   3887 <!--l. 120--><p class="noindent" ><span class="paragraphHead"><a 
   3888  id="x1-660004.2.4"></a><span 
   3889 class="cmbx-12">Time domain transforms</span></span>
   3890 These hooks are placeholders in Vorbis I. Nevertheless, the configuration placeholder values must
   3891 be read to maintain bitstream sync.
   3892 <!--l. 126--><p class="noindent" >
   3893       <ol  class="enumerate1" >
   3894       <li 
   3895   class="enumerate" id="x1-66002x1"><span 
   3896 class="cmtt-12">[vorbis_time_count] </span>= read 6 bits as unsigned integer and add one
   3897       </li>
   3898       <li 
   3899   class="enumerate" id="x1-66004x2">read <span 
   3900 class="cmtt-12">[vorbis_time_count] </span>16 bit values; each value should be zero. If any value is
   3901       nonzero, this is an error condition and the stream is undecodable.</li></ol>
   3902 <!--l. 133--><p class="noindent" ><span class="paragraphHead"><a 
   3903  id="x1-670004.2.4"></a><span 
   3904 class="cmbx-12">Floors</span></span>
   3905 Vorbis uses two floor types; header decode is handed to the decode abstraction of the appropriate
   3906 type.
   3907 <!--l. 138--><p class="noindent" >
   3908       <ol  class="enumerate1" >
   3909       <li 
   3910   class="enumerate" id="x1-67002x1"><span 
   3911 class="cmtt-12">[vorbis_floor_count] </span>= read 6 bits as unsigned integer and add one
   3912       </li>
   3913       <li 
   3914   class="enumerate" id="x1-67004x2">For each <span 
   3915 class="cmtt-12">[i] </span>of <span 
   3916 class="cmtt-12">[vorbis_floor_count] </span>floor numbers:
   3917            <ol  class="enumerate2" >
   3918            <li 
   3919   class="enumerate" id="x1-67006x1">read the floor type: vector <span 
   3920 class="cmtt-12">[vorbis_floor_types] </span>element <span 
   3921 class="cmtt-12">[i] </span>= read 16 bits
   3922            as unsigned integer
   3923            </li>
   3924            <li 
   3925   class="enumerate" id="x1-67008x2">If the floor type is zero, decode the floor configuration as defined in <a 
   3926 href="#x1-890006">Section&#x00A0;6</a>,
   3927            &#8220;<a 
   3928 href="#x1-890006">Floor type 0 setup and decode<!--tex4ht:ref: vorbis:spec:floor0 --></a>&#8221;; save this configuration in slot <span 
   3929 class="cmtt-12">[i] </span>of the floor
   3930            configuration array <span 
   3931 class="cmtt-12">[vorbis_floor_configurations]</span>.
   3932                                                                                         
   3933 
   3934                                                                                         
   3935            </li>
   3936            <li 
   3937   class="enumerate" id="x1-67010x3">If the floor type is one, decode the floor configuration as defined in <a 
   3938 href="#x1-950007">Section&#x00A0;7</a>,
   3939            &#8220;<a 
   3940 href="#x1-950007">Floor type 1 setup and decode<!--tex4ht:ref: vorbis:spec:floor1 --></a>&#8221;; save this configuration in slot <span 
   3941 class="cmtt-12">[i] </span>of the floor
   3942            configuration array <span 
   3943 class="cmtt-12">[vorbis_floor_configurations]</span>.
   3944            </li>
   3945            <li 
   3946   class="enumerate" id="x1-67012x4">If the the floor type is greater than one, this stream is undecodable; ERROR
   3947            CONDITION</li></ol>
   3948       </li></ol>
   3949 <!--l. 157--><p class="noindent" ><span class="paragraphHead"><a 
   3950  id="x1-680004.2.4"></a><span 
   3951 class="cmbx-12">Residues</span></span>
   3952 Vorbis uses three residue types; header decode of each type is identical.
   3953 <!--l. 162--><p class="noindent" >
   3954       <ol  class="enumerate1" >
   3955       <li 
   3956   class="enumerate" id="x1-68002x1"><span 
   3957 class="cmtt-12">[vorbis_residue_count] </span>= read 6 bits as unsigned integer and add one
   3958       </li>
   3959       <li 
   3960   class="enumerate" id="x1-68004x2">For each of <span 
   3961 class="cmtt-12">[vorbis_residue_count] </span>residue numbers:
   3962            <ol  class="enumerate2" >
   3963            <li 
   3964   class="enumerate" id="x1-68006x1">read the residue type; vector <span 
   3965 class="cmtt-12">[vorbis_residue_types] </span>element <span 
   3966 class="cmtt-12">[i] </span>= read 16
   3967            bits as unsigned integer
   3968            </li>
   3969            <li 
   3970   class="enumerate" id="x1-68008x2">If the residue type is zero, one or two, decode the residue configuration as defined
   3971            in <a 
   3972 href="#x1-1020008">Section&#x00A0;8</a>, &#8220;<a 
   3973 href="#x1-1020008">Residue setup and decode<!--tex4ht:ref: vorbis:spec:residue --></a>&#8221;; save this configuration in slot <span 
   3974 class="cmtt-12">[i] </span>of
   3975            the residue configuration array <span 
   3976 class="cmtt-12">[vorbis_residue_configurations]</span>.
   3977            </li>
   3978            <li 
   3979   class="enumerate" id="x1-68010x3">If the the residue type is greater than two, this stream is undecodable; ERROR
   3980            CONDITION</li></ol>
   3981       </li></ol>
   3982 <!--l. 177--><p class="noindent" ><span class="paragraphHead"><a 
   3983  id="x1-690004.2.4"></a><span 
   3984 class="cmbx-12">Mappings</span></span>
   3985 Mappings are used to set up specific pipelines for encoding multichannel audio with varying
   3986 channel mapping applications. Vorbis I uses a single mapping type (0), with implicit PCM
   3987 channel mappings.
   3988                                                                                         
   3989 
   3990                                                                                         
   3991 <!--l. 187--><p class="noindent" >
   3992       <ol  class="enumerate1" >
   3993       <li 
   3994   class="enumerate" id="x1-69002x1"><span 
   3995 class="cmtt-12">[vorbis_mapping_count] </span>= read 6 bits as unsigned integer and add one
   3996       </li>
   3997       <li 
   3998   class="enumerate" id="x1-69004x2">For each <span 
   3999 class="cmtt-12">[i] </span>of <span 
   4000 class="cmtt-12">[vorbis_mapping_count] </span>mapping numbers:
   4001            <ol  class="enumerate2" >
   4002            <li 
   4003   class="enumerate" id="x1-69006x1">read the mapping type: 16 bits as unsigned integer. There&#8217;s no reason to save
   4004            the mapping type in Vorbis I.
   4005            </li>
   4006            <li 
   4007   class="enumerate" id="x1-69008x2">If the mapping type is nonzero, the stream is undecodable
   4008            </li>
   4009            <li 
   4010   class="enumerate" id="x1-69010x3">If the mapping type is zero:
   4011                <ol  class="enumerate3" >
   4012                <li 
   4013   class="enumerate" id="x1-69012x1">read 1 bit as a boolean flag
   4014                    <ol  class="enumerate4" >
   4015                    <li 
   4016   class="enumerate" id="x1-69014x1">if set, <span 
   4017 class="cmtt-12">[vorbis_mapping_submaps] </span>= read 4 bits as unsigned integer
   4018                    and add one
   4019                    </li>
   4020                    <li 
   4021   class="enumerate" id="x1-69016x2">if unset, <span 
   4022 class="cmtt-12">[vorbis_mapping_submaps] </span>= 1</li></ol>
   4023                </li>
   4024                <li 
   4025   class="enumerate" id="x1-69018x2">read 1 bit as a boolean flag
   4026                    <ol  class="enumerate4" >
   4027                    <li 
   4028   class="enumerate" id="x1-69020x1">if set, square polar channel mapping is in use:
   4029                      <ul class="itemize1">
   4030                      <li class="itemize"><span 
   4031 class="cmtt-12">[vorbis_mapping_coupling_steps] </span>=  read  8  bits  as  unsigned
   4032                      integer and add one
   4033                      </li>
   4034                      <li class="itemize">for <span 
   4035 class="cmtt-12">[j] </span>each of <span 
   4036 class="cmtt-12">[vorbis_mapping_coupling_steps] </span>steps:
   4037                        <ul class="itemize2">
   4038                        <li class="itemize">vector    <span 
   4039 class="cmtt-12">[vorbis_mapping_magnitude]  </span>element    <span 
   4040 class="cmtt-12">[j]</span>=    read
   4041                        <a 
   4042 href="#x1-1170009.2.1">ilog</a>(<span 
   4043 class="cmtt-12">[audio_channels] </span>- 1) bits as unsigned integer
   4044                        </li>
   4045                        <li class="itemize">vector     <span 
   4046 class="cmtt-12">[vorbis_mapping_angle]   </span>element     <span 
   4047 class="cmtt-12">[j]</span>=     read
   4048                        <a 
   4049 href="#x1-1170009.2.1">ilog</a>(<span 
   4050 class="cmtt-12">[audio_channels] </span>- 1) bits as unsigned integer
   4051                        </li>
   4052                                                                                         
   4053 
   4054                                                                                         
   4055                        <li class="itemize">the  numbers  read  in  the  above  two  steps  are  channel  numbers
   4056                        representing the channel to treat as magnitude and the channel
   4057                        to  treat  as  angle,  respectively.  If  for  any  coupling  step  the
   4058                        angle channel number equals the magnitude channel number, the
   4059                        magnitude channel number is greater than <span 
   4060 class="cmtt-12">[audio_channels]</span>-1, or
   4061                        the angle channel is greater than <span 
   4062 class="cmtt-12">[audio_channels]</span>-1, the stream
   4063                        is undecodable.</li></ul>
   4064                      </li></ul>
   4065                    </li>
   4066                    <li 
   4067   class="enumerate" id="x1-69022x2">if unset, <span 
   4068 class="cmtt-12">[vorbis_mapping_coupling_steps] </span>= 0</li></ol>
   4069                </li>
   4070                <li 
   4071   class="enumerate" id="x1-69024x3">read 2 bits (reserved field); if the value is nonzero, the stream is undecodable
   4072                </li>
   4073                <li 
   4074   class="enumerate" id="x1-69026x4">if <span 
   4075 class="cmtt-12">[vorbis_mapping_submaps] </span>is greater than one, we read channel multiplex
   4076                settings. For each <span 
   4077 class="cmtt-12">[j] </span>of <span 
   4078 class="cmtt-12">[audio_channels] </span>channels:
   4079                    <ol  class="enumerate4" >
   4080                    <li 
   4081   class="enumerate" id="x1-69028x1">vector <span 
   4082 class="cmtt-12">[vorbis_mapping_mux] </span>element <span 
   4083 class="cmtt-12">[j] </span>= read 4 bits as unsigned
   4084                    integer
   4085                    </li>
   4086                    <li 
   4087   class="enumerate" id="x1-69030x2">if   the   value   is   greater   than   the   highest   numbered   submap
   4088                    (<span 
   4089 class="cmtt-12">[vorbis_mapping_submaps] </span>- 1), this in an error condition rendering
   4090                    the stream undecodable</li></ol>
   4091                </li>
   4092                <li 
   4093   class="enumerate" id="x1-69032x5">for each submap <span 
   4094 class="cmtt-12">[j] </span>of <span 
   4095 class="cmtt-12">[vorbis_mapping_submaps] </span>submaps, read the floor and
   4096                residue numbers for use in decoding that submap:
   4097                    <ol  class="enumerate4" >
   4098                    <li 
   4099   class="enumerate" id="x1-69034x1">read and discard 8 bits (the unused time configuration placeholder)
   4100                    </li>
   4101                    <li 
   4102   class="enumerate" id="x1-69036x2">read 8 bits as unsigned integer for the floor number; save in vector
   4103                    <span 
   4104 class="cmtt-12">[vorbis_mapping_submap_floor] </span>element <span 
   4105 class="cmtt-12">[j]</span>
   4106                    </li>
   4107                    <li 
   4108   class="enumerate" id="x1-69038x3">verify the floor number is not greater than the highest number floor
   4109                    configured for the bitstream. If it is, the bitstream is undecodable
   4110                    </li>
   4111                    <li 
   4112   class="enumerate" id="x1-69040x4">read 8 bits as unsigned integer for the residue number; save in vector
   4113                    <span 
   4114 class="cmtt-12">[vorbis_mapping_submap_residue] </span>element <span 
   4115 class="cmtt-12">[j]</span>
   4116                                                                                         
   4117 
   4118                                                                                         
   4119                    </li>
   4120                    <li 
   4121   class="enumerate" id="x1-69042x5">verify the residue number is not greater than the highest number residue
   4122                    configured for the bitstream. If it is, the bitstream is undecodable</li></ol>
   4123                </li>
   4124                <li 
   4125   class="enumerate" id="x1-69044x6">save this mapping configuration in slot <span 
   4126 class="cmtt-12">[i] </span>of the mapping configuration array
   4127                <span 
   4128 class="cmtt-12">[vorbis_mapping_configurations]</span>.</li></ol>
   4129            </li></ol>
   4130       </li></ol>
   4131 <!--l. 247--><p class="noindent" ><span class="paragraphHead"><a 
   4132  id="x1-700004.2.4"></a><span 
   4133 class="cmbx-12">Modes</span></span>
   4134       <ol  class="enumerate1" >
   4135       <li 
   4136   class="enumerate" id="x1-70002x1"><span 
   4137 class="cmtt-12">[vorbis_mode_count] </span>= read 6 bits as unsigned integer and add one
   4138       </li>
   4139       <li 
   4140   class="enumerate" id="x1-70004x2">For each of <span 
   4141 class="cmtt-12">[vorbis_mode_count] </span>mode numbers:
   4142            <ol  class="enumerate2" >
   4143            <li 
   4144   class="enumerate" id="x1-70006x1"><span 
   4145 class="cmtt-12">[vorbis_mode_blockflag] </span>= read 1 bit
   4146            </li>
   4147            <li 
   4148   class="enumerate" id="x1-70008x2"><span 
   4149 class="cmtt-12">[vorbis_mode_windowtype] </span>= read 16 bits as unsigned integer
   4150            </li>
   4151            <li 
   4152   class="enumerate" id="x1-70010x3"><span 
   4153 class="cmtt-12">[vorbis_mode_transformtype] </span>= read 16 bits as unsigned integer
   4154            </li>
   4155            <li 
   4156   class="enumerate" id="x1-70012x4"><span 
   4157 class="cmtt-12">[vorbis_mode_mapping] </span>= read 8 bits as unsigned integer
   4158            </li>
   4159            <li 
   4160   class="enumerate" id="x1-70014x5">verify       ranges;       zero       is       the       only       legal       value       in
   4161            Vorbis I for <span 
   4162 class="cmtt-12">[vorbis_mode_windowtype] </span>and <span 
   4163 class="cmtt-12">[vorbis_mode_transformtype]</span>.
   4164            <span 
   4165 class="cmtt-12">[vorbis_mode_mapping] </span>must not be greater than the highest number mapping
   4166            in use. Any illegal values render the stream undecodable.
   4167            </li>
   4168            <li 
   4169   class="enumerate" id="x1-70016x6">save  this  mode  configuration  in  slot  <span 
   4170 class="cmtt-12">[i] </span>of  the  mode  configuration  array
   4171            <span 
   4172 class="cmtt-12">[vorbis_mode_configurations]</span>.</li></ol>
   4173       </li>
   4174       <li 
   4175   class="enumerate" id="x1-70018x3">read 1 bit as a framing flag. If unset, a framing error occurred and the stream is not
   4176       decodable.</li></ol>
   4177                                                                                         
   4178 
   4179                                                                                         
   4180 <!--l. 268--><p class="noindent" >After reading mode descriptions, setup header decode is complete.
   4181 <!--l. 277--><p class="noindent" >
   4182 <h4 class="subsectionHead"><span class="titlemark">4.3  </span> <a 
   4183  id="x1-710004.3"></a>Audio packet decode and synthesis</h4>
   4184 <!--l. 279--><p class="noindent" >Following the three header packets, all packets in a Vorbis I stream are audio. The first step of
   4185 audio packet decode is to read and verify the packet type. <span 
   4186 class="cmti-12">A non-audio packet when audio is</span>
   4187 <span 
   4188 class="cmti-12">expected indicates stream corruption or a non-compliant stream. The decoder must ignore the</span>
   4189 <span 
   4190 class="cmti-12">packet and not attempt decoding it to audio</span>.
   4191 <!--l. 286--><p class="noindent" >
   4192 <h5 class="subsubsectionHead"><span class="titlemark">4.3.1  </span> <a 
   4193  id="x1-720004.3.1"></a>packet type, mode and window decode</h5>
   4194 <!--l. 288--><p class="noindent" >
   4195       <ol  class="enumerate1" >
   4196       <li 
   4197   class="enumerate" id="x1-72002x1">read 1 bit <span 
   4198 class="cmtt-12">[packet_type]</span>; check that packet type is 0 (audio)
   4199       </li>
   4200       <li 
   4201   class="enumerate" id="x1-72004x2">read <a 
   4202 href="#x1-1170009.2.1">ilog</a>([vorbis&#x02D9;mode&#x02D9;count]-1) bits <span 
   4203 class="cmtt-12">[mode_number]</span>
   4204       </li>
   4205       <li 
   4206   class="enumerate" id="x1-72006x3">decode blocksize <span 
   4207 class="cmtt-12">[n] </span>is equal to <span 
   4208 class="cmtt-12">[blocksize_0] </span>if <span 
   4209 class="cmtt-12">[vorbis_mode_blockflag] </span>is 0,
   4210       else <span 
   4211 class="cmtt-12">[n] </span>is equal to <span 
   4212 class="cmtt-12">[blocksize_1]</span>.
   4213       </li>
   4214       <li 
   4215   class="enumerate" id="x1-72008x4">perform window selection and setup; this window is used later by the inverse
   4216       MDCT:
   4217            <ol  class="enumerate2" >
   4218            <li 
   4219   class="enumerate" id="x1-72010x1">if this is a long window (the <span 
   4220 class="cmtt-12">[vorbis_mode_blockflag] </span>flag of this mode is
   4221            set):
   4222                <ol  class="enumerate3" >
   4223                <li 
   4224   class="enumerate" id="x1-72012x1">read 1 bit for <span 
   4225 class="cmtt-12">[previous_window_flag]</span>
   4226                </li>
   4227                <li 
   4228   class="enumerate" id="x1-72014x2">read 1 bit for <span 
   4229 class="cmtt-12">[next_window_flag]</span>
   4230                                                                                         
   4231 
   4232                                                                                         
   4233                </li>
   4234                <li 
   4235   class="enumerate" id="x1-72016x3">if  <span 
   4236 class="cmtt-12">[previous_window_flag] </span>is not set, the left half of the window will
   4237                be a hybrid window for lapping with a short block. See <a 
   4238 href="#paragraph.1" >paragraph&#x00A0;<a 
   4239 href="#x1-260001.3.2">1.3.2</a></a>,
   4240                &#8220;<a 
   4241 href="#x1-260001.3.2">Window  shape  decode  (long  windows  only)<!--tex4ht:ref: vorbis:spec:window --></a>&#8221;  for  an  illustration  of
   4242                overlapping dissimilar windows. Else, the left half window will have normal
   4243                long shape.
   4244                </li>
   4245                <li 
   4246   class="enumerate" id="x1-72018x4">if  <span 
   4247 class="cmtt-12">[next_window_flag] </span>is not set, the right half of the window will be
   4248                a  hybrid  window  for  lapping  with  a  short  block.  See  <a 
   4249 href="#x1-260001.3.2">paragraph&#x00A0;1.3.2</a>,
   4250                &#8220;<a 
   4251 href="#x1-260001.3.2">Window  shape  decode  (long  windows  only)<!--tex4ht:ref: vorbis:spec:window --></a>&#8221;  for  an  illustration  of
   4252                overlapping dissimilar windows. Else, the left right window will have normal
   4253                long shape.</li></ol>
   4254            </li>
   4255            <li 
   4256   class="enumerate" id="x1-72020x2">if this is a short window, the window is always the same short-window
   4257            shape.</li></ol>
   4258       </li></ol>
   4259 <!--l. 321--><p class="noindent" >Vorbis windows all use the slope function <span 
   4260 class="cmmi-12">y </span>= sin(<img 
   4261 src="Vorbis_I_spec1x.png" alt="&pi;2"  class="frac" align="middle"> <span 
   4262 class="cmsy-10x-x-120">&lowast;</span> sin <sup><span 
   4263 class="cmr-8">2</span></sup>((<span 
   4264 class="cmmi-12">x </span>+ 0<span 
   4265 class="cmmi-12">.</span>5)<span 
   4266 class="cmmi-12">&#x2215;n </span><span 
   4267 class="cmsy-10x-x-120">&lowast; </span><span 
   4268 class="cmmi-12">&pi;</span>)), where <span 
   4269 class="cmmi-12">n </span>is window
   4270 size and <span 
   4271 class="cmmi-12">x </span>ranges 0<span 
   4272 class="cmmi-12">&hellip;</span><span 
   4273 class="cmmi-12">n</span><span 
   4274 class="cmsy-10x-x-120">&minus; </span>1, but dissimilar lapping requirements can affect overall shape. Window
   4275 generation proceeds as follows:
   4276 <!--l. 326--><p class="noindent" >
   4277       <ol  class="enumerate1" >
   4278       <li 
   4279   class="enumerate" id="x1-72022x1"><span 
   4280 class="cmtt-12">[window_center] </span>= <span 
   4281 class="cmtt-12">[n] </span>/ 2
   4282       </li>
   4283       <li 
   4284   class="enumerate" id="x1-72024x2">if (<span 
   4285 class="cmtt-12">[vorbis_mode_blockflag] </span>is set and <span 
   4286 class="cmtt-12">[previous_window_flag] </span>is not set)
   4287       then
   4288            <ol  class="enumerate2" >
   4289            <li 
   4290   class="enumerate" id="x1-72026x1"><span 
   4291 class="cmtt-12">[left_window_start] </span>= <span 
   4292 class="cmtt-12">[n]</span>/4 - <span 
   4293 class="cmtt-12">[blocksize_0]</span>/4
   4294            </li>
   4295            <li 
   4296   class="enumerate" id="x1-72028x2"><span 
   4297 class="cmtt-12">[left_window_end] </span>= <span 
   4298 class="cmtt-12">[n]</span>/4 + <span 
   4299 class="cmtt-12">[blocksize_0]</span>/4
   4300            </li>
   4301            <li 
   4302   class="enumerate" id="x1-72030x3"><span 
   4303 class="cmtt-12">[left_n] </span>= <span 
   4304 class="cmtt-12">[blocksize_0]</span>/2</li></ol>
   4305       <!--l. 336--><p class="noindent" >else
   4306            <ol  class="enumerate2" >
   4307            <li 
   4308   class="enumerate" id="x1-72032x1"><span 
   4309 class="cmtt-12">[left_window_start] </span>= 0
   4310            </li>
   4311            <li 
   4312   class="enumerate" id="x1-72034x2"><span 
   4313 class="cmtt-12">[left_window_end] </span>= <span 
   4314 class="cmtt-12">[window_center]</span>
   4315                                                                                         
   4316 
   4317                                                                                         
   4318            </li>
   4319            <li 
   4320   class="enumerate" id="x1-72036x3"><span 
   4321 class="cmtt-12">[left_n] </span>= <span 
   4322 class="cmtt-12">[n]</span>/2</li></ol>
   4323       </li>
   4324       <li 
   4325   class="enumerate" id="x1-72038x3">if (<span 
   4326 class="cmtt-12">[vorbis_mode_blockflag] </span>is set and <span 
   4327 class="cmtt-12">[next_window_flag] </span>is not set) then
   4328            <ol  class="enumerate2" >
   4329            <li 
   4330   class="enumerate" id="x1-72040x1"><span 
   4331 class="cmtt-12">[right_window_start] </span>= <span 
   4332 class="cmtt-12">[n]*3</span>/4 - <span 
   4333 class="cmtt-12">[blocksize_0]</span>/4
   4334            </li>
   4335            <li 
   4336   class="enumerate" id="x1-72042x2"><span 
   4337 class="cmtt-12">[right_window_end] </span>= <span 
   4338 class="cmtt-12">[n]*3</span>/4 + <span 
   4339 class="cmtt-12">[blocksize_0]</span>/4
   4340            </li>
   4341            <li 
   4342   class="enumerate" id="x1-72044x3"><span 
   4343 class="cmtt-12">[right_n] </span>= <span 
   4344 class="cmtt-12">[blocksize_0]</span>/2</li></ol>
   4345       <!--l. 352--><p class="noindent" >else
   4346            <ol  class="enumerate2" >
   4347            <li 
   4348   class="enumerate" id="x1-72046x1"><span 
   4349 class="cmtt-12">[right_window_start] </span>= <span 
   4350 class="cmtt-12">[window_center]</span>
   4351            </li>
   4352            <li 
   4353   class="enumerate" id="x1-72048x2"><span 
   4354 class="cmtt-12">[right_window_end] </span>= <span 
   4355 class="cmtt-12">[n]</span>
   4356            </li>
   4357            <li 
   4358   class="enumerate" id="x1-72050x3"><span 
   4359 class="cmtt-12">[right_n] </span>= <span 
   4360 class="cmtt-12">[n]</span>/2</li></ol>
   4361       </li>
   4362       <li 
   4363   class="enumerate" id="x1-72052x4">window from range 0 ... <span 
   4364 class="cmtt-12">[left_window_start]</span>-1 inclusive is zero
   4365       </li>
   4366       <li 
   4367   class="enumerate" id="x1-72054x5">for <span 
   4368 class="cmtt-12">[i] </span>in range <span 
   4369 class="cmtt-12">[left_window_start] </span>... <span 
   4370 class="cmtt-12">[left_window_end]</span>-1, window(<span 
   4371 class="cmtt-12">[i]</span>) =
   4372       sin(<img 
   4373 src="Vorbis_I_spec2x.png" alt="&pi;
   4374 2"  class="frac" align="middle"> <span 
   4375 class="cmsy-10x-x-120">&lowast;</span> sin <sup><span 
   4376 class="cmr-8">2</span></sup>( (<span 
   4377 class="cmtt-12">[i]</span>-<span 
   4378 class="cmtt-12">[left_window_start]</span>+0.5) / <span 
   4379 class="cmtt-12">[left_n] </span><span 
   4380 class="cmsy-10x-x-120">&lowast;</span><img 
   4381 src="Vorbis_I_spec3x.png" alt="&pi;
   4382 2"  class="frac" align="middle">) )
   4383       </li>
   4384       <li 
   4385   class="enumerate" id="x1-72056x6">window from range <span 
   4386 class="cmtt-12">[left_window_end] </span>... <span 
   4387 class="cmtt-12">[right_window_start]</span>-1 inclusive is
   4388       one
   4389       </li>
   4390       <li 
   4391   class="enumerate" id="x1-72058x7">for <span 
   4392 class="cmtt-12">[i] </span>in range <span 
   4393 class="cmtt-12">[right_window_start] </span>... <span 
   4394 class="cmtt-12">[right_window_end]</span>-1, window(<span 
   4395 class="cmtt-12">[i]</span>) =
   4396       sin(<img 
   4397 src="Vorbis_I_spec4x.png" alt="&pi;
   4398 2"  class="frac" align="middle"> <span 
   4399 class="cmsy-10x-x-120">&lowast;</span> sin <sup><span 
   4400 class="cmr-8">2</span></sup>( (<span 
   4401 class="cmtt-12">[i]</span>-<span 
   4402 class="cmtt-12">[right_window_start]</span>+0.5) / <span 
   4403 class="cmtt-12">[right_n] </span><span 
   4404 class="cmsy-10x-x-120">&lowast;</span><img 
   4405 src="Vorbis_I_spec5x.png" alt="&pi;
   4406 2"  class="frac" align="middle"> + <img 
   4407 src="Vorbis_I_spec6x.png" alt="&pi;
   4408 2"  class="frac" align="middle">) )
   4409       </li>
   4410       <li 
   4411   class="enumerate" id="x1-72060x8">window from range <span 
   4412 class="cmtt-12">[right_window_start] </span>... <span 
   4413 class="cmtt-12">[n]</span>-1 is zero</li></ol>
   4414 <!--l. 368--><p class="noindent" >An end-of-packet condition up to this point should be considered an error that discards this
   4415 packet from the stream. An end of packet condition past this point is to be considered a possible
   4416 nominal occurrence.
   4417                                                                                         
   4418 
   4419                                                                                         
   4420 <!--l. 375--><p class="noindent" >
   4421 <h5 class="subsubsectionHead"><span class="titlemark">4.3.2  </span> <a 
   4422  id="x1-730004.3.2"></a>floor curve decode</h5>
   4423 <!--l. 377--><p class="noindent" >From this point on, we assume out decode context is using mode number <span 
   4424 class="cmtt-12">[mode_number]</span>
   4425 from configuration array <span 
   4426 class="cmtt-12">[vorbis_mode_configurations] </span>and the map number
   4427 <span 
   4428 class="cmtt-12">[vorbis_mode_mapping] </span>(specified by the current mode) taken from the mapping configuration
   4429 array <span 
   4430 class="cmtt-12">[vorbis_mapping_configurations]</span>.
   4431 <!--l. 384--><p class="noindent" >Floor curves are decoded one-by-one in channel order.
   4432 <!--l. 386--><p class="noindent" >For each floor <span 
   4433 class="cmtt-12">[i] </span>of <span 
   4434 class="cmtt-12">[audio_channels]</span>
   4435       <ol  class="enumerate1" >
   4436       <li 
   4437   class="enumerate" id="x1-73002x1"><span 
   4438 class="cmtt-12">[submap_number] </span>= element <span 
   4439 class="cmtt-12">[i] </span>of vector [vorbis&#x02D9;mapping&#x02D9;mux]
   4440       </li>
   4441       <li 
   4442   class="enumerate" id="x1-73004x2"><span 
   4443 class="cmtt-12">[floor_number] </span>= element <span 
   4444 class="cmtt-12">[submap_number] </span>of vector [vorbis&#x02D9;submap&#x02D9;floor]
   4445       </li>
   4446       <li 
   4447   class="enumerate" id="x1-73006x3">if          the          floor          type          of          this          floor          (vector
   4448       <span 
   4449 class="cmtt-12">[vorbis_floor_types] </span>element <span 
   4450 class="cmtt-12">[floor_number]</span>) is zero then decode the floor for
   4451       channel <span 
   4452 class="cmtt-12">[i] </span>according to the <a 
   4453 href="#x1-930006.2.2">subsubsection&#x00A0;6.2.2</a>, &#8220;<a 
   4454 href="#x1-930006.2.2">packet decode<!--tex4ht:ref: vorbis:spec:floor0-decode --></a>&#8221;
   4455       </li>
   4456       <li 
   4457   class="enumerate" id="x1-73008x4">if the type of this floor is one then decode the floor for channel <span 
   4458 class="cmtt-12">[i] </span>according to the
   4459       <a 
   4460 href="#x1-1000007.2.2">paragraph&#x00A0;7.2.2</a>, &#8220;<a 
   4461 href="#x1-1000007.2.2">packet decode<!--tex4ht:ref: vorbis:spec:floor1-decode --></a>&#8221;
   4462       </li>
   4463       <li 
   4464   class="enumerate" id="x1-73010x5">save the needed decoded floor information for channel for later synthesis
   4465       </li>
   4466       <li 
   4467   class="enumerate" id="x1-73012x6">if the decoded floor returned &#8217;unused&#8217;, set vector <span 
   4468 class="cmtt-12">[no_residue] </span>element <span 
   4469 class="cmtt-12">[i] </span>to true,
   4470       else set vector <span 
   4471 class="cmtt-12">[no_residue] </span>element <span 
   4472 class="cmtt-12">[i] </span>to false</li></ol>
   4473 <!--l. 406--><p class="noindent" >An end-of-packet condition during floor decode shall result in packet decode zeroing all channel
   4474 output vectors and skipping to the add/overlap output stage.
   4475 <!--l. 412--><p class="noindent" >
   4476 <h5 class="subsubsectionHead"><span class="titlemark">4.3.3  </span> <a 
   4477  id="x1-740004.3.3"></a>nonzero vector propagate</h5>
   4478 <!--l. 414--><p class="noindent" >A possible result of floor decode is that a specific vector is marked &#8217;unused&#8217; which indicates that
   4479 that final output vector is all-zero values (and the floor is zero). The residue for that vector is not
   4480 coded in the stream, save for one complication. If some vectors are used and some are not,
   4481                                                                                         
   4482 
   4483                                                                                         
   4484 channel coupling could result in mixing a zeroed and nonzeroed vector to produce two nonzeroed
   4485 vectors.
   4486 <!--l. 421--><p class="noindent" >for each <span 
   4487 class="cmtt-12">[i] </span>from 0 ... <span 
   4488 class="cmtt-12">[vorbis_mapping_coupling_steps]</span>-1
   4489 <!--l. 423--><p class="noindent" >
   4490       <ol  class="enumerate1" >
   4491       <li 
   4492   class="enumerate" id="x1-74002x1">if either <span 
   4493 class="cmtt-12">[no_residue] </span>entry for channel (<span 
   4494 class="cmtt-12">[vorbis_mapping_magnitude] </span>element
   4495       <span 
   4496 class="cmtt-12">[i]</span>) or channel (<span 
   4497 class="cmtt-12">[vorbis_mapping_angle] </span>element <span 
   4498 class="cmtt-12">[i]</span>) are set to false, then both
   4499       must be set to false. Note that an &#8217;unused&#8217; floor has no decoded floor information; it
   4500       is important that this is remembered at floor curve synthesis time.</li></ol>
   4501 <!--l. 436--><p class="noindent" >
   4502 <h5 class="subsubsectionHead"><span class="titlemark">4.3.4  </span> <a 
   4503  id="x1-750004.3.4"></a>residue decode</h5>
   4504 <!--l. 438--><p class="noindent" >Unlike floors, which are decoded in channel order, the residue vectors are decoded in submap
   4505 order.
   4506 <!--l. 441--><p class="noindent" >for each submap <span 
   4507 class="cmtt-12">[i] </span>in order from 0 ... <span 
   4508 class="cmtt-12">[vorbis_mapping_submaps]</span>-1
   4509 <!--l. 443--><p class="noindent" >
   4510       <ol  class="enumerate1" >
   4511       <li 
   4512   class="enumerate" id="x1-75002x1"><span 
   4513 class="cmtt-12">[ch] </span>= 0
   4514       </li>
   4515       <li 
   4516   class="enumerate" id="x1-75004x2">for each channel <span 
   4517 class="cmtt-12">[j] </span>in order from 0 ... <span 
   4518 class="cmtt-12">[audio_channels] </span>- 1
   4519            <ol  class="enumerate2" >
   4520            <li 
   4521   class="enumerate" id="x1-75006x1">if channel <span 
   4522 class="cmtt-12">[j] </span>in submap <span 
   4523 class="cmtt-12">[i] </span>(vector <span 
   4524 class="cmtt-12">[vorbis_mapping_mux] </span>element <span 
   4525 class="cmtt-12">[j] </span>is equal to
   4526            <span 
   4527 class="cmtt-12">[i]</span>)
   4528                <ol  class="enumerate3" >
   4529                <li 
   4530   class="enumerate" id="x1-75008x1">if vector <span 
   4531 class="cmtt-12">[no_residue] </span>element <span 
   4532 class="cmtt-12">[j] </span>is true
   4533                    <ol  class="enumerate4" >
   4534                    <li 
   4535   class="enumerate" id="x1-75010x1">vector <span 
   4536 class="cmtt-12">[do_not_decode_flag] </span>element <span 
   4537 class="cmtt-12">[ch] </span>is set</li></ol>
   4538                <!--l. 453--><p class="noindent" >else
   4539                    <ol  class="enumerate4" >
   4540                    <li 
   4541   class="enumerate" id="x1-75012x1">vector <span 
   4542 class="cmtt-12">[do_not_decode_flag] </span>element <span 
   4543 class="cmtt-12">[ch] </span>is unset</li></ol>
   4544                </li>
   4545                <li 
   4546   class="enumerate" id="x1-75014x2">increment <span 
   4547 class="cmtt-12">[ch]</span></li></ol>
   4548                                                                                         
   4549 
   4550                                                                                         
   4551            </li></ol>
   4552       </li>
   4553       <li 
   4554   class="enumerate" id="x1-75016x3"><span 
   4555 class="cmtt-12">[residue_number] </span>= vector <span 
   4556 class="cmtt-12">[vorbis_mapping_submap_residue] </span>element <span 
   4557 class="cmtt-12">[i]</span>
   4558       </li>
   4559       <li 
   4560   class="enumerate" id="x1-75018x4"><span 
   4561 class="cmtt-12">[residue_type] </span>= vector <span 
   4562 class="cmtt-12">[vorbis_residue_types] </span>element <span 
   4563 class="cmtt-12">[residue_number]</span>
   4564       </li>
   4565       <li 
   4566   class="enumerate" id="x1-75020x5">decode <span 
   4567 class="cmtt-12">[ch] </span>vectors using residue <span 
   4568 class="cmtt-12">[residue_number]</span>, according to type <span 
   4569 class="cmtt-12">[residue_type]</span>,
   4570       also passing vector <span 
   4571 class="cmtt-12">[do_not_decode_flag] </span>to indicate which vectors in the bundle should
   4572       not be decoded. Correct per-vector decode length is <span 
   4573 class="cmtt-12">[n]</span>/2.
   4574       </li>
   4575       <li 
   4576   class="enumerate" id="x1-75022x6"><span 
   4577 class="cmtt-12">[ch] </span>= 0
   4578       </li>
   4579       <li 
   4580   class="enumerate" id="x1-75024x7">for each channel <span 
   4581 class="cmtt-12">[j] </span>in order from 0 ... <span 
   4582 class="cmtt-12">[audio_channels]</span>
   4583            <ol  class="enumerate2" >
   4584            <li 
   4585   class="enumerate" id="x1-75026x1">if channel <span 
   4586 class="cmtt-12">[j] </span>is in submap <span 
   4587 class="cmtt-12">[i] </span>(vector <span 
   4588 class="cmtt-12">[vorbis_mapping_mux] </span>element <span 
   4589 class="cmtt-12">[j] </span>is equal
   4590            to <span 
   4591 class="cmtt-12">[i]</span>)
   4592                <ol  class="enumerate3" >
   4593                <li 
   4594   class="enumerate" id="x1-75028x1">residue vector for channel <span 
   4595 class="cmtt-12">[j] </span>is set to decoded residue vector <span 
   4596 class="cmtt-12">[ch]</span>
   4597                </li>
   4598                <li 
   4599   class="enumerate" id="x1-75030x2">increment <span 
   4600 class="cmtt-12">[ch]</span></li></ol>
   4601            </li></ol>
   4602       </li></ol>
   4603 <!--l. 480--><p class="noindent" >
   4604 <h5 class="subsubsectionHead"><span class="titlemark">4.3.5  </span> <a 
   4605  id="x1-760004.3.5"></a>inverse coupling</h5>
   4606 <!--l. 482--><p class="noindent" >for each <span 
   4607 class="cmtt-12">[i] </span>from <span 
   4608 class="cmtt-12">[vorbis_mapping_coupling_steps]</span>-1 descending to 0
   4609 <!--l. 484--><p class="noindent" >
   4610       <ol  class="enumerate1" >
   4611       <li 
   4612   class="enumerate" id="x1-76002x1"><span 
   4613 class="cmtt-12">[magnitude_vector]   </span>=     the     residue     vector     for     channel     (vector
   4614       <span 
   4615 class="cmtt-12">[vorbis_mapping_magnitude] </span>element <span 
   4616 class="cmtt-12">[i]</span>)
   4617       </li>
   4618       <li 
   4619   class="enumerate" id="x1-76004x2"><span 
   4620 class="cmtt-12">[angle_vector] </span>= the residue vector for channel (vector <span 
   4621 class="cmtt-12">[vorbis_mapping_angle]</span>
   4622                                                                                         
   4623 
   4624                                                                                         
   4625       element <span 
   4626 class="cmtt-12">[i]</span>)
   4627       </li>
   4628       <li 
   4629   class="enumerate" id="x1-76006x3">for each scalar value <span 
   4630 class="cmtt-12">[M] </span>in vector <span 
   4631 class="cmtt-12">[magnitude_vector] </span>and the corresponding scalar value
   4632       <span 
   4633 class="cmtt-12">[A] </span>in vector <span 
   4634 class="cmtt-12">[angle_vector]</span>:
   4635            <ol  class="enumerate2" >
   4636            <li 
   4637   class="enumerate" id="x1-76008x1">if (<span 
   4638 class="cmtt-12">[M] </span>is greater than zero)
   4639                <ol  class="enumerate3" >
   4640                <li 
   4641   class="enumerate" id="x1-76010x1">if (<span 
   4642 class="cmtt-12">[A] </span>is greater than zero)
   4643                    <ol  class="enumerate4" >
   4644                    <li 
   4645   class="enumerate" id="x1-76012x1"><span 
   4646 class="cmtt-12">[new_M] </span>= <span 
   4647 class="cmtt-12">[M]</span>
   4648                    </li>
   4649                    <li 
   4650   class="enumerate" id="x1-76014x2"><span 
   4651 class="cmtt-12">[new_A] </span>= <span 
   4652 class="cmtt-12">[M]</span>-<span 
   4653 class="cmtt-12">[A]</span></li></ol>
   4654                <!--l. 498--><p class="noindent" >else
   4655                    <ol  class="enumerate4" >
   4656                    <li 
   4657   class="enumerate" id="x1-76016x1"><span 
   4658 class="cmtt-12">[new_A] </span>= <span 
   4659 class="cmtt-12">[M]</span>
   4660                    </li>
   4661                    <li 
   4662   class="enumerate" id="x1-76018x2"><span 
   4663 class="cmtt-12">[new_M] </span>= <span 
   4664 class="cmtt-12">[M]</span>+<span 
   4665 class="cmtt-12">[A]</span></li></ol>
   4666                </li></ol>
   4667            <!--l. 505--><p class="noindent" >else
   4668                <ol  class="enumerate3" >
   4669                <li 
   4670   class="enumerate" id="x1-76020x1">if (<span 
   4671 class="cmtt-12">[A] </span>is greater than zero)
   4672                    <ol  class="enumerate4" >
   4673                    <li 
   4674   class="enumerate" id="x1-76022x1"><span 
   4675 class="cmtt-12">[new_M] </span>= <span 
   4676 class="cmtt-12">[M]</span>
   4677                    </li>
   4678                    <li 
   4679   class="enumerate" id="x1-76024x2"><span 
   4680 class="cmtt-12">[new_A] </span>= <span 
   4681 class="cmtt-12">[M]</span>+<span 
   4682 class="cmtt-12">[A]</span></li></ol>
   4683                <!--l. 512--><p class="noindent" >else
   4684                    <ol  class="enumerate4" >
   4685                    <li 
   4686   class="enumerate" id="x1-76026x1"><span 
   4687 class="cmtt-12">[new_A] </span>= <span 
   4688 class="cmtt-12">[M]</span>
   4689                    </li>
   4690                    <li 
   4691   class="enumerate" id="x1-76028x2"><span 
   4692 class="cmtt-12">[new_M] </span>= <span 
   4693 class="cmtt-12">[M]</span>-<span 
   4694 class="cmtt-12">[A]</span></li></ol>
   4695                </li></ol>
   4696            </li>
   4697            <li 
   4698   class="enumerate" id="x1-76030x2">set scalar value <span 
   4699 class="cmtt-12">[M] </span>in vector <span 
   4700 class="cmtt-12">[magnitude_vector] </span>to <span 
   4701 class="cmtt-12">[new_M]</span>
   4702                                                                                         
   4703 
   4704                                                                                         
   4705            </li>
   4706            <li 
   4707   class="enumerate" id="x1-76032x3">set scalar value <span 
   4708 class="cmtt-12">[A] </span>in vector <span 
   4709 class="cmtt-12">[angle_vector] </span>to <span 
   4710 class="cmtt-12">[new_A]</span></li></ol>
   4711       </li></ol>
   4712 <!--l. 529--><p class="noindent" >
   4713 <h5 class="subsubsectionHead"><span class="titlemark">4.3.6  </span> <a 
   4714  id="x1-770004.3.6"></a>dot product</h5>
   4715 <!--l. 531--><p class="noindent" >For each channel, synthesize the floor curve from the decoded floor information, according to
   4716 packet type. Note that the vector synthesis length for floor computation is <span 
   4717 class="cmtt-12">[n]</span>/2.
   4718 <!--l. 535--><p class="noindent" >For each channel, multiply each element of the floor curve by each element of that
   4719 channel&#8217;s residue vector. The result is the dot product of the floor and residue vectors for
   4720 each channel; the produced vectors are the length <span 
   4721 class="cmtt-12">[n]</span>/2 audio spectrum for each
   4722 channel.
   4723 <!--l. 543--><p class="noindent" >One point is worth mentioning about this dot product; a common mistake in a fixed point
   4724 implementation might be to assume that a 32 bit fixed-point representation for floor and
   4725 residue and direct multiplication of the vectors is sufficient for acceptable spectral depth
   4726 in all cases because it happens to mostly work with the current Xiph.Org reference
   4727 encoder.
   4728 <!--l. 550--><p class="noindent" >However, floor vector values can span <span 
   4729 class="cmsy-10x-x-120">&sim;</span>140dB (<span 
   4730 class="cmsy-10x-x-120">&sim;</span>24 bits unsigned), and the audio spectrum
   4731 vector should represent a minimum of 120dB (<span 
   4732 class="cmsy-10x-x-120">&sim;</span>21 bits with sign), even when output is to a 16
   4733 bit PCM device. For the residue vector to represent full scale if the floor is nailed
   4734 to <span 
   4735 class="cmsy-10x-x-120">&minus;</span>140dB, it must be able to span 0 to +140dB. For the residue vector to reach
   4736 full scale if the floor is nailed at 0dB, it must be able to represent <span 
   4737 class="cmsy-10x-x-120">&minus;</span>140dB to +0dB.
   4738 Thus, in order to handle full range dynamics, a residue vector may span <span 
   4739 class="cmsy-10x-x-120">&minus;</span>140dB to
   4740 +140dB entirely within spec. A 280dB range is approximately 48 bits with sign; thus the
   4741 residue vector must be able to represent a 48 bit range and the dot product must
   4742 be able to handle an effective 48 bit times 24 bit multiplication. This range may be
   4743 achieved using large (64 bit or larger) integers, or implementing a movable binary point
   4744 representation.
   4745 <!--l. 567--><p class="noindent" >
   4746 <h5 class="subsubsectionHead"><span class="titlemark">4.3.7  </span> <a 
   4747  id="x1-780004.3.7"></a>inverse MDCT</h5>
   4748 <!--l. 569--><p class="noindent" >Convert the audio spectrum vector of each channel back into time domain PCM audio via an
   4749                                                                                         
   4750 
   4751                                                                                         
   4752 inverse Modified Discrete Cosine Transform (MDCT). A detailed description of the MDCT is
   4753 available in <span class="cite">[<a 
   4754 href="#XSporer/Brandenburg/Edler">1</a>]</span>. The window function used for the MDCT is the function described
   4755 earlier.
   4756 <!--l. 576--><p class="noindent" >
   4757 <h5 class="subsubsectionHead"><span class="titlemark">4.3.8  </span> <a 
   4758  id="x1-790004.3.8"></a>overlap&#x02D9;add</h5>
   4759 <!--l. 578--><p class="noindent" >Windowed MDCT output is overlapped and added with the right hand data of the previous
   4760 window such that the 3/4 point of the previous window is aligned with the 1/4 point of the
   4761 current window (as illustrated in <a 
   4762 href="#x1-260001.3.2">paragraph&#x00A0;1.3.2</a>, &#8220;<a 
   4763 href="#x1-260001.3.2">Window shape decode (long windows
   4764 only)<!--tex4ht:ref: vorbis:spec:window --></a>&#8221;). The overlapped portion produced from overlapping the previous and current frame data
   4765 is finished data to be returned by the decoder. This data spans from the center of
   4766 the previous window to the center of the current window. In the case of same-sized
   4767 windows, the amount of data to return is one-half block consisting of and only of the
   4768 overlapped portions. When overlapping a short and long window, much of the returned
   4769 range does not actually overlap. This does not damage transform orthogonality. Pay
   4770 attention however to returning the correct data range; the amount of data to be returned
   4771 is:
   4772 <!--l. 592--><p class="noindent" >
   4773 <div class="fancyvrb" id="fancyvrb22">
   4774 <a 
   4775  id="x1-79002r1"></a><span 
   4776 class="cmr-6">1</span><span 
   4777 class="cmtt-8">&#x00A0;</span><span 
   4778 class="cmtt-8">&#x00A0;window_blocksize(previous_window)/4+window_blocksize(current_window)/4</span>
   4779 </div>
   4780 <!--l. 596--><p class="noindent" >from the center (element windowsize/2) of the previous window to the center (element
   4781 windowsize/2-1, inclusive) of the current window.
   4782 <!--l. 599--><p class="noindent" >Data is not returned from the first frame; it must be used to &#8217;prime&#8217; the decode engine. The
   4783 encoder accounts for this priming when calculating PCM offsets; after the first frame, the proper
   4784 PCM output offset is &#8217;0&#8217; (as no data has been returned yet).
   4785 <!--l. 606--><p class="noindent" >
   4786 <h5 class="subsubsectionHead"><span class="titlemark">4.3.9  </span> <a 
   4787  id="x1-800004.3.9"></a>output channel order</h5>
   4788 <!--l. 608--><p class="noindent" >Vorbis I specifies only a channel mapping type 0. In mapping type 0, channel mapping is
   4789 implicitly defined as follows for standard audio applications. As of revision 16781 (20100113), the
   4790 specification adds defined channel locations for 6.1 and 7.1 surround. Ordering/location for
   4791                                                                                         
   4792 
   4793                                                                                         
   4794 greater-than-eight channels remains &#8217;left to the implementation&#8217;.
   4795 <!--l. 614--><p class="noindent" >These channel orderings refer to order within the encoded stream. It is naturally possible for a
   4796 decoder to produce output with channels in any order. Any such decoder should explicitly
   4797 document channel reordering behavior.
   4798 <!--l. 619--><p class="noindent" >
   4799       <dl class="description"><dt class="description">
   4800 <span 
   4801 class="cmssbx-10x-x-120">one channel</span> </dt><dd 
   4802 class="description">the stream is monophonic
   4803       </dd><dt class="description">
   4804 <span 
   4805 class="cmssbx-10x-x-120">two channels</span> </dt><dd 
   4806 class="description">the stream is stereo. channel order: left, right
   4807       </dd><dt class="description">
   4808 <span 
   4809 class="cmssbx-10x-x-120">three channels</span> </dt><dd 
   4810 class="description">the stream is a 1d-surround encoding. channel order: left, center, right
   4811       </dd><dt class="description">
   4812 <span 
   4813 class="cmssbx-10x-x-120">four channels</span> </dt><dd 
   4814 class="description">the stream is quadraphonic surround. channel order: front left, front right,
   4815       rear left, rear right
   4816       </dd><dt class="description">
   4817 <span 
   4818 class="cmssbx-10x-x-120">five channels</span> </dt><dd 
   4819 class="description">the stream is five-channel surround. channel order: front left, center, front
   4820       right, rear left, rear right
   4821       </dd><dt class="description">
   4822 <span 
   4823 class="cmssbx-10x-x-120">six channels</span> </dt><dd 
   4824 class="description">the stream is 5.1 surround. channel order: front left, center, front right, rear
   4825       left, rear right, LFE
   4826       </dd><dt class="description">
   4827 <span 
   4828 class="cmssbx-10x-x-120">seven channels</span> </dt><dd 
   4829 class="description">the stream is 6.1 surround. channel order: front left, center, front right,
   4830       side left, side right, rear center, LFE
   4831       </dd><dt class="description">
   4832 <span 
   4833 class="cmssbx-10x-x-120">eight channels</span> </dt><dd 
   4834 class="description">the stream is 7.1 surround. channel order: front left, center, front right,
   4835       side left, side right, rear left, rear right, LFE
   4836       </dd><dt class="description">
   4837 <span 
   4838 class="cmssbx-10x-x-120">greater than eight channels</span> </dt><dd 
   4839 class="description">channel use and order is defined by the application
   4840       </dd></dl>
   4841 <!--l. 656--><p class="noindent" >Applications using Vorbis for dedicated purposes may define channel mapping as seen fit. Future
   4842 channel mappings (such as three and four channel <a 
   4843 href="http://www.ambisonic.net/" >Ambisonics</a>) will make use of channel
   4844 mappings other than mapping 0.
   4845                                                                                         
   4846 
   4847                                                                                         
   4848                                                                                         
   4849 
   4850                                                                                         
   4851 <h3 class="sectionHead"><span class="titlemark">5  </span> <a 
   4852  id="x1-810005"></a>comment field and header specification</h3>
   4853 <!--l. 6--><p class="noindent" >
   4854 <h4 class="subsectionHead"><span class="titlemark">5.1  </span> <a 
   4855  id="x1-820005.1"></a>Overview</h4>
   4856 <!--l. 8--><p class="noindent" >The Vorbis text comment header is the second (of three) header packets that begin a Vorbis
   4857 bitstream. It is meant for short text comments, not arbitrary metadata; arbitrary metadata
   4858 belongs in a separate logical bitstream (usually an XML stream type) that provides greater
   4859 structure and machine parseability.
   4860 <!--l. 14--><p class="noindent" >The comment field is meant to be used much like someone jotting a quick note on the bottom of
   4861 a CDR. It should be a little information to remember the disc by and explain it to others; a
   4862 short, to-the-point text note that need not only be a couple words, but isn&#8217;t going to be more
   4863 than a short paragraph. The essentials, in other words, whatever they turn out to be,
   4864 eg:
   4865 <!--l. 21--><p class="noindent" >
   4866       <div class="quote">
   4867       <!--l. 22--><p class="noindent" >Honest Bob and the Factory-to-Dealer-Incentives, <span 
   4868 class="cmti-12">&#8220;I&#8217;m Still Around&#8221;</span>, opening
   4869       for Moxy Frvous, 1997.</div>
   4870 <!--l. 29--><p class="noindent" >
   4871 <h4 class="subsectionHead"><span class="titlemark">5.2  </span> <a 
   4872  id="x1-830005.2"></a>Comment encoding</h4>
   4873 <!--l. 31--><p class="noindent" >
   4874 <h5 class="subsubsectionHead"><span class="titlemark">5.2.1  </span> <a 
   4875  id="x1-840005.2.1"></a>Structure</h5>
   4876 <!--l. 33--><p class="noindent" >The comment header is logically a list of eight-bit-clean vectors; the number of vectors is
   4877 bounded to 2<sup><span 
   4878 class="cmr-8">32</span></sup> <span 
   4879 class="cmsy-10x-x-120">&minus; </span>1 and the length of each vector is limited to 2<sup><span 
   4880 class="cmr-8">32</span></sup> <span 
   4881 class="cmsy-10x-x-120">&minus; </span>1 bytes. The vector length is
   4882                                                                                         
   4883 
   4884                                                                                         
   4885 encoded; the vector contents themselves are not null terminated. In addition to the vector list,
   4886 there is a single vector for vendor name (also 8 bit clean, length encoded in 32 bits). For
   4887 example, the 1.0 release of libvorbis set the vendor string to &#8220;Xiph.Org libVorbis I
   4888 20020717&#8221;.
   4889 <!--l. 41--><p class="noindent" >The vector lengths and number of vectors are stored lsb first, according to the bit
   4890 packing conventions of the vorbis codec. However, since data in the comment header
   4891 is octet-aligned, they can simply be read as unaligned 32 bit little endian unsigned
   4892 integers.
   4893 <!--l. 46--><p class="noindent" >The comment header is decoded as follows:
   4894 <!--l. 48--><p class="noindent" >
   4895 <div class="fancyvrb" id="fancyvrb23">
   4896 <a 
   4897  id="x1-84002r1"></a><span 
   4898 class="cmr-6">1</span><span 
   4899 class="cmtt-8">&#x00A0;</span><span 
   4900 class="cmtt-8">&#x00A0;</span><span 
   4901 class="cmtt-8">&#x00A0;</span><span 
   4902 class="cmtt-8">&#x00A0;1)</span><span 
   4903 class="cmtt-8">&#x00A0;[vendor_length]</span><span 
   4904 class="cmtt-8">&#x00A0;=</span><span 
   4905 class="cmtt-8">&#x00A0;read</span><span 
   4906 class="cmtt-8">&#x00A0;an</span><span 
   4907 class="cmtt-8">&#x00A0;unsigned</span><span 
   4908 class="cmtt-8">&#x00A0;integer</span><span 
   4909 class="cmtt-8">&#x00A0;of</span><span 
   4910 class="cmtt-8">&#x00A0;32</span><span 
   4911 class="cmtt-8">&#x00A0;bits</span>
   4912 <br class="fancyvrb" /><a 
   4913  id="x1-84004r2"></a><span 
   4914 class="cmr-6">2</span><span 
   4915 class="cmtt-8">&#x00A0;</span><span 
   4916 class="cmtt-8">&#x00A0;</span><span 
   4917 class="cmtt-8">&#x00A0;</span><span 
   4918 class="cmtt-8">&#x00A0;2)</span><span 
   4919 class="cmtt-8">&#x00A0;[vendor_string]</span><span 
   4920 class="cmtt-8">&#x00A0;=</span><span 
   4921 class="cmtt-8">&#x00A0;read</span><span 
   4922 class="cmtt-8">&#x00A0;a</span><span 
   4923 class="cmtt-8">&#x00A0;UTF-8</span><span 
   4924 class="cmtt-8">&#x00A0;vector</span><span 
   4925 class="cmtt-8">&#x00A0;as</span><span 
   4926 class="cmtt-8">&#x00A0;[vendor_length]</span><span 
   4927 class="cmtt-8">&#x00A0;octets</span>
   4928 <br class="fancyvrb" /><a 
   4929  id="x1-84006r3"></a><span 
   4930 class="cmr-6">3</span><span 
   4931 class="cmtt-8">&#x00A0;</span><span 
   4932 class="cmtt-8">&#x00A0;</span><span 
   4933 class="cmtt-8">&#x00A0;</span><span 
   4934 class="cmtt-8">&#x00A0;3)</span><span 
   4935 class="cmtt-8">&#x00A0;[user_comment_list_length]</span><span 
   4936 class="cmtt-8">&#x00A0;=</span><span 
   4937 class="cmtt-8">&#x00A0;read</span><span 
   4938 class="cmtt-8">&#x00A0;an</span><span 
   4939 class="cmtt-8">&#x00A0;unsigned</span><span 
   4940 class="cmtt-8">&#x00A0;integer</span><span 
   4941 class="cmtt-8">&#x00A0;of</span><span 
   4942 class="cmtt-8">&#x00A0;32</span><span 
   4943 class="cmtt-8">&#x00A0;bits</span>
   4944 <br class="fancyvrb" /><a 
   4945  id="x1-84008r4"></a><span 
   4946 class="cmr-6">4</span><span 
   4947 class="cmtt-8">&#x00A0;</span><span 
   4948 class="cmtt-8">&#x00A0;</span><span 
   4949 class="cmtt-8">&#x00A0;</span><span 
   4950 class="cmtt-8">&#x00A0;4)</span><span 
   4951 class="cmtt-8">&#x00A0;iterate</span><span 
   4952 class="cmtt-8">&#x00A0;[user_comment_list_length]</span><span 
   4953 class="cmtt-8">&#x00A0;times</span><span 
   4954 class="cmtt-8">&#x00A0;{</span>
   4955 <br class="fancyvrb" /><a 
   4956  id="x1-84010r5"></a><span 
   4957 class="cmr-6">5</span><span 
   4958 class="cmtt-8">&#x00A0;</span><span 
   4959 class="cmtt-8">&#x00A0;</span><span 
   4960 class="cmtt-8">&#x00A0;</span><span 
   4961 class="cmtt-8">&#x00A0;</span><span 
   4962 class="cmtt-8">&#x00A0;</span><span 
   4963 class="cmtt-8">&#x00A0;</span><span 
   4964 class="cmtt-8">&#x00A0;</span><span 
   4965 class="cmtt-8">&#x00A0;</span><span 
   4966 class="cmtt-8">&#x00A0;5)</span><span 
   4967 class="cmtt-8">&#x00A0;[length]</span><span 
   4968 class="cmtt-8">&#x00A0;=</span><span 
   4969 class="cmtt-8">&#x00A0;read</span><span 
   4970 class="cmtt-8">&#x00A0;an</span><span 
   4971 class="cmtt-8">&#x00A0;unsigned</span><span 
   4972 class="cmtt-8">&#x00A0;integer</span><span 
   4973 class="cmtt-8">&#x00A0;of</span><span 
   4974 class="cmtt-8">&#x00A0;32</span><span 
   4975 class="cmtt-8">&#x00A0;bits</span>
   4976 <br class="fancyvrb" /><a 
   4977  id="x1-84012r6"></a><span 
   4978 class="cmr-6">6</span><span 
   4979 class="cmtt-8">&#x00A0;</span><span 
   4980 class="cmtt-8">&#x00A0;</span><span 
   4981 class="cmtt-8">&#x00A0;</span><span 
   4982 class="cmtt-8">&#x00A0;</span><span 
   4983 class="cmtt-8">&#x00A0;</span><span 
   4984 class="cmtt-8">&#x00A0;</span><span 
   4985 class="cmtt-8">&#x00A0;</span><span 
   4986 class="cmtt-8">&#x00A0;</span><span 
   4987 class="cmtt-8">&#x00A0;6)</span><span 
   4988 class="cmtt-8">&#x00A0;this</span><span 
   4989 class="cmtt-8">&#x00A0;iteration&#8217;s</span><span 
   4990 class="cmtt-8">&#x00A0;user</span><span 
   4991 class="cmtt-8">&#x00A0;comment</span><span 
   4992 class="cmtt-8">&#x00A0;=</span><span 
   4993 class="cmtt-8">&#x00A0;read</span><span 
   4994 class="cmtt-8">&#x00A0;a</span><span 
   4995 class="cmtt-8">&#x00A0;UTF-8</span><span 
   4996 class="cmtt-8">&#x00A0;vector</span><span 
   4997 class="cmtt-8">&#x00A0;as</span><span 
   4998 class="cmtt-8">&#x00A0;[length]</span><span 
   4999 class="cmtt-8">&#x00A0;octets</span>
   5000 <br class="fancyvrb" /><a 
   5001  id="x1-84014r7"></a><span 
   5002 class="cmr-6">7</span><span 
   5003 class="cmtt-8">&#x00A0;</span><span 
   5004 class="cmtt-8">&#x00A0;</span><span 
   5005 class="cmtt-8">&#x00A0;</span><span 
   5006 class="cmtt-8">&#x00A0;</span><span 
   5007 class="cmtt-8">&#x00A0;</span><span 
   5008 class="cmtt-8">&#x00A0;</span><span 
   5009 class="cmtt-8">&#x00A0;}</span>
   5010 <br class="fancyvrb" /><a 
   5011  id="x1-84016r8"></a><span 
   5012 class="cmr-6">8</span><span 
   5013 class="cmtt-8">&#x00A0;</span><span 
   5014 class="cmtt-8">&#x00A0;</span><span 
   5015 class="cmtt-8">&#x00A0;</span><span 
   5016 class="cmtt-8">&#x00A0;7)</span><span 
   5017 class="cmtt-8">&#x00A0;[framing_bit]</span><span 
   5018 class="cmtt-8">&#x00A0;=</span><span 
   5019 class="cmtt-8">&#x00A0;read</span><span 
   5020 class="cmtt-8">&#x00A0;a</span><span 
   5021 class="cmtt-8">&#x00A0;single</span><span 
   5022 class="cmtt-8">&#x00A0;bit</span><span 
   5023 class="cmtt-8">&#x00A0;as</span><span 
   5024 class="cmtt-8">&#x00A0;boolean</span>
   5025 <br class="fancyvrb" /><a 
   5026  id="x1-84018r9"></a><span 
   5027 class="cmr-6">9</span><span 
   5028 class="cmtt-8">&#x00A0;</span><span 
   5029 class="cmtt-8">&#x00A0;</span><span 
   5030 class="cmtt-8">&#x00A0;</span><span 
   5031 class="cmtt-8">&#x00A0;8)</span><span 
   5032 class="cmtt-8">&#x00A0;if</span><span 
   5033 class="cmtt-8">&#x00A0;(</span><span 
   5034 class="cmtt-8">&#x00A0;[framing_bit]</span><span 
   5035 class="cmtt-8">&#x00A0;unset</span><span 
   5036 class="cmtt-8">&#x00A0;or</span><span 
   5037 class="cmtt-8">&#x00A0;end-of-packet</span><span 
   5038 class="cmtt-8">&#x00A0;)</span><span 
   5039 class="cmtt-8">&#x00A0;then</span><span 
   5040 class="cmtt-8">&#x00A0;ERROR</span>
   5041 <br class="fancyvrb" /><a 
   5042  id="x1-84020r10"></a><span 
   5043 class="cmr-6">10</span><span 
   5044 class="cmtt-8">&#x00A0;</span><span 
   5045 class="cmtt-8">&#x00A0;</span><span 
   5046 class="cmtt-8">&#x00A0;</span><span 
   5047 class="cmtt-8">&#x00A0;9)</span><span 
   5048 class="cmtt-8">&#x00A0;done.</span>
   5049 </div>
   5050 <!--l. 64--><p class="noindent" >
   5051 <h5 class="subsubsectionHead"><span class="titlemark">5.2.2  </span> <a 
   5052  id="x1-850005.2.2"></a>Content vector format</h5>
   5053 <!--l. 66--><p class="noindent" >The comment vectors are structured similarly to a UNIX environment variable. That is,
   5054 comment fields consist of a field name and a corresponding value and look like:
   5055 <!--l. 70--><p class="noindent" >
   5056       <div class="quote">
   5057       <!--l. 71--><p class="noindent" >
   5058       <div class="fancyvrb" id="fancyvrb24">
   5059 <a 
   5060  id="x1-85002r1"></a><span 
   5061 class="cmr-6">1</span><span 
   5062 class="cmtt-8">&#x00A0;</span><span 
   5063 class="cmtt-8">&#x00A0;comment[0]="ARTIST=me";</span>
   5064 <br class="fancyvrb" /><a 
   5065  id="x1-85004r2"></a><span 
   5066 class="cmr-6">2</span><span 
   5067 class="cmtt-8">&#x00A0;</span><span 
   5068 class="cmtt-8">&#x00A0;comment[1]="TITLE=the</span><span 
   5069 class="cmtt-8">&#x00A0;sound</span><span 
   5070 class="cmtt-8">&#x00A0;of</span><span 
   5071 class="cmtt-8">&#x00A0;Vorbis";</span>
   5072 </div>
   5073       </div>
   5074                                                                                         
   5075 
   5076                                                                                         
   5077 <!--l. 77--><p class="noindent" >The field name is case-insensitive and may consist of ASCII 0x20 through 0x7D, 0x3D (&#8217;=&#8217;)
   5078 excluded. ASCII 0x41 through 0x5A inclusive (characters A-Z) is to be considered equivalent to
   5079 ASCII 0x61 through 0x7A inclusive (characters a-z).
   5080 <!--l. 83--><p class="noindent" >The field name is immediately followed by ASCII 0x3D (&#8217;=&#8217;); this equals sign is used to
   5081 terminate the field name.
   5082 <!--l. 87--><p class="noindent" >0x3D is followed by 8 bit clean UTF-8 encoded value of the field contents to the end of the
   5083 field.
   5084 <!--l. 91--><p class="noindent" ><span class="paragraphHead"><a 
   5085  id="x1-860005.2.2"></a><span 
   5086 class="cmbx-12">Field names</span></span>
   5087 Below is a proposed, minimal list of standard field names with a description of intended use. No
   5088 single or group of field names is mandatory; a comment header may contain one, all or none of
   5089 the names in this list.
   5090 <!--l. 98--><p class="noindent" >
   5091       <dl class="description"><dt class="description">
   5092 <span 
   5093 class="cmssbx-10x-x-120">TITLE</span> </dt><dd 
   5094 class="description">Track/Work name
   5095       </dd><dt class="description">
   5096 <span 
   5097 class="cmssbx-10x-x-120">VERSION</span> </dt><dd 
   5098 class="description">The version field may be used to differentiate multiple versions of the same
   5099       track title in a single collection. (e.g. remix info)
   5100       </dd><dt class="description">
   5101 <span 
   5102 class="cmssbx-10x-x-120">ALBUM</span> </dt><dd 
   5103 class="description">The collection name to which this track belongs
   5104       </dd><dt class="description">
   5105 <span 
   5106 class="cmssbx-10x-x-120">TRACKNUMBER</span> </dt><dd 
   5107 class="description">The track number of this piece if part of a specific larger collection or
   5108       album
   5109       </dd><dt class="description">
   5110 <span 
   5111 class="cmssbx-10x-x-120">ARTIST</span> </dt><dd 
   5112 class="description">The artist generally considered responsible for the work. In popular music this is
   5113       usually the performing band or singer. For classical music it would be the composer.
   5114       For an audio book it would be the author of the original text.
   5115       </dd><dt class="description">
   5116 <span 
   5117 class="cmssbx-10x-x-120">PERFORMER</span> </dt><dd 
   5118 class="description">The artist(s) who performed the work. In classical music this would be the
   5119       conductor, orchestra, soloists. In an audio book it would be the actor who did the
   5120       reading. In popular music this is typically the same as the ARTIST and is omitted.
   5121       </dd><dt class="description">
   5122 <span 
   5123 class="cmssbx-10x-x-120">COPYRIGHT</span> </dt><dd 
   5124 class="description">Copyright attribution, e.g., &#8217;2001 Nobody&#8217;s Band&#8217; or &#8217;1999 Jack Moffitt&#8217;
   5125       </dd><dt class="description">
   5126                                                                                         
   5127 
   5128                                                                                         
   5129 <span 
   5130 class="cmssbx-10x-x-120">LICENSE</span> </dt><dd 
   5131 class="description">License information, eg, &#8217;All Rights Reserved&#8217;, &#8217;Any Use Permitted&#8217;, a URL to
   5132       a                license                such                as                a                Creative
   5133       Commons license (&#8221;www.creativecommons.org/blahblah/license.html&#8221;) or the EFF
   5134       Open Audio License (&#8217;distributed under the terms of the Open Audio License. see
   5135       http://www.eff.org/IP/Open&#x02D9;licenses/eff&#x02D9;oal.html for details&#8217;), etc.
   5136       </dd><dt class="description">
   5137 <span 
   5138 class="cmssbx-10x-x-120">ORGANIZATION</span> </dt><dd 
   5139 class="description">Name of the organization producing the track (i.e. the &#8217;record label&#8217;)
   5140       </dd><dt class="description">
   5141 <span 
   5142 class="cmssbx-10x-x-120">DESCRIPTION</span> </dt><dd 
   5143 class="description">A short text description of the contents
   5144       </dd><dt class="description">
   5145 <span 
   5146 class="cmssbx-10x-x-120">GENRE</span> </dt><dd 
   5147 class="description">A short text indication of music genre
   5148       </dd><dt class="description">
   5149 <span 
   5150 class="cmssbx-10x-x-120">DATE</span> </dt><dd 
   5151 class="description">Date the track was recorded
   5152       </dd><dt class="description">
   5153 <span 
   5154 class="cmssbx-10x-x-120">LOCATION</span> </dt><dd 
   5155 class="description">Location where track was recorded
   5156       </dd><dt class="description">
   5157 <span 
   5158 class="cmssbx-10x-x-120">CONTACT</span> </dt><dd 
   5159 class="description">Contact information for the creators or distributors of the track. This could
   5160       be a URL, an email address, the physical address of the producing label.
   5161       </dd><dt class="description">
   5162 <span 
   5163 class="cmssbx-10x-x-120">ISRC</span> </dt><dd 
   5164 class="description">International Standard Recording Code for the track; see <a 
   5165 href="http://www.ifpi.org/isrc/" >the ISRC intro page</a> for
   5166       more information on ISRC numbers.
   5167       </dd></dl>
   5168 <!--l. 158--><p class="noindent" ><span class="paragraphHead"><a 
   5169  id="x1-870005.2.2"></a><span 
   5170 class="cmbx-12">Implications</span></span>
   5171 Field names should not be &#8217;internationalized&#8217;; this is a concession to simplicity not
   5172 an attempt to exclude the majority of the world that doesn&#8217;t speak English. Field
   5173 <span 
   5174 class="cmti-12">contents</span>, however, use the UTF-8 character encoding to allow easy representation of any
   5175 language.
   5176 <!--l. 166--><p class="noindent" >We have the length of the entirety of the field and restrictions on the field name so that
   5177 the field name is bounded in a known way. Thus we also have the length of the field
   5178 contents.
   5179 <!--l. 170--><p class="noindent" >Individual &#8217;vendors&#8217; may use non-standard field names within reason. The proper
   5180 use of comment fields should be clear through context at this point. Abuse will be
   5181 discouraged.
   5182                                                                                         
   5183 
   5184                                                                                         
   5185 <!--l. 174--><p class="noindent" >There is no vendor-specific prefix to &#8217;nonstandard&#8217; field names. Vendors should make some effort
   5186 to avoid arbitrarily polluting the common namespace. We will generally collect the more useful
   5187 tags here to help with standardization.
   5188 <!--l. 179--><p class="noindent" >Field names are not required to be unique (occur once) within a comment header. As an
   5189 example, assume a track was recorded by three well know artists; the following is permissible,
   5190 and encouraged:
   5191 <!--l. 183--><p class="noindent" >
   5192       <div class="quote">
   5193       <!--l. 184--><p class="noindent" >
   5194       <div class="fancyvrb" id="fancyvrb25">
   5195 <a 
   5196  id="x1-87002r1"></a><span 
   5197 class="cmr-6">1</span><span 
   5198 class="cmtt-8">&#x00A0;</span><span 
   5199 class="cmtt-8">&#x00A0;ARTIST=Dizzy</span><span 
   5200 class="cmtt-8">&#x00A0;Gillespie</span>
   5201 <br class="fancyvrb" /><a 
   5202  id="x1-87004r2"></a><span 
   5203 class="cmr-6">2</span><span 
   5204 class="cmtt-8">&#x00A0;</span><span 
   5205 class="cmtt-8">&#x00A0;ARTIST=Sonny</span><span 
   5206 class="cmtt-8">&#x00A0;Rollins</span>
   5207 <br class="fancyvrb" /><a 
   5208  id="x1-87006r3"></a><span 
   5209 class="cmr-6">3</span><span 
   5210 class="cmtt-8">&#x00A0;</span><span 
   5211 class="cmtt-8">&#x00A0;ARTIST=Sonny</span><span 
   5212 class="cmtt-8">&#x00A0;Stitt</span>
   5213 </div>
   5214       </div>
   5215 <!--l. 197--><p class="noindent" >
   5216 <h5 class="subsubsectionHead"><span class="titlemark">5.2.3  </span> <a 
   5217  id="x1-880005.2.3"></a>Encoding</h5>
   5218 <!--l. 199--><p class="noindent" >The comment header comprises the entirety of the second bitstream header packet. Unlike the
   5219 first bitstream header packet, it is not generally the only packet on the second page and may not
   5220 be restricted to within the second bitstream page. The length of the comment header packet is
   5221 (practically) unbounded. The comment header packet is not optional; it must be present in the
   5222 bitstream even if it is effectively empty.
   5223 <!--l. 207--><p class="noindent" >The comment header is encoded as follows (as per Ogg&#8217;s standard bitstream mapping which
   5224 renders least-significant-bit of the word to be coded into the least significant available bit of the
   5225 current bitstream octet first):
   5226 <!--l. 212--><p class="noindent" >
   5227       <ol  class="enumerate1" >
   5228       <li 
   5229   class="enumerate" id="x1-88002x1">Vendor string length (32 bit unsigned quantity specifying number of octets)
   5230       </li>
   5231       <li 
   5232   class="enumerate" id="x1-88004x2">Vendor string ([vendor string length] octets coded from beginning of string to end of
   5233       string, not null terminated)
   5234                                                                                         
   5235 
   5236                                                                                         
   5237       </li>
   5238       <li 
   5239   class="enumerate" id="x1-88006x3">Number of comment fields (32 bit unsigned quantity specifying number of fields)
   5240       </li>
   5241       <li 
   5242   class="enumerate" id="x1-88008x4">Comment field 0 length (if [Number of comment fields] <span 
   5243 class="cmmi-12">&#x003E; </span>0; 32 bit unsigned quantity
   5244       specifying number of octets)
   5245       </li>
   5246       <li 
   5247   class="enumerate" id="x1-88010x5">Comment field 0 ([Comment field 0 length] octets coded from beginning of string to
   5248       end of string, not null terminated)
   5249       </li>
   5250       <li 
   5251   class="enumerate" id="x1-88012x6">Comment field 1 length (if [Number of comment fields] <span 
   5252 class="cmmi-12">&#x003E; </span>1...)...
   5253       </li></ol>
   5254 <!--l. 234--><p class="noindent" >This is actually somewhat easier to describe in code; implementation of the above can be found
   5255 in <span 
   5256 class="cmtt-12">vorbis/lib/info.c</span>, <span 
   5257 class="cmtt-12">_vorbis_pack_comment() </span>and <span 
   5258 class="cmtt-12">_vorbis_unpack_comment()</span>.
   5259                                                                                         
   5260 
   5261                                                                                         
   5262                                                                                         
   5263 
   5264                                                                                         
   5265 <h3 class="sectionHead"><span class="titlemark">6  </span> <a 
   5266  id="x1-890006"></a>Floor type 0 setup and decode</h3>
   5267 <!--l. 6--><p class="noindent" >
   5268 <h4 class="subsectionHead"><span class="titlemark">6.1  </span> <a 
   5269  id="x1-900006.1"></a>Overview</h4>
   5270 <!--l. 8--><p class="noindent" >Vorbis floor type zero uses Line Spectral Pair (LSP, also alternately known as Line Spectral
   5271 Frequency or LSF) representation to encode a smooth spectral envelope curve as the frequency
   5272 response of the LSP filter. This representation is equivalent to a traditional all-pole infinite
   5273 impulse response filter as would be used in linear predictive coding; LSP representation may be
   5274 converted to LPC representation and vice-versa.
   5275 <!--l. 18--><p class="noindent" >
   5276 <h4 class="subsectionHead"><span class="titlemark">6.2  </span> <a 
   5277  id="x1-910006.2"></a>Floor 0 format</h4>
   5278 <!--l. 20--><p class="noindent" >Floor zero configuration consists of six integer fields and a list of VQ codebooks for use in
   5279 coding/decoding the LSP filter coefficient values used by each frame.
   5280 <!--l. 24--><p class="noindent" >
   5281 <h5 class="subsubsectionHead"><span class="titlemark">6.2.1  </span> <a 
   5282  id="x1-920006.2.1"></a>header decode</h5>
   5283 <!--l. 26--><p class="noindent" >Configuration information for instances of floor zero decodes from the codec setup header (third
   5284 packet). configuration decode proceeds as follows:
   5285 <!--l. 30--><p class="noindent" >
   5286 <div class="fancyvrb" id="fancyvrb26">
   5287 <a 
   5288  id="x1-92002r1"></a><span 
   5289 class="cmr-6">1</span><span 
   5290 class="cmtt-8">&#x00A0;</span><span 
   5291 class="cmtt-8">&#x00A0;</span><span 
   5292 class="cmtt-8">&#x00A0;</span><span 
   5293 class="cmtt-8">&#x00A0;1)</span><span 
   5294 class="cmtt-8">&#x00A0;[floor0_order]</span><span 
   5295 class="cmtt-8">&#x00A0;=</span><span 
   5296 class="cmtt-8">&#x00A0;read</span><span 
   5297 class="cmtt-8">&#x00A0;an</span><span 
   5298 class="cmtt-8">&#x00A0;unsigned</span><span 
   5299 class="cmtt-8">&#x00A0;integer</span><span 
   5300 class="cmtt-8">&#x00A0;of</span><span 
   5301 class="cmtt-8">&#x00A0;8</span><span 
   5302 class="cmtt-8">&#x00A0;bits</span>
   5303 <br class="fancyvrb" /><a 
   5304  id="x1-92004r2"></a><span 
   5305 class="cmr-6">2</span><span 
   5306 class="cmtt-8">&#x00A0;</span><span 
   5307 class="cmtt-8">&#x00A0;</span><span 
   5308 class="cmtt-8">&#x00A0;</span><span 
   5309 class="cmtt-8">&#x00A0;2)</span><span 
   5310 class="cmtt-8">&#x00A0;[floor0_rate]</span><span 
   5311 class="cmtt-8">&#x00A0;=</span><span 
   5312 class="cmtt-8">&#x00A0;read</span><span 
   5313 class="cmtt-8">&#x00A0;an</span><span 
   5314 class="cmtt-8">&#x00A0;unsigned</span><span 
   5315 class="cmtt-8">&#x00A0;integer</span><span 
   5316 class="cmtt-8">&#x00A0;of</span><span 
   5317 class="cmtt-8">&#x00A0;16</span><span 
   5318 class="cmtt-8">&#x00A0;bits</span>
   5319 <br class="fancyvrb" /><a 
   5320  id="x1-92006r3"></a><span 
   5321 class="cmr-6">3</span><span 
   5322 class="cmtt-8">&#x00A0;</span><span 
   5323 class="cmtt-8">&#x00A0;</span><span 
   5324 class="cmtt-8">&#x00A0;</span><span 
   5325 class="cmtt-8">&#x00A0;3)</span><span 
   5326 class="cmtt-8">&#x00A0;[floor0_bark_map_size]</span><span 
   5327 class="cmtt-8">&#x00A0;=</span><span 
   5328 class="cmtt-8">&#x00A0;read</span><span 
   5329 class="cmtt-8">&#x00A0;an</span><span 
   5330 class="cmtt-8">&#x00A0;unsigned</span><span 
   5331 class="cmtt-8">&#x00A0;integer</span><span 
   5332 class="cmtt-8">&#x00A0;of</span><span 
   5333 class="cmtt-8">&#x00A0;16</span><span 
   5334 class="cmtt-8">&#x00A0;bits</span>
   5335 <br class="fancyvrb" /><a 
   5336  id="x1-92008r4"></a><span 
   5337 class="cmr-6">4</span><span 
   5338 class="cmtt-8">&#x00A0;</span><span 
   5339 class="cmtt-8">&#x00A0;</span><span 
   5340 class="cmtt-8">&#x00A0;</span><span 
   5341 class="cmtt-8">&#x00A0;4)</span><span 
   5342 class="cmtt-8">&#x00A0;[floor0_amplitude_bits]</span><span 
   5343 class="cmtt-8">&#x00A0;=</span><span 
   5344 class="cmtt-8">&#x00A0;read</span><span 
   5345 class="cmtt-8">&#x00A0;an</span><span 
   5346 class="cmtt-8">&#x00A0;unsigned</span><span 
   5347 class="cmtt-8">&#x00A0;integer</span><span 
   5348 class="cmtt-8">&#x00A0;of</span><span 
   5349 class="cmtt-8">&#x00A0;six</span><span 
   5350 class="cmtt-8">&#x00A0;bits</span>
   5351 <br class="fancyvrb" /><a 
   5352  id="x1-92010r5"></a><span 
   5353 class="cmr-6">5</span><span 
   5354 class="cmtt-8">&#x00A0;</span><span 
   5355 class="cmtt-8">&#x00A0;</span><span 
   5356 class="cmtt-8">&#x00A0;</span><span 
   5357 class="cmtt-8">&#x00A0;5)</span><span 
   5358 class="cmtt-8">&#x00A0;[floor0_amplitude_offset]</span><span 
   5359 class="cmtt-8">&#x00A0;=</span><span 
   5360 class="cmtt-8">&#x00A0;read</span><span 
   5361 class="cmtt-8">&#x00A0;an</span><span 
   5362 class="cmtt-8">&#x00A0;unsigned</span><span 
   5363 class="cmtt-8">&#x00A0;integer</span><span 
   5364 class="cmtt-8">&#x00A0;of</span><span 
   5365 class="cmtt-8">&#x00A0;eight</span><span 
   5366 class="cmtt-8">&#x00A0;bits</span>
   5367 <br class="fancyvrb" /><a 
   5368  id="x1-92012r6"></a><span 
   5369 class="cmr-6">6</span><span 
   5370 class="cmtt-8">&#x00A0;</span><span 
   5371 class="cmtt-8">&#x00A0;</span><span 
   5372 class="cmtt-8">&#x00A0;</span><span 
   5373 class="cmtt-8">&#x00A0;6)</span><span 
   5374 class="cmtt-8">&#x00A0;[floor0_number_of_books]</span><span 
   5375 class="cmtt-8">&#x00A0;=</span><span 
   5376 class="cmtt-8">&#x00A0;read</span><span 
   5377 class="cmtt-8">&#x00A0;an</span><span 
   5378 class="cmtt-8">&#x00A0;unsigned</span><span 
   5379 class="cmtt-8">&#x00A0;integer</span><span 
   5380 class="cmtt-8">&#x00A0;of</span><span 
   5381 class="cmtt-8">&#x00A0;four</span><span 
   5382 class="cmtt-8">&#x00A0;bits</span><span 
   5383 class="cmtt-8">&#x00A0;and</span><span 
   5384 class="cmtt-8">&#x00A0;add</span><span 
   5385 class="cmtt-8">&#x00A0;1</span>
   5386 <br class="fancyvrb" /><a 
   5387  id="x1-92014r7"></a><span 
   5388 class="cmr-6">7</span><span 
   5389 class="cmtt-8">&#x00A0;</span><span 
   5390 class="cmtt-8">&#x00A0;</span><span 
   5391 class="cmtt-8">&#x00A0;</span><span 
   5392 class="cmtt-8">&#x00A0;7)</span><span 
   5393 class="cmtt-8">&#x00A0;array</span><span 
   5394 class="cmtt-8">&#x00A0;[floor0_book_list]</span><span 
   5395 class="cmtt-8">&#x00A0;=</span><span 
   5396 class="cmtt-8">&#x00A0;read</span><span 
   5397 class="cmtt-8">&#x00A0;a</span><span 
   5398 class="cmtt-8">&#x00A0;list</span><span 
   5399 class="cmtt-8">&#x00A0;of</span><span 
   5400 class="cmtt-8">&#x00A0;[floor0_number_of_books]</span><span 
   5401 class="cmtt-8">&#x00A0;unsigned</span><span 
   5402 class="cmtt-8">&#x00A0;integers</span><span 
   5403 class="cmtt-8">&#x00A0;of</span><span 
   5404 class="cmtt-8">&#x00A0;eight</span><span 
   5405 class="cmtt-8">&#x00A0;bits</span><span 
   5406 class="cmtt-8">&#x00A0;each;</span>
   5407 </div>
   5408                                                                                         
   5409 
   5410                                                                                         
   5411 <!--l. 40--><p class="noindent" >An end-of-packet condition during any of these bitstream reads renders this stream undecodable.
   5412 In addition, any element of the array <span 
   5413 class="cmtt-12">[floor0_book_list] </span>that is greater than the maximum
   5414 codebook number for this bitstream is an error condition that also renders the stream
   5415 undecodable.
   5416 <!--l. 48--><p class="noindent" >
   5417 <h5 class="subsubsectionHead"><span class="titlemark">6.2.2  </span> <a 
   5418  id="x1-930006.2.2"></a>packet decode</h5>
   5419 <!--l. 50--><p class="noindent" >Extracting a floor0 curve from an audio packet consists of first decoding the curve
   5420 amplitude and <span 
   5421 class="cmtt-12">[floor0_order] </span>LSP coefficient values from the bitstream, and then
   5422 computing the floor curve, which is defined as the frequency response of the decoded LSP
   5423 filter.
   5424 <!--l. 56--><p class="noindent" >Packet decode proceeds as follows:
   5425 <div class="fancyvrb" id="fancyvrb27">
   5426 <a 
   5427  id="x1-93002r1"></a><span 
   5428 class="cmr-6">1</span><span 
   5429 class="cmtt-8">&#x00A0;</span><span 
   5430 class="cmtt-8">&#x00A0;</span><span 
   5431 class="cmtt-8">&#x00A0;</span><span 
   5432 class="cmtt-8">&#x00A0;1)</span><span 
   5433 class="cmtt-8">&#x00A0;[amplitude]</span><span 
   5434 class="cmtt-8">&#x00A0;=</span><span 
   5435 class="cmtt-8">&#x00A0;read</span><span 
   5436 class="cmtt-8">&#x00A0;an</span><span 
   5437 class="cmtt-8">&#x00A0;unsigned</span><span 
   5438 class="cmtt-8">&#x00A0;integer</span><span 
   5439 class="cmtt-8">&#x00A0;of</span><span 
   5440 class="cmtt-8">&#x00A0;[floor0_amplitude_bits]</span><span 
   5441 class="cmtt-8">&#x00A0;bits</span>
   5442 <br class="fancyvrb" /><a 
   5443  id="x1-93004r2"></a><span 
   5444 class="cmr-6">2</span><span 
   5445 class="cmtt-8">&#x00A0;</span><span 
   5446 class="cmtt-8">&#x00A0;</span><span 
   5447 class="cmtt-8">&#x00A0;</span><span 
   5448 class="cmtt-8">&#x00A0;2)</span><span 
   5449 class="cmtt-8">&#x00A0;if</span><span 
   5450 class="cmtt-8">&#x00A0;(</span><span 
   5451 class="cmtt-8">&#x00A0;[amplitude]</span><span 
   5452 class="cmtt-8">&#x00A0;is</span><span 
   5453 class="cmtt-8">&#x00A0;greater</span><span 
   5454 class="cmtt-8">&#x00A0;than</span><span 
   5455 class="cmtt-8">&#x00A0;zero</span><span 
   5456 class="cmtt-8">&#x00A0;)</span><span 
   5457 class="cmtt-8">&#x00A0;</span><span 
   5458 class="cmsy-8">{</span>
   5459 <br class="fancyvrb" /><a 
   5460  id="x1-93006r3"></a><span 
   5461 class="cmr-6">3</span><span 
   5462 class="cmtt-8">&#x00A0;</span><span 
   5463 class="cmtt-8">&#x00A0;</span><span 
   5464 class="cmtt-8">&#x00A0;</span><span 
   5465 class="cmtt-8">&#x00A0;</span><span 
   5466 class="cmtt-8">&#x00A0;</span><span 
   5467 class="cmtt-8">&#x00A0;</span><span 
   5468 class="cmtt-8">&#x00A0;</span><span 
   5469 class="cmtt-8">&#x00A0;</span><span 
   5470 class="cmtt-8">&#x00A0;3)</span><span 
   5471 class="cmtt-8">&#x00A0;[coefficients]</span><span 
   5472 class="cmtt-8">&#x00A0;is</span><span 
   5473 class="cmtt-8">&#x00A0;an</span><span 
   5474 class="cmtt-8">&#x00A0;empty,</span><span 
   5475 class="cmtt-8">&#x00A0;zero</span><span 
   5476 class="cmtt-8">&#x00A0;length</span><span 
   5477 class="cmtt-8">&#x00A0;vector</span>
   5478 <br class="fancyvrb" /><a 
   5479  id="x1-93008r4"></a><span 
   5480 class="cmr-6">4</span><span 
   5481 class="cmtt-8">&#x00A0;</span><span 
   5482 class="cmtt-8">&#x00A0;</span><span 
   5483 class="cmtt-8">&#x00A0;</span><span 
   5484 class="cmtt-8">&#x00A0;</span><span 
   5485 class="cmtt-8">&#x00A0;</span><span 
   5486 class="cmtt-8">&#x00A0;</span><span 
   5487 class="cmtt-8">&#x00A0;</span><span 
   5488 class="cmtt-8">&#x00A0;</span><span 
   5489 class="cmtt-8">&#x00A0;4)</span><span 
   5490 class="cmtt-8">&#x00A0;[booknumber]</span><span 
   5491 class="cmtt-8">&#x00A0;=</span><span 
   5492 class="cmtt-8">&#x00A0;read</span><span 
   5493 class="cmtt-8">&#x00A0;an</span><span 
   5494 class="cmtt-8">&#x00A0;unsigned</span><span 
   5495 class="cmtt-8">&#x00A0;integer</span><span 
   5496 class="cmtt-8">&#x00A0;of</span><span 
   5497 class="cmtt-8">&#x00A0;</span><a 
   5498 href="#x1-1170009.2.1"><span 
   5499 class="cmtt-8">ilog</span></a><span 
   5500 class="cmtt-8">(</span><span 
   5501 class="cmtt-8">&#x00A0;[floor0_number_of_books]</span><span 
   5502 class="cmtt-8">&#x00A0;)</span><span 
   5503 class="cmtt-8">&#x00A0;bits</span>
   5504 <br class="fancyvrb" /><a 
   5505  id="x1-93010r5"></a><span 
   5506 class="cmr-6">5</span><span 
   5507 class="cmtt-8">&#x00A0;</span><span 
   5508 class="cmtt-8">&#x00A0;</span><span 
   5509 class="cmtt-8">&#x00A0;</span><span 
   5510 class="cmtt-8">&#x00A0;</span><span 
   5511 class="cmtt-8">&#x00A0;</span><span 
   5512 class="cmtt-8">&#x00A0;</span><span 
   5513 class="cmtt-8">&#x00A0;</span><span 
   5514 class="cmtt-8">&#x00A0;</span><span 
   5515 class="cmtt-8">&#x00A0;5)</span><span 
   5516 class="cmtt-8">&#x00A0;if</span><span 
   5517 class="cmtt-8">&#x00A0;(</span><span 
   5518 class="cmtt-8">&#x00A0;[booknumber]</span><span 
   5519 class="cmtt-8">&#x00A0;is</span><span 
   5520 class="cmtt-8">&#x00A0;greater</span><span 
   5521 class="cmtt-8">&#x00A0;than</span><span 
   5522 class="cmtt-8">&#x00A0;the</span><span 
   5523 class="cmtt-8">&#x00A0;highest</span><span 
   5524 class="cmtt-8">&#x00A0;number</span><span 
   5525 class="cmtt-8">&#x00A0;decode</span><span 
   5526 class="cmtt-8">&#x00A0;codebook</span><span 
   5527 class="cmtt-8">&#x00A0;)</span><span 
   5528 class="cmtt-8">&#x00A0;then</span><span 
   5529 class="cmtt-8">&#x00A0;packet</span><span 
   5530 class="cmtt-8">&#x00A0;is</span><span 
   5531 class="cmtt-8">&#x00A0;undecodable</span>
   5532 <br class="fancyvrb" /><a 
   5533  id="x1-93012r6"></a><span 
   5534 class="cmr-6">6</span><span 
   5535 class="cmtt-8">&#x00A0;</span><span 
   5536 class="cmtt-8">&#x00A0;</span><span 
   5537 class="cmtt-8">&#x00A0;</span><span 
   5538 class="cmtt-8">&#x00A0;</span><span 
   5539 class="cmtt-8">&#x00A0;</span><span 
   5540 class="cmtt-8">&#x00A0;</span><span 
   5541 class="cmtt-8">&#x00A0;</span><span 
   5542 class="cmtt-8">&#x00A0;</span><span 
   5543 class="cmtt-8">&#x00A0;6)</span><span 
   5544 class="cmtt-8">&#x00A0;[last]</span><span 
   5545 class="cmtt-8">&#x00A0;=</span><span 
   5546 class="cmtt-8">&#x00A0;zero;</span>
   5547 <br class="fancyvrb" /><a 
   5548  id="x1-93014r7"></a><span 
   5549 class="cmr-6">7</span><span 
   5550 class="cmtt-8">&#x00A0;</span><span 
   5551 class="cmtt-8">&#x00A0;</span><span 
   5552 class="cmtt-8">&#x00A0;</span><span 
   5553 class="cmtt-8">&#x00A0;</span><span 
   5554 class="cmtt-8">&#x00A0;</span><span 
   5555 class="cmtt-8">&#x00A0;</span><span 
   5556 class="cmtt-8">&#x00A0;</span><span 
   5557 class="cmtt-8">&#x00A0;</span><span 
   5558 class="cmtt-8">&#x00A0;7)</span><span 
   5559 class="cmtt-8">&#x00A0;vector</span><span 
   5560 class="cmtt-8">&#x00A0;[temp_vector]</span><span 
   5561 class="cmtt-8">&#x00A0;=</span><span 
   5562 class="cmtt-8">&#x00A0;read</span><span 
   5563 class="cmtt-8">&#x00A0;vector</span><span 
   5564 class="cmtt-8">&#x00A0;from</span><span 
   5565 class="cmtt-8">&#x00A0;bitstream</span><span 
   5566 class="cmtt-8">&#x00A0;using</span><span 
   5567 class="cmtt-8">&#x00A0;codebook</span><span 
   5568 class="cmtt-8">&#x00A0;number</span><span 
   5569 class="cmtt-8">&#x00A0;[floor0_book_list]</span><span 
   5570 class="cmtt-8">&#x00A0;element</span><span 
   5571 class="cmtt-8">&#x00A0;[booknumber]</span><span 
   5572 class="cmtt-8">&#x00A0;in</span><span 
   5573 class="cmtt-8">&#x00A0;VQ</span><span 
   5574 class="cmtt-8">&#x00A0;context.</span>
   5575 <br class="fancyvrb" /><a 
   5576  id="x1-93016r8"></a><span 
   5577 class="cmr-6">8</span><span 
   5578 class="cmtt-8">&#x00A0;</span><span 
   5579 class="cmtt-8">&#x00A0;</span><span 
   5580 class="cmtt-8">&#x00A0;</span><span 
   5581 class="cmtt-8">&#x00A0;</span><span 
   5582 class="cmtt-8">&#x00A0;</span><span 
   5583 class="cmtt-8">&#x00A0;</span><span 
   5584 class="cmtt-8">&#x00A0;</span><span 
   5585 class="cmtt-8">&#x00A0;</span><span 
   5586 class="cmtt-8">&#x00A0;8)</span><span 
   5587 class="cmtt-8">&#x00A0;add</span><span 
   5588 class="cmtt-8">&#x00A0;the</span><span 
   5589 class="cmtt-8">&#x00A0;scalar</span><span 
   5590 class="cmtt-8">&#x00A0;value</span><span 
   5591 class="cmtt-8">&#x00A0;[last]</span><span 
   5592 class="cmtt-8">&#x00A0;to</span><span 
   5593 class="cmtt-8">&#x00A0;each</span><span 
   5594 class="cmtt-8">&#x00A0;scalar</span><span 
   5595 class="cmtt-8">&#x00A0;in</span><span 
   5596 class="cmtt-8">&#x00A0;vector</span><span 
   5597 class="cmtt-8">&#x00A0;[temp_vector]</span>
   5598 <br class="fancyvrb" /><a 
   5599  id="x1-93018r9"></a><span 
   5600 class="cmr-6">9</span><span 
   5601 class="cmtt-8">&#x00A0;</span><span 
   5602 class="cmtt-8">&#x00A0;</span><span 
   5603 class="cmtt-8">&#x00A0;</span><span 
   5604 class="cmtt-8">&#x00A0;</span><span 
   5605 class="cmtt-8">&#x00A0;</span><span 
   5606 class="cmtt-8">&#x00A0;</span><span 
   5607 class="cmtt-8">&#x00A0;</span><span 
   5608 class="cmtt-8">&#x00A0;</span><span 
   5609 class="cmtt-8">&#x00A0;9)</span><span 
   5610 class="cmtt-8">&#x00A0;[last]</span><span 
   5611 class="cmtt-8">&#x00A0;=</span><span 
   5612 class="cmtt-8">&#x00A0;the</span><span 
   5613 class="cmtt-8">&#x00A0;value</span><span 
   5614 class="cmtt-8">&#x00A0;of</span><span 
   5615 class="cmtt-8">&#x00A0;the</span><span 
   5616 class="cmtt-8">&#x00A0;last</span><span 
   5617 class="cmtt-8">&#x00A0;scalar</span><span 
   5618 class="cmtt-8">&#x00A0;in</span><span 
   5619 class="cmtt-8">&#x00A0;vector</span><span 
   5620 class="cmtt-8">&#x00A0;[temp_vector]</span>
   5621 <br class="fancyvrb" /><a 
   5622  id="x1-93020r10"></a><span 
   5623 class="cmr-6">10</span><span 
   5624 class="cmtt-8">&#x00A0;</span><span 
   5625 class="cmtt-8">&#x00A0;</span><span 
   5626 class="cmtt-8">&#x00A0;</span><span 
   5627 class="cmtt-8">&#x00A0;</span><span 
   5628 class="cmtt-8">&#x00A0;</span><span 
   5629 class="cmtt-8">&#x00A0;</span><span 
   5630 class="cmtt-8">&#x00A0;</span><span 
   5631 class="cmtt-8">&#x00A0;10)</span><span 
   5632 class="cmtt-8">&#x00A0;concatenate</span><span 
   5633 class="cmtt-8">&#x00A0;[temp_vector]</span><span 
   5634 class="cmtt-8">&#x00A0;onto</span><span 
   5635 class="cmtt-8">&#x00A0;the</span><span 
   5636 class="cmtt-8">&#x00A0;end</span><span 
   5637 class="cmtt-8">&#x00A0;of</span><span 
   5638 class="cmtt-8">&#x00A0;the</span><span 
   5639 class="cmtt-8">&#x00A0;[coefficients]</span><span 
   5640 class="cmtt-8">&#x00A0;vector</span>
   5641 <br class="fancyvrb" /><a 
   5642  id="x1-93022r11"></a><span 
   5643 class="cmr-6">11</span><span 
   5644 class="cmtt-8">&#x00A0;</span><span 
   5645 class="cmtt-8">&#x00A0;</span><span 
   5646 class="cmtt-8">&#x00A0;</span><span 
   5647 class="cmtt-8">&#x00A0;</span><span 
   5648 class="cmtt-8">&#x00A0;</span><span 
   5649 class="cmtt-8">&#x00A0;</span><span 
   5650 class="cmtt-8">&#x00A0;</span><span 
   5651 class="cmtt-8">&#x00A0;11)</span><span 
   5652 class="cmtt-8">&#x00A0;if</span><span 
   5653 class="cmtt-8">&#x00A0;(length</span><span 
   5654 class="cmtt-8">&#x00A0;of</span><span 
   5655 class="cmtt-8">&#x00A0;vector</span><span 
   5656 class="cmtt-8">&#x00A0;[coefficients]</span><span 
   5657 class="cmtt-8">&#x00A0;is</span><span 
   5658 class="cmtt-8">&#x00A0;less</span><span 
   5659 class="cmtt-8">&#x00A0;than</span><span 
   5660 class="cmtt-8">&#x00A0;[floor0_order],</span><span 
   5661 class="cmtt-8">&#x00A0;continue</span><span 
   5662 class="cmtt-8">&#x00A0;at</span><span 
   5663 class="cmtt-8">&#x00A0;step</span><span 
   5664 class="cmtt-8">&#x00A0;6</span>
   5665 <br class="fancyvrb" /><a 
   5666  id="x1-93024r12"></a><span 
   5667 class="cmr-6">12</span><span 
   5668 class="cmtt-8">&#x00A0;</span><span 
   5669 class="cmtt-8">&#x00A0;</span>
   5670 <br class="fancyvrb" /><a 
   5671  id="x1-93026r13"></a><span 
   5672 class="cmr-6">13</span><span 
   5673 class="cmtt-8">&#x00A0;</span><span 
   5674 class="cmtt-8">&#x00A0;</span><span 
   5675 class="cmtt-8">&#x00A0;</span><span 
   5676 class="cmtt-8">&#x00A0;</span><span 
   5677 class="cmtt-8">&#x00A0;</span><span 
   5678 class="cmtt-8">&#x00A0;</span><span 
   5679 class="cmtt-8">&#x00A0;</span><span 
   5680 class="cmsy-8">}</span>
   5681 <br class="fancyvrb" /><a 
   5682  id="x1-93028r14"></a><span 
   5683 class="cmr-6">14</span><span 
   5684 class="cmtt-8">&#x00A0;</span><span 
   5685 class="cmtt-8">&#x00A0;</span>
   5686 <br class="fancyvrb" /><a 
   5687  id="x1-93030r15"></a><span 
   5688 class="cmr-6">15</span><span 
   5689 class="cmtt-8">&#x00A0;</span><span 
   5690 class="cmtt-8">&#x00A0;</span><span 
   5691 class="cmtt-8">&#x00A0;12)</span><span 
   5692 class="cmtt-8">&#x00A0;done.</span>
   5693 <br class="fancyvrb" /><a 
   5694  id="x1-93032r16"></a><span 
   5695 class="cmr-6">16</span><span 
   5696 class="cmtt-8">&#x00A0;</span><span 
   5697 class="cmtt-8">&#x00A0;</span>
   5698 </div>
   5699 <!--l. 76--><p class="noindent" >Take note of the following properties of decode:
   5700       <ul class="itemize1">
   5701       <li class="itemize">An <span 
   5702 class="cmtt-12">[amplitude] </span>value of zero must result in a return code that indicates this channel
   5703       is unused in this frame (the output of the channel will be all-zeroes in synthesis).
   5704       Several later stages of decode don&#8217;t occur for an unused channel.
   5705       </li>
   5706       <li class="itemize">An end-of-packet condition during decode should be considered a nominal occruence;
   5707       if end-of-packet is reached during any read operation above, floor decode is to return
   5708       &#8217;unused&#8217; status as if the <span 
   5709 class="cmtt-12">[amplitude] </span>value had read zero at the beginning of decode.
   5710       </li>
   5711       <li class="itemize">The book number used for decode can, in fact, be stored in the bitstream in <a 
   5712 href="#x1-1170009.2.1">ilog</a>(
   5713                                                                                         
   5714 
   5715                                                                                         
   5716       <span 
   5717 class="cmtt-12">[floor0_number_of_books] </span>- 1 ) bits. Nevertheless, the above specification is correct
   5718       and values greater than the maximum possible book value are reserved.
   5719       </li>
   5720       <li class="itemize">The  number  of  scalars  read  into  the  vector  <span 
   5721 class="cmtt-12">[coefficients] </span>may  be  greater
   5722       than  <span 
   5723 class="cmtt-12">[floor0_order]</span>,  the  number  actually  required  for  curve  computation.  For
   5724       example,  if  the  VQ  codebook  used  for  the  floor  currently  being  decoded  has  a
   5725       <span 
   5726 class="cmtt-12">[codebook_dimensions] </span>value of three and <span 
   5727 class="cmtt-12">[floor0_order] </span>is ten, the only way to
   5728       fill all the needed scalars in <span 
   5729 class="cmtt-12">[coefficients] </span>is to to read a total of twelve scalars
   5730       as four vectors of three scalars each. This is not an error condition, and care must
   5731       be taken not to allow a buffer overflow in decode. The extra values are not used and
   5732       may be ignored or discarded.</li></ul>
   5733 <!--l. 104--><p class="noindent" >
   5734 <h5 class="subsubsectionHead"><span class="titlemark">6.2.3  </span> <a 
   5735  id="x1-940006.2.3"></a>curve computation</h5>
   5736 <!--l. 106--><p class="noindent" >Given an <span 
   5737 class="cmtt-12">[amplitude] </span>integer and <span 
   5738 class="cmtt-12">[coefficients] </span>vector from packet decode as well
   5739 as the [floor0&#x02D9;order], [floor0&#x02D9;rate], [floor0&#x02D9;bark&#x02D9;map&#x02D9;size], [floor0&#x02D9;amplitude&#x02D9;bits] and
   5740 [floor0&#x02D9;amplitude&#x02D9;offset] values from floor setup, and an output vector size <span 
   5741 class="cmtt-12">[n] </span>specified by the
   5742 decode process, we compute a floor output vector.
   5743 <!--l. 113--><p class="noindent" >If the value <span 
   5744 class="cmtt-12">[amplitude] </span>is zero, the return value is a length <span 
   5745 class="cmtt-12">[n] </span>vector with all-zero
   5746 scalars. Otherwise, begin by assuming the following definitions for the given vector to be
   5747 synthesized:
   5748 <center class="par-math-display" >
   5749 <img 
   5750 src="Vorbis_I_spec7x.png" alt="        {
   5751           min (floor0xbarkxmapxsize    &minus; 1,foobar )  for i &isin; [0,n &minus; 1 ]
   5752 mapi =    &minus; 1                                        for i = n
   5753 " class="par-math-display" ></center>
   5754 <!--l. 128--><p class="nopar" >
   5755 <!--l. 130--><p class="noindent" >where
   5756 <center class="par-math-display" >
   5757 <img 
   5758 src="Vorbis_I_spec8x.png" alt="          &lfloor;                                                 &rfloor;
   5759                 (floor0xrate   &sdot; i) floor0xbarkxmapxsize
   5760 foobar =   bark  -------2n-------  &sdot;-bark(.5 &sdot; floor0xrate-)
   5761 " class="par-math-display" ></center>
   5762                                                                                         
   5763 
   5764                                                                                         
   5765 <!--l. 137--><p class="nopar" >
   5766 <!--l. 139--><p class="noindent" >and
   5767 <center class="par-math-display" >
   5768 <img 
   5769 src="Vorbis_I_spec9x.png" alt="                                                         2
   5770 bark(x) = 13.1arctan (.00074x ) + 2.24 arctan(.0000000185x  +  .0001x )
   5771 " class="par-math-display" ></center>
   5772 <!--l. 143--><p class="nopar" >
   5773 <!--l. 145--><p class="noindent" >The above is used to synthesize the LSP curve on a Bark-scale frequency axis, then map the
   5774 result to a linear-scale frequency axis. Similarly, the below calculation synthesizes the output
   5775 LSP curve <span 
   5776 class="cmtt-12">[output] </span>on a log (dB) amplitude scale, mapping it to linear amplitude in the last
   5777 step:
   5778 <!--l. 150--><p class="noindent" >
   5779       <ol  class="enumerate1" >
   5780       <li 
   5781   class="enumerate" id="x1-94002x1"><span 
   5782 class="cmtt-12">[i] </span>= 0
   5783       </li>
   5784       <li 
   5785   class="enumerate" id="x1-94004x2"><span 
   5786 class="cmtt-12">[</span><span 
   5787 class="cmmi-12">&omega;</span><span 
   5788 class="cmtt-12">] </span>= <span 
   5789 class="cmmi-12">&pi; </span>* map element <span 
   5790 class="cmtt-12">[i] </span>/ <span 
   5791 class="cmtt-12">[floor0_bark_map_size]</span>
   5792       </li>
   5793       <li 
   5794   class="enumerate" id="x1-94006x3">if ( <span 
   5795 class="cmtt-12">[floor0_order] </span>is odd )
   5796            <ol  class="enumerate2" >
   5797            <li 
   5798   class="enumerate" id="x1-94008x1">calculate <span 
   5799 class="cmtt-12">[p] </span>and <span 
   5800 class="cmtt-12">[q] </span>according to: <div class="eqnarray">
   5801            <center class="math-display" >
   5802            <img 
   5803 src="Vorbis_I_spec10x.png" alt="                   floor0xorder&minus;3
   5804                2      &prod;2                                       2
   5805 p  =   (1 &minus; cos &omega;)           4(cos([coefficients  ]2j+1) &minus; cos&omega; )
   5806                       j=0
   5807          floor0x&prod;or2der&minus;1
   5808 q  =   1-          4(cos([coefficients  ]2j) &minus; cos&omega; )2
   5809        4    j=0
   5810                                                                                         
   5811 
   5812                                                                                         
   5813            " class="math-display" ></center>
   5814            </div>
   5815            </li></ol>
   5816       <!--l. 162--><p class="noindent" >else <span 
   5817 class="cmtt-12">[floor0_order] </span>is even
   5818            <ol  class="enumerate2" >
   5819            <li 
   5820   class="enumerate" id="x1-94011x1">calculate <span 
   5821 class="cmtt-12">[p] </span>and <span 
   5822 class="cmtt-12">[q] </span>according to: <div class="eqnarray">
   5823            <center class="math-display" >
   5824            <img 
   5825 src="Vorbis_I_spec11x.png" alt="                   floor0xorder&minus;2
   5826        (1 &minus; cos2&omega;)     &prod;2                                       2
   5827 p  =   -----2------          4(cos([coefficients  ]2j+1) &minus; cos&omega; )
   5828                        j=0
   5829                2   floor0xor2der&minus;2
   5830 q  =   (1 +-cos-&omega;)-    &prod;     4(cos([coefficients  ] ) &minus; cos&omega; )2
   5831             2         j=0                          2j
   5832            " class="math-display" ></center>
   5833            </div>
   5834            </li></ol>
   5835       </li>
   5836       <li 
   5837   class="enumerate" id="x1-94014x4">calculate <span 
   5838 class="cmtt-12">[linear_floor_value] </span>according to:
   5839       <center class="math-display" >
   5840       <img 
   5841 src="Vorbis_I_spec12x.png" alt="    (           (                                                                      ))
   5842                  amplitude---&sdot; floor0xamplitutexoffset---
   5843 exp   .11512925       (2floor0xamplitudexbits &minus; 1)&radic; p + q     &minus; floor0xamplitudexoffset
   5844       " class="math-display" ></center>
   5845       <!--l. 177--><p class="nopar" >
   5846       </li>
   5847       <li 
   5848   class="enumerate" id="x1-94016x5"><span 
   5849 class="cmtt-12">[iteration_condition] </span>= map element <span 
   5850 class="cmtt-12">[i]</span>
   5851                                                                                         
   5852 
   5853                                                                                         
   5854       </li>
   5855       <li 
   5856   class="enumerate" id="x1-94018x6"><span 
   5857 class="cmtt-12">[output] </span>element <span 
   5858 class="cmtt-12">[i] </span>= <span 
   5859 class="cmtt-12">[linear_floor_value]</span>
   5860       </li>
   5861       <li 
   5862   class="enumerate" id="x1-94020x7">increment <span 
   5863 class="cmtt-12">[i]</span>
   5864       </li>
   5865       <li 
   5866   class="enumerate" id="x1-94022x8">if ( map element <span 
   5867 class="cmtt-12">[i] </span>is equal to <span 
   5868 class="cmtt-12">[iteration_condition] </span>) continue at step
   5869       5
   5870       </li>
   5871       <li 
   5872   class="enumerate" id="x1-94024x9">if ( <span 
   5873 class="cmtt-12">[i] </span>is less than <span 
   5874 class="cmtt-12">[n] </span>) continue at step 2
   5875       </li>
   5876       <li 
   5877   class="enumerate" id="x1-94026x10">done</li></ol>
   5878                                                                                         
   5879 
   5880                                                                                         
   5881                                                                                         
   5882 
   5883                                                                                         
   5884 <h3 class="sectionHead"><span class="titlemark">7  </span> <a 
   5885  id="x1-950007"></a>Floor type 1 setup and decode</h3>
   5886 <!--l. 6--><p class="noindent" >
   5887 <h4 class="subsectionHead"><span class="titlemark">7.1  </span> <a 
   5888  id="x1-960007.1"></a>Overview</h4>
   5889 <!--l. 8--><p class="noindent" >Vorbis floor type one uses a piecewise straight-line representation to encode a spectral envelope
   5890 curve. The representation plots this curve mechanically on a linear frequency axis and a
   5891 logarithmic (dB) amplitude axis. The integer plotting algorithm used is similar to Bresenham&#8217;s
   5892 algorithm.
   5893 <!--l. 16--><p class="noindent" >
   5894 <h4 class="subsectionHead"><span class="titlemark">7.2  </span> <a 
   5895  id="x1-970007.2"></a>Floor 1 format</h4>
   5896 <!--l. 18--><p class="noindent" >
   5897 <h5 class="subsubsectionHead"><span class="titlemark">7.2.1  </span> <a 
   5898  id="x1-980007.2.1"></a>model</h5>
   5899 <!--l. 20--><p class="noindent" >Floor type one represents a spectral curve as a series of line segments. Synthesis constructs a
   5900 floor curve using iterative prediction in a process roughly equivalent to the following simplified
   5901 description:
   5902       <ul class="itemize1">
   5903       <li class="itemize">the first line segment (base case) is a logical line spanning from x&#x02D9;0,y&#x02D9;0 to x&#x02D9;1,y&#x02D9;1
   5904       where in the base case x&#x02D9;0=0 and x&#x02D9;1=[n], the full range of the spectral floor to be
   5905       computed.
   5906       </li>
   5907       <li class="itemize">the induction step chooses a point x&#x02D9;new within an existing logical line segment and
   5908       produces a y&#x02D9;new value at that point computed from the existing line&#8217;s y value at
   5909       x&#x02D9;new (as plotted by the line) and a difference value decoded from the bitstream
   5910       packet.
   5911                                                                                         
   5912 
   5913                                                                                         
   5914       </li>
   5915       <li class="itemize">floor  computation  produces  two  new  line  segments,  one  running  from  x&#x02D9;0,y&#x02D9;0  to
   5916       x&#x02D9;new,y&#x02D9;new and from x&#x02D9;new,y&#x02D9;new to x&#x02D9;1,y&#x02D9;1. This step is performed logically even if
   5917       y&#x02D9;new represents no change to the amplitude value at x&#x02D9;new so that later refinement
   5918       is additionally bounded at x&#x02D9;new.
   5919       </li>
   5920       <li class="itemize">the induction step repeats, using a list of x values specified in the codec setup header
   5921       at floor 1 initialization time. Computation is completed at the end of the x value list.
   5922       </li></ul>
   5923 <!--l. 48--><p class="noindent" >Consider the following example, with values chosen for ease of understanding rather than
   5924 representing typical configuration:
   5925 <!--l. 51--><p class="noindent" >For the below example, we assume a floor setup with an [n] of 128. The list of selected X values
   5926 in increasing order is 0,16,32,48,64,80,96,112 and 128. In list order, the values interleave as 0,
   5927 128, 64, 32, 96, 16, 48, 80 and 112. The corresponding list-order Y values as decoded from an
   5928 example packet are 110, 20, -5, -45, 0, -25, -10, 30 and -10. We compute the floor in the following
   5929 way, beginning with the first line:
   5930 <div class="center" 
   5931 >
   5932 <!--l. 59--><p class="noindent" >
   5933 
   5934 <!--l. 60--><p class="noindent" ><img 
   5935 src="floor1-1.png" alt="PIC"  
   5936 >
   5937 <br /> <div class="caption" 
   5938 ><span class="id">Figure&#x00A0;7: </span><span  
   5939 class="content">graph of example floor</span></div><!--tex4ht:label?: x1-980017 -->
   5940 </div>
   5941 <!--l. 64--><p class="noindent" >We now draw new logical lines to reflect the correction to new&#x02D9;Y, and iterate for X positions 32
   5942 and 96:
   5943 <div class="center" 
   5944 >
   5945 <!--l. 67--><p class="noindent" >
   5946 
   5947 <!--l. 68--><p class="noindent" ><img 
   5948 src="floor1-2.png" alt="PIC"  
   5949 >
   5950 <br /> <div class="caption" 
   5951 ><span class="id">Figure&#x00A0;8: </span><span  
   5952 class="content">graph of example floor</span></div><!--tex4ht:label?: x1-980028 -->
   5953 </div>
   5954 <!--l. 72--><p class="noindent" >Although the new Y value at X position 96 is unchanged, it is still used later as an endpoint for
   5955 further refinement. From here on, the pattern should be clear; we complete the floor computation
   5956 as follows:
   5957                                                                                         
   5958 
   5959                                                                                         
   5960 <div class="center" 
   5961 >
   5962 <!--l. 76--><p class="noindent" >
   5963 
   5964 <!--l. 77--><p class="noindent" ><img 
   5965 src="floor1-3.png" alt="PIC"  
   5966 >
   5967 <br /> <div class="caption" 
   5968 ><span class="id">Figure&#x00A0;9: </span><span  
   5969 class="content">graph of example floor</span></div><!--tex4ht:label?: x1-980039 -->
   5970 </div>
   5971 <div class="center" 
   5972 >
   5973 <!--l. 81--><p class="noindent" >
   5974 
   5975 <!--l. 82--><p class="noindent" ><img 
   5976 src="floor1-4.png" alt="PIC"  
   5977 >
   5978 <br /> <div class="caption" 
   5979 ><span class="id">Figure&#x00A0;10: </span><span  
   5980 class="content">graph of example floor</span></div><!--tex4ht:label?: x1-9800410 -->
   5981 </div>
   5982 <!--l. 86--><p class="noindent" >A more efficient algorithm with carefully defined integer rounding behavior is used for actual
   5983 decode, as described later. The actual algorithm splits Y value computation and line plotting
   5984 into two steps with modifications to the above algorithm to eliminate noise accumulation
   5985 through integer roundoff/truncation.
   5986 <!--l. 94--><p class="noindent" >
   5987 <h5 class="subsubsectionHead"><span class="titlemark">7.2.2  </span> <a 
   5988  id="x1-990007.2.2"></a>header decode</h5>
   5989 <!--l. 96--><p class="noindent" >A list of floor X values is stored in the packet header in interleaved format (used in list order
   5990 during packet decode and synthesis). This list is split into partitions, and each partition is
   5991 assigned to a partition class. X positions 0 and [n] are implicit and do not belong to an explicit
   5992 partition or partition class.
   5993 <!--l. 102--><p class="noindent" >A partition class consists of a representation vector width (the number of Y values which
   5994 the partition class encodes at once), a &#8217;subclass&#8217; value representing the number of
   5995 alternate entropy books the partition class may use in representing Y values, the list of
   5996 [subclass] books and a master book used to encode which alternate books were chosen
   5997 for representation in a given packet. The master/subclass mechanism is meant to be
   5998 used as a flexible representation cascade while still using codebooks only in a scalar
   5999 context.
   6000                                                                                         
   6001 
   6002                                                                                         
   6003 <!--l. 112--><p class="noindent" >
   6004 <div class="fancyvrb" id="fancyvrb28">
   6005 <a 
   6006  id="x1-99002r1"></a><span 
   6007 class="cmr-6">1</span><span 
   6008 class="cmtt-8">&#x00A0;</span><span 
   6009 class="cmtt-8">&#x00A0;</span>
   6010 <br class="fancyvrb" /><a 
   6011  id="x1-99004r2"></a><span 
   6012 class="cmr-6">2</span><span 
   6013 class="cmtt-8">&#x00A0;</span><span 
   6014 class="cmtt-8">&#x00A0;</span><span 
   6015 class="cmtt-8">&#x00A0;</span><span 
   6016 class="cmtt-8">&#x00A0;1)</span><span 
   6017 class="cmtt-8">&#x00A0;[floor1_partitions]</span><span 
   6018 class="cmtt-8">&#x00A0;=</span><span 
   6019 class="cmtt-8">&#x00A0;read</span><span 
   6020 class="cmtt-8">&#x00A0;5</span><span 
   6021 class="cmtt-8">&#x00A0;bits</span><span 
   6022 class="cmtt-8">&#x00A0;as</span><span 
   6023 class="cmtt-8">&#x00A0;unsigned</span><span 
   6024 class="cmtt-8">&#x00A0;integer</span>
   6025 <br class="fancyvrb" /><a 
   6026  id="x1-99006r3"></a><span 
   6027 class="cmr-6">3</span><span 
   6028 class="cmtt-8">&#x00A0;</span><span 
   6029 class="cmtt-8">&#x00A0;</span><span 
   6030 class="cmtt-8">&#x00A0;</span><span 
   6031 class="cmtt-8">&#x00A0;2)</span><span 
   6032 class="cmtt-8">&#x00A0;[maximum_class]</span><span 
   6033 class="cmtt-8">&#x00A0;=</span><span 
   6034 class="cmtt-8">&#x00A0;-1</span>
   6035 <br class="fancyvrb" /><a 
   6036  id="x1-99008r4"></a><span 
   6037 class="cmr-6">4</span><span 
   6038 class="cmtt-8">&#x00A0;</span><span 
   6039 class="cmtt-8">&#x00A0;</span><span 
   6040 class="cmtt-8">&#x00A0;</span><span 
   6041 class="cmtt-8">&#x00A0;3)</span><span 
   6042 class="cmtt-8">&#x00A0;iterate</span><span 
   6043 class="cmtt-8">&#x00A0;[i]</span><span 
   6044 class="cmtt-8">&#x00A0;over</span><span 
   6045 class="cmtt-8">&#x00A0;the</span><span 
   6046 class="cmtt-8">&#x00A0;range</span><span 
   6047 class="cmtt-8">&#x00A0;0</span><span 
   6048 class="cmtt-8">&#x00A0;...</span><span 
   6049 class="cmtt-8">&#x00A0;[floor1_partitions]-1</span><span 
   6050 class="cmtt-8">&#x00A0;</span><span 
   6051 class="cmsy-8">{</span>
   6052 <br class="fancyvrb" /><a 
   6053  id="x1-99010r5"></a><span 
   6054 class="cmr-6">5</span><span 
   6055 class="cmtt-8">&#x00A0;</span><span 
   6056 class="cmtt-8">&#x00A0;</span>
   6057 <br class="fancyvrb" /><a 
   6058  id="x1-99012r6"></a><span 
   6059 class="cmr-6">6</span><span 
   6060 class="cmtt-8">&#x00A0;</span><span 
   6061 class="cmtt-8">&#x00A0;</span><span 
   6062 class="cmtt-8">&#x00A0;</span><span 
   6063 class="cmtt-8">&#x00A0;</span><span 
   6064 class="cmtt-8">&#x00A0;</span><span 
   6065 class="cmtt-8">&#x00A0;</span><span 
   6066 class="cmtt-8">&#x00A0;</span><span 
   6067 class="cmtt-8">&#x00A0;</span><span 
   6068 class="cmtt-8">&#x00A0;</span><span 
   6069 class="cmtt-8">&#x00A0;4)</span><span 
   6070 class="cmtt-8">&#x00A0;vector</span><span 
   6071 class="cmtt-8">&#x00A0;[floor1_partition_class_list]</span><span 
   6072 class="cmtt-8">&#x00A0;element</span><span 
   6073 class="cmtt-8">&#x00A0;[i]</span><span 
   6074 class="cmtt-8">&#x00A0;=</span><span 
   6075 class="cmtt-8">&#x00A0;read</span><span 
   6076 class="cmtt-8">&#x00A0;4</span><span 
   6077 class="cmtt-8">&#x00A0;bits</span><span 
   6078 class="cmtt-8">&#x00A0;as</span><span 
   6079 class="cmtt-8">&#x00A0;unsigned</span><span 
   6080 class="cmtt-8">&#x00A0;integer</span>
   6081 <br class="fancyvrb" /><a 
   6082  id="x1-99014r7"></a><span 
   6083 class="cmr-6">7</span><span 
   6084 class="cmtt-8">&#x00A0;</span><span 
   6085 class="cmtt-8">&#x00A0;</span>
   6086 <br class="fancyvrb" /><a 
   6087  id="x1-99016r8"></a><span 
   6088 class="cmr-6">8</span><span 
   6089 class="cmtt-8">&#x00A0;</span><span 
   6090 class="cmtt-8">&#x00A0;</span><span 
   6091 class="cmtt-8">&#x00A0;</span><span 
   6092 class="cmtt-8">&#x00A0;</span><span 
   6093 class="cmtt-8">&#x00A0;</span><span 
   6094 class="cmtt-8">&#x00A0;</span><span 
   6095 class="cmtt-8">&#x00A0;</span><span 
   6096 class="cmsy-8">}</span>
   6097 <br class="fancyvrb" /><a 
   6098  id="x1-99018r9"></a><span 
   6099 class="cmr-6">9</span><span 
   6100 class="cmtt-8">&#x00A0;</span><span 
   6101 class="cmtt-8">&#x00A0;</span>
   6102 <br class="fancyvrb" /><a 
   6103  id="x1-99020r10"></a><span 
   6104 class="cmr-6">10</span><span 
   6105 class="cmtt-8">&#x00A0;</span><span 
   6106 class="cmtt-8">&#x00A0;</span><span 
   6107 class="cmtt-8">&#x00A0;</span><span 
   6108 class="cmtt-8">&#x00A0;5)</span><span 
   6109 class="cmtt-8">&#x00A0;[maximum_class]</span><span 
   6110 class="cmtt-8">&#x00A0;=</span><span 
   6111 class="cmtt-8">&#x00A0;largest</span><span 
   6112 class="cmtt-8">&#x00A0;integer</span><span 
   6113 class="cmtt-8">&#x00A0;scalar</span><span 
   6114 class="cmtt-8">&#x00A0;value</span><span 
   6115 class="cmtt-8">&#x00A0;in</span><span 
   6116 class="cmtt-8">&#x00A0;vector</span><span 
   6117 class="cmtt-8">&#x00A0;[floor1_partition_class_list]</span>
   6118 <br class="fancyvrb" /><a 
   6119  id="x1-99022r11"></a><span 
   6120 class="cmr-6">11</span><span 
   6121 class="cmtt-8">&#x00A0;</span><span 
   6122 class="cmtt-8">&#x00A0;</span><span 
   6123 class="cmtt-8">&#x00A0;</span><span 
   6124 class="cmtt-8">&#x00A0;6)</span><span 
   6125 class="cmtt-8">&#x00A0;iterate</span><span 
   6126 class="cmtt-8">&#x00A0;[i]</span><span 
   6127 class="cmtt-8">&#x00A0;over</span><span 
   6128 class="cmtt-8">&#x00A0;the</span><span 
   6129 class="cmtt-8">&#x00A0;range</span><span 
   6130 class="cmtt-8">&#x00A0;0</span><span 
   6131 class="cmtt-8">&#x00A0;...</span><span 
   6132 class="cmtt-8">&#x00A0;[maximum_class]</span><span 
   6133 class="cmtt-8">&#x00A0;</span><span 
   6134 class="cmsy-8">{</span>
   6135 <br class="fancyvrb" /><a 
   6136  id="x1-99024r12"></a><span 
   6137 class="cmr-6">12</span><span 
   6138 class="cmtt-8">&#x00A0;</span><span 
   6139 class="cmtt-8">&#x00A0;</span>
   6140 <br class="fancyvrb" /><a 
   6141  id="x1-99026r13"></a><span 
   6142 class="cmr-6">13</span><span 
   6143 class="cmtt-8">&#x00A0;</span><span 
   6144 class="cmtt-8">&#x00A0;</span><span 
   6145 class="cmtt-8">&#x00A0;</span><span 
   6146 class="cmtt-8">&#x00A0;</span><span 
   6147 class="cmtt-8">&#x00A0;</span><span 
   6148 class="cmtt-8">&#x00A0;</span><span 
   6149 class="cmtt-8">&#x00A0;</span><span 
   6150 class="cmtt-8">&#x00A0;</span><span 
   6151 class="cmtt-8">&#x00A0;</span><span 
   6152 class="cmtt-8">&#x00A0;7)</span><span 
   6153 class="cmtt-8">&#x00A0;vector</span><span 
   6154 class="cmtt-8">&#x00A0;[floor1_class_dimensions]</span><span 
   6155 class="cmtt-8">&#x00A0;element</span><span 
   6156 class="cmtt-8">&#x00A0;[i]</span><span 
   6157 class="cmtt-8">&#x00A0;=</span><span 
   6158 class="cmtt-8">&#x00A0;read</span><span 
   6159 class="cmtt-8">&#x00A0;3</span><span 
   6160 class="cmtt-8">&#x00A0;bits</span><span 
   6161 class="cmtt-8">&#x00A0;as</span><span 
   6162 class="cmtt-8">&#x00A0;unsigned</span><span 
   6163 class="cmtt-8">&#x00A0;integer</span><span 
   6164 class="cmtt-8">&#x00A0;and</span><span 
   6165 class="cmtt-8">&#x00A0;add</span><span 
   6166 class="cmtt-8">&#x00A0;1</span>
   6167 <br class="fancyvrb" /><a 
   6168  id="x1-99028r14"></a><span 
   6169 class="cmr-6">14</span><span 
   6170 class="cmtt-8">&#x00A0;</span><span 
   6171 class="cmtt-8">&#x00A0;    8)</span><span 
   6172 class="cmtt-8">&#x00A0;vector</span><span 
   6173 class="cmtt-8">&#x00A0;[floor1_class_subclasses]</span><span 
   6174 class="cmtt-8">&#x00A0;element</span><span 
   6175 class="cmtt-8">&#x00A0;[i]</span><span 
   6176 class="cmtt-8">&#x00A0;=</span><span 
   6177 class="cmtt-8">&#x00A0;read</span><span 
   6178 class="cmtt-8">&#x00A0;2</span><span 
   6179 class="cmtt-8">&#x00A0;bits</span><span 
   6180 class="cmtt-8">&#x00A0;as</span><span 
   6181 class="cmtt-8">&#x00A0;unsigned</span><span 
   6182 class="cmtt-8">&#x00A0;integer</span>
   6183 <br class="fancyvrb" /><a 
   6184  id="x1-99030r15"></a><span 
   6185 class="cmr-6">15</span><span 
   6186 class="cmtt-8">&#x00A0;</span><span 
   6187 class="cmtt-8">&#x00A0;</span><span 
   6188 class="cmtt-8">&#x00A0;</span><span 
   6189 class="cmtt-8">&#x00A0;</span><span 
   6190 class="cmtt-8">&#x00A0;</span><span 
   6191 class="cmtt-8">&#x00A0;</span><span 
   6192 class="cmtt-8">&#x00A0;</span><span 
   6193 class="cmtt-8">&#x00A0;</span><span 
   6194 class="cmtt-8">&#x00A0;</span><span 
   6195 class="cmtt-8">&#x00A0;9)</span><span 
   6196 class="cmtt-8">&#x00A0;if</span><span 
   6197 class="cmtt-8">&#x00A0;(</span><span 
   6198 class="cmtt-8">&#x00A0;vector</span><span 
   6199 class="cmtt-8">&#x00A0;[floor1_class_subclasses]</span><span 
   6200 class="cmtt-8">&#x00A0;element</span><span 
   6201 class="cmtt-8">&#x00A0;[i]</span><span 
   6202 class="cmtt-8">&#x00A0;is</span><span 
   6203 class="cmtt-8">&#x00A0;nonzero</span><span 
   6204 class="cmtt-8">&#x00A0;)</span><span 
   6205 class="cmtt-8">&#x00A0;</span><span 
   6206 class="cmsy-8">{</span>
   6207 <br class="fancyvrb" /><a 
   6208  id="x1-99032r16"></a><span 
   6209 class="cmr-6">16</span><span 
   6210 class="cmtt-8">&#x00A0;</span><span 
   6211 class="cmtt-8">&#x00A0;</span>
   6212 <br class="fancyvrb" /><a 
   6213  id="x1-99034r17"></a><span 
   6214 class="cmr-6">17</span><span 
   6215 class="cmtt-8">&#x00A0;</span><span 
   6216 class="cmtt-8">&#x00A0;</span><span 
   6217 class="cmtt-8">&#x00A0;</span><span 
   6218 class="cmtt-8">&#x00A0;</span><span 
   6219 class="cmtt-8">&#x00A0;</span><span 
   6220 class="cmtt-8">&#x00A0;</span><span 
   6221 class="cmtt-8">&#x00A0;</span><span 
   6222 class="cmtt-8">&#x00A0;</span><span 
   6223 class="cmtt-8">&#x00A0;</span><span 
   6224 class="cmtt-8">&#x00A0;</span><span 
   6225 class="cmtt-8">&#x00A0;</span><span 
   6226 class="cmtt-8">&#x00A0;</span><span 
   6227 class="cmtt-8">&#x00A0;</span><span 
   6228 class="cmtt-8">&#x00A0;</span><span 
   6229 class="cmtt-8">&#x00A0;10)</span><span 
   6230 class="cmtt-8">&#x00A0;vector</span><span 
   6231 class="cmtt-8">&#x00A0;[floor1_class_masterbooks]</span><span 
   6232 class="cmtt-8">&#x00A0;element</span><span 
   6233 class="cmtt-8">&#x00A0;[i]</span><span 
   6234 class="cmtt-8">&#x00A0;=</span><span 
   6235 class="cmtt-8">&#x00A0;read</span><span 
   6236 class="cmtt-8">&#x00A0;8</span><span 
   6237 class="cmtt-8">&#x00A0;bits</span><span 
   6238 class="cmtt-8">&#x00A0;as</span><span 
   6239 class="cmtt-8">&#x00A0;unsigned</span><span 
   6240 class="cmtt-8">&#x00A0;integer</span>
   6241 <br class="fancyvrb" /><a 
   6242  id="x1-99036r18"></a><span 
   6243 class="cmr-6">18</span><span 
   6244 class="cmtt-8">&#x00A0;</span><span 
   6245 class="cmtt-8">&#x00A0;</span>
   6246 <br class="fancyvrb" /><a 
   6247  id="x1-99038r19"></a><span 
   6248 class="cmr-6">19</span><span 
   6249 class="cmtt-8">&#x00A0;</span><span 
   6250 class="cmtt-8">&#x00A0;</span><span 
   6251 class="cmtt-8">&#x00A0;</span><span 
   6252 class="cmtt-8">&#x00A0;</span><span 
   6253 class="cmtt-8">&#x00A0;</span><span 
   6254 class="cmtt-8">&#x00A0;</span><span 
   6255 class="cmtt-8">&#x00A0;</span><span 
   6256 class="cmtt-8">&#x00A0;</span><span 
   6257 class="cmtt-8">&#x00A0;</span><span 
   6258 class="cmtt-8">&#x00A0;</span><span 
   6259 class="cmtt-8">&#x00A0;</span><span 
   6260 class="cmtt-8">&#x00A0;</span><span 
   6261 class="cmtt-8">&#x00A0;</span><span 
   6262 class="cmsy-8">}</span>
   6263 <br class="fancyvrb" /><a 
   6264  id="x1-99040r20"></a><span 
   6265 class="cmr-6">20</span><span 
   6266 class="cmtt-8">&#x00A0;</span><span 
   6267 class="cmtt-8">&#x00A0;</span>
   6268 <br class="fancyvrb" /><a 
   6269  id="x1-99042r21"></a><span 
   6270 class="cmr-6">21</span><span 
   6271 class="cmtt-8">&#x00A0;</span><span 
   6272 class="cmtt-8">&#x00A0;</span><span 
   6273 class="cmtt-8">&#x00A0;</span><span 
   6274 class="cmtt-8">&#x00A0;</span><span 
   6275 class="cmtt-8">&#x00A0;</span><span 
   6276 class="cmtt-8">&#x00A0;</span><span 
   6277 class="cmtt-8">&#x00A0;</span><span 
   6278 class="cmtt-8">&#x00A0;</span><span 
   6279 class="cmtt-8">&#x00A0;11)</span><span 
   6280 class="cmtt-8">&#x00A0;iterate</span><span 
   6281 class="cmtt-8">&#x00A0;[j]</span><span 
   6282 class="cmtt-8">&#x00A0;over</span><span 
   6283 class="cmtt-8">&#x00A0;the</span><span 
   6284 class="cmtt-8">&#x00A0;range</span><span 
   6285 class="cmtt-8">&#x00A0;0</span><span 
   6286 class="cmtt-8">&#x00A0;...</span><span 
   6287 class="cmtt-8">&#x00A0;(2</span><span 
   6288 class="cmtt-8">&#x00A0;exponent</span><span 
   6289 class="cmtt-8">&#x00A0;[floor1_class_subclasses]</span><span 
   6290 class="cmtt-8">&#x00A0;element</span><span 
   6291 class="cmtt-8">&#x00A0;[i])</span><span 
   6292 class="cmtt-8">&#x00A0;-</span><span 
   6293 class="cmtt-8">&#x00A0;1</span><span 
   6294 class="cmtt-8">&#x00A0;</span><span 
   6295 class="cmsy-8">{</span>
   6296 <br class="fancyvrb" /><a 
   6297  id="x1-99044r22"></a><span 
   6298 class="cmr-6">22</span><span 
   6299 class="cmtt-8">&#x00A0;</span><span 
   6300 class="cmtt-8">&#x00A0;</span>
   6301 <br class="fancyvrb" /><a 
   6302  id="x1-99046r23"></a><span 
   6303 class="cmr-6">23</span><span 
   6304 class="cmtt-8">&#x00A0;</span><span 
   6305 class="cmtt-8">&#x00A0;</span><span 
   6306 class="cmtt-8">&#x00A0;</span><span 
   6307 class="cmtt-8">&#x00A0;</span><span 
   6308 class="cmtt-8">&#x00A0;</span><span 
   6309 class="cmtt-8">&#x00A0;</span><span 
   6310 class="cmtt-8">&#x00A0;</span><span 
   6311 class="cmtt-8">&#x00A0;</span><span 
   6312 class="cmtt-8">&#x00A0;</span><span 
   6313 class="cmtt-8">&#x00A0;</span><span 
   6314 class="cmtt-8">&#x00A0;</span><span 
   6315 class="cmtt-8">&#x00A0;</span><span 
   6316 class="cmtt-8">&#x00A0;</span><span 
   6317 class="cmtt-8">&#x00A0;</span><span 
   6318 class="cmtt-8">&#x00A0;12)</span><span 
   6319 class="cmtt-8">&#x00A0;array</span><span 
   6320 class="cmtt-8">&#x00A0;[floor1_subclass_books]</span><span 
   6321 class="cmtt-8">&#x00A0;element</span><span 
   6322 class="cmtt-8">&#x00A0;[i],[j]</span><span 
   6323 class="cmtt-8">&#x00A0;=</span>
   6324 <br class="fancyvrb" /><a 
   6325  id="x1-99048r24"></a><span 
   6326 class="cmr-6">24</span><span 
   6327 class="cmtt-8">&#x00A0;</span><span 
   6328 class="cmtt-8">&#x00A0;</span><span 
   6329 class="cmtt-8">&#x00A0;</span><span 
   6330 class="cmtt-8">&#x00A0;</span><span 
   6331 class="cmtt-8">&#x00A0;</span><span 
   6332 class="cmtt-8">&#x00A0;</span><span 
   6333 class="cmtt-8">&#x00A0;</span><span 
   6334 class="cmtt-8">&#x00A0;</span><span 
   6335 class="cmtt-8">&#x00A0;</span><span 
   6336 class="cmtt-8">&#x00A0;</span><span 
   6337 class="cmtt-8">&#x00A0;</span><span 
   6338 class="cmtt-8">&#x00A0;</span><span 
   6339 class="cmtt-8">&#x00A0;</span><span 
   6340 class="cmtt-8">&#x00A0;</span><span 
   6341 class="cmtt-8">&#x00A0;</span><span 
   6342 class="cmtt-8">&#x00A0;</span><span 
   6343 class="cmtt-8">&#x00A0;</span><span 
   6344 class="cmtt-8">&#x00A0;</span><span 
   6345 class="cmtt-8">&#x00A0;read</span><span 
   6346 class="cmtt-8">&#x00A0;8</span><span 
   6347 class="cmtt-8">&#x00A0;bits</span><span 
   6348 class="cmtt-8">&#x00A0;as</span><span 
   6349 class="cmtt-8">&#x00A0;unsigned</span><span 
   6350 class="cmtt-8">&#x00A0;integer</span><span 
   6351 class="cmtt-8">&#x00A0;and</span><span 
   6352 class="cmtt-8">&#x00A0;subtract</span><span 
   6353 class="cmtt-8">&#x00A0;one</span>
   6354 <br class="fancyvrb" /><a 
   6355  id="x1-99050r25"></a><span 
   6356 class="cmr-6">25</span><span 
   6357 class="cmtt-8">&#x00A0;</span><span 
   6358 class="cmtt-8">&#x00A0;</span><span 
   6359 class="cmtt-8">&#x00A0;</span><span 
   6360 class="cmtt-8">&#x00A0;</span><span 
   6361 class="cmtt-8">&#x00A0;</span><span 
   6362 class="cmtt-8">&#x00A0;</span><span 
   6363 class="cmtt-8">&#x00A0;</span><span 
   6364 class="cmtt-8">&#x00A0;</span><span 
   6365 class="cmtt-8">&#x00A0;</span><span 
   6366 class="cmtt-8">&#x00A0;</span><span 
   6367 class="cmtt-8">&#x00A0;</span><span 
   6368 class="cmtt-8">&#x00A0;</span><span 
   6369 class="cmtt-8">&#x00A0;</span><span 
   6370 class="cmsy-8">}</span>
   6371 <br class="fancyvrb" /><a 
   6372  id="x1-99052r26"></a><span 
   6373 class="cmr-6">26</span><span 
   6374 class="cmtt-8">&#x00A0;</span><span 
   6375 class="cmtt-8">&#x00A0;</span><span 
   6376 class="cmtt-8">&#x00A0;</span><span 
   6377 class="cmtt-8">&#x00A0;</span><span 
   6378 class="cmtt-8">&#x00A0;</span><span 
   6379 class="cmtt-8">&#x00A0;</span><span 
   6380 class="cmtt-8">&#x00A0;</span><span 
   6381 class="cmtt-8">&#x00A0;</span><span 
   6382 class="cmsy-8">}</span>
   6383 <br class="fancyvrb" /><a 
   6384  id="x1-99054r27"></a><span 
   6385 class="cmr-6">27</span><span 
   6386 class="cmtt-8">&#x00A0;</span><span 
   6387 class="cmtt-8">&#x00A0;</span>
   6388 <br class="fancyvrb" /><a 
   6389  id="x1-99056r28"></a><span 
   6390 class="cmr-6">28</span><span 
   6391 class="cmtt-8">&#x00A0;</span><span 
   6392 class="cmtt-8">&#x00A0;</span><span 
   6393 class="cmtt-8">&#x00A0;13)</span><span 
   6394 class="cmtt-8">&#x00A0;[floor1_multiplier]</span><span 
   6395 class="cmtt-8">&#x00A0;=</span><span 
   6396 class="cmtt-8">&#x00A0;read</span><span 
   6397 class="cmtt-8">&#x00A0;2</span><span 
   6398 class="cmtt-8">&#x00A0;bits</span><span 
   6399 class="cmtt-8">&#x00A0;as</span><span 
   6400 class="cmtt-8">&#x00A0;unsigned</span><span 
   6401 class="cmtt-8">&#x00A0;integer</span><span 
   6402 class="cmtt-8">&#x00A0;and</span><span 
   6403 class="cmtt-8">&#x00A0;add</span><span 
   6404 class="cmtt-8">&#x00A0;one</span>
   6405 <br class="fancyvrb" /><a 
   6406  id="x1-99058r29"></a><span 
   6407 class="cmr-6">29</span><span 
   6408 class="cmtt-8">&#x00A0;</span><span 
   6409 class="cmtt-8">&#x00A0;</span><span 
   6410 class="cmtt-8">&#x00A0;14)</span><span 
   6411 class="cmtt-8">&#x00A0;[rangebits]</span><span 
   6412 class="cmtt-8">&#x00A0;=</span><span 
   6413 class="cmtt-8">&#x00A0;read</span><span 
   6414 class="cmtt-8">&#x00A0;4</span><span 
   6415 class="cmtt-8">&#x00A0;bits</span><span 
   6416 class="cmtt-8">&#x00A0;as</span><span 
   6417 class="cmtt-8">&#x00A0;unsigned</span><span 
   6418 class="cmtt-8">&#x00A0;integer</span>
   6419 <br class="fancyvrb" /><a 
   6420  id="x1-99060r30"></a><span 
   6421 class="cmr-6">30</span><span 
   6422 class="cmtt-8">&#x00A0;</span><span 
   6423 class="cmtt-8">&#x00A0;</span><span 
   6424 class="cmtt-8">&#x00A0;15)</span><span 
   6425 class="cmtt-8">&#x00A0;vector</span><span 
   6426 class="cmtt-8">&#x00A0;[floor1_X_list]</span><span 
   6427 class="cmtt-8">&#x00A0;element</span><span 
   6428 class="cmtt-8">&#x00A0;[0]</span><span 
   6429 class="cmtt-8">&#x00A0;=</span><span 
   6430 class="cmtt-8">&#x00A0;0</span>
   6431 <br class="fancyvrb" /><a 
   6432  id="x1-99062r31"></a><span 
   6433 class="cmr-6">31</span><span 
   6434 class="cmtt-8">&#x00A0;</span><span 
   6435 class="cmtt-8">&#x00A0;</span><span 
   6436 class="cmtt-8">&#x00A0;16)</span><span 
   6437 class="cmtt-8">&#x00A0;vector</span><span 
   6438 class="cmtt-8">&#x00A0;[floor1_X_list]</span><span 
   6439 class="cmtt-8">&#x00A0;element</span><span 
   6440 class="cmtt-8">&#x00A0;[1]</span><span 
   6441 class="cmtt-8">&#x00A0;=</span><span 
   6442 class="cmtt-8">&#x00A0;2</span><span 
   6443 class="cmtt-8">&#x00A0;exponent</span><span 
   6444 class="cmtt-8">&#x00A0;[rangebits];</span>
   6445 <br class="fancyvrb" /><a 
   6446  id="x1-99064r32"></a><span 
   6447 class="cmr-6">32</span><span 
   6448 class="cmtt-8">&#x00A0;</span><span 
   6449 class="cmtt-8">&#x00A0;</span><span 
   6450 class="cmtt-8">&#x00A0;17)</span><span 
   6451 class="cmtt-8">&#x00A0;[floor1_values]</span><span 
   6452 class="cmtt-8">&#x00A0;=</span><span 
   6453 class="cmtt-8">&#x00A0;2</span>
   6454 <br class="fancyvrb" /><a 
   6455  id="x1-99066r33"></a><span 
   6456 class="cmr-6">33</span><span 
   6457 class="cmtt-8">&#x00A0;</span><span 
   6458 class="cmtt-8">&#x00A0;</span><span 
   6459 class="cmtt-8">&#x00A0;18)</span><span 
   6460 class="cmtt-8">&#x00A0;iterate</span><span 
   6461 class="cmtt-8">&#x00A0;[i]</span><span 
   6462 class="cmtt-8">&#x00A0;over</span><span 
   6463 class="cmtt-8">&#x00A0;the</span><span 
   6464 class="cmtt-8">&#x00A0;range</span><span 
   6465 class="cmtt-8">&#x00A0;0</span><span 
   6466 class="cmtt-8">&#x00A0;...</span><span 
   6467 class="cmtt-8">&#x00A0;[floor1_partitions]-1</span><span 
   6468 class="cmtt-8">&#x00A0;</span><span 
   6469 class="cmsy-8">{</span>
   6470 <br class="fancyvrb" /><a 
   6471  id="x1-99068r34"></a><span 
   6472 class="cmr-6">34</span><span 
   6473 class="cmtt-8">&#x00A0;</span><span 
   6474 class="cmtt-8">&#x00A0;</span>
   6475 <br class="fancyvrb" /><a 
   6476  id="x1-99070r35"></a><span 
   6477 class="cmr-6">35</span><span 
   6478 class="cmtt-8">&#x00A0;</span><span 
   6479 class="cmtt-8">&#x00A0;</span><span 
   6480 class="cmtt-8">&#x00A0;</span><span 
   6481 class="cmtt-8">&#x00A0;</span><span 
   6482 class="cmtt-8">&#x00A0;</span><span 
   6483 class="cmtt-8">&#x00A0;</span><span 
   6484 class="cmtt-8">&#x00A0;</span><span 
   6485 class="cmtt-8">&#x00A0;</span><span 
   6486 class="cmtt-8">&#x00A0;19)</span><span 
   6487 class="cmtt-8">&#x00A0;[current_class_number]</span><span 
   6488 class="cmtt-8">&#x00A0;=</span><span 
   6489 class="cmtt-8">&#x00A0;vector</span><span 
   6490 class="cmtt-8">&#x00A0;[floor1_partition_class_list]</span><span 
   6491 class="cmtt-8">&#x00A0;element</span><span 
   6492 class="cmtt-8">&#x00A0;[i]</span>
   6493 <br class="fancyvrb" /><a 
   6494  id="x1-99072r36"></a><span 
   6495 class="cmr-6">36</span><span 
   6496 class="cmtt-8">&#x00A0;</span><span 
   6497 class="cmtt-8">&#x00A0;</span><span 
   6498 class="cmtt-8">&#x00A0;</span><span 
   6499 class="cmtt-8">&#x00A0;</span><span 
   6500 class="cmtt-8">&#x00A0;</span><span 
   6501 class="cmtt-8">&#x00A0;</span><span 
   6502 class="cmtt-8">&#x00A0;</span><span 
   6503 class="cmtt-8">&#x00A0;</span><span 
   6504 class="cmtt-8">&#x00A0;20)</span><span 
   6505 class="cmtt-8">&#x00A0;iterate</span><span 
   6506 class="cmtt-8">&#x00A0;[j]</span><span 
   6507 class="cmtt-8">&#x00A0;over</span><span 
   6508 class="cmtt-8">&#x00A0;the</span><span 
   6509 class="cmtt-8">&#x00A0;range</span><span 
   6510 class="cmtt-8">&#x00A0;0</span><span 
   6511 class="cmtt-8">&#x00A0;...</span><span 
   6512 class="cmtt-8">&#x00A0;([floor1_class_dimensions]</span><span 
   6513 class="cmtt-8">&#x00A0;element</span><span 
   6514 class="cmtt-8">&#x00A0;[current_class_number])-1</span><span 
   6515 class="cmtt-8">&#x00A0;</span><span 
   6516 class="cmsy-8">{</span>
   6517 <br class="fancyvrb" /><a 
   6518  id="x1-99074r37"></a><span 
   6519 class="cmr-6">37</span><span 
   6520 class="cmtt-8">&#x00A0;</span><span 
   6521 class="cmtt-8">&#x00A0;</span><span 
   6522 class="cmtt-8">&#x00A0;</span><span 
   6523 class="cmtt-8">&#x00A0;</span><span 
   6524 class="cmtt-8">&#x00A0;</span><span 
   6525 class="cmtt-8">&#x00A0;</span><span 
   6526 class="cmtt-8">&#x00A0;</span><span 
   6527 class="cmtt-8">&#x00A0;</span><span 
   6528 class="cmtt-8">&#x00A0;</span><span 
   6529 class="cmtt-8">&#x00A0;</span><span 
   6530 class="cmtt-8">&#x00A0;</span><span 
   6531 class="cmtt-8">&#x00A0;</span><span 
   6532 class="cmtt-8">&#x00A0;</span><span 
   6533 class="cmtt-8">&#x00A0;</span><span 
   6534 class="cmtt-8">&#x00A0;21)</span><span 
   6535 class="cmtt-8">&#x00A0;vector</span><span 
   6536 class="cmtt-8">&#x00A0;[floor1_X_list]</span><span 
   6537 class="cmtt-8">&#x00A0;element</span><span 
   6538 class="cmtt-8">&#x00A0;([floor1_values])</span><span 
   6539 class="cmtt-8">&#x00A0;=</span>
   6540 <br class="fancyvrb" /><a 
   6541  id="x1-99076r38"></a><span 
   6542 class="cmr-6">38</span><span 
   6543 class="cmtt-8">&#x00A0;</span><span 
   6544 class="cmtt-8">&#x00A0;</span><span 
   6545 class="cmtt-8">&#x00A0;</span><span 
   6546 class="cmtt-8">&#x00A0;</span><span 
   6547 class="cmtt-8">&#x00A0;</span><span 
   6548 class="cmtt-8">&#x00A0;</span><span 
   6549 class="cmtt-8">&#x00A0;</span><span 
   6550 class="cmtt-8">&#x00A0;</span><span 
   6551 class="cmtt-8">&#x00A0;</span><span 
   6552 class="cmtt-8">&#x00A0;</span><span 
   6553 class="cmtt-8">&#x00A0;</span><span 
   6554 class="cmtt-8">&#x00A0;</span><span 
   6555 class="cmtt-8">&#x00A0;</span><span 
   6556 class="cmtt-8">&#x00A0;</span><span 
   6557 class="cmtt-8">&#x00A0;</span><span 
   6558 class="cmtt-8">&#x00A0;</span><span 
   6559 class="cmtt-8">&#x00A0;</span><span 
   6560 class="cmtt-8">&#x00A0;</span><span 
   6561 class="cmtt-8">&#x00A0;read</span><span 
   6562 class="cmtt-8">&#x00A0;[rangebits]</span><span 
   6563 class="cmtt-8">&#x00A0;bits</span><span 
   6564 class="cmtt-8">&#x00A0;as</span><span 
   6565 class="cmtt-8">&#x00A0;unsigned</span><span 
   6566 class="cmtt-8">&#x00A0;integer</span>
   6567 <br class="fancyvrb" /><a 
   6568  id="x1-99078r39"></a><span 
   6569 class="cmr-6">39</span><span 
   6570 class="cmtt-8">&#x00A0;</span><span 
   6571 class="cmtt-8">&#x00A0;</span><span 
   6572 class="cmtt-8">&#x00A0;</span><span 
   6573 class="cmtt-8">&#x00A0;</span><span 
   6574 class="cmtt-8">&#x00A0;</span><span 
   6575 class="cmtt-8">&#x00A0;</span><span 
   6576 class="cmtt-8">&#x00A0;</span><span 
   6577 class="cmtt-8">&#x00A0;</span><span 
   6578 class="cmtt-8">&#x00A0;</span><span 
   6579 class="cmtt-8">&#x00A0;</span><span 
   6580 class="cmtt-8">&#x00A0;</span><span 
   6581 class="cmtt-8">&#x00A0;</span><span 
   6582 class="cmtt-8">&#x00A0;</span><span 
   6583 class="cmtt-8">&#x00A0;</span><span 
   6584 class="cmtt-8">&#x00A0;22)</span><span 
   6585 class="cmtt-8">&#x00A0;increment</span><span 
   6586 class="cmtt-8">&#x00A0;[floor1_values]</span><span 
   6587 class="cmtt-8">&#x00A0;by</span><span 
   6588 class="cmtt-8">&#x00A0;one</span>
   6589 <br class="fancyvrb" /><a 
   6590  id="x1-99080r40"></a><span 
   6591 class="cmr-6">40</span><span 
   6592 class="cmtt-8">&#x00A0;</span><span 
   6593 class="cmtt-8">&#x00A0;</span><span 
   6594 class="cmtt-8">&#x00A0;</span><span 
   6595 class="cmtt-8">&#x00A0;</span><span 
   6596 class="cmtt-8">&#x00A0;</span><span 
   6597 class="cmtt-8">&#x00A0;</span><span 
   6598 class="cmtt-8">&#x00A0;</span><span 
   6599 class="cmtt-8">&#x00A0;</span><span 
   6600 class="cmtt-8">&#x00A0;</span><span 
   6601 class="cmtt-8">&#x00A0;</span><span 
   6602 class="cmtt-8">&#x00A0;</span><span 
   6603 class="cmtt-8">&#x00A0;</span><span 
   6604 class="cmtt-8">&#x00A0;</span><span 
   6605 class="cmsy-8">}</span>
   6606 <br class="fancyvrb" /><a 
   6607  id="x1-99082r41"></a><span 
   6608 class="cmr-6">41</span><span 
   6609 class="cmtt-8">&#x00A0;</span><span 
   6610 class="cmtt-8">&#x00A0;</span><span 
   6611 class="cmtt-8">&#x00A0;</span><span 
   6612 class="cmtt-8">&#x00A0;</span><span 
   6613 class="cmtt-8">&#x00A0;</span><span 
   6614 class="cmtt-8">&#x00A0;</span><span 
   6615 class="cmtt-8">&#x00A0;</span><span 
   6616 class="cmsy-8">}</span>
   6617 <br class="fancyvrb" /><a 
   6618  id="x1-99084r42"></a><span 
   6619 class="cmr-6">42</span><span 
   6620 class="cmtt-8">&#x00A0;</span><span 
   6621 class="cmtt-8">&#x00A0;</span>
   6622 <br class="fancyvrb" /><a 
   6623  id="x1-99086r43"></a><span 
   6624 class="cmr-6">43</span><span 
   6625 class="cmtt-8">&#x00A0;</span><span 
   6626 class="cmtt-8">&#x00A0;</span><span 
   6627 class="cmtt-8">&#x00A0;23)</span><span 
   6628 class="cmtt-8">&#x00A0;done</span>
   6629 </div>
   6630 <!--l. 158--><p class="noindent" >An end-of-packet condition while reading any aspect of a floor 1 configuration during
   6631 setup renders a stream undecodable. In addition, a <span 
   6632 class="cmtt-12">[floor1_class_masterbooks] </span>or
   6633 <span 
   6634 class="cmtt-12">[floor1_subclass_books] </span>scalar element greater than the highest numbered codebook
   6635 configured in this stream is an error condition that renders the stream undecodable. All vector
   6636 [floor1&#x02D9;x&#x02D9;list] element values must be unique within the vector; a non-unique value renders the
   6637 stream undecodable.
   6638 <!--l. 167--><p class="noindent" ><span class="paragraphHead"><a 
   6639  id="x1-1000007.2.2"></a><span 
   6640 class="cmbx-12">packet decode</span></span>
   6641                                                                                         
   6642 
   6643                                                                                         
   6644 Packet decode begins by checking the <span 
   6645 class="cmtt-12">[nonzero] </span>flag:
   6646 <!--l. 171--><p class="noindent" >
   6647 <div class="fancyvrb" id="fancyvrb29">
   6648 <a 
   6649  id="x1-100002r1"></a><span 
   6650 class="cmr-6">1</span><span 
   6651 class="cmtt-8">&#x00A0;</span><span 
   6652 class="cmtt-8">&#x00A0;</span><span 
   6653 class="cmtt-8">&#x00A0;</span><span 
   6654 class="cmtt-8">&#x00A0;1)</span><span 
   6655 class="cmtt-8">&#x00A0;[nonzero]</span><span 
   6656 class="cmtt-8">&#x00A0;=</span><span 
   6657 class="cmtt-8">&#x00A0;read</span><span 
   6658 class="cmtt-8">&#x00A0;1</span><span 
   6659 class="cmtt-8">&#x00A0;bit</span><span 
   6660 class="cmtt-8">&#x00A0;as</span><span 
   6661 class="cmtt-8">&#x00A0;boolean</span>
   6662 </div>
   6663 <!--l. 175--><p class="noindent" >If <span 
   6664 class="cmtt-12">[nonzero] </span>is unset, that indicates this channel contained no audio energy in this frame.
   6665 Decode immediately returns a status indicating this floor curve (and thus this channel) is unused
   6666 this frame. (A return status of &#8217;unused&#8217; is different from decoding a floor that has all
   6667 points set to minimum representation amplitude, which happens to be approximately
   6668 -140dB).
   6669 <!--l. 183--><p class="noindent" >Assuming <span 
   6670 class="cmtt-12">[nonzero] </span>is set, decode proceeds as follows:
   6671 <!--l. 185--><p class="noindent" >
   6672 <div class="fancyvrb" id="fancyvrb30">
   6673 <a 
   6674  id="x1-100004r1"></a><span 
   6675 class="cmr-6">1</span><span 
   6676 class="cmtt-8">&#x00A0;</span><span 
   6677 class="cmtt-8">&#x00A0;</span><span 
   6678 class="cmtt-8">&#x00A0;</span><span 
   6679 class="cmtt-8">&#x00A0;1)</span><span 
   6680 class="cmtt-8">&#x00A0;[range]</span><span 
   6681 class="cmtt-8">&#x00A0;=</span><span 
   6682 class="cmtt-8">&#x00A0;vector</span><span 
   6683 class="cmtt-8">&#x00A0;</span><span 
   6684 class="cmsy-8">{</span><span 
   6685 class="cmtt-8">&#x00A0;256,</span><span 
   6686 class="cmtt-8">&#x00A0;128,</span><span 
   6687 class="cmtt-8">&#x00A0;86,</span><span 
   6688 class="cmtt-8">&#x00A0;64</span><span 
   6689 class="cmtt-8">&#x00A0;</span><span 
   6690 class="cmsy-8">}</span><span 
   6691 class="cmtt-8">&#x00A0;element</span><span 
   6692 class="cmtt-8">&#x00A0;([floor1_multiplier]-1)</span>
   6693 <br class="fancyvrb" /><a 
   6694  id="x1-100006r2"></a><span 
   6695 class="cmr-6">2</span><span 
   6696 class="cmtt-8">&#x00A0;</span><span 
   6697 class="cmtt-8">&#x00A0;</span><span 
   6698 class="cmtt-8">&#x00A0;</span><span 
   6699 class="cmtt-8">&#x00A0;2)</span><span 
   6700 class="cmtt-8">&#x00A0;vector</span><span 
   6701 class="cmtt-8">&#x00A0;[floor1_Y]</span><span 
   6702 class="cmtt-8">&#x00A0;element</span><span 
   6703 class="cmtt-8">&#x00A0;[0]</span><span 
   6704 class="cmtt-8">&#x00A0;=</span><span 
   6705 class="cmtt-8">&#x00A0;read</span><span 
   6706 class="cmtt-8">&#x00A0;</span><a 
   6707 href="#x1-1170009.2.1"><span 
   6708 class="cmtt-8">ilog</span></a><span 
   6709 class="cmtt-8">([range]-1)</span><span 
   6710 class="cmtt-8">&#x00A0;bits</span><span 
   6711 class="cmtt-8">&#x00A0;as</span><span 
   6712 class="cmtt-8">&#x00A0;unsigned</span><span 
   6713 class="cmtt-8">&#x00A0;integer</span>
   6714 <br class="fancyvrb" /><a 
   6715  id="x1-100008r3"></a><span 
   6716 class="cmr-6">3</span><span 
   6717 class="cmtt-8">&#x00A0;</span><span 
   6718 class="cmtt-8">&#x00A0;</span><span 
   6719 class="cmtt-8">&#x00A0;</span><span 
   6720 class="cmtt-8">&#x00A0;3)</span><span 
   6721 class="cmtt-8">&#x00A0;vector</span><span 
   6722 class="cmtt-8">&#x00A0;[floor1_Y]</span><span 
   6723 class="cmtt-8">&#x00A0;element</span><span 
   6724 class="cmtt-8">&#x00A0;[1]</span><span 
   6725 class="cmtt-8">&#x00A0;=</span><span 
   6726 class="cmtt-8">&#x00A0;read</span><span 
   6727 class="cmtt-8">&#x00A0;</span><a 
   6728 href="#x1-1170009.2.1"><span 
   6729 class="cmtt-8">ilog</span></a><span 
   6730 class="cmtt-8">([range]-1)</span><span 
   6731 class="cmtt-8">&#x00A0;bits</span><span 
   6732 class="cmtt-8">&#x00A0;as</span><span 
   6733 class="cmtt-8">&#x00A0;unsigned</span><span 
   6734 class="cmtt-8">&#x00A0;integer</span>
   6735 <br class="fancyvrb" /><a 
   6736  id="x1-100010r4"></a><span 
   6737 class="cmr-6">4</span><span 
   6738 class="cmtt-8">&#x00A0;</span><span 
   6739 class="cmtt-8">&#x00A0;</span><span 
   6740 class="cmtt-8">&#x00A0;</span><span 
   6741 class="cmtt-8">&#x00A0;4)</span><span 
   6742 class="cmtt-8">&#x00A0;[offset]</span><span 
   6743 class="cmtt-8">&#x00A0;=</span><span 
   6744 class="cmtt-8">&#x00A0;2;</span>
   6745 <br class="fancyvrb" /><a 
   6746  id="x1-100012r5"></a><span 
   6747 class="cmr-6">5</span><span 
   6748 class="cmtt-8">&#x00A0;</span><span 
   6749 class="cmtt-8">&#x00A0;</span><span 
   6750 class="cmtt-8">&#x00A0;</span><span 
   6751 class="cmtt-8">&#x00A0;5)</span><span 
   6752 class="cmtt-8">&#x00A0;iterate</span><span 
   6753 class="cmtt-8">&#x00A0;[i]</span><span 
   6754 class="cmtt-8">&#x00A0;over</span><span 
   6755 class="cmtt-8">&#x00A0;the</span><span 
   6756 class="cmtt-8">&#x00A0;range</span><span 
   6757 class="cmtt-8">&#x00A0;0</span><span 
   6758 class="cmtt-8">&#x00A0;...</span><span 
   6759 class="cmtt-8">&#x00A0;[floor1_partitions]-1</span><span 
   6760 class="cmtt-8">&#x00A0;</span><span 
   6761 class="cmsy-8">{</span>
   6762 <br class="fancyvrb" /><a 
   6763  id="x1-100014r6"></a><span 
   6764 class="cmr-6">6</span><span 
   6765 class="cmtt-8">&#x00A0;</span><span 
   6766 class="cmtt-8">&#x00A0;</span>
   6767 <br class="fancyvrb" /><a 
   6768  id="x1-100016r7"></a><span 
   6769 class="cmr-6">7</span><span 
   6770 class="cmtt-8">&#x00A0;</span><span 
   6771 class="cmtt-8">&#x00A0;</span><span 
   6772 class="cmtt-8">&#x00A0;</span><span 
   6773 class="cmtt-8">&#x00A0;</span><span 
   6774 class="cmtt-8">&#x00A0;</span><span 
   6775 class="cmtt-8">&#x00A0;</span><span 
   6776 class="cmtt-8">&#x00A0;</span><span 
   6777 class="cmtt-8">&#x00A0;</span><span 
   6778 class="cmtt-8">&#x00A0;6)</span><span 
   6779 class="cmtt-8">&#x00A0;[class]</span><span 
   6780 class="cmtt-8">&#x00A0;=</span><span 
   6781 class="cmtt-8">&#x00A0;vector</span><span 
   6782 class="cmtt-8">&#x00A0;[floor1_partition_class]</span><span 
   6783 class="cmtt-8">&#x00A0;</span><span 
   6784 class="cmtt-8">&#x00A0;element</span><span 
   6785 class="cmtt-8">&#x00A0;[i]</span>
   6786 <br class="fancyvrb" /><a 
   6787  id="x1-100018r8"></a><span 
   6788 class="cmr-6">8</span><span 
   6789 class="cmtt-8">&#x00A0;</span><span 
   6790 class="cmtt-8">&#x00A0;</span><span 
   6791 class="cmtt-8">&#x00A0;</span><span 
   6792 class="cmtt-8">&#x00A0;</span><span 
   6793 class="cmtt-8">&#x00A0;</span><span 
   6794 class="cmtt-8">&#x00A0;</span><span 
   6795 class="cmtt-8">&#x00A0;</span><span 
   6796 class="cmtt-8">&#x00A0;</span><span 
   6797 class="cmtt-8">&#x00A0;7)</span><span 
   6798 class="cmtt-8">&#x00A0;[cdim]</span><span 
   6799 class="cmtt-8">&#x00A0;</span><span 
   6800 class="cmtt-8">&#x00A0;=</span><span 
   6801 class="cmtt-8">&#x00A0;vector</span><span 
   6802 class="cmtt-8">&#x00A0;[floor1_class_dimensions]</span><span 
   6803 class="cmtt-8">&#x00A0;element</span><span 
   6804 class="cmtt-8">&#x00A0;[class]</span>
   6805 <br class="fancyvrb" /><a 
   6806  id="x1-100020r9"></a><span 
   6807 class="cmr-6">9</span><span 
   6808 class="cmtt-8">&#x00A0;</span><span 
   6809 class="cmtt-8">&#x00A0;</span><span 
   6810 class="cmtt-8">&#x00A0;</span><span 
   6811 class="cmtt-8">&#x00A0;</span><span 
   6812 class="cmtt-8">&#x00A0;</span><span 
   6813 class="cmtt-8">&#x00A0;</span><span 
   6814 class="cmtt-8">&#x00A0;</span><span 
   6815 class="cmtt-8">&#x00A0;</span><span 
   6816 class="cmtt-8">&#x00A0;8)</span><span 
   6817 class="cmtt-8">&#x00A0;[cbits]</span><span 
   6818 class="cmtt-8">&#x00A0;=</span><span 
   6819 class="cmtt-8">&#x00A0;vector</span><span 
   6820 class="cmtt-8">&#x00A0;[floor1_class_subclasses]</span><span 
   6821 class="cmtt-8">&#x00A0;element</span><span 
   6822 class="cmtt-8">&#x00A0;[class]</span>
   6823 <br class="fancyvrb" /><a 
   6824  id="x1-100022r10"></a><span 
   6825 class="cmr-6">10</span><span 
   6826 class="cmtt-8">&#x00A0;</span><span 
   6827 class="cmtt-8">&#x00A0;</span><span 
   6828 class="cmtt-8">&#x00A0;</span><span 
   6829 class="cmtt-8">&#x00A0;</span><span 
   6830 class="cmtt-8">&#x00A0;</span><span 
   6831 class="cmtt-8">&#x00A0;</span><span 
   6832 class="cmtt-8">&#x00A0;</span><span 
   6833 class="cmtt-8">&#x00A0;</span><span 
   6834 class="cmtt-8">&#x00A0;9)</span><span 
   6835 class="cmtt-8">&#x00A0;[csub]</span><span 
   6836 class="cmtt-8">&#x00A0;</span><span 
   6837 class="cmtt-8">&#x00A0;=</span><span 
   6838 class="cmtt-8">&#x00A0;(2</span><span 
   6839 class="cmtt-8">&#x00A0;exponent</span><span 
   6840 class="cmtt-8">&#x00A0;[cbits])-1</span>
   6841 <br class="fancyvrb" /><a 
   6842  id="x1-100024r11"></a><span 
   6843 class="cmr-6">11</span><span 
   6844 class="cmtt-8">&#x00A0;</span><span 
   6845 class="cmtt-8">&#x00A0;</span><span 
   6846 class="cmtt-8">&#x00A0;</span><span 
   6847 class="cmtt-8">&#x00A0;</span><span 
   6848 class="cmtt-8">&#x00A0;</span><span 
   6849 class="cmtt-8">&#x00A0;</span><span 
   6850 class="cmtt-8">&#x00A0;</span><span 
   6851 class="cmtt-8">&#x00A0;10)</span><span 
   6852 class="cmtt-8">&#x00A0;[cval]</span><span 
   6853 class="cmtt-8">&#x00A0;</span><span 
   6854 class="cmtt-8">&#x00A0;=</span><span 
   6855 class="cmtt-8">&#x00A0;0</span>
   6856 <br class="fancyvrb" /><a 
   6857  id="x1-100026r12"></a><span 
   6858 class="cmr-6">12</span><span 
   6859 class="cmtt-8">&#x00A0;</span><span 
   6860 class="cmtt-8">&#x00A0;</span><span 
   6861 class="cmtt-8">&#x00A0;</span><span 
   6862 class="cmtt-8">&#x00A0;</span><span 
   6863 class="cmtt-8">&#x00A0;</span><span 
   6864 class="cmtt-8">&#x00A0;</span><span 
   6865 class="cmtt-8">&#x00A0;</span><span 
   6866 class="cmtt-8">&#x00A0;11)</span><span 
   6867 class="cmtt-8">&#x00A0;if</span><span 
   6868 class="cmtt-8">&#x00A0;(</span><span 
   6869 class="cmtt-8">&#x00A0;[cbits]</span><span 
   6870 class="cmtt-8">&#x00A0;is</span><span 
   6871 class="cmtt-8">&#x00A0;greater</span><span 
   6872 class="cmtt-8">&#x00A0;than</span><span 
   6873 class="cmtt-8">&#x00A0;zero</span><span 
   6874 class="cmtt-8">&#x00A0;)</span><span 
   6875 class="cmtt-8">&#x00A0;</span><span 
   6876 class="cmsy-8">{</span>
   6877 <br class="fancyvrb" /><a 
   6878  id="x1-100028r13"></a><span 
   6879 class="cmr-6">13</span><span 
   6880 class="cmtt-8">&#x00A0;</span><span 
   6881 class="cmtt-8">&#x00A0;</span>
   6882 <br class="fancyvrb" /><a 
   6883  id="x1-100030r14"></a><span 
   6884 class="cmr-6">14</span><span 
   6885 class="cmtt-8">&#x00A0;</span><span 
   6886 class="cmtt-8">&#x00A0;</span><span 
   6887 class="cmtt-8">&#x00A0;</span><span 
   6888 class="cmtt-8">&#x00A0;</span><span 
   6889 class="cmtt-8">&#x00A0;</span><span 
   6890 class="cmtt-8">&#x00A0;</span><span 
   6891 class="cmtt-8">&#x00A0;</span><span 
   6892 class="cmtt-8">&#x00A0;</span><span 
   6893 class="cmtt-8">&#x00A0;</span><span 
   6894 class="cmtt-8">&#x00A0;</span><span 
   6895 class="cmtt-8">&#x00A0;</span><span 
   6896 class="cmtt-8">&#x00A0;</span><span 
   6897 class="cmtt-8">&#x00A0;</span><span 
   6898 class="cmtt-8">&#x00A0;</span><span 
   6899 class="cmtt-8">&#x00A0;12)</span><span 
   6900 class="cmtt-8">&#x00A0;[cval]</span><span 
   6901 class="cmtt-8">&#x00A0;=</span><span 
   6902 class="cmtt-8">&#x00A0;read</span><span 
   6903 class="cmtt-8">&#x00A0;from</span><span 
   6904 class="cmtt-8">&#x00A0;packet</span><span 
   6905 class="cmtt-8">&#x00A0;using</span><span 
   6906 class="cmtt-8">&#x00A0;codebook</span><span 
   6907 class="cmtt-8">&#x00A0;number</span>
   6908 <br class="fancyvrb" /><a 
   6909  id="x1-100032r15"></a><span 
   6910 class="cmr-6">15</span><span 
   6911 class="cmtt-8">&#x00A0;</span><span 
   6912 class="cmtt-8">&#x00A0;</span><span 
   6913 class="cmtt-8">&#x00A0;</span><span 
   6914 class="cmtt-8">&#x00A0;</span><span 
   6915 class="cmtt-8">&#x00A0;</span><span 
   6916 class="cmtt-8">&#x00A0;</span><span 
   6917 class="cmtt-8">&#x00A0;</span><span 
   6918 class="cmtt-8">&#x00A0;</span><span 
   6919 class="cmtt-8">&#x00A0;</span><span 
   6920 class="cmtt-8">&#x00A0;</span><span 
   6921 class="cmtt-8">&#x00A0;</span><span 
   6922 class="cmtt-8">&#x00A0;</span><span 
   6923 class="cmtt-8">&#x00A0;</span><span 
   6924 class="cmtt-8">&#x00A0;</span><span 
   6925 class="cmtt-8">&#x00A0;</span><span 
   6926 class="cmtt-8">&#x00A0;</span><span 
   6927 class="cmtt-8">&#x00A0;</span><span 
   6928 class="cmtt-8">&#x00A0;</span><span 
   6929 class="cmtt-8">&#x00A0;(vector</span><span 
   6930 class="cmtt-8">&#x00A0;[floor1_class_masterbooks]</span><span 
   6931 class="cmtt-8">&#x00A0;element</span><span 
   6932 class="cmtt-8">&#x00A0;[class])</span><span 
   6933 class="cmtt-8">&#x00A0;in</span><span 
   6934 class="cmtt-8">&#x00A0;scalar</span><span 
   6935 class="cmtt-8">&#x00A0;context</span>
   6936 <br class="fancyvrb" /><a 
   6937  id="x1-100034r16"></a><span 
   6938 class="cmr-6">16</span><span 
   6939 class="cmtt-8">&#x00A0;</span><span 
   6940 class="cmtt-8">&#x00A0;</span><span 
   6941 class="cmtt-8">&#x00A0;</span><span 
   6942 class="cmtt-8">&#x00A0;</span><span 
   6943 class="cmtt-8">&#x00A0;</span><span 
   6944 class="cmtt-8">&#x00A0;</span><span 
   6945 class="cmtt-8">&#x00A0;</span><span 
   6946 class="cmtt-8">&#x00A0;</span><span 
   6947 class="cmtt-8">&#x00A0;</span><span 
   6948 class="cmtt-8">&#x00A0;</span><span 
   6949 class="cmtt-8">&#x00A0;</span><span 
   6950 class="cmtt-8">&#x00A0;</span><span 
   6951 class="cmsy-8">}</span>
   6952 <br class="fancyvrb" /><a 
   6953  id="x1-100036r17"></a><span 
   6954 class="cmr-6">17</span><span 
   6955 class="cmtt-8">&#x00A0;</span><span 
   6956 class="cmtt-8">&#x00A0;</span>
   6957 <br class="fancyvrb" /><a 
   6958  id="x1-100038r18"></a><span 
   6959 class="cmr-6">18</span><span 
   6960 class="cmtt-8">&#x00A0;</span><span 
   6961 class="cmtt-8">&#x00A0;</span><span 
   6962 class="cmtt-8">&#x00A0;</span><span 
   6963 class="cmtt-8">&#x00A0;</span><span 
   6964 class="cmtt-8">&#x00A0;</span><span 
   6965 class="cmtt-8">&#x00A0;</span><span 
   6966 class="cmtt-8">&#x00A0;</span><span 
   6967 class="cmtt-8">&#x00A0;13)</span><span 
   6968 class="cmtt-8">&#x00A0;iterate</span><span 
   6969 class="cmtt-8">&#x00A0;[j]</span><span 
   6970 class="cmtt-8">&#x00A0;over</span><span 
   6971 class="cmtt-8">&#x00A0;the</span><span 
   6972 class="cmtt-8">&#x00A0;range</span><span 
   6973 class="cmtt-8">&#x00A0;0</span><span 
   6974 class="cmtt-8">&#x00A0;...</span><span 
   6975 class="cmtt-8">&#x00A0;[cdim]-1</span><span 
   6976 class="cmtt-8">&#x00A0;</span><span 
   6977 class="cmsy-8">{</span>
   6978 <br class="fancyvrb" /><a 
   6979  id="x1-100040r19"></a><span 
   6980 class="cmr-6">19</span><span 
   6981 class="cmtt-8">&#x00A0;</span><span 
   6982 class="cmtt-8">&#x00A0;</span>
   6983 <br class="fancyvrb" /><a 
   6984  id="x1-100042r20"></a><span 
   6985 class="cmr-6">20</span><span 
   6986 class="cmtt-8">&#x00A0;</span><span 
   6987 class="cmtt-8">&#x00A0;</span><span 
   6988 class="cmtt-8">&#x00A0;</span><span 
   6989 class="cmtt-8">&#x00A0;</span><span 
   6990 class="cmtt-8">&#x00A0;</span><span 
   6991 class="cmtt-8">&#x00A0;</span><span 
   6992 class="cmtt-8">&#x00A0;</span><span 
   6993 class="cmtt-8">&#x00A0;</span><span 
   6994 class="cmtt-8">&#x00A0;</span><span 
   6995 class="cmtt-8">&#x00A0;</span><span 
   6996 class="cmtt-8">&#x00A0;</span><span 
   6997 class="cmtt-8">&#x00A0;</span><span 
   6998 class="cmtt-8">&#x00A0;</span><span 
   6999 class="cmtt-8">&#x00A0;</span><span 
   7000 class="cmtt-8">&#x00A0;14)</span><span 
   7001 class="cmtt-8">&#x00A0;[book]</span><span 
   7002 class="cmtt-8">&#x00A0;=</span><span 
   7003 class="cmtt-8">&#x00A0;array</span><span 
   7004 class="cmtt-8">&#x00A0;[floor1_subclass_books]</span><span 
   7005 class="cmtt-8">&#x00A0;element</span><span 
   7006 class="cmtt-8">&#x00A0;[class],([cval]</span><span 
   7007 class="cmtt-8">&#x00A0;bitwise</span><span 
   7008 class="cmtt-8">&#x00A0;AND</span><span 
   7009 class="cmtt-8">&#x00A0;[csub])</span>
   7010 <br class="fancyvrb" /><a 
   7011  id="x1-100044r21"></a><span 
   7012 class="cmr-6">21</span><span 
   7013 class="cmtt-8">&#x00A0;</span><span 
   7014 class="cmtt-8">&#x00A0;</span><span 
   7015 class="cmtt-8">&#x00A0;</span><span 
   7016 class="cmtt-8">&#x00A0;</span><span 
   7017 class="cmtt-8">&#x00A0;</span><span 
   7018 class="cmtt-8">&#x00A0;</span><span 
   7019 class="cmtt-8">&#x00A0;</span><span 
   7020 class="cmtt-8">&#x00A0;</span><span 
   7021 class="cmtt-8">&#x00A0;</span><span 
   7022 class="cmtt-8">&#x00A0;</span><span 
   7023 class="cmtt-8">&#x00A0;</span><span 
   7024 class="cmtt-8">&#x00A0;</span><span 
   7025 class="cmtt-8">&#x00A0;</span><span 
   7026 class="cmtt-8">&#x00A0;</span><span 
   7027 class="cmtt-8">&#x00A0;15)</span><span 
   7028 class="cmtt-8">&#x00A0;[cval]</span><span 
   7029 class="cmtt-8">&#x00A0;=</span><span 
   7030 class="cmtt-8">&#x00A0;[cval]</span><span 
   7031 class="cmtt-8">&#x00A0;right</span><span 
   7032 class="cmtt-8">&#x00A0;shifted</span><span 
   7033 class="cmtt-8">&#x00A0;[cbits]</span><span 
   7034 class="cmtt-8">&#x00A0;bits</span>
   7035 <br class="fancyvrb" /><a 
   7036  id="x1-100046r22"></a><span 
   7037 class="cmr-6">22</span><span 
   7038 class="cmtt-8">&#x00A0;</span><span 
   7039 class="cmtt-8">&#x00A0;    </span><span 
   7040 class="cmtt-8">&#x00A0;</span><span 
   7041 class="cmtt-8">&#x00A0;</span><span 
   7042 class="cmtt-8">&#x00A0;</span><span 
   7043 class="cmtt-8">&#x00A0;</span><span 
   7044 class="cmtt-8">&#x00A0;16)</span><span 
   7045 class="cmtt-8">&#x00A0;if</span><span 
   7046 class="cmtt-8">&#x00A0;(</span><span 
   7047 class="cmtt-8">&#x00A0;[book]</span><span 
   7048 class="cmtt-8">&#x00A0;is</span><span 
   7049 class="cmtt-8">&#x00A0;not</span><span 
   7050 class="cmtt-8">&#x00A0;less</span><span 
   7051 class="cmtt-8">&#x00A0;than</span><span 
   7052 class="cmtt-8">&#x00A0;zero</span><span 
   7053 class="cmtt-8">&#x00A0;)</span><span 
   7054 class="cmtt-8">&#x00A0;</span><span 
   7055 class="cmsy-8">{</span>
   7056 <br class="fancyvrb" /><a 
   7057  id="x1-100048r23"></a><span 
   7058 class="cmr-6">23</span><span 
   7059 class="cmtt-8">&#x00A0;</span><span 
   7060 class="cmtt-8">&#x00A0;</span>
   7061 <br class="fancyvrb" /><a 
   7062  id="x1-100050r24"></a><span 
   7063 class="cmr-6">24</span><span 
   7064 class="cmtt-8">&#x00A0;</span><span 
   7065 class="cmtt-8">&#x00A0;    </span><span 
   7066 class="cmtt-8">&#x00A0;</span><span 
   7067 class="cmtt-8">&#x00A0;</span><span 
   7068 class="cmtt-8">&#x00A0;</span><span 
   7069 class="cmtt-8">&#x00A0;</span><span 
   7070 class="cmtt-8">&#x00A0;</span><span 
   7071 class="cmtt-8">&#x00A0;</span><span 
   7072 class="cmtt-8">&#x00A0;</span><span 
   7073 class="cmtt-8">&#x00A0;</span><span 
   7074 class="cmtt-8">&#x00A0;</span><span 
   7075 class="cmtt-8">&#x00A0;</span><span 
   7076 class="cmtt-8">&#x00A0;17)</span><span 
   7077 class="cmtt-8">&#x00A0;vector</span><span 
   7078 class="cmtt-8">&#x00A0;[floor1_Y]</span><span 
   7079 class="cmtt-8">&#x00A0;element</span><span 
   7080 class="cmtt-8">&#x00A0;([j]+[offset])</span><span 
   7081 class="cmtt-8">&#x00A0;=</span><span 
   7082 class="cmtt-8">&#x00A0;read</span><span 
   7083 class="cmtt-8">&#x00A0;from</span><span 
   7084 class="cmtt-8">&#x00A0;packet</span><span 
   7085 class="cmtt-8">&#x00A0;using</span><span 
   7086 class="cmtt-8">&#x00A0;codebook</span>
   7087 <br class="fancyvrb" /><a 
   7088  id="x1-100052r25"></a><span 
   7089 class="cmr-6">25</span><span 
   7090 class="cmtt-8">&#x00A0;</span><span 
   7091 class="cmtt-8">&#x00A0;</span><span 
   7092 class="cmtt-8">&#x00A0;</span><span 
   7093 class="cmtt-8">&#x00A0;</span><span 
   7094 class="cmtt-8">&#x00A0;</span><span 
   7095 class="cmtt-8">&#x00A0;</span><span 
   7096 class="cmtt-8">&#x00A0;</span><span 
   7097 class="cmtt-8">&#x00A0;</span><span 
   7098 class="cmtt-8">&#x00A0;</span><span 
   7099 class="cmtt-8">&#x00A0;</span><span 
   7100 class="cmtt-8">&#x00A0;</span><span 
   7101 class="cmtt-8">&#x00A0;</span><span 
   7102 class="cmtt-8">&#x00A0;</span><span 
   7103 class="cmtt-8">&#x00A0;</span><span 
   7104 class="cmtt-8">&#x00A0;</span><span 
   7105 class="cmtt-8">&#x00A0;</span><span 
   7106 class="cmtt-8">&#x00A0;</span><span 
   7107 class="cmtt-8">&#x00A0;</span><span 
   7108 class="cmtt-8">&#x00A0;</span><span 
   7109 class="cmtt-8">&#x00A0;</span><span 
   7110 class="cmtt-8">&#x00A0;</span><span 
   7111 class="cmtt-8">&#x00A0;</span><span 
   7112 class="cmtt-8">&#x00A0;</span><span 
   7113 class="cmtt-8">&#x00A0;</span><span 
   7114 class="cmtt-8">&#x00A0;[book]</span><span 
   7115 class="cmtt-8">&#x00A0;in</span><span 
   7116 class="cmtt-8">&#x00A0;scalar</span><span 
   7117 class="cmtt-8">&#x00A0;context</span>
   7118 <br class="fancyvrb" /><a 
   7119  id="x1-100054r26"></a><span 
   7120 class="cmr-6">26</span><span 
   7121 class="cmtt-8">&#x00A0;</span><span 
   7122 class="cmtt-8">&#x00A0;</span>
   7123 <br class="fancyvrb" /><a 
   7124  id="x1-100056r27"></a><span 
   7125 class="cmr-6">27</span><span 
   7126 class="cmtt-8">&#x00A0;</span><span 
   7127 class="cmtt-8">&#x00A0;</span><span 
   7128 class="cmtt-8">&#x00A0;</span><span 
   7129 class="cmtt-8">&#x00A0;</span><span 
   7130 class="cmtt-8">&#x00A0;</span><span 
   7131 class="cmtt-8">&#x00A0;</span><span 
   7132 class="cmtt-8">&#x00A0;</span><span 
   7133 class="cmtt-8">&#x00A0;</span><span 
   7134 class="cmtt-8">&#x00A0;</span><span 
   7135 class="cmtt-8">&#x00A0;</span><span 
   7136 class="cmtt-8">&#x00A0;</span><span 
   7137 class="cmtt-8">&#x00A0;</span><span 
   7138 class="cmtt-8">&#x00A0;</span><span 
   7139 class="cmtt-8">&#x00A0;</span><span 
   7140 class="cmtt-8">&#x00A0;</span><span 
   7141 class="cmtt-8">&#x00A0;</span><span 
   7142 class="cmtt-8">&#x00A0;</span><span 
   7143 class="cmtt-8">&#x00A0;</span><span 
   7144 class="cmtt-8">&#x00A0;</span><span 
   7145 class="cmsy-8">}</span><span 
   7146 class="cmtt-8">&#x00A0;else</span><span 
   7147 class="cmtt-8">&#x00A0;[book]</span><span 
   7148 class="cmtt-8">&#x00A0;is</span><span 
   7149 class="cmtt-8">&#x00A0;less</span><span 
   7150 class="cmtt-8">&#x00A0;than</span><span 
   7151 class="cmtt-8">&#x00A0;zero</span><span 
   7152 class="cmtt-8">&#x00A0;</span><span 
   7153 class="cmsy-8">{</span>
   7154 <br class="fancyvrb" /><a 
   7155  id="x1-100058r28"></a><span 
   7156 class="cmr-6">28</span><span 
   7157 class="cmtt-8">&#x00A0;</span><span 
   7158 class="cmtt-8">&#x00A0;</span>
   7159 <br class="fancyvrb" /><a 
   7160  id="x1-100060r29"></a><span 
   7161 class="cmr-6">29</span><span 
   7162 class="cmtt-8">&#x00A0;</span><span 
   7163 class="cmtt-8">&#x00A0;    </span><span 
   7164 class="cmtt-8">&#x00A0;</span><span 
   7165 class="cmtt-8">&#x00A0;</span><span 
   7166 class="cmtt-8">&#x00A0;</span><span 
   7167 class="cmtt-8">&#x00A0;</span><span 
   7168 class="cmtt-8">&#x00A0;</span><span 
   7169 class="cmtt-8">&#x00A0;</span><span 
   7170 class="cmtt-8">&#x00A0;</span><span 
   7171 class="cmtt-8">&#x00A0;</span><span 
   7172 class="cmtt-8">&#x00A0;</span><span 
   7173 class="cmtt-8">&#x00A0;</span><span 
   7174 class="cmtt-8">&#x00A0;18)</span><span 
   7175 class="cmtt-8">&#x00A0;vector</span><span 
   7176 class="cmtt-8">&#x00A0;[floor1_Y]</span><span 
   7177 class="cmtt-8">&#x00A0;element</span><span 
   7178 class="cmtt-8">&#x00A0;([j]+[offset])</span><span 
   7179 class="cmtt-8">&#x00A0;=</span><span 
   7180 class="cmtt-8">&#x00A0;0</span>
   7181 <br class="fancyvrb" /><a 
   7182  id="x1-100062r30"></a><span 
   7183 class="cmr-6">30</span><span 
   7184 class="cmtt-8">&#x00A0;</span><span 
   7185 class="cmtt-8">&#x00A0;</span>
   7186 <br class="fancyvrb" /><a 
   7187  id="x1-100064r31"></a><span 
   7188 class="cmr-6">31</span><span 
   7189 class="cmtt-8">&#x00A0;</span><span 
   7190 class="cmtt-8">&#x00A0;</span><span 
   7191 class="cmtt-8">&#x00A0;</span><span 
   7192 class="cmtt-8">&#x00A0;</span><span 
   7193 class="cmtt-8">&#x00A0;</span><span 
   7194 class="cmtt-8">&#x00A0;</span><span 
   7195 class="cmtt-8">&#x00A0;</span><span 
   7196 class="cmtt-8">&#x00A0;</span><span 
   7197 class="cmtt-8">&#x00A0;</span><span 
   7198 class="cmtt-8">&#x00A0;</span><span 
   7199 class="cmtt-8">&#x00A0;</span><span 
   7200 class="cmtt-8">&#x00A0;</span><span 
   7201 class="cmtt-8">&#x00A0;</span><span 
   7202 class="cmtt-8">&#x00A0;</span><span 
   7203 class="cmtt-8">&#x00A0;</span><span 
   7204 class="cmtt-8">&#x00A0;</span><span 
   7205 class="cmtt-8">&#x00A0;</span><span 
   7206 class="cmtt-8">&#x00A0;</span><span 
   7207 class="cmtt-8">&#x00A0;</span><span 
   7208 class="cmsy-8">}</span>
   7209 <br class="fancyvrb" /><a 
   7210  id="x1-100066r32"></a><span 
   7211 class="cmr-6">32</span><span 
   7212 class="cmtt-8">&#x00A0;</span><span 
   7213 class="cmtt-8">&#x00A0;</span><span 
   7214 class="cmtt-8">&#x00A0;</span><span 
   7215 class="cmtt-8">&#x00A0;</span><span 
   7216 class="cmtt-8">&#x00A0;</span><span 
   7217 class="cmtt-8">&#x00A0;</span><span 
   7218 class="cmtt-8">&#x00A0;</span><span 
   7219 class="cmtt-8">&#x00A0;</span><span 
   7220 class="cmtt-8">&#x00A0;</span><span 
   7221 class="cmtt-8">&#x00A0;</span><span 
   7222 class="cmtt-8">&#x00A0;</span><span 
   7223 class="cmtt-8">&#x00A0;</span><span 
   7224 class="cmsy-8">}</span>
   7225 <br class="fancyvrb" /><a 
   7226  id="x1-100068r33"></a><span 
   7227 class="cmr-6">33</span><span 
   7228 class="cmtt-8">&#x00A0;</span><span 
   7229 class="cmtt-8">&#x00A0;</span>
   7230 <br class="fancyvrb" /><a 
   7231  id="x1-100070r34"></a><span 
   7232 class="cmr-6">34</span><span 
   7233 class="cmtt-8">&#x00A0;</span><span 
   7234 class="cmtt-8">&#x00A0;</span><span 
   7235 class="cmtt-8">&#x00A0;</span><span 
   7236 class="cmtt-8">&#x00A0;</span><span 
   7237 class="cmtt-8">&#x00A0;</span><span 
   7238 class="cmtt-8">&#x00A0;</span><span 
   7239 class="cmtt-8">&#x00A0;</span><span 
   7240 class="cmtt-8">&#x00A0;19)</span><span 
   7241 class="cmtt-8">&#x00A0;[offset]</span><span 
   7242 class="cmtt-8">&#x00A0;=</span><span 
   7243 class="cmtt-8">&#x00A0;[offset]</span><span 
   7244 class="cmtt-8">&#x00A0;+</span><span 
   7245 class="cmtt-8">&#x00A0;[cdim]</span>
   7246 <br class="fancyvrb" /><a 
   7247  id="x1-100072r35"></a><span 
   7248 class="cmr-6">35</span><span 
   7249 class="cmtt-8">&#x00A0;</span><span 
   7250 class="cmtt-8">&#x00A0;</span>
   7251 <br class="fancyvrb" /><a 
   7252  id="x1-100074r36"></a><span 
   7253 class="cmr-6">36</span><span 
   7254 class="cmtt-8">&#x00A0;</span><span 
   7255 class="cmtt-8">&#x00A0;</span><span 
   7256 class="cmtt-8">&#x00A0;</span><span 
   7257 class="cmtt-8">&#x00A0;</span><span 
   7258 class="cmtt-8">&#x00A0;</span><span 
   7259 class="cmtt-8">&#x00A0;</span><span 
   7260 class="cmtt-8">&#x00A0;</span><span 
   7261 class="cmsy-8">}</span>
   7262 <br class="fancyvrb" /><a 
   7263  id="x1-100076r37"></a><span 
   7264 class="cmr-6">37</span><span 
   7265 class="cmtt-8">&#x00A0;</span><span 
   7266 class="cmtt-8">&#x00A0;</span>
   7267 <br class="fancyvrb" /><a 
   7268  id="x1-100078r38"></a><span 
   7269 class="cmr-6">38</span><span 
   7270 class="cmtt-8">&#x00A0;</span><span 
   7271 class="cmtt-8">&#x00A0;</span><span 
   7272 class="cmtt-8">&#x00A0;20)</span><span 
   7273 class="cmtt-8">&#x00A0;done</span>
   7274 </div>
   7275                                                                                         
   7276 
   7277                                                                                         
   7278 <!--l. 226--><p class="noindent" >An end-of-packet condition during curve decode should be considered a nominal occurrence; if
   7279 end-of-packet is reached during any read operation above, floor decode is to return &#8217;unused&#8217;
   7280 status as if the <span 
   7281 class="cmtt-12">[nonzero] </span>flag had been unset at the beginning of decode.
   7282 <!--l. 232--><p class="noindent" >Vector <span 
   7283 class="cmtt-12">[floor1_Y] </span>contains the values from packet decode needed for floor 1 synthesis.
   7284 <!--l. 237--><p class="noindent" ><span class="paragraphHead"><a 
   7285  id="x1-1010007.2.2"></a><span 
   7286 class="cmbx-12">curve computation</span></span>
   7287 Curve computation is split into two logical steps; the first step derives final Y amplitude values
   7288 from the encoded, wrapped difference values taken from the bitstream. The second step
   7289 plots the curve lines. Also, although zero-difference values are used in the iterative
   7290 prediction to find final Y values, these points are conditionally skipped during final
   7291 line computation in step two. Skipping zero-difference values allows a smoother line
   7292 fit.
   7293 <!--l. 247--><p class="noindent" >Although some aspects of the below algorithm look like inconsequential optimizations,
   7294 implementors are warned to follow the details closely. Deviation from implementing a strictly
   7295 equivalent algorithm can result in serious decoding errors.
   7296 <!--l. 252--><p class="noindent" >
   7297       <dl class="description"><dt class="description">
   7298 <span 
   7299 class="cmssbx-10x-x-120">step 1: amplitude value synthesis</span> </dt><dd 
   7300 class="description">
   7301       <!--l. 255--><p class="noindent" >Unwrap the always-positive-or-zero values read from the packet into +/- difference
   7302       values, then apply to line prediction.
   7303       <!--l. 258--><p class="noindent" >
   7304       <div class="fancyvrb" id="fancyvrb31">
   7305 <a 
   7306  id="x1-101002r1"></a><span 
   7307 class="cmr-6">1</span><span 
   7308 class="cmtt-8">&#x00A0;</span><span 
   7309 class="cmtt-8">&#x00A0;</span><span 
   7310 class="cmtt-8">&#x00A0;</span><span 
   7311 class="cmtt-8">&#x00A0;1)</span><span 
   7312 class="cmtt-8">&#x00A0;[range]</span><span 
   7313 class="cmtt-8">&#x00A0;=</span><span 
   7314 class="cmtt-8">&#x00A0;vector</span><span 
   7315 class="cmtt-8">&#x00A0;</span><span 
   7316 class="cmsy-8">{</span><span 
   7317 class="cmtt-8">&#x00A0;256,</span><span 
   7318 class="cmtt-8">&#x00A0;128,</span><span 
   7319 class="cmtt-8">&#x00A0;86,</span><span 
   7320 class="cmtt-8">&#x00A0;64</span><span 
   7321 class="cmtt-8">&#x00A0;</span><span 
   7322 class="cmsy-8">}</span><span 
   7323 class="cmtt-8">&#x00A0;element</span><span 
   7324 class="cmtt-8">&#x00A0;([floor1_multiplier]-1)</span>
   7325 <br class="fancyvrb" /><a 
   7326  id="x1-101004r2"></a><span 
   7327 class="cmr-6">2</span><span 
   7328 class="cmtt-8">&#x00A0;</span><span 
   7329 class="cmtt-8">&#x00A0;</span><span 
   7330 class="cmtt-8">&#x00A0;</span><span 
   7331 class="cmtt-8">&#x00A0;2)</span><span 
   7332 class="cmtt-8">&#x00A0;vector</span><span 
   7333 class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span 
   7334 class="cmtt-8">&#x00A0;element</span><span 
   7335 class="cmtt-8">&#x00A0;[0]</span><span 
   7336 class="cmtt-8">&#x00A0;=</span><span 
   7337 class="cmtt-8">&#x00A0;set</span>
   7338 <br class="fancyvrb" /><a 
   7339  id="x1-101006r3"></a><span 
   7340 class="cmr-6">3</span><span 
   7341 class="cmtt-8">&#x00A0;</span><span 
   7342 class="cmtt-8">&#x00A0;</span><span 
   7343 class="cmtt-8">&#x00A0;</span><span 
   7344 class="cmtt-8">&#x00A0;3)</span><span 
   7345 class="cmtt-8">&#x00A0;vector</span><span 
   7346 class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span 
   7347 class="cmtt-8">&#x00A0;element</span><span 
   7348 class="cmtt-8">&#x00A0;[1]</span><span 
   7349 class="cmtt-8">&#x00A0;=</span><span 
   7350 class="cmtt-8">&#x00A0;set</span>
   7351 <br class="fancyvrb" /><a 
   7352  id="x1-101008r4"></a><span 
   7353 class="cmr-6">4</span><span 
   7354 class="cmtt-8">&#x00A0;</span><span 
   7355 class="cmtt-8">&#x00A0;</span><span 
   7356 class="cmtt-8">&#x00A0;</span><span 
   7357 class="cmtt-8">&#x00A0;4)</span><span 
   7358 class="cmtt-8">&#x00A0;vector</span><span 
   7359 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span 
   7360 class="cmtt-8">&#x00A0;element</span><span 
   7361 class="cmtt-8">&#x00A0;[0]</span><span 
   7362 class="cmtt-8">&#x00A0;=</span><span 
   7363 class="cmtt-8">&#x00A0;vector</span><span 
   7364 class="cmtt-8">&#x00A0;[floor1_Y]</span><span 
   7365 class="cmtt-8">&#x00A0;element</span><span 
   7366 class="cmtt-8">&#x00A0;[0]</span>
   7367 <br class="fancyvrb" /><a 
   7368  id="x1-101010r5"></a><span 
   7369 class="cmr-6">5</span><span 
   7370 class="cmtt-8">&#x00A0;</span><span 
   7371 class="cmtt-8">&#x00A0;</span><span 
   7372 class="cmtt-8">&#x00A0;</span><span 
   7373 class="cmtt-8">&#x00A0;5)</span><span 
   7374 class="cmtt-8">&#x00A0;vector</span><span 
   7375 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span 
   7376 class="cmtt-8">&#x00A0;element</span><span 
   7377 class="cmtt-8">&#x00A0;[1]</span><span 
   7378 class="cmtt-8">&#x00A0;=</span><span 
   7379 class="cmtt-8">&#x00A0;vector</span><span 
   7380 class="cmtt-8">&#x00A0;[floor1_Y]</span><span 
   7381 class="cmtt-8">&#x00A0;element</span><span 
   7382 class="cmtt-8">&#x00A0;[1]</span>
   7383 <br class="fancyvrb" /><a 
   7384  id="x1-101012r6"></a><span 
   7385 class="cmr-6">6</span><span 
   7386 class="cmtt-8">&#x00A0;</span><span 
   7387 class="cmtt-8">&#x00A0;</span><span 
   7388 class="cmtt-8">&#x00A0;</span><span 
   7389 class="cmtt-8">&#x00A0;6)</span><span 
   7390 class="cmtt-8">&#x00A0;iterate</span><span 
   7391 class="cmtt-8">&#x00A0;[i]</span><span 
   7392 class="cmtt-8">&#x00A0;over</span><span 
   7393 class="cmtt-8">&#x00A0;the</span><span 
   7394 class="cmtt-8">&#x00A0;range</span><span 
   7395 class="cmtt-8">&#x00A0;2</span><span 
   7396 class="cmtt-8">&#x00A0;...</span><span 
   7397 class="cmtt-8">&#x00A0;[floor1_values]-1</span><span 
   7398 class="cmtt-8">&#x00A0;</span><span 
   7399 class="cmsy-8">{</span>
   7400 <br class="fancyvrb" /><a 
   7401  id="x1-101014r7"></a><span 
   7402 class="cmr-6">7</span><span 
   7403 class="cmtt-8">&#x00A0;</span><span 
   7404 class="cmtt-8">&#x00A0;</span>
   7405 <br class="fancyvrb" /><a 
   7406  id="x1-101016r8"></a><span 
   7407 class="cmr-6">8</span><span 
   7408 class="cmtt-8">&#x00A0;</span><span 
   7409 class="cmtt-8">&#x00A0;</span><span 
   7410 class="cmtt-8">&#x00A0;</span><span 
   7411 class="cmtt-8">&#x00A0;</span><span 
   7412 class="cmtt-8">&#x00A0;</span><span 
   7413 class="cmtt-8">&#x00A0;</span><span 
   7414 class="cmtt-8">&#x00A0;</span><span 
   7415 class="cmtt-8">&#x00A0;</span><span 
   7416 class="cmtt-8">&#x00A0;7)</span><span 
   7417 class="cmtt-8">&#x00A0;[low_neighbor_offset]</span><span 
   7418 class="cmtt-8">&#x00A0;=</span><span 
   7419 class="cmtt-8">&#x00A0;</span><a 
   7420 href="#x1-1200009.2.4"><span 
   7421 class="cmtt-8">low_neighbor</span></a><span 
   7422 class="cmtt-8">([floor1_X_list],[i])</span>
   7423 <br class="fancyvrb" /><a 
   7424  id="x1-101018r9"></a><span 
   7425 class="cmr-6">9</span><span 
   7426 class="cmtt-8">&#x00A0;</span><span 
   7427 class="cmtt-8">&#x00A0;</span><span 
   7428 class="cmtt-8">&#x00A0;</span><span 
   7429 class="cmtt-8">&#x00A0;</span><span 
   7430 class="cmtt-8">&#x00A0;</span><span 
   7431 class="cmtt-8">&#x00A0;</span><span 
   7432 class="cmtt-8">&#x00A0;</span><span 
   7433 class="cmtt-8">&#x00A0;</span><span 
   7434 class="cmtt-8">&#x00A0;8)</span><span 
   7435 class="cmtt-8">&#x00A0;[high_neighbor_offset]</span><span 
   7436 class="cmtt-8">&#x00A0;=</span><span 
   7437 class="cmtt-8">&#x00A0;</span><a 
   7438 href="#x1-1210009.2.5"><span 
   7439 class="cmtt-8">high_neighbor</span></a><span 
   7440 class="cmtt-8">([floor1_X_list],[i])</span>
   7441 <br class="fancyvrb" /><a 
   7442  id="x1-101020r10"></a><span 
   7443 class="cmr-6">10</span><span 
   7444 class="cmtt-8">&#x00A0;</span><span 
   7445 class="cmtt-8">&#x00A0;</span>
   7446 <br class="fancyvrb" /><a 
   7447  id="x1-101022r11"></a><span 
   7448 class="cmr-6">11</span><span 
   7449 class="cmtt-8">&#x00A0;</span><span 
   7450 class="cmtt-8">&#x00A0;</span><span 
   7451 class="cmtt-8">&#x00A0;</span><span 
   7452 class="cmtt-8">&#x00A0;</span><span 
   7453 class="cmtt-8">&#x00A0;</span><span 
   7454 class="cmtt-8">&#x00A0;</span><span 
   7455 class="cmtt-8">&#x00A0;</span><span 
   7456 class="cmtt-8">&#x00A0;</span><span 
   7457 class="cmtt-8">&#x00A0;9)</span><span 
   7458 class="cmtt-8">&#x00A0;[predicted]</span><span 
   7459 class="cmtt-8">&#x00A0;=</span><span 
   7460 class="cmtt-8">&#x00A0;</span><a 
   7461 href="#x1-1220009.2.6"><span 
   7462 class="cmtt-8">render_point</span></a><span 
   7463 class="cmtt-8">(</span><span 
   7464 class="cmtt-8">&#x00A0;vector</span><span 
   7465 class="cmtt-8">&#x00A0;[floor1_X_list]</span><span 
   7466 class="cmtt-8">&#x00A0;element</span><span 
   7467 class="cmtt-8">&#x00A0;[low_neighbor_offset],</span>
   7468 <br class="fancyvrb" /><a 
   7469  id="x1-101024r12"></a><span 
   7470 class="cmr-6">12</span><span 
   7471 class="cmtt-8">&#x00A0;</span><span 
   7472 class="cmtt-8">&#x00A0;                </span><span 
   7473 class="cmtt-8">&#x00A0;</span><span 
   7474 class="cmtt-8">&#x00A0;</span><span 
   7475 class="cmtt-8">&#x00A0;</span><span 
   7476 class="cmtt-8">&#x00A0;</span><span 
   7477 class="cmtt-8">&#x00A0;</span><span 
   7478 class="cmtt-8">&#x00A0;vector</span><span 
   7479 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span 
   7480 class="cmtt-8">&#x00A0;element</span><span 
   7481 class="cmtt-8">&#x00A0;[low_neighbor_offset],</span>
   7482 <br class="fancyvrb" /><a 
   7483  id="x1-101026r13"></a><span 
   7484 class="cmr-6">13</span><span 
   7485 class="cmtt-8">&#x00A0;</span><span 
   7486 class="cmtt-8">&#x00A0;</span><span 
   7487 class="cmtt-8">&#x00A0;</span><span 
   7488 class="cmtt-8">&#x00A0;</span><span 
   7489 class="cmtt-8">&#x00A0;</span><span 
   7490 class="cmtt-8">&#x00A0;</span><span 
   7491 class="cmtt-8">&#x00A0;</span><span 
   7492 class="cmtt-8">&#x00A0;</span><span 
   7493 class="cmtt-8">&#x00A0;</span><span 
   7494 class="cmtt-8">&#x00A0;</span><span 
   7495 class="cmtt-8">&#x00A0;</span><span 
   7496 class="cmtt-8">&#x00A0;</span><span 
   7497 class="cmtt-8">&#x00A0;</span><span 
   7498 class="cmtt-8">&#x00A0;</span><span 
   7499 class="cmtt-8">&#x00A0;</span><span 
   7500 class="cmtt-8">&#x00A0;</span><span 
   7501 class="cmtt-8">&#x00A0;</span><span 
   7502 class="cmtt-8">&#x00A0;</span><span 
   7503 class="cmtt-8">&#x00A0;</span><span 
   7504 class="cmtt-8">&#x00A0;</span><span 
   7505 class="cmtt-8">&#x00A0;</span><span 
   7506 class="cmtt-8">&#x00A0;</span><span 
   7507 class="cmtt-8">&#x00A0;</span><span 
   7508 class="cmtt-8">&#x00A0;</span><span 
   7509 class="cmtt-8">&#x00A0;</span><span 
   7510 class="cmtt-8">&#x00A0;</span><span 
   7511 class="cmtt-8">&#x00A0;</span><span 
   7512 class="cmtt-8">&#x00A0;</span><span 
   7513 class="cmtt-8">&#x00A0;</span><span 
   7514 class="cmtt-8">&#x00A0;</span><span 
   7515 class="cmtt-8">&#x00A0;</span><span 
   7516 class="cmtt-8">&#x00A0;</span><span 
   7517 class="cmtt-8">&#x00A0;</span><span 
   7518 class="cmtt-8">&#x00A0;</span><span 
   7519 class="cmtt-8">&#x00A0;</span><span 
   7520 class="cmtt-8">&#x00A0;</span><span 
   7521 class="cmtt-8">&#x00A0;</span><span 
   7522 class="cmtt-8">&#x00A0;</span><span 
   7523 class="cmtt-8">&#x00A0;</span><span 
   7524 class="cmtt-8">&#x00A0;vector</span><span 
   7525 class="cmtt-8">&#x00A0;[floor1_X_list]</span><span 
   7526 class="cmtt-8">&#x00A0;element</span><span 
   7527 class="cmtt-8">&#x00A0;[high_neighbor_offset],</span>
   7528 <br class="fancyvrb" /><a 
   7529  id="x1-101028r14"></a><span 
   7530 class="cmr-6">14</span><span 
   7531 class="cmtt-8">&#x00A0;</span><span 
   7532 class="cmtt-8">&#x00A0;                </span><span 
   7533 class="cmtt-8">&#x00A0;</span><span 
   7534 class="cmtt-8">&#x00A0;</span><span 
   7535 class="cmtt-8">&#x00A0;</span><span 
   7536 class="cmtt-8">&#x00A0;</span><span 
   7537 class="cmtt-8">&#x00A0;</span><span 
   7538 class="cmtt-8">&#x00A0;vector</span><span 
   7539 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span 
   7540 class="cmtt-8">&#x00A0;element</span><span 
   7541 class="cmtt-8">&#x00A0;[high_neighbor_offset],</span>
   7542 <br class="fancyvrb" /><a 
   7543  id="x1-101030r15"></a><span 
   7544 class="cmr-6">15</span><span 
   7545 class="cmtt-8">&#x00A0;</span><span 
   7546 class="cmtt-8">&#x00A0;</span><span 
   7547 class="cmtt-8">&#x00A0;</span><span 
   7548 class="cmtt-8">&#x00A0;</span><span 
   7549 class="cmtt-8">&#x00A0;</span><span 
   7550 class="cmtt-8">&#x00A0;</span><span 
   7551 class="cmtt-8">&#x00A0;</span><span 
   7552 class="cmtt-8">&#x00A0;</span><span 
   7553 class="cmtt-8">&#x00A0;</span><span 
   7554 class="cmtt-8">&#x00A0;</span><span 
   7555 class="cmtt-8">&#x00A0;</span><span 
   7556 class="cmtt-8">&#x00A0;</span><span 
   7557 class="cmtt-8">&#x00A0;</span><span 
   7558 class="cmtt-8">&#x00A0;</span><span 
   7559 class="cmtt-8">&#x00A0;</span><span 
   7560 class="cmtt-8">&#x00A0;</span><span 
   7561 class="cmtt-8">&#x00A0;</span><span 
   7562 class="cmtt-8">&#x00A0;</span><span 
   7563 class="cmtt-8">&#x00A0;</span><span 
   7564 class="cmtt-8">&#x00A0;</span><span 
   7565 class="cmtt-8">&#x00A0;</span><span 
   7566 class="cmtt-8">&#x00A0;</span><span 
   7567 class="cmtt-8">&#x00A0;</span><span 
   7568 class="cmtt-8">&#x00A0;</span><span 
   7569 class="cmtt-8">&#x00A0;</span><span 
   7570 class="cmtt-8">&#x00A0;</span><span 
   7571 class="cmtt-8">&#x00A0;</span><span 
   7572 class="cmtt-8">&#x00A0;</span><span 
   7573 class="cmtt-8">&#x00A0;</span><span 
   7574 class="cmtt-8">&#x00A0;</span><span 
   7575 class="cmtt-8">&#x00A0;</span><span 
   7576 class="cmtt-8">&#x00A0;</span><span 
   7577 class="cmtt-8">&#x00A0;</span><span 
   7578 class="cmtt-8">&#x00A0;</span><span 
   7579 class="cmtt-8">&#x00A0;</span><span 
   7580 class="cmtt-8">&#x00A0;</span><span 
   7581 class="cmtt-8">&#x00A0;</span><span 
   7582 class="cmtt-8">&#x00A0;</span><span 
   7583 class="cmtt-8">&#x00A0;</span><span 
   7584 class="cmtt-8">&#x00A0;vector</span><span 
   7585 class="cmtt-8">&#x00A0;[floor1_X_list]</span><span 
   7586 class="cmtt-8">&#x00A0;element</span><span 
   7587 class="cmtt-8">&#x00A0;[i]</span><span 
   7588 class="cmtt-8">&#x00A0;)</span>
   7589 <br class="fancyvrb" /><a 
   7590  id="x1-101032r16"></a><span 
   7591 class="cmr-6">16</span><span 
   7592 class="cmtt-8">&#x00A0;</span><span 
   7593 class="cmtt-8">&#x00A0;</span>
   7594 <br class="fancyvrb" /><a 
   7595  id="x1-101034r17"></a><span 
   7596 class="cmr-6">17</span><span 
   7597 class="cmtt-8">&#x00A0;</span><span 
   7598 class="cmtt-8">&#x00A0;</span><span 
   7599 class="cmtt-8">&#x00A0;</span><span 
   7600 class="cmtt-8">&#x00A0;</span><span 
   7601 class="cmtt-8">&#x00A0;</span><span 
   7602 class="cmtt-8">&#x00A0;</span><span 
   7603 class="cmtt-8">&#x00A0;</span><span 
   7604 class="cmtt-8">&#x00A0;10)</span><span 
   7605 class="cmtt-8">&#x00A0;[val]</span><span 
   7606 class="cmtt-8">&#x00A0;=</span><span 
   7607 class="cmtt-8">&#x00A0;vector</span><span 
   7608 class="cmtt-8">&#x00A0;[floor1_Y]</span><span 
   7609 class="cmtt-8">&#x00A0;element</span><span 
   7610 class="cmtt-8">&#x00A0;[i]</span>
   7611 <br class="fancyvrb" /><a 
   7612  id="x1-101036r18"></a><span 
   7613 class="cmr-6">18</span><span 
   7614 class="cmtt-8">&#x00A0;</span><span 
   7615 class="cmtt-8">&#x00A0;</span><span 
   7616 class="cmtt-8">&#x00A0;</span><span 
   7617 class="cmtt-8">&#x00A0;</span><span 
   7618 class="cmtt-8">&#x00A0;</span><span 
   7619 class="cmtt-8">&#x00A0;</span><span 
   7620 class="cmtt-8">&#x00A0;</span><span 
   7621 class="cmtt-8">&#x00A0;11)</span><span 
   7622 class="cmtt-8">&#x00A0;[highroom]</span><span 
   7623 class="cmtt-8">&#x00A0;=</span><span 
   7624 class="cmtt-8">&#x00A0;[range]</span><span 
   7625 class="cmtt-8">&#x00A0;-</span><span 
   7626 class="cmtt-8">&#x00A0;[predicted]</span>
   7627 <br class="fancyvrb" /><a 
   7628  id="x1-101038r19"></a><span 
   7629 class="cmr-6">19</span><span 
   7630 class="cmtt-8">&#x00A0;</span><span 
   7631 class="cmtt-8">&#x00A0;</span><span 
   7632 class="cmtt-8">&#x00A0;</span><span 
   7633 class="cmtt-8">&#x00A0;</span><span 
   7634 class="cmtt-8">&#x00A0;</span><span 
   7635 class="cmtt-8">&#x00A0;</span><span 
   7636 class="cmtt-8">&#x00A0;</span><span 
   7637 class="cmtt-8">&#x00A0;12)</span><span 
   7638 class="cmtt-8">&#x00A0;[lowroom]</span><span 
   7639 class="cmtt-8">&#x00A0;</span><span 
   7640 class="cmtt-8">&#x00A0;=</span><span 
   7641 class="cmtt-8">&#x00A0;[predicted]</span>
   7642 <br class="fancyvrb" /><a 
   7643  id="x1-101040r20"></a><span 
   7644 class="cmr-6">20</span><span 
   7645 class="cmtt-8">&#x00A0;</span><span 
   7646 class="cmtt-8">&#x00A0;</span><span 
   7647 class="cmtt-8">&#x00A0;</span><span 
   7648 class="cmtt-8">&#x00A0;</span><span 
   7649 class="cmtt-8">&#x00A0;</span><span 
   7650 class="cmtt-8">&#x00A0;</span><span 
   7651 class="cmtt-8">&#x00A0;</span><span 
   7652 class="cmtt-8">&#x00A0;13)</span><span 
   7653 class="cmtt-8">&#x00A0;if</span><span 
   7654 class="cmtt-8">&#x00A0;(</span><span 
   7655 class="cmtt-8">&#x00A0;[highroom]</span><span 
   7656 class="cmtt-8">&#x00A0;is</span><span 
   7657 class="cmtt-8">&#x00A0;less</span><span 
   7658 class="cmtt-8">&#x00A0;than</span><span 
   7659 class="cmtt-8">&#x00A0;[lowroom]</span><span 
   7660 class="cmtt-8">&#x00A0;)</span><span 
   7661 class="cmtt-8">&#x00A0;</span><span 
   7662 class="cmsy-8">{</span>
   7663 <br class="fancyvrb" /><a 
   7664  id="x1-101042r21"></a><span 
   7665 class="cmr-6">21</span><span 
   7666 class="cmtt-8">&#x00A0;</span><span 
   7667 class="cmtt-8">&#x00A0;</span>
   7668 <br class="fancyvrb" /><a 
   7669  id="x1-101044r22"></a><span 
   7670 class="cmr-6">22</span><span 
   7671 class="cmtt-8">&#x00A0;</span><span 
   7672 class="cmtt-8">&#x00A0;</span><span 
   7673 class="cmtt-8">&#x00A0;</span><span 
   7674 class="cmtt-8">&#x00A0;</span><span 
   7675 class="cmtt-8">&#x00A0;</span><span 
   7676 class="cmtt-8">&#x00A0;</span><span 
   7677 class="cmtt-8">&#x00A0;</span><span 
   7678 class="cmtt-8">&#x00A0;</span><span 
   7679 class="cmtt-8">&#x00A0;</span><span 
   7680 class="cmtt-8">&#x00A0;</span><span 
   7681 class="cmtt-8">&#x00A0;</span><span 
   7682 class="cmtt-8">&#x00A0;</span><span 
   7683 class="cmtt-8">&#x00A0;</span><span 
   7684 class="cmtt-8">&#x00A0;14)</span><span 
   7685 class="cmtt-8">&#x00A0;[room]</span><span 
   7686 class="cmtt-8">&#x00A0;=</span><span 
   7687 class="cmtt-8">&#x00A0;[highroom]</span><span 
   7688 class="cmtt-8">&#x00A0;*</span><span 
   7689 class="cmtt-8">&#x00A0;2</span>
   7690                                                                                         
   7691 
   7692                                                                                         
   7693 <br class="fancyvrb" /><a 
   7694  id="x1-101046r23"></a><span 
   7695 class="cmr-6">23</span><span 
   7696 class="cmtt-8">&#x00A0;</span><span 
   7697 class="cmtt-8">&#x00A0;</span>
   7698 <br class="fancyvrb" /><a 
   7699  id="x1-101048r24"></a><span 
   7700 class="cmr-6">24</span><span 
   7701 class="cmtt-8">&#x00A0;</span><span 
   7702 class="cmtt-8">&#x00A0;</span><span 
   7703 class="cmtt-8">&#x00A0;</span><span 
   7704 class="cmtt-8">&#x00A0;</span><span 
   7705 class="cmtt-8">&#x00A0;</span><span 
   7706 class="cmtt-8">&#x00A0;</span><span 
   7707 class="cmtt-8">&#x00A0;</span><span 
   7708 class="cmtt-8">&#x00A0;</span><span 
   7709 class="cmtt-8">&#x00A0;</span><span 
   7710 class="cmtt-8">&#x00A0;</span><span 
   7711 class="cmtt-8">&#x00A0;</span><span 
   7712 class="cmtt-8">&#x00A0;</span><span 
   7713 class="cmsy-8">}</span><span 
   7714 class="cmtt-8">&#x00A0;else</span><span 
   7715 class="cmtt-8">&#x00A0;[highroom]</span><span 
   7716 class="cmtt-8">&#x00A0;is</span><span 
   7717 class="cmtt-8">&#x00A0;not</span><span 
   7718 class="cmtt-8">&#x00A0;less</span><span 
   7719 class="cmtt-8">&#x00A0;than</span><span 
   7720 class="cmtt-8">&#x00A0;[lowroom]</span><span 
   7721 class="cmtt-8">&#x00A0;</span><span 
   7722 class="cmsy-8">{</span>
   7723 <br class="fancyvrb" /><a 
   7724  id="x1-101050r25"></a><span 
   7725 class="cmr-6">25</span><span 
   7726 class="cmtt-8">&#x00A0;</span><span 
   7727 class="cmtt-8">&#x00A0;</span>
   7728 <br class="fancyvrb" /><a 
   7729  id="x1-101052r26"></a><span 
   7730 class="cmr-6">26</span><span 
   7731 class="cmtt-8">&#x00A0;</span><span 
   7732 class="cmtt-8">&#x00A0;</span><span 
   7733 class="cmtt-8">&#x00A0;</span><span 
   7734 class="cmtt-8">&#x00A0;</span><span 
   7735 class="cmtt-8">&#x00A0;</span><span 
   7736 class="cmtt-8">&#x00A0;</span><span 
   7737 class="cmtt-8">&#x00A0;</span><span 
   7738 class="cmtt-8">&#x00A0;</span><span 
   7739 class="cmtt-8">&#x00A0;</span><span 
   7740 class="cmtt-8">&#x00A0;</span><span 
   7741 class="cmtt-8">&#x00A0;</span><span 
   7742 class="cmtt-8">&#x00A0;</span><span 
   7743 class="cmtt-8">&#x00A0;</span><span 
   7744 class="cmtt-8">&#x00A0;15)</span><span 
   7745 class="cmtt-8">&#x00A0;[room]</span><span 
   7746 class="cmtt-8">&#x00A0;=</span><span 
   7747 class="cmtt-8">&#x00A0;[lowroom]</span><span 
   7748 class="cmtt-8">&#x00A0;*</span><span 
   7749 class="cmtt-8">&#x00A0;2</span>
   7750 <br class="fancyvrb" /><a 
   7751  id="x1-101054r27"></a><span 
   7752 class="cmr-6">27</span><span 
   7753 class="cmtt-8">&#x00A0;</span><span 
   7754 class="cmtt-8">&#x00A0;</span>
   7755 <br class="fancyvrb" /><a 
   7756  id="x1-101056r28"></a><span 
   7757 class="cmr-6">28</span><span 
   7758 class="cmtt-8">&#x00A0;</span><span 
   7759 class="cmtt-8">&#x00A0;</span><span 
   7760 class="cmtt-8">&#x00A0;</span><span 
   7761 class="cmtt-8">&#x00A0;</span><span 
   7762 class="cmtt-8">&#x00A0;</span><span 
   7763 class="cmtt-8">&#x00A0;</span><span 
   7764 class="cmtt-8">&#x00A0;</span><span 
   7765 class="cmtt-8">&#x00A0;</span><span 
   7766 class="cmtt-8">&#x00A0;</span><span 
   7767 class="cmtt-8">&#x00A0;</span><span 
   7768 class="cmtt-8">&#x00A0;</span><span 
   7769 class="cmtt-8">&#x00A0;</span><span 
   7770 class="cmsy-8">}</span>
   7771 <br class="fancyvrb" /><a 
   7772  id="x1-101058r29"></a><span 
   7773 class="cmr-6">29</span><span 
   7774 class="cmtt-8">&#x00A0;</span><span 
   7775 class="cmtt-8">&#x00A0;</span>
   7776 <br class="fancyvrb" /><a 
   7777  id="x1-101060r30"></a><span 
   7778 class="cmr-6">30</span><span 
   7779 class="cmtt-8">&#x00A0;</span><span 
   7780 class="cmtt-8">&#x00A0;</span><span 
   7781 class="cmtt-8">&#x00A0;</span><span 
   7782 class="cmtt-8">&#x00A0;</span><span 
   7783 class="cmtt-8">&#x00A0;</span><span 
   7784 class="cmtt-8">&#x00A0;</span><span 
   7785 class="cmtt-8">&#x00A0;</span><span 
   7786 class="cmtt-8">&#x00A0;16)</span><span 
   7787 class="cmtt-8">&#x00A0;if</span><span 
   7788 class="cmtt-8">&#x00A0;(</span><span 
   7789 class="cmtt-8">&#x00A0;[val]</span><span 
   7790 class="cmtt-8">&#x00A0;is</span><span 
   7791 class="cmtt-8">&#x00A0;nonzero</span><span 
   7792 class="cmtt-8">&#x00A0;)</span><span 
   7793 class="cmtt-8">&#x00A0;</span><span 
   7794 class="cmsy-8">{</span>
   7795 <br class="fancyvrb" /><a 
   7796  id="x1-101062r31"></a><span 
   7797 class="cmr-6">31</span><span 
   7798 class="cmtt-8">&#x00A0;</span><span 
   7799 class="cmtt-8">&#x00A0;</span>
   7800 <br class="fancyvrb" /><a 
   7801  id="x1-101064r32"></a><span 
   7802 class="cmr-6">32</span><span 
   7803 class="cmtt-8">&#x00A0;</span><span 
   7804 class="cmtt-8">&#x00A0;</span><span 
   7805 class="cmtt-8">&#x00A0;</span><span 
   7806 class="cmtt-8">&#x00A0;</span><span 
   7807 class="cmtt-8">&#x00A0;</span><span 
   7808 class="cmtt-8">&#x00A0;</span><span 
   7809 class="cmtt-8">&#x00A0;</span><span 
   7810 class="cmtt-8">&#x00A0;</span><span 
   7811 class="cmtt-8">&#x00A0;</span><span 
   7812 class="cmtt-8">&#x00A0;</span><span 
   7813 class="cmtt-8">&#x00A0;</span><span 
   7814 class="cmtt-8">&#x00A0;</span><span 
   7815 class="cmtt-8">&#x00A0;</span><span 
   7816 class="cmtt-8">&#x00A0;17)</span><span 
   7817 class="cmtt-8">&#x00A0;vector</span><span 
   7818 class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span 
   7819 class="cmtt-8">&#x00A0;element</span><span 
   7820 class="cmtt-8">&#x00A0;[low_neighbor_offset]</span><span 
   7821 class="cmtt-8">&#x00A0;=</span><span 
   7822 class="cmtt-8">&#x00A0;set</span>
   7823 <br class="fancyvrb" /><a 
   7824  id="x1-101066r33"></a><span 
   7825 class="cmr-6">33</span><span 
   7826 class="cmtt-8">&#x00A0;</span><span 
   7827 class="cmtt-8">&#x00A0;</span><span 
   7828 class="cmtt-8">&#x00A0;</span><span 
   7829 class="cmtt-8">&#x00A0;</span><span 
   7830 class="cmtt-8">&#x00A0;</span><span 
   7831 class="cmtt-8">&#x00A0;</span><span 
   7832 class="cmtt-8">&#x00A0;</span><span 
   7833 class="cmtt-8">&#x00A0;</span><span 
   7834 class="cmtt-8">&#x00A0;</span><span 
   7835 class="cmtt-8">&#x00A0;</span><span 
   7836 class="cmtt-8">&#x00A0;</span><span 
   7837 class="cmtt-8">&#x00A0;</span><span 
   7838 class="cmtt-8">&#x00A0;</span><span 
   7839 class="cmtt-8">&#x00A0;18)</span><span 
   7840 class="cmtt-8">&#x00A0;vector</span><span 
   7841 class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span 
   7842 class="cmtt-8">&#x00A0;element</span><span 
   7843 class="cmtt-8">&#x00A0;[high_neighbor_offset]</span><span 
   7844 class="cmtt-8">&#x00A0;=</span><span 
   7845 class="cmtt-8">&#x00A0;set</span>
   7846 <br class="fancyvrb" /><a 
   7847  id="x1-101068r34"></a><span 
   7848 class="cmr-6">34</span><span 
   7849 class="cmtt-8">&#x00A0;</span><span 
   7850 class="cmtt-8">&#x00A0;</span><span 
   7851 class="cmtt-8">&#x00A0;</span><span 
   7852 class="cmtt-8">&#x00A0;</span><span 
   7853 class="cmtt-8">&#x00A0;</span><span 
   7854 class="cmtt-8">&#x00A0;</span><span 
   7855 class="cmtt-8">&#x00A0;</span><span 
   7856 class="cmtt-8">&#x00A0;</span><span 
   7857 class="cmtt-8">&#x00A0;</span><span 
   7858 class="cmtt-8">&#x00A0;</span><span 
   7859 class="cmtt-8">&#x00A0;</span><span 
   7860 class="cmtt-8">&#x00A0;</span><span 
   7861 class="cmtt-8">&#x00A0;</span><span 
   7862 class="cmtt-8">&#x00A0;19)</span><span 
   7863 class="cmtt-8">&#x00A0;vector</span><span 
   7864 class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span 
   7865 class="cmtt-8">&#x00A0;element</span><span 
   7866 class="cmtt-8">&#x00A0;[i]</span><span 
   7867 class="cmtt-8">&#x00A0;=</span><span 
   7868 class="cmtt-8">&#x00A0;set</span>
   7869 <br class="fancyvrb" /><a 
   7870  id="x1-101070r35"></a><span 
   7871 class="cmr-6">35</span><span 
   7872 class="cmtt-8">&#x00A0;</span><span 
   7873 class="cmtt-8">&#x00A0;</span><span 
   7874 class="cmtt-8">&#x00A0;</span><span 
   7875 class="cmtt-8">&#x00A0;</span><span 
   7876 class="cmtt-8">&#x00A0;</span><span 
   7877 class="cmtt-8">&#x00A0;</span><span 
   7878 class="cmtt-8">&#x00A0;</span><span 
   7879 class="cmtt-8">&#x00A0;</span><span 
   7880 class="cmtt-8">&#x00A0;</span><span 
   7881 class="cmtt-8">&#x00A0;</span><span 
   7882 class="cmtt-8">&#x00A0;</span><span 
   7883 class="cmtt-8">&#x00A0;</span><span 
   7884 class="cmtt-8">&#x00A0;</span><span 
   7885 class="cmtt-8">&#x00A0;20)</span><span 
   7886 class="cmtt-8">&#x00A0;if</span><span 
   7887 class="cmtt-8">&#x00A0;(</span><span 
   7888 class="cmtt-8">&#x00A0;[val]</span><span 
   7889 class="cmtt-8">&#x00A0;is</span><span 
   7890 class="cmtt-8">&#x00A0;greater</span><span 
   7891 class="cmtt-8">&#x00A0;than</span><span 
   7892 class="cmtt-8">&#x00A0;or</span><span 
   7893 class="cmtt-8">&#x00A0;equal</span><span 
   7894 class="cmtt-8">&#x00A0;to</span><span 
   7895 class="cmtt-8">&#x00A0;[room]</span><span 
   7896 class="cmtt-8">&#x00A0;)</span><span 
   7897 class="cmtt-8">&#x00A0;</span><span 
   7898 class="cmsy-8">{</span>
   7899 <br class="fancyvrb" /><a 
   7900  id="x1-101072r36"></a><span 
   7901 class="cmr-6">36</span><span 
   7902 class="cmtt-8">&#x00A0;</span><span 
   7903 class="cmtt-8">&#x00A0;</span>
   7904 <br class="fancyvrb" /><a 
   7905  id="x1-101074r37"></a><span 
   7906 class="cmr-6">37</span><span 
   7907 class="cmtt-8">&#x00A0;</span><span 
   7908 class="cmtt-8">&#x00A0;</span><span 
   7909 class="cmtt-8">&#x00A0;</span><span 
   7910 class="cmtt-8">&#x00A0;</span><span 
   7911 class="cmtt-8">&#x00A0;</span><span 
   7912 class="cmtt-8">&#x00A0;</span><span 
   7913 class="cmtt-8">&#x00A0;</span><span 
   7914 class="cmtt-8">&#x00A0;</span><span 
   7915 class="cmtt-8">&#x00A0;</span><span 
   7916 class="cmtt-8">&#x00A0;</span><span 
   7917 class="cmtt-8">&#x00A0;</span><span 
   7918 class="cmtt-8">&#x00A0;</span><span 
   7919 class="cmtt-8">&#x00A0;</span><span 
   7920 class="cmtt-8">&#x00A0;</span><span 
   7921 class="cmtt-8">&#x00A0;</span><span 
   7922 class="cmtt-8">&#x00A0;</span><span 
   7923 class="cmtt-8">&#x00A0;</span><span 
   7924 class="cmtt-8">&#x00A0;</span><span 
   7925 class="cmtt-8">&#x00A0;</span><span 
   7926 class="cmtt-8">&#x00A0;21)</span><span 
   7927 class="cmtt-8">&#x00A0;if</span><span 
   7928 class="cmtt-8">&#x00A0;(</span><span 
   7929 class="cmtt-8">&#x00A0;[highroom]</span><span 
   7930 class="cmtt-8">&#x00A0;is</span><span 
   7931 class="cmtt-8">&#x00A0;greater</span><span 
   7932 class="cmtt-8">&#x00A0;than</span><span 
   7933 class="cmtt-8">&#x00A0;[lowroom]</span><span 
   7934 class="cmtt-8">&#x00A0;)</span><span 
   7935 class="cmtt-8">&#x00A0;</span><span 
   7936 class="cmsy-8">{</span>
   7937 <br class="fancyvrb" /><a 
   7938  id="x1-101076r38"></a><span 
   7939 class="cmr-6">38</span><span 
   7940 class="cmtt-8">&#x00A0;</span><span 
   7941 class="cmtt-8">&#x00A0;</span>
   7942 <br class="fancyvrb" /><a 
   7943  id="x1-101078r39"></a><span 
   7944 class="cmr-6">39</span><span 
   7945 class="cmtt-8">&#x00A0;</span><span 
   7946 class="cmtt-8">&#x00A0;</span><span 
   7947 class="cmtt-8">&#x00A0;</span><span 
   7948 class="cmtt-8">&#x00A0;</span><span 
   7949 class="cmtt-8">&#x00A0;</span><span 
   7950 class="cmtt-8">&#x00A0;</span><span 
   7951 class="cmtt-8">&#x00A0;</span><span 
   7952 class="cmtt-8">&#x00A0;</span><span 
   7953 class="cmtt-8">&#x00A0;</span><span 
   7954 class="cmtt-8">&#x00A0;</span><span 
   7955 class="cmtt-8">&#x00A0;</span><span 
   7956 class="cmtt-8">&#x00A0;</span><span 
   7957 class="cmtt-8">&#x00A0;</span><span 
   7958 class="cmtt-8">&#x00A0;</span><span 
   7959 class="cmtt-8">&#x00A0;</span><span 
   7960 class="cmtt-8">&#x00A0;</span><span 
   7961 class="cmtt-8">&#x00A0;</span><span 
   7962 class="cmtt-8">&#x00A0;</span><span 
   7963 class="cmtt-8">&#x00A0;</span><span 
   7964 class="cmtt-8">&#x00A0;</span><span 
   7965 class="cmtt-8">&#x00A0;</span><span 
   7966 class="cmtt-8">&#x00A0;</span><span 
   7967 class="cmtt-8">&#x00A0;</span><span 
   7968 class="cmtt-8">&#x00A0;</span><span 
   7969 class="cmtt-8">&#x00A0;</span><span 
   7970 class="cmtt-8">&#x00A0;22)</span><span 
   7971 class="cmtt-8">&#x00A0;vector</span><span 
   7972 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span 
   7973 class="cmtt-8">&#x00A0;element</span><span 
   7974 class="cmtt-8">&#x00A0;[i]</span><span 
   7975 class="cmtt-8">&#x00A0;=</span><span 
   7976 class="cmtt-8">&#x00A0;[val]</span><span 
   7977 class="cmtt-8">&#x00A0;-</span><span 
   7978 class="cmtt-8">&#x00A0;[lowroom]</span><span 
   7979 class="cmtt-8">&#x00A0;+</span><span 
   7980 class="cmtt-8">&#x00A0;[predicted]</span>
   7981 <br class="fancyvrb" /><a 
   7982  id="x1-101080r40"></a><span 
   7983 class="cmr-6">40</span><span 
   7984 class="cmtt-8">&#x00A0;</span><span 
   7985 class="cmtt-8">&#x00A0;</span>
   7986 <br class="fancyvrb" /><a 
   7987  id="x1-101082r41"></a><span 
   7988 class="cmr-6">41</span><span 
   7989 class="cmtt-8">&#x00A0;</span><span 
   7990 class="cmtt-8">&#x00A0;        </span><span 
   7991 class="cmtt-8">&#x00A0;</span><span 
   7992 class="cmtt-8">&#x00A0;</span><span 
   7993 class="cmtt-8">&#x00A0;</span><span 
   7994 class="cmtt-8">&#x00A0;</span><span 
   7995 class="cmtt-8">&#x00A0;</span><span 
   7996 class="cmtt-8">&#x00A0;</span><span 
   7997 class="cmsy-8">}</span><span 
   7998 class="cmtt-8">&#x00A0;else</span><span 
   7999 class="cmtt-8">&#x00A0;[highroom]</span><span 
   8000 class="cmtt-8">&#x00A0;is</span><span 
   8001 class="cmtt-8">&#x00A0;not</span><span 
   8002 class="cmtt-8">&#x00A0;greater</span><span 
   8003 class="cmtt-8">&#x00A0;than</span><span 
   8004 class="cmtt-8">&#x00A0;[lowroom]</span><span 
   8005 class="cmtt-8">&#x00A0;</span><span 
   8006 class="cmsy-8">{</span>
   8007 <br class="fancyvrb" /><a 
   8008  id="x1-101084r42"></a><span 
   8009 class="cmr-6">42</span><span 
   8010 class="cmtt-8">&#x00A0;</span><span 
   8011 class="cmtt-8">&#x00A0;</span>
   8012 <br class="fancyvrb" /><a 
   8013  id="x1-101086r43"></a><span 
   8014 class="cmr-6">43</span><span 
   8015 class="cmtt-8">&#x00A0;</span><span 
   8016 class="cmtt-8">&#x00A0;</span><span 
   8017 class="cmtt-8">&#x00A0;</span><span 
   8018 class="cmtt-8">&#x00A0;</span><span 
   8019 class="cmtt-8">&#x00A0;</span><span 
   8020 class="cmtt-8">&#x00A0;</span><span 
   8021 class="cmtt-8">&#x00A0;</span><span 
   8022 class="cmtt-8">&#x00A0;</span><span 
   8023 class="cmtt-8">&#x00A0;</span><span 
   8024 class="cmtt-8">&#x00A0;</span><span 
   8025 class="cmtt-8">&#x00A0;</span><span 
   8026 class="cmtt-8">&#x00A0;</span><span 
   8027 class="cmtt-8">&#x00A0;</span><span 
   8028 class="cmtt-8">&#x00A0;</span><span 
   8029 class="cmtt-8">&#x00A0;</span><span 
   8030 class="cmtt-8">&#x00A0;</span><span 
   8031 class="cmtt-8">&#x00A0;</span><span 
   8032 class="cmtt-8">&#x00A0;</span><span 
   8033 class="cmtt-8">&#x00A0;</span><span 
   8034 class="cmtt-8">&#x00A0;</span><span 
   8035 class="cmtt-8">&#x00A0;</span><span 
   8036 class="cmtt-8">&#x00A0;</span><span 
   8037 class="cmtt-8">&#x00A0;</span><span 
   8038 class="cmtt-8">&#x00A0;</span><span 
   8039 class="cmtt-8">&#x00A0;</span><span 
   8040 class="cmtt-8">&#x00A0;23)</span><span 
   8041 class="cmtt-8">&#x00A0;vector</span><span 
   8042 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span 
   8043 class="cmtt-8">&#x00A0;element</span><span 
   8044 class="cmtt-8">&#x00A0;[i]</span><span 
   8045 class="cmtt-8">&#x00A0;=</span><span 
   8046 class="cmtt-8">&#x00A0;[predicted]</span><span 
   8047 class="cmtt-8">&#x00A0;-</span><span 
   8048 class="cmtt-8">&#x00A0;[val]</span><span 
   8049 class="cmtt-8">&#x00A0;+</span><span 
   8050 class="cmtt-8">&#x00A0;[highroom]</span><span 
   8051 class="cmtt-8">&#x00A0;-</span><span 
   8052 class="cmtt-8">&#x00A0;1</span>
   8053 <br class="fancyvrb" /><a 
   8054  id="x1-101088r44"></a><span 
   8055 class="cmr-6">44</span><span 
   8056 class="cmtt-8">&#x00A0;</span><span 
   8057 class="cmtt-8">&#x00A0;</span>
   8058 <br class="fancyvrb" /><a 
   8059  id="x1-101090r45"></a><span 
   8060 class="cmr-6">45</span><span 
   8061 class="cmtt-8">&#x00A0;</span><span 
   8062 class="cmtt-8">&#x00A0;</span><span 
   8063 class="cmtt-8">&#x00A0;</span><span 
   8064 class="cmtt-8">&#x00A0;</span><span 
   8065 class="cmtt-8">&#x00A0;</span><span 
   8066 class="cmtt-8">&#x00A0;</span><span 
   8067 class="cmtt-8">&#x00A0;</span><span 
   8068 class="cmtt-8">&#x00A0;</span><span 
   8069 class="cmtt-8">&#x00A0;</span><span 
   8070 class="cmtt-8">&#x00A0;</span><span 
   8071 class="cmtt-8">&#x00A0;</span><span 
   8072 class="cmtt-8">&#x00A0;</span><span 
   8073 class="cmtt-8">&#x00A0;</span><span 
   8074 class="cmtt-8">&#x00A0;</span><span 
   8075 class="cmtt-8">&#x00A0;</span><span 
   8076 class="cmtt-8">&#x00A0;</span><span 
   8077 class="cmtt-8">&#x00A0;</span><span 
   8078 class="cmtt-8">&#x00A0;</span><span 
   8079 class="cmtt-8">&#x00A0;</span><span 
   8080 class="cmtt-8">&#x00A0;</span><span 
   8081 class="cmtt-8">&#x00A0;</span><span 
   8082 class="cmtt-8">&#x00A0;</span><span 
   8083 class="cmtt-8">&#x00A0;</span><span 
   8084 class="cmtt-8">&#x00A0;</span><span 
   8085 class="cmsy-8">}</span>
   8086 <br class="fancyvrb" /><a 
   8087  id="x1-101092r46"></a><span 
   8088 class="cmr-6">46</span><span 
   8089 class="cmtt-8">&#x00A0;</span><span 
   8090 class="cmtt-8">&#x00A0;</span>
   8091 <br class="fancyvrb" /><a 
   8092  id="x1-101094r47"></a><span 
   8093 class="cmr-6">47</span><span 
   8094 class="cmtt-8">&#x00A0;</span><span 
   8095 class="cmtt-8">&#x00A0;</span><span 
   8096 class="cmtt-8">&#x00A0;</span><span 
   8097 class="cmtt-8">&#x00A0;</span><span 
   8098 class="cmtt-8">&#x00A0;</span><span 
   8099 class="cmtt-8">&#x00A0;</span><span 
   8100 class="cmtt-8">&#x00A0;</span><span 
   8101 class="cmtt-8">&#x00A0;</span><span 
   8102 class="cmtt-8">&#x00A0;</span><span 
   8103 class="cmtt-8">&#x00A0;</span><span 
   8104 class="cmtt-8">&#x00A0;</span><span 
   8105 class="cmtt-8">&#x00A0;</span><span 
   8106 class="cmtt-8">&#x00A0;</span><span 
   8107 class="cmtt-8">&#x00A0;</span><span 
   8108 class="cmtt-8">&#x00A0;</span><span 
   8109 class="cmtt-8">&#x00A0;</span><span 
   8110 class="cmtt-8">&#x00A0;</span><span 
   8111 class="cmtt-8">&#x00A0;</span><span 
   8112 class="cmsy-8">}</span><span 
   8113 class="cmtt-8">&#x00A0;else</span><span 
   8114 class="cmtt-8">&#x00A0;[val]</span><span 
   8115 class="cmtt-8">&#x00A0;is</span><span 
   8116 class="cmtt-8">&#x00A0;less</span><span 
   8117 class="cmtt-8">&#x00A0;than</span><span 
   8118 class="cmtt-8">&#x00A0;[room]</span><span 
   8119 class="cmtt-8">&#x00A0;</span><span 
   8120 class="cmsy-8">{</span>
   8121 <br class="fancyvrb" /><a 
   8122  id="x1-101096r48"></a><span 
   8123 class="cmr-6">48</span><span 
   8124 class="cmtt-8">&#x00A0;</span><span 
   8125 class="cmtt-8">&#x00A0;</span>
   8126 <br class="fancyvrb" /><a 
   8127  id="x1-101098r49"></a><span 
   8128 class="cmr-6">49</span><span 
   8129 class="cmtt-8">&#x00A0;</span><span 
   8130 class="cmtt-8">&#x00A0;        </span><span 
   8131 class="cmtt-8">&#x00A0;</span><span 
   8132 class="cmtt-8">&#x00A0;24)</span><span 
   8133 class="cmtt-8">&#x00A0;if</span><span 
   8134 class="cmtt-8">&#x00A0;([val]</span><span 
   8135 class="cmtt-8">&#x00A0;is</span><span 
   8136 class="cmtt-8">&#x00A0;odd)</span><span 
   8137 class="cmtt-8">&#x00A0;</span><span 
   8138 class="cmsy-8">{</span>
   8139 <br class="fancyvrb" /><a 
   8140  id="x1-101100r50"></a><span 
   8141 class="cmr-6">50</span><span 
   8142 class="cmtt-8">&#x00A0;</span><span 
   8143 class="cmtt-8">&#x00A0;</span>
   8144 <br class="fancyvrb" /><a 
   8145  id="x1-101102r51"></a><span 
   8146 class="cmr-6">51</span><span 
   8147 class="cmtt-8">&#x00A0;</span><span 
   8148 class="cmtt-8">&#x00A0;</span><span 
   8149 class="cmtt-8">&#x00A0;</span><span 
   8150 class="cmtt-8">&#x00A0;</span><span 
   8151 class="cmtt-8">&#x00A0;</span><span 
   8152 class="cmtt-8">&#x00A0;</span><span 
   8153 class="cmtt-8">&#x00A0;</span><span 
   8154 class="cmtt-8">&#x00A0;</span><span 
   8155 class="cmtt-8">&#x00A0;</span><span 
   8156 class="cmtt-8">&#x00A0;</span><span 
   8157 class="cmtt-8">&#x00A0;</span><span 
   8158 class="cmtt-8">&#x00A0;</span><span 
   8159 class="cmtt-8">&#x00A0;</span><span 
   8160 class="cmtt-8">&#x00A0;</span><span 
   8161 class="cmtt-8">&#x00A0;</span><span 
   8162 class="cmtt-8">&#x00A0;</span><span 
   8163 class="cmtt-8">&#x00A0;</span><span 
   8164 class="cmtt-8">&#x00A0;</span><span 
   8165 class="cmtt-8">&#x00A0;</span><span 
   8166 class="cmtt-8">&#x00A0;</span><span 
   8167 class="cmtt-8">&#x00A0;</span><span 
   8168 class="cmtt-8">&#x00A0;</span><span 
   8169 class="cmtt-8">&#x00A0;</span><span 
   8170 class="cmtt-8">&#x00A0;</span><span 
   8171 class="cmtt-8">&#x00A0;</span><span 
   8172 class="cmtt-8">&#x00A0;25)</span><span 
   8173 class="cmtt-8">&#x00A0;vector</span><span 
   8174 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span 
   8175 class="cmtt-8">&#x00A0;element</span><span 
   8176 class="cmtt-8">&#x00A0;[i]</span><span 
   8177 class="cmtt-8">&#x00A0;=</span>
   8178 <br class="fancyvrb" /><a 
   8179  id="x1-101104r52"></a><span 
   8180 class="cmr-6">52</span><span 
   8181 class="cmtt-8">&#x00A0;</span><span 
   8182 class="cmtt-8">&#x00A0;</span><span 
   8183 class="cmtt-8">&#x00A0;</span><span 
   8184 class="cmtt-8">&#x00A0;</span><span 
   8185 class="cmtt-8">&#x00A0;</span><span 
   8186 class="cmtt-8">&#x00A0;</span><span 
   8187 class="cmtt-8">&#x00A0;</span><span 
   8188 class="cmtt-8">&#x00A0;</span><span 
   8189 class="cmtt-8">&#x00A0;</span><span 
   8190 class="cmtt-8">&#x00A0;</span><span 
   8191 class="cmtt-8">&#x00A0;</span><span 
   8192 class="cmtt-8">&#x00A0;</span><span 
   8193 class="cmtt-8">&#x00A0;</span><span 
   8194 class="cmtt-8">&#x00A0;</span><span 
   8195 class="cmtt-8">&#x00A0;</span><span 
   8196 class="cmtt-8">&#x00A0;</span><span 
   8197 class="cmtt-8">&#x00A0;</span><span 
   8198 class="cmtt-8">&#x00A0;</span><span 
   8199 class="cmtt-8">&#x00A0;</span><span 
   8200 class="cmtt-8">&#x00A0;</span><span 
   8201 class="cmtt-8">&#x00A0;</span><span 
   8202 class="cmtt-8">&#x00A0;</span><span 
   8203 class="cmtt-8">&#x00A0;</span><span 
   8204 class="cmtt-8">&#x00A0;</span><span 
   8205 class="cmtt-8">&#x00A0;</span><span 
   8206 class="cmtt-8">&#x00A0;</span><span 
   8207 class="cmtt-8">&#x00A0;</span><span 
   8208 class="cmtt-8">&#x00A0;</span><span 
   8209 class="cmtt-8">&#x00A0;</span><span 
   8210 class="cmtt-8">&#x00A0;[predicted]</span><span 
   8211 class="cmtt-8">&#x00A0;-</span><span 
   8212 class="cmtt-8">&#x00A0;(([val]</span><span 
   8213 class="cmtt-8">&#x00A0;+</span><span 
   8214 class="cmtt-8">&#x00A0;1)</span><span 
   8215 class="cmtt-8">&#x00A0;divided</span><span 
   8216 class="cmtt-8">&#x00A0;by</span><span 
   8217 class="cmtt-8">&#x00A0;</span><span 
   8218 class="cmtt-8">&#x00A0;2</span><span 
   8219 class="cmtt-8">&#x00A0;using</span><span 
   8220 class="cmtt-8">&#x00A0;integer</span><span 
   8221 class="cmtt-8">&#x00A0;division)</span>
   8222 <br class="fancyvrb" /><a 
   8223  id="x1-101106r53"></a><span 
   8224 class="cmr-6">53</span><span 
   8225 class="cmtt-8">&#x00A0;</span><span 
   8226 class="cmtt-8">&#x00A0;</span>
   8227 <br class="fancyvrb" /><a 
   8228  id="x1-101108r54"></a><span 
   8229 class="cmr-6">54</span><span 
   8230 class="cmtt-8">&#x00A0;</span><span 
   8231 class="cmtt-8">&#x00A0;</span><span 
   8232 class="cmtt-8">&#x00A0;</span><span 
   8233 class="cmtt-8">&#x00A0;</span><span 
   8234 class="cmtt-8">&#x00A0;</span><span 
   8235 class="cmtt-8">&#x00A0;</span><span 
   8236 class="cmtt-8">&#x00A0;</span><span 
   8237 class="cmtt-8">&#x00A0;</span><span 
   8238 class="cmtt-8">&#x00A0;</span><span 
   8239 class="cmtt-8">&#x00A0;</span><span 
   8240 class="cmtt-8">&#x00A0;</span><span 
   8241 class="cmtt-8">&#x00A0;</span><span 
   8242 class="cmtt-8">&#x00A0;</span><span 
   8243 class="cmtt-8">&#x00A0;</span><span 
   8244 class="cmtt-8">&#x00A0;</span><span 
   8245 class="cmtt-8">&#x00A0;</span><span 
   8246 class="cmtt-8">&#x00A0;</span><span 
   8247 class="cmtt-8">&#x00A0;</span><span 
   8248 class="cmtt-8">&#x00A0;</span><span 
   8249 class="cmtt-8">&#x00A0;</span><span 
   8250 class="cmtt-8">&#x00A0;</span><span 
   8251 class="cmtt-8">&#x00A0;</span><span 
   8252 class="cmtt-8">&#x00A0;</span><span 
   8253 class="cmtt-8">&#x00A0;</span><span 
   8254 class="cmsy-8">}</span><span 
   8255 class="cmtt-8">&#x00A0;else</span><span 
   8256 class="cmtt-8">&#x00A0;[val]</span><span 
   8257 class="cmtt-8">&#x00A0;is</span><span 
   8258 class="cmtt-8">&#x00A0;even</span><span 
   8259 class="cmtt-8">&#x00A0;</span><span 
   8260 class="cmsy-8">{</span>
   8261 <br class="fancyvrb" /><a 
   8262  id="x1-101110r55"></a><span 
   8263 class="cmr-6">55</span><span 
   8264 class="cmtt-8">&#x00A0;</span><span 
   8265 class="cmtt-8">&#x00A0;</span>
   8266 <br class="fancyvrb" /><a 
   8267  id="x1-101112r56"></a><span 
   8268 class="cmr-6">56</span><span 
   8269 class="cmtt-8">&#x00A0;</span><span 
   8270 class="cmtt-8">&#x00A0;</span><span 
   8271 class="cmtt-8">&#x00A0;</span><span 
   8272 class="cmtt-8">&#x00A0;</span><span 
   8273 class="cmtt-8">&#x00A0;</span><span 
   8274 class="cmtt-8">&#x00A0;</span><span 
   8275 class="cmtt-8">&#x00A0;</span><span 
   8276 class="cmtt-8">&#x00A0;</span><span 
   8277 class="cmtt-8">&#x00A0;</span><span 
   8278 class="cmtt-8">&#x00A0;</span><span 
   8279 class="cmtt-8">&#x00A0;</span><span 
   8280 class="cmtt-8">&#x00A0;</span><span 
   8281 class="cmtt-8">&#x00A0;</span><span 
   8282 class="cmtt-8">&#x00A0;</span><span 
   8283 class="cmtt-8">&#x00A0;</span><span 
   8284 class="cmtt-8">&#x00A0;</span><span 
   8285 class="cmtt-8">&#x00A0;</span><span 
   8286 class="cmtt-8">&#x00A0;</span><span 
   8287 class="cmtt-8">&#x00A0;</span><span 
   8288 class="cmtt-8">&#x00A0;</span><span 
   8289 class="cmtt-8">&#x00A0;</span><span 
   8290 class="cmtt-8">&#x00A0;</span><span 
   8291 class="cmtt-8">&#x00A0;</span><span 
   8292 class="cmtt-8">&#x00A0;</span><span 
   8293 class="cmtt-8">&#x00A0;</span><span 
   8294 class="cmtt-8">&#x00A0;26)</span><span 
   8295 class="cmtt-8">&#x00A0;vector</span><span 
   8296 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span 
   8297 class="cmtt-8">&#x00A0;element</span><span 
   8298 class="cmtt-8">&#x00A0;[i]</span><span 
   8299 class="cmtt-8">&#x00A0;=</span>
   8300 <br class="fancyvrb" /><a 
   8301  id="x1-101114r57"></a><span 
   8302 class="cmr-6">57</span><span 
   8303 class="cmtt-8">&#x00A0;</span><span 
   8304 class="cmtt-8">&#x00A0;</span><span 
   8305 class="cmtt-8">&#x00A0;</span><span 
   8306 class="cmtt-8">&#x00A0;</span><span 
   8307 class="cmtt-8">&#x00A0;</span><span 
   8308 class="cmtt-8">&#x00A0;</span><span 
   8309 class="cmtt-8">&#x00A0;</span><span 
   8310 class="cmtt-8">&#x00A0;</span><span 
   8311 class="cmtt-8">&#x00A0;</span><span 
   8312 class="cmtt-8">&#x00A0;</span><span 
   8313 class="cmtt-8">&#x00A0;</span><span 
   8314 class="cmtt-8">&#x00A0;</span><span 
   8315 class="cmtt-8">&#x00A0;</span><span 
   8316 class="cmtt-8">&#x00A0;</span><span 
   8317 class="cmtt-8">&#x00A0;</span><span 
   8318 class="cmtt-8">&#x00A0;</span><span 
   8319 class="cmtt-8">&#x00A0;</span><span 
   8320 class="cmtt-8">&#x00A0;</span><span 
   8321 class="cmtt-8">&#x00A0;</span><span 
   8322 class="cmtt-8">&#x00A0;</span><span 
   8323 class="cmtt-8">&#x00A0;</span><span 
   8324 class="cmtt-8">&#x00A0;</span><span 
   8325 class="cmtt-8">&#x00A0;</span><span 
   8326 class="cmtt-8">&#x00A0;</span><span 
   8327 class="cmtt-8">&#x00A0;</span><span 
   8328 class="cmtt-8">&#x00A0;</span><span 
   8329 class="cmtt-8">&#x00A0;</span><span 
   8330 class="cmtt-8">&#x00A0;</span><span 
   8331 class="cmtt-8">&#x00A0;</span><span 
   8332 class="cmtt-8">&#x00A0;[predicted]</span><span 
   8333 class="cmtt-8">&#x00A0;+</span><span 
   8334 class="cmtt-8">&#x00A0;([val]</span><span 
   8335 class="cmtt-8">&#x00A0;/</span><span 
   8336 class="cmtt-8">&#x00A0;2</span><span 
   8337 class="cmtt-8">&#x00A0;using</span><span 
   8338 class="cmtt-8">&#x00A0;integer</span><span 
   8339 class="cmtt-8">&#x00A0;division)</span>
   8340 <br class="fancyvrb" /><a 
   8341  id="x1-101116r58"></a><span 
   8342 class="cmr-6">58</span><span 
   8343 class="cmtt-8">&#x00A0;</span><span 
   8344 class="cmtt-8">&#x00A0;</span>
   8345 <br class="fancyvrb" /><a 
   8346  id="x1-101118r59"></a><span 
   8347 class="cmr-6">59</span><span 
   8348 class="cmtt-8">&#x00A0;</span><span 
   8349 class="cmtt-8">&#x00A0;</span><span 
   8350 class="cmtt-8">&#x00A0;</span><span 
   8351 class="cmtt-8">&#x00A0;</span><span 
   8352 class="cmtt-8">&#x00A0;</span><span 
   8353 class="cmtt-8">&#x00A0;</span><span 
   8354 class="cmtt-8">&#x00A0;</span><span 
   8355 class="cmtt-8">&#x00A0;</span><span 
   8356 class="cmtt-8">&#x00A0;</span><span 
   8357 class="cmtt-8">&#x00A0;</span><span 
   8358 class="cmtt-8">&#x00A0;</span><span 
   8359 class="cmtt-8">&#x00A0;</span><span 
   8360 class="cmtt-8">&#x00A0;</span><span 
   8361 class="cmtt-8">&#x00A0;</span><span 
   8362 class="cmtt-8">&#x00A0;</span><span 
   8363 class="cmtt-8">&#x00A0;</span><span 
   8364 class="cmtt-8">&#x00A0;</span><span 
   8365 class="cmtt-8">&#x00A0;</span><span 
   8366 class="cmtt-8">&#x00A0;</span><span 
   8367 class="cmtt-8">&#x00A0;</span><span 
   8368 class="cmtt-8">&#x00A0;</span><span 
   8369 class="cmtt-8">&#x00A0;</span><span 
   8370 class="cmtt-8">&#x00A0;</span><span 
   8371 class="cmtt-8">&#x00A0;</span><span 
   8372 class="cmsy-8">}</span>
   8373 <br class="fancyvrb" /><a 
   8374  id="x1-101120r60"></a><span 
   8375 class="cmr-6">60</span><span 
   8376 class="cmtt-8">&#x00A0;</span><span 
   8377 class="cmtt-8">&#x00A0;</span>
   8378 <br class="fancyvrb" /><a 
   8379  id="x1-101122r61"></a><span 
   8380 class="cmr-6">61</span><span 
   8381 class="cmtt-8">&#x00A0;</span><span 
   8382 class="cmtt-8">&#x00A0;</span><span 
   8383 class="cmtt-8">&#x00A0;</span><span 
   8384 class="cmtt-8">&#x00A0;</span><span 
   8385 class="cmtt-8">&#x00A0;</span><span 
   8386 class="cmtt-8">&#x00A0;</span><span 
   8387 class="cmtt-8">&#x00A0;</span><span 
   8388 class="cmtt-8">&#x00A0;</span><span 
   8389 class="cmtt-8">&#x00A0;</span><span 
   8390 class="cmtt-8">&#x00A0;</span><span 
   8391 class="cmtt-8">&#x00A0;</span><span 
   8392 class="cmtt-8">&#x00A0;</span><span 
   8393 class="cmtt-8">&#x00A0;</span><span 
   8394 class="cmtt-8">&#x00A0;</span><span 
   8395 class="cmtt-8">&#x00A0;</span><span 
   8396 class="cmtt-8">&#x00A0;</span><span 
   8397 class="cmtt-8">&#x00A0;</span><span 
   8398 class="cmtt-8">&#x00A0;</span><span 
   8399 class="cmsy-8">}</span>
   8400 <br class="fancyvrb" /><a 
   8401  id="x1-101124r62"></a><span 
   8402 class="cmr-6">62</span><span 
   8403 class="cmtt-8">&#x00A0;</span><span 
   8404 class="cmtt-8">&#x00A0;</span>
   8405 <br class="fancyvrb" /><a 
   8406  id="x1-101126r63"></a><span 
   8407 class="cmr-6">63</span><span 
   8408 class="cmtt-8">&#x00A0;</span><span 
   8409 class="cmtt-8">&#x00A0;</span><span 
   8410 class="cmtt-8">&#x00A0;</span><span 
   8411 class="cmtt-8">&#x00A0;</span><span 
   8412 class="cmtt-8">&#x00A0;</span><span 
   8413 class="cmtt-8">&#x00A0;</span><span 
   8414 class="cmtt-8">&#x00A0;</span><span 
   8415 class="cmtt-8">&#x00A0;</span><span 
   8416 class="cmtt-8">&#x00A0;</span><span 
   8417 class="cmtt-8">&#x00A0;</span><span 
   8418 class="cmtt-8">&#x00A0;</span><span 
   8419 class="cmtt-8">&#x00A0;</span><span 
   8420 class="cmsy-8">}</span><span 
   8421 class="cmtt-8">&#x00A0;else</span><span 
   8422 class="cmtt-8">&#x00A0;[val]</span><span 
   8423 class="cmtt-8">&#x00A0;is</span><span 
   8424 class="cmtt-8">&#x00A0;zero</span><span 
   8425 class="cmtt-8">&#x00A0;</span><span 
   8426 class="cmsy-8">{</span>
   8427 <br class="fancyvrb" /><a 
   8428  id="x1-101128r64"></a><span 
   8429 class="cmr-6">64</span><span 
   8430 class="cmtt-8">&#x00A0;</span><span 
   8431 class="cmtt-8">&#x00A0;</span>
   8432 <br class="fancyvrb" /><a 
   8433  id="x1-101130r65"></a><span 
   8434 class="cmr-6">65</span><span 
   8435 class="cmtt-8">&#x00A0;</span><span 
   8436 class="cmtt-8">&#x00A0;</span><span 
   8437 class="cmtt-8">&#x00A0;</span><span 
   8438 class="cmtt-8">&#x00A0;</span><span 
   8439 class="cmtt-8">&#x00A0;</span><span 
   8440 class="cmtt-8">&#x00A0;</span><span 
   8441 class="cmtt-8">&#x00A0;</span><span 
   8442 class="cmtt-8">&#x00A0;</span><span 
   8443 class="cmtt-8">&#x00A0;</span><span 
   8444 class="cmtt-8">&#x00A0;</span><span 
   8445 class="cmtt-8">&#x00A0;</span><span 
   8446 class="cmtt-8">&#x00A0;</span><span 
   8447 class="cmtt-8">&#x00A0;</span><span 
   8448 class="cmtt-8">&#x00A0;27)</span><span 
   8449 class="cmtt-8">&#x00A0;vector</span><span 
   8450 class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span 
   8451 class="cmtt-8">&#x00A0;element</span><span 
   8452 class="cmtt-8">&#x00A0;[i]</span><span 
   8453 class="cmtt-8">&#x00A0;=</span><span 
   8454 class="cmtt-8">&#x00A0;unset</span>
   8455 <br class="fancyvrb" /><a 
   8456  id="x1-101132r66"></a><span 
   8457 class="cmr-6">66</span><span 
   8458 class="cmtt-8">&#x00A0;</span><span 
   8459 class="cmtt-8">&#x00A0;</span><span 
   8460 class="cmtt-8">&#x00A0;</span><span 
   8461 class="cmtt-8">&#x00A0;</span><span 
   8462 class="cmtt-8">&#x00A0;</span><span 
   8463 class="cmtt-8">&#x00A0;</span><span 
   8464 class="cmtt-8">&#x00A0;</span><span 
   8465 class="cmtt-8">&#x00A0;</span><span 
   8466 class="cmtt-8">&#x00A0;</span><span 
   8467 class="cmtt-8">&#x00A0;</span><span 
   8468 class="cmtt-8">&#x00A0;</span><span 
   8469 class="cmtt-8">&#x00A0;</span><span 
   8470 class="cmtt-8">&#x00A0;</span><span 
   8471 class="cmtt-8">&#x00A0;28)</span><span 
   8472 class="cmtt-8">&#x00A0;vector</span><span 
   8473 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span 
   8474 class="cmtt-8">&#x00A0;element</span><span 
   8475 class="cmtt-8">&#x00A0;[i]</span><span 
   8476 class="cmtt-8">&#x00A0;=</span><span 
   8477 class="cmtt-8">&#x00A0;[predicted]</span>
   8478 <br class="fancyvrb" /><a 
   8479  id="x1-101134r67"></a><span 
   8480 class="cmr-6">67</span><span 
   8481 class="cmtt-8">&#x00A0;</span><span 
   8482 class="cmtt-8">&#x00A0;</span>
   8483 <br class="fancyvrb" /><a 
   8484  id="x1-101136r68"></a><span 
   8485 class="cmr-6">68</span><span 
   8486 class="cmtt-8">&#x00A0;</span><span 
   8487 class="cmtt-8">&#x00A0;</span><span 
   8488 class="cmtt-8">&#x00A0;</span><span 
   8489 class="cmtt-8">&#x00A0;</span><span 
   8490 class="cmtt-8">&#x00A0;</span><span 
   8491 class="cmtt-8">&#x00A0;</span><span 
   8492 class="cmtt-8">&#x00A0;</span><span 
   8493 class="cmtt-8">&#x00A0;</span><span 
   8494 class="cmtt-8">&#x00A0;</span><span 
   8495 class="cmtt-8">&#x00A0;</span><span 
   8496 class="cmtt-8">&#x00A0;</span><span 
   8497 class="cmtt-8">&#x00A0;</span><span 
   8498 class="cmsy-8">}</span>
   8499 <br class="fancyvrb" /><a 
   8500  id="x1-101138r69"></a><span 
   8501 class="cmr-6">69</span><span 
   8502 class="cmtt-8">&#x00A0;</span><span 
   8503 class="cmtt-8">&#x00A0;</span>
   8504 <br class="fancyvrb" /><a 
   8505  id="x1-101140r70"></a><span 
   8506 class="cmr-6">70</span><span 
   8507 class="cmtt-8">&#x00A0;</span><span 
   8508 class="cmtt-8">&#x00A0;</span><span 
   8509 class="cmtt-8">&#x00A0;</span><span 
   8510 class="cmtt-8">&#x00A0;</span><span 
   8511 class="cmtt-8">&#x00A0;</span><span 
   8512 class="cmtt-8">&#x00A0;</span><span 
   8513 class="cmtt-8">&#x00A0;</span><span 
   8514 class="cmsy-8">}</span>
   8515 <br class="fancyvrb" /><a 
   8516  id="x1-101142r71"></a><span 
   8517 class="cmr-6">71</span><span 
   8518 class="cmtt-8">&#x00A0;</span><span 
   8519 class="cmtt-8">&#x00A0;</span>
   8520 <br class="fancyvrb" /><a 
   8521  id="x1-101144r72"></a><span 
   8522 class="cmr-6">72</span><span 
   8523 class="cmtt-8">&#x00A0;</span><span 
   8524 class="cmtt-8">&#x00A0;</span><span 
   8525 class="cmtt-8">&#x00A0;29)</span><span 
   8526 class="cmtt-8">&#x00A0;done</span>
   8527 <br class="fancyvrb" /><a 
   8528  id="x1-101146r73"></a><span 
   8529 class="cmr-6">73</span><span 
   8530 class="cmtt-8">&#x00A0;</span><span 
   8531 class="cmtt-8">&#x00A0;</span>
   8532 </div>
   8533       </dd><dt class="description">
   8534 <span 
   8535 class="cmssbx-10x-x-120">step 2: curve synthesis</span> </dt><dd 
   8536 class="description">
   8537       <!--l. 338--><p class="noindent" >Curve synthesis generates a return vector <span 
   8538 class="cmtt-12">[floor] </span>of length <span 
   8539 class="cmtt-12">[n] </span>(where <span 
   8540 class="cmtt-12">[n] </span>is provided by
   8541       the decode process calling to floor decode). Floor 1 curve synthesis makes use of the
   8542       <span 
   8543 class="cmtt-12">[floor1_X_list]</span>, <span 
   8544 class="cmtt-12">[floor1_final_Y] </span>and <span 
   8545 class="cmtt-12">[floor1_step2_flag] </span>vectors, as well as
   8546       [floor1&#x02D9;multiplier] and [floor1&#x02D9;values] values.
   8547                                                                                         
   8548 
   8549                                                                                         
   8550       <!--l. 345--><p class="noindent" >Decode begins by sorting the scalars from vectors <span 
   8551 class="cmtt-12">[floor1_X_list]</span>, <span 
   8552 class="cmtt-12">[floor1_final_Y] </span>and
   8553       <span 
   8554 class="cmtt-12">[floor1_step2_flag] </span>together into new vectors <span 
   8555 class="cmtt-12">[floor1_X_list]&#8217;</span>, <span 
   8556 class="cmtt-12">[floor1_final_Y]&#8217;</span>
   8557       and <span 
   8558 class="cmtt-12">[floor1_step2_flag]&#8217; </span>according to ascending sort order of the values in
   8559       <span 
   8560 class="cmtt-12">[floor1_X_list]</span>. That is, sort the values of <span 
   8561 class="cmtt-12">[floor1_X_list] </span>and then apply the same
   8562       permutation to elements of the other two vectors so that the X, Y and step2&#x02D9;flag values still
   8563       match.
   8564       <!--l. 355--><p class="noindent" >Then compute the final curve in one pass:
   8565       <!--l. 357--><p class="noindent" >
   8566       <div class="fancyvrb" id="fancyvrb32">
   8567 <a 
   8568  id="x1-101148r1"></a><span 
   8569 class="cmr-6">1</span><span 
   8570 class="cmtt-8">&#x00A0;</span><span 
   8571 class="cmtt-8">&#x00A0;</span><span 
   8572 class="cmtt-8">&#x00A0;</span><span 
   8573 class="cmtt-8">&#x00A0;1)</span><span 
   8574 class="cmtt-8">&#x00A0;[hx]</span><span 
   8575 class="cmtt-8">&#x00A0;=</span><span 
   8576 class="cmtt-8">&#x00A0;0</span>
   8577 <br class="fancyvrb" /><a 
   8578  id="x1-101150r2"></a><span 
   8579 class="cmr-6">2</span><span 
   8580 class="cmtt-8">&#x00A0;</span><span 
   8581 class="cmtt-8">&#x00A0;</span><span 
   8582 class="cmtt-8">&#x00A0;</span><span 
   8583 class="cmtt-8">&#x00A0;2)</span><span 
   8584 class="cmtt-8">&#x00A0;[lx]</span><span 
   8585 class="cmtt-8">&#x00A0;=</span><span 
   8586 class="cmtt-8">&#x00A0;0</span>
   8587 <br class="fancyvrb" /><a 
   8588  id="x1-101152r3"></a><span 
   8589 class="cmr-6">3</span><span 
   8590 class="cmtt-8">&#x00A0;</span><span 
   8591 class="cmtt-8">&#x00A0;</span><span 
   8592 class="cmtt-8">&#x00A0;</span><span 
   8593 class="cmtt-8">&#x00A0;3)</span><span 
   8594 class="cmtt-8">&#x00A0;[ly]</span><span 
   8595 class="cmtt-8">&#x00A0;=</span><span 
   8596 class="cmtt-8">&#x00A0;vector</span><span 
   8597 class="cmtt-8">&#x00A0;[floor1_final_Y]&#8217;</span><span 
   8598 class="cmtt-8">&#x00A0;element</span><span 
   8599 class="cmtt-8">&#x00A0;[0]</span><span 
   8600 class="cmtt-8">&#x00A0;*</span><span 
   8601 class="cmtt-8">&#x00A0;[floor1_multiplier]</span>
   8602 <br class="fancyvrb" /><a 
   8603  id="x1-101154r4"></a><span 
   8604 class="cmr-6">4</span><span 
   8605 class="cmtt-8">&#x00A0;</span><span 
   8606 class="cmtt-8">&#x00A0;</span><span 
   8607 class="cmtt-8">&#x00A0;</span><span 
   8608 class="cmtt-8">&#x00A0;4)</span><span 
   8609 class="cmtt-8">&#x00A0;iterate</span><span 
   8610 class="cmtt-8">&#x00A0;[i]</span><span 
   8611 class="cmtt-8">&#x00A0;over</span><span 
   8612 class="cmtt-8">&#x00A0;the</span><span 
   8613 class="cmtt-8">&#x00A0;range</span><span 
   8614 class="cmtt-8">&#x00A0;1</span><span 
   8615 class="cmtt-8">&#x00A0;...</span><span 
   8616 class="cmtt-8">&#x00A0;[floor1_values]-1</span><span 
   8617 class="cmtt-8">&#x00A0;</span><span 
   8618 class="cmsy-8">{</span>
   8619 <br class="fancyvrb" /><a 
   8620  id="x1-101156r5"></a><span 
   8621 class="cmr-6">5</span><span 
   8622 class="cmtt-8">&#x00A0;</span><span 
   8623 class="cmtt-8">&#x00A0;</span>
   8624 <br class="fancyvrb" /><a 
   8625  id="x1-101158r6"></a><span 
   8626 class="cmr-6">6</span><span 
   8627 class="cmtt-8">&#x00A0;</span><span 
   8628 class="cmtt-8">&#x00A0;</span><span 
   8629 class="cmtt-8">&#x00A0;</span><span 
   8630 class="cmtt-8">&#x00A0;</span><span 
   8631 class="cmtt-8">&#x00A0;</span><span 
   8632 class="cmtt-8">&#x00A0;</span><span 
   8633 class="cmtt-8">&#x00A0;</span><span 
   8634 class="cmtt-8">&#x00A0;</span><span 
   8635 class="cmtt-8">&#x00A0;5)</span><span 
   8636 class="cmtt-8">&#x00A0;if</span><span 
   8637 class="cmtt-8">&#x00A0;(</span><span 
   8638 class="cmtt-8">&#x00A0;[floor1_step2_flag]&#8217;</span><span 
   8639 class="cmtt-8">&#x00A0;element</span><span 
   8640 class="cmtt-8">&#x00A0;[i]</span><span 
   8641 class="cmtt-8">&#x00A0;is</span><span 
   8642 class="cmtt-8">&#x00A0;set</span><span 
   8643 class="cmtt-8">&#x00A0;)</span><span 
   8644 class="cmtt-8">&#x00A0;</span><span 
   8645 class="cmsy-8">{</span>
   8646 <br class="fancyvrb" /><a 
   8647  id="x1-101160r7"></a><span 
   8648 class="cmr-6">7</span><span 
   8649 class="cmtt-8">&#x00A0;</span><span 
   8650 class="cmtt-8">&#x00A0;</span>
   8651 <br class="fancyvrb" /><a 
   8652  id="x1-101162r8"></a><span 
   8653 class="cmr-6">8</span><span 
   8654 class="cmtt-8">&#x00A0;</span><span 
   8655 class="cmtt-8">&#x00A0;</span><span 
   8656 class="cmtt-8">&#x00A0;</span><span 
   8657 class="cmtt-8">&#x00A0;</span><span 
   8658 class="cmtt-8">&#x00A0;</span><span 
   8659 class="cmtt-8">&#x00A0;</span><span 
   8660 class="cmtt-8">&#x00A0;</span><span 
   8661 class="cmtt-8">&#x00A0;</span><span 
   8662 class="cmtt-8">&#x00A0;</span><span 
   8663 class="cmtt-8">&#x00A0;</span><span 
   8664 class="cmtt-8">&#x00A0;</span><span 
   8665 class="cmtt-8">&#x00A0;</span><span 
   8666 class="cmtt-8">&#x00A0;</span><span 
   8667 class="cmtt-8">&#x00A0;</span><span 
   8668 class="cmtt-8">&#x00A0;6)</span><span 
   8669 class="cmtt-8">&#x00A0;[hy]</span><span 
   8670 class="cmtt-8">&#x00A0;=</span><span 
   8671 class="cmtt-8">&#x00A0;[floor1_final_Y]&#8217;</span><span 
   8672 class="cmtt-8">&#x00A0;element</span><span 
   8673 class="cmtt-8">&#x00A0;[i]</span><span 
   8674 class="cmtt-8">&#x00A0;*</span><span 
   8675 class="cmtt-8">&#x00A0;[floor1_multiplier]</span>
   8676 <br class="fancyvrb" /><a 
   8677  id="x1-101164r9"></a><span 
   8678 class="cmr-6">9</span><span 
   8679 class="cmtt-8">&#x00A0;</span><span 
   8680 class="cmtt-8">&#x00A0;</span><span 
   8681 class="cmtt-8">&#x00A0;    </span><span 
   8682 class="cmtt-8">&#x00A0;</span><span 
   8683 class="cmtt-8">&#x00A0;</span><span 
   8684 class="cmtt-8">&#x00A0;</span><span 
   8685 class="cmtt-8">&#x00A0;</span><span 
   8686 class="cmtt-8">&#x00A0;7)</span><span 
   8687 class="cmtt-8">&#x00A0;[hx]</span><span 
   8688 class="cmtt-8">&#x00A0;=</span><span 
   8689 class="cmtt-8">&#x00A0;[floor1_X_list]&#8217;</span><span 
   8690 class="cmtt-8">&#x00A0;element</span><span 
   8691 class="cmtt-8">&#x00A0;[i]</span>
   8692 <br class="fancyvrb" /><a 
   8693  id="x1-101166r10"></a><span 
   8694 class="cmr-6">10</span><span 
   8695 class="cmtt-8">&#x00A0;</span><span 
   8696 class="cmtt-8">&#x00A0;</span><span 
   8697 class="cmtt-8">&#x00A0;</span><span 
   8698 class="cmtt-8">&#x00A0;</span><span 
   8699 class="cmtt-8">&#x00A0;</span><span 
   8700 class="cmtt-8">&#x00A0;</span><span 
   8701 class="cmtt-8">&#x00A0;</span><span 
   8702 class="cmtt-8">&#x00A0;</span><span 
   8703 class="cmtt-8">&#x00A0;</span><span 
   8704 class="cmtt-8">&#x00A0;</span><span 
   8705 class="cmtt-8">&#x00A0;</span><span 
   8706 class="cmtt-8">&#x00A0;</span><span 
   8707 class="cmtt-8">&#x00A0;</span><span 
   8708 class="cmtt-8">&#x00A0;</span><span 
   8709 class="cmtt-8">&#x00A0;8)</span><span 
   8710 class="cmtt-8">&#x00A0;</span><a 
   8711 href="#x1-1230009.2.7"><span 
   8712 class="cmtt-8">render_line</span></a><span 
   8713 class="cmtt-8">(</span><span 
   8714 class="cmtt-8">&#x00A0;[lx],</span><span 
   8715 class="cmtt-8">&#x00A0;[ly],</span><span 
   8716 class="cmtt-8">&#x00A0;[hx],</span><span 
   8717 class="cmtt-8">&#x00A0;[hy],</span><span 
   8718 class="cmtt-8">&#x00A0;[floor]</span><span 
   8719 class="cmtt-8">&#x00A0;)</span>
   8720 <br class="fancyvrb" /><a 
   8721  id="x1-101168r11"></a><span 
   8722 class="cmr-6">11</span><span 
   8723 class="cmtt-8">&#x00A0;</span><span 
   8724 class="cmtt-8">&#x00A0;</span><span 
   8725 class="cmtt-8">&#x00A0;</span><span 
   8726 class="cmtt-8">&#x00A0;</span><span 
   8727 class="cmtt-8">&#x00A0;</span><span 
   8728 class="cmtt-8">&#x00A0;</span><span 
   8729 class="cmtt-8">&#x00A0;</span><span 
   8730 class="cmtt-8">&#x00A0;</span><span 
   8731 class="cmtt-8">&#x00A0;</span><span 
   8732 class="cmtt-8">&#x00A0;</span><span 
   8733 class="cmtt-8">&#x00A0;</span><span 
   8734 class="cmtt-8">&#x00A0;</span><span 
   8735 class="cmtt-8">&#x00A0;</span><span 
   8736 class="cmtt-8">&#x00A0;</span><span 
   8737 class="cmtt-8">&#x00A0;9)</span><span 
   8738 class="cmtt-8">&#x00A0;[lx]</span><span 
   8739 class="cmtt-8">&#x00A0;=</span><span 
   8740 class="cmtt-8">&#x00A0;[hx]</span>
   8741 <br class="fancyvrb" /><a 
   8742  id="x1-101170r12"></a><span 
   8743 class="cmr-6">12</span><span 
   8744 class="cmtt-8">&#x00A0;</span><span 
   8745 class="cmtt-8">&#x00A0;    </span><span 
   8746 class="cmtt-8">&#x00A0;</span><span 
   8747 class="cmtt-8">&#x00A0;</span><span 
   8748 class="cmtt-8">&#x00A0;</span><span 
   8749 class="cmtt-8">&#x00A0;10)</span><span 
   8750 class="cmtt-8">&#x00A0;[ly]</span><span 
   8751 class="cmtt-8">&#x00A0;=</span><span 
   8752 class="cmtt-8">&#x00A0;[hy]</span>
   8753 <br class="fancyvrb" /><a 
   8754  id="x1-101172r13"></a><span 
   8755 class="cmr-6">13</span><span 
   8756 class="cmtt-8">&#x00A0;</span><span 
   8757 class="cmtt-8">&#x00A0;</span><span 
   8758 class="cmtt-8">&#x00A0;</span><span 
   8759 class="cmtt-8">&#x00A0;</span><span 
   8760 class="cmtt-8">&#x00A0;</span><span 
   8761 class="cmtt-8">&#x00A0;</span><span 
   8762 class="cmtt-8">&#x00A0;</span><span 
   8763 class="cmtt-8">&#x00A0;</span><span 
   8764 class="cmtt-8">&#x00A0;</span><span 
   8765 class="cmtt-8">&#x00A0;</span><span 
   8766 class="cmtt-8">&#x00A0;</span><span 
   8767 class="cmtt-8">&#x00A0;</span><span 
   8768 class="cmsy-8">}</span>
   8769 <br class="fancyvrb" /><a 
   8770  id="x1-101174r14"></a><span 
   8771 class="cmr-6">14</span><span 
   8772 class="cmtt-8">&#x00A0;</span><span 
   8773 class="cmtt-8">&#x00A0;</span><span 
   8774 class="cmtt-8">&#x00A0;</span><span 
   8775 class="cmtt-8">&#x00A0;</span><span 
   8776 class="cmtt-8">&#x00A0;</span><span 
   8777 class="cmtt-8">&#x00A0;</span><span 
   8778 class="cmtt-8">&#x00A0;</span><span 
   8779 class="cmsy-8">}</span>
   8780 <br class="fancyvrb" /><a 
   8781  id="x1-101176r15"></a><span 
   8782 class="cmr-6">15</span><span 
   8783 class="cmtt-8">&#x00A0;</span><span 
   8784 class="cmtt-8">&#x00A0;</span>
   8785 <br class="fancyvrb" /><a 
   8786  id="x1-101178r16"></a><span 
   8787 class="cmr-6">16</span><span 
   8788 class="cmtt-8">&#x00A0;</span><span 
   8789 class="cmtt-8">&#x00A0;</span><span 
   8790 class="cmtt-8">&#x00A0;11)</span><span 
   8791 class="cmtt-8">&#x00A0;if</span><span 
   8792 class="cmtt-8">&#x00A0;(</span><span 
   8793 class="cmtt-8">&#x00A0;[hx]</span><span 
   8794 class="cmtt-8">&#x00A0;is</span><span 
   8795 class="cmtt-8">&#x00A0;less</span><span 
   8796 class="cmtt-8">&#x00A0;than</span><span 
   8797 class="cmtt-8">&#x00A0;[n]</span><span 
   8798 class="cmtt-8">&#x00A0;)</span><span 
   8799 class="cmtt-8">&#x00A0;</span><span 
   8800 class="cmsy-8">{</span>
   8801 <br class="fancyvrb" /><a 
   8802  id="x1-101180r17"></a><span 
   8803 class="cmr-6">17</span><span 
   8804 class="cmtt-8">&#x00A0;</span><span 
   8805 class="cmtt-8">&#x00A0;</span>
   8806 <br class="fancyvrb" /><a 
   8807  id="x1-101182r18"></a><span 
   8808 class="cmr-6">18</span><span 
   8809 class="cmtt-8">&#x00A0;</span><span 
   8810 class="cmtt-8">&#x00A0;</span><span 
   8811 class="cmtt-8">&#x00A0;</span><span 
   8812 class="cmtt-8">&#x00A0;</span><span 
   8813 class="cmtt-8">&#x00A0;</span><span 
   8814 class="cmtt-8">&#x00A0;</span><span 
   8815 class="cmtt-8">&#x00A0;</span><span 
   8816 class="cmtt-8">&#x00A0;</span><span 
   8817 class="cmtt-8">&#x00A0;</span><span 
   8818 class="cmtt-8">&#x00A0;12)</span><span 
   8819 class="cmtt-8">&#x00A0;</span><a 
   8820 href="#x1-1230009.2.7"><span 
   8821 class="cmtt-8">render_line</span></a><span 
   8822 class="cmtt-8">(</span><span 
   8823 class="cmtt-8">&#x00A0;[hx],</span><span 
   8824 class="cmtt-8">&#x00A0;[hy],</span><span 
   8825 class="cmtt-8">&#x00A0;[n],</span><span 
   8826 class="cmtt-8">&#x00A0;[hy],</span><span 
   8827 class="cmtt-8">&#x00A0;[floor]</span><span 
   8828 class="cmtt-8">&#x00A0;)</span>
   8829 <br class="fancyvrb" /><a 
   8830  id="x1-101184r19"></a><span 
   8831 class="cmr-6">19</span><span 
   8832 class="cmtt-8">&#x00A0;</span><span 
   8833 class="cmtt-8">&#x00A0;</span>
   8834 <br class="fancyvrb" /><a 
   8835  id="x1-101186r20"></a><span 
   8836 class="cmr-6">20</span><span 
   8837 class="cmtt-8">&#x00A0;</span><span 
   8838 class="cmtt-8">&#x00A0;</span><span 
   8839 class="cmtt-8">&#x00A0;</span><span 
   8840 class="cmtt-8">&#x00A0;</span><span 
   8841 class="cmtt-8">&#x00A0;</span><span 
   8842 class="cmtt-8">&#x00A0;</span><span 
   8843 class="cmtt-8">&#x00A0;</span><span 
   8844 class="cmsy-8">}</span>
   8845 <br class="fancyvrb" /><a 
   8846  id="x1-101188r21"></a><span 
   8847 class="cmr-6">21</span><span 
   8848 class="cmtt-8">&#x00A0;</span><span 
   8849 class="cmtt-8">&#x00A0;</span>
   8850 <br class="fancyvrb" /><a 
   8851  id="x1-101190r22"></a><span 
   8852 class="cmr-6">22</span><span 
   8853 class="cmtt-8">&#x00A0;</span><span 
   8854 class="cmtt-8">&#x00A0;</span><span 
   8855 class="cmtt-8">&#x00A0;13)</span><span 
   8856 class="cmtt-8">&#x00A0;if</span><span 
   8857 class="cmtt-8">&#x00A0;(</span><span 
   8858 class="cmtt-8">&#x00A0;[hx]</span><span 
   8859 class="cmtt-8">&#x00A0;is</span><span 
   8860 class="cmtt-8">&#x00A0;greater</span><span 
   8861 class="cmtt-8">&#x00A0;than</span><span 
   8862 class="cmtt-8">&#x00A0;[n]</span><span 
   8863 class="cmtt-8">&#x00A0;)</span><span 
   8864 class="cmtt-8">&#x00A0;</span><span 
   8865 class="cmsy-8">{</span>
   8866 <br class="fancyvrb" /><a 
   8867  id="x1-101192r23"></a><span 
   8868 class="cmr-6">23</span><span 
   8869 class="cmtt-8">&#x00A0;</span><span 
   8870 class="cmtt-8">&#x00A0;</span>
   8871 <br class="fancyvrb" /><a 
   8872  id="x1-101194r24"></a><span 
   8873 class="cmr-6">24</span><span 
   8874 class="cmtt-8">&#x00A0;</span><span 
   8875 class="cmtt-8">&#x00A0;</span><span 
   8876 class="cmtt-8">&#x00A0;</span><span 
   8877 class="cmtt-8">&#x00A0;</span><span 
   8878 class="cmtt-8">&#x00A0;</span><span 
   8879 class="cmtt-8">&#x00A0;</span><span 
   8880 class="cmtt-8">&#x00A0;</span><span 
   8881 class="cmtt-8">&#x00A0;</span><span 
   8882 class="cmtt-8">&#x00A0;</span><span 
   8883 class="cmtt-8">&#x00A0;</span><span 
   8884 class="cmtt-8">&#x00A0;</span><span 
   8885 class="cmtt-8">&#x00A0;</span><span 
   8886 class="cmtt-8">&#x00A0;</span><span 
   8887 class="cmtt-8">&#x00A0;14)</span><span 
   8888 class="cmtt-8">&#x00A0;truncate</span><span 
   8889 class="cmtt-8">&#x00A0;vector</span><span 
   8890 class="cmtt-8">&#x00A0;[floor]</span><span 
   8891 class="cmtt-8">&#x00A0;to</span><span 
   8892 class="cmtt-8">&#x00A0;[n]</span><span 
   8893 class="cmtt-8">&#x00A0;elements</span>
   8894 <br class="fancyvrb" /><a 
   8895  id="x1-101196r25"></a><span 
   8896 class="cmr-6">25</span><span 
   8897 class="cmtt-8">&#x00A0;</span><span 
   8898 class="cmtt-8">&#x00A0;</span>
   8899 <br class="fancyvrb" /><a 
   8900  id="x1-101198r26"></a><span 
   8901 class="cmr-6">26</span><span 
   8902 class="cmtt-8">&#x00A0;</span><span 
   8903 class="cmtt-8">&#x00A0;</span><span 
   8904 class="cmtt-8">&#x00A0;</span><span 
   8905 class="cmtt-8">&#x00A0;</span><span 
   8906 class="cmtt-8">&#x00A0;</span><span 
   8907 class="cmtt-8">&#x00A0;</span><span 
   8908 class="cmtt-8">&#x00A0;</span><span 
   8909 class="cmsy-8">}</span>
   8910 <br class="fancyvrb" /><a 
   8911  id="x1-101200r27"></a><span 
   8912 class="cmr-6">27</span><span 
   8913 class="cmtt-8">&#x00A0;</span><span 
   8914 class="cmtt-8">&#x00A0;</span>
   8915 <br class="fancyvrb" /><a 
   8916  id="x1-101202r28"></a><span 
   8917 class="cmr-6">28</span><span 
   8918 class="cmtt-8">&#x00A0;</span><span 
   8919 class="cmtt-8">&#x00A0;</span><span 
   8920 class="cmtt-8">&#x00A0;15)</span><span 
   8921 class="cmtt-8">&#x00A0;for</span><span 
   8922 class="cmtt-8">&#x00A0;each</span><span 
   8923 class="cmtt-8">&#x00A0;scalar</span><span 
   8924 class="cmtt-8">&#x00A0;in</span><span 
   8925 class="cmtt-8">&#x00A0;vector</span><span 
   8926 class="cmtt-8">&#x00A0;[floor],</span><span 
   8927 class="cmtt-8">&#x00A0;perform</span><span 
   8928 class="cmtt-8">&#x00A0;a</span><span 
   8929 class="cmtt-8">&#x00A0;lookup</span><span 
   8930 class="cmtt-8">&#x00A0;substitution</span><span 
   8931 class="cmtt-8">&#x00A0;using</span>
   8932 <br class="fancyvrb" /><a 
   8933  id="x1-101204r29"></a><span 
   8934 class="cmr-6">29</span><span 
   8935 class="cmtt-8">&#x00A0;</span><span 
   8936 class="cmtt-8">&#x00A0;</span><span 
   8937 class="cmtt-8">&#x00A0;</span><span 
   8938 class="cmtt-8">&#x00A0;</span><span 
   8939 class="cmtt-8">&#x00A0;</span><span 
   8940 class="cmtt-8">&#x00A0;</span><span 
   8941 class="cmtt-8">&#x00A0;the</span><span 
   8942 class="cmtt-8">&#x00A0;scalar</span><span 
   8943 class="cmtt-8">&#x00A0;value</span><span 
   8944 class="cmtt-8">&#x00A0;from</span><span 
   8945 class="cmtt-8">&#x00A0;[floor]</span><span 
   8946 class="cmtt-8">&#x00A0;as</span><span 
   8947 class="cmtt-8">&#x00A0;an</span><span 
   8948 class="cmtt-8">&#x00A0;offset</span><span 
   8949 class="cmtt-8">&#x00A0;into</span><span 
   8950 class="cmtt-8">&#x00A0;the</span><span 
   8951 class="cmtt-8">&#x00A0;vector</span><span 
   8952 class="cmtt-8">&#x00A0;</span><a 
   8953 href="#x1-12500010.1"><span 
   8954 class="cmtt-8">[floor1_inverse_dB_static_table]</span></a>
   8955 <br class="fancyvrb" /><a 
   8956  id="x1-101206r30"></a><span 
   8957 class="cmr-6">30</span><span 
   8958 class="cmtt-8">&#x00A0;</span><span 
   8959 class="cmtt-8">&#x00A0;</span>
   8960 <br class="fancyvrb" /><a 
   8961  id="x1-101208r31"></a><span 
   8962 class="cmr-6">31</span><span 
   8963 class="cmtt-8">&#x00A0;</span><span 
   8964 class="cmtt-8">&#x00A0;</span><span 
   8965 class="cmtt-8">&#x00A0;16)</span><span 
   8966 class="cmtt-8">&#x00A0;done</span>
   8967 <br class="fancyvrb" /><a 
   8968  id="x1-101210r32"></a><span 
   8969 class="cmr-6">32</span><span 
   8970 class="cmtt-8">&#x00A0;</span><span 
   8971 class="cmtt-8">&#x00A0;</span>
   8972 </div>
   8973       </dd></dl>
   8974                                                                                         
   8975 
   8976                                                                                         
   8977 <h3 class="sectionHead"><span class="titlemark">8  </span> <a 
   8978  id="x1-1020008"></a>Residue setup and decode</h3>
   8979 <!--l. 6--><p class="noindent" >
   8980 <h4 class="subsectionHead"><span class="titlemark">8.1  </span> <a 
   8981  id="x1-1030008.1"></a>Overview</h4>
   8982 <!--l. 8--><p class="noindent" >A residue vector represents the fine detail of the audio spectrum of one channel in an audio frame
   8983 after the encoder subtracts the floor curve and performs any channel coupling. A residue vector
   8984 may represent spectral lines, spectral magnitude, spectral phase or hybrids as mixed by channel
   8985 coupling. The exact semantic content of the vector does not matter to the residue
   8986 abstraction.
   8987 <!--l. 15--><p class="noindent" >Whatever the exact qualities, the Vorbis residue abstraction codes the residue vectors into the
   8988 bitstream packet, and then reconstructs the vectors during decode. Vorbis makes use of three
   8989 different encoding variants (numbered 0, 1 and 2) of the same basic vector encoding
   8990 abstraction.
   8991 <!--l. 23--><p class="noindent" >
   8992 <h4 class="subsectionHead"><span class="titlemark">8.2  </span> <a 
   8993  id="x1-1040008.2"></a>Residue format</h4>
   8994 <!--l. 25--><p class="noindent" >Residue format partitions each vector in the vector bundle into chunks, classifies each
   8995 chunk, encodes the chunk classifications and finally encodes the chunks themselves
   8996 using the the specific VQ arrangement defined for each selected classification. The
   8997 exact interleaving and partitioning vary by residue encoding number, however the
   8998 high-level process used to classify and encode the residue vector is the same in all three
   8999 variants.
   9000 <!--l. 33--><p class="noindent" >A set of coded residue vectors are all of the same length. High level coding structure, ignoring for
   9001 the moment exactly how a partition is encoded and simply trusting that it is, is as
   9002 follows:
   9003       <ul class="itemize1">
   9004       <li class="itemize">Each vector is partitioned into multiple equal sized chunks according to configuration
   9005       specified. If we have a vector size of <span 
   9006 class="cmti-12">n</span>, a partition size <span 
   9007 class="cmti-12">residue&#x02D9;partition&#x02D9;size</span>, and
   9008       a  total  of  <span 
   9009 class="cmti-12">ch  </span>residue  vectors,  the  total  number  of  partitioned  chunks  coded  is
   9010                                                                                         
   9011 
   9012                                                                                         
   9013       <span 
   9014 class="cmti-12">n</span>/<span 
   9015 class="cmti-12">residue&#x02D9;partition&#x02D9;size</span>*<span 
   9016 class="cmti-12">ch</span>. It is important to note that the integer division truncates.
   9017       In the below example, we assume an example <span 
   9018 class="cmti-12">residue&#x02D9;partition&#x02D9;size </span>of 8.
   9019       </li>
   9020       <li class="itemize">Each partition in each vector has a classification number that specifies which of
   9021       multiple configured VQ codebook setups are used to decode that partition. The
   9022       classification numbers of each partition can be thought of as forming a vector in
   9023       their own right, as in the illustration below. Just as the residue vectors are coded
   9024       in grouped partitions to increase encoding efficiency, the classification vector is also
   9025       partitioned into chunks. The integer elements of each scalar in a classification chunk
   9026       are built into a single scalar that represents the classification numbers in that chunk.
   9027       In the below example, the classification codeword encodes two classification numbers.
   9028       </li>
   9029       <li class="itemize">The values in a residue vector may be encoded monolithically in a single pass through
   9030       the residue vector, but more often efficient codebook design dictates that each vector
   9031       is encoded as the additive sum of several passes through the residue vector using
   9032       more than one VQ codebook. Thus, each residue value potentially accumulates values
   9033       from multiple decode passes. The classification value associated with a partition is
   9034       the same in each pass, thus the classification codeword is coded only in the first pass.
   9035       </li></ul>
   9036 <div class="center" 
   9037 >
   9038 <!--l. 70--><p class="noindent" >
   9039 
   9040 <!--l. 71--><p class="noindent" ><img 
   9041 src="residue-pack.png" alt="PIC"  
   9042 >
   9043 <br /> <div class="caption" 
   9044 ><span class="id">Figure&#x00A0;11: </span><span  
   9045 class="content">illustration of residue vector format</span></div><!--tex4ht:label?: x1-10400111 -->
   9046 </div>
   9047 <!--l. 77--><p class="noindent" >
   9048 <h4 class="subsectionHead"><span class="titlemark">8.3  </span> <a 
   9049  id="x1-1050008.3"></a>residue 0</h4>
   9050 <!--l. 79--><p class="noindent" >Residue 0 and 1 differ only in the way the values within a residue partition are interleaved during
   9051 partition encoding (visually treated as a black box&#8211;or cyan box or brown box&#8211;in the above
   9052 figure).
   9053 <!--l. 83--><p class="noindent" >Residue encoding 0 interleaves VQ encoding according to the dimension of the codebook used to
   9054                                                                                         
   9055 
   9056                                                                                         
   9057 encode a partition in a specific pass. The dimension of the codebook need not be the same in
   9058 multiple passes, however the partition size must be an even multiple of the codebook
   9059 dimension.
   9060 <!--l. 89--><p class="noindent" >As an example, assume a partition vector of size eight, to be encoded by residue 0 using
   9061 codebook sizes of 8, 4, 2 and 1:
   9062 <!--l. 92--><p class="noindent" >
   9063 <div class="fancyvrb" id="fancyvrb33">
   9064 <a 
   9065  id="x1-105002r1"></a><span 
   9066 class="cmr-6">1</span><span 
   9067 class="cmtt-8">&#x00A0;</span><span 
   9068 class="cmtt-8">&#x00A0;</span>
   9069 <br class="fancyvrb" /><a 
   9070  id="x1-105004r2"></a><span 
   9071 class="cmr-6">2</span><span 
   9072 class="cmtt-8">&#x00A0;</span><span 
   9073 class="cmtt-8">&#x00A0;</span><span 
   9074 class="cmtt-8">&#x00A0;</span><span 
   9075 class="cmtt-8">&#x00A0;</span><span 
   9076 class="cmtt-8">&#x00A0;</span><span 
   9077 class="cmtt-8">&#x00A0;</span><span 
   9078 class="cmtt-8">&#x00A0;</span><span 
   9079 class="cmtt-8">&#x00A0;</span><span 
   9080 class="cmtt-8">&#x00A0;</span><span 
   9081 class="cmtt-8">&#x00A0;</span><span 
   9082 class="cmtt-8">&#x00A0;</span><span 
   9083 class="cmtt-8">&#x00A0;</span><span 
   9084 class="cmtt-8">&#x00A0;</span><span 
   9085 class="cmtt-8">&#x00A0;original</span><span 
   9086 class="cmtt-8">&#x00A0;residue</span><span 
   9087 class="cmtt-8">&#x00A0;vector:</span><span 
   9088 class="cmtt-8">&#x00A0;[</span><span 
   9089 class="cmtt-8">&#x00A0;0</span><span 
   9090 class="cmtt-8">&#x00A0;1</span><span 
   9091 class="cmtt-8">&#x00A0;2</span><span 
   9092 class="cmtt-8">&#x00A0;3</span><span 
   9093 class="cmtt-8">&#x00A0;4</span><span 
   9094 class="cmtt-8">&#x00A0;5</span><span 
   9095 class="cmtt-8">&#x00A0;6</span><span 
   9096 class="cmtt-8">&#x00A0;7</span><span 
   9097 class="cmtt-8">&#x00A0;]</span>
   9098 <br class="fancyvrb" /><a 
   9099  id="x1-105006r3"></a><span 
   9100 class="cmr-6">3</span><span 
   9101 class="cmtt-8">&#x00A0;</span><span 
   9102 class="cmtt-8">&#x00A0;</span>
   9103 <br class="fancyvrb" /><a 
   9104  id="x1-105008r4"></a><span 
   9105 class="cmr-6">4</span><span 
   9106 class="cmtt-8">&#x00A0;</span><span 
   9107 class="cmtt-8">&#x00A0;codebook</span><span 
   9108 class="cmtt-8">&#x00A0;dimensions</span><span 
   9109 class="cmtt-8">&#x00A0;=</span><span 
   9110 class="cmtt-8">&#x00A0;8</span><span 
   9111 class="cmtt-8">&#x00A0;</span><span 
   9112 class="cmtt-8">&#x00A0;encoded</span><span 
   9113 class="cmtt-8">&#x00A0;as:</span><span 
   9114 class="cmtt-8">&#x00A0;[</span><span 
   9115 class="cmtt-8">&#x00A0;0</span><span 
   9116 class="cmtt-8">&#x00A0;1</span><span 
   9117 class="cmtt-8">&#x00A0;2</span><span 
   9118 class="cmtt-8">&#x00A0;3</span><span 
   9119 class="cmtt-8">&#x00A0;4</span><span 
   9120 class="cmtt-8">&#x00A0;5</span><span 
   9121 class="cmtt-8">&#x00A0;6</span><span 
   9122 class="cmtt-8">&#x00A0;7</span><span 
   9123 class="cmtt-8">&#x00A0;]</span>
   9124 <br class="fancyvrb" /><a 
   9125  id="x1-105010r5"></a><span 
   9126 class="cmr-6">5</span><span 
   9127 class="cmtt-8">&#x00A0;</span><span 
   9128 class="cmtt-8">&#x00A0;</span>
   9129 <br class="fancyvrb" /><a 
   9130  id="x1-105012r6"></a><span 
   9131 class="cmr-6">6</span><span 
   9132 class="cmtt-8">&#x00A0;</span><span 
   9133 class="cmtt-8">&#x00A0;codebook</span><span 
   9134 class="cmtt-8">&#x00A0;dimensions</span><span 
   9135 class="cmtt-8">&#x00A0;=</span><span 
   9136 class="cmtt-8">&#x00A0;4</span><span 
   9137 class="cmtt-8">&#x00A0;</span><span 
   9138 class="cmtt-8">&#x00A0;encoded</span><span 
   9139 class="cmtt-8">&#x00A0;as:</span><span 
   9140 class="cmtt-8">&#x00A0;[</span><span 
   9141 class="cmtt-8">&#x00A0;0</span><span 
   9142 class="cmtt-8">&#x00A0;2</span><span 
   9143 class="cmtt-8">&#x00A0;4</span><span 
   9144 class="cmtt-8">&#x00A0;6</span><span 
   9145 class="cmtt-8">&#x00A0;],</span><span 
   9146 class="cmtt-8">&#x00A0;[</span><span 
   9147 class="cmtt-8">&#x00A0;1</span><span 
   9148 class="cmtt-8">&#x00A0;3</span><span 
   9149 class="cmtt-8">&#x00A0;5</span><span 
   9150 class="cmtt-8">&#x00A0;7</span><span 
   9151 class="cmtt-8">&#x00A0;]</span>
   9152 <br class="fancyvrb" /><a 
   9153  id="x1-105014r7"></a><span 
   9154 class="cmr-6">7</span><span 
   9155 class="cmtt-8">&#x00A0;</span><span 
   9156 class="cmtt-8">&#x00A0;</span>
   9157 <br class="fancyvrb" /><a 
   9158  id="x1-105016r8"></a><span 
   9159 class="cmr-6">8</span><span 
   9160 class="cmtt-8">&#x00A0;</span><span 
   9161 class="cmtt-8">&#x00A0;codebook</span><span 
   9162 class="cmtt-8">&#x00A0;dimensions</span><span 
   9163 class="cmtt-8">&#x00A0;=</span><span 
   9164 class="cmtt-8">&#x00A0;2</span><span 
   9165 class="cmtt-8">&#x00A0;</span><span 
   9166 class="cmtt-8">&#x00A0;encoded</span><span 
   9167 class="cmtt-8">&#x00A0;as:</span><span 
   9168 class="cmtt-8">&#x00A0;[</span><span 
   9169 class="cmtt-8">&#x00A0;0</span><span 
   9170 class="cmtt-8">&#x00A0;4</span><span 
   9171 class="cmtt-8">&#x00A0;],</span><span 
   9172 class="cmtt-8">&#x00A0;[</span><span 
   9173 class="cmtt-8">&#x00A0;1</span><span 
   9174 class="cmtt-8">&#x00A0;5</span><span 
   9175 class="cmtt-8">&#x00A0;],</span><span 
   9176 class="cmtt-8">&#x00A0;[</span><span 
   9177 class="cmtt-8">&#x00A0;2</span><span 
   9178 class="cmtt-8">&#x00A0;6</span><span 
   9179 class="cmtt-8">&#x00A0;],</span><span 
   9180 class="cmtt-8">&#x00A0;[</span><span 
   9181 class="cmtt-8">&#x00A0;3</span><span 
   9182 class="cmtt-8">&#x00A0;7</span><span 
   9183 class="cmtt-8">&#x00A0;]</span>
   9184 <br class="fancyvrb" /><a 
   9185  id="x1-105018r9"></a><span 
   9186 class="cmr-6">9</span><span 
   9187 class="cmtt-8">&#x00A0;</span><span 
   9188 class="cmtt-8">&#x00A0;</span>
   9189 <br class="fancyvrb" /><a 
   9190  id="x1-105020r10"></a><span 
   9191 class="cmr-6">10</span><span 
   9192 class="cmtt-8">&#x00A0;</span><span 
   9193 class="cmtt-8">&#x00A0;codebook</span><span 
   9194 class="cmtt-8">&#x00A0;dimensions</span><span 
   9195 class="cmtt-8">&#x00A0;=</span><span 
   9196 class="cmtt-8">&#x00A0;1</span><span 
   9197 class="cmtt-8">&#x00A0;</span><span 
   9198 class="cmtt-8">&#x00A0;encoded</span><span 
   9199 class="cmtt-8">&#x00A0;as:</span><span 
   9200 class="cmtt-8">&#x00A0;[</span><span 
   9201 class="cmtt-8">&#x00A0;0</span><span 
   9202 class="cmtt-8">&#x00A0;],</span><span 
   9203 class="cmtt-8">&#x00A0;[</span><span 
   9204 class="cmtt-8">&#x00A0;1</span><span 
   9205 class="cmtt-8">&#x00A0;],</span><span 
   9206 class="cmtt-8">&#x00A0;[</span><span 
   9207 class="cmtt-8">&#x00A0;2</span><span 
   9208 class="cmtt-8">&#x00A0;],</span><span 
   9209 class="cmtt-8">&#x00A0;[</span><span 
   9210 class="cmtt-8">&#x00A0;3</span><span 
   9211 class="cmtt-8">&#x00A0;],</span><span 
   9212 class="cmtt-8">&#x00A0;[</span><span 
   9213 class="cmtt-8">&#x00A0;4</span><span 
   9214 class="cmtt-8">&#x00A0;],</span><span 
   9215 class="cmtt-8">&#x00A0;[</span><span 
   9216 class="cmtt-8">&#x00A0;5</span><span 
   9217 class="cmtt-8">&#x00A0;],</span><span 
   9218 class="cmtt-8">&#x00A0;[</span><span 
   9219 class="cmtt-8">&#x00A0;6</span><span 
   9220 class="cmtt-8">&#x00A0;],</span><span 
   9221 class="cmtt-8">&#x00A0;[</span><span 
   9222 class="cmtt-8">&#x00A0;7</span><span 
   9223 class="cmtt-8">&#x00A0;]</span>
   9224 <br class="fancyvrb" /><a 
   9225  id="x1-105022r11"></a><span 
   9226 class="cmr-6">11</span><span 
   9227 class="cmtt-8">&#x00A0;</span><span 
   9228 class="cmtt-8">&#x00A0;</span>
   9229 </div>
   9230 <!--l. 106--><p class="noindent" >It is worth mentioning at this point that no configurable value in the residue coding setup is
   9231 restricted to a power of two.
   9232 <!--l. 111--><p class="noindent" >
   9233 <h4 class="subsectionHead"><span class="titlemark">8.4  </span> <a 
   9234  id="x1-1060008.4"></a>residue 1</h4>
   9235 <!--l. 113--><p class="noindent" >Residue 1 does not interleave VQ encoding. It represents partition vector scalars in order. As
   9236 with residue 0, however, partition length must be an integer multiple of the codebook dimension,
   9237 although dimension may vary from pass to pass.
   9238 <!--l. 118--><p class="noindent" >As an example, assume a partition vector of size eight, to be encoded by residue 0 using
   9239 codebook sizes of 8, 4, 2 and 1:
   9240 <!--l. 121--><p class="noindent" >
   9241 <div class="fancyvrb" id="fancyvrb34">
   9242 <a 
   9243  id="x1-106002r1"></a><span 
   9244 class="cmr-6">1</span><span 
   9245 class="cmtt-8">&#x00A0;</span><span 
   9246 class="cmtt-8">&#x00A0;</span>
   9247 <br class="fancyvrb" /><a 
   9248  id="x1-106004r2"></a><span 
   9249 class="cmr-6">2</span><span 
   9250 class="cmtt-8">&#x00A0;</span><span 
   9251 class="cmtt-8">&#x00A0;</span><span 
   9252 class="cmtt-8">&#x00A0;</span><span 
   9253 class="cmtt-8">&#x00A0;</span><span 
   9254 class="cmtt-8">&#x00A0;</span><span 
   9255 class="cmtt-8">&#x00A0;</span><span 
   9256 class="cmtt-8">&#x00A0;</span><span 
   9257 class="cmtt-8">&#x00A0;</span><span 
   9258 class="cmtt-8">&#x00A0;</span><span 
   9259 class="cmtt-8">&#x00A0;</span><span 
   9260 class="cmtt-8">&#x00A0;</span><span 
   9261 class="cmtt-8">&#x00A0;</span><span 
   9262 class="cmtt-8">&#x00A0;</span><span 
   9263 class="cmtt-8">&#x00A0;original</span><span 
   9264 class="cmtt-8">&#x00A0;residue</span><span 
   9265 class="cmtt-8">&#x00A0;vector:</span><span 
   9266 class="cmtt-8">&#x00A0;[</span><span 
   9267 class="cmtt-8">&#x00A0;0</span><span 
   9268 class="cmtt-8">&#x00A0;1</span><span 
   9269 class="cmtt-8">&#x00A0;2</span><span 
   9270 class="cmtt-8">&#x00A0;3</span><span 
   9271 class="cmtt-8">&#x00A0;4</span><span 
   9272 class="cmtt-8">&#x00A0;5</span><span 
   9273 class="cmtt-8">&#x00A0;6</span><span 
   9274 class="cmtt-8">&#x00A0;7</span><span 
   9275 class="cmtt-8">&#x00A0;]</span>
   9276 <br class="fancyvrb" /><a 
   9277  id="x1-106006r3"></a><span 
   9278 class="cmr-6">3</span><span 
   9279 class="cmtt-8">&#x00A0;</span><span 
   9280 class="cmtt-8">&#x00A0;</span>
   9281 <br class="fancyvrb" /><a 
   9282  id="x1-106008r4"></a><span 
   9283 class="cmr-6">4</span><span 
   9284 class="cmtt-8">&#x00A0;</span><span 
   9285 class="cmtt-8">&#x00A0;codebook</span><span 
   9286 class="cmtt-8">&#x00A0;dimensions</span><span 
   9287 class="cmtt-8">&#x00A0;=</span><span 
   9288 class="cmtt-8">&#x00A0;8</span><span 
   9289 class="cmtt-8">&#x00A0;</span><span 
   9290 class="cmtt-8">&#x00A0;encoded</span><span 
   9291 class="cmtt-8">&#x00A0;as:</span><span 
   9292 class="cmtt-8">&#x00A0;[</span><span 
   9293 class="cmtt-8">&#x00A0;0</span><span 
   9294 class="cmtt-8">&#x00A0;1</span><span 
   9295 class="cmtt-8">&#x00A0;2</span><span 
   9296 class="cmtt-8">&#x00A0;3</span><span 
   9297 class="cmtt-8">&#x00A0;4</span><span 
   9298 class="cmtt-8">&#x00A0;5</span><span 
   9299 class="cmtt-8">&#x00A0;6</span><span 
   9300 class="cmtt-8">&#x00A0;7</span><span 
   9301 class="cmtt-8">&#x00A0;]</span>
   9302 <br class="fancyvrb" /><a 
   9303  id="x1-106010r5"></a><span 
   9304 class="cmr-6">5</span><span 
   9305 class="cmtt-8">&#x00A0;</span><span 
   9306 class="cmtt-8">&#x00A0;</span>
   9307 <br class="fancyvrb" /><a 
   9308  id="x1-106012r6"></a><span 
   9309 class="cmr-6">6</span><span 
   9310 class="cmtt-8">&#x00A0;</span><span 
   9311 class="cmtt-8">&#x00A0;codebook</span><span 
   9312 class="cmtt-8">&#x00A0;dimensions</span><span 
   9313 class="cmtt-8">&#x00A0;=</span><span 
   9314 class="cmtt-8">&#x00A0;4</span><span 
   9315 class="cmtt-8">&#x00A0;</span><span 
   9316 class="cmtt-8">&#x00A0;encoded</span><span 
   9317 class="cmtt-8">&#x00A0;as:</span><span 
   9318 class="cmtt-8">&#x00A0;[</span><span 
   9319 class="cmtt-8">&#x00A0;0</span><span 
   9320 class="cmtt-8">&#x00A0;1</span><span 
   9321 class="cmtt-8">&#x00A0;2</span><span 
   9322 class="cmtt-8">&#x00A0;3</span><span 
   9323 class="cmtt-8">&#x00A0;],</span><span 
   9324 class="cmtt-8">&#x00A0;[</span><span 
   9325 class="cmtt-8">&#x00A0;4</span><span 
   9326 class="cmtt-8">&#x00A0;5</span><span 
   9327 class="cmtt-8">&#x00A0;6</span><span 
   9328 class="cmtt-8">&#x00A0;7</span><span 
   9329 class="cmtt-8">&#x00A0;]</span>
   9330 <br class="fancyvrb" /><a 
   9331  id="x1-106014r7"></a><span 
   9332 class="cmr-6">7</span><span 
   9333 class="cmtt-8">&#x00A0;</span><span 
   9334 class="cmtt-8">&#x00A0;</span>
   9335 <br class="fancyvrb" /><a 
   9336  id="x1-106016r8"></a><span 
   9337 class="cmr-6">8</span><span 
   9338 class="cmtt-8">&#x00A0;</span><span 
   9339 class="cmtt-8">&#x00A0;codebook</span><span 
   9340 class="cmtt-8">&#x00A0;dimensions</span><span 
   9341 class="cmtt-8">&#x00A0;=</span><span 
   9342 class="cmtt-8">&#x00A0;2</span><span 
   9343 class="cmtt-8">&#x00A0;</span><span 
   9344 class="cmtt-8">&#x00A0;encoded</span><span 
   9345 class="cmtt-8">&#x00A0;as:</span><span 
   9346 class="cmtt-8">&#x00A0;[</span><span 
   9347 class="cmtt-8">&#x00A0;0</span><span 
   9348 class="cmtt-8">&#x00A0;1</span><span 
   9349 class="cmtt-8">&#x00A0;],</span><span 
   9350 class="cmtt-8">&#x00A0;[</span><span 
   9351 class="cmtt-8">&#x00A0;2</span><span 
   9352 class="cmtt-8">&#x00A0;3</span><span 
   9353 class="cmtt-8">&#x00A0;],</span><span 
   9354 class="cmtt-8">&#x00A0;[</span><span 
   9355 class="cmtt-8">&#x00A0;4</span><span 
   9356 class="cmtt-8">&#x00A0;5</span><span 
   9357 class="cmtt-8">&#x00A0;],</span><span 
   9358 class="cmtt-8">&#x00A0;[</span><span 
   9359 class="cmtt-8">&#x00A0;6</span><span 
   9360 class="cmtt-8">&#x00A0;7</span><span 
   9361 class="cmtt-8">&#x00A0;]</span>
   9362 <br class="fancyvrb" /><a 
   9363  id="x1-106018r9"></a><span 
   9364 class="cmr-6">9</span><span 
   9365 class="cmtt-8">&#x00A0;</span><span 
   9366 class="cmtt-8">&#x00A0;</span>
   9367 <br class="fancyvrb" /><a 
   9368  id="x1-106020r10"></a><span 
   9369 class="cmr-6">10</span><span 
   9370 class="cmtt-8">&#x00A0;</span><span 
   9371 class="cmtt-8">&#x00A0;codebook</span><span 
   9372 class="cmtt-8">&#x00A0;dimensions</span><span 
   9373 class="cmtt-8">&#x00A0;=</span><span 
   9374 class="cmtt-8">&#x00A0;1</span><span 
   9375 class="cmtt-8">&#x00A0;</span><span 
   9376 class="cmtt-8">&#x00A0;encoded</span><span 
   9377 class="cmtt-8">&#x00A0;as:</span><span 
   9378 class="cmtt-8">&#x00A0;[</span><span 
   9379 class="cmtt-8">&#x00A0;0</span><span 
   9380 class="cmtt-8">&#x00A0;],</span><span 
   9381 class="cmtt-8">&#x00A0;[</span><span 
   9382 class="cmtt-8">&#x00A0;1</span><span 
   9383 class="cmtt-8">&#x00A0;],</span><span 
   9384 class="cmtt-8">&#x00A0;[</span><span 
   9385 class="cmtt-8">&#x00A0;2</span><span 
   9386 class="cmtt-8">&#x00A0;],</span><span 
   9387 class="cmtt-8">&#x00A0;[</span><span 
   9388 class="cmtt-8">&#x00A0;3</span><span 
   9389 class="cmtt-8">&#x00A0;],</span><span 
   9390 class="cmtt-8">&#x00A0;[</span><span 
   9391 class="cmtt-8">&#x00A0;4</span><span 
   9392 class="cmtt-8">&#x00A0;],</span><span 
   9393 class="cmtt-8">&#x00A0;[</span><span 
   9394 class="cmtt-8">&#x00A0;5</span><span 
   9395 class="cmtt-8">&#x00A0;],</span><span 
   9396 class="cmtt-8">&#x00A0;[</span><span 
   9397 class="cmtt-8">&#x00A0;6</span><span 
   9398 class="cmtt-8">&#x00A0;],</span><span 
   9399 class="cmtt-8">&#x00A0;[</span><span 
   9400 class="cmtt-8">&#x00A0;7</span><span 
   9401 class="cmtt-8">&#x00A0;]</span>
   9402 <br class="fancyvrb" /><a 
   9403  id="x1-106022r11"></a><span 
   9404 class="cmr-6">11</span><span 
   9405 class="cmtt-8">&#x00A0;</span><span 
   9406 class="cmtt-8">&#x00A0;</span>
   9407                                                                                         
   9408 
   9409                                                                                         
   9410 </div>
   9411 <!--l. 137--><p class="noindent" >
   9412 <h4 class="subsectionHead"><span class="titlemark">8.5  </span> <a 
   9413  id="x1-1070008.5"></a>residue 2</h4>
   9414 <!--l. 139--><p class="noindent" >Residue type two can be thought of as a variant of residue type 1. Rather than encoding multiple
   9415 passed-in vectors as in residue type 1, the <span 
   9416 class="cmti-12">ch </span>passed in vectors of length <span 
   9417 class="cmti-12">n </span>are first interleaved
   9418 and flattened into a single vector of length <span 
   9419 class="cmti-12">ch</span>*<span 
   9420 class="cmti-12">n</span>. Encoding then proceeds as in type 1. Decoding
   9421 is as in type 1 with decode interleave reversed. If operating on a single vector to begin with,
   9422 residue type 1 and type 2 are equivalent.
   9423 <div class="center" 
   9424 >
   9425 <!--l. 147--><p class="noindent" >
   9426 
   9427 <!--l. 148--><p class="noindent" ><img 
   9428 src="residue2.png" alt="PIC"  
   9429 >
   9430 <br /> <div class="caption" 
   9431 ><span class="id">Figure&#x00A0;12: </span><span  
   9432 class="content">illustration of residue type 2</span></div><!--tex4ht:label?: x1-10700112 -->
   9433 </div>
   9434 <!--l. 153--><p class="noindent" >
   9435 <h4 class="subsectionHead"><span class="titlemark">8.6  </span> <a 
   9436  id="x1-1080008.6"></a>Residue decode</h4>
   9437 <!--l. 155--><p class="noindent" >
   9438 <h5 class="subsubsectionHead"><span class="titlemark">8.6.1  </span> <a 
   9439  id="x1-1090008.6.1"></a>header decode</h5>
   9440 <!--l. 157--><p class="noindent" >Header decode for all three residue types is identical.
   9441 <div class="fancyvrb" id="fancyvrb35">
   9442 <a 
   9443  id="x1-109002r1"></a><span 
   9444 class="cmr-6">1</span><span 
   9445 class="cmtt-8">&#x00A0;</span><span 
   9446 class="cmtt-8">&#x00A0;</span><span 
   9447 class="cmtt-8">&#x00A0;</span><span 
   9448 class="cmtt-8">&#x00A0;1)</span><span 
   9449 class="cmtt-8">&#x00A0;[residue_begin]</span><span 
   9450 class="cmtt-8">&#x00A0;=</span><span 
   9451 class="cmtt-8">&#x00A0;read</span><span 
   9452 class="cmtt-8">&#x00A0;24</span><span 
   9453 class="cmtt-8">&#x00A0;bits</span><span 
   9454 class="cmtt-8">&#x00A0;as</span><span 
   9455 class="cmtt-8">&#x00A0;unsigned</span><span 
   9456 class="cmtt-8">&#x00A0;integer</span>
   9457 <br class="fancyvrb" /><a 
   9458  id="x1-109004r2"></a><span 
   9459 class="cmr-6">2</span><span 
   9460 class="cmtt-8">&#x00A0;</span><span 
   9461 class="cmtt-8">&#x00A0;</span><span 
   9462 class="cmtt-8">&#x00A0;</span><span 
   9463 class="cmtt-8">&#x00A0;2)</span><span 
   9464 class="cmtt-8">&#x00A0;[residue_end]</span><span 
   9465 class="cmtt-8">&#x00A0;=</span><span 
   9466 class="cmtt-8">&#x00A0;read</span><span 
   9467 class="cmtt-8">&#x00A0;24</span><span 
   9468 class="cmtt-8">&#x00A0;bits</span><span 
   9469 class="cmtt-8">&#x00A0;as</span><span 
   9470 class="cmtt-8">&#x00A0;unsigned</span><span 
   9471 class="cmtt-8">&#x00A0;integer</span>
   9472 <br class="fancyvrb" /><a 
   9473  id="x1-109006r3"></a><span 
   9474 class="cmr-6">3</span><span 
   9475 class="cmtt-8">&#x00A0;</span><span 
   9476 class="cmtt-8">&#x00A0;</span><span 
   9477 class="cmtt-8">&#x00A0;</span><span 
   9478 class="cmtt-8">&#x00A0;3)</span><span 
   9479 class="cmtt-8">&#x00A0;[residue_partition_size]</span><span 
   9480 class="cmtt-8">&#x00A0;=</span><span 
   9481 class="cmtt-8">&#x00A0;read</span><span 
   9482 class="cmtt-8">&#x00A0;24</span><span 
   9483 class="cmtt-8">&#x00A0;bits</span><span 
   9484 class="cmtt-8">&#x00A0;as</span><span 
   9485 class="cmtt-8">&#x00A0;unsigned</span><span 
   9486 class="cmtt-8">&#x00A0;integer</span><span 
   9487 class="cmtt-8">&#x00A0;and</span><span 
   9488 class="cmtt-8">&#x00A0;add</span><span 
   9489 class="cmtt-8">&#x00A0;one</span>
   9490 <br class="fancyvrb" /><a 
   9491  id="x1-109008r4"></a><span 
   9492 class="cmr-6">4</span><span 
   9493 class="cmtt-8">&#x00A0;</span><span 
   9494 class="cmtt-8">&#x00A0;</span><span 
   9495 class="cmtt-8">&#x00A0;</span><span 
   9496 class="cmtt-8">&#x00A0;4)</span><span 
   9497 class="cmtt-8">&#x00A0;[residue_classifications]</span><span 
   9498 class="cmtt-8">&#x00A0;=</span><span 
   9499 class="cmtt-8">&#x00A0;read</span><span 
   9500 class="cmtt-8">&#x00A0;6</span><span 
   9501 class="cmtt-8">&#x00A0;bits</span><span 
   9502 class="cmtt-8">&#x00A0;as</span><span 
   9503 class="cmtt-8">&#x00A0;unsigned</span><span 
   9504 class="cmtt-8">&#x00A0;integer</span><span 
   9505 class="cmtt-8">&#x00A0;and</span><span 
   9506 class="cmtt-8">&#x00A0;add</span><span 
   9507 class="cmtt-8">&#x00A0;one</span>
   9508                                                                                         
   9509 
   9510                                                                                         
   9511 <br class="fancyvrb" /><a 
   9512  id="x1-109010r5"></a><span 
   9513 class="cmr-6">5</span><span 
   9514 class="cmtt-8">&#x00A0;</span><span 
   9515 class="cmtt-8">&#x00A0;</span><span 
   9516 class="cmtt-8">&#x00A0;</span><span 
   9517 class="cmtt-8">&#x00A0;5)</span><span 
   9518 class="cmtt-8">&#x00A0;[residue_classbook]</span><span 
   9519 class="cmtt-8">&#x00A0;=</span><span 
   9520 class="cmtt-8">&#x00A0;read</span><span 
   9521 class="cmtt-8">&#x00A0;8</span><span 
   9522 class="cmtt-8">&#x00A0;bits</span><span 
   9523 class="cmtt-8">&#x00A0;as</span><span 
   9524 class="cmtt-8">&#x00A0;unsigned</span><span 
   9525 class="cmtt-8">&#x00A0;integer</span>
   9526 </div>
   9527 <!--l. 166--><p class="noindent" ><span 
   9528 class="cmtt-12">[residue_begin] </span>and <span 
   9529 class="cmtt-12">[residue_end] </span>select the specific sub-portion of each vector that is
   9530 actually coded; it implements akin to a bandpass where, for coding purposes, the vector
   9531 effectively begins at element <span 
   9532 class="cmtt-12">[residue_begin] </span>and ends at <span 
   9533 class="cmtt-12">[residue_end]</span>. Preceding and
   9534 following values in the unpacked vectors are zeroed. Note that for residue type 2, these
   9535 values as well as <span 
   9536 class="cmtt-12">[residue_partition_size]</span>apply to the interleaved vector, not the
   9537 individual vectors before interleave. <span 
   9538 class="cmtt-12">[residue_partition_size] </span>is as explained above,
   9539 <span 
   9540 class="cmtt-12">[residue_classifications] </span>is the number of possible classification to which a partition can
   9541 belong and <span 
   9542 class="cmtt-12">[residue_classbook] </span>is the codebook number used to code classification
   9543 codewords. The number of dimensions in book <span 
   9544 class="cmtt-12">[residue_classbook] </span>determines how
   9545 many classification values are grouped into a single classification codeword. Note that
   9546 the number of entries and dimensions in book <span 
   9547 class="cmtt-12">[residue_classbook]</span>, along with
   9548 <span 
   9549 class="cmtt-12">[residue_classifications]</span>, overdetermines to possible number of classification
   9550 codewords. If <span 
   9551 class="cmtt-12">[residue_classifications]</span>&#x02C6;<span 
   9552 class="cmtt-12">[residue_classbook]</span>.dimensions exceeds
   9553 <span 
   9554 class="cmtt-12">[residue_classbook]</span>.entries, the bitstream should be regarded to be undecodable.
   9555 <!--l. 190--><p class="noindent" >Next we read a bitmap pattern that specifies which partition classes code values in which
   9556 passes.
   9557 <!--l. 193--><p class="noindent" >
   9558 <div class="fancyvrb" id="fancyvrb36">
   9559 <a 
   9560  id="x1-109012r1"></a><span 
   9561 class="cmr-6">1</span><span 
   9562 class="cmtt-8">&#x00A0;</span><span 
   9563 class="cmtt-8">&#x00A0;</span><span 
   9564 class="cmtt-8">&#x00A0;</span><span 
   9565 class="cmtt-8">&#x00A0;1)</span><span 
   9566 class="cmtt-8">&#x00A0;iterate</span><span 
   9567 class="cmtt-8">&#x00A0;[i]</span><span 
   9568 class="cmtt-8">&#x00A0;over</span><span 
   9569 class="cmtt-8">&#x00A0;the</span><span 
   9570 class="cmtt-8">&#x00A0;range</span><span 
   9571 class="cmtt-8">&#x00A0;0</span><span 
   9572 class="cmtt-8">&#x00A0;...</span><span 
   9573 class="cmtt-8">&#x00A0;[residue_classifications]-1</span><span 
   9574 class="cmtt-8">&#x00A0;{</span>
   9575 <br class="fancyvrb" /><a 
   9576  id="x1-109014r2"></a><span 
   9577 class="cmr-6">2</span><span 
   9578 class="cmtt-8">&#x00A0;</span><span 
   9579 class="cmtt-8">&#x00A0;</span>
   9580 <br class="fancyvrb" /><a 
   9581  id="x1-109016r3"></a><span 
   9582 class="cmr-6">3</span><span 
   9583 class="cmtt-8">&#x00A0;</span><span 
   9584 class="cmtt-8">&#x00A0;</span><span 
   9585 class="cmtt-8">&#x00A0;</span><span 
   9586 class="cmtt-8">&#x00A0;</span><span 
   9587 class="cmtt-8">&#x00A0;</span><span 
   9588 class="cmtt-8">&#x00A0;</span><span 
   9589 class="cmtt-8">&#x00A0;</span><span 
   9590 class="cmtt-8">&#x00A0;</span><span 
   9591 class="cmtt-8">&#x00A0;2)</span><span 
   9592 class="cmtt-8">&#x00A0;[high_bits]</span><span 
   9593 class="cmtt-8">&#x00A0;=</span><span 
   9594 class="cmtt-8">&#x00A0;0</span>
   9595 <br class="fancyvrb" /><a 
   9596  id="x1-109018r4"></a><span 
   9597 class="cmr-6">4</span><span 
   9598 class="cmtt-8">&#x00A0;</span><span 
   9599 class="cmtt-8">&#x00A0;</span><span 
   9600 class="cmtt-8">&#x00A0;</span><span 
   9601 class="cmtt-8">&#x00A0;</span><span 
   9602 class="cmtt-8">&#x00A0;</span><span 
   9603 class="cmtt-8">&#x00A0;</span><span 
   9604 class="cmtt-8">&#x00A0;</span><span 
   9605 class="cmtt-8">&#x00A0;</span><span 
   9606 class="cmtt-8">&#x00A0;3)</span><span 
   9607 class="cmtt-8">&#x00A0;[low_bits]</span><span 
   9608 class="cmtt-8">&#x00A0;=</span><span 
   9609 class="cmtt-8">&#x00A0;read</span><span 
   9610 class="cmtt-8">&#x00A0;3</span><span 
   9611 class="cmtt-8">&#x00A0;bits</span><span 
   9612 class="cmtt-8">&#x00A0;as</span><span 
   9613 class="cmtt-8">&#x00A0;unsigned</span><span 
   9614 class="cmtt-8">&#x00A0;integer</span>
   9615 <br class="fancyvrb" /><a 
   9616  id="x1-109020r5"></a><span 
   9617 class="cmr-6">5</span><span 
   9618 class="cmtt-8">&#x00A0;</span><span 
   9619 class="cmtt-8">&#x00A0;</span><span 
   9620 class="cmtt-8">&#x00A0;</span><span 
   9621 class="cmtt-8">&#x00A0;</span><span 
   9622 class="cmtt-8">&#x00A0;</span><span 
   9623 class="cmtt-8">&#x00A0;</span><span 
   9624 class="cmtt-8">&#x00A0;</span><span 
   9625 class="cmtt-8">&#x00A0;</span><span 
   9626 class="cmtt-8">&#x00A0;4)</span><span 
   9627 class="cmtt-8">&#x00A0;[bitflag]</span><span 
   9628 class="cmtt-8">&#x00A0;=</span><span 
   9629 class="cmtt-8">&#x00A0;read</span><span 
   9630 class="cmtt-8">&#x00A0;one</span><span 
   9631 class="cmtt-8">&#x00A0;bit</span><span 
   9632 class="cmtt-8">&#x00A0;as</span><span 
   9633 class="cmtt-8">&#x00A0;boolean</span>
   9634 <br class="fancyvrb" /><a 
   9635  id="x1-109022r6"></a><span 
   9636 class="cmr-6">6</span><span 
   9637 class="cmtt-8">&#x00A0;</span><span 
   9638 class="cmtt-8">&#x00A0;</span><span 
   9639 class="cmtt-8">&#x00A0;</span><span 
   9640 class="cmtt-8">&#x00A0;</span><span 
   9641 class="cmtt-8">&#x00A0;</span><span 
   9642 class="cmtt-8">&#x00A0;</span><span 
   9643 class="cmtt-8">&#x00A0;</span><span 
   9644 class="cmtt-8">&#x00A0;</span><span 
   9645 class="cmtt-8">&#x00A0;5)</span><span 
   9646 class="cmtt-8">&#x00A0;if</span><span 
   9647 class="cmtt-8">&#x00A0;(</span><span 
   9648 class="cmtt-8">&#x00A0;[bitflag]</span><span 
   9649 class="cmtt-8">&#x00A0;is</span><span 
   9650 class="cmtt-8">&#x00A0;set</span><span 
   9651 class="cmtt-8">&#x00A0;)</span><span 
   9652 class="cmtt-8">&#x00A0;then</span><span 
   9653 class="cmtt-8">&#x00A0;[high_bits]</span><span 
   9654 class="cmtt-8">&#x00A0;=</span><span 
   9655 class="cmtt-8">&#x00A0;read</span><span 
   9656 class="cmtt-8">&#x00A0;five</span><span 
   9657 class="cmtt-8">&#x00A0;bits</span><span 
   9658 class="cmtt-8">&#x00A0;as</span><span 
   9659 class="cmtt-8">&#x00A0;unsigned</span><span 
   9660 class="cmtt-8">&#x00A0;integer</span>
   9661 <br class="fancyvrb" /><a 
   9662  id="x1-109024r7"></a><span 
   9663 class="cmr-6">7</span><span 
   9664 class="cmtt-8">&#x00A0;</span><span 
   9665 class="cmtt-8">&#x00A0;</span><span 
   9666 class="cmtt-8">&#x00A0;</span><span 
   9667 class="cmtt-8">&#x00A0;</span><span 
   9668 class="cmtt-8">&#x00A0;</span><span 
   9669 class="cmtt-8">&#x00A0;</span><span 
   9670 class="cmtt-8">&#x00A0;</span><span 
   9671 class="cmtt-8">&#x00A0;</span><span 
   9672 class="cmtt-8">&#x00A0;6)</span><span 
   9673 class="cmtt-8">&#x00A0;vector</span><span 
   9674 class="cmtt-8">&#x00A0;[residue_cascade]</span><span 
   9675 class="cmtt-8">&#x00A0;element</span><span 
   9676 class="cmtt-8">&#x00A0;[i]</span><span 
   9677 class="cmtt-8">&#x00A0;=</span><span 
   9678 class="cmtt-8">&#x00A0;[high_bits]</span><span 
   9679 class="cmtt-8">&#x00A0;*</span><span 
   9680 class="cmtt-8">&#x00A0;8</span><span 
   9681 class="cmtt-8">&#x00A0;+</span><span 
   9682 class="cmtt-8">&#x00A0;[low_bits]</span>
   9683 <br class="fancyvrb" /><a 
   9684  id="x1-109026r8"></a><span 
   9685 class="cmr-6">8</span><span 
   9686 class="cmtt-8">&#x00A0;</span><span 
   9687 class="cmtt-8">&#x00A0;</span><span 
   9688 class="cmtt-8">&#x00A0;</span><span 
   9689 class="cmtt-8">&#x00A0;</span><span 
   9690 class="cmtt-8">&#x00A0;</span><span 
   9691 class="cmtt-8">&#x00A0;</span><span 
   9692 class="cmtt-8">&#x00A0;}</span>
   9693 <br class="fancyvrb" /><a 
   9694  id="x1-109028r9"></a><span 
   9695 class="cmr-6">9</span><span 
   9696 class="cmtt-8">&#x00A0;</span><span 
   9697 class="cmtt-8">&#x00A0;</span><span 
   9698 class="cmtt-8">&#x00A0;</span><span 
   9699 class="cmtt-8">&#x00A0;7)</span><span 
   9700 class="cmtt-8">&#x00A0;done</span>
   9701 </div>
   9702 <!--l. 205--><p class="noindent" >Finally, we read in a list of book numbers, each corresponding to specific bit set in the cascade
   9703 bitmap. We loop over the possible codebook classifications and the maximum possible number of
   9704 encoding stages (8 in Vorbis I, as constrained by the elements of the cascade bitmap being eight
   9705 bits):
   9706 <!--l. 211--><p class="noindent" >
   9707 <div class="fancyvrb" id="fancyvrb37">
   9708 <a 
   9709  id="x1-109030r1"></a><span 
   9710 class="cmr-6">1</span><span 
   9711 class="cmtt-8">&#x00A0;</span><span 
   9712 class="cmtt-8">&#x00A0;</span><span 
   9713 class="cmtt-8">&#x00A0;</span><span 
   9714 class="cmtt-8">&#x00A0;1)</span><span 
   9715 class="cmtt-8">&#x00A0;iterate</span><span 
   9716 class="cmtt-8">&#x00A0;[i]</span><span 
   9717 class="cmtt-8">&#x00A0;over</span><span 
   9718 class="cmtt-8">&#x00A0;the</span><span 
   9719 class="cmtt-8">&#x00A0;range</span><span 
   9720 class="cmtt-8">&#x00A0;0</span><span 
   9721 class="cmtt-8">&#x00A0;...</span><span 
   9722 class="cmtt-8">&#x00A0;[residue_classifications]-1</span><span 
   9723 class="cmtt-8">&#x00A0;{</span>
   9724 <br class="fancyvrb" /><a 
   9725  id="x1-109032r2"></a><span 
   9726 class="cmr-6">2</span><span 
   9727 class="cmtt-8">&#x00A0;</span><span 
   9728 class="cmtt-8">&#x00A0;</span>
   9729 <br class="fancyvrb" /><a 
   9730  id="x1-109034r3"></a><span 
   9731 class="cmr-6">3</span><span 
   9732 class="cmtt-8">&#x00A0;</span><span 
   9733 class="cmtt-8">&#x00A0;</span><span 
   9734 class="cmtt-8">&#x00A0;</span><span 
   9735 class="cmtt-8">&#x00A0;</span><span 
   9736 class="cmtt-8">&#x00A0;</span><span 
   9737 class="cmtt-8">&#x00A0;</span><span 
   9738 class="cmtt-8">&#x00A0;</span><span 
   9739 class="cmtt-8">&#x00A0;</span><span 
   9740 class="cmtt-8">&#x00A0;2)</span><span 
   9741 class="cmtt-8">&#x00A0;iterate</span><span 
   9742 class="cmtt-8">&#x00A0;[j]</span><span 
   9743 class="cmtt-8">&#x00A0;over</span><span 
   9744 class="cmtt-8">&#x00A0;the</span><span 
   9745 class="cmtt-8">&#x00A0;range</span><span 
   9746 class="cmtt-8">&#x00A0;0</span><span 
   9747 class="cmtt-8">&#x00A0;...</span><span 
   9748 class="cmtt-8">&#x00A0;7</span><span 
   9749 class="cmtt-8">&#x00A0;{</span>
   9750 <br class="fancyvrb" /><a 
   9751  id="x1-109036r4"></a><span 
   9752 class="cmr-6">4</span><span 
   9753 class="cmtt-8">&#x00A0;</span><span 
   9754 class="cmtt-8">&#x00A0;</span>
   9755 <br class="fancyvrb" /><a 
   9756  id="x1-109038r5"></a><span 
   9757 class="cmr-6">5</span><span 
   9758 class="cmtt-8">&#x00A0;</span><span 
   9759 class="cmtt-8">&#x00A0;</span><span 
   9760 class="cmtt-8">&#x00A0;</span><span 
   9761 class="cmtt-8">&#x00A0;</span><span 
   9762 class="cmtt-8">&#x00A0;</span><span 
   9763 class="cmtt-8">&#x00A0;</span><span 
   9764 class="cmtt-8">&#x00A0;</span><span 
   9765 class="cmtt-8">&#x00A0;</span><span 
   9766 class="cmtt-8">&#x00A0;</span><span 
   9767 class="cmtt-8">&#x00A0;</span><span 
   9768 class="cmtt-8">&#x00A0;</span><span 
   9769 class="cmtt-8">&#x00A0;</span><span 
   9770 class="cmtt-8">&#x00A0;</span><span 
   9771 class="cmtt-8">&#x00A0;3)</span><span 
   9772 class="cmtt-8">&#x00A0;if</span><span 
   9773 class="cmtt-8">&#x00A0;(</span><span 
   9774 class="cmtt-8">&#x00A0;vector</span><span 
   9775 class="cmtt-8">&#x00A0;[residue_cascade]</span><span 
   9776 class="cmtt-8">&#x00A0;element</span><span 
   9777 class="cmtt-8">&#x00A0;[i]</span><span 
   9778 class="cmtt-8">&#x00A0;bit</span><span 
   9779 class="cmtt-8">&#x00A0;[j]</span><span 
   9780 class="cmtt-8">&#x00A0;is</span><span 
   9781 class="cmtt-8">&#x00A0;set</span><span 
   9782 class="cmtt-8">&#x00A0;)</span><span 
   9783 class="cmtt-8">&#x00A0;{</span>
   9784 <br class="fancyvrb" /><a 
   9785  id="x1-109040r6"></a><span 
   9786 class="cmr-6">6</span><span 
   9787 class="cmtt-8">&#x00A0;</span><span 
   9788 class="cmtt-8">&#x00A0;</span>
   9789 <br class="fancyvrb" /><a 
   9790  id="x1-109042r7"></a><span 
   9791 class="cmr-6">7</span><span 
   9792 class="cmtt-8">&#x00A0;</span><span 
   9793 class="cmtt-8">&#x00A0;</span><span 
   9794 class="cmtt-8">&#x00A0;</span><span 
   9795 class="cmtt-8">&#x00A0;</span><span 
   9796 class="cmtt-8">&#x00A0;</span><span 
   9797 class="cmtt-8">&#x00A0;</span><span 
   9798 class="cmtt-8">&#x00A0;</span><span 
   9799 class="cmtt-8">&#x00A0;</span><span 
   9800 class="cmtt-8">&#x00A0;</span><span 
   9801 class="cmtt-8">&#x00A0;</span><span 
   9802 class="cmtt-8">&#x00A0;</span><span 
   9803 class="cmtt-8">&#x00A0;</span><span 
   9804 class="cmtt-8">&#x00A0;</span><span 
   9805 class="cmtt-8">&#x00A0;</span><span 
   9806 class="cmtt-8">&#x00A0;</span><span 
   9807 class="cmtt-8">&#x00A0;</span><span 
   9808 class="cmtt-8">&#x00A0;</span><span 
   9809 class="cmtt-8">&#x00A0;</span><span 
   9810 class="cmtt-8">&#x00A0;4)</span><span 
   9811 class="cmtt-8">&#x00A0;array</span><span 
   9812 class="cmtt-8">&#x00A0;[residue_books]</span><span 
   9813 class="cmtt-8">&#x00A0;element</span><span 
   9814 class="cmtt-8">&#x00A0;[i][j]</span><span 
   9815 class="cmtt-8">&#x00A0;=</span><span 
   9816 class="cmtt-8">&#x00A0;read</span><span 
   9817 class="cmtt-8">&#x00A0;8</span><span 
   9818 class="cmtt-8">&#x00A0;bits</span><span 
   9819 class="cmtt-8">&#x00A0;as</span><span 
   9820 class="cmtt-8">&#x00A0;unsigned</span><span 
   9821 class="cmtt-8">&#x00A0;integer</span>
   9822 <br class="fancyvrb" /><a 
   9823  id="x1-109044r8"></a><span 
   9824 class="cmr-6">8</span><span 
   9825 class="cmtt-8">&#x00A0;</span><span 
   9826 class="cmtt-8">&#x00A0;</span>
   9827 <br class="fancyvrb" /><a 
   9828  id="x1-109046r9"></a><span 
   9829 class="cmr-6">9</span><span 
   9830 class="cmtt-8">&#x00A0;</span><span 
   9831 class="cmtt-8">&#x00A0;</span><span 
   9832 class="cmtt-8">&#x00A0;</span><span 
   9833 class="cmtt-8">&#x00A0;</span><span 
   9834 class="cmtt-8">&#x00A0;</span><span 
   9835 class="cmtt-8">&#x00A0;</span><span 
   9836 class="cmtt-8">&#x00A0;</span><span 
   9837 class="cmtt-8">&#x00A0;</span><span 
   9838 class="cmtt-8">&#x00A0;</span><span 
   9839 class="cmtt-8">&#x00A0;</span><span 
   9840 class="cmtt-8">&#x00A0;</span><span 
   9841 class="cmtt-8">&#x00A0;</span><span 
   9842 class="cmtt-8">&#x00A0;</span><span 
   9843 class="cmtt-8">&#x00A0;</span><span 
   9844 class="cmtt-8">&#x00A0;</span><span 
   9845 class="cmtt-8">&#x00A0;</span><span 
   9846 class="cmtt-8">&#x00A0;}</span><span 
   9847 class="cmtt-8">&#x00A0;else</span><span 
   9848 class="cmtt-8">&#x00A0;{</span>
   9849                                                                                         
   9850 
   9851                                                                                         
   9852 <br class="fancyvrb" /><a 
   9853  id="x1-109048r10"></a><span 
   9854 class="cmr-6">10</span><span 
   9855 class="cmtt-8">&#x00A0;</span><span 
   9856 class="cmtt-8">&#x00A0;</span>
   9857 <br class="fancyvrb" /><a 
   9858  id="x1-109050r11"></a><span 
   9859 class="cmr-6">11</span><span 
   9860 class="cmtt-8">&#x00A0;</span><span 
   9861 class="cmtt-8">&#x00A0;</span><span 
   9862 class="cmtt-8">&#x00A0;</span><span 
   9863 class="cmtt-8">&#x00A0;</span><span 
   9864 class="cmtt-8">&#x00A0;</span><span 
   9865 class="cmtt-8">&#x00A0;</span><span 
   9866 class="cmtt-8">&#x00A0;</span><span 
   9867 class="cmtt-8">&#x00A0;</span><span 
   9868 class="cmtt-8">&#x00A0;</span><span 
   9869 class="cmtt-8">&#x00A0;</span><span 
   9870 class="cmtt-8">&#x00A0;</span><span 
   9871 class="cmtt-8">&#x00A0;</span><span 
   9872 class="cmtt-8">&#x00A0;</span><span 
   9873 class="cmtt-8">&#x00A0;</span><span 
   9874 class="cmtt-8">&#x00A0;</span><span 
   9875 class="cmtt-8">&#x00A0;</span><span 
   9876 class="cmtt-8">&#x00A0;</span><span 
   9877 class="cmtt-8">&#x00A0;</span><span 
   9878 class="cmtt-8">&#x00A0;5)</span><span 
   9879 class="cmtt-8">&#x00A0;array</span><span 
   9880 class="cmtt-8">&#x00A0;[residue_books]</span><span 
   9881 class="cmtt-8">&#x00A0;element</span><span 
   9882 class="cmtt-8">&#x00A0;[i][j]</span><span 
   9883 class="cmtt-8">&#x00A0;=</span><span 
   9884 class="cmtt-8">&#x00A0;unused</span>
   9885 <br class="fancyvrb" /><a 
   9886  id="x1-109052r12"></a><span 
   9887 class="cmr-6">12</span><span 
   9888 class="cmtt-8">&#x00A0;</span><span 
   9889 class="cmtt-8">&#x00A0;</span>
   9890 <br class="fancyvrb" /><a 
   9891  id="x1-109054r13"></a><span 
   9892 class="cmr-6">13</span><span 
   9893 class="cmtt-8">&#x00A0;</span><span 
   9894 class="cmtt-8">&#x00A0;</span><span 
   9895 class="cmtt-8">&#x00A0;</span><span 
   9896 class="cmtt-8">&#x00A0;</span><span 
   9897 class="cmtt-8">&#x00A0;</span><span 
   9898 class="cmtt-8">&#x00A0;</span><span 
   9899 class="cmtt-8">&#x00A0;</span><span 
   9900 class="cmtt-8">&#x00A0;</span><span 
   9901 class="cmtt-8">&#x00A0;</span><span 
   9902 class="cmtt-8">&#x00A0;</span><span 
   9903 class="cmtt-8">&#x00A0;</span><span 
   9904 class="cmtt-8">&#x00A0;</span><span 
   9905 class="cmtt-8">&#x00A0;</span><span 
   9906 class="cmtt-8">&#x00A0;</span><span 
   9907 class="cmtt-8">&#x00A0;</span><span 
   9908 class="cmtt-8">&#x00A0;</span><span 
   9909 class="cmtt-8">&#x00A0;}</span>
   9910 <br class="fancyvrb" /><a 
   9911  id="x1-109056r14"></a><span 
   9912 class="cmr-6">14</span><span 
   9913 class="cmtt-8">&#x00A0;</span><span 
   9914 class="cmtt-8">&#x00A0;</span><span 
   9915 class="cmtt-8">&#x00A0;</span><span 
   9916 class="cmtt-8">&#x00A0;</span><span 
   9917 class="cmtt-8">&#x00A0;</span><span 
   9918 class="cmtt-8">&#x00A0;</span><span 
   9919 class="cmtt-8">&#x00A0;</span><span 
   9920 class="cmtt-8">&#x00A0;</span><span 
   9921 class="cmtt-8">&#x00A0;</span><span 
   9922 class="cmtt-8">&#x00A0;</span><span 
   9923 class="cmtt-8">&#x00A0;</span><span 
   9924 class="cmtt-8">&#x00A0;}</span>
   9925 <br class="fancyvrb" /><a 
   9926  id="x1-109058r15"></a><span 
   9927 class="cmr-6">15</span><span 
   9928 class="cmtt-8">&#x00A0;</span><span 
   9929 class="cmtt-8">&#x00A0;</span><span 
   9930 class="cmtt-8">&#x00A0;</span><span 
   9931 class="cmtt-8">&#x00A0;</span><span 
   9932 class="cmtt-8">&#x00A0;</span><span 
   9933 class="cmtt-8">&#x00A0;</span><span 
   9934 class="cmtt-8">&#x00A0;</span><span 
   9935 class="cmtt-8">&#x00A0;}</span>
   9936 <br class="fancyvrb" /><a 
   9937  id="x1-109060r16"></a><span 
   9938 class="cmr-6">16</span><span 
   9939 class="cmtt-8">&#x00A0;</span><span 
   9940 class="cmtt-8">&#x00A0;</span>
   9941 <br class="fancyvrb" /><a 
   9942  id="x1-109062r17"></a><span 
   9943 class="cmr-6">17</span><span 
   9944 class="cmtt-8">&#x00A0;</span><span 
   9945 class="cmtt-8">&#x00A0;</span><span 
   9946 class="cmtt-8">&#x00A0;</span><span 
   9947 class="cmtt-8">&#x00A0;6)</span><span 
   9948 class="cmtt-8">&#x00A0;done</span>
   9949 </div>
   9950 <!--l. 231--><p class="noindent" >An end-of-packet condition at any point in header decode renders the stream undecodable.
   9951 In addition, any codebook number greater than the maximum numbered codebook
   9952 set up in this stream also renders the stream undecodable. All codebooks in array
   9953 [residue&#x02D9;books] are required to have a value mapping. The presence of codebook in array
   9954 [residue&#x02D9;books] without a value mapping (maptype equals zero) renders the stream
   9955 undecodable.
   9956 <!--l. 241--><p class="noindent" >
   9957 <h5 class="subsubsectionHead"><span class="titlemark">8.6.2  </span> <a 
   9958  id="x1-1100008.6.2"></a>packet decode</h5>
   9959 <!--l. 243--><p class="noindent" >Format 0 and 1 packet decode is identical except for specific partition interleave. Format 2 packet
   9960 decode can be built out of the format 1 decode process. Thus we describe first the decode
   9961 infrastructure identical to all three formats.
   9962 <!--l. 248--><p class="noindent" >In addition to configuration information, the residue decode process is passed the number of
   9963 vectors in the submap bundle and a vector of flags indicating if any of the vectors are not to be
   9964 decoded. If the passed in number of vectors is 3 and vector number 1 is marked &#8217;do not decode&#8217;,
   9965 decode skips vector 1 during the decode loop. However, even &#8217;do not decode&#8217; vectors are
   9966 allocated and zeroed.
   9967 <!--l. 255--><p class="noindent" >Depending on the values of <span 
   9968 class="cmtt-12">[residue_begin] </span>and <span 
   9969 class="cmtt-12">[residue_end]</span>, it is obvious that the
   9970 encoded portion of a residue vector may be the entire possible residue vector or some other strict
   9971 subset of the actual residue vector size with zero padding at either uncoded end. However, it is
   9972 also possible to set <span 
   9973 class="cmtt-12">[residue_begin] </span>and <span 
   9974 class="cmtt-12">[residue_end] </span>to specify a range partially or wholly
   9975 beyond the maximum vector size. Before beginning residue decode, limit <span 
   9976 class="cmtt-12">[residue_begin]</span>
   9977 and <span 
   9978 class="cmtt-12">[residue_end] </span>to the maximum possible vector size as follows. We assume that
   9979 the number of vectors being encoded, <span 
   9980 class="cmtt-12">[ch] </span>is provided by the higher level decoding
   9981 process.
   9982 <!--l. 269--><p class="noindent" >
   9983 <div class="fancyvrb" id="fancyvrb38">
   9984 <a 
   9985  id="x1-110002r1"></a><span 
   9986 class="cmr-6">1</span><span 
   9987 class="cmtt-8">&#x00A0;</span><span 
   9988 class="cmtt-8">&#x00A0;</span><span 
   9989 class="cmtt-8">&#x00A0;</span><span 
   9990 class="cmtt-8">&#x00A0;1)</span><span 
   9991 class="cmtt-8">&#x00A0;[actual_size]</span><span 
   9992 class="cmtt-8">&#x00A0;=</span><span 
   9993 class="cmtt-8">&#x00A0;current</span><span 
   9994 class="cmtt-8">&#x00A0;blocksize/2;</span>
   9995 <br class="fancyvrb" /><a 
   9996  id="x1-110004r2"></a><span 
   9997 class="cmr-6">2</span><span 
   9998 class="cmtt-8">&#x00A0;</span><span 
   9999 class="cmtt-8">&#x00A0;</span><span 
   10000 class="cmtt-8">&#x00A0;</span><span 
   10001 class="cmtt-8">&#x00A0;2)</span><span 
   10002 class="cmtt-8">&#x00A0;if</span><span 
   10003 class="cmtt-8">&#x00A0;residue</span><span 
   10004 class="cmtt-8">&#x00A0;encoding</span><span 
   10005 class="cmtt-8">&#x00A0;is</span><span 
   10006 class="cmtt-8">&#x00A0;format</span><span 
   10007 class="cmtt-8">&#x00A0;2</span>
   10008 <br class="fancyvrb" /><a 
   10009  id="x1-110006r3"></a><span 
   10010 class="cmr-6">3</span><span 
   10011 class="cmtt-8">&#x00A0;</span><span 
   10012 class="cmtt-8">&#x00A0;</span><span 
   10013 class="cmtt-8">&#x00A0;</span><span 
   10014 class="cmtt-8">&#x00A0;</span><span 
   10015 class="cmtt-8">&#x00A0;</span><span 
   10016 class="cmtt-8">&#x00A0;</span><span 
   10017 class="cmtt-8">&#x00A0;</span><span 
   10018 class="cmtt-8">&#x00A0;</span><span 
   10019 class="cmtt-8">&#x00A0;3)</span><span 
   10020 class="cmtt-8">&#x00A0;[actual_size]</span><span 
   10021 class="cmtt-8">&#x00A0;=</span><span 
   10022 class="cmtt-8">&#x00A0;[actual_size]</span><span 
   10023 class="cmtt-8">&#x00A0;*</span><span 
   10024 class="cmtt-8">&#x00A0;[ch];</span>
   10025                                                                                         
   10026 
   10027                                                                                         
   10028 <br class="fancyvrb" /><a 
   10029  id="x1-110008r4"></a><span 
   10030 class="cmr-6">4</span><span 
   10031 class="cmtt-8">&#x00A0;</span><span 
   10032 class="cmtt-8">&#x00A0;</span><span 
   10033 class="cmtt-8">&#x00A0;</span><span 
   10034 class="cmtt-8">&#x00A0;4)</span><span 
   10035 class="cmtt-8">&#x00A0;[limit_residue_begin]</span><span 
   10036 class="cmtt-8">&#x00A0;=</span><span 
   10037 class="cmtt-8">&#x00A0;maximum</span><span 
   10038 class="cmtt-8">&#x00A0;of</span><span 
   10039 class="cmtt-8">&#x00A0;([residue_begin],[actual_size]);</span>
   10040 <br class="fancyvrb" /><a 
   10041  id="x1-110010r5"></a><span 
   10042 class="cmr-6">5</span><span 
   10043 class="cmtt-8">&#x00A0;</span><span 
   10044 class="cmtt-8">&#x00A0;</span><span 
   10045 class="cmtt-8">&#x00A0;</span><span 
   10046 class="cmtt-8">&#x00A0;5)</span><span 
   10047 class="cmtt-8">&#x00A0;[limit_residue_end]</span><span 
   10048 class="cmtt-8">&#x00A0;=</span><span 
   10049 class="cmtt-8">&#x00A0;maximum</span><span 
   10050 class="cmtt-8">&#x00A0;of</span><span 
   10051 class="cmtt-8">&#x00A0;([residue_end],[actual_size]);</span>
   10052 </div>
   10053 <!--l. 277--><p class="noindent" >The following convenience values are conceptually useful to clarifying the decode process:
   10054 <!--l. 280--><p class="noindent" >
   10055 <div class="fancyvrb" id="fancyvrb39">
   10056 <a 
   10057  id="x1-110012r1"></a><span 
   10058 class="cmr-6">1</span><span 
   10059 class="cmtt-8">&#x00A0;</span><span 
   10060 class="cmtt-8">&#x00A0;</span><span 
   10061 class="cmtt-8">&#x00A0;</span><span 
   10062 class="cmtt-8">&#x00A0;1)</span><span 
   10063 class="cmtt-8">&#x00A0;[classwords_per_codeword]</span><span 
   10064 class="cmtt-8">&#x00A0;=</span><span 
   10065 class="cmtt-8">&#x00A0;[codebook_dimensions]</span><span 
   10066 class="cmtt-8">&#x00A0;value</span><span 
   10067 class="cmtt-8">&#x00A0;of</span><span 
   10068 class="cmtt-8">&#x00A0;codebook</span><span 
   10069 class="cmtt-8">&#x00A0;[residue_classbook]</span>
   10070 <br class="fancyvrb" /><a 
   10071  id="x1-110014r2"></a><span 
   10072 class="cmr-6">2</span><span 
   10073 class="cmtt-8">&#x00A0;</span><span 
   10074 class="cmtt-8">&#x00A0;</span><span 
   10075 class="cmtt-8">&#x00A0;</span><span 
   10076 class="cmtt-8">&#x00A0;2)</span><span 
   10077 class="cmtt-8">&#x00A0;[n_to_read]</span><span 
   10078 class="cmtt-8">&#x00A0;=</span><span 
   10079 class="cmtt-8">&#x00A0;[limit_residue_end]</span><span 
   10080 class="cmtt-8">&#x00A0;-</span><span 
   10081 class="cmtt-8">&#x00A0;[limit_residue_begin]</span>
   10082 <br class="fancyvrb" /><a 
   10083  id="x1-110016r3"></a><span 
   10084 class="cmr-6">3</span><span 
   10085 class="cmtt-8">&#x00A0;</span><span 
   10086 class="cmtt-8">&#x00A0;</span><span 
   10087 class="cmtt-8">&#x00A0;</span><span 
   10088 class="cmtt-8">&#x00A0;3)</span><span 
   10089 class="cmtt-8">&#x00A0;[partitions_to_read]</span><span 
   10090 class="cmtt-8">&#x00A0;=</span><span 
   10091 class="cmtt-8">&#x00A0;[n_to_read]</span><span 
   10092 class="cmtt-8">&#x00A0;/</span><span 
   10093 class="cmtt-8">&#x00A0;[residue_partition_size]</span>
   10094 </div>
   10095 <!--l. 286--><p class="noindent" >Packet decode proceeds as follows, matching the description offered earlier in the document.
   10096 <div class="fancyvrb" id="fancyvrb40">
   10097 <a 
   10098  id="x1-110018r1"></a><span 
   10099 class="cmr-6">1</span><span 
   10100 class="cmtt-8">&#x00A0;</span><span 
   10101 class="cmtt-8">&#x00A0;</span><span 
   10102 class="cmtt-8">&#x00A0;</span><span 
   10103 class="cmtt-8">&#x00A0;1)</span><span 
   10104 class="cmtt-8">&#x00A0;allocate</span><span 
   10105 class="cmtt-8">&#x00A0;and</span><span 
   10106 class="cmtt-8">&#x00A0;zero</span><span 
   10107 class="cmtt-8">&#x00A0;all</span><span 
   10108 class="cmtt-8">&#x00A0;vectors</span><span 
   10109 class="cmtt-8">&#x00A0;that</span><span 
   10110 class="cmtt-8">&#x00A0;will</span><span 
   10111 class="cmtt-8">&#x00A0;be</span><span 
   10112 class="cmtt-8">&#x00A0;returned.</span>
   10113 <br class="fancyvrb" /><a 
   10114  id="x1-110020r2"></a><span 
   10115 class="cmr-6">2</span><span 
   10116 class="cmtt-8">&#x00A0;</span><span 
   10117 class="cmtt-8">&#x00A0;</span><span 
   10118 class="cmtt-8">&#x00A0;</span><span 
   10119 class="cmtt-8">&#x00A0;2)</span><span 
   10120 class="cmtt-8">&#x00A0;if</span><span 
   10121 class="cmtt-8">&#x00A0;([n_to_read]</span><span 
   10122 class="cmtt-8">&#x00A0;is</span><span 
   10123 class="cmtt-8">&#x00A0;zero),</span><span 
   10124 class="cmtt-8">&#x00A0;stop;</span><span 
   10125 class="cmtt-8">&#x00A0;there</span><span 
   10126 class="cmtt-8">&#x00A0;is</span><span 
   10127 class="cmtt-8">&#x00A0;no</span><span 
   10128 class="cmtt-8">&#x00A0;residue</span><span 
   10129 class="cmtt-8">&#x00A0;to</span><span 
   10130 class="cmtt-8">&#x00A0;decode.</span>
   10131 <br class="fancyvrb" /><a 
   10132  id="x1-110022r3"></a><span 
   10133 class="cmr-6">3</span><span 
   10134 class="cmtt-8">&#x00A0;</span><span 
   10135 class="cmtt-8">&#x00A0;</span><span 
   10136 class="cmtt-8">&#x00A0;</span><span 
   10137 class="cmtt-8">&#x00A0;3)</span><span 
   10138 class="cmtt-8">&#x00A0;iterate</span><span 
   10139 class="cmtt-8">&#x00A0;[pass]</span><span 
   10140 class="cmtt-8">&#x00A0;over</span><span 
   10141 class="cmtt-8">&#x00A0;the</span><span 
   10142 class="cmtt-8">&#x00A0;range</span><span 
   10143 class="cmtt-8">&#x00A0;0</span><span 
   10144 class="cmtt-8">&#x00A0;...</span><span 
   10145 class="cmtt-8">&#x00A0;7</span><span 
   10146 class="cmtt-8">&#x00A0;{</span>
   10147 <br class="fancyvrb" /><a 
   10148  id="x1-110024r4"></a><span 
   10149 class="cmr-6">4</span><span 
   10150 class="cmtt-8">&#x00A0;</span><span 
   10151 class="cmtt-8">&#x00A0;</span>
   10152 <br class="fancyvrb" /><a 
   10153  id="x1-110026r5"></a><span 
   10154 class="cmr-6">5</span><span 
   10155 class="cmtt-8">&#x00A0;</span><span 
   10156 class="cmtt-8">&#x00A0;</span><span 
   10157 class="cmtt-8">&#x00A0;</span><span 
   10158 class="cmtt-8">&#x00A0;</span><span 
   10159 class="cmtt-8">&#x00A0;</span><span 
   10160 class="cmtt-8">&#x00A0;</span><span 
   10161 class="cmtt-8">&#x00A0;</span><span 
   10162 class="cmtt-8">&#x00A0;</span><span 
   10163 class="cmtt-8">&#x00A0;4)</span><span 
   10164 class="cmtt-8">&#x00A0;[partition_count]</span><span 
   10165 class="cmtt-8">&#x00A0;=</span><span 
   10166 class="cmtt-8">&#x00A0;0</span>
   10167 <br class="fancyvrb" /><a 
   10168  id="x1-110028r6"></a><span 
   10169 class="cmr-6">6</span><span 
   10170 class="cmtt-8">&#x00A0;</span><span 
   10171 class="cmtt-8">&#x00A0;</span>
   10172 <br class="fancyvrb" /><a 
   10173  id="x1-110030r7"></a><span 
   10174 class="cmr-6">7</span><span 
   10175 class="cmtt-8">&#x00A0;</span><span 
   10176 class="cmtt-8">&#x00A0;</span><span 
   10177 class="cmtt-8">&#x00A0;</span><span 
   10178 class="cmtt-8">&#x00A0;</span><span 
   10179 class="cmtt-8">&#x00A0;</span><span 
   10180 class="cmtt-8">&#x00A0;</span><span 
   10181 class="cmtt-8">&#x00A0;</span><span 
   10182 class="cmtt-8">&#x00A0;</span><span 
   10183 class="cmtt-8">&#x00A0;5)</span><span 
   10184 class="cmtt-8">&#x00A0;while</span><span 
   10185 class="cmtt-8">&#x00A0;[partition_count]</span><span 
   10186 class="cmtt-8">&#x00A0;is</span><span 
   10187 class="cmtt-8">&#x00A0;less</span><span 
   10188 class="cmtt-8">&#x00A0;than</span><span 
   10189 class="cmtt-8">&#x00A0;[partitions_to_read]</span>
   10190 <br class="fancyvrb" /><a 
   10191  id="x1-110032r8"></a><span 
   10192 class="cmr-6">8</span><span 
   10193 class="cmtt-8">&#x00A0;</span><span 
   10194 class="cmtt-8">&#x00A0;</span>
   10195 <br class="fancyvrb" /><a 
   10196  id="x1-110034r9"></a><span 
   10197 class="cmr-6">9</span><span 
   10198 class="cmtt-8">&#x00A0;</span><span 
   10199 class="cmtt-8">&#x00A0;</span><span 
   10200 class="cmtt-8">&#x00A0;</span><span 
   10201 class="cmtt-8">&#x00A0;</span><span 
   10202 class="cmtt-8">&#x00A0;</span><span 
   10203 class="cmtt-8">&#x00A0;</span><span 
   10204 class="cmtt-8">&#x00A0;</span><span 
   10205 class="cmtt-8">&#x00A0;</span><span 
   10206 class="cmtt-8">&#x00A0;</span><span 
   10207 class="cmtt-8">&#x00A0;</span><span 
   10208 class="cmtt-8">&#x00A0;</span><span 
   10209 class="cmtt-8">&#x00A0;</span><span 
   10210 class="cmtt-8">&#x00A0;</span><span 
   10211 class="cmtt-8">&#x00A0;6)</span><span 
   10212 class="cmtt-8">&#x00A0;if</span><span 
   10213 class="cmtt-8">&#x00A0;([pass]</span><span 
   10214 class="cmtt-8">&#x00A0;is</span><span 
   10215 class="cmtt-8">&#x00A0;zero)</span><span 
   10216 class="cmtt-8">&#x00A0;{</span>
   10217 <br class="fancyvrb" /><a 
   10218  id="x1-110036r10"></a><span 
   10219 class="cmr-6">10</span><span 
   10220 class="cmtt-8">&#x00A0;</span><span 
   10221 class="cmtt-8">&#x00A0;</span>
   10222 <br class="fancyvrb" /><a 
   10223  id="x1-110038r11"></a><span 
   10224 class="cmr-6">11</span><span 
   10225 class="cmtt-8">&#x00A0;</span><span 
   10226 class="cmtt-8">&#x00A0;</span><span 
   10227 class="cmtt-8">&#x00A0;</span><span 
   10228 class="cmtt-8">&#x00A0;</span><span 
   10229 class="cmtt-8">&#x00A0;</span><span 
   10230 class="cmtt-8">&#x00A0;</span><span 
   10231 class="cmtt-8">&#x00A0;</span><span 
   10232 class="cmtt-8">&#x00A0;</span><span 
   10233 class="cmtt-8">&#x00A0;</span><span 
   10234 class="cmtt-8">&#x00A0;</span><span 
   10235 class="cmtt-8">&#x00A0;</span><span 
   10236 class="cmtt-8">&#x00A0;</span><span 
   10237 class="cmtt-8">&#x00A0;</span><span 
   10238 class="cmtt-8">&#x00A0;</span><span 
   10239 class="cmtt-8">&#x00A0;</span><span 
   10240 class="cmtt-8">&#x00A0;</span><span 
   10241 class="cmtt-8">&#x00A0;</span><span 
   10242 class="cmtt-8">&#x00A0;</span><span 
   10243 class="cmtt-8">&#x00A0;7)</span><span 
   10244 class="cmtt-8">&#x00A0;iterate</span><span 
   10245 class="cmtt-8">&#x00A0;[j]</span><span 
   10246 class="cmtt-8">&#x00A0;over</span><span 
   10247 class="cmtt-8">&#x00A0;the</span><span 
   10248 class="cmtt-8">&#x00A0;range</span><span 
   10249 class="cmtt-8">&#x00A0;0</span><span 
   10250 class="cmtt-8">&#x00A0;..</span><span 
   10251 class="cmtt-8">&#x00A0;[ch]-1</span><span 
   10252 class="cmtt-8">&#x00A0;{</span>
   10253 <br class="fancyvrb" /><a 
   10254  id="x1-110040r12"></a><span 
   10255 class="cmr-6">12</span><span 
   10256 class="cmtt-8">&#x00A0;</span><span 
   10257 class="cmtt-8">&#x00A0;</span>
   10258 <br class="fancyvrb" /><a 
   10259  id="x1-110042r13"></a><span 
   10260 class="cmr-6">13</span><span 
   10261 class="cmtt-8">&#x00A0;</span><span 
   10262 class="cmtt-8">&#x00A0;</span><span 
   10263 class="cmtt-8">&#x00A0;</span><span 
   10264 class="cmtt-8">&#x00A0;</span><span 
   10265 class="cmtt-8">&#x00A0;</span><span 
   10266 class="cmtt-8">&#x00A0;</span><span 
   10267 class="cmtt-8">&#x00A0;</span><span 
   10268 class="cmtt-8">&#x00A0;</span><span 
   10269 class="cmtt-8">&#x00A0;</span><span 
   10270 class="cmtt-8">&#x00A0;</span><span 
   10271 class="cmtt-8">&#x00A0;</span><span 
   10272 class="cmtt-8">&#x00A0;</span><span 
   10273 class="cmtt-8">&#x00A0;</span><span 
   10274 class="cmtt-8">&#x00A0;</span><span 
   10275 class="cmtt-8">&#x00A0;</span><span 
   10276 class="cmtt-8">&#x00A0;</span><span 
   10277 class="cmtt-8">&#x00A0;</span><span 
   10278 class="cmtt-8">&#x00A0;</span><span 
   10279 class="cmtt-8">&#x00A0;</span><span 
   10280 class="cmtt-8">&#x00A0;</span><span 
   10281 class="cmtt-8">&#x00A0;</span><span 
   10282 class="cmtt-8">&#x00A0;</span><span 
   10283 class="cmtt-8">&#x00A0;</span><span 
   10284 class="cmtt-8">&#x00A0;8)</span><span 
   10285 class="cmtt-8">&#x00A0;if</span><span 
   10286 class="cmtt-8">&#x00A0;vector</span><span 
   10287 class="cmtt-8">&#x00A0;[j]</span><span 
   10288 class="cmtt-8">&#x00A0;is</span><span 
   10289 class="cmtt-8">&#x00A0;not</span><span 
   10290 class="cmtt-8">&#x00A0;marked</span><span 
   10291 class="cmtt-8">&#x00A0;&#8217;do</span><span 
   10292 class="cmtt-8">&#x00A0;not</span><span 
   10293 class="cmtt-8">&#x00A0;decode&#8217;</span><span 
   10294 class="cmtt-8">&#x00A0;{</span>
   10295 <br class="fancyvrb" /><a 
   10296  id="x1-110044r14"></a><span 
   10297 class="cmr-6">14</span><span 
   10298 class="cmtt-8">&#x00A0;</span><span 
   10299 class="cmtt-8">&#x00A0;</span>
   10300 <br class="fancyvrb" /><a 
   10301  id="x1-110046r15"></a><span 
   10302 class="cmr-6">15</span><span 
   10303 class="cmtt-8">&#x00A0;</span><span 
   10304 class="cmtt-8">&#x00A0;</span><span 
   10305 class="cmtt-8">&#x00A0;</span><span 
   10306 class="cmtt-8">&#x00A0;</span><span 
   10307 class="cmtt-8">&#x00A0;</span><span 
   10308 class="cmtt-8">&#x00A0;</span><span 
   10309 class="cmtt-8">&#x00A0;</span><span 
   10310 class="cmtt-8">&#x00A0;</span><span 
   10311 class="cmtt-8">&#x00A0;</span><span 
   10312 class="cmtt-8">&#x00A0;</span><span 
   10313 class="cmtt-8">&#x00A0;</span><span 
   10314 class="cmtt-8">&#x00A0;</span><span 
   10315 class="cmtt-8">&#x00A0;</span><span 
   10316 class="cmtt-8">&#x00A0;</span><span 
   10317 class="cmtt-8">&#x00A0;</span><span 
   10318 class="cmtt-8">&#x00A0;</span><span 
   10319 class="cmtt-8">&#x00A0;</span><span 
   10320 class="cmtt-8">&#x00A0;</span><span 
   10321 class="cmtt-8">&#x00A0;</span><span 
   10322 class="cmtt-8">&#x00A0;</span><span 
   10323 class="cmtt-8">&#x00A0;</span><span 
   10324 class="cmtt-8">&#x00A0;</span><span 
   10325 class="cmtt-8">&#x00A0;</span><span 
   10326 class="cmtt-8">&#x00A0;</span><span 
   10327 class="cmtt-8">&#x00A0;</span><span 
   10328 class="cmtt-8">&#x00A0;</span><span 
   10329 class="cmtt-8">&#x00A0;</span><span 
   10330 class="cmtt-8">&#x00A0;</span><span 
   10331 class="cmtt-8">&#x00A0;9)</span><span 
   10332 class="cmtt-8">&#x00A0;[temp]</span><span 
   10333 class="cmtt-8">&#x00A0;=</span><span 
   10334 class="cmtt-8">&#x00A0;read</span><span 
   10335 class="cmtt-8">&#x00A0;from</span><span 
   10336 class="cmtt-8">&#x00A0;packet</span><span 
   10337 class="cmtt-8">&#x00A0;using</span><span 
   10338 class="cmtt-8">&#x00A0;codebook</span><span 
   10339 class="cmtt-8">&#x00A0;[residue_classbook]</span><span 
   10340 class="cmtt-8">&#x00A0;in</span><span 
   10341 class="cmtt-8">&#x00A0;scalar</span><span 
   10342 class="cmtt-8">&#x00A0;context</span>
   10343 <br class="fancyvrb" /><a 
   10344  id="x1-110048r16"></a><span 
   10345 class="cmr-6">16</span><span 
   10346 class="cmtt-8">&#x00A0;</span><span 
   10347 class="cmtt-8">&#x00A0;</span><span 
   10348 class="cmtt-8">&#x00A0;</span><span 
   10349 class="cmtt-8">&#x00A0;</span><span 
   10350 class="cmtt-8">&#x00A0;</span><span 
   10351 class="cmtt-8">&#x00A0;</span><span 
   10352 class="cmtt-8">&#x00A0;</span><span 
   10353 class="cmtt-8">&#x00A0;</span><span 
   10354 class="cmtt-8">&#x00A0;</span><span 
   10355 class="cmtt-8">&#x00A0;</span><span 
   10356 class="cmtt-8">&#x00A0;</span><span 
   10357 class="cmtt-8">&#x00A0;</span><span 
   10358 class="cmtt-8">&#x00A0;</span><span 
   10359 class="cmtt-8">&#x00A0;</span><span 
   10360 class="cmtt-8">&#x00A0;</span><span 
   10361 class="cmtt-8">&#x00A0;</span><span 
   10362 class="cmtt-8">&#x00A0;</span><span 
   10363 class="cmtt-8">&#x00A0;</span><span 
   10364 class="cmtt-8">&#x00A0;</span><span 
   10365 class="cmtt-8">&#x00A0;</span><span 
   10366 class="cmtt-8">&#x00A0;</span><span 
   10367 class="cmtt-8">&#x00A0;</span><span 
   10368 class="cmtt-8">&#x00A0;</span><span 
   10369 class="cmtt-8">&#x00A0;</span><span 
   10370 class="cmtt-8">&#x00A0;</span><span 
   10371 class="cmtt-8">&#x00A0;</span><span 
   10372 class="cmtt-8">&#x00A0;</span><span 
   10373 class="cmtt-8">&#x00A0;10)</span><span 
   10374 class="cmtt-8">&#x00A0;iterate</span><span 
   10375 class="cmtt-8">&#x00A0;[i]</span><span 
   10376 class="cmtt-8">&#x00A0;descending</span><span 
   10377 class="cmtt-8">&#x00A0;over</span><span 
   10378 class="cmtt-8">&#x00A0;the</span><span 
   10379 class="cmtt-8">&#x00A0;range</span><span 
   10380 class="cmtt-8">&#x00A0;[classwords_per_codeword]-1</span><span 
   10381 class="cmtt-8">&#x00A0;...</span><span 
   10382 class="cmtt-8">&#x00A0;0</span><span 
   10383 class="cmtt-8">&#x00A0;{</span>
   10384 <br class="fancyvrb" /><a 
   10385  id="x1-110050r17"></a><span 
   10386 class="cmr-6">17</span><span 
   10387 class="cmtt-8">&#x00A0;</span><span 
   10388 class="cmtt-8">&#x00A0;</span>
   10389 <br class="fancyvrb" /><a 
   10390  id="x1-110052r18"></a><span 
   10391 class="cmr-6">18</span><span 
   10392 class="cmtt-8">&#x00A0;</span><span 
   10393 class="cmtt-8">&#x00A0;</span><span 
   10394 class="cmtt-8">&#x00A0;</span><span 
   10395 class="cmtt-8">&#x00A0;</span><span 
   10396 class="cmtt-8">&#x00A0;</span><span 
   10397 class="cmtt-8">&#x00A0;</span><span 
   10398 class="cmtt-8">&#x00A0;</span><span 
   10399 class="cmtt-8">&#x00A0;</span><span 
   10400 class="cmtt-8">&#x00A0;</span><span 
   10401 class="cmtt-8">&#x00A0;</span><span 
   10402 class="cmtt-8">&#x00A0;</span><span 
   10403 class="cmtt-8">&#x00A0;</span><span 
   10404 class="cmtt-8">&#x00A0;</span><span 
   10405 class="cmtt-8">&#x00A0;</span><span 
   10406 class="cmtt-8">&#x00A0;</span><span 
   10407 class="cmtt-8">&#x00A0;</span><span 
   10408 class="cmtt-8">&#x00A0;</span><span 
   10409 class="cmtt-8">&#x00A0;</span><span 
   10410 class="cmtt-8">&#x00A0;</span><span 
   10411 class="cmtt-8">&#x00A0;</span><span 
   10412 class="cmtt-8">&#x00A0;</span><span 
   10413 class="cmtt-8">&#x00A0;</span><span 
   10414 class="cmtt-8">&#x00A0;</span><span 
   10415 class="cmtt-8">&#x00A0;</span><span 
   10416 class="cmtt-8">&#x00A0;</span><span 
   10417 class="cmtt-8">&#x00A0;</span><span 
   10418 class="cmtt-8">&#x00A0;</span><span 
   10419 class="cmtt-8">&#x00A0;</span><span 
   10420 class="cmtt-8">&#x00A0;</span><span 
   10421 class="cmtt-8">&#x00A0;</span><span 
   10422 class="cmtt-8">&#x00A0;</span><span 
   10423 class="cmtt-8">&#x00A0;</span><span 
   10424 class="cmtt-8">&#x00A0;11)</span><span 
   10425 class="cmtt-8">&#x00A0;array</span><span 
   10426 class="cmtt-8">&#x00A0;[classifications]</span><span 
   10427 class="cmtt-8">&#x00A0;element</span><span 
   10428 class="cmtt-8">&#x00A0;[j],([i]+[partition_count])</span><span 
   10429 class="cmtt-8">&#x00A0;=</span>
   10430 <br class="fancyvrb" /><a 
   10431  id="x1-110054r19"></a><span 
   10432 class="cmr-6">19</span><span 
   10433 class="cmtt-8">&#x00A0;</span><span 
   10434 class="cmtt-8">&#x00A0;</span><span 
   10435 class="cmtt-8">&#x00A0;</span><span 
   10436 class="cmtt-8">&#x00A0;</span><span 
   10437 class="cmtt-8">&#x00A0;</span><span 
   10438 class="cmtt-8">&#x00A0;</span><span 
   10439 class="cmtt-8">&#x00A0;</span><span 
   10440 class="cmtt-8">&#x00A0;</span><span 
   10441 class="cmtt-8">&#x00A0;</span><span 
   10442 class="cmtt-8">&#x00A0;</span><span 
   10443 class="cmtt-8">&#x00A0;</span><span 
   10444 class="cmtt-8">&#x00A0;</span><span 
   10445 class="cmtt-8">&#x00A0;</span><span 
   10446 class="cmtt-8">&#x00A0;</span><span 
   10447 class="cmtt-8">&#x00A0;</span><span 
   10448 class="cmtt-8">&#x00A0;</span><span 
   10449 class="cmtt-8">&#x00A0;</span><span 
   10450 class="cmtt-8">&#x00A0;</span><span 
   10451 class="cmtt-8">&#x00A0;</span><span 
   10452 class="cmtt-8">&#x00A0;</span><span 
   10453 class="cmtt-8">&#x00A0;</span><span 
   10454 class="cmtt-8">&#x00A0;</span><span 
   10455 class="cmtt-8">&#x00A0;</span><span 
   10456 class="cmtt-8">&#x00A0;</span><span 
   10457 class="cmtt-8">&#x00A0;</span><span 
   10458 class="cmtt-8">&#x00A0;</span><span 
   10459 class="cmtt-8">&#x00A0;</span><span 
   10460 class="cmtt-8">&#x00A0;</span><span 
   10461 class="cmtt-8">&#x00A0;</span><span 
   10462 class="cmtt-8">&#x00A0;</span><span 
   10463 class="cmtt-8">&#x00A0;</span><span 
   10464 class="cmtt-8">&#x00A0;</span><span 
   10465 class="cmtt-8">&#x00A0;</span><span 
   10466 class="cmtt-8">&#x00A0;</span><span 
   10467 class="cmtt-8">&#x00A0;</span><span 
   10468 class="cmtt-8">&#x00A0;</span><span 
   10469 class="cmtt-8">&#x00A0;[temp]</span><span 
   10470 class="cmtt-8">&#x00A0;integer</span><span 
   10471 class="cmtt-8">&#x00A0;modulo</span><span 
   10472 class="cmtt-8">&#x00A0;[residue_classifications]</span>
   10473 <br class="fancyvrb" /><a 
   10474  id="x1-110056r20"></a><span 
   10475 class="cmr-6">20</span><span 
   10476 class="cmtt-8">&#x00A0;</span><span 
   10477 class="cmtt-8">&#x00A0;</span><span 
   10478 class="cmtt-8">&#x00A0;</span><span 
   10479 class="cmtt-8">&#x00A0;</span><span 
   10480 class="cmtt-8">&#x00A0;</span><span 
   10481 class="cmtt-8">&#x00A0;</span><span 
   10482 class="cmtt-8">&#x00A0;</span><span 
   10483 class="cmtt-8">&#x00A0;</span><span 
   10484 class="cmtt-8">&#x00A0;</span><span 
   10485 class="cmtt-8">&#x00A0;</span><span 
   10486 class="cmtt-8">&#x00A0;</span><span 
   10487 class="cmtt-8">&#x00A0;</span><span 
   10488 class="cmtt-8">&#x00A0;</span><span 
   10489 class="cmtt-8">&#x00A0;</span><span 
   10490 class="cmtt-8">&#x00A0;</span><span 
   10491 class="cmtt-8">&#x00A0;</span><span 
   10492 class="cmtt-8">&#x00A0;</span><span 
   10493 class="cmtt-8">&#x00A0;</span><span 
   10494 class="cmtt-8">&#x00A0;</span><span 
   10495 class="cmtt-8">&#x00A0;</span><span 
   10496 class="cmtt-8">&#x00A0;</span><span 
   10497 class="cmtt-8">&#x00A0;</span><span 
   10498 class="cmtt-8">&#x00A0;</span><span 
   10499 class="cmtt-8">&#x00A0;</span><span 
   10500 class="cmtt-8">&#x00A0;</span><span 
   10501 class="cmtt-8">&#x00A0;</span><span 
   10502 class="cmtt-8">&#x00A0;</span><span 
   10503 class="cmtt-8">&#x00A0;</span><span 
   10504 class="cmtt-8">&#x00A0;</span><span 
   10505 class="cmtt-8">&#x00A0;</span><span 
   10506 class="cmtt-8">&#x00A0;</span><span 
   10507 class="cmtt-8">&#x00A0;</span><span 
   10508 class="cmtt-8">&#x00A0;12)</span><span 
   10509 class="cmtt-8">&#x00A0;[temp]</span><span 
   10510 class="cmtt-8">&#x00A0;=</span><span 
   10511 class="cmtt-8">&#x00A0;[temp]</span><span 
   10512 class="cmtt-8">&#x00A0;/</span><span 
   10513 class="cmtt-8">&#x00A0;[residue_classifications]</span><span 
   10514 class="cmtt-8">&#x00A0;using</span><span 
   10515 class="cmtt-8">&#x00A0;integer</span><span 
   10516 class="cmtt-8">&#x00A0;division</span>
   10517 <br class="fancyvrb" /><a 
   10518  id="x1-110058r21"></a><span 
   10519 class="cmr-6">21</span><span 
   10520 class="cmtt-8">&#x00A0;</span><span 
   10521 class="cmtt-8">&#x00A0;</span>
   10522 <br class="fancyvrb" /><a 
   10523  id="x1-110060r22"></a><span 
   10524 class="cmr-6">22</span><span 
   10525 class="cmtt-8">&#x00A0;</span><span 
   10526 class="cmtt-8">&#x00A0;</span><span 
   10527 class="cmtt-8">&#x00A0;</span><span 
   10528 class="cmtt-8">&#x00A0;</span><span 
   10529 class="cmtt-8">&#x00A0;</span><span 
   10530 class="cmtt-8">&#x00A0;</span><span 
   10531 class="cmtt-8">&#x00A0;</span><span 
   10532 class="cmtt-8">&#x00A0;</span><span 
   10533 class="cmtt-8">&#x00A0;</span><span 
   10534 class="cmtt-8">&#x00A0;</span><span 
   10535 class="cmtt-8">&#x00A0;</span><span 
   10536 class="cmtt-8">&#x00A0;</span><span 
   10537 class="cmtt-8">&#x00A0;</span><span 
   10538 class="cmtt-8">&#x00A0;</span><span 
   10539 class="cmtt-8">&#x00A0;</span><span 
   10540 class="cmtt-8">&#x00A0;</span><span 
   10541 class="cmtt-8">&#x00A0;</span><span 
   10542 class="cmtt-8">&#x00A0;</span><span 
   10543 class="cmtt-8">&#x00A0;</span><span 
   10544 class="cmtt-8">&#x00A0;</span><span 
   10545 class="cmtt-8">&#x00A0;</span><span 
   10546 class="cmtt-8">&#x00A0;</span><span 
   10547 class="cmtt-8">&#x00A0;</span><span 
   10548 class="cmtt-8">&#x00A0;</span><span 
   10549 class="cmtt-8">&#x00A0;</span><span 
   10550 class="cmtt-8">&#x00A0;</span><span 
   10551 class="cmtt-8">&#x00A0;</span><span 
   10552 class="cmtt-8">&#x00A0;</span><span 
   10553 class="cmtt-8">&#x00A0;</span><span 
   10554 class="cmtt-8">&#x00A0;</span><span 
   10555 class="cmtt-8">&#x00A0;</span><span 
   10556 class="cmtt-8">&#x00A0;}</span>
   10557 <br class="fancyvrb" /><a 
   10558  id="x1-110062r23"></a><span 
   10559 class="cmr-6">23</span><span 
   10560 class="cmtt-8">&#x00A0;</span><span 
   10561 class="cmtt-8">&#x00A0;</span>
   10562 <br class="fancyvrb" /><a 
   10563  id="x1-110064r24"></a><span 
   10564 class="cmr-6">24</span><span 
   10565 class="cmtt-8">&#x00A0;</span><span 
   10566 class="cmtt-8">&#x00A0;</span><span 
   10567 class="cmtt-8">&#x00A0;</span><span 
   10568 class="cmtt-8">&#x00A0;</span><span 
   10569 class="cmtt-8">&#x00A0;</span><span 
   10570 class="cmtt-8">&#x00A0;</span><span 
   10571 class="cmtt-8">&#x00A0;</span><span 
   10572 class="cmtt-8">&#x00A0;</span><span 
   10573 class="cmtt-8">&#x00A0;</span><span 
   10574 class="cmtt-8">&#x00A0;</span><span 
   10575 class="cmtt-8">&#x00A0;</span><span 
   10576 class="cmtt-8">&#x00A0;</span><span 
   10577 class="cmtt-8">&#x00A0;</span><span 
   10578 class="cmtt-8">&#x00A0;</span><span 
   10579 class="cmtt-8">&#x00A0;</span><span 
   10580 class="cmtt-8">&#x00A0;</span><span 
   10581 class="cmtt-8">&#x00A0;</span><span 
   10582 class="cmtt-8">&#x00A0;</span><span 
   10583 class="cmtt-8">&#x00A0;</span><span 
   10584 class="cmtt-8">&#x00A0;</span><span 
   10585 class="cmtt-8">&#x00A0;</span><span 
   10586 class="cmtt-8">&#x00A0;</span><span 
   10587 class="cmtt-8">&#x00A0;</span><span 
   10588 class="cmtt-8">&#x00A0;</span><span 
   10589 class="cmtt-8">&#x00A0;</span><span 
   10590 class="cmtt-8">&#x00A0;</span><span 
   10591 class="cmtt-8">&#x00A0;}</span>
   10592 <br class="fancyvrb" /><a 
   10593  id="x1-110066r25"></a><span 
   10594 class="cmr-6">25</span><span 
   10595 class="cmtt-8">&#x00A0;</span><span 
   10596 class="cmtt-8">&#x00A0;</span>
   10597 <br class="fancyvrb" /><a 
   10598  id="x1-110068r26"></a><span 
   10599 class="cmr-6">26</span><span 
   10600 class="cmtt-8">&#x00A0;</span><span 
   10601 class="cmtt-8">&#x00A0;</span><span 
   10602 class="cmtt-8">&#x00A0;</span><span 
   10603 class="cmtt-8">&#x00A0;</span><span 
   10604 class="cmtt-8">&#x00A0;</span><span 
   10605 class="cmtt-8">&#x00A0;</span><span 
   10606 class="cmtt-8">&#x00A0;</span><span 
   10607 class="cmtt-8">&#x00A0;</span><span 
   10608 class="cmtt-8">&#x00A0;</span><span 
   10609 class="cmtt-8">&#x00A0;</span><span 
   10610 class="cmtt-8">&#x00A0;</span><span 
   10611 class="cmtt-8">&#x00A0;</span><span 
   10612 class="cmtt-8">&#x00A0;</span><span 
   10613 class="cmtt-8">&#x00A0;</span><span 
   10614 class="cmtt-8">&#x00A0;</span><span 
   10615 class="cmtt-8">&#x00A0;</span><span 
   10616 class="cmtt-8">&#x00A0;</span><span 
   10617 class="cmtt-8">&#x00A0;</span><span 
   10618 class="cmtt-8">&#x00A0;</span><span 
   10619 class="cmtt-8">&#x00A0;</span><span 
   10620 class="cmtt-8">&#x00A0;</span><span 
   10621 class="cmtt-8">&#x00A0;}</span>
   10622 <br class="fancyvrb" /><a 
   10623  id="x1-110070r27"></a><span 
   10624 class="cmr-6">27</span><span 
   10625 class="cmtt-8">&#x00A0;</span><span 
   10626 class="cmtt-8">&#x00A0;</span>
   10627 <br class="fancyvrb" /><a 
   10628  id="x1-110072r28"></a><span 
   10629 class="cmr-6">28</span><span 
   10630 class="cmtt-8">&#x00A0;</span><span 
   10631 class="cmtt-8">&#x00A0;</span><span 
   10632 class="cmtt-8">&#x00A0;</span><span 
   10633 class="cmtt-8">&#x00A0;</span><span 
   10634 class="cmtt-8">&#x00A0;</span><span 
   10635 class="cmtt-8">&#x00A0;</span><span 
   10636 class="cmtt-8">&#x00A0;</span><span 
   10637 class="cmtt-8">&#x00A0;</span><span 
   10638 class="cmtt-8">&#x00A0;</span><span 
   10639 class="cmtt-8">&#x00A0;</span><span 
   10640 class="cmtt-8">&#x00A0;</span><span 
   10641 class="cmtt-8">&#x00A0;</span><span 
   10642 class="cmtt-8">&#x00A0;</span><span 
   10643 class="cmtt-8">&#x00A0;</span><span 
   10644 class="cmtt-8">&#x00A0;</span><span 
   10645 class="cmtt-8">&#x00A0;</span><span 
   10646 class="cmtt-8">&#x00A0;}</span>
   10647 <br class="fancyvrb" /><a 
   10648  id="x1-110074r29"></a><span 
   10649 class="cmr-6">29</span><span 
   10650 class="cmtt-8">&#x00A0;</span><span 
   10651 class="cmtt-8">&#x00A0;</span>
   10652 <br class="fancyvrb" /><a 
   10653  id="x1-110076r30"></a><span 
   10654 class="cmr-6">30</span><span 
   10655 class="cmtt-8">&#x00A0;</span><span 
   10656 class="cmtt-8">&#x00A0;</span><span 
   10657 class="cmtt-8">&#x00A0;</span><span 
   10658 class="cmtt-8">&#x00A0;</span><span 
   10659 class="cmtt-8">&#x00A0;</span><span 
   10660 class="cmtt-8">&#x00A0;</span><span 
   10661 class="cmtt-8">&#x00A0;</span><span 
   10662 class="cmtt-8">&#x00A0;</span><span 
   10663 class="cmtt-8">&#x00A0;</span><span 
   10664 class="cmtt-8">&#x00A0;</span><span 
   10665 class="cmtt-8">&#x00A0;</span><span 
   10666 class="cmtt-8">&#x00A0;</span><span 
   10667 class="cmtt-8">&#x00A0;13)</span><span 
   10668 class="cmtt-8">&#x00A0;iterate</span><span 
   10669 class="cmtt-8">&#x00A0;[i]</span><span 
   10670 class="cmtt-8">&#x00A0;over</span><span 
   10671 class="cmtt-8">&#x00A0;the</span><span 
   10672 class="cmtt-8">&#x00A0;range</span><span 
   10673 class="cmtt-8">&#x00A0;0</span><span 
   10674 class="cmtt-8">&#x00A0;..</span><span 
   10675 class="cmtt-8">&#x00A0;([classwords_per_codeword]</span><span 
   10676 class="cmtt-8">&#x00A0;-</span><span 
   10677 class="cmtt-8">&#x00A0;1)</span><span 
   10678 class="cmtt-8">&#x00A0;while</span><span 
   10679 class="cmtt-8">&#x00A0;[partition_count]</span>
   10680 <br class="fancyvrb" /><a 
   10681  id="x1-110078r31"></a><span 
   10682 class="cmr-6">31</span><span 
   10683 class="cmtt-8">&#x00A0;</span><span 
   10684 class="cmtt-8">&#x00A0;</span><span 
   10685 class="cmtt-8">&#x00A0;</span><span 
   10686 class="cmtt-8">&#x00A0;</span><span 
   10687 class="cmtt-8">&#x00A0;</span><span 
   10688 class="cmtt-8">&#x00A0;</span><span 
   10689 class="cmtt-8">&#x00A0;</span><span 
   10690 class="cmtt-8">&#x00A0;</span><span 
   10691 class="cmtt-8">&#x00A0;</span><span 
   10692 class="cmtt-8">&#x00A0;</span><span 
   10693 class="cmtt-8">&#x00A0;</span><span 
   10694 class="cmtt-8">&#x00A0;</span><span 
   10695 class="cmtt-8">&#x00A0;</span><span 
   10696 class="cmtt-8">&#x00A0;</span><span 
   10697 class="cmtt-8">&#x00A0;</span><span 
   10698 class="cmtt-8">&#x00A0;</span><span 
   10699 class="cmtt-8">&#x00A0;is</span><span 
   10700 class="cmtt-8">&#x00A0;also</span><span 
   10701 class="cmtt-8">&#x00A0;less</span><span 
   10702 class="cmtt-8">&#x00A0;than</span><span 
   10703 class="cmtt-8">&#x00A0;[partitions_to_read]</span><span 
   10704 class="cmtt-8">&#x00A0;{</span>
   10705 <br class="fancyvrb" /><a 
   10706  id="x1-110080r32"></a><span 
   10707 class="cmr-6">32</span><span 
   10708 class="cmtt-8">&#x00A0;</span><span 
   10709 class="cmtt-8">&#x00A0;</span>
   10710 <br class="fancyvrb" /><a 
   10711  id="x1-110082r33"></a><span 
   10712 class="cmr-6">33</span><span 
   10713 class="cmtt-8">&#x00A0;</span><span 
   10714 class="cmtt-8">&#x00A0;</span><span 
   10715 class="cmtt-8">&#x00A0;</span><span 
   10716 class="cmtt-8">&#x00A0;</span><span 
   10717 class="cmtt-8">&#x00A0;</span><span 
   10718 class="cmtt-8">&#x00A0;</span><span 
   10719 class="cmtt-8">&#x00A0;</span><span 
   10720 class="cmtt-8">&#x00A0;</span><span 
   10721 class="cmtt-8">&#x00A0;</span><span 
   10722 class="cmtt-8">&#x00A0;</span><span 
   10723 class="cmtt-8">&#x00A0;</span><span 
   10724 class="cmtt-8">&#x00A0;</span><span 
   10725 class="cmtt-8">&#x00A0;</span><span 
   10726 class="cmtt-8">&#x00A0;</span><span 
   10727 class="cmtt-8">&#x00A0;</span><span 
   10728 class="cmtt-8">&#x00A0;</span><span 
   10729 class="cmtt-8">&#x00A0;</span><span 
   10730 class="cmtt-8">&#x00A0;</span><span 
   10731 class="cmtt-8">&#x00A0;14)</span><span 
   10732 class="cmtt-8">&#x00A0;iterate</span><span 
   10733 class="cmtt-8">&#x00A0;[j]</span><span 
   10734 class="cmtt-8">&#x00A0;over</span><span 
   10735 class="cmtt-8">&#x00A0;the</span><span 
   10736 class="cmtt-8">&#x00A0;range</span><span 
   10737 class="cmtt-8">&#x00A0;0</span><span 
   10738 class="cmtt-8">&#x00A0;..</span><span 
   10739 class="cmtt-8">&#x00A0;[ch]-1</span><span 
   10740 class="cmtt-8">&#x00A0;{</span>
   10741 <br class="fancyvrb" /><a 
   10742  id="x1-110084r34"></a><span 
   10743 class="cmr-6">34</span><span 
   10744 class="cmtt-8">&#x00A0;</span><span 
   10745 class="cmtt-8">&#x00A0;</span>
   10746 <br class="fancyvrb" /><a 
   10747  id="x1-110086r35"></a><span 
   10748 class="cmr-6">35</span><span 
   10749 class="cmtt-8">&#x00A0;</span><span 
   10750 class="cmtt-8">&#x00A0;</span><span 
   10751 class="cmtt-8">&#x00A0;</span><span 
   10752 class="cmtt-8">&#x00A0;</span><span 
   10753 class="cmtt-8">&#x00A0;</span><span 
   10754 class="cmtt-8">&#x00A0;</span><span 
   10755 class="cmtt-8">&#x00A0;</span><span 
   10756 class="cmtt-8">&#x00A0;</span><span 
   10757 class="cmtt-8">&#x00A0;</span><span 
   10758 class="cmtt-8">&#x00A0;</span><span 
   10759 class="cmtt-8">&#x00A0;</span><span 
   10760 class="cmtt-8">&#x00A0;</span><span 
   10761 class="cmtt-8">&#x00A0;</span><span 
   10762 class="cmtt-8">&#x00A0;</span><span 
   10763 class="cmtt-8">&#x00A0;</span><span 
   10764 class="cmtt-8">&#x00A0;</span><span 
   10765 class="cmtt-8">&#x00A0;</span><span 
   10766 class="cmtt-8">&#x00A0;</span><span 
   10767 class="cmtt-8">&#x00A0;</span><span 
   10768 class="cmtt-8">&#x00A0;</span><span 
   10769 class="cmtt-8">&#x00A0;</span><span 
   10770 class="cmtt-8">&#x00A0;</span><span 
   10771 class="cmtt-8">&#x00A0;</span><span 
   10772 class="cmtt-8">&#x00A0;15)</span><span 
   10773 class="cmtt-8">&#x00A0;if</span><span 
   10774 class="cmtt-8">&#x00A0;vector</span><span 
   10775 class="cmtt-8">&#x00A0;[j]</span><span 
   10776 class="cmtt-8">&#x00A0;is</span><span 
   10777 class="cmtt-8">&#x00A0;not</span><span 
   10778 class="cmtt-8">&#x00A0;marked</span><span 
   10779 class="cmtt-8">&#x00A0;&#8217;do</span><span 
   10780 class="cmtt-8">&#x00A0;not</span><span 
   10781 class="cmtt-8">&#x00A0;decode&#8217;</span><span 
   10782 class="cmtt-8">&#x00A0;{</span>
   10783 <br class="fancyvrb" /><a 
   10784  id="x1-110088r36"></a><span 
   10785 class="cmr-6">36</span><span 
   10786 class="cmtt-8">&#x00A0;</span><span 
   10787 class="cmtt-8">&#x00A0;</span>
   10788 <br class="fancyvrb" /><a 
   10789  id="x1-110090r37"></a><span 
   10790 class="cmr-6">37</span><span 
   10791 class="cmtt-8">&#x00A0;</span><span 
   10792 class="cmtt-8">&#x00A0;</span><span 
   10793 class="cmtt-8">&#x00A0;</span><span 
   10794 class="cmtt-8">&#x00A0;</span><span 
   10795 class="cmtt-8">&#x00A0;</span><span 
   10796 class="cmtt-8">&#x00A0;</span><span 
   10797 class="cmtt-8">&#x00A0;</span><span 
   10798 class="cmtt-8">&#x00A0;</span><span 
   10799 class="cmtt-8">&#x00A0;</span><span 
   10800 class="cmtt-8">&#x00A0;</span><span 
   10801 class="cmtt-8">&#x00A0;</span><span 
   10802 class="cmtt-8">&#x00A0;</span><span 
   10803 class="cmtt-8">&#x00A0;</span><span 
   10804 class="cmtt-8">&#x00A0;</span><span 
   10805 class="cmtt-8">&#x00A0;</span><span 
   10806 class="cmtt-8">&#x00A0;</span><span 
   10807 class="cmtt-8">&#x00A0;</span><span 
   10808 class="cmtt-8">&#x00A0;</span><span 
   10809 class="cmtt-8">&#x00A0;</span><span 
   10810 class="cmtt-8">&#x00A0;</span><span 
   10811 class="cmtt-8">&#x00A0;</span><span 
   10812 class="cmtt-8">&#x00A0;</span><span 
   10813 class="cmtt-8">&#x00A0;</span><span 
   10814 class="cmtt-8">&#x00A0;</span><span 
   10815 class="cmtt-8">&#x00A0;</span><span 
   10816 class="cmtt-8">&#x00A0;</span><span 
   10817 class="cmtt-8">&#x00A0;</span><span 
   10818 class="cmtt-8">&#x00A0;</span><span 
   10819 class="cmtt-8">&#x00A0;16)</span><span 
   10820 class="cmtt-8">&#x00A0;[vqclass]</span><span 
   10821 class="cmtt-8">&#x00A0;=</span><span 
   10822 class="cmtt-8">&#x00A0;array</span><span 
   10823 class="cmtt-8">&#x00A0;[classifications]</span><span 
   10824 class="cmtt-8">&#x00A0;element</span><span 
   10825 class="cmtt-8">&#x00A0;[j],[partition_count]</span>
   10826 <br class="fancyvrb" /><a 
   10827  id="x1-110092r38"></a><span 
   10828 class="cmr-6">38</span><span 
   10829 class="cmtt-8">&#x00A0;</span><span 
   10830 class="cmtt-8">&#x00A0;</span><span 
   10831 class="cmtt-8">&#x00A0;</span><span 
   10832 class="cmtt-8">&#x00A0;</span><span 
   10833 class="cmtt-8">&#x00A0;</span><span 
   10834 class="cmtt-8">&#x00A0;</span><span 
   10835 class="cmtt-8">&#x00A0;</span><span 
   10836 class="cmtt-8">&#x00A0;</span><span 
   10837 class="cmtt-8">&#x00A0;</span><span 
   10838 class="cmtt-8">&#x00A0;</span><span 
   10839 class="cmtt-8">&#x00A0;</span><span 
   10840 class="cmtt-8">&#x00A0;</span><span 
   10841 class="cmtt-8">&#x00A0;</span><span 
   10842 class="cmtt-8">&#x00A0;</span><span 
   10843 class="cmtt-8">&#x00A0;</span><span 
   10844 class="cmtt-8">&#x00A0;</span><span 
   10845 class="cmtt-8">&#x00A0;</span><span 
   10846 class="cmtt-8">&#x00A0;</span><span 
   10847 class="cmtt-8">&#x00A0;</span><span 
   10848 class="cmtt-8">&#x00A0;</span><span 
   10849 class="cmtt-8">&#x00A0;</span><span 
   10850 class="cmtt-8">&#x00A0;</span><span 
   10851 class="cmtt-8">&#x00A0;</span><span 
   10852 class="cmtt-8">&#x00A0;</span><span 
   10853 class="cmtt-8">&#x00A0;</span><span 
   10854 class="cmtt-8">&#x00A0;</span><span 
   10855 class="cmtt-8">&#x00A0;</span><span 
   10856 class="cmtt-8">&#x00A0;</span><span 
   10857 class="cmtt-8">&#x00A0;17)</span><span 
   10858 class="cmtt-8">&#x00A0;[vqbook]</span><span 
   10859 class="cmtt-8">&#x00A0;=</span><span 
   10860 class="cmtt-8">&#x00A0;array</span><span 
   10861 class="cmtt-8">&#x00A0;[residue_books]</span><span 
   10862 class="cmtt-8">&#x00A0;element</span><span 
   10863 class="cmtt-8">&#x00A0;[vqclass],[pass]</span>
   10864 <br class="fancyvrb" /><a 
   10865  id="x1-110094r39"></a><span 
   10866 class="cmr-6">39</span><span 
   10867 class="cmtt-8">&#x00A0;</span><span 
   10868 class="cmtt-8">&#x00A0;</span><span 
   10869 class="cmtt-8">&#x00A0;</span><span 
   10870 class="cmtt-8">&#x00A0;</span><span 
   10871 class="cmtt-8">&#x00A0;</span><span 
   10872 class="cmtt-8">&#x00A0;</span><span 
   10873 class="cmtt-8">&#x00A0;</span><span 
   10874 class="cmtt-8">&#x00A0;</span><span 
   10875 class="cmtt-8">&#x00A0;</span><span 
   10876 class="cmtt-8">&#x00A0;</span><span 
   10877 class="cmtt-8">&#x00A0;</span><span 
   10878 class="cmtt-8">&#x00A0;</span><span 
   10879 class="cmtt-8">&#x00A0;</span><span 
   10880 class="cmtt-8">&#x00A0;</span><span 
   10881 class="cmtt-8">&#x00A0;</span><span 
   10882 class="cmtt-8">&#x00A0;</span><span 
   10883 class="cmtt-8">&#x00A0;</span><span 
   10884 class="cmtt-8">&#x00A0;</span><span 
   10885 class="cmtt-8">&#x00A0;</span><span 
   10886 class="cmtt-8">&#x00A0;</span><span 
   10887 class="cmtt-8">&#x00A0;</span><span 
   10888 class="cmtt-8">&#x00A0;</span><span 
   10889 class="cmtt-8">&#x00A0;</span><span 
   10890 class="cmtt-8">&#x00A0;</span><span 
   10891 class="cmtt-8">&#x00A0;</span><span 
   10892 class="cmtt-8">&#x00A0;</span><span 
   10893 class="cmtt-8">&#x00A0;</span><span 
   10894 class="cmtt-8">&#x00A0;</span><span 
   10895 class="cmtt-8">&#x00A0;18)</span><span 
   10896 class="cmtt-8">&#x00A0;if</span><span 
   10897 class="cmtt-8">&#x00A0;([vqbook]</span><span 
   10898 class="cmtt-8">&#x00A0;is</span><span 
   10899 class="cmtt-8">&#x00A0;not</span><span 
   10900 class="cmtt-8">&#x00A0;&#8217;unused&#8217;)</span><span 
   10901 class="cmtt-8">&#x00A0;{</span>
   10902 <br class="fancyvrb" /><a 
   10903  id="x1-110096r40"></a><span 
   10904 class="cmr-6">40</span><span 
   10905 class="cmtt-8">&#x00A0;</span><span 
   10906 class="cmtt-8">&#x00A0;</span>
   10907 <br class="fancyvrb" /><a 
   10908  id="x1-110098r41"></a><span 
   10909 class="cmr-6">41</span><span 
   10910 class="cmtt-8">&#x00A0;</span><span 
   10911 class="cmtt-8">&#x00A0;</span><span 
   10912 class="cmtt-8">&#x00A0;</span><span 
   10913 class="cmtt-8">&#x00A0;</span><span 
   10914 class="cmtt-8">&#x00A0;</span><span 
   10915 class="cmtt-8">&#x00A0;</span><span 
   10916 class="cmtt-8">&#x00A0;</span><span 
   10917 class="cmtt-8">&#x00A0;</span><span 
   10918 class="cmtt-8">&#x00A0;</span><span 
   10919 class="cmtt-8">&#x00A0;</span><span 
   10920 class="cmtt-8">&#x00A0;</span><span 
   10921 class="cmtt-8">&#x00A0;</span><span 
   10922 class="cmtt-8">&#x00A0;</span><span 
   10923 class="cmtt-8">&#x00A0;</span><span 
   10924 class="cmtt-8">&#x00A0;</span><span 
   10925 class="cmtt-8">&#x00A0;</span><span 
   10926 class="cmtt-8">&#x00A0;</span><span 
   10927 class="cmtt-8">&#x00A0;</span><span 
   10928 class="cmtt-8">&#x00A0;</span><span 
   10929 class="cmtt-8">&#x00A0;</span><span 
   10930 class="cmtt-8">&#x00A0;</span><span 
   10931 class="cmtt-8">&#x00A0;</span><span 
   10932 class="cmtt-8">&#x00A0;</span><span 
   10933 class="cmtt-8">&#x00A0;</span><span 
   10934 class="cmtt-8">&#x00A0;</span><span 
   10935 class="cmtt-8">&#x00A0;</span><span 
   10936 class="cmtt-8">&#x00A0;</span><span 
   10937 class="cmtt-8">&#x00A0;</span><span 
   10938 class="cmtt-8">&#x00A0;</span><span 
   10939 class="cmtt-8">&#x00A0;</span><span 
   10940 class="cmtt-8">&#x00A0;</span><span 
   10941 class="cmtt-8">&#x00A0;</span><span 
   10942 class="cmtt-8">&#x00A0;</span><span 
   10943 class="cmtt-8">&#x00A0;19)</span><span 
   10944 class="cmtt-8">&#x00A0;decode</span><span 
   10945 class="cmtt-8">&#x00A0;partition</span><span 
   10946 class="cmtt-8">&#x00A0;into</span><span 
   10947 class="cmtt-8">&#x00A0;output</span><span 
   10948 class="cmtt-8">&#x00A0;vector</span><span 
   10949 class="cmtt-8">&#x00A0;number</span><span 
   10950 class="cmtt-8">&#x00A0;[j],</span><span 
   10951 class="cmtt-8">&#x00A0;starting</span><span 
   10952 class="cmtt-8">&#x00A0;at</span><span 
   10953 class="cmtt-8">&#x00A0;scalar</span>
   10954 <br class="fancyvrb" /><a 
   10955  id="x1-110100r42"></a><span 
   10956 class="cmr-6">42</span><span 
   10957 class="cmtt-8">&#x00A0;</span><span 
   10958 class="cmtt-8">&#x00A0;</span><span 
   10959 class="cmtt-8">&#x00A0;</span><span 
   10960 class="cmtt-8">&#x00A0;</span><span 
   10961 class="cmtt-8">&#x00A0;</span><span 
   10962 class="cmtt-8">&#x00A0;</span><span 
   10963 class="cmtt-8">&#x00A0;</span><span 
   10964 class="cmtt-8">&#x00A0;</span><span 
   10965 class="cmtt-8">&#x00A0;</span><span 
   10966 class="cmtt-8">&#x00A0;</span><span 
   10967 class="cmtt-8">&#x00A0;</span><span 
   10968 class="cmtt-8">&#x00A0;</span><span 
   10969 class="cmtt-8">&#x00A0;</span><span 
   10970 class="cmtt-8">&#x00A0;</span><span 
   10971 class="cmtt-8">&#x00A0;</span><span 
   10972 class="cmtt-8">&#x00A0;</span><span 
   10973 class="cmtt-8">&#x00A0;</span><span 
   10974 class="cmtt-8">&#x00A0;</span><span 
   10975 class="cmtt-8">&#x00A0;</span><span 
   10976 class="cmtt-8">&#x00A0;</span><span 
   10977 class="cmtt-8">&#x00A0;</span><span 
   10978 class="cmtt-8">&#x00A0;</span><span 
   10979 class="cmtt-8">&#x00A0;</span><span 
   10980 class="cmtt-8">&#x00A0;</span><span 
   10981 class="cmtt-8">&#x00A0;</span><span 
   10982 class="cmtt-8">&#x00A0;</span><span 
   10983 class="cmtt-8">&#x00A0;</span><span 
   10984 class="cmtt-8">&#x00A0;</span><span 
   10985 class="cmtt-8">&#x00A0;</span><span 
   10986 class="cmtt-8">&#x00A0;</span><span 
   10987 class="cmtt-8">&#x00A0;</span><span 
   10988 class="cmtt-8">&#x00A0;</span><span 
   10989 class="cmtt-8">&#x00A0;</span><span 
   10990 class="cmtt-8">&#x00A0;</span><span 
   10991 class="cmtt-8">&#x00A0;</span><span 
   10992 class="cmtt-8">&#x00A0;</span><span 
   10993 class="cmtt-8">&#x00A0;</span><span 
   10994 class="cmtt-8">&#x00A0;offset</span><span 
   10995 class="cmtt-8">&#x00A0;[limit_residue_begin]+[partition_count]*[residue_partition_size]</span><span 
   10996 class="cmtt-8">&#x00A0;using</span>
   10997 <br class="fancyvrb" /><a 
   10998  id="x1-110102r43"></a><span 
   10999 class="cmr-6">43</span><span 
   11000 class="cmtt-8">&#x00A0;</span><span 
   11001 class="cmtt-8">&#x00A0;</span><span 
   11002 class="cmtt-8">&#x00A0;</span><span 
   11003 class="cmtt-8">&#x00A0;</span><span 
   11004 class="cmtt-8">&#x00A0;</span><span 
   11005 class="cmtt-8">&#x00A0;</span><span 
   11006 class="cmtt-8">&#x00A0;</span><span 
   11007 class="cmtt-8">&#x00A0;</span><span 
   11008 class="cmtt-8">&#x00A0;</span><span 
   11009 class="cmtt-8">&#x00A0;</span><span 
   11010 class="cmtt-8">&#x00A0;</span><span 
   11011 class="cmtt-8">&#x00A0;</span><span 
   11012 class="cmtt-8">&#x00A0;</span><span 
   11013 class="cmtt-8">&#x00A0;</span><span 
   11014 class="cmtt-8">&#x00A0;</span><span 
   11015 class="cmtt-8">&#x00A0;</span><span 
   11016 class="cmtt-8">&#x00A0;</span><span 
   11017 class="cmtt-8">&#x00A0;</span><span 
   11018 class="cmtt-8">&#x00A0;</span><span 
   11019 class="cmtt-8">&#x00A0;</span><span 
   11020 class="cmtt-8">&#x00A0;</span><span 
   11021 class="cmtt-8">&#x00A0;</span><span 
   11022 class="cmtt-8">&#x00A0;</span><span 
   11023 class="cmtt-8">&#x00A0;</span><span 
   11024 class="cmtt-8">&#x00A0;</span><span 
   11025 class="cmtt-8">&#x00A0;</span><span 
   11026 class="cmtt-8">&#x00A0;</span><span 
   11027 class="cmtt-8">&#x00A0;</span><span 
   11028 class="cmtt-8">&#x00A0;</span><span 
   11029 class="cmtt-8">&#x00A0;</span><span 
   11030 class="cmtt-8">&#x00A0;</span><span 
   11031 class="cmtt-8">&#x00A0;</span><span 
   11032 class="cmtt-8">&#x00A0;</span><span 
   11033 class="cmtt-8">&#x00A0;</span><span 
   11034 class="cmtt-8">&#x00A0;</span><span 
   11035 class="cmtt-8">&#x00A0;</span><span 
   11036 class="cmtt-8">&#x00A0;</span><span 
   11037 class="cmtt-8">&#x00A0;codebook</span><span 
   11038 class="cmtt-8">&#x00A0;number</span><span 
   11039 class="cmtt-8">&#x00A0;[vqbook]</span><span 
   11040 class="cmtt-8">&#x00A0;in</span><span 
   11041 class="cmtt-8">&#x00A0;VQ</span><span 
   11042 class="cmtt-8">&#x00A0;context</span>
   11043 <br class="fancyvrb" /><a 
   11044  id="x1-110104r44"></a><span 
   11045 class="cmr-6">44</span><span 
   11046 class="cmtt-8">&#x00A0;</span><span 
   11047 class="cmtt-8">&#x00A0;</span><span 
   11048 class="cmtt-8">&#x00A0;</span><span 
   11049 class="cmtt-8">&#x00A0;</span><span 
   11050 class="cmtt-8">&#x00A0;</span><span 
   11051 class="cmtt-8">&#x00A0;</span><span 
   11052 class="cmtt-8">&#x00A0;</span><span 
   11053 class="cmtt-8">&#x00A0;</span><span 
   11054 class="cmtt-8">&#x00A0;</span><span 
   11055 class="cmtt-8">&#x00A0;</span><span 
   11056 class="cmtt-8">&#x00A0;</span><span 
   11057 class="cmtt-8">&#x00A0;</span><span 
   11058 class="cmtt-8">&#x00A0;</span><span 
   11059 class="cmtt-8">&#x00A0;</span><span 
   11060 class="cmtt-8">&#x00A0;</span><span 
   11061 class="cmtt-8">&#x00A0;</span><span 
   11062 class="cmtt-8">&#x00A0;</span><span 
   11063 class="cmtt-8">&#x00A0;</span><span 
   11064 class="cmtt-8">&#x00A0;</span><span 
   11065 class="cmtt-8">&#x00A0;</span><span 
   11066 class="cmtt-8">&#x00A0;</span><span 
   11067 class="cmtt-8">&#x00A0;</span><span 
   11068 class="cmtt-8">&#x00A0;</span><span 
   11069 class="cmtt-8">&#x00A0;</span><span 
   11070 class="cmtt-8">&#x00A0;</span><span 
   11071 class="cmtt-8">&#x00A0;</span><span 
   11072 class="cmtt-8">&#x00A0;</span><span 
   11073 class="cmtt-8">&#x00A0;}</span>
   11074                                                                                         
   11075 
   11076                                                                                         
   11077 <br class="fancyvrb" /><a 
   11078  id="x1-110106r45"></a><span 
   11079 class="cmr-6">45</span><span 
   11080 class="cmtt-8">&#x00A0;</span><span 
   11081 class="cmtt-8">&#x00A0;</span><span 
   11082 class="cmtt-8">&#x00A0;</span><span 
   11083 class="cmtt-8">&#x00A0;</span><span 
   11084 class="cmtt-8">&#x00A0;</span><span 
   11085 class="cmtt-8">&#x00A0;</span><span 
   11086 class="cmtt-8">&#x00A0;</span><span 
   11087 class="cmtt-8">&#x00A0;</span><span 
   11088 class="cmtt-8">&#x00A0;</span><span 
   11089 class="cmtt-8">&#x00A0;</span><span 
   11090 class="cmtt-8">&#x00A0;</span><span 
   11091 class="cmtt-8">&#x00A0;</span><span 
   11092 class="cmtt-8">&#x00A0;</span><span 
   11093 class="cmtt-8">&#x00A0;</span><span 
   11094 class="cmtt-8">&#x00A0;</span><span 
   11095 class="cmtt-8">&#x00A0;</span><span 
   11096 class="cmtt-8">&#x00A0;</span><span 
   11097 class="cmtt-8">&#x00A0;</span><span 
   11098 class="cmtt-8">&#x00A0;</span><span 
   11099 class="cmtt-8">&#x00A0;</span><span 
   11100 class="cmtt-8">&#x00A0;</span><span 
   11101 class="cmtt-8">&#x00A0;</span><span 
   11102 class="cmtt-8">&#x00A0;}</span>
   11103 <br class="fancyvrb" /><a 
   11104  id="x1-110108r46"></a><span 
   11105 class="cmr-6">46</span><span 
   11106 class="cmtt-8">&#x00A0;</span><span 
   11107 class="cmtt-8">&#x00A0;</span>
   11108 <br class="fancyvrb" /><a 
   11109  id="x1-110110r47"></a><span 
   11110 class="cmr-6">47</span><span 
   11111 class="cmtt-8">&#x00A0;</span><span 
   11112 class="cmtt-8">&#x00A0;</span><span 
   11113 class="cmtt-8">&#x00A0;</span><span 
   11114 class="cmtt-8">&#x00A0;</span><span 
   11115 class="cmtt-8">&#x00A0;</span><span 
   11116 class="cmtt-8">&#x00A0;</span><span 
   11117 class="cmtt-8">&#x00A0;</span><span 
   11118 class="cmtt-8">&#x00A0;</span><span 
   11119 class="cmtt-8">&#x00A0;</span><span 
   11120 class="cmtt-8">&#x00A0;</span><span 
   11121 class="cmtt-8">&#x00A0;</span><span 
   11122 class="cmtt-8">&#x00A0;</span><span 
   11123 class="cmtt-8">&#x00A0;</span><span 
   11124 class="cmtt-8">&#x00A0;</span><span 
   11125 class="cmtt-8">&#x00A0;</span><span 
   11126 class="cmtt-8">&#x00A0;</span><span 
   11127 class="cmtt-8">&#x00A0;</span><span 
   11128 class="cmtt-8">&#x00A0;</span><span 
   11129 class="cmtt-8">&#x00A0;20)</span><span 
   11130 class="cmtt-8">&#x00A0;increment</span><span 
   11131 class="cmtt-8">&#x00A0;[partition_count]</span><span 
   11132 class="cmtt-8">&#x00A0;by</span><span 
   11133 class="cmtt-8">&#x00A0;one</span>
   11134 <br class="fancyvrb" /><a 
   11135  id="x1-110112r48"></a><span 
   11136 class="cmr-6">48</span><span 
   11137 class="cmtt-8">&#x00A0;</span><span 
   11138 class="cmtt-8">&#x00A0;</span>
   11139 <br class="fancyvrb" /><a 
   11140  id="x1-110114r49"></a><span 
   11141 class="cmr-6">49</span><span 
   11142 class="cmtt-8">&#x00A0;</span><span 
   11143 class="cmtt-8">&#x00A0;</span><span 
   11144 class="cmtt-8">&#x00A0;</span><span 
   11145 class="cmtt-8">&#x00A0;</span><span 
   11146 class="cmtt-8">&#x00A0;</span><span 
   11147 class="cmtt-8">&#x00A0;</span><span 
   11148 class="cmtt-8">&#x00A0;</span><span 
   11149 class="cmtt-8">&#x00A0;</span><span 
   11150 class="cmtt-8">&#x00A0;</span><span 
   11151 class="cmtt-8">&#x00A0;</span><span 
   11152 class="cmtt-8">&#x00A0;</span><span 
   11153 class="cmtt-8">&#x00A0;</span><span 
   11154 class="cmtt-8">&#x00A0;</span><span 
   11155 class="cmtt-8">&#x00A0;</span><span 
   11156 class="cmtt-8">&#x00A0;</span><span 
   11157 class="cmtt-8">&#x00A0;</span><span 
   11158 class="cmtt-8">&#x00A0;}</span>
   11159 <br class="fancyvrb" /><a 
   11160  id="x1-110116r50"></a><span 
   11161 class="cmr-6">50</span><span 
   11162 class="cmtt-8">&#x00A0;</span><span 
   11163 class="cmtt-8">&#x00A0;</span><span 
   11164 class="cmtt-8">&#x00A0;</span><span 
   11165 class="cmtt-8">&#x00A0;</span><span 
   11166 class="cmtt-8">&#x00A0;</span><span 
   11167 class="cmtt-8">&#x00A0;</span><span 
   11168 class="cmtt-8">&#x00A0;</span><span 
   11169 class="cmtt-8">&#x00A0;</span><span 
   11170 class="cmtt-8">&#x00A0;</span><span 
   11171 class="cmtt-8">&#x00A0;</span><span 
   11172 class="cmtt-8">&#x00A0;</span><span 
   11173 class="cmtt-8">&#x00A0;}</span>
   11174 <br class="fancyvrb" /><a 
   11175  id="x1-110118r51"></a><span 
   11176 class="cmr-6">51</span><span 
   11177 class="cmtt-8">&#x00A0;</span><span 
   11178 class="cmtt-8">&#x00A0;</span><span 
   11179 class="cmtt-8">&#x00A0;</span><span 
   11180 class="cmtt-8">&#x00A0;</span><span 
   11181 class="cmtt-8">&#x00A0;</span><span 
   11182 class="cmtt-8">&#x00A0;</span><span 
   11183 class="cmtt-8">&#x00A0;}</span>
   11184 <br class="fancyvrb" /><a 
   11185  id="x1-110120r52"></a><span 
   11186 class="cmr-6">52</span><span 
   11187 class="cmtt-8">&#x00A0;</span><span 
   11188 class="cmtt-8">&#x00A0;</span>
   11189 <br class="fancyvrb" /><a 
   11190  id="x1-110122r53"></a><span 
   11191 class="cmr-6">53</span><span 
   11192 class="cmtt-8">&#x00A0;</span><span 
   11193 class="cmtt-8">&#x00A0;</span><span 
   11194 class="cmtt-8">&#x00A0;21)</span><span 
   11195 class="cmtt-8">&#x00A0;done</span>
   11196 <br class="fancyvrb" /><a 
   11197  id="x1-110124r54"></a><span 
   11198 class="cmr-6">54</span><span 
   11199 class="cmtt-8">&#x00A0;</span><span 
   11200 class="cmtt-8">&#x00A0;</span>
   11201 </div>
   11202 <!--l. 344--><p class="noindent" >An end-of-packet condition during packet decode is to be considered a nominal occurrence.
   11203 Decode returns the result of vector decode up to that point.
   11204 <!--l. 350--><p class="noindent" >
   11205 <h5 class="subsubsectionHead"><span class="titlemark">8.6.3  </span> <a 
   11206  id="x1-1110008.6.3"></a>format 0 specifics</h5>
   11207 <!--l. 352--><p class="noindent" >Format zero decodes partitions exactly as described earlier in the &#8217;Residue Format: residue 0&#8217;
   11208 section. The following pseudocode presents the same algorithm. Assume:
   11209       <ul class="itemize1">
   11210       <li class="itemize"><span 
   11211 class="cmtt-12">[n] </span>is the value in <span 
   11212 class="cmtt-12">[residue_partition_size]</span>
   11213       </li>
   11214       <li class="itemize"><span 
   11215 class="cmtt-12">[v] </span>is the residue vector
   11216       </li>
   11217       <li class="itemize"><span 
   11218 class="cmtt-12">[offset] </span>is the beginning read offset in [v]</li></ul>
   11219 <!--l. 363--><p class="noindent" >
   11220 <div class="fancyvrb" id="fancyvrb41">
   11221 <a 
   11222  id="x1-111002r1"></a><span 
   11223 class="cmr-6">1</span><span 
   11224 class="cmtt-8">&#x00A0;</span><span 
   11225 class="cmtt-8">&#x00A0;</span><span 
   11226 class="cmtt-8">&#x00A0;1)</span><span 
   11227 class="cmtt-8">&#x00A0;[step]</span><span 
   11228 class="cmtt-8">&#x00A0;=</span><span 
   11229 class="cmtt-8">&#x00A0;[n]</span><span 
   11230 class="cmtt-8">&#x00A0;/</span><span 
   11231 class="cmtt-8">&#x00A0;[codebook_dimensions]</span>
   11232 <br class="fancyvrb" /><a 
   11233  id="x1-111004r2"></a><span 
   11234 class="cmr-6">2</span><span 
   11235 class="cmtt-8">&#x00A0;</span><span 
   11236 class="cmtt-8">&#x00A0;</span><span 
   11237 class="cmtt-8">&#x00A0;2)</span><span 
   11238 class="cmtt-8">&#x00A0;iterate</span><span 
   11239 class="cmtt-8">&#x00A0;[i]</span><span 
   11240 class="cmtt-8">&#x00A0;over</span><span 
   11241 class="cmtt-8">&#x00A0;the</span><span 
   11242 class="cmtt-8">&#x00A0;range</span><span 
   11243 class="cmtt-8">&#x00A0;0</span><span 
   11244 class="cmtt-8">&#x00A0;...</span><span 
   11245 class="cmtt-8">&#x00A0;[step]-1</span><span 
   11246 class="cmtt-8">&#x00A0;{</span>
   11247 <br class="fancyvrb" /><a 
   11248  id="x1-111006r3"></a><span 
   11249 class="cmr-6">3</span><span 
   11250 class="cmtt-8">&#x00A0;</span><span 
   11251 class="cmtt-8">&#x00A0;</span>
   11252 <br class="fancyvrb" /><a 
   11253  id="x1-111008r4"></a><span 
   11254 class="cmr-6">4</span><span 
   11255 class="cmtt-8">&#x00A0;</span><span 
   11256 class="cmtt-8">&#x00A0;</span><span 
   11257 class="cmtt-8">&#x00A0;</span><span 
   11258 class="cmtt-8">&#x00A0;</span><span 
   11259 class="cmtt-8">&#x00A0;</span><span 
   11260 class="cmtt-8">&#x00A0;</span><span 
   11261 class="cmtt-8">&#x00A0;</span><span 
   11262 class="cmtt-8">&#x00A0;3)</span><span 
   11263 class="cmtt-8">&#x00A0;vector</span><span 
   11264 class="cmtt-8">&#x00A0;[entry_temp]</span><span 
   11265 class="cmtt-8">&#x00A0;=</span><span 
   11266 class="cmtt-8">&#x00A0;read</span><span 
   11267 class="cmtt-8">&#x00A0;vector</span><span 
   11268 class="cmtt-8">&#x00A0;from</span><span 
   11269 class="cmtt-8">&#x00A0;packet</span><span 
   11270 class="cmtt-8">&#x00A0;using</span><span 
   11271 class="cmtt-8">&#x00A0;current</span><span 
   11272 class="cmtt-8">&#x00A0;codebook</span><span 
   11273 class="cmtt-8">&#x00A0;in</span><span 
   11274 class="cmtt-8">&#x00A0;VQ</span><span 
   11275 class="cmtt-8">&#x00A0;context</span>
   11276 <br class="fancyvrb" /><a 
   11277  id="x1-111010r5"></a><span 
   11278 class="cmr-6">5</span><span 
   11279 class="cmtt-8">&#x00A0;</span><span 
   11280 class="cmtt-8">&#x00A0;</span><span 
   11281 class="cmtt-8">&#x00A0;</span><span 
   11282 class="cmtt-8">&#x00A0;</span><span 
   11283 class="cmtt-8">&#x00A0;</span><span 
   11284 class="cmtt-8">&#x00A0;</span><span 
   11285 class="cmtt-8">&#x00A0;</span><span 
   11286 class="cmtt-8">&#x00A0;4)</span><span 
   11287 class="cmtt-8">&#x00A0;iterate</span><span 
   11288 class="cmtt-8">&#x00A0;[j]</span><span 
   11289 class="cmtt-8">&#x00A0;over</span><span 
   11290 class="cmtt-8">&#x00A0;the</span><span 
   11291 class="cmtt-8">&#x00A0;range</span><span 
   11292 class="cmtt-8">&#x00A0;0</span><span 
   11293 class="cmtt-8">&#x00A0;...</span><span 
   11294 class="cmtt-8">&#x00A0;[codebook_dimensions]-1</span><span 
   11295 class="cmtt-8">&#x00A0;{</span>
   11296 <br class="fancyvrb" /><a 
   11297  id="x1-111012r6"></a><span 
   11298 class="cmr-6">6</span><span 
   11299 class="cmtt-8">&#x00A0;</span><span 
   11300 class="cmtt-8">&#x00A0;</span>
   11301 <br class="fancyvrb" /><a 
   11302  id="x1-111014r7"></a><span 
   11303 class="cmr-6">7</span><span 
   11304 class="cmtt-8">&#x00A0;</span><span 
   11305 class="cmtt-8">&#x00A0;</span><span 
   11306 class="cmtt-8">&#x00A0;</span><span 
   11307 class="cmtt-8">&#x00A0;</span><span 
   11308 class="cmtt-8">&#x00A0;</span><span 
   11309 class="cmtt-8">&#x00A0;</span><span 
   11310 class="cmtt-8">&#x00A0;</span><span 
   11311 class="cmtt-8">&#x00A0;</span><span 
   11312 class="cmtt-8">&#x00A0;</span><span 
   11313 class="cmtt-8">&#x00A0;</span><span 
   11314 class="cmtt-8">&#x00A0;</span><span 
   11315 class="cmtt-8">&#x00A0;</span><span 
   11316 class="cmtt-8">&#x00A0;5)</span><span 
   11317 class="cmtt-8">&#x00A0;vector</span><span 
   11318 class="cmtt-8">&#x00A0;[v]</span><span 
   11319 class="cmtt-8">&#x00A0;element</span><span 
   11320 class="cmtt-8">&#x00A0;([offset]+[i]+[j]*[step])</span><span 
   11321 class="cmtt-8">&#x00A0;=</span>
   11322 <br class="fancyvrb" /><a 
   11323  id="x1-111016r8"></a><span 
   11324 class="cmr-6">8</span><span 
   11325 class="cmtt-8">&#x00A0;</span><span 
   11326 class="cmtt-8">&#x00A0;    </span><span 
   11327 class="cmtt-8">&#x00A0;</span><span 
   11328 class="cmtt-8">&#x00A0;</span><span 
   11329 class="cmtt-8">&#x00A0;</span><span 
   11330 class="cmtt-8">&#x00A0;</span><span 
   11331 class="cmtt-8">&#x00A0;</span><span 
   11332 class="cmtt-8">&#x00A0;</span><span 
   11333 class="cmtt-8">&#x00A0;</span><span 
   11334 class="cmtt-8">&#x00A0;vector</span><span 
   11335 class="cmtt-8">&#x00A0;[v]</span><span 
   11336 class="cmtt-8">&#x00A0;element</span><span 
   11337 class="cmtt-8">&#x00A0;([offset]+[i]+[j]*[step])</span><span 
   11338 class="cmtt-8">&#x00A0;+</span>
   11339 <br class="fancyvrb" /><a 
   11340  id="x1-111018r9"></a><span 
   11341 class="cmr-6">9</span><span 
   11342 class="cmtt-8">&#x00A0;</span><span 
   11343 class="cmtt-8">&#x00A0;</span><span 
   11344 class="cmtt-8">&#x00A0;</span><span 
   11345 class="cmtt-8">&#x00A0;</span><span 
   11346 class="cmtt-8">&#x00A0;</span><span 
   11347 class="cmtt-8">&#x00A0;</span><span 
   11348 class="cmtt-8">&#x00A0;</span><span 
   11349 class="cmtt-8">&#x00A0;</span><span 
   11350 class="cmtt-8">&#x00A0;</span><span 
   11351 class="cmtt-8">&#x00A0;</span><span 
   11352 class="cmtt-8">&#x00A0;</span><span 
   11353 class="cmtt-8">&#x00A0;</span><span 
   11354 class="cmtt-8">&#x00A0;</span><span 
   11355 class="cmtt-8">&#x00A0;</span><span 
   11356 class="cmtt-8">&#x00A0;</span><span 
   11357 class="cmtt-8">&#x00A0;</span><span 
   11358 class="cmtt-8">&#x00A0;</span><span 
   11359 class="cmtt-8">&#x00A0;vector</span><span 
   11360 class="cmtt-8">&#x00A0;[entry_temp]</span><span 
   11361 class="cmtt-8">&#x00A0;element</span><span 
   11362 class="cmtt-8">&#x00A0;[j]</span>
   11363 <br class="fancyvrb" /><a 
   11364  id="x1-111020r10"></a><span 
   11365 class="cmr-6">10</span><span 
   11366 class="cmtt-8">&#x00A0;</span><span 
   11367 class="cmtt-8">&#x00A0;</span>
   11368 <br class="fancyvrb" /><a 
   11369  id="x1-111022r11"></a><span 
   11370 class="cmr-6">11</span><span 
   11371 class="cmtt-8">&#x00A0;</span><span 
   11372 class="cmtt-8">&#x00A0;</span><span 
   11373 class="cmtt-8">&#x00A0;</span><span 
   11374 class="cmtt-8">&#x00A0;</span><span 
   11375 class="cmtt-8">&#x00A0;</span><span 
   11376 class="cmtt-8">&#x00A0;</span><span 
   11377 class="cmtt-8">&#x00A0;</span><span 
   11378 class="cmtt-8">&#x00A0;</span><span 
   11379 class="cmtt-8">&#x00A0;</span><span 
   11380 class="cmtt-8">&#x00A0;</span><span 
   11381 class="cmtt-8">&#x00A0;}</span>
   11382 <br class="fancyvrb" /><a 
   11383  id="x1-111024r12"></a><span 
   11384 class="cmr-6">12</span><span 
   11385 class="cmtt-8">&#x00A0;</span><span 
   11386 class="cmtt-8">&#x00A0;</span>
   11387 <br class="fancyvrb" /><a 
   11388  id="x1-111026r13"></a><span 
   11389 class="cmr-6">13</span><span 
   11390 class="cmtt-8">&#x00A0;</span><span 
   11391 class="cmtt-8">&#x00A0;</span><span 
   11392 class="cmtt-8">&#x00A0;</span><span 
   11393 class="cmtt-8">&#x00A0;</span><span 
   11394 class="cmtt-8">&#x00A0;</span><span 
   11395 class="cmtt-8">&#x00A0;}</span>
   11396 <br class="fancyvrb" /><a 
   11397  id="x1-111028r14"></a><span 
   11398 class="cmr-6">14</span><span 
   11399 class="cmtt-8">&#x00A0;</span><span 
   11400 class="cmtt-8">&#x00A0;</span>
   11401 <br class="fancyvrb" /><a 
   11402  id="x1-111030r15"></a><span 
   11403 class="cmr-6">15</span><span 
   11404 class="cmtt-8">&#x00A0;</span><span 
   11405 class="cmtt-8">&#x00A0;</span><span 
   11406 class="cmtt-8">&#x00A0;</span><span 
   11407 class="cmtt-8">&#x00A0;6)</span><span 
   11408 class="cmtt-8">&#x00A0;done</span>
   11409 <br class="fancyvrb" /><a 
   11410  id="x1-111032r16"></a><span 
   11411 class="cmr-6">16</span><span 
   11412 class="cmtt-8">&#x00A0;</span><span 
   11413 class="cmtt-8">&#x00A0;</span>
   11414                                                                                         
   11415 
   11416                                                                                         
   11417 </div>
   11418 <!--l. 384--><p class="noindent" >
   11419 <h5 class="subsubsectionHead"><span class="titlemark">8.6.4  </span> <a 
   11420  id="x1-1120008.6.4"></a>format 1 specifics</h5>
   11421 <!--l. 386--><p class="noindent" >Format 1 decodes partitions exactly as described earlier in the &#8217;Residue Format: residue 1&#8217;
   11422 section. The following pseudocode presents the same algorithm. Assume:
   11423       <ul class="itemize1">
   11424       <li class="itemize"><span 
   11425 class="cmtt-12">[n] </span>is the value in <span 
   11426 class="cmtt-12">[residue_partition_size]</span>
   11427       </li>
   11428       <li class="itemize"><span 
   11429 class="cmtt-12">[v] </span>is the residue vector
   11430       </li>
   11431       <li class="itemize"><span 
   11432 class="cmtt-12">[offset] </span>is the beginning read offset in [v]</li></ul>
   11433 <!--l. 398--><p class="noindent" >
   11434 <div class="fancyvrb" id="fancyvrb42">
   11435 <a 
   11436  id="x1-112002r1"></a><span 
   11437 class="cmr-6">1</span><span 
   11438 class="cmtt-8">&#x00A0;</span><span 
   11439 class="cmtt-8">&#x00A0;</span><span 
   11440 class="cmtt-8">&#x00A0;1)</span><span 
   11441 class="cmtt-8">&#x00A0;[i]</span><span 
   11442 class="cmtt-8">&#x00A0;=</span><span 
   11443 class="cmtt-8">&#x00A0;0</span>
   11444 <br class="fancyvrb" /><a 
   11445  id="x1-112004r2"></a><span 
   11446 class="cmr-6">2</span><span 
   11447 class="cmtt-8">&#x00A0;</span><span 
   11448 class="cmtt-8">&#x00A0;</span><span 
   11449 class="cmtt-8">&#x00A0;2)</span><span 
   11450 class="cmtt-8">&#x00A0;vector</span><span 
   11451 class="cmtt-8">&#x00A0;[entry_temp]</span><span 
   11452 class="cmtt-8">&#x00A0;=</span><span 
   11453 class="cmtt-8">&#x00A0;read</span><span 
   11454 class="cmtt-8">&#x00A0;vector</span><span 
   11455 class="cmtt-8">&#x00A0;from</span><span 
   11456 class="cmtt-8">&#x00A0;packet</span><span 
   11457 class="cmtt-8">&#x00A0;using</span><span 
   11458 class="cmtt-8">&#x00A0;current</span><span 
   11459 class="cmtt-8">&#x00A0;codebook</span><span 
   11460 class="cmtt-8">&#x00A0;in</span><span 
   11461 class="cmtt-8">&#x00A0;VQ</span><span 
   11462 class="cmtt-8">&#x00A0;context</span>
   11463 <br class="fancyvrb" /><a 
   11464  id="x1-112006r3"></a><span 
   11465 class="cmr-6">3</span><span 
   11466 class="cmtt-8">&#x00A0;</span><span 
   11467 class="cmtt-8">&#x00A0;</span><span 
   11468 class="cmtt-8">&#x00A0;3)</span><span 
   11469 class="cmtt-8">&#x00A0;iterate</span><span 
   11470 class="cmtt-8">&#x00A0;[j]</span><span 
   11471 class="cmtt-8">&#x00A0;over</span><span 
   11472 class="cmtt-8">&#x00A0;the</span><span 
   11473 class="cmtt-8">&#x00A0;range</span><span 
   11474 class="cmtt-8">&#x00A0;0</span><span 
   11475 class="cmtt-8">&#x00A0;...</span><span 
   11476 class="cmtt-8">&#x00A0;[codebook_dimensions]-1</span><span 
   11477 class="cmtt-8">&#x00A0;{</span>
   11478 <br class="fancyvrb" /><a 
   11479  id="x1-112008r4"></a><span 
   11480 class="cmr-6">4</span><span 
   11481 class="cmtt-8">&#x00A0;</span><span 
   11482 class="cmtt-8">&#x00A0;</span>
   11483 <br class="fancyvrb" /><a 
   11484  id="x1-112010r5"></a><span 
   11485 class="cmr-6">5</span><span 
   11486 class="cmtt-8">&#x00A0;</span><span 
   11487 class="cmtt-8">&#x00A0;</span><span 
   11488 class="cmtt-8">&#x00A0;</span><span 
   11489 class="cmtt-8">&#x00A0;</span><span 
   11490 class="cmtt-8">&#x00A0;</span><span 
   11491 class="cmtt-8">&#x00A0;</span><span 
   11492 class="cmtt-8">&#x00A0;</span><span 
   11493 class="cmtt-8">&#x00A0;4)</span><span 
   11494 class="cmtt-8">&#x00A0;vector</span><span 
   11495 class="cmtt-8">&#x00A0;[v]</span><span 
   11496 class="cmtt-8">&#x00A0;element</span><span 
   11497 class="cmtt-8">&#x00A0;([offset]+[i])</span><span 
   11498 class="cmtt-8">&#x00A0;=</span>
   11499 <br class="fancyvrb" /><a 
   11500  id="x1-112012r6"></a><span 
   11501 class="cmr-6">6</span><span 
   11502 class="cmtt-8">&#x00A0;</span><span 
   11503 class="cmtt-8">&#x00A0;    </span><span 
   11504 class="cmtt-8">&#x00A0;</span><span 
   11505 class="cmtt-8">&#x00A0;vector</span><span 
   11506 class="cmtt-8">&#x00A0;[v]</span><span 
   11507 class="cmtt-8">&#x00A0;element</span><span 
   11508 class="cmtt-8">&#x00A0;([offset]+[i])</span><span 
   11509 class="cmtt-8">&#x00A0;+</span>
   11510 <br class="fancyvrb" /><a 
   11511  id="x1-112014r7"></a><span 
   11512 class="cmr-6">7</span><span 
   11513 class="cmtt-8">&#x00A0;</span><span 
   11514 class="cmtt-8">&#x00A0;</span><span 
   11515 class="cmtt-8">&#x00A0;</span><span 
   11516 class="cmtt-8">&#x00A0;</span><span 
   11517 class="cmtt-8">&#x00A0;</span><span 
   11518 class="cmtt-8">&#x00A0;</span><span 
   11519 class="cmtt-8">&#x00A0;</span><span 
   11520 class="cmtt-8">&#x00A0;</span><span 
   11521 class="cmtt-8">&#x00A0;</span><span 
   11522 class="cmtt-8">&#x00A0;</span><span 
   11523 class="cmtt-8">&#x00A0;</span><span 
   11524 class="cmtt-8">&#x00A0;vector</span><span 
   11525 class="cmtt-8">&#x00A0;[entry_temp]</span><span 
   11526 class="cmtt-8">&#x00A0;element</span><span 
   11527 class="cmtt-8">&#x00A0;[j]</span>
   11528 <br class="fancyvrb" /><a 
   11529  id="x1-112016r8"></a><span 
   11530 class="cmr-6">8</span><span 
   11531 class="cmtt-8">&#x00A0;</span><span 
   11532 class="cmtt-8">&#x00A0;</span><span 
   11533 class="cmtt-8">&#x00A0;</span><span 
   11534 class="cmtt-8">&#x00A0;</span><span 
   11535 class="cmtt-8">&#x00A0;</span><span 
   11536 class="cmtt-8">&#x00A0;</span><span 
   11537 class="cmtt-8">&#x00A0;</span><span 
   11538 class="cmtt-8">&#x00A0;5)</span><span 
   11539 class="cmtt-8">&#x00A0;increment</span><span 
   11540 class="cmtt-8">&#x00A0;[i]</span>
   11541 <br class="fancyvrb" /><a 
   11542  id="x1-112018r9"></a><span 
   11543 class="cmr-6">9</span><span 
   11544 class="cmtt-8">&#x00A0;</span><span 
   11545 class="cmtt-8">&#x00A0;</span>
   11546 <br class="fancyvrb" /><a 
   11547  id="x1-112020r10"></a><span 
   11548 class="cmr-6">10</span><span 
   11549 class="cmtt-8">&#x00A0;</span><span 
   11550 class="cmtt-8">&#x00A0;</span><span 
   11551 class="cmtt-8">&#x00A0;</span><span 
   11552 class="cmtt-8">&#x00A0;</span><span 
   11553 class="cmtt-8">&#x00A0;</span><span 
   11554 class="cmtt-8">&#x00A0;}</span>
   11555 <br class="fancyvrb" /><a 
   11556  id="x1-112022r11"></a><span 
   11557 class="cmr-6">11</span><span 
   11558 class="cmtt-8">&#x00A0;</span><span 
   11559 class="cmtt-8">&#x00A0;</span>
   11560 <br class="fancyvrb" /><a 
   11561  id="x1-112024r12"></a><span 
   11562 class="cmr-6">12</span><span 
   11563 class="cmtt-8">&#x00A0;</span><span 
   11564 class="cmtt-8">&#x00A0;</span><span 
   11565 class="cmtt-8">&#x00A0;</span><span 
   11566 class="cmtt-8">&#x00A0;6)</span><span 
   11567 class="cmtt-8">&#x00A0;if</span><span 
   11568 class="cmtt-8">&#x00A0;(</span><span 
   11569 class="cmtt-8">&#x00A0;[i]</span><span 
   11570 class="cmtt-8">&#x00A0;is</span><span 
   11571 class="cmtt-8">&#x00A0;less</span><span 
   11572 class="cmtt-8">&#x00A0;than</span><span 
   11573 class="cmtt-8">&#x00A0;[n]</span><span 
   11574 class="cmtt-8">&#x00A0;)</span><span 
   11575 class="cmtt-8">&#x00A0;continue</span><span 
   11576 class="cmtt-8">&#x00A0;at</span><span 
   11577 class="cmtt-8">&#x00A0;step</span><span 
   11578 class="cmtt-8">&#x00A0;2</span>
   11579 <br class="fancyvrb" /><a 
   11580  id="x1-112026r13"></a><span 
   11581 class="cmr-6">13</span><span 
   11582 class="cmtt-8">&#x00A0;</span><span 
   11583 class="cmtt-8">&#x00A0;</span><span 
   11584 class="cmtt-8">&#x00A0;</span><span 
   11585 class="cmtt-8">&#x00A0;7)</span><span 
   11586 class="cmtt-8">&#x00A0;done</span>
   11587 </div>
   11588 <!--l. 416--><p class="noindent" >
   11589 <h5 class="subsubsectionHead"><span class="titlemark">8.6.5  </span> <a 
   11590  id="x1-1130008.6.5"></a>format 2 specifics</h5>
   11591 <!--l. 418--><p class="noindent" >Format 2 is reducible to format 1. It may be implemented as an additional step prior to and an
   11592 additional post-decode step after a normal format 1 decode.
   11593                                                                                         
   11594 
   11595                                                                                         
   11596 <!--l. 421--><p class="noindent" >Format 2 handles &#8217;do not decode&#8217; vectors differently than residue 0 or 1; if all vectors are marked
   11597 &#8217;do not decode&#8217;, no decode occurrs. However, if at least one vector is to be decoded, all
   11598 the vectors are decoded. We then request normal format 1 to decode a single vector
   11599 representing all output channels, rather than a vector for each channel. After decode,
   11600 deinterleave the vector into independent vectors, one for each output channel. That
   11601 is:
   11602 <!--l. 428--><p class="noindent" >
   11603       <ol  class="enumerate1" >
   11604       <li 
   11605   class="enumerate" id="x1-113002x1">If all vectors 0 through <span 
   11606 class="cmti-12">ch</span>-1 are marked &#8217;do not decode&#8217;, allocate and clear a single
   11607       vector <span 
   11608 class="cmtt-12">[v]</span>of length <span 
   11609 class="cmti-12">ch*n </span>and skip step 2 below; proceed directly to the post-decode
   11610       step.
   11611       </li>
   11612       <li 
   11613   class="enumerate" id="x1-113004x2">Rather than performing format 1 decode to produce <span 
   11614 class="cmti-12">ch </span>vectors of length <span 
   11615 class="cmti-12">n </span>each, call
   11616       format 1 decode to produce a single vector <span 
   11617 class="cmtt-12">[v] </span>of length <span 
   11618 class="cmti-12">ch*n</span>.
   11619       </li>
   11620       <li 
   11621   class="enumerate" id="x1-113006x3">Post decode: Deinterleave the single vector <span 
   11622 class="cmtt-12">[v] </span>returned by format 1 decode as
   11623       described above into <span 
   11624 class="cmti-12">ch </span>independent vectors, one for each outputchannel, according
   11625       to:
   11626       <div class="fancyvrb" id="fancyvrb43">
   11627 <a 
   11628  id="x1-113008r1"></a><span 
   11629 class="cmr-6">1</span><span 
   11630 class="cmtt-8">&#x00A0;</span><span 
   11631 class="cmtt-8">&#x00A0;</span><span 
   11632 class="cmtt-8">&#x00A0;</span><span 
   11633 class="cmtt-8">&#x00A0;1)</span><span 
   11634 class="cmtt-8">&#x00A0;iterate</span><span 
   11635 class="cmtt-8">&#x00A0;[i]</span><span 
   11636 class="cmtt-8">&#x00A0;over</span><span 
   11637 class="cmtt-8">&#x00A0;the</span><span 
   11638 class="cmtt-8">&#x00A0;range</span><span 
   11639 class="cmtt-8">&#x00A0;0</span><span 
   11640 class="cmtt-8">&#x00A0;...</span><span 
   11641 class="cmtt-8">&#x00A0;[n]-1</span><span 
   11642 class="cmtt-8">&#x00A0;{</span>
   11643 <br class="fancyvrb" /><a 
   11644  id="x1-113010r2"></a><span 
   11645 class="cmr-6">2</span><span 
   11646 class="cmtt-8">&#x00A0;</span><span 
   11647 class="cmtt-8">&#x00A0;</span>
   11648 <br class="fancyvrb" /><a 
   11649  id="x1-113012r3"></a><span 
   11650 class="cmr-6">3</span><span 
   11651 class="cmtt-8">&#x00A0;</span><span 
   11652 class="cmtt-8">&#x00A0;</span><span 
   11653 class="cmtt-8">&#x00A0;</span><span 
   11654 class="cmtt-8">&#x00A0;</span><span 
   11655 class="cmtt-8">&#x00A0;</span><span 
   11656 class="cmtt-8">&#x00A0;</span><span 
   11657 class="cmtt-8">&#x00A0;</span><span 
   11658 class="cmtt-8">&#x00A0;</span><span 
   11659 class="cmtt-8">&#x00A0;2)</span><span 
   11660 class="cmtt-8">&#x00A0;iterate</span><span 
   11661 class="cmtt-8">&#x00A0;[j]</span><span 
   11662 class="cmtt-8">&#x00A0;over</span><span 
   11663 class="cmtt-8">&#x00A0;the</span><span 
   11664 class="cmtt-8">&#x00A0;range</span><span 
   11665 class="cmtt-8">&#x00A0;0</span><span 
   11666 class="cmtt-8">&#x00A0;...</span><span 
   11667 class="cmtt-8">&#x00A0;[ch]-1</span><span 
   11668 class="cmtt-8">&#x00A0;{</span>
   11669 <br class="fancyvrb" /><a 
   11670  id="x1-113014r4"></a><span 
   11671 class="cmr-6">4</span><span 
   11672 class="cmtt-8">&#x00A0;</span><span 
   11673 class="cmtt-8">&#x00A0;</span>
   11674 <br class="fancyvrb" /><a 
   11675  id="x1-113016r5"></a><span 
   11676 class="cmr-6">5</span><span 
   11677 class="cmtt-8">&#x00A0;</span><span 
   11678 class="cmtt-8">&#x00A0;</span><span 
   11679 class="cmtt-8">&#x00A0;</span><span 
   11680 class="cmtt-8">&#x00A0;</span><span 
   11681 class="cmtt-8">&#x00A0;</span><span 
   11682 class="cmtt-8">&#x00A0;</span><span 
   11683 class="cmtt-8">&#x00A0;</span><span 
   11684 class="cmtt-8">&#x00A0;</span><span 
   11685 class="cmtt-8">&#x00A0;</span><span 
   11686 class="cmtt-8">&#x00A0;</span><span 
   11687 class="cmtt-8">&#x00A0;</span><span 
   11688 class="cmtt-8">&#x00A0;</span><span 
   11689 class="cmtt-8">&#x00A0;</span><span 
   11690 class="cmtt-8">&#x00A0;3)</span><span 
   11691 class="cmtt-8">&#x00A0;output</span><span 
   11692 class="cmtt-8">&#x00A0;vector</span><span 
   11693 class="cmtt-8">&#x00A0;number</span><span 
   11694 class="cmtt-8">&#x00A0;[j]</span><span 
   11695 class="cmtt-8">&#x00A0;element</span><span 
   11696 class="cmtt-8">&#x00A0;[i]</span><span 
   11697 class="cmtt-8">&#x00A0;=</span><span 
   11698 class="cmtt-8">&#x00A0;vector</span><span 
   11699 class="cmtt-8">&#x00A0;[v]</span><span 
   11700 class="cmtt-8">&#x00A0;element</span><span 
   11701 class="cmtt-8">&#x00A0;([i]</span><span 
   11702 class="cmtt-8">&#x00A0;*</span><span 
   11703 class="cmtt-8">&#x00A0;[ch]</span><span 
   11704 class="cmtt-8">&#x00A0;+</span><span 
   11705 class="cmtt-8">&#x00A0;[j])</span>
   11706 <br class="fancyvrb" /><a 
   11707  id="x1-113018r6"></a><span 
   11708 class="cmr-6">6</span><span 
   11709 class="cmtt-8">&#x00A0;</span><span 
   11710 class="cmtt-8">&#x00A0;</span>
   11711 <br class="fancyvrb" /><a 
   11712  id="x1-113020r7"></a><span 
   11713 class="cmr-6">7</span><span 
   11714 class="cmtt-8">&#x00A0;</span><span 
   11715 class="cmtt-8">&#x00A0;</span><span 
   11716 class="cmtt-8">&#x00A0;</span><span 
   11717 class="cmtt-8">&#x00A0;</span><span 
   11718 class="cmtt-8">&#x00A0;</span><span 
   11719 class="cmtt-8">&#x00A0;</span><span 
   11720 class="cmtt-8">&#x00A0;</span><span 
   11721 class="cmtt-8">&#x00A0;</span><span 
   11722 class="cmtt-8">&#x00A0;</span><span 
   11723 class="cmtt-8">&#x00A0;</span><span 
   11724 class="cmtt-8">&#x00A0;</span><span 
   11725 class="cmtt-8">&#x00A0;}</span>
   11726 <br class="fancyvrb" /><a 
   11727  id="x1-113022r8"></a><span 
   11728 class="cmr-6">8</span><span 
   11729 class="cmtt-8">&#x00A0;</span><span 
   11730 class="cmtt-8">&#x00A0;</span><span 
   11731 class="cmtt-8">&#x00A0;</span><span 
   11732 class="cmtt-8">&#x00A0;</span><span 
   11733 class="cmtt-8">&#x00A0;</span><span 
   11734 class="cmtt-8">&#x00A0;</span><span 
   11735 class="cmtt-8">&#x00A0;}</span>
   11736 <br class="fancyvrb" /><a 
   11737  id="x1-113024r9"></a><span 
   11738 class="cmr-6">9</span><span 
   11739 class="cmtt-8">&#x00A0;</span><span 
   11740 class="cmtt-8">&#x00A0;</span>
   11741 <br class="fancyvrb" /><a 
   11742  id="x1-113026r10"></a><span 
   11743 class="cmr-6">10</span><span 
   11744 class="cmtt-8">&#x00A0;</span><span 
   11745 class="cmtt-8">&#x00A0;</span><span 
   11746 class="cmtt-8">&#x00A0;</span><span 
   11747 class="cmtt-8">&#x00A0;4)</span><span 
   11748 class="cmtt-8">&#x00A0;done</span>
   11749 </div>
   11750       </li></ol>
   11751                                                                                         
   11752 
   11753                                                                                         
   11754                                                                                         
   11755 
   11756                                                                                         
   11757 <h3 class="sectionHead"><span class="titlemark">9  </span> <a 
   11758  id="x1-1140009"></a>Helper equations</h3>
   11759 <!--l. 6--><p class="noindent" >
   11760 <h4 class="subsectionHead"><span class="titlemark">9.1  </span> <a 
   11761  id="x1-1150009.1"></a>Overview</h4>
   11762 <!--l. 8--><p class="noindent" >The equations below are used in multiple places by the Vorbis codec specification. Rather than
   11763 cluttering up the main specification documents, they are defined here and referenced where
   11764 appropriate.
   11765 <!--l. 13--><p class="noindent" >
   11766 <h4 class="subsectionHead"><span class="titlemark">9.2  </span> <a 
   11767  id="x1-1160009.2"></a>Functions</h4>
   11768 <!--l. 15--><p class="noindent" >
   11769 <h5 class="subsubsectionHead"><span class="titlemark">9.2.1  </span> <a 
   11770  id="x1-1170009.2.1"></a>ilog</h5>
   11771 <!--l. 17--><p class="noindent" >The &#8221;ilog(x)&#8221; function returns the position number (1 through n) of the highest set bit in the
   11772 two&#8217;s complement integer value <span 
   11773 class="cmtt-12">[x]</span>. Values of <span 
   11774 class="cmtt-12">[x] </span>less than zero are defined to return
   11775 zero.
   11776 <!--l. 20--><p class="noindent" >
   11777 <div class="fancyvrb" id="fancyvrb44">
   11778 <a 
   11779  id="x1-117002r1"></a><span 
   11780 class="cmr-6">1</span><span 
   11781 class="cmtt-8">&#x00A0;</span><span 
   11782 class="cmtt-8">&#x00A0;</span><span 
   11783 class="cmtt-8">&#x00A0;</span><span 
   11784 class="cmtt-8">&#x00A0;1)</span><span 
   11785 class="cmtt-8">&#x00A0;[return_value]</span><span 
   11786 class="cmtt-8">&#x00A0;=</span><span 
   11787 class="cmtt-8">&#x00A0;0;</span>
   11788 <br class="fancyvrb" /><a 
   11789  id="x1-117004r2"></a><span 
   11790 class="cmr-6">2</span><span 
   11791 class="cmtt-8">&#x00A0;</span><span 
   11792 class="cmtt-8">&#x00A0;</span><span 
   11793 class="cmtt-8">&#x00A0;</span><span 
   11794 class="cmtt-8">&#x00A0;2)</span><span 
   11795 class="cmtt-8">&#x00A0;if</span><span 
   11796 class="cmtt-8">&#x00A0;(</span><span 
   11797 class="cmtt-8">&#x00A0;[x]</span><span 
   11798 class="cmtt-8">&#x00A0;is</span><span 
   11799 class="cmtt-8">&#x00A0;greater</span><span 
   11800 class="cmtt-8">&#x00A0;than</span><span 
   11801 class="cmtt-8">&#x00A0;zero</span><span 
   11802 class="cmtt-8">&#x00A0;)</span><span 
   11803 class="cmtt-8">&#x00A0;{</span>
   11804 <br class="fancyvrb" /><a 
   11805  id="x1-117006r3"></a><span 
   11806 class="cmr-6">3</span><span 
   11807 class="cmtt-8">&#x00A0;</span><span 
   11808 class="cmtt-8">&#x00A0;</span>
   11809 <br class="fancyvrb" /><a 
   11810  id="x1-117008r4"></a><span 
   11811 class="cmr-6">4</span><span 
   11812 class="cmtt-8">&#x00A0;</span><span 
   11813 class="cmtt-8">&#x00A0;</span><span 
   11814 class="cmtt-8">&#x00A0;</span><span 
   11815 class="cmtt-8">&#x00A0;</span><span 
   11816 class="cmtt-8">&#x00A0;</span><span 
   11817 class="cmtt-8">&#x00A0;</span><span 
   11818 class="cmtt-8">&#x00A0;</span><span 
   11819 class="cmtt-8">&#x00A0;</span><span 
   11820 class="cmtt-8">&#x00A0;3)</span><span 
   11821 class="cmtt-8">&#x00A0;increment</span><span 
   11822 class="cmtt-8">&#x00A0;[return_value];</span>
   11823 <br class="fancyvrb" /><a 
   11824  id="x1-117010r5"></a><span 
   11825 class="cmr-6">5</span><span 
   11826 class="cmtt-8">&#x00A0;</span><span 
   11827 class="cmtt-8">&#x00A0;</span><span 
   11828 class="cmtt-8">&#x00A0;</span><span 
   11829 class="cmtt-8">&#x00A0;</span><span 
   11830 class="cmtt-8">&#x00A0;</span><span 
   11831 class="cmtt-8">&#x00A0;</span><span 
   11832 class="cmtt-8">&#x00A0;</span><span 
   11833 class="cmtt-8">&#x00A0;</span><span 
   11834 class="cmtt-8">&#x00A0;4)</span><span 
   11835 class="cmtt-8">&#x00A0;logical</span><span 
   11836 class="cmtt-8">&#x00A0;shift</span><span 
   11837 class="cmtt-8">&#x00A0;[x]</span><span 
   11838 class="cmtt-8">&#x00A0;one</span><span 
   11839 class="cmtt-8">&#x00A0;bit</span><span 
   11840 class="cmtt-8">&#x00A0;to</span><span 
   11841 class="cmtt-8">&#x00A0;the</span><span 
   11842 class="cmtt-8">&#x00A0;right,</span><span 
   11843 class="cmtt-8">&#x00A0;padding</span><span 
   11844 class="cmtt-8">&#x00A0;the</span><span 
   11845 class="cmtt-8">&#x00A0;MSb</span><span 
   11846 class="cmtt-8">&#x00A0;with</span><span 
   11847 class="cmtt-8">&#x00A0;zero</span>
   11848 <br class="fancyvrb" /><a 
   11849  id="x1-117012r6"></a><span 
   11850 class="cmr-6">6</span><span 
   11851 class="cmtt-8">&#x00A0;</span><span 
   11852 class="cmtt-8">&#x00A0;</span><span 
   11853 class="cmtt-8">&#x00A0;</span><span 
   11854 class="cmtt-8">&#x00A0;</span><span 
   11855 class="cmtt-8">&#x00A0;</span><span 
   11856 class="cmtt-8">&#x00A0;</span><span 
   11857 class="cmtt-8">&#x00A0;</span><span 
   11858 class="cmtt-8">&#x00A0;</span><span 
   11859 class="cmtt-8">&#x00A0;5)</span><span 
   11860 class="cmtt-8">&#x00A0;repeat</span><span 
   11861 class="cmtt-8">&#x00A0;at</span><span 
   11862 class="cmtt-8">&#x00A0;step</span><span 
   11863 class="cmtt-8">&#x00A0;2)</span>
   11864 <br class="fancyvrb" /><a 
   11865  id="x1-117014r7"></a><span 
   11866 class="cmr-6">7</span><span 
   11867 class="cmtt-8">&#x00A0;</span><span 
   11868 class="cmtt-8">&#x00A0;</span>
   11869 <br class="fancyvrb" /><a 
   11870  id="x1-117016r8"></a><span 
   11871 class="cmr-6">8</span><span 
   11872 class="cmtt-8">&#x00A0;</span><span 
   11873 class="cmtt-8">&#x00A0;</span><span 
   11874 class="cmtt-8">&#x00A0;</span><span 
   11875 class="cmtt-8">&#x00A0;</span><span 
   11876 class="cmtt-8">&#x00A0;</span><span 
   11877 class="cmtt-8">&#x00A0;</span><span 
   11878 class="cmtt-8">&#x00A0;}</span>
   11879 <br class="fancyvrb" /><a 
   11880  id="x1-117018r9"></a><span 
   11881 class="cmr-6">9</span><span 
   11882 class="cmtt-8">&#x00A0;</span><span 
   11883 class="cmtt-8">&#x00A0;</span>
   11884 <br class="fancyvrb" /><a 
   11885  id="x1-117020r10"></a><span 
   11886 class="cmr-6">10</span><span 
   11887 class="cmtt-8">&#x00A0;</span><span 
   11888 class="cmtt-8">&#x00A0;</span><span 
   11889 class="cmtt-8">&#x00A0;</span><span 
   11890 class="cmtt-8">&#x00A0;</span><span 
   11891 class="cmtt-8">&#x00A0;6)</span><span 
   11892 class="cmtt-8">&#x00A0;done</span>
   11893 </div>
   11894                                                                                         
   11895 
   11896                                                                                         
   11897 <!--l. 33--><p class="noindent" >Examples:
   11898       <ul class="itemize1">
   11899       <li class="itemize">ilog(0) = 0;
   11900       </li>
   11901       <li class="itemize">ilog(1) = 1;
   11902       </li>
   11903       <li class="itemize">ilog(2) = 2;
   11904       </li>
   11905       <li class="itemize">ilog(3) = 2;
   11906       </li>
   11907       <li class="itemize">ilog(4) = 3;
   11908       </li>
   11909       <li class="itemize">ilog(7) = 3;
   11910       </li>
   11911       <li class="itemize">ilog(negative number) = 0;</li></ul>
   11912 <!--l. 48--><p class="noindent" >
   11913 <h5 class="subsubsectionHead"><span class="titlemark">9.2.2  </span> <a 
   11914  id="x1-1180009.2.2"></a>float32&#x02D9;unpack</h5>
   11915 <!--l. 50--><p class="noindent" >&#8221;float32&#x02D9;unpack(x)&#8221; is intended to translate the packed binary representation of a Vorbis
   11916 codebook float value into the representation used by the decoder for floating point numbers. For
   11917 purposes of this example, we will unpack a Vorbis float32 into a host-native floating point
   11918 number.
   11919 <!--l. 56--><p class="noindent" >
   11920 <div class="fancyvrb" id="fancyvrb45">
   11921 <a 
   11922  id="x1-118002r1"></a><span 
   11923 class="cmr-6">1</span><span 
   11924 class="cmtt-8">&#x00A0;</span><span 
   11925 class="cmtt-8">&#x00A0;</span><span 
   11926 class="cmtt-8">&#x00A0;</span><span 
   11927 class="cmtt-8">&#x00A0;1)</span><span 
   11928 class="cmtt-8">&#x00A0;[mantissa]</span><span 
   11929 class="cmtt-8">&#x00A0;=</span><span 
   11930 class="cmtt-8">&#x00A0;[x]</span><span 
   11931 class="cmtt-8">&#x00A0;bitwise</span><span 
   11932 class="cmtt-8">&#x00A0;AND</span><span 
   11933 class="cmtt-8">&#x00A0;0x1fffff</span><span 
   11934 class="cmtt-8">&#x00A0;(unsigned</span><span 
   11935 class="cmtt-8">&#x00A0;result)</span>
   11936 <br class="fancyvrb" /><a 
   11937  id="x1-118004r2"></a><span 
   11938 class="cmr-6">2</span><span 
   11939 class="cmtt-8">&#x00A0;</span><span 
   11940 class="cmtt-8">&#x00A0;</span><span 
   11941 class="cmtt-8">&#x00A0;</span><span 
   11942 class="cmtt-8">&#x00A0;2)</span><span 
   11943 class="cmtt-8">&#x00A0;[sign]</span><span 
   11944 class="cmtt-8">&#x00A0;=</span><span 
   11945 class="cmtt-8">&#x00A0;[x]</span><span 
   11946 class="cmtt-8">&#x00A0;bitwise</span><span 
   11947 class="cmtt-8">&#x00A0;AND</span><span 
   11948 class="cmtt-8">&#x00A0;0x80000000</span><span 
   11949 class="cmtt-8">&#x00A0;(unsigned</span><span 
   11950 class="cmtt-8">&#x00A0;result)</span>
   11951 <br class="fancyvrb" /><a 
   11952  id="x1-118006r3"></a><span 
   11953 class="cmr-6">3</span><span 
   11954 class="cmtt-8">&#x00A0;</span><span 
   11955 class="cmtt-8">&#x00A0;</span><span 
   11956 class="cmtt-8">&#x00A0;</span><span 
   11957 class="cmtt-8">&#x00A0;3)</span><span 
   11958 class="cmtt-8">&#x00A0;[exponent]</span><span 
   11959 class="cmtt-8">&#x00A0;=</span><span 
   11960 class="cmtt-8">&#x00A0;(</span><span 
   11961 class="cmtt-8">&#x00A0;[x]</span><span 
   11962 class="cmtt-8">&#x00A0;bitwise</span><span 
   11963 class="cmtt-8">&#x00A0;AND</span><span 
   11964 class="cmtt-8">&#x00A0;0x7fe00000)</span><span 
   11965 class="cmtt-8">&#x00A0;shifted</span><span 
   11966 class="cmtt-8">&#x00A0;right</span><span 
   11967 class="cmtt-8">&#x00A0;21</span><span 
   11968 class="cmtt-8">&#x00A0;bits</span><span 
   11969 class="cmtt-8">&#x00A0;(unsigned</span><span 
   11970 class="cmtt-8">&#x00A0;result)</span>
   11971 <br class="fancyvrb" /><a 
   11972  id="x1-118008r4"></a><span 
   11973 class="cmr-6">4</span><span 
   11974 class="cmtt-8">&#x00A0;</span><span 
   11975 class="cmtt-8">&#x00A0;</span><span 
   11976 class="cmtt-8">&#x00A0;</span><span 
   11977 class="cmtt-8">&#x00A0;4)</span><span 
   11978 class="cmtt-8">&#x00A0;if</span><span 
   11979 class="cmtt-8">&#x00A0;(</span><span 
   11980 class="cmtt-8">&#x00A0;[sign]</span><span 
   11981 class="cmtt-8">&#x00A0;is</span><span 
   11982 class="cmtt-8">&#x00A0;nonzero</span><span 
   11983 class="cmtt-8">&#x00A0;)</span><span 
   11984 class="cmtt-8">&#x00A0;then</span><span 
   11985 class="cmtt-8">&#x00A0;negate</span><span 
   11986 class="cmtt-8">&#x00A0;[mantissa]</span>
   11987 <br class="fancyvrb" /><a 
   11988  id="x1-118010r5"></a><span 
   11989 class="cmr-6">5</span><span 
   11990 class="cmtt-8">&#x00A0;</span><span 
   11991 class="cmtt-8">&#x00A0;</span><span 
   11992 class="cmtt-8">&#x00A0;</span><span 
   11993 class="cmtt-8">&#x00A0;5)</span><span 
   11994 class="cmtt-8">&#x00A0;return</span><span 
   11995 class="cmtt-8">&#x00A0;[mantissa]</span><span 
   11996 class="cmtt-8">&#x00A0;*</span><span 
   11997 class="cmtt-8">&#x00A0;(</span><span 
   11998 class="cmtt-8">&#x00A0;2</span><span 
   11999 class="cmtt-8">&#x00A0;^</span><span 
   12000 class="cmtt-8">&#x00A0;(</span><span 
   12001 class="cmtt-8">&#x00A0;[exponent]</span><span 
   12002 class="cmtt-8">&#x00A0;-</span><span 
   12003 class="cmtt-8">&#x00A0;788</span><span 
   12004 class="cmtt-8">&#x00A0;)</span><span 
   12005 class="cmtt-8">&#x00A0;)</span>
   12006 </div>
   12007                                                                                         
   12008 
   12009                                                                                         
   12010 <!--l. 66--><p class="noindent" >
   12011 <h5 class="subsubsectionHead"><span class="titlemark">9.2.3  </span> <a 
   12012  id="x1-1190009.2.3"></a>lookup1&#x02D9;values</h5>
   12013 <!--l. 68--><p class="noindent" >&#8221;lookup1&#x02D9;values(codebook&#x02D9;entries,codebook&#x02D9;dimensions)&#8221; is used to compute the correct length of
   12014 the value index for a codebook VQ lookup table of lookup type 1. The values on this list are
   12015 permuted to construct the VQ vector lookup table of size <span 
   12016 class="cmtt-12">[codebook_entries]</span>.
   12017 <!--l. 74--><p class="noindent" >The return value for this function is defined to be &#8217;the greatest integer value for which
   12018 <span 
   12019 class="cmtt-12">[return_value] </span>to the power of <span 
   12020 class="cmtt-12">[codebook_dimensions] </span>is less than or equal to
   12021 <span 
   12022 class="cmtt-12">[codebook_entries]</span>&#8217;.
   12023 <!--l. 81--><p class="noindent" >
   12024 <h5 class="subsubsectionHead"><span class="titlemark">9.2.4  </span> <a 
   12025  id="x1-1200009.2.4"></a>low&#x02D9;neighbor</h5>
   12026 <!--l. 83--><p class="noindent" >&#8221;low&#x02D9;neighbor(v,x)&#8221; finds the position <span 
   12027 class="cmtt-12">n </span>in vector <span 
   12028 class="cmtt-12">[v] </span>of the greatest value scalar element for
   12029 which <span 
   12030 class="cmtt-12">n </span>is less than <span 
   12031 class="cmtt-12">[x] </span>and vector <span 
   12032 class="cmtt-12">[v] </span>element <span 
   12033 class="cmtt-12">n </span>is less than vector <span 
   12034 class="cmtt-12">[v] </span>element
   12035 <span 
   12036 class="cmtt-12">[x]</span>.
   12037 <!--l. 88--><p class="noindent" >
   12038 <h5 class="subsubsectionHead"><span class="titlemark">9.2.5  </span> <a 
   12039  id="x1-1210009.2.5"></a>high&#x02D9;neighbor</h5>
   12040 <!--l. 90--><p class="noindent" >&#8221;high&#x02D9;neighbor(v,x)&#8221; finds the position <span 
   12041 class="cmtt-12">n </span>in vector [v] of the lowest value scalar element for
   12042 which <span 
   12043 class="cmtt-12">n </span>is less than <span 
   12044 class="cmtt-12">[x] </span>and vector <span 
   12045 class="cmtt-12">[v] </span>element <span 
   12046 class="cmtt-12">n </span>is greater than vector <span 
   12047 class="cmtt-12">[v] </span>element
   12048 <span 
   12049 class="cmtt-12">[x]</span>.
   12050 <!--l. 97--><p class="noindent" >
   12051 <h5 class="subsubsectionHead"><span class="titlemark">9.2.6  </span> <a 
   12052  id="x1-1220009.2.6"></a>render&#x02D9;point</h5>
   12053 <!--l. 99--><p class="noindent" >&#8221;render&#x02D9;point(x0,y0,x1,y1,X)&#8221; is used to find the Y value at point X along the line specified by
   12054 x0, x1, y0 and y1. This function uses an integer algorithm to solve for the point directly without
   12055 calculating intervening values along the line.
   12056 <!--l. 104--><p class="noindent" >
   12057                                                                                         
   12058 
   12059                                                                                         
   12060 <div class="fancyvrb" id="fancyvrb46">
   12061 <a 
   12062  id="x1-122002r1"></a><span 
   12063 class="cmr-6">1</span><span 
   12064 class="cmtt-8">&#x00A0;</span><span 
   12065 class="cmtt-8">&#x00A0;</span><span 
   12066 class="cmtt-8">&#x00A0;</span><span 
   12067 class="cmtt-8">&#x00A0;1)</span><span 
   12068 class="cmtt-8">&#x00A0;</span><span 
   12069 class="cmtt-8">&#x00A0;[dy]</span><span 
   12070 class="cmtt-8">&#x00A0;=</span><span 
   12071 class="cmtt-8">&#x00A0;[y1]</span><span 
   12072 class="cmtt-8">&#x00A0;-</span><span 
   12073 class="cmtt-8">&#x00A0;[y0]</span>
   12074 <br class="fancyvrb" /><a 
   12075  id="x1-122004r2"></a><span 
   12076 class="cmr-6">2</span><span 
   12077 class="cmtt-8">&#x00A0;</span><span 
   12078 class="cmtt-8">&#x00A0;</span><span 
   12079 class="cmtt-8">&#x00A0;</span><span 
   12080 class="cmtt-8">&#x00A0;2)</span><span 
   12081 class="cmtt-8">&#x00A0;[adx]</span><span 
   12082 class="cmtt-8">&#x00A0;=</span><span 
   12083 class="cmtt-8">&#x00A0;[x1]</span><span 
   12084 class="cmtt-8">&#x00A0;-</span><span 
   12085 class="cmtt-8">&#x00A0;[x0]</span>
   12086 <br class="fancyvrb" /><a 
   12087  id="x1-122006r3"></a><span 
   12088 class="cmr-6">3</span><span 
   12089 class="cmtt-8">&#x00A0;</span><span 
   12090 class="cmtt-8">&#x00A0;</span><span 
   12091 class="cmtt-8">&#x00A0;</span><span 
   12092 class="cmtt-8">&#x00A0;3)</span><span 
   12093 class="cmtt-8">&#x00A0;[ady]</span><span 
   12094 class="cmtt-8">&#x00A0;=</span><span 
   12095 class="cmtt-8">&#x00A0;absolute</span><span 
   12096 class="cmtt-8">&#x00A0;value</span><span 
   12097 class="cmtt-8">&#x00A0;of</span><span 
   12098 class="cmtt-8">&#x00A0;[dy]</span>
   12099 <br class="fancyvrb" /><a 
   12100  id="x1-122008r4"></a><span 
   12101 class="cmr-6">4</span><span 
   12102 class="cmtt-8">&#x00A0;</span><span 
   12103 class="cmtt-8">&#x00A0;</span><span 
   12104 class="cmtt-8">&#x00A0;</span><span 
   12105 class="cmtt-8">&#x00A0;4)</span><span 
   12106 class="cmtt-8">&#x00A0;[err]</span><span 
   12107 class="cmtt-8">&#x00A0;=</span><span 
   12108 class="cmtt-8">&#x00A0;[ady]</span><span 
   12109 class="cmtt-8">&#x00A0;*</span><span 
   12110 class="cmtt-8">&#x00A0;([X]</span><span 
   12111 class="cmtt-8">&#x00A0;-</span><span 
   12112 class="cmtt-8">&#x00A0;[x0])</span>
   12113 <br class="fancyvrb" /><a 
   12114  id="x1-122010r5"></a><span 
   12115 class="cmr-6">5</span><span 
   12116 class="cmtt-8">&#x00A0;</span><span 
   12117 class="cmtt-8">&#x00A0;</span><span 
   12118 class="cmtt-8">&#x00A0;</span><span 
   12119 class="cmtt-8">&#x00A0;5)</span><span 
   12120 class="cmtt-8">&#x00A0;[off]</span><span 
   12121 class="cmtt-8">&#x00A0;=</span><span 
   12122 class="cmtt-8">&#x00A0;[err]</span><span 
   12123 class="cmtt-8">&#x00A0;/</span><span 
   12124 class="cmtt-8">&#x00A0;[adx]</span><span 
   12125 class="cmtt-8">&#x00A0;using</span><span 
   12126 class="cmtt-8">&#x00A0;integer</span><span 
   12127 class="cmtt-8">&#x00A0;division</span>
   12128 <br class="fancyvrb" /><a 
   12129  id="x1-122012r6"></a><span 
   12130 class="cmr-6">6</span><span 
   12131 class="cmtt-8">&#x00A0;</span><span 
   12132 class="cmtt-8">&#x00A0;</span><span 
   12133 class="cmtt-8">&#x00A0;</span><span 
   12134 class="cmtt-8">&#x00A0;6)</span><span 
   12135 class="cmtt-8">&#x00A0;if</span><span 
   12136 class="cmtt-8">&#x00A0;(</span><span 
   12137 class="cmtt-8">&#x00A0;[dy]</span><span 
   12138 class="cmtt-8">&#x00A0;is</span><span 
   12139 class="cmtt-8">&#x00A0;less</span><span 
   12140 class="cmtt-8">&#x00A0;than</span><span 
   12141 class="cmtt-8">&#x00A0;zero</span><span 
   12142 class="cmtt-8">&#x00A0;)</span><span 
   12143 class="cmtt-8">&#x00A0;{</span>
   12144 <br class="fancyvrb" /><a 
   12145  id="x1-122014r7"></a><span 
   12146 class="cmr-6">7</span><span 
   12147 class="cmtt-8">&#x00A0;</span><span 
   12148 class="cmtt-8">&#x00A0;</span>
   12149 <br class="fancyvrb" /><a 
   12150  id="x1-122016r8"></a><span 
   12151 class="cmr-6">8</span><span 
   12152 class="cmtt-8">&#x00A0;</span><span 
   12153 class="cmtt-8">&#x00A0;</span><span 
   12154 class="cmtt-8">&#x00A0;</span><span 
   12155 class="cmtt-8">&#x00A0;</span><span 
   12156 class="cmtt-8">&#x00A0;</span><span 
   12157 class="cmtt-8">&#x00A0;</span><span 
   12158 class="cmtt-8">&#x00A0;</span><span 
   12159 class="cmtt-8">&#x00A0;</span><span 
   12160 class="cmtt-8">&#x00A0;7)</span><span 
   12161 class="cmtt-8">&#x00A0;[Y]</span><span 
   12162 class="cmtt-8">&#x00A0;=</span><span 
   12163 class="cmtt-8">&#x00A0;[y0]</span><span 
   12164 class="cmtt-8">&#x00A0;-</span><span 
   12165 class="cmtt-8">&#x00A0;[off]</span>
   12166 <br class="fancyvrb" /><a 
   12167  id="x1-122018r9"></a><span 
   12168 class="cmr-6">9</span><span 
   12169 class="cmtt-8">&#x00A0;</span><span 
   12170 class="cmtt-8">&#x00A0;</span>
   12171 <br class="fancyvrb" /><a 
   12172  id="x1-122020r10"></a><span 
   12173 class="cmr-6">10</span><span 
   12174 class="cmtt-8">&#x00A0;</span><span 
   12175 class="cmtt-8">&#x00A0;</span><span 
   12176 class="cmtt-8">&#x00A0;</span><span 
   12177 class="cmtt-8">&#x00A0;</span><span 
   12178 class="cmtt-8">&#x00A0;</span><span 
   12179 class="cmtt-8">&#x00A0;</span><span 
   12180 class="cmtt-8">&#x00A0;}</span><span 
   12181 class="cmtt-8">&#x00A0;else</span><span 
   12182 class="cmtt-8">&#x00A0;{</span>
   12183 <br class="fancyvrb" /><a 
   12184  id="x1-122022r11"></a><span 
   12185 class="cmr-6">11</span><span 
   12186 class="cmtt-8">&#x00A0;</span><span 
   12187 class="cmtt-8">&#x00A0;</span>
   12188 <br class="fancyvrb" /><a 
   12189  id="x1-122024r12"></a><span 
   12190 class="cmr-6">12</span><span 
   12191 class="cmtt-8">&#x00A0;</span><span 
   12192 class="cmtt-8">&#x00A0;</span><span 
   12193 class="cmtt-8">&#x00A0;</span><span 
   12194 class="cmtt-8">&#x00A0;</span><span 
   12195 class="cmtt-8">&#x00A0;</span><span 
   12196 class="cmtt-8">&#x00A0;</span><span 
   12197 class="cmtt-8">&#x00A0;</span><span 
   12198 class="cmtt-8">&#x00A0;</span><span 
   12199 class="cmtt-8">&#x00A0;8)</span><span 
   12200 class="cmtt-8">&#x00A0;[Y]</span><span 
   12201 class="cmtt-8">&#x00A0;=</span><span 
   12202 class="cmtt-8">&#x00A0;[y0]</span><span 
   12203 class="cmtt-8">&#x00A0;+</span><span 
   12204 class="cmtt-8">&#x00A0;[off]</span>
   12205 <br class="fancyvrb" /><a 
   12206  id="x1-122026r13"></a><span 
   12207 class="cmr-6">13</span><span 
   12208 class="cmtt-8">&#x00A0;</span><span 
   12209 class="cmtt-8">&#x00A0;</span>
   12210 <br class="fancyvrb" /><a 
   12211  id="x1-122028r14"></a><span 
   12212 class="cmr-6">14</span><span 
   12213 class="cmtt-8">&#x00A0;</span><span 
   12214 class="cmtt-8">&#x00A0;</span><span 
   12215 class="cmtt-8">&#x00A0;</span><span 
   12216 class="cmtt-8">&#x00A0;</span><span 
   12217 class="cmtt-8">&#x00A0;</span><span 
   12218 class="cmtt-8">&#x00A0;</span><span 
   12219 class="cmtt-8">&#x00A0;}</span>
   12220 <br class="fancyvrb" /><a 
   12221  id="x1-122030r15"></a><span 
   12222 class="cmr-6">15</span><span 
   12223 class="cmtt-8">&#x00A0;</span><span 
   12224 class="cmtt-8">&#x00A0;</span>
   12225 <br class="fancyvrb" /><a 
   12226  id="x1-122032r16"></a><span 
   12227 class="cmr-6">16</span><span 
   12228 class="cmtt-8">&#x00A0;</span><span 
   12229 class="cmtt-8">&#x00A0;</span><span 
   12230 class="cmtt-8">&#x00A0;</span><span 
   12231 class="cmtt-8">&#x00A0;9)</span><span 
   12232 class="cmtt-8">&#x00A0;done</span>
   12233 </div>
   12234 <!--l. 125--><p class="noindent" >
   12235 <h5 class="subsubsectionHead"><span class="titlemark">9.2.7  </span> <a 
   12236  id="x1-1230009.2.7"></a>render&#x02D9;line</h5>
   12237 <!--l. 127--><p class="noindent" >Floor decode type one uses the integer line drawing algorithm of &#8221;render&#x02D9;line(x0, y0, x1, y1, v)&#8221;
   12238 to construct an integer floor curve for contiguous piecewise line segments. Note that it has not
   12239 been relevant elsewhere, but here we must define integer division as rounding division of both
   12240 positive and negative numbers toward zero.
   12241 <!--l. 134--><p class="noindent" >
   12242 <div class="fancyvrb" id="fancyvrb47">
   12243 <a 
   12244  id="x1-123002r1"></a><span 
   12245 class="cmr-6">1</span><span 
   12246 class="cmtt-8">&#x00A0;</span><span 
   12247 class="cmtt-8">&#x00A0;</span><span 
   12248 class="cmtt-8">&#x00A0;</span><span 
   12249 class="cmtt-8">&#x00A0;1)</span><span 
   12250 class="cmtt-8">&#x00A0;</span><span 
   12251 class="cmtt-8">&#x00A0;</span><span 
   12252 class="cmtt-8">&#x00A0;[dy]</span><span 
   12253 class="cmtt-8">&#x00A0;=</span><span 
   12254 class="cmtt-8">&#x00A0;[y1]</span><span 
   12255 class="cmtt-8">&#x00A0;-</span><span 
   12256 class="cmtt-8">&#x00A0;[y0]</span>
   12257 <br class="fancyvrb" /><a 
   12258  id="x1-123004r2"></a><span 
   12259 class="cmr-6">2</span><span 
   12260 class="cmtt-8">&#x00A0;</span><span 
   12261 class="cmtt-8">&#x00A0;</span><span 
   12262 class="cmtt-8">&#x00A0;</span><span 
   12263 class="cmtt-8">&#x00A0;2)</span><span 
   12264 class="cmtt-8">&#x00A0;</span><span 
   12265 class="cmtt-8">&#x00A0;[adx]</span><span 
   12266 class="cmtt-8">&#x00A0;=</span><span 
   12267 class="cmtt-8">&#x00A0;[x1]</span><span 
   12268 class="cmtt-8">&#x00A0;-</span><span 
   12269 class="cmtt-8">&#x00A0;[x0]</span>
   12270 <br class="fancyvrb" /><a 
   12271  id="x1-123006r3"></a><span 
   12272 class="cmr-6">3</span><span 
   12273 class="cmtt-8">&#x00A0;</span><span 
   12274 class="cmtt-8">&#x00A0;</span><span 
   12275 class="cmtt-8">&#x00A0;</span><span 
   12276 class="cmtt-8">&#x00A0;3)</span><span 
   12277 class="cmtt-8">&#x00A0;</span><span 
   12278 class="cmtt-8">&#x00A0;[ady]</span><span 
   12279 class="cmtt-8">&#x00A0;=</span><span 
   12280 class="cmtt-8">&#x00A0;absolute</span><span 
   12281 class="cmtt-8">&#x00A0;value</span><span 
   12282 class="cmtt-8">&#x00A0;of</span><span 
   12283 class="cmtt-8">&#x00A0;[dy]</span>
   12284 <br class="fancyvrb" /><a 
   12285  id="x1-123008r4"></a><span 
   12286 class="cmr-6">4</span><span 
   12287 class="cmtt-8">&#x00A0;</span><span 
   12288 class="cmtt-8">&#x00A0;</span><span 
   12289 class="cmtt-8">&#x00A0;</span><span 
   12290 class="cmtt-8">&#x00A0;4)</span><span 
   12291 class="cmtt-8">&#x00A0;[base]</span><span 
   12292 class="cmtt-8">&#x00A0;=</span><span 
   12293 class="cmtt-8">&#x00A0;[dy]</span><span 
   12294 class="cmtt-8">&#x00A0;/</span><span 
   12295 class="cmtt-8">&#x00A0;[adx]</span><span 
   12296 class="cmtt-8">&#x00A0;using</span><span 
   12297 class="cmtt-8">&#x00A0;integer</span><span 
   12298 class="cmtt-8">&#x00A0;division</span>
   12299 <br class="fancyvrb" /><a 
   12300  id="x1-123010r5"></a><span 
   12301 class="cmr-6">5</span><span 
   12302 class="cmtt-8">&#x00A0;</span><span 
   12303 class="cmtt-8">&#x00A0;</span><span 
   12304 class="cmtt-8">&#x00A0;</span><span 
   12305 class="cmtt-8">&#x00A0;5)</span><span 
   12306 class="cmtt-8">&#x00A0;</span><span 
   12307 class="cmtt-8">&#x00A0;</span><span 
   12308 class="cmtt-8">&#x00A0;</span><span 
   12309 class="cmtt-8">&#x00A0;[x]</span><span 
   12310 class="cmtt-8">&#x00A0;=</span><span 
   12311 class="cmtt-8">&#x00A0;[x0]</span>
   12312 <br class="fancyvrb" /><a 
   12313  id="x1-123012r6"></a><span 
   12314 class="cmr-6">6</span><span 
   12315 class="cmtt-8">&#x00A0;</span><span 
   12316 class="cmtt-8">&#x00A0;</span><span 
   12317 class="cmtt-8">&#x00A0;</span><span 
   12318 class="cmtt-8">&#x00A0;6)</span><span 
   12319 class="cmtt-8">&#x00A0;</span><span 
   12320 class="cmtt-8">&#x00A0;</span><span 
   12321 class="cmtt-8">&#x00A0;</span><span 
   12322 class="cmtt-8">&#x00A0;[y]</span><span 
   12323 class="cmtt-8">&#x00A0;=</span><span 
   12324 class="cmtt-8">&#x00A0;[y0]</span>
   12325 <br class="fancyvrb" /><a 
   12326  id="x1-123014r7"></a><span 
   12327 class="cmr-6">7</span><span 
   12328 class="cmtt-8">&#x00A0;</span><span 
   12329 class="cmtt-8">&#x00A0;</span><span 
   12330 class="cmtt-8">&#x00A0;</span><span 
   12331 class="cmtt-8">&#x00A0;7)</span><span 
   12332 class="cmtt-8">&#x00A0;</span><span 
   12333 class="cmtt-8">&#x00A0;[err]</span><span 
   12334 class="cmtt-8">&#x00A0;=</span><span 
   12335 class="cmtt-8">&#x00A0;0</span>
   12336 <br class="fancyvrb" /><a 
   12337  id="x1-123016r8"></a><span 
   12338 class="cmr-6">8</span><span 
   12339 class="cmtt-8">&#x00A0;</span><span 
   12340 class="cmtt-8">&#x00A0;</span>
   12341 <br class="fancyvrb" /><a 
   12342  id="x1-123018r9"></a><span 
   12343 class="cmr-6">9</span><span 
   12344 class="cmtt-8">&#x00A0;</span><span 
   12345 class="cmtt-8">&#x00A0;</span><span 
   12346 class="cmtt-8">&#x00A0;</span><span 
   12347 class="cmtt-8">&#x00A0;8)</span><span 
   12348 class="cmtt-8">&#x00A0;if</span><span 
   12349 class="cmtt-8">&#x00A0;(</span><span 
   12350 class="cmtt-8">&#x00A0;[dy]</span><span 
   12351 class="cmtt-8">&#x00A0;is</span><span 
   12352 class="cmtt-8">&#x00A0;less</span><span 
   12353 class="cmtt-8">&#x00A0;than</span><span 
   12354 class="cmtt-8">&#x00A0;0</span><span 
   12355 class="cmtt-8">&#x00A0;)</span><span 
   12356 class="cmtt-8">&#x00A0;{</span>
   12357 <br class="fancyvrb" /><a 
   12358  id="x1-123020r10"></a><span 
   12359 class="cmr-6">10</span><span 
   12360 class="cmtt-8">&#x00A0;</span><span 
   12361 class="cmtt-8">&#x00A0;</span>
   12362 <br class="fancyvrb" /><a 
   12363  id="x1-123022r11"></a><span 
   12364 class="cmr-6">11</span><span 
   12365 class="cmtt-8">&#x00A0;</span><span 
   12366 class="cmtt-8">&#x00A0;</span><span 
   12367 class="cmtt-8">&#x00A0;</span><span 
   12368 class="cmtt-8">&#x00A0;</span><span 
   12369 class="cmtt-8">&#x00A0;</span><span 
   12370 class="cmtt-8">&#x00A0;</span><span 
   12371 class="cmtt-8">&#x00A0;</span><span 
   12372 class="cmtt-8">&#x00A0;</span><span 
   12373 class="cmtt-8">&#x00A0;</span><span 
   12374 class="cmtt-8">&#x00A0;9)</span><span 
   12375 class="cmtt-8">&#x00A0;[sy]</span><span 
   12376 class="cmtt-8">&#x00A0;=</span><span 
   12377 class="cmtt-8">&#x00A0;[base]</span><span 
   12378 class="cmtt-8">&#x00A0;-</span><span 
   12379 class="cmtt-8">&#x00A0;1</span>
   12380 <br class="fancyvrb" /><a 
   12381  id="x1-123024r12"></a><span 
   12382 class="cmr-6">12</span><span 
   12383 class="cmtt-8">&#x00A0;</span><span 
   12384 class="cmtt-8">&#x00A0;</span>
   12385 <br class="fancyvrb" /><a 
   12386  id="x1-123026r13"></a><span 
   12387 class="cmr-6">13</span><span 
   12388 class="cmtt-8">&#x00A0;</span><span 
   12389 class="cmtt-8">&#x00A0;</span><span 
   12390 class="cmtt-8">&#x00A0;</span><span 
   12391 class="cmtt-8">&#x00A0;</span><span 
   12392 class="cmtt-8">&#x00A0;</span><span 
   12393 class="cmtt-8">&#x00A0;</span><span 
   12394 class="cmtt-8">&#x00A0;}</span><span 
   12395 class="cmtt-8">&#x00A0;else</span><span 
   12396 class="cmtt-8">&#x00A0;{</span>
   12397 <br class="fancyvrb" /><a 
   12398  id="x1-123028r14"></a><span 
   12399 class="cmr-6">14</span><span 
   12400 class="cmtt-8">&#x00A0;</span><span 
   12401 class="cmtt-8">&#x00A0;</span>
   12402 <br class="fancyvrb" /><a 
   12403  id="x1-123030r15"></a><span 
   12404 class="cmr-6">15</span><span 
   12405 class="cmtt-8">&#x00A0;</span><span 
   12406 class="cmtt-8">&#x00A0;</span><span 
   12407 class="cmtt-8">&#x00A0;</span><span 
   12408 class="cmtt-8">&#x00A0;</span><span 
   12409 class="cmtt-8">&#x00A0;</span><span 
   12410 class="cmtt-8">&#x00A0;</span><span 
   12411 class="cmtt-8">&#x00A0;</span><span 
   12412 class="cmtt-8">&#x00A0;</span><span 
   12413 class="cmtt-8">&#x00A0;10)</span><span 
   12414 class="cmtt-8">&#x00A0;[sy]</span><span 
   12415 class="cmtt-8">&#x00A0;=</span><span 
   12416 class="cmtt-8">&#x00A0;[base]</span><span 
   12417 class="cmtt-8">&#x00A0;+</span><span 
   12418 class="cmtt-8">&#x00A0;1</span>
   12419 <br class="fancyvrb" /><a 
   12420  id="x1-123032r16"></a><span 
   12421 class="cmr-6">16</span><span 
   12422 class="cmtt-8">&#x00A0;</span><span 
   12423 class="cmtt-8">&#x00A0;</span>
   12424 <br class="fancyvrb" /><a 
   12425  id="x1-123034r17"></a><span 
   12426 class="cmr-6">17</span><span 
   12427 class="cmtt-8">&#x00A0;</span><span 
   12428 class="cmtt-8">&#x00A0;</span><span 
   12429 class="cmtt-8">&#x00A0;</span><span 
   12430 class="cmtt-8">&#x00A0;</span><span 
   12431 class="cmtt-8">&#x00A0;</span><span 
   12432 class="cmtt-8">&#x00A0;</span><span 
   12433 class="cmtt-8">&#x00A0;}</span>
   12434 <br class="fancyvrb" /><a 
   12435  id="x1-123036r18"></a><span 
   12436 class="cmr-6">18</span><span 
   12437 class="cmtt-8">&#x00A0;</span><span 
   12438 class="cmtt-8">&#x00A0;</span>
   12439 <br class="fancyvrb" /><a 
   12440  id="x1-123038r19"></a><span 
   12441 class="cmr-6">19</span><span 
   12442 class="cmtt-8">&#x00A0;</span><span 
   12443 class="cmtt-8">&#x00A0;</span><span 
   12444 class="cmtt-8">&#x00A0;11)</span><span 
   12445 class="cmtt-8">&#x00A0;[ady]</span><span 
   12446 class="cmtt-8">&#x00A0;=</span><span 
   12447 class="cmtt-8">&#x00A0;[ady]</span><span 
   12448 class="cmtt-8">&#x00A0;-</span><span 
   12449 class="cmtt-8">&#x00A0;(absolute</span><span 
   12450 class="cmtt-8">&#x00A0;value</span><span 
   12451 class="cmtt-8">&#x00A0;of</span><span 
   12452 class="cmtt-8">&#x00A0;[base])</span><span 
   12453 class="cmtt-8">&#x00A0;*</span><span 
   12454 class="cmtt-8">&#x00A0;[adx]</span>
   12455 <br class="fancyvrb" /><a 
   12456  id="x1-123040r20"></a><span 
   12457 class="cmr-6">20</span><span 
   12458 class="cmtt-8">&#x00A0;</span><span 
   12459 class="cmtt-8">&#x00A0;</span><span 
   12460 class="cmtt-8">&#x00A0;12)</span><span 
   12461 class="cmtt-8">&#x00A0;vector</span><span 
   12462 class="cmtt-8">&#x00A0;[v]</span><span 
   12463 class="cmtt-8">&#x00A0;element</span><span 
   12464 class="cmtt-8">&#x00A0;[x]</span><span 
   12465 class="cmtt-8">&#x00A0;=</span><span 
   12466 class="cmtt-8">&#x00A0;[y]</span>
   12467 <br class="fancyvrb" /><a 
   12468  id="x1-123042r21"></a><span 
   12469 class="cmr-6">21</span><span 
   12470 class="cmtt-8">&#x00A0;</span><span 
   12471 class="cmtt-8">&#x00A0;</span>
   12472 <br class="fancyvrb" /><a 
   12473  id="x1-123044r22"></a><span 
   12474 class="cmr-6">22</span><span 
   12475 class="cmtt-8">&#x00A0;</span><span 
   12476 class="cmtt-8">&#x00A0;</span><span 
   12477 class="cmtt-8">&#x00A0;13)</span><span 
   12478 class="cmtt-8">&#x00A0;iterate</span><span 
   12479 class="cmtt-8">&#x00A0;[x]</span><span 
   12480 class="cmtt-8">&#x00A0;over</span><span 
   12481 class="cmtt-8">&#x00A0;the</span><span 
   12482 class="cmtt-8">&#x00A0;range</span><span 
   12483 class="cmtt-8">&#x00A0;[x0]+1</span><span 
   12484 class="cmtt-8">&#x00A0;...</span><span 
   12485 class="cmtt-8">&#x00A0;[x1]-1</span><span 
   12486 class="cmtt-8">&#x00A0;{</span>
   12487 <br class="fancyvrb" /><a 
   12488  id="x1-123046r23"></a><span 
   12489 class="cmr-6">23</span><span 
   12490 class="cmtt-8">&#x00A0;</span><span 
   12491 class="cmtt-8">&#x00A0;</span>
   12492 <br class="fancyvrb" /><a 
   12493  id="x1-123048r24"></a><span 
   12494 class="cmr-6">24</span><span 
   12495 class="cmtt-8">&#x00A0;</span><span 
   12496 class="cmtt-8">&#x00A0;</span><span 
   12497 class="cmtt-8">&#x00A0;</span><span 
   12498 class="cmtt-8">&#x00A0;</span><span 
   12499 class="cmtt-8">&#x00A0;</span><span 
   12500 class="cmtt-8">&#x00A0;</span><span 
   12501 class="cmtt-8">&#x00A0;</span><span 
   12502 class="cmtt-8">&#x00A0;</span><span 
   12503 class="cmtt-8">&#x00A0;14)</span><span 
   12504 class="cmtt-8">&#x00A0;[err]</span><span 
   12505 class="cmtt-8">&#x00A0;=</span><span 
   12506 class="cmtt-8">&#x00A0;[err]</span><span 
   12507 class="cmtt-8">&#x00A0;+</span><span 
   12508 class="cmtt-8">&#x00A0;[ady];</span>
   12509                                                                                         
   12510 
   12511                                                                                         
   12512 <br class="fancyvrb" /><a 
   12513  id="x1-123050r25"></a><span 
   12514 class="cmr-6">25</span><span 
   12515 class="cmtt-8">&#x00A0;</span><span 
   12516 class="cmtt-8">&#x00A0;</span><span 
   12517 class="cmtt-8">&#x00A0;</span><span 
   12518 class="cmtt-8">&#x00A0;</span><span 
   12519 class="cmtt-8">&#x00A0;</span><span 
   12520 class="cmtt-8">&#x00A0;</span><span 
   12521 class="cmtt-8">&#x00A0;</span><span 
   12522 class="cmtt-8">&#x00A0;</span><span 
   12523 class="cmtt-8">&#x00A0;15)</span><span 
   12524 class="cmtt-8">&#x00A0;if</span><span 
   12525 class="cmtt-8">&#x00A0;(</span><span 
   12526 class="cmtt-8">&#x00A0;[err]</span><span 
   12527 class="cmtt-8">&#x00A0;&#x003E;=</span><span 
   12528 class="cmtt-8">&#x00A0;[adx]</span><span 
   12529 class="cmtt-8">&#x00A0;)</span><span 
   12530 class="cmtt-8">&#x00A0;{</span>
   12531 <br class="fancyvrb" /><a 
   12532  id="x1-123052r26"></a><span 
   12533 class="cmr-6">26</span><span 
   12534 class="cmtt-8">&#x00A0;</span><span 
   12535 class="cmtt-8">&#x00A0;</span>
   12536 <br class="fancyvrb" /><a 
   12537  id="x1-123054r27"></a><span 
   12538 class="cmr-6">27</span><span 
   12539 class="cmtt-8">&#x00A0;</span><span 
   12540 class="cmtt-8">&#x00A0;</span><span 
   12541 class="cmtt-8">&#x00A0;</span><span 
   12542 class="cmtt-8">&#x00A0;</span><span 
   12543 class="cmtt-8">&#x00A0;</span><span 
   12544 class="cmtt-8">&#x00A0;</span><span 
   12545 class="cmtt-8">&#x00A0;</span><span 
   12546 class="cmtt-8">&#x00A0;</span><span 
   12547 class="cmtt-8">&#x00A0;</span><span 
   12548 class="cmtt-8">&#x00A0;</span><span 
   12549 class="cmtt-8">&#x00A0;</span><span 
   12550 class="cmtt-8">&#x00A0;</span><span 
   12551 class="cmtt-8">&#x00A0;</span><span 
   12552 class="cmtt-8">&#x00A0;</span><span 
   12553 class="cmtt-8">&#x00A0;16)</span><span 
   12554 class="cmtt-8">&#x00A0;[err]</span><span 
   12555 class="cmtt-8">&#x00A0;=</span><span 
   12556 class="cmtt-8">&#x00A0;[err]</span><span 
   12557 class="cmtt-8">&#x00A0;-</span><span 
   12558 class="cmtt-8">&#x00A0;[adx]</span>
   12559 <br class="fancyvrb" /><a 
   12560  id="x1-123056r28"></a><span 
   12561 class="cmr-6">28</span><span 
   12562 class="cmtt-8">&#x00A0;</span><span 
   12563 class="cmtt-8">&#x00A0;</span><span 
   12564 class="cmtt-8">&#x00A0;</span><span 
   12565 class="cmtt-8">&#x00A0;</span><span 
   12566 class="cmtt-8">&#x00A0;</span><span 
   12567 class="cmtt-8">&#x00A0;</span><span 
   12568 class="cmtt-8">&#x00A0;</span><span 
   12569 class="cmtt-8">&#x00A0;</span><span 
   12570 class="cmtt-8">&#x00A0;</span><span 
   12571 class="cmtt-8">&#x00A0;</span><span 
   12572 class="cmtt-8">&#x00A0;</span><span 
   12573 class="cmtt-8">&#x00A0;</span><span 
   12574 class="cmtt-8">&#x00A0;</span><span 
   12575 class="cmtt-8">&#x00A0;</span><span 
   12576 class="cmtt-8">&#x00A0;17)</span><span 
   12577 class="cmtt-8">&#x00A0;</span><span 
   12578 class="cmtt-8">&#x00A0;</span><span 
   12579 class="cmtt-8">&#x00A0;[y]</span><span 
   12580 class="cmtt-8">&#x00A0;=</span><span 
   12581 class="cmtt-8">&#x00A0;[y]</span><span 
   12582 class="cmtt-8">&#x00A0;+</span><span 
   12583 class="cmtt-8">&#x00A0;[sy]</span>
   12584 <br class="fancyvrb" /><a 
   12585  id="x1-123058r29"></a><span 
   12586 class="cmr-6">29</span><span 
   12587 class="cmtt-8">&#x00A0;</span><span 
   12588 class="cmtt-8">&#x00A0;</span>
   12589 <br class="fancyvrb" /><a 
   12590  id="x1-123060r30"></a><span 
   12591 class="cmr-6">30</span><span 
   12592 class="cmtt-8">&#x00A0;</span><span 
   12593 class="cmtt-8">&#x00A0;</span><span 
   12594 class="cmtt-8">&#x00A0;</span><span 
   12595 class="cmtt-8">&#x00A0;</span><span 
   12596 class="cmtt-8">&#x00A0;</span><span 
   12597 class="cmtt-8">&#x00A0;</span><span 
   12598 class="cmtt-8">&#x00A0;</span><span 
   12599 class="cmtt-8">&#x00A0;</span><span 
   12600 class="cmtt-8">&#x00A0;</span><span 
   12601 class="cmtt-8">&#x00A0;</span><span 
   12602 class="cmtt-8">&#x00A0;</span><span 
   12603 class="cmtt-8">&#x00A0;</span><span 
   12604 class="cmtt-8">&#x00A0;}</span><span 
   12605 class="cmtt-8">&#x00A0;else</span><span 
   12606 class="cmtt-8">&#x00A0;{</span>
   12607 <br class="fancyvrb" /><a 
   12608  id="x1-123062r31"></a><span 
   12609 class="cmr-6">31</span><span 
   12610 class="cmtt-8">&#x00A0;</span><span 
   12611 class="cmtt-8">&#x00A0;</span>
   12612 <br class="fancyvrb" /><a 
   12613  id="x1-123064r32"></a><span 
   12614 class="cmr-6">32</span><span 
   12615 class="cmtt-8">&#x00A0;</span><span 
   12616 class="cmtt-8">&#x00A0;</span><span 
   12617 class="cmtt-8">&#x00A0;</span><span 
   12618 class="cmtt-8">&#x00A0;</span><span 
   12619 class="cmtt-8">&#x00A0;</span><span 
   12620 class="cmtt-8">&#x00A0;</span><span 
   12621 class="cmtt-8">&#x00A0;</span><span 
   12622 class="cmtt-8">&#x00A0;</span><span 
   12623 class="cmtt-8">&#x00A0;</span><span 
   12624 class="cmtt-8">&#x00A0;</span><span 
   12625 class="cmtt-8">&#x00A0;</span><span 
   12626 class="cmtt-8">&#x00A0;</span><span 
   12627 class="cmtt-8">&#x00A0;</span><span 
   12628 class="cmtt-8">&#x00A0;</span><span 
   12629 class="cmtt-8">&#x00A0;18)</span><span 
   12630 class="cmtt-8">&#x00A0;[y]</span><span 
   12631 class="cmtt-8">&#x00A0;=</span><span 
   12632 class="cmtt-8">&#x00A0;[y]</span><span 
   12633 class="cmtt-8">&#x00A0;+</span><span 
   12634 class="cmtt-8">&#x00A0;[base]</span>
   12635 <br class="fancyvrb" /><a 
   12636  id="x1-123066r33"></a><span 
   12637 class="cmr-6">33</span><span 
   12638 class="cmtt-8">&#x00A0;</span><span 
   12639 class="cmtt-8">&#x00A0;</span>
   12640 <br class="fancyvrb" /><a 
   12641  id="x1-123068r34"></a><span 
   12642 class="cmr-6">34</span><span 
   12643 class="cmtt-8">&#x00A0;</span><span 
   12644 class="cmtt-8">&#x00A0;</span><span 
   12645 class="cmtt-8">&#x00A0;</span><span 
   12646 class="cmtt-8">&#x00A0;</span><span 
   12647 class="cmtt-8">&#x00A0;</span><span 
   12648 class="cmtt-8">&#x00A0;</span><span 
   12649 class="cmtt-8">&#x00A0;</span><span 
   12650 class="cmtt-8">&#x00A0;</span><span 
   12651 class="cmtt-8">&#x00A0;</span><span 
   12652 class="cmtt-8">&#x00A0;</span><span 
   12653 class="cmtt-8">&#x00A0;</span><span 
   12654 class="cmtt-8">&#x00A0;</span><span 
   12655 class="cmtt-8">&#x00A0;}</span>
   12656 <br class="fancyvrb" /><a 
   12657  id="x1-123070r35"></a><span 
   12658 class="cmr-6">35</span><span 
   12659 class="cmtt-8">&#x00A0;</span><span 
   12660 class="cmtt-8">&#x00A0;</span>
   12661 <br class="fancyvrb" /><a 
   12662  id="x1-123072r36"></a><span 
   12663 class="cmr-6">36</span><span 
   12664 class="cmtt-8">&#x00A0;</span><span 
   12665 class="cmtt-8">&#x00A0;</span><span 
   12666 class="cmtt-8">&#x00A0;</span><span 
   12667 class="cmtt-8">&#x00A0;</span><span 
   12668 class="cmtt-8">&#x00A0;</span><span 
   12669 class="cmtt-8">&#x00A0;</span><span 
   12670 class="cmtt-8">&#x00A0;</span><span 
   12671 class="cmtt-8">&#x00A0;</span><span 
   12672 class="cmtt-8">&#x00A0;19)</span><span 
   12673 class="cmtt-8">&#x00A0;vector</span><span 
   12674 class="cmtt-8">&#x00A0;[v]</span><span 
   12675 class="cmtt-8">&#x00A0;element</span><span 
   12676 class="cmtt-8">&#x00A0;[x]</span><span 
   12677 class="cmtt-8">&#x00A0;=</span><span 
   12678 class="cmtt-8">&#x00A0;[y]</span>
   12679 <br class="fancyvrb" /><a 
   12680  id="x1-123074r37"></a><span 
   12681 class="cmr-6">37</span><span 
   12682 class="cmtt-8">&#x00A0;</span><span 
   12683 class="cmtt-8">&#x00A0;</span>
   12684 <br class="fancyvrb" /><a 
   12685  id="x1-123076r38"></a><span 
   12686 class="cmr-6">38</span><span 
   12687 class="cmtt-8">&#x00A0;</span><span 
   12688 class="cmtt-8">&#x00A0;</span><span 
   12689 class="cmtt-8">&#x00A0;</span><span 
   12690 class="cmtt-8">&#x00A0;</span><span 
   12691 class="cmtt-8">&#x00A0;</span><span 
   12692 class="cmtt-8">&#x00A0;</span><span 
   12693 class="cmtt-8">&#x00A0;}</span>
   12694 </div>
   12695                                                                                         
   12696 
   12697                                                                                         
   12698                                                                                         
   12699 
   12700                                                                                         
   12701 <h3 class="sectionHead"><span class="titlemark">10  </span> <a 
   12702  id="x1-12400010"></a>Tables</h3>
   12703 <!--l. 6--><p class="noindent" >
   12704 <h4 class="subsectionHead"><span class="titlemark">10.1  </span> <a 
   12705  id="x1-12500010.1"></a>floor1_inverse_dB_table</h4>
   12706 <!--l. 8--><p class="noindent" >The vector <span 
   12707 class="cmtt-12">[floor1_inverse_dB_table] </span>is a 256 element static lookup table consiting of the
   12708 following values (read left to right then top to bottom):
   12709 <!--l. 12--><p class="noindent" >
   12710 <div class="fancyvrb" id="fancyvrb48">
   12711 <a 
   12712  id="x1-125002r1"></a><span 
   12713 class="cmr-6">1</span><span 
   12714 class="cmtt-8">&#x00A0;</span><span 
   12715 class="cmtt-8">&#x00A0;</span><span 
   12716 class="cmtt-8">&#x00A0;</span><span 
   12717 class="cmtt-8">&#x00A0;1.0649863e-07,</span><span 
   12718 class="cmtt-8">&#x00A0;1.1341951e-07,</span><span 
   12719 class="cmtt-8">&#x00A0;1.2079015e-07,</span><span 
   12720 class="cmtt-8">&#x00A0;1.2863978e-07,</span>
   12721 <br class="fancyvrb" /><a 
   12722  id="x1-125004r2"></a><span 
   12723 class="cmr-6">2</span><span 
   12724 class="cmtt-8">&#x00A0;</span><span 
   12725 class="cmtt-8">&#x00A0;</span><span 
   12726 class="cmtt-8">&#x00A0;</span><span 
   12727 class="cmtt-8">&#x00A0;1.3699951e-07,</span><span 
   12728 class="cmtt-8">&#x00A0;1.4590251e-07,</span><span 
   12729 class="cmtt-8">&#x00A0;1.5538408e-07,</span><span 
   12730 class="cmtt-8">&#x00A0;1.6548181e-07,</span>
   12731 <br class="fancyvrb" /><a 
   12732  id="x1-125006r3"></a><span 
   12733 class="cmr-6">3</span><span 
   12734 class="cmtt-8">&#x00A0;</span><span 
   12735 class="cmtt-8">&#x00A0;</span><span 
   12736 class="cmtt-8">&#x00A0;</span><span 
   12737 class="cmtt-8">&#x00A0;1.7623575e-07,</span><span 
   12738 class="cmtt-8">&#x00A0;1.8768855e-07,</span><span 
   12739 class="cmtt-8">&#x00A0;1.9988561e-07,</span><span 
   12740 class="cmtt-8">&#x00A0;2.1287530e-07,</span>
   12741 <br class="fancyvrb" /><a 
   12742  id="x1-125008r4"></a><span 
   12743 class="cmr-6">4</span><span 
   12744 class="cmtt-8">&#x00A0;</span><span 
   12745 class="cmtt-8">&#x00A0;</span><span 
   12746 class="cmtt-8">&#x00A0;</span><span 
   12747 class="cmtt-8">&#x00A0;2.2670913e-07,</span><span 
   12748 class="cmtt-8">&#x00A0;2.4144197e-07,</span><span 
   12749 class="cmtt-8">&#x00A0;2.5713223e-07,</span><span 
   12750 class="cmtt-8">&#x00A0;2.7384213e-07,</span>
   12751 <br class="fancyvrb" /><a 
   12752  id="x1-125010r5"></a><span 
   12753 class="cmr-6">5</span><span 
   12754 class="cmtt-8">&#x00A0;</span><span 
   12755 class="cmtt-8">&#x00A0;</span><span 
   12756 class="cmtt-8">&#x00A0;</span><span 
   12757 class="cmtt-8">&#x00A0;2.9163793e-07,</span><span 
   12758 class="cmtt-8">&#x00A0;3.1059021e-07,</span><span 
   12759 class="cmtt-8">&#x00A0;3.3077411e-07,</span><span 
   12760 class="cmtt-8">&#x00A0;3.5226968e-07,</span>
   12761 <br class="fancyvrb" /><a 
   12762  id="x1-125012r6"></a><span 
   12763 class="cmr-6">6</span><span 
   12764 class="cmtt-8">&#x00A0;</span><span 
   12765 class="cmtt-8">&#x00A0;</span><span 
   12766 class="cmtt-8">&#x00A0;</span><span 
   12767 class="cmtt-8">&#x00A0;3.7516214e-07,</span><span 
   12768 class="cmtt-8">&#x00A0;3.9954229e-07,</span><span 
   12769 class="cmtt-8">&#x00A0;4.2550680e-07,</span><span 
   12770 class="cmtt-8">&#x00A0;4.5315863e-07,</span>
   12771 <br class="fancyvrb" /><a 
   12772  id="x1-125014r7"></a><span 
   12773 class="cmr-6">7</span><span 
   12774 class="cmtt-8">&#x00A0;</span><span 
   12775 class="cmtt-8">&#x00A0;</span><span 
   12776 class="cmtt-8">&#x00A0;</span><span 
   12777 class="cmtt-8">&#x00A0;4.8260743e-07,</span><span 
   12778 class="cmtt-8">&#x00A0;5.1396998e-07,</span><span 
   12779 class="cmtt-8">&#x00A0;5.4737065e-07,</span><span 
   12780 class="cmtt-8">&#x00A0;5.8294187e-07,</span>
   12781 <br class="fancyvrb" /><a 
   12782  id="x1-125016r8"></a><span 
   12783 class="cmr-6">8</span><span 
   12784 class="cmtt-8">&#x00A0;</span><span 
   12785 class="cmtt-8">&#x00A0;</span><span 
   12786 class="cmtt-8">&#x00A0;</span><span 
   12787 class="cmtt-8">&#x00A0;6.2082472e-07,</span><span 
   12788 class="cmtt-8">&#x00A0;6.6116941e-07,</span><span 
   12789 class="cmtt-8">&#x00A0;7.0413592e-07,</span><span 
   12790 class="cmtt-8">&#x00A0;7.4989464e-07,</span>
   12791 <br class="fancyvrb" /><a 
   12792  id="x1-125018r9"></a><span 
   12793 class="cmr-6">9</span><span 
   12794 class="cmtt-8">&#x00A0;</span><span 
   12795 class="cmtt-8">&#x00A0;</span><span 
   12796 class="cmtt-8">&#x00A0;</span><span 
   12797 class="cmtt-8">&#x00A0;7.9862701e-07,</span><span 
   12798 class="cmtt-8">&#x00A0;8.5052630e-07,</span><span 
   12799 class="cmtt-8">&#x00A0;9.0579828e-07,</span><span 
   12800 class="cmtt-8">&#x00A0;9.6466216e-07,</span>
   12801 <br class="fancyvrb" /><a 
   12802  id="x1-125020r10"></a><span 
   12803 class="cmr-6">10</span><span 
   12804 class="cmtt-8">&#x00A0;</span><span 
   12805 class="cmtt-8">&#x00A0;</span><span 
   12806 class="cmtt-8">&#x00A0;</span><span 
   12807 class="cmtt-8">&#x00A0;1.0273513e-06,</span><span 
   12808 class="cmtt-8">&#x00A0;1.0941144e-06,</span><span 
   12809 class="cmtt-8">&#x00A0;1.1652161e-06,</span><span 
   12810 class="cmtt-8">&#x00A0;1.2409384e-06,</span>
   12811 <br class="fancyvrb" /><a 
   12812  id="x1-125022r11"></a><span 
   12813 class="cmr-6">11</span><span 
   12814 class="cmtt-8">&#x00A0;</span><span 
   12815 class="cmtt-8">&#x00A0;</span><span 
   12816 class="cmtt-8">&#x00A0;</span><span 
   12817 class="cmtt-8">&#x00A0;1.3215816e-06,</span><span 
   12818 class="cmtt-8">&#x00A0;1.4074654e-06,</span><span 
   12819 class="cmtt-8">&#x00A0;1.4989305e-06,</span><span 
   12820 class="cmtt-8">&#x00A0;1.5963394e-06,</span>
   12821 <br class="fancyvrb" /><a 
   12822  id="x1-125024r12"></a><span 
   12823 class="cmr-6">12</span><span 
   12824 class="cmtt-8">&#x00A0;</span><span 
   12825 class="cmtt-8">&#x00A0;</span><span 
   12826 class="cmtt-8">&#x00A0;</span><span 
   12827 class="cmtt-8">&#x00A0;1.7000785e-06,</span><span 
   12828 class="cmtt-8">&#x00A0;1.8105592e-06,</span><span 
   12829 class="cmtt-8">&#x00A0;1.9282195e-06,</span><span 
   12830 class="cmtt-8">&#x00A0;2.0535261e-06,</span>
   12831 <br class="fancyvrb" /><a 
   12832  id="x1-125026r13"></a><span 
   12833 class="cmr-6">13</span><span 
   12834 class="cmtt-8">&#x00A0;</span><span 
   12835 class="cmtt-8">&#x00A0;</span><span 
   12836 class="cmtt-8">&#x00A0;</span><span 
   12837 class="cmtt-8">&#x00A0;2.1869758e-06,</span><span 
   12838 class="cmtt-8">&#x00A0;2.3290978e-06,</span><span 
   12839 class="cmtt-8">&#x00A0;2.4804557e-06,</span><span 
   12840 class="cmtt-8">&#x00A0;2.6416497e-06,</span>
   12841 <br class="fancyvrb" /><a 
   12842  id="x1-125028r14"></a><span 
   12843 class="cmr-6">14</span><span 
   12844 class="cmtt-8">&#x00A0;</span><span 
   12845 class="cmtt-8">&#x00A0;</span><span 
   12846 class="cmtt-8">&#x00A0;</span><span 
   12847 class="cmtt-8">&#x00A0;2.8133190e-06,</span><span 
   12848 class="cmtt-8">&#x00A0;2.9961443e-06,</span><span 
   12849 class="cmtt-8">&#x00A0;3.1908506e-06,</span><span 
   12850 class="cmtt-8">&#x00A0;3.3982101e-06,</span>
   12851 <br class="fancyvrb" /><a 
   12852  id="x1-125030r15"></a><span 
   12853 class="cmr-6">15</span><span 
   12854 class="cmtt-8">&#x00A0;</span><span 
   12855 class="cmtt-8">&#x00A0;</span><span 
   12856 class="cmtt-8">&#x00A0;</span><span 
   12857 class="cmtt-8">&#x00A0;3.6190449e-06,</span><span 
   12858 class="cmtt-8">&#x00A0;3.8542308e-06,</span><span 
   12859 class="cmtt-8">&#x00A0;4.1047004e-06,</span><span 
   12860 class="cmtt-8">&#x00A0;4.3714470e-06,</span>
   12861 <br class="fancyvrb" /><a 
   12862  id="x1-125032r16"></a><span 
   12863 class="cmr-6">16</span><span 
   12864 class="cmtt-8">&#x00A0;</span><span 
   12865 class="cmtt-8">&#x00A0;</span><span 
   12866 class="cmtt-8">&#x00A0;</span><span 
   12867 class="cmtt-8">&#x00A0;4.6555282e-06,</span><span 
   12868 class="cmtt-8">&#x00A0;4.9580707e-06,</span><span 
   12869 class="cmtt-8">&#x00A0;5.2802740e-06,</span><span 
   12870 class="cmtt-8">&#x00A0;5.6234160e-06,</span>
   12871 <br class="fancyvrb" /><a 
   12872  id="x1-125034r17"></a><span 
   12873 class="cmr-6">17</span><span 
   12874 class="cmtt-8">&#x00A0;</span><span 
   12875 class="cmtt-8">&#x00A0;</span><span 
   12876 class="cmtt-8">&#x00A0;</span><span 
   12877 class="cmtt-8">&#x00A0;5.9888572e-06,</span><span 
   12878 class="cmtt-8">&#x00A0;6.3780469e-06,</span><span 
   12879 class="cmtt-8">&#x00A0;6.7925283e-06,</span><span 
   12880 class="cmtt-8">&#x00A0;7.2339451e-06,</span>
   12881 <br class="fancyvrb" /><a 
   12882  id="x1-125036r18"></a><span 
   12883 class="cmr-6">18</span><span 
   12884 class="cmtt-8">&#x00A0;</span><span 
   12885 class="cmtt-8">&#x00A0;</span><span 
   12886 class="cmtt-8">&#x00A0;</span><span 
   12887 class="cmtt-8">&#x00A0;7.7040476e-06,</span><span 
   12888 class="cmtt-8">&#x00A0;8.2047000e-06,</span><span 
   12889 class="cmtt-8">&#x00A0;8.7378876e-06,</span><span 
   12890 class="cmtt-8">&#x00A0;9.3057248e-06,</span>
   12891 <br class="fancyvrb" /><a 
   12892  id="x1-125038r19"></a><span 
   12893 class="cmr-6">19</span><span 
   12894 class="cmtt-8">&#x00A0;</span><span 
   12895 class="cmtt-8">&#x00A0;</span><span 
   12896 class="cmtt-8">&#x00A0;</span><span 
   12897 class="cmtt-8">&#x00A0;9.9104632e-06,</span><span 
   12898 class="cmtt-8">&#x00A0;1.0554501e-05,</span><span 
   12899 class="cmtt-8">&#x00A0;1.1240392e-05,</span><span 
   12900 class="cmtt-8">&#x00A0;1.1970856e-05,</span>
   12901 <br class="fancyvrb" /><a 
   12902  id="x1-125040r20"></a><span 
   12903 class="cmr-6">20</span><span 
   12904 class="cmtt-8">&#x00A0;</span><span 
   12905 class="cmtt-8">&#x00A0;</span><span 
   12906 class="cmtt-8">&#x00A0;</span><span 
   12907 class="cmtt-8">&#x00A0;1.2748789e-05,</span><span 
   12908 class="cmtt-8">&#x00A0;1.3577278e-05,</span><span 
   12909 class="cmtt-8">&#x00A0;1.4459606e-05,</span><span 
   12910 class="cmtt-8">&#x00A0;1.5399272e-05,</span>
   12911 <br class="fancyvrb" /><a 
   12912  id="x1-125042r21"></a><span 
   12913 class="cmr-6">21</span><span 
   12914 class="cmtt-8">&#x00A0;</span><span 
   12915 class="cmtt-8">&#x00A0;</span><span 
   12916 class="cmtt-8">&#x00A0;</span><span 
   12917 class="cmtt-8">&#x00A0;1.6400004e-05,</span><span 
   12918 class="cmtt-8">&#x00A0;1.7465768e-05,</span><span 
   12919 class="cmtt-8">&#x00A0;1.8600792e-05,</span><span 
   12920 class="cmtt-8">&#x00A0;1.9809576e-05,</span>
   12921 <br class="fancyvrb" /><a 
   12922  id="x1-125044r22"></a><span 
   12923 class="cmr-6">22</span><span 
   12924 class="cmtt-8">&#x00A0;</span><span 
   12925 class="cmtt-8">&#x00A0;</span><span 
   12926 class="cmtt-8">&#x00A0;</span><span 
   12927 class="cmtt-8">&#x00A0;2.1096914e-05,</span><span 
   12928 class="cmtt-8">&#x00A0;2.2467911e-05,</span><span 
   12929 class="cmtt-8">&#x00A0;2.3928002e-05,</span><span 
   12930 class="cmtt-8">&#x00A0;2.5482978e-05,</span>
   12931 <br class="fancyvrb" /><a 
   12932  id="x1-125046r23"></a><span 
   12933 class="cmr-6">23</span><span 
   12934 class="cmtt-8">&#x00A0;</span><span 
   12935 class="cmtt-8">&#x00A0;</span><span 
   12936 class="cmtt-8">&#x00A0;</span><span 
   12937 class="cmtt-8">&#x00A0;2.7139006e-05,</span><span 
   12938 class="cmtt-8">&#x00A0;2.8902651e-05,</span><span 
   12939 class="cmtt-8">&#x00A0;3.0780908e-05,</span><span 
   12940 class="cmtt-8">&#x00A0;3.2781225e-05,</span>
   12941 <br class="fancyvrb" /><a 
   12942  id="x1-125048r24"></a><span 
   12943 class="cmr-6">24</span><span 
   12944 class="cmtt-8">&#x00A0;</span><span 
   12945 class="cmtt-8">&#x00A0;</span><span 
   12946 class="cmtt-8">&#x00A0;</span><span 
   12947 class="cmtt-8">&#x00A0;3.4911534e-05,</span><span 
   12948 class="cmtt-8">&#x00A0;3.7180282e-05,</span><span 
   12949 class="cmtt-8">&#x00A0;3.9596466e-05,</span><span 
   12950 class="cmtt-8">&#x00A0;4.2169667e-05,</span>
   12951 <br class="fancyvrb" /><a 
   12952  id="x1-125050r25"></a><span 
   12953 class="cmr-6">25</span><span 
   12954 class="cmtt-8">&#x00A0;</span><span 
   12955 class="cmtt-8">&#x00A0;</span><span 
   12956 class="cmtt-8">&#x00A0;</span><span 
   12957 class="cmtt-8">&#x00A0;4.4910090e-05,</span><span 
   12958 class="cmtt-8">&#x00A0;4.7828601e-05,</span><span 
   12959 class="cmtt-8">&#x00A0;5.0936773e-05,</span><span 
   12960 class="cmtt-8">&#x00A0;5.4246931e-05,</span>
   12961 <br class="fancyvrb" /><a 
   12962  id="x1-125052r26"></a><span 
   12963 class="cmr-6">26</span><span 
   12964 class="cmtt-8">&#x00A0;</span><span 
   12965 class="cmtt-8">&#x00A0;</span><span 
   12966 class="cmtt-8">&#x00A0;</span><span 
   12967 class="cmtt-8">&#x00A0;5.7772202e-05,</span><span 
   12968 class="cmtt-8">&#x00A0;6.1526565e-05,</span><span 
   12969 class="cmtt-8">&#x00A0;6.5524908e-05,</span><span 
   12970 class="cmtt-8">&#x00A0;6.9783085e-05,</span>
   12971 <br class="fancyvrb" /><a 
   12972  id="x1-125054r27"></a><span 
   12973 class="cmr-6">27</span><span 
   12974 class="cmtt-8">&#x00A0;</span><span 
   12975 class="cmtt-8">&#x00A0;</span><span 
   12976 class="cmtt-8">&#x00A0;</span><span 
   12977 class="cmtt-8">&#x00A0;7.4317983e-05,</span><span 
   12978 class="cmtt-8">&#x00A0;7.9147585e-05,</span><span 
   12979 class="cmtt-8">&#x00A0;8.4291040e-05,</span><span 
   12980 class="cmtt-8">&#x00A0;8.9768747e-05,</span>
   12981 <br class="fancyvrb" /><a 
   12982  id="x1-125056r28"></a><span 
   12983 class="cmr-6">28</span><span 
   12984 class="cmtt-8">&#x00A0;</span><span 
   12985 class="cmtt-8">&#x00A0;</span><span 
   12986 class="cmtt-8">&#x00A0;</span><span 
   12987 class="cmtt-8">&#x00A0;9.5602426e-05,</span><span 
   12988 class="cmtt-8">&#x00A0;0.00010181521,</span><span 
   12989 class="cmtt-8">&#x00A0;0.00010843174,</span><span 
   12990 class="cmtt-8">&#x00A0;0.00011547824,</span>
   12991 <br class="fancyvrb" /><a 
   12992  id="x1-125058r29"></a><span 
   12993 class="cmr-6">29</span><span 
   12994 class="cmtt-8">&#x00A0;</span><span 
   12995 class="cmtt-8">&#x00A0;</span><span 
   12996 class="cmtt-8">&#x00A0;</span><span 
   12997 class="cmtt-8">&#x00A0;0.00012298267,</span><span 
   12998 class="cmtt-8">&#x00A0;0.00013097477,</span><span 
   12999 class="cmtt-8">&#x00A0;0.00013948625,</span><span 
   13000 class="cmtt-8">&#x00A0;0.00014855085,</span>
   13001 <br class="fancyvrb" /><a 
   13002  id="x1-125060r30"></a><span 
   13003 class="cmr-6">30</span><span 
   13004 class="cmtt-8">&#x00A0;</span><span 
   13005 class="cmtt-8">&#x00A0;</span><span 
   13006 class="cmtt-8">&#x00A0;</span><span 
   13007 class="cmtt-8">&#x00A0;0.00015820453,</span><span 
   13008 class="cmtt-8">&#x00A0;0.00016848555,</span><span 
   13009 class="cmtt-8">&#x00A0;0.00017943469,</span><span 
   13010 class="cmtt-8">&#x00A0;0.00019109536,</span>
   13011 <br class="fancyvrb" /><a 
   13012  id="x1-125062r31"></a><span 
   13013 class="cmr-6">31</span><span 
   13014 class="cmtt-8">&#x00A0;</span><span 
   13015 class="cmtt-8">&#x00A0;</span><span 
   13016 class="cmtt-8">&#x00A0;</span><span 
   13017 class="cmtt-8">&#x00A0;0.00020351382,</span><span 
   13018 class="cmtt-8">&#x00A0;0.00021673929,</span><span 
   13019 class="cmtt-8">&#x00A0;0.00023082423,</span><span 
   13020 class="cmtt-8">&#x00A0;0.00024582449,</span>
   13021 <br class="fancyvrb" /><a 
   13022  id="x1-125064r32"></a><span 
   13023 class="cmr-6">32</span><span 
   13024 class="cmtt-8">&#x00A0;</span><span 
   13025 class="cmtt-8">&#x00A0;</span><span 
   13026 class="cmtt-8">&#x00A0;</span><span 
   13027 class="cmtt-8">&#x00A0;0.00026179955,</span><span 
   13028 class="cmtt-8">&#x00A0;0.00027881276,</span><span 
   13029 class="cmtt-8">&#x00A0;0.00029693158,</span><span 
   13030 class="cmtt-8">&#x00A0;0.00031622787,</span>
   13031 <br class="fancyvrb" /><a 
   13032  id="x1-125066r33"></a><span 
   13033 class="cmr-6">33</span><span 
   13034 class="cmtt-8">&#x00A0;</span><span 
   13035 class="cmtt-8">&#x00A0;</span><span 
   13036 class="cmtt-8">&#x00A0;</span><span 
   13037 class="cmtt-8">&#x00A0;0.00033677814,</span><span 
   13038 class="cmtt-8">&#x00A0;0.00035866388,</span><span 
   13039 class="cmtt-8">&#x00A0;0.00038197188,</span><span 
   13040 class="cmtt-8">&#x00A0;0.00040679456,</span>
   13041 <br class="fancyvrb" /><a 
   13042  id="x1-125068r34"></a><span 
   13043 class="cmr-6">34</span><span 
   13044 class="cmtt-8">&#x00A0;</span><span 
   13045 class="cmtt-8">&#x00A0;</span><span 
   13046 class="cmtt-8">&#x00A0;</span><span 
   13047 class="cmtt-8">&#x00A0;0.00043323036,</span><span 
   13048 class="cmtt-8">&#x00A0;0.00046138411,</span><span 
   13049 class="cmtt-8">&#x00A0;0.00049136745,</span><span 
   13050 class="cmtt-8">&#x00A0;0.00052329927,</span>
   13051 <br class="fancyvrb" /><a 
   13052  id="x1-125070r35"></a><span 
   13053 class="cmr-6">35</span><span 
   13054 class="cmtt-8">&#x00A0;</span><span 
   13055 class="cmtt-8">&#x00A0;</span><span 
   13056 class="cmtt-8">&#x00A0;</span><span 
   13057 class="cmtt-8">&#x00A0;0.00055730621,</span><span 
   13058 class="cmtt-8">&#x00A0;0.00059352311,</span><span 
   13059 class="cmtt-8">&#x00A0;0.00063209358,</span><span 
   13060 class="cmtt-8">&#x00A0;0.00067317058,</span>
   13061 <br class="fancyvrb" /><a 
   13062  id="x1-125072r36"></a><span 
   13063 class="cmr-6">36</span><span 
   13064 class="cmtt-8">&#x00A0;</span><span 
   13065 class="cmtt-8">&#x00A0;</span><span 
   13066 class="cmtt-8">&#x00A0;</span><span 
   13067 class="cmtt-8">&#x00A0;0.00071691700,</span><span 
   13068 class="cmtt-8">&#x00A0;0.00076350630,</span><span 
   13069 class="cmtt-8">&#x00A0;0.00081312324,</span><span 
   13070 class="cmtt-8">&#x00A0;0.00086596457,</span>
   13071 <br class="fancyvrb" /><a 
   13072  id="x1-125074r37"></a><span 
   13073 class="cmr-6">37</span><span 
   13074 class="cmtt-8">&#x00A0;</span><span 
   13075 class="cmtt-8">&#x00A0;</span><span 
   13076 class="cmtt-8">&#x00A0;</span><span 
   13077 class="cmtt-8">&#x00A0;0.00092223983,</span><span 
   13078 class="cmtt-8">&#x00A0;0.00098217216,</span><span 
   13079 class="cmtt-8">&#x00A0;0.0010459992,</span><span 
   13080 class="cmtt-8">&#x00A0;</span><span 
   13081 class="cmtt-8">&#x00A0;0.0011139742,</span>
   13082 <br class="fancyvrb" /><a 
   13083  id="x1-125076r38"></a><span 
   13084 class="cmr-6">38</span><span 
   13085 class="cmtt-8">&#x00A0;</span><span 
   13086 class="cmtt-8">&#x00A0;</span><span 
   13087 class="cmtt-8">&#x00A0;</span><span 
   13088 class="cmtt-8">&#x00A0;0.0011863665,</span><span 
   13089 class="cmtt-8">&#x00A0;</span><span 
   13090 class="cmtt-8">&#x00A0;0.0012634633,</span><span 
   13091 class="cmtt-8">&#x00A0;</span><span 
   13092 class="cmtt-8">&#x00A0;0.0013455702,</span><span 
   13093 class="cmtt-8">&#x00A0;</span><span 
   13094 class="cmtt-8">&#x00A0;0.0014330129,</span>
   13095 <br class="fancyvrb" /><a 
   13096  id="x1-125078r39"></a><span 
   13097 class="cmr-6">39</span><span 
   13098 class="cmtt-8">&#x00A0;</span><span 
   13099 class="cmtt-8">&#x00A0;</span><span 
   13100 class="cmtt-8">&#x00A0;</span><span 
   13101 class="cmtt-8">&#x00A0;0.0015261382,</span><span 
   13102 class="cmtt-8">&#x00A0;</span><span 
   13103 class="cmtt-8">&#x00A0;0.0016253153,</span><span 
   13104 class="cmtt-8">&#x00A0;</span><span 
   13105 class="cmtt-8">&#x00A0;0.0017309374,</span><span 
   13106 class="cmtt-8">&#x00A0;</span><span 
   13107 class="cmtt-8">&#x00A0;0.0018434235,</span>
   13108 <br class="fancyvrb" /><a 
   13109  id="x1-125080r40"></a><span 
   13110 class="cmr-6">40</span><span 
   13111 class="cmtt-8">&#x00A0;</span><span 
   13112 class="cmtt-8">&#x00A0;</span><span 
   13113 class="cmtt-8">&#x00A0;</span><span 
   13114 class="cmtt-8">&#x00A0;0.0019632195,</span><span 
   13115 class="cmtt-8">&#x00A0;</span><span 
   13116 class="cmtt-8">&#x00A0;0.0020908006,</span><span 
   13117 class="cmtt-8">&#x00A0;</span><span 
   13118 class="cmtt-8">&#x00A0;0.0022266726,</span><span 
   13119 class="cmtt-8">&#x00A0;</span><span 
   13120 class="cmtt-8">&#x00A0;0.0023713743,</span>
   13121 <br class="fancyvrb" /><a 
   13122  id="x1-125082r41"></a><span 
   13123 class="cmr-6">41</span><span 
   13124 class="cmtt-8">&#x00A0;</span><span 
   13125 class="cmtt-8">&#x00A0;</span><span 
   13126 class="cmtt-8">&#x00A0;</span><span 
   13127 class="cmtt-8">&#x00A0;0.0025254795,</span><span 
   13128 class="cmtt-8">&#x00A0;</span><span 
   13129 class="cmtt-8">&#x00A0;0.0026895994,</span><span 
   13130 class="cmtt-8">&#x00A0;</span><span 
   13131 class="cmtt-8">&#x00A0;0.0028643847,</span><span 
   13132 class="cmtt-8">&#x00A0;</span><span 
   13133 class="cmtt-8">&#x00A0;0.0030505286,</span>
   13134 <br class="fancyvrb" /><a 
   13135  id="x1-125084r42"></a><span 
   13136 class="cmr-6">42</span><span 
   13137 class="cmtt-8">&#x00A0;</span><span 
   13138 class="cmtt-8">&#x00A0;</span><span 
   13139 class="cmtt-8">&#x00A0;</span><span 
   13140 class="cmtt-8">&#x00A0;0.0032487691,</span><span 
   13141 class="cmtt-8">&#x00A0;</span><span 
   13142 class="cmtt-8">&#x00A0;0.0034598925,</span><span 
   13143 class="cmtt-8">&#x00A0;</span><span 
   13144 class="cmtt-8">&#x00A0;0.0036847358,</span><span 
   13145 class="cmtt-8">&#x00A0;</span><span 
   13146 class="cmtt-8">&#x00A0;0.0039241906,</span>
   13147                                                                                         
   13148 
   13149                                                                                         
   13150 <br class="fancyvrb" /><a 
   13151  id="x1-125086r43"></a><span 
   13152 class="cmr-6">43</span><span 
   13153 class="cmtt-8">&#x00A0;</span><span 
   13154 class="cmtt-8">&#x00A0;</span><span 
   13155 class="cmtt-8">&#x00A0;</span><span 
   13156 class="cmtt-8">&#x00A0;0.0041792066,</span><span 
   13157 class="cmtt-8">&#x00A0;</span><span 
   13158 class="cmtt-8">&#x00A0;0.0044507950,</span><span 
   13159 class="cmtt-8">&#x00A0;</span><span 
   13160 class="cmtt-8">&#x00A0;0.0047400328,</span><span 
   13161 class="cmtt-8">&#x00A0;</span><span 
   13162 class="cmtt-8">&#x00A0;0.0050480668,</span>
   13163 <br class="fancyvrb" /><a 
   13164  id="x1-125088r44"></a><span 
   13165 class="cmr-6">44</span><span 
   13166 class="cmtt-8">&#x00A0;</span><span 
   13167 class="cmtt-8">&#x00A0;</span><span 
   13168 class="cmtt-8">&#x00A0;</span><span 
   13169 class="cmtt-8">&#x00A0;0.0053761186,</span><span 
   13170 class="cmtt-8">&#x00A0;</span><span 
   13171 class="cmtt-8">&#x00A0;0.0057254891,</span><span 
   13172 class="cmtt-8">&#x00A0;</span><span 
   13173 class="cmtt-8">&#x00A0;0.0060975636,</span><span 
   13174 class="cmtt-8">&#x00A0;</span><span 
   13175 class="cmtt-8">&#x00A0;0.0064938176,</span>
   13176 <br class="fancyvrb" /><a 
   13177  id="x1-125090r45"></a><span 
   13178 class="cmr-6">45</span><span 
   13179 class="cmtt-8">&#x00A0;</span><span 
   13180 class="cmtt-8">&#x00A0;</span><span 
   13181 class="cmtt-8">&#x00A0;</span><span 
   13182 class="cmtt-8">&#x00A0;0.0069158225,</span><span 
   13183 class="cmtt-8">&#x00A0;</span><span 
   13184 class="cmtt-8">&#x00A0;0.0073652516,</span><span 
   13185 class="cmtt-8">&#x00A0;</span><span 
   13186 class="cmtt-8">&#x00A0;0.0078438871,</span><span 
   13187 class="cmtt-8">&#x00A0;</span><span 
   13188 class="cmtt-8">&#x00A0;0.0083536271,</span>
   13189 <br class="fancyvrb" /><a 
   13190  id="x1-125092r46"></a><span 
   13191 class="cmr-6">46</span><span 
   13192 class="cmtt-8">&#x00A0;</span><span 
   13193 class="cmtt-8">&#x00A0;</span><span 
   13194 class="cmtt-8">&#x00A0;</span><span 
   13195 class="cmtt-8">&#x00A0;0.0088964928,</span><span 
   13196 class="cmtt-8">&#x00A0;</span><span 
   13197 class="cmtt-8">&#x00A0;0.009474637,</span><span 
   13198 class="cmtt-8">&#x00A0;</span><span 
   13199 class="cmtt-8">&#x00A0;</span><span 
   13200 class="cmtt-8">&#x00A0;0.010090352,</span><span 
   13201 class="cmtt-8">&#x00A0;</span><span 
   13202 class="cmtt-8">&#x00A0;</span><span 
   13203 class="cmtt-8">&#x00A0;0.010746080,</span>
   13204 <br class="fancyvrb" /><a 
   13205  id="x1-125094r47"></a><span 
   13206 class="cmr-6">47</span><span 
   13207 class="cmtt-8">&#x00A0;</span><span 
   13208 class="cmtt-8">&#x00A0;</span><span 
   13209 class="cmtt-8">&#x00A0;</span><span 
   13210 class="cmtt-8">&#x00A0;0.011444421,</span><span 
   13211 class="cmtt-8">&#x00A0;</span><span 
   13212 class="cmtt-8">&#x00A0;</span><span 
   13213 class="cmtt-8">&#x00A0;0.012188144,</span><span 
   13214 class="cmtt-8">&#x00A0;</span><span 
   13215 class="cmtt-8">&#x00A0;</span><span 
   13216 class="cmtt-8">&#x00A0;0.012980198,</span><span 
   13217 class="cmtt-8">&#x00A0;</span><span 
   13218 class="cmtt-8">&#x00A0;</span><span 
   13219 class="cmtt-8">&#x00A0;0.013823725,</span>
   13220 <br class="fancyvrb" /><a 
   13221  id="x1-125096r48"></a><span 
   13222 class="cmr-6">48</span><span 
   13223 class="cmtt-8">&#x00A0;</span><span 
   13224 class="cmtt-8">&#x00A0;</span><span 
   13225 class="cmtt-8">&#x00A0;</span><span 
   13226 class="cmtt-8">&#x00A0;0.014722068,</span><span 
   13227 class="cmtt-8">&#x00A0;</span><span 
   13228 class="cmtt-8">&#x00A0;</span><span 
   13229 class="cmtt-8">&#x00A0;0.015678791,</span><span 
   13230 class="cmtt-8">&#x00A0;</span><span 
   13231 class="cmtt-8">&#x00A0;</span><span 
   13232 class="cmtt-8">&#x00A0;0.016697687,</span><span 
   13233 class="cmtt-8">&#x00A0;</span><span 
   13234 class="cmtt-8">&#x00A0;</span><span 
   13235 class="cmtt-8">&#x00A0;0.017782797,</span>
   13236 <br class="fancyvrb" /><a 
   13237  id="x1-125098r49"></a><span 
   13238 class="cmr-6">49</span><span 
   13239 class="cmtt-8">&#x00A0;</span><span 
   13240 class="cmtt-8">&#x00A0;</span><span 
   13241 class="cmtt-8">&#x00A0;</span><span 
   13242 class="cmtt-8">&#x00A0;0.018938423,</span><span 
   13243 class="cmtt-8">&#x00A0;</span><span 
   13244 class="cmtt-8">&#x00A0;</span><span 
   13245 class="cmtt-8">&#x00A0;0.020169149,</span><span 
   13246 class="cmtt-8">&#x00A0;</span><span 
   13247 class="cmtt-8">&#x00A0;</span><span 
   13248 class="cmtt-8">&#x00A0;0.021479854,</span><span 
   13249 class="cmtt-8">&#x00A0;</span><span 
   13250 class="cmtt-8">&#x00A0;</span><span 
   13251 class="cmtt-8">&#x00A0;0.022875735,</span>
   13252 <br class="fancyvrb" /><a 
   13253  id="x1-125100r50"></a><span 
   13254 class="cmr-6">50</span><span 
   13255 class="cmtt-8">&#x00A0;</span><span 
   13256 class="cmtt-8">&#x00A0;</span><span 
   13257 class="cmtt-8">&#x00A0;</span><span 
   13258 class="cmtt-8">&#x00A0;0.024362330,</span><span 
   13259 class="cmtt-8">&#x00A0;</span><span 
   13260 class="cmtt-8">&#x00A0;</span><span 
   13261 class="cmtt-8">&#x00A0;0.025945531,</span><span 
   13262 class="cmtt-8">&#x00A0;</span><span 
   13263 class="cmtt-8">&#x00A0;</span><span 
   13264 class="cmtt-8">&#x00A0;0.027631618,</span><span 
   13265 class="cmtt-8">&#x00A0;</span><span 
   13266 class="cmtt-8">&#x00A0;</span><span 
   13267 class="cmtt-8">&#x00A0;0.029427276,</span>
   13268 <br class="fancyvrb" /><a 
   13269  id="x1-125102r51"></a><span 
   13270 class="cmr-6">51</span><span 
   13271 class="cmtt-8">&#x00A0;</span><span 
   13272 class="cmtt-8">&#x00A0;</span><span 
   13273 class="cmtt-8">&#x00A0;</span><span 
   13274 class="cmtt-8">&#x00A0;0.031339626,</span><span 
   13275 class="cmtt-8">&#x00A0;</span><span 
   13276 class="cmtt-8">&#x00A0;</span><span 
   13277 class="cmtt-8">&#x00A0;0.033376252,</span><span 
   13278 class="cmtt-8">&#x00A0;</span><span 
   13279 class="cmtt-8">&#x00A0;</span><span 
   13280 class="cmtt-8">&#x00A0;0.035545228,</span><span 
   13281 class="cmtt-8">&#x00A0;</span><span 
   13282 class="cmtt-8">&#x00A0;</span><span 
   13283 class="cmtt-8">&#x00A0;0.037855157,</span>
   13284 <br class="fancyvrb" /><a 
   13285  id="x1-125104r52"></a><span 
   13286 class="cmr-6">52</span><span 
   13287 class="cmtt-8">&#x00A0;</span><span 
   13288 class="cmtt-8">&#x00A0;</span><span 
   13289 class="cmtt-8">&#x00A0;</span><span 
   13290 class="cmtt-8">&#x00A0;0.040315199,</span><span 
   13291 class="cmtt-8">&#x00A0;</span><span 
   13292 class="cmtt-8">&#x00A0;</span><span 
   13293 class="cmtt-8">&#x00A0;0.042935108,</span><span 
   13294 class="cmtt-8">&#x00A0;</span><span 
   13295 class="cmtt-8">&#x00A0;</span><span 
   13296 class="cmtt-8">&#x00A0;0.045725273,</span><span 
   13297 class="cmtt-8">&#x00A0;</span><span 
   13298 class="cmtt-8">&#x00A0;</span><span 
   13299 class="cmtt-8">&#x00A0;0.048696758,</span>
   13300 <br class="fancyvrb" /><a 
   13301  id="x1-125106r53"></a><span 
   13302 class="cmr-6">53</span><span 
   13303 class="cmtt-8">&#x00A0;</span><span 
   13304 class="cmtt-8">&#x00A0;</span><span 
   13305 class="cmtt-8">&#x00A0;</span><span 
   13306 class="cmtt-8">&#x00A0;0.051861348,</span><span 
   13307 class="cmtt-8">&#x00A0;</span><span 
   13308 class="cmtt-8">&#x00A0;</span><span 
   13309 class="cmtt-8">&#x00A0;0.055231591,</span><span 
   13310 class="cmtt-8">&#x00A0;</span><span 
   13311 class="cmtt-8">&#x00A0;</span><span 
   13312 class="cmtt-8">&#x00A0;0.058820850,</span><span 
   13313 class="cmtt-8">&#x00A0;</span><span 
   13314 class="cmtt-8">&#x00A0;</span><span 
   13315 class="cmtt-8">&#x00A0;0.062643361,</span>
   13316 <br class="fancyvrb" /><a 
   13317  id="x1-125108r54"></a><span 
   13318 class="cmr-6">54</span><span 
   13319 class="cmtt-8">&#x00A0;</span><span 
   13320 class="cmtt-8">&#x00A0;</span><span 
   13321 class="cmtt-8">&#x00A0;</span><span 
   13322 class="cmtt-8">&#x00A0;0.066714279,</span><span 
   13323 class="cmtt-8">&#x00A0;</span><span 
   13324 class="cmtt-8">&#x00A0;</span><span 
   13325 class="cmtt-8">&#x00A0;0.071049749,</span><span 
   13326 class="cmtt-8">&#x00A0;</span><span 
   13327 class="cmtt-8">&#x00A0;</span><span 
   13328 class="cmtt-8">&#x00A0;0.075666962,</span><span 
   13329 class="cmtt-8">&#x00A0;</span><span 
   13330 class="cmtt-8">&#x00A0;</span><span 
   13331 class="cmtt-8">&#x00A0;0.080584227,</span>
   13332 <br class="fancyvrb" /><a 
   13333  id="x1-125110r55"></a><span 
   13334 class="cmr-6">55</span><span 
   13335 class="cmtt-8">&#x00A0;</span><span 
   13336 class="cmtt-8">&#x00A0;</span><span 
   13337 class="cmtt-8">&#x00A0;</span><span 
   13338 class="cmtt-8">&#x00A0;0.085821044,</span><span 
   13339 class="cmtt-8">&#x00A0;</span><span 
   13340 class="cmtt-8">&#x00A0;</span><span 
   13341 class="cmtt-8">&#x00A0;0.091398179,</span><span 
   13342 class="cmtt-8">&#x00A0;</span><span 
   13343 class="cmtt-8">&#x00A0;</span><span 
   13344 class="cmtt-8">&#x00A0;0.097337747,</span><span 
   13345 class="cmtt-8">&#x00A0;</span><span 
   13346 class="cmtt-8">&#x00A0;</span><span 
   13347 class="cmtt-8">&#x00A0;0.10366330,</span>
   13348 <br class="fancyvrb" /><a 
   13349  id="x1-125112r56"></a><span 
   13350 class="cmr-6">56</span><span 
   13351 class="cmtt-8">&#x00A0;</span><span 
   13352 class="cmtt-8">&#x00A0;</span><span 
   13353 class="cmtt-8">&#x00A0;</span><span 
   13354 class="cmtt-8">&#x00A0;0.11039993,</span><span 
   13355 class="cmtt-8">&#x00A0;</span><span 
   13356 class="cmtt-8">&#x00A0;</span><span 
   13357 class="cmtt-8">&#x00A0;</span><span 
   13358 class="cmtt-8">&#x00A0;0.11757434,</span><span 
   13359 class="cmtt-8">&#x00A0;</span><span 
   13360 class="cmtt-8">&#x00A0;</span><span 
   13361 class="cmtt-8">&#x00A0;</span><span 
   13362 class="cmtt-8">&#x00A0;0.12521498,</span><span 
   13363 class="cmtt-8">&#x00A0;</span><span 
   13364 class="cmtt-8">&#x00A0;</span><span 
   13365 class="cmtt-8">&#x00A0;</span><span 
   13366 class="cmtt-8">&#x00A0;0.13335215,</span>
   13367 <br class="fancyvrb" /><a 
   13368  id="x1-125114r57"></a><span 
   13369 class="cmr-6">57</span><span 
   13370 class="cmtt-8">&#x00A0;</span><span 
   13371 class="cmtt-8">&#x00A0;</span><span 
   13372 class="cmtt-8">&#x00A0;</span><span 
   13373 class="cmtt-8">&#x00A0;0.14201813,</span><span 
   13374 class="cmtt-8">&#x00A0;</span><span 
   13375 class="cmtt-8">&#x00A0;</span><span 
   13376 class="cmtt-8">&#x00A0;</span><span 
   13377 class="cmtt-8">&#x00A0;0.15124727,</span><span 
   13378 class="cmtt-8">&#x00A0;</span><span 
   13379 class="cmtt-8">&#x00A0;</span><span 
   13380 class="cmtt-8">&#x00A0;</span><span 
   13381 class="cmtt-8">&#x00A0;0.16107617,</span><span 
   13382 class="cmtt-8">&#x00A0;</span><span 
   13383 class="cmtt-8">&#x00A0;</span><span 
   13384 class="cmtt-8">&#x00A0;</span><span 
   13385 class="cmtt-8">&#x00A0;0.17154380,</span>
   13386 <br class="fancyvrb" /><a 
   13387  id="x1-125116r58"></a><span 
   13388 class="cmr-6">58</span><span 
   13389 class="cmtt-8">&#x00A0;</span><span 
   13390 class="cmtt-8">&#x00A0;</span><span 
   13391 class="cmtt-8">&#x00A0;</span><span 
   13392 class="cmtt-8">&#x00A0;0.18269168,</span><span 
   13393 class="cmtt-8">&#x00A0;</span><span 
   13394 class="cmtt-8">&#x00A0;</span><span 
   13395 class="cmtt-8">&#x00A0;</span><span 
   13396 class="cmtt-8">&#x00A0;0.19456402,</span><span 
   13397 class="cmtt-8">&#x00A0;</span><span 
   13398 class="cmtt-8">&#x00A0;</span><span 
   13399 class="cmtt-8">&#x00A0;</span><span 
   13400 class="cmtt-8">&#x00A0;0.20720788,</span><span 
   13401 class="cmtt-8">&#x00A0;</span><span 
   13402 class="cmtt-8">&#x00A0;</span><span 
   13403 class="cmtt-8">&#x00A0;</span><span 
   13404 class="cmtt-8">&#x00A0;0.22067342,</span>
   13405 <br class="fancyvrb" /><a 
   13406  id="x1-125118r59"></a><span 
   13407 class="cmr-6">59</span><span 
   13408 class="cmtt-8">&#x00A0;</span><span 
   13409 class="cmtt-8">&#x00A0;</span><span 
   13410 class="cmtt-8">&#x00A0;</span><span 
   13411 class="cmtt-8">&#x00A0;0.23501402,</span><span 
   13412 class="cmtt-8">&#x00A0;</span><span 
   13413 class="cmtt-8">&#x00A0;</span><span 
   13414 class="cmtt-8">&#x00A0;</span><span 
   13415 class="cmtt-8">&#x00A0;0.25028656,</span><span 
   13416 class="cmtt-8">&#x00A0;</span><span 
   13417 class="cmtt-8">&#x00A0;</span><span 
   13418 class="cmtt-8">&#x00A0;</span><span 
   13419 class="cmtt-8">&#x00A0;0.26655159,</span><span 
   13420 class="cmtt-8">&#x00A0;</span><span 
   13421 class="cmtt-8">&#x00A0;</span><span 
   13422 class="cmtt-8">&#x00A0;</span><span 
   13423 class="cmtt-8">&#x00A0;0.28387361,</span>
   13424 <br class="fancyvrb" /><a 
   13425  id="x1-125120r60"></a><span 
   13426 class="cmr-6">60</span><span 
   13427 class="cmtt-8">&#x00A0;</span><span 
   13428 class="cmtt-8">&#x00A0;</span><span 
   13429 class="cmtt-8">&#x00A0;</span><span 
   13430 class="cmtt-8">&#x00A0;0.30232132,</span><span 
   13431 class="cmtt-8">&#x00A0;</span><span 
   13432 class="cmtt-8">&#x00A0;</span><span 
   13433 class="cmtt-8">&#x00A0;</span><span 
   13434 class="cmtt-8">&#x00A0;0.32196786,</span><span 
   13435 class="cmtt-8">&#x00A0;</span><span 
   13436 class="cmtt-8">&#x00A0;</span><span 
   13437 class="cmtt-8">&#x00A0;</span><span 
   13438 class="cmtt-8">&#x00A0;0.34289114,</span><span 
   13439 class="cmtt-8">&#x00A0;</span><span 
   13440 class="cmtt-8">&#x00A0;</span><span 
   13441 class="cmtt-8">&#x00A0;</span><span 
   13442 class="cmtt-8">&#x00A0;0.36517414,</span>
   13443 <br class="fancyvrb" /><a 
   13444  id="x1-125122r61"></a><span 
   13445 class="cmr-6">61</span><span 
   13446 class="cmtt-8">&#x00A0;</span><span 
   13447 class="cmtt-8">&#x00A0;</span><span 
   13448 class="cmtt-8">&#x00A0;</span><span 
   13449 class="cmtt-8">&#x00A0;0.38890521,</span><span 
   13450 class="cmtt-8">&#x00A0;</span><span 
   13451 class="cmtt-8">&#x00A0;</span><span 
   13452 class="cmtt-8">&#x00A0;</span><span 
   13453 class="cmtt-8">&#x00A0;0.41417847,</span><span 
   13454 class="cmtt-8">&#x00A0;</span><span 
   13455 class="cmtt-8">&#x00A0;</span><span 
   13456 class="cmtt-8">&#x00A0;</span><span 
   13457 class="cmtt-8">&#x00A0;0.44109412,</span><span 
   13458 class="cmtt-8">&#x00A0;</span><span 
   13459 class="cmtt-8">&#x00A0;</span><span 
   13460 class="cmtt-8">&#x00A0;</span><span 
   13461 class="cmtt-8">&#x00A0;0.46975890,</span>
   13462 <br class="fancyvrb" /><a 
   13463  id="x1-125124r62"></a><span 
   13464 class="cmr-6">62</span><span 
   13465 class="cmtt-8">&#x00A0;</span><span 
   13466 class="cmtt-8">&#x00A0;</span><span 
   13467 class="cmtt-8">&#x00A0;</span><span 
   13468 class="cmtt-8">&#x00A0;0.50028648,</span><span 
   13469 class="cmtt-8">&#x00A0;</span><span 
   13470 class="cmtt-8">&#x00A0;</span><span 
   13471 class="cmtt-8">&#x00A0;</span><span 
   13472 class="cmtt-8">&#x00A0;0.53279791,</span><span 
   13473 class="cmtt-8">&#x00A0;</span><span 
   13474 class="cmtt-8">&#x00A0;</span><span 
   13475 class="cmtt-8">&#x00A0;</span><span 
   13476 class="cmtt-8">&#x00A0;0.56742212,</span><span 
   13477 class="cmtt-8">&#x00A0;</span><span 
   13478 class="cmtt-8">&#x00A0;</span><span 
   13479 class="cmtt-8">&#x00A0;</span><span 
   13480 class="cmtt-8">&#x00A0;0.60429640,</span>
   13481 <br class="fancyvrb" /><a 
   13482  id="x1-125126r63"></a><span 
   13483 class="cmr-6">63</span><span 
   13484 class="cmtt-8">&#x00A0;</span><span 
   13485 class="cmtt-8">&#x00A0;</span><span 
   13486 class="cmtt-8">&#x00A0;</span><span 
   13487 class="cmtt-8">&#x00A0;0.64356699,</span><span 
   13488 class="cmtt-8">&#x00A0;</span><span 
   13489 class="cmtt-8">&#x00A0;</span><span 
   13490 class="cmtt-8">&#x00A0;</span><span 
   13491 class="cmtt-8">&#x00A0;0.68538959,</span><span 
   13492 class="cmtt-8">&#x00A0;</span><span 
   13493 class="cmtt-8">&#x00A0;</span><span 
   13494 class="cmtt-8">&#x00A0;</span><span 
   13495 class="cmtt-8">&#x00A0;0.72993007,</span><span 
   13496 class="cmtt-8">&#x00A0;</span><span 
   13497 class="cmtt-8">&#x00A0;</span><span 
   13498 class="cmtt-8">&#x00A0;</span><span 
   13499 class="cmtt-8">&#x00A0;0.77736504,</span>
   13500 <br class="fancyvrb" /><a 
   13501  id="x1-125128r64"></a><span 
   13502 class="cmr-6">64</span><span 
   13503 class="cmtt-8">&#x00A0;</span><span 
   13504 class="cmtt-8">&#x00A0;</span><span 
   13505 class="cmtt-8">&#x00A0;</span><span 
   13506 class="cmtt-8">&#x00A0;0.82788260,</span><span 
   13507 class="cmtt-8">&#x00A0;</span><span 
   13508 class="cmtt-8">&#x00A0;</span><span 
   13509 class="cmtt-8">&#x00A0;</span><span 
   13510 class="cmtt-8">&#x00A0;0.88168307,</span><span 
   13511 class="cmtt-8">&#x00A0;</span><span 
   13512 class="cmtt-8">&#x00A0;</span><span 
   13513 class="cmtt-8">&#x00A0;</span><span 
   13514 class="cmtt-8">&#x00A0;0.9389798,</span><span 
   13515 class="cmtt-8">&#x00A0;</span><span 
   13516 class="cmtt-8">&#x00A0;</span><span 
   13517 class="cmtt-8">&#x00A0;</span><span 
   13518 class="cmtt-8">&#x00A0;</span><span 
   13519 class="cmtt-8">&#x00A0;1.</span>
   13520 </div>
   13521                                                                                         
   13522 
   13523                                                                                         
   13524                                                                                         
   13525 
   13526                                                                                         
   13527 <h3 class="sectionHead"><span class="titlemark">A  </span> <a 
   13528  id="x1-126000A"></a>Embedding Vorbis into an Ogg stream</h3>
   13529 <!--l. 6--><p class="noindent" >
   13530 <h4 class="subsectionHead"><span class="titlemark">A.1  </span> <a 
   13531  id="x1-127000A.1"></a>Overview</h4>
   13532 <!--l. 8--><p class="noindent" >This document describes using Ogg logical and physical transport streams to encapsulate Vorbis
   13533 compressed audio packet data into file form.
   13534 <!--l. 12--><p class="noindent" >The <a 
   13535 href="#x1-20001">Section&#x00A0;1</a>, &#8220;<a 
   13536 href="#x1-20001">Introduction and Description<!--tex4ht:ref: vorbis:spec:intro --></a>&#8221; provides an overview of the construction of
   13537 Vorbis audio packets.
   13538 <!--l. 15--><p class="noindent" >The <a 
   13539 href="oggstream.html" >Ogg bitstream overview</a> and <a 
   13540 href="framing.html" >Ogg logical bitstream and framing spec</a> provide detailed
   13541 descriptions of Ogg transport streams. This specification document assumes a working
   13542 knowledge of the concepts covered in these named backround documents. Please read them
   13543 first.
   13544 <!--l. 22--><p class="noindent" >
   13545 <h5 class="subsubsectionHead"><span class="titlemark">A.1.1  </span> <a 
   13546  id="x1-128000A.1.1"></a>Restrictions</h5>
   13547 <!--l. 24--><p class="noindent" >The Ogg/Vorbis I specification currently dictates that Ogg/Vorbis streams use Ogg transport
   13548 streams in degenerate, unmultiplexed form only. That is:
   13549       <ul class="itemize1">
   13550       <li class="itemize">A meta-headerless Ogg file encapsulates the Vorbis I packets
   13551       </li>
   13552       <li class="itemize">The Ogg stream may be chained, i.e., contain multiple, contigous logical streams
   13553       (links).
   13554       </li>
   13555       <li class="itemize">The Ogg stream must be unmultiplexed (only one stream, a Vorbis audio stream,
   13556       per link)
   13557       </li></ul>
   13558                                                                                         
   13559 
   13560                                                                                         
   13561 <!--l. 41--><p class="noindent" >This is not to say that it is not currently possible to multiplex Vorbis with other media
   13562 types into a multi-stream Ogg file. At the time this document was written, Ogg was
   13563 becoming a popular container for low-bitrate movies consisting of DivX video and Vorbis
   13564 audio. However, a &#8217;Vorbis I audio file&#8217; is taken to imply Vorbis audio existing alone
   13565 within a degenerate Ogg stream. A compliant &#8217;Vorbis audio player&#8217; is not required to
   13566 implement Ogg support beyond the specific support of Vorbis within a degenrate Ogg
   13567 stream (naturally, application authors are encouraged to support full multiplexed Ogg
   13568 handling).
   13569 <!--l. 55--><p class="noindent" >
   13570 <h5 class="subsubsectionHead"><span class="titlemark">A.1.2  </span> <a 
   13571  id="x1-129000A.1.2"></a>MIME type</h5>
   13572 <!--l. 57--><p class="noindent" >The MIME type of Ogg files depend on the context. Specifically, complex multimedia and
   13573 applications should use <span 
   13574 class="cmtt-12">application/ogg</span>, while visual media should use <span 
   13575 class="cmtt-12">video/ogg</span>, and audio
   13576 <span 
   13577 class="cmtt-12">audio/ogg</span>. Vorbis data encapsulated in Ogg may appear in any of those types. RTP
   13578 encapsulated Vorbis should use <span 
   13579 class="cmtt-12">audio/vorbis </span>+ <span 
   13580 class="cmtt-12">audio/vorbis-config</span>.
   13581 <!--l. 65--><p class="noindent" >
   13582 <h4 class="subsectionHead"><span class="titlemark">A.2  </span> <a 
   13583  id="x1-130000A.2"></a>Encapsulation</h4>
   13584 <!--l. 67--><p class="noindent" >Ogg encapsulation of a Vorbis packet stream is straightforward.
   13585       <ul class="itemize1">
   13586       <li class="itemize">The first Vorbis packet (the identification header), which uniquely identifies a stream
   13587       as Vorbis audio, is placed alone in the first page of the logical Ogg stream. This
   13588       results in a first Ogg page of exactly 58 bytes at the very beginning of the logical
   13589       stream.
   13590       </li>
   13591       <li class="itemize">This first page is marked &#8217;beginning of stream&#8217; in the page flags.
   13592       </li>
   13593       <li class="itemize">The second and third vorbis packets (comment and setup headers) may span one or
   13594       more pages beginning on the second page of the logical stream. However many pages
   13595       they span, the third header packet finishes the page on which it ends. The next (first
   13596       audio) packet must begin on a fresh page.
   13597                                                                                         
   13598 
   13599                                                                                         
   13600       </li>
   13601       <li class="itemize">The granule position of these first pages containing only headers is zero.
   13602       </li>
   13603       <li class="itemize">The first audio packet of the logical stream begins a fresh Ogg page.
   13604       </li>
   13605       <li class="itemize">Packets are placed into ogg pages in order until the end of stream.
   13606       </li>
   13607       <li class="itemize">The last page is marked &#8217;end of stream&#8217; in the page flags.
   13608       </li>
   13609       <li class="itemize">Vorbis packets may span page boundaries.
   13610       </li>
   13611       <li class="itemize">The granule position of pages containing Vorbis audio is in units of PCM audio
   13612       samples (per channel; a stereo stream&#8217;s granule position does not increment at twice
   13613       the speed of a mono stream).
   13614       </li>
   13615       <li class="itemize">The granule position of a page represents the end PCM sample position of the last
   13616       packet <span 
   13617 class="cmti-12">completed </span>on that page. The &#8217;last PCM sample&#8217; is the last complete sample
   13618       returned by decode, not an internal sample awaiting lapping with a subsequent block.
   13619       A page that is entirely spanned by a single packet (that completes on a subsequent
   13620       page) has no granule position, and the granule position is set to &#8217;-1&#8217;.
   13621       <!--l. 126--><p class="noindent" >Note  that  the  last  decoded  (fully  lapped)  PCM  sample  from  a  packet  is  not
   13622       necessarily the middle sample from that block. If, eg, the current Vorbis packet
   13623       encodes a &#8221;long block&#8221; and the next Vorbis packet encodes a &#8221;short block&#8221;, the last
   13624       decodable sample from the current packet be at position (3*long_block_length/4) -
   13625       (short_block_length/4).
   13626       </li>
   13627       <li class="itemize">The granule (PCM) position of the first page need not indicate that the stream
   13628       started at position zero. Although the granule position belongs to the last completed
   13629       packet on the page and a valid granule position must be positive, by inference it may
   13630       indicate that the PCM position of the beginning of audio is positive or negative.
   13631            <ul class="itemize2">
   13632            <li class="itemize">A  positive  starting  value  simply  indicates  that  this  stream  begins  at  some
   13633            positive time offset, potentially within a larger program. This is a common case
   13634            when connecting to the middle of broadcast stream.
   13635            </li>
   13636            <li class="itemize">A negative value indicates that output samples preceeding time zero should be
   13637                                                                                         
   13638 
   13639                                                                                         
   13640            discarded during decoding; this technique is used to allow sample-granularity
   13641            editing of the stream start time of already-encoded Vorbis streams. The number
   13642            of samples to be discarded must not exceed the overlap-add span of the first two
   13643            audio packets.
   13644            </li></ul>
   13645       <!--l. 161--><p class="noindent" >In both of these cases in which the initial audio PCM starting offset is nonzero, the
   13646       second finished audio packet must flush the page on which it appears and the
   13647       third packet begin a fresh page. This allows the decoder to always be able to
   13648       perform PCM position adjustments before needing to return any PCM data from
   13649       synthesis, resulting in correct positioning information without any aditional seeking
   13650       logic.
   13651       <!--l. 170--><p class="noindent" ><span class="likesubparagraphHead"><a 
   13652  id="x1-131000A.2"></a><span 
   13653 class="cmbx-12">Note:</span></span> Failure to do so should, at worst, cause a decoder implementation to return
   13654       incorrect positioning information for seeking operations at the very beginning of the
   13655       stream.
   13656       </li>
   13657       <li class="itemize">A granule position on the final page in a stream that indicates less audio data than the
   13658       final packet would normally return is used to end the stream on other than even frame
   13659       boundaries. The difference between the actual available data returned and the
   13660       declared amount indicates how many trailing samples to discard from the decoding
   13661       process.
   13662       </li></ul>
   13663                                                                                         
   13664 
   13665                                                                                         
   13666 <h3 class="sectionHead"><span class="titlemark">B  </span> <a 
   13667  id="x1-132000B"></a>Vorbis encapsulation in RTP</h3>
   13668 <!--l. 8--><p class="noindent" >Please consult RFC 5215 <span 
   13669 class="cmti-12">&#8220;RTP Payload Format for Vorbis Encoded Audio&#8221; </span>for description of
   13670 how to embed Vorbis audio in an RTP stream.
   13671                                                                                         
   13672 
   13673                                                                                         
   13674                                                                                         
   13675 
   13676                                                                                         
   13677 <h3 class="likesectionHead"><a 
   13678  id="x1-133000B"></a>Colophon</h3>
   13679 <!--l. 6--><p class="noindent" ><img 
   13680 src="Vorbis_I_spec13x.png" alt="PIC" class="graphics"><!--tex4ht:graphics  
   13681 name="Vorbis_I_spec13x.png" src="xifish.pdf"  
   13682 -->
   13683 <!--l. 10--><p class="noindent" >Ogg is a <a 
   13684 href="http://www.xiph.org/" >Xiph.org Foundation</a> effort to protect essential tenets of Internet multimedia from
   13685 corporate hostage-taking; Open Source is the net&#8217;s greatest tool to keep everyone honest. See
   13686 <a 
   13687 href="http://www.xiph.org/about.html" >About the Xiph.org Foundation</a> for details.
   13688 <!--l. 17--><p class="noindent" >Ogg Vorbis is the first Ogg audio CODEC. Anyone may freely use and distribute the Ogg and
   13689 Vorbis specification, whether in a private, public or corporate capacity. However, the Xiph.org
   13690 Foundation and the Ogg project (xiph.org) reserve the right to set the Ogg Vorbis specification
   13691 and certify specification compliance.
   13692 <!--l. 23--><p class="noindent" >Xiph.org&#8217;s Vorbis software CODEC implementation is distributed under a BSD-like license. This
   13693 does not restrict third parties from distributing independent implementations of Vorbis software
   13694 under other licenses.
   13695 <!--l. 28--><p class="noindent" >Ogg, Vorbis, Xiph.org Foundation and their logos are trademarks (tm) of the <a 
   13696 href="http://www.xiph.org/" >Xiph.org
   13697 Foundation</a>. These pages are copyright (C) 1994-2007 Xiph.org Foundation. All rights
   13698 reserved.
   13699 <!--l. 33--><p class="noindent" >This document is set using <span class="LATEX">L<span class="A">A</span><span class="TEX">T<span 
   13700 class="E">E</span>X</span></span>.
   13701                                                                                         
   13702 
   13703                                                                                         
   13704 <h3 class="likesectionHead"><a 
   13705  id="x1-134000B"></a>References</h3>
   13706 <!--l. 123--><p class="noindent" >
   13707      <div class="thebibliography">
   13708      <p class="bibitem" ><span class="biblabel">
   13709   [1]<span class="bibsp">&#x00A0;&#x00A0;&#x00A0;</span></span><a 
   13710  id="XSporer/Brandenburg/Edler"></a>T.&#x00A0;Sporer,                                 K.&#x00A0;Brandenburg                                 and
   13711      B.&#x00A0;Edler, The use of multirate filter banks for coding of high quality digital audio,
   13712      <a 
   13713 href="http://www.iocon.com/resource/docs/ps/eusipco_corrected.ps" class="url" ><span 
   13714 class="cmtt-12">http://www.iocon.com/resource/docs/ps/eusipco_corrected.ps</span></a>.
   13715 </p>
   13716      </div>
   13717  
   13718 </body></html> 
   13719 
   13720                                                                                         
   13721 
   13722 
   13723