aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Storsjo <martin@martin.st>2014-11-07 09:32:48 +0200
committerMartin Storsjo <martin@martin.st>2014-11-07 09:32:48 +0200
commit6ccecbc4b0dfca00f13999aa41b2c56f6b55a72f (patch)
treeda3cf1b27c50bd6d81be8b0183f494d15539027a
parentce1863444a9e1d825c53bb3929f0b8fe664a6464 (diff)
parentd149516e1a3a63549d2c654b1398544d5de46a3e (diff)
downloadfdk-aac-6ccecbc4b0dfca00f13999aa41b2c56f6b55a72f.tar.gz
fdk-aac-6ccecbc4b0dfca00f13999aa41b2c56f6b55a72f.tar.bz2
fdk-aac-6ccecbc4b0dfca00f13999aa41b2c56f6b55a72f.zip
Merge remote-tracking branch 'aosp/master'
-rw-r--r--Android.mk5
-rw-r--r--documentation/aacDecoder.pdf9654
-rw-r--r--libAACdec/include/aacdecoder_lib.h123
-rw-r--r--libAACdec/src/aac_ram.cpp8
-rw-r--r--libAACdec/src/aac_rom.cpp50
-rw-r--r--libAACdec/src/aac_rom.h9
-rw-r--r--libAACdec/src/aacdec_drc.cpp104
-rw-r--r--libAACdec/src/aacdec_drc.h17
-rw-r--r--libAACdec/src/aacdec_drc_types.h4
-rw-r--r--libAACdec/src/aacdecoder.cpp188
-rw-r--r--libAACdec/src/aacdecoder.h29
-rw-r--r--libAACdec/src/aacdecoder_lib.cpp165
-rw-r--r--libAACdec/src/conceal.cpp15
-rw-r--r--libFDK/include/FDK_archdef.h2
-rw-r--r--libFDK/include/cplx_mul.h2
-rw-r--r--libFDK/include/mips/cplx_mul.h2
-rw-r--r--libMpegTPDec/include/tp_data.h20
-rw-r--r--libMpegTPDec/include/tpdec_lib.h17
-rw-r--r--libMpegTPDec/src/tpdec_asc.cpp473
-rw-r--r--libMpegTPDec/src/version2
-rw-r--r--libMpegTPEnc/include/tp_data.h20
-rw-r--r--libMpegTPEnc/src/version2
-rw-r--r--libPCMutils/include/limiter.h233
-rw-r--r--libPCMutils/include/pcmutils_lib.h180
-rw-r--r--libPCMutils/src/limiter.cpp498
-rw-r--r--libPCMutils/src/pcmutils_lib.cpp2254
-rw-r--r--libSBRdec/include/sbrdecoder.h11
-rw-r--r--libSBRdec/src/env_extr.h3
-rw-r--r--libSBRdec/src/sbr_ram.cpp14
-rw-r--r--libSBRdec/src/sbr_ram.h4
-rw-r--r--libSBRdec/src/sbrdec_drc.h2
-rw-r--r--libSBRdec/src/sbrdecoder.cpp95
-rw-r--r--libSYS/include/FDK_audio.h40
-rw-r--r--libSYS/src/genericStds.cpp2
34 files changed, 7707 insertions, 6540 deletions
diff --git a/Android.mk b/Android.mk
index f804089..9e56a2d 100644
--- a/Android.mk
+++ b/Android.mk
@@ -53,6 +53,11 @@ LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/libSBRdec/include \
$(LOCAL_PATH)/libSBRenc/include
+# In tpdec_asc.cpp: address of array 'pPce->FrontElementIsCpe'
+# will always evaluate to 'true'.
+LOCAL_CLANG_CPPFLAGS += \
+ -Wno-pointer-bool-conversion
+
LOCAL_MODULE:= libFraunhoferAAC
include $(BUILD_STATIC_LIBRARY)
diff --git a/documentation/aacDecoder.pdf b/documentation/aacDecoder.pdf
index a8cee17..d388576 100644
--- a/documentation/aacDecoder.pdf
+++ b/documentation/aacDecoder.pdf
@@ -88,531 +88,375 @@ endobj
<< /S /GoTo /D (chapter.4) >>
endobj
60 0 obj
-(\376\377\000C\000o\000m\000m\000a\000n\000d\000-\000l\000i\000n\000e\000\040\000U\000s\000a\000g\000e)
+(\376\377\000C\000l\000a\000s\000s\000\040\000I\000n\000d\000e\000x)
endobj
61 0 obj
<< /S /GoTo /D (section.4.1) >>
endobj
64 0 obj
-(\376\377\000A\000r\000g\000u\000m\000e\000n\000t\000s)
+(\376\377\000C\000l\000a\000s\000s\000\040\000L\000i\000s\000t)
endobj
65 0 obj
-<< /S /GoTo /D (subsection.4.1.1) >>
+<< /S /GoTo /D (chapter.5) >>
endobj
68 0 obj
-(\376\377\000M\000a\000n\000d\000a\000t\000o\000r\000y\000\040\000A\000r\000g\000u\000m\000e\000n\000t\000s)
+(\376\377\000F\000i\000l\000e\000\040\000I\000n\000d\000e\000x)
endobj
69 0 obj
-<< /S /GoTo /D (subsection.4.1.2) >>
+<< /S /GoTo /D (section.5.1) >>
endobj
72 0 obj
-(\376\377\000O\000p\000t\000i\000o\000n\000a\000l\000\040\000A\000r\000g\000u\000m\000e\000n\000t\000s)
+(\376\377\000F\000i\000l\000e\000\040\000L\000i\000s\000t)
endobj
73 0 obj
-<< /S /GoTo /D (chapter.5) >>
+<< /S /GoTo /D (chapter.6) >>
endobj
76 0 obj
-(\376\377\000C\000l\000a\000s\000s\000\040\000I\000n\000d\000e\000x)
+(\376\377\000C\000l\000a\000s\000s\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
endobj
77 0 obj
-<< /S /GoTo /D (section.5.1) >>
+<< /S /GoTo /D (section.6.1) >>
endobj
80 0 obj
-(\376\377\000C\000l\000a\000s\000s\000\040\000L\000i\000s\000t)
+(\376\377\000C\000S\000t\000r\000e\000a\000m\000I\000n\000f\000o\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
endobj
81 0 obj
-<< /S /GoTo /D (chapter.6) >>
+<< /S /GoTo /D (subsection.6.1.1) >>
endobj
84 0 obj
-(\376\377\000F\000i\000l\000e\000\040\000I\000n\000d\000e\000x)
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
endobj
85 0 obj
-<< /S /GoTo /D (section.6.1) >>
+<< /S /GoTo /D (subsection.6.1.2) >>
endobj
88 0 obj
-(\376\377\000F\000i\000l\000e\000\040\000L\000i\000s\000t)
+(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
endobj
89 0 obj
-<< /S /GoTo /D (chapter.7) >>
+<< /S /GoTo /D (subsubsection.6.1.2.1) >>
endobj
92 0 obj
-(\376\377\000C\000l\000a\000s\000s\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+(\376\377\000a\000a\000c\000N\000u\000m\000C\000h\000a\000n\000n\000e\000l\000s)
endobj
93 0 obj
-<< /S /GoTo /D (section.7.1) >>
+<< /S /GoTo /D (subsubsection.6.1.2.2) >>
endobj
96 0 obj
-(\376\377\000C\000S\000t\000r\000e\000a\000m\000I\000n\000f\000o\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+(\376\377\000a\000a\000c\000S\000a\000m\000p\000l\000e\000R\000a\000t\000e)
endobj
97 0 obj
-<< /S /GoTo /D (subsection.7.1.1) >>
+<< /S /GoTo /D (subsubsection.6.1.2.3) >>
endobj
100 0 obj
-(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+(\376\377\000a\000a\000c\000S\000a\000m\000p\000l\000e\000s\000P\000e\000r\000F\000r\000a\000m\000e)
endobj
101 0 obj
-<< /S /GoTo /D (subsection.7.1.2) >>
+<< /S /GoTo /D (subsubsection.6.1.2.4) >>
endobj
104 0 obj
-(\376\377\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+(\376\377\000a\000o\000t)
endobj
105 0 obj
-<< /S /GoTo /D (subsubsection.7.1.2.1) >>
+<< /S /GoTo /D (subsubsection.6.1.2.5) >>
endobj
108 0 obj
-(\376\377\000a\000a\000c\000S\000a\000m\000p\000l\000e\000R\000a\000t\000e)
+(\376\377\000b\000i\000t\000R\000a\000t\000e)
endobj
109 0 obj
-<< /S /GoTo /D (subsubsection.7.1.2.2) >>
+<< /S /GoTo /D (subsubsection.6.1.2.6) >>
endobj
112 0 obj
-(\376\377\000a\000a\000c\000S\000a\000m\000p\000l\000e\000s\000P\000e\000r\000F\000r\000a\000m\000e)
+(\376\377\000c\000h\000a\000n\000n\000e\000l\000C\000o\000n\000f\000i\000g)
endobj
113 0 obj
-<< /S /GoTo /D (subsubsection.7.1.2.3) >>
+<< /S /GoTo /D (subsubsection.6.1.2.7) >>
endobj
116 0 obj
-(\376\377\000a\000o\000t)
+(\376\377\000e\000p\000C\000o\000n\000f\000i\000g)
endobj
117 0 obj
-<< /S /GoTo /D (subsubsection.7.1.2.4) >>
+<< /S /GoTo /D (subsubsection.6.1.2.8) >>
endobj
120 0 obj
-(\376\377\000b\000i\000t\000R\000a\000t\000e)
+(\376\377\000e\000x\000t\000A\000o\000t)
endobj
121 0 obj
-<< /S /GoTo /D (subsubsection.7.1.2.5) >>
+<< /S /GoTo /D (subsubsection.6.1.2.9) >>
endobj
124 0 obj
-(\376\377\000c\000h\000a\000n\000n\000e\000l\000C\000o\000n\000f\000i\000g)
+(\376\377\000e\000x\000t\000S\000a\000m\000p\000l\000i\000n\000g\000R\000a\000t\000e)
endobj
125 0 obj
-<< /S /GoTo /D (subsubsection.7.1.2.6) >>
+<< /S /GoTo /D (subsubsection.6.1.2.10) >>
endobj
128 0 obj
-(\376\377\000e\000p\000C\000o\000n\000f\000i\000g)
+(\376\377\000f\000l\000a\000g\000s)
endobj
129 0 obj
-<< /S /GoTo /D (subsubsection.7.1.2.7) >>
+<< /S /GoTo /D (subsubsection.6.1.2.11) >>
endobj
132 0 obj
-(\376\377\000e\000x\000t\000A\000o\000t)
+(\376\377\000f\000r\000a\000m\000e\000S\000i\000z\000e)
endobj
133 0 obj
-<< /S /GoTo /D (subsubsection.7.1.2.8) >>
+<< /S /GoTo /D (subsubsection.6.1.2.12) >>
endobj
136 0 obj
-(\376\377\000e\000x\000t\000S\000a\000m\000p\000l\000i\000n\000g\000R\000a\000t\000e)
+(\376\377\000n\000u\000m\000B\000a\000d\000A\000c\000c\000e\000s\000s\000U\000n\000i\000t\000s)
endobj
137 0 obj
-<< /S /GoTo /D (subsubsection.7.1.2.9) >>
+<< /S /GoTo /D (subsubsection.6.1.2.13) >>
endobj
140 0 obj
-(\376\377\000f\000l\000a\000g\000s)
+(\376\377\000n\000u\000m\000B\000a\000d\000B\000y\000t\000e\000s)
endobj
141 0 obj
-<< /S /GoTo /D (subsubsection.7.1.2.10) >>
+<< /S /GoTo /D (subsubsection.6.1.2.14) >>
endobj
144 0 obj
-(\376\377\000f\000r\000a\000m\000e\000S\000i\000z\000e)
+(\376\377\000n\000u\000m\000C\000h\000a\000n\000n\000e\000l\000s)
endobj
145 0 obj
-<< /S /GoTo /D (subsubsection.7.1.2.11) >>
+<< /S /GoTo /D (subsubsection.6.1.2.15) >>
endobj
148 0 obj
-(\376\377\000n\000u\000m\000B\000a\000d\000A\000c\000c\000e\000s\000s\000U\000n\000i\000t\000s)
+(\376\377\000n\000u\000m\000L\000o\000s\000t\000A\000c\000c\000e\000s\000s\000U\000n\000i\000t\000s)
endobj
149 0 obj
-<< /S /GoTo /D (subsubsection.7.1.2.12) >>
+<< /S /GoTo /D (subsubsection.6.1.2.16) >>
endobj
152 0 obj
-(\376\377\000n\000u\000m\000B\000a\000d\000B\000y\000t\000e\000s)
+(\376\377\000n\000u\000m\000T\000o\000t\000a\000l\000A\000c\000c\000e\000s\000s\000U\000n\000i\000t\000s)
endobj
153 0 obj
-<< /S /GoTo /D (subsubsection.7.1.2.13) >>
+<< /S /GoTo /D (subsubsection.6.1.2.17) >>
endobj
156 0 obj
-(\376\377\000n\000u\000m\000C\000h\000a\000n\000n\000e\000l\000s)
+(\376\377\000n\000u\000m\000T\000o\000t\000a\000l\000B\000y\000t\000e\000s)
endobj
157 0 obj
-<< /S /GoTo /D (subsubsection.7.1.2.14) >>
+<< /S /GoTo /D (subsubsection.6.1.2.18) >>
endobj
160 0 obj
-(\376\377\000n\000u\000m\000L\000o\000s\000t\000A\000c\000c\000e\000s\000s\000U\000n\000i\000t\000s)
+(\376\377\000p\000C\000h\000a\000n\000n\000e\000l\000I\000n\000d\000i\000c\000e\000s)
endobj
161 0 obj
-<< /S /GoTo /D (subsubsection.7.1.2.15) >>
+<< /S /GoTo /D (subsubsection.6.1.2.19) >>
endobj
164 0 obj
-(\376\377\000n\000u\000m\000T\000o\000t\000a\000l\000A\000c\000c\000e\000s\000s\000U\000n\000i\000t\000s)
+(\376\377\000p\000C\000h\000a\000n\000n\000e\000l\000T\000y\000p\000e)
endobj
165 0 obj
-<< /S /GoTo /D (subsubsection.7.1.2.16) >>
+<< /S /GoTo /D (subsubsection.6.1.2.20) >>
endobj
168 0 obj
-(\376\377\000n\000u\000m\000T\000o\000t\000a\000l\000B\000y\000t\000e\000s)
+(\376\377\000p\000r\000o\000f\000i\000l\000e)
endobj
169 0 obj
-<< /S /GoTo /D (subsubsection.7.1.2.17) >>
+<< /S /GoTo /D (subsubsection.6.1.2.21) >>
endobj
172 0 obj
-(\376\377\000p\000C\000h\000a\000n\000n\000e\000l\000I\000n\000d\000i\000c\000e\000s)
+(\376\377\000s\000a\000m\000p\000l\000e\000R\000a\000t\000e)
endobj
173 0 obj
-<< /S /GoTo /D (subsubsection.7.1.2.18) >>
+<< /S /GoTo /D (chapter.7) >>
endobj
176 0 obj
-(\376\377\000p\000C\000h\000a\000n\000n\000e\000l\000T\000y\000p\000e)
+(\376\377\000F\000i\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
endobj
177 0 obj
-<< /S /GoTo /D (subsubsection.7.1.2.19) >>
+<< /S /GoTo /D (section.7.1) >>
endobj
180 0 obj
-(\376\377\000p\000r\000o\000f\000i\000l\000e)
+(\376\377\000a\000a\000c\000d\000e\000c\000o\000d\000e\000r\000\137\000l\000i\000b\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
endobj
181 0 obj
-<< /S /GoTo /D (subsubsection.7.1.2.20) >>
+<< /S /GoTo /D (subsection.7.1.1) >>
endobj
184 0 obj
-(\376\377\000s\000a\000m\000p\000l\000e\000R\000a\000t\000e)
+(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
endobj
185 0 obj
-<< /S /GoTo /D (chapter.8) >>
+<< /S /GoTo /D (subsection.7.1.2) >>
endobj
188 0 obj
-(\376\377\000F\000i\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+(\376\377\000D\000e\000f\000i\000n\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
endobj
189 0 obj
-<< /S /GoTo /D (section.8.1) >>
+<< /S /GoTo /D (subsubsection.7.1.2.1) >>
endobj
192 0 obj
-(\376\377\000a\000a\000c\000d\000e\000c\000o\000d\000e\000r\000\137\000l\000i\000b\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
+(\376\377\000A\000A\000C\000D\000E\000C\000\137\000C\000L\000R\000H\000I\000S\000T)
endobj
193 0 obj
-<< /S /GoTo /D (subsection.8.1.1) >>
+<< /S /GoTo /D (subsubsection.7.1.2.2) >>
endobj
196 0 obj
-(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
+(\376\377\000A\000A\000C\000D\000E\000C\000\137\000C\000O\000N\000C\000E\000A\000L)
endobj
197 0 obj
-<< /S /GoTo /D (subsection.8.1.2) >>
+<< /S /GoTo /D (subsubsection.7.1.2.3) >>
endobj
200 0 obj
-(\376\377\000D\000e\000f\000i\000n\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+(\376\377\000A\000A\000C\000D\000E\000C\000\137\000F\000L\000U\000S\000H)
endobj
201 0 obj
-<< /S /GoTo /D (subsubsection.8.1.2.1) >>
+<< /S /GoTo /D (subsubsection.7.1.2.4) >>
endobj
204 0 obj
-(\376\377\000A\000A\000C\000D\000E\000C\000\137\000C\000L\000R\000H\000I\000S\000T)
+(\376\377\000A\000A\000C\000D\000E\000C\000\137\000I\000N\000T\000R)
endobj
205 0 obj
-<< /S /GoTo /D (subsubsection.8.1.2.2) >>
+<< /S /GoTo /D (subsubsection.7.1.2.5) >>
endobj
208 0 obj
-(\376\377\000A\000A\000C\000D\000E\000C\000\137\000C\000O\000N\000C\000E\000A\000L)
+(\376\377\000I\000S\000\137\000D\000E\000C\000O\000D\000E\000\137\000E\000R\000R\000O\000R)
endobj
209 0 obj
-<< /S /GoTo /D (subsubsection.8.1.2.3) >>
+<< /S /GoTo /D (subsubsection.7.1.2.6) >>
endobj
212 0 obj
-(\376\377\000A\000A\000C\000D\000E\000C\000\137\000F\000L\000U\000S\000H)
+(\376\377\000I\000S\000\137\000I\000N\000I\000T\000\137\000E\000R\000R\000O\000R)
endobj
213 0 obj
-<< /S /GoTo /D (subsubsection.8.1.2.4) >>
+<< /S /GoTo /D (subsubsection.7.1.2.7) >>
endobj
216 0 obj
-(\376\377\000A\000A\000C\000D\000E\000C\000\137\000I\000N\000T\000R)
+(\376\377\000I\000S\000\137\000O\000U\000T\000P\000U\000T\000\137\000V\000A\000L\000I\000D)
endobj
217 0 obj
-<< /S /GoTo /D (subsubsection.8.1.2.5) >>
+<< /S /GoTo /D (subsection.7.1.3) >>
endobj
220 0 obj
-(\376\377\000I\000S\000\137\000D\000E\000C\000O\000D\000E\000\137\000E\000R\000R\000O\000R)
+(\376\377\000T\000y\000p\000e\000d\000e\000f\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
endobj
221 0 obj
-<< /S /GoTo /D (subsubsection.8.1.2.6) >>
+<< /S /GoTo /D (subsubsection.7.1.3.1) >>
endobj
224 0 obj
-(\376\377\000I\000S\000\137\000I\000N\000I\000T\000\137\000E\000R\000R\000O\000R)
+(\376\377\000H\000A\000N\000D\000L\000E\000\137\000A\000A\000C\000D\000E\000C\000O\000D\000E\000R)
endobj
225 0 obj
-<< /S /GoTo /D (subsubsection.8.1.2.7) >>
+<< /S /GoTo /D (subsection.7.1.4) >>
endobj
228 0 obj
-(\376\377\000I\000S\000\137\000O\000U\000T\000P\000U\000T\000\137\000V\000A\000L\000I\000D)
+(\376\377\000E\000n\000u\000m\000e\000r\000a\000t\000i\000o\000n\000\040\000T\000y\000p\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
endobj
229 0 obj
-<< /S /GoTo /D (subsection.8.1.3) >>
+<< /S /GoTo /D (subsubsection.7.1.4.1) >>
endobj
232 0 obj
-(\376\377\000T\000y\000p\000e\000d\000e\000f\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+(\376\377\000A\000A\000C\000\137\000D\000E\000C\000O\000D\000E\000R\000\137\000E\000R\000R\000O\000R)
endobj
233 0 obj
-<< /S /GoTo /D (subsubsection.8.1.3.1) >>
+<< /S /GoTo /D (subsubsection.7.1.4.2) >>
endobj
236 0 obj
-(\376\377\000H\000A\000N\000D\000L\000E\000\137\000A\000A\000C\000D\000E\000C\000O\000D\000E\000R)
+(\376\377\000A\000A\000C\000D\000E\000C\000\137\000P\000A\000R\000A\000M)
endobj
237 0 obj
-<< /S /GoTo /D (subsection.8.1.4) >>
+<< /S /GoTo /D (subsection.7.1.5) >>
endobj
240 0 obj
-(\376\377\000E\000n\000u\000m\000e\000r\000a\000t\000i\000o\000n\000\040\000T\000y\000p\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
endobj
241 0 obj
-<< /S /GoTo /D (subsubsection.8.1.4.1) >>
+<< /S /GoTo /D (subsubsection.7.1.5.1) >>
endobj
244 0 obj
-(\376\377\000A\000A\000C\000\137\000D\000E\000C\000O\000D\000E\000R\000\137\000E\000R\000R\000O\000R)
+(\376\377\000a\000a\000c\000D\000e\000c\000o\000d\000e\000r\000\137\000A\000n\000c\000D\000a\000t\000a\000G\000e\000t)
endobj
245 0 obj
-<< /S /GoTo /D (subsubsection.8.1.4.2) >>
+<< /S /GoTo /D (subsubsection.7.1.5.2) >>
endobj
248 0 obj
-(\376\377\000A\000A\000C\000D\000E\000C\000\137\000P\000A\000R\000A\000M)
+(\376\377\000a\000a\000c\000D\000e\000c\000o\000d\000e\000r\000\137\000A\000n\000c\000D\000a\000t\000a\000I\000n\000i\000t)
endobj
249 0 obj
-<< /S /GoTo /D (subsection.8.1.5) >>
+<< /S /GoTo /D (subsubsection.7.1.5.3) >>
endobj
252 0 obj
-(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
+(\376\377\000a\000a\000c\000D\000e\000c\000o\000d\000e\000r\000\137\000C\000l\000o\000s\000e)
endobj
253 0 obj
-<< /S /GoTo /D (subsubsection.8.1.5.1) >>
+<< /S /GoTo /D (subsubsection.7.1.5.4) >>
endobj
256 0 obj
-(\376\377\000a\000a\000c\000D\000e\000c\000o\000d\000e\000r\000\137\000A\000n\000c\000D\000a\000t\000a\000G\000e\000t)
+(\376\377\000a\000a\000c\000D\000e\000c\000o\000d\000e\000r\000\137\000C\000o\000n\000f\000i\000g\000R\000a\000w)
endobj
257 0 obj
-<< /S /GoTo /D (subsubsection.8.1.5.2) >>
+<< /S /GoTo /D (subsubsection.7.1.5.5) >>
endobj
260 0 obj
-(\376\377\000a\000a\000c\000D\000e\000c\000o\000d\000e\000r\000\137\000A\000n\000c\000D\000a\000t\000a\000I\000n\000i\000t)
+(\376\377\000a\000a\000c\000D\000e\000c\000o\000d\000e\000r\000\137\000D\000e\000c\000o\000d\000e\000F\000r\000a\000m\000e)
endobj
261 0 obj
-<< /S /GoTo /D (subsubsection.8.1.5.3) >>
+<< /S /GoTo /D (subsubsection.7.1.5.6) >>
endobj
264 0 obj
-(\376\377\000a\000a\000c\000D\000e\000c\000o\000d\000e\000r\000\137\000C\000l\000o\000s\000e)
+(\376\377\000a\000a\000c\000D\000e\000c\000o\000d\000e\000r\000\137\000F\000i\000l\000l)
endobj
265 0 obj
-<< /S /GoTo /D (subsubsection.8.1.5.4) >>
+<< /S /GoTo /D (subsubsection.7.1.5.7) >>
endobj
268 0 obj
-(\376\377\000a\000a\000c\000D\000e\000c\000o\000d\000e\000r\000\137\000C\000o\000n\000f\000i\000g\000R\000a\000w)
+(\376\377\000a\000a\000c\000D\000e\000c\000o\000d\000e\000r\000\137\000G\000e\000t\000F\000r\000e\000e\000B\000y\000t\000e\000s)
endobj
269 0 obj
-<< /S /GoTo /D (subsubsection.8.1.5.5) >>
+<< /S /GoTo /D (subsubsection.7.1.5.8) >>
endobj
272 0 obj
-(\376\377\000a\000a\000c\000D\000e\000c\000o\000d\000e\000r\000\137\000D\000e\000c\000o\000d\000e\000F\000r\000a\000m\000e)
+(\376\377\000a\000a\000c\000D\000e\000c\000o\000d\000e\000r\000\137\000G\000e\000t\000L\000i\000b\000I\000n\000f\000o)
endobj
273 0 obj
-<< /S /GoTo /D (subsubsection.8.1.5.6) >>
+<< /S /GoTo /D (subsubsection.7.1.5.9) >>
endobj
276 0 obj
-(\376\377\000a\000a\000c\000D\000e\000c\000o\000d\000e\000r\000\137\000F\000i\000l\000l)
+(\376\377\000a\000a\000c\000D\000e\000c\000o\000d\000e\000r\000\137\000G\000e\000t\000S\000t\000r\000e\000a\000m\000I\000n\000f\000o)
endobj
277 0 obj
-<< /S /GoTo /D (subsubsection.8.1.5.7) >>
+<< /S /GoTo /D (subsubsection.7.1.5.10) >>
endobj
280 0 obj
-(\376\377\000a\000a\000c\000D\000e\000c\000o\000d\000e\000r\000\137\000G\000e\000t\000F\000r\000e\000e\000B\000y\000t\000e\000s)
+(\376\377\000a\000a\000c\000D\000e\000c\000o\000d\000e\000r\000\137\000O\000p\000e\000n)
endobj
281 0 obj
-<< /S /GoTo /D (subsubsection.8.1.5.8) >>
+<< /S /GoTo /D (subsubsection.7.1.5.11) >>
endobj
284 0 obj
-(\376\377\000a\000a\000c\000D\000e\000c\000o\000d\000e\000r\000\137\000G\000e\000t\000L\000i\000b\000I\000n\000f\000o)
-endobj
-285 0 obj
-<< /S /GoTo /D (subsubsection.8.1.5.9) >>
-endobj
-288 0 obj
-(\376\377\000a\000a\000c\000D\000e\000c\000o\000d\000e\000r\000\137\000G\000e\000t\000S\000t\000r\000e\000a\000m\000I\000n\000f\000o)
-endobj
-289 0 obj
-<< /S /GoTo /D (subsubsection.8.1.5.10) >>
-endobj
-292 0 obj
-(\376\377\000a\000a\000c\000D\000e\000c\000o\000d\000e\000r\000\137\000O\000p\000e\000n)
-endobj
-293 0 obj
-<< /S /GoTo /D (subsubsection.8.1.5.11) >>
-endobj
-296 0 obj
(\376\377\000a\000a\000c\000D\000e\000c\000o\000d\000e\000r\000\137\000S\000e\000t\000P\000a\000r\000a\000m)
endobj
-297 0 obj
-<< /S /GoTo /D (section.8.2) >>
-endobj
-300 0 obj
-(\376\377\000m\000a\000i\000n\000.\000c\000p\000p\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e)
-endobj
-301 0 obj
-<< /S /GoTo /D (subsection.8.2.1) >>
-endobj
-304 0 obj
-(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n)
-endobj
-305 0 obj
-<< /S /GoTo /D (subsection.8.2.2) >>
-endobj
-308 0 obj
-(\376\377\000D\000e\000f\000i\000n\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
-endobj
-309 0 obj
-<< /S /GoTo /D (subsubsection.8.2.2.1) >>
-endobj
-312 0 obj
-(\376\377\000A\000N\000C\000\137\000B\000U\000F\000\137\000S\000I\000Z\000E)
-endobj
-313 0 obj
-<< /S /GoTo /D (subsubsection.8.2.2.2) >>
-endobj
-316 0 obj
-(\376\377\000F\000I\000L\000E\000\137\000N\000A\000M\000E\000\137\000M\000A\000X)
-endobj
-317 0 obj
-<< /S /GoTo /D (subsubsection.8.2.2.3) >>
-endobj
-320 0 obj
-(\376\377\000I\000N\000\137\000B\000U\000F\000\137\000S\000I\000Z\000E)
-endobj
-321 0 obj
-<< /S /GoTo /D (subsubsection.8.2.2.4) >>
-endobj
-324 0 obj
-(\376\377\000N\000\137\000F\000L\000U\000S\000H\000\137\000F\000R\000A\000M\000E\000S)
-endobj
-325 0 obj
-<< /S /GoTo /D (subsubsection.8.2.2.5) >>
-endobj
-328 0 obj
-(\376\377\000N\000O\000\137\000F\000I\000L\000E\000N\000A\000M\000E)
-endobj
-329 0 obj
-<< /S /GoTo /D (subsubsection.8.2.2.6) >>
-endobj
-332 0 obj
-(\376\377\000O\000U\000T\000\137\000B\000U\000F\000\137\000S\000I\000Z\000E)
-endobj
-333 0 obj
-<< /S /GoTo /D (subsection.8.2.3) >>
-endobj
-336 0 obj
-(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
-endobj
-337 0 obj
-<< /S /GoTo /D (subsubsection.8.2.3.1) >>
-endobj
-340 0 obj
-(\376\377\000m\000a\000i\000n)
-endobj
-341 0 obj
-<< /S /GoTo /D (subsection.8.2.4) >>
-endobj
-344 0 obj
-(\376\377\000V\000a\000r\000i\000a\000b\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n)
-endobj
-345 0 obj
-<< /S /GoTo /D (subsubsection.8.2.4.1) >>
-endobj
-348 0 obj
-(\376\377\000a\000n\000c\000B\000u\000f\000f\000e\000r)
-endobj
-349 0 obj
-<< /S /GoTo /D (subsubsection.8.2.4.2) >>
-endobj
-352 0 obj
-(\376\377\000a\000n\000c\000F\000i\000l\000e\000n\000a\000m\000e)
-endobj
-353 0 obj
-<< /S /GoTo /D (subsubsection.8.2.4.3) >>
-endobj
-356 0 obj
-(\376\377\000c\000o\000n\000f)
-endobj
-357 0 obj
-<< /S /GoTo /D (subsubsection.8.2.4.4) >>
-endobj
-360 0 obj
-(\376\377\000c\000o\000n\000f\000\137\000m\000e\000m)
-endobj
-361 0 obj
-<< /S /GoTo /D (subsubsection.8.2.4.5) >>
-endobj
-364 0 obj
-(\376\377\000c\000o\000n\000f\000S\000i\000z\000e)
-endobj
-365 0 obj
-<< /S /GoTo /D (subsubsection.8.2.4.6) >>
-endobj
-368 0 obj
-(\376\377\000c\000o\000n\000f\000S\000t\000r\000i\000n\000g)
-endobj
-369 0 obj
-<< /S /GoTo /D (subsubsection.8.2.4.7) >>
-endobj
-372 0 obj
-(\376\377\000i\000n\000B\000u\000f\000f\000e\000r)
-endobj
-373 0 obj
-<< /S /GoTo /D (subsubsection.8.2.4.8) >>
-endobj
-376 0 obj
-(\376\377\000i\000n\000B\000u\000f\000f\000e\000r\000\137\000m\000e\000m)
-endobj
-377 0 obj
-<< /S /GoTo /D (subsubsection.8.2.4.9) >>
-endobj
-380 0 obj
-(\376\377\000i\000n\000p\000u\000t\000F\000i\000l\000e\000n\000a\000m\000e)
-endobj
-381 0 obj
-<< /S /GoTo /D (subsubsection.8.2.4.10) >>
-endobj
-384 0 obj
-(\376\377\000o\000u\000t\000p\000u\000t\000F\000i\000l\000e\000n\000a\000m\000e)
-endobj
-385 0 obj
-<< /S /GoTo /D (subsubsection.8.2.4.11) >>
-endobj
-388 0 obj
-(\376\377\000T\000i\000m\000e\000D\000a\000t\000a)
-endobj
-389 0 obj
-<< /S /GoTo /D [390 0 R /Fit ] >>
+285 0 obj
+<< /S /GoTo /D [286 0 R /Fit ] >>
endobj
-394 0 obj <<
-/Length 956
+290 0 obj <<
+/Length 954
/Filter /FlateDecode
>>
stream
-xڅVKs6WHT\KIq;i["Z`AЊx5ψ}|(8(xBMI$΃*گYe8+Ҋr3̒jfo$o7î
-j
-mI~AYq‡~Kw|5'G5Sџ%8Q`Qf$1`4+yW;;<"Of\B>(ֳp׏:%y7'rϏpJ~x] !L9
-/uiÚhlշEE^2ŸmraitI32j7EQzùTA{#{7yx2Hz})U65[{'1٘d.ZGҹ$< #RFzKWš#b
-}kL9o]Vil\+YzlW~qcx|afq^||pX[G4
+xڅV[6~fj, MߜlgI5yЂ0jArXg{tۉΘsUGcw ?_ (QpJb]%Q/Y$s+҉(B渜ثG;&إ]^9,Vo H7kDݔ)Et?m`3Y:Ym?c-?>ZȣwR5/(0OY3j%1`,/t$8ݒx<&O'\A!mC ^I%OO0eEAy
+1%
+
+X߯JQ& PuLs+QgF(HbjU=&wU`PP^< Ӫ1HeD.^&`rǒ3n]&q b sj5LsO+}j<g`he, HЪ+VqI'{?4~2Y{|i. [{'1>ZOVS1mq78>< +u[RFK_S<,W;5 z`89 {]_KWX[0?1mn-%dF܉j
+D֖\\w4N\̙j*.\h\KΤ 8lhh9f%=Ww{jQ:u~'Vv>,vÉ^ ==k Ѫ Oڰal\nq[]اHu^vctv<C$g7p{F
endstream
endobj
-390 0 obj <<
+286 0 obj <<
/Type /Page
-/Contents 394 0 R
-/Resources 393 0 R
+/Contents 290 0 R
+/Resources 289 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 398 0 R
-/Group 392 0 R
+/Parent 294 0 R
+/Group 288 0 R
>> endobj
-391 0 obj <<
+287 0 obj <<
/Type /XObject
/Subtype /Image
/Width 5000
/Height 1419
/BitsPerComponent 8
/ColorSpace /DeviceRGB
-/SMask 399 0 R
+/SMask 295 0 R
/Length 111531
/Filter /FlateDecode
>>
@@ -1010,7 +854,7 @@ iux
]*
endstream
endobj
-399 0 obj <<
+295 0 obj <<
/Type /XObject
/Subtype /Image
/Width 5000
@@ -1107,18 +951,18 @@ t8߀%jY03n-M:3z_GFAsVwq]&ΙuAC
pl
endstream
endobj
-392 0 obj
+288 0 obj
<</Type/Group /S/Transparency /CS/DeviceRGB /I true>>
endobj
-395 0 obj <<
-/D [390 0 R /XYZ 90 739.935 null]
+291 0 obj <<
+/D [286 0 R /XYZ 90 739.935 null]
>> endobj
-393 0 obj <<
-/Font << /F22 396 0 R /F23 397 0 R >>
-/XObject << /Im1 391 0 R >>
+289 0 obj <<
+/Font << /F22 292 0 R /F23 293 0 R >>
+/XObject << /Im1 287 0 R >>
/ProcSet [ /PDF /Text /ImageC ]
>> endobj
-402 0 obj <<
+298 0 obj <<
/Length 19
/Filter /FlateDecode
>>
@@ -1126,797 +970,608 @@ stream
x3PHW0Pp2A
endstream
endobj
-401 0 obj <<
+297 0 obj <<
/Type /Page
-/Contents 402 0 R
-/Resources 400 0 R
+/Contents 298 0 R
+/Resources 296 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 398 0 R
+/Parent 294 0 R
>> endobj
-400 0 obj <<
+296 0 obj <<
/ProcSet [ /PDF ]
>> endobj
-430 0 obj <<
-/Length 817
+327 0 obj <<
+/Length 832
/Filter /FlateDecode
>>
stream
-xYn0+X?liQG5U5
-N Cj~0$"49\h-,h_AϮala
-Ț- -RBlپI\y63A Yzt_@]
- [F#AI#$$(<Lb#,H9a(ʡ
-N13{^=U͆h=%imwK/¤Z&E*vx@6gumq(_r/ _8VjyUKϓ4ob+ٸo@-O}:d
-U#7/Z-UG:
-pDNsS5(ADÕ_KAI@@N O)IXMu:$!/*$
- #5W$8pt۠>5ʐFKPp-äEm @asd0Sz49MI=D-W|
+xYMs0WhvmBL3ئI} K'ȫy+`՗[DЙF
+}Pǃ>=7uL
+q.nG/{g {@
+_z=_Bv6tq\ܹd9jŲ,c9tìrv[6ʟO:Cg$jQrYŲHW L5vy Y#t
+U=H/*0Y'/eQ q2ZuqxeAeiL+SZ=N;[ȯGþim5bRHY
+甛Rv)n2+pT췋A=9tn3%eV(
endstream
endobj
-429 0 obj <<
+326 0 obj <<
/Type /Page
-/Contents 430 0 R
-/Resources 428 0 R
+/Contents 327 0 R
+/Resources 325 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 398 0 R
-/Annots [ 403 0 R 404 0 R 405 0 R 406 0 R 407 0 R 408 0 R 409 0 R 410 0 R 411 0 R 412 0 R 413 0 R 414 0 R 415 0 R 416 0 R 417 0 R 418 0 R 419 0 R 420 0 R 421 0 R 422 0 R 423 0 R 424 0 R 425 0 R 426 0 R ]
+/Parent 294 0 R
+/Annots [ 299 0 R 300 0 R 301 0 R 302 0 R 303 0 R 304 0 R 305 0 R 306 0 R 307 0 R 308 0 R 309 0 R 310 0 R 311 0 R 312 0 R 313 0 R 314 0 R 315 0 R 316 0 R 317 0 R 318 0 R 319 0 R 320 0 R 321 0 R 322 0 R 323 0 R ]
>> endobj
-403 0 obj <<
+299 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [89.004 574.541 160.007 583.517]
+/Rect [89.004 575.23 160.007 584.206]
/A << /S /GoTo /D (chapter.1) >>
>> endobj
-404 0 obj <<
+300 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [103.948 554.577 153.203 565.481]
+/Rect [103.948 555.405 153.203 566.309]
/A << /S /GoTo /D (section.1.1) >>
>> endobj
-405 0 obj <<
+301 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [103.948 538.709 191.1 547.555]
+/Rect [103.948 539.674 191.1 548.521]
/A << /S /GoTo /D (section.1.2) >>
>> endobj
-406 0 obj <<
+302 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [89.004 507.691 167.648 518.57]
+/Rect [89.004 509.346 167.648 520.225]
/A << /S /GoTo /D (chapter.2) >>
>> endobj
-407 0 obj <<
+303 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [103.948 489.631 193.88 500.535]
+/Rect [103.948 491.424 193.88 502.328]
/A << /S /GoTo /D (section.2.1) >>
>> endobj
-408 0 obj <<
+304 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [103.948 471.705 198.861 482.609]
+/Rect [103.948 473.636 198.861 484.54]
/A << /S /GoTo /D (section.2.2) >>
>> endobj
-409 0 obj <<
+305 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [103.948 453.779 186.438 464.683]
+/Rect [103.948 455.848 186.438 466.752]
/A << /S /GoTo /D (section.2.3) >>
>> endobj
-410 0 obj <<
+306 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [89.004 424.819 198.373 435.698]
+/Rect [89.004 427.577 198.373 438.456]
/A << /S /GoTo /D (chapter.3) >>
>> endobj
-411 0 obj <<
+307 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [103.948 406.759 289.072 417.662]
+/Rect [103.948 409.654 289.072 420.558]
/A << /S /GoTo /D (section.3.1) >>
>> endobj
-412 0 obj <<
+308 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [103.948 388.833 263.897 399.737]
+/Rect [103.948 391.866 263.897 402.77]
/A << /S /GoTo /D (section.3.2) >>
>> endobj
-413 0 obj <<
+309 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [103.948 370.907 239.389 381.811]
+/Rect [103.948 374.078 239.389 384.982]
/A << /S /GoTo /D (section.3.3) >>
>> endobj
-414 0 obj <<
+310 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [126.862 355.038 186.189 363.885]
+/Rect [126.862 358.348 186.189 367.194]
/A << /S /GoTo /D (subsection.3.3.1) >>
>> endobj
-415 0 obj <<
+311 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [126.862 337.112 212.759 345.959]
+/Rect [126.862 340.56 212.759 349.406]
/A << /S /GoTo /D (subsection.3.3.2) >>
>> endobj
-416 0 obj <<
+312 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [126.862 317.129 253.994 328.033]
+/Rect [126.862 320.714 253.994 331.618]
/A << /S /GoTo /D (subsection.3.3.3) >>
>> endobj
-417 0 obj <<
+313 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [89.004 288.169 197.536 299.048]
+/Rect [89.004 294.347 155.484 303.323]
/A << /S /GoTo /D (chapter.4) >>
>> endobj
-418 0 obj <<
+314 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [103.948 270.108 172.949 281.012]
+/Rect [103.948 276.579 168.435 285.425]
/A << /S /GoTo /D (section.4.1) >>
>> endobj
-419 0 obj <<
+315 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [126.862 252.183 251.035 263.087]
-/A << /S /GoTo /D (subsection.4.1.1) >>
+/Rect [89.004 248.153 148.839 257.13]
+/A << /S /GoTo /D (chapter.5) >>
>> endobj
-420 0 obj <<
+316 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [126.862 234.257 242.188 245.161]
-/A << /S /GoTo /D (subsection.4.1.2) >>
+/Rect [103.948 230.385 162.348 239.232]
+/A << /S /GoTo /D (section.5.1) >>
>> endobj
-421 0 obj <<
+317 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [89.004 207.199 155.484 216.176]
-/A << /S /GoTo /D (chapter.5) >>
+/Rect [89.004 201.96 196.43 210.937]
+/A << /S /GoTo /D (chapter.6) >>
>> endobj
-422 0 obj <<
+318 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [103.948 189.293 168.435 198.14]
-/A << /S /GoTo /D (section.5.1) >>
+/Rect [103.948 184.192 249.481 193.039]
+/A << /S /GoTo /D (section.6.1) >>
>> endobj
-423 0 obj <<
+319 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [89.004 160.179 148.839 169.155]
-/A << /S /GoTo /D (chapter.6) >>
+/Rect [126.862 164.347 243.463 175.251]
+/A << /S /GoTo /D (subsection.6.1.1) >>
>> endobj
-424 0 obj <<
+320 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [103.948 142.273 162.348 151.119]
-/A << /S /GoTo /D (section.6.1) >>
+/Rect [126.862 148.616 279.707 157.463]
+/A << /S /GoTo /D (subsection.6.1.2) >>
>> endobj
-425 0 obj <<
+321 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [89.004 113.158 196.43 122.134]
-/A << /S /GoTo /D (chapter.7) >>
+/Rect [158.742 130.828 271.857 139.675]
+/A << /S /GoTo /D (subsubsection.6.1.2.1) >>
>> endobj
-426 0 obj <<
+322 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [103.948 95.252 249.481 104.099]
-/A << /S /GoTo /D (section.7.1) >>
+/Rect [158.742 110.983 263 121.887]
+/A << /S /GoTo /D (subsubsection.6.1.2.2) >>
>> endobj
-431 0 obj <<
-/D [429 0 R /XYZ 90 604.454 null]
+323 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [158.742 93.195 287.349 104.099]
+/A << /S /GoTo /D (subsubsection.6.1.2.3) >>
>> endobj
-428 0 obj <<
-/Font << /F22 396 0 R /F23 397 0 R >>
+328 0 obj <<
+/D [326 0 R /XYZ 90 604.454 null]
+>> endobj
+325 0 obj <<
+/Font << /F22 292 0 R /F23 293 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-470 0 obj <<
-/Length 983
+367 0 obj <<
+/Length 1001
/Filter /FlateDecode
>>
stream
-xMs8
-}hB#?mKqӈPAY]ō?ml063|&Y ?g+sr=WRi j(k%^'ưn=x5,؟Ps%մ3
-Au{͒,i˚&1c*>zJQۥ+d=k)YF9mbfD
-)%_>-C >q_6q
+xMF~>Bwuv2A&ɖ"RhdӼV"rFym06кZ#%b{A")xjG0LݔvFC7Vkق `v?gLG`[X
+W qƭZvXR--
+2~6K4I搟"Gh
+ݪ{ՈhNc%CklwߒPx]Hv;y
+Q P`Iذ 1^yğF%j)j\V0l%"g*^?FN <P"4m^(QQ˴u1r! |eaYa-zE\`ydy3D",ǛvlHiD
+qw,8h끉V#/yAX->2m4 p=G_ | ͸s@Rl!KBtua+ `/ d~1|юo D- -%x3UICL:?tVν3E ;=gyPQ!\IZbQԈN?\ UƑn%?(nnosȽ:dTl?{Aq(ۙS7z>=z 5v<m"۶AwsIpDg&`I5BNJe\dv*$פ *1r\+1=;(7:j N_`og͒^WmW\\EGЉBe=&Dz~Tbx
endstream
endobj
-469 0 obj <<
+366 0 obj <<
/Type /Page
-/Contents 470 0 R
-/Resources 468 0 R
+/Contents 367 0 R
+/Resources 365 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 398 0 R
-/Annots [ 427 0 R 432 0 R 433 0 R 434 0 R 435 0 R 436 0 R 437 0 R 438 0 R 439 0 R 440 0 R 441 0 R 442 0 R 443 0 R 444 0 R 445 0 R 446 0 R 447 0 R 448 0 R 449 0 R 450 0 R 451 0 R 452 0 R 453 0 R 454 0 R 455 0 R 456 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R 462 0 R 463 0 R 464 0 R 465 0 R 466 0 R ]
+/Parent 294 0 R
+/Annots [ 324 0 R 329 0 R 330 0 R 331 0 R 332 0 R 333 0 R 334 0 R 335 0 R 336 0 R 337 0 R 338 0 R 339 0 R 340 0 R 341 0 R 342 0 R 343 0 R 344 0 R 345 0 R 346 0 R 347 0 R 348 0 R 349 0 R 350 0 R 351 0 R 352 0 R 353 0 R 354 0 R 355 0 R 356 0 R 357 0 R 358 0 R 359 0 R 360 0 R 361 0 R 362 0 R 363 0 R ]
>> endobj
-427 0 obj <<
+324 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [126.862 726.819 243.463 737.723]
-/A << /S /GoTo /D (subsection.7.1.1) >>
+/Rect [158.742 728.876 213.756 737.723]
+/A << /S /GoTo /D (subsubsection.6.1.2.4) >>
>> endobj
-432 0 obj <<
+329 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [126.862 711.077 279.707 719.924]
-/A << /S /GoTo /D (subsection.7.1.2) >>
+/Rect [158.742 711.077 230.363 719.924]
+/A << /S /GoTo /D (subsubsection.6.1.2.5) >>
>> endobj
-433 0 obj <<
+330 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 691.221 263 702.125]
-/A << /S /GoTo /D (subsubsection.7.1.2.1) >>
+/Rect [158.742 691.221 259.693 702.125]
+/A << /S /GoTo /D (subsubsection.6.1.2.6) >>
>> endobj
-434 0 obj <<
+331 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 673.422 287.349 684.326]
-/A << /S /GoTo /D (subsubsection.7.1.2.2) >>
+/Rect [158.742 673.422 238.114 684.326]
+/A << /S /GoTo /D (subsubsection.6.1.2.7) >>
>> endobj
-435 0 obj <<
+332 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 657.68 213.756 666.527]
-/A << /S /GoTo /D (subsubsection.7.1.2.3) >>
+/Rect [158.742 657.68 228.55 666.527]
+/A << /S /GoTo /D (subsubsection.6.1.2.8) >>
>> endobj
-436 0 obj <<
+333 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 639.881 230.363 648.728]
-/A << /S /GoTo /D (subsubsection.7.1.2.4) >>
+/Rect [158.742 637.824 270.064 648.728]
+/A << /S /GoTo /D (subsubsection.6.1.2.9) >>
>> endobj
-437 0 obj <<
+334 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 620.025 259.693 630.929]
-/A << /S /GoTo /D (subsubsection.7.1.2.5) >>
+/Rect [158.742 620.025 220.401 630.929]
+/A << /S /GoTo /D (subsubsection.6.1.2.10) >>
>> endobj
-438 0 obj <<
+335 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 602.226 238.114 613.13]
-/A << /S /GoTo /D (subsubsection.7.1.2.6) >>
+/Rect [158.742 604.284 241.97 613.13]
+/A << /S /GoTo /D (subsubsection.6.1.2.11) >>
>> endobj
-439 0 obj <<
+336 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 586.485 228.55 595.331]
-/A << /S /GoTo /D (subsubsection.7.1.2.7) >>
+/Rect [158.742 586.485 285.147 595.331]
+/A << /S /GoTo /D (subsubsection.6.1.2.12) >>
>> endobj
-440 0 obj <<
+337 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 566.628 270.064 577.532]
-/A << /S /GoTo /D (subsubsection.7.1.2.8) >>
+/Rect [158.742 566.628 258.039 577.532]
+/A << /S /GoTo /D (subsubsection.6.1.2.13) >>
>> endobj
-441 0 obj <<
+338 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 548.829 220.401 559.733]
-/A << /S /GoTo /D (subsubsection.7.1.2.9) >>
+/Rect [158.742 550.887 256.376 559.733]
+/A << /S /GoTo /D (subsubsection.6.1.2.14) >>
>> endobj
-442 0 obj <<
+339 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 533.088 241.97 541.934]
-/A << /S /GoTo /D (subsubsection.7.1.2.10) >>
+/Rect [158.742 533.088 286.811 541.934]
+/A << /S /GoTo /D (subsubsection.6.1.2.15) >>
>> endobj
-443 0 obj <<
+340 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 515.169 285.147 524.136]
-/A << /S /GoTo /D (subsubsection.7.1.2.11) >>
+/Rect [158.742 515.289 289.331 524.136]
+/A << /S /GoTo /D (subsubsection.6.1.2.16) >>
>> endobj
-444 0 obj <<
+341 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 495.433 258.039 506.337]
-/A << /S /GoTo /D (subsubsection.7.1.2.12) >>
+/Rect [158.742 495.433 262.224 506.337]
+/A << /S /GoTo /D (subsubsection.6.1.2.17) >>
>> endobj
-445 0 obj <<
+342 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 479.571 256.376 488.538]
-/A << /S /GoTo /D (subsubsection.7.1.2.13) >>
+/Rect [158.742 477.634 268.54 488.538]
+/A << /S /GoTo /D (subsubsection.6.1.2.18) >>
>> endobj
-446 0 obj <<
+343 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 461.772 286.811 470.739]
-/A << /S /GoTo /D (subsubsection.7.1.2.14) >>
+/Rect [158.742 459.835 259.444 470.739]
+/A << /S /GoTo /D (subsubsection.6.1.2.19) >>
>> endobj
-447 0 obj <<
+344 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 443.973 289.331 452.94]
-/A << /S /GoTo /D (subsubsection.7.1.2.15) >>
+/Rect [158.742 442.036 227.594 452.94]
+/A << /S /GoTo /D (subsubsection.6.1.2.20) >>
>> endobj
-448 0 obj <<
+345 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 424.237 262.224 435.141]
-/A << /S /GoTo /D (subsubsection.7.1.2.16) >>
+/Rect [158.742 424.237 248.067 435.141]
+/A << /S /GoTo /D (subsubsection.6.1.2.21) >>
>> endobj
-449 0 obj <<
+346 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 406.438 268.54 417.342]
-/A << /S /GoTo /D (subsubsection.7.1.2.17) >>
+/Rect [89.004 397.814 189.785 406.791]
+/A << /S /GoTo /D (chapter.7) >>
>> endobj
-450 0 obj <<
+347 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 388.639 259.444 399.543]
-/A << /S /GoTo /D (subsubsection.7.1.2.18) >>
+/Rect [103.948 378.954 257.092 388.882]
+/A << /S /GoTo /D (section.7.1) >>
>> endobj
-451 0 obj <<
+348 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 370.84 227.594 381.744]
-/A << /S /GoTo /D (subsubsection.7.1.2.19) >>
+/Rect [126.862 360.179 243.463 371.083]
+/A << /S /GoTo /D (subsection.7.1.1) >>
>> endobj
-452 0 obj <<
+349 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 353.041 248.067 363.945]
-/A << /S /GoTo /D (subsubsection.7.1.2.20) >>
+/Rect [126.862 344.437 251.215 353.284]
+/A << /S /GoTo /D (subsection.7.1.2) >>
>> endobj
-453 0 obj <<
+350 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [89.004 326.619 189.785 335.595]
-/A << /S /GoTo /D (chapter.8) >>
+/Rect [158.742 325.557 288.635 335.485]
+/A << /S /GoTo /D (subsubsection.7.1.2.1) >>
>> endobj
-454 0 obj <<
+351 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [103.948 307.759 257.092 317.686]
-/A << /S /GoTo /D (section.8.1) >>
+/Rect [158.742 307.759 294.164 317.686]
+/A << /S /GoTo /D (subsubsection.7.1.2.2) >>
>> endobj
-455 0 obj <<
+352 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [126.862 288.983 243.463 299.887]
-/A << /S /GoTo /D (subsection.8.1.1) >>
+/Rect [158.742 289.96 278.672 299.887]
+/A << /S /GoTo /D (subsubsection.7.1.2.3) >>
>> endobj
-456 0 obj <<
+353 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [126.862 273.242 251.215 282.088]
-/A << /S /GoTo /D (subsection.8.1.2) >>
+/Rect [158.742 272.161 270.363 282.088]
+/A << /S /GoTo /D (subsubsection.7.1.2.4) >>
>> endobj
-457 0 obj <<
+354 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 254.362 288.635 264.289]
-/A << /S /GoTo /D (subsubsection.8.1.2.1) >>
+/Rect [158.742 254.362 293.616 264.289]
+/A << /S /GoTo /D (subsubsection.7.1.2.5) >>
>> endobj
-458 0 obj <<
+355 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 236.563 294.164 246.49]
-/A << /S /GoTo /D (subsubsection.8.1.2.2) >>
+/Rect [158.742 236.563 273.133 246.49]
+/A << /S /GoTo /D (subsubsection.7.1.2.6) >>
>> endobj
-459 0 obj <<
+356 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 218.764 278.672 228.691]
-/A << /S /GoTo /D (subsubsection.8.1.2.3) >>
+/Rect [158.742 218.764 289.332 228.691]
+/A << /S /GoTo /D (subsubsection.7.1.2.7) >>
>> endobj
-460 0 obj <<
+357 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 200.965 270.363 210.893]
-/A << /S /GoTo /D (subsubsection.8.1.2.4) >>
+/Rect [126.862 199.989 257.053 210.893]
+/A << /S /GoTo /D (subsection.7.1.3) >>
>> endobj
-461 0 obj <<
+358 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 183.166 293.616 193.094]
-/A << /S /GoTo /D (subsubsection.8.1.2.5) >>
+/Rect [158.742 183.166 315.185 193.094]
+/A << /S /GoTo /D (subsubsection.7.1.3.1) >>
>> endobj
-462 0 obj <<
+359 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 165.367 273.133 175.295]
-/A << /S /GoTo /D (subsubsection.8.1.2.6) >>
+/Rect [126.862 164.391 298.288 175.295]
+/A << /S /GoTo /D (subsection.7.1.4) >>
>> endobj
-463 0 obj <<
+360 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 147.568 289.332 157.496]
-/A << /S /GoTo /D (subsubsection.8.1.2.7) >>
+/Rect [158.742 147.568 312.037 157.496]
+/A << /S /GoTo /D (subsubsection.7.1.4.1) >>
>> endobj
-464 0 obj <<
+361 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [126.862 128.793 257.053 139.697]
-/A << /S /GoTo /D (subsection.8.1.3) >>
+/Rect [158.742 129.769 281.631 139.697]
+/A << /S /GoTo /D (subsubsection.7.1.4.2) >>
>> endobj
-465 0 obj <<
+362 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 111.97 315.185 121.898]
-/A << /S /GoTo /D (subsubsection.8.1.3.1) >>
+/Rect [126.862 113.051 260.081 121.898]
+/A << /S /GoTo /D (subsection.7.1.5) >>
>> endobj
-466 0 obj <<
+363 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [126.862 93.195 298.288 104.099]
-/A << /S /GoTo /D (subsection.8.1.4) >>
+/Rect [158.742 94.171 303.369 104.099]
+/A << /S /GoTo /D (subsubsection.7.1.5.1) >>
>> endobj
-468 0 obj <<
-/Font << /F22 396 0 R /F23 397 0 R >>
+365 0 obj <<
+/Font << /F22 292 0 R /F23 293 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-509 0 obj <<
-/Length 1015
+379 0 obj <<
+/Length 428
/Filter /FlateDecode
>>
stream
-xo@+QdG]u alH,_CEVY%}zps<
-Yr=: \ q
-F ]ˇ템dy$<D4sެH7tnklvn38Y5kQ4uE!|mSn#ffZ%'\F$!qo1}tGvA:c[|dJxX^^~C%_Dy멼aUaP=65%\ŸߋyoExH`# m^R? L򐬐lx3DԙE$Uڛ ^1
-!~p<MF~q2QfLa\SRF*;NHic;aF1KE(㢽W$⤺RB@~8+ksMM(Z
-oVȋ)BŲ &*N ڊ)F" J` &#nq#]Cm/RFJfܪ|<
--Gc##/-^Wq]'yoz/EQUorLN>PZ ߸}d8}{k r&T,rsU=wlܛMpڗǖq.n0i \vε)HM6kOm x&U-ZhI'fx;>&g_^@K?/$&.~T3o)VOBH}zL.nQ|9ӒI/V Ӧ,ؕKY$ո<RY3hp,R"΄41,MZi2j6j]K
-XupXSCXEOT&5J&
-gD'R
+x]O0+vzڮk{)(b@awh̄Jй-_ Ns<y0+xg@'2D0
+~{O.(OzшĚک,Vi2^U I$0Yx{
+- b9[b6ٶp'ɣB
+$96:$ Bi:0"-nkN0m@!چx(L]z6TE=_jQ
endstream
endobj
-508 0 obj <<
+378 0 obj <<
/Type /Page
-/Contents 509 0 R
-/Resources 507 0 R
+/Contents 379 0 R
+/Resources 377 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 398 0 R
-/Annots [ 467 0 R 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 493 0 R 494 0 R 495 0 R 496 0 R 497 0 R 498 0 R 499 0 R 500 0 R 501 0 R 502 0 R 503 0 R 504 0 R 505 0 R ]
+/Parent 294 0 R
+/Annots [ 364 0 R 368 0 R 369 0 R 370 0 R 371 0 R 372 0 R 373 0 R 374 0 R 375 0 R 376 0 R ]
>> endobj
-467 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 727.795 312.037 737.723]
-/A << /S /GoTo /D (subsubsection.8.1.4.1) >>
->> endobj
-471 0 obj <<
+364 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 709.692 281.631 719.619]
-/A << /S /GoTo /D (subsubsection.8.1.4.2) >>
+/Rect [158.742 727.795 302.821 737.723]
+/A << /S /GoTo /D (subsubsection.7.1.5.2) >>
>> endobj
-472 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [126.862 692.669 260.081 701.516]
-/A << /S /GoTo /D (subsection.8.1.5) >>
->> endobj
-473 0 obj <<
+368 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 673.485 303.369 683.412]
-/A << /S /GoTo /D (subsubsection.8.1.5.1) >>
+/Rect [158.742 710.171 276.271 720.098]
+/A << /S /GoTo /D (subsubsection.7.1.5.3) >>
>> endobj
-474 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 655.381 302.821 665.309]
-/A << /S /GoTo /D (subsubsection.8.1.5.2) >>
->> endobj
-475 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 637.277 276.271 647.205]
-/A << /S /GoTo /D (subsubsection.8.1.5.3) >>
->> endobj
-476 0 obj <<
+369 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 618.198 298.816 629.102]
-/A << /S /GoTo /D (subsubsection.8.1.5.4) >>
+/Rect [158.742 691.57 298.816 702.474]
+/A << /S /GoTo /D (subsubsection.7.1.5.4) >>
>> endobj
-477 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 601.07 309.456 610.998]
-/A << /S /GoTo /D (subsubsection.8.1.5.5) >>
->> endobj
-478 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 582.967 267.424 592.894]
-/A << /S /GoTo /D (subsubsection.8.1.5.6) >>
->> endobj
-479 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 563.887 308.36 574.791]
-/A << /S /GoTo /D (subsubsection.8.1.5.7) >>
->> endobj
-480 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 546.76 298.398 556.687]
-/A << /S /GoTo /D (subsubsection.8.1.5.8) >>
->> endobj
-481 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 528.656 312.783 538.584]
-/A << /S /GoTo /D (subsubsection.8.1.5.9) >>
->> endobj
-482 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 509.576 275.155 520.48]
-/A << /S /GoTo /D (subsubsection.8.1.5.10) >>
->> endobj
-483 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 492.449 291.613 502.377]
-/A << /S /GoTo /D (subsubsection.8.1.5.11) >>
->> endobj
-484 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [103.948 473.369 226.517 484.273]
-/A << /S /GoTo /D (section.8.2) >>
->> endobj
-485 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [126.862 455.266 243.463 466.17]
-/A << /S /GoTo /D (subsection.8.2.1) >>
->> endobj
-486 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [126.862 439.22 251.215 448.066]
-/A << /S /GoTo /D (subsection.8.2.2) >>
->> endobj
-487 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 420.035 272.884 429.963]
-/A << /S /GoTo /D (subsubsection.8.2.2.1) >>
->> endobj
-488 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 401.931 284.799 411.859]
-/A << /S /GoTo /D (subsubsection.8.2.2.2) >>
->> endobj
-489 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 383.828 262.363 393.756]
-/A << /S /GoTo /D (subsubsection.8.2.2.3) >>
->> endobj
-490 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 365.724 290.149 375.652]
-/A << /S /GoTo /D (subsubsection.8.2.2.4) >>
->> endobj
-491 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 347.621 270.961 357.548]
-/A << /S /GoTo /D (subsubsection.8.2.2.5) >>
->> endobj
-492 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 329.517 272.326 339.445]
-/A << /S /GoTo /D (subsubsection.8.2.2.6) >>
->> endobj
-493 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [126.862 312.495 260.081 321.341]
-/A << /S /GoTo /D (subsection.8.2.3) >>
->> endobj
-494 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 294.391 221.507 303.238]
-/A << /S /GoTo /D (subsubsection.8.2.3.1) >>
->> endobj
-495 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [126.862 276.288 257.849 285.134]
-/A << /S /GoTo /D (subsection.8.2.4) >>
->> endobj
-496 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 258.184 241.163 267.031]
-/A << /S /GoTo /D (subsubsection.8.2.4.1) >>
->> endobj
-497 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 240.081 252.49 248.927]
-/A << /S /GoTo /D (subsubsection.8.2.4.2) >>
->> endobj
-498 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 221.977 219.285 230.824]
-/A << /S /GoTo /D (subsubsection.8.2.4.3) >>
->> endobj
-499 0 obj <<
+370 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 202.792 244.191 212.72]
-/A << /S /GoTo /D (subsubsection.8.2.4.4) >>
+/Rect [158.742 674.922 309.456 684.85]
+/A << /S /GoTo /D (subsubsection.7.1.5.5) >>
>> endobj
-500 0 obj <<
+371 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 185.77 236.44 194.617]
-/A << /S /GoTo /D (subsubsection.8.2.4.5) >>
+/Rect [158.742 657.298 267.424 667.225]
+/A << /S /GoTo /D (subsubsection.7.1.5.6) >>
>> endobj
-501 0 obj <<
+372 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 165.609 243.643 176.513]
-/A << /S /GoTo /D (subsubsection.8.2.4.6) >>
+/Rect [158.742 638.697 308.36 649.601]
+/A << /S /GoTo /D (subsubsection.7.1.5.7) >>
>> endobj
-502 0 obj <<
+373 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 149.563 235.086 158.41]
-/A << /S /GoTo /D (subsubsection.8.2.4.7) >>
+/Rect [158.742 622.049 298.398 631.977]
+/A << /S /GoTo /D (subsubsection.7.1.5.8) >>
>> endobj
-503 0 obj <<
+374 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 130.378 259.992 140.306]
-/A << /S /GoTo /D (subsubsection.8.2.4.8) >>
+/Rect [158.742 604.425 312.783 614.352]
+/A << /S /GoTo /D (subsubsection.7.1.5.9) >>
>> endobj
-504 0 obj <<
+375 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 111.299 259.145 122.202]
-/A << /S /GoTo /D (subsubsection.8.2.4.9) >>
+/Rect [158.742 585.824 275.155 596.728]
+/A << /S /GoTo /D (subsubsection.7.1.5.10) >>
>> endobj
-505 0 obj <<
+376 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 93.195 264.126 104.099]
-/A << /S /GoTo /D (subsubsection.8.2.4.10) >>
+/Rect [158.742 569.176 291.613 579.103]
+/A << /S /GoTo /D (subsubsection.7.1.5.11) >>
>> endobj
-507 0 obj <<
-/Font << /F22 396 0 R /F23 397 0 R >>
+377 0 obj <<
+/Font << /F22 292 0 R /F23 293 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-512 0 obj <<
-/Length 219
+382 0 obj <<
+/Length 19
/Filter /FlateDecode
>>
stream
-xݑ;OA)z;
-2݆ (VV'9g79{ x0b"1 P^!腡젳d?ܺ,@CBΡqYf˲̬#FM&UW=U`e ]y.y$osNzQ.0 [dvMdSo}35YEx"mο̛O5G.)*_xv
+x3PHW0Pp2A
endstream
endobj
-511 0 obj <<
+381 0 obj <<
/Type /Page
-/Contents 512 0 R
-/Resources 510 0 R
+/Contents 382 0 R
+/Resources 380 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 398 0 R
-/Annots [ 506 0 R ]
+/Parent 294 0 R
>> endobj
-506 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 728.876 241.073 737.723]
-/A << /S /GoTo /D (subsubsection.8.2.4.11) >>
->> endobj
-510 0 obj <<
-/Font << /F22 396 0 R /F23 397 0 R >>
-/ProcSet [ /PDF /Text ]
+380 0 obj <<
+/ProcSet [ /PDF ]
>> endobj
-515 0 obj <<
+385 0 obj <<
/Length 1491
/Filter /FlateDecode
>>
@@ -1932,39 +1587,39 @@ gA/4A (t+R%w`8V$,y#hRD'm*8,S4iOC2ʒ
x<{~:7l(:t7J>[T]'KQI%hI bC*HZ'Ᵹ!'rE4`(C O$`mM2+`s.4_^j:7 >5! ̹!q܁A-i ӠAv֝<ޔQV$MRҐ?XA0"B1,QnGch5ۯ@Zh^nKW? Qڞ>3ۮE PoWZ)Ov̆I#cOle9[n1hM -&&UЃkˣySЖ MGN:CK/aۚbj<keg*d7cZ-1Gi@nj1F7'-Ztrjc7m(*fb3/Kmۛ&B'؏OQO
endstream
endobj
-514 0 obj <<
+384 0 obj <<
/Type /Page
-/Contents 515 0 R
-/Resources 513 0 R
+/Contents 385 0 R
+/Resources 383 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 520 0 R
+/Parent 390 0 R
>> endobj
-516 0 obj <<
-/D [514 0 R /XYZ 89 770.89 null]
+386 0 obj <<
+/D [384 0 R /XYZ 89 770.89 null]
>> endobj
2 0 obj <<
-/D [514 0 R /XYZ 90 739.935 null]
+/D [384 0 R /XYZ 90 739.935 null]
>> endobj
-517 0 obj <<
-/D [514 0 R /XYZ 90 553.953 null]
+387 0 obj <<
+/D [384 0 R /XYZ 90 553.953 null]
>> endobj
-518 0 obj <<
-/D [514 0 R /XYZ 90 553.953 null]
+388 0 obj <<
+/D [384 0 R /XYZ 90 553.953 null]
>> endobj
6 0 obj <<
-/D [514 0 R /XYZ 90 553.953 null]
+/D [384 0 R /XYZ 90 553.953 null]
>> endobj
-519 0 obj <<
-/D [514 0 R /XYZ 118.403 425.312 null]
+389 0 obj <<
+/D [384 0 R /XYZ 118.403 425.312 null]
>> endobj
10 0 obj <<
-/D [514 0 R /XYZ 90 407.464 null]
+/D [384 0 R /XYZ 90 407.464 null]
>> endobj
-513 0 obj <<
-/Font << /F22 396 0 R /F23 397 0 R >>
+383 0 obj <<
+/Font << /F22 292 0 R /F23 293 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-523 0 obj <<
+393 0 obj <<
/Length 146
/Filter /FlateDecode
>>
@@ -1975,272 +1630,225 @@ xڕ
l4xc-?j_1f
endstream
endobj
-522 0 obj <<
+392 0 obj <<
/Type /Page
-/Contents 523 0 R
-/Resources 521 0 R
+/Contents 393 0 R
+/Resources 391 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 520 0 R
+/Parent 390 0 R
>> endobj
-524 0 obj <<
-/D [522 0 R /XYZ 89 770.89 null]
+394 0 obj <<
+/D [392 0 R /XYZ 89 770.89 null]
>> endobj
-521 0 obj <<
-/Font << /F22 396 0 R >>
+391 0 obj <<
+/Font << /F22 292 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-537 0 obj <<
-/Length 1949
+404 0 obj <<
+/Length 1934
/Filter /FlateDecode
>>
stream
-xڍXݓ6_X+Q_taͦ{L2m_ڛ,S6T6{(ko' @?Ex*nX(s-E- ux-~6rXDb߇F"Fhʲ0] RxC5<¯I)N$+If|*(xG7ԃ,ʰEb"&"c"9GVڨIVו;⪎ vWq'膸lee*YYtfy%326#T~qYFD pQP G
-+
-
-e[\QEZɶ@%Q`5;Z!&LlbxXN``c n#`,]`<K{SF#Y0BZMwBR' I Ùt1M_~ޯ4gU}.Nw$
-ŷ[| wqIΕ e|gs M™
-eFXYzA_,!tCƔ)gP?
-yGapYQ ݊.;FwwDC ͟%QIq4pqEZv}\w3vjiL3ĩQ}'lΠ`
- ,Pj4 Mg<Ɯ
-g8iX%Y%/fɕn`& q)݄#>mpHN1M{{W~^|pD&9}꿯\N&p}AF/cx:4Y Aɭl74fIyT$J8o%A10u$WhLO*[Z% HM3uf8qpp\t(x #Qs\MUY*~Su3l/CϛW52a
+xڍXKs8W6TMDK9x8ݤ{Lh
+PCۍn#OF燖a޾ݫk!V"
+\dfUF<-lXVȢ@'ia-bԈV, ӭ w~GRrR0IsJy"x(
+.?ސ4zt$2,s؆ImAXȃl`E6Aue垸#=Jb4]Ɓb v !.+e [Y>?pIyp2q<>3b\'326#T~qYFD OpQP G
+Fiec'^DQ ֒x 1a!.Epr
+ N[$:@ѐ7 7sXXO4 dEz h3( <=({ԣ]"Ø+y"@=Qi>4Yd,9& r,~&yP!'%~s6Cx8;gs1 Ft-ρ1:搥>uR,"#W0$̊36yy_s&
+!'Œs/$9Nn*ìJ6ԯ4Hn>yys_oP$
endstream
endobj
-536 0 obj <<
+403 0 obj <<
/Type /Page
-/Contents 537 0 R
-/Resources 535 0 R
+/Contents 404 0 R
+/Resources 402 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 520 0 R
-/Annots [ 525 0 R 526 0 R 527 0 R 528 0 R 529 0 R 530 0 R ]
+/Parent 390 0 R
+/Annots [ 395 0 R 396 0 R 397 0 R 398 0 R ]
>> endobj
-525 0 obj <<
+395 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [202.716 476.14 272.085 486.068]
/A << /S /GoTo /D (aacdecoder__lib_8h) >>
>> endobj
-526 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [141.154 339.579 179.948 350.483]
-/A << /S /GoTo /D (main_8cpp) >>
->> endobj
-527 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [359.326 279.803 449.021 290.707]
-/A << /S /GoTo /D (CommandLineUsage) >>
->> endobj
-528 0 obj <<
+396 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [133.008 217.224 215.21 228.128]
/A << /S /GoTo /D (aacdecoder__lib_8h_ac8580fe563e79afe695d7b0b32ea0fed) >>
>> endobj
-529 0 obj <<
+397 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [130.579 136.696 236.441 147.6]
/A << /S /GoTo /D (aacdecoder__lib_8h_a6016435b8679d2793078b10ecaf3d05d) >>
>> endobj
-530 0 obj <<
+398 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [173.128 112.786 289.63 123.69]
/A << /S /GoTo /D (aacdecoder__lib_8h_a245a0e4176fb886d890a86627c55bb24) >>
>> endobj
-538 0 obj <<
-/D [536 0 R /XYZ 89 770.89 null]
+405 0 obj <<
+/D [403 0 R /XYZ 89 770.89 null]
>> endobj
14 0 obj <<
-/D [536 0 R /XYZ 90 739.935 null]
+/D [403 0 R /XYZ 90 739.935 null]
>> endobj
-539 0 obj <<
-/D [536 0 R /XYZ 90 549.218 null]
+406 0 obj <<
+/D [403 0 R /XYZ 90 549.218 null]
>> endobj
-540 0 obj <<
-/D [536 0 R /XYZ 90 549.218 null]
+407 0 obj <<
+/D [403 0 R /XYZ 90 549.218 null]
>> endobj
18 0 obj <<
-/D [536 0 R /XYZ 90 549.218 null]
+/D [403 0 R /XYZ 90 549.218 null]
>> endobj
-541 0 obj <<
-/D [536 0 R /XYZ 302.62 448.737 null]
+408 0 obj <<
+/D [403 0 R /XYZ 302.62 448.737 null]
>> endobj
22 0 obj <<
-/D [536 0 R /XYZ 90 428.837 null]
+/D [403 0 R /XYZ 90 428.837 null]
>> endobj
-542 0 obj <<
-/D [536 0 R /XYZ 90 232.748 null]
+409 0 obj <<
+/D [403 0 R /XYZ 90 232.748 null]
>> endobj
-544 0 obj <<
-/D [536 0 R /XYZ 90 168.823 null]
+411 0 obj <<
+/D [403 0 R /XYZ 90 168.823 null]
>> endobj
-545 0 obj <<
-/D [536 0 R /XYZ 90 108.719 null]
+412 0 obj <<
+/D [403 0 R /XYZ 90 108.719 null]
>> endobj
-535 0 obj <<
-/Font << /F22 396 0 R /F23 397 0 R /F37 543 0 R >>
+402 0 obj <<
+/Font << /F22 292 0 R /F23 293 0 R /F37 410 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-563 0 obj <<
-/Length 2405
+425 0 obj <<
+/Length 2389
/Filter /FlateDecode
>>
stream
-xڝr_ڗU#. T{8Yk&n 屎6?ntC.{f_D
-UT[}׷JVRRl\Jde~ -rzB[:³#"{ZZًzpGkVOWɢvK<׬@0
-("ܯB.:U,i,8g+gxc`]ʚ\OkeY$X50wjdrg/zӻۛ8^<ʹ<@L_'T$=}d$fXo F jV^^RU<0yÂtn?Ԛo8ec
-oTM~S0IGf5eվc;kmzWsت8\ٶMy©s(xg1;'`̖rۿމզ V ?S3]bqcx,V/`EQWTE)u5"ɲ0,(ef|Hn:,72 WFŸY:(tȟ<@T \lhQ+
-'J` *T{ՊzMsci+Gv1n`>[&~W4G1tDk)ّOITw+&N I+ah{FlİbmX4 50[IʙuKl{6 *_S3tX >D[h$D~GӜj]-Ҫ٨-,!$u ?"?Np}zv,fS5 L՚;tE%1N$tPUdVci/$=çWvr@BSðn pK
-?L53:(@8KSƠ䄹Q Bk"OPqnJ˱m*QZ6Z7TNRV֐AGRCYyLA`υgABxҎ~܁3pmjA^*a`aY0kL1<`jb݁k h\̧32njtb
-e',`Ar0s IA@O-HB
-C,ԛ jx`-3vy L[݇#v8DB?X@MM2L _m[ Pʼ0в2ڞ9xJUG/<\M3<#>Uͤk <1!
+xڝYYs~ׯ@K* NV*,9XɊv*nDcn|{}!fzzg-zuNkc[5$H">ۡ+
+("iWfSEG?*PJ% lE O ߰V KSYw
+<V9x.̞*٫ܙ~?}넞}O35n?<||ק)c$fXoMFYh+\b/w/ '!/(vYZ xB~jtlVYSmK+ŸTȶm2u(veG3Tն9q`!vN0[Jk=9 Vנn?S ] bqEd_45ў~CR2j3deaD:0t#:1ne. W@bDH,m5rZONJ$0)7 O4 &pdqH sQ#;GǪCARWn=zռ\%lWbkG~1qD gDn2
+?[c._8iB-܎^S7#9E 73Ei 6:g{6A-lVuۦevl2\y*俛"nN'dMS|fZ3{Pz
+Ez۶mG2CG }.,JE9qt߷: pUuI1TkdLQ$PcY-G@]wCp /md]sow. tNԮ]i^{MO/uy2g~CVYgB{ 
+Q#{ޫQkrVI[(<NDT,LP(i+DFv1n
+[Ь1SLCje
+˪i)x9(``,Mޡ*"rM x
+[cE;M/Mle iM}.eR!,?\ 4kx.<J6Zq8Og9;bCW9!xqZEGfPwT @2p1}yJx>O%6
+q2g< ge!?QɧQ7@MF*8l9tsjqr2 R,2ne& 8Z=#
+ƇߘĐKܹ`DG)w}zzy
+EHXD{8bT Cygnb8ѷSoɜ@Jo"䍽+ \7;P03WZ1rGO׸2Ts2
+HԨ& J|zxEdF]BT(GsMbGLj@C>zZq2.H7qV{+zjH?4}c):3Y:hQ,pPJx `tPHbGU-:
endstream
endobj
-562 0 obj <<
+424 0 obj <<
/Type /Page
-/Contents 563 0 R
-/Resources 561 0 R
+/Contents 425 0 R
+/Resources 423 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 520 0 R
-/Group 392 0 R
-/Annots [ 531 0 R 532 0 R 533 0 R 566 0 R 534 0 R 552 0 R 553 0 R 554 0 R 555 0 R 556 0 R 557 0 R 558 0 R 572 0 R 559 0 R ]
+/Parent 390 0 R
+/Group 288 0 R
+/Annots [ 399 0 R 400 0 R 428 0 R 401 0 R 417 0 R 418 0 R 419 0 R 420 0 R 421 0 R ]
>> endobj
-531 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [469.394 688.981 508.188 699.885]
-/A << /S /GoTo /D (main_8cpp) >>
->> endobj
-532 0 obj <<
+399 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [228.074 677.026 344.577 687.929]
/A << /S /GoTo /D (aacdecoder__lib_8h_a245a0e4176fb886d890a86627c55bb24) >>
>> endobj
-533 0 obj <<
+400 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [433.11 677.026 513.996 687.929]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41ad8e91a23786bc032e507dfbd036f63c4) >>
>> endobj
-566 0 obj <<
+428 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [113.91 665.07 184.525 675.974]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41ad8e91a23786bc032e507dfbd036f63c4) >>
>> endobj
-534 0 obj <<
+401 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [305.852 665.07 380.321 675.974]
/A << /S /GoTo /D (aacdecoder__lib_8h_a6d508fce68c364f5dabc9195e701ecf8) >>
>> endobj
-552 0 obj <<
+417 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [133.754 619.262 208.224 630.166]
/A << /S /GoTo /D (aacdecoder__lib_8h_a6d508fce68c364f5dabc9195e701ecf8) >>
>> endobj
-553 0 obj <<
+418 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [133.071 548.567 249.573 559.471]
/A << /S /GoTo /D (aacdecoder__lib_8h_a245a0e4176fb886d890a86627c55bb24) >>
>> endobj
-554 0 obj <<
+419 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [195.961 458.943 315.79 469.847]
/A << /S /GoTo /D (aacdecoder__lib_8h_a60aa42cb3ddc804b44ce61d877d0501e) >>
>> endobj
-555 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [353.346 449.479 392.14 460.382]
-/A << /S /GoTo /D (main_8cpp) >>
->> endobj
-556 0 obj <<
+420 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [133.008 317.553 216.325 328.457]
/A << /S /GoTo /D (aacdecoder__lib_8h_acca8f4cf9757885d6c654de37a43072f) >>
>> endobj
-557 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [325.7 176.881 364.494 187.785]
-/A << /S /GoTo /D (main_8cpp) >>
->> endobj
-558 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [468.935 176.881 513.996 187.785]
-/A << /S /GoTo /D (main_8cpp_a08a7e8a6abdc5cf6d2ac4e978e084d1a) >>
->> endobj
-572 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [89.004 164.926 112.027 175.83]
-/A << /S /GoTo /D (main_8cpp_a08a7e8a6abdc5cf6d2ac4e978e084d1a) >>
->> endobj
-559 0 obj <<
+421 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [139.807 152.971 214.277 163.875]
/A << /S /GoTo /D (aacdecoder__lib_8h_a6d508fce68c364f5dabc9195e701ecf8) >>
>> endobj
-564 0 obj <<
-/D [562 0 R /XYZ 89 770.89 null]
+426 0 obj <<
+/D [424 0 R /XYZ 89 770.89 null]
>> endobj
-565 0 obj <<
-/D [562 0 R /XYZ 90 710.306 null]
+427 0 obj <<
+/D [424 0 R /XYZ 90 710.306 null]
>> endobj
-567 0 obj <<
-/D [562 0 R /XYZ 90 635.94 null]
+429 0 obj <<
+/D [424 0 R /XYZ 90 635.94 null]
>> endobj
-568 0 obj <<
-/D [562 0 R /XYZ 90 567.401 null]
+430 0 obj <<
+/D [424 0 R /XYZ 90 567.401 null]
>> endobj
-569 0 obj <<
-/D [562 0 R /XYZ 90 388.153 null]
+431 0 obj <<
+/D [424 0 R /XYZ 90 388.153 null]
>> endobj
-570 0 obj <<
-/D [562 0 R /XYZ 90 336.387 null]
+432 0 obj <<
+/D [424 0 R /XYZ 90 336.387 null]
>> endobj
-571 0 obj <<
-/D [562 0 R /XYZ 90 281.513 null]
+433 0 obj <<
+/D [424 0 R /XYZ 90 281.513 null]
>> endobj
26 0 obj <<
-/D [562 0 R /XYZ 90 274.111 null]
+/D [424 0 R /XYZ 90 274.111 null]
>> endobj
-561 0 obj <<
-/Font << /F22 396 0 R /F37 543 0 R /F23 397 0 R >>
+423 0 obj <<
+/Font << /F22 292 0 R /F37 410 0 R /F23 293 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-580 0 obj <<
+440 0 obj <<
/Length 1021
/Filter /FlateDecode
>>
@@ -2253,22 +1861,22 @@ s73"?O]6ƟCǤ*9#Ng;lx,%,S\@ LJ)(N3W$)6
,R8V?" 51;ucOy{{$g0?EJ x[qD1X˴%sٴ-U\T[Y2x2{ 4(S' Z򴎭)Li oܛsTC vߚ~R6@ۄVx9,.|7~% TԾtxkc_A untmDDP|E
endstream
endobj
-579 0 obj <<
+439 0 obj <<
/Type /Page
-/Contents 580 0 R
-/Resources 578 0 R
+/Contents 440 0 R
+/Resources 438 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 520 0 R
-/Group 392 0 R
+/Parent 390 0 R
+/Group 288 0 R
>> endobj
-560 0 obj <<
+422 0 obj <<
/Type /XObject
/Subtype /Image
/Width 1405
/Height 715
/BitsPerComponent 8
/ColorSpace /DeviceRGB
-/SMask 587 0 R
+/SMask 447 0 R
/Length 12695
/Filter /FlateDecode
>>
@@ -2296,7 +1904,7 @@ xݿeי9`࠳nrb
`v$Ifl IAf@*A$dv9
endstream
endobj
-587 0 obj <<
+447 0 obj <<
/Type /XObject
/Subtype /Image
/Width 1405
@@ -2317,18 +1925,18 @@ x?R"_a܁+pn
cоǣޢ߉/$q[[V׹u nXh& ]~8_ha|\ 77-{Cr,5m57_hM|No߈/,gNok@~K&puz[-im&pG]|A|sz֎3}_G^n :Xj&Ђ:ЄW|kC]B;{72X[{~'p}rEnвv:XW|+n_8: :B+먃5QjMZ Ж:ИW|Cu2 Gj7 moו3߲#  `3[iw~@|{#a_ w|R߷W]/ Wq~ڶ=w<j|
endstream
endobj
-581 0 obj <<
-/D [579 0 R /XYZ 89 770.89 null]
+441 0 obj <<
+/D [439 0 R /XYZ 89 770.89 null]
>> endobj
-582 0 obj <<
-/D [579 0 R /XYZ 251.553 600.141 null]
+442 0 obj <<
+/D [439 0 R /XYZ 251.553 600.141 null]
>> endobj
-578 0 obj <<
-/Font << /F22 396 0 R /F23 397 0 R /F13 583 0 R /F11 584 0 R /F8 585 0 R /F14 586 0 R >>
-/XObject << /Im2 560 0 R >>
+438 0 obj <<
+/Font << /F22 292 0 R /F23 293 0 R /F13 443 0 R /F11 444 0 R /F8 445 0 R /F14 446 0 R >>
+/XObject << /Im2 422 0 R >>
/ProcSet [ /PDF /Text /ImageC ]
>> endobj
-590 0 obj <<
+450 0 obj <<
/Length 149
/Filter /FlateDecode
>>
@@ -2337,21 +1945,21 @@ xڕ1 0F$*P\8":Xtptq -#"*8qgwZYшu,a
˿91
endstream
endobj
-589 0 obj <<
+449 0 obj <<
/Type /Page
-/Contents 590 0 R
-/Resources 588 0 R
+/Contents 450 0 R
+/Resources 448 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 520 0 R
+/Parent 390 0 R
>> endobj
-591 0 obj <<
-/D [589 0 R /XYZ 89 770.89 null]
+451 0 obj <<
+/D [449 0 R /XYZ 89 770.89 null]
>> endobj
-588 0 obj <<
-/Font << /F22 396 0 R >>
+448 0 obj <<
+/Font << /F22 292 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-605 0 obj <<
+465 0 obj <<
/Length 1706
/Filter /FlateDecode
>>
@@ -2365,112 +1973,112 @@ TR@?'cRNRtXu[CXJXPQi1Cp8IB[&ɴ͈l V
;Z7^<Y_*
endstream
endobj
-604 0 obj <<
+464 0 obj <<
/Type /Page
-/Contents 605 0 R
-/Resources 603 0 R
+/Contents 465 0 R
+/Resources 463 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 613 0 R
-/Annots [ 592 0 R 593 0 R 609 0 R 594 0 R 595 0 R 596 0 R 597 0 R 598 0 R 599 0 R ]
+/Parent 473 0 R
+/Annots [ 452 0 R 453 0 R 469 0 R 454 0 R 455 0 R 456 0 R 457 0 R 458 0 R 459 0 R ]
>> endobj
-592 0 obj <<
+452 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [390.276 498.78 443.735 509.684]
/A << /S /GoTo /D (structCStreamInfo) >>
>> endobj
-593 0 obj <<
+453 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [473.817 457.246 513.996 468.15]
/A << /S /GoTo /D (structCStreamInfo_ac1388034d207ca6075fc0883d39eea1a) >>
>> endobj
-609 0 obj <<
+469 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [89.004 445.29 167.927 456.194]
/A << /S /GoTo /D (structCStreamInfo_ac1388034d207ca6075fc0883d39eea1a) >>
>> endobj
-594 0 obj <<
+454 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [111.783 213.894 277.511 223.822]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a6e3fa0b7d247c98f132edd55187f9c0c) >>
>> endobj
-595 0 obj <<
+455 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [297.843 213.894 493.15 223.822]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88ab49a2169c22ea876c67154d6caa04568) >>
>> endobj
-596 0 obj <<
+456 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [362.637 200.963 461.296 211.867]
/A << /S /GoTo /D (aacdecoder__lib_8h_afb42ea8892dd828264bd2f6147e0559f) >>
>> endobj
-597 0 obj <<
+457 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [99.384 105.15 215.886 116.054]
/A << /S /GoTo /D (aacdecoder__lib_8h_a245a0e4176fb886d890a86627c55bb24) >>
>> endobj
-598 0 obj <<
+458 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [330.639 105.15 384.098 116.054]
/A << /S /GoTo /D (structCStreamInfo) >>
>> endobj
-599 0 obj <<
+459 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [131.066 93.195 250.895 104.099]
/A << /S /GoTo /D (aacdecoder__lib_8h_a60aa42cb3ddc804b44ce61d877d0501e) >>
>> endobj
-606 0 obj <<
-/D [604 0 R /XYZ 89 770.89 null]
+466 0 obj <<
+/D [464 0 R /XYZ 89 770.89 null]
>> endobj
30 0 obj <<
-/D [604 0 R /XYZ 90 739.935 null]
+/D [464 0 R /XYZ 90 739.935 null]
>> endobj
-607 0 obj <<
-/D [604 0 R /XYZ 90 549.218 null]
+467 0 obj <<
+/D [464 0 R /XYZ 90 549.218 null]
>> endobj
-608 0 obj <<
-/D [604 0 R /XYZ 90 549.218 null]
+468 0 obj <<
+/D [464 0 R /XYZ 90 549.218 null]
>> endobj
34 0 obj <<
-/D [604 0 R /XYZ 90 549.218 null]
+/D [464 0 R /XYZ 90 549.218 null]
>> endobj
-610 0 obj <<
-/D [604 0 R /XYZ 219.513 299.929 null]
+470 0 obj <<
+/D [464 0 R /XYZ 219.513 299.929 null]
>> endobj
38 0 obj <<
-/D [604 0 R /XYZ 90 278.186 null]
+/D [464 0 R /XYZ 90 278.186 null]
>> endobj
-611 0 obj <<
-/D [604 0 R /XYZ 105.223 192.161 null]
+471 0 obj <<
+/D [464 0 R /XYZ 105.223 192.161 null]
>> endobj
42 0 obj <<
-/D [604 0 R /XYZ 90 172.475 null]
+/D [464 0 R /XYZ 90 172.475 null]
>> endobj
-612 0 obj <<
-/D [604 0 R /XYZ 252.389 96.348 null]
+472 0 obj <<
+/D [464 0 R /XYZ 252.389 96.348 null]
>> endobj
-603 0 obj <<
-/Font << /F22 396 0 R /F23 397 0 R >>
+463 0 obj <<
+/Font << /F22 292 0 R /F23 293 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-638 0 obj <<
+498 0 obj <<
/Length 1505
/Filter /FlateDecode
>>
@@ -2484,167 +2092,167 @@ K9u$n^*6G~۔j5=3r&+1Pv[OΝ 2.$ʁrq<Mv!:
vj[svi5TeXiwAz\sLTM4=rl**oIqQq;#6!5!йll`-A4(ԌD7ީ6HIogf?'{^PD[dwx+=SKbt
endstream
endobj
-637 0 obj <<
+497 0 obj <<
/Type /Page
-/Contents 638 0 R
-/Resources 636 0 R
+/Contents 498 0 R
+/Resources 496 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 613 0 R
-/Annots [ 600 0 R 601 0 R 640 0 R 602 0 R 619 0 R 620 0 R 621 0 R 622 0 R 623 0 R 624 0 R 625 0 R 642 0 R 626 0 R 627 0 R 628 0 R 629 0 R 630 0 R 631 0 R 632 0 R ]
+/Parent 473 0 R
+/Annots [ 460 0 R 461 0 R 500 0 R 462 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R 502 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R ]
>> endobj
-600 0 obj <<
+460 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [136.073 702.45 301.801 712.378]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a6e3fa0b7d247c98f132edd55187f9c0c) >>
>> endobj
-601 0 obj <<
+461 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [360.204 702.45 513.996 712.378]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88ab49a2169c22ea876c67154d6caa04568) >>
>> endobj
-640 0 obj <<
+500 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [89.004 689.519 135.828 700.423]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88ab49a2169c22ea876c67154d6caa04568) >>
>> endobj
-602 0 obj <<
+462 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [239.219 677.563 292.678 688.467]
/A << /S /GoTo /D (structCStreamInfo) >>
>> endobj
-619 0 obj <<
+479 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [89.004 661.996 202.796 670.843]
/A << /S /GoTo /D (structCStreamInfo_ac1388034d207ca6075fc0883d39eea1a) >>
>> endobj
-620 0 obj <<
+480 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [89.004 642.315 205.864 653.219]
/A << /S /GoTo /D (structCStreamInfo_aae39329c51fe206a8aee33daba2fe1db) >>
>> endobj
-621 0 obj <<
+481 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [89.004 624.69 214.96 635.594]
/A << /S /GoTo /D (structCStreamInfo_aa35e5be20f99be29ce12f9f41bf4d50e) >>
>> endobj
-622 0 obj <<
+482 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [113.392 607.066 279.12 617.97]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a6e3fa0b7d247c98f132edd55187f9c0c) >>
>> endobj
-623 0 obj <<
+483 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [165.915 526.323 265.3 537.227]
/A << /S /GoTo /D (structCStreamInfo_a36fa897b242eebb936d99010a8c580be) >>
>> endobj
-624 0 obj <<
+484 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [136.073 462.787 301.801 472.715]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a6e3fa0b7d247c98f132edd55187f9c0c) >>
>> endobj
-625 0 obj <<
+485 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [360.204 462.787 513.996 472.715]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88ab49a2169c22ea876c67154d6caa04568) >>
>> endobj
-642 0 obj <<
+502 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [89.004 449.856 135.828 460.76]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88ab49a2169c22ea876c67154d6caa04568) >>
>> endobj
-626 0 obj <<
+486 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [239.219 437.9 292.678 448.804]
/A << /S /GoTo /D (structCStreamInfo) >>
>> endobj
-627 0 obj <<
+487 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [89.004 422.333 202.796 431.18]
/A << /S /GoTo /D (structCStreamInfo_ac1388034d207ca6075fc0883d39eea1a) >>
>> endobj
-628 0 obj <<
+488 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [89.004 402.652 205.864 413.556]
/A << /S /GoTo /D (structCStreamInfo_aae39329c51fe206a8aee33daba2fe1db) >>
>> endobj
-629 0 obj <<
+489 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [89.004 373.072 214.96 383.976]
/A << /S /GoTo /D (structCStreamInfo_aa35e5be20f99be29ce12f9f41bf4d50e) >>
>> endobj
-630 0 obj <<
+490 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [113.663 355.448 308.97 366.352]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88ab49a2169c22ea876c67154d6caa04568) >>
>> endobj
-631 0 obj <<
+491 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [113.902 278.048 279.629 288.951]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a6e3fa0b7d247c98f132edd55187f9c0c) >>
>> endobj
-632 0 obj <<
+492 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [165.915 93.195 265.3 104.099]
/A << /S /GoTo /D (structCStreamInfo_a36fa897b242eebb936d99010a8c580be) >>
>> endobj
-639 0 obj <<
-/D [637 0 R /XYZ 89 770.89 null]
+499 0 obj <<
+/D [497 0 R /XYZ 89 770.89 null]
>> endobj
46 0 obj <<
-/D [637 0 R /XYZ 90 739.935 null]
+/D [497 0 R /XYZ 90 739.935 null]
>> endobj
-641 0 obj <<
-/D [637 0 R /XYZ 269.286 529.476 null]
+501 0 obj <<
+/D [497 0 R /XYZ 269.286 529.476 null]
>> endobj
50 0 obj <<
-/D [637 0 R /XYZ 90 507.769 null]
+/D [497 0 R /XYZ 90 507.769 null]
>> endobj
-643 0 obj <<
-/D [637 0 R /XYZ 269.286 96.348 null]
+503 0 obj <<
+/D [497 0 R /XYZ 269.286 96.348 null]
>> endobj
-636 0 obj <<
-/Font << /F22 396 0 R /F23 397 0 R /F37 543 0 R >>
+496 0 obj <<
+/Font << /F22 292 0 R /F23 293 0 R /F37 410 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-652 0 obj <<
+512 0 obj <<
/Length 770
/Filter /FlateDecode
>>
@@ -2654,74 +2262,74 @@ xڝUR0}Wў!FoqLIC&ro+y吤O+]I-FW(EF~
2x6yV5o:M2^><JMPneY׹-iWw{(r8p^8w8J ((=u
endstream
endobj
-651 0 obj <<
+511 0 obj <<
/Type /Page
-/Contents 652 0 R
-/Resources 650 0 R
+/Contents 512 0 R
+/Resources 510 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 613 0 R
-/Annots [ 633 0 R 634 0 R 654 0 R 635 0 R 647 0 R 648 0 R 649 0 R ]
+/Parent 473 0 R
+/Annots [ 493 0 R 494 0 R 514 0 R 495 0 R 507 0 R 508 0 R 509 0 R ]
>> endobj
-633 0 obj <<
+493 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [136.073 703.446 301.801 713.374]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a6e3fa0b7d247c98f132edd55187f9c0c) >>
>> endobj
-634 0 obj <<
+494 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [360.204 703.446 513.996 713.374]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88ab49a2169c22ea876c67154d6caa04568) >>
>> endobj
-654 0 obj <<
+514 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [89.004 690.515 135.828 701.419]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88ab49a2169c22ea876c67154d6caa04568) >>
>> endobj
-635 0 obj <<
+495 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [366.073 678.559 419.531 689.463]
/A << /S /GoTo /D (structCStreamInfo) >>
>> endobj
-647 0 obj <<
+507 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [89.004 662.992 202.796 671.839]
/A << /S /GoTo /D (structCStreamInfo_ac1388034d207ca6075fc0883d39eea1a) >>
>> endobj
-648 0 obj <<
+508 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [89.004 643.311 205.864 654.215]
/A << /S /GoTo /D (structCStreamInfo_aae39329c51fe206a8aee33daba2fe1db) >>
>> endobj
-649 0 obj <<
+509 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [89.004 625.686 214.96 636.59]
/A << /S /GoTo /D (structCStreamInfo_aa35e5be20f99be29ce12f9f41bf4d50e) >>
>> endobj
-653 0 obj <<
-/D [651 0 R /XYZ 89 770.89 null]
+513 0 obj <<
+/D [511 0 R /XYZ 89 770.89 null]
>> endobj
54 0 obj <<
-/D [651 0 R /XYZ 90 739.935 null]
+/D [511 0 R /XYZ 90 739.935 null]
>> endobj
-650 0 obj <<
-/Font << /F22 396 0 R /F23 397 0 R /F37 543 0 R >>
+510 0 obj <<
+/Font << /F22 292 0 R /F23 293 0 R /F37 410 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-657 0 obj <<
+517 0 obj <<
/Length 152
/Filter /FlateDecode
>>
@@ -2730,701 +2338,602 @@ xڕ
@DS&EֻwdN.l:0qcG@'xFkeE#DT43Nmfb99ҿc?qHP&Нdfd Ufĩ/x3?q9 ˿2|
endstream
endobj
-656 0 obj <<
-/Type /Page
-/Contents 657 0 R
-/Resources 655 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 613 0 R
->> endobj
-658 0 obj <<
-/D [656 0 R /XYZ 89 770.89 null]
->> endobj
-655 0 obj <<
-/Font << /F22 396 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-664 0 obj <<
-/Length 1136
-/Filter /FlateDecode
->>
-stream
-xڝV[o6~ϯ Tʞ4\MxLDeQdư>CvC"}Bʋ'1}f'.X9˼+c/O(›kj!b? fQ#qFYcF
-j"e#PϞi2*s;"J  1^u ,n>x0K&ږn!:kon$n䦭F4 jz叝~%96HBYfEvο1kh79k؟܇`HrdWA8S_HkVb_V=d_^i\iGˇtrf +ieuo`.|Q< L G`9\!Q}hi;)Sѣ\q`S[H M.-%Ɣ#ltZjy9OX`ZIz ou %3Ys
-Ʃ?q)Ă\JJVC,v4B)IQ3B:2 "M#( j A&EK1X,L,h6{O2^U=nTuE;A9vAFЦ J޷Zm_Wz691.XmjM6Jp=|4\GoƉ 0:ZR i,'Ot/=
-endstream
-endobj
-663 0 obj <<
-/Type /Page
-/Contents 664 0 R
-/Resources 662 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 613 0 R
-/Annots [ 659 0 R 660 0 R 661 0 R ]
->> endobj
-659 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [102.761 533.473 141.555 544.376]
-/A << /S /GoTo /D (main_8cpp) >>
->> endobj
-660 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [293.957 533.473 322.51 544.376]
-/A << /S /GoTo /D (main_8cpp_a0ddf1224851353fc92bfbff6f499fa97) >>
->> endobj
-661 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [183.861 509.562 222.656 520.466]
-/A << /S /GoTo /D (main_8cpp) >>
->> endobj
-665 0 obj <<
-/D [663 0 R /XYZ 89 770.89 null]
->> endobj
-58 0 obj <<
-/D [663 0 R /XYZ 90 739.935 null]
->> endobj
-548 0 obj <<
-/D [663 0 R /XYZ 90 549.218 null]
->> endobj
-666 0 obj <<
-/D [663 0 R /XYZ 511.624 399.171 null]
->> endobj
-62 0 obj <<
-/D [663 0 R /XYZ 90 381.025 null]
->> endobj
-667 0 obj <<
-/D [663 0 R /XYZ 90 282.946 null]
->> endobj
-66 0 obj <<
-/D [663 0 R /XYZ 90 278.239 null]
->> endobj
-668 0 obj <<
-/D [663 0 R /XYZ 90 188.685 null]
->> endobj
-70 0 obj <<
-/D [663 0 R /XYZ 90 183.978 null]
->> endobj
-662 0 obj <<
-/Font << /F22 396 0 R /F23 397 0 R /F37 543 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-672 0 obj <<
-/Length 1077
-/Filter /FlateDecode
->>
-stream
-xڽWMs8W0=%31ؘ7nMcos 5 ++ a$^=#σ'6<ӛc2܉e:e,cueÑmOĉaD+r2xX~ , p\9V//2Gޭq(bclkz.r:52=pmеp\VND =s<qjceyہYLTl)S鳚<Ng_]]߄,.ޟF:?UAsC(< 8L$'p5&n+|&k*Rǐ'1z=T#0jX>I0nZ<-Y
-5n螀,%Y@9Oxkzv5T 3lq(t\(1l1T.+a9e p_UYI ZJ(
- *ܘ- (5wܔ*lHߕ!)!g*AXb5ώ-RREHZ2+p . gڥUD$ꬸO3-]pځP2!OaKt2sln2Bs'W|Z8C~+O$|cr]tG@W.f6C@GV2MK?V+Nw pWE< k眺S[
-HH bUpX{*7LܷyŖne"*N$#~
-{}[tj݆
-ɣ, + pU6zoIY >| wكSDPZt[yĖ^).nGoI%
-endstream
-endobj
-671 0 obj <<
+516 0 obj <<
/Type /Page
-/Contents 672 0 R
-/Resources 670 0 R
+/Contents 517 0 R
+/Resources 515 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 613 0 R
+/Parent 473 0 R
>> endobj
-673 0 obj <<
-/D [671 0 R /XYZ 89 770.89 null]
+518 0 obj <<
+/D [516 0 R /XYZ 89 770.89 null]
>> endobj
-670 0 obj <<
-/Font << /F22 396 0 R /F37 543 0 R >>
+515 0 obj <<
+/Font << /F22 292 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-678 0 obj <<
+523 0 obj <<
/Length 401
/Filter /FlateDecode
>>
stream
-xRMo h[[iZ69H0ǿ/,춫 y3f O
-^Ϋٷv!?Gviov
+xRMO01wڊR*Nk)8qmW_iތf 
+qI E2E5OK(\:I* 6c2Sou
endstream
endobj
-677 0 obj <<
+522 0 obj <<
/Type /Page
-/Contents 678 0 R
-/Resources 676 0 R
+/Contents 523 0 R
+/Resources 521 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 680 0 R
-/Annots [ 674 0 R 675 0 R ]
+/Parent 473 0 R
+/Annots [ 519 0 R 520 0 R ]
>> endobj
-674 0 obj <<
+519 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [103.177 481.935 156.636 492.839]
/A << /S /GoTo /D (structCStreamInfo) >>
>> endobj
-675 0 obj <<
+520 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [502.041 472.037 513.996 480.884]
-/A << /S /GoTo /D (section.7.1) >>
+/A << /S /GoTo /D (section.6.1) >>
>> endobj
-679 0 obj <<
-/D [677 0 R /XYZ 89 770.89 null]
+524 0 obj <<
+/D [522 0 R /XYZ 89 770.89 null]
>> endobj
-74 0 obj <<
-/D [677 0 R /XYZ 90 739.935 null]
+58 0 obj <<
+/D [522 0 R /XYZ 90 739.935 null]
>> endobj
-78 0 obj <<
-/D [677 0 R /XYZ 90 553.953 null]
+62 0 obj <<
+/D [522 0 R /XYZ 90 553.953 null]
>> endobj
-676 0 obj <<
-/Font << /F22 396 0 R /F23 397 0 R >>
+521 0 obj <<
+/Font << /F22 292 0 R /F23 293 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-683 0 obj <<
+527 0 obj <<
/Length 147
/Filter /FlateDecode
>>
stream
xڕ0C
-t \YAVu@XZ$>Pdz~2
-ƖDx "#xkX̖EjhPS:GSXlw7CDwa pi]kX1QJќ='|揫R,^0
+@ܑYAVu@XZ$>Pdz~2
+ƖDx "#xkXMalS jԮ83q\nfhN6# ;y\0AN5-} 6+<&jB4g?(˿0
endstream
endobj
-682 0 obj <<
+526 0 obj <<
/Type /Page
-/Contents 683 0 R
-/Resources 681 0 R
+/Contents 527 0 R
+/Resources 525 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 680 0 R
+/Parent 473 0 R
>> endobj
-684 0 obj <<
-/D [682 0 R /XYZ 89 770.89 null]
+528 0 obj <<
+/D [526 0 R /XYZ 89 770.89 null]
>> endobj
-681 0 obj <<
-/Font << /F22 396 0 R >>
+525 0 obj <<
+/Font << /F22 292 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-692 0 obj <<
-/Length 456
+533 0 obj <<
+/Length 315
/Filter /FlateDecode
>>
stream
-x͓n0>6m4mUm[U^K!J5Uf0gF]nHͫ=c,%8!E
-<EEѮh\0A"+ރ, (ao꫶2g8L1
-iPB#G;"d28YU*θD s֝‹+!1A~g&H+3b*!Dfjf)Jh%Peeʮ2{c1'WCP 7vRfi34b;+\r<p%\\F_yM+!
+xڽKO0܍3VãHL
+ĸuu轧o U\lDJ& G<'"Kh }b&0KqN,@ <cAتA9Id _!b?G=M 'dғ,%y"yid:0 <#A{jjjz7NvS_ߊ@k] 4%q7^U5jv2#!IݾZ8?.U|U.5^UR0ϲDXj9W]eLY&CɠO
endstream
endobj
-691 0 obj <<
+532 0 obj <<
/Type /Page
-/Contents 692 0 R
-/Resources 690 0 R
+/Contents 533 0 R
+/Resources 531 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 680 0 R
-/Annots [ 685 0 R 686 0 R 687 0 R 688 0 R 689 0 R ]
+/Parent 535 0 R
+/Annots [ 529 0 R 530 0 R ]
>> endobj
-685 0 obj <<
+529 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [103.177 481.935 172.546 492.839]
/A << /S /GoTo /D (aacdecoder__lib_8h) >>
>> endobj
-686 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [502.041 484.092 513.996 492.839]
-/A << /S /GoTo /D (section.8.1) >>
->> endobj
-687 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [103.177 469.98 141.971 480.884]
-/A << /S /GoTo /D (main_8cpp) >>
->> endobj
-688 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [416.599 469.98 488.591 480.884]
-/A << /S /GoTo /D (LIBUSE_Calling_Sequence) >>
->> endobj
-689 0 obj <<
+530 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [502.041 460.082 513.996 468.929]
-/A << /S /GoTo /D (section.8.2) >>
+/Rect [502.041 483.873 513.996 492.839]
+/A << /S /GoTo /D (section.7.1) >>
>> endobj
-693 0 obj <<
-/D [691 0 R /XYZ 89 770.89 null]
+534 0 obj <<
+/D [532 0 R /XYZ 89 770.89 null]
>> endobj
-82 0 obj <<
-/D [691 0 R /XYZ 90 739.935 null]
+66 0 obj <<
+/D [532 0 R /XYZ 90 739.935 null]
>> endobj
-86 0 obj <<
-/D [691 0 R /XYZ 90 553.953 null]
+70 0 obj <<
+/D [532 0 R /XYZ 90 553.953 null]
>> endobj
-690 0 obj <<
-/Font << /F22 396 0 R /F23 397 0 R >>
+531 0 obj <<
+/Font << /F22 292 0 R /F23 293 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-696 0 obj <<
-/Length 144
+538 0 obj <<
+/Length 145
/Filter /FlateDecode
>>
stream
-xڕ
-@DS&ݻN.r`&hai509
-ƞ֍NVV4RFWiW 42Z6J,W{^3BD ^4+o,u=#+ 5a#?
-FUoZ0Y
+xڕ@D)5#:B%`LJ?߃hai50`hi["#ҋq*=L lFXhm4uZGzB0dոҔ2S17`cCJ(Ԧp7\5_X0W
endstream
endobj
-695 0 obj <<
+537 0 obj <<
/Type /Page
-/Contents 696 0 R
-/Resources 694 0 R
+/Contents 538 0 R
+/Resources 536 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 680 0 R
+/Parent 535 0 R
>> endobj
-697 0 obj <<
-/D [695 0 R /XYZ 89 770.89 null]
+539 0 obj <<
+/D [537 0 R /XYZ 89 770.89 null]
>> endobj
-694 0 obj <<
-/Font << /F22 396 0 R >>
+536 0 obj <<
+/Font << /F22 292 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-720 0 obj <<
-/Length 747
+563 0 obj <<
+/Length 749
/Filter /FlateDecode
>>
stream
-xVn0+"Ē(
-xKH[>Im%C__Jgqb@v,3@29! yhB<B J5X,]k qHyY<V"S\<ۺb
-]깐2Cl;!d &q` 6aVކU籘* Lt@R&FUu!m,a,d6ϋUvsgyePUQhrC8ODbD8#BDAL
-'tDYeOa6JՔ>,Npxǒ~y%}n 8T!q('!cfZ
+xWn0+"Ē(
+xKp[9Im%C__JlvxzD̛7oH~|c CZŠгԺ+t\L;?+A@K) !6*m>,zsɤ(W, EB{0B8_8څD)_pm'܄D>Mt:z& R\.EAB䋢\6/j+W/Rkʓ"婱SaRNdq=^{1Rƶn>)
+*
+B)q卑w$a6U7eќB?R]Fk= yZfmP iB^-^^6g~<r8G̻77/;u"_,?c-+l{!9Ok[Q^6:q`{weGπg;1.ӝ.fnjrDJJy2Ή̈2H1,z
endstream
endobj
-719 0 obj <<
+562 0 obj <<
/Type /Page
-/Contents 720 0 R
-/Resources 718 0 R
+/Contents 563 0 R
+/Resources 561 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 680 0 R
-/Annots [ 698 0 R 699 0 R 700 0 R 701 0 R 702 0 R 703 0 R 704 0 R 705 0 R 706 0 R 707 0 R 708 0 R 709 0 R 710 0 R 711 0 R 712 0 R 713 0 R 714 0 R 715 0 R 716 0 R 717 0 R ]
+/Parent 535 0 R
+/Annots [ 540 0 R 541 0 R 542 0 R 543 0 R 544 0 R 545 0 R 546 0 R 547 0 R 548 0 R 549 0 R 550 0 R 551 0 R 552 0 R 553 0 R 554 0 R 555 0 R 556 0 R 557 0 R 558 0 R 559 0 R 560 0 R ]
>> endobj
-698 0 obj <<
+540 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [132.999 420.704 181.476 431.608]
+/Rect [132.999 422.869 181.476 433.773]
/A << /S /GoTo /D (structCStreamInfo_a5d5f38d670deaa5abf887c3b580df1cd) >>
>> endobj
-699 0 obj <<
+541 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [132.999 408.755 175.379 417.602]
+/Rect [132.999 411.441 175.379 420.288]
/A << /S /GoTo /D (structCStreamInfo_a36fa897b242eebb936d99010a8c580be) >>
>> endobj
-700 0 obj <<
+542 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [132.999 394.748 189.785 403.595]
+/Rect [132.999 397.957 189.785 406.803]
/A << /S /GoTo /D (structCStreamInfo_ac1388034d207ca6075fc0883d39eea1a) >>
>> endobj
-701 0 obj <<
+543 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [237.875 378.685 297.73 389.588]
+/Rect [237.875 382.414 297.73 393.318]
/A << /S /GoTo /D (structCStreamInfo_aae39329c51fe206a8aee33daba2fe1db) >>
>> endobj
-702 0 obj <<
+544 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 364.678 227.693 375.582]
+/Rect [158.742 368.93 227.693 379.833]
/A << /S /GoTo /D (structCStreamInfo_aa35e5be20f99be29ce12f9f41bf4d50e) >>
>> endobj
-703 0 obj <<
+545 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [132.999 350.671 196.41 361.575]
+/Rect [132.999 355.445 196.41 366.349]
/A << /S /GoTo /D (structCStreamInfo_a47fa73a2c1269f30d1439e90c7652f49) >>
>> endobj
-704 0 obj <<
+546 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [132.999 336.665 161.003 347.569]
+/Rect [132.999 341.96 161.003 352.864]
/A << /S /GoTo /D (structCStreamInfo_aaf23a4756ee1a1b36f0b7d104d3f9882) >>
>> endobj
-705 0 obj <<
+547 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [219.344 323.635 233.511 333.562]
+/Rect [219.344 329.451 233.511 339.379]
/A << /S /GoTo /D (structCStreamInfo_a24cea6707207c95269162847beaa0b7d) >>
>> endobj
-706 0 obj <<
+548 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [132.999 308.652 193.103 319.556]
+/Rect [132.999 314.99 193.103 325.894]
/A << /S /GoTo /D (structCStreamInfo_af5c2c8b545a6cc3e5aac82e25a2edea0) >>
>> endobj
-707 0 obj <<
+549 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [132.999 296.703 163.773 305.549]
+/Rect [132.999 303.562 163.773 312.409]
/A << /S /GoTo /D (structCStreamInfo_a4d64654dd9d366c5ea41a89d1972534d) >>
>> endobj
-708 0 obj <<
+550 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [132.999 280.639 220.758 291.543]
+/Rect [132.999 288.02 220.758 298.924]
/A << /S /GoTo /D (structCStreamInfo_a6e431a6f8aeca62ffb7741b3ec068f7b) >>
>> endobj
-709 0 obj <<
+551 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [132.999 276.593 205.267 285.439]
+/A << /S /GoTo /D (structCStreamInfo_afa21b3685d93a877cab4aa884524cb67) >>
+>> endobj
+552 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [219.344 267.609 248.306 277.536]
+/Rect [219.344 262.027 248.306 271.954]
/A << /S /GoTo /D (structCStreamInfo_a8ffd4db9d615e545a5e8cb51990965fc) >>
>> endobj
-710 0 obj <<
+553 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [132.999 252.626 203.474 263.53]
+/Rect [132.999 247.566 203.474 258.47]
/A << /S /GoTo /D (structCStreamInfo_a28c5ba6424b0975f7074b8e1e217a7a3) >>
>> endobj
-711 0 obj <<
+554 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [140.192 238.619 161.003 249.523]
+/Rect [140.192 234.081 161.003 244.985]
/A << /S /GoTo /D (structCStreamInfo_a73484dc9e2406a34c5dddf16b3cf6d0c) >>
>> endobj
-712 0 obj <<
+555 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [149.616 224.613 188.142 235.517]
+/Rect [149.616 220.596 188.142 231.5]
/A << /S /GoTo /D (structCStreamInfo_a239e02305ca579866e527f4a512b1fdc) >>
>> endobj
-713 0 obj <<
+556 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [132.999 212.663 220.22 221.51]
+/Rect [132.999 209.168 220.22 218.015]
/A << /S /GoTo /D (structCStreamInfo_ab28c53f72c8c1a9c4adf5d7e84bcc78b) >>
>> endobj
-714 0 obj <<
+557 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [140.192 196.6 202.826 207.504]
+/Rect [140.192 193.626 202.826 204.53]
/A << /S /GoTo /D (structCStreamInfo_ae8a7599cb585fdb0ff5446b0a6abb9c8) >>
>> endobj
-715 0 obj <<
+558 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [140.192 182.593 198.642 193.497]
+/Rect [140.192 180.141 198.642 191.045]
/A << /S /GoTo /D (structCStreamInfo_a8a9699c8f4e00893127a7e49161bbd0d) >>
>> endobj
-716 0 obj <<
+559 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [140.192 170.644 229.934 179.491]
+/Rect [140.192 168.714 229.934 177.56]
/A << /S /GoTo /D (structCStreamInfo_a1f2571c63e5f1db6e4d1537e37310568) >>
>> endobj
-717 0 obj <<
+560 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [140.192 156.637 225.75 165.484]
+/Rect [140.192 155.229 225.75 164.075]
/A << /S /GoTo /D (structCStreamInfo_a7362ae2c2b9bd37a103e575c271f3120) >>
>> endobj
-721 0 obj <<
-/D [719 0 R /XYZ 89 770.89 null]
+564 0 obj <<
+/D [562 0 R /XYZ 89 770.89 null]
>> endobj
-90 0 obj <<
-/D [719 0 R /XYZ 90 739.935 null]
+74 0 obj <<
+/D [562 0 R /XYZ 90 739.935 null]
>> endobj
-614 0 obj <<
-/D [719 0 R /XYZ 90 553.953 null]
+474 0 obj <<
+/D [562 0 R /XYZ 90 553.953 null]
>> endobj
-94 0 obj <<
-/D [719 0 R /XYZ 90 553.953 null]
+78 0 obj <<
+/D [562 0 R /XYZ 90 553.953 null]
>> endobj
-722 0 obj <<
-/D [719 0 R /XYZ 90 440.709 null]
+565 0 obj <<
+/D [562 0 R /XYZ 90 442.352 null]
>> endobj
-98 0 obj <<
-/D [719 0 R /XYZ 90 140.689 null]
+82 0 obj <<
+/D [562 0 R /XYZ 90 140.455 null]
>> endobj
-718 0 obj <<
-/Font << /F22 396 0 R /F23 397 0 R /F37 543 0 R /F11 584 0 R /F14 586 0 R >>
+561 0 obj <<
+/Font << /F22 292 0 R /F23 293 0 R /F37 410 0 R /F11 444 0 R /F14 446 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-741 0 obj <<
-/Length 901
+585 0 obj <<
+/Length 990
/Filter /FlateDecode
>>
stream
-xڥVMs0+|g*ɖ3qhLShpQ@wڢI+C N{Azo$,|蝦)ub4t҅c'
- b8ܹqԏB7YaLֹLI{z_=b0C6,BϜY޻_8hN@}iKCCQP^`Kߊ|n"v4@,
-nh\6m)y[0q[v DLq~曝O4tDM-2 S7i屝6$Umh,2?}- +IGI}I|cڇ_n
+xڥVs8~3'qhK 487m#@w&__Z;\_X~oZлz
+m
endstream
endobj
-740 0 obj <<
+584 0 obj <<
/Type /Page
-/Contents 741 0 R
-/Resources 739 0 R
+/Contents 585 0 R
+/Resources 583 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 680 0 R
+/Parent 535 0 R
>> endobj
-742 0 obj <<
-/D [740 0 R /XYZ 89 770.89 null]
+586 0 obj <<
+/D [584 0 R /XYZ 89 770.89 null]
>> endobj
-102 0 obj <<
-/D [740 0 R /XYZ 90 739.935 null]
+86 0 obj <<
+/D [584 0 R /XYZ 90 739.935 null]
>> endobj
-724 0 obj <<
-/D [740 0 R /XYZ 90 722.904 null]
+573 0 obj <<
+/D [584 0 R /XYZ 90 722.803 null]
>> endobj
-106 0 obj <<
-/D [740 0 R /XYZ 90 722.904 null]
+90 0 obj <<
+/D [584 0 R /XYZ 90 722.803 null]
>> endobj
-729 0 obj <<
-/D [740 0 R /XYZ 330.795 680.874 null]
+567 0 obj <<
+/D [584 0 R /XYZ 287.886 668.716 null]
>> endobj
-110 0 obj <<
-/D [740 0 R /XYZ 90 663.146 null]
+94 0 obj <<
+/D [584 0 R /XYZ 90 650.482 null]
>> endobj
-726 0 obj <<
-/D [740 0 R /XYZ 252.171 587.881 null]
+572 0 obj <<
+/D [584 0 R /XYZ 330.795 610.364 null]
>> endobj
-114 0 obj <<
-/D [740 0 R /XYZ 90 572.211 null]
+98 0 obj <<
+/D [584 0 R /XYZ 90 592.131 null]
>> endobj
-728 0 obj <<
-/D [740 0 R /XYZ 111.031 518.181 null]
+569 0 obj <<
+/D [584 0 R /XYZ 252.171 516.764 null]
>> endobj
-118 0 obj <<
-/D [740 0 R /XYZ 90 500.828 null]
+102 0 obj <<
+/D [584 0 R /XYZ 90 500.588 null]
>> endobj
-727 0 obj <<
-/D [740 0 R /XYZ 180.798 460.437 null]
+571 0 obj <<
+/D [584 0 R /XYZ 111.031 446.457 null]
>> endobj
-122 0 obj <<
-/D [740 0 R /XYZ 90 444.767 null]
+106 0 obj <<
+/D [584 0 R /XYZ 90 428.597 null]
>> endobj
-733 0 obj <<
-/D [740 0 R /XYZ 339.233 402.693 null]
+570 0 obj <<
+/D [584 0 R /XYZ 180.798 388.106 null]
>> endobj
-126 0 obj <<
-/D [740 0 R /XYZ 90 384.966 null]
+110 0 obj <<
+/D [584 0 R /XYZ 90 371.93 null]
>> endobj
-730 0 obj <<
-/D [740 0 R /XYZ 507.013 344.949 null]
+577 0 obj <<
+/D [584 0 R /XYZ 339.233 329.754 null]
>> endobj
-130 0 obj <<
-/D [740 0 R /XYZ 90 327.222 null]
+114 0 obj <<
+/D [584 0 R /XYZ 90 311.521 null]
>> endobj
-731 0 obj <<
-/D [740 0 R /XYZ 261.316 287.205 null]
+574 0 obj <<
+/D [584 0 R /XYZ 507.013 271.403 null]
>> endobj
-134 0 obj <<
-/D [740 0 R /XYZ 90 269.477 null]
+118 0 obj <<
+/D [584 0 R /XYZ 90 253.169 null]
>> endobj
-732 0 obj <<
-/D [740 0 R /XYZ 263.498 229.461 null]
+575 0 obj <<
+/D [584 0 R /XYZ 261.316 213.051 null]
>> endobj
-138 0 obj <<
-/D [740 0 R /XYZ 90 211.733 null]
+122 0 obj <<
+/D [584 0 R /XYZ 90 194.818 null]
>> endobj
-646 0 obj <<
-/D [740 0 R /XYZ 441.858 171.717 null]
+576 0 obj <<
+/D [584 0 R /XYZ 263.498 154.7 null]
>> endobj
-142 0 obj <<
-/D [740 0 R /XYZ 90 153.989 null]
+126 0 obj <<
+/D [584 0 R /XYZ 90 136.466 null]
>> endobj
-739 0 obj <<
-/Font << /F22 396 0 R /F23 397 0 R >>
+506 0 obj <<
+/D [584 0 R /XYZ 441.858 96.348 null]
+>> endobj
+583 0 obj <<
+/Font << /F22 292 0 R /F23 293 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-746 0 obj <<
-/Length 1072
+590 0 obj <<
+/Length 1093
/Filter /FlateDecode
>>
stream
-xWKo8W(kA/.R'k+"- Fmzx%iJw^Lro46V6Jxi=\J85LkH]lmm䬘Kf
-!&-g|aWp!B/4Ih}? x׀ ʍ#v<|F* 00Ԯp-ܘ+WbS2N
-OC#:`%tߢֆ7Wfef״ d.Ƃefl<yBAiK..mqQ/}Ax5`55 R+ [Lg:j
-B)M(#\\$]KN~p 5\uh Jx
+xWn8+KR`6.R'c+"- Fmzx$i×+URe0fss=Nvkc [=!bǩ~gx
+Ѓx72u5 8C'"?Y
+E@~?t":gP-Df$xH
+0Aul,O:tfJ钕-sJL o&r:2w*/WU@{I9TM@hS^1 Ӧ
+.)cpX$G<*Y9F&MSUguw$z#﹦sԯ/8B]O޲.m.&^͖A#ެ?/h+ /|ttQ^CYA[t8{ZYnk":YNӱpaEɨaaMV i(OHHt)ۏemBf==GMjM20[@wN6<b. #>pN%$|QY2Jx[PfJCSiTwٕLk=k_PX,֔"XzqC6}?YV*r?9rD9vL6
+
endstream
endobj
-745 0 obj <<
+589 0 obj <<
/Type /Page
-/Contents 746 0 R
-/Resources 744 0 R
+/Contents 590 0 R
+/Resources 588 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 748 0 R
-/Annots [ 743 0 R ]
+/Parent 535 0 R
+/Annots [ 587 0 R ]
>> endobj
-743 0 obj <<
+587 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [397.494 432.336 513.996 443.24]
+/Rect [397.494 412.695 513.996 423.599]
/A << /S /GoTo /D (aacdecoder__lib_8h_a245a0e4176fb886d890a86627c55bb24) >>
>> endobj
-747 0 obj <<
-/D [745 0 R /XYZ 89 770.89 null]
+591 0 obj <<
+/D [589 0 R /XYZ 89 770.89 null]
>> endobj
-738 0 obj <<
-/D [745 0 R /XYZ 90 692.566 null]
+130 0 obj <<
+/D [589 0 R /XYZ 90 739.935 null]
>> endobj
-146 0 obj <<
-/D [745 0 R /XYZ 90 678.544 null]
+582 0 obj <<
+/D [589 0 R /XYZ 252.171 652.321 null]
>> endobj
-736 0 obj <<
-/D [745 0 R /XYZ 90 618.946 null]
+134 0 obj <<
+/D [589 0 R /XYZ 90 635.506 null]
>> endobj
-150 0 obj <<
-/D [745 0 R /XYZ 90 604.923 null]
+580 0 obj <<
+/D [589 0 R /XYZ 466.663 593.203 null]
>> endobj
-615 0 obj <<
-/D [745 0 R /XYZ 440.382 565.106 null]
+138 0 obj <<
+/D [589 0 R /XYZ 90 574.33 null]
>> endobj
-154 0 obj <<
-/D [745 0 R /XYZ 90 548.926 null]
+475 0 obj <<
+/D [589 0 R /XYZ 440.382 534.085 null]
>> endobj
-734 0 obj <<
-/D [745 0 R /XYZ 90 489.329 null]
+142 0 obj <<
+/D [589 0 R /XYZ 90 515.212 null]
>> endobj
-158 0 obj <<
-/D [745 0 R /XYZ 90 475.306 null]
+578 0 obj <<
+/D [589 0 R /XYZ 443.043 474.967 null]
>> endobj
-737 0 obj <<
-/D [745 0 R /XYZ 90 403.753 null]
+146 0 obj <<
+/D [589 0 R /XYZ 90 456.094 null]
>> endobj
-162 0 obj <<
-/D [745 0 R /XYZ 90 389.73 null]
+581 0 obj <<
+/D [589 0 R /XYZ 454.119 403.893 null]
>> endobj
-735 0 obj <<
-/D [745 0 R /XYZ 90 330.132 null]
+150 0 obj <<
+/D [589 0 R /XYZ 90 385.997 null]
>> endobj
-166 0 obj <<
-/D [745 0 R /XYZ 90 316.109 null]
+579 0 obj <<
+/D [589 0 R /XYZ 399.875 344.775 null]
>> endobj
-645 0 obj <<
-/D [745 0 R /XYZ 373.594 276.292 null]
+154 0 obj <<
+/D [589 0 R /XYZ 90 325.903 null]
>> endobj
-170 0 obj <<
-/D [745 0 R /XYZ 90 260.113 null]
+505 0 obj <<
+/D [589 0 R /XYZ 373.594 285.657 null]
>> endobj
-644 0 obj <<
-/D [745 0 R /XYZ 282.307 208.341 null]
+158 0 obj <<
+/D [589 0 R /XYZ 90 266.785 null]
>> endobj
-174 0 obj <<
-/D [745 0 R /XYZ 90 192.161 null]
+504 0 obj <<
+/D [589 0 R /XYZ 282.307 214.584 null]
>> endobj
-725 0 obj <<
-/D [745 0 R /XYZ 291.194 152.344 null]
+162 0 obj <<
+/D [589 0 R /XYZ 90 195.712 null]
>> endobj
-178 0 obj <<
-/D [745 0 R /XYZ 90 136.165 null]
+568 0 obj <<
+/D [589 0 R /XYZ 291.194 155.466 null]
>> endobj
-723 0 obj <<
-/D [745 0 R /XYZ 377.928 96.348 null]
+166 0 obj <<
+/D [589 0 R /XYZ 90 136.594 null]
>> endobj
-744 0 obj <<
-/Font << /F22 396 0 R /F23 397 0 R /F11 584 0 R /F14 586 0 R >>
+566 0 obj <<
+/D [589 0 R /XYZ 377.928 96.348 null]
+>> endobj
+588 0 obj <<
+/Font << /F22 292 0 R /F23 293 0 R /F11 444 0 R /F14 446 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-752 0 obj <<
-/Length 418
+595 0 obj <<
+/Length 398
/Filter /FlateDecode
>>
stream
-xڕRMo0+|úcòlUmEd԰Z)Jr{
+xڕM0
+@89kWjp]U))-03*`zbC >we#"H1C
+P@Y)yKY(F:fܹ!z*e+ޓX=T2
+n7Ś+g1&L&φi\ּH?!u |mh6MMɷ
+f޵?ru3݁Uf- X lf+`ks5S|'~fX_7ou8/њݺ@,bPDTyv'w_naQC|Iz{gd_޾
endstream
endobj
-751 0 obj <<
+594 0 obj <<
/Type /Page
-/Contents 752 0 R
-/Resources 750 0 R
+/Contents 595 0 R
+/Resources 593 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 748 0 R
-/Annots [ 749 0 R ]
+/Parent 535 0 R
+/Annots [ 592 0 R ]
>> endobj
-749 0 obj <<
+592 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 642.603 183.28 652.53]
+/Rect [113.91 660.227 183.28 670.155]
/A << /S /GoTo /D (aacdecoder__lib_8h) >>
>> endobj
-753 0 obj <<
-/D [751 0 R /XYZ 89 770.89 null]
+596 0 obj <<
+/D [594 0 R /XYZ 89 770.89 null]
>> endobj
-182 0 obj <<
-/D [751 0 R /XYZ 90 739.935 null]
+170 0 obj <<
+/D [594 0 R /XYZ 90 739.935 null]
>> endobj
-750 0 obj <<
-/Font << /F22 396 0 R /F23 397 0 R >>
+593 0 obj <<
+/Font << /F22 292 0 R /F23 293 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-
-760 0 obj <<
-/Length 368
+604 0 obj <<
+/Length 717
/Filter /FlateDecode
>>
stream
-xڅMS0BzC=4iZˁo qMyMXכ,,A!YRK!O(rJ Ƅ0޲{G0'19,!XTvVmm9T9A񤠐qo@1B(RZWu1i~?–P:)L^<Pĩ/kt7swqeuAelEm1;Zs_"Η?}q a2VBFTeejva _M^bZWy?={.niہF~^v~E뻿>;uf0$3c#@0Me@ɲ` pT
+xڕT[k0~ϯ-]vdykQm%18vf˃GrnK;F]t."h<"i>g 1ÐI4_P$XsWjctL/οXQAP %16zRgZWFvH*0!sȐc!TPBTuų/Ws> EcOWv%8 YY:[w{Ʃ H5yS/|
+f2jD+5<:֥E]!bUQԼl4^] xOtSd&oMMFW9$ԧsX6j㒿un> "
+eR &l=5"8IB.!^\OM CH0CS)ks[]ƥj[$q4Ă@0ٟGH(Ck.3KY:mLiZOEf@1EoC0G٘V
+w#uYPµG[3viV.> Lr8&+p۲O.sصʃf)=|৵
+x $^,Wubc|h2IC:6wYg'\p|It.ѿدOJMG n~?G"0P
+oݤQ[:68 #;w'Ńpq S`kh#1]zeko{5^Ʃ
endstream
endobj
-759 0 obj <<
+603 0 obj <<
/Type /Page
-/Contents 760 0 R
-/Resources 758 0 R
+/Contents 604 0 R
+/Resources 602 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 748 0 R
-/Group 755 0 R
+/Parent 609 0 R
+/Group 598 0 R
+/Annots [ 599 0 R 600 0 R ]
>> endobj
-754 0 obj <<
+597 0 obj <<
/Type /XObject
/Subtype /Form
/FormType 1
/PTEX.FileName (./aacdecoder__lib_8h__incl.pdf)
/PTEX.PageNumber 1
-/PTEX.InfoDict 762 0 R
+/PTEX.InfoDict 610 0 R
/BBox [0 0 350 164]
-/Group 755 0 R
+/Group 598 0 R
/Resources <<
/ExtGState <<
/a0 <<
/CA 1
/ca 1
>>
->>/Font << /f-0-0 763 0 R>>
+>>/Font << /f-0-0 611 0 R>>
>>
/Length 589
/Filter /FlateDecode
@@ -3435,23 +2944,23 @@ xUMk1Wd> eRC!M┒;jM{FH3o'4EP
xi}ֲF2GQm9t;3Izl \)b|<g/e0uEP98Ӝ_Eein1&Z9 3806Sܯ2OcRt6LЧ0)&BKi:NNl4)10#X,=PPsT-yVL9xg!UimdxQ*5<ܴn ]gz3
endstream
endobj
-762 0 obj
+610 0 obj
<<
/Creator (cairo 1.8.10 \(http://cairographics.org\))
/Producer (cairo 1.8.10 \(http://cairographics.org\))
>>
endobj
-763 0 obj
+611 0 obj
<<
/Type /Font
/Subtype /Type0
/BaseFont /FreeSans
/Encoding /Identity-H
-/DescendantFonts [ 764 0 R]
-/ToUnicode 765 0 R
+/DescendantFonts [ 612 0 R]
+/ToUnicode 613 0 R
>>
endobj
-764 0 obj
+612 0 obj
<<
/Type /Font
/Subtype /CIDFontType2
@@ -3461,20 +2970,20 @@ endobj
/Ordering (Identity)
/Supplement 0
>>
-/FontDescriptor 766 0 R
+/FontDescriptor 614 0 R
/W [ 0 [ 500 556 500 556 556 556 333 556 222 222 556 278 556 833 556 278 500 556 611 722 667 556 556 667 500]]
>>
endobj
-765 0 obj
+613 0 obj
<<
-/Length 767 0 R
+/Length 615 0 R
/Filter /FlateDecode
>>
stream
x]Mn0=e@"!*ݰJ{
endstream
endobj
-766 0 obj
+614 0 obj
<<
/Type /FontDescriptor
/FontName /FreeSans
@@ -3486,15 +2995,15 @@ endobj
/CapHeight 1050
/StemV 80
/StemH 80
-/FontFile2 768 0 R
+/FontFile2 616 0 R
>>
endobj
-767 0 obj
+615 0 obj
328
endobj
-768 0 obj
+616 0 obj
<<
-/Length 769 0 R
+/Length 617 0 R
/Filter /FlateDecode
/Length1 2928
>>
@@ -3508,3720 +3017,3021 @@ xUVkpSݫmY˶l,-X%cɒ%@2-[1cBR )4i;s6i3%mf!?
hMA3')ū%)Z*@ʂJ
endstream
endobj
-769 0 obj
+617 0 obj
2185
endobj
-755 0 obj
+598 0 obj
<<
/Type /Group
/S /Transparency
/CS /DeviceRGB
>>endobj
-761 0 obj <<
-/D [759 0 R /XYZ 89 770.89 null]
+599 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [138.538 188.186 191.996 197.033]
+/A << /S /GoTo /D (structCStreamInfo) >>
>> endobj
-186 0 obj <<
-/D [759 0 R /XYZ 90 739.935 null]
+600 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [149.207 105.524 222.75 116.054]
+/A << /S /GoTo /D (aacdecoder__lib_8h_a388a21070208ec23217c4ff8f8d98754) >>
>> endobj
-546 0 obj <<
-/D [759 0 R /XYZ 90 553.953 null]
+605 0 obj <<
+/D [603 0 R /XYZ 89 770.89 null]
>> endobj
-190 0 obj <<
-/D [759 0 R /XYZ 90 553.953 null]
+174 0 obj <<
+/D [603 0 R /XYZ 90 739.935 null]
>> endobj
-758 0 obj <<
-/Font << /F22 396 0 R /F23 397 0 R /F37 543 0 R >>
-/XObject << /Im3 754 0 R >>
+413 0 obj <<
+/D [603 0 R /XYZ 90 553.953 null]
+>> endobj
+178 0 obj <<
+/D [603 0 R /XYZ 90 553.953 null]
+>> endobj
+606 0 obj <<
+/D [603 0 R /XYZ 90 204.466 null]
+>> endobj
+608 0 obj <<
+/D [603 0 R /XYZ 90 123.487 null]
+>> endobj
+602 0 obj <<
+/Font << /F22 292 0 R /F23 293 0 R /F37 410 0 R /F44 607 0 R /F11 444 0 R >>
+/XObject << /Im3 597 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-790 0 obj <<
-/Length 1074
+659 0 obj <<
+/Length 1046
/Filter /FlateDecode
>>
stream
-xWkF_1RKevfxDVY'Nm6U5. ٮ{afl;6% s;Cj[J]ZȿE.Ae`N GFLЩj$SN^6[-$KVo}mIQ6Mf'"h6]=TQ Ĩ 9~k5sG
-}$˽]gmʵ>7 XGIϊxrqMf{HXÉLϫ*WPAi@ ;87ˬR-]2iR^b`8yTVZ8R<NL )^w.F} [zCbfBbJ1\tH)oA7:' {f|S$IS֝y.mvTc+i
-9ށo{d# <c5<%NtɌM㮫 A2i3'[`y](6wB0m㪥, Qa8 I"Y,0/6=k8dpw?^iuᡈ4*$~#'m,RRl9/P|`egYf3tI/wntE1wS)&4A')_}0 {' %kCɎU奸v:et˂ ojr
-m)5?ޣ7l9tܖO*`9;de_QWD`}wGGU"VKk=oL{GmW?l( (]S@1+ D)U31`1{F`#\ =ԦP԰K4¡=EOT 9{-١m
-P.r8J㛫վlrY#|(59 x t-}8BOb\{oqV߽ScP;1շף
+xڽXoHJ'U ǩKB*Pd*U9l)Hm2{fb>!.Gxa Ԙ$H(挢x%Fk(&MUK*'a>]oow,t$?#
+<ױp] h_#@QHe
+A)E"%V `t"JoagFjdasɍHD*(tC8I7xr~OvazU!pKCúYI{Q Rwd毇U@Ml^381t38&Ɣb&!QK׫ "G?BT~F*~{mV523lh
+5lB B
+'iՓ-ibpv+Ԇs Y2x];2D}`eg@C(pfq60>l&b׃ xp!taF}uTȚ=׿ ^OuM¤[f
+#'{Vh';Yeb
+25 Ey*mÛk~fɬ%?} = cv,՞\B$ bX%EcM()Ӂ?^lvwӆ5 Zιjкy(Cv\D@f(X'33W<
endstream
endobj
-789 0 obj <<
+658 0 obj <<
/Type /Page
-/Contents 790 0 R
-/Resources 788 0 R
+/Contents 659 0 R
+/Resources 657 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 748 0 R
-/Group 757 0 R
-/Annots [ 770 0 R 771 0 R 772 0 R 773 0 R 774 0 R 775 0 R 776 0 R 777 0 R 778 0 R 779 0 R 780 0 R 781 0 R 782 0 R 783 0 R 784 0 R 785 0 R ]
->> endobj
-756 0 obj <<
-/Type /XObject
-/Subtype /Form
-/FormType 1
-/PTEX.FileName (./aacdecoder__lib_8h__dep__incl.pdf)
-/PTEX.PageNumber 1
-/PTEX.InfoDict 797 0 R
-/BBox [0 0 170 164]
-/Group 757 0 R
-/Resources <<
-/ExtGState <<
-/a0 <<
-/CA 1
-/ca 1
->>
->>/Font << /f-0-0 798 0 R>>
->>
-/Length 337
-/Filter /FlateDecode
->>
-stream
-xSj0WXKP|BBiHĔY4˓|%A;C
-endstream
-endobj
-797 0 obj
-<<
-/Creator (cairo 1.8.10 \(http://cairographics.org\))
-/Producer (cairo 1.8.10 \(http://cairographics.org\))
->>
-endobj
-798 0 obj
-<<
-/Type /Font
-/Subtype /Type0
-/BaseFont /FreeSans
-/Encoding /Identity-H
-/DescendantFonts [ 799 0 R]
-/ToUnicode 800 0 R
->>
-endobj
-799 0 obj
-<<
-/Type /Font
-/Subtype /CIDFontType2
-/BaseFont /FreeSans
-/CIDSystemInfo <<
-/Registry (Adobe)
-/Ordering (Identity)
-/Supplement 0
->>
-/FontDescriptor 801 0 R
-/W [ 0 [ 500 556 500 556 556 556 333 556 222 222 556 278 556 833 556 556]]
->>
-endobj
-800 0 obj
-<<
-/Length 802 0 R
-/Filter /FlateDecode
->>
-stream
-x]j0
-ҁt IGRI*ItJ:sR.)IWҕ$H[]T IRBR$EBҖYjymm~cr>53MsظZ_<O
-endstream
-endobj
-801 0 obj
-<<
-/Type /FontDescriptor
-/FontName /FreeSans
-/Flags 4
-/FontBBox [ -958 -462 1632 1050]
-/ItalicAngle 0
-/Ascent 1000
-/Descent -300
-/CapHeight 1050
-/StemV 80
-/StemH 80
-/FontFile2 803 0 R
->>
-endobj
-802 0 obj
-287
-endobj
-803 0 obj
-<<
-/Length 804 0 R
-/Filter /FlateDecode
-/Length1 2112
->>
-stream
-xUUmLSW~Ϲm|:o)V>ZA
-ZڋRT.1Df%[2EWgɌY˲ef?˒f1cY4k[0Q{n {s{=ys
-\5&Vb_ƚ55m%Xn"y\ʲաh׎,"qQ
-{SêFu^M\ӵYK:B
-5*5_\l96TDs9
-֧VUp_'5v87YmVmtbp}ug<L_ES;jjIkZE:'y_4MwE?<9zS) hUxI~*-RzDPX_&A Yu;1J>~86E(D%pH`l*amDH+MI9%U2u6lv6XVbuol)q"AVɃ=*KiYXn Xa2,GD/8ڑvJcFRH"f8&JgΥu,0+V49tTDZ:|i\jaVOl$t󗧽ғgBPv b|)%࣎c]M̰ k?̗Εk8!+%pc}_L|)S2!8s|7\
-,B +$u
-%m <AȻ℟ .鱊嘸K |W*iWh42G)
-endstream
-endobj
-804 0 obj
-1551
-endobj
-757 0 obj
-<<
-/Type /Group
-/S /Transparency
-/CS /DeviceRGB
->>endobj
-770 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [138.538 484.491 191.996 493.338]
-/A << /S /GoTo /D (structCStreamInfo) >>
->> endobj
-771 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [149.207 400.747 222.75 411.278]
-/A << /S /GoTo /D (aacdecoder__lib_8h_a388a21070208ec23217c4ff8f8d98754) >>
+/Parent 609 0 R
+/Annots [ 601 0 R 619 0 R 620 0 R 621 0 R 622 0 R 623 0 R 624 0 R 625 0 R 626 0 R 627 0 R 628 0 R 629 0 R 630 0 R 631 0 R 632 0 R 633 0 R 634 0 R 635 0 R 636 0 R 637 0 R 638 0 R 639 0 R 640 0 R 641 0 R 642 0 R 643 0 R 644 0 R 645 0 R 646 0 R 647 0 R 648 0 R 649 0 R 650 0 R 651 0 R 652 0 R 653 0 R ]
>> endobj
-772 0 obj <<
+601 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [145.779 376.08 239.806 386.611]
+/Rect [145.779 727.192 239.806 737.723]
/A << /S /GoTo /D (aacdecoder__lib_8h_ac2c358d4ac0d7747cae32f9f45c20f71) >>
>> endobj
-773 0 obj <<
+619 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [145.731 350.706 235.474 362.661]
+/Rect [145.731 701.663 235.474 713.618]
/A << /S /GoTo /D (aacdecoder__lib_8h_af59d78a4583ca81ccb2675dce592b812) >>
>> endobj
-774 0 obj <<
+620 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [145.731 339.304 240.306 349.232]
+/Rect [145.731 690.107 240.306 700.034]
/A << /S /GoTo /D (aacdecoder__lib_8h_ae09502f250437ee519971ca3a95ac9e0) >>
>> endobj
-775 0 obj <<
+621 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [145.731 326.592 224.814 336.52]
+/Rect [145.731 677.24 224.814 687.168]
/A << /S /GoTo /D (aacdecoder__lib_8h_a8bc17277db0f7651065f62d66f92ed9f) >>
>> endobj
-776 0 obj <<
+622 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [145.731 313.881 216.505 323.808]
+/Rect [145.731 664.373 216.505 674.301]
/A << /S /GoTo /D (aacdecoder__lib_8h_abc8ebc3d720699fe1d7c27eccd3da051) >>
>> endobj
-777 0 obj <<
+623 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [145.731 301.169 234.776 311.096]
+/Rect [145.731 651.507 234.776 661.434]
/A << /S /GoTo /D (aacdecoder__lib_8h_a4666e424f482470e872827f66399454a) >>
>> endobj
-778 0 obj <<
+624 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [306.836 243.796 422.432 254.699]
+/Rect [306.836 593.839 422.432 604.743]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa9ba2e98e71adc41124eaf8d6e5d6f2d) >>
>> endobj
-779 0 obj <<
+625 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [138.538 187.772 250.986 198.303]
+/Rect [138.538 537.522 250.986 548.052]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41) >>
>> endobj
-780 0 obj <<
+626 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 172.415 180.809 182.602]
+/Rect [113.91 522.01 180.809 532.197]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a71440b5535812faf92a0fe99275dd5f0) >>
>> endobj
-781 0 obj <<
+627 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 156.715 253.775 166.901]
+/Rect [113.91 506.154 253.775 516.341]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41afdf896f1fefa0b962ef99c6cb2681027) >>
>> endobj
-782 0 obj <<
+628 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 141.014 218.637 151.201]
+/Rect [113.91 490.299 218.637 500.486]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41af1e591927344a1a91c49b87efe3fb0b9) >>
>> endobj
-783 0 obj <<
+629 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 124.596 217.7 135.5]
+/Rect [113.91 473.726 217.7 484.63]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a4a877298c7076e5ef4dd848912ab1d48) >>
>> endobj
-784 0 obj <<
+630 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 109.613 293.297 119.8]
+/Rect [113.91 458.588 293.297 468.775]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41adbb894fd8e900c4993f57ae88f8aee1a) >>
>> endobj
-785 0 obj <<
+631 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 93.912 260.102 104.099]
+/Rect [113.91 442.733 260.102 452.919]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41ad8e91a23786bc032e507dfbd036f63c4) >>
>> endobj
-791 0 obj <<
-/D [789 0 R /XYZ 89 770.89 null]
->> endobj
-792 0 obj <<
-/D [789 0 R /XYZ 90 501.144 null]
->> endobj
-794 0 obj <<
-/D [789 0 R /XYZ 90 419.084 null]
->> endobj
-795 0 obj <<
-/D [789 0 R /XYZ 90 260.222 null]
->> endobj
-796 0 obj <<
-/D [789 0 R /XYZ 90 206.109 null]
->> endobj
-788 0 obj <<
-/Font << /F22 396 0 R /F23 397 0 R /F44 793 0 R /F11 584 0 R /F14 586 0 R >>
-/XObject << /Im4 756 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-861 0 obj <<
-/Length 871
-/Filter /FlateDecode
->>
-stream
-xڭ[o0+|H,n@N84&ݘu+8'i95_
-5qܩppPDJ?gF⬲wބG"ªV
-AAFk:T Ji$ <$#ƒ_UVee!nѻx ɂs(S$uyQ%Ystd5&4/U4ySWG}s]{Yӱe הdۀS4-F9]-[mO;wƳ# ² hJ?cl?dCI|yi[bk<rêRy1 rJZxB__8is=J a:/ASYU@|(-E!w9*Կix93 }uF.
-endstream
-endobj
-860 0 obj <<
-/Type /Page
-/Contents 861 0 R
-/Resources 859 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 748 0 R
-/Annots [ 786 0 R 787 0 R 819 0 R 820 0 R 821 0 R 822 0 R 823 0 R 824 0 R 825 0 R 826 0 R 827 0 R 828 0 R 829 0 R 830 0 R 831 0 R 832 0 R 833 0 R 834 0 R 835 0 R 836 0 R 837 0 R 838 0 R 839 0 R 840 0 R 841 0 R 842 0 R 843 0 R 844 0 R 845 0 R 846 0 R 847 0 R 848 0 R 849 0 R 850 0 R 851 0 R 852 0 R 853 0 R 854 0 R 855 0 R ]
->> endobj
-786 0 obj <<
+632 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 726.819 214.931 737.723]
+/Rect [113.91 426.16 214.931 437.064]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41ac806692e8a98e9baca1bca5f7d9df0cd) >>
>> endobj
-787 0 obj <<
+633 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 711.468 212.729 721.655]
+/Rect [113.91 411.022 212.729 421.208]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41aa86450161814b428d08b620188302fbc) >>
>> endobj
-819 0 obj <<
+634 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 695.4 252.5 705.587]
+/Rect [113.91 395.166 252.5 405.353]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a242d8bc09683a84b578546663dda36fa) >>
>> endobj
-820 0 obj <<
+635 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 679.332 261.735 689.519]
+/Rect [113.91 379.311 261.735 389.497]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a7ea36c43c374f751f65be033057e3888) >>
>> endobj
-821 0 obj <<
+636 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 663.264 282.617 673.451]
+/Rect [113.91 363.455 282.617 373.642]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a4dff2410394a6ffdf0f95ec66cbd0107) >>
>> endobj
-822 0 obj <<
+637 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 647.196 300.33 657.383]
+/Rect [113.91 347.6 300.33 357.786]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41ae6d7add4f73779b26c859900f710c34f) >>
>> endobj
-823 0 obj <<
+638 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 631.128 290.916 641.315]
+/Rect [113.91 331.744 290.916 341.931]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a95dafb71a0623fbeb0715e46b7a189c7) >>
>> endobj
-824 0 obj <<
+639 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 615.061 304.993 625.247]
+/Rect [113.91 315.889 304.993 326.075]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a97113255d01bdf3cc7104dd411f40949) >>
>> endobj
-825 0 obj <<
+640 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 598.993 326.881 609.179]
+/Rect [113.91 300.033 326.881 310.22]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a5bc4e4af77d94fa08beb54def8f01f7f) >>
>> endobj
-826 0 obj <<
+641 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 582.925 318.034 593.111]
+/Rect [113.91 284.178 318.034 294.365]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a0bd193ee6a8c3151c5c6469f7e455a8e) >>
>> endobj
-827 0 obj <<
+642 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 566.857 272.445 577.043]
+/Rect [113.91 268.322 272.445 278.509]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41afbf7d7d96fdf87cb5f7541348a597b48) >>
>> endobj
-828 0 obj <<
+643 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 550.789 250.009 560.975]
+/Rect [113.91 252.467 250.009 262.654]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a4dbbe3b38d0dfb444fdc3a7adae2f807) >>
>> endobj
-829 0 obj <<
+644 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 534.721 258.807 544.907]
+/Rect [113.91 236.611 258.807 246.798]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a8aa244ce1ae08763dde378161df0652f) >>
>> endobj
-830 0 obj <<
+645 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 518.653 209.959 528.839]
+/Rect [113.91 220.756 209.959 230.943]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a60690e0dbc450f62f83548fa484716ab) >>
>> endobj
-831 0 obj <<
+646 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 502.585 227.653 512.772]
+/Rect [113.91 204.901 227.653 215.087]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a42c5cbc358ada7261ba3d609c33ec3a5) >>
>> endobj
-832 0 obj <<
+647 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 486.517 261.745 496.704]
+/Rect [113.91 189.045 261.745 199.232]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41ae36383b7f8b4f36072eb60a303c439c3) >>
>> endobj
-833 0 obj <<
+648 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 470.449 234.308 480.636]
+/Rect [113.91 173.19 234.308 183.376]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41ac8bc8e0a106154098f730ba596c43c50) >>
>> endobj
-834 0 obj <<
+649 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 454.381 348.36 464.568]
+/Rect [113.91 157.334 348.36 167.521]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41ac12235e2fee27efdcc78f2946f86e4ab) >>
>> endobj
-835 0 obj <<
+650 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 438.313 283.922 448.5]
+/Rect [113.91 141.479 283.922 151.665]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a0357ce81d9d62cc106c752121fc9dc8a) >>
>> endobj
-836 0 obj <<
+651 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 422.245 224.156 432.432]
+/Rect [113.91 125.623 224.156 135.81]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a20cdc26726b22cb44143b4e440441e0f) >>
>> endobj
-837 0 obj <<
+652 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 406.177 271.877 416.364]
+/Rect [113.91 109.768 271.877 119.954]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41acb4252bc9a6eeee71738af951850379c) >>
>> endobj
-838 0 obj <<
+653 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 390.109 301.426 400.296]
+/Rect [113.91 93.912 301.426 104.099]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41aa14848134610eea96115c59a6b944921) >>
>> endobj
-839 0 obj <<
+660 0 obj <<
+/D [658 0 R /XYZ 89 770.89 null]
+>> endobj
+661 0 obj <<
+/D [658 0 R /XYZ 90 610.421 null]
+>> endobj
+662 0 obj <<
+/D [658 0 R /XYZ 90 556.013 null]
+>> endobj
+657 0 obj <<
+/Font << /F22 292 0 R /F23 293 0 R /F11 444 0 R /F14 446 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+736 0 obj <<
+/Length 1132
+/Filter /FlateDecode
+>>
+stream
+xڵr8z
+ɪEn!)ϤJhd:#˕Lͻ%d˔. ƏnXVr6ӀRAIMRX&A%JP.U Xr~(bXE5ol\kVj.&*%݈GX!5Ű e~3<`[VQtʠ])7߯ہBt`K(<hJ=sOL|IX-/<6vvmcli{=!&º ^;8g$^쓄—BBs\3ƌ~xsq<k0LX1XPVhV(۵( IBfͬmfͳ c<$`n=Vہ&rDc`uH_c!x\}4y듇-Q_կkO]WlH^'J@ ?dg3J0A oГ_|B)2u
+0i=D듁V Vu;#rBR͡So06MYNH$"b< 9
+;_5nƠ@f{{>oϲn5a5 )*dH?FD=LǨ8W4s1$[pA YphAm:m϶bJ\G69D^' 8oKh9[0j\fZAx
+endstream
+endobj
+735 0 obj <<
+/Type /Page
+/Contents 736 0 R
+/Resources 734 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 609 0 R
+/Annots [ 654 0 R 655 0 R 656 0 R 698 0 R 699 0 R 700 0 R 701 0 R 702 0 R 703 0 R 704 0 R 705 0 R 706 0 R 707 0 R 708 0 R 709 0 R 710 0 R 711 0 R 712 0 R 713 0 R 714 0 R 715 0 R 716 0 R 717 0 R 718 0 R 719 0 R 720 0 R 721 0 R 722 0 R 723 0 R 724 0 R 725 0 R 726 0 R 727 0 R 728 0 R 729 0 R ]
+>> endobj
+654 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 374.041 261.586 384.228]
+/Rect [113.91 727.536 261.586 737.723]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a45662b23139ca5807ed6fe3b8940dc40) >>
>> endobj
-840 0 obj <<
+655 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 357.973 259.922 368.16]
+/Rect [113.91 711.489 259.922 721.676]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41af61dc054946b313e1780cf604ca833c6) >>
>> endobj
-841 0 obj <<
+656 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 341.905 348.948 352.092]
+/Rect [113.91 695.442 348.948 705.629]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41af16b1992a2a415168ab96228671ef337) >>
>> endobj
-842 0 obj <<
+698 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 325.837 261.237 336.024]
+/Rect [113.91 679.395 261.237 689.582]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a77f722abc6c05f1abf1f51c0d11bf7ec) >>
>> endobj
-843 0 obj <<
+699 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 309.769 255.14 319.956]
+/Rect [113.91 663.348 255.14 673.535]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a516287ad9b64c230200191fdd60361e1) >>
>> endobj
-844 0 obj <<
+700 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 293.702 229.995 303.888]
+/Rect [113.91 647.301 229.995 657.488]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41abb11196531beac7285326a5394db0329) >>
>> endobj
-845 0 obj <<
+701 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 277.634 224.883 287.82]
+/Rect [113.91 631.254 224.883 641.441]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a8bf90eccdaf6063e299f9415c8bd5d1a) >>
>> endobj
-846 0 obj <<
+702 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 261.566 234.846 271.752]
+/Rect [113.91 615.207 234.846 625.394]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a856cdca9aa719c292b7c351cec03ae06) >>
>> endobj
-847 0 obj <<
+703 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 245.498 255.469 255.684]
+/Rect [113.91 599.16 255.469 609.347]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a65820f534b99b1529510720eeaafc861) >>
>> endobj
-848 0 obj <<
+704 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 229.43 294.004 239.616]
+/Rect [113.91 583.113 294.004 593.3]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a72f0dd3698012cdf8b20dd6f0b5de626) >>
>> endobj
-849 0 obj <<
+705 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 213.362 305.152 223.548]
+/Rect [113.91 567.066 305.152 577.252]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41aea6be518456d203d68898efd236a6769) >>
>> endobj
-850 0 obj <<
+706 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 196.95 232.076 207.48]
+/Rect [113.91 550.675 232.076 561.205]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41ae2ac2caa02bbffb8ace0fa87ad5ffc05) >>
>> endobj
-851 0 obj <<
+707 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [138.538 157.84 220.58 168.371]
+/Rect [138.538 511.607 220.58 522.138]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88) >>
>> endobj
-852 0 obj <<
+708 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 142.116 279.638 152.303]
+/Rect [113.91 495.904 279.638 506.09]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a6e3fa0b7d247c98f132edd55187f9c0c) >>
>> endobj
-853 0 obj <<
+709 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 126.048 264.943 136.235]
-/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88aefc0ded1aea7e08f3c9c55df76c75668) >>
+/Rect [113.91 479.857 325.964 490.043]
+/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88aee866642a3f335e7874a82939ad0c135) >>
>> endobj
-854 0 obj <<
+710 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 109.98 325.964 120.167]
-/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88aee866642a3f335e7874a82939ad0c135) >>
+/Rect [113.91 463.81 309.217 473.996]
+/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88ab49a2169c22ea876c67154d6caa04568) >>
>> endobj
-855 0 obj <<
+711 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 93.912 309.217 104.099]
-/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88ab49a2169c22ea876c67154d6caa04568) >>
+/Rect [113.91 447.763 251.862 457.949]
+/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88ab011b48e5d9f5648c400ee632c151197) >>
>> endobj
-862 0 obj <<
-/D [860 0 R /XYZ 89 770.89 null]
+712 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.91 431.716 280.216 441.902]
+/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88ad2733233519a726ef7501d89918921c5) >>
>> endobj
-859 0 obj <<
-/Font << /F22 396 0 R /F23 397 0 R /F44 793 0 R >>
-/ProcSet [ /PDF /Text ]
+713 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.91 415.669 279.887 425.855]
+/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a55c37bcd32cb04728f48e1b2896967f7) >>
>> endobj
-934 0 obj <<
-/Length 1923
-/Filter /FlateDecode
->>
-stream
-xYKs6WVr&bЃ,S["d(STD(v:]
- G?Cme W>@7Km2|߲,g˱ٲ(6:B8x!EX=<ZhVY`+z=6d Hƨ+5ֹihG(L4MZjgЇͻ>w5jk`ޕ?vl-5FWblt&KضCh +u{LUM]7R,;uOx"ƞَBM* Z7K4D'WGH2&Qr1YnCZ
-gc<ϯ@((h)7glց #@JJ HL`VU1]ʳP1}@#` |szAl'.!}%k8N&&_1"k}þjc:ǕUM7oHpQ<F2ecyiέlyw'CFTAq|GBj?,ueѬ꙯Vw<
-q1dkM0f4ٔK:Ygy&xQ1Lw|)xDt19exA#HOO2N`T?*+0;EE[7Ѭ|ޝtTo_B魶EIA@2C&4l#E5& K%juib
-k:Z߻1qq<CN]bR6SVOԭ*;{[%=%l*d\$Y k]n&B;zV -rQ.. EO
-=͆wup(%V0(P<
-e[4*FJ6=q7[aI0[!ΥN!'|~_=ëկ< K}ZE\(MGsi
-1֜6C|XOUB*Zk'DKPĨy9rmm'K޾ӟg(XΑb9B>4d#2cm"o&"Dz2M1wjK9QՃ44}@ :FQu+^{y"`EĊ-Y!:LIj0#aNj\LdSN⨼,EQ,
-ȁq&G
-endstream
-endobj
-933 0 obj <<
-/Type /Page
-/Contents 934 0 R
-/Resources 932 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 748 0 R
-/Annots [ 856 0 R 857 0 R 858 0 R 900 0 R 901 0 R 902 0 R 903 0 R 904 0 R 905 0 R 906 0 R 907 0 R 908 0 R 909 0 R 910 0 R 911 0 R 912 0 R 913 0 R 937 0 R 914 0 R 915 0 R 916 0 R 917 0 R 938 0 R 918 0 R 919 0 R 920 0 R 921 0 R 922 0 R 923 0 R 924 0 R 925 0 R 926 0 R 927 0 R 928 0 R 929 0 R 939 0 R ]
+714 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.91 399.622 289.292 409.808]
+/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a5cec20e1dd4ac89472ad60d3d0c8b5c1) >>
>> endobj
-856 0 obj <<
+715 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 727.536 236.151 737.723]
+/Rect [113.91 383.575 293.167 393.761]
+/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a5e080429e4eaec068ba64c17152ee805) >>
+>> endobj
+716 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [113.91 367.528 236.151 377.714]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a28dd853ab4339011893a933020ac5ab8) >>
>> endobj
-857 0 obj <<
+717 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 711.366 242.607 721.553]
+/Rect [113.91 351.481 242.607 361.667]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a6056e5b76cc6a00078388445b1f1cfa1) >>
>> endobj
-858 0 obj <<
+718 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 695.196 278.164 705.382]
+/Rect [113.91 335.433 278.164 345.62]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a65284784865f22d79700dc268f84e374) >>
>> endobj
-900 0 obj <<
+719 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 679.025 260.52 689.212]
+/Rect [113.91 319.386 260.52 329.573]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88af24d28dac8b5de47c00c578712d0591e) >>
>> endobj
-901 0 obj <<
+720 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 662.855 275.224 673.042]
+/Rect [113.91 303.339 275.224 313.526]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a4392100c924c0f20a706f55bc7ab3931) >>
>> endobj
-902 0 obj <<
+721 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 646.341 224.943 656.871]
+/Rect [113.91 286.949 224.943 297.479]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a605a8fed5c5754dffc63775cc702aae7) >>
>> endobj
-903 0 obj <<
+722 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 630.514 218.657 640.701]
+/Rect [113.91 271.245 218.657 281.432]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88af84565b78a6ae180e316dd612a0877a7) >>
>> endobj
-904 0 obj <<
+723 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 614.001 253.237 624.531]
+/Rect [113.91 254.855 253.237 265.385]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88aa1a5a121f8b03708d9fdcc06f6e882fb) >>
>> endobj
-905 0 obj <<
+724 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [176.92 530.164 289.367 540.695]
+/Rect [176.92 171.598 289.367 182.128]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41) >>
>> endobj
-906 0 obj <<
+725 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [290.609 530.164 393.841 540.695]
+/Rect [290.609 171.598 393.841 182.128]
/A << /S /GoTo /D (aacdecoder__lib_8h_a8f33403449b41e6a9deda6cb1e07d386) >>
>> endobj
-907 0 obj <<
+726 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [398.4 530.164 513.996 540.695]
+/Rect [398.4 171.598 513.996 182.128]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa9ba2e98e71adc41124eaf8d6e5d6f2d) >>
>> endobj
-908 0 obj <<
+727 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [176.737 478.895 289.185 489.425]
+/Rect [176.737 120.575 289.185 131.105]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41) >>
>> endobj
-909 0 obj <<
+728 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [290.244 478.895 394.023 489.425]
+/Rect [290.244 120.575 394.023 131.105]
/A << /S /GoTo /D (aacdecoder__lib_8h_a404dd0b9b627d3e9ab765dba98be3eec) >>
>> endobj
-910 0 obj <<
+729 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [398.4 478.895 513.996 489.425]
+/Rect [398.4 120.575 513.996 131.105]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa9ba2e98e71adc41124eaf8d6e5d6f2d) >>
>> endobj
-911 0 obj <<
+737 0 obj <<
+/D [735 0 R /XYZ 89 770.89 null]
+>> endobj
+738 0 obj <<
+/D [735 0 R /XYZ 90 190.281 null]
+>> endobj
+734 0 obj <<
+/Font << /F22 292 0 R /F23 293 0 R /F44 607 0 R /F14 446 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+793 0 obj <<
+/Length 1995
+/Filter /FlateDecode
+>>
+stream
+xY[8~_R6}KR]3u$Ҫ9$h dLucC$)U>>w>6,R-0lt(fKNmX`ǁErt'ѣpҒq
+ҫ+F$;3=h7K[eמ$V)6ѦW^YJs-*5mkL桂_)u62Kϱ,h0fZi;t%D h0MD <LZ\ϭ:0
+eϧQhG9vu_-
+(_ԉѼ'#⛶h=B
+\זM106F-KUqp6*}Q CizʧkShoK(T e=3z^>qE˨8J-RKp<|OcƐŐ} |Rj.M@vJUn0OT,d7Nxy*(ZaPK߯ 뫷S+*v/RR(j! MGHUgG+s9ey9ޖͤ4X(/ނR_ɏ'cX< #
+4\lolz…aO]0\9[qMz?鴢Z}ds=QrH$JFRQLj e.øLE<=b9$|,Ԓ/)<{/bg]Ƃ}XE DӁ4Ddy۴DmnxN. %.-yFK Sl96NlM\(E W"VRy={ىt
+t vm($ 0Np^-/+]ˢ}e}֋y|/pR=i Gⴷ𵉽%=-r.V*ġ8q)*NgP/,R{ #'ue`Â`VAVXW&jY
+(TeZ yKdXa}r8J2d?{yPt8;'گ y^`JE"`C@W\cm#2:XE\ug]ǪG(P'^ռ]%Y
+;UN\{8Y(]!^dCO/Ca'@}>'vL۫5:*Hu
+E-2AzW *yKOЪӐ {(O蝲2ۗꀿkl+,_
+endstream
+endobj
+792 0 obj <<
+/Type /Page
+/Contents 793 0 R
+/Resources 791 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 609 0 R
+/Annots [ 730 0 R 731 0 R 732 0 R 795 0 R 733 0 R 768 0 R 769 0 R 770 0 R 796 0 R 771 0 R 772 0 R 773 0 R 774 0 R 775 0 R 776 0 R 777 0 R 778 0 R 779 0 R 780 0 R 781 0 R 797 0 R 782 0 R 783 0 R 784 0 R 785 0 R 786 0 R 787 0 R 788 0 R 789 0 R ]
+>> endobj
+730 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [189.738 427.625 302.186 438.155]
+/Rect [189.738 714.591 302.186 725.121]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41) >>
>> endobj
-912 0 obj <<
+731 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [316.246 427.625 408.27 438.155]
+/Rect [316.246 714.591 408.27 725.121]
/A << /S /GoTo /D (aacdecoder__lib_8h_afb42ea8892dd828264bd2f6147e0559f) >>
>> endobj
-913 0 obj <<
+732 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [462.759 427.625 513.996 438.155]
+/Rect [462.759 714.591 513.996 725.121]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa9ba2e98e71adc41124eaf8d6e5d6f2d) >>
>> endobj
-937 0 obj <<
+795 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 415.296 183.579 426.2]
+/Rect [113.91 702.262 183.579 713.166]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa9ba2e98e71adc41124eaf8d6e5d6f2d) >>
>> endobj
-914 0 obj <<
+733 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [226.965 415.296 309.007 426.2]
+/Rect [226.965 702.262 309.007 713.166]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88) >>
>> endobj
-915 0 obj <<
+768 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [185.554 375.982 298.002 386.886]
+/Rect [185.554 664.107 298.002 675.011]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41) >>
>> endobj
-916 0 obj <<
+769 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [307.877 375.982 416.648 386.886]
+/Rect [307.877 664.107 416.648 675.011]
/A << /S /GoTo /D (aacdecoder__lib_8h_a15da43e47179e3ca7b58d6b08620533e) >>
>> endobj
-917 0 obj <<
+770 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [462.759 375.982 513.996 386.886]
+/Rect [462.759 664.107 513.996 675.011]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa9ba2e98e71adc41124eaf8d6e5d6f2d) >>
>> endobj
-938 0 obj <<
+796 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 364.027 183.579 374.931]
+/Rect [113.91 652.152 183.579 663.056]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa9ba2e98e71adc41124eaf8d6e5d6f2d) >>
>> endobj
-918 0 obj <<
+771 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [183.116 324.712 298.712 335.616]
+/Rect [183.116 613.998 298.712 624.901]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa9ba2e98e71adc41124eaf8d6e5d6f2d) >>
>> endobj
-919 0 obj <<
+772 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [306.149 324.712 381.715 335.616]
+/Rect [306.149 613.998 381.715 624.901]
/A << /S /GoTo /D (aacdecoder__lib_8h_ac8580fe563e79afe695d7b0b32ea0fed) >>
>> endobj
-920 0 obj <<
+773 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [178.254 273.443 290.702 284.347]
+/Rect [178.254 563.888 290.702 574.792]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41) >>
>> endobj
-921 0 obj <<
+774 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [293.278 273.443 392.505 284.347]
+/Rect [293.278 563.888 392.505 574.792]
/A << /S /GoTo /D (aacdecoder__lib_8h_a6016435b8679d2793078b10ecaf3d05d) >>
>> endobj
-922 0 obj <<
+775 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [398.4 273.443 513.996 284.347]
+/Rect [398.4 563.888 513.996 574.792]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa9ba2e98e71adc41124eaf8d6e5d6f2d) >>
>> endobj
-923 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [175.618 261.488 195.314 272.391]
-/A << /S /GoTo /D (main_8cpp_a93d34427c5ada45032539b77c78ab2f6) >>
->> endobj
-924 0 obj <<
+776 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [180.74 189.67 293.188 200.2]
+/Rect [180.74 481.275 293.188 491.805]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41) >>
>> endobj
-925 0 obj <<
+777 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [298.25 189.67 366.085 200.2]
+/Rect [298.25 481.275 366.085 491.805]
/A << /S /GoTo /D (aacdecoder__lib_8h_a6d508fce68c364f5dabc9195e701ecf8) >>
>> endobj
-926 0 obj <<
+778 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [374.469 189.67 490.065 200.2]
+/Rect [374.469 481.275 490.065 491.805]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa9ba2e98e71adc41124eaf8d6e5d6f2d) >>
>> endobj
-927 0 obj <<
+779 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [196.154 105.524 308.602 116.054]
+/Rect [196.154 398.288 308.602 408.818]
/A << /S /GoTo /D (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41) >>
>> endobj
-928 0 obj <<
+780 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [329.078 105.524 438.945 116.054]
+/Rect [329.078 398.288 438.945 408.818]
/A << /S /GoTo /D (aacdecoder__lib_8h_a245a0e4176fb886d890a86627c55bb24) >>
>> endobj
-929 0 obj <<
+781 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [462.759 105.524 513.996 116.054]
+/Rect [462.759 398.288 513.996 408.818]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa9ba2e98e71adc41124eaf8d6e5d6f2d) >>
>> endobj
-939 0 obj <<
+797 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [113.91 93.195 183.579 104.099]
+/Rect [113.91 385.959 183.579 396.863]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa9ba2e98e71adc41124eaf8d6e5d6f2d) >>
>> endobj
-935 0 obj <<
-/D [933 0 R /XYZ 89 770.89 null]
->> endobj
-936 0 obj <<
-/D [933 0 R /XYZ 90 548.971 null]
->> endobj
-932 0 obj <<
-/Font << /F22 396 0 R /F23 397 0 R /F44 793 0 R /F14 586 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-963 0 obj <<
-/Length 1296
-/Filter /FlateDecode
->>
-stream
-xWY6~P ̐聍wݧ$h^ DwxH+{}4㛏3#l=Yz{콞Pj(g-V-#Qb- PmDE"(KW}hLL\E'-X>ؔ?-ޗ"
-0+>|VY9a`}UR[˥UEV
-@ q; uRxb{䴏\=![Qa@pru)y.!5!ayUgRf7a(:!obqQF&K7gR({^r\uXBƨ2J P"9m?`w$j#zGsX18͐˴}[/BO CFV@A XEu_kɨw[׼
-UJ2%iy滴NRo? ѵtOAl=> w3\9H,ouXZnKlO|&b
-endstream
-endobj
-962 0 obj <<
-/Type /Page
-/Contents 963 0 R
-/Resources 961 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 966 0 R
-/Annots [ 930 0 R 931 0 R 952 0 R 953 0 R 954 0 R 955 0 R 956 0 R 957 0 R 958 0 R 959 0 R 960 0 R ]
->> endobj
-930 0 obj <<
+782 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [196.181 700.835 272.863 711.365]
+/Rect [196.181 348.178 272.863 358.709]
/A << /S /GoTo /D (aacdecoder__lib_8h_acca8f4cf9757885d6c654de37a43072f) >>
>> endobj
-931 0 obj <<
+783 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [276.679 700.835 392.275 711.365]
+/Rect [276.679 348.178 392.275 358.709]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa9ba2e98e71adc41124eaf8d6e5d6f2d) >>
>> endobj
-952 0 obj <<
+784 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [176.176 657.085 229.635 667.616]
+/Rect [176.176 310.024 229.635 320.554]
/A << /S /GoTo /D (structCStreamInfo) >>
>> endobj
-953 0 obj <<
+785 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [237.606 657.085 350.8 667.616]
+/Rect [237.606 310.024 350.8 320.554]
/A << /S /GoTo /D (aacdecoder__lib_8h_a60aa42cb3ddc804b44ce61d877d0501e) >>
>> endobj
-954 0 obj <<
+786 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [354.616 657.085 470.212 667.616]
+/Rect [354.616 310.024 470.212 320.554]
/A << /S /GoTo /D (aacdecoder__lib_8h_aa9ba2e98e71adc41124eaf8d6e5d6f2d) >>
>> endobj
-955 0 obj <<
+787 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [143.272 639.643 190.76 649.549]
+/Rect [143.272 295.379 190.76 305.284]
/A << /S /GoTo /D (structCStreamInfo) >>
>> endobj
-956 0 obj <<
+788 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [195.265 613.336 294.073 623.866]
+/Rect [195.265 271.869 294.073 282.399]
/A << /S /GoTo /D (aacdecoder__lib_8h_a620b5a8c5d7ddd1b525aae1895963e16) >>
>> endobj
-957 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [124.291 428.872 240.793 439.776]
-/A << /S /GoTo /D (aacdecoder__lib_8h_a245a0e4176fb886d890a86627c55bb24) >>
->> endobj
-958 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [123.315 353.765 239.817 364.669]
-/A << /S /GoTo /D (aacdecoder__lib_8h_a245a0e4176fb886d890a86627c55bb24) >>
->> endobj
-959 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [124.215 290.613 240.717 301.517]
-/A << /S /GoTo /D (aacdecoder__lib_8h_a245a0e4176fb886d890a86627c55bb24) >>
->> endobj
-960 0 obj <<
+789 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [123.918 197.882 240.42 208.786]
+/Rect [124.291 105.15 240.793 116.054]
/A << /S /GoTo /D (aacdecoder__lib_8h_a245a0e4176fb886d890a86627c55bb24) >>
>> endobj
-964 0 obj <<
-/D [962 0 R /XYZ 89 770.89 null]
->> endobj
-194 0 obj <<
-/D [962 0 R /XYZ 90 567.688 null]
->> endobj
-198 0 obj <<
-/D [962 0 R /XYZ 90 500.387 null]
->> endobj
-811 0 obj <<
-/D [962 0 R /XYZ 90 474.957 null]
->> endobj
-202 0 obj <<
-/D [962 0 R /XYZ 90 474.957 null]
->> endobj
-808 0 obj <<
-/D [962 0 R /XYZ 257.47 420.07 null]
->> endobj
-206 0 obj <<
-/D [962 0 R /XYZ 90 397.836 null]
->> endobj
-809 0 obj <<
-/D [962 0 R /XYZ 443.182 356.918 null]
->> endobj
-210 0 obj <<
-/D [962 0 R /XYZ 90 334.684 null]
+794 0 obj <<
+/D [792 0 R /XYZ 89 770.89 null]
>> endobj
-810 0 obj <<
-/D [962 0 R /XYZ 90 262.03 null]
+182 0 obj <<
+/D [792 0 R /XYZ 90 234.84 null]
>> endobj
-214 0 obj <<
-/D [962 0 R /XYZ 90 241.953 null]
+186 0 obj <<
+/D [792 0 R /XYZ 90 174.462 null]
>> endobj
-806 0 obj <<
-/D [962 0 R /XYZ 144.445 189.08 null]
+668 0 obj <<
+/D [792 0 R /XYZ 90 150.133 null]
>> endobj
-218 0 obj <<
-/D [962 0 R /XYZ 90 166.846 null]
+190 0 obj <<
+/D [792 0 R /XYZ 90 150.133 null]
>> endobj
-805 0 obj <<
-/D [962 0 R /XYZ 90 94.191 null]
+665 0 obj <<
+/D [792 0 R /XYZ 257.47 96.348 null]
>> endobj
-961 0 obj <<
-/Font << /F22 396 0 R /F44 793 0 R /F23 397 0 R /F14 586 0 R /F46 965 0 R /F11 584 0 R >>
+791 0 obj <<
+/Font << /F22 292 0 R /F23 293 0 R /F44 607 0 R /F14 446 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-971 0 obj <<
-/Length 1820
+805 0 obj <<
+/Length 1534
/Filter /FlateDecode
>>
stream
-xڵXYoF~ׯ P j]^AB%GWSI@a+*Ah;u.oƝ֛yeGCc4|llbdeΠGm!9ۏW!66/EIq޼g˂ذ8E.ź 6"g`D}&w F(<WƬk 7F%J Y ݱ01I@/j9` ƃyЛNglc>sjB-Tq0ej͖V{@.2aQrcY59DzOb~u./8@fyfyfN/d:!ײa`!bU)R""/tF)!x Z^7S]q<DetC< ,U #ZoBhf9:a6: ˵qOy><жmvsr$
-\'X
-WiT $$[щ0w?uEwsUS'@MuI'H2ϧz"`>/$9hl̷" |"ukP:K8״'6YzkE""鴅4k[w\ ʞ2 K^
+xXmo6_!`@!3Kz- YiS EWD'jeɓuٯEȱSlCE{hjX{59=0MGc:Z|AI >."شEq"ae7ut'\[ w9#IO41"*ֈXvKm-^>~Zo4i_Ũf2zl«k#Ƙ`;f<<;3l[?L|zv%  ӎaM Q˗v/V^IRުFJ>/h ~~D͕Ƙ'lE^`Cu3ô%7[5*I ([F*.%Euqu|-{͓#X'cea"#+ht-V\,Vwr:Yy_*9{Plk5E,h AhmѶ}9 :l1a/>9M62HVAIUKe#-G&i|sQ#X4tUp[^5{"fUI{~ dN b}HӱI<0qr`aYXF*l4? cz`n8,DP^BCPJuȝ9.ʰulb{-"Sn<K( ?I)SoJ΍F;û(.
endstream
endobj
-970 0 obj <<
+804 0 obj <<
/Type /Page
-/Contents 971 0 R
-/Resources 969 0 R
+/Contents 805 0 R
+/Resources 803 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 966 0 R
-/Annots [ 968 0 R 973 0 R ]
+/Parent 609 0 R
+/Annots [ 790 0 R 800 0 R 801 0 R 802 0 R 808 0 R ]
>> endobj
-968 0 obj <<
+790 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [456.692 622.039 513.996 632.943]
+/Rect [123.315 702.47 239.817 713.374]
/A << /S /GoTo /D (aacdecoder__lib_8h_a245a0e4176fb886d890a86627c55bb24) >>
>> endobj
-973 0 obj <<
+800 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [89.004 610.458 153.511 620.988]
+/Rect [124.215 646.321 240.717 657.224]
/A << /S /GoTo /D (aacdecoder__lib_8h_a245a0e4176fb886d890a86627c55bb24) >>
>> endobj
-972 0 obj <<
-/D [970 0 R /XYZ 89 770.89 null]
->> endobj
-222 0 obj <<
-/D [970 0 R /XYZ 90 739.935 null]
->> endobj
-807 0 obj <<
-/D [970 0 R /XYZ 243.891 693.668 null]
->> endobj
-226 0 obj <<
-/D [970 0 R /XYZ 90 676.964 null]
->> endobj
-230 0 obj <<
-/D [970 0 R /XYZ 90 596.907 null]
->> endobj
-812 0 obj <<
-/D [970 0 R /XYZ 90 569.922 null]
->> endobj
-234 0 obj <<
-/D [970 0 R /XYZ 90 569.922 null]
->> endobj
-238 0 obj <<
-/D [970 0 R /XYZ 90 545.977 null]
->> endobj
-813 0 obj <<
-/D [970 0 R /XYZ 90 519.231 null]
->> endobj
-242 0 obj <<
-/D [970 0 R /XYZ 90 519.231 null]
->> endobj
-814 0 obj <<
-/D [970 0 R /XYZ 107.713 438.172 null]
->> endobj
-815 0 obj <<
-/D [970 0 R /XYZ 107.713 422.284 null]
->> endobj
-816 0 obj <<
-/D [970 0 R /XYZ 107.713 406.396 null]
->> endobj
-817 0 obj <<
-/D [970 0 R /XYZ 107.713 378.553 null]
->> endobj
-818 0 obj <<
-/D [970 0 R /XYZ 107.713 362.665 null]
->> endobj
-573 0 obj <<
-/D [970 0 R /XYZ 107.713 334.822 null]
->> endobj
-863 0 obj <<
-/D [970 0 R /XYZ 107.713 318.934 null]
->> endobj
-864 0 obj <<
-/D [970 0 R /XYZ 107.713 303.047 null]
->> endobj
-865 0 obj <<
-/D [970 0 R /XYZ 107.713 287.159 null]
->> endobj
-866 0 obj <<
-/D [970 0 R /XYZ 107.713 271.271 null]
->> endobj
-867 0 obj <<
-/D [970 0 R /XYZ 107.713 255.383 null]
->> endobj
-868 0 obj <<
-/D [970 0 R /XYZ 107.713 239.495 null]
->> endobj
-869 0 obj <<
-/D [970 0 R /XYZ 107.713 223.608 null]
->> endobj
-870 0 obj <<
-/D [970 0 R /XYZ 107.713 207.72 null]
->> endobj
-871 0 obj <<
-/D [970 0 R /XYZ 107.713 179.877 null]
->> endobj
-872 0 obj <<
-/D [970 0 R /XYZ 107.713 152.034 null]
->> endobj
-873 0 obj <<
-/D [970 0 R /XYZ 107.713 124.191 null]
->> endobj
-874 0 obj <<
-/D [970 0 R /XYZ 107.713 108.303 null]
->> endobj
-969 0 obj <<
-/Font << /F22 396 0 R /F46 965 0 R /F11 584 0 R /F23 397 0 R /F14 586 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-976 0 obj <<
-/Length 1886
-/Filter /FlateDecode
->>
-stream
-xX[s8~ϯfjVĥDlIחM:i;lY lHj>HwsEڽ7oWk;-@Z&7-c ғduR̳ ;WYNhN(3,_Ś/o3>o/_E%B<ӳ^|jȴ_{Om5p͵şHI%w#- 9aR04\hFhsfy BpnHր}/@* ĎCBCN
-Jӊ-.J=hU'+>'zIpV-2uY|D\0m`C`
-R\fڵa':2ѳXK^r`A$T}9{xq\pqLz:v:8P|ߙ̣0ov`&#7u-um \O_׽(KY!1a
-zP8z
-.pUwa݅t AWMx==e/GCrtdF7 ۼ\YIԉ)uF|"`MIK"K j\x&1[g `4SX=.:su 5tuu8za>㸐kmǃ81,HeD!s|0A[Q*
-KG@ i؃41gDŖ$x9oF4AN2AMۂl֐a<S~)OJwֆ@RC-p:|^N=LiSbUo3'[SV඼
-MJI BʞՈeLUQ(cr,~KܒDd/ N1Nᙍ
-Vզi/D-}M>`ل
-1=ĮNuZ'p(Қ<)02^B4 7 )KzWnvH|3,gm sQhDNwO0DC7ὐ|S?"׼C41RJHy Swx5Y7h)6^߮ rۦD\
-endstream
-endobj
-975 0 obj <<
-/Type /Page
-/Contents 976 0 R
-/Resources 974 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 966 0 R
->> endobj
-977 0 obj <<
-/D [975 0 R /XYZ 89 770.89 null]
+801 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [123.918 578.216 240.42 589.12]
+/A << /S /GoTo /D (aacdecoder__lib_8h_a245a0e4176fb886d890a86627c55bb24) >>
>> endobj
-875 0 obj <<
-/D [975 0 R /XYZ 107.713 729.972 null]
+802 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [456.692 361.948 513.996 372.852]
+/A << /S /GoTo /D (aacdecoder__lib_8h_a245a0e4176fb886d890a86627c55bb24) >>
>> endobj
-876 0 obj <<
-/D [975 0 R /XYZ 107.713 700.831 null]
+808 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [89.004 350.366 153.511 360.897]
+/A << /S /GoTo /D (aacdecoder__lib_8h_a245a0e4176fb886d890a86627c55bb24) >>
>> endobj
-877 0 obj <<
-/D [975 0 R /XYZ 107.713 683.645 null]
+806 0 obj <<
+/D [804 0 R /XYZ 89 770.89 null]
>> endobj
-878 0 obj <<
-/D [975 0 R /XYZ 107.713 666.46 null]
+194 0 obj <<
+/D [804 0 R /XYZ 90 739.935 null]
>> endobj
-879 0 obj <<
-/D [975 0 R /XYZ 107.713 649.274 null]
+666 0 obj <<
+/D [804 0 R /XYZ 443.182 705.623 null]
>> endobj
-880 0 obj <<
-/D [975 0 R /XYZ 107.713 620.133 null]
+198 0 obj <<
+/D [804 0 R /XYZ 90 689.29 null]
>> endobj
-881 0 obj <<
-/D [975 0 R /XYZ 107.713 590.992 null]
+667 0 obj <<
+/D [804 0 R /XYZ 121.033 637.518 null]
>> endobj
-882 0 obj <<
-/D [975 0 R /XYZ 107.713 561.851 null]
+202 0 obj <<
+/D [804 0 R /XYZ 90 621.559 null]
>> endobj
-883 0 obj <<
-/D [975 0 R /XYZ 107.713 544.666 null]
+663 0 obj <<
+/D [804 0 R /XYZ 144.445 569.414 null]
>> endobj
-884 0 obj <<
-/D [975 0 R /XYZ 107.713 515.525 null]
+206 0 obj <<
+/D [804 0 R /XYZ 90 553.081 null]
>> endobj
-885 0 obj <<
-/D [975 0 R /XYZ 107.713 486.384 null]
+618 0 obj <<
+/D [804 0 R /XYZ 221.735 501.31 null]
>> endobj
-886 0 obj <<
-/D [975 0 R /XYZ 107.713 457.243 null]
+210 0 obj <<
+/D [804 0 R /XYZ 90 484.977 null]
>> endobj
-887 0 obj <<
-/D [975 0 R /XYZ 107.713 428.102 null]
+664 0 obj <<
+/D [804 0 R /XYZ 243.891 433.205 null]
>> endobj
-888 0 obj <<
-/D [975 0 R /XYZ 107.713 398.961 null]
+214 0 obj <<
+/D [804 0 R /XYZ 90 416.873 null]
>> endobj
-889 0 obj <<
-/D [975 0 R /XYZ 107.713 381.776 null]
+218 0 obj <<
+/D [804 0 R /XYZ 90 337.187 null]
>> endobj
-890 0 obj <<
-/D [975 0 R /XYZ 107.713 352.635 null]
+669 0 obj <<
+/D [804 0 R /XYZ 90 310.201 null]
>> endobj
-891 0 obj <<
-/D [975 0 R /XYZ 107.713 335.449 null]
+222 0 obj <<
+/D [804 0 R /XYZ 90 310.201 null]
>> endobj
-892 0 obj <<
-/D [975 0 R /XYZ 107.713 318.263 null]
+226 0 obj <<
+/D [804 0 R /XYZ 90 286.257 null]
>> endobj
-893 0 obj <<
-/D [975 0 R /XYZ 107.713 301.078 null]
+670 0 obj <<
+/D [804 0 R /XYZ 90 259.511 null]
>> endobj
-894 0 obj <<
-/D [975 0 R /XYZ 107.713 283.892 null]
+230 0 obj <<
+/D [804 0 R /XYZ 90 259.511 null]
>> endobj
-895 0 obj <<
-/D [975 0 R /XYZ 107.713 254.751 null]
+671 0 obj <<
+/D [804 0 R /XYZ 107.713 180.512 null]
>> endobj
-896 0 obj <<
-/D [975 0 R /XYZ 107.713 225.61 null]
+672 0 obj <<
+/D [804 0 R /XYZ 107.713 165.449 null]
>> endobj
-897 0 obj <<
-/D [975 0 R /XYZ 90 212.564 null]
+673 0 obj <<
+/D [804 0 R /XYZ 107.713 150.385 null]
>> endobj
-246 0 obj <<
-/D [975 0 R /XYZ 90 195.191 null]
+674 0 obj <<
+/D [804 0 R /XYZ 107.713 123.367 null]
>> endobj
-616 0 obj <<
-/D [975 0 R /XYZ 107.713 108.303 null]
+675 0 obj <<
+/D [804 0 R /XYZ 107.713 108.303 null]
>> endobj
-974 0 obj <<
-/Font << /F22 396 0 R /F46 965 0 R /F23 397 0 R >>
+803 0 obj <<
+/Font << /F22 292 0 R /F23 293 0 R /F46 807 0 R /F11 444 0 R /F14 446 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-980 0 obj <<
-/Length 2842
+811 0 obj <<
+/Length 1993
/Filter /FlateDecode
>>
stream
-xڥr6_P
-L8IB,OÌymI^GuZz/~F\s<ӳvl3H| Xc}m"y` ӱrv{X/֛٧bK49է带oq}ELIJ=w9V4>Gyd~aK׈a c ZޕŞFI-$Rp3mʄs3
-oZ3$\d`yF>QVa[2M3@%Xσ-4r%څ?NvR%MVS#\~șY>q)T1@c;X- <v9/홸~ʘ:t&ڄP}&Uhfy0SSX{
-קC{O1% ~3CpLp~i۶JIkZGj$.65y=v\^/>LNo_(v&
-m(XlIᬵ}R?|y03lR{ʾ(ypâH+%yndފJԲ>|Pn^yRΚ損E Gq3Vy{|d#K~+dTqbMlsyww\ɠ!xw[pK~<ڧ[(pz
-=~FT;bnk4DhWTu4"$ (kJ Lѭ{aVUq!; w\ݨGaP%1ɺ !c])z4Ԣ:[#jkqDaR@#Tx0mn\#Fk2\wVWJ\`divMFyT$ei\o3mrv}ۆ#;@T:{[CG9 ū$oV0;@!ZJ 1*Ԁ V U8AYN;\ DmYW* 7?Mئkqma'~(E&2/[(H<qAe(@
-6C[ ($ky;0&XBB7Q^RK<*҃K
-9/[AO(2Ϫ[|U~af
-߰s+񴊰|zpĩ O
-A7,X)QXmr{:TDEK%<`0@pgv RoP-5(jNzIRv~d)(M[P\ބ[ 3]ֆBݕб}ckt1df2!vyO|܇n[A]E44v=[-T8S};á(^Chojspu\L Џ5Yɇ]ѷ|=ʗZ_!a Dĕ}.|+MNJYz.)D) x0l:*h[4Ozv!*oJܟm+RV
-ETBM ݝҋۨU=uY ]3]7 .ٚ|=4x_& xŏKO4GV n6j.GvNL.@t1 7M͋Ԫ$3X,9@'N#e1j'04]d|\=mO͠{W=%:޹so?69wOS'mP+î8qU,1=4=i119W ;ɒprOo6,E
+xY]s6}ϯ4$$uةM:w<( S\Ϳ> m;ChmKB
+=چ9K#N_M JCq]$z/ 6z:"ǡgQ|Ǚ#ms}˧~:ma[4 bԓXxf%2DDZ-b3'ph5F|l3^EwI+ӯi}.\׶ŏʴ,jy{7 ׼+\zTqFgue}cY'zz+^Eyy?9NVS:)!tO5xp6F1fQ/8@1SMmRU<uz._ :lcIO?dUٮ=NZ-Mogۛb@4x5%iC鮞.,vyژ`]6yؕ 2</v[5OJC>K/k~C}bޡ 'O)i{-N5"d#(Ux暭MS 8ys|v9*
+41 ^š.6@~<X |C4df؉q(~Fc`dAϙOt'-vWӁQ.7`vƓQ Ѭ 4 $l]zTa `Dd-̈́ç7.<`Q!J!VF*)/uI{>JWY`~)ueV7qQ OtؖY{({T,t"8Кj,Un!xt Q)iR i ڄdGWIf4eifp/|BNfX2LWcpuPjr,/hU%˕S>lI;>6vy97"P'{?EN90V\Ҁ 3+n7zW@|š{bلn>V
+xz8>Q0~üa>)#
+h$0aS@gK
+@KJ"mHd"FMŖ%xTd/4`^׽իzЩ:3J&_;w
endstream
endobj
-979 0 obj <<
+810 0 obj <<
/Type /Page
-/Contents 980 0 R
-/Resources 978 0 R
+/Contents 811 0 R
+/Resources 809 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 966 0 R
+/Parent 609 0 R
>> endobj
-981 0 obj <<
-/D [979 0 R /XYZ 89 770.89 null]
+812 0 obj <<
+/D [810 0 R /XYZ 89 770.89 null]
>> endobj
-898 0 obj <<
-/D [979 0 R /XYZ 107.713 729.972 null]
+434 0 obj <<
+/D [810 0 R /XYZ 107.713 729.972 null]
>> endobj
-899 0 obj <<
-/D [979 0 R /XYZ 107.713 612.017 null]
+676 0 obj <<
+/D [810 0 R /XYZ 107.713 713.894 null]
>> endobj
-617 0 obj <<
-/D [979 0 R /XYZ 107.713 560.053 null]
+677 0 obj <<
+/D [810 0 R /XYZ 107.713 697.817 null]
>> endobj
-940 0 obj <<
-/D [979 0 R /XYZ 107.713 532 null]
+678 0 obj <<
+/D [810 0 R /XYZ 107.713 681.739 null]
>> endobj
-941 0 obj <<
-/D [979 0 R /XYZ 107.713 473.821 null]
+679 0 obj <<
+/D [810 0 R /XYZ 107.713 665.661 null]
>> endobj
-942 0 obj <<
-/D [979 0 R /XYZ 107.713 421.857 null]
+680 0 obj <<
+/D [810 0 R /XYZ 107.713 649.584 null]
>> endobj
-943 0 obj <<
-/D [979 0 R /XYZ 107.713 393.803 null]
+681 0 obj <<
+/D [810 0 R /XYZ 107.713 633.506 null]
>> endobj
-944 0 obj <<
-/D [979 0 R /XYZ 107.713 341.839 null]
+682 0 obj <<
+/D [810 0 R /XYZ 107.713 617.428 null]
>> endobj
-945 0 obj <<
-/D [979 0 R /XYZ 107.713 289.875 null]
+683 0 obj <<
+/D [810 0 R /XYZ 107.713 601.351 null]
>> endobj
-946 0 obj <<
-/D [979 0 R /XYZ 107.713 231.696 null]
+684 0 obj <<
+/D [810 0 R /XYZ 107.713 573.318 null]
>> endobj
-947 0 obj <<
-/D [979 0 R /XYZ 107.713 203.642 null]
+685 0 obj <<
+/D [810 0 R /XYZ 107.713 545.285 null]
>> endobj
-250 0 obj <<
-/D [979 0 R /XYZ 90 174.604 null]
+686 0 obj <<
+/D [810 0 R /XYZ 107.713 517.252 null]
>> endobj
-949 0 obj <<
-/D [979 0 R /XYZ 90 150.205 null]
+687 0 obj <<
+/D [810 0 R /XYZ 107.713 501.175 null]
>> endobj
-254 0 obj <<
-/D [979 0 R /XYZ 90 150.205 null]
+688 0 obj <<
+/D [810 0 R /XYZ 107.713 473.142 null]
>> endobj
-978 0 obj <<
-/Font << /F22 396 0 R /F46 965 0 R /F23 397 0 R /F14 586 0 R >>
-/ProcSet [ /PDF /Text ]
+689 0 obj <<
+/D [810 0 R /XYZ 107.713 445.109 null]
>> endobj
-984 0 obj <<
-/Length 1292
-/Filter /FlateDecode
->>
-stream
-xXIS8WhWdY^$4M>%Tش
-A#}2Vi;{I<Oe/"LE^[´5n< uB.
-5fK7jDJ
-fd~ۑ]QbcxL+x'~amhoqwrlHc
-VƴǪFAp Y> /N7ٱL)Ѩ!:YK)Np AQ]Jx
-t~V7reE"i-Bqcњ*{%KA8+*/D!oAJC.  ׈2vc"<ˊ sdYS+bS}9#e^
-B6?:.*ogl᧫i.tȽ~%]/g l^> "z:+ 7lytT
-͏f0,e1Tj
-* d~f_P5a(DF榲~OEҸ\Iܕ$0}z1: Ltf Of+_E?A
-)G8K#SSGH|xWpWf\?L%ϫ[i걽m8bSvrQ`ASZH[Y
-endstream
-endobj
-983 0 obj <<
-/Type /Page
-/Contents 984 0 R
-/Resources 982 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 966 0 R
+690 0 obj <<
+/D [810 0 R /XYZ 107.713 429.032 null]
>> endobj
-985 0 obj <<
-/D [983 0 R /XYZ 89 770.89 null]
+691 0 obj <<
+/D [810 0 R /XYZ 107.713 412.954 null]
>> endobj
-948 0 obj <<
-/D [983 0 R /XYZ 90 591.248 null]
+692 0 obj <<
+/D [810 0 R /XYZ 107.713 396.876 null]
>> endobj
-258 0 obj <<
-/D [983 0 R /XYZ 90 575.739 null]
+693 0 obj <<
+/D [810 0 R /XYZ 107.713 368.843 null]
>> endobj
-576 0 obj <<
-/D [983 0 R /XYZ 90 372.039 null]
+694 0 obj <<
+/D [810 0 R /XYZ 107.713 340.811 null]
>> endobj
-262 0 obj <<
-/D [983 0 R /XYZ 90 356.53 null]
+695 0 obj <<
+/D [810 0 R /XYZ 107.713 312.778 null]
>> endobj
-550 0 obj <<
-/D [983 0 R /XYZ 90 199.683 null]
+696 0 obj <<
+/D [810 0 R /XYZ 107.713 296.7 null]
>> endobj
-266 0 obj <<
-/D [983 0 R /XYZ 90 184.173 null]
+697 0 obj <<
+/D [810 0 R /XYZ 107.713 268.667 null]
>> endobj
-982 0 obj <<
-/Font << /F22 396 0 R /F46 965 0 R /F23 397 0 R /F14 586 0 R >>
-/ProcSet [ /PDF /Text ]
+739 0 obj <<
+/D [810 0 R /XYZ 107.713 240.635 null]
>> endobj
-988 0 obj <<
-/Length 1899
-/Filter /FlateDecode
->>
-stream
-xXKs6WR3
-&K,qJu_],H2$^H`/~
-XP,!~YUH8ۊF]ؕM.͊vt,P]Ķ:/rn#K]?DqYnqM<>\0(K!)?/`8
-S1Iay Uw4Zc㉁8yh ckCGa:S +N+vL(lFDtuUڮ("vBbȨ2
-_r Nڊ:Đ./O_]89:_H$Mõ ̈́YA\^/o.~&2`/hSb9 AeGtϷLzJ,AOAִpqjLpu U4Φ^i)*dJ}C[~KvtJ8"92Aay1˵}nWyp<{8KS0͢(d8-h9'đ?aԅsuw
-(# X15
-
-M32~
-t6]R10/)=
-~WQwED"`SDaJ0f*Iww~#` dd1L/v΄.Ք>Stc!?(.(RW Өٯ1,ZӒz'
-xh6zK pWWn>
-Q1
-~+zUY >ǂ(y7]Y]ޤx2Ѝ
-]
-wnAR/=U\䖕#늂^W-k}65tfzb "JvMsGHX
-qPGKm
-endstream
-endobj
-987 0 obj <<
-/Type /Page
-/Contents 988 0 R
-/Resources 986 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 966 0 R
+740 0 obj <<
+/D [810 0 R /XYZ 107.713 212.602 null]
>> endobj
-989 0 obj <<
-/D [987 0 R /XYZ 89 770.89 null]
+741 0 obj <<
+/D [810 0 R /XYZ 107.713 184.569 null]
>> endobj
-551 0 obj <<
-/D [987 0 R /XYZ 90 598.72 null]
+742 0 obj <<
+/D [810 0 R /XYZ 107.713 156.536 null]
>> endobj
-270 0 obj <<
-/D [987 0 R /XYZ 90 584.213 null]
+743 0 obj <<
+/D [810 0 R /XYZ 107.713 140.459 null]
>> endobj
-574 0 obj <<
-/D [987 0 R /XYZ 90 321.263 null]
+744 0 obj <<
+/D [810 0 R /XYZ 107.713 112.426 null]
>> endobj
-274 0 obj <<
-/D [987 0 R /XYZ 90 306.756 null]
+745 0 obj <<
+/D [810 0 R /XYZ 107.713 96.348 null]
>> endobj
-986 0 obj <<
-/Font << /F22 396 0 R /F46 965 0 R /F23 397 0 R /F14 586 0 R >>
+809 0 obj <<
+/Font << /F22 292 0 R /F46 807 0 R /F23 293 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-994 0 obj <<
-/Length 1142
+818 0 obj <<
+/Length 2267
/Filter /FlateDecode
>>
stream
-xڽW[s6}0ST]sq.L:n_; YW7X7I} $]t>z'og{| 7_y>(1~++Y-lDv,˥ZV,R=|/O|uW!2 Vjfvm̽"ȣ9 "ja_BOle"iMI(j|x,U.!A/̚dqڶBgj
-;/~m. W/k^4xh=d^ob޺~F|+[~JٓiYBMDݙnmرL? }_;)36]FFX&@N3l+ LQbAB
+xYr}W-de9Hckr--AԒP<ޯn\xFI&X
+G8v2gͳǴYWO%d,}yT12 </ї'e3Q"rfH0 Nk|ܗ\z2!&D'c!l݄5f*ǞnP
+`q9Y&ʁ&|h(UM.KIr(I6 yz{6) c)@w7n?.>.W7er?K&v[I/2/dċa,b]dzʓ8jkl֏ԧ[{칑oS<}Wv҆o1i\Wc(r \pw >'{r_ϯ.Hml5~X$3:sB9 TGJYk^@+6cUy]7`BT5! @(xy4%YdrI{jš.b:HK-I&CkJjљ$6vӊ)4T[~( 1 ZsT{[:Z{Q|>7)= mG̎;G-*9^.\WLH5dךI8a]֮^\7Xtv fbRFXcjBhR
+f.
+da*s1j4*a:(
++5OF+ϡU-k%qY>l ~CtuS89f&6< cfzJH6TU
+(~jغEvԑ ,Ef.AեQ30B1/}wo=\&mP'xv2NY jHЄ 4pCG=GJ}}
+
+;ʸ3Aa|Pq Šp^F F4̳";%lɫ&+4+RÏ=Fg=錸΀̍MhoTnVLʾrp<[RUvlD#$9IEu@Bio Tq*<ۛBԹ}
+PNBFB c=p_xjI.k9h擿] XG}tYat?3aUFStQI0})3uԤ M?1}Ƈߴ4zNEvn$-t
endstream
endobj
-993 0 obj <<
+817 0 obj <<
/Type /Page
-/Contents 994 0 R
-/Resources 992 0 R
+/Contents 818 0 R
+/Resources 816 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 996 0 R
-/Annots [ 990 0 R 991 0 R ]
+/Parent 821 0 R
+/Annots [ 813 0 R 820 0 R ]
>> endobj
-990 0 obj <<
+813 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [105.88 211.845 159.339 220.691]
-/A << /S /GoTo /D (structCStreamInfo) >>
+/Rect [457.05 218.263 513.996 229.167]
+/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a5e080429e4eaec068ba64c17152ee805) >>
>> endobj
-991 0 obj <<
+820 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [200.495 122.043 253.953 151.109]
-/A << /S /GoTo /D (structCStreamInfo) >>
->> endobj
-995 0 obj <<
-/D [993 0 R /XYZ 89 770.89 null]
->> endobj
-950 0 obj <<
-/D [993 0 R /XYZ 90 630.093 null]
+/Rect [128.635 207.284 256.256 217.212]
+/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a5e080429e4eaec068ba64c17152ee805) >>
>> endobj
-278 0 obj <<
-/D [993 0 R /XYZ 90 613.631 null]
+819 0 obj <<
+/D [817 0 R /XYZ 89 770.89 null]
>> endobj
-967 0 obj <<
-/D [993 0 R /XYZ 90 443.45 null]
+746 0 obj <<
+/D [817 0 R /XYZ 107.713 729.972 null]
>> endobj
-282 0 obj <<
-/D [993 0 R /XYZ 90 426.988 null]
+747 0 obj <<
+/D [817 0 R /XYZ 107.713 714.339 null]
>> endobj
-575 0 obj <<
-/D [993 0 R /XYZ 90 283.61 null]
+748 0 obj <<
+/D [817 0 R /XYZ 107.713 698.707 null]
>> endobj
-286 0 obj <<
-/D [993 0 R /XYZ 90 267.148 null]
+749 0 obj <<
+/D [817 0 R /XYZ 107.713 671.119 null]
>> endobj
-549 0 obj <<
-/D [993 0 R /XYZ 90 94.191 null]
+750 0 obj <<
+/D [817 0 R /XYZ 107.713 643.531 null]
>> endobj
-992 0 obj <<
-/Font << /F22 396 0 R /F46 965 0 R /F23 397 0 R /F14 586 0 R >>
-/ProcSet [ /PDF /Text ]
+751 0 obj <<
+/D [817 0 R /XYZ 90 633.122 null]
>> endobj
-
-1002 0 obj <<
-/Length 981
-/Filter /FlateDecode
->>
-stream
-xVKFWL9
-y8*^{Hڸ( ]U!v>=0`!cyKN AfW
-g_f$ 9aKfJ">znH0k?fbh 1ĉ)Jno?n׫E"s~~YE-XwզR%ET>D)Ʉn
-J{{%ܓh\PPHLQSy]Usuh~tF\I60 }nw'E
-`je#ɾy@e`htn/efUzcIF5ʦKM~<i9C98NU
-*/znc x_rD'ĩkD:j9mU3Z \άiL1fߒ2XQlNQI nDk|3}e8>*5)?\`"iZă
-ރz?b >M Eiz?sz_eIm /1&h+ Fca }\
-9PQr(F0lG`r!>p=~zxQS=3VUUdV 3UTpVR`zbfNiMegSdS&h977מeoؙ*tbǵ;w_[eǸ첮_JՃy2m}+ (ܫ~9B]_T5>M>7Fq_ySDžanBg-h#'uCE@ZU
-N`F>EuSyxuzݰQqj4D?J}9tOI
-endstream
-endobj
-1001 0 obj <<
-/Type /Page
-/Contents 1002 0 R
-/Resources 1000 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 996 0 R
-/Annots [ 997 0 R ]
+234 0 obj <<
+/D [817 0 R /XYZ 90 618.69 null]
>> endobj
-997 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [359.906 181.317 431.905 192.221]
-/A << /S /GoTo /D (LIBUSE_Calling_Sequence) >>
+476 0 obj <<
+/D [817 0 R /XYZ 107.713 534.999 null]
>> endobj
-1003 0 obj <<
-/D [1001 0 R /XYZ 89 770.89 null]
+752 0 obj <<
+/D [817 0 R /XYZ 107.713 507.411 null]
>> endobj
-290 0 obj <<
-/D [1001 0 R /XYZ 90 739.935 null]
+477 0 obj <<
+/D [817 0 R /XYZ 107.713 424.648 null]
>> endobj
-618 0 obj <<
-/D [1001 0 R /XYZ 90 543.139 null]
+753 0 obj <<
+/D [817 0 R /XYZ 107.713 397.06 null]
>> endobj
-294 0 obj <<
-/D [1001 0 R /XYZ 90 513.396 null]
+754 0 obj <<
+/D [817 0 R /XYZ 107.713 328.09 null]
>> endobj
-547 0 obj <<
-/D [1001 0 R /XYZ 90 267.75 null]
+755 0 obj <<
+/D [817 0 R /XYZ 107.713 300.502 null]
>> endobj
-298 0 obj <<
-/D [1001 0 R /XYZ 90 236.885 null]
+756 0 obj <<
+/D [817 0 R /XYZ 107.713 272.914 null]
>> endobj
-1000 0 obj <<
-/Font << /F22 396 0 R /F46 965 0 R /F23 397 0 R /F37 543 0 R >>
+816 0 obj <<
+/Font << /F22 292 0 R /F46 807 0 R /F23 293 0 R /F14 446 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1025 0 obj <<
-/Length 981
+827 0 obj <<
+/Length 2666
/Filter /FlateDecode
>>
stream
-xڵW[s6~Wh/0S+ .e׻wkN[Pf 8e+qIv'$qtΧOpX+׮r5"60  B z!5m1E^f|wTr6ĘRm~T`%pФ X"
-8fzo*#!Z}1T`D MLM0 b2#7y9_V;˅q =W*ڌ2tF$^>w?֢h S -ja=`c߅[(gYdM5Tf84}I#Œ2qP׭N0L?{F ;KR(mx#0O<];>|waގV|wBa ="haU;`l$s\hS]h>ߺg)GF,B`MdAu#1 39釹SgS8abBFo4j
-<֒SJ4ԄfO,J2Td~H9yZ^,(ah!.4A.$PHYgg&E.W,JLVu$۸[o罹;9wyNIY7H"<JnY&u-Ir,oF~%K}k OŸ A9g=F+SS<dʋy|E^ <g2~?"z_7q򜣘oܬ˷)jOl\* MV]J4 ; hBQg ;d}~щB,J*<Ej /좭h"P/!qb~tU<Syy,-*/b8~{i2h_6'[rZ0֌ݷ%"6™
+xڥY[o~ϯۑ
+/1ttiǓhֱ]mL4(,J${±jx;<|<Y˪~m5 Zv<F'},~Ud8d#x6`
+yI
+_GOOqaX"-]ƱGՑX%%-HD;=`v*ARcվЁ?]wZPg Gml[ВH"ڋJ8t?h<y5)
+fe Uo__ w_V_Vk1 j*GRTDT9?wjFTsAب'o ]0/H@"ڢȭ>HԲ.%IEXBxk:^'*'f;O_7j(ڠ@!]=\"&x3r :ʩA=I4ǫˉ*mo&HA&pATINz_1'gM%wi҈l"Ã&M<99G'sGqTEd6Rޓѣ$;u5 B.UR}_6D?Ʀ ^5t!:A0=͸X bm!B04$MelrOIV@PȜ3Ҵ
+F7H%$)u&ҚNJng/ ؓ,.dn-}^`OTδ9qo,oUJ&&iam,~ct#&1o(Cӎ@;b"zE"':f-=I LDqN ;D%lef>/]  kAg
+4|aA6gI%ɫ}lODݬիmQhۖ IW cГZhG%ʰhn2ggGZ
+ΨCM <ƮrTҳgɡp|]ipؘoN<G<1,Ӯ^t30I%<&=8=[.g5 L =MkQ̷|Qx=j3r9ڮխJq؉"Jg x0`OQD=;Iے.рJuрzeVI/
+=Prja{RVÖZ}oE9p:Og!THn'H5m6,MJE!Jh؝Fnvܽ\_chy}i|9@׋uէ͛a'p- pQZ.S{Z1 ΍1s8}+sy֏YoR <)ԏeT5aRe)xY]u-FkC 3AEQ&<ң8V-M'N5'7"-'gW,|pZ,-% ^oܶ11=C=!>zv KXi:Y!VXDx
+Hl7sM-SovEEV라}n-q
+_j{ʏ}Gw@(;xG ut:%f5r5ژWJ
+<%kTkZZ4$#q oYy2 v mhem-xA U 4`,S`Ya,1A
+<Hg20mKt!}'fUyF[Sq
+f>NMZu(EY/F>վUC\x THt_D*R`ڍÇBfr~N}"-#uG Ӄ`z1c(Dž'^8-MbW aO&VRs
+V#61~ZǪ~d$و,9%f:N9vNC_ԩۆ?Q
endstream
endobj
-1024 0 obj <<
+826 0 obj <<
/Type /Page
-/Contents 1025 0 R
-/Resources 1023 0 R
+/Contents 827 0 R
+/Resources 825 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 996 0 R
-/Group 999 0 R
-/Annots [ 1004 0 R 1005 0 R 1006 0 R 1007 0 R 1008 0 R 1009 0 R 1010 0 R 1011 0 R 1012 0 R 1013 0 R 1014 0 R 1015 0 R 1016 0 R 1017 0 R 1018 0 R 1019 0 R 1020 0 R 1021 0 R 1022 0 R ]
+/Parent 821 0 R
+/Annots [ 814 0 R 815 0 R 822 0 R 823 0 R 829 0 R 824 0 R 830 0 R ]
>> endobj
-998 0 obj <<
-/Type /XObject
-/Subtype /Form
-/FormType 1
-/PTEX.FileName (./main_8cpp__incl.pdf)
-/PTEX.PageNumber 1
-/PTEX.InfoDict 1030 0 R
-/BBox [0 0 635 224]
-/Group 999 0 R
-/Resources <<
-/ExtGState <<
-/a0 <<
-/CA 1
-/ca 1
->>
->>/Font << /f-0-0 1031 0 R>>
->>
-/Length 1121
-/Filter /FlateDecode
->>
-stream
-xnIDd*:XB#!9 `H0y}ȥPF-ΨΥ2?"?7$H0!zAO_}b???d>ן?Od^!Kd6m;m9gDo4F]Md/̶KmȺZY'[]Fb:\bK)) Dx7=5K"9kfame>?FP#4?^Oqf&]޹39N#10eP̀>R|;>;wi{7*%{< pX
-Yk)9JzAu ۩pBn ߵRvK}6j1|*V!GE\@ZZVSެ)./$8E[10t3JI7{F 0YQӕٹFQG9siڈ6*^q='hδ拧򳚹g53*HzS<k>M3+>a:7;]շl(!tiOBkP%
-endstream
-endobj
-1030 0 obj
-<<
-/Creator (cairo 1.8.10 \(http://cairographics.org\))
-/Producer (cairo 1.8.10 \(http://cairographics.org\))
->>
-endobj
-1031 0 obj
-<<
-/Type /Font
-/Subtype /Type0
-/BaseFont /FreeSans
-/Encoding /Identity-H
-/DescendantFonts [ 1032 0 R]
-/ToUnicode 1033 0 R
->>
-endobj
-1032 0 obj
-<<
-/Type /Font
-/Subtype /CIDFontType2
-/BaseFont /FreeSans
-/CIDSystemInfo <<
-/Registry (Adobe)
-/Ordering (Identity)
-/Supplement 0
->>
-/FontDescriptor 1034 0 R
-/W [ 0 [ 500 833 556 222 556 278 500 556 556 556 556 333 556 222 556 556 500 500 278 556 722 278 611 722 500 722 667 556 667]]
->>
-endobj
-1033 0 obj
-<<
-/Length 1035 0 R
-/Filter /FlateDecode
->>
-stream
-x]j0>]A3"Ehr
-5,|Ɯ0>=IƗJe+ Vf%SQG"%55˩3Q<5zÉj7zxRsϏoV.->7c~xbR5)v/y&؛rng SYJrVN*qjpXzzwg}pIRS
-# @ =
-hGPL@'h Ah
-endstream
-endobj
-1034 0 obj
-<<
-/Type /FontDescriptor
-/FontName /FreeSans
-/Flags 4
-/FontBBox [ -958 -462 1632 1050]
-/ItalicAngle 0
-/Ascent 1000
-/Descent -300
-/CapHeight 1050
-/StemV 80
-/StemH 80
-/FontFile2 1036 0 R
->>
-endobj
-1035 0 obj
-344
-endobj
-1036 0 obj
-<<
-/Length 1037 0 R
-/Filter /FlateDecode
-/Length1 3236
->>
-stream
-xUV{lƉc;N| _$$q؉cbCqJS P
-@u[&g[U7lH(Uۉj SA:s?>ι{>rHy,?&$ݽynY/?NHv岭ۦd't|MZh<>6囗uqTȿ<l~Ԯݭ)əͣ=!BY+OlجX*(' {FfX0A(%IG-o4ZR_oiq^/kUCZ%\yܢ{RZ\4*Nѻoh˹Rk튦vX J
-ms5%-5\Ae,Vhk
-JVZW7hј ; UюTȑʚz U&dg1u%4FZcsG}f
-c>ֵ [:C>vD]hHkd!lkc~W397]b«Aă7#YޠwBɚML14֙M;o8wХM,NJ)+U?5)"Ġ":B-3NG:9ghk]P'~ٗA.}kL,1Y1Ers<͠d"f^ᮿϹcᆳ3Hċ
-JGϯ\P|fz(1~+ꈉrKX؆EP(h o"ys_, 
-wVzoxEgJ]tek=ƞby;LB>>j<w쥳 \簾ixreت?sRDzܕJ=Gۄ{T5KB+u]8hףohH`}Aȼ <.ayis1j'ZDE8A7|L}"ə5 gUp< DS=.G}EoKQx~!C::d& C:ڽrm |[-
-R]SM4G[nFle%JQU:1fb$x0 ]M<*a
-!\x., LE<3/W0h*{=@>Eoz ک2k!}VRu)lh}ԉOB]ne6WU \Qm}kqu!՗ kz=M+uݦUk/m3.[m$RbVjRX#
-,A xvK
- A4Uxk G4]-֓b^)&@h/ŻO'AIbOm Y&s$:
-r[tuL7-Il.ţf75olXbFK&IYjBs3$;qDjg.-eo31#΋>2 ͒2[4雋X ٗkrB)àqc}LTu>Qe5Uu5${ =J ?jۇ]B|,g%_ 7Ƞ]7fO&OQ;&.l}P@PN,X*A/R{d|8KڨQ6ѿ9f2aaIϬTOzĂߣhA(~aR,!,0]H>A~dh'*/G$Zܽ -yDrv,"
-#$
-E
-endstream
-endobj
-1037 0 obj
-2418
-endobj
-999 0 obj
-<<
-/Type /Group
-/S /Transparency
-/CS /DeviceRGB
->>endobj
-1004 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [145.731 498.262 230.941 508.189]
-/A << /S /GoTo /D (main_8cpp_aea681fdc68ba4b307e92a33c8a62ea08) >>
->> endobj
-1005 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [145.731 482.837 217.103 493.741]
-/A << /S /GoTo /D (main_8cpp_ab4a8982ff08a7f0ed68e15d851833d38) >>
->> endobj
-1006 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [145.731 468.762 208.505 479.292]
-/A << /S /GoTo /D (main_8cpp_a08a7e8a6abdc5cf6d2ac4e978e084d1a) >>
->> endobj
-1007 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [145.731 454.313 218.468 464.844]
-/A << /S /GoTo /D (main_8cpp_a8abd3ebb6e18277a43604c06f41e77a8) >>
->> endobj
-1008 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [145.731 439.865 219.026 450.395]
-/A << /S /GoTo /D (main_8cpp_ab3bc9e46a841eaef9e74d55e0045eba8) >>
->> endobj
-1009 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [145.731 426.019 236.291 435.946]
-/A << /S /GoTo /D (main_8cpp_a414bbb1046de58d0a2596be7b829448d) >>
->> endobj
-1010 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [126.921 362.651 148.839 373.555]
-/A << /S /GoTo /D (main_8cpp_a0ddf1224851353fc92bfbff6f499fa97) >>
->> endobj
-1011 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [133.547 300.259 193.102 311.163]
-/A << /S /GoTo /D (main_8cpp_ab7e6541570b5f939d29aa8bbcc1dde61) >>
->> endobj
-1012 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [133.547 285.811 198.084 296.715]
-/A << /S /GoTo /D (main_8cpp_a2e18f5738841433eb8c7cd9357ff6ced) >>
->> endobj
-1013 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [133.547 271.92 186.447 282.266]
-/A << /S /GoTo /D (main_8cpp_ac7fa490a7117a01e48e05784a6da30fc) >>
->> endobj
-1014 0 obj <<
+814 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 257.471 194.239 267.818]
-/A << /S /GoTo /D (main_8cpp_a904ab05aa185e4cbd7dfbfbf043caa6f) >>
+/Rect [246.806 712.302 363.667 723.206]
+/A << /S /GoTo /D (structCStreamInfo_aae39329c51fe206a8aee33daba2fe1db) >>
>> endobj
-1015 0 obj <<
+815 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [151.27 243.023 211.673 253.369]
-/A << /S /GoTo /D (main_8cpp_a84b7343ea6e13f56b7a06559a7ef8b5a) >>
+/Rect [384.723 712.302 510.679 723.206]
+/A << /S /GoTo /D (structCStreamInfo_aa35e5be20f99be29ce12f9f41bf4d50e) >>
>> endobj
-1016 0 obj <<
+822 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [220.171 228.574 261.655 238.92]
-/A << /S /GoTo /D (main_8cpp_ab78424394912809ef271c9587d264664) >>
+/Rect [314.704 673.875 493.961 684.779]
+/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a5e080429e4eaec068ba64c17152ee805) >>
>> endobj
-1017 0 obj <<
+823 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [151.27 214.126 192.844 224.472]
-/A << /S /GoTo /D (main_8cpp_aa5539bfe92dba402e77bcbbb497eee32) >>
+/Rect [483.072 474.052 513.996 484.956]
+/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a5cec20e1dd4ac89472ad60d3d0c8b5c1) >>
>> endobj
-1018 0 obj <<
+829 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [158.742 199.677 178.438 210.023]
-/A << /S /GoTo /D (main_8cpp_a93d34427c5ada45032539b77c78ab2f6) >>
+/Rect [128.635 462.097 278.402 473.001]
+/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a5cec20e1dd4ac89472ad60d3d0c8b5c1) >>
>> endobj
-1019 0 obj <<
+824 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [151.27 185.229 195.872 195.575]
-/A << /S /GoTo /D (main_8cpp_a774499c04248e86e7f71ea689c3a7d19) >>
+/Rect [388.428 394.636 513.996 405.54]
+/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a5cec20e1dd4ac89472ad60d3d0c8b5c1) >>
>> endobj
-1020 0 obj <<
+830 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [140.192 170.78 177.043 181.126]
-/A << /S /GoTo /D (main_8cpp_a7f18a204314393991d3da96356b2fd16) >>
+/Rect [128.635 384.738 183.758 393.585]
+/A << /S /GoTo /D (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a5cec20e1dd4ac89472ad60d3d0c8b5c1) >>
>> endobj
-1021 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [133.547 155.774 177.601 166.677]
-/A << /S /GoTo /D (main_8cpp_aad1596787d6c1baa977de86d9a6f503c) >>
+828 0 obj <<
+/D [826 0 R /XYZ 89 770.89 null]
>> endobj
-1022 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [359.906 93.195 431.905 104.099]
-/A << /S /GoTo /D (LIBUSE_Calling_Sequence) >>
+757 0 obj <<
+/D [826 0 R /XYZ 107.713 633.477 null]
>> endobj
-1026 0 obj <<
-/D [1024 0 R /XYZ 89 770.89 null]
+758 0 obj <<
+/D [826 0 R /XYZ 107.713 327.766 null]
>> endobj
-1027 0 obj <<
-/D [1024 0 R /XYZ 90 517.732 null]
+759 0 obj <<
+/D [826 0 R /XYZ 107.713 267.136 null]
>> endobj
-1028 0 obj <<
-/D [1024 0 R /XYZ 90 383.098 null]
+760 0 obj <<
+/D [826 0 R /XYZ 107.713 214.192 null]
>> endobj
-1029 0 obj <<
-/D [1024 0 R /XYZ 90 320.706 null]
+761 0 obj <<
+/D [826 0 R /XYZ 107.713 185.158 null]
>> endobj
-302 0 obj <<
-/D [1024 0 R /XYZ 90 138.831 null]
+762 0 obj <<
+/D [826 0 R /XYZ 107.713 132.214 null]
>> endobj
-1023 0 obj <<
-/Font << /F22 396 0 R /F23 397 0 R /F14 586 0 R >>
-/XObject << /Im5 998 0 R >>
+825 0 obj <<
+/Font << /F22 292 0 R /F23 293 0 R /F46 807 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1056 0 obj <<
-/Length 1316
+833 0 obj <<
+/Length 1454
/Filter /FlateDecode
>>
stream
-xڽW[s8~`/0h%8qHwiXvᒵq:_lng//>}\e(%(ݍnS% X:֥p%YP2tFRdUSZ
-FF4EnmT +LVB\Pb0`B!ivt (?N`#! as/B.u@.t qϸH,7gZ*EPޭLݴڷnA@ǚSEB-R<8-N0eлNNNrN0M1[NS܋5Ht ڄd4`p.ڷ4^KC8~$Z*;O兣P*IDdڦIJ"gO^I,g2DM}4YB/Gc˿rBβY7-ƿIO'H<8{4;_ﶭ7M/A_,n\Q䌓Wb[B.pXF
-*Ύ克 p
+xX[s8~f֪.˾9Ӧ>r,plINg<HBw#[^NWZ!
+=YbXd8Cʱ-D(eL+6oNT\dY<Ηt1: [}3nE/؊a ޵\Zl,]]c9!QZ>5jG#xtyt^ȃ00Wы(ufs av"#YIvk%R&XC֐0DH5ɟΐl,$5H,+ފMZ!l}&4ΦrnX!*iQIprE F6MûI+E%vݑg!U4ܡܾ7,>R$D.Uw X)*r;a{tr>=<蠳 l Gq$)ŕ*jbvQTz}#w;%E$i-Cc 
+A!ywՀԔA}RI͋øM|:/OR?>Qr(0R(}E>̮J ]V
+%|9Uk&׌h~~8xOF-w
+
+iLk.S N
+Uw
+ZhT#-.)![A@zS҇kAb< #(8Q<[r]3t-b
+qYy50P#nCU9˒ߡ<G<ִ
endstream
endobj
-1055 0 obj <<
+832 0 obj <<
/Type /Page
-/Contents 1056 0 R
-/Resources 1054 0 R
+/Contents 833 0 R
+/Resources 831 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 996 0 R
-/Annots [ 1053 0 R ]
->> endobj
-1053 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [177.272 483.592 293.774 494.496]
-/A << /S /GoTo /D (aacdecoder__lib_8h_a245a0e4176fb886d890a86627c55bb24) >>
->> endobj
-1057 0 obj <<
-/D [1055 0 R /XYZ 89 770.89 null]
+/Parent 821 0 R
>> endobj
-306 0 obj <<
-/D [1055 0 R /XYZ 90 739.935 null]
->> endobj
-1041 0 obj <<
-/D [1055 0 R /XYZ 90 721.648 null]
->> endobj
-310 0 obj <<
-/D [1055 0 R /XYZ 90 721.648 null]
->> endobj
-1038 0 obj <<
-/D [1055 0 R /XYZ 90 658.58 null]
->> endobj
-314 0 obj <<
-/D [1055 0 R /XYZ 90 636.729 null]
+834 0 obj <<
+/D [832 0 R /XYZ 89 770.89 null]
>> endobj
-577 0 obj <<
-/D [1055 0 R /XYZ 90 611.8 null]
+763 0 obj <<
+/D [832 0 R /XYZ 107.713 729.972 null]
>> endobj
-318 0 obj <<
-/D [1055 0 R /XYZ 90 611.8 null]
+764 0 obj <<
+/D [832 0 R /XYZ 107.713 676.332 null]
>> endobj
-1042 0 obj <<
-/D [1055 0 R /XYZ 90 549.869 null]
+765 0 obj <<
+/D [832 0 R /XYZ 107.713 650.093 null]
>> endobj
-322 0 obj <<
-/D [1055 0 R /XYZ 90 528.018 null]
+238 0 obj <<
+/D [832 0 R /XYZ 90 622.157 null]
>> endobj
-1039 0 obj <<
-/D [1055 0 R /XYZ 90 466.964 null]
+767 0 obj <<
+/D [832 0 R /XYZ 90 597.828 null]
>> endobj
-326 0 obj <<
-/D [1055 0 R /XYZ 90 445.112 null]
+242 0 obj <<
+/D [832 0 R /XYZ 90 597.828 null]
>> endobj
-1040 0 obj <<
-/D [1055 0 R /XYZ 90 401.683 null]
+766 0 obj <<
+/D [832 0 R /XYZ 90 416.158 null]
>> endobj
-330 0 obj <<
-/D [1055 0 R /XYZ 90 379.831 null]
+246 0 obj <<
+/D [832 0 R /XYZ 90 402.333 null]
>> endobj
-334 0 obj <<
-/D [1055 0 R /XYZ 90 296.926 null]
+437 0 obj <<
+/D [832 0 R /XYZ 90 234.901 null]
>> endobj
-669 0 obj <<
-/D [1055 0 R /XYZ 90 271.141 null]
+250 0 obj <<
+/D [832 0 R /XYZ 90 221.077 null]
>> endobj
-338 0 obj <<
-/D [1055 0 R /XYZ 90 271.141 null]
+415 0 obj <<
+/D [832 0 R /XYZ 90 96.348 null]
>> endobj
-1054 0 obj <<
-/Font << /F22 396 0 R /F23 397 0 R /F14 586 0 R /F46 965 0 R >>
+831 0 obj <<
+/Font << /F22 292 0 R /F46 807 0 R /F23 293 0 R /F14 446 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1060 0 obj <<
-/Length 641
+837 0 obj <<
+/Length 1924
/Filter /FlateDecode
>>
stream
-xV[0~WLs!\;JB;m]aZĶN{@kwɅ/I(@y!6`LP !5 yŢu,z8s [jEr6D2m(n|U \"3(U#&b Hm |/W@'T3+%f$kl܄!f5yx=Vial4 CF5܇[gPY\%Z㦆~qG5*=dšEX4UJ)SD؄a})yR=<1$> b̶ɑ\tn2YVOc?\oTx]5޻q+fN}' +yk;-edRhY2K=lB]d_&gP2pv)]? CخR%riO<'W> EqqN~a_y&M_Ƴ]/xT?va%p7^<By:sS.4RWeV},ր˒U"╃gQfUqTkb5'M;}kTq[7#bNjeyjͻhyeQH9u䃹
+xXYsF~ׯ.XeN<ۑl-IRA (4_a&jcֽŭ_^o~
+YI쬐['+Zl>oYJL.lҳiE7I^GuZHzܜ}9@-ٹ>kg>sk ,TXr6g:'U0%)3Г9WoY.nqڋۋru\fVQ_$qMEι_EwrgʳBlBߜZ9tx=eT́9*v3WD:K
+AKq0N
+.ÄՄT쩖&.'8Ϸ?OU2QW5Ƿ7]s,}}dv!R=rC8ceͥÔ!KΞBu7Ԕ M{ΐJ{DԔL# ΛmZI"۸u
+ 2Y_k&P=6Q'[9.ͣgn&]{1>nӖɗ&-w)N_,;ԏr#q՞
+d膄vzR_s
+H^?s>lACjܠ
+8αB)-
+0ۂ}PbyS4..*x_9 "A!d
+ETMy'U%y3A#yXD&t<˽<|iXRt'LSw"Y#^=x -8)O[<D|J 'Nb Duoht;e(? 9|Sn/Ӆ^Dh."h!30g`9o[ZHDž]Y9hI1 8mENx~pH1)Ui cڬot3AbSB y\j!5Yׅ1KetgQ ?:f0&-Uңj@h4G )r$uM5I?#3[c@5D/ dAW D9Eeez7|(`ڣ-޶w]5
endstream
endobj
-1059 0 obj <<
+836 0 obj <<
/Type /Page
-/Contents 1060 0 R
-/Resources 1058 0 R
+/Contents 837 0 R
+/Resources 835 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 996 0 R
->> endobj
-1061 0 obj <<
-/D [1059 0 R /XYZ 89 770.89 null]
+/Parent 821 0 R
>> endobj
-342 0 obj <<
-/D [1059 0 R /XYZ 90 739.935 null]
->> endobj
-1049 0 obj <<
-/D [1059 0 R /XYZ 90 722.92 null]
+838 0 obj <<
+/D [836 0 R /XYZ 89 770.89 null]
>> endobj
-346 0 obj <<
-/D [1059 0 R /XYZ 90 722.92 null]
+254 0 obj <<
+/D [836 0 R /XYZ 90 739.935 null]
>> endobj
-1045 0 obj <<
-/D [1059 0 R /XYZ 90 661.124 null]
+416 0 obj <<
+/D [836 0 R /XYZ 90 518.483 null]
>> endobj
-350 0 obj <<
-/D [1059 0 R /XYZ 90 645.634 null]
+258 0 obj <<
+/D [836 0 R /XYZ 90 504.007 null]
>> endobj
-951 0 obj <<
-/D [1059 0 R /XYZ 90 585.852 null]
+435 0 obj <<
+/D [836 0 R /XYZ 90 259.431 null]
>> endobj
-354 0 obj <<
-/D [1059 0 R /XYZ 90 570.361 null]
+262 0 obj <<
+/D [836 0 R /XYZ 90 244.954 null]
>> endobj
-1050 0 obj <<
-/D [1059 0 R /XYZ 90 528.203 null]
+835 0 obj <<
+/Font << /F22 292 0 R /F46 807 0 R /F14 446 0 R /F23 293 0 R >>
+/ProcSet [ /PDF /Text ]
>> endobj
-358 0 obj <<
-/D [1059 0 R /XYZ 90 512.712 null]
+843 0 obj <<
+/Length 1450
+/Filter /FlateDecode
+>>
+stream
+xXKs6WVh&b۲4cK@dqʇG\weR8]RԹws19YN~><'v Ɖsk# ]6y)Jʵt5)qxrf
+W QՔED
+xĈO?-O aƊݐ ''?Qg 8rTgN~P1{=;{%F(Qm2u \81̣2AjTU Ob6yLA\8YnEI}^TsVjmUD5n3gx
+B`cn,lMAbN)6e&- kJH"dcEHǮ#U3ߝ<
+x!'[Uj(lp[@2*BkHdו&[<5iB#ܘ 0 ϚATPY5awٕu Š亵71JT2WZF_Yi]r6%Ų
+Xg>wdBT <R"5A2mP )u;Y<6z' c^V]\"-e>eu
+ţRjRExvKai)nJ5Շ0QDj-f- ]
+@ϳ-fZeZoH 22Ij=
+ZD iGkKtGϔY"j0f>u/4Ii~Ca"G"71Tp:Y+c$ñ5E|?u]WO
+.l/SNaRI}sî0Ĝ`PnLy`wo>5k #^>,-jQf$X l(N˫%
+1/a'+Χ ]Aa=
+A; >cP`.mk {4e{1q`Qh9z!_h@zq 0,ݻ]/t4云zke?/K:Ɲ{79`R;/F27~`yU6 IӲ{u0ATcF
+endstream
+endobj
+842 0 obj <<
+/Type /Page
+/Contents 843 0 R
+/Resources 841 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 821 0 R
+/Annots [ 839 0 R 840 0 R ]
>> endobj
-1051 0 obj <<
-/D [1059 0 R /XYZ 90 452.931 null]
+839 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [105.88 190.371 159.339 199.217]
+/A << /S /GoTo /D (structCStreamInfo) >>
>> endobj
-362 0 obj <<
-/D [1059 0 R /XYZ 90 437.44 null]
+840 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.495 104.574 253.953 133.64]
+/A << /S /GoTo /D (structCStreamInfo) >>
>> endobj
-1052 0 obj <<
-/D [1059 0 R /XYZ 90 377.658 null]
+844 0 obj <<
+/D [842 0 R /XYZ 89 770.89 null]
>> endobj
-366 0 obj <<
-/D [1059 0 R /XYZ 90 362.167 null]
+798 0 obj <<
+/D [842 0 R /XYZ 90 590.315 null]
>> endobj
-1046 0 obj <<
-/D [1059 0 R /XYZ 90 302.385 null]
+266 0 obj <<
+/D [842 0 R /XYZ 90 575.878 null]
>> endobj
-370 0 obj <<
-/D [1059 0 R /XYZ 90 286.894 null]
+799 0 obj <<
+/D [842 0 R /XYZ 90 411.162 null]
>> endobj
-1047 0 obj <<
-/D [1059 0 R /XYZ 90 227.112 null]
+270 0 obj <<
+/D [842 0 R /XYZ 90 396.725 null]
>> endobj
-374 0 obj <<
-/D [1059 0 R /XYZ 90 211.622 null]
+436 0 obj <<
+/D [842 0 R /XYZ 90 259.733 null]
>> endobj
-1043 0 obj <<
-/D [1059 0 R /XYZ 90 151.84 null]
+274 0 obj <<
+/D [842 0 R /XYZ 90 245.296 null]
>> endobj
-378 0 obj <<
-/D [1059 0 R /XYZ 90 136.349 null]
+414 0 obj <<
+/D [842 0 R /XYZ 90 96.348 null]
>> endobj
-1058 0 obj <<
-/Font << /F22 396 0 R /F23 397 0 R /F14 586 0 R >>
+841 0 obj <<
+/Font << /F22 292 0 R /F46 807 0 R /F23 293 0 R /F14 446 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1064 0 obj <<
-/Length 358
+847 0 obj <<
+/Length 732
/Filter /FlateDecode
>>
stream
-xڵMO0 >'iqܷ6mLBlSյ)TZ[Z!=2!6. !rlُ2 nFAHBy 3|(66!BSuaA4*ΫmzD'$!>$< U˸XY^HWҘN}fD,ULTjM,ܢ@(i%]YDpFh( & ӡh'p~ijjӟfѼr6\d~If.nh =vFe&MW_Edz5cxg<&ㅁM2M"yqon29(ZM?0=PIw{da?9 8~{oR-
+xڽUMs0+tѵq4]L46I<c 8. q\zb$v}Ob|)cÞ# P,EݚXw5TJTNز$$]qRD6MP?HhN*Dq{Gs*jݡ ,A( 81%M !rWah6W%9(ZOu'&7 $ff<1Us.9A#"RAc*DE%!͊T0pf4,I ]W5AI6,'7@ ~dSWam&
+XI7:EV K s {n+CISߝBauS;͉L1q3kLB]?M.m<k d'#v=ɟ蔷u.J ]{P}ސSۮy\ OQ2x Eo
endstream
endobj
-1063 0 obj <<
+846 0 obj <<
/Type /Page
-/Contents 1064 0 R
-/Resources 1062 0 R
+/Contents 847 0 R
+/Resources 845 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 996 0 R
+/Parent 821 0 R
>> endobj
-1065 0 obj <<
-/D [1063 0 R /XYZ 89 770.89 null]
->> endobj
-1044 0 obj <<
-/D [1063 0 R /XYZ 90 727.815 null]
+848 0 obj <<
+/D [846 0 R /XYZ 89 770.89 null]
>> endobj
-382 0 obj <<
-/D [1063 0 R /XYZ 90 713.245 null]
+278 0 obj <<
+/D [846 0 R /XYZ 90 739.935 null]
>> endobj
-1048 0 obj <<
-/D [1063 0 R /XYZ 90 653.647 null]
+478 0 obj <<
+/D [846 0 R /XYZ 90 596.203 null]
>> endobj
-386 0 obj <<
-/D [1063 0 R /XYZ 90 639.077 null]
+282 0 obj <<
+/D [846 0 R /XYZ 90 581.632 null]
>> endobj
-1062 0 obj <<
-/Font << /F22 396 0 R /F23 397 0 R >>
+845 0 obj <<
+/Font << /F22 292 0 R /F46 807 0 R /F23 293 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1112 0 obj <<
-/Length 780
+895 0 obj <<
+/Length 786
/Filter /FlateDecode
>>
stream
-x͘ˎ0<TR'IH6ӢQeс#Uİh߾΅K:-*@ (Ձ+`2'DF C#G@UlV'؉/ qq1R2bDTe=p烡jۨy||XV2uiwjO~#^Ǻ{
-Q}"u]KB
-s^U`*Znu[vU%4[nw7g)O{fļweXnz<z(Eݑo!RdV۹( ьH$^egJnd1űhz͸:|GYu/l>¨NW勷Kr=ܔ0ꜙ{:JZ|Zw$ r/*Unc ۷zz[rw`V
-]Pv1gg C{Gc(h$3U"*xb}uTDXBkK.qub1M_ ,P9}۫D>qD]b> d}s)6H<Úf;6V~Xzʥ̕Wgn</iLQb*
-F6fXhuxu_R3A})M&oW0ɱ{SI m`vMjqVR'VdNxiW"SFWAFV9aO6uǫ4h˜F:ԛbT{[: hSЃ9k
+x͘[o0L 4YN7TM+l4Qr9*
+]P>;8&L0gי}mخ1N, 1LbdֿOA*`왆eCʐA,S$4づbl-KNy_OPi&>dGal{fohz51"JH5 u˲4%b,Vټ`SJ\u}X~e a?г7rm KoQ!3{: -JȽn9q­w!MAZ@a4=+N2")tkQ/{}S>#4.$"4/,UN-oƏτnRU|O[uGScRlKxSS@p8G`*c}j0ӱMQ֕nQ<h[5'A*w0zc.+v|5'}Ûz-+WA `QL!Y
+Qi<nmdVQb\`tԲ8F;:$|IUWZ`rHx#0XSU "Iw:-1ꞧ};yS*<
+ՔK>+7- DDiw
+UJ4UIy$FHj8
endstream
endobj
-1111 0 obj <<
+894 0 obj <<
/Type /Page
-/Contents 1112 0 R
-/Resources 1110 0 R
+/Contents 895 0 R
+/Resources 893 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 1114 0 R
-/Annots [ 1066 0 R 1067 0 R 1068 0 R 1069 0 R 1070 0 R 1071 0 R 1072 0 R 1073 0 R 1074 0 R 1075 0 R 1076 0 R 1077 0 R 1078 0 R 1079 0 R 1080 0 R 1081 0 R 1082 0 R 1083 0 R 1084 0 R 1085 0 R 1086 0 R 1087 0 R 1088 0 R 1089 0 R 1090 0 R 1091 0 R 1092 0 R 1093 0 R 1094 0 R 1095 0 R 1096 0 R 1097 0 R 1098 0 R 1099 0 R 1100 0 R 1101 0 R 1102 0 R 1103 0 R 1104 0 R 1105 0 R 1106 0 R 1107 0 R 1108 0 R ]
+/Parent 897 0 R
+/Annots [ 849 0 R 850 0 R 851 0 R 852 0 R 853 0 R 854 0 R 855 0 R 856 0 R 857 0 R 858 0 R 859 0 R 860 0 R 861 0 R 862 0 R 863 0 R 864 0 R 865 0 R 866 0 R 867 0 R 868 0 R 869 0 R 870 0 R 871 0 R 872 0 R 873 0 R 874 0 R 875 0 R 876 0 R 877 0 R 878 0 R 879 0 R 880 0 R 881 0 R 882 0 R 883 0 R 884 0 R 885 0 R 886 0 R 887 0 R 888 0 R 889 0 R 890 0 R 891 0 R ]
>> endobj
-1066 0 obj <<
+849 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 608.529 193.242 618.716]
-/A << /S /GoTo /D (page.28) >>
+/A << /S /GoTo /D (page.26) >>
>> endobj
-1067 0 obj <<
+850 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 584.593 193.242 594.78]
-/A << /S /GoTo /D (page.27) >>
+/A << /S /GoTo /D (page.25) >>
>> endobj
-1068 0 obj <<
+851 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 560.658 193.242 570.844]
-/A << /S /GoTo /D (page.27) >>
+/A << /S /GoTo /D (page.25) >>
>> endobj
-1069 0 obj <<
+852 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 536.722 193.242 546.909]
-/A << /S /GoTo /D (page.27) >>
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1070 0 obj <<
+853 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 512.786 193.242 522.973]
-/A << /S /GoTo /D (page.27) >>
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1071 0 obj <<
+854 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 488.851 193.242 499.037]
-/A << /S /GoTo /D (page.27) >>
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1072 0 obj <<
+855 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 464.915 193.242 475.102]
-/A << /S /GoTo /D (page.27) >>
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1073 0 obj <<
+856 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 440.979 193.242 451.166]
-/A << /S /GoTo /D (page.27) >>
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1074 0 obj <<
+857 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 417.044 193.242 427.23]
-/A << /S /GoTo /D (page.27) >>
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1075 0 obj <<
+858 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 393.108 193.242 403.295]
-/A << /S /GoTo /D (page.26) >>
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1076 0 obj <<
+859 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 369.172 193.242 379.359]
-/A << /S /GoTo /D (page.27) >>
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1077 0 obj <<
+860 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 345.237 193.242 355.423]
-/A << /S /GoTo /D (page.26) >>
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1078 0 obj <<
+861 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 321.301 193.242 331.488]
-/A << /S /GoTo /D (page.26) >>
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1079 0 obj <<
+862 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 297.365 193.242 307.552]
-/A << /S /GoTo /D (page.26) >>
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1080 0 obj <<
+863 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 273.43 193.242 283.616]
-/A << /S /GoTo /D (page.26) >>
+/A << /S /GoTo /D (page.23) >>
>> endobj
-1081 0 obj <<
+864 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 249.494 193.242 259.681]
-/A << /S /GoTo /D (page.26) >>
+/A << /S /GoTo /D (page.23) >>
>> endobj
-1082 0 obj <<
+865 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 225.558 193.242 235.745]
-/A << /S /GoTo /D (page.26) >>
+/A << /S /GoTo /D (page.23) >>
>> endobj
-1083 0 obj <<
+866 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 201.623 193.242 211.809]
-/A << /S /GoTo /D (page.27) >>
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1084 0 obj <<
+867 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 177.687 193.242 187.874]
-/A << /S /GoTo /D (page.27) >>
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1085 0 obj <<
+868 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 153.751 193.242 163.938]
-/A << /S /GoTo /D (page.26) >>
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1086 0 obj <<
+869 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 129.816 193.242 140.002]
-/A << /S /GoTo /D (page.26) >>
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1087 0 obj <<
+870 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 105.88 193.242 116.067]
-/A << /S /GoTo /D (page.26) >>
+/A << /S /GoTo /D (page.23) >>
>> endobj
-1088 0 obj <<
+871 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [397.768 620.497 409.724 630.684]
-/A << /S /GoTo /D (page.27) >>
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1089 0 obj <<
+872 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [397.768 596.559 409.724 606.746]
-/A << /S /GoTo /D (page.27) >>
+/A << /S /GoTo /D (page.25) >>
>> endobj
-1090 0 obj <<
+873 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [397.768 572.622 409.724 582.809]
-/A << /S /GoTo /D (page.27) >>
+/A << /S /GoTo /D (page.25) >>
>> endobj
-1091 0 obj <<
+874 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [397.768 548.684 409.724 558.871]
-/A << /S /GoTo /D (page.27) >>
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1092 0 obj <<
+875 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [397.768 524.747 409.724 534.934]
-/A << /S /GoTo /D (page.26) >>
+/A << /S /GoTo /D (page.23) >>
>> endobj
-1093 0 obj <<
+876 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [397.768 500.809 409.724 510.996]
-/A << /S /GoTo /D (page.26) >>
+/A << /S /GoTo /D (page.23) >>
>> endobj
-1094 0 obj <<
+877 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [397.768 476.872 409.724 487.058]
-/A << /S /GoTo /D (page.26) >>
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1095 0 obj <<
+878 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [397.768 452.934 409.724 463.121]
-/A << /S /GoTo /D (page.27) >>
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1096 0 obj <<
+879 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [397.768 417.042 409.724 427.228]
-/A << /S /GoTo /D (page.26) >>
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1097 0 obj <<
+880 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [397.768 393.104 409.724 403.291]
-/A << /S /GoTo /D (page.26) >>
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1098 0 obj <<
+881 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [397.768 369.167 409.724 379.353]
-/A << /S /GoTo /D (page.26) >>
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1099 0 obj <<
+882 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [397.768 333.274 409.724 343.461]
-/A << /S /GoTo /D (page.27) >>
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1100 0 obj <<
+883 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [397.768 309.336 409.724 319.523]
-/A << /S /GoTo /D (page.26) >>
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1101 0 obj <<
+884 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [397.768 273.444 409.724 283.63]
-/A << /S /GoTo /D (page.27) >>
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1102 0 obj <<
+885 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [397.768 249.506 409.724 259.693]
-/A << /S /GoTo /D (page.27) >>
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1103 0 obj <<
+886 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [397.768 225.569 409.724 235.755]
-/A << /S /GoTo /D (page.26) >>
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1104 0 obj <<
+887 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [397.768 201.631 409.724 211.818]
-/A << /S /GoTo /D (page.27) >>
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1105 0 obj <<
+888 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [397.768 177.694 409.724 187.88]
-/A << /S /GoTo /D (page.26) >>
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1106 0 obj <<
+889 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [397.768 153.756 409.724 163.943]
-/A << /S /GoTo /D (page.27) >>
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1107 0 obj <<
+890 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [397.768 129.819 409.724 140.005]
-/A << /S /GoTo /D (page.28) >>
+/A << /S /GoTo /D (page.26) >>
>> endobj
-1108 0 obj <<
+891 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [397.768 105.881 409.724 116.068]
-/A << /S /GoTo /D (page.28) >>
+/A << /S /GoTo /D (page.26) >>
>> endobj
-1113 0 obj <<
-/D [1111 0 R /XYZ 89 770.89 null]
+896 0 obj <<
+/D [894 0 R /XYZ 89 770.89 null]
>> endobj
-1110 0 obj <<
-/Font << /F22 396 0 R /F23 397 0 R >>
+893 0 obj <<
+/Font << /F22 292 0 R /F23 293 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1189 0 obj <<
-/Length 1137
+973 0 obj <<
+/Length 1131
/Filter /FlateDecode
>>
stream
-xZێ8}+HCIHG8NzF۰HݴF߯sA%\:ub ^
-c>J DZli>pR!M\˱. 1O"c9^,/N'OS( PeL|TŚ̓pO< (H$7u!__ <мL5qB0͞u.Ը:+H沫HH B ?4 dYuGu}]5^zj.a@v4FNpr%i,Sq%A,o2]ӳkۆkuj4&<[~{G8xbuC`1gcWWF]Y"Ҥ,F׈M쑜? I7R6D]xfeYՑ8ZYy:l UYۆ#z}Vz quJ R.-LAK:\S
-ɡ0Ln8/n7vm.gQmF1CVK)C6 a(N i||m:ؠ0EΗr\fsybǽA*ZeƸ: 5vVˏoe0vB.kfF
+xZ[o8~ϯ#HK ɣ&a
+MU5mwLG4'#}bFD~]qH6O\mm^&4"w/zD-ȩ^=Oȶ~ \o> džϮ.CW<=/䷗?́mXVP
+o9MD&8!9 I:G0sA<[Xq\xztEBH ?'2[]->gLetQ%-0H(CɉFǚ [
+Ϡ
+|8g]͸]̑mܦa9Xp`$Փ ~ As~Y(47"G]3J~`'Ӂlg8M+  maʋ\%#]~ODޭy-VT_*)/v c yy䶒0$ o4>T Xg)NgkeG=YVw]ȝ '9+(2G]8-<pz B%t45iLV_ؗ"Ikv*P^Y&tj㓳4 Tᴼ}Z92UcWR5LhcjܔpSߚ=ky{ OO:/=o;LI>{Zz:V{SG<Pt6BSZ0,v?P
endstream
endobj
-1188 0 obj <<
+972 0 obj <<
/Type /Page
-/Contents 1189 0 R
-/Resources 1187 0 R
+/Contents 973 0 R
+/Resources 971 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 1114 0 R
-/Annots [ 1109 0 R 1115 0 R 1116 0 R 1117 0 R 1118 0 R 1119 0 R 1120 0 R 1121 0 R 1122 0 R 1123 0 R 1124 0 R 1125 0 R 1126 0 R 1127 0 R 1128 0 R 1129 0 R 1130 0 R 1131 0 R 1132 0 R 1133 0 R 1134 0 R 1135 0 R 1136 0 R 1137 0 R 1138 0 R 1139 0 R 1140 0 R 1141 0 R 1142 0 R 1143 0 R 1144 0 R 1145 0 R 1146 0 R 1147 0 R 1148 0 R 1149 0 R 1150 0 R 1151 0 R 1152 0 R 1153 0 R 1154 0 R 1155 0 R 1156 0 R 1157 0 R 1158 0 R 1159 0 R 1160 0 R 1161 0 R 1162 0 R 1163 0 R 1164 0 R 1165 0 R 1166 0 R 1167 0 R 1168 0 R 1169 0 R 1170 0 R 1171 0 R 1172 0 R 1173 0 R 1174 0 R 1175 0 R 1176 0 R 1177 0 R 1178 0 R 1179 0 R 1180 0 R 1181 0 R 1182 0 R 1183 0 R 1184 0 R 1185 0 R 1186 0 R ]
+/Parent 897 0 R
+/Annots [ 892 0 R 898 0 R 899 0 R 900 0 R 901 0 R 902 0 R 903 0 R 904 0 R 905 0 R 906 0 R 907 0 R 908 0 R 909 0 R 910 0 R 911 0 R 912 0 R 913 0 R 914 0 R 915 0 R 916 0 R 917 0 R 918 0 R 919 0 R 920 0 R 921 0 R 922 0 R 923 0 R 924 0 R 925 0 R 926 0 R 927 0 R 928 0 R 929 0 R 930 0 R 931 0 R 932 0 R 933 0 R 934 0 R 935 0 R 936 0 R 937 0 R 938 0 R 939 0 R 940 0 R 941 0 R 942 0 R 943 0 R 944 0 R 945 0 R 946 0 R 947 0 R 948 0 R 949 0 R 950 0 R 951 0 R 952 0 R 953 0 R 954 0 R 955 0 R 956 0 R 957 0 R 958 0 R 959 0 R 960 0 R 961 0 R 962 0 R 963 0 R 964 0 R 965 0 R 966 0 R 967 0 R 968 0 R 969 0 R ]
>> endobj
-1109 0 obj <<
+892 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 727.536 193.242 737.723]
-/A << /S /GoTo /D (page.28) >>
+/A << /S /GoTo /D (page.26) >>
>> endobj
-1115 0 obj <<
+898 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 703.626 193.242 713.812]
-/A << /S /GoTo /D (page.28) >>
+/A << /S /GoTo /D (page.26) >>
>> endobj
-1116 0 obj <<
+899 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 679.715 193.242 689.902]
-/A << /S /GoTo /D (page.28) >>
+/A << /S /GoTo /D (page.27) >>
>> endobj
-1117 0 obj <<
+900 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 643.85 193.242 654.037]
-/A << /S /GoTo /D (page.28) >>
+/A << /S /GoTo /D (page.25) >>
>> endobj
-1118 0 obj <<
+901 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 619.94 193.242 630.126]
-/A << /S /GoTo /D (page.28) >>
+/A << /S /GoTo /D (page.25) >>
>> endobj
-1119 0 obj <<
+902 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 596.029 193.242 606.216]
-/A << /S /GoTo /D (page.27) >>
+/A << /S /GoTo /D (page.25) >>
>> endobj
-1120 0 obj <<
+903 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 572.119 193.242 582.306]
-/A << /S /GoTo /D (page.27) >>
+/A << /S /GoTo /D (page.25) >>
>> endobj
-1121 0 obj <<
+904 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 548.209 193.242 558.395]
-/A << /S /GoTo /D (page.28) >>
+/A << /S /GoTo /D (page.26) >>
>> endobj
-1122 0 obj <<
+905 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 524.298 193.242 534.485]
-/A << /S /GoTo /D (page.28) >>
+/A << /S /GoTo /D (page.25) >>
>> endobj
-1123 0 obj <<
+906 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 500.388 193.242 510.575]
-/A << /S /GoTo /D (page.26) >>
+/A << /S /GoTo /D (page.25) >>
>> endobj
-1124 0 obj <<
+907 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 476.478 193.242 486.664]
/A << /S /GoTo /D (page.25) >>
>> endobj
-1125 0 obj <<
+908 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 452.567 193.242 462.754]
-/A << /S /GoTo /D (page.25) >>
+/A << /S /GoTo /D (page.26) >>
>> endobj
-1126 0 obj <<
+909 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 428.657 193.242 438.844]
-/A << /S /GoTo /D (page.25) >>
+/A << /S /GoTo /D (page.27) >>
>> endobj
-1127 0 obj <<
+910 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 404.747 193.242 414.933]
-/A << /S /GoTo /D (page.25) >>
+/A << /S /GoTo /D (page.23) >>
>> endobj
-1128 0 obj <<
+911 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [181.287 380.836 193.242 391.023]
-/A << /S /GoTo /D (page.27) >>
+/A << /S /GoTo /D (page.22) >>
>> endobj
-1129 0 obj <<
+912 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [234.159 356.926 246.114 367.113]
-/A << /S /GoTo /D (page.28) >>
+/Rect [181.287 356.926 193.242 367.113]
+/A << /S /GoTo /D (page.22) >>
>> endobj
-1130 0 obj <<
+913 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [253.476 344.971 265.432 355.157]
-/A << /S /GoTo /D (page.27) >>
+/Rect [181.287 333.016 193.242 343.202]
+/A << /S /GoTo /D (page.23) >>
>> endobj
-1131 0 obj <<
+914 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [230.084 333.016 242.039 343.202]
-/A << /S /GoTo /D (page.27) >>
+/Rect [181.287 309.105 193.242 319.292]
+/A << /S /GoTo /D (page.23) >>
>> endobj
-1132 0 obj <<
+915 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [232.853 321.06 244.808 331.247]
-/A << /S /GoTo /D (page.27) >>
+/Rect [181.287 285.195 193.242 295.382]
+/A << /S /GoTo /D (page.25) >>
>> endobj
-1133 0 obj <<
+916 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [222.164 309.105 234.119 319.292]
-/A << /S /GoTo /D (page.27) >>
+/Rect [234.159 261.285 246.114 271.471]
+/A << /S /GoTo /D (page.26) >>
>> endobj
-1134 0 obj <<
+917 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [222.891 297.15 234.846 307.337]
-/A << /S /GoTo /D (page.27) >>
+/Rect [253.476 249.329 265.432 259.516]
+/A << /S /GoTo /D (page.25) >>
>> endobj
-1135 0 obj <<
+918 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [225.66 285.195 237.615 295.382]
-/A << /S /GoTo /D (page.27) >>
+/Rect [230.084 237.374 242.039 247.561]
+/A << /S /GoTo /D (page.25) >>
>> endobj
-1136 0 obj <<
+919 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [281.929 273.24 293.885 283.426]
-/A << /S /GoTo /D (page.27) >>
+/Rect [232.853 225.419 244.808 235.606]
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1137 0 obj <<
+920 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [207.967 261.285 219.922 271.471]
-/A << /S /GoTo /D (page.27) >>
+/Rect [222.164 213.464 234.119 223.651]
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1138 0 obj <<
+921 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [210.736 249.329 222.691 259.516]
-/A << /S /GoTo /D (page.26) >>
+/Rect [222.891 201.509 234.846 211.695]
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1139 0 obj <<
+922 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [269.885 237.374 281.84 247.561]
-/A << /S /GoTo /D (page.27) >>
+/Rect [225.66 189.554 237.615 199.74]
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1140 0 obj <<
+923 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [250.508 225.419 262.463 235.606]
-/A << /S /GoTo /D (page.26) >>
+/Rect [281.929 177.598 293.885 187.785]
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1141 0 obj <<
+924 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [270.452 213.464 282.408 223.651]
-/A << /S /GoTo /D (page.26) >>
+/Rect [207.967 165.643 219.922 175.83]
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1142 0 obj <<
+925 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [256.814 201.509 268.769 211.695]
-/A << /S /GoTo /D (page.26) >>
+/Rect [210.736 153.688 222.691 163.875]
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1143 0 obj <<
+926 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [258.109 189.554 270.064 199.74]
-/A << /S /GoTo /D (page.26) >>
+/Rect [269.885 141.733 281.84 151.92]
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1144 0 obj <<
+927 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [178.817 177.598 190.772 187.785]
-/A << /S /GoTo /D (page.26) >>
+/Rect [250.508 129.778 262.463 139.964]
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1145 0 obj <<
+928 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [251.783 165.643 263.738 175.83]
-/A << /S /GoTo /D (page.26) >>
+/Rect [270.452 117.823 282.408 128.009]
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1146 0 obj <<
+929 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [232.316 153.688 244.271 163.875]
-/A << /S /GoTo /D (page.27) >>
+/Rect [256.814 105.867 268.769 116.054]
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1147 0 obj <<
+930 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [228.002 141.733 239.957 151.92]
-/A << /S /GoTo /D (page.27) >>
+/Rect [258.109 93.912 270.064 104.099]
+/A << /S /GoTo /D (page.23) >>
>> endobj
-1148 0 obj <<
+931 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [248.017 129.778 259.972 139.964]
-/A << /S /GoTo /D (page.26) >>
+/Rect [395.298 727.536 407.253 737.723]
+/A << /S /GoTo /D (page.23) >>
>> endobj
-1149 0 obj <<
+932 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [212.938 117.105 224.893 128.009]
-/A << /S /GoTo /D (page.26) >>
+/Rect [468.264 715.581 480.219 725.768]
+/A << /S /GoTo /D (page.23) >>
>> endobj
-1150 0 obj <<
+933 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [215.708 105.15 227.663 116.054]
-/A << /S /GoTo /D (page.26) >>
+/Rect [448.797 703.626 460.752 713.812]
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1151 0 obj <<
+934 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [253.148 93.912 265.103 104.099]
-/A << /S /GoTo /D (page.27) >>
+/Rect [444.483 691.671 456.438 701.857]
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1152 0 obj <<
+935 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [402.342 715.581 414.297 725.768]
-/A << /S /GoTo /D (page.27) >>
+/Rect [464.498 679.715 476.453 689.902]
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1153 0 obj <<
+936 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [345.336 693.011 357.291 701.857]
-/A << /S /GoTo /D (page.27) >>
+/Rect [429.42 667.043 441.375 677.947]
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1154 0 obj <<
+937 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [476.234 679.715 488.189 689.902]
-/A << /S /GoTo /D (page.27) >>
+/Rect [432.189 655.088 444.144 665.992]
+/A << /S /GoTo /D (page.23) >>
>> endobj
-1155 0 obj <<
+938 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [345.336 657.145 357.291 665.992]
-/A << /S /GoTo /D (page.26) >>
+/Rect [469.629 643.85 481.584 654.037]
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1156 0 obj <<
+939 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [433.126 643.85 445.081 654.037]
-/A << /S /GoTo /D (page.26) >>
+/Rect [402.342 619.94 414.297 630.126]
+/A << /S /GoTo /D (page.25) >>
>> endobj
-1157 0 obj <<
+940 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [476.224 631.895 488.179 642.081]
-/A << /S /GoTo /D (page.26) >>
+/Rect [345.336 597.369 357.291 606.216]
+/A << /S /GoTo /D (page.25) >>
>> endobj
-1158 0 obj <<
+941 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [476.075 619.94 488.03 630.126]
-/A << /S /GoTo /D (page.27) >>
+/Rect [476.234 584.074 488.189 594.261]
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1159 0 obj <<
+942 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [434.989 596.029 446.944 606.216]
-/A << /S /GoTo /D (page.26) >>
+/Rect [345.336 561.504 357.291 570.35]
+/A << /S /GoTo /D (page.23) >>
>> endobj
-1160 0 obj <<
+943 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [345.336 573.459 357.291 582.306]
-/A << /S /GoTo /D (page.26) >>
+/Rect [433.126 548.209 445.081 558.395]
+/A << /S /GoTo /D (page.23) >>
>> endobj
-1161 0 obj <<
+944 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [390.725 548.209 402.68 558.395]
-/A << /S /GoTo /D (page.26) >>
+/Rect [476.224 536.253 488.179 546.44]
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1162 0 obj <<
+945 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [456.468 524.298 468.424 534.485]
-/A << /S /GoTo /D (page.27) >>
+/Rect [476.075 524.298 488.03 534.485]
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1163 0 obj <<
+946 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [497.106 512.343 509.061 522.53]
-/A << /S /GoTo /D (page.26) >>
+/Rect [434.989 500.388 446.944 510.575]
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1164 0 obj <<
+947 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [427.179 488.433 439.134 498.619]
-/A << /S /GoTo /D (page.27) >>
+/Rect [345.336 477.917 357.291 486.664]
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1165 0 obj <<
+948 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [474.411 476.478 486.366 486.664]
-/A << /S /GoTo /D (page.27) >>
+/Rect [390.725 452.567 402.68 462.754]
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1166 0 obj <<
+949 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [413.101 452.567 425.056 462.754]
-/A << /S /GoTo /D (page.26) >>
+/Rect [456.468 428.657 468.424 438.844]
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1167 0 obj <<
+950 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [409.534 428.657 421.49 438.844]
-/A << /S /GoTo /D (page.27) >>
+/Rect [497.106 416.702 509.061 426.888]
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1168 0 obj <<
+951 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [426.142 404.747 438.097 414.933]
-/A << /S /GoTo /D (page.26) >>
+/Rect [427.179 392.791 439.134 402.978]
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1169 0 obj <<
+952 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [475.726 392.791 487.681 402.978]
-/A << /S /GoTo /D (page.27) >>
+/Rect [474.411 380.836 486.366 391.023]
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1170 0 obj <<
+953 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [492.653 380.836 504.608 391.023]
-/A << /S /GoTo /D (page.28) >>
+/Rect [413.101 356.926 425.056 367.113]
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1171 0 obj <<
+954 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [457.096 368.881 469.051 379.068]
-/A << /S /GoTo /D (page.28) >>
+/Rect [409.534 333.016 421.49 343.202]
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1172 0 obj <<
+955 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [489.713 356.926 501.668 367.113]
-/A << /S /GoTo /D (page.28) >>
+/Rect [426.142 309.105 438.097 319.292]
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1173 0 obj <<
+956 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [475.009 344.971 486.964 355.157]
-/A << /S /GoTo /D (page.28) >>
+/Rect [475.726 297.15 487.681 307.337]
+/A << /S /GoTo /D (page.24) >>
>> endobj
-1174 0 obj <<
+957 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [433.146 333.016 445.101 343.202]
-/A << /S /GoTo /D (page.28) >>
+/Rect [492.653 285.195 504.608 295.382]
+/A << /S /GoTo /D (page.26) >>
>> endobj
-1175 0 obj <<
+958 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [379.647 309.105 391.602 319.292]
-/A << /S /GoTo /D (page.28) >>
+/Rect [457.096 273.24 469.051 283.426]
+/A << /S /GoTo /D (page.26) >>
>> endobj
-1176 0 obj <<
+959 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [395.148 285.195 407.104 295.382]
-/A << /S /GoTo /D (page.28) >>
+/Rect [489.713 261.285 501.668 271.471]
+/A << /S /GoTo /D (page.26) >>
>> endobj
-1177 0 obj <<
+960 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [479.432 273.24 491.387 283.426]
-/A << /S /GoTo /D (page.27) >>
+/Rect [475.009 249.329 486.964 259.516]
+/A << /S /GoTo /D (page.26) >>
>> endobj
-1178 0 obj <<
+961 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [494.127 261.285 506.082 271.471]
+/Rect [433.146 237.374 445.101 247.561]
/A << /S /GoTo /D (page.27) >>
>> endobj
-1179 0 obj <<
+962 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [439.432 248.986 451.387 259.516]
-/A << /S /GoTo /D (page.28) >>
+/Rect [379.647 213.464 391.602 223.651]
+/A << /S /GoTo /D (page.25) >>
>> endobj
-1180 0 obj <<
+963 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [467.726 237.374 479.681 247.561]
-/A << /S /GoTo /D (page.28) >>
+/Rect [494.705 201.509 506.66 211.695]
+/A << /S /GoTo /D (page.25) >>
>> endobj
-1181 0 obj <<
+964 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [397.768 213.464 409.724 223.651]
-/A << /S /GoTo /D (page.28) >>
+/Rect [466.351 189.554 478.306 199.74]
+/A << /S /GoTo /D (page.25) >>
>> endobj
-1182 0 obj <<
+965 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [397.768 189.554 409.724 199.74]
-/A << /S /GoTo /D (page.29) >>
+/Rect [494.376 177.598 506.331 187.785]
+/A << /S /GoTo /D (page.25) >>
>> endobj
-1183 0 obj <<
+966 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [397.768 165.643 409.724 175.83]
-/A << /S /GoTo /D (page.29) >>
+/Rect [345.336 155.028 357.291 163.875]
+/A << /S /GoTo /D (page.26) >>
>> endobj
-1184 0 obj <<
+967 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [397.768 141.733 409.724 151.92]
-/A << /S /GoTo /D (page.29) >>
+/Rect [345.336 131.118 357.291 139.964]
+/A << /S /GoTo /D (page.25) >>
>> endobj
-1185 0 obj <<
+968 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [397.768 117.823 409.724 128.009]
-/A << /S /GoTo /D (page.30) >>
+/Rect [395.148 105.867 407.104 116.054]
+/A << /S /GoTo /D (page.25) >>
>> endobj
-1186 0 obj <<
+969 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [397.768 93.912 409.724 104.099]
-/A << /S /GoTo /D (page.30) >>
+/Rect [494.127 93.912 506.082 104.099]
+/A << /S /GoTo /D (page.25) >>
>> endobj
-1190 0 obj <<
-/D [1188 0 R /XYZ 89 770.89 null]
+974 0 obj <<
+/D [972 0 R /XYZ 89 770.89 null]
>> endobj
-1187 0 obj <<
-/Font << /F22 396 0 R /F23 397 0 R >>
+971 0 obj <<
+/Font << /F22 292 0 R /F23 293 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1266 0 obj <<
-/Length 938
+1051 0 obj <<
+/Length 883
/Filter /FlateDecode
>>
stream
-xř]s0- \"bKǪ n-3|H(`!<$90&!XI"0g@@[Y'ZGټ-jHJRIxr|fH
-ms!E f0W9 sCve9A)VOUF=UT]On"b RfE<0FCE6wk6f$H˺PDlr&\4)e*^;o2m\"׾yN3sIh/Ddڌ8͢q=6"(<N̓{a|jF˧9
- Grd75ꭣ(ٶIqӡ-A9 Uf.|,
-DX> d+uJ=ͱR8rUZ+GIgX=|/6k [ uZ 5qmo,WNEdN|a7kOeT2uK1HYUu \{(lx&0:maiuꂥ?"-
-U,KcnK*|99U=arӕX+\_#eIz+Z%:ek&7>‰G/
--p TtMl
-OۂFEo~٠QSIvA,"ҙ"ň-
+xř]s0ԙ-z-pwgbjApN7~ >{)X>Bͷ%$!%
+󆃮x}}l26NM5ۨ}Q<*oo+阰Hb\"vŒ%J/ܱu?vܿKz,`,_ʌ:$(vã} zjmwffʾ)PhCplƖ)[kļ,v}=Y:Z,ulӡ< fW' -XTә}b819x<<WhD#1P#KHs'aK:?{f%38DqB+Źi!}s=R=[؞(tFUVq5@V['BSM3$~7Vf(, k ;ӨZ_1o3Q\DјsUpE{7QrVaա.AY`⹬`KsRWDX.nǛv#J猸bu'2++gk~{otrT֢`uQUi,*Q.0[c$[=?|R*
endstream
endobj
-1265 0 obj <<
+1050 0 obj <<
/Type /Page
-/Contents 1266 0 R
-/Resources 1264 0 R
+/Contents 1051 0 R
+/Resources 1049 0 R
/MediaBox [0 0 595.276 841.89]
-/Parent 1114 0 R
-/Annots [ 1191 0 R 1192 0 R 1193 0 R 1194 0 R 1195 0 R 1196 0 R 1197 0 R 1198 0 R 1199 0 R 1200 0 R 1201 0 R 1202 0 R 1203 0 R 1204 0 R 1205 0 R 1206 0 R 1207 0 R 1208 0 R 1209 0 R 1210 0 R 1211 0 R 1212 0 R 1213 0 R 1214 0 R 1215 0 R 1216 0 R 1217 0 R 1218 0 R 1219 0 R 1220 0 R 1221 0 R 1222 0 R 1223 0 R 1224 0 R 1225 0 R 1226 0 R 1227 0 R 1228 0 R 1229 0 R 1230 0 R 1231 0 R 1232 0 R 1233 0 R 1234 0 R 1235 0 R 1236 0 R 1237 0 R 1238 0 R 1239 0 R 1240 0 R 1241 0 R 1242 0 R 1243 0 R 1244 0 R 1245 0 R 1246 0 R 1247 0 R 1248 0 R 1249 0 R 1250 0 R 1251 0 R 1252 0 R 1253 0 R 1254 0 R 1255 0 R 1256 0 R 1257 0 R 1258 0 R 1259 0 R 1260 0 R 1261 0 R 1262 0 R ]
+/Parent 897 0 R
+/Annots [ 970 0 R 975 0 R 976 0 R 977 0 R 978 0 R 979 0 R 980 0 R 981 0 R 982 0 R 983 0 R 984 0 R 985 0 R 986 0 R 987 0 R 988 0 R 989 0 R 990 0 R 991 0 R 992 0 R 993 0 R 994 0 R 995 0 R 996 0 R 997 0 R 998 0 R 999 0 R 1000 0 R 1001 0 R 1002 0 R 1003 0 R 1004 0 R 1005 0 R 1006 0 R 1007 0 R 1008 0 R 1009 0 R 1010 0 R 1011 0 R 1012 0 R 1013 0 R 1014 0 R 1015 0 R 1016 0 R 1017 0 R 1018 0 R 1019 0 R 1020 0 R 1021 0 R 1022 0 R 1023 0 R 1024 0 R 1025 0 R 1026 0 R 1027 0 R 1028 0 R 1029 0 R 1030 0 R 1031 0 R 1032 0 R 1033 0 R 1034 0 R 1035 0 R 1036 0 R 1037 0 R 1038 0 R 1039 0 R 1040 0 R 1041 0 R 1042 0 R 1043 0 R 1044 0 R 1045 0 R 1046 0 R 1047 0 R ]
>> endobj
-1191 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [181.287 715.534 193.242 725.72]
-/A << /S /GoTo /D (page.31) >>
->> endobj
-1192 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [181.287 691.529 193.242 701.716]
-/A << /S /GoTo /D (page.31) >>
->> endobj
-1193 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [181.287 667.524 193.242 677.711]
-/A << /S /GoTo /D (page.31) >>
->> endobj
-1194 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [161.362 655.522 173.317 665.708]
-/A << /S /GoTo /D (page.21) >>
->> endobj
-1195 0 obj <<
+970 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [224.366 643.519 236.321 653.706]
+/Rect [222.951 727.192 234.906 737.723]
/A << /S /GoTo /D (page.26) >>
>> endobj
-1196 0 obj <<
+975 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [200.963 631.517 212.919 641.703]
-/A << /S /GoTo /D (page.25) >>
+/Rect [251.245 715.581 263.2 725.768]
+/A << /S /GoTo /D (page.27) >>
>> endobj
-1197 0 obj <<
+976 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [206.493 619.514 218.448 629.701]
-/A << /S /GoTo /D (page.25) >>
+/Rect [181.287 691.671 193.242 701.857]
+/A << /S /GoTo /D (page.27) >>
>> endobj
-1198 0 obj <<
+977 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [191.001 607.512 202.956 617.699]
-/A << /S /GoTo /D (page.25) >>
+/Rect [181.287 667.76 193.242 677.947]
+/A << /S /GoTo /D (page.27) >>
>> endobj
-1199 0 obj <<
+978 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [182.692 595.51 194.647 605.696]
-/A << /S /GoTo /D (page.25) >>
+/Rect [181.287 643.85 193.242 654.037]
+/A << /S /GoTo /D (page.27) >>
>> endobj
-1200 0 obj <<
+979 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [193.96 583.507 205.915 593.694]
+/Rect [181.287 619.94 193.242 630.126]
/A << /S /GoTo /D (page.27) >>
>> endobj
-1201 0 obj <<
+980 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [215.698 571.505 227.653 581.691]
+/Rect [181.287 596.029 193.242 606.216]
/A << /S /GoTo /D (page.28) >>
>> endobj
-1202 0 obj <<
+981 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [215.15 559.502 227.105 569.689]
-/A << /S /GoTo /D (page.29) >>
+/Rect [181.287 572.119 193.242 582.306]
+/A << /S /GoTo /D (page.28) >>
>> endobj
-1203 0 obj <<
+982 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [188.599 547.5 200.555 557.686]
+/Rect [181.287 548.209 193.242 558.395]
/A << /S /GoTo /D (page.29) >>
>> endobj
-1204 0 obj <<
+983 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [211.145 534.78 223.1 545.684]
+/Rect [181.287 524.298 193.242 534.485]
/A << /S /GoTo /D (page.29) >>
>> endobj
-1205 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [221.785 523.495 233.74 533.682]
-/A << /S /GoTo /D (page.30) >>
->> endobj
-1206 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [179.753 511.493 191.708 521.679]
-/A << /S /GoTo /D (page.30) >>
->> endobj
-1207 0 obj <<
+984 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [220.689 498.773 232.644 509.677]
-/A << /S /GoTo /D (page.31) >>
+/Rect [181.287 500.388 193.242 510.575]
+/A << /S /GoTo /D (page.29) >>
>> endobj
-1208 0 obj <<
+985 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [210.726 487.488 222.682 497.674]
-/A << /S /GoTo /D (page.31) >>
+/Rect [161.362 488.433 173.317 498.619]
+/A << /S /GoTo /D (page.19) >>
>> endobj
-1209 0 obj <<
+986 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [225.112 475.485 237.067 485.672]
-/A << /S /GoTo /D (page.31) >>
+/Rect [224.366 476.478 236.321 486.664]
+/A << /S /GoTo /D (page.23) >>
>> endobj
-1210 0 obj <<
+987 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [187.484 462.766 199.439 473.67]
-/A << /S /GoTo /D (page.31) >>
+/Rect [200.963 464.522 212.919 474.709]
+/A << /S /GoTo /D (page.22) >>
>> endobj
-1211 0 obj <<
+988 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [203.942 451.48 215.897 461.667]
-/A << /S /GoTo /D (page.32) >>
+/Rect [206.493 452.567 218.448 462.754]
+/A << /S /GoTo /D (page.22) >>
>> endobj
-1212 0 obj <<
+989 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [227.514 439.478 239.469 449.665]
-/A << /S /GoTo /D (page.26) >>
+/Rect [191.001 440.612 202.956 450.799]
+/A << /S /GoTo /D (page.23) >>
>> endobj
-1213 0 obj <<
+990 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [205.945 427.476 217.9 437.662]
-/A << /S /GoTo /D (page.25) >>
+/Rect [182.692 428.657 194.647 438.844]
+/A << /S /GoTo /D (page.23) >>
>> endobj
-1214 0 obj <<
+991 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [185.462 415.473 197.417 425.66]
+/Rect [193.96 416.702 205.915 426.888]
/A << /S /GoTo /D (page.25) >>
>> endobj
-1215 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [201.661 403.471 213.616 413.657]
-/A << /S /GoTo /D (page.26) >>
->> endobj
-1216 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [181.287 379.466 193.242 389.653]
-/A << /S /GoTo /D (page.31) >>
->> endobj
-1217 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [181.287 355.461 193.242 365.648]
-/A << /S /GoTo /D (page.32) >>
->> endobj
-1218 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [165.377 331.456 177.332 341.643]
-/A << /S /GoTo /D (page.18) >>
->> endobj
-1219 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [165.377 307.451 177.332 317.638]
-/A << /S /GoTo /D (page.18) >>
->> endobj
-1220 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [150.712 282.729 162.667 293.633]
-/A << /S /GoTo /D (page.34) >>
->> endobj
-1221 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [150.712 258.724 162.667 269.628]
-/A << /S /GoTo /D (page.35) >>
->> endobj
-1222 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [150.712 234.72 162.667 245.624]
-/A << /S /GoTo /D (page.35) >>
->> endobj
-1223 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [165.377 211.432 177.332 221.619]
-/A << /S /GoTo /D (page.18) >>
->> endobj
-1224 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [165.377 176.677 177.332 186.864]
-/A << /S /GoTo /D (page.18) >>
->> endobj
-1225 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [165.377 141.922 177.332 152.109]
-/A << /S /GoTo /D (page.18) >>
->> endobj
-1226 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [150.712 117.2 162.667 128.104]
-/A << /S /GoTo /D (page.35) >>
->> endobj
-1227 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [150.712 93.195 162.667 104.099]
-/A << /S /GoTo /D (page.35) >>
->> endobj
-1228 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [367.193 714.795 379.148 725.699]
-/A << /S /GoTo /D (page.35) >>
->> endobj
-1229 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [367.193 690.747 379.148 701.651]
-/A << /S /GoTo /D (page.35) >>
->> endobj
-1230 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [361.933 679.44 373.888 689.627]
-/A << /S /GoTo /D (page.17) >>
->> endobj
-1231 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [391.81 666.699 403.766 677.602]
-/A << /S /GoTo /D (page.18) >>
->> endobj
-1232 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [416.159 654.674 428.114 665.578]
-/A << /S /GoTo /D (page.18) >>
->> endobj
-1233 0 obj <<
+992 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [342.566 643.368 354.521 653.554]
-/A << /S /GoTo /D (page.18) >>
+/Rect [215.698 404.747 227.653 414.933]
+/A << /S /GoTo /D (page.27) >>
>> endobj
-1234 0 obj <<
+993 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [359.173 631.344 371.128 641.53]
-/A << /S /GoTo /D (page.18) >>
+/Rect [215.15 392.791 227.105 402.978]
+/A << /S /GoTo /D (page.27) >>
>> endobj
-1235 0 obj <<
+994 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [388.503 618.602 400.458 629.506]
-/A << /S /GoTo /D (page.18) >>
+/Rect [188.599 380.836 200.555 391.023]
+/A << /S /GoTo /D (page.27) >>
>> endobj
-1236 0 obj <<
+995 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [366.924 606.578 378.88 617.482]
-/A << /S /GoTo /D (page.18) >>
+/Rect [211.145 368.164 223.1 379.068]
+/A << /S /GoTo /D (page.27) >>
>> endobj
-1237 0 obj <<
+996 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [357.36 595.271 369.315 605.458]
-/A << /S /GoTo /D (page.18) >>
+/Rect [221.785 356.926 233.74 367.113]
+/A << /S /GoTo /D (page.28) >>
>> endobj
-1238 0 obj <<
+997 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [398.874 582.53 410.829 593.434]
-/A << /S /GoTo /D (page.18) >>
+/Rect [179.753 344.971 191.708 355.157]
+/A << /S /GoTo /D (page.28) >>
>> endobj
-1239 0 obj <<
+998 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [349.211 570.506 361.166 581.41]
-/A << /S /GoTo /D (page.18) >>
+/Rect [220.689 332.298 232.644 343.202]
+/A << /S /GoTo /D (page.29) >>
>> endobj
-1240 0 obj <<
+999 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [370.78 559.199 382.735 569.386]
-/A << /S /GoTo /D (page.18) >>
+/Rect [210.726 321.06 222.682 331.247]
+/A << /S /GoTo /D (page.29) >>
>> endobj
-1241 0 obj <<
+1000 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [413.957 547.175 425.912 557.362]
-/A << /S /GoTo /D (page.19) >>
+/Rect [225.112 309.105 237.067 319.292]
+/A << /S /GoTo /D (page.29) >>
>> endobj
-1242 0 obj <<
+1001 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [386.849 534.434 398.804 545.338]
-/A << /S /GoTo /D (page.19) >>
+/Rect [187.484 296.433 199.439 307.337]
+/A << /S /GoTo /D (page.29) >>
>> endobj
-1243 0 obj <<
+1002 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [385.186 523.127 397.141 533.314]
-/A << /S /GoTo /D (page.19) >>
+/Rect [203.942 285.195 215.897 295.382]
+/A << /S /GoTo /D (page.30) >>
>> endobj
-1244 0 obj <<
+1003 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [415.621 511.103 427.576 521.289]
-/A << /S /GoTo /D (page.19) >>
+/Rect [227.514 273.24 239.469 283.426]
+/A << /S /GoTo /D (page.23) >>
>> endobj
-1245 0 obj <<
+1004 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [418.141 499.079 430.097 509.265]
-/A << /S /GoTo /D (page.19) >>
+/Rect [205.945 261.285 217.9 271.471]
+/A << /S /GoTo /D (page.23) >>
>> endobj
-1246 0 obj <<
+1005 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [391.034 486.337 402.989 497.241]
-/A << /S /GoTo /D (page.19) >>
+/Rect [185.462 249.329 197.417 259.516]
+/A << /S /GoTo /D (page.23) >>
>> endobj
-1247 0 obj <<
+1006 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [397.35 474.313 409.305 485.217]
-/A << /S /GoTo /D (page.19) >>
+/Rect [201.661 237.374 213.616 247.561]
+/A << /S /GoTo /D (page.23) >>
>> endobj
-1248 0 obj <<
+1007 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [388.254 462.289 400.209 473.193]
-/A << /S /GoTo /D (page.19) >>
+/Rect [181.287 213.464 193.242 223.651]
+/A << /S /GoTo /D (page.29) >>
>> endobj
-1249 0 obj <<
+1008 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [356.404 450.265 368.359 461.169]
-/A << /S /GoTo /D (page.19) >>
+/Rect [181.287 189.554 193.242 199.74]
+/A << /S /GoTo /D (page.30) >>
>> endobj
-1250 0 obj <<
+1009 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [376.877 438.241 388.832 449.145]
-/A << /S /GoTo /D (page.19) >>
+/Rect [165.377 165.643 177.332 175.83]
+/A << /S /GoTo /D (page.16) >>
>> endobj
-1251 0 obj <<
+1010 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [381.858 403.799 393.813 413.986]
-/A << /S /GoTo /D (page.18) >>
+/Rect [165.377 141.733 177.332 151.92]
+/A << /S /GoTo /D (page.16) >>
>> endobj
-1252 0 obj <<
+1011 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [381.858 379.751 393.813 389.938]
-/A << /S /GoTo /D (page.18) >>
+/Rect [165.377 117.823 177.332 128.009]
+/A << /S /GoTo /D (page.16) >>
>> endobj
-1253 0 obj <<
+1012 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [381.858 355.703 393.813 365.89]
-/A << /S /GoTo /D (page.18) >>
+/Rect [165.377 93.912 177.332 104.099]
+/A << /S /GoTo /D (page.16) >>
>> endobj
-1254 0 obj <<
+1013 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [367.193 319.826 379.148 330.73]
-/A << /S /GoTo /D (page.34) >>
+/Rect [381.858 715.581 393.813 725.768]
+/A << /S /GoTo /D (page.16) >>
>> endobj
-1255 0 obj <<
+1014 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [381.858 296.496 393.813 306.682]
-/A << /S /GoTo /D (page.18) >>
+/Rect [381.858 681.708 393.813 691.895]
+/A << /S /GoTo /D (page.16) >>
>> endobj
-1256 0 obj <<
+1015 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [381.858 272.447 393.813 282.634]
-/A << /S /GoTo /D (page.18) >>
+/Rect [361.933 669.753 373.888 679.939]
+/A << /S /GoTo /D (page.15) >>
>> endobj
-1257 0 obj <<
+1016 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [397.768 237.288 409.724 247.475]
-/A << /S /GoTo /D (page.26) >>
+/Rect [400.667 657.798 412.623 667.984]
+/A << /S /GoTo /D (page.16) >>
>> endobj
-1258 0 obj <<
+1017 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [367.193 201.412 379.148 212.316]
-/A << /S /GoTo /D (page.34) >>
+/Rect [391.81 645.125 403.766 656.029]
+/A << /S /GoTo /D (page.16) >>
>> endobj
-1259 0 obj <<
+1018 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [367.193 177.363 379.148 188.267]
-/A << /S /GoTo /D (page.35) >>
+/Rect [416.159 633.17 428.114 644.074]
+/A << /S /GoTo /D (page.16) >>
>> endobj
-1260 0 obj <<
+1019 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [367.193 153.315 379.148 164.219]
-/A << /S /GoTo /D (page.35) >>
+/Rect [342.566 621.932 354.521 632.119]
+/A << /S /GoTo /D (page.16) >>
>> endobj
-1261 0 obj <<
+1020 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [367.193 129.267 379.148 140.171]
-/A << /S /GoTo /D (page.35) >>
+/Rect [359.173 609.977 371.128 620.164]
+/A << /S /GoTo /D (page.16) >>
>> endobj
-1262 0 obj <<
+1021 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [397.768 105.936 409.724 116.123]
-/A << /S /GoTo /D (page.25) >>
->> endobj
-1267 0 obj <<
-/D [1265 0 R /XYZ 89 770.89 null]
->> endobj
-1264 0 obj <<
-/Font << /F22 396 0 R /F23 397 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-1306 0 obj <<
-/Length 604
-/Filter /FlateDecode
->>
-stream
-xŗ[o0iỈ*M@jY<pR$0,!_?Cda9@#"X#}614tg :
- VヹFʳs4A|ך GOف4rRL:E_5 ^"ƚXC`K$t`D3"b.ϼg+7 ~)m$×Oղp2 1)ηBn-CE<8sjDao1z[nD^*B/Ii Yso2p֏ѕQf,L[Cs(3bNp#UU85%*#T֤.
-x]MO^'nI*.53kNEj <Y?ڡL{!ޤW$]/ "6)trTF4&Syl ]db4"># RvBr&c(]$) ?X -:d|%))Z~꺓͋tWOpǫ~M$dS9Ѕq%pXhn=>jPCÿe}
-endstream
-endobj
-1305 0 obj <<
-/Type /Page
-/Contents 1306 0 R
-/Resources 1304 0 R
-/MediaBox [0 0 595.276 841.89]
-/Parent 1114 0 R
-/Annots [ 1263 0 R 1268 0 R 1269 0 R 1270 0 R 1271 0 R 1272 0 R 1273 0 R 1274 0 R 1275 0 R 1276 0 R 1277 0 R 1278 0 R 1279 0 R 1280 0 R 1281 0 R 1282 0 R 1283 0 R 1284 0 R 1285 0 R 1286 0 R 1287 0 R 1288 0 R 1289 0 R 1290 0 R 1291 0 R 1292 0 R 1293 0 R 1294 0 R 1295 0 R 1296 0 R 1297 0 R 1298 0 R 1299 0 R 1300 0 R 1301 0 R 1302 0 R 1303 0 R ]
+/Rect [388.503 597.305 400.458 608.208]
+/A << /S /GoTo /D (page.16) >>
>> endobj
-1263 0 obj <<
+1022 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [181.287 727.536 193.242 737.723]
-/A << /S /GoTo /D (page.25) >>
+/Rect [366.924 585.349 378.88 596.253]
+/A << /S /GoTo /D (page.16) >>
>> endobj
-1268 0 obj <<
+1023 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [181.287 703.488 193.242 713.675]
-/A << /S /GoTo /D (page.26) >>
+/Rect [357.36 574.112 369.315 584.298]
+/A << /S /GoTo /D (page.16) >>
>> endobj
-1269 0 obj <<
+1024 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [150.712 667.612 162.667 678.515]
-/A << /S /GoTo /D (page.34) >>
+/Rect [398.874 561.439 410.829 572.343]
+/A << /S /GoTo /D (page.16) >>
>> endobj
-1270 0 obj <<
+1025 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [130.787 655.587 142.742 666.491]
-/A << /S /GoTo /D (page.32) >>
+/Rect [349.211 549.484 361.166 560.388]
+/A << /S /GoTo /D (page.16) >>
>> endobj
-1271 0 obj <<
+1026 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [185.212 644.281 197.168 654.467]
-/A << /S /GoTo /D (page.34) >>
+/Rect [370.78 538.246 382.735 548.433]
+/A << /S /GoTo /D (page.16) >>
>> endobj
-1272 0 obj <<
+1027 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [153.491 632.257 165.447 642.443]
-/A << /S /GoTo /D (page.35) >>
+/Rect [413.957 526.291 425.912 536.477]
+/A << /S /GoTo /D (page.17) >>
>> endobj
-1273 0 obj <<
+1028 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [164.819 620.232 176.774 630.419]
-/A << /S /GoTo /D (page.35) >>
+/Rect [386.849 513.618 398.804 524.522]
+/A << /S /GoTo /D (page.17) >>
>> endobj
-1274 0 obj <<
+1029 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [131.614 608.208 143.569 618.395]
-/A << /S /GoTo /D (page.35) >>
+/Rect [385.186 502.38 397.141 512.567]
+/A << /S /GoTo /D (page.17) >>
>> endobj
-1275 0 obj <<
+1030 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [156.52 596.184 168.475 606.371]
-/A << /S /GoTo /D (page.35) >>
+/Rect [415.621 490.425 427.576 500.612]
+/A << /S /GoTo /D (page.17) >>
>> endobj
-1276 0 obj <<
+1031 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [148.769 584.16 160.724 594.347]
-/A << /S /GoTo /D (page.35) >>
+/Rect [418.141 478.47 430.097 488.657]
+/A << /S /GoTo /D (page.17) >>
>> endobj
-1277 0 obj <<
+1032 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [155.972 571.419 167.927 582.323]
-/A << /S /GoTo /D (page.35) >>
+/Rect [391.034 465.798 402.989 476.702]
+/A << /S /GoTo /D (page.17) >>
>> endobj
-1278 0 obj <<
+1033 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [197.128 560.112 209.083 570.299]
-/A << /S /GoTo /D (page.34) >>
+/Rect [397.35 453.843 409.305 464.746]
+/A << /S /GoTo /D (page.17) >>
>> endobj
-1279 0 obj <<
+1034 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [174.692 548.088 186.647 558.275]
-/A << /S /GoTo /D (page.34) >>
+/Rect [388.254 441.887 400.209 452.791]
+/A << /S /GoTo /D (page.17) >>
>> endobj
-1280 0 obj <<
+1035 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [147.414 536.064 159.369 546.251]
-/A << /S /GoTo /D (page.35) >>
+/Rect [356.404 429.932 368.359 440.836]
+/A << /S /GoTo /D (page.17) >>
>> endobj
-1281 0 obj <<
+1036 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [172.321 524.04 184.276 534.227]
-/A << /S /GoTo /D (page.35) >>
+/Rect [376.877 417.977 388.832 428.881]
+/A << /S /GoTo /D (page.17) >>
>> endobj
-1282 0 obj <<
+1037 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [171.474 511.299 183.429 522.202]
-/A << /S /GoTo /D (page.35) >>
+/Rect [381.858 384.821 393.813 395.008]
+/A << /S /GoTo /D (page.16) >>
>> endobj
-1283 0 obj <<
+1038 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [133.835 499.992 145.79 510.178]
-/A << /S /GoTo /D (page.34) >>
+/Rect [381.858 360.911 393.813 371.098]
+/A << /S /GoTo /D (page.16) >>
>> endobj
-1284 0 obj <<
+1039 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [202.478 487.968 214.433 498.154]
-/A << /S /GoTo /D (page.34) >>
+/Rect [381.858 337.001 393.813 347.187]
+/A << /S /GoTo /D (page.16) >>
>> endobj
-1285 0 obj <<
+1040 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [183.29 475.944 195.245 486.13]
-/A << /S /GoTo /D (page.34) >>
+/Rect [381.858 303.128 393.813 313.314]
+/A << /S /GoTo /D (page.16) >>
>> endobj
-1286 0 obj <<
+1041 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [184.655 463.92 196.61 474.106]
-/A << /S /GoTo /D (page.34) >>
+/Rect [381.858 279.217 393.813 289.404]
+/A << /S /GoTo /D (page.16) >>
>> endobj
-1287 0 obj <<
+1042 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [176.455 451.178 188.41 462.082]
-/A << /S /GoTo /D (page.36) >>
+/Rect [397.768 245.344 409.724 255.531]
+/A << /S /GoTo /D (page.23) >>
>> endobj
-1288 0 obj <<
+1043 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [153.402 439.871 165.357 450.058]
-/A << /S /GoTo /D (page.36) >>
+/Rect [397.768 211.471 409.724 221.658]
+/A << /S /GoTo /D (page.23) >>
>> endobj
-1289 0 obj <<
+1044 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [150.712 403.995 162.667 414.899]
-/A << /S /GoTo /D (page.34) >>
+/Rect [397.768 187.561 409.724 197.748]
+/A << /S /GoTo /D (page.23) >>
>> endobj
-1290 0 obj <<
+1045 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [150.712 379.947 162.667 390.851]
-/A << /S /GoTo /D (page.34) >>
+/Rect [397.768 163.651 409.724 173.837]
+/A << /S /GoTo /D (page.23) >>
>> endobj
-1291 0 obj <<
+1046 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [165.377 356.616 177.332 366.803]
-/A << /S /GoTo /D (page.19) >>
+/Rect [381.858 129.778 393.813 139.964]
+/A << /S /GoTo /D (page.17) >>
>> endobj
-1292 0 obj <<
+1047 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [165.377 332.568 177.332 342.754]
-/A << /S /GoTo /D (page.19) >>
+/Rect [381.858 105.867 393.813 116.054]
+/A << /S /GoTo /D (page.17) >>
>> endobj
-1293 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [165.377 308.52 177.332 318.706]
-/A << /S /GoTo /D (page.19) >>
+1052 0 obj <<
+/D [1050 0 R /XYZ 89 770.89 null]
>> endobj
-1294 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [165.377 284.471 177.332 294.658]
-/A << /S /GoTo /D (page.19) >>
+1049 0 obj <<
+/Font << /F22 292 0 R /F23 293 0 R >>
+/ProcSet [ /PDF /Text ]
>> endobj
-1295 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [165.377 260.423 177.332 270.61]
-/A << /S /GoTo /D (page.19) >>
+1062 0 obj <<
+/Length 298
+/Filter /FlateDecode
+>>
+stream
+xڽMK@+昂YgwZRD Bdߛ&U<6Y}ffa0'_qj{n@#(Q)DFE7d'r#X*$'!m @*/]Vc.ZԈ%(Z{tT&):|ϭs%:L>sZ^>E\$;kn؟R콓ÑNِx?7`1+& lK`a˪x@juY ٯ'T x
+endstream
+endobj
+1061 0 obj <<
+/Type /Page
+/Contents 1062 0 R
+/Resources 1060 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 897 0 R
+/Annots [ 1048 0 R 1053 0 R 1054 0 R 1055 0 R 1056 0 R 1057 0 R 1058 0 R 1059 0 R ]
>> endobj
-1296 0 obj <<
+1048 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [165.377 236.375 177.332 246.562]
-/A << /S /GoTo /D (page.19) >>
+/Rect [165.377 727.536 177.332 737.723]
+/A << /S /GoTo /D (page.17) >>
>> endobj
-1297 0 obj <<
+1053 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [150.712 200.499 162.667 211.403]
-/A << /S /GoTo /D (page.34) >>
+/Rect [165.377 703.626 177.332 713.812]
+/A << /S /GoTo /D (page.17) >>
>> endobj
-1298 0 obj <<
+1054 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [150.712 176.45 162.667 187.354]
-/A << /S /GoTo /D (page.36) >>
+/Rect [165.377 679.715 177.332 689.902]
+/A << /S /GoTo /D (page.17) >>
>> endobj
-1299 0 obj <<
+1055 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [165.377 142.009 177.332 152.195]
-/A << /S /GoTo /D (page.19) >>
+/Rect [165.377 655.805 177.332 665.992]
+/A << /S /GoTo /D (page.17) >>
>> endobj
-1300 0 obj <<
+1056 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [165.377 117.96 177.332 128.147]
-/A << /S /GoTo /D (page.19) >>
+/Rect [165.377 621.932 177.332 632.119]
+/A << /S /GoTo /D (page.17) >>
>> endobj
-1301 0 obj <<
+1057 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [165.377 93.912 177.332 104.099]
-/A << /S /GoTo /D (page.19) >>
+/Rect [165.377 598.022 177.332 608.208]
+/A << /S /GoTo /D (page.17) >>
>> endobj
-1302 0 obj <<
+1058 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [381.858 715.581 393.813 725.768]
-/A << /S /GoTo /D (page.19) >>
+/Rect [165.377 574.112 177.332 584.298]
+/A << /S /GoTo /D (page.17) >>
>> endobj
-1303 0 obj <<
+1059 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [367.193 680.991 379.148 691.895]
-/A << /S /GoTo /D (page.36) >>
+/Rect [165.377 540.239 177.332 550.425]
+/A << /S /GoTo /D (page.17) >>
>> endobj
-1307 0 obj <<
-/D [1305 0 R /XYZ 89 770.89 null]
+1063 0 obj <<
+/D [1061 0 R /XYZ 89 770.89 null]
>> endobj
-1304 0 obj <<
-/Font << /F22 396 0 R /F23 397 0 R >>
+1060 0 obj <<
+/Font << /F22 292 0 R /F23 293 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1309 0 obj
+1065 0 obj
[556 167 333 611 278 333 333 0 333 606 0 611 389 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 278 250 389 555 500 500 833 778 333 333 333 500 570 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 832 667 667 667 722 667 667 722 778 389 500 667 611 889 722 722 611 722 667 556 611 722 667 889 667 611 611 333 278 333 570 500 333 500 500 444 500 444 333 500 556 278 278 500 278 778 556 500 500 500 389 389 278 556 444 667 500 444 389]
endobj
-1310 0 obj
+1066 0 obj
[500 500 167 333 556 278 333 333 0 333 675 0 556 389 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 214 250 333 420 500 500 833 778 333 333 333 500 675 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 675 675 675 500 920 611 611 667 722 611 611 722 722 333 444 667 556 833 667 722 611 722 611 500 556 722 611 833 611 556 556 389 278 389 422 500 333 500 500 444 500 444 278 500 500 278 278 444 278 722 500 500 500 500 389 389 278 500 444 667 444 444 389]
endobj
-1311 0 obj
+1067 0 obj
[500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8]
endobj
-1312 0 obj
+1068 0 obj
[500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8]
endobj
-1313 0 obj
+1069 0 obj
[777.8 500 777.8 500 530.9 750 758.5 714.7 827.9 738.2 643.1 786.3 831.3 439.6 554.5 849.3 680.6 970.1 803.5 762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 828.5 580.6 682.6]
endobj
-1314 0 obj
+1070 0 obj
[769.8]
endobj
-1315 0 obj
-[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600]
+1071 0 obj
+[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600]
endobj
-1316 0 obj
+1072 0 obj
[556 556 167 333 611 278 333 333 0 333 564 0 611 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 180 250 333 408 500 500 833 778 333 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 480 200 480 541 0 0 0 333 500 444 1000 500 500 333 1000 556 333 889 0 0 0 0 0 0 444 444 350 500 1000 333 980 389 333 722 0 0 722 0 333 500 500 500 500 200 500 333 760 276 500 564 333 760 333 400 564 300 300 333 500 453 250 333 300 310 500 750 750 750 444 722 722 722 722 722 722 889 667 611 611 611 611 333 333 333 333 722 722 722 722 722 722 722 564 722 722 722 722 722 722 556 500 444 444 444 444 444]
endobj
-1317 0 obj
-[556 556 167 333 667 278 333 333 0 333 570 0 667 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 278 250 333 555 500 500 1000 833 333 333 333 500 570 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 930 722 667 722 722 667 611 778 778 389 500 778 667 944 722 778 611 778 722 556 667 722 722 1000 722 722 667 333 278 333 581 500 333 500 556 444 556 444 333 500 556 278 333 556 278 833 556 500 556 556 444 389 333 556 500 722 500 500 444 394 220 394]
+1073 0 obj
+[556 556 167 333 667 278 333 333 0 333 570 0 667 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 278 250 333 555 500 500 1000 833 333 333 333 500 570 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 930 722 667 722 722 667 611 778 778 389 500 778 667 944 722 778 611 778 722 556 667 722 722 1000 722 722 667 333 278 333 581 500 333 500 556 444 556 444 333 500 556 278 333 556 278 833 556 500 556 556 444 389 333 556 500 722 500 500 444]
endobj
-1318 0 obj <<
+1074 0 obj <<
/Length1 1648
/Length2 9497
/Length3 0
@@ -7276,7 +6086,7 @@ V
y
endstream
endobj
-1319 0 obj <<
+1075 0 obj <<
/Type /FontDescriptor
/FontName /MCOYWV+CMMI10
/Flags 4
@@ -7288,9 +6098,9 @@ endobj
/StemV 72
/XHeight 431
/CharSet (/A/B/C/D/E/F/I/N/O/P/R/S/T/U/Z/greater/less)
-/FontFile 1318 0 R
+/FontFile 1074 0 R
>> endobj
-1320 0 obj <<
+1076 0 obj <<
/Length1 1542
/Length2 8229
/Length3 0
@@ -7332,7 +6142,7 @@ TT(Lg;t̯#s00q@Ӊ|Z"d6]h3+m*~^
@ΰǃmW=j5,[
endstream
endobj
-1321 0 obj <<
+1077 0 obj <<
/Type /FontDescriptor
/FontName /VYDKHY+CMR10
/Flags 4
@@ -7344,9 +6154,9 @@ endobj
/StemV 69
/XHeight 431
/CharSet (/eight/equal/five/four/one/seven/six/three/two/zero)
-/FontFile 1320 0 R
+/FontFile 1076 0 R
>> endobj
-1322 0 obj <<
+1078 0 obj <<
/Length1 1425
/Length2 6103
/Length3 0
@@ -7380,7 +6190,7 @@ MqjLe A|
o|$+l#*n*.qf!-+~I۪qh6܌ol8Hc" g:|#}^JʄxM=l^NJZp!?}w
endstream
endobj
-1323 0 obj <<
+1079 0 obj <<
/Type /FontDescriptor
/FontName /NBBWCW+CMSY10
/Flags 4
@@ -7392,9 +6202,9 @@ endobj
/StemV 40
/XHeight 431
/CharSet (/asteriskmath/bar)
-/FontFile 1322 0 R
+/FontFile 1078 0 R
>> endobj
-1324 0 obj <<
+1080 0 obj <<
/Length1 1399
/Length2 5955
/Length3 0
@@ -7434,7 +6244,7 @@ P5Cg.AOb?+@9$shMe>,<1'yj/>X<srQkZㇲ
_WIb'꽐Ip'r}!=DLQT>Kno5V5 ̷GF#2v2*DzV?f04_h-s$Ϝlot*!ż"% [V$DiEQ/bsfϮ43:EGsW%` 3qz9zNؗ*">\Njmy89}E9wnY:'Hml$er
endstream
endobj
-1325 0 obj <<
+1081 0 obj <<
/Type /FontDescriptor
/FontName /LAJUWJ+CMSY7
/Flags 4
@@ -7446,93 +6256,72 @@ endobj
/StemV 49
/XHeight 431
/CharSet (/logicaland)
-/FontFile 1324 0 R
+/FontFile 1080 0 R
>> endobj
-1326 0 obj <<
+1082 0 obj <<
/Length1 1612
-/Length2 17354
+/Length2 13615
/Length3 0
-/Length 18194
+/Length 14446
/Filter /FlateDecode
>>
stream
-xڬct]&{ǶmbsN*v*mۮضm
-ӧ}~ckιk579
-1P΅`ikYN;ௐ\ hbio'fh
-ㇳF@p9
-QUSTE;Se{UTM {wH 됋_07rqtM_?WzF^Qq13^K䇓_Vu&5:4[[7iR;<) >PڨZT_c]i^4tq(Cs4ڋiCٓ!+@ݢ=
-d/ELЈYہ`R?ڛT_E0sLOZNk []EPd!mN,,9o9qC'+rJ8ER[Ϩ э֐ppX gA6y_ΠKJ.&Xq?ѲD3t z ]o. ՜c(F=Yw9c?tPh讃DʄGGM_:h-D?lrrNF'@槲I8EjٸMZG:E7?.)
-F#D+H⦣#P]i
-_z#CRYb
-ӦW"њ-[ #;[\;_?dv5x|5E [AC"1cW@лu_ҽ)3Qr/3e
-c%Q*K9KFj)0dxmBUXLramU9ERe}adYߩ1ǐ[\anͧ=
-T?(vlRʁØ%q% qT+(\j؉4D[n4.jaXCt 6
-L l/u 6Z~1& CKDJ
-gng
-D)!h뵩%xD*
-
-_+\С dS
-}$м2K̶IIJ$Mm0fڅ'-Uedb9`0\C`eyeOg3ĐޜCX('ٌvS/&N8Sp@.- uM3N&iINCK,n5u~"졚3LTP=>޿Qy=FV0CID:
-痦
-da5лz3HE8LaՊ*x''KCZWfyQeqĮ,VgSGXiBD)MAS2Vo$^7TP^׿ŏhVi h#+*ou6o4l}
-Mdk/C9x|)xsМÅ|L$ьԒfK$~Du `v?gLI7('ʫ[Į&b
- V<oٻSHOTV-9hܖ
-O=)sqSp8Pw;ϣ{׎G5.4zut> AžvoSW 3\ bE
-@H>"-yERźwy mCo|d+B2&HƆu6SRJZxw$jl'g\<R2fgSov*~~YĿR%f7 񓟗+qb:zC);OyNaxL9ȍ܉=;o[j~{iZz`|a˲I RN{c% 'Eb^S
-u
-{TH{
-^ :[ ,kE{
-{=&SIÉ X&d+2ն$!HᩪLPQ&,4h#)K! {7&)
-О83* XXiHuu tVSp
-IX/yKdo~GR'^d֓g: ٹ &JP}ퟭ6g Sߕ:VD E'_*͑p
-hb w5H0 s`$ܜ_LY,G$J k=\`}mOkr19tNzE=nIT^PuG^u$
- -'?dLJ  h|!anrG¥>iIJXi.(mU<<%^b9 >HԾ3+:b-\90kOq}(bxoA!
-.,N9ļU=oLsl{ LޚM%{oPQ]yq1IwYk
-:veKAg:I6om*v5LSjBu"VG'oq1@}
-kɠz 4[ /+Qn;-<# xVAz{7QD _o6$&@ޑ7hcROU\((?{ǛRߴK&
-'vvdjR8= -Vȓ1vK,RqE@4sd[b/ڱ̡`bVgU,k(szap!d:dƗEtI[2rF.ب
-Ryq)ƠD֌33AbH)gifUahjQ+-1 <IGjPZZL%ދh-D mԕ̈́ڽb攃4܎Doj0f.Η#-ޮbA+o<"uTPB3Eš`liyeofʏ8KYG3vLځLԪ*e|̙0U~GFj?]g2ߪ"`nfdAáǔ$S0f!WBo]ˌGΗnExԧ HeoSr;mX<wˌԙ!-B~ա0s=,? !#e%*3
-|늚`/?~)֗Qp~QWqscjye~&NzJZ3#
-@r_K\'o^#}zI `.bHA%tQZMptFUaw
-V(K.d2>9]c-H3yG&j-W CIݭlbUc2jXtY-hq
-kv`,
- BZ7+aNƌ[rv[3}WC;vYvIc1S&b/_Ppg j|u_H,xEf=|I!&2W|ڌ;jTY
-Nm=)f= ͇i{}gbmLk(c
-eToElSԷ'2q{,\!د~&h =Ƀm-ŤWkGў6SۛDJYZ
-CYu` uv$[E%m8\ 6Їّ0/o|:2xg%7%†3Fye:hxMzYũ#FɃnpdLJ9|>y+W c`>Wd|lk_vJis/\V;}x:\7}W;2 l#Y.)}AE?1F19ˈtdt#D-TXkr NzOuHଏ 9tl6Pg-ԂE(6G_c} BaPrFH
-uPYG=b/-ؖ^jH* ~k uhŕfY=$uAΉ`A"k5%nX$q^8&1Eu2+`\社efgO_> P y@w)ݽ}!&ildPjb[˿zYYկ}ʞfltsX4R_a*i)*a, R
-<ݠٖu)1EʎN!diy$Zd'G
- _{K4:P=ľ
-M)řa M\\s+U]G0t[v,1$"%5Fhy۞AN̶Z;^8߃fH\6
-b%3 q7,`T#"v(GvOT=pDq!<
-u,~4x^JD6dŒ$"5m]3$o&I#.79;fm6;&a\}Q%
-63@c{&oD.[ʅدuG y'ҞPzKUe :1!ěixWX|ߟᘧn ݫlnh`xņ,?i27@ڕ
-(@sv!~$<"aF<>u;w1aQB,t"50P(2_r 7 }N'uOu.f7Te'BdHwHji9fi4K,հ\xm񗷡8goUBwOpϼ݌jUתŠZ7݀Ha6OcϗPA9𲣵XoZJ]j(p_ڐXPskփvSVs 'ƭ6Q.(, I"Y&PCNfEKqJF?oH h m8xv{wxRHtz;Fs+Igu:}ɲܸδb23yi 3_VhAat_ZMS?P uֹ-qOi͸ׁ[Q Sfv7 B Gb0w[057s,35(aLd xZ*BN*Kե
- w-bsޓ4F6̘~6D`ZU3 >9œx\ӄEL~ś: y3h4\آYRa堄rxc܎e@}孠|d#RČƹaVΒ})0eωVn_;"1Ÿ΄:q(+'m8]wT_67
-ڔRD7H`#y6Hx 8sjOgQ 9IDӈ d?uܵN̡u}al3I=5tK* w_/ھӓ~EKbg|)9Sz'6 vڑ>Br?#ǮR!'unwc?%.xHM0[
-hY,cOWLl=E ҎS{ju%ƩJb3KONB#͸=QӏФ8vCfv| m{.ssӗ:ʸ ܻZ}9TiЊPT$<~YM=PXQi\^I(."F-D~j`LjJI1<^^*va33KbQ9($a ͉aq9+]
-֛#|⽃]@]ϮJ;,<)p3j$ik!Ꮰޝ5aQ`JyMKcގyxW:Oң)=H;ã<0!DPZU7^-C+jw񅔦0rQj? DCo'VVi|+⸟jEqNvox^XŠ$VRcuN-Eژ߷@RsOdN*ZU0{ҝQ{3(xz.~t4˘3\2[Mڼ4QsV w+*6G3 熿?""c1 x…+D}`;ia_0y9|?E ;sFj,
-37dVZwֽҹS
-&4
-t91_2E;@[aqWph
-H
-t9!/xqO|\vң3&w]#ksB=_WRD[>(A>ƙi;O4!"N$Abx4qtShOA>!r"nN\<8 NjXGmp}sd6pMB(8`N<#69D7dZ^]%YpR1˭NE){@W0g%[CtprT9ob{M(^1Mͽx6f9{cZDzq>yC6Be#@<(JY;_"۬0肇r,먬p:V+?6(5/w^eIo>FWa~-!R \GOd l[+5澆O"G7 RӠ;H_`Dxq /KpJ2'2pM~52IO;e|n8d-48Ӂ܏A{O*ďx.
-1!ͽs%ov+FZ=ϯ!9մ
-h2DpXz44>Ym4Շ',6]tt\P+:,/#8~ P1(Y#%Xr]|= }tߡyn'6<'F{OTm=/p;ӡ68:6y\,4F%V׆-HPS@MYܽU' >Q:@iv/ Ĭ8Zcɢ
-.?;B)G
-m\W.RZxj!]U9+$3
-lf9~.Q6w[u7.ؗҥ1kk޶F:m$ܾJmvTh bڤi힉vvׯ?~
-\J1q= ̤ U w,!饢n}[s"鸈8 n#dFJ(rҷZb`v Rj N_;#'~6?>~ɲOzt=43w"9_&9ʄN5v[!ej 5Ν̷0>9)it?NR@\tuÓ8@='[| tRdho  !{ixmEBHh'-բqGGAmXDݸ; A,rFn@tZ)E_8hO.qWd:)A(L-E=~EF ;ʮbF'L_17+B@He|d=PrMnmx珔ԸQg̰U%Q
-+U^廋eX(ڃlZۅ(T3InIҞB\GV4%=42c2(^Džoċ]%N9 C|S!4|j<pXh1>7!`xD3h TV.Lqٙ緦X׍򀩬BG`0E]cLiiR{mtHoH,(w#I*_Bp9'J #5I늧3_gzÊ-cn8K޹xg-i3\151-M75w4nx=?${+C"O 9%:%B7nF?[Ú$m^>A W \%
-AG>L3~1~XF4sJO{bf!.ñ35YW1C@;թ+GTI*
-Y%!;௭k
-޿~z=H/ܔ(!rcIK^F!+I\6p}Ǫ0:`u}0ƷbUW)l prLr֙eBGJV|ݠX΢nSV}25uh #ȏ\J0*:)miv8zo.&sfQ';wݕ [Q$yK7N_%:̦<M`m㩧7C#mz]%IJŞ$ϖe2dU#zR|k}syb1uzM4&$WlF$ dzɱ O$QRLZED*tlXAyOv}k.f]
-iH\?D_⻙Y[)]!gjɇNѾEnk'ҙS㟙O4ӨccOU6&3Z}9e(?XGە
+xڭtctݖmRAũɛm۶7Umۨbb۶mݧǹ}=?1=\kIhm 6N4
+אɪ
+-le%k`g
+oxmLPD.vF)bڿՃ &=>áʎ&2N:!Ltrw3xqasR49ǐoOpPF Li~2t<_zq=t=4 VSΦ!u&T)~4[[MPB8N
+2.dh/*E=C|0˜5)HaKtH[x!ۧP!rvٔӞ8 oV g̝Ibt.6~>'u&/|y0ʸ/z[<'pΓw
+T~98YE-hp893αQ0fIsn8&{bz.M6?f] 'kl\a¨]OE%ݾw͒X*K`)N9:LV9<(<\z.~_, c g[ukb ƞ
+1,̽d{ u%S2jh۬qB.V<<!ŒFS0b$;L+=oP~L :D0dMgs7Cah |})q3jB/p) Ht@cRGʄIjs0|H*{[u})z
+V<.KS =2}!-*d\
+O1<@d糳1FI;"sc"?M&*ph:< |AwNB@daU x.NVxهٳ,u3M\{)7qbkƚl [́룘=zRO>SÓK=KnDC靖ȳ_[{crvW͠IsOj>(SƇ!uq>U/'گJ$ %{VHXr](xOuI3썸iIefd9!U4CVT۲aʶODe܆L#Y\gAZ^ҡ\$L'A̢ך /(PU8o1w;nEiV7ЫmUcfDV:l>JATi(Ґ7$0`+$Qp"iNM0 V:!x("Wiͯ>I1 hD}DƃR@*R]?4Y~^4w:-'bv|[D?p2_mE*̋R$+wت_;v[l~Cüo/4̭OlaUYr{o~R
+'Ɓ] p`\˔g5|2ym2jƸ({g_<ÜtU DED.Zs> xU y"R[3eD9d7K "GÒAN}d^v-?~>AC(6 >Em -Ք}8LFd(A{ES+u:G!qZIk*4Q -}jdЅ>QDʱXDÄh ЂǯoxћAF둴 :995YAq Q0)+|Z*oxߕ]O^@H ۤQU_VoifSE`TE܀Mt"w׊|x* Ó\b'SxA<lؔVēXu 21:kF=~=uXԊLO,hh|%:_JFQ?V:.Xa ytr
+M0J%}#F?n.|JFa
+33`3 9]A [)2אD8gJUIyz
+>
+NyDj7m>ff7 ;Ҩs,A BTRHeOv0=zVĞV^r9њm$Ո]҄~%kM|afQ^/v(~AKC4Ih77:[FKS}ӹke0XFWY$JL-LugrEk`Tщ@E$eI4}h* NMME9l.zxO`E)csM D\$@><p9ajPKY* W;CSK2?]o,?MPbj0"ly;-hP?+ty7ߕLe+p4TK|Q UH[<_(D4X0jgK^L}JaJ:MfAAN2S+jP ϳW_C tf.<óF@, apo(; 6
+alWQyecDq5Ơu_~Q4[ږOݐ6&{<ӴK˵_?.y=-Y9/yLVDr/z7J<4ao8[VfܔC-kdq;_Ep| t]RŜ|:j[I7})ǭdF\8T}5P5RHCL\̲nզ?djʨeoŅ3A6'
+QruC(NAdc%Oq+ƌOZEMkcĔxMgYq b6 0w2OuYt+ W__u%'el}nIO~w)KӕaEy\C_fŀ=ӎM_jY`[gߥˌP7w9zZF0W@K_0luW1]*ܫb[%DeLcU.+{ Dk_jE@
+nͤ;>JcD*iGSj5cWfڲJ":[idZla:*zqs&w#T`I#|%DDthjn4I%ѯU ga(۳o~ju[^r}6 .jƣuQa,1=AY&6!&~.)`o*mhƹ̟t\~5a~iNBg:vMeTTmDxN CO+;d 16 ݔ$*0Ӥh2qGO\FؠQ }?3953?#PRC<7x(N%
+}}s5AM˿]ΊJU@x:|x}V~12
+lKP!ӽ^Ia
+Ԥe;OrR4aN3B9||7CTne@o5 MG >lL/ w8Uh 7_"x6)V@߱E5aA\z146]c<KMoDA-:YءnqDL?`-<!iT0'ohEpEIDA7.cHZcwf)-_D{[5(Mge8-82K M02֎1κJp|(o(]x&W#f feVOOӾ/QTոeu0KڗT{0avWnzxU?A<0]iR|,S[(~=G6Xu/gsW])L>'kzPK<u 1( j-ɘORC )gh
+L8Jk`F?>^vx D$,
+ <0gAV:B z:lMg&,UȘ\ xi&gYU)9+fahmXn[ȰsŸ6l_u2(-r~1i?oG6k那S2^?2#FmT`T(0}!c($cE|XBHlkFs/e~wPZL.r^zX+k
+<FOw['E5eÔm4aR?Ϡ=q JNIG0ՇS![7!yęl72&[4r!~A`Tt*lxQ/t,&OL[69yv G=\2Bϲ?`h`YM:>(m??(r᱙m;=JٟJ#9*ށh$N~-l.Ia<ۈ $ b\_t5v p)lnfb!b)"X&t-
+d)}%){4N
+=Ij>bp&NxF]ň\=&achINwǐ8@ǽ>jf&ȱυ6Sq&I!p:bV 7~_إWI>!rSo;KҒ1$$_+J6XJ>\ ϣ[8 w; wrl_`BõDp|E5Q6cC<gOWkaV0 *a|:cz77ȜR*T[ n%! '&=惲.w:43=7KR[~CZд(u#~$D_4O?\^%5X|5C>R;2_rܼZd
+{ v6b𡮁f]ɵiG?)E^DZmck
+ٰ7C!
+뫾_ |6T2ŬWffT-KH|'Dv$5_v':HUgT1da#cX$]}UB5 D H{ZkȁǔLd\X&gh$}3tCy!!qܒuL\d|Q~T4x=n7.;rϑK[Pb qyjE"uѪbJ V$3}M‚Bxpv(3xI&}4[R 
+&4ADYvk./
+P^i^NJ}ƗT3^J3-zNRkOsR:NPo3:/r`.2 ]F{O,iX7}I;EܥqHw'hB}5yqmIҸKx0%j|}9;ۿjO7K*ia2C,MNGdal, $vPLrc޹BآvQ?HSbtK@
+|-cnUHo+bֹ40)`fE,\LRC7WmͮHKS?!1GoغPH}T +UBY}(z}ݤ;LH%RA =iz4ԴF^T0m|#I6rYlMAW*?ڣsxhl+.uv֊:K>Y;
+7F+NmǯFNJH@MҸz}ٖ,  Z&'tN=G@=,$-8+C4"+\0Tz_"[Fn BR)dMUHd! -%Kkv+#N uraboXC%5*nu"߱4mԅE$im~Tݨzf6ə]R,;;V#`T_0bKr(܃cdfqp{sxevP)t!/-vÆ|: P~ɥwI]gnK|U0[P]'Ҝ}ꌩUj9ꜛ!LKHNzk^^afD_1LAY֪<2X%:ѿ*Z<o#)ѧ;N4W%rkn1X$}hI6^.#?/I{p~_1Kl|XDϼo= @f+6KmԜ@p9.}ݞŤxa.bb鷫ʏ:v?Y 0"0]sfk+(?ڞd2ή[6Dgz,{``h\2?3:$Q,(\H
+~3+1s|f#I'q bigS
+<ſX]ia Uo9pnFmcF+i<gꙍ8Z_4Qra?L- }>i7V<"sTXg6g5ly!4ZZn$G0iufy&(MPFhP9
+ pM ©fEd27kֳC=k졎H yptʚAڑ
+,Xk~T_[Kkf5Cp霧n+qs@xnL6T8ٛzM8%<H>DH \u?\Z]v)3e1xd8He;\ۅnL!ƤpH0X%.ew"}QP6&⧠ʤdȤtMI Dq͛M-bcۯR`pW/̥$TEٹM䨚*L(FI,fߥ{ߏt7B
+SaD(К^Һ>X+s
+M HDj߫.3 7d}~-++ ,htO-5Vk0i)/9KwCo\GG`miId-
+0{np=Od2؞B}d eQfWJXᔬ9|%*yMmׅa[[KCJ Sieb5wd8e46%<<,ʖn<xE↶Ay\S-!̷RՖ~D WNuV5S!@uDf~?]h20Br@uԥ~ woj&PHA韂D =t V +=
+ uݕhcK;Ȉ/9
+46D?
+9o E+kvd0EEgUt|KOn,1أ7%VPO7\ȿ4[$ n&%B=vCS>H,Y\ uxAk*>R,
+`
+L>G2$vf)S͹ʷt>tX+F uH^5o%ҏk{d" r )>W2_d6f<B k
+]˧(ڻzp$:iZRGXwX)[s&$F%&JS(NX 1Fvܩ6ZG[l2/i$T}e\BsGy| ’g> Q<2b~LOU:DQ\ Mz\`gjROD1C,Jv q˱tW@m2- B @Fә0 -ޖ"ѡgqU+o`Z
+w=}0\p!L$ f_,Gѡ(>*?-Xu)Hu{G,mMK+OCq+?<v&EvxMm+_:˘Zz՟XGʾ]dFCEZWpka$H= ] s~#ԖXz]'ɶż) "0,X:\ H?L)HEǨ,/==v--+e|^5w8
+<Sbۼ8!%=iv~aVqTTu3 V&:w"X\N·_|(qúxbճ&Z;'Yc\V02:gqzm7GMZ(XhMX0aoU S\9T9\Έ/ Q:{0c$~-A(gzQ%*(\eG'\HG6hzZ=o̻S Q,q=G;<eWX# pa`VLE5yb+ ] r!?
+?¼moV9yYGbߤ8P3|).drA|jR2{|C ,u&s'ßQ]2+Y7Oa$d=[
+jnHʠ5#fj=U8} Aʈבf
+xj[u@i`fn~-%{n4Ҥdmwr9;]jR TU,]:ck 306]7 T
+oZYbqs FGD; f>\л0NqƎG:oS#c ~޷jVF6 .= 'e`F{clZ瀊\W2ey'&5rJ *ݒ\~=Kpk4cܐmyR|ǵS#oJ'xF*/d=|](&x y&]G" x^dXMw:Y+*@+Hv(đ3+..'0~nb ڴH/j|]K:zbJwٰ㈧`CBBV'wN&vQbArJ,E6P6vv Oc뒧Ţ5]bJH0 %6PSu_sxEӚU7ˈ꘻?w r֐.F&ZTYqqEi@YE'=KlR~^D&qܮc{~j2C-`>rV\-,MJ6ιknU <oΠKx9Pl]
endstream
endobj
-1327 0 obj <<
+1083 0 obj <<
/Type /FontDescriptor
-/FontName /TXCSIR+NimbusMonL-Regu
+/FontName /IIWFZB+NimbusMonL-Regu
/Flags 4
/FontBBox [-12 -237 650 811]
/Ascent 625
@@ -7541,77 +6330,95 @@ endobj
/ItalicAngle 0
/StemV 41
/XHeight 426
-/CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/V/W/Z/a/ampersand/b/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/e/eight/equal/f/five/g/greater/h/hyphen/i/k/l/less/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/q/quotedbl/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero)
-/FontFile 1326 0 R
+/CharSet (/B/C/D/E/F/G/I/K/L/N/O/R/S/T/U/V/W/Z/a/b/braceleft/c/colon/comma/d/e/equal/f/g/greater/h/i/l/less/m/n/numbersign/o/one/p/parenleft/parenright/period/q/quotedbl/r/s/semicolon/t/two/u/underscore/y/z/zero)
+/FontFile 1082 0 R
>> endobj
-1328 0 obj <<
+1084 0 obj <<
/Length1 1626
-/Length2 17043
+/Length2 16381
/Length3 0
-/Length 17901
+/Length 17233
/Filter /FlateDecode
>>
stream
-xڬSte.Tl[3mN*vŚmfIŶm;bԷm}n/fk|zGXI^LHP5vqVU疣73Ò:-Čf<
-
-76jo`uCHFd7Z7n~YvwՁxjCrVD+<~A:u\2uιe~ 0iv[فR!:: `I_=;Ŧ> w|ziL`_i?2eGpPQQʍuԺKNEZX4bhl9
- c,Mg.jnvfjө*OŞ*/2s[qvu:\G;L/z~Bw~O?;Dd|>R_)uno1ޟw\Sii ͳXΣ~z*:%&+{`'K
-
-Ѭg
- TCf/Jf 79,<I^OYQVNٟqHiKc¹W{h6#Àc]#*ÕrBeߔ[WCq182.1%ъ:p 1
-yH7fr(eO]s ![#W jݘ?6`$_3uDܡ};`Iމ&Zd$<d*uV+.TV{ G݀<gK.tz$> ʣ_u 9lںY}d!iD[T8)2
-%.FX]+O[ 2碪TPǻ!RRh/R_ Z<!lѩaa0~f/W~{ Neam_1`"4lS<;n9cVKxUX@f~R`рqg=/!2Exi<-^8\hmIx^7lA6bwun|RiUԅ(%28uҕsQBV>Ꞓ=vݿ@V8 }1QT(V d rH]Ufyq@?ϛA"KxJmbR!"n,H2;1 A7NNOs#5PÕn9I"lDqyaw,\}q3RGykisVpPm*0QY>
-YNDHd;.Y*ܶۃy sԋ)h)>G 9M$3|Nmа$xWQtxFv_>ӕ`rʙu_|ƺMd>H5eiJm-j>;X.o
-qc:쿰&hASd#I 7֐pCS7DoI40suBO}V^ׯrH=SнXhYCnL0ȉ/^{o8$Y3j/HTrtaq ade&K$nO'CJ÷-`N_.toOδp>T6~
-V2laS{L <'<'rc[Eg5 ;CEhʩ {y֮ց~=+J)2E{uސH7MO-%,[. }j x0#qSW3ׇgY/84"EHBy{uզ|>'fTe~j:4i<EYT?nq5_MϴE(?yvٺ;^".mg"QoYByɍDIQ@p[4H`,l>+Tv6Aq]KJp))('a( 3訅zmH)_8Qkxd]R4NE.WW^D M1=">q9kϏZUףbm'įY5A7=oa?Bt-YH?1p=)37O,Բ+ |&pSϯx>6(3IS`{]=A Z{fU\~[LQN|5nUb ϗ)ƣ(o$i'1
-L(̙I -3)Kh3ԙŔ[+ffxS <jFPm! C*(L˼ygz[3[-"ΞwO@mhe
-) G:#f-`wgs_X
-T.3iFn2r)N<T{\0R|Fs>8wMU
- VzD ХeqߊSGΌ(u*BR`Q IwUşsBM:؊omwR XRm܅LR
-rp$+F!H~A-aZǙP,ɔ{o ^O+r9] o&+\bq>XoۃdDMM$Љ wf1{+K*+esB/T^{d9CJq#f$>v*WTN^ɛiSvWK Ukd<k&nBz"hBeÊZf5"ᾟگp(|sN] Ο ^B+
-xO%ӫ˒dh_V6E͜)c!@V.λ;+>J?YfǗ[~aAnK5Ov?,: jKlm]XATuv%qQq+J֢Bu(
-ǥ5C0"L |KbpREn=܈< m;^ducY-2;Td!:Qx=6?Ckjs/(@OT8R&$U!q߄׹
-3R˼fza_q`)Z TO #ݐv~AIWE797MZTؙe<q8rȮTP3jaf;:K
-զg>:%>u _^ּ
-n`]y:T^uLȄNO Qcja>@hyۇ<;[5c 0J6](jt"/x*? }"e]fDk{(6 "-꽃 _H8te"%EHȼ $,yZ͚tYP*fA]?p1 u_ayJּs?;=hC}w?k|#Jh(unOaҦd쯇{iR9N-Y̞cq<Wv  Ti \D{N_Pk$jU=L,b$LҶBWxEX|4B
-i$ߘpL2^ѯ|oGn')ugʠoyv1/\܃.SͲbp+5ت2U-htֹ+,K2r"Sn8a
-A9lR)ƼZ9cHy3oBQ-o]=i"٢X(b6l?w4OBĽU"L eS3=UC͖ڐ8wR_,4cU$HYY/"m:+.4 /55%TDWfcD~A.v-.<xJ00/V?b1TnaqBy 斧l]
-5(Ew;~Cn! 6O7_̍FQP?p^0o\@u1ܼ7zVeCTR5p {̀.XbɚSBi޲Ð~GkԤfK:(}M}}̍M<Ϗb,G.K-6kZa7JٙWe a@\^}^,@%Q7S7z6%r'QRi̞Qk~rg i.]x<32D?zy=S+avxeŗl׾F,a̟ljTߘSQ V @@y~lL5>Ԁ 2ym
-XG尲R9A,uPo;kk] ; TU%B-ʄ(:МZf䩩⣰7DUXo|qwBZaFd&nT -$=g}lzHXtEFĦ%z]W/]U/"p0q_玹]KWb3_kOe>m U}Nǁ<#|J 5Ԅ\qENW0DVY@F.|{LZH}v)m Q*9|BP;5WF;\59|n|Sw4E&یV+#3RJrEoskZjJ4/92gKᙠL@1ZW+1WSo. Kb kTϕa>qj 9^/;ପHR4VFE:Q1k *KԐphAGG Qg#3W1]ɣ_~p'U'喡طg ѽf't,BQ<'ӔeIv&Ù ECVvA/ WH5;1X60[k ư\e:oJ3 Kfe5zB~CMS*ny+Njx!>:
-sM)4;z۔h˘SLݟpmm%w8QT-c8Q\esd)Mv[DeYmZ߳{c;6yXӕ=f02z`GQdWP…b?dF$#`<f3m
-EAWbZC{^_EHFjbu޽ky'd}8Q'$
-n:'B Wc0D?8.8D:͈@lb0&jeUCc"m*,a~էfWƀk*Ј7V u⁧v (NϮҾ [qR2w*_g: ֟^p8Ow!j=Id^yPEaخu:Ufܼ^
-K%9
-CNF^],AP>] 3ԞA)޽->"?NIҏO6#7U.13ezYKA\滆"M}̃0}\ǣ#ӕ-m-ExWuUݮ!`w@qDUk@M `VC}պvȸDT.kCdClHcZM 'V%=Yfyɬ]x<)Γ
- XJiya@ֿhuքgN b%DT&D&ӿr&;ݔ?=6'i*d
-?0#\KSXx
-a).JǒH 7) % d ++yCAV";U1=/,;C`6}OҢ1'/lcAӌFeU-M\#@hOU| /V#%Yf.Pj0m{r:b#O+ytL;I&] =
--VԮ_7=mĵXTL׳Gcltw,Uo*\E:1o,L㵬J涔.ONZ!j;VYZMZZN46YtyV=(HI+h_m]o&a VvYYfSb*#vߠE Ҽoݥz.5y
-9w43f䇥'*O&!i[ /Л!ʒb^
-;r(0 [+7"N'7^GߙZCt%jS.sq+^q F%ƥl;jj'b>c}%OQ2s&t:-,Pfs쏬ؼ酺BOAc4;
-12 Tf7~`U CNhW"pK͵(VUP|hZ٨.lGZԅopW˼%}~b/)d
- sȣzZd +
-f[aӳbO-N(
-'?@5~2
-jcA
-hbgPl?p)jO}I.^{<p\6Sws!A+"I? {>zkUvWJ~nqaf=cRQ3$m giU%N<Ӎ'Dn-:=(tH.3Aܙ?SgS:
-o$4*y
-C%"
-{MC|aW|ogt>}3roZ-y۶G7n75fr4XdN*}NǞSTO
-&ʉ4ާFY[
-uX`1|\f4Axzp9 + dtc0ĎFJ0<Uu($|Ds=YўaI-N$oGXgAtq*1&?ܯQC%넆=37B1EbDZ_w ~$:Ef ˪bޅ|&6hjPY巊?#'n~":sGDœ<?"t"XzIl5‰{LAz$ Ҿ<tzz(HB*iBa[^o^{߼yǔ8= NR[vS8ͭírF<^;EMag+`Z ~Ȧx0+P88!5PV|6FB<%*6#4y |hAE j=@iO480ؐPɷ jx*$~Eix@}V[00}h{4ÎDڱ<N|kvģ"S=<d9 #-?p(k'Zr=<e&s|/3L
-o8B_G^o3 zWnF@HT ~{Ø;W>q'08 .-?`CG@ϐA\\0l 5zcBCqFJFQeA4Nxb?}"z:}zehnjmd*jr7-9yP@ Eqj_='h%Pp¹u,EؚK?Q Vh2kO@ۖm+SЊST{̂utL I/t~i
-8;(aT)&v:DdMeBU!&:&jܺ*a?̚:3g,q
-*id绍;[\З
-Hꏵڥ0ؿf3'pL!
-lv]p|n ]v0Jy-Ξn@$ڠ7`5wS0d2n\"{0ބxON+ AT:.Ff/ NS=$| 8k5d U2]z4Ezi]cpմY5rܱ:St) 0g7) |(>a(A8r>\N<Ku#pu) LN5;[=v1>(?n;%9'9*o+9^v*pʂ2= Nc%AxohD$yN8.N:In;oZgl=mM+I7J\rP>?^WeG_|ۗT+фM6_If7䪱ɵtc`
->]^mQ6اV"I<`p}M aI(0ګqѲ󧍛]hVbSY7d B@DPI-CJH^M&h`A(|eCYI;FbQlJS͒{FdF'G\kf^EFxdM^!EK#rgXv0QCσJteL]yfdAlRY%ieN4gRpاY˹<JC3̀&ޑB0/$<> ! vᶍ
-f#;x"#c0Ydz>#u#$vN~OvbhTږ)tC B!$u}ϥ,8ʚ )T6˂rt
+xڬct&[;;m۶mVIŶ*͊m[sqn/}{ߚ||c/rb%Uza3{ =3@YV[^hf+g#'uXۉ
+lob#ӥ+oxRL|8ԡQ0ƾ?#b6is@pӆ' xUKJWm0Ѡ1\3zQnBIpwRYŠ` :ԭ0
+>[XW)J\|u/Q |T($1џO$E[y<5'ְpXV虇[iZU_x_+8 @^}J +Y  *&h-6\0P}XVE# } 4.olV˨jA?~)F:o5):dG]}gj"h pEӓvɀ57-H+4"m%jp ka35/:X̛`$a&P!mh7羽U풐|i
+e|~&-'B0D$MpV cl+fyEܸ]e%x?䆑xo g\ny{ܔu05y-bz)*og׈ȵ]r
+50g)$eC49`30PΫBNUBPZD]92tAەx&QOSVW4Z 9ŕzsD:/
+fjOS^A涜5<w$7V^7f\L}d
+ꪨ 3M26ԀBj*=*/>ۉk0ޤG %,)\ǔ\g 0,*m3a-mG((^( <Fr*؅}-J)M=]=
+wQ'.}}ݟn+)K>
+>
+[$PU.T
+&,e.= [ۂzͷd3yybHH 3 Vn
+5EV*\0 -!QŹb9:AZ>[(Y'FoVzٕjAK:b擢Ж4i!$ji6l:`c [S%1RRY%[3pfXN/},5vXKGҲsh|DVB8~#d\|cɝŦ4 j׊G./au1KM3dگ!Ӷ<H"*m0mmHH_;a$w=x [券õA6>T/B]Zj*MҬG̢\q &thr3RŕP@5E}R⴯9܆`lP2EpaPp.B1X.J@)eۀ)MTӓFpzmfwTg58AzCmȸ9 |Z95zzmAcw^"Rnl"`OS%5{ CAptĜ߰$
+C{(e%*PJd=nR&aq9'U#TnGܠO2."]I.]cB?y]\3Zٙbw9s&)]:oXNm`.]eCwnFggp߅4[diK^uW/9TuS+н#q 1,=V-WN`(>rKJ83c_Rh7WTL81 7ƂӽAog >C%C_
+@%+@rO!lV-ޒ$),VUZgI,1~_Q$s|6)(auIvxWs>eEU.?׉Oocc<&(Ѫ^j "x +g ?F"/Gۭ\ed:=`É
+e!eˉO_.W>^ ͘Y DA龇:<gkcU/8>Gk_nCd񴀽0[D^o8D6bu|R:4*BzTʹB_Vo?Svw=nm2fsԄquh
+0^ DKͥ6{bp18Oa0ư " SIf'W4$2)vicŠ'[kR0'i2"/}vEwz8g]; %m܎QZUN M8")1K5`~#y.J1i|r`BpP)ަ /<"o`Ew] ả L!%+#>Ses~+op#1S9GA({Pe#MD7ԎGwMkmei_`N(x;]!*禜ŻUG8ZmTAy|QS>ޚTf=*9=.ތ43@KT)uNzՈbmL%zHv4k^72swAO}V˞{;>Zvn)^,CnB0ȉn Q`4$Y3
+Dؓ "*p=<G{4_e&K$nO/MQi-l'Y/F/6yQ֕4Çf< [nC0 I(VѶ#1=E #Ոbɲ JZ9
+e7/0WLo@5%ػ)?[ԛձ ⢳s#i1O|ޘw#i#l@@m[.
+R ]c:Y:ԡ6u \Yy$PLCP-&H905A;;gywk{ӣ%U=DғP<jcϴXi?c(Z..-YXjK
+ۗ*L񚍭%ȿffܩ>C=JgI~ğ[7@OZ&CR$-gS݋b]uÝ:Dw1Cņ<Z-ٻVH;@+Y0fEMe[۞áfdV rE}3os@[4yPW>#1Nccg)vB҃(KԀvgQ6] 1;()BS37HgPCd]$贝9OrK"j~fϐkE_pL:-9$_5/]m6泥6
+Q]k߭jz\6v^-)J[T(`0=<6=vVϽUq\(s6Jw J0w.S1%ZeYkqS_ep$Fq8O rUFS?C/0䧇xJB[Q
+5W }۾`c,55ϽoJpt%TXO2X[gu$ÂΡǰu~
+*
+VJ:RU-^~ieu EI[="_:Mt?
+<I/"/nH"۞►eyJ+]z)yvAOwg2&{0:wK! 1j-($z(CQݓ";Ujg Ax*^ՍFtZ>P: y;|:A1'B(di&Cji$J
+7bU3gi
+^r*㾆H^`C>²P`׬7RbŤ24!677DdLs+ .$(j Tl)J?.ѳ/4RDցW|lED.CᢔAiUhjħqDN`q/͓bV!;?-sJiX\Ru]H`Hd}jLM1s$ԶpT;İB
+=
+6l^>:r4/I(2\wM}z|K-/{I
+$
+ӌ;G$] y'AuA_#*{*~B`{T!SRgse/WenJA鑓ZŃorjG:)Qb='Mǔ:tغY
+ݸSƞ|Uz6g2'Գ5Wa%bZ(K S*rϨ(wig=6pn
+VĿs(qu0D'<ul+XU^!0ƝhBc5M!aRڢ(В5ԟ{V@q[Y#^"m
+g{ ,x{L uB@u0'%zV-y:rw9_mWM4vODC.\ f1"Z$CE"wg$|*d1U:yoe}]
+(q,qY deu: aTQ S*kcY%;f \|2jzsw<w?pYdOnѮWD:X
+N~rHHR=R3r`:ҍѡY?
+}T~ҤvEASDNG YCҤ l(}5k Rv b*#KHң묶fO\}^%mM9i!̪9lc
+=C镋]]
+bDؤ\훮uЛ#%m`J %w^ɭqh SHEY_x-&3-#6 ǝ'T
+7Arz[ݬ5s@ٰ;XHl`l,%1[Z9a gr?=^Zd`bcb^wIHt*…S[ŨYx~sYm9;9AZQ\m%ތg–$pp3Tdo%gO#U-qB~pj ,*1<TOnR,Tʫ4IG1fsSv r QkvArFh:MV|@HqQqCOrl)J# _e d@ nfsVT>g1- ߳Qc#5vĹFۘ? wFOv>p2&w\9 Ldՠqo3/Y"NfB"--=L~>7>X0kve4kGCu@mt~~ ڝi.^$-C)aSp;ĊNsu 4uqSHZ@ɱFlrWȧn~~1Sk=Y|ap9Nə욡߇Z*~ڥxi{Ȭzϲ>s, 61sNWLkxR
+9xS9^&9r'ںl!PWDSrO+ V[`+MaS*QˏC925»lʏOKuWTpl7DŽ ś2Bu,:J1 .8&{\)+(nDC32ȢWm&>|[߬5We Utps8Џ3D,fn-F
+;Pͤ_fm%To<{J]xe6wL3C0 ekXfn;|[c`XXaWi·{!* QA
+A0-J5tB
++N8t`yښnC.@xO^߈L
+o\D zGʢl?\:EqKa~ۋ3-Gw4؂+G|Z4S] 
+,x_k?Ul ? =l|!c*8/|<2)vLK߽m-KSYٵz
+ٷEИӾQE>RD0`ShW$|Xv Xkc$ޯOwSH(Rw{:>u߉}y'2rIը<F+&ih<Ρ(w?5/>!`LҠ!G}h7h+_B{o_]z]DBUlNshW{}?4qE6bzyr6ȁ;A-pJsO頞Gq9kiK0rLn~[ƾ 2#VomܨVGQF٘hgYDCM=82U34痗{;]$뱑|>QG +n]ݦĈiOɟhks+bW,}ىˎ&E?QÞ/roBZFڶ@FiB7JIm?5]k亀M6Nya݉c-ksх
+
+DX><tVL%@
+,hil2&E\Xv{ypZDnTN FZ0.юffwgx8d* FKDF*Jv_>##<<.eX\W^٧?f+U;q&>^,-y]MEN
+OSϠu\95Fr{i\_ {}džסX9ea'8Ԏ}SstZtґJ~Z흡r0PsZ @ex 3gS$
+tote^2,h鱴7_pmfQ4EK>ډ<"m Pys, [kyru`;68Djs0tlE>&9yBK3θ߻6sʍNriY-4 #޿Y>:CG
+4L}3N2ËP yenlYp> RrK ]Acs}y oFmXHhu$72dZTԘKEsap{8U}T;aфB9ةK"ٷr
+һz8wNYެCfؽk^̈́9s.9]+!xI^EW c -~c~q}'&,f
+qFG#ɽ&ǭ<3{dESٍgxuV1P=9Y#H9D. ޡ<wl/3vf6ǘ; 4U4 J-/et+<}0} xie uȵB3Yl (]?~z=*?KTm
+͜JHL"-$ծ**>'["cJICCS~sӢI|1ݣO#Jc@Bcnֶ7|COY eAyv+{k2^Ic
+cGaʟf Y\܊O_Lb wQQ멼F fUk)Т. ?3}aTAyhI/*3?~,V82م/Tgjv{}ZqS9<ꄬpt"D fAa&g a]l-33Ny8݁?;pnT(;>K&53 v7}
+u{WPR]B_
+'ȿÎa8>j_-s2~ fx{(Y}Ư`yN:)T嫿'`GiA wIŕҌ;#TC'y0G=mT?8[ `6ouˆ~,Bt'&lK쳿XV϶3)
+gdgӔNr˝ MOjX{@N9 &DV߄S:e'aQz=:هm6w 9ǢCiZɋͺM5Nu\DXC3
+96tTe? ~× RB+7{uD-~/> @,,X YhBX9&=Ű2&k>tN= kKٖEfsX))ݒ16U<Q"totq%WGŗi@7$rr$Gt?gkk{2.Glе$Ek *lZ3TNZS4gTu`n(_gpݻc0%Lf8J2{Wn3F=0;?bl!v& G:͟3{tȎ9dcޥIt)#ⶂyN{޹X(!~7Q\mZ$A-~!W!zeVpsTn
+|v\rhHMDYTxbھ{qKʓ)7sBNAᷱf-좦2 }J$:Js ROQ>ER@4r#fZR'MMkGI_LgCEqY6KD&W?<hlvmx!?;W
+\lU\;:(Qr|[}۫^sϯ'[])Mw:Ûctwt6Fk`xJԥܵ0-T[#- 񝉣n6#xX6B@@JqJDQUJJʏYܶ`cM`CiX#lh}i <e+?/gX}Ѽ@[½R8觧CQtsEKxYrV \u$Z'Κ r]aZSّ9A+Z\*C'};Mq3Cf*7Τڧ>H4FLڙ(L 9,(wݳjdYKwR
+ө+ڐbD#ZUрBtO]hzKOF ?̟dd $dNXIqG
+&XE زYT=8
+5اg""Ʒ{]˰-cj,"2%o}b+7iޙ}bv2Bj4R0g} TWV7v2~g1=12rא^,N~MovrMӹ`XiVe!O"S.!b*($SȻQLTPFNIXP
+n}e61+h3̇E'e}o9~9}a1;
+)fbe05@ݍAd?bRA˅cb.D#%%${7STP!|UFP<\/hz,=6Tu 4Lbx(G gI깕s/S%W]=l V^vdd\?tީ O`&UQJD=ƍ
+ƽ2!Ny *cyU13*Smg3sza/iJK(I[㢙%K9uկWkX-JW SRGe TN~}_j|c]Pe7U#…aAZ7LaX=hO
+ntS1@DMO`/>A8NJH+b!RL“t}rF~FaY#bHh%ojKy=xNc ltA+XjU>uVm]J 3:"bg\K-SO1멉WfzaVs,0[o &/mWx: [*6ќLF(/ҟk :OUUx4Pl޾jRgۓE?e"x}
+v*
+wu}\{{Oݬ&zpAYރbk#,-x@?z(w:,ږ8Ui,`(LR
+p't}怒# %J.T2lFZ}"?X:eC?ϵpI[x R J.`oہuP.Mha0A|L^jAݴJJlQ#<s@%{J{Y?¹ݙmm$-
endstream
endobj
-1329 0 obj <<
+1085 0 obj <<
/Type /FontDescriptor
-/FontName /VRKWGK+NimbusRomNo9L-Medi
+/FontName /LHHNFJ+NimbusRomNo9L-Medi
/Flags 4
/FontBBox [-168 -341 1000 960]
/Ascent 690
@@ -7620,10 +6427,10 @@ endobj
/ItalicAngle 0
/StemV 140
/XHeight 461
-/CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/U/V/X/Y/Z/a/ampersand/b/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/e/eight/equal/f/fi/five/fl/four/g/h/hyphen/i/l/m/n/nine/numbersign/o/one/p/parenleft/parenright/period/q/question/quotedbl/r/s/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero)
-/FontFile 1328 0 R
+/CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/U/V/X/Y/a/ampersand/b/c/colon/comma/d/e/eight/equal/f/fi/five/fl/four/g/h/i/l/m/n/nine/numbersign/o/one/p/parenleft/parenright/period/q/question/r/s/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero)
+/FontFile 1084 0 R
>> endobj
-1330 0 obj <<
+1086 0 obj <<
/Length1 1642
/Length2 13106
/Length3 0
@@ -7686,7 +6493,7 @@ Zp',9 _o9l?}MM~}IcRޕ)23`^c+w| P=%p
OR W$y
endstream
endobj
-1331 0 obj <<
+1087 0 obj <<
/Type /FontDescriptor
/FontName /XTTWYM+NimbusRomNo9L-MediItal
/Flags 4
@@ -7698,91 +6505,95 @@ endobj
/StemV 120
/XHeight 462
/CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/a/b/bracketleft/bracketright/c/comma/d/e/f/fl/g/h/i/l/m/n/o/p/r/s/t/u/underscore/v/x/y/z)
-/FontFile 1330 0 R
+/FontFile 1086 0 R
>> endobj
-1332 0 obj <<
+1088 0 obj <<
/Length1 1630
-/Length2 18910
+/Length2 19012
/Length3 0
-/Length 19757
+/Length 19857
/Filter /FlateDecode
>>
stream
-xڬctf]&v$۶}ǶmIfŶm'VPI*m~o>=c5qM\sͱ79 P^Lޕ`eg`-Glf+g#'u63rr3r5hL
-(&<]-\bW p0ki`OIu5wy `jhk7_0Ggbeo,Mm\\;Y'_9Xٚ31i7=?"mo
-Q9;%_ oqܛy.;ZgdgcN 395:dDnsWׅ14|vx-:~cR]QnPtq3!fi\-mAhs0L))뗾Ct:\=Qb|{tD7IoFiA/:=H>~z黁ǧ͍%5O=%Iq2to2|ut^iӨEMV[v#ΜyJd% $l/qR$@G<):*н,}±v(ag,AV̾N%$5h*ą?ր'H..-T8Q#TG R1 H?oN|މIHH:,U-Np,mKrں*$`FK\j9+nԆ]31Ot]~[NOo8{0₠`lWӨTH,@B?[ҢqHs3Nv~NHZvw^l.ZA$bwz4 F &ZMF
-r=X_w쥄LPTPl]ǦLYw?i 6&i=J-2y6r9J?5bxe}ij$Mɪ4GK~հۡy6<{8b0?YAV{M1;bRtV8JBP`
-kuI5/bl.VXl;1^,iaΕPv
-j A'rOt#nw+Vµ:E3et*xNLkl.X\mJl}N_5-<P6Efz $
-.FE`o"wH /  3vd]flisĽSZ[QruY"mC_T.>A1#a/S['D_s^VtG&es! +1*R
-o=>Mレי0./~ev!Ivxdu;g9oΘ6AP҃K%;HLw"
-[F0 }4B7UoU.O̙ %x#Fa0h(}_ɁgQg8-eeUK&m [yhRm2a7;u+44{Yn9]4&L;Ҿ?h ~^!^+mnnLfE~kRKlLޑ31-.{YB!E`DUVv7&Jw×<g![Yׄ|k \nNVOSF(\%+ۺU:6/W=\U)$e7H᮰!Rߣ`"ws%8 X8)EP@&\9aԇo=InI_X
-1}WkDbO_׾X9\QWo /iUBd_ U)Mex o/pY*1,_hm%[6Z-*6g稐M:11wp;vt=#ws6ԡ5JiXuKb*:Xri(! j#hθow'#1Ahg"xjdI)rMʕQi0G0$#pOЅҮY:$Ye+{a F56D؏:? ?^n
- '&6}FL3GD(dSgAT]qYKXّYT.!y/D6"*XhoĴ33&oMn.sE{?^ ]H!l޸)1Q48T5B~SbA_ƿ |UV
-hrj79
-?zb3/}-<B [*m(} gF }IpKC=tvأXGFR.I ,p^12 "œvc:Iu຺?LI[WYk68qӀV-v#!㲩Qs둡um'@vfپ^\ۭQ3(<3߲Q-E6|J'%%2RNn-#;6PD3o~%D~s|ks z
-/uڔ;9T/"czHK H{p>7V7Yi5WJ׊*<dYC[l_13&ljr#S;8: 9~6_ll2]l);w?e)
- :=CP#伕inZX&Z̡X\)AԲ3gV&7fSƗ)7;ǀavRerx/Ehuc4Dv~v:U_pl"h=>L)_ko pXn{vtUV=KTX .pэF)4?e<Q*lj!̚hE ~%P
-2*BxW=1,࡫0CG*<(!j@[IKoZ4
-kNS JJ&77 wÑpQfϟʩj"-D6,XóA߲6 an0M5@d=s1nq WM#~ߕ5zB6SQBb#rKIRv_Ӑ9Lšr#ʙ1Uk4Ţ$ 1DkPv  c&^gbKqUgQ{?ؘ>?|ȾcZ:kMYۡ`325qcs UFUNpXT'RoV'OpV?Q|
-&|X=6Lq 1S݂RE4_+;c=A(PpCYcZc=%F1mD\xw4
-I]e1 ]eOA"^ua =_`-7XU%~'o`4aPPNM<'+u w2'kg`@ڠ*;{ $J1a|Ch%[ÕGUL1#Ђ Ir2<'ᕼ8q82(J0O;'|fmo-~u30ky%Zml_~`Fʽe3vzRnC:D&l;qy]wQ:2r(s8_
-iXsXDlm*aҼ2}~0?DA܉km-Q<2i!XV8[nHY/n^g[lvhq i;R uEl5KYri+7a7sDgAo`gdtAKFQ/&|@ ,Z3acu}!^ЧZ#Wbk0zQʯg9ĝb_' Ę2{s'T+(g#cmQ4M-[@ .;\ Taa7V~[-XnM5.]]Z9~Ci&]rv`tVY%r24usq;!%^zvou~28Į)CBlYTAUEއ_ngV$|3;,뎁r/u,
-^ӡYiVRl?=U!+KUuȢ#f`}mquKo77רm 8]R-3GBWJ>p}Oui[~>"~Φ:$Isqg%kKz!]PO~ť q:'HTaY;:4y ?qy#$<M ?/
-aB>ʼnԲa܆yO|47
-gҡ!\nrM*P,{1][O["!R$ {gL?C> ڞ, E:`֖×d{D)m#0"*y 9T9gbhҵ9"izW_~O8_8 ,^<2c0>C]sm[nMEgfbaJRf2\FG~ڄĀ)[M8MO\ wή'sP[7!g
-G66
-߂3eǿ5ǃqkNhEK#DכrZQJ2ڒm=Wu;= "m>lA֒<dZ*FZG૸S E'Ǫå0x1kPeӮU>VCH"_>^zg eU61bmt-VbqdIDGSH_ܑ5&kos5ܫP|.q D=n mp0`]iǔtF7YLR|5::[9Ui hOƑxQdNo÷!Sh>3yB"ivY:Y*׍!/OXrsViz~ ae8Lg[w\0z31ֶr' _v1OZ0~E?&B
-E^qڄbƨ;'E%;D:)=~y6z rʐA#2g%L_ׯIMd1V*o6^_^=M sJ?vHS03}pLy}y7XA ac|RO gOKcp8Cv?GE-u1\ApX c[M@R`5I F{ Xd .xc{BkG7-3og
-D=SsQwI)ø-<J;z6NUq=^wv37F??aS>+NǒN)C^r?O%d= Dw}b${S^_/6
-2|
-%V~"OD<d4dX,8'iuj!/6'fߘ%G+g6Gվ9*#}_:*yVu%l\0臀Ӡ&PU-]ՅOzV|!֞@Ὢ~ükue\xc\E"N7\y<MP%7h ~Z+F?-(apO\<L`8.p~#| gҞHnuۮtݕ{zqa"#&|_
-+rKq"^$1EfqMGN@/ }WNW(AW3Lcw-eŰ:O(4-$ڎ
-
-sJci빀ZO^j%,} SWJzHbY_/ߪ  ͒w!(!TMtYܴZe֜U˵x2?u
-;Y"^05|U߆x$ McPtݎĬ:T]8aѾ'MD]-(mCcUL=/ԣ0AQZLhxwm:j'v8W9n0Lb㳒y4'm?Z! [̺)% >:*I- ؃CC]?u0> ~[6Mz[^g|tCfS}p]\{2y!_DѨ1]zڇPZxI߀eٺ>Xّѕ\seLPj-t`G8e45EB7MWb_+h||iiHJTvo:y72a- 3˟\3%j
-ZEsV}%8ݷ idY( j0Z6؁og{K%݀HEvvː
-~GNz+RP6K$#=FS
-"˛#
-CDTah<D>1*Gyٵ@9LGV<,;%.vdP}zH-B!0E8t?^ DD |=gv6f2=(<g#J͐t gxIFUB! *Һ4t'@l.z]m& QRC:6O 85Pk璦*f0\:Z`TȡW?ֆ0$6aӄ1Z"B39yK_l'Pʔ
- _mI%ތ!d<v@ y0
-}$' Fn\X8[~⹧/2zd$ԥAN+EeR.J)bDŽ?{N
-_C @e3C/Fu=+;sfCV2V(#.$ga{ۆn9N,+4B]4Jқ X0FsD;I"G L5j@
-'v"E03k>ՂP=a}_c5ܙ@*'V/IT& ͮ<ʑ;m,X8F>\DG*9,yJU DЁ) l#,.E"snl%d(L%7Q-CXzȬm^V …|0r,$\7`U(B*G* ՂnY_j2t4R|@!
-ߴUJ
-
-+:
-Fȋn{?Y
-
-be3M5]7U%t_`D
-8}fԌʆ=;Ɏv15%C%
-c>e~m$lfqfBv!ClMO<
-;y7u.N
- WdcQ [/* Cb5<W7<tu{YP@)ygtqI\ߊ|xUG%hW5ϦnkidAlL2$_:4EKY[&5u?qA!v]\IwQH-k~*Cd"bp 7 O$~Kej,]3,c Zg!.SR)?(_D,q<sBO;+9?LZשm+7QZ"=gX+:g\NZa:G}Fǖb (yOfL=14)601W+! @xM&bh1k??( Is$kB"&dlz)Pgv?XG YM>'NS=y|ŔlhGz&઎J#Cp4vNцژ^qU$mu3t! X`EtCs^`<z>xz/Uҙ\yŬd
-|PV9TH0I+>p%Ʃ\P ̅<{EEMUQbP:-R22=z/%JW Nhfh}|S?̒b׊{KY dYk8-% qQ8|8"qex&|Dgݛ"KO kVD*a4V=ڍ6<z8Y xj\KEƚW*9_ qzѥ .V؉U""/TW6w aFT!e=mAuhBC* cyW `n{Px`BQ!
-{ qBfCtq_8{LGev!B P~,i;3 |@`&:dLЃ3V?>S2C FΡA
-Įkw7x8y:>
-W,vU#ڽYXFS 4_*=l%VKӖJ]N͔o;D XYa6Π>-6z"Al[ϮjijK_Ԯ
-XٹA/EȹWoNzPE
-T^_TF>tcop΀ddZs.uu!=̪F)ce+ʴYy>hSV0].}Pf{d. ]vC H0]CJUj3r}9n4Ba
-3zŵA:{AzEz̪
-`89:
-1mɶz" ׅl oTf
-du;S$jeWgAsxa>lw %O_Ygy=C^+}%?6
-U
->TcO̕gv 5)I2k;P5![ :TMڌ3OKH@Lo~bLL4Igtٽ|SvNzkDS+Zv:vZEk- Yg#ՄJzYYЁۣ@YG_Y1Ton
-*S(:4-8x%erC߸[Pf+-ʑv,%o6(]齬;]3O'Έ\`+4 P~K)!Zԓk̠h*LY~ʌNz3&q =%;̋L%Y3
-#YX:iʱl
-u
-zY- 30K<I__oX~vVPJT"7)|pu9Rj+$~5a*̳{p+;M9H9ۀgB#ubdwΡ(,o?BIY4Uv8)WЋOf~
-[{<`CJՃ\ @*BOu;HIBH `oq\̎Q+G%!~
-}g ,. ,!oP5
-W؉sևԌ$ԇob]pBpYM?<yivbbn{1| lVg]cE%iNát.O5!ؿ>;@TZt 6oR{5K}Y?Fifm9jK&f&Ö[fxhΞDsՖE#5jGն^#S4Vlh4qZ77'n'/Y3-珀2^rDl `5DwGS #J"6eޅ;,zc =%ݮ9)nЦ8ƕ 33X1ks ;ܖ(s`46yZ[5THەgJF|wVQ DAht'q~ܣ0ƓGrMܴo
+xڬctf]&bضUm+͊͊mIŶm_=ۧOu>?{M\\sMFL'dbgd*fgDD 9;*q);DL v? L&
+0:[4-/_u m/ڌoLćp ̊rgй:A $ Ml&fp rvNC(X#[#r\_Ŝ mw 13
+3PcDNST` G-K,kw&TI:SE3FeԴ >z~U*eKh.ZHmDv#cy Eذi%Cvuܭٕ*mN`ꨯAhƽ~HSD?F.ׇ5IqިzV;Xg/M89;}7 xŊK"<--
+q.fUjADJӮmV!jk+>- XjINf⒱+7dp#ȹ3 KsPǾ>~}*s-EՈqz2(b^[L;S2(i/JqrA_Bl66!%njȏ.nL
+,B
+&{ HwBϕh,@P%l]EA(0\Uxyʗ,n@L֝(!5s^KXsCdƯ<Q[JH<Q9`;9!ZrT"s=zR:et<\v'&Ls'W}?>Xj N'.zԴLP+cˆJ3&? ub }850AD
+7ߋh~m#=z8Qc{LRUXndz۱M'T22q_}ƾe4LR8`0zɤ[N.GLװѰY'r
+~ s?M@ƴxO\
+
+M
+[w
+W`Yl7c 0#ymN`)Mk' &ag`pY)`lƊtqC[}p۰DiC!QR_νo_zDqC 0eM]neCF5覷%SOx'Bɗs@Ʋ [+
+Oʙ!SQi+aYau] a
+B3#XijA|6^|/93܀{$>Hp&*᩸jp&J d`c` ۈtt4zXH|Xhy stwpHZH֟ӌIdI y \m>I9 B1XH:ēGV oHͯ0RF~{]g^mv"Uqs@g^$d͵6iK 0)fNmEٟӪ7FUhSī23;/_;.5[مS |ʥ*%DN̅^yXZe|[8dk6fZl܏.M6,sf8;ܗNVQ-$-ǂ5a*`?.E6 6|R4ܠ֨W҃$9(`Y&Gp5TÊ$8 )1WTmֵ^ )7BtAL\
+}Jt _M4~bbG)玧^45n 1/YRj
+͐jwi5Ŏ kv7gR`L[y% mp`+X˻ kVjō4H4z"#o 0agDz'?HC-cnh !8UN4X4LZ_򚔶>$|?_;1׃BM%rтAF Ǹ'n^(ф0dpQ`+ R)pYCGC釅
+?VGF[o|O& 8.7mۺZtK)nɫhfdcкr8%G vBFObUjiïsZ_:
+U{ 1_'C`'IzyggDGư::K2XFLES'H_gsYN%b^4$yyg
+,nŲQA+#n9K?iAa{-nga'yGo:LX"IsC_^< <׵29V+I+>!vHSw۽R$}2CD{?2,HL~ CW|'8,sȽIiU#.nԈȂhJZ
+€@OMxEnZg,+ɟlA03z珤Rp#!3?iƴ ":ks6~;V0`
+ ɤ'`IG z R !KB˄"㚚n D5mH̆,ٻgDK֔7Mf痗3Z~6!Ї݌!+c5=!uVK`ޝcOޗc{L77sXMai4m>h@h紊Z:k*G+^P C]GBwZ;G`Z/NtQ8W
+bku`Q(NcnwhY:r%OaD|V {r-0d?#&:yCE*y;.>Pp!Úѝ<Q>4wԾr5TQs8CݫUA:7`ʗzֽQCy@.?7W/>YfE;;IYbH;3qSEWx]yr`{H]!!zFpk1jZv(3mmt^C7giQ)8\E?mz#Lq(<溛MV[d3׶Zh7<m1?-={ȷh?/Ū# j3=aA;_IS&oB㤎t=k6 ÁBYf K/N y,_o@LbUr&URVj ę".,u/uA ԣmBUOzh@1xg2 }ZuJF*PgoRaD.Ӄ=ivpuyUI. XGʯ{)[ &{V~QUwo8z Z4C5R!Wݽm E +g6U9Z&m1[ )R9ZJh ;figj~RX/NdC`T>|!bG
+>O<C,۾s0wR`YnO@#Tn*Kzґq.B0sZd\!́ Ʒ֊O0nO3k##$(GY7n<&S0,X k" -H"z`I|1a o775((͑%' zp[<&]/|E3潗?Buc$Mﮈ(HGBph2)>@@ K-0"60zƞ[@Br`[L>Ylrs2]@!;}'<bb
+^1('}"'͠?CB;WyMbޏ͙[i0o#|519D9(QW(3JiqMݖ kÈ54VS UIiٴ\!8eѭy| M;s`fz=8Ó` Is"v9.8IČbJ"T:An0I4
+y TK lU`,0I\"OQ;X "f(XrChOJlOEdOZ&ձ4?`>}5_
+yæ7$#/ΓHPmB>0LAa=Jp9 g-TΩ@~LI3 FR=eZmGʈ#c~#mT)P%JX'qSPVI+eVic3 ޖF"٢r@"B/Ք|fSF0/CL\؋H'$kFO3 \㑌 LЩ~sBziqԂ˫,DKqs-3աr-⽭҈WbF1asఁΑ%&F X|i{!U{ņ7Ŕ6]oȒi[(1ƛI;~fs &N )dMWtT0>n]?Az:~Z~M79mo`!=+pnF`gst)݂R/S,Ni}(gfY>*czbIBZ
+J wV:<L,(.jY~E<{$ 2MHَ1  ,+ͮ]`<6p!Zdes֊߲v1RI=Mx:y6X@=ơ|k+`]b X.L-Oig"bO d)^>pum6D-tН@iq8ۙI({m+<&Hi. evą3I\L*Up4UlTLɩ\wO %h 5r(p[)m[tg;$h˜L0qe CQz;/|J1)z*&}[d3>] +ihgWzN:B |u{M7x+
+讻- Se0?nP`^jm4F^׬TV'BqnHbD2b(tޒ⦻ x जSRئS4olA^:p 4[bsEBrWX'!;M
+몶%? Eo6?fB R#;v0IB<īQS\e02+=VJ$<%{'3WVbP$*( +?V!J /<
+'y繥#n|JH
+8~#C+6}I<.bJ8(j' d3'k5z
+V9 ~l2[IBM 77Eyݍ=3*;T/΄ʘF'^2[w8zٛk[_ ЗoJAr9ɷ>[T!h3 $4wj߬KҒFB}_fpz;"2ChHFޡC{l:ھ2ϗO ~i}AEbxGgvFYѸx
+sfvd
+C:V2S{Y}гW[=AoU\"~Ӏrۚ
+-L Ԍm?ϿW1ޯqv4X)$[q bX"(\BuwDxN$\5F"ñ=qr3a;R yB(}( &])+
+cPnONY箑:; nE$3!$B!$xR8nFQ%O<695Y|u떢t:=w $'2
+?ͅdt bV3xTrZ/"qH#0ҟhp^AnO5pN>bVL1?h\\7&o%| 
+/|nUM{fC ʽtG;oi'`]-2-n O
+N\ڬCx#]XzŖ[| 0促C*Isi'Ntm _<#4jjZXG.B4}JUDJfB,ZB>.I;.T{i_D3e?S[;V$%voۚ0fIE"ͻQ v'+ą#\@GS:x
+w kUGs]2*n ǩ
+\#&EwTlʫhLdfHg!"Y#˽φZJip0o fG{<e0ƤO6{iC1 kfs2w-G7G?|34,mn3h\#GFĎӬG†eGR[2Gr:Cz’}U.d.\CS[Nϭ@4~Vs;6y9vkph(RWɉ[h|oB:.,匝/TC-0UN wڪ.'63Wf
+
+g'ʟygMhnه0l*U$xʻk*7IEcyG/}j.YԪUzX^XaxtFdUy)=,@HWgҾ#=wyR:k*q8ie[M<)i}H*5=ɡ
+ӈ219R-`pb?g cNyN׳{m5_/o?&%|o
+_P¸S| HI*pj(gUs↖a5s"C}x+9Y >;[L)4;U[5
+W#U#  ܎ceb
+8Ǯʆ2Z*.bzvHatWǍa֞RK${3` ݎ7y/Vd^o4 ٔB%>>Ll0 *МGUUY3"Кxd
+MYs &+XϷ3vTBL@Tb|Q廂bi4X"UTohws mp2$U~9jRDT +%'?FBr7m}ٹ{KkVF6Lnfh Ƃߺe(P~y c^T2&kGu$;BS'::qy[)b>+aDI]|0lswFN@ȹ?JJpk#O|އt[gCjk!)ejZ}w@!;CRTH J/ RSV__7<RC
+/.\53sS ; [*/M>cYA8mUqMiʉHKdYV?9 Q1LlKR?4eJBApO3)1moe$#hGKKJmɕYٰ?>DE(KNBjUarϲJtq1"~ 3u.7l
+׎FU_{l96IiOիB|X"S;Zeo;uɛVb۝݋ւJR?Υ-4;;tyyjXKA=skxps9>܃ s_0wςٳ*v+.tu[ JwCqr>Ր]Mڅ'"|Xwo!^Vx:Fbzo LK3^u)h )IDϨ\16jT=pSjbz &H
++.er*].F<lOvO"'%d
+ew3!(6"+4 ssr<Rfvn{mqC^!IiqXD.$c0o$ѳ`|CBvl5P t҉.J8Qz +Qtmg4־䑒]i3,$<+8GM]g~.uG $|e ("gm8P52cL /䊢Zf A ^Xtqӗ1m'B
+p#_i*(?iF')d;PJz jSZ1͞x0!b<EARR"jZ;z<<$`i4]d?WvDUc "
+A
+5̫XֲvFekW/'uy S2M%ݸ8] j$Rk-/rʀk"a[z8P}y':I^5my3Z 6To 1OAy+^҅<,U|Nh;:K*ikHSw!=&'sȶlGbfk4ԕ{'+ߋ<CkJ(Tg8Jo,4G\ҝ-6=a; k]4Pe҈0"NgtgEZ%#;loL{y
+.KZ0G}˅&d̍|_
+2H\Jaato$Jv:zuf#^+&`U/lS#1[,Ƌ"*Fk]}:{ӹ
+nմ^r7nXG`k>7 `awz1Uձ&ԡ9ۧ*RACv|7}E"#4)1"dҊTr$DLOߞNln-$!עˋs)DC_?G@@%coiF4!{Ti)1Iȥ"ڬ0,fS%Y*时N}cpme|ݰ2X_Ŧ
+‡yxpQ']$[;PkJZРL"<?'b$]""w'}UWRnP
+5. 
+dg٨,}
+%hpk9d"%-ҐaI4y<qH v-܇MɦߎSdMÐHm2Etau{BbyApE`QRn?;J L}]EL\}W
+B8eQHebZ f\cwEۆ8?- }~/ ?쳕#VF{Ρu(hun+/l.Ɔ`軫b#lv,JкEW/`W"2g)@\̆;L a+Sǂ#wU(r6W+F™ʲMY9?k|d)(ojyͰĤtg<=U;eJghO3)S^;#C,XUEp؂F_vxPan8L$dB|*Svzg 1z'#JcShEֻ!}qjĵ<i91c'hVlzGk 7@UKӳ fyG: wW`Ȑe}\-RK׵D8Z
+Wl(]Ԕ#?mzBi+&iD`4zfϓՖAfTAwOYĘ\%++Yro>jU6:ZT-b|Ѹ~Qjb8;h(~-Gr1? IC<Ms <51i0acCM.+i~LG=FG7Oo/spE9q%ˀO Oۨŋ[=YCD
+5ՕlT>'_ʺZm]sXMc/A_Us;o<[ +
+ jhV2$䱈O"t[׹QT!9ToDže5ۢ1oHxk7ukXm7㍎Sн\t0tMẏ&FjA{/sTx^>W+sBe7ڬsKcQ&Z\}ۗ!\4d$^2h’^5] y_I͖ #T;@̔Ցh Dfu)Q꘹}da,,®̹{:ɕJqF
+%fR#4"\bfR@qbvͣvaH,8 ĉt@MN&/Et[o`iIJkyOv PWsك>OQ8VȨpsl$]+uQ)Nl mW(>b,=m(,{*NK h-pA21V2Llϟ668-pEE'@\5FzʠW3rG/-lcx
+y
+/g&)G7B"m$|5.U OY<EՒMtOuLgvF& 瀖hNL2_,)&﷝dV >DID#$-1q,Ǣʂ'}-Z/;Mzw],T8~IM+wwihTMįUۺwx$(Xػp؅j @ >5sU lE_~ebGc
+R ?K^vy<O51ӟYvY=<mzə}xNE''& Bs{ܟvHu^\L}Aj,YQME*/CKk(.Ѹ7}h-67U{sL Me=83}|&ڳ|/h( nv"hk~8Krn
+ pAER[ꛪW]*cO;a)ȶ[M샢 }?|)
+qԻ4DHuP
+5+^ZK­}1l,[=Z(̚=ܨN<yG\0 [N)fHOi=@ tΎ
+*qn (A?e(!z_F̳uykt֫^!Z|e.*OR~b}ޯCM
endstream
endobj
-1333 0 obj <<
+1089 0 obj <<
/Type /FontDescriptor
-/FontName /IIGVCM+NimbusRomNo9L-Regu
+/FontName /OQYQQG+NimbusRomNo9L-Regu
/Flags 4
/FontBBox [-168 -281 1000 924]
/Ascent 678
@@ -7791,10 +6602,10 @@ endobj
/ItalicAngle 0
/StemV 85
/XHeight 450
-/CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/adieresis/ampersand/b/braceleft/braceright/bracketleft/bracketright/bullet/c/colon/comma/d/e/eight/equal/f/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/numbersign/o/one/p/parenleft/parenright/period/plus/q/question/quotedbl/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero)
-/FontFile 1332 0 R
+/CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/adieresis/ampersand/b/braceleft/braceright/bracketleft/bracketright/bullet/c/colon/comma/d/e/eight/equal/exclam/f/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/numbersign/o/one/p/parenleft/parenright/period/plus/q/question/quotedbl/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero)
+/FontFile 1088 0 R
>> endobj
-1334 0 obj <<
+1090 0 obj <<
/Length1 1647
/Length2 12791
/Length3 0
@@ -7865,7 +6676,7 @@ Qo
]VnϞ`FR[A`k~~TF!1Ӡ݈܍!!a`$բdU7sWqhaq>(qH &ïfu>1RVq:?ho[DKZ*`=]t{BISHcovߒ,OL+gѮʣM{NSrS`\^.z w 5okgd1X$kĊmiԪf`E]tѯqLP
endstream
endobj
-1335 0 obj <<
+1091 0 obj <<
/Type /FontDescriptor
/FontName /YODDGY+NimbusRomNo9L-ReguItal
/Flags 4
@@ -7877,422 +6688,231 @@ endobj
/StemV 78
/XHeight 441
/CharSet (/A/B/C/D/E/F/G/I/L/M/O/P/R/S/T/V/a/b/c/comma/d/e/f/fi/four/g/h/hyphen/i/k/l/m/n/o/p/parenleft/parenright/period/q/quoteright/r/s/t/u/underscore/v/w/x/y/z)
-/FontFile 1334 0 R
+/FontFile 1090 0 R
>> endobj
-1308 0 obj <<
+1064 0 obj <<
/Type /Encoding
-/Differences [2/fi/fl 34/quotedbl/numbersign 37/percent/ampersand/quoteright/parenleft/parenright 43/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question 65/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft 93/bracketright 95/underscore 97/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft 125/braceright 149/bullet 228/adieresis]
+/Differences [2/fi/fl 33/exclam/quotedbl/numbersign 38/ampersand/quoteright/parenleft/parenright 43/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question 65/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft 93/bracketright 95/underscore 97/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft 125/braceright 149/bullet 228/adieresis]
>> endobj
-584 0 obj <<
+444 0 obj <<
/Type /Font
/Subtype /Type1
/BaseFont /MCOYWV+CMMI10
-/FontDescriptor 1319 0 R
+/FontDescriptor 1075 0 R
/FirstChar 60
/LastChar 90
-/Widths 1313 0 R
+/Widths 1069 0 R
>> endobj
-585 0 obj <<
+445 0 obj <<
/Type /Font
/Subtype /Type1
/BaseFont /VYDKHY+CMR10
-/FontDescriptor 1321 0 R
+/FontDescriptor 1077 0 R
/FirstChar 48
/LastChar 61
-/Widths 1312 0 R
+/Widths 1068 0 R
>> endobj
-586 0 obj <<
+446 0 obj <<
/Type /Font
/Subtype /Type1
/BaseFont /NBBWCW+CMSY10
-/FontDescriptor 1323 0 R
+/FontDescriptor 1079 0 R
/FirstChar 3
/LastChar 106
-/Widths 1311 0 R
+/Widths 1067 0 R
>> endobj
-583 0 obj <<
+443 0 obj <<
/Type /Font
/Subtype /Type1
/BaseFont /LAJUWJ+CMSY7
-/FontDescriptor 1325 0 R
+/FontDescriptor 1081 0 R
/FirstChar 94
/LastChar 94
-/Widths 1314 0 R
+/Widths 1070 0 R
>> endobj
-543 0 obj <<
+410 0 obj <<
/Type /Font
/Subtype /Type1
-/BaseFont /TXCSIR+NimbusMonL-Regu
-/FontDescriptor 1327 0 R
+/BaseFont /IIWFZB+NimbusMonL-Regu
+/FontDescriptor 1083 0 R
/FirstChar 34
-/LastChar 125
-/Widths 1315 0 R
-/Encoding 1308 0 R
+/LastChar 123
+/Widths 1071 0 R
+/Encoding 1064 0 R
>> endobj
-396 0 obj <<
+292 0 obj <<
/Type /Font
/Subtype /Type1
-/BaseFont /VRKWGK+NimbusRomNo9L-Medi
-/FontDescriptor 1329 0 R
+/BaseFont /LHHNFJ+NimbusRomNo9L-Medi
+/FontDescriptor 1085 0 R
/FirstChar 2
-/LastChar 125
-/Widths 1317 0 R
-/Encoding 1308 0 R
+/LastChar 122
+/Widths 1073 0 R
+/Encoding 1064 0 R
>> endobj
-965 0 obj <<
+807 0 obj <<
/Type /Font
/Subtype /Type1
/BaseFont /XTTWYM+NimbusRomNo9L-MediItal
-/FontDescriptor 1331 0 R
+/FontDescriptor 1087 0 R
/FirstChar 3
/LastChar 122
-/Widths 1309 0 R
-/Encoding 1308 0 R
+/Widths 1065 0 R
+/Encoding 1064 0 R
>> endobj
-397 0 obj <<
+293 0 obj <<
/Type /Font
/Subtype /Type1
-/BaseFont /IIGVCM+NimbusRomNo9L-Regu
-/FontDescriptor 1333 0 R
+/BaseFont /OQYQQG+NimbusRomNo9L-Regu
+/FontDescriptor 1089 0 R
/FirstChar 2
/LastChar 228
-/Widths 1316 0 R
-/Encoding 1308 0 R
+/Widths 1072 0 R
+/Encoding 1064 0 R
>> endobj
-793 0 obj <<
+607 0 obj <<
/Type /Font
/Subtype /Type1
/BaseFont /YODDGY+NimbusRomNo9L-ReguItal
-/FontDescriptor 1335 0 R
+/FontDescriptor 1091 0 R
/FirstChar 2
/LastChar 122
-/Widths 1310 0 R
-/Encoding 1308 0 R
+/Widths 1066 0 R
+/Encoding 1064 0 R
>> endobj
-398 0 obj <<
-/Type /Pages
-/Count 6
-/Parent 1336 0 R
-/Kids [390 0 R 401 0 R 429 0 R 469 0 R 508 0 R 511 0 R]
->> endobj
-520 0 obj <<
+294 0 obj <<
/Type /Pages
/Count 6
-/Parent 1336 0 R
-/Kids [514 0 R 522 0 R 536 0 R 562 0 R 579 0 R 589 0 R]
+/Parent 1092 0 R
+/Kids [286 0 R 297 0 R 326 0 R 366 0 R 378 0 R 381 0 R]
>> endobj
-613 0 obj <<
+390 0 obj <<
/Type /Pages
/Count 6
-/Parent 1336 0 R
-/Kids [604 0 R 637 0 R 651 0 R 656 0 R 663 0 R 671 0 R]
+/Parent 1092 0 R
+/Kids [384 0 R 392 0 R 403 0 R 424 0 R 439 0 R 449 0 R]
>> endobj
-680 0 obj <<
+473 0 obj <<
/Type /Pages
/Count 6
-/Parent 1336 0 R
-/Kids [677 0 R 682 0 R 691 0 R 695 0 R 719 0 R 740 0 R]
+/Parent 1092 0 R
+/Kids [464 0 R 497 0 R 511 0 R 516 0 R 522 0 R 526 0 R]
>> endobj
-748 0 obj <<
+535 0 obj <<
/Type /Pages
/Count 6
-/Parent 1336 0 R
-/Kids [745 0 R 751 0 R 759 0 R 789 0 R 860 0 R 933 0 R]
+/Parent 1092 0 R
+/Kids [532 0 R 537 0 R 562 0 R 584 0 R 589 0 R 594 0 R]
>> endobj
-966 0 obj <<
+609 0 obj <<
/Type /Pages
/Count 6
-/Parent 1336 0 R
-/Kids [962 0 R 970 0 R 975 0 R 979 0 R 983 0 R 987 0 R]
+/Parent 1092 0 R
+/Kids [603 0 R 658 0 R 735 0 R 792 0 R 804 0 R 810 0 R]
>> endobj
-996 0 obj <<
+821 0 obj <<
/Type /Pages
/Count 6
-/Parent 1337 0 R
-/Kids [993 0 R 1001 0 R 1024 0 R 1055 0 R 1059 0 R 1063 0 R]
+/Parent 1092 0 R
+/Kids [817 0 R 826 0 R 832 0 R 836 0 R 842 0 R 846 0 R]
>> endobj
-1114 0 obj <<
+897 0 obj <<
/Type /Pages
/Count 4
-/Parent 1337 0 R
-/Kids [1111 0 R 1188 0 R 1265 0 R 1305 0 R]
+/Parent 1093 0 R
+/Kids [894 0 R 972 0 R 1050 0 R 1061 0 R]
>> endobj
-1336 0 obj <<
+1092 0 obj <<
/Type /Pages
/Count 36
-/Parent 1338 0 R
-/Kids [398 0 R 520 0 R 613 0 R 680 0 R 748 0 R 966 0 R]
+/Parent 1094 0 R
+/Kids [294 0 R 390 0 R 473 0 R 535 0 R 609 0 R 821 0 R]
>> endobj
-1337 0 obj <<
+1093 0 obj <<
/Type /Pages
-/Count 10
-/Parent 1338 0 R
-/Kids [996 0 R 1114 0 R]
+/Count 4
+/Parent 1094 0 R
+/Kids [897 0 R]
>> endobj
-1338 0 obj <<
+1094 0 obj <<
/Type /Pages
-/Count 46
-/Kids [1336 0 R 1337 0 R]
+/Count 40
+/Kids [1092 0 R 1093 0 R]
>> endobj
-1339 0 obj <<
+1095 0 obj <<
/Type /Outlines
/First 3 0 R
-/Last 187 0 R
-/Count 8
->> endobj
-387 0 obj <<
-/Title 388 0 R
-/A 385 0 R
-/Parent 343 0 R
-/Prev 383 0 R
->> endobj
-383 0 obj <<
-/Title 384 0 R
-/A 381 0 R
-/Parent 343 0 R
-/Prev 379 0 R
-/Next 387 0 R
->> endobj
-379 0 obj <<
-/Title 380 0 R
-/A 377 0 R
-/Parent 343 0 R
-/Prev 375 0 R
-/Next 383 0 R
->> endobj
-375 0 obj <<
-/Title 376 0 R
-/A 373 0 R
-/Parent 343 0 R
-/Prev 371 0 R
-/Next 379 0 R
->> endobj
-371 0 obj <<
-/Title 372 0 R
-/A 369 0 R
-/Parent 343 0 R
-/Prev 367 0 R
-/Next 375 0 R
->> endobj
-367 0 obj <<
-/Title 368 0 R
-/A 365 0 R
-/Parent 343 0 R
-/Prev 363 0 R
-/Next 371 0 R
->> endobj
-363 0 obj <<
-/Title 364 0 R
-/A 361 0 R
-/Parent 343 0 R
-/Prev 359 0 R
-/Next 367 0 R
->> endobj
-359 0 obj <<
-/Title 360 0 R
-/A 357 0 R
-/Parent 343 0 R
-/Prev 355 0 R
-/Next 363 0 R
->> endobj
-355 0 obj <<
-/Title 356 0 R
-/A 353 0 R
-/Parent 343 0 R
-/Prev 351 0 R
-/Next 359 0 R
->> endobj
-351 0 obj <<
-/Title 352 0 R
-/A 349 0 R
-/Parent 343 0 R
-/Prev 347 0 R
-/Next 355 0 R
->> endobj
-347 0 obj <<
-/Title 348 0 R
-/A 345 0 R
-/Parent 343 0 R
-/Next 351 0 R
->> endobj
-343 0 obj <<
-/Title 344 0 R
-/A 341 0 R
-/Parent 299 0 R
-/Prev 335 0 R
-/First 347 0 R
-/Last 387 0 R
-/Count -11
->> endobj
-339 0 obj <<
-/Title 340 0 R
-/A 337 0 R
-/Parent 335 0 R
->> endobj
-335 0 obj <<
-/Title 336 0 R
-/A 333 0 R
-/Parent 299 0 R
-/Prev 307 0 R
-/Next 343 0 R
-/First 339 0 R
-/Last 339 0 R
-/Count -1
->> endobj
-331 0 obj <<
-/Title 332 0 R
-/A 329 0 R
-/Parent 307 0 R
-/Prev 327 0 R
->> endobj
-327 0 obj <<
-/Title 328 0 R
-/A 325 0 R
-/Parent 307 0 R
-/Prev 323 0 R
-/Next 331 0 R
->> endobj
-323 0 obj <<
-/Title 324 0 R
-/A 321 0 R
-/Parent 307 0 R
-/Prev 319 0 R
-/Next 327 0 R
->> endobj
-319 0 obj <<
-/Title 320 0 R
-/A 317 0 R
-/Parent 307 0 R
-/Prev 315 0 R
-/Next 323 0 R
->> endobj
-315 0 obj <<
-/Title 316 0 R
-/A 313 0 R
-/Parent 307 0 R
-/Prev 311 0 R
-/Next 319 0 R
->> endobj
-311 0 obj <<
-/Title 312 0 R
-/A 309 0 R
-/Parent 307 0 R
-/Next 315 0 R
->> endobj
-307 0 obj <<
-/Title 308 0 R
-/A 305 0 R
-/Parent 299 0 R
-/Prev 303 0 R
-/Next 335 0 R
-/First 311 0 R
-/Last 331 0 R
-/Count -6
->> endobj
-303 0 obj <<
-/Title 304 0 R
-/A 301 0 R
-/Parent 299 0 R
-/Next 307 0 R
->> endobj
-299 0 obj <<
-/Title 300 0 R
-/A 297 0 R
-/Parent 187 0 R
-/Prev 191 0 R
-/First 303 0 R
-/Last 343 0 R
-/Count -4
->> endobj
-295 0 obj <<
-/Title 296 0 R
-/A 293 0 R
-/Parent 251 0 R
-/Prev 291 0 R
->> endobj
-291 0 obj <<
-/Title 292 0 R
-/A 289 0 R
-/Parent 251 0 R
-/Prev 287 0 R
-/Next 295 0 R
->> endobj
-287 0 obj <<
-/Title 288 0 R
-/A 285 0 R
-/Parent 251 0 R
-/Prev 283 0 R
-/Next 291 0 R
+/Last 175 0 R
+/Count 7
>> endobj
283 0 obj <<
/Title 284 0 R
/A 281 0 R
-/Parent 251 0 R
+/Parent 239 0 R
/Prev 279 0 R
-/Next 287 0 R
>> endobj
279 0 obj <<
/Title 280 0 R
/A 277 0 R
-/Parent 251 0 R
+/Parent 239 0 R
/Prev 275 0 R
/Next 283 0 R
>> endobj
275 0 obj <<
/Title 276 0 R
/A 273 0 R
-/Parent 251 0 R
+/Parent 239 0 R
/Prev 271 0 R
/Next 279 0 R
>> endobj
271 0 obj <<
/Title 272 0 R
/A 269 0 R
-/Parent 251 0 R
+/Parent 239 0 R
/Prev 267 0 R
/Next 275 0 R
>> endobj
267 0 obj <<
/Title 268 0 R
/A 265 0 R
-/Parent 251 0 R
+/Parent 239 0 R
/Prev 263 0 R
/Next 271 0 R
>> endobj
263 0 obj <<
/Title 264 0 R
/A 261 0 R
-/Parent 251 0 R
+/Parent 239 0 R
/Prev 259 0 R
/Next 267 0 R
>> endobj
259 0 obj <<
/Title 260 0 R
/A 257 0 R
-/Parent 251 0 R
+/Parent 239 0 R
/Prev 255 0 R
/Next 263 0 R
>> endobj
255 0 obj <<
/Title 256 0 R
/A 253 0 R
-/Parent 251 0 R
+/Parent 239 0 R
+/Prev 251 0 R
/Next 259 0 R
>> endobj
251 0 obj <<
/Title 252 0 R
/A 249 0 R
-/Parent 191 0 R
-/Prev 239 0 R
-/First 255 0 R
-/Last 295 0 R
-/Count -11
+/Parent 239 0 R
+/Prev 247 0 R
+/Next 255 0 R
>> endobj
247 0 obj <<
/Title 248 0 R
/A 245 0 R
/Parent 239 0 R
/Prev 243 0 R
+/Next 251 0 R
>> endobj
243 0 obj <<
/Title 244 0 R
@@ -8303,306 +6923,303 @@ endobj
239 0 obj <<
/Title 240 0 R
/A 237 0 R
-/Parent 191 0 R
-/Prev 231 0 R
-/Next 251 0 R
+/Parent 179 0 R
+/Prev 227 0 R
/First 243 0 R
-/Last 247 0 R
-/Count -2
+/Last 283 0 R
+/Count -11
>> endobj
235 0 obj <<
/Title 236 0 R
/A 233 0 R
-/Parent 231 0 R
+/Parent 227 0 R
+/Prev 231 0 R
>> endobj
231 0 obj <<
/Title 232 0 R
/A 229 0 R
-/Parent 191 0 R
-/Prev 199 0 R
-/Next 239 0 R
-/First 235 0 R
-/Last 235 0 R
-/Count -1
+/Parent 227 0 R
+/Next 235 0 R
>> endobj
227 0 obj <<
/Title 228 0 R
/A 225 0 R
-/Parent 199 0 R
-/Prev 223 0 R
+/Parent 179 0 R
+/Prev 219 0 R
+/Next 239 0 R
+/First 231 0 R
+/Last 235 0 R
+/Count -2
>> endobj
223 0 obj <<
/Title 224 0 R
/A 221 0 R
-/Parent 199 0 R
-/Prev 219 0 R
-/Next 227 0 R
+/Parent 219 0 R
>> endobj
219 0 obj <<
/Title 220 0 R
/A 217 0 R
-/Parent 199 0 R
-/Prev 215 0 R
-/Next 223 0 R
+/Parent 179 0 R
+/Prev 187 0 R
+/Next 227 0 R
+/First 223 0 R
+/Last 223 0 R
+/Count -1
>> endobj
215 0 obj <<
/Title 216 0 R
/A 213 0 R
-/Parent 199 0 R
+/Parent 187 0 R
/Prev 211 0 R
-/Next 219 0 R
>> endobj
211 0 obj <<
/Title 212 0 R
/A 209 0 R
-/Parent 199 0 R
+/Parent 187 0 R
/Prev 207 0 R
/Next 215 0 R
>> endobj
207 0 obj <<
/Title 208 0 R
/A 205 0 R
-/Parent 199 0 R
+/Parent 187 0 R
/Prev 203 0 R
/Next 211 0 R
>> endobj
203 0 obj <<
/Title 204 0 R
/A 201 0 R
-/Parent 199 0 R
+/Parent 187 0 R
+/Prev 199 0 R
/Next 207 0 R
>> endobj
199 0 obj <<
/Title 200 0 R
/A 197 0 R
-/Parent 191 0 R
+/Parent 187 0 R
/Prev 195 0 R
-/Next 231 0 R
-/First 203 0 R
-/Last 227 0 R
-/Count -7
+/Next 203 0 R
>> endobj
195 0 obj <<
/Title 196 0 R
/A 193 0 R
-/Parent 191 0 R
+/Parent 187 0 R
+/Prev 191 0 R
/Next 199 0 R
>> endobj
191 0 obj <<
/Title 192 0 R
/A 189 0 R
/Parent 187 0 R
-/Next 299 0 R
-/First 195 0 R
-/Last 251 0 R
-/Count -5
+/Next 195 0 R
>> endobj
187 0 obj <<
/Title 188 0 R
/A 185 0 R
-/Parent 1339 0 R
-/Prev 91 0 R
+/Parent 179 0 R
+/Prev 183 0 R
+/Next 219 0 R
/First 191 0 R
-/Last 299 0 R
-/Count -2
+/Last 215 0 R
+/Count -7
>> endobj
183 0 obj <<
/Title 184 0 R
/A 181 0 R
-/Parent 103 0 R
-/Prev 179 0 R
+/Parent 179 0 R
+/Next 187 0 R
>> endobj
179 0 obj <<
/Title 180 0 R
/A 177 0 R
-/Parent 103 0 R
-/Prev 175 0 R
-/Next 183 0 R
+/Parent 175 0 R
+/First 183 0 R
+/Last 239 0 R
+/Count -5
>> endobj
175 0 obj <<
/Title 176 0 R
/A 173 0 R
-/Parent 103 0 R
-/Prev 171 0 R
-/Next 179 0 R
+/Parent 1095 0 R
+/Prev 75 0 R
+/First 179 0 R
+/Last 179 0 R
+/Count -1
>> endobj
171 0 obj <<
/Title 172 0 R
/A 169 0 R
-/Parent 103 0 R
+/Parent 87 0 R
/Prev 167 0 R
-/Next 175 0 R
>> endobj
167 0 obj <<
/Title 168 0 R
/A 165 0 R
-/Parent 103 0 R
+/Parent 87 0 R
/Prev 163 0 R
/Next 171 0 R
>> endobj
163 0 obj <<
/Title 164 0 R
/A 161 0 R
-/Parent 103 0 R
+/Parent 87 0 R
/Prev 159 0 R
/Next 167 0 R
>> endobj
159 0 obj <<
/Title 160 0 R
/A 157 0 R
-/Parent 103 0 R
+/Parent 87 0 R
/Prev 155 0 R
/Next 163 0 R
>> endobj
155 0 obj <<
/Title 156 0 R
/A 153 0 R
-/Parent 103 0 R
+/Parent 87 0 R
/Prev 151 0 R
/Next 159 0 R
>> endobj
151 0 obj <<
/Title 152 0 R
/A 149 0 R
-/Parent 103 0 R
+/Parent 87 0 R
/Prev 147 0 R
/Next 155 0 R
>> endobj
147 0 obj <<
/Title 148 0 R
/A 145 0 R
-/Parent 103 0 R
+/Parent 87 0 R
/Prev 143 0 R
/Next 151 0 R
>> endobj
143 0 obj <<
/Title 144 0 R
/A 141 0 R
-/Parent 103 0 R
+/Parent 87 0 R
/Prev 139 0 R
/Next 147 0 R
>> endobj
139 0 obj <<
/Title 140 0 R
/A 137 0 R
-/Parent 103 0 R
+/Parent 87 0 R
/Prev 135 0 R
/Next 143 0 R
>> endobj
135 0 obj <<
/Title 136 0 R
/A 133 0 R
-/Parent 103 0 R
+/Parent 87 0 R
/Prev 131 0 R
/Next 139 0 R
>> endobj
131 0 obj <<
/Title 132 0 R
/A 129 0 R
-/Parent 103 0 R
+/Parent 87 0 R
/Prev 127 0 R
/Next 135 0 R
>> endobj
127 0 obj <<
/Title 128 0 R
/A 125 0 R
-/Parent 103 0 R
+/Parent 87 0 R
/Prev 123 0 R
/Next 131 0 R
>> endobj
123 0 obj <<
/Title 124 0 R
/A 121 0 R
-/Parent 103 0 R
+/Parent 87 0 R
/Prev 119 0 R
/Next 127 0 R
>> endobj
119 0 obj <<
/Title 120 0 R
/A 117 0 R
-/Parent 103 0 R
+/Parent 87 0 R
/Prev 115 0 R
/Next 123 0 R
>> endobj
115 0 obj <<
/Title 116 0 R
/A 113 0 R
-/Parent 103 0 R
+/Parent 87 0 R
/Prev 111 0 R
/Next 119 0 R
>> endobj
111 0 obj <<
/Title 112 0 R
/A 109 0 R
-/Parent 103 0 R
+/Parent 87 0 R
/Prev 107 0 R
/Next 115 0 R
>> endobj
107 0 obj <<
/Title 108 0 R
/A 105 0 R
-/Parent 103 0 R
+/Parent 87 0 R
+/Prev 103 0 R
/Next 111 0 R
>> endobj
103 0 obj <<
/Title 104 0 R
/A 101 0 R
-/Parent 95 0 R
+/Parent 87 0 R
/Prev 99 0 R
-/First 107 0 R
-/Last 183 0 R
-/Count -20
+/Next 107 0 R
>> endobj
99 0 obj <<
/Title 100 0 R
/A 97 0 R
-/Parent 95 0 R
+/Parent 87 0 R
+/Prev 95 0 R
/Next 103 0 R
>> endobj
95 0 obj <<
/Title 96 0 R
/A 93 0 R
-/Parent 91 0 R
-/First 99 0 R
-/Last 103 0 R
-/Count -2
+/Parent 87 0 R
+/Prev 91 0 R
+/Next 99 0 R
>> endobj
91 0 obj <<
/Title 92 0 R
/A 89 0 R
-/Parent 1339 0 R
-/Prev 83 0 R
-/Next 187 0 R
-/First 95 0 R
-/Last 95 0 R
-/Count -1
+/Parent 87 0 R
+/Next 95 0 R
>> endobj
87 0 obj <<
/Title 88 0 R
/A 85 0 R
-/Parent 83 0 R
+/Parent 79 0 R
+/Prev 83 0 R
+/First 91 0 R
+/Last 171 0 R
+/Count -21
>> endobj
83 0 obj <<
/Title 84 0 R
/A 81 0 R
-/Parent 1339 0 R
-/Prev 75 0 R
-/Next 91 0 R
-/First 87 0 R
-/Last 87 0 R
-/Count -1
+/Parent 79 0 R
+/Next 87 0 R
>> endobj
79 0 obj <<
/Title 80 0 R
/A 77 0 R
/Parent 75 0 R
+/First 83 0 R
+/Last 87 0 R
+/Count -2
>> endobj
75 0 obj <<
/Title 76 0 R
/A 73 0 R
-/Parent 1339 0 R
-/Prev 59 0 R
-/Next 83 0 R
+/Parent 1095 0 R
+/Prev 67 0 R
+/Next 175 0 R
/First 79 0 R
/Last 79 0 R
/Count -1
@@ -8610,29 +7227,29 @@ endobj
71 0 obj <<
/Title 72 0 R
/A 69 0 R
-/Parent 63 0 R
-/Prev 67 0 R
+/Parent 67 0 R
>> endobj
67 0 obj <<
/Title 68 0 R
/A 65 0 R
-/Parent 63 0 R
-/Next 71 0 R
+/Parent 1095 0 R
+/Prev 59 0 R
+/Next 75 0 R
+/First 71 0 R
+/Last 71 0 R
+/Count -1
>> endobj
63 0 obj <<
/Title 64 0 R
/A 61 0 R
/Parent 59 0 R
-/First 67 0 R
-/Last 71 0 R
-/Count -2
>> endobj
59 0 obj <<
/Title 60 0 R
/A 57 0 R
-/Parent 1339 0 R
+/Parent 1095 0 R
/Prev 31 0 R
-/Next 75 0 R
+/Next 67 0 R
/First 63 0 R
/Last 63 0 R
/Count -1
@@ -8681,7 +7298,7 @@ endobj
31 0 obj <<
/Title 32 0 R
/A 29 0 R
-/Parent 1339 0 R
+/Parent 1095 0 R
/Prev 15 0 R
/Next 59 0 R
/First 35 0 R
@@ -8710,7 +7327,7 @@ endobj
15 0 obj <<
/Title 16 0 R
/A 13 0 R
-/Parent 1339 0 R
+/Parent 1095 0 R
/Prev 3 0 R
/Next 31 0 R
/First 19 0 R
@@ -8732,1685 +7349,1386 @@ endobj
3 0 obj <<
/Title 4 0 R
/A 1 0 R
-/Parent 1339 0 R
+/Parent 1095 0 R
/Next 15 0 R
/First 7 0 R
/Last 11 0 R
/Count -2
>> endobj
-1340 0 obj <<
-/Names [(CommandLineUsage) 548 0 R (CommandLineUsage_ARGS) 666 0 R (CommandLineUsage_MANARGS) 667 0 R (CommandLineUsage_OPTARGS) 668 0 R (Doc-Start) 395 0 R (INTRO) 517 0 R]
-/Limits [(CommandLineUsage) (INTRO)]
+1096 0 obj <<
+/Names [(Doc-Start) 291 0 R (INTRO) 387 0 R (INTRO_DecoderBasics) 389 0 R (INTRO_SCOPE) 388 0 R (Item.1) 409 0 R (Item.2) 411 0 R]
+/Limits [(Doc-Start) (Item.2)]
>> endobj
-1341 0 obj <<
-/Names [(INTRO_DecoderBasics) 519 0 R (INTRO_SCOPE) 518 0 R (Item.1) 542 0 R (Item.2) 544 0 R (Item.3) 545 0 R (Item.4) 565 0 R]
-/Limits [(INTRO_DecoderBasics) (Item.4)]
+1097 0 obj <<
+/Names [(Item.3) 412 0 R (Item.4) 427 0 R (Item.5) 429 0 R (Item.6) 430 0 R (Item.7) 431 0 R (Item.8) 432 0 R]
+/Limits [(Item.3) (Item.8)]
>> endobj
-1342 0 obj <<
-/Names [(Item.5) 567 0 R (Item.6) 568 0 R (Item.7) 569 0 R (Item.8) 570 0 R (LIBUSE) 539 0 R (LIBUSE_BufferSystem) 571 0 R]
-/Limits [(Item.5) (LIBUSE_BufferSystem)]
+1098 0 obj <<
+/Names [(LIBUSE) 406 0 R (LIBUSE_BufferSystem) 433 0 R (LIBUSE_Calling_Sequence) 408 0 R (LIBUSE_InterfaceDescritpion) 407 0 R (OutputFormat) 467 0 R (OutputFormat_ExamplesArib) 503 0 R]
+/Limits [(LIBUSE) (OutputFormat_ExamplesArib)]
>> endobj
-1343 0 obj <<
-/Names [(LIBUSE_Calling_Sequence) 541 0 R (LIBUSE_InterfaceDescritpion) 540 0 R (OutputFormat) 607 0 R (OutputFormat_ExamplesArib) 643 0 R (OutputFormat_ExamplesStereo) 612 0 R (OutputFormat_ExamplesSurround) 641 0 R]
-/Limits [(LIBUSE_Calling_Sequence) (OutputFormat_ExamplesSurround)]
+1099 0 obj <<
+/Names [(OutputFormat_ExamplesStereo) 472 0 R (OutputFormat_ExamplesSurround) 501 0 R (OutputFormat_OutputFormatChange) 470 0 R (OutputFormat_OutputFormatExample) 471 0 R (OutputFormat_OutputFormatObtaining) 468 0 R (aacdecoder__lib_8h) 413 0 R]
+/Limits [(OutputFormat_ExamplesStereo) (aacdecoder__lib_8h)]
>> endobj
-1344 0 obj <<
-/Names [(OutputFormat_OutputFormatChange) 610 0 R (OutputFormat_OutputFormatExample) 611 0 R (OutputFormat_OutputFormatObtaining) 608 0 R (aacdecoder__lib_8h) 546 0 R (aacdecoder__lib_8h_a15da43e47179e3ca7b58d6b08620533e) 950 0 R (aacdecoder__lib_8h_a245a0e4176fb886d890a86627c55bb24) 551 0 R]
-/Limits [(OutputFormat_OutputFormatChange) (aacdecoder__lib_8h_a245a0e4176fb886d890a86627c55bb24)]
+1100 0 obj <<
+/Names [(aacdecoder__lib_8h_a15da43e47179e3ca7b58d6b08620533e) 798 0 R (aacdecoder__lib_8h_a245a0e4176fb886d890a86627c55bb24) 416 0 R (aacdecoder__lib_8h_a388a21070208ec23217c4ff8f8d98754) 618 0 R (aacdecoder__lib_8h_a404dd0b9b627d3e9ab765dba98be3eec) 767 0 R (aacdecoder__lib_8h_a4666e424f482470e872827f66399454a) 668 0 R (aacdecoder__lib_8h_a6016435b8679d2793078b10ecaf3d05d) 415 0 R]
+/Limits [(aacdecoder__lib_8h_a15da43e47179e3ca7b58d6b08620533e) (aacdecoder__lib_8h_a6016435b8679d2793078b10ecaf3d05d)]
>> endobj
-1345 0 obj <<
-/Names [(aacdecoder__lib_8h_a388a21070208ec23217c4ff8f8d98754) 805 0 R (aacdecoder__lib_8h_a404dd0b9b627d3e9ab765dba98be3eec) 949 0 R (aacdecoder__lib_8h_a4666e424f482470e872827f66399454a) 811 0 R (aacdecoder__lib_8h_a6016435b8679d2793078b10ecaf3d05d) 550 0 R (aacdecoder__lib_8h_a60aa42cb3ddc804b44ce61d877d0501e) 575 0 R (aacdecoder__lib_8h_a620b5a8c5d7ddd1b525aae1895963e16) 967 0 R]
-/Limits [(aacdecoder__lib_8h_a388a21070208ec23217c4ff8f8d98754) (aacdecoder__lib_8h_a620b5a8c5d7ddd1b525aae1895963e16)]
+1101 0 obj <<
+/Names [(aacdecoder__lib_8h_a60aa42cb3ddc804b44ce61d877d0501e) 436 0 R (aacdecoder__lib_8h_a620b5a8c5d7ddd1b525aae1895963e16) 799 0 R (aacdecoder__lib_8h_a6d508fce68c364f5dabc9195e701ecf8) 435 0 R (aacdecoder__lib_8h_a8bc17277db0f7651065f62d66f92ed9f) 666 0 R (aacdecoder__lib_8h_a8f33403449b41e6a9deda6cb1e07d386) 766 0 R (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88) 751 0 R]
+/Limits [(aacdecoder__lib_8h_a60aa42cb3ddc804b44ce61d877d0501e) (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88)]
>> endobj
-1346 0 obj <<
-/Names [(aacdecoder__lib_8h_a6d508fce68c364f5dabc9195e701ecf8) 574 0 R (aacdecoder__lib_8h_a8bc17277db0f7651065f62d66f92ed9f) 809 0 R (aacdecoder__lib_8h_a8f33403449b41e6a9deda6cb1e07d386) 948 0 R (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88) 897 0 R (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a28dd853ab4339011893a933020ac5ab8) 940 0 R (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a4392100c924c0f20a706f55bc7ab3931) 944 0 R]
-/Limits [(aacdecoder__lib_8h_a6d508fce68c364f5dabc9195e701ecf8) (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a4392100c924c0f20a706f55bc7ab3931)]
+1102 0 obj <<
+/Names [(aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a28dd853ab4339011893a933020ac5ab8) 758 0 R (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a4392100c924c0f20a706f55bc7ab3931) 762 0 R (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a55c37bcd32cb04728f48e1b2896967f7) 755 0 R (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a5cec20e1dd4ac89472ad60d3d0c8b5c1) 756 0 R (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a5e080429e4eaec068ba64c17152ee805) 757 0 R (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a6056e5b76cc6a00078388445b1f1cfa1) 759 0 R]
+/Limits [(aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a28dd853ab4339011893a933020ac5ab8) (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a6056e5b76cc6a00078388445b1f1cfa1)]
>> endobj
-1347 0 obj <<
-/Names [(aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a6056e5b76cc6a00078388445b1f1cfa1) 941 0 R (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a605a8fed5c5754dffc63775cc702aae7) 945 0 R (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a65284784865f22d79700dc268f84e374) 942 0 R (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a6e3fa0b7d247c98f132edd55187f9c0c) 616 0 R (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88aa1a5a121f8b03708d9fdcc06f6e882fb) 947 0 R (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88ab49a2169c22ea876c67154d6caa04568) 617 0 R]
-/Limits [(aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a6056e5b76cc6a00078388445b1f1cfa1) (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88ab49a2169c22ea876c67154d6caa04568)]
+1103 0 obj <<
+/Names [(aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a605a8fed5c5754dffc63775cc702aae7) 763 0 R (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a65284784865f22d79700dc268f84e374) 760 0 R (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a6e3fa0b7d247c98f132edd55187f9c0c) 476 0 R (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88aa1a5a121f8b03708d9fdcc06f6e882fb) 765 0 R (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88ab011b48e5d9f5648c400ee632c151197) 753 0 R (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88ab49a2169c22ea876c67154d6caa04568) 477 0 R]
+/Limits [(aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a605a8fed5c5754dffc63775cc702aae7) (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88ab49a2169c22ea876c67154d6caa04568)]
>> endobj
-1348 0 obj <<
-/Names [(aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88aee866642a3f335e7874a82939ad0c135) 899 0 R (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88aefc0ded1aea7e08f3c9c55df76c75668) 898 0 R (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88af24d28dac8b5de47c00c578712d0591e) 943 0 R (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88af84565b78a6ae180e316dd612a0877a7) 946 0 R (aacdecoder__lib_8h_aa9ba2e98e71adc41124eaf8d6e5d6f2d) 812 0 R (aacdecoder__lib_8h_abc8ebc3d720699fe1d7c27eccd3da051) 810 0 R]
-/Limits [(aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88aee866642a3f335e7874a82939ad0c135) (aacdecoder__lib_8h_abc8ebc3d720699fe1d7c27eccd3da051)]
+1104 0 obj <<
+/Names [(aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88ad2733233519a726ef7501d89918921c5) 754 0 R (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88aee866642a3f335e7874a82939ad0c135) 752 0 R (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88af24d28dac8b5de47c00c578712d0591e) 761 0 R (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88af84565b78a6ae180e316dd612a0877a7) 764 0 R (aacdecoder__lib_8h_aa9ba2e98e71adc41124eaf8d6e5d6f2d) 669 0 R (aacdecoder__lib_8h_abc8ebc3d720699fe1d7c27eccd3da051) 667 0 R]
+/Limits [(aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88ad2733233519a726ef7501d89918921c5) (aacdecoder__lib_8h_abc8ebc3d720699fe1d7c27eccd3da051)]
>> endobj
-1349 0 obj <<
-/Names [(aacdecoder__lib_8h_ac2c358d4ac0d7747cae32f9f45c20f71) 806 0 R (aacdecoder__lib_8h_ac8580fe563e79afe695d7b0b32ea0fed) 549 0 R (aacdecoder__lib_8h_acca8f4cf9757885d6c654de37a43072f) 576 0 R (aacdecoder__lib_8h_ae09502f250437ee519971ca3a95ac9e0) 808 0 R (aacdecoder__lib_8h_af59d78a4583ca81ccb2675dce592b812) 807 0 R (aacdecoder__lib_8h_afb42ea8892dd828264bd2f6147e0559f) 618 0 R]
+1105 0 obj <<
+/Names [(aacdecoder__lib_8h_ac2c358d4ac0d7747cae32f9f45c20f71) 663 0 R (aacdecoder__lib_8h_ac8580fe563e79afe695d7b0b32ea0fed) 414 0 R (aacdecoder__lib_8h_acca8f4cf9757885d6c654de37a43072f) 437 0 R (aacdecoder__lib_8h_ae09502f250437ee519971ca3a95ac9e0) 665 0 R (aacdecoder__lib_8h_af59d78a4583ca81ccb2675dce592b812) 664 0 R (aacdecoder__lib_8h_afb42ea8892dd828264bd2f6147e0559f) 478 0 R]
/Limits [(aacdecoder__lib_8h_ac2c358d4ac0d7747cae32f9f45c20f71) (aacdecoder__lib_8h_afb42ea8892dd828264bd2f6147e0559f)]
>> endobj
-1350 0 obj <<
-/Names [(aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41) 813 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a0357ce81d9d62cc106c752121fc9dc8a) 881 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a0bd193ee6a8c3151c5c6469f7e455a8e) 872 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a20cdc26726b22cb44143b4e440441e0f) 882 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a242d8bc09683a84b578546663dda36fa) 865 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a42c5cbc358ada7261ba3d609c33ec3a5) 877 0 R]
+1106 0 obj <<
+/Names [(aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41) 670 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a0357ce81d9d62cc106c752121fc9dc8a) 694 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a0bd193ee6a8c3151c5c6469f7e455a8e) 685 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a20cdc26726b22cb44143b4e440441e0f) 695 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a242d8bc09683a84b578546663dda36fa) 678 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a42c5cbc358ada7261ba3d609c33ec3a5) 690 0 R]
/Limits [(aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41) (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a42c5cbc358ada7261ba3d609c33ec3a5)]
>> endobj
-1351 0 obj <<
-/Names [(aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a45662b23139ca5807ed6fe3b8940dc40) 885 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a4a877298c7076e5ef4dd848912ab1d48) 817 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a4dbbe3b38d0dfb444fdc3a7adae2f807) 874 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a4dff2410394a6ffdf0f95ec66cbd0107) 867 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a516287ad9b64c230200191fdd60361e1) 889 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a5bc4e4af77d94fa08beb54def8f01f7f) 871 0 R]
+1107 0 obj <<
+/Names [(aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a45662b23139ca5807ed6fe3b8940dc40) 739 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a4a877298c7076e5ef4dd848912ab1d48) 674 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a4dbbe3b38d0dfb444fdc3a7adae2f807) 687 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a4dff2410394a6ffdf0f95ec66cbd0107) 680 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a516287ad9b64c230200191fdd60361e1) 743 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a5bc4e4af77d94fa08beb54def8f01f7f) 684 0 R]
/Limits [(aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a45662b23139ca5807ed6fe3b8940dc40) (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a5bc4e4af77d94fa08beb54def8f01f7f)]
>> endobj
-1352 0 obj <<
-/Names [(aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a60690e0dbc450f62f83548fa484716ab) 876 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a65820f534b99b1529510720eeaafc861) 893 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a71440b5535812faf92a0fe99275dd5f0) 814 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a72f0dd3698012cdf8b20dd6f0b5de626) 894 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a77f722abc6c05f1abf1f51c0d11bf7ec) 888 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a7ea36c43c374f751f65be033057e3888) 866 0 R]
+1108 0 obj <<
+/Names [(aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a60690e0dbc450f62f83548fa484716ab) 689 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a65820f534b99b1529510720eeaafc861) 747 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a71440b5535812faf92a0fe99275dd5f0) 671 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a72f0dd3698012cdf8b20dd6f0b5de626) 748 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a77f722abc6c05f1abf1f51c0d11bf7ec) 742 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a7ea36c43c374f751f65be033057e3888) 679 0 R]
/Limits [(aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a60690e0dbc450f62f83548fa484716ab) (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a7ea36c43c374f751f65be033057e3888)]
>> endobj
-1353 0 obj <<
-/Names [(aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a856cdca9aa719c292b7c351cec03ae06) 892 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a8aa244ce1ae08763dde378161df0652f) 875 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a8bf90eccdaf6063e299f9415c8bd5d1a) 891 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a95dafb71a0623fbeb0715e46b7a189c7) 869 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a97113255d01bdf3cc7104dd411f40949) 870 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41aa14848134610eea96115c59a6b944921) 884 0 R]
+1109 0 obj <<
+/Names [(aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a856cdca9aa719c292b7c351cec03ae06) 746 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a8aa244ce1ae08763dde378161df0652f) 688 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a8bf90eccdaf6063e299f9415c8bd5d1a) 745 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a95dafb71a0623fbeb0715e46b7a189c7) 682 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a97113255d01bdf3cc7104dd411f40949) 683 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41aa14848134610eea96115c59a6b944921) 697 0 R]
/Limits [(aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a856cdca9aa719c292b7c351cec03ae06) (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41aa14848134610eea96115c59a6b944921)]
>> endobj
-1354 0 obj <<
-/Names [(aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41aa86450161814b428d08b620188302fbc) 864 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41abb11196531beac7285326a5394db0329) 890 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41ac12235e2fee27efdcc78f2946f86e4ab) 880 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41ac806692e8a98e9baca1bca5f7d9df0cd) 863 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41ac8bc8e0a106154098f730ba596c43c50) 879 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41acb4252bc9a6eeee71738af951850379c) 883 0 R]
+1110 0 obj <<
+/Names [(aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41aa86450161814b428d08b620188302fbc) 677 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41abb11196531beac7285326a5394db0329) 744 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41ac12235e2fee27efdcc78f2946f86e4ab) 693 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41ac806692e8a98e9baca1bca5f7d9df0cd) 676 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41ac8bc8e0a106154098f730ba596c43c50) 692 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41acb4252bc9a6eeee71738af951850379c) 696 0 R]
/Limits [(aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41aa86450161814b428d08b620188302fbc) (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41acb4252bc9a6eeee71738af951850379c)]
>> endobj
-1355 0 obj <<
-/Names [(aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41ad8e91a23786bc032e507dfbd036f63c4) 573 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41adbb894fd8e900c4993f57ae88f8aee1a) 818 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41ae2ac2caa02bbffb8ace0fa87ad5ffc05) 896 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41ae36383b7f8b4f36072eb60a303c439c3) 878 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41ae6d7add4f73779b26c859900f710c34f) 868 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41aea6be518456d203d68898efd236a6769) 895 0 R]
+1111 0 obj <<
+/Names [(aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41ad8e91a23786bc032e507dfbd036f63c4) 434 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41adbb894fd8e900c4993f57ae88f8aee1a) 675 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41ae2ac2caa02bbffb8ace0fa87ad5ffc05) 750 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41ae36383b7f8b4f36072eb60a303c439c3) 691 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41ae6d7add4f73779b26c859900f710c34f) 681 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41aea6be518456d203d68898efd236a6769) 749 0 R]
/Limits [(aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41ad8e91a23786bc032e507dfbd036f63c4) (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41aea6be518456d203d68898efd236a6769)]
>> endobj
-1356 0 obj <<
-/Names [(aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41af16b1992a2a415168ab96228671ef337) 887 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41af1e591927344a1a91c49b87efe3fb0b9) 816 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41af61dc054946b313e1780cf604ca833c6) 886 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41afbf7d7d96fdf87cb5f7541348a597b48) 873 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41afdf896f1fefa0b962ef99c6cb2681027) 815 0 R (chapter*.1) 431 0 R]
+1112 0 obj <<
+/Names [(aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41af16b1992a2a415168ab96228671ef337) 741 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41af1e591927344a1a91c49b87efe3fb0b9) 673 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41af61dc054946b313e1780cf604ca833c6) 740 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41afbf7d7d96fdf87cb5f7541348a597b48) 686 0 R (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41afdf896f1fefa0b962ef99c6cb2681027) 672 0 R (chapter*.1) 328 0 R]
/Limits [(aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41af16b1992a2a415168ab96228671ef337) (chapter*.1)]
>> endobj
-1357 0 obj <<
-/Names [(chapter.1) 2 0 R (chapter.2) 14 0 R (chapter.3) 30 0 R (chapter.4) 58 0 R (chapter.5) 74 0 R (chapter.6) 82 0 R]
+1113 0 obj <<
+/Names [(chapter.1) 2 0 R (chapter.2) 14 0 R (chapter.3) 30 0 R (chapter.4) 58 0 R (chapter.5) 66 0 R (chapter.6) 74 0 R]
/Limits [(chapter.1) (chapter.6)]
>> endobj
-1358 0 obj <<
-/Names [(chapter.7) 90 0 R (chapter.8) 186 0 R (figure.2.1) 582 0 R (main_8cpp) 547 0 R (main_8cpp_a08a7e8a6abdc5cf6d2ac4e978e084d1a) 577 0 R (main_8cpp_a0ddf1224851353fc92bfbff6f499fa97) 669 0 R]
-/Limits [(chapter.7) (main_8cpp_a0ddf1224851353fc92bfbff6f499fa97)]
->> endobj
-1359 0 obj <<
-/Names [(main_8cpp_a2e18f5738841433eb8c7cd9357ff6ced) 1044 0 R (main_8cpp_a414bbb1046de58d0a2596be7b829448d) 1042 0 R (main_8cpp_a774499c04248e86e7f71ea689c3a7d19) 1050 0 R (main_8cpp_a7f18a204314393991d3da96356b2fd16) 1051 0 R (main_8cpp_a84b7343ea6e13f56b7a06559a7ef8b5a) 1047 0 R (main_8cpp_a8abd3ebb6e18277a43604c06f41e77a8) 1040 0 R]
-/Limits [(main_8cpp_a2e18f5738841433eb8c7cd9357ff6ced) (main_8cpp_a8abd3ebb6e18277a43604c06f41e77a8)]
->> endobj
-1360 0 obj <<
-/Names [(main_8cpp_a904ab05aa185e4cbd7dfbfbf043caa6f) 1046 0 R (main_8cpp_a93d34427c5ada45032539b77c78ab2f6) 951 0 R (main_8cpp_aa5539bfe92dba402e77bcbbb497eee32) 1049 0 R (main_8cpp_aad1596787d6c1baa977de86d9a6f503c) 1052 0 R (main_8cpp_ab3bc9e46a841eaef9e74d55e0045eba8) 1041 0 R (main_8cpp_ab4a8982ff08a7f0ed68e15d851833d38) 1039 0 R]
-/Limits [(main_8cpp_a904ab05aa185e4cbd7dfbfbf043caa6f) (main_8cpp_ab4a8982ff08a7f0ed68e15d851833d38)]
->> endobj
-1361 0 obj <<
-/Names [(main_8cpp_ab78424394912809ef271c9587d264664) 1048 0 R (main_8cpp_ab7e6541570b5f939d29aa8bbcc1dde61) 1043 0 R (main_8cpp_ac7fa490a7117a01e48e05784a6da30fc) 1045 0 R (main_8cpp_aea681fdc68ba4b307e92a33c8a62ea08) 1038 0 R (page.1) 516 0 R (page.10) 658 0 R]
-/Limits [(main_8cpp_ab78424394912809ef271c9587d264664) (page.10)]
->> endobj
-1362 0 obj <<
-/Names [(page.11) 665 0 R (page.12) 673 0 R (page.13) 679 0 R (page.14) 684 0 R (page.15) 693 0 R (page.16) 697 0 R]
-/Limits [(page.11) (page.16)]
->> endobj
-1363 0 obj <<
-/Names [(page.17) 721 0 R (page.18) 742 0 R (page.19) 747 0 R (page.2) 524 0 R (page.20) 753 0 R (page.21) 761 0 R]
-/Limits [(page.17) (page.21)]
->> endobj
-1364 0 obj <<
-/Names [(page.22) 791 0 R (page.23) 862 0 R (page.24) 935 0 R (page.25) 964 0 R (page.26) 972 0 R (page.27) 977 0 R]
-/Limits [(page.22) (page.27)]
->> endobj
-1365 0 obj <<
-/Names [(page.28) 981 0 R (page.29) 985 0 R (page.3) 538 0 R (page.30) 989 0 R (page.31) 995 0 R (page.32) 1003 0 R]
-/Limits [(page.28) (page.32)]
->> endobj
-1366 0 obj <<
-/Names [(page.33) 1026 0 R (page.34) 1057 0 R (page.35) 1061 0 R (page.36) 1065 0 R (page.37) 1113 0 R (page.38) 1190 0 R]
-/Limits [(page.33) (page.38)]
->> endobj
-1367 0 obj <<
-/Names [(page.39) 1267 0 R (page.4) 564 0 R (page.40) 1307 0 R (page.5) 581 0 R (page.6) 591 0 R (page.7) 606 0 R]
-/Limits [(page.39) (page.7)]
+1114 0 obj <<
+/Names [(chapter.7) 174 0 R (figure.2.1) 442 0 R (page.1) 386 0 R (page.10) 518 0 R (page.11) 524 0 R (page.12) 528 0 R]
+/Limits [(chapter.7) (page.12)]
>> endobj
-1368 0 obj <<
-/Names [(page.8) 639 0 R (page.9) 653 0 R (section*.10) 1029 0 R (section*.2) 722 0 R (section*.3) 792 0 R (section*.4) 794 0 R]
-/Limits [(page.8) (section*.4)]
+1115 0 obj <<
+/Names [(page.13) 534 0 R (page.14) 539 0 R (page.15) 564 0 R (page.16) 586 0 R (page.17) 591 0 R (page.18) 596 0 R]
+/Limits [(page.13) (page.18)]
>> endobj
-1369 0 obj <<
-/Names [(section*.5) 795 0 R (section*.6) 796 0 R (section*.7) 936 0 R (section*.8) 1027 0 R (section*.9) 1028 0 R (section.1.1) 6 0 R]
-/Limits [(section*.5) (section.1.1)]
+1116 0 obj <<
+/Names [(page.19) 605 0 R (page.2) 394 0 R (page.20) 660 0 R (page.21) 737 0 R (page.22) 794 0 R (page.23) 806 0 R]
+/Limits [(page.19) (page.23)]
>> endobj
-1370 0 obj <<
-/Names [(section.1.2) 10 0 R (section.2.1) 18 0 R (section.2.2) 22 0 R (section.2.3) 26 0 R (section.3.1) 34 0 R (section.3.2) 38 0 R]
-/Limits [(section.1.2) (section.3.2)]
+1117 0 obj <<
+/Names [(page.24) 812 0 R (page.25) 819 0 R (page.26) 828 0 R (page.27) 834 0 R (page.28) 838 0 R (page.29) 844 0 R]
+/Limits [(page.24) (page.29)]
>> endobj
-1371 0 obj <<
-/Names [(section.3.3) 42 0 R (section.4.1) 62 0 R (section.5.1) 78 0 R (section.6.1) 86 0 R (section.7.1) 94 0 R (section.8.1) 190 0 R]
-/Limits [(section.3.3) (section.8.1)]
+1118 0 obj <<
+/Names [(page.3) 405 0 R (page.30) 848 0 R (page.31) 896 0 R (page.32) 974 0 R (page.33) 1052 0 R (page.34) 1063 0 R]
+/Limits [(page.3) (page.34)]
>> endobj
-1372 0 obj <<
-/Names [(section.8.2) 298 0 R (structCStreamInfo) 614 0 R (structCStreamInfo_a1f2571c63e5f1db6e4d1537e37310568) 737 0 R (structCStreamInfo_a239e02305ca579866e527f4a512b1fdc) 733 0 R (structCStreamInfo_a24cea6707207c95269162847beaa0b7d) 726 0 R (structCStreamInfo_a28c5ba6424b0975f7074b8e1e217a7a3) 731 0 R]
-/Limits [(section.8.2) (structCStreamInfo_a28c5ba6424b0975f7074b8e1e217a7a3)]
+1119 0 obj <<
+/Names [(page.4) 426 0 R (page.5) 441 0 R (page.6) 451 0 R (page.7) 466 0 R (page.8) 499 0 R (page.9) 513 0 R]
+/Limits [(page.4) (page.9)]
>> endobj
-1373 0 obj <<
-/Names [(structCStreamInfo_a36fa897b242eebb936d99010a8c580be) 646 0 R (structCStreamInfo_a47fa73a2c1269f30d1439e90c7652f49) 724 0 R (structCStreamInfo_a4d64654dd9d366c5ea41a89d1972534d) 728 0 R (structCStreamInfo_a5d5f38d670deaa5abf887c3b580df1cd) 723 0 R (structCStreamInfo_a6e431a6f8aeca62ffb7741b3ec068f7b) 729 0 R (structCStreamInfo_a73484dc9e2406a34c5dddf16b3cf6d0c) 732 0 R]
-/Limits [(structCStreamInfo_a36fa897b242eebb936d99010a8c580be) (structCStreamInfo_a73484dc9e2406a34c5dddf16b3cf6d0c)]
+1120 0 obj <<
+/Names [(section*.2) 565 0 R (section*.3) 606 0 R (section*.4) 608 0 R (section*.5) 661 0 R (section*.6) 662 0 R (section*.7) 738 0 R]
+/Limits [(section*.2) (section*.7)]
>> endobj
-1374 0 obj <<
-/Names [(structCStreamInfo_a7362ae2c2b9bd37a103e575c271f3120) 738 0 R (structCStreamInfo_a8a9699c8f4e00893127a7e49161bbd0d) 736 0 R (structCStreamInfo_a8ffd4db9d615e545a5e8cb51990965fc) 730 0 R (structCStreamInfo_aa35e5be20f99be29ce12f9f41bf4d50e) 645 0 R (structCStreamInfo_aae39329c51fe206a8aee33daba2fe1db) 644 0 R (structCStreamInfo_aaf23a4756ee1a1b36f0b7d104d3f9882) 725 0 R]
-/Limits [(structCStreamInfo_a7362ae2c2b9bd37a103e575c271f3120) (structCStreamInfo_aaf23a4756ee1a1b36f0b7d104d3f9882)]
+1121 0 obj <<
+/Names [(section.1.1) 6 0 R (section.1.2) 10 0 R (section.2.1) 18 0 R (section.2.2) 22 0 R (section.2.3) 26 0 R (section.3.1) 34 0 R]
+/Limits [(section.1.1) (section.3.1)]
>> endobj
-1375 0 obj <<
-/Names [(structCStreamInfo_ab28c53f72c8c1a9c4adf5d7e84bcc78b) 734 0 R (structCStreamInfo_ac1388034d207ca6075fc0883d39eea1a) 615 0 R (structCStreamInfo_ae8a7599cb585fdb0ff5446b0a6abb9c8) 735 0 R (structCStreamInfo_af5c2c8b545a6cc3e5aac82e25a2edea0) 727 0 R (subsection.3.3.1) 46 0 R (subsection.3.3.2) 50 0 R]
-/Limits [(structCStreamInfo_ab28c53f72c8c1a9c4adf5d7e84bcc78b) (subsection.3.3.2)]
+1122 0 obj <<
+/Names [(section.3.2) 38 0 R (section.3.3) 42 0 R (section.4.1) 62 0 R (section.5.1) 70 0 R (section.6.1) 78 0 R (section.7.1) 178 0 R]
+/Limits [(section.3.2) (section.7.1)]
>> endobj
-1376 0 obj <<
-/Names [(subsection.3.3.3) 54 0 R (subsection.4.1.1) 66 0 R (subsection.4.1.2) 70 0 R (subsection.7.1.1) 98 0 R (subsection.7.1.2) 102 0 R (subsection.8.1.1) 194 0 R]
-/Limits [(subsection.3.3.3) (subsection.8.1.1)]
+1123 0 obj <<
+/Names [(structCStreamInfo) 474 0 R (structCStreamInfo_a1f2571c63e5f1db6e4d1537e37310568) 581 0 R (structCStreamInfo_a239e02305ca579866e527f4a512b1fdc) 577 0 R (structCStreamInfo_a24cea6707207c95269162847beaa0b7d) 569 0 R (structCStreamInfo_a28c5ba6424b0975f7074b8e1e217a7a3) 575 0 R (structCStreamInfo_a36fa897b242eebb936d99010a8c580be) 506 0 R]
+/Limits [(structCStreamInfo) (structCStreamInfo_a36fa897b242eebb936d99010a8c580be)]
>> endobj
-1377 0 obj <<
-/Names [(subsection.8.1.2) 198 0 R (subsection.8.1.3) 230 0 R (subsection.8.1.4) 238 0 R (subsection.8.1.5) 250 0 R (subsection.8.2.1) 302 0 R (subsection.8.2.2) 306 0 R]
-/Limits [(subsection.8.1.2) (subsection.8.2.2)]
+1124 0 obj <<
+/Names [(structCStreamInfo_a47fa73a2c1269f30d1439e90c7652f49) 567 0 R (structCStreamInfo_a4d64654dd9d366c5ea41a89d1972534d) 571 0 R (structCStreamInfo_a5d5f38d670deaa5abf887c3b580df1cd) 566 0 R (structCStreamInfo_a6e431a6f8aeca62ffb7741b3ec068f7b) 572 0 R (structCStreamInfo_a73484dc9e2406a34c5dddf16b3cf6d0c) 576 0 R (structCStreamInfo_a7362ae2c2b9bd37a103e575c271f3120) 582 0 R]
+/Limits [(structCStreamInfo_a47fa73a2c1269f30d1439e90c7652f49) (structCStreamInfo_a7362ae2c2b9bd37a103e575c271f3120)]
>> endobj
-1378 0 obj <<
-/Names [(subsection.8.2.3) 334 0 R (subsection.8.2.4) 342 0 R (subsubsection.7.1.2.1) 106 0 R (subsubsection.7.1.2.10) 142 0 R (subsubsection.7.1.2.11) 146 0 R (subsubsection.7.1.2.12) 150 0 R]
-/Limits [(subsection.8.2.3) (subsubsection.7.1.2.12)]
+1125 0 obj <<
+/Names [(structCStreamInfo_a8a9699c8f4e00893127a7e49161bbd0d) 580 0 R (structCStreamInfo_a8ffd4db9d615e545a5e8cb51990965fc) 574 0 R (structCStreamInfo_aa35e5be20f99be29ce12f9f41bf4d50e) 505 0 R (structCStreamInfo_aae39329c51fe206a8aee33daba2fe1db) 504 0 R (structCStreamInfo_aaf23a4756ee1a1b36f0b7d104d3f9882) 568 0 R (structCStreamInfo_ab28c53f72c8c1a9c4adf5d7e84bcc78b) 578 0 R]
+/Limits [(structCStreamInfo_a8a9699c8f4e00893127a7e49161bbd0d) (structCStreamInfo_ab28c53f72c8c1a9c4adf5d7e84bcc78b)]
>> endobj
-1379 0 obj <<
-/Names [(subsubsection.7.1.2.13) 154 0 R (subsubsection.7.1.2.14) 158 0 R (subsubsection.7.1.2.15) 162 0 R (subsubsection.7.1.2.16) 166 0 R (subsubsection.7.1.2.17) 170 0 R (subsubsection.7.1.2.18) 174 0 R]
-/Limits [(subsubsection.7.1.2.13) (subsubsection.7.1.2.18)]
+1126 0 obj <<
+/Names [(structCStreamInfo_ac1388034d207ca6075fc0883d39eea1a) 475 0 R (structCStreamInfo_ae8a7599cb585fdb0ff5446b0a6abb9c8) 579 0 R (structCStreamInfo_af5c2c8b545a6cc3e5aac82e25a2edea0) 570 0 R (structCStreamInfo_afa21b3685d93a877cab4aa884524cb67) 573 0 R (subsection.3.3.1) 46 0 R (subsection.3.3.2) 50 0 R]
+/Limits [(structCStreamInfo_ac1388034d207ca6075fc0883d39eea1a) (subsection.3.3.2)]
>> endobj
-1380 0 obj <<
-/Names [(subsubsection.7.1.2.19) 178 0 R (subsubsection.7.1.2.2) 110 0 R (subsubsection.7.1.2.20) 182 0 R (subsubsection.7.1.2.3) 114 0 R (subsubsection.7.1.2.4) 118 0 R (subsubsection.7.1.2.5) 122 0 R]
-/Limits [(subsubsection.7.1.2.19) (subsubsection.7.1.2.5)]
+1127 0 obj <<
+/Names [(subsection.3.3.3) 54 0 R (subsection.6.1.1) 82 0 R (subsection.6.1.2) 86 0 R (subsection.7.1.1) 182 0 R (subsection.7.1.2) 186 0 R (subsection.7.1.3) 218 0 R]
+/Limits [(subsection.3.3.3) (subsection.7.1.3)]
>> endobj
-1381 0 obj <<
-/Names [(subsubsection.7.1.2.6) 126 0 R (subsubsection.7.1.2.7) 130 0 R (subsubsection.7.1.2.8) 134 0 R (subsubsection.7.1.2.9) 138 0 R (subsubsection.8.1.2.1) 202 0 R (subsubsection.8.1.2.2) 206 0 R]
-/Limits [(subsubsection.7.1.2.6) (subsubsection.8.1.2.2)]
+1128 0 obj <<
+/Names [(subsection.7.1.4) 226 0 R (subsection.7.1.5) 238 0 R (subsubsection.6.1.2.1) 90 0 R (subsubsection.6.1.2.10) 126 0 R (subsubsection.6.1.2.11) 130 0 R (subsubsection.6.1.2.12) 134 0 R]
+/Limits [(subsection.7.1.4) (subsubsection.6.1.2.12)]
>> endobj
-1382 0 obj <<
-/Names [(subsubsection.8.1.2.3) 210 0 R (subsubsection.8.1.2.4) 214 0 R (subsubsection.8.1.2.5) 218 0 R (subsubsection.8.1.2.6) 222 0 R (subsubsection.8.1.2.7) 226 0 R (subsubsection.8.1.3.1) 234 0 R]
-/Limits [(subsubsection.8.1.2.3) (subsubsection.8.1.3.1)]
+1129 0 obj <<
+/Names [(subsubsection.6.1.2.13) 138 0 R (subsubsection.6.1.2.14) 142 0 R (subsubsection.6.1.2.15) 146 0 R (subsubsection.6.1.2.16) 150 0 R (subsubsection.6.1.2.17) 154 0 R (subsubsection.6.1.2.18) 158 0 R]
+/Limits [(subsubsection.6.1.2.13) (subsubsection.6.1.2.18)]
>> endobj
-1383 0 obj <<
-/Names [(subsubsection.8.1.4.1) 242 0 R (subsubsection.8.1.4.2) 246 0 R (subsubsection.8.1.5.1) 254 0 R (subsubsection.8.1.5.10) 290 0 R (subsubsection.8.1.5.11) 294 0 R (subsubsection.8.1.5.2) 258 0 R]
-/Limits [(subsubsection.8.1.4.1) (subsubsection.8.1.5.2)]
+1130 0 obj <<
+/Names [(subsubsection.6.1.2.19) 162 0 R (subsubsection.6.1.2.2) 94 0 R (subsubsection.6.1.2.20) 166 0 R (subsubsection.6.1.2.21) 170 0 R (subsubsection.6.1.2.3) 98 0 R (subsubsection.6.1.2.4) 102 0 R]
+/Limits [(subsubsection.6.1.2.19) (subsubsection.6.1.2.4)]
>> endobj
-1384 0 obj <<
-/Names [(subsubsection.8.1.5.3) 262 0 R (subsubsection.8.1.5.4) 266 0 R (subsubsection.8.1.5.5) 270 0 R (subsubsection.8.1.5.6) 274 0 R (subsubsection.8.1.5.7) 278 0 R (subsubsection.8.1.5.8) 282 0 R]
-/Limits [(subsubsection.8.1.5.3) (subsubsection.8.1.5.8)]
+1131 0 obj <<
+/Names [(subsubsection.6.1.2.5) 106 0 R (subsubsection.6.1.2.6) 110 0 R (subsubsection.6.1.2.7) 114 0 R (subsubsection.6.1.2.8) 118 0 R (subsubsection.6.1.2.9) 122 0 R (subsubsection.7.1.2.1) 190 0 R]
+/Limits [(subsubsection.6.1.2.5) (subsubsection.7.1.2.1)]
>> endobj
-1385 0 obj <<
-/Names [(subsubsection.8.1.5.9) 286 0 R (subsubsection.8.2.2.1) 310 0 R (subsubsection.8.2.2.2) 314 0 R (subsubsection.8.2.2.3) 318 0 R (subsubsection.8.2.2.4) 322 0 R (subsubsection.8.2.2.5) 326 0 R]
-/Limits [(subsubsection.8.1.5.9) (subsubsection.8.2.2.5)]
+1132 0 obj <<
+/Names [(subsubsection.7.1.2.2) 194 0 R (subsubsection.7.1.2.3) 198 0 R (subsubsection.7.1.2.4) 202 0 R (subsubsection.7.1.2.5) 206 0 R (subsubsection.7.1.2.6) 210 0 R (subsubsection.7.1.2.7) 214 0 R]
+/Limits [(subsubsection.7.1.2.2) (subsubsection.7.1.2.7)]
>> endobj
-1386 0 obj <<
-/Names [(subsubsection.8.2.2.6) 330 0 R (subsubsection.8.2.3.1) 338 0 R (subsubsection.8.2.4.1) 346 0 R (subsubsection.8.2.4.10) 382 0 R (subsubsection.8.2.4.11) 386 0 R (subsubsection.8.2.4.2) 350 0 R]
-/Limits [(subsubsection.8.2.2.6) (subsubsection.8.2.4.2)]
+1133 0 obj <<
+/Names [(subsubsection.7.1.3.1) 222 0 R (subsubsection.7.1.4.1) 230 0 R (subsubsection.7.1.4.2) 234 0 R (subsubsection.7.1.5.1) 242 0 R (subsubsection.7.1.5.10) 278 0 R (subsubsection.7.1.5.11) 282 0 R]
+/Limits [(subsubsection.7.1.3.1) (subsubsection.7.1.5.11)]
>> endobj
-1387 0 obj <<
-/Names [(subsubsection.8.2.4.3) 354 0 R (subsubsection.8.2.4.4) 358 0 R (subsubsection.8.2.4.5) 362 0 R (subsubsection.8.2.4.6) 366 0 R (subsubsection.8.2.4.7) 370 0 R (subsubsection.8.2.4.8) 374 0 R]
-/Limits [(subsubsection.8.2.4.3) (subsubsection.8.2.4.8)]
+1134 0 obj <<
+/Names [(subsubsection.7.1.5.2) 246 0 R (subsubsection.7.1.5.3) 250 0 R (subsubsection.7.1.5.4) 254 0 R (subsubsection.7.1.5.5) 258 0 R (subsubsection.7.1.5.6) 262 0 R (subsubsection.7.1.5.7) 266 0 R]
+/Limits [(subsubsection.7.1.5.2) (subsubsection.7.1.5.7)]
>> endobj
-1388 0 obj <<
-/Names [(subsubsection.8.2.4.9) 378 0 R]
-/Limits [(subsubsection.8.2.4.9) (subsubsection.8.2.4.9)]
+1135 0 obj <<
+/Names [(subsubsection.7.1.5.8) 270 0 R (subsubsection.7.1.5.9) 274 0 R]
+/Limits [(subsubsection.7.1.5.8) (subsubsection.7.1.5.9)]
>> endobj
-1389 0 obj <<
-/Kids [1340 0 R 1341 0 R 1342 0 R 1343 0 R 1344 0 R 1345 0 R]
-/Limits [(CommandLineUsage) (aacdecoder__lib_8h_a620b5a8c5d7ddd1b525aae1895963e16)]
+1136 0 obj <<
+/Kids [1096 0 R 1097 0 R 1098 0 R 1099 0 R 1100 0 R 1101 0 R]
+/Limits [(Doc-Start) (aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88)]
>> endobj
-1390 0 obj <<
-/Kids [1346 0 R 1347 0 R 1348 0 R 1349 0 R 1350 0 R 1351 0 R]
-/Limits [(aacdecoder__lib_8h_a6d508fce68c364f5dabc9195e701ecf8) (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a5bc4e4af77d94fa08beb54def8f01f7f)]
+1137 0 obj <<
+/Kids [1102 0 R 1103 0 R 1104 0 R 1105 0 R 1106 0 R 1107 0 R]
+/Limits [(aacdecoder__lib_8h_aa34599717f4ed74b0c954cd57edc9f88a28dd853ab4339011893a933020ac5ab8) (aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a5bc4e4af77d94fa08beb54def8f01f7f)]
>> endobj
-1391 0 obj <<
-/Kids [1352 0 R 1353 0 R 1354 0 R 1355 0 R 1356 0 R 1357 0 R]
+1138 0 obj <<
+/Kids [1108 0 R 1109 0 R 1110 0 R 1111 0 R 1112 0 R 1113 0 R]
/Limits [(aacdecoder__lib_8h_afbc7e8b4f1613dfd8cb91b681eeb9d41a60690e0dbc450f62f83548fa484716ab) (chapter.6)]
>> endobj
-1392 0 obj <<
-/Kids [1358 0 R 1359 0 R 1360 0 R 1361 0 R 1362 0 R 1363 0 R]
-/Limits [(chapter.7) (page.21)]
->> endobj
-1393 0 obj <<
-/Kids [1364 0 R 1365 0 R 1366 0 R 1367 0 R 1368 0 R 1369 0 R]
-/Limits [(page.22) (section.1.1)]
->> endobj
-1394 0 obj <<
-/Kids [1370 0 R 1371 0 R 1372 0 R 1373 0 R 1374 0 R 1375 0 R]
-/Limits [(section.1.2) (subsection.3.3.2)]
+1139 0 obj <<
+/Kids [1114 0 R 1115 0 R 1116 0 R 1117 0 R 1118 0 R 1119 0 R]
+/Limits [(chapter.7) (page.9)]
>> endobj
-1395 0 obj <<
-/Kids [1376 0 R 1377 0 R 1378 0 R 1379 0 R 1380 0 R 1381 0 R]
-/Limits [(subsection.3.3.3) (subsubsection.8.1.2.2)]
+1140 0 obj <<
+/Kids [1120 0 R 1121 0 R 1122 0 R 1123 0 R 1124 0 R 1125 0 R]
+/Limits [(section*.2) (structCStreamInfo_ab28c53f72c8c1a9c4adf5d7e84bcc78b)]
>> endobj
-1396 0 obj <<
-/Kids [1382 0 R 1383 0 R 1384 0 R 1385 0 R 1386 0 R 1387 0 R]
-/Limits [(subsubsection.8.1.2.3) (subsubsection.8.2.4.8)]
+1141 0 obj <<
+/Kids [1126 0 R 1127 0 R 1128 0 R 1129 0 R 1130 0 R 1131 0 R]
+/Limits [(structCStreamInfo_ac1388034d207ca6075fc0883d39eea1a) (subsubsection.7.1.2.1)]
>> endobj
-1397 0 obj <<
-/Kids [1388 0 R]
-/Limits [(subsubsection.8.2.4.9) (subsubsection.8.2.4.9)]
+1142 0 obj <<
+/Kids [1132 0 R 1133 0 R 1134 0 R 1135 0 R]
+/Limits [(subsubsection.7.1.2.2) (subsubsection.7.1.5.9)]
>> endobj
-1398 0 obj <<
-/Kids [1389 0 R 1390 0 R 1391 0 R 1392 0 R 1393 0 R 1394 0 R]
-/Limits [(CommandLineUsage) (subsection.3.3.2)]
+1143 0 obj <<
+/Kids [1136 0 R 1137 0 R 1138 0 R 1139 0 R 1140 0 R 1141 0 R]
+/Limits [(Doc-Start) (subsubsection.7.1.2.1)]
>> endobj
-1399 0 obj <<
-/Kids [1395 0 R 1396 0 R 1397 0 R]
-/Limits [(subsection.3.3.3) (subsubsection.8.2.4.9)]
+1144 0 obj <<
+/Kids [1142 0 R]
+/Limits [(subsubsection.7.1.2.2) (subsubsection.7.1.5.9)]
>> endobj
-1400 0 obj <<
-/Kids [1398 0 R 1399 0 R]
-/Limits [(CommandLineUsage) (subsubsection.8.2.4.9)]
+1145 0 obj <<
+/Kids [1143 0 R 1144 0 R]
+/Limits [(Doc-Start) (subsubsection.7.1.5.9)]
>> endobj
-1401 0 obj <<
-/Dests 1400 0 R
+1146 0 obj <<
+/Dests 1145 0 R
>> endobj
-1402 0 obj <<
+1147 0 obj <<
/Type /Catalog
-/Pages 1338 0 R
-/Outlines 1339 0 R
-/Names 1401 0 R
+/Pages 1094 0 R
+/Outlines 1095 0 R
+/Names 1146 0 R
/PageMode/UseOutlines/PageLabels<</Nums[0<</S/D>>2<</S/r>>6<</S/D>>]>>
-/OpenAction 389 0 R
+/OpenAction 285 0 R
>> endobj
-1403 0 obj <<
+1148 0 obj <<
/Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.10)/Keywords()
-/CreationDate (D:20120927161848+02'00')
-/ModDate (D:20120927161848+02'00')
+/CreationDate (D:20130815104149+02'00')
+/ModDate (D:20130815104149+02'00')
/Trapped /False
/PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.10-2.2 (TeX Live 2009/Debian) kpathsea version 5.0.0)
>> endobj
xref
-0 1404
+0 1149
0000000000 65535 f
0000000015 00000 n
-0000183153 00000 n
-0000506334 00000 n
+0000173975 00000 n
+0000463974 00000 n
0000000060 00000 n
0000000146 00000 n
-0000183322 00000 n
-0000506264 00000 n
+0000174144 00000 n
+0000463904 00000 n
0000000193 00000 n
0000000244 00000 n
-0000183439 00000 n
-0000506193 00000 n
+0000174261 00000 n
+0000463833 00000 n
0000000291 00000 n
0000000391 00000 n
-0000187370 00000 n
-0000506068 00000 n
+0000177850 00000 n
+0000463708 00000 n
0000000437 00000 n
0000000532 00000 n
-0000187540 00000 n
-0000505994 00000 n
+0000178020 00000 n
+0000463634 00000 n
0000000580 00000 n
0000000685 00000 n
-0000187657 00000 n
-0000505907 00000 n
+0000178137 00000 n
+0000463547 00000 n
0000000733 00000 n
0000000843 00000 n
-0000193762 00000 n
-0000505833 00000 n
+0000183363 00000 n
+0000463473 00000 n
0000000891 00000 n
0000000986 00000 n
-0000222468 00000 n
-0000505707 00000 n
+0000212069 00000 n
+0000463347 00000 n
0000001032 00000 n
0000001165 00000 n
-0000222638 00000 n
-0000505633 00000 n
+0000212239 00000 n
+0000463273 00000 n
0000001213 00000 n
0000001434 00000 n
-0000222756 00000 n
-0000505546 00000 n
+0000212357 00000 n
+0000463186 00000 n
0000001482 00000 n
0000001681 00000 n
-0000222874 00000 n
-0000505435 00000 n
+0000212475 00000 n
+0000463075 00000 n
0000001729 00000 n
0000001882 00000 n
-0000228900 00000 n
-0000505361 00000 n
+0000218501 00000 n
+0000463001 00000 n
0000001935 00000 n
0000001992 00000 n
-0000229018 00000 n
-0000505274 00000 n
+0000218619 00000 n
+0000462914 00000 n
0000002045 00000 n
0000002135 00000 n
-0000231747 00000 n
-0000505200 00000 n
+0000221348 00000 n
+0000462840 00000 n
0000002188 00000 n
0000002324 00000 n
-0000234298 00000 n
-0000505074 00000 n
+0000222981 00000 n
+0000462714 00000 n
0000002370 00000 n
-0000002490 00000 n
-0000234473 00000 n
-0000504976 00000 n
-0000002538 00000 n
-0000002610 00000 n
-0000234586 00000 n
-0000504902 00000 n
-0000002663 00000 n
-0000002788 00000 n
-0000234699 00000 n
-0000504828 00000 n
-0000002841 00000 n
-0000002961 00000 n
-0000237270 00000 n
-0000504702 00000 n
-0000003007 00000 n
-0000003092 00000 n
-0000237326 00000 n
-0000504641 00000 n
-0000003140 00000 n
-0000003220 00000 n
-0000239491 00000 n
-0000504515 00000 n
-0000003266 00000 n
-0000003346 00000 n
-0000239547 00000 n
-0000504454 00000 n
-0000003394 00000 n
-0000003469 00000 n
-0000245207 00000 n
-0000504327 00000 n
-0000003515 00000 n
-0000003640 00000 n
-0000245320 00000 n
-0000504228 00000 n
-0000003688 00000 n
-0000003861 00000 n
-0000245433 00000 n
-0000504152 00000 n
-0000003914 00000 n
-0000004045 00000 n
-0000246770 00000 n
-0000504035 00000 n
+0000002455 00000 n
+0000223037 00000 n
+0000462653 00000 n
+0000002503 00000 n
+0000002583 00000 n
+0000224567 00000 n
+0000462527 00000 n
+0000002629 00000 n
+0000002709 00000 n
+0000224623 00000 n
+0000462466 00000 n
+0000002757 00000 n
+0000002832 00000 n
+0000230483 00000 n
+0000462339 00000 n
+0000002878 00000 n
+0000003003 00000 n
+0000230596 00000 n
+0000462241 00000 n
+0000003051 00000 n
+0000003224 00000 n
+0000230709 00000 n
+0000462167 00000 n
+0000003277 00000 n
+0000003407 00000 n
+0000232135 00000 n
+0000462054 00000 n
+0000003460 00000 n
+0000003618 00000 n
+0000232248 00000 n
+0000461980 00000 n
+0000003676 00000 n
+0000003773 00000 n
+0000232366 00000 n
+0000461893 00000 n
+0000003831 00000 n
+0000003923 00000 n
+0000232484 00000 n
+0000461804 00000 n
+0000003981 00000 n
0000004099 00000 n
-0000004258 00000 n
-0000246884 00000 n
-0000503956 00000 n
-0000004317 00000 n
-0000004410 00000 n
-0000247003 00000 n
-0000503863 00000 n
-0000004469 00000 n
-0000004587 00000 n
-0000247122 00000 n
-0000503770 00000 n
-0000004646 00000 n
-0000004689 00000 n
-0000247241 00000 n
-0000503677 00000 n
-0000004748 00000 n
-0000004811 00000 n
-0000247360 00000 n
-0000503584 00000 n
-0000004870 00000 n
-0000004963 00000 n
-0000247479 00000 n
-0000503491 00000 n
-0000005022 00000 n
-0000005090 00000 n
-0000247598 00000 n
-0000503398 00000 n
-0000005149 00000 n
-0000005207 00000 n
-0000247717 00000 n
-0000503305 00000 n
-0000005266 00000 n
-0000005369 00000 n
-0000247836 00000 n
-0000503212 00000 n
-0000005428 00000 n
-0000005481 00000 n
-0000247955 00000 n
-0000503119 00000 n
-0000005541 00000 n
-0000005614 00000 n
-0000249696 00000 n
-0000503026 00000 n
-0000005674 00000 n
-0000005787 00000 n
-0000249810 00000 n
-0000502933 00000 n
-0000005847 00000 n
-0000005930 00000 n
-0000249929 00000 n
-0000502840 00000 n
-0000005990 00000 n
-0000006073 00000 n
-0000250043 00000 n
-0000502747 00000 n
-0000006133 00000 n
-0000006251 00000 n
-0000250157 00000 n
-0000502654 00000 n
-0000006311 00000 n
-0000006434 00000 n
-0000250270 00000 n
-0000502561 00000 n
-0000006494 00000 n
-0000006587 00000 n
-0000250389 00000 n
-0000502468 00000 n
-0000006647 00000 n
-0000006750 00000 n
-0000250508 00000 n
-0000502375 00000 n
-0000006810 00000 n
-0000006898 00000 n
-0000250627 00000 n
-0000502282 00000 n
-0000006958 00000 n
-0000007021 00000 n
-0000251708 00000 n
-0000502203 00000 n
+0000232602 00000 n
+0000461713 00000 n
+0000004158 00000 n
+0000004201 00000 n
+0000232721 00000 n
+0000461621 00000 n
+0000004260 00000 n
+0000004323 00000 n
+0000232840 00000 n
+0000461529 00000 n
+0000004382 00000 n
+0000004475 00000 n
+0000232958 00000 n
+0000461437 00000 n
+0000004534 00000 n
+0000004602 00000 n
+0000233077 00000 n
+0000461345 00000 n
+0000004661 00000 n
+0000004719 00000 n
+0000233196 00000 n
+0000461253 00000 n
+0000004778 00000 n
+0000004881 00000 n
+0000233313 00000 n
+0000461161 00000 n
+0000004941 00000 n
+0000004994 00000 n
+0000235080 00000 n
+0000461069 00000 n
+0000005054 00000 n
+0000005127 00000 n
+0000235199 00000 n
+0000460977 00000 n
+0000005187 00000 n
+0000005300 00000 n
+0000235318 00000 n
+0000460885 00000 n
+0000005360 00000 n
+0000005443 00000 n
+0000235436 00000 n
+0000460793 00000 n
+0000005503 00000 n
+0000005586 00000 n
+0000235555 00000 n
+0000460701 00000 n
+0000005646 00000 n
+0000005764 00000 n
+0000235674 00000 n
+0000460609 00000 n
+0000005824 00000 n
+0000005947 00000 n
+0000235793 00000 n
+0000460517 00000 n
+0000006007 00000 n
+0000006100 00000 n
+0000235912 00000 n
+0000460425 00000 n
+0000006160 00000 n
+0000006263 00000 n
+0000236031 00000 n
+0000460333 00000 n
+0000006323 00000 n
+0000006411 00000 n
+0000236150 00000 n
+0000460241 00000 n
+0000006471 00000 n
+0000006534 00000 n
+0000237212 00000 n
+0000460163 00000 n
+0000006594 00000 n
+0000006672 00000 n
+0000243187 00000 n
+0000460045 00000 n
+0000006719 00000 n
+0000006840 00000 n
+0000243301 00000 n
+0000459941 00000 n
+0000006889 00000 n
0000007081 00000 n
-0000007159 00000 n
-0000256953 00000 n
-0000502085 00000 n
-0000007206 00000 n
-0000007327 00000 n
-0000257067 00000 n
-0000501967 00000 n
-0000007376 00000 n
-0000007568 00000 n
-0000289847 00000 n
-0000501888 00000 n
-0000007622 00000 n
-0000007753 00000 n
-0000289904 00000 n
-0000501756 00000 n
-0000007807 00000 n
-0000007938 00000 n
-0000290018 00000 n
-0000501677 00000 n
-0000007997 00000 n
-0000008098 00000 n
-0000290135 00000 n
-0000501584 00000 n
-0000008157 00000 n
-0000008258 00000 n
-0000290254 00000 n
-0000501491 00000 n
-0000008317 00000 n
-0000008408 00000 n
-0000290367 00000 n
-0000501398 00000 n
-0000008467 00000 n
-0000008553 00000 n
-0000290485 00000 n
-0000501305 00000 n
-0000008612 00000 n
-0000008721 00000 n
-0000293228 00000 n
-0000501212 00000 n
-0000008780 00000 n
-0000008879 00000 n
-0000293347 00000 n
-0000501133 00000 n
-0000008938 00000 n
-0000009047 00000 n
-0000293404 00000 n
-0000501001 00000 n
-0000009101 00000 n
-0000009237 00000 n
-0000293518 00000 n
-0000500936 00000 n
-0000009296 00000 n
-0000009412 00000 n
-0000293575 00000 n
-0000500804 00000 n
-0000009466 00000 n
-0000009650 00000 n
-0000293689 00000 n
-0000500725 00000 n
-0000009709 00000 n
-0000009828 00000 n
-0000298546 00000 n
-0000500646 00000 n
-0000009887 00000 n
-0000009978 00000 n
-0000302539 00000 n
-0000500527 00000 n
-0000010032 00000 n
-0000010173 00000 n
-0000302653 00000 n
-0000500448 00000 n
-0000010232 00000 n
-0000010368 00000 n
-0000304426 00000 n
-0000500355 00000 n
-0000010427 00000 n
-0000010568 00000 n
-0000304540 00000 n
-0000500262 00000 n
-0000010627 00000 n
-0000010738 00000 n
-0000304653 00000 n
-0000500169 00000 n
-0000010797 00000 n
-0000010928 00000 n
-0000307032 00000 n
-0000500076 00000 n
-0000010987 00000 n
-0000011128 00000 n
-0000307146 00000 n
-0000499983 00000 n
-0000011187 00000 n
-0000011293 00000 n
-0000309116 00000 n
-0000499890 00000 n
-0000011352 00000 n
-0000011498 00000 n
-0000309229 00000 n
-0000499797 00000 n
-0000011557 00000 n
-0000011693 00000 n
-0000309342 00000 n
-0000499704 00000 n
-0000011752 00000 n
-0000011903 00000 n
-0000310996 00000 n
-0000499611 00000 n
-0000011963 00000 n
-0000012069 00000 n
-0000311112 00000 n
-0000499532 00000 n
-0000012129 00000 n
-0000012255 00000 n
-0000311227 00000 n
-0000499414 00000 n
-0000012304 00000 n
-0000012453 00000 n
-0000321808 00000 n
-0000499335 00000 n
-0000012507 00000 n
-0000012638 00000 n
-0000323788 00000 n
-0000499203 00000 n
-0000012692 00000 n
-0000012823 00000 n
-0000323905 00000 n
-0000499124 00000 n
-0000012882 00000 n
-0000012976 00000 n
-0000324021 00000 n
-0000499031 00000 n
-0000013035 00000 n
-0000013134 00000 n
-0000324135 00000 n
-0000498938 00000 n
-0000013193 00000 n
-0000013282 00000 n
-0000324250 00000 n
-0000498845 00000 n
-0000013341 00000 n
-0000013445 00000 n
-0000324367 00000 n
-0000498752 00000 n
-0000013504 00000 n
-0000013590 00000 n
-0000324484 00000 n
-0000498673 00000 n
-0000013649 00000 n
-0000013743 00000 n
-0000324542 00000 n
-0000498541 00000 n
-0000013797 00000 n
-0000013938 00000 n
-0000324658 00000 n
-0000498476 00000 n
-0000013997 00000 n
-0000014045 00000 n
-0000325731 00000 n
-0000498357 00000 n
-0000014099 00000 n
-0000014240 00000 n
-0000325847 00000 n
-0000498278 00000 n
-0000014299 00000 n
-0000014372 00000 n
-0000325963 00000 n
-0000498185 00000 n
-0000014431 00000 n
-0000014514 00000 n
-0000326079 00000 n
-0000498092 00000 n
-0000014573 00000 n
-0000014621 00000 n
-0000326196 00000 n
-0000497999 00000 n
-0000014680 00000 n
-0000014751 00000 n
-0000326313 00000 n
-0000497906 00000 n
-0000014810 00000 n
-0000014878 00000 n
-0000326429 00000 n
-0000497813 00000 n
-0000014937 00000 n
-0000015015 00000 n
-0000326546 00000 n
-0000497720 00000 n
-0000015074 00000 n
-0000015142 00000 n
-0000326663 00000 n
-0000497627 00000 n
-0000015201 00000 n
-0000015292 00000 n
-0000326779 00000 n
-0000497534 00000 n
-0000015351 00000 n
-0000015444 00000 n
-0000327615 00000 n
-0000497441 00000 n
-0000015504 00000 n
-0000015602 00000 n
-0000327732 00000 n
-0000497362 00000 n
-0000015662 00000 n
-0000015730 00000 n
-0000016819 00000 n
-0000016953 00000 n
-0000160276 00000 n
-0000160404 00000 n
-0000015782 00000 n
-0000160347 00000 n
-0000495354 00000 n
-0000495710 00000 n
-0000496066 00000 n
-0000128679 00000 n
-0000160744 00000 n
-0000160625 00000 n
+0000270974 00000 n
+0000459862 00000 n
+0000007135 00000 n
+0000007266 00000 n
+0000271030 00000 n
+0000459730 00000 n
+0000007320 00000 n
+0000007451 00000 n
+0000271144 00000 n
+0000459651 00000 n
+0000007510 00000 n
+0000007611 00000 n
+0000274185 00000 n
+0000459558 00000 n
+0000007670 00000 n
+0000007771 00000 n
+0000274304 00000 n
+0000459465 00000 n
+0000007830 00000 n
+0000007921 00000 n
+0000274422 00000 n
+0000459372 00000 n
+0000007980 00000 n
+0000008066 00000 n
+0000274541 00000 n
+0000459279 00000 n
+0000008125 00000 n
+0000008234 00000 n
+0000274659 00000 n
+0000459186 00000 n
+0000008293 00000 n
+0000008392 00000 n
+0000274778 00000 n
+0000459107 00000 n
+0000008451 00000 n
+0000008560 00000 n
+0000274835 00000 n
+0000458975 00000 n
+0000008614 00000 n
+0000008750 00000 n
+0000274949 00000 n
+0000458910 00000 n
+0000008809 00000 n
+0000008925 00000 n
+0000275006 00000 n
+0000458778 00000 n
+0000008979 00000 n
+0000009163 00000 n
+0000275120 00000 n
+0000458699 00000 n
+0000009222 00000 n
+0000009341 00000 n
+0000283188 00000 n
+0000458620 00000 n
+0000009400 00000 n
+0000009491 00000 n
+0000290670 00000 n
+0000458501 00000 n
+0000009545 00000 n
+0000009686 00000 n
+0000290784 00000 n
+0000458422 00000 n
+0000009745 00000 n
+0000009881 00000 n
+0000290898 00000 n
+0000458329 00000 n
+0000009940 00000 n
+0000010081 00000 n
+0000291012 00000 n
+0000458236 00000 n
+0000010140 00000 n
+0000010251 00000 n
+0000293416 00000 n
+0000458143 00000 n
+0000010310 00000 n
+0000010441 00000 n
+0000293530 00000 n
+0000458050 00000 n
+0000010500 00000 n
+0000010641 00000 n
+0000293644 00000 n
+0000457957 00000 n
+0000010700 00000 n
+0000010806 00000 n
+0000295921 00000 n
+0000457864 00000 n
+0000010865 00000 n
+0000011011 00000 n
+0000296035 00000 n
+0000457771 00000 n
+0000011070 00000 n
+0000011206 00000 n
+0000296149 00000 n
+0000457678 00000 n
+0000011265 00000 n
+0000011416 00000 n
+0000297361 00000 n
+0000457585 00000 n
+0000011476 00000 n
+0000011582 00000 n
+0000297475 00000 n
+0000457506 00000 n
+0000011642 00000 n
+0000011768 00000 n
+0000012855 00000 n
+0000012989 00000 n
+0000156312 00000 n
+0000156440 00000 n
+0000011820 00000 n
+0000156383 00000 n
+0000455634 00000 n
+0000455990 00000 n
+0000456346 00000 n
+0000124715 00000 n
+0000156780 00000 n
+0000156661 00000 n
+0000156561 00000 n
+0000158065 00000 n
+0000158215 00000 n
+0000158369 00000 n
+0000158521 00000 n
+0000158672 00000 n
+0000158825 00000 n
+0000158978 00000 n
+0000159132 00000 n
+0000159283 00000 n
+0000159437 00000 n
+0000159590 00000 n
+0000159744 00000 n
+0000159903 00000 n
+0000160061 00000 n
+0000160220 00000 n
+0000160371 00000 n
0000160525 00000 n
-0000162006 00000 n
-0000162157 00000 n
-0000162311 00000 n
-0000162463 00000 n
-0000162613 00000 n
-0000162766 00000 n
-0000162920 00000 n
-0000163074 00000 n
-0000163225 00000 n
-0000163379 00000 n
-0000163533 00000 n
-0000163687 00000 n
-0000163846 00000 n
-0000164005 00000 n
-0000164164 00000 n
-0000164315 00000 n
-0000164469 00000 n
-0000164628 00000 n
-0000164787 00000 n
-0000164938 00000 n
-0000165091 00000 n
-0000165242 00000 n
-0000165396 00000 n
-0000165546 00000 n
-0000167324 00000 n
-0000165756 00000 n
-0000161683 00000 n
-0000160785 00000 n
-0000165699 00000 n
-0000167483 00000 n
-0000167642 00000 n
-0000167802 00000 n
-0000167966 00000 n
-0000168129 00000 n
-0000168293 00000 n
-0000168457 00000 n
-0000168620 00000 n
-0000168783 00000 n
-0000168947 00000 n
-0000169111 00000 n
-0000169275 00000 n
-0000169440 00000 n
-0000169605 00000 n
-0000169770 00000 n
-0000169935 00000 n
-0000170099 00000 n
-0000170264 00000 n
-0000170428 00000 n
-0000170593 00000 n
-0000170757 00000 n
-0000170922 00000 n
-0000171073 00000 n
-0000171227 00000 n
-0000171386 00000 n
-0000171545 00000 n
-0000171709 00000 n
-0000171872 00000 n
-0000172036 00000 n
-0000172200 00000 n
-0000172364 00000 n
-0000172528 00000 n
-0000172692 00000 n
-0000172851 00000 n
-0000173014 00000 n
-0000174772 00000 n
-0000173172 00000 n
-0000166905 00000 n
-0000165841 00000 n
-0000174936 00000 n
-0000175100 00000 n
-0000175259 00000 n
-0000175423 00000 n
-0000175587 00000 n
-0000175751 00000 n
-0000175915 00000 n
-0000176078 00000 n
-0000176242 00000 n
-0000176405 00000 n
-0000176568 00000 n
-0000176732 00000 n
-0000176896 00000 n
-0000177061 00000 n
-0000177215 00000 n
-0000177373 00000 n
-0000177531 00000 n
-0000177695 00000 n
-0000177859 00000 n
-0000178023 00000 n
-0000178187 00000 n
-0000178351 00000 n
-0000178515 00000 n
-0000178674 00000 n
-0000178838 00000 n
-0000178997 00000 n
-0000179161 00000 n
-0000179324 00000 n
-0000179488 00000 n
-0000179651 00000 n
-0000179813 00000 n
-0000179977 00000 n
-0000180140 00000 n
-0000180304 00000 n
-0000180468 00000 n
-0000181156 00000 n
-0000180632 00000 n
-0000174353 00000 n
-0000173257 00000 n
-0000181321 00000 n
-0000181017 00000 n
-0000180717 00000 n
-0000183495 00000 n
-0000182978 00000 n
-0000181406 00000 n
-0000183097 00000 n
-0000183208 00000 n
-0000183265 00000 n
-0000183377 00000 n
-0000496184 00000 n
-0000183982 00000 n
-0000183807 00000 n
-0000183580 00000 n
-0000183926 00000 n
-0000186263 00000 n
-0000186423 00000 n
-0000186575 00000 n
-0000186734 00000 n
-0000186928 00000 n
-0000187121 00000 n
-0000190726 00000 n
-0000190878 00000 n
-0000191073 00000 n
-0000191526 00000 n
-0000187884 00000 n
-0000186084 00000 n
-0000184054 00000 n
-0000187314 00000 n
-0000187426 00000 n
-0000187483 00000 n
-0000187596 00000 n
-0000187713 00000 n
-0000495180 00000 n
-0000187770 00000 n
-0000187827 00000 n
-0000257010 00000 n
-0000311170 00000 n
-0000234354 00000 n
-0000309399 00000 n
-0000304596 00000 n
-0000306976 00000 n
-0000191720 00000 n
-0000191915 00000 n
-0000192110 00000 n
-0000192304 00000 n
-0000192455 00000 n
-0000192650 00000 n
-0000192800 00000 n
-0000193170 00000 n
-0000195152 00000 n
-0000193818 00000 n
-0000190468 00000 n
-0000187982 00000 n
-0000193365 00000 n
-0000193421 00000 n
-0000191300 00000 n
-0000193478 00000 n
-0000193534 00000 n
-0000193591 00000 n
-0000193648 00000 n
-0000193705 00000 n
-0000192986 00000 n
-0000294056 00000 n
-0000307089 00000 n
-0000309286 00000 n
-0000304483 00000 n
-0000324079 00000 n
-0000218033 00000 n
-0000195018 00000 n
-0000193916 00000 n
-0000217915 00000 n
-0000217971 00000 n
-0000495036 00000 n
-0000494602 00000 n
-0000494747 00000 n
-0000494891 00000 n
-0000208041 00000 n
-0000218610 00000 n
-0000218435 00000 n
-0000218205 00000 n
-0000218554 00000 n
-0000220672 00000 n
-0000220831 00000 n
-0000221216 00000 n
-0000221444 00000 n
-0000221671 00000 n
-0000221866 00000 n
-0000222059 00000 n
-0000222218 00000 n
-0000224945 00000 n
-0000225172 00000 n
-0000225626 00000 n
-0000222991 00000 n
-0000220469 00000 n
-0000218682 00000 n
-0000222412 00000 n
-0000222524 00000 n
-0000222581 00000 n
-0000221024 00000 n
-0000222694 00000 n
-0000222812 00000 n
-0000222930 00000 n
-0000496302 00000 n
-0000245263 00000 n
-0000249867 00000 n
-0000298603 00000 n
-0000301985 00000 n
-0000311054 00000 n
-0000225786 00000 n
-0000225979 00000 n
-0000226172 00000 n
-0000226363 00000 n
-0000226589 00000 n
-0000226781 00000 n
-0000227009 00000 n
-0000227463 00000 n
-0000227621 00000 n
-0000227813 00000 n
-0000228006 00000 n
-0000228198 00000 n
-0000228425 00000 n
-0000228653 00000 n
-0000230271 00000 n
-0000230499 00000 n
-0000230954 00000 n
-0000229135 00000 n
-0000224662 00000 n
-0000223076 00000 n
-0000228844 00000 n
-0000225399 00000 n
-0000228956 00000 n
-0000227237 00000 n
-0000229074 00000 n
-0000250446 00000 n
-0000250327 00000 n
-0000247893 00000 n
-0000231114 00000 n
-0000231307 00000 n
-0000231500 00000 n
-0000231803 00000 n
-0000230084 00000 n
-0000229233 00000 n
-0000231691 00000 n
-0000230727 00000 n
-0000232309 00000 n
-0000232134 00000 n
-0000231901 00000 n
-0000232253 00000 n
-0000233753 00000 n
-0000233905 00000 n
-0000234090 00000 n
-0000234755 00000 n
-0000233598 00000 n
-0000232381 00000 n
-0000234242 00000 n
-0000234411 00000 n
-0000234529 00000 n
-0000234642 00000 n
-0000324600 00000 n
-0000236186 00000 n
-0000236011 00000 n
-0000234853 00000 n
-0000236130 00000 n
-0000236900 00000 n
-0000237060 00000 n
-0000237382 00000 n
-0000236753 00000 n
-0000236271 00000 n
-0000237214 00000 n
-0000496420 00000 n
-0000237870 00000 n
-0000237695 00000 n
-0000237467 00000 n
-0000237814 00000 n
-0000238650 00000 n
-0000238811 00000 n
-0000238965 00000 n
-0000239116 00000 n
-0000239281 00000 n
-0000239603 00000 n
-0000238479 00000 n
-0000237942 00000 n
-0000239435 00000 n
-0000240088 00000 n
-0000239913 00000 n
-0000239688 00000 n
-0000240032 00000 n
-0000241279 00000 n
-0000241473 00000 n
-0000241667 00000 n
-0000241861 00000 n
-0000242054 00000 n
-0000242248 00000 n
-0000242441 00000 n
-0000242635 00000 n
-0000242829 00000 n
-0000243023 00000 n
-0000243217 00000 n
-0000243411 00000 n
-0000243605 00000 n
-0000243798 00000 n
-0000243992 00000 n
-0000244186 00000 n
-0000244378 00000 n
-0000244570 00000 n
-0000244764 00000 n
-0000244958 00000 n
-0000245489 00000 n
-0000240988 00000 n
-0000240160 00000 n
-0000245151 00000 n
-0000245376 00000 n
-0000250684 00000 n
-0000246827 00000 n
-0000250565 00000 n
-0000247060 00000 n
-0000247298 00000 n
-0000247179 00000 n
-0000246941 00000 n
-0000247536 00000 n
-0000247655 00000 n
-0000247774 00000 n
-0000247417 00000 n
-0000249986 00000 n
-0000250213 00000 n
-0000249753 00000 n
-0000250100 00000 n
-0000249639 00000 n
-0000248012 00000 n
-0000246595 00000 n
-0000245613 00000 n
-0000246714 00000 n
-0000249389 00000 n
-0000250745 00000 n
-0000249250 00000 n
-0000248097 00000 n
-0000249583 00000 n
-0000496538 00000 n
-0000251494 00000 n
-0000251765 00000 n
-0000251355 00000 n
-0000250856 00000 n
-0000251652 00000 n
-0000252435 00000 n
-0000256830 00000 n
-0000258679 00000 n
-0000262116 00000 n
-0000257124 00000 n
-0000252301 00000 n
-0000251852 00000 n
-0000256897 00000 n
-0000253345 00000 n
-0000253475 00000 n
-0000253615 00000 n
-0000253902 00000 n
-0000254307 00000 n
-0000254511 00000 n
-0000254532 00000 n
-0000256808 00000 n
-0000262183 00000 n
-0000262343 00000 n
-0000262537 00000 n
-0000262731 00000 n
-0000262926 00000 n
-0000263121 00000 n
-0000263315 00000 n
-0000263510 00000 n
-0000263705 00000 n
-0000263900 00000 n
-0000264095 00000 n
-0000264322 00000 n
-0000264549 00000 n
-0000264776 00000 n
-0000264999 00000 n
-0000265224 00000 n
-0000267281 00000 n
-0000267508 00000 n
+0000160675 00000 n
+0000160829 00000 n
+0000160978 00000 n
+0000161132 00000 n
+0000161291 00000 n
+0000161450 00000 n
+0000161614 00000 n
+0000161774 00000 n
+0000163580 00000 n
+0000161994 00000 n
+0000157734 00000 n
+0000156821 00000 n
+0000161937 00000 n
+0000163744 00000 n
+0000163908 00000 n
+0000164072 00000 n
+0000164236 00000 n
+0000164398 00000 n
+0000164562 00000 n
+0000164727 00000 n
+0000164890 00000 n
+0000165055 00000 n
+0000165220 00000 n
+0000165385 00000 n
+0000165550 00000 n
+0000165715 00000 n
+0000165880 00000 n
+0000166044 00000 n
+0000166209 00000 n
+0000166373 00000 n
+0000166538 00000 n
+0000166689 00000 n
+0000166843 00000 n
+0000167002 00000 n
+0000167161 00000 n
+0000167325 00000 n
+0000167489 00000 n
+0000167652 00000 n
+0000167816 00000 n
+0000167980 00000 n
+0000168143 00000 n
+0000168307 00000 n
+0000168466 00000 n
+0000168630 00000 n
+0000168789 00000 n
+0000168953 00000 n
+0000169117 00000 n
+0000169276 00000 n
+0000170244 00000 n
+0000169439 00000 n
+0000163161 00000 n
+0000162079 00000 n
+0000170408 00000 n
+0000170572 00000 n
+0000170735 00000 n
+0000170898 00000 n
+0000171062 00000 n
+0000171225 00000 n
+0000171389 00000 n
+0000171553 00000 n
+0000171718 00000 n
+0000171883 00000 n
+0000170033 00000 n
+0000169524 00000 n
+0000172187 00000 n
+0000172068 00000 n
+0000171968 00000 n
+0000174317 00000 n
+0000173800 00000 n
+0000172228 00000 n
+0000173919 00000 n
+0000174030 00000 n
+0000174087 00000 n
+0000174199 00000 n
+0000456464 00000 n
+0000174804 00000 n
+0000174629 00000 n
+0000174402 00000 n
+0000174748 00000 n
+0000177054 00000 n
+0000177214 00000 n
+0000177408 00000 n
+0000177601 00000 n
+0000181150 00000 n
+0000181345 00000 n
+0000181798 00000 n
+0000178364 00000 n
+0000176891 00000 n
+0000174876 00000 n
+0000177794 00000 n
+0000177906 00000 n
+0000177963 00000 n
+0000178076 00000 n
+0000178193 00000 n
+0000455460 00000 n
+0000178250 00000 n
+0000178307 00000 n
+0000243244 00000 n
+0000296206 00000 n
+0000291069 00000 n
+0000293473 00000 n
+0000181992 00000 n
+0000182187 00000 n
+0000182382 00000 n
+0000182576 00000 n
+0000182771 00000 n
+0000184753 00000 n
+0000183419 00000 n
+0000180932 00000 n
+0000178462 00000 n
+0000182966 00000 n
+0000183022 00000 n
+0000181572 00000 n
+0000183079 00000 n
+0000183135 00000 n
+0000183192 00000 n
+0000183249 00000 n
+0000183306 00000 n
+0000277860 00000 n
+0000293587 00000 n
+0000296092 00000 n
+0000290955 00000 n
+0000207634 00000 n
+0000184619 00000 n
+0000183517 00000 n
+0000207516 00000 n
+0000207572 00000 n
+0000455316 00000 n
+0000454882 00000 n
+0000455027 00000 n
+0000455171 00000 n
+0000197642 00000 n
+0000208211 00000 n
+0000208036 00000 n
+0000207806 00000 n
+0000208155 00000 n
+0000210273 00000 n
+0000210432 00000 n
+0000210817 00000 n
+0000211045 00000 n
+0000211272 00000 n
+0000211467 00000 n
+0000211660 00000 n
+0000211819 00000 n
+0000214546 00000 n
+0000214773 00000 n
+0000215227 00000 n
+0000212592 00000 n
+0000210070 00000 n
+0000208283 00000 n
+0000212013 00000 n
+0000212125 00000 n
+0000212182 00000 n
+0000210625 00000 n
+0000212295 00000 n
+0000212413 00000 n
+0000212531 00000 n
+0000456582 00000 n
+0000230539 00000 n
+0000235374 00000 n
+0000283244 00000 n
+0000283368 00000 n
+0000297418 00000 n
+0000215387 00000 n
+0000215580 00000 n
+0000215773 00000 n
+0000215964 00000 n
+0000216190 00000 n
+0000216382 00000 n
+0000216610 00000 n
+0000217064 00000 n
+0000217222 00000 n
+0000217414 00000 n
+0000217607 00000 n
+0000217799 00000 n
+0000218026 00000 n
+0000218254 00000 n
+0000219872 00000 n
+0000220100 00000 n
+0000220555 00000 n
+0000218736 00000 n
+0000214263 00000 n
+0000212677 00000 n
+0000218445 00000 n
+0000215000 00000 n
+0000218557 00000 n
+0000216838 00000 n
+0000218675 00000 n
+0000235969 00000 n
+0000235850 00000 n
+0000233370 00000 n
+0000220715 00000 n
+0000220908 00000 n
+0000221101 00000 n
+0000221404 00000 n
+0000219685 00000 n
+0000218834 00000 n
+0000221292 00000 n
+0000220328 00000 n
+0000221910 00000 n
+0000221735 00000 n
+0000221502 00000 n
+0000221854 00000 n
+0000222611 00000 n
+0000222771 00000 n
+0000223093 00000 n
+0000222464 00000 n
+0000221982 00000 n
+0000222925 00000 n
+0000223581 00000 n
+0000223406 00000 n
+0000223178 00000 n
+0000223525 00000 n
+0000224196 00000 n
+0000224357 00000 n
+0000224679 00000 n
+0000224049 00000 n
+0000223653 00000 n
+0000224511 00000 n
+0000456700 00000 n
+0000225165 00000 n
+0000224990 00000 n
+0000224764 00000 n
+0000225109 00000 n
+0000226366 00000 n
+0000226560 00000 n
+0000226754 00000 n
+0000226948 00000 n
+0000227141 00000 n
+0000227334 00000 n
+0000227527 00000 n
+0000227720 00000 n
+0000227914 00000 n
+0000228107 00000 n
+0000228301 00000 n
+0000228494 00000 n
+0000228688 00000 n
+0000228882 00000 n
+0000229075 00000 n
+0000229269 00000 n
+0000229461 00000 n
+0000229654 00000 n
+0000229847 00000 n
+0000230041 00000 n
+0000230234 00000 n
+0000230765 00000 n
+0000226067 00000 n
+0000225237 00000 n
+0000230427 00000 n
+0000230652 00000 n
+0000236207 00000 n
+0000232304 00000 n
+0000236088 00000 n
+0000232540 00000 n
+0000232778 00000 n
+0000232659 00000 n
+0000232422 00000 n
+0000232191 00000 n
+0000233015 00000 n
+0000233134 00000 n
+0000233253 00000 n
+0000232896 00000 n
+0000235493 00000 n
+0000235731 00000 n
+0000235256 00000 n
+0000235612 00000 n
+0000235137 00000 n
+0000233431 00000 n
+0000231960 00000 n
+0000230889 00000 n
+0000232079 00000 n
+0000234829 00000 n
+0000236268 00000 n
+0000234690 00000 n
+0000233516 00000 n
+0000235024 00000 n
+0000236997 00000 n
+0000237269 00000 n
+0000236858 00000 n
+0000236379 00000 n
+0000237156 00000 n
+0000238315 00000 n
+0000242710 00000 n
+0000242777 00000 n
+0000242937 00000 n
+0000245170 00000 n
+0000243472 00000 n
+0000238153 00000 n
+0000237355 00000 n
+0000243131 00000 n
+0000243358 00000 n
+0000456166 00000 n
+0000243415 00000 n
+0000456818 00000 n
+0000239225 00000 n
+0000239355 00000 n
+0000239495 00000 n
+0000239782 00000 n
+0000240187 00000 n
+0000240391 00000 n
+0000240412 00000 n
+0000242688 00000 n
+0000274598 00000 n
+0000245365 00000 n
+0000245560 00000 n
+0000245755 00000 n
+0000245949 00000 n
+0000246144 00000 n
+0000246339 00000 n
+0000246534 00000 n
+0000246729 00000 n
+0000246955 00000 n
+0000247182 00000 n
+0000247409 00000 n
+0000247633 00000 n
+0000247860 00000 n
+0000248087 00000 n
+0000248313 00000 n
+0000248540 00000 n
+0000248765 00000 n
+0000248992 00000 n
+0000249219 00000 n
+0000249443 00000 n
+0000249670 00000 n
+0000249897 00000 n
+0000250123 00000 n
+0000250350 00000 n
+0000250577 00000 n
+0000250804 00000 n
+0000251031 00000 n
+0000251258 00000 n
+0000251485 00000 n
+0000251712 00000 n
+0000251938 00000 n
+0000252164 00000 n
+0000252391 00000 n
+0000252617 00000 n
+0000252844 00000 n
+0000254975 00000 n
+0000255202 00000 n
+0000255429 00000 n
+0000253240 00000 n
+0000244751 00000 n
+0000243624 00000 n
+0000253070 00000 n
+0000253126 00000 n
+0000253183 00000 n
+0000274479 00000 n
+0000274716 00000 n
+0000271201 00000 n
+0000274242 00000 n
+0000274360 00000 n
+0000271087 00000 n
+0000274892 00000 n
+0000275063 00000 n
+0000275177 00000 n
+0000275239 00000 n
+0000275301 00000 n
+0000275363 00000 n
+0000275425 00000 n
+0000277922 00000 n
+0000277984 00000 n
+0000278046 00000 n
+0000278108 00000 n
+0000278170 00000 n
+0000278232 00000 n
+0000278294 00000 n
+0000278356 00000 n
+0000278418 00000 n
+0000278480 00000 n
+0000278542 00000 n
+0000278604 00000 n
+0000278666 00000 n
+0000278728 00000 n
+0000278790 00000 n
+0000278852 00000 n
+0000278914 00000 n
+0000278976 00000 n
+0000279038 00000 n
+0000279100 00000 n
+0000279162 00000 n
+0000279222 00000 n
+0000255656 00000 n
+0000255883 00000 n
+0000256109 00000 n
+0000256336 00000 n
+0000256563 00000 n
+0000256790 00000 n
+0000257016 00000 n
+0000257241 00000 n
+0000257468 00000 n
+0000257695 00000 n
+0000257889 00000 n
+0000258115 00000 n
+0000258342 00000 n
+0000258568 00000 n
+0000258795 00000 n
+0000259022 00000 n
+0000259249 00000 n
+0000259476 00000 n
+0000259703 00000 n
+0000259930 00000 n
+0000260157 00000 n
+0000260383 00000 n
+0000260609 00000 n
+0000260836 00000 n
+0000261063 00000 n
+0000261290 00000 n
+0000261517 00000 n
+0000261711 00000 n
+0000261906 00000 n
+0000262099 00000 n
+0000262294 00000 n
+0000262489 00000 n
+0000265345 00000 n
+0000265540 00000 n
0000265734 00000 n
-0000258405 00000 n
-0000257250 00000 n
-0000265450 00000 n
-0000265506 00000 n
-0000495886 00000 n
-0000265563 00000 n
-0000265620 00000 n
-0000265677 00000 n
-0000259342 00000 n
-0000259472 00000 n
-0000259612 00000 n
-0000259863 00000 n
-0000260227 00000 n
-0000260431 00000 n
-0000260452 00000 n
-0000262094 00000 n
-0000290542 00000 n
-0000290424 00000 n
-0000293285 00000 n
-0000290075 00000 n
-0000290192 00000 n
-0000290311 00000 n
-0000289961 00000 n
-0000293461 00000 n
-0000293632 00000 n
-0000293746 00000 n
-0000293808 00000 n
-0000293870 00000 n
-0000293932 00000 n
-0000293994 00000 n
-0000267735 00000 n
-0000267958 00000 n
-0000268185 00000 n
-0000268412 00000 n
-0000268638 00000 n
-0000268865 00000 n
-0000269092 00000 n
-0000269319 00000 n
-0000269546 00000 n
-0000269773 00000 n
-0000270000 00000 n
-0000270227 00000 n
-0000270454 00000 n
-0000270681 00000 n
-0000270908 00000 n
-0000271135 00000 n
-0000271361 00000 n
-0000271586 00000 n
-0000271813 00000 n
-0000272040 00000 n
-0000272267 00000 n
-0000272494 00000 n
-0000272720 00000 n
-0000272947 00000 n
-0000273174 00000 n
-0000273400 00000 n
-0000273627 00000 n
-0000273853 00000 n
-0000274080 00000 n
-0000274307 00000 n
-0000274533 00000 n
-0000274760 00000 n
-0000274985 00000 n
-0000275178 00000 n
-0000275405 00000 n
-0000275632 00000 n
-0000275858 00000 n
-0000278661 00000 n
-0000278888 00000 n
-0000279115 00000 n
-0000276140 00000 n
-0000266838 00000 n
-0000265886 00000 n
-0000276084 00000 n
-0000294118 00000 n
-0000294180 00000 n
-0000294242 00000 n
-0000294304 00000 n
-0000294366 00000 n
-0000294428 00000 n
-0000294490 00000 n
-0000294552 00000 n
-0000294613 00000 n
-0000294675 00000 n
-0000294737 00000 n
-0000294799 00000 n
-0000297127 00000 n
-0000297189 00000 n
-0000297251 00000 n
-0000297313 00000 n
-0000297374 00000 n
-0000297436 00000 n
-0000297498 00000 n
-0000297560 00000 n
-0000297622 00000 n
-0000297684 00000 n
-0000297746 00000 n
-0000297808 00000 n
-0000297870 00000 n
-0000297932 00000 n
-0000297994 00000 n
-0000298056 00000 n
-0000298118 00000 n
-0000298180 00000 n
-0000298242 00000 n
-0000298304 00000 n
-0000298366 00000 n
-0000298428 00000 n
-0000298489 00000 n
-0000301861 00000 n
-0000301923 00000 n
-0000279342 00000 n
-0000279568 00000 n
-0000279795 00000 n
-0000280022 00000 n
-0000280249 00000 n
-0000280476 00000 n
-0000280670 00000 n
-0000280865 00000 n
-0000281058 00000 n
-0000281253 00000 n
-0000281448 00000 n
-0000281641 00000 n
-0000281836 00000 n
-0000282030 00000 n
-0000282417 00000 n
-0000282610 00000 n
-0000282805 00000 n
-0000283000 00000 n
-0000283389 00000 n
-0000283584 00000 n
-0000283779 00000 n
-0000283974 00000 n
-0000284169 00000 n
-0000284362 00000 n
-0000284548 00000 n
-0000284739 00000 n
-0000284930 00000 n
-0000285122 00000 n
-0000285317 00000 n
-0000285512 00000 n
-0000287720 00000 n
-0000287915 00000 n
-0000286013 00000 n
-0000278242 00000 n
-0000276238 00000 n
-0000285900 00000 n
-0000285956 00000 n
-0000282225 00000 n
-0000283195 00000 n
-0000285707 00000 n
-0000302047 00000 n
-0000302105 00000 n
-0000302167 00000 n
-0000302229 00000 n
-0000302291 00000 n
-0000302353 00000 n
-0000302415 00000 n
-0000302477 00000 n
-0000304369 00000 n
-0000302596 00000 n
-0000309059 00000 n
-0000326021 00000 n
-0000288110 00000 n
-0000288270 00000 n
-0000288463 00000 n
-0000288658 00000 n
-0000288817 00000 n
-0000289012 00000 n
-0000289207 00000 n
-0000289402 00000 n
-0000289597 00000 n
-0000290598 00000 n
-0000287501 00000 n
-0000286124 00000 n
-0000289791 00000 n
-0000495530 00000 n
-0000496656 00000 n
-0000309173 00000 n
-0000292783 00000 n
-0000294861 00000 n
-0000292636 00000 n
-0000290735 00000 n
-0000293172 00000 n
-0000292978 00000 n
-0000298665 00000 n
-0000296952 00000 n
-0000294985 00000 n
-0000297071 00000 n
-0000302710 00000 n
-0000301686 00000 n
-0000298763 00000 n
-0000301805 00000 n
-0000304710 00000 n
-0000304194 00000 n
-0000302821 00000 n
-0000304313 00000 n
-0000307203 00000 n
-0000306801 00000 n
-0000304821 00000 n
-0000306920 00000 n
-0000308684 00000 n
-0000308843 00000 n
-0000309455 00000 n
-0000308537 00000 n
-0000307314 00000 n
-0000309003 00000 n
-0000496774 00000 n
-0000310772 00000 n
-0000312780 00000 n
-0000317980 00000 n
-0000311285 00000 n
-0000310630 00000 n
-0000309567 00000 n
-0000310938 00000 n
-0000318047 00000 n
-0000318234 00000 n
-0000318421 00000 n
-0000318608 00000 n
-0000318795 00000 n
-0000318982 00000 n
-0000319169 00000 n
-0000319356 00000 n
-0000319543 00000 n
-0000319730 00000 n
-0000319916 00000 n
-0000320103 00000 n
-0000320289 00000 n
-0000320475 00000 n
-0000320661 00000 n
-0000320848 00000 n
-0000321034 00000 n
-0000321220 00000 n
-0000321407 00000 n
-0000321866 00000 n
-0000312460 00000 n
-0000311397 00000 n
-0000321573 00000 n
-0000321631 00000 n
-0000321690 00000 n
-0000321749 00000 n
-0000314216 00000 n
-0000314347 00000 n
-0000314490 00000 n
-0000314795 00000 n
-0000315218 00000 n
-0000315424 00000 n
-0000315446 00000 n
-0000317957 00000 n
-0000323963 00000 n
-0000324308 00000 n
-0000324425 00000 n
-0000323846 00000 n
-0000324191 00000 n
-0000326721 00000 n
-0000327556 00000 n
-0000325904 00000 n
-0000326487 00000 n
-0000326604 00000 n
-0000327673 00000 n
-0000325789 00000 n
-0000326137 00000 n
-0000326254 00000 n
-0000326370 00000 n
-0000323534 00000 n
-0000324716 00000 n
-0000323391 00000 n
-0000321993 00000 n
-0000323730 00000 n
-0000326837 00000 n
-0000325551 00000 n
-0000324828 00000 n
-0000325673 00000 n
-0000327790 00000 n
-0000327376 00000 n
-0000326936 00000 n
-0000327498 00000 n
-0000329260 00000 n
-0000329411 00000 n
-0000329561 00000 n
-0000329712 00000 n
-0000329863 00000 n
-0000330014 00000 n
-0000330165 00000 n
-0000330316 00000 n
-0000330467 00000 n
-0000330617 00000 n
-0000330768 00000 n
-0000330919 00000 n
-0000331070 00000 n
-0000331221 00000 n
-0000331372 00000 n
-0000331522 00000 n
-0000331673 00000 n
-0000331824 00000 n
-0000331975 00000 n
-0000332126 00000 n
-0000332277 00000 n
-0000332428 00000 n
-0000332578 00000 n
-0000332729 00000 n
-0000332880 00000 n
-0000333031 00000 n
-0000333182 00000 n
-0000333333 00000 n
-0000333484 00000 n
-0000333635 00000 n
-0000333786 00000 n
-0000333937 00000 n
-0000334088 00000 n
-0000334239 00000 n
-0000334390 00000 n
-0000334541 00000 n
-0000334691 00000 n
-0000334842 00000 n
-0000334993 00000 n
-0000335144 00000 n
-0000335294 00000 n
-0000335445 00000 n
-0000335596 00000 n
-0000337902 00000 n
-0000335805 00000 n
-0000328738 00000 n
-0000327876 00000 n
-0000335747 00000 n
-0000496897 00000 n
-0000338053 00000 n
-0000338204 00000 n
-0000338355 00000 n
-0000338505 00000 n
-0000338655 00000 n
-0000338806 00000 n
-0000338957 00000 n
-0000339108 00000 n
-0000339259 00000 n
-0000339410 00000 n
-0000339561 00000 n
-0000339712 00000 n
-0000339863 00000 n
-0000340014 00000 n
-0000340165 00000 n
-0000340316 00000 n
-0000340467 00000 n
-0000340618 00000 n
-0000340768 00000 n
-0000340919 00000 n
-0000341069 00000 n
-0000341219 00000 n
-0000341369 00000 n
-0000341520 00000 n
-0000341671 00000 n
-0000341821 00000 n
-0000341972 00000 n
-0000342123 00000 n
-0000342274 00000 n
-0000342424 00000 n
-0000342575 00000 n
-0000342725 00000 n
-0000342876 00000 n
-0000343026 00000 n
-0000343177 00000 n
-0000343328 00000 n
-0000343478 00000 n
-0000343628 00000 n
-0000343779 00000 n
-0000343930 00000 n
-0000344081 00000 n
-0000344232 00000 n
-0000344382 00000 n
-0000344533 00000 n
-0000344682 00000 n
-0000344833 00000 n
-0000344984 00000 n
-0000345134 00000 n
-0000345285 00000 n
-0000345435 00000 n
-0000345586 00000 n
-0000345737 00000 n
-0000345888 00000 n
-0000346038 00000 n
-0000346189 00000 n
-0000346340 00000 n
-0000346491 00000 n
-0000346642 00000 n
-0000346793 00000 n
-0000346944 00000 n
-0000347095 00000 n
-0000347246 00000 n
-0000347397 00000 n
-0000347547 00000 n
-0000347698 00000 n
-0000347849 00000 n
-0000348000 00000 n
-0000348151 00000 n
-0000348301 00000 n
-0000348451 00000 n
-0000348601 00000 n
-0000348752 00000 n
-0000348960 00000 n
-0000337110 00000 n
-0000335891 00000 n
-0000348902 00000 n
-0000350849 00000 n
-0000350999 00000 n
-0000351150 00000 n
-0000351301 00000 n
-0000351452 00000 n
-0000351603 00000 n
-0000351754 00000 n
-0000351905 00000 n
-0000352056 00000 n
-0000352206 00000 n
-0000352356 00000 n
-0000352507 00000 n
-0000352657 00000 n
-0000352806 00000 n
-0000352954 00000 n
-0000353104 00000 n
-0000353255 00000 n
-0000353406 00000 n
-0000353557 00000 n
-0000353708 00000 n
-0000353858 00000 n
-0000354008 00000 n
-0000354159 00000 n
-0000354308 00000 n
-0000354458 00000 n
-0000354609 00000 n
-0000354760 00000 n
-0000354911 00000 n
-0000355062 00000 n
-0000355213 00000 n
-0000355364 00000 n
-0000355515 00000 n
-0000355665 00000 n
-0000355816 00000 n
-0000355967 00000 n
-0000356118 00000 n
-0000356267 00000 n
-0000356417 00000 n
-0000356568 00000 n
-0000356719 00000 n
-0000356869 00000 n
-0000357019 00000 n
-0000357170 00000 n
-0000357321 00000 n
-0000357471 00000 n
-0000357622 00000 n
-0000357772 00000 n
-0000357922 00000 n
-0000358072 00000 n
-0000358222 00000 n
-0000358372 00000 n
-0000358523 00000 n
-0000358674 00000 n
-0000358825 00000 n
-0000358976 00000 n
-0000359127 00000 n
-0000359278 00000 n
-0000359428 00000 n
-0000359579 00000 n
-0000359730 00000 n
-0000359881 00000 n
-0000360032 00000 n
-0000360183 00000 n
-0000360333 00000 n
-0000360483 00000 n
-0000360634 00000 n
-0000360785 00000 n
-0000360936 00000 n
-0000361087 00000 n
-0000361238 00000 n
-0000361389 00000 n
-0000361540 00000 n
-0000362989 00000 n
-0000361749 00000 n
-0000350066 00000 n
-0000349046 00000 n
-0000361691 00000 n
-0000363140 00000 n
-0000363291 00000 n
-0000363442 00000 n
-0000363593 00000 n
-0000363744 00000 n
-0000363895 00000 n
-0000364046 00000 n
-0000364197 00000 n
-0000364347 00000 n
-0000364497 00000 n
-0000364648 00000 n
-0000364799 00000 n
-0000364950 00000 n
-0000365101 00000 n
-0000365251 00000 n
-0000365402 00000 n
-0000365552 00000 n
-0000365703 00000 n
-0000365852 00000 n
-0000366001 00000 n
-0000366151 00000 n
-0000366302 00000 n
-0000366453 00000 n
-0000366604 00000 n
-0000366755 00000 n
-0000366906 00000 n
-0000367056 00000 n
-0000367207 00000 n
-0000367357 00000 n
-0000367508 00000 n
-0000367659 00000 n
-0000367809 00000 n
-0000367960 00000 n
-0000368110 00000 n
-0000368260 00000 n
-0000368411 00000 n
-0000368620 00000 n
-0000362521 00000 n
-0000361835 00000 n
-0000368562 00000 n
-0000494133 00000 n
-0000368706 00000 n
-0000369178 00000 n
-0000369654 00000 n
-0000370255 00000 n
-0000370339 00000 n
-0000370537 00000 n
-0000370563 00000 n
-0000370951 00000 n
-0000371830 00000 n
-0000372320 00000 n
-0000383005 00000 n
-0000383270 00000 n
-0000392653 00000 n
-0000392923 00000 n
-0000400117 00000 n
-0000400356 00000 n
-0000407385 00000 n
-0000407617 00000 n
-0000425933 00000 n
-0000426479 00000 n
-0000444502 00000 n
-0000445043 00000 n
-0000459125 00000 n
-0000459501 00000 n
-0000479380 00000 n
-0000479971 00000 n
-0000493741 00000 n
-0000497004 00000 n
-0000497124 00000 n
-0000497213 00000 n
-0000497286 00000 n
-0000506443 00000 n
-0000506678 00000 n
-0000506872 00000 n
-0000507061 00000 n
-0000507371 00000 n
-0000507788 00000 n
-0000508319 00000 n
-0000508949 00000 n
-0000509744 00000 n
-0000510440 00000 n
-0000510971 00000 n
-0000511700 00000 n
-0000512495 00000 n
-0000513290 00000 n
-0000514085 00000 n
-0000514880 00000 n
-0000515675 00000 n
-0000516320 00000 n
-0000516500 00000 n
-0000516789 00000 n
-0000517254 00000 n
-0000517718 00000 n
-0000518072 00000 n
-0000518243 00000 n
-0000518413 00000 n
-0000518584 00000 n
-0000518755 00000 n
-0000518932 00000 n
-0000519100 00000 n
-0000519285 00000 n
-0000519482 00000 n
-0000519679 00000 n
-0000519877 00000 n
-0000520286 00000 n
-0000520809 00000 n
-0000521332 00000 n
-0000521748 00000 n
-0000521987 00000 n
-0000522230 00000 n
-0000522502 00000 n
-0000522793 00000 n
-0000523079 00000 n
-0000523362 00000 n
-0000523645 00000 n
-0000523930 00000 n
-0000524213 00000 n
-0000524496 00000 n
-0000524781 00000 n
-0000525064 00000 n
-0000525187 00000 n
-0000525357 00000 n
-0000525596 00000 n
-0000525792 00000 n
-0000525910 00000 n
-0000526030 00000 n
-0000526159 00000 n
-0000526298 00000 n
-0000526442 00000 n
-0000526541 00000 n
-0000526675 00000 n
-0000526787 00000 n
-0000526890 00000 n
-0000526930 00000 n
-0000527111 00000 n
+0000266123 00000 n
+0000262795 00000 n
+0000254564 00000 n
+0000253351 00000 n
+0000262682 00000 n
+0000262738 00000 n
+0000279284 00000 n
+0000279346 00000 n
+0000279408 00000 n
+0000279470 00000 n
+0000279532 00000 n
+0000279594 00000 n
+0000279656 00000 n
+0000282821 00000 n
+0000282883 00000 n
+0000282945 00000 n
+0000283007 00000 n
+0000283069 00000 n
+0000283131 00000 n
+0000283306 00000 n
+0000283430 00000 n
+0000283491 00000 n
+0000283552 00000 n
+0000283614 00000 n
+0000288304 00000 n
+0000288366 00000 n
+0000288428 00000 n
+0000288490 00000 n
+0000288552 00000 n
+0000288614 00000 n
+0000290484 00000 n
+0000290546 00000 n
+0000290608 00000 n
+0000290841 00000 n
+0000290727 00000 n
+0000266318 00000 n
+0000266513 00000 n
+0000266708 00000 n
+0000267097 00000 n
+0000267292 00000 n
+0000267487 00000 n
+0000267682 00000 n
+0000267877 00000 n
+0000268070 00000 n
+0000268264 00000 n
+0000268458 00000 n
+0000268653 00000 n
+0000268848 00000 n
+0000269043 00000 n
+0000269432 00000 n
+0000269627 00000 n
+0000269822 00000 n
+0000269982 00000 n
+0000270175 00000 n
+0000270370 00000 n
+0000270529 00000 n
+0000270724 00000 n
+0000273158 00000 n
+0000271261 00000 n
+0000264982 00000 n
+0000262906 00000 n
+0000270918 00000 n
+0000265929 00000 n
+0000266903 00000 n
+0000269238 00000 n
+0000295864 00000 n
+0000295978 00000 n
+0000273352 00000 n
+0000273547 00000 n
+0000273740 00000 n
+0000275487 00000 n
+0000272987 00000 n
+0000271372 00000 n
+0000274129 00000 n
+0000455810 00000 n
+0000273935 00000 n
+0000279717 00000 n
+0000277685 00000 n
+0000275611 00000 n
+0000277804 00000 n
+0000282310 00000 n
+0000286721 00000 n
+0000286915 00000 n
+0000283676 00000 n
+0000282163 00000 n
+0000279815 00000 n
+0000282765 00000 n
+0000282537 00000 n
+0000456936 00000 n
+0000287109 00000 n
+0000287337 00000 n
+0000287793 00000 n
+0000288676 00000 n
+0000286534 00000 n
+0000283787 00000 n
+0000288248 00000 n
+0000287565 00000 n
+0000288020 00000 n
+0000291125 00000 n
+0000290309 00000 n
+0000288774 00000 n
+0000290428 00000 n
+0000293701 00000 n
+0000293241 00000 n
+0000291236 00000 n
+0000293360 00000 n
+0000295490 00000 n
+0000295649 00000 n
+0000296262 00000 n
+0000295343 00000 n
+0000293812 00000 n
+0000295808 00000 n
+0000297532 00000 n
+0000297186 00000 n
+0000296373 00000 n
+0000297305 00000 n
+0000298972 00000 n
+0000299122 00000 n
+0000299271 00000 n
+0000299421 00000 n
+0000299571 00000 n
+0000299721 00000 n
+0000299871 00000 n
+0000300021 00000 n
+0000300171 00000 n
+0000300320 00000 n
+0000300470 00000 n
+0000300620 00000 n
+0000300770 00000 n
+0000300920 00000 n
+0000301070 00000 n
+0000301219 00000 n
+0000301369 00000 n
+0000301519 00000 n
+0000301669 00000 n
+0000301819 00000 n
+0000301969 00000 n
+0000302119 00000 n
+0000302268 00000 n
+0000302418 00000 n
+0000302568 00000 n
+0000302718 00000 n
+0000302868 00000 n
+0000303018 00000 n
+0000303168 00000 n
+0000303318 00000 n
+0000303468 00000 n
+0000303618 00000 n
+0000303768 00000 n
+0000303918 00000 n
+0000304068 00000 n
+0000304218 00000 n
+0000304367 00000 n
+0000304517 00000 n
+0000304667 00000 n
+0000304817 00000 n
+0000304966 00000 n
+0000305116 00000 n
+0000305266 00000 n
+0000307484 00000 n
+0000305472 00000 n
+0000298497 00000 n
+0000297630 00000 n
+0000305416 00000 n
+0000457054 00000 n
+0000307634 00000 n
+0000307784 00000 n
+0000307934 00000 n
+0000308083 00000 n
+0000308232 00000 n
+0000308382 00000 n
+0000308532 00000 n
+0000308682 00000 n
+0000308832 00000 n
+0000308982 00000 n
+0000309132 00000 n
+0000309282 00000 n
+0000309432 00000 n
+0000309582 00000 n
+0000309732 00000 n
+0000309882 00000 n
+0000310032 00000 n
+0000310182 00000 n
+0000310332 00000 n
+0000310482 00000 n
+0000310632 00000 n
+0000310782 00000 n
+0000310932 00000 n
+0000311082 00000 n
+0000311232 00000 n
+0000311380 00000 n
+0000311530 00000 n
+0000311679 00000 n
+0000311829 00000 n
+0000311977 00000 n
+0000312127 00000 n
+0000312277 00000 n
+0000312427 00000 n
+0000312576 00000 n
+0000312726 00000 n
+0000312876 00000 n
+0000313026 00000 n
+0000313176 00000 n
+0000313326 00000 n
+0000313475 00000 n
+0000313625 00000 n
+0000313774 00000 n
+0000313923 00000 n
+0000314073 00000 n
+0000314223 00000 n
+0000314372 00000 n
+0000314522 00000 n
+0000314671 00000 n
+0000314820 00000 n
+0000314970 00000 n
+0000315120 00000 n
+0000315269 00000 n
+0000315419 00000 n
+0000315569 00000 n
+0000315719 00000 n
+0000315869 00000 n
+0000316019 00000 n
+0000316168 00000 n
+0000316318 00000 n
+0000316467 00000 n
+0000316617 00000 n
+0000316766 00000 n
+0000316916 00000 n
+0000317066 00000 n
+0000317216 00000 n
+0000317366 00000 n
+0000317515 00000 n
+0000317664 00000 n
+0000317814 00000 n
+0000317964 00000 n
+0000318114 00000 n
+0000318264 00000 n
+0000320293 00000 n
+0000318469 00000 n
+0000306769 00000 n
+0000305557 00000 n
+0000318413 00000 n
+0000320443 00000 n
+0000320591 00000 n
+0000320741 00000 n
+0000320890 00000 n
+0000321039 00000 n
+0000321188 00000 n
+0000321338 00000 n
+0000321488 00000 n
+0000321638 00000 n
+0000321788 00000 n
+0000321938 00000 n
+0000322088 00000 n
+0000322238 00000 n
+0000322388 00000 n
+0000322538 00000 n
+0000322688 00000 n
+0000322838 00000 n
+0000322987 00000 n
+0000323137 00000 n
+0000323286 00000 n
+0000323436 00000 n
+0000323584 00000 n
+0000323733 00000 n
+0000323883 00000 n
+0000324033 00000 n
+0000324182 00000 n
+0000324333 00000 n
+0000324484 00000 n
+0000324635 00000 n
+0000324785 00000 n
+0000324934 00000 n
+0000325085 00000 n
+0000325236 00000 n
+0000325387 00000 n
+0000325537 00000 n
+0000325687 00000 n
+0000325837 00000 n
+0000325988 00000 n
+0000326138 00000 n
+0000326289 00000 n
+0000326440 00000 n
+0000326591 00000 n
+0000326742 00000 n
+0000326892 00000 n
+0000327042 00000 n
+0000327193 00000 n
+0000327344 00000 n
+0000327495 00000 n
+0000327645 00000 n
+0000327795 00000 n
+0000327946 00000 n
+0000328097 00000 n
+0000328247 00000 n
+0000328398 00000 n
+0000328549 00000 n
+0000328699 00000 n
+0000328850 00000 n
+0000329000 00000 n
+0000329151 00000 n
+0000329301 00000 n
+0000329452 00000 n
+0000329603 00000 n
+0000329754 00000 n
+0000329905 00000 n
+0000330056 00000 n
+0000330207 00000 n
+0000330358 00000 n
+0000330509 00000 n
+0000330660 00000 n
+0000330811 00000 n
+0000330962 00000 n
+0000331113 00000 n
+0000331264 00000 n
+0000332145 00000 n
+0000331473 00000 n
+0000319519 00000 n
+0000318554 00000 n
+0000331415 00000 n
+0000332296 00000 n
+0000332447 00000 n
+0000332598 00000 n
+0000332749 00000 n
+0000332900 00000 n
+0000333051 00000 n
+0000333202 00000 n
+0000333411 00000 n
+0000331939 00000 n
+0000331559 00000 n
+0000333353 00000 n
+0000454414 00000 n
+0000333497 00000 n
+0000333969 00000 n
+0000334445 00000 n
+0000335046 00000 n
+0000335130 00000 n
+0000335328 00000 n
+0000335354 00000 n
+0000335734 00000 n
+0000336613 00000 n
+0000337091 00000 n
+0000347776 00000 n
+0000348041 00000 n
+0000357424 00000 n
+0000357694 00000 n
+0000364888 00000 n
+0000365127 00000 n
+0000372156 00000 n
+0000372388 00000 n
+0000386956 00000 n
+0000387385 00000 n
+0000404740 00000 n
+0000405217 00000 n
+0000419299 00000 n
+0000419675 00000 n
+0000439654 00000 n
+0000440252 00000 n
+0000454022 00000 n
+0000457158 00000 n
+0000457278 00000 n
+0000457357 00000 n
+0000457430 00000 n
+0000464083 00000 n
+0000464269 00000 n
+0000464432 00000 n
+0000464690 00000 n
+0000465021 00000 n
+0000465552 00000 n
+0000466083 00000 n
+0000466878 00000 n
+0000467673 00000 n
+0000468369 00000 n
+0000468900 00000 n
+0000469629 00000 n
+0000470424 00000 n
+0000471219 00000 n
+0000472014 00000 n
+0000472809 00000 n
+0000473604 00000 n
+0000474249 00000 n
+0000474429 00000 n
+0000474606 00000 n
+0000474777 00000 n
+0000474947 00000 n
+0000475118 00000 n
+0000475289 00000 n
+0000475452 00000 n
+0000475647 00000 n
+0000475843 00000 n
+0000476041 00000 n
+0000476496 00000 n
+0000477019 00000 n
+0000477542 00000 n
+0000477958 00000 n
+0000478198 00000 n
+0000478469 00000 n
+0000478760 00000 n
+0000479045 00000 n
+0000479328 00000 n
+0000479611 00000 n
+0000479897 00000 n
+0000480180 00000 n
+0000480335 00000 n
+0000480498 00000 n
+0000480770 00000 n
+0000480966 00000 n
+0000481083 00000 n
+0000481246 00000 n
+0000481420 00000 n
+0000481546 00000 n
+0000481678 00000 n
+0000481777 00000 n
+0000481873 00000 n
+0000481913 00000 n
+0000482094 00000 n
trailer
-<< /Size 1404
-/Root 1402 0 R
-/Info 1403 0 R
-/ID [<F402B200711665781F0B684C4A0FC9D9> <F402B200711665781F0B684C4A0FC9D9>] >>
+<< /Size 1149
+/Root 1147 0 R
+/Info 1148 0 R
+/ID [<C984448BA326CC9A19372FC47EEB0753> <C984448BA326CC9A19372FC47EEB0753>] >>
startxref
-527438
+482421
%%EOF
diff --git a/libAACdec/include/aacdecoder_lib.h b/libAACdec/include/aacdecoder_lib.h
index 60efe8d..a0c0854 100644
--- a/libAACdec/include/aacdecoder_lib.h
+++ b/libAACdec/include/aacdecoder_lib.h
@@ -144,10 +144,9 @@ to allocate memory for the required structures, and the corresponding mpegFileRe
files and to de-allocate associated structures. mpegFileRead_Open() tries to detect the bitstream format and
in case of MPEG-4 file format or Raw Packets file format (a Fraunhofer IIS proprietary format) reads the Audio
Specific Config data (ASC). An unsuccessful attempt to recognize the bitstream format requires the user to
-provide this information manually (see \ref CommandLineUsage). For any other bitstream formats that are
-usually applicable in streaming applications, the decoder itself will try to synchronize and parse the given
-bitstream fragment using the FDK transport library. Hence, for streaming applications (without file access)
-this step is not necessary.
+provide this information manually. For any other bitstream formats that are usually applicable in streaming
+applications, the decoder itself will try to synchronize and parse the given bitstream fragment using the
+FDK transport library. Hence, for streaming applications (without file access) this step is not necessary.
-# Call aacDecoder_Open() to open and retrieve a handle to a new AAC decoder instance.
\dontinclude main.cpp
@@ -430,21 +429,68 @@ typedef enum {
typedef enum
{
AAC_PCM_OUTPUT_INTERLEAVED = 0x0000, /*!< PCM output mode (1: interleaved (default); 0: not interleaved). */
- AAC_PCM_OUTPUT_CHANNELS = 0x0001, /*!< Number of PCM output channels (if different from encoded audio channels, downmixing or
- upmixing is applied). \n
- -1: Disable up-/downmixing. The decoder output contains the same number of channels as the
- encoded bitstream. \n
- 1: The decoder performs a mono matrix mix-down if the encoded audio channels are greater
- than one. Thus it ouputs always exact one channel. \n
- 2: The decoder performs a stereo matrix mix-down if the encoded audio channels are greater
- than two. If the encoded audio channels are smaller than two the decoder duplicates the
- output. Thus it ouputs always exact two channels. \n */
- AAC_PCM_DUAL_CHANNEL_OUTPUT_MODE = 0x0002, /*!< Defines how the decoder processes two channel signals:
- 0: Leave both signals as they are (default).
- 1: Create a dual mono output signal from channel 1.
- 2: Create a dual mono output signal from channel 2.
+ AAC_PCM_DUAL_CHANNEL_OUTPUT_MODE = 0x0002, /*!< Defines how the decoder processes two channel signals: \n
+ 0: Leave both signals as they are (default). \n
+ 1: Create a dual mono output signal from channel 1. \n
+ 2: Create a dual mono output signal from channel 2. \n
3: Create a dual mono output signal by mixing both channels (L' = R' = 0.5*Ch1 + 0.5*Ch2). */
AAC_PCM_OUTPUT_CHANNEL_MAPPING = 0x0003, /*!< Output buffer channel ordering. 0: MPEG PCE style order, 1: WAV file channel order (default). */
+ AAC_PCM_LIMITER_ENABLE = 0x0004, /*!< Enable signal level limiting. \n
+ -1: Auto-config. Enable limiter for all non-lowdelay configurations by default. \n
+ 0: Disable limiter in general. \n
+ 1: Enable limiter always.
+ It is recommended to call the decoder with a AACDEC_CLRHIST flag to reset all states when
+ the limiter switch is changed explicitly. */
+ AAC_PCM_LIMITER_ATTACK_TIME = 0x0005, /*!< Signal level limiting attack time in ms.
+ Default confguration is 15 ms. Adjustable range from 1 ms to 15 ms. */
+ AAC_PCM_LIMITER_RELEAS_TIME = 0x0006, /*!< Signal level limiting release time in ms.
+ Default configuration is 50 ms. Adjustable time must be larger than 0 ms. */
+ AAC_PCM_MIN_OUTPUT_CHANNELS = 0x0011, /*!< Minimum number of PCM output channels. If higher than the number of encoded audio channels,
+ a simple channel extension is applied. \n
+ -1, 0: Disable channel extenstion feature. The decoder output contains the same number of
+ channels as the encoded bitstream. \n
+ 1: This value is currently needed only together with the mix-down feature. See
+ ::AAC_PCM_MAX_OUTPUT_CHANNELS and note 2 below. \n
+ 2: Encoded mono signals will be duplicated to achieve a 2/0/0.0 channel output
+ configuration. \n
+ 6: The decoder trys to reorder encoded signals with less than six channels to achieve
+ a 3/0/2.1 channel output signal. Missing channels will be filled with a zero signal.
+ If reordering is not possible the empty channels will simply be appended. Only
+ available if instance is configured to support multichannel output. \n
+ 8: The decoder trys to reorder encoded signals with less than eight channels to
+ achieve a 3/0/4.1 channel output signal. Missing channels will be filled with a
+ zero signal. If reordering is not possible the empty channels will simply be
+ appended. Only available if instance is configured to support multichannel output.\n
+ NOTE: \n
+ 1. The channel signalling (CStreamInfo::pChannelType and CStreamInfo::pChannelIndices)
+ will not be modified. Added empty channels will be signalled with channel type
+ AUDIO_CHANNEL_TYPE::ACT_NONE. \n
+ 2. If the parameter value is greater than that of ::AAC_PCM_MAX_OUTPUT_CHANNELS both will
+ be set to the same value. \n
+ 3. This parameter does not affect MPEG Surround processing. */
+ AAC_PCM_MAX_OUTPUT_CHANNELS = 0x0012, /*!< Maximum number of PCM output channels. If lower than the number of encoded audio channels,
+ downmixing is applied accordingly. If dedicated metadata is available in the stream it
+ will be used to achieve better mixing results. \n
+ -1, 0: Disable downmixing feature. The decoder output contains the same number of channels
+ as the encoded bitstream. \n
+ 1: All encoded audio configurations with more than one channel will be mixed down to
+ one mono output signal. \n
+ 2: The decoder performs a stereo mix-down if the number encoded audio channels is
+ greater than two. \n
+ 6: If the number of encoded audio channels is greater than six the decoder performs a
+ mix-down to meet the target output configuration of 3/0/2.1 channels. Only
+ available if instance is configured to support multichannel output. \n
+ 8: This value is currently needed only together with the channel extension feature.
+ See ::AAC_PCM_MIN_OUTPUT_CHANNELS and note 2 below. Only available if instance is
+ configured to support multichannel output. \n
+ NOTE: \n
+ 1. Down-mixing of any seven or eight channel configuration not defined in ISO/IEC 14496-3
+ PDAM 4 is not supported by this software version. \n
+ 2. If the parameter value is greater than zero but smaller than ::AAC_PCM_MIN_OUTPUT_CHANNELS
+ both will be set to same value. \n
+ 3. The operating mode of the MPEG Surround module will be set accordingly. \n
+ 4. Setting this param with any value will disable the binaural processing of the MPEG
+ Surround module (::AAC_MPEGS_BINAURAL_ENABLE=0). */
AAC_CONCEAL_METHOD = 0x0100, /*!< Error concealment: Processing method. \n
0: Spectral muting. \n
@@ -485,18 +531,18 @@ typedef enum
*/
typedef struct
{
- /* These three members are the only really relevant ones for the user. */
+ /* These five members are the only really relevant ones for the user. */
INT sampleRate; /*!< The samplerate in Hz of the fully decoded PCM audio signal (after SBR processing). */
INT frameSize; /*!< The frame size of the decoded PCM audio signal. \n
1024 or 960 for AAC-LC \n
2048 or 1920 for HE-AAC (v2) \n
512 or 480 for AAC-LD and AAC-ELD */
INT numChannels; /*!< The number of output audio channels in the decoded and interleaved PCM audio signal. */
- AUDIO_CHANNEL_TYPE *pChannelType; /*!< Audio channel type of each output audio channel. */
- UCHAR *pChannelIndices; /*!< Audio channel index for each output audio channel.
+ AUDIO_CHANNEL_TYPE *pChannelType; /*!< Audio channel type of each output audio channel. */
+ UCHAR *pChannelIndices; /*!< Audio channel index for each output audio channel.
See ISO/IEC 13818-7:2005(E), 8.5.3.2 Explicit channel mapping using a program_config_element() */
/* Decoder internal members. */
- INT aacSampleRate; /*!< sampling rate in Hz without SBR (from configuration info). */
+ INT aacSampleRate; /*!< Sampling rate in Hz without SBR (from configuration info). */
INT profile; /*!< MPEG-2 profile (from file header) (-1: not applicable (e. g. MPEG-4)). */
AUDIO_OBJECT_TYPE aot; /*!< Audio Object Type (from ASC): is set to the appropriate value for MPEG-2 bitstreams (e. g. 2 for AAC-LC). */
INT channelConfig; /*!< Channel configuration (0: PCE defined, 1: mono, 2: stereo, ... */
@@ -509,7 +555,9 @@ typedef struct
AUDIO_OBJECT_TYPE extAot; /*!< Extension Audio Object Type (from ASC) */
INT extSamplingRate; /*!< Extension sampling rate in Hz (from ASC) */
- UINT flags; /*!< Copy if internal flags. Only to be written by the decoder, and only to be read externally. */
+ UINT outputDelay; /*!< The number of samples the output is additionally delayed by the decoder. */
+
+ UINT flags; /*!< Copy of internal flags. Only to be written by the decoder, and only to be read externally. */
SCHAR epConfig; /*!< epConfig level (from ASC): only level 0 supported, -1 means no ER (e. g. AOT=2, MPEG-2 AAC, etc.) */
@@ -522,10 +570,25 @@ typedef struct
UINT numTotalAccessUnits; /*!< This is the number of total access units that have passed through the decoder. */
UINT numBadAccessUnits; /*!< This is the number of total access units that were considered with errors from numTotalBytes. */
+ /* Metadata */
+ SCHAR drcProgRefLev; /*!< DRC program reference level. Defines the reference level below full-scale.
+ It is quantized in steps of 0.25dB. The valid values range from 0 (0 dBFS) to 127 (-31.75 dBFS).
+ It is used to reflect the average loudness of the audio in LKFS accoring to ITU-R BS 1770.
+ If no level has been found in the bitstream the value is -1. */
+ SCHAR drcPresMode; /*!< DRC presentation mode. According to ETSI TS 101 154, this field indicates whether
+ light (MPEG-4 Dynamic Range Control tool) or heavy compression (DVB heavy compression)
+ dynamic range control shall take priority on the outputs.
+ For details, see ETSI TS 101 154, table C.33. Possible values are: \n
+ -1: No corresponding metadata found in the bitstream \n
+ 0: DRC presentation mode not indicated \n
+ 1: DRC presentation mode 1 \n
+ 2: DRC presentation mode 2 \n
+ 3: Reserved */
+
} CStreamInfo;
-typedef struct AAC_DECODER_INSTANCE *HANDLE_AACDECODER;
+typedef struct AAC_DECODER_INSTANCE *HANDLE_AACDECODER; /*!< Pointer to a AAC decoder instance. */
#ifdef __cplusplus
extern "C"
@@ -634,11 +697,15 @@ aacDecoder_Fill ( HANDLE_AACDECODER self,
const UINT bufferSize[],
UINT *bytesValid );
-#define AACDEC_CONCEAL 1 /*!< Flag for aacDecoder_DecodeFrame(): do not consider new input data. Do concealment. */
-#define AACDEC_FLUSH 2 /*!< Flag for aacDecoder_DecodeFrame(): Do not consider new input data. Flush filterbanks (output delayed audio). */
-#define AACDEC_INTR 4 /*!< Flag for aacDecoder_DecodeFrame(): Signal an input bit stream data discontinuity. Resync any internals as necessary. */
-#define AACDEC_CLRHIST 8 /*!< Flag for aacDecoder_DecodeFrame(): Clear all signal delay lines and history buffers.
- Caution: This can cause discontinuities in the output signal. */
+#define AACDEC_CONCEAL 1 /*!< Flag for aacDecoder_DecodeFrame(): Trigger the built-in error concealment module \
+ to generate a substitute signal for one lost frame. New input data will not be
+ considered. */
+#define AACDEC_FLUSH 2 /*!< Flag for aacDecoder_DecodeFrame(): Flush all filterbanks to get all delayed audio \
+ without having new input data. Thus new input data will not be considered.*/
+#define AACDEC_INTR 4 /*!< Flag for aacDecoder_DecodeFrame(): Signal an input bit stream data discontinuity. \
+ Resync any internals as necessary. */
+#define AACDEC_CLRHIST 8 /*!< Flag for aacDecoder_DecodeFrame(): Clear all signal delay lines and history buffers.\
+ CAUTION: This can cause discontinuities in the output signal. */
/**
* \brief Decode one audio frame
diff --git a/libAACdec/src/aac_ram.cpp b/libAACdec/src/aac_ram.cpp
index a38f57c..1ff289b 100644
--- a/libAACdec/src/aac_ram.cpp
+++ b/libAACdec/src/aac_ram.cpp
@@ -108,15 +108,15 @@ C_ALLOC_MEM(AacDecoder, AAC_DECODER_INSTANCE, 1)
/*! The structure CAacDecoderStaticChannelInfo contains the static sideinfo which is needed
for the decoding of one aac channel. <br>
Dimension: #AacDecoderChannels */
-C_ALLOC_MEM2(AacDecoderStaticChannelInfo, CAacDecoderStaticChannelInfo, 1, (6))
+C_ALLOC_MEM2(AacDecoderStaticChannelInfo, CAacDecoderStaticChannelInfo, 1, (8))
/*! The structure CAacDecoderChannelInfo contains the dynamic sideinfo which is needed
for the decoding of one aac channel. <br>
Dimension: #AacDecoderChannels */
-C_ALLOC_MEM2(AacDecoderChannelInfo, CAacDecoderChannelInfo, 1, (6))
+C_AALLOC_MEM2(AacDecoderChannelInfo, CAacDecoderChannelInfo, 1, (8))
/*! Overlap buffer */
-C_ALLOC_MEM2(OverlapBuffer, FIXP_DBL, OverlapBufferSize, (6))
+C_ALLOC_MEM2(OverlapBuffer, FIXP_DBL, OverlapBufferSize, (8))
C_ALLOC_MEM(DrcInfo, CDrcInfo, 1)
@@ -128,7 +128,7 @@ C_ALLOC_MEM(DrcInfo, CDrcInfo, 1)
Dynamic memory areas, might be reused in other algorithm sections,
e.g. the sbr decoder
*/
-C_ALLOC_MEM_OVERLAY(WorkBufferCore2, FIXP_DBL, ((6)*1024), SECT_DATA_L2, WORKBUFFER2_TAG)
+C_ALLOC_MEM_OVERLAY(WorkBufferCore2, FIXP_DBL, ((8)*1024), SECT_DATA_L2, WORKBUFFER2_TAG)
C_ALLOC_MEM_OVERLAY(WorkBufferCore1, CWorkBufferCore1, 1, SECT_DATA_L1, WORKBUFFER1_TAG)
diff --git a/libAACdec/src/aac_rom.cpp b/libAACdec/src/aac_rom.cpp
index fa04c42..607cb3b 100644
--- a/libAACdec/src/aac_rom.cpp
+++ b/libAACdec/src/aac_rom.cpp
@@ -1777,42 +1777,62 @@ const FIXP_TCC FDKaacDec_tnsCoeff4 [16] =
};
/* MPEG like mapping (no change). */
-const UCHAR channelMappingTablePassthrough[8][8] =
+const UCHAR channelMappingTablePassthrough[15][8] =
{
+ { 0, 1, 2, 3, 4, 5, 6, 7}, /* fallback */
{ 0, 1,255,255,255,255,255,255}, /* mono / PS */
{ 0, 1,255,255,255,255,255,255}, /* stereo */
{ 0, 1, 2,255,255,255,255,255}, /* 3ch */
{ 0, 1, 2, 3,255,255,255,255}, /* 4ch */
{ 0, 1, 2, 3, 4,255,255,255}, /* 5ch */
{ 0, 1, 2, 3, 4, 5,255,255}, /* 5.1ch */
- { 0, 1, 2, 3, 4, 5, 6, 7}, /* 7ch */
- { 0, 1, 2, 3, 4, 5, 6, 7} /* 7.1ch */
+ { 0, 1, 2, 3, 4, 5, 6, 7}, /* 7.1 front */
+ { 0, 1, 2, 3, 4, 5, 6, 7}, /* reserved */
+ { 0, 1, 2, 3, 4, 5, 6, 7}, /* reserved */
+ { 0, 1, 2, 3, 4, 5, 6, 7}, /* reserved */
+ { 0, 1, 2, 3, 4, 5, 6,255}, /* 6.1ch */
+ { 0, 1, 2, 3, 4, 5, 6, 7}, /* 7.1 rear */
+ { 0, 1, 2, 3, 4, 5, 6, 7}, /* reserved */
+ { 0, 1, 2, 3, 4, 5, 6, 7} /* 7.1 top */
};
/* WAV file like mapping (from MPEG mapping). */
-const UCHAR channelMappingTableWAV[8][8] =
+const UCHAR channelMappingTableWAV[15][8] =
{
+ { 0, 1, 2, 3, 4, 5, 6, 7}, /* fallback */
{ 0, 1,255,255,255,255,255,255}, /* mono / PS */
{ 0, 1,255,255,255,255,255,255}, /* stereo */
{ 2, 0, 1,255,255,255,255,255}, /* 3ch */
{ 2, 0, 1, 3,255,255,255,255}, /* 4ch */
{ 2, 0, 1, 3, 4,255,255,255}, /* 5ch */
{ 2, 0, 1, 4, 5, 3,255,255}, /* 5.1ch */
- { 0, 1, 2, 3, 4, 5, 6, 7}, /* 7ch */
- { 2, 0, 1, 6, 7, 4, 5, 3} /* 7.1ch */
+ { 2, 6, 7, 0, 1, 4, 5, 3}, /* 7.1 front */
+ { 0, 1, 2, 3, 4, 5, 6, 7}, /* reserved */
+ { 0, 1, 2, 3, 4, 5, 6, 7}, /* reserved */
+ { 0, 1, 2, 3, 4, 5, 6, 7}, /* reserved */
+ { 2, 0, 1, 4, 5, 6, 3,255}, /* 6.1ch */
+ { 2, 0, 1, 6, 7, 4, 5, 3}, /* 7.1 rear */
+ { 0, 1, 2, 3, 4, 5, 6, 7}, /* reserved */
+ { 2, 0, 1, 4, 5, 3, 6, 7} /* 7.1 top */
};
/* Lookup tables for elements in ER bitstream */
-const MP4_ELEMENT_ID elementsTab[8][7] =
+const MP4_ELEMENT_ID elementsTab[15][7] =
{
- {ID_SCE, ID_EXT, ID_END, ID_NONE, ID_NONE,ID_NONE,ID_NONE }, /* 1 channel */
- {ID_CPE, ID_EXT, ID_END, ID_NONE, ID_NONE,ID_NONE,ID_NONE } /* 2 channels */
- ,
- {ID_SCE, ID_CPE, ID_EXT, ID_END, ID_NONE,ID_NONE,ID_NONE }, /* 3 channels */
- {ID_SCE, ID_CPE, ID_SCE, ID_EXT, ID_END, ID_NONE,ID_NONE }, /* 4 channels */
- {ID_SCE, ID_CPE, ID_CPE, ID_EXT, ID_END, ID_NONE,ID_NONE }, /* 5 channels */
- {ID_SCE, ID_CPE, ID_CPE, ID_LFE, ID_EXT, ID_END, ID_NONE }, /* 6 channels */
- {ID_SCE, ID_CPE, ID_CPE, ID_CPE, ID_LFE, ID_EXT, ID_END} /* 8 channels */
+ /* 1 */ { ID_SCE, ID_EXT, ID_END, ID_NONE, ID_NONE, ID_NONE, ID_NONE }, /* 1 channel */
+ /* 2 */ { ID_CPE, ID_EXT, ID_END, ID_NONE, ID_NONE, ID_NONE, ID_NONE } /* 2 channels */
+ /* 3 */ ,{ ID_SCE, ID_CPE, ID_EXT, ID_END, ID_NONE, ID_NONE, ID_NONE }, /* 3 channels */
+ /* 4 */ { ID_SCE, ID_CPE, ID_SCE, ID_EXT, ID_END, ID_NONE, ID_NONE }, /* 4 channels */
+ /* 5 */ { ID_SCE, ID_CPE, ID_CPE, ID_EXT, ID_END, ID_NONE, ID_NONE }, /* 5 channels */
+ /* 6 */ { ID_SCE, ID_CPE, ID_CPE, ID_LFE, ID_EXT, ID_END, ID_NONE } /* 6 channels */
+ /* 7 */ ,{ ID_SCE, ID_CPE, ID_CPE, ID_CPE, ID_LFE, ID_EXT, ID_END }, /* 8 channels */
+ /* 8 */ { ID_NONE, ID_NONE, ID_NONE, ID_NONE, ID_NONE, ID_NONE, ID_NONE }, /* reserved */
+ /* 9 */ { ID_NONE, ID_NONE, ID_NONE, ID_NONE, ID_NONE, ID_NONE, ID_NONE }, /* reserved */
+ /* 10 */ { ID_NONE, ID_NONE, ID_NONE, ID_NONE, ID_NONE, ID_NONE, ID_NONE }, /* reserved */
+ /* 11 */ { ID_SCE, ID_CPE, ID_CPE, ID_SCE, ID_LFE, ID_EXT, ID_END }, /* 7 channels */
+ /* 12 */ { ID_SCE, ID_CPE, ID_CPE, ID_CPE, ID_LFE, ID_EXT, ID_END }, /* 8 channels */
+ /* 13 */ { ID_NONE, ID_NONE, ID_NONE, ID_NONE, ID_NONE, ID_NONE, ID_NONE }, /* reserved */
+ /* 14 */ { ID_SCE, ID_CPE, ID_CPE, ID_LFE, ID_CPE, ID_EXT, ID_END } /* 8 channels */
};
/*! Random sign bit used for concealment
diff --git a/libAACdec/src/aac_rom.h b/libAACdec/src/aac_rom.h
index 536d184..f314a2d 100644
--- a/libAACdec/src/aac_rom.h
+++ b/libAACdec/src/aac_rom.h
@@ -177,11 +177,12 @@ extern const USHORT randomSign[AAC_NF_NO_RANDOM_VAL/16];
extern const FIXP_DBL pow2_div24minus1[47];
extern const int offsetTab[2][16];
-/* Channel mapping indices for time domain I/O. First dimension is channel count-1. */
-extern const UCHAR channelMappingTablePassthrough[8][8];
-extern const UCHAR channelMappingTableWAV[8][8];
+/* Channel mapping indices for time domain I/O.
+ The first dimension is the channel configuration index. */
+extern const UCHAR channelMappingTablePassthrough[15][8];
+extern const UCHAR channelMappingTableWAV[15][8];
/* Lookup tables for elements in ER bitstream */
-extern const MP4_ELEMENT_ID elementsTab[8][7];
+extern const MP4_ELEMENT_ID elementsTab[15][7];
#endif /* #ifndef AAC_ROM_H */
diff --git a/libAACdec/src/aacdec_drc.cpp b/libAACdec/src/aacdec_drc.cpp
index 2666454..0c33a2b 100644
--- a/libAACdec/src/aacdec_drc.cpp
+++ b/libAACdec/src/aacdec_drc.cpp
@@ -130,7 +130,6 @@ void aacDecoder_drcInit (
/* init control fields */
self->enable = 0;
self->numThreads = 0;
- self->digitalNorm = 0;
/* init params */
pParams = &self->params;
@@ -139,12 +138,15 @@ void aacDecoder_drcInit (
pParams->usrCut = FL2FXCONST_DBL(0.0f);
pParams->boost = FL2FXCONST_DBL(0.0f);
pParams->usrBoost = FL2FXCONST_DBL(0.0f);
- pParams->targetRefLevel = AACDEC_DRC_DEFAULT_REF_LEVEL;
+ pParams->targetRefLevel = -1;
pParams->expiryFrame = AACDEC_DRC_DFLT_EXPIRY_FRAMES;
+ pParams->applyDigitalNorm = 0;
pParams->applyHeavyCompression = 0;
/* initial program ref level = target ref level */
self->progRefLevel = pParams->targetRefLevel;
+ self->progRefLevelPresent = 0;
+ self->presMode = -1;
}
@@ -222,11 +224,12 @@ AAC_DECODER_ERROR aacDecoder_drcSetParam (
return AAC_DEC_INVALID_HANDLE;
}
if (value < 0) {
- self->digitalNorm = 0;
+ self->params.applyDigitalNorm = 0;
+ self->params.targetRefLevel = -1;
}
else {
/* ref_level must be between 0 and MAX_REFERENCE_LEVEL, inclusive */
- self->digitalNorm = 1;
+ self->params.applyDigitalNorm = 1;
if (self->params.targetRefLevel != (SCHAR)value) {
self->params.targetRefLevel = (SCHAR)value;
self->progRefLevel = (SCHAR)value; /* Always set the program reference level equal to the
@@ -234,6 +237,16 @@ AAC_DECODER_ERROR aacDecoder_drcSetParam (
}
}
break;
+ case APPLY_NORMALIZATION:
+ if (value < 0 || value > 1) {
+ return AAC_DEC_SET_PARAM_FAIL;
+ }
+ if (self == NULL) {
+ return AAC_DEC_INVALID_HANDLE;
+ }
+ /* Store new parameter value */
+ self->params.applyDigitalNorm = (UCHAR)value;
+ break;
case APPLY_HEAVY_COMPRESSION:
if (value < 0 || value > 1) {
return AAC_DEC_SET_PARAM_FAIL;
@@ -278,7 +291,7 @@ AAC_DECODER_ERROR aacDecoder_drcSetParam (
self->enable = ( (self->params.boost > (FIXP_DBL)0)
|| (self->params.cut > (FIXP_DBL)0)
|| (self->params.applyHeavyCompression != 0)
- || (self->digitalNorm == 1) );
+ || (self->params.targetRefLevel >= 0) );
return ErrorStatus;
@@ -539,7 +552,7 @@ static int aacDecoder_drcReadCompression (
UINT payloadPosition )
{
int bitCnt = 0;
- int dmxLevelsPresent, compressionPresent;
+ int dmxLevelsPresent, extensionPresent, compressionPresent;
int coarseGrainTcPresent, fineGrainTcPresent;
/* Move to the beginning of the DRC payload field */
@@ -561,8 +574,9 @@ static int aacDecoder_drcReadCompression (
return 0;
}
FDKreadBits(bs, 2); /* dolby_surround_mode */
- FDKreadBits(bs, 2); /* presentation_mode */
- if (FDKreadBits(bs, 2) != 0) { /* reserved, set to 0 */
+ pDrcBs->presMode = FDKreadBits(bs, 2); /* presentation_mode */
+ FDKreadBits(bs, 1); /* stereo_downmix_mode */
+ if (FDKreadBits(bs, 1) != 0) { /* reserved, set to 0 */
return 0;
}
@@ -571,9 +585,7 @@ static int aacDecoder_drcReadCompression (
return 0;
}
dmxLevelsPresent = FDKreadBits(bs, 1); /* downmixing_levels_MPEG4_status */
- if (FDKreadBits(bs, 1) != 0) { /* reserved, set to 0 */
- return 0;
- }
+ extensionPresent = FDKreadBits(bs, 1); /* ancillary_data_extension_status; */
compressionPresent = FDKreadBits(bs, 1); /* audio_coding_mode_and_compression status */
coarseGrainTcPresent = FDKreadBits(bs, 1); /* coarse_grain_timecode_status */
fineGrainTcPresent = FDKreadBits(bs, 1); /* fine_grain_timecode_status */
@@ -631,6 +643,19 @@ static int aacDecoder_drcReadCompression (
bitCnt += 16;
}
+ /* Read extension just to get the right amount of bits. */
+ if (extensionPresent) {
+ int extBits = 8;
+
+ FDKreadBits(bs, 1); /* reserved, set to 0 */
+ if (FDKreadBits(bs, 1)) extBits += 8; /* ext_downmixing_levels_status */
+ if (FDKreadBits(bs, 1)) extBits += 16; /* ext_downmixing_global_gains_status */
+ if (FDKreadBits(bs, 1)) extBits += 8; /* ext_downmixing_lfe_level_status */
+
+ FDKpushFor(bs, extBits - 4); /* skip the extension payload remainder. */
+ bitCnt += extBits;
+ }
+
return (bitCnt);
}
@@ -780,9 +805,15 @@ static int aacDecoder_drcExtractAndMap (
*/
if (pThreadBs->progRefLevel >= 0) {
self->progRefLevel = pThreadBs->progRefLevel;
+ self->progRefLevelPresent = 1;
self->prlExpiryCount = 0; /* Got a new value -> Reset counter */
}
+ if (drcPayloadType == DVB_DRC_ANC_DATA) {
+ /* Announce the presentation mode of this valid thread. */
+ self->presMode = pThreadBs->presMode;
+ }
+
/* SCE, CPE and LFE */
for (ch = 0; ch < validChannels; ch++) {
int mapedChannel = channelMapping[ch];
@@ -802,6 +833,7 @@ static int aacDecoder_drcExtractAndMap (
if ( (pParams->expiryFrame > 0)
&& (self->prlExpiryCount++ > pParams->expiryFrame) )
{ /* The program reference level is too old, so set it back to the target level. */
+ self->progRefLevelPresent = 0;
self->progRefLevel = pParams->targetRefLevel;
self->prlExpiryCount = 0;
}
@@ -815,6 +847,7 @@ void aacDecoder_drcApply (
void *pSbrDec,
CAacDecoderChannelInfo *pAacDecoderChannelInfo,
CDrcChannelData *pDrcChData,
+ FIXP_DBL *extGain,
int ch, /* needed only for SBR */
int aacFrameSize,
int bSbrPresent )
@@ -826,8 +859,8 @@ void aacDecoder_drcApply (
FIXP_DBL max_mantissa;
INT max_exponent;
- FIXP_DBL norm_mantissa = FL2FXCONST_DBL(0.0f);
- INT norm_exponent = 0;
+ FIXP_DBL norm_mantissa = FL2FXCONST_DBL(0.5f);
+ INT norm_exponent = 1;
FIXP_DBL fact_mantissa[MAX_DRC_BANDS];
INT fact_exponent[MAX_DRC_BANDS];
@@ -849,6 +882,15 @@ void aacDecoder_drcApply (
if (!self->enable) {
sbrDecoder_drcDisable( (HANDLE_SBRDECODER)pSbrDec, ch );
+ if (extGain != NULL) {
+ INT gainScale = (INT)*extGain;
+ /* The gain scaling must be passed to the function in the buffer pointed on by extGain. */
+ if (gainScale >= 0 && gainScale <= DFRACT_BITS) {
+ *extGain = scaleValue(norm_mantissa, norm_exponent-gainScale);
+ } else {
+ FDK_ASSERT(0);
+ }
+ }
return;
}
@@ -864,7 +906,7 @@ void aacDecoder_drcApply (
reduced DAC SNR (if signal is attenuated) or clipping (if signal is
boosted) */
- if (self->digitalNorm == 1)
+ if (pParams->targetRefLevel >= 0)
{
/* 0.5^((targetRefLevel - progRefLevel)/24) */
norm_mantissa = fLdPow(
@@ -874,7 +916,18 @@ void aacDecoder_drcApply (
3,
&norm_exponent );
}
- else {
+ /* Always export the normalization gain (if possible). */
+ if (extGain != NULL) {
+ INT gainScale = (INT)*extGain;
+ /* The gain scaling must be passed to the function in the buffer pointed on by extGain. */
+ if (gainScale >= 0 && gainScale <= DFRACT_BITS) {
+ *extGain = scaleValue(norm_mantissa, norm_exponent-gainScale);
+ } else {
+ FDK_ASSERT(0);
+ }
+ }
+ if (self->params.applyDigitalNorm == 0) {
+ /* Reset normalization gain since this module must not apply it */
norm_mantissa = FL2FXCONST_DBL(0.5f);
norm_exponent = 1;
}
@@ -1112,3 +1165,24 @@ int aacDecoder_drcEpilog (
return err;
}
+/*
+ * Export relevant metadata info from bitstream payload.
+ */
+void aacDecoder_drcGetInfo (
+ HANDLE_AAC_DRC self,
+ SCHAR *pPresMode,
+ SCHAR *pProgRefLevel )
+{
+ if (self != NULL) {
+ if (pPresMode != NULL) {
+ *pPresMode = self->presMode;
+ }
+ if (pProgRefLevel != NULL) {
+ if (self->progRefLevelPresent) {
+ *pProgRefLevel = self->progRefLevel;
+ } else {
+ *pProgRefLevel = -1;
+ }
+ }
+ }
+}
diff --git a/libAACdec/src/aacdec_drc.h b/libAACdec/src/aacdec_drc.h
index 2ebae2c..c850aa5 100644
--- a/libAACdec/src/aacdec_drc.h
+++ b/libAACdec/src/aacdec_drc.h
@@ -98,7 +98,6 @@ amm-info@iis.fraunhofer.de
#include "channel.h"
#include "FDK_bitstream.h"
-#define AACDEC_DRC_DEFAULT_REF_LEVEL ( 108 ) /* -27 dB below full scale (typical for movies) */
#define AACDEC_DRC_DFLT_EXPIRY_FRAMES ( 50 ) /* Default DRC data expiry time in AAC frames */
/**
@@ -111,6 +110,7 @@ typedef enum
TARGET_REF_LEVEL,
DRC_BS_DELAY,
DRC_DATA_EXPIRY_FRAME,
+ APPLY_NORMALIZATION,
APPLY_HEAVY_COMPRESSION
} AACDEC_DRC_PARAM;
@@ -149,6 +149,8 @@ int aacDecoder_drcProlog (
* \param pSbrDec pointer to SBR decoder instance
* \param pAacDecoderChannelInfo AAC decoder channel instance to be processed
* \param pDrcDat DRC channel data
+ * \param extGain Pointer to a FIXP_DBL where a externally applyable gain will be stored into (independently on whether it will be apply internally or not).
+ * At function call the buffer must hold the scale (0 >= scale < DFRACT_BITS) to be applied on the gain value.
* \param ch channel index
* \param aacFrameSize AAC frame size
* \param bSbrPresent flag indicating that SBR is present, in which case DRC is handed over to the SBR instance pSbrDec
@@ -158,6 +160,7 @@ void aacDecoder_drcApply (
void *pSbrDec,
CAacDecoderChannelInfo *pAacDecoderChannelInfo,
CDrcChannelData *pDrcDat,
+ FIXP_DBL *extGain,
int ch,
int aacFrameSize,
int bSbrPresent );
@@ -170,5 +173,17 @@ int aacDecoder_drcEpilog (
UCHAR channelMapping[],
int validChannels );
+/**
+ * \brief Get metadata information found in bitstream.
+ * \param self DRC module instance handle.
+ * \param pPresMode Pointer to field where the presentation mode will be written to.
+ * \param pProgRefLevel Pointer to field where the program reference level will be written to.
+ * \return Nothing.
+ */
+void aacDecoder_drcGetInfo (
+ HANDLE_AAC_DRC self,
+ SCHAR *pPresMode,
+ SCHAR *pProgRefLevel );
+
#endif /* AACDEC_DRC_H */
diff --git a/libAACdec/src/aacdec_drc_types.h b/libAACdec/src/aacdec_drc_types.h
index 1b5cd76..4c6d163 100644
--- a/libAACdec/src/aacdec_drc_types.h
+++ b/libAACdec/src/aacdec_drc_types.h
@@ -124,6 +124,7 @@ typedef struct
{
UINT excludedChnsMask;
SCHAR progRefLevel;
+ SCHAR presMode; /* Presentation mode: 0 (not indicated), 1, 2, and 3 (reserved). */
SCHAR pceInstanceTag;
CDrcChannelData channelData;
@@ -140,6 +141,7 @@ typedef struct
UINT expiryFrame;
SCHAR targetRefLevel;
UCHAR bsDelayEnable;
+ UCHAR applyDigitalNorm;
UCHAR applyHeavyCompression;
} CDrcParams;
@@ -155,9 +157,11 @@ typedef struct
USHORT numPayloads; /* The number of DRC data payload elements found within frame */
USHORT numThreads; /* The number of DRC data threads extracted from the found payload elements */
SCHAR progRefLevel; /* Program reference level for all channels */
+ UCHAR progRefLevelPresent; /* Program reference level found in bitstream */
UINT prlExpiryCount; /* Counter that can be used to monitor the life time of the program reference level. */
+ SCHAR presMode; /* Presentation mode as defined in ETSI TS 101 154 */
UCHAR dvbAncDataAvailable; /* Flag that indicates whether DVB ancillary data is present or not */
UINT dvbAncDataPosition; /* Used to store the DVB ancillary data payload position in the bitstream (only one per frame) */
UINT drcPayloadPosition[MAX_DRC_THREADS]; /* Used to store the DRC payload positions in the bitstream */
diff --git a/libAACdec/src/aacdecoder.cpp b/libAACdec/src/aacdecoder.cpp
index 3a2a561..e19c501 100644
--- a/libAACdec/src/aacdecoder.cpp
+++ b/libAACdec/src/aacdecoder.cpp
@@ -338,17 +338,22 @@ AAC_DECODER_ERROR CAacDecoder_AncDataParse (
\return Error code
*/
static AAC_DECODER_ERROR CDataStreamElement_Read (
+ HANDLE_AACDECODER self,
HANDLE_FDK_BITSTREAM bs,
- CAncData *ancData,
- HANDLE_AAC_DRC hDrcInfo,
- HANDLE_TRANSPORTDEC pTp,
UCHAR *elementInstanceTag,
UINT alignmentAnchor )
{
+ HANDLE_TRANSPORTDEC pTp;
+ CAncData *ancData;
AAC_DECODER_ERROR error = AAC_DEC_OK;
- UINT dataStart;
+ UINT dataStart, dseBits;
int dataByteAlignFlag, count;
+ FDK_ASSERT(self != NULL);
+
+ ancData = &self->ancData;
+ pTp = self->hInput;
+
int crcReg = transportDec_CrcStartReg(pTp, 0);
/* Element Instance Tag */
@@ -361,6 +366,7 @@ static AAC_DECODER_ERROR CDataStreamElement_Read (
if (count == 255) {
count += FDKreadBits(bs,8); /* EscCount */
}
+ dseBits = count*8;
if (dataByteAlignFlag) {
FDKbyteAlign(bs, alignmentAnchor);
@@ -372,19 +378,29 @@ static AAC_DECODER_ERROR CDataStreamElement_Read (
transportDec_CrcEndReg(pTp, crcReg);
{
- INT readBits, dataBits = count<<3;
-
/* Move to the beginning of the data junk */
FDKpushBack(bs, dataStart-FDKgetValidBits(bs));
/* Read Anc data if available */
- readBits = aacDecoder_drcMarkPayload( hDrcInfo, bs, DVB_DRC_ANC_DATA );
+ aacDecoder_drcMarkPayload( self->hDrcInfo, bs, DVB_DRC_ANC_DATA );
+ }
+
+ {
+ PCMDMX_ERROR dmxErr = PCMDMX_OK;
+
+ /* Move to the beginning of the data junk */
+ FDKpushBack(bs, dataStart-FDKgetValidBits(bs));
- if (readBits != dataBits) {
- /* Move to the end again. */
- FDKpushBiDirectional(bs, FDKgetValidBits(bs)-dataStart+dataBits);
+ /* Read DMX meta-data */
+ dmxErr = pcmDmx_Parse (
+ self->hPcmUtils,
+ bs,
+ dseBits,
+ 0 /* not mpeg2 */ );
}
- }
+
+ /* Move to the very end of the element. */
+ FDKpushBiDirectional(bs, FDKgetValidBits(bs)-dataStart+dseBits);
return error;
}
@@ -701,6 +717,12 @@ void CStreamInfoInit(CStreamInfo *pStreamInfo)
pStreamInfo->numChannels = 0;
pStreamInfo->sampleRate = 0;
pStreamInfo->frameSize = 0;
+
+ pStreamInfo->outputDelay = 0;
+
+ /* DRC */
+ pStreamInfo->drcProgRefLev = -1; /* set program reference level to not indicated */
+ pStreamInfo->drcPresMode = -1; /* default: presentation mode not indicated */
}
/*!
@@ -774,7 +796,7 @@ LINKSPEC_CPP void CAacDecoder_Close(HANDLE_AACDECODER self)
if (self == NULL)
return;
- for (ch=0; ch<(6); ch++) {
+ for (ch=0; ch<(8); ch++) {
if (self->pAacDecoderStaticChannelInfo[ch] != NULL) {
if (self->pAacDecoderStaticChannelInfo[ch]->pOverlapBuffer != NULL) {
FreeOverlapBuffer (&self->pAacDecoderStaticChannelInfo[ch]->pOverlapBuffer);
@@ -851,18 +873,19 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_Init(HANDLE_AACDECODER self, const CS
/* valid number of channels -> copy program config element (PCE) from ASC */
FDKmemcpy(&self->pce, &asc->m_progrConfigElement, sizeof(CProgramConfig));
/* Built element table */
- el = CProgramConfig_GetElementTable(&asc->m_progrConfigElement, self->elements, 7);
- for (; el<7; el++) {
+ el = CProgramConfig_GetElementTable(&asc->m_progrConfigElement, self->elements, (8), &self->chMapIndex);
+ for (; el<(8); el++) {
self->elements[el] = ID_NONE;
}
} else {
return AAC_DEC_UNSUPPORTED_CHANNELCONFIG;
}
} else {
+ self->chMapIndex = 0;
if (transportDec_GetFormat(self->hInput) == TT_MP4_ADTS) {
/* set default max_channels for memory allocation because in implicit channel mapping mode
we don't know the actual number of channels until we processed at least one raw_data_block(). */
- ascChannels = (6);
+ ascChannels = (8);
} else {
return AAC_DEC_UNSUPPORTED_CHANNELCONFIG;
}
@@ -874,26 +897,34 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_Init(HANDLE_AACDECODER self, const CS
case 1: case 2: case 3: case 4: case 5: case 6:
ascChannels = asc->m_channelConfiguration;
break;
- case 7:
+ case 11:
+ ascChannels = 7;
+ break;
+ case 7: case 12: case 14:
ascChannels = 8;
break;
default:
return AAC_DEC_UNSUPPORTED_CHANNELCONFIG;
}
+ if (ascChannels > (8)) {
+ return AAC_DEC_UNSUPPORTED_CHANNELCONFIG;
+ }
+
/* Initialize constant mappings for channel config 1-7 */
if (asc->m_channelConfiguration > 0) {
int el;
- FDKmemcpy(self->elements, elementsTab[asc->m_channelConfiguration-1], sizeof(MP4_ELEMENT_ID)*FDKmin(7,7));
- for (el=7; el<7; el++) {
+ FDKmemcpy(self->elements, elementsTab[asc->m_channelConfiguration-1], sizeof(MP4_ELEMENT_ID)*FDKmin(7,(8)));
+ for (el=7; el<(8); el++) {
self->elements[el] = ID_NONE;
}
for (ch=0; ch<ascChannels; ch++) {
self->chMapping[ch] = ch;
}
- for (; ch<(6); ch++) {
+ for (; ch<(8); ch++) {
self->chMapping[ch] = 255;
}
+ self->chMapIndex = asc->m_channelConfiguration;
}
#ifdef TP_PCE_ENABLE
else {
@@ -909,9 +940,6 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_Init(HANDLE_AACDECODER self, const CS
self->streamInfo.channelConfig = asc->m_channelConfiguration;
- if (ascChannels > (6)) {
- return AAC_DEC_UNSUPPORTED_CHANNELCONFIG;
- }
if (self->streamInfo.aot != asc->m_aot) {
self->streamInfo.aot = asc->m_aot;
ascChanged = 1;
@@ -1096,6 +1124,7 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_DecodeFrame(
MP4_ELEMENT_ID type = ID_NONE; /* Current element type */
INT aacChannels=0; /* Channel counter for channels found in the bitstream */
+ int chOutMapIdx; /* Output channel mapping index (see comment below) */
INT auStartAnchor = (INT)FDKgetValidBits(bs); /* AU start bit buffer position for AU byte alignment */
@@ -1119,12 +1148,12 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_DecodeFrame(
if (self->streamInfo.channelConfig == 0) {
/* Init Channel/Element mapping table */
- for (ch=0; ch<(6); ch++) {
+ for (ch=0; ch<(8); ch++) {
self->chMapping[ch] = 255;
}
if (!CProgramConfig_IsValid(pce)) {
int el;
- for (el=0; el<7; el++) {
+ for (el=0; el<(8); el++) {
self->elements[el] = ID_NONE;
}
}
@@ -1161,11 +1190,8 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_DecodeFrame(
CConcealment_InitChannelData(&self->pAacDecoderStaticChannelInfo[ch]->concealmentInfo,
&self->concealCommonData,
self->streamInfo.aacSamplesPerFrame );
- /* Clear concealment buffers to get rid of the complete history */
- FDKmemclear(self->pAacDecoderStaticChannelInfo[ch]->concealmentInfo.spectralCoefficient, 1024 * sizeof(FIXP_CNCL));
- FDKmemclear(self->pAacDecoderStaticChannelInfo[ch]->concealmentInfo.specScale, 8 * sizeof(SHORT));
/* Clear overlap-add buffers to avoid clicks. */
- FDKmemclear(self->pAacDecoderStaticChannelInfo[ch]->IMdct.overlap.freq, OverlapBufferSize*sizeof(FIXP_DBL));
+ FDKmemclear(self->pAacDecoderStaticChannelInfo[ch]->pOverlapBuffer, OverlapBufferSize*sizeof(FIXP_DBL));
}
}
@@ -1378,10 +1404,8 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_DecodeFrame(
{
UCHAR element_instance_tag;
- CDataStreamElement_Read( bs,
- &self->ancData,
- self->hDrcInfo,
- self->hInput,
+ CDataStreamElement_Read( self,
+ bs,
&element_instance_tag,
auStartAnchor );
@@ -1401,29 +1425,6 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_DecodeFrame(
//self->frameOK = 0;
}
}
-
- {
- UCHAR *pDvbAncData = NULL;
- AAC_DECODER_ERROR ancErr;
- int ancIndex;
- int dvbAncDataSize = 0;
-
- /* Ask how many anc data elements are in buffer */
- ancIndex = self->ancData.nrElements - 1;
- /* Get the last one (if available) */
- ancErr = CAacDecoder_AncDataGet( &self->ancData,
- ancIndex,
- &pDvbAncData,
- &dvbAncDataSize );
-
- if (ancErr == AAC_DEC_OK) {
- pcmDmx_ReadDvbAncData (
- self->hPcmUtils,
- pDvbAncData,
- dvbAncDataSize,
- 0 /* not mpeg2 */ );
- }
- }
break;
#ifdef TP_PCE_ENABLE
@@ -1442,9 +1443,9 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_DecodeFrame(
}
else if ( result > 1 ) {
/* Built element table */
- int elIdx = CProgramConfig_GetElementTable(pce, self->elements, 7);
+ int elIdx = CProgramConfig_GetElementTable(pce, self->elements, (8), &self->chMapIndex);
/* Reset the remaining tabs */
- for ( ; elIdx<7; elIdx++) {
+ for ( ; elIdx<(8); elIdx++) {
self->elements[elIdx] = ID_NONE;
}
/* Make new number of channel persistant */
@@ -1510,10 +1511,19 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_DecodeFrame(
break;
}
}
- if (err == SBRDEC_OK) {
+ switch (err) {
+ case SBRDEC_PARSE_ERROR:
+ /* Can not go on parsing because we do not
+ know the length of the SBR extension data. */
+ FDKpushFor(bs, bitCnt);
+ bitCnt = 0;
+ break;
+ case SBRDEC_OK:
self->sbrEnabled = 1;
- } else {
+ break;
+ default:
self->frameOK = 0;
+ break;
}
}
@@ -1603,13 +1613,17 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_DecodeFrame(
self->frameOK=0;
}
- /* store or restore the number of channels */
+ /* store or restore the number of channels and the corresponding info */
if ( self->frameOK && !(flags &(AACDEC_CONCEAL|AACDEC_FLUSH)) ) {
- self->concealChannels = aacChannels; /* store */
+ self->aacChannelsPrev = aacChannels; /* store */
+ FDKmemcpy(self->channelTypePrev, self->channelType, (8)*sizeof(AUDIO_CHANNEL_TYPE)); /* store */
+ FDKmemcpy(self->channelIndicesPrev, self->channelIndices, (8)*sizeof(UCHAR)); /* store */
self->sbrEnabledPrev = self->sbrEnabled;
} else {
if (self->aacChannels > 0) {
- aacChannels = self->concealChannels; /* restore */
+ aacChannels = self->aacChannelsPrev; /* restore */
+ FDKmemcpy(self->channelType, self->channelTypePrev, (8)*sizeof(AUDIO_CHANNEL_TYPE)); /* restore */
+ FDKmemcpy(self->channelIndices, self->channelIndicesPrev, (8)*sizeof(UCHAR)); /* restore */
self->sbrEnabled = self->sbrEnabledPrev;
}
}
@@ -1632,12 +1646,31 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_DecodeFrame(
return ErrorStatus;
}
+ /* Setup the output channel mapping. The table below shows the four possibilities:
+ * # | chCfg | PCE | cChCfg | chOutMapIdx
+ * ---+-------+-----+--------+------------------
+ * 1 | > 0 | no | - | chCfg
+ * 2 | 0 | yes | > 0 | cChCfg
+ * 3 | 0 | yes | 0 | aacChannels || 0
+ * 4 | 0 | no | - | aacChannels || 0
+ * ---+-------+-----+--------+------------------
+ * Where chCfg is the channel configuration index from ASC and cChCfg is a corresponding chCfg
+ * derived from a given PCE. The variable aacChannels represents the number of channel found
+ * during bitstream decoding. Due to the structure of the mapping table it can only be used for
+ * mapping if its value is smaller than 7. Otherwise we use the fallback (0) which is a simple
+ * pass-through. The possibility #4 should appear only with MPEG-2 (ADTS) streams. This is
+ * mode is called "implicit channel mapping".
+ */
+ chOutMapIdx = ((self->chMapIndex==0) && (aacChannels<7)) ? aacChannels : self->chMapIndex;
+
/*
Inverse transform
*/
{
int stride, offset, c;
+ /* Turn on/off DRC modules level normalization in digital domain depending on the limiter status. */
+ aacDecoder_drcSetParam( self->hDrcInfo, APPLY_NORMALIZATION, (self->limiterEnableCurr) ? 0 : 1 );
/* Extract DRC control data and map it to channels (without bitstream delay) */
aacDecoder_drcProlog (
self->hDrcInfo,
@@ -1663,13 +1696,18 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_DecodeFrame(
/* Setup offset and stride for time buffer traversal. */
if (interleaved) {
stride = aacChannels;
- offset = self->channelOutputMapping[aacChannels-1][c];
+ offset = self->channelOutputMapping[chOutMapIdx][c];
} else {
stride = 1;
- offset = self->channelOutputMapping[aacChannels-1][c] * self->streamInfo.aacSamplesPerFrame;
+ offset = self->channelOutputMapping[chOutMapIdx][c] * self->streamInfo.aacSamplesPerFrame;
}
+ if ( flags&AACDEC_FLUSH ) {
+ /* Clear pAacDecoderChannelInfo->pSpectralCoefficient because with AACDEC_FLUSH set it contains undefined data. */
+ FDKmemclear(pAacDecoderChannelInfo->pSpectralCoefficient, sizeof(FIXP_DBL)*self->streamInfo.aacSamplesPerFrame);
+ }
+
/*
Conceal defective spectral data
*/
@@ -1688,12 +1726,15 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_DecodeFrame(
/* Reset DRC control data for this channel */
aacDecoder_drcInitChannelData ( &self->pAacDecoderStaticChannelInfo[c]->drcData );
}
+ /* The DRC module demands to be called with the gain field holding the gain scale. */
+ self->extGain[0] = (FIXP_DBL)TDL_GAIN_SCALING;
/* DRC processing */
aacDecoder_drcApply (
self->hDrcInfo,
self->hSbrDecoder,
pAacDecoderChannelInfo,
&self->pAacDecoderStaticChannelInfo[c]->drcData,
+ self->extGain,
c,
self->streamInfo.aacSamplesPerFrame,
self->sbrEnabled
@@ -1711,6 +1752,7 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_DecodeFrame(
(self->frameOK && !(flags&AACDEC_CONCEAL)),
self->aacCommonData.workBufferCore1->mdctOutTemp
);
+ self->extGainDelay = self->streamInfo.aacSamplesPerFrame;
break;
case AACDEC_RENDER_ELDFB:
CBlock_FrequencyToTimeLowDelay(
@@ -1720,6 +1762,7 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_DecodeFrame(
self->streamInfo.aacSamplesPerFrame,
stride
);
+ self->extGainDelay = (self->streamInfo.aacSamplesPerFrame*2 - self->streamInfo.aacSamplesPerFrame/2 - 1)/2;
break;
default:
ErrorStatus = AAC_DEC_UNKNOWN;
@@ -1743,11 +1786,20 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_DecodeFrame(
);
}
+ /* Add additional concealment delay */
+ self->streamInfo.outputDelay += CConcealment_GetDelay(&self->concealCommonData) * self->streamInfo.aacSamplesPerFrame;
+
+ /* Map DRC data to StreamInfo structure */
+ aacDecoder_drcGetInfo (
+ self->hDrcInfo,
+ &self->streamInfo.drcPresMode,
+ &self->streamInfo.drcProgRefLev
+ );
/* Reorder channel type information tables. */
{
- AUDIO_CHANNEL_TYPE types[(6)];
- UCHAR idx[(6)];
+ AUDIO_CHANNEL_TYPE types[(8)];
+ UCHAR idx[(8)];
int c;
FDK_ASSERT(sizeof(self->channelType) == sizeof(types));
@@ -1757,8 +1809,8 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_DecodeFrame(
FDKmemcpy(idx, self->channelIndices, sizeof(idx));
for (c=0; c<aacChannels; c++) {
- self->channelType[self->channelOutputMapping[aacChannels-1][c]] = types[c];
- self->channelIndices[self->channelOutputMapping[aacChannels-1][c]] = idx[c];
+ self->channelType[self->channelOutputMapping[chOutMapIdx][c]] = types[c];
+ self->channelIndices[self->channelOutputMapping[chOutMapIdx][c]] = idx[c];
}
}
diff --git a/libAACdec/src/aacdecoder.h b/libAACdec/src/aacdecoder.h
index 16351e6..3541773 100644
--- a/libAACdec/src/aacdecoder.h
+++ b/libAACdec/src/aacdecoder.h
@@ -111,6 +111,7 @@ amm-info@iis.fraunhofer.de
#include "aacdec_drc.h"
#include "pcmutils_lib.h"
+ #include "limiter.h"
/* Capabilities flags */
@@ -176,27 +177,31 @@ struct AAC_DECODER_INSTANCE {
UINT flags; /*!< Flags for internal decoder use. DO NOT USE self::streaminfo::flags ! */
- MP4_ELEMENT_ID elements[7]; /*!< Table where the element Id's are listed */
- UCHAR elTags[7]; /*!< Table where the elements id Tags are listed */
- UCHAR chMapping[(6)]; /*!< Table of MPEG canonical order to bitstream channel order mapping. */
+ MP4_ELEMENT_ID elements[(8)]; /*!< Table where the element Id's are listed */
+ UCHAR elTags[(8)]; /*!< Table where the elements id Tags are listed */
+ UCHAR chMapping[(8)]; /*!< Table of MPEG canonical order to bitstream channel order mapping. */
- AUDIO_CHANNEL_TYPE channelType[(6)]; /*!< Audio channel type of each output audio channel (from 0 upto numChannels). */
- UCHAR channelIndices[(6)]; /*!< Audio channel index for each output audio channel (from 0 upto numChannels). */
+ AUDIO_CHANNEL_TYPE channelType[(8)]; /*!< Audio channel type of each output audio channel (from 0 upto numChannels). */
+ UCHAR channelIndices[(8)]; /*!< Audio channel index for each output audio channel (from 0 upto numChannels). */
/* See ISO/IEC 13818-7:2005(E), 8.5.3.2 Explicit channel mapping using a program_config_element() */
const UCHAR (*channelOutputMapping)[8]; /*!< Table for MPEG canonical order to output channel order mapping. */
-
+ UCHAR chMapIndex; /*!< Index to access one line of the channelOutputMapping table. This is required
+ because not all 8 channel configurations have the same output mapping. */
CProgramConfig pce;
CStreamInfo streamInfo; /*!< pointer to StreamInfo data (read from the bitstream) */
- CAacDecoderChannelInfo *pAacDecoderChannelInfo[(6)]; /*!< Temporal channel memory */
- CAacDecoderStaticChannelInfo *pAacDecoderStaticChannelInfo[(6)]; /*!< Persistent channel memory */
+ CAacDecoderChannelInfo *pAacDecoderChannelInfo[(8)]; /*!< Temporal channel memory */
+ CAacDecoderStaticChannelInfo *pAacDecoderStaticChannelInfo[(8)]; /*!< Persistent channel memory */
CAacDecoderCommonData aacCommonData; /*!< Temporal shared data for all channels hooked into pAacDecoderChannelInfo */
CConcealParams concealCommonData;
- INT concealChannels;
+
+ INT aacChannelsPrev; /*!< The amount of AAC core channels of the last successful decode call. */
+ AUDIO_CHANNEL_TYPE channelTypePrev[(8)]; /*!< Array holding the channelType values of the last successful decode call. */
+ UCHAR channelIndicesPrev[(8)]; /*!< Array holding the channelIndices values of the last successful decode call. */
HANDLE_SBRDECODER hSbrDecoder; /*!< SBR decoder handle. */
@@ -214,6 +219,12 @@ struct AAC_DECODER_INSTANCE {
CAncData ancData; /*!< structure to handle ancillary data */
HANDLE_PCM_DOWNMIX hPcmUtils; /*!< privat data for the PCM utils. */
+ TDLimiterPtr hLimiter; /*!< Handle of time domain limiter. */
+ UCHAR limiterEnableUser; /*!< The limiter configuration requested by the library user */
+ UCHAR limiterEnableCurr; /*!< The current limiter configuration. */
+
+ FIXP_DBL extGain[1]; /*!< Gain that must be applied to the output signal. */
+ UINT extGainDelay; /*!< Delay that must be accounted for extGain. */
};
diff --git a/libAACdec/src/aacdecoder_lib.cpp b/libAACdec/src/aacdecoder_lib.cpp
index ec8f41e..82f85ab 100644
--- a/libAACdec/src/aacdecoder_lib.cpp
+++ b/libAACdec/src/aacdecoder_lib.cpp
@@ -110,7 +110,7 @@ amm-info@iis.fraunhofer.de
/* Decoder library info */
#define AACDECODER_LIB_VL0 2
#define AACDECODER_LIB_VL1 5
-#define AACDECODER_LIB_VL2 5
+#define AACDECODER_LIB_VL2 10
#define AACDECODER_LIB_TITLE "AAC Decoder Lib"
#define AACDECODER_LIB_BUILD_DATE __DATE__
#define AACDECODER_LIB_BUILD_TIME __TIME__
@@ -397,12 +397,14 @@ aacDecoder_SetParam ( const HANDLE_AACDECODER self, /*!< Handle of the decode
CConcealParams *pConcealData = NULL;
HANDLE_AAC_DRC hDrcInfo = NULL;
HANDLE_PCM_DOWNMIX hPcmDmx = NULL;
+ TDLimiterPtr hPcmTdl = NULL;
/* check decoder handle */
if (self != NULL) {
pConcealData = &self->concealCommonData;
hDrcInfo = self->hDrcInfo;
hPcmDmx = self->hPcmUtils;
+ hPcmTdl = self->hLimiter;
} else {
errorStatus = AAC_DEC_INVALID_HANDLE;
}
@@ -420,8 +422,8 @@ aacDecoder_SetParam ( const HANDLE_AACDECODER self, /*!< Handle of the decode
self->outputInterleaved = value;
break;
- case AAC_PCM_OUTPUT_CHANNELS:
- if (value < -1 || value > (6)) {
+ case AAC_PCM_MIN_OUTPUT_CHANNELS:
+ if (value < -1 || value > (8)) {
return AAC_DEC_SET_PARAM_FAIL;
}
{
@@ -429,7 +431,30 @@ aacDecoder_SetParam ( const HANDLE_AACDECODER self, /*!< Handle of the decode
err = pcmDmx_SetParam (
hPcmDmx,
- NUMBER_OF_OUTPUT_CHANNELS,
+ MIN_NUMBER_OF_OUTPUT_CHANNELS,
+ value );
+
+ switch (err) {
+ case PCMDMX_OK:
+ break;
+ case PCMDMX_INVALID_HANDLE:
+ return AAC_DEC_INVALID_HANDLE;
+ default:
+ return AAC_DEC_SET_PARAM_FAIL;
+ }
+ }
+ break;
+
+ case AAC_PCM_MAX_OUTPUT_CHANNELS:
+ if (value < -1 || value > (8)) {
+ return AAC_DEC_SET_PARAM_FAIL;
+ }
+ {
+ PCMDMX_ERROR err;
+
+ err = pcmDmx_SetParam (
+ hPcmDmx,
+ MAX_NUMBER_OF_OUTPUT_CHANNELS,
value );
switch (err) {
@@ -449,7 +474,7 @@ aacDecoder_SetParam ( const HANDLE_AACDECODER self, /*!< Handle of the decode
err = pcmDmx_SetParam (
hPcmDmx,
- DUAL_CHANNEL_DOWNMIX_MODE,
+ DMX_DUAL_CHANNEL_MODE,
value );
switch (err) {
@@ -463,6 +488,47 @@ aacDecoder_SetParam ( const HANDLE_AACDECODER self, /*!< Handle of the decode
}
break;
+
+ case AAC_PCM_LIMITER_ENABLE:
+ if (value < -1 || value > 1) {
+ return AAC_DEC_SET_PARAM_FAIL;
+ }
+ if (self == NULL) {
+ return AAC_DEC_INVALID_HANDLE;
+ }
+ self->limiterEnableUser = value;
+ break;
+
+ case AAC_PCM_LIMITER_ATTACK_TIME:
+ if (value <= 0) { /* module function converts value to unsigned */
+ return AAC_DEC_SET_PARAM_FAIL;
+ }
+ switch (setLimiterAttack(hPcmTdl, value)) {
+ case TDLIMIT_OK:
+ break;
+ case TDLIMIT_INVALID_HANDLE:
+ return AAC_DEC_INVALID_HANDLE;
+ case TDLIMIT_INVALID_PARAMETER:
+ default:
+ return AAC_DEC_SET_PARAM_FAIL;
+ }
+ break;
+
+ case AAC_PCM_LIMITER_RELEAS_TIME:
+ if (value <= 0) { /* module function converts value to unsigned */
+ return AAC_DEC_SET_PARAM_FAIL;
+ }
+ switch (setLimiterRelease(hPcmTdl, value)) {
+ case TDLIMIT_OK:
+ break;
+ case TDLIMIT_INVALID_HANDLE:
+ return AAC_DEC_INVALID_HANDLE;
+ case TDLIMIT_INVALID_PARAMETER:
+ default:
+ return AAC_DEC_SET_PARAM_FAIL;
+ }
+ break;
+
case AAC_PCM_OUTPUT_CHANNEL_MAPPING:
switch (value) {
case 0:
@@ -609,6 +675,14 @@ LINKSPEC_CPP HANDLE_AACDECODER aacDecoder_Open(TRANSPORT_TYPE transportFmt, UINT
goto bail;
}
+ aacDec->hLimiter = createLimiter(TDL_ATTACK_DEFAULT_MS, TDL_RELEASE_DEFAULT_MS, SAMPLE_MAX, (8), 96000);
+ if (NULL == aacDec->hLimiter) {
+ err = -1;
+ goto bail;
+ }
+ aacDec->limiterEnableUser = (UCHAR)-1;
+ aacDec->limiterEnableCurr = 0;
+
/* Assure that all modules have same delay */
@@ -768,6 +842,7 @@ LINKSPEC_CPP AAC_DECODER_ERROR aacDecoder_DecodeFrame(
/* Signal bit stream interruption to other modules if required. */
if ( fTpInterruption || (flags & (AACDEC_INTR|AACDEC_CLRHIST)) )
{
+ sbrDecoder_SetParam(self->hSbrDecoder, SBR_CLEAR_HISTORY, (flags&AACDEC_CLRHIST));
aacDecoder_SignalInterruption(self);
if ( ! (flags & AACDEC_INTR) ) {
ErrorStatus = AAC_DEC_TRANSPORT_SYNC_ERROR;
@@ -783,6 +858,19 @@ LINKSPEC_CPP AAC_DECODER_ERROR aacDecoder_DecodeFrame(
self->streamInfo.numBadBytes = 0;
self->streamInfo.numTotalBytes = 0;
}
+ /* Reset the output delay field. The modules will add their figures one after another. */
+ self->streamInfo.outputDelay = 0;
+
+ if (self->limiterEnableUser==(UCHAR)-1) {
+ /* Enbale limiter for all non-lowdelay AOT's. */
+ self->limiterEnableCurr = ( self->flags & (AC_LD|AC_ELD) ) ? 0 : 1;
+ }
+ else {
+ /* Use limiter configuration as requested. */
+ self->limiterEnableCurr = self->limiterEnableUser;
+ }
+ /* reset limiter gain on a per frame basis */
+ self->extGain[0] = FL2FXCONST_DBL(1.0f/(float)(1<<TDL_GAIN_SCALING));
ErrorStatus = CAacDecoder_DecodeFrame(self,
@@ -825,11 +913,15 @@ LINKSPEC_CPP AAC_DECODER_ERROR aacDecoder_DecodeFrame(
if (self->sbrEnabled)
{
SBR_ERROR sbrError = SBRDEC_OK;
+ int chOutMapIdx = ((self->chMapIndex==0) && (self->streamInfo.numChannels<7)) ? self->streamInfo.numChannels : self->chMapIndex;
/* set params */
sbrDecoder_SetParam ( self->hSbrDecoder,
SBR_SYSTEM_BITSTREAM_DELAY,
self->sbrParams.bsDelay);
+ sbrDecoder_SetParam ( self->hSbrDecoder,
+ SBR_FLUSH_DATA,
+ (flags & AACDEC_FLUSH) );
if ( self->streamInfo.aot == AOT_ER_AAC_ELD ) {
/* Configure QMF */
@@ -838,7 +930,16 @@ LINKSPEC_CPP AAC_DECODER_ERROR aacDecoder_DecodeFrame(
(self->flags & AC_LD_MPS) ? 1 : 0 );
}
+ {
+ PCMDMX_ERROR dmxErr;
+ INT maxOutCh = 0;
+ dmxErr = pcmDmx_GetParam(self->hPcmUtils, MAX_NUMBER_OF_OUTPUT_CHANNELS, &maxOutCh);
+ if ( (dmxErr == PCMDMX_OK) && (maxOutCh == 1) ) {
+ /* Disable PS processing if we have to create a mono output signal. */
+ self->psPossible = 0;
+ }
+ }
/* apply SBR processing */
@@ -846,23 +947,29 @@ LINKSPEC_CPP AAC_DECODER_ERROR aacDecoder_DecodeFrame(
pTimeData,
&self->streamInfo.numChannels,
&self->streamInfo.sampleRate,
- self->channelOutputMapping[self->streamInfo.numChannels-1],
+ self->channelOutputMapping[chOutMapIdx],
interleaved,
self->frameOK,
&self->psPossible);
if (sbrError == SBRDEC_OK) {
+ #define UPS_SCALE 2 /* Maximum upsampling factor is 4 (CELP+SBR) */
+ FIXP_DBL upsampleFactor = FL2FXCONST_DBL(1.0f/(1<<UPS_SCALE));
/* Update data in streaminfo structure. Assume that the SBR upsampling factor is either 1 or 2 */
self->flags |= AC_SBR_PRESENT;
if (self->streamInfo.aacSampleRate != self->streamInfo.sampleRate) {
if (self->streamInfo.frameSize == 768) {
- self->streamInfo.frameSize = (self->streamInfo.aacSamplesPerFrame * 8) / 3;
+ upsampleFactor = FL2FXCONST_DBL(8.0f/(3<<UPS_SCALE));
} else {
- self->streamInfo.frameSize = self->streamInfo.aacSamplesPerFrame << 1;
+ upsampleFactor = FL2FXCONST_DBL(2.0f/(1<<UPS_SCALE));
}
}
+ /* Apply upsampling factor to both the core frame length and the core delay */
+ self->streamInfo.frameSize = (INT)fMult((FIXP_DBL)self->streamInfo.aacSamplesPerFrame<<UPS_SCALE, upsampleFactor);
+ self->streamInfo.outputDelay = (UINT)(INT)fMult((FIXP_DBL)self->streamInfo.outputDelay<<UPS_SCALE, upsampleFactor);
+ self->streamInfo.outputDelay += sbrDecoder_GetDelay( self->hSbrDecoder );
if (self->psPossible) {
self->flags |= AC_PS_PRESENT;
@@ -870,19 +977,20 @@ LINKSPEC_CPP AAC_DECODER_ERROR aacDecoder_DecodeFrame(
self->channelType[1] = ACT_FRONT;
self->channelIndices[0] = 0;
self->channelIndices[1] = 1;
- } else {
- self->flags &= ~AC_PS_PRESENT;
}
}
}
+ {
+ INT pcmLimiterScale = 0;
+ PCMDMX_ERROR dmxErr = PCMDMX_OK;
if ( flags & (AACDEC_INTR | AACDEC_CLRHIST) ) {
/* delete data from the past (e.g. mixdown coeficients) */
pcmDmx_Reset( self->hPcmUtils, PCMDMX_RESET_BS_DATA );
}
/* do PCM post processing */
- pcmDmx_ApplyFrame (
+ dmxErr = pcmDmx_ApplyFrame (
self->hPcmUtils,
pTimeData,
self->streamInfo.frameSize,
@@ -890,9 +998,39 @@ LINKSPEC_CPP AAC_DECODER_ERROR aacDecoder_DecodeFrame(
interleaved,
self->channelType,
self->channelIndices,
- self->channelOutputMapping
+ self->channelOutputMapping,
+ (self->limiterEnableCurr) ? &pcmLimiterScale : NULL
);
+ if (dmxErr == PCMDMX_INVALID_MODE) {
+ /* Announce the framework that the current combination of channel configuration and downmix
+ * settings are not know to produce a predictable behavior and thus maybe produce strange output. */
+ ErrorStatus = AAC_DEC_DECODE_FRAME_ERROR;
+ }
+ if ( flags & AACDEC_CLRHIST ) {
+ /* Delete the delayed signal. */
+ resetLimiter(self->hLimiter);
+ }
+ if (self->limiterEnableCurr)
+ {
+ /* Set actual signal parameters */
+ setLimiterNChannels(self->hLimiter, self->streamInfo.numChannels);
+ setLimiterSampleRate(self->hLimiter, self->streamInfo.sampleRate);
+
+ applyLimiter(
+ self->hLimiter,
+ pTimeData,
+ self->extGain,
+ &pcmLimiterScale,
+ 1,
+ self->extGainDelay,
+ self->streamInfo.frameSize
+ );
+
+ /* Announce the additional limiter output delay */
+ self->streamInfo.outputDelay += getLimiterDelay(self->hLimiter);
+ }
+ }
/* Signal interruption to take effect in next frame. */
@@ -917,6 +1055,9 @@ LINKSPEC_CPP void aacDecoder_Close ( HANDLE_AACDECODER self )
return;
+ if (self->hLimiter != NULL) {
+ destroyLimiter(self->hLimiter);
+ }
if (self->hPcmUtils != NULL) {
pcmDmx_Close( &self->hPcmUtils );
diff --git a/libAACdec/src/conceal.cpp b/libAACdec/src/conceal.cpp
index c26051c..1c313ef 100644
--- a/libAACdec/src/conceal.cpp
+++ b/libAACdec/src/conceal.cpp
@@ -762,7 +762,6 @@ int
CConcealment_UpdateState( hConcealmentInfo,
frameOk );
- if ( !frameOk )
{
/* Create data for signal rendering according to the selected concealment method and decoder operating mode. */
@@ -775,11 +774,13 @@ int
{
default:
case ConcealMethodMute:
- /* Mute spectral data in case of errors */
- FDKmemclear(pAacDecoderChannelInfo->pSpectralCoefficient, samplesPerFrame * sizeof(FIXP_DBL));
- /* Set last window shape */
- pAacDecoderChannelInfo->icsInfo.WindowShape = hConcealmentInfo->windowShape;
- appliedProcessing = 1;
+ if (!frameOk) {
+ /* Mute spectral data in case of errors */
+ FDKmemclear(pAacDecoderChannelInfo->pSpectralCoefficient, samplesPerFrame * sizeof(FIXP_DBL));
+ /* Set last window shape */
+ pAacDecoderChannelInfo->icsInfo.WindowShape = hConcealmentInfo->windowShape;
+ appliedProcessing = 1;
+ }
break;
case ConcealMethodNoise:
@@ -801,7 +802,7 @@ int
pSamplingRateInfo,
samplesPerFrame,
0, /* don't use tonal improvement */
- 0);
+ frameOk);
break;
}
diff --git a/libFDK/include/FDK_archdef.h b/libFDK/include/FDK_archdef.h
index cffb943..a831727 100644
--- a/libFDK/include/FDK_archdef.h
+++ b/libFDK/include/FDK_archdef.h
@@ -215,7 +215,7 @@ amm-info@iis.fraunhofer.de
#else
- #error >>>> Please set architecture characterization defines for your platform (FDK_HIGH_PERFORMANCE)! <<<<
+ #warning >>>> Please set architecture characterization defines for your platform (FDK_HIGH_PERFORMANCE)! <<<<
#endif /* Architecture switches */
diff --git a/libFDK/include/cplx_mul.h b/libFDK/include/cplx_mul.h
index 093ffa6..ce5c9f7 100644
--- a/libFDK/include/cplx_mul.h
+++ b/libFDK/include/cplx_mul.h
@@ -96,7 +96,7 @@ amm-info@iis.fraunhofer.de
#if defined(__CC_ARM) || defined(__arm__) || defined(_M_ARM) /* cppp replaced: elif */
#include "arm/cplx_mul.h"
-#elif defined(__GNUC__) && defined(__mips__) /* cppp replaced: elif */
+#elif defined(__GNUC__) && defined(__mips__) && __mips_isa_rev < 6
#include "mips/cplx_mul.h"
#endif /* #if defined all cores: bfin, arm, etc. */
diff --git a/libFDK/include/mips/cplx_mul.h b/libFDK/include/mips/cplx_mul.h
index e05d2b6..43cdbd0 100644
--- a/libFDK/include/mips/cplx_mul.h
+++ b/libFDK/include/mips/cplx_mul.h
@@ -89,7 +89,7 @@ amm-info@iis.fraunhofer.de
******************************************************************************/
-#if defined(__GNUC__) && defined(__mips__)
+#if defined(__GNUC__) && defined(__mips__) && __mips_isa_rev < 6
//#define FUNCTION_cplxMultDiv2_32x16
diff --git a/libMpegTPDec/include/tp_data.h b/libMpegTPDec/include/tp_data.h
index 5269858..c6e89b5 100644
--- a/libMpegTPDec/include/tp_data.h
+++ b/libMpegTPDec/include/tp_data.h
@@ -146,12 +146,15 @@ typedef struct
UCHAR FrontElementIsCpe[PC_FSB_CHANNELS_MAX];
UCHAR FrontElementTagSelect[PC_FSB_CHANNELS_MAX];
+ UCHAR FrontElementHeightInfo[PC_FSB_CHANNELS_MAX];
UCHAR SideElementIsCpe[PC_FSB_CHANNELS_MAX];
UCHAR SideElementTagSelect[PC_FSB_CHANNELS_MAX];
+ UCHAR SideElementHeightInfo[PC_FSB_CHANNELS_MAX];
UCHAR BackElementIsCpe[PC_FSB_CHANNELS_MAX];
UCHAR BackElementTagSelect[PC_FSB_CHANNELS_MAX];
+ UCHAR BackElementHeightInfo[PC_FSB_CHANNELS_MAX];
UCHAR LfeElementTagSelect[PC_LFE_CHANNELS_MAX];
@@ -324,16 +327,23 @@ int getSamplingRateIndex( UINT samplingRate )
*/
static inline int getNumberOfTotalChannels(int channelConfig)
{
- if (channelConfig > 0 && channelConfig < 8)
- return (channelConfig == 7)?8:channelConfig;
- else
+ switch (channelConfig) {
+ case 1: case 2: case 3:
+ case 4: case 5: case 6:
+ return channelConfig;
+ case 7: case 12: case 14:
+ return 8;
+ case 11:
+ return 7;
+ default:
return 0;
+ }
}
static inline
int getNumberOfEffectiveChannels(const int channelConfig)
-{
- const int n[] = {0,1,2,3,4,5,5,7};
+{ /* index: 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 */
+ const int n[] = {0,1,2,3,4,5,5,7,0,0, 0, 6, 7, 0, 7, 0};
return n[channelConfig];
}
diff --git a/libMpegTPDec/include/tpdec_lib.h b/libMpegTPDec/include/tpdec_lib.h
index fb4c41d..2ad397d 100644
--- a/libMpegTPDec/include/tpdec_lib.h
+++ b/libMpegTPDec/include/tpdec_lib.h
@@ -151,6 +151,7 @@ typedef enum {
#define PC_ASSOCDATA_MAX 8
#define PC_CCEL_MAX 16 /* CC elements */
#define PC_COMMENTLENGTH 256
+#define PC_NUM_HEIGHT_LAYER 3
/*!
@@ -239,14 +240,20 @@ int CProgramConfig_LookupElement(
);
/**
- * \brief Get table of elements in canonical order.
- * \param pPce A valid program config structure.
- * \param table An array where the element IDs are stored.
- * \return Total element count including all SCE, CPE and LFE.
+ * \brief Get table of elements in canonical order from a
+ * give program config field.
+ * \param pPce A valid program config structure.
+ * \param table An array where the element IDs are stored.
+ * \param elListSize The length of the table array.
+ * \param pChMapIdx Pointer to a field receiving the corresponding
+ * implicit channel configuration index of the given
+ * PCE. If none can be found it receives the value 0.
+ * \return Total element count including all SCE, CPE and LFE.
*/
int CProgramConfig_GetElementTable( const CProgramConfig *pPce,
MP4_ELEMENT_ID table[],
- const INT elListSize );
+ const INT elListSize,
+ UCHAR *pChMapIdx );
/**
* \brief Initialize a given AudioSpecificConfig structure.
diff --git a/libMpegTPDec/src/tpdec_asc.cpp b/libMpegTPDec/src/tpdec_asc.cpp
index 4d7cc02..82adec1 100644
--- a/libMpegTPDec/src/tpdec_asc.cpp
+++ b/libMpegTPDec/src/tpdec_asc.cpp
@@ -90,6 +90,9 @@ amm-info@iis.fraunhofer.de
#include "tpdec_lib.h"
#include "tp_data.h"
+#ifdef TP_PCE_ENABLE
+#include "FDK_crc.h"
+#endif
void CProgramConfig_Reset(CProgramConfig *pPce)
@@ -111,13 +114,75 @@ int CProgramConfig_IsValid ( const CProgramConfig *pPce )
}
#ifdef TP_PCE_ENABLE
+#define PCE_HEIGHT_EXT_SYNC ( 0xAC )
+
+/*
+ * Read the extension for height info.
+ * return 0 if successfull or -1 if the CRC failed.
+ */
+static
+int CProgramConfig_ReadHeightExt(
+ CProgramConfig *pPce,
+ HANDLE_FDK_BITSTREAM bs,
+ int * const bytesAvailable,
+ const UINT alignmentAnchor
+ )
+{
+ int err = 0;
+ FDK_CRCINFO crcInfo; /* CRC state info */
+ INT crcReg;
+ FDKcrcInit(&crcInfo, 0x07, 0xFF, 8);
+ crcReg = FDKcrcStartReg(&crcInfo, bs, 0);
+ UINT startAnchor = FDKgetValidBits(bs);
+
+ FDK_ASSERT(pPce != NULL);
+ FDK_ASSERT(bs != NULL);
+ FDK_ASSERT(bytesAvailable != NULL);
+
+ if ( (startAnchor >= 24) && (*bytesAvailable >= 3)
+ && (FDKreadBits(bs,8) == PCE_HEIGHT_EXT_SYNC) )
+ {
+ int i;
+
+ for (i=0; i < pPce->NumFrontChannelElements; i++)
+ {
+ pPce->FrontElementHeightInfo[i] = (UCHAR) FDKreadBits(bs,2);
+ }
+ for (i=0; i < pPce->NumSideChannelElements; i++)
+ {
+ pPce->SideElementHeightInfo[i] = (UCHAR) FDKreadBits(bs,2);
+ }
+ for (i=0; i < pPce->NumBackChannelElements; i++)
+ {
+ pPce->BackElementHeightInfo[i] = (UCHAR) FDKreadBits(bs,2);
+ }
+ FDKbyteAlign(bs, alignmentAnchor);
+
+ FDKcrcEndReg(&crcInfo, bs, crcReg);
+ if ((USHORT)FDKreadBits(bs,8) != FDKcrcGetCRC(&crcInfo)) {
+ /* CRC failed */
+ err = -1;
+ }
+ }
+ else {
+ /* No valid extension data found -> restore the initial bitbuffer state */
+ FDKpushBack(bs, startAnchor - FDKgetValidBits(bs));
+ }
+
+ /* Always report the bytes read. */
+ *bytesAvailable -= (startAnchor - FDKgetValidBits(bs)) >> 3;
+
+ return (err);
+}
+
void CProgramConfig_Read(
CProgramConfig *pPce,
HANDLE_FDK_BITSTREAM bs,
UINT alignmentAnchor
)
{
- int i;
+ int i, err = 0;
+ int commentBytes;
pPce->NumEffectiveChannels = 0;
pPce->NumChannels = 0;
@@ -190,8 +255,12 @@ void CProgramConfig_Read(
FDKbyteAlign(bs, alignmentAnchor);
pPce->CommentFieldBytes = (UCHAR) FDKreadBits(bs,8);
+ commentBytes = pPce->CommentFieldBytes;
+
+ /* Search for height info extension and read it if available */
+ err = CProgramConfig_ReadHeightExt( pPce, bs, &commentBytes, alignmentAnchor );
- for (i=0; i < pPce->CommentFieldBytes; i++)
+ for (i=0; i < commentBytes; i++)
{
UCHAR text;
@@ -203,7 +272,7 @@ void CProgramConfig_Read(
}
}
- pPce->isValid = 1;
+ pPce->isValid = (err) ? 0 : 1;
}
/*
@@ -235,6 +304,10 @@ int CProgramConfig_Compare ( const CProgramConfig * const pPce1,
} else {
int el, numCh1 = 0, numCh2 = 0;
for (el = 0; el < pPce1->NumFrontChannelElements; el += 1) {
+ if (pPce1->FrontElementHeightInfo[el] != pPce2->FrontElementHeightInfo[el]) {
+ result = 2; /* different height info */
+ break;
+ }
numCh1 += pPce1->FrontElementIsCpe[el] ? 2 : 1;
numCh2 += pPce2->FrontElementIsCpe[el] ? 2 : 1;
}
@@ -248,6 +321,10 @@ int CProgramConfig_Compare ( const CProgramConfig * const pPce1,
} else {
int el, numCh1 = 0, numCh2 = 0;
for (el = 0; el < pPce1->NumSideChannelElements; el += 1) {
+ if (pPce1->SideElementHeightInfo[el] != pPce2->SideElementHeightInfo[el]) {
+ result = 2; /* different height info */
+ break;
+ }
numCh1 += pPce1->SideElementIsCpe[el] ? 2 : 1;
numCh2 += pPce2->SideElementIsCpe[el] ? 2 : 1;
}
@@ -261,6 +338,10 @@ int CProgramConfig_Compare ( const CProgramConfig * const pPce1,
} else {
int el, numCh1 = 0, numCh2 = 0;
for (el = 0; el < pPce1->NumBackChannelElements; el += 1) {
+ if (pPce1->BackElementHeightInfo[el] != pPce2->BackElementHeightInfo[el]) {
+ result = 2; /* different height info */
+ break;
+ }
numCh1 += pPce1->BackElementIsCpe[el] ? 2 : 1;
numCh2 += pPce2->BackElementIsCpe[el] ? 2 : 1;
}
@@ -290,6 +371,44 @@ void CProgramConfig_GetDefault( CProgramConfig *pPce,
switch (channelConfig) {
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+ case 32: /* 7.1 side channel configuration as defined in FDK_audio.h */
+ pPce->NumFrontChannelElements = 2;
+ pPce->FrontElementIsCpe[0] = 0;
+ pPce->FrontElementIsCpe[1] = 1;
+ pPce->NumSideChannelElements = 1;
+ pPce->SideElementIsCpe[0] = 1;
+ pPce->NumBackChannelElements = 1;
+ pPce->BackElementIsCpe[0] = 1;
+ pPce->NumLfeChannelElements = 1;
+ pPce->NumChannels = 8;
+ pPce->NumEffectiveChannels = 7;
+ pPce->isValid = 1;
+ break;
+ /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+ case 12: /* 3/0/4.1ch surround back */
+ pPce->BackElementIsCpe[1] = 1;
+ pPce->NumChannels += 1;
+ pPce->NumEffectiveChannels += 1;
+ case 11: /* 3/0/3.1ch */
+ pPce->NumFrontChannelElements += 2;
+ pPce->FrontElementIsCpe[0] = 0;
+ pPce->FrontElementIsCpe[1] = 1;
+ pPce->NumBackChannelElements += 2;
+ pPce->BackElementIsCpe[0] = 1;
+ pPce->BackElementIsCpe[1] += 0;
+ pPce->NumLfeChannelElements += 1;
+ pPce->NumChannels += 7;
+ pPce->NumEffectiveChannels += 6;
+ pPce->isValid = 1;
+ break;
+ /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+ case 14: /* 2/0/0-3/0/2-0.1ch front height */
+ pPce->FrontElementHeightInfo[2] = 1; /* Top speaker */
+ case 7: /* 5/0/2.1ch front */
+ pPce->NumFrontChannelElements += 1;
+ pPce->FrontElementIsCpe[2] = 1;
+ pPce->NumChannels += 2;
+ pPce->NumEffectiveChannels += 2;
case 6: /* 3/0/2.1ch */
pPce->NumLfeChannelElements += 1;
pPce->NumChannels += 1;
@@ -348,10 +467,11 @@ void CProgramConfig_GetDefault( CProgramConfig *pPce,
/**
* \brief get implicit audio channel type for given channelConfig and MPEG ordered channel index
- * \param channelConfig MPEG channelConfiguration from 1 upto 7
+ * \param channelConfig MPEG channelConfiguration from 1 upto 14
* \param index MPEG channel order index
* \return audio channel type.
*/
+static
void getImplicitAudioChannelTypeAndIndex(
AUDIO_CHANNEL_TYPE *chType,
UCHAR *chIndex,
@@ -364,9 +484,9 @@ void getImplicitAudioChannelTypeAndIndex(
*chIndex = index;
} else {
switch (channelConfig) {
- case MODE_1_2_1:
- case MODE_1_2_2:
- case MODE_1_2_2_1:
+ case 4: /* SCE, CPE, SCE */
+ case 5: /* SCE, CPE, CPE */
+ case 6: /* SCE, CPE, CPE, LFE */
switch (index) {
case 3:
case 4:
@@ -379,12 +499,12 @@ void getImplicitAudioChannelTypeAndIndex(
break;
}
break;
- case MODE_1_2_2_2_1:
+ case 7: /* SCE,CPE,CPE,CPE,LFE */
switch (index) {
case 3:
case 4:
- *chType = ACT_SIDE;
- *chIndex = index - 3;
+ *chType = ACT_FRONT;
+ *chIndex = index;
break;
case 5:
case 6:
@@ -397,6 +517,42 @@ void getImplicitAudioChannelTypeAndIndex(
break;
}
break;
+ case 11: /* SCE,CPE,CPE,SCE,LFE */
+ if (index < 6) {
+ *chType = ACT_BACK;
+ *chIndex = index - 3;
+ } else {
+ *chType = ACT_LFE;
+ *chIndex = 0;
+ }
+ break;
+ case 12: /* SCE,CPE,CPE,CPE,LFE */
+ if (index < 7) {
+ *chType = ACT_BACK;
+ *chIndex = index - 3;
+ } else {
+ *chType = ACT_LFE;
+ *chIndex = 0;
+ }
+ break;
+ case 14: /* SCE,CPE,CPE,LFE,CPE */
+ switch (index) {
+ case 3:
+ case 4:
+ *chType = ACT_BACK;
+ *chIndex = index - 3;
+ break;
+ case 5:
+ *chType = ACT_LFE;
+ *chIndex = 0;
+ break;
+ case 6:
+ case 7:
+ *chType = ACT_FRONT_TOP;
+ *chIndex = index - 6; /* handle the top layer independently */
+ break;
+ }
+ break;
default:
*chType = ACT_NONE;
break;
@@ -467,7 +623,24 @@ int CProgramConfig_LookupElement(
else {
/* Accept the additional channel(s), only if the tag is in the lists */
int isCpe = 0, i;
- int cc = 0, fc = 0, sc = 0, bc = 0, lc = 0, ec = 0; /* Channel and element counters */
+ /* Element counter */
+ int ec[PC_NUM_HEIGHT_LAYER] = {0};
+ /* Channel counters */
+ int cc[PC_NUM_HEIGHT_LAYER] = {0};
+ int fc[PC_NUM_HEIGHT_LAYER] = {0};
+ int sc[PC_NUM_HEIGHT_LAYER] = {0};
+ int bc[PC_NUM_HEIGHT_LAYER] = {0};
+ int lc = 0;;
+
+ /* General MPEG (PCE) composition rules:
+ - Over all:
+ <normal height channels><top height channels><bottom height channels>
+ - Within each height layer:
+ <front channels><side channels><back channels>
+ - Exception:
+ The LFE channels have no height info and thus they are arranged at the very
+ end of the normal height layer channels.
+ */
switch (elType)
{
@@ -476,87 +649,206 @@ int CProgramConfig_LookupElement(
case ID_SCE:
/* search in front channels */
for (i = 0; i < pPce->NumFrontChannelElements; i++) {
+ int heightLayer = pPce->FrontElementHeightInfo[i];
if (isCpe == pPce->FrontElementIsCpe[i] && pPce->FrontElementTagSelect[i] == tag) {
- chMapping[cc] = channelIdx;
- chType[cc] = ACT_FRONT;
- chIndex[cc] = fc;
+ int h, elIdx = ec[heightLayer], chIdx = cc[heightLayer];
+ AUDIO_CHANNEL_TYPE aChType = (AUDIO_CHANNEL_TYPE)((heightLayer<<4) | ACT_FRONT);
+ for (h = heightLayer-1; h >= 0; h-=1) {
+ int el;
+ /* Count front channels/elements */
+ for (el = 0; el < pPce->NumFrontChannelElements; el+=1) {
+ if (pPce->FrontElementHeightInfo[el] == h) {
+ elIdx += 1;
+ chIdx += (pPce->FrontElementIsCpe[el]) ? 2 : 1;
+ }
+ }
+ /* Count side channels/elements */
+ for (el = 0; el < pPce->NumSideChannelElements; el+=1) {
+ if (pPce->SideElementHeightInfo[el] == h) {
+ elIdx += 1;
+ chIdx += (pPce->SideElementIsCpe[el]) ? 2 : 1;
+ }
+ }
+ /* Count back channels/elements */
+ for (el = 0; el < pPce->NumBackChannelElements; el+=1) {
+ if (pPce->BackElementHeightInfo[el] == h) {
+ elIdx += 1;
+ chIdx += (pPce->BackElementIsCpe[el]) ? 2 : 1;
+ }
+ }
+ if (h == 0) { /* normal height */
+ elIdx += pPce->NumLfeChannelElements;
+ chIdx += pPce->NumLfeChannelElements;
+ }
+ }
+ chMapping[chIdx] = channelIdx;
+ chType[chIdx] = aChType;
+ chIndex[chIdx] = fc[heightLayer];
if (isCpe) {
- chMapping[cc+1] = channelIdx+1;
- chType[cc+1] = ACT_FRONT;
- chIndex[cc+1] = fc+1;
+ chMapping[chIdx+1] = channelIdx+1;
+ chType[chIdx+1] = aChType;
+ chIndex[chIdx+1] = fc[heightLayer]+1;
}
- *elMapping = ec;
+ *elMapping = elIdx;
return 1;
}
- ec++;
+ ec[heightLayer] += 1;
if (pPce->FrontElementIsCpe[i]) {
- cc+=2; fc+=2;
+ cc[heightLayer] += 2;
+ fc[heightLayer] += 2;
} else {
- cc++; fc++;
+ cc[heightLayer] += 1;
+ fc[heightLayer] += 1;
}
}
/* search in side channels */
for (i = 0; i < pPce->NumSideChannelElements; i++) {
+ int heightLayer = pPce->SideElementHeightInfo[i];
if (isCpe == pPce->SideElementIsCpe[i] && pPce->SideElementTagSelect[i] == tag) {
- chMapping[cc] = channelIdx;
- chType[cc] = ACT_SIDE;
- chIndex[cc] = sc;
+ int h, elIdx = ec[heightLayer], chIdx = cc[heightLayer];
+ AUDIO_CHANNEL_TYPE aChType = (AUDIO_CHANNEL_TYPE)((heightLayer<<4) | ACT_SIDE);
+ for (h = heightLayer-1; h >= 0; h-=1) {
+ int el;
+ /* Count front channels/elements */
+ for (el = 0; el < pPce->NumFrontChannelElements; el+=1) {
+ if (pPce->FrontElementHeightInfo[el] == h) {
+ elIdx += 1;
+ chIdx += (pPce->FrontElementIsCpe[el]) ? 2 : 1;
+ }
+ }
+ /* Count side channels/elements */
+ for (el = 0; el < pPce->NumSideChannelElements; el+=1) {
+ if (pPce->SideElementHeightInfo[el] == h) {
+ elIdx += 1;
+ chIdx += (pPce->SideElementIsCpe[el]) ? 2 : 1;
+ }
+ }
+ /* Count back channels/elements */
+ for (el = 0; el < pPce->NumBackChannelElements; el+=1) {
+ if (pPce->BackElementHeightInfo[el] == h) {
+ elIdx += 1;
+ chIdx += (pPce->BackElementIsCpe[el]) ? 2 : 1;
+ }
+ }
+ if (h == 0) { /* LFE channels belong to the normal height layer */
+ elIdx += pPce->NumLfeChannelElements;
+ chIdx += pPce->NumLfeChannelElements;
+ }
+ }
+ chMapping[chIdx] = channelIdx;
+ chType[chIdx] = aChType;
+ chIndex[chIdx] = sc[heightLayer];
if (isCpe) {
- chMapping[cc+1] = channelIdx+1;
- chType[cc+1] = ACT_SIDE;
- chIndex[cc+1] = sc+1;
+ chMapping[chIdx+1] = channelIdx+1;
+ chType[chIdx+1] = aChType;
+ chIndex[chIdx+1] = sc[heightLayer]+1;
}
- *elMapping = ec;
+ *elMapping = elIdx;
return 1;
}
- ec++;
+ ec[heightLayer] += 1;
if (pPce->SideElementIsCpe[i]) {
- cc+=2; sc+=2;
+ cc[heightLayer] += 2;
+ sc[heightLayer] += 2;
} else {
- cc++; sc++;
+ cc[heightLayer] += 1;
+ sc[heightLayer] += 1;
}
}
/* search in back channels */
for (i = 0; i < pPce->NumBackChannelElements; i++) {
+ int heightLayer = pPce->BackElementHeightInfo[i];
if (isCpe == pPce->BackElementIsCpe[i] && pPce->BackElementTagSelect[i] == tag) {
- chMapping[cc] = channelIdx;
- chType[cc] = ACT_BACK;
- chIndex[cc] = bc;
+ int h, elIdx = ec[heightLayer], chIdx = cc[heightLayer];
+ AUDIO_CHANNEL_TYPE aChType = (AUDIO_CHANNEL_TYPE)((heightLayer<<4) | ACT_BACK);
+ for (h = heightLayer-1; h >= 0; h-=1) {
+ int el;
+ /* Count front channels/elements */
+ for (el = 0; el < pPce->NumFrontChannelElements; el+=1) {
+ if (pPce->FrontElementHeightInfo[el] == h) {
+ elIdx += 1;
+ chIdx += (pPce->FrontElementIsCpe[el]) ? 2 : 1;
+ }
+ }
+ /* Count side channels/elements */
+ for (el = 0; el < pPce->NumSideChannelElements; el+=1) {
+ if (pPce->SideElementHeightInfo[el] == h) {
+ elIdx += 1;
+ chIdx += (pPce->SideElementIsCpe[el]) ? 2 : 1;
+ }
+ }
+ /* Count back channels/elements */
+ for (el = 0; el < pPce->NumBackChannelElements; el+=1) {
+ if (pPce->BackElementHeightInfo[el] == h) {
+ elIdx += 1;
+ chIdx += (pPce->BackElementIsCpe[el]) ? 2 : 1;
+ }
+ }
+ if (h == 0) { /* normal height */
+ elIdx += pPce->NumLfeChannelElements;
+ chIdx += pPce->NumLfeChannelElements;
+ }
+ }
+ chMapping[chIdx] = channelIdx;
+ chType[chIdx] = aChType;
+ chIndex[chIdx] = bc[heightLayer];
if (isCpe) {
- chMapping[cc+1] = channelIdx+1;
- chType[cc+1] = ACT_BACK;
- chIndex[cc+1] = bc+1;
+ chMapping[chIdx+1] = channelIdx+1;
+ chType[chIdx+1] = aChType;
+ chIndex[chIdx+1] = bc[heightLayer]+1;
}
- *elMapping = ec;
+ *elMapping = elIdx;
return 1;
}
- ec++;
+ ec[heightLayer] += 1;
if (pPce->BackElementIsCpe[i]) {
- cc+=2; bc+=2;
+ cc[heightLayer] += 2;
+ bc[heightLayer] += 2;
} else {
- cc++; bc++;
+ cc[heightLayer] += 1;
+ bc[heightLayer] += 1;
}
}
break;
case ID_LFE:
- /* Initialize channel counter and element counter */
- cc = pPce->NumEffectiveChannels;
- ec = pPce->NumFrontChannelElements+ pPce->NumSideChannelElements + pPce->NumBackChannelElements;
+ { /* Unfortunately we have to go through all normal height
+ layer elements to get the position of the LFE channels.
+ Start with counting the front channels/elements at normal height */
+ for (i = 0; i < pPce->NumFrontChannelElements; i+=1) {
+ int heightLayer = pPce->FrontElementHeightInfo[i];
+ ec[heightLayer] += 1;
+ cc[heightLayer] += (pPce->FrontElementIsCpe[i]) ? 2 : 1;
+ }
+ /* Count side channels/elements at normal height */
+ for (i = 0; i < pPce->NumSideChannelElements; i+=1) {
+ int heightLayer = pPce->SideElementHeightInfo[i];
+ ec[heightLayer] += 1;
+ cc[heightLayer] += (pPce->SideElementIsCpe[i]) ? 2 : 1;
+ }
+ /* Count back channels/elements at normal height */
+ for (i = 0; i < pPce->NumBackChannelElements; i+=1) {
+ int heightLayer = pPce->BackElementHeightInfo[i];
+ ec[heightLayer] += 1;
+ cc[heightLayer] += (pPce->BackElementIsCpe[i]) ? 2 : 1;
+ }
+
/* search in lfe channels */
for (i = 0; i < pPce->NumLfeChannelElements; i++) {
+ int elIdx = ec[0]; /* LFE channels belong to the normal height layer */
+ int chIdx = cc[0];
if ( pPce->LfeElementTagSelect[i] == tag ) {
- chMapping[cc] = channelIdx;
- *elMapping = ec;
- chType[cc] = ACT_LFE;
- chIndex[cc] = lc;
+ chMapping[chIdx] = channelIdx;
+ *elMapping = elIdx;
+ chType[chIdx] = ACT_LFE;
+ chIndex[chIdx] = lc;
return 1;
}
- ec++;
- cc++;
- lc++;
+ ec[0] += 1;
+ cc[0] += 1;
+ lc += 1;
}
- break;
+ } break;
/* Non audio elements */
case ID_CCE:
@@ -590,13 +882,19 @@ int CProgramConfig_LookupElement(
int CProgramConfig_GetElementTable(
const CProgramConfig *pPce,
MP4_ELEMENT_ID elList[],
- const INT elListSize
+ const INT elListSize,
+ UCHAR *pChMapIdx
)
{
int i, el = 0;
- if ( elListSize
- < pPce->NumFrontChannelElements + pPce->NumSideChannelElements + pPce->NumBackChannelElements + pPce->NumLfeChannelElements
+ FDK_ASSERT(elList != NULL);
+ FDK_ASSERT(pChMapIdx != NULL);
+
+ *pChMapIdx = 0;
+
+ if ( elListSize
+ < pPce->NumFrontChannelElements + pPce->NumSideChannelElements + pPce->NumBackChannelElements + pPce->NumLfeChannelElements
)
{
return 0;
@@ -623,6 +921,47 @@ int CProgramConfig_GetElementTable(
}
+ /* Find an corresponding channel configuration if possible */
+ switch (pPce->NumChannels) {
+ case 1: case 2: case 3: case 4: case 5: case 6:
+ /* One and two channels have no alternatives. The other ones are mapped directly to the
+ corresponding channel config. Because of legacy reasons or for lack of alternative mappings. */
+ *pChMapIdx = pPce->NumChannels;
+ break;
+ case 7:
+ {
+ C_ALLOC_SCRATCH_START(tmpPce, CProgramConfig, 1);
+ /* Create a PCE for the config to test ... */
+ CProgramConfig_GetDefault(tmpPce, 11);
+ /* ... and compare it with the given one. */
+ *pChMapIdx = (!(CProgramConfig_Compare(pPce, tmpPce)&0xE)) ? 11 : 0;
+ /* If compare result is 0 or 1 we can be sure that it is channel config 11. */
+ C_ALLOC_SCRATCH_END(tmpPce, CProgramConfig, 1);
+ }
+ break;
+ case 8:
+ { /* Try the four possible 7.1ch configurations. One after the other. */
+ UCHAR testCfg[4] = { 32, 14, 12, 7};
+ C_ALLOC_SCRATCH_START(tmpPce, CProgramConfig, 1);
+ for (i=0; i<4; i+=1) {
+ /* Create a PCE for the config to test ... */
+ CProgramConfig_GetDefault(tmpPce, testCfg[i]);
+ /* ... and compare it with the given one. */
+ if (!(CProgramConfig_Compare(pPce, tmpPce)&0xE)) {
+ /* If the compare result is 0 or 1 than the two channel configurations match. */
+ /* Explicit mapping of 7.1 side channel configuration to 7.1 rear channel mapping. */
+ *pChMapIdx = (testCfg[i]==32) ? 12 : testCfg[i];
+ }
+ }
+ C_ALLOC_SCRATCH_END(tmpPce, CProgramConfig, 1);
+ }
+ break;
+ default:
+ /* The PCE does not match any predefined channel configuration. */
+ *pChMapIdx = 0;
+ break;
+ }
+
return el;
}
#endif
@@ -714,7 +1053,7 @@ TRANSPORTDEC_ERROR GaSpecificConfig_Parse( CSGaSpecificConfig *self,
#ifdef TP_ELD_ENABLE
static INT ld_sbr_header( const CSAudioSpecificConfig *asc,
- HANDLE_FDK_BITSTREAM hBs,
+ HANDLE_FDK_BITSTREAM hBs,
CSTpCallBacks *cb )
{
const int channelConfiguration = asc->m_channelConfiguration;
@@ -728,6 +1067,8 @@ static INT ld_sbr_header( const CSAudioSpecificConfig *asc,
}
switch ( channelConfiguration ) {
+ case 14:
+ case 12:
case 7:
error |= cb->cbSbr(cb->cbSbrData, hBs, asc->m_samplingFrequency, asc->m_extensionSamplingFrequency, asc->m_samplesPerFrame, AOT_ER_AAC_ELD, ID_CPE, i++);
case 6:
@@ -737,6 +1078,8 @@ static INT ld_sbr_header( const CSAudioSpecificConfig *asc,
error |= cb->cbSbr(cb->cbSbrData, hBs, asc->m_samplingFrequency, asc->m_extensionSamplingFrequency, asc->m_samplesPerFrame, AOT_ER_AAC_ELD, ID_CPE, i++);
break;
+ case 11:
+ error |= cb->cbSbr(cb->cbSbrData, hBs, asc->m_samplingFrequency, asc->m_extensionSamplingFrequency, asc->m_samplesPerFrame, AOT_ER_AAC_ELD, ID_CPE, i++);
case 4:
error |= cb->cbSbr(cb->cbSbrData, hBs, asc->m_samplingFrequency, asc->m_extensionSamplingFrequency, asc->m_samplesPerFrame, AOT_ER_AAC_ELD, ID_CPE, i++);
error |= cb->cbSbr(cb->cbSbrData, hBs, asc->m_samplingFrequency, asc->m_extensionSamplingFrequency, asc->m_samplesPerFrame, AOT_ER_AAC_ELD, ID_SCE, i++);
@@ -802,24 +1145,6 @@ TRANSPORTDEC_ERROR EldSpecificConfig_Parse(
}
switch (eldExtType) {
- case ELDEXT_LDSAC:
- esc->m_useLdQmfTimeAlign = 1;
- if (cb->cbSsc != NULL) {
- ErrorStatus = (TRANSPORTDEC_ERROR)cb->cbSsc(
- cb->cbSscData,
- hBs,
- asc->m_aot,
- asc->m_samplingFrequency,
- 1, /* muxMode */
- len
- );
- } else {
- ErrorStatus = TRANSPORTDEC_UNSUPPORTED_FORMAT;
- }
- if (ErrorStatus != TRANSPORTDEC_OK) {
- goto bail;
- }
- break;
default:
for(cnt=0; cnt<len; cnt++) {
FDKreadBits(hBs, 8 );
diff --git a/libMpegTPDec/src/version b/libMpegTPDec/src/version
index 2803347..cda01c8 100644
--- a/libMpegTPDec/src/version
+++ b/libMpegTPDec/src/version
@@ -2,7 +2,7 @@
/* library info */
#define TP_LIB_VL0 2
#define TP_LIB_VL1 3
-#define TP_LIB_VL2 3
+#define TP_LIB_VL2 4
#define TP_LIB_TITLE "MPEG Transport"
#define TP_LIB_BUILD_DATE __DATE__
#define TP_LIB_BUILD_TIME __TIME__
diff --git a/libMpegTPEnc/include/tp_data.h b/libMpegTPEnc/include/tp_data.h
index 5269858..c6e89b5 100644
--- a/libMpegTPEnc/include/tp_data.h
+++ b/libMpegTPEnc/include/tp_data.h
@@ -146,12 +146,15 @@ typedef struct
UCHAR FrontElementIsCpe[PC_FSB_CHANNELS_MAX];
UCHAR FrontElementTagSelect[PC_FSB_CHANNELS_MAX];
+ UCHAR FrontElementHeightInfo[PC_FSB_CHANNELS_MAX];
UCHAR SideElementIsCpe[PC_FSB_CHANNELS_MAX];
UCHAR SideElementTagSelect[PC_FSB_CHANNELS_MAX];
+ UCHAR SideElementHeightInfo[PC_FSB_CHANNELS_MAX];
UCHAR BackElementIsCpe[PC_FSB_CHANNELS_MAX];
UCHAR BackElementTagSelect[PC_FSB_CHANNELS_MAX];
+ UCHAR BackElementHeightInfo[PC_FSB_CHANNELS_MAX];
UCHAR LfeElementTagSelect[PC_LFE_CHANNELS_MAX];
@@ -324,16 +327,23 @@ int getSamplingRateIndex( UINT samplingRate )
*/
static inline int getNumberOfTotalChannels(int channelConfig)
{
- if (channelConfig > 0 && channelConfig < 8)
- return (channelConfig == 7)?8:channelConfig;
- else
+ switch (channelConfig) {
+ case 1: case 2: case 3:
+ case 4: case 5: case 6:
+ return channelConfig;
+ case 7: case 12: case 14:
+ return 8;
+ case 11:
+ return 7;
+ default:
return 0;
+ }
}
static inline
int getNumberOfEffectiveChannels(const int channelConfig)
-{
- const int n[] = {0,1,2,3,4,5,5,7};
+{ /* index: 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 */
+ const int n[] = {0,1,2,3,4,5,5,7,0,0, 0, 6, 7, 0, 7, 0};
return n[channelConfig];
}
diff --git a/libMpegTPEnc/src/version b/libMpegTPEnc/src/version
index 2803347..cda01c8 100644
--- a/libMpegTPEnc/src/version
+++ b/libMpegTPEnc/src/version
@@ -2,7 +2,7 @@
/* library info */
#define TP_LIB_VL0 2
#define TP_LIB_VL1 3
-#define TP_LIB_VL2 3
+#define TP_LIB_VL2 4
#define TP_LIB_TITLE "MPEG Transport"
#define TP_LIB_BUILD_DATE __DATE__
#define TP_LIB_BUILD_TIME __TIME__
diff --git a/libPCMutils/include/limiter.h b/libPCMutils/include/limiter.h
new file mode 100644
index 0000000..0d3d701
--- /dev/null
+++ b/libPCMutils/include/limiter.h
@@ -0,0 +1,233 @@
+
+/* -----------------------------------------------------------------------------------------------------------
+Software License for The Fraunhofer FDK AAC Codec Library for Android
+
+ Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Frderung der angewandten Forschung e.V.
+ All rights reserved.
+
+ 1. INTRODUCTION
+The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements
+the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio.
+This FDK AAC Codec software is intended to be used on a wide variety of Android devices.
+
+AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual
+audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by
+independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part
+of the MPEG specifications.
+
+Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer)
+may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners
+individually for the purpose of encoding or decoding bit streams in products that are compliant with
+the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license
+these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec
+software may already be covered under those patent licenses when it is used for those licensed purposes only.
+
+Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality,
+are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional
+applications information and documentation.
+
+2. COPYRIGHT LICENSE
+
+Redistribution and use in source and binary forms, with or without modification, are permitted without
+payment of copyright license fees provided that you satisfy the following conditions:
+
+You must retain the complete text of this software license in redistributions of the FDK AAC Codec or
+your modifications thereto in source code form.
+
+You must retain the complete text of this software license in the documentation and/or other materials
+provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form.
+You must make available free of charge copies of the complete source code of the FDK AAC Codec and your
+modifications thereto to recipients of copies in binary form.
+
+The name of Fraunhofer may not be used to endorse or promote products derived from this library without
+prior written permission.
+
+You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec
+software or your modifications thereto.
+
+Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software
+and the date of any change. For modified versions of the FDK AAC Codec, the term
+"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term
+"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android."
+
+3. NO PATENT LICENSE
+
+NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer,
+ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with
+respect to this software.
+
+You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized
+by appropriate patent licenses.
+
+4. DISCLAIMER
+
+This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors
+"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties
+of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages,
+including but not limited to procurement of substitute goods or services; loss of use, data, or profits,
+or business interruption, however caused and on any theory of liability, whether in contract, strict
+liability, or tort (including negligence), arising in any way out of the use of this software, even if
+advised of the possibility of such damage.
+
+5. CONTACT INFORMATION
+
+Fraunhofer Institute for Integrated Circuits IIS
+Attention: Audio and Multimedia Departments - FDK AAC LL
+Am Wolfsmantel 33
+91058 Erlangen, Germany
+
+www.iis.fraunhofer.de/amm
+amm-info@iis.fraunhofer.de
+----------------------------------------------------------------------------------------------------------- */
+
+/************************ FDK PCM postprocessor module *********************
+
+ Author(s): Matthias Neusinger
+ Description: Hard limiter for clipping prevention
+
+*******************************************************************************/
+
+#ifndef _LIMITER_H_
+#define _LIMITER_H_
+
+
+#include "common_fix.h"
+
+#define TDL_ATTACK_DEFAULT_MS (15) /* default attack time in ms */
+#define TDL_RELEASE_DEFAULT_MS (50) /* default release time in ms */
+
+#define TDL_GAIN_SCALING (15) /* scaling of gain value. */
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+typedef enum {
+ TDLIMIT_OK = 0,
+
+ __error_codes_start = -100,
+
+ TDLIMIT_INVALID_HANDLE,
+ TDLIMIT_INVALID_PARAMETER,
+
+ __error_codes_end
+} TDLIMITER_ERROR;
+
+struct TDLimiter;
+typedef struct TDLimiter* TDLimiterPtr;
+
+/******************************************************************************
+* createLimiter *
+* maxAttackMs: maximum and initial attack/lookahead time in milliseconds *
+* releaseMs: release time in milliseconds (90% time constant) *
+* threshold: limiting threshold *
+* maxChannels: maximum and initial number of channels *
+* maxSampleRate: maximum and initial sampling rate in Hz *
+* returns: limiter handle *
+******************************************************************************/
+TDLimiterPtr createLimiter(unsigned int maxAttackMs,
+ unsigned int releaseMs,
+ INT_PCM threshold,
+ unsigned int maxChannels,
+ unsigned int maxSampleRate);
+
+
+/******************************************************************************
+* resetLimiter *
+* limiter: limiter handle *
+* returns: error code *
+******************************************************************************/
+TDLIMITER_ERROR resetLimiter(TDLimiterPtr limiter);
+
+
+/******************************************************************************
+* destroyLimiter *
+* limiter: limiter handle *
+* returns: error code *
+******************************************************************************/
+TDLIMITER_ERROR destroyLimiter(TDLimiterPtr limiter);
+
+/******************************************************************************
+* applyLimiter *
+* limiter: limiter handle *
+* pGain : pointer to gains to be applied to the signal before limiting, *
+* which are downscaled by TDL_GAIN_SCALING bit. *
+* These gains are delayed by gain_delay, and smoothed. *
+* Smoothing is done by a butterworth lowpass filter with a cutoff *
+* frequency which is fixed with respect to the sampling rate. *
+* It is a substitute for the smoothing due to windowing and *
+* overlap/add, if a gain is applied in frequency domain. *
+* gain_scale: pointer to scaling exponents to be applied to the signal before *
+* limiting, without delay and without smoothing *
+* gain_size: number of elements in pGain, currently restricted to 1 *
+* gain_delay: delay [samples] with which the gains in pGain shall be applied *
+* gain_delay <= nSamples *
+* samples: input/output buffer containing interleaved samples *
+* precision of output will be DFRACT_BITS-TDL_GAIN_SCALING bits *
+* nSamples: number of samples per channel *
+* returns: error code *
+******************************************************************************/
+TDLIMITER_ERROR applyLimiter(TDLimiterPtr limiter,
+ INT_PCM* samples,
+ FIXP_DBL* pGain,
+ const INT* gain_scale,
+ const UINT gain_size,
+ const UINT gain_delay,
+ const UINT nSamples);
+
+/******************************************************************************
+* getLimiterDelay *
+* limiter: limiter handle *
+* returns: exact delay caused by the limiter in samples *
+******************************************************************************/
+unsigned int getLimiterDelay(TDLimiterPtr limiter);
+
+/******************************************************************************
+* setLimiterNChannels *
+* limiter: limiter handle *
+* nChannels: number of channels ( <= maxChannels specified on create) *
+* returns: error code *
+******************************************************************************/
+TDLIMITER_ERROR setLimiterNChannels(TDLimiterPtr limiter, unsigned int nChannels);
+
+/******************************************************************************
+* setLimiterSampleRate *
+* limiter: limiter handle *
+* sampleRate: sampling rate in Hz ( <= maxSampleRate specified on create) *
+* returns: error code *
+******************************************************************************/
+TDLIMITER_ERROR setLimiterSampleRate(TDLimiterPtr limiter, unsigned int sampleRate);
+
+/******************************************************************************
+* setLimiterAttack *
+* limiter: limiter handle *
+* attackMs: attack time in ms ( <= maxAttackMs specified on create) *
+* returns: error code *
+******************************************************************************/
+TDLIMITER_ERROR setLimiterAttack(TDLimiterPtr limiter, unsigned int attackMs);
+
+/******************************************************************************
+* setLimiterRelease *
+* limiter: limiter handle *
+* releaseMs: release time in ms *
+* returns: error code *
+******************************************************************************/
+TDLIMITER_ERROR setLimiterRelease(TDLimiterPtr limiter, unsigned int releaseMs);
+
+/******************************************************************************
+* setLimiterThreshold *
+* limiter: limiter handle *
+* threshold: limiter threshold *
+* returns: error code *
+******************************************************************************/
+TDLIMITER_ERROR setLimiterThreshold(TDLimiterPtr limiter, INT_PCM threshold);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif //#ifndef _LIMITER_H_
diff --git a/libPCMutils/include/pcmutils_lib.h b/libPCMutils/include/pcmutils_lib.h
index 5ba74be..e7e6a41 100644
--- a/libPCMutils/include/pcmutils_lib.h
+++ b/libPCMutils/include/pcmutils_lib.h
@@ -95,69 +95,88 @@ amm-info@iis.fraunhofer.de
#include "machine_type.h"
#include "common_fix.h"
#include "FDK_audio.h"
+#include "FDK_bitstream.h"
-/* ------------------------ *
- * MODULE SETTINGS: *
- * ------------------------ */
-/* #define PCM_UPMIX_ENABLE */ /*!< Generally enable up mixing. */
-#define PCM_DOWNMIX_ENABLE /*!< Generally enable down mixing. */
-#define DVB_MIXDOWN_ENABLE /*!< Enable this to support DVB ancillary data for encoder
- assisted downmixing of MPEG-4 AAC and
- MPEG-1/2 layer 2 streams. PCM_DOWNMIX_ENABLE has to
- be enabled, too! */
-#define MPEG_PCE_MIXDOWN_ENABLE /*!< Enable this to support MPEG matrix mixdown with a
- coefficient carried in the PCE. PCM_DOWNMIX_ENABLE
- has to be enabled, too! */
-/* #define ARIB_MIXDOWN_ENABLE */ /*!< Enable modifications to the MPEG PCE mixdown method
- to fulfill ARIB standard. MPEG_PCE_MIXDOWN_ENABLE has
- to be set. */
/* ------------------------ *
* ERROR CODES: *
* ------------------------ */
typedef enum
{
- PCMDMX_OK = 0x0, /*!< No error happened. */
- PCMDMX_OUT_OF_MEMORY = 0x2, /*!< Not enough memory to set up an instance of the module. */
- PCMDMX_UNKNOWN = 0x5, /*!< Error condition is of unknown reason, or from a third
- party module. */
- PCMDMX_INVALID_HANDLE, /*!< The given instance handle is not valid. */
- PCMDMX_INVALID_ARGUMENT, /*!< One of the parameters handed over is invalid. */
- PCMDMX_INVALID_CH_CONFIG, /*!< The given channel configuration is not supported and
- thus no processing was performed. */
- PCMDMX_INVALID_MODE, /*!< The set configuration/mode is not applicable. */
- PCMDMX_UNKNOWN_PARAM, /*!< The handed parameter is not known/supported. */
- PCMDMX_UNABLE_TO_SET_PARAM, /*!< Unable to set the specific parameter. Most probably
- the value ist out of range. */
- PCMDMX_CORRUPT_ANC_DATA /*!< The read ancillary data was corrupt. */
+ PCMDMX_OK = 0x0, /*!< No error happened. */
+
+ pcm_dmx_fatal_error_start,
+ PCMDMX_OUT_OF_MEMORY = 0x2, /*!< Not enough memory to set up an instance of the module. */
+ PCMDMX_UNKNOWN = 0x5, /*!< Error condition is of unknown reason, or from a third
+ party module. */
+ pcm_dmx_fatal_error_end,
+
+ PCMDMX_INVALID_HANDLE, /*!< The given instance handle is not valid. */
+ PCMDMX_INVALID_ARGUMENT, /*!< One of the parameters handed over is invalid. */
+ PCMDMX_INVALID_CH_CONFIG, /*!< The given channel configuration is not supported and thus
+ no processing was performed. */
+ PCMDMX_INVALID_MODE, /*!< The set configuration/mode is not applicable. */
+ PCMDMX_UNKNOWN_PARAM, /*!< The handed parameter is not known/supported. */
+ PCMDMX_UNABLE_TO_SET_PARAM, /*!< Unable to set the specific parameter. Most probably the
+ value ist out of range. */
+ PCMDMX_CORRUPT_ANC_DATA /*!< The read ancillary data was corrupt. */
} PCMDMX_ERROR;
+/** Macro to identify fatal errors. */
+#define PCMDMX_IS_FATAL_ERROR(err) ( (((err)>=pcm_dmx_fatal_error_start) && ((err)<=pcm_dmx_fatal_error_end)) ? 1 : 0)
/* ------------------------ *
* RUNTIME PARAMS: *
* ------------------------ */
typedef enum
{
- DMX_BS_DATA_EXPIRY_FRAME, /*!< The number of frames without new metadata that have to
- go by before the bitstream data expires. The value 0
- disables expiry. */
- DMX_BS_DATA_DELAY, /*!< The number of delay frames of the output samples
- compared to the bitstream data. */
- NUMBER_OF_OUTPUT_CHANNELS , /*!< The number of output channels (equals the number of
- channels processed by the audio output setup). */
- DUAL_CHANNEL_DOWNMIX_MODE /*!< Downmix mode for two channel audio data. */
-
+ DMX_BS_DATA_EXPIRY_FRAME, /*!< The number of frames without new metadata that have to go
+ by before the bitstream data expires. The value 0 disables
+ expiry. */
+ DMX_BS_DATA_DELAY, /*!< The number of delay frames of the output samples compared
+ to the bitstream data. */
+ MIN_NUMBER_OF_OUTPUT_CHANNELS, /*!< The minimum number of output channels. For all input
+ configurations that have less than the given channels the
+ module will modify the output automatically to obtain the
+ given number of output channels. Mono signals will be
+ duplicated. If more than two output channels are desired
+ the module just adds empty channels. The parameter value
+ must be either -1, 0, 1, 2, 6 or 8. If the value is
+ greater than zero and exceeds the value of parameter
+ MAX_NUMBER_OF_OUTPUT_CHANNELS the latter will be set to
+ the same value. Both values -1 and 0 disable the feature. */
+ MAX_NUMBER_OF_OUTPUT_CHANNELS, /*!< The maximum number of output channels. For all input
+ configurations that have more than the given channels the
+ module will apply a mixdown automatically to obtain the
+ given number of output channels. The value must be either
+ -1, 0, 1, 2, 6 or 8. If it is greater than zero and lower
+ or equal than the value of MIN_NUMBER_OF_OUTPUT_CHANNELS
+ parameter the latter will be set to the same value.
+ The values -1 and 0 disable the feature. */
+ DMX_DUAL_CHANNEL_MODE, /*!< Downmix mode for two channel audio data. */
+ DMX_PSEUDO_SURROUND_MODE /*!< Defines how module handles pseudo surround compatible
+ signals. See PSEUDO_SURROUND_MODE type for details. */
} PCMDMX_PARAM;
-
+/* Parameter value types */
typedef enum
{
- STEREO_MODE = 0x0, /*!< Leave stereo signals as they are. */
- CH1_MODE = 0x1, /*!< Create a dual mono output signal from channel 1. */
- CH2_MODE = 0x2, /*!< Create a dual mono output signal from channel 2. */
- MIXED_MODE = 0x3 /*!< Create a dual mono output signal by mixing the two channels. */
+ NEVER_DO_PS_DMX = -1, /*!< Never create a pseudo surround compatible downmix. */
+ AUTO_PS_DMX = 0, /*!< Create a pseudo surround compatible downmix only if
+ signalled in bitstreams meta data. (Default) */
+ FORCE_PS_DMX = 1 /*!< Always create a pseudo surround compatible downmix.
+ CAUTION: This can lead to excessive signal cancellations
+ and signal level differences for non-compatible signals. */
+} PSEUDO_SURROUND_MODE;
+typedef enum
+{
+ STEREO_MODE = 0x0, /*!< Leave stereo signals as they are. */
+ CH1_MODE = 0x1, /*!< Create a dual mono output signal from channel 1. */
+ CH2_MODE = 0x2, /*!< Create a dual mono output signal from channel 2. */
+ MIXED_MODE = 0x3 /*!< Create a dual mono output signal by mixing the two
+ channels. */
} DUAL_CHANNEL_MODE;
@@ -178,7 +197,7 @@ extern "C"
/** Open and initialize an instance of the PCM downmix module
* @param [out] Pointer to a buffer receiving the handle of the new instance.
- * @returns Returns an error code.
+ * @returns Returns an error code.
**/
PCMDMX_ERROR pcmDmx_Open (
HANDLE_PCM_DOWNMIX *pSelf
@@ -188,20 +207,46 @@ PCMDMX_ERROR pcmDmx_Open (
* @param [in] Handle of PCM downmix instance.
* @param [in] Parameter to be set.
* @param [in] Parameter value.
- * @returns Returns an error code.
+ * @returns Returns an error code.
**/
PCMDMX_ERROR pcmDmx_SetParam (
HANDLE_PCM_DOWNMIX self,
- PCMDMX_PARAM param,
- UINT value
+ const PCMDMX_PARAM param,
+ const INT value
+ );
+
+/** Get one parameter value of one PCM downmix module instance.
+ * @param [in] Handle of PCM downmix module instance.
+ * @param [in] Parameter to be set.
+ * @param [out] Pointer to buffer receiving the parameter value.
+ * @returns Returns an error code.
+ **/
+PCMDMX_ERROR pcmDmx_GetParam (
+ HANDLE_PCM_DOWNMIX self,
+ const PCMDMX_PARAM param,
+ INT * const pValue
);
-/** Read the ancillary data transported in DSEs of DVB streams with MPEG-4 content
+/** Read downmix meta-data directly from a given bitstream.
+ * @param [in] Handle of PCM downmix instance.
+ * @param [in] Handle of FDK bitstream buffer.
+ * @param [in] Length of ancillary data in bits.
+ * @param [in] Flag indicating wheter the ancillary data is from a MPEG-1/2 or an MPEG-4 stream.
+ * @returns Returns an error code.
+ **/
+PCMDMX_ERROR pcmDmx_Parse (
+ HANDLE_PCM_DOWNMIX self,
+ HANDLE_FDK_BITSTREAM hBitStream,
+ UINT ancDataBits,
+ int isMpeg2
+ );
+
+/** Read downmix meta-data from a given data buffer.
* @param [in] Handle of PCM downmix instance.
* @param [in] Pointer to ancillary data buffer.
- * @param [in] Size of ancillary data.
+ * @param [in] Size of ancillary data in bytes.
* @param [in] Flag indicating wheter the ancillary data is from a MPEG-1/2 or an MPEG-4 stream.
- * @returns Returns an error code.
+ * @returns Returns an error code.
**/
PCMDMX_ERROR pcmDmx_ReadDvbAncData (
HANDLE_PCM_DOWNMIX self,
@@ -211,12 +256,11 @@ PCMDMX_ERROR pcmDmx_ReadDvbAncData (
);
/** Set the matrix mixdown information extracted from the PCE of an AAC bitstream.
- * Note: Call only if matrix_mixdown_idx_present is true.
* @param [in] Handle of PCM downmix instance.
* @param [in] Matrix mixdown index present flag extracted from PCE.
* @param [in] The 2 bit matrix mixdown index extracted from PCE.
* @param [in] The pseudo surround enable flag extracted from PCE.
- * @returns Returns an error code.
+ * @returns Returns an error code.
**/
PCMDMX_ERROR pcmDmx_SetMatrixMixdownFromPce (
HANDLE_PCM_DOWNMIX self,
@@ -235,34 +279,42 @@ PCMDMX_ERROR pcmDmx_Reset (
UINT flags
);
-/** Apply down or up mixing.
+/** Create a mixdown, bypass or extend the output signal depending on the modules settings and the
+ * respective given input configuration.
*
* \param [in] Handle of PCM downmix module instance.
* \param [inout] Pointer to time buffer with decoded PCM samples.
- * \param [in] Pointer where the amount of output samples is returned into.
- * \param [inout] Pointer where the amount of output channels is returned into.
- * \param [in] Flag which indicates if output time data are writtern interleaved or as subsequent blocks.
- * \param [inout] Array were the corresponding channel type for each output audio channel is stored into.
- * \param [inout] Array were the corresponding channel type index for each output audio channel is stored into.
- * \param [in] Array containing the output channel mapping to be used (From MPEG PCE ordering to whatever is required).
- *
- * @returns Returns an error code.
+ * \param [in] The I/O block size which is the number of samples per channel.
+ * \param [inout] Pointer to buffer that holds the number of input channels and where the
+ * amount of output channels is written to.
+ * \param [in] Flag which indicates if output time data is writtern interleaved or as
+ * subsequent blocks.
+ * \param [inout] Array were the corresponding channel type for each output audio channel is
+ * stored into.
+ * \param [inout] Array were the corresponding channel type index for each output audio channel
+ * is stored into.
+ * \param [in] Array containing the output channel mapping to be used (from MPEG PCE ordering
+ * to whatever is required).
+ * \param [out] Pointer on a field receiving the scale factor that has to be applied on all
+ * samples afterwards. If the handed pointer is NULL the final scaling is done
+ * internally.
+ * @returns Returns an error code.
**/
PCMDMX_ERROR pcmDmx_ApplyFrame (
HANDLE_PCM_DOWNMIX self,
INT_PCM *pPcmBuf,
UINT frameSize,
INT *nChannels,
-
int fInterleaved,
AUDIO_CHANNEL_TYPE channelType[],
UCHAR channelIndices[],
- const UCHAR channelMapping[][8]
+ const UCHAR channelMapping[][8],
+ INT *pDmxOutScale
);
/** Close an instance of the PCM downmix module.
* @param [inout] Pointer to a buffer containing the handle of the instance.
- * @returns Returns an error code.
+ * @returns Returns an error code.
**/
PCMDMX_ERROR pcmDmx_Close (
HANDLE_PCM_DOWNMIX *pSelf
@@ -270,7 +322,7 @@ PCMDMX_ERROR pcmDmx_Close (
/** Get library info for this module.
* @param [out] Pointer to an allocated LIB_INFO structure.
- * @returns Returns an error code.
+ * @returns Returns an error code.
*/
PCMDMX_ERROR pcmDmx_GetLibInfo( LIB_INFO *info );
diff --git a/libPCMutils/src/limiter.cpp b/libPCMutils/src/limiter.cpp
new file mode 100644
index 0000000..af724f0
--- /dev/null
+++ b/libPCMutils/src/limiter.cpp
@@ -0,0 +1,498 @@
+
+/* -----------------------------------------------------------------------------------------------------------
+Software License for The Fraunhofer FDK AAC Codec Library for Android
+
+ Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Frderung der angewandten Forschung e.V.
+ All rights reserved.
+
+ 1. INTRODUCTION
+The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements
+the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio.
+This FDK AAC Codec software is intended to be used on a wide variety of Android devices.
+
+AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual
+audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by
+independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part
+of the MPEG specifications.
+
+Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer)
+may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners
+individually for the purpose of encoding or decoding bit streams in products that are compliant with
+the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license
+these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec
+software may already be covered under those patent licenses when it is used for those licensed purposes only.
+
+Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality,
+are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional
+applications information and documentation.
+
+2. COPYRIGHT LICENSE
+
+Redistribution and use in source and binary forms, with or without modification, are permitted without
+payment of copyright license fees provided that you satisfy the following conditions:
+
+You must retain the complete text of this software license in redistributions of the FDK AAC Codec or
+your modifications thereto in source code form.
+
+You must retain the complete text of this software license in the documentation and/or other materials
+provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form.
+You must make available free of charge copies of the complete source code of the FDK AAC Codec and your
+modifications thereto to recipients of copies in binary form.
+
+The name of Fraunhofer may not be used to endorse or promote products derived from this library without
+prior written permission.
+
+You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec
+software or your modifications thereto.
+
+Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software
+and the date of any change. For modified versions of the FDK AAC Codec, the term
+"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term
+"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android."
+
+3. NO PATENT LICENSE
+
+NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer,
+ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with
+respect to this software.
+
+You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized
+by appropriate patent licenses.
+
+4. DISCLAIMER
+
+This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors
+"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties
+of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages,
+including but not limited to procurement of substitute goods or services; loss of use, data, or profits,
+or business interruption, however caused and on any theory of liability, whether in contract, strict
+liability, or tort (including negligence), arising in any way out of the use of this software, even if
+advised of the possibility of such damage.
+
+5. CONTACT INFORMATION
+
+Fraunhofer Institute for Integrated Circuits IIS
+Attention: Audio and Multimedia Departments - FDK AAC LL
+Am Wolfsmantel 33
+91058 Erlangen, Germany
+
+www.iis.fraunhofer.de/amm
+amm-info@iis.fraunhofer.de
+----------------------------------------------------------------------------------------------------------- */
+
+/************************ FDK PCM postprocessor module *********************
+
+ Author(s): Matthias Neusinger
+ Description: Hard limiter for clipping prevention
+
+*******************************************************************************/
+
+#include "limiter.h"
+
+
+struct TDLimiter {
+ unsigned int attack;
+ FIXP_DBL attackConst, releaseConst;
+ unsigned int attackMs, releaseMs, maxAttackMs;
+ FIXP_PCM threshold;
+ unsigned int channels, maxChannels;
+ unsigned int sampleRate, maxSampleRate;
+ FIXP_DBL cor, max;
+ FIXP_DBL* maxBuf;
+ FIXP_DBL* delayBuf;
+ unsigned int maxBufIdx, delayBufIdx;
+ FIXP_DBL smoothState0;
+ FIXP_DBL minGain;
+
+ FIXP_DBL additionalGainPrev;
+ FIXP_DBL additionalGainFilterState;
+ FIXP_DBL additionalGainFilterState1;
+};
+
+/* create limiter */
+TDLimiterPtr createLimiter(
+ unsigned int maxAttackMs,
+ unsigned int releaseMs,
+ INT_PCM threshold,
+ unsigned int maxChannels,
+ unsigned int maxSampleRate
+ )
+{
+ TDLimiterPtr limiter = NULL;
+ unsigned int attack, release;
+ FIXP_DBL attackConst, releaseConst, exponent;
+ INT e_ans;
+
+ /* calc attack and release time in samples */
+ attack = (unsigned int)(maxAttackMs * maxSampleRate / 1000);
+ release = (unsigned int)(releaseMs * maxSampleRate / 1000);
+
+ /* alloc limiter struct */
+ limiter = (TDLimiterPtr)FDKcalloc(1, sizeof(struct TDLimiter));
+ if (!limiter) return NULL;
+
+ /* alloc max and delay buffers */
+ limiter->maxBuf = (FIXP_DBL*)FDKcalloc(attack + 1, sizeof(FIXP_DBL));
+ limiter->delayBuf = (FIXP_DBL*)FDKcalloc(attack * maxChannels, sizeof(FIXP_DBL));
+
+ if (!limiter->maxBuf || !limiter->delayBuf) {
+ destroyLimiter(limiter);
+ return NULL;
+ }
+
+ /* attackConst = pow(0.1, 1.0 / (attack + 1)) */
+ exponent = invFixp(attack+1);
+ attackConst = fPow(FL2FXCONST_DBL(0.1f), 0, exponent, 0, &e_ans);
+ attackConst = scaleValue(attackConst, e_ans);
+
+ /* releaseConst = (float)pow(0.1, 1.0 / (release + 1)) */
+ exponent = invFixp(release + 1);
+ releaseConst = fPow(FL2FXCONST_DBL(0.1f), 0, exponent, 0, &e_ans);
+ releaseConst = scaleValue(releaseConst, e_ans);
+
+ /* init parameters */
+ limiter->attackMs = maxAttackMs;
+ limiter->maxAttackMs = maxAttackMs;
+ limiter->releaseMs = releaseMs;
+ limiter->attack = attack;
+ limiter->attackConst = attackConst;
+ limiter->releaseConst = releaseConst;
+ limiter->threshold = (FIXP_PCM)threshold;
+ limiter->channels = maxChannels;
+ limiter->maxChannels = maxChannels;
+ limiter->sampleRate = maxSampleRate;
+ limiter->maxSampleRate = maxSampleRate;
+
+ resetLimiter(limiter);
+
+ return limiter;
+}
+
+
+/* reset limiter */
+TDLIMITER_ERROR resetLimiter(TDLimiterPtr limiter)
+{
+ if (limiter != NULL) {
+
+ limiter->maxBufIdx = 0;
+ limiter->delayBufIdx = 0;
+ limiter->max = (FIXP_DBL)0;
+ limiter->cor = FL2FXCONST_DBL(1.0f/(1<<1));
+ limiter->smoothState0 = FL2FXCONST_DBL(1.0f/(1<<1));
+ limiter->minGain = FL2FXCONST_DBL(1.0f/(1<<1));
+
+ limiter->additionalGainPrev = FL2FXCONST_DBL(1.0f/(1<<TDL_GAIN_SCALING));
+ limiter->additionalGainFilterState = FL2FXCONST_DBL(1.0f/(1<<TDL_GAIN_SCALING));
+ limiter->additionalGainFilterState1 = FL2FXCONST_DBL(1.0f/(1<<TDL_GAIN_SCALING));
+
+ FDKmemset(limiter->maxBuf, 0, (limiter->attack + 1) * sizeof(FIXP_DBL) );
+ FDKmemset(limiter->delayBuf, 0, limiter->attack * limiter->channels * sizeof(FIXP_DBL) );
+ }
+ else {
+ return TDLIMIT_INVALID_HANDLE;
+ }
+
+ return TDLIMIT_OK;
+}
+
+
+/* destroy limiter */
+TDLIMITER_ERROR destroyLimiter(TDLimiterPtr limiter)
+{
+ if (limiter != NULL) {
+ FDKfree(limiter->maxBuf);
+ FDKfree(limiter->delayBuf);
+
+ FDKfree(limiter);
+ }
+ else {
+ return TDLIMIT_INVALID_HANDLE;
+ }
+ return TDLIMIT_OK;
+}
+
+/* apply limiter */
+TDLIMITER_ERROR applyLimiter(TDLimiterPtr limiter,
+ INT_PCM* samples,
+ FIXP_DBL* pGain,
+ const INT* gain_scale,
+ const UINT gain_size,
+ const UINT gain_delay,
+ const UINT nSamples)
+{
+ unsigned int i, j;
+ FIXP_PCM tmp1, tmp2;
+ FIXP_DBL tmp, old, gain, additionalGain, additionalGainUnfiltered;
+ FIXP_DBL minGain = FL2FXCONST_DBL(1.0f/(1<<1));
+
+ FDK_ASSERT(gain_size == 1);
+ FDK_ASSERT(gain_delay <= nSamples);
+
+ if ( limiter == NULL ) return TDLIMIT_INVALID_HANDLE;
+
+ {
+ unsigned int channels = limiter->channels;
+ unsigned int attack = limiter->attack;
+ FIXP_DBL attackConst = limiter->attackConst;
+ FIXP_DBL releaseConst = limiter->releaseConst;
+ FIXP_DBL threshold = FX_PCM2FX_DBL(limiter->threshold)>>TDL_GAIN_SCALING;
+
+ FIXP_DBL max = limiter->max;
+ FIXP_DBL* maxBuf = limiter->maxBuf;
+ unsigned int maxBufIdx = limiter->maxBufIdx;
+ FIXP_DBL cor = limiter->cor;
+ FIXP_DBL* delayBuf = limiter->delayBuf;
+ unsigned int delayBufIdx = limiter->delayBufIdx;
+
+ FIXP_DBL smoothState0 = limiter->smoothState0;
+ FIXP_DBL additionalGainSmoothState = limiter->additionalGainFilterState;
+ FIXP_DBL additionalGainSmoothState1 = limiter->additionalGainFilterState1;
+
+ for (i = 0; i < nSamples; i++) {
+
+ if (i < gain_delay) {
+ additionalGainUnfiltered = limiter->additionalGainPrev;
+ } else {
+ additionalGainUnfiltered = pGain[0];
+ }
+
+ /* Smooth additionalGain */
+ /* [b,a] = butter(1, 0.01) */
+ static const FIXP_SGL b[] = { FL2FXCONST_SGL(0.015466*2.0), FL2FXCONST_SGL( 0.015466*2.0) };
+ static const FIXP_SGL a[] = { FL2FXCONST_SGL(1.000000), FL2FXCONST_SGL(-0.96907) };
+ /* [b,a] = butter(1, 0.001) */
+ //static const FIXP_SGL b[] = { FL2FXCONST_SGL(0.0015683*2.0), FL2FXCONST_SGL( 0.0015683*2.0) };
+ //static const FIXP_SGL a[] = { FL2FXCONST_SGL(1.0000000), FL2FXCONST_SGL(-0.99686) };
+ additionalGain = - fMult(additionalGainSmoothState, a[1]) + fMultDiv2( additionalGainUnfiltered, b[0]) + fMultDiv2(additionalGainSmoothState1, b[1]);
+ additionalGainSmoothState1 = additionalGainUnfiltered;
+ additionalGainSmoothState = additionalGain;
+
+ /* Apply the additional scaling that has no delay and no smoothing */
+ if (gain_scale[0] > 0) {
+ additionalGain <<= gain_scale[0];
+ } else {
+ additionalGain >>= gain_scale[0];
+ }
+
+ /* get maximum absolute sample value of all channels, including the additional gain. */
+ tmp1 = (FIXP_PCM)0;
+ for (j = 0; j < channels; j++) {
+ tmp2 = (FIXP_PCM)samples[i * channels + j];
+ if (tmp2 == (FIXP_PCM)SAMPLE_MIN) /* protect fAbs from -1.0 value */
+ tmp2 = (FIXP_PCM)(SAMPLE_MIN+1);
+ tmp1 = fMax(tmp1, fAbs(tmp2));
+ }
+ tmp = SATURATE_LEFT_SHIFT(fMultDiv2(tmp1, additionalGain), 1, DFRACT_BITS);
+
+ /* set threshold as lower border to save calculations in running maximum algorithm */
+ tmp = fMax(tmp, threshold);
+
+ /* running maximum */
+ old = maxBuf[maxBufIdx];
+ maxBuf[maxBufIdx] = tmp;
+
+ if (tmp >= max) {
+ /* new sample is greater than old maximum, so it is the new maximum */
+ max = tmp;
+ }
+ else if (old < max) {
+ /* maximum does not change, as the sample, which has left the window was
+ not the maximum */
+ }
+ else {
+ /* the old maximum has left the window, we have to search the complete
+ buffer for the new max */
+ max = maxBuf[0];
+ for (j = 1; j <= attack; j++) {
+ if (maxBuf[j] > max) max = maxBuf[j];
+ }
+ }
+ maxBufIdx++;
+ if (maxBufIdx >= attack+1) maxBufIdx = 0;
+
+ /* calc gain */
+ /* gain is downscaled by one, so that gain = 1.0 can be represented */
+ if (max > threshold) {
+ gain = fDivNorm(threshold, max)>>1;
+ }
+ else {
+ gain = FL2FXCONST_DBL(1.0f/(1<<1));
+ }
+
+ /* gain smoothing, method: TDL_EXPONENTIAL */
+ /* first order IIR filter with attack correction to avoid overshoots */
+
+ /* correct the 'aiming' value of the exponential attack to avoid the remaining overshoot */
+ if (gain < smoothState0) {
+ cor = fMin(cor, fMultDiv2((gain - fMultDiv2(FL2FXCONST_SGL(0.1f*(1<<1)),smoothState0)), FL2FXCONST_SGL(1.11111111f/(1<<1)))<<2);
+ }
+ else {
+ cor = gain;
+ }
+
+ /* smoothing filter */
+ if (cor < smoothState0) {
+ smoothState0 = fMult(attackConst,(smoothState0 - cor)) + cor; /* attack */
+ smoothState0 = fMax(smoothState0, gain); /* avoid overshooting target */
+ }
+ else {
+ /* sign inversion twice to round towards +infinity,
+ so that gain can converge to 1.0 again,
+ for bit-identical output when limiter is not active */
+ smoothState0 = -fMult(releaseConst,-(smoothState0 - cor)) + cor; /* release */
+ }
+
+ gain = smoothState0;
+
+ /* lookahead delay, apply gain */
+ for (j = 0; j < channels; j++) {
+
+ tmp = delayBuf[delayBufIdx * channels + j];
+ delayBuf[delayBufIdx * channels + j] = fMult((FIXP_PCM)samples[i * channels + j], additionalGain);
+
+ /* Apply gain to delayed signal */
+ if (gain < FL2FXCONST_DBL(1.0f/(1<<1)))
+ tmp = fMult(tmp,gain<<1);
+
+ samples[i * channels + j] = FX_DBL2FX_PCM((FIXP_DBL)SATURATE_LEFT_SHIFT(tmp,TDL_GAIN_SCALING,DFRACT_BITS));
+ }
+ delayBufIdx++;
+ if (delayBufIdx >= attack) delayBufIdx = 0;
+
+ /* save minimum gain factor */
+ if (gain < minGain) minGain = gain;
+ }
+
+
+ limiter->max = max;
+ limiter->maxBufIdx = maxBufIdx;
+ limiter->cor = cor;
+ limiter->delayBufIdx = delayBufIdx;
+
+ limiter->smoothState0 = smoothState0;
+ limiter->additionalGainFilterState = additionalGainSmoothState;
+ limiter->additionalGainFilterState1 = additionalGainSmoothState1;
+
+ limiter->minGain = minGain;
+
+ limiter->additionalGainPrev = pGain[0];
+
+ return TDLIMIT_OK;
+ }
+}
+
+/* get delay in samples */
+unsigned int getLimiterDelay(TDLimiterPtr limiter)
+{
+ FDK_ASSERT(limiter != NULL);
+ return limiter->attack;
+}
+
+/* set number of channels */
+TDLIMITER_ERROR setLimiterNChannels(TDLimiterPtr limiter, unsigned int nChannels)
+{
+ if ( limiter == NULL ) return TDLIMIT_INVALID_HANDLE;
+
+ if (nChannels > limiter->maxChannels) return TDLIMIT_INVALID_PARAMETER;
+
+ limiter->channels = nChannels;
+ //resetLimiter(limiter);
+
+ return TDLIMIT_OK;
+}
+
+/* set sampling rate */
+TDLIMITER_ERROR setLimiterSampleRate(TDLimiterPtr limiter, unsigned int sampleRate)
+{
+ unsigned int attack, release;
+ FIXP_DBL attackConst, releaseConst, exponent;
+ INT e_ans;
+
+ if ( limiter == NULL ) return TDLIMIT_INVALID_HANDLE;
+
+ if (sampleRate > limiter->maxSampleRate) return TDLIMIT_INVALID_PARAMETER;
+
+ /* update attack and release time in samples */
+ attack = (unsigned int)(limiter->attackMs * sampleRate / 1000);
+ release = (unsigned int)(limiter->releaseMs * sampleRate / 1000);
+
+ /* attackConst = pow(0.1, 1.0 / (attack + 1)) */
+ exponent = invFixp(attack+1);
+ attackConst = fPow(FL2FXCONST_DBL(0.1f), 0, exponent, 0, &e_ans);
+ attackConst = scaleValue(attackConst, e_ans);
+
+ /* releaseConst = (float)pow(0.1, 1.0 / (release + 1)) */
+ exponent = invFixp(release + 1);
+ releaseConst = fPow(FL2FXCONST_DBL(0.1f), 0, exponent, 0, &e_ans);
+ releaseConst = scaleValue(releaseConst, e_ans);
+
+ limiter->attack = attack;
+ limiter->attackConst = attackConst;
+ limiter->releaseConst = releaseConst;
+ limiter->sampleRate = sampleRate;
+
+ /* reset */
+ //resetLimiter(limiter);
+
+ return TDLIMIT_OK;
+}
+
+/* set attack time */
+TDLIMITER_ERROR setLimiterAttack(TDLimiterPtr limiter, unsigned int attackMs)
+{
+ unsigned int attack;
+ FIXP_DBL attackConst, exponent;
+ INT e_ans;
+
+ if ( limiter == NULL ) return TDLIMIT_INVALID_HANDLE;
+
+ if (attackMs > limiter->maxAttackMs) return TDLIMIT_INVALID_PARAMETER;
+
+ /* calculate attack time in samples */
+ attack = (unsigned int)(attackMs * limiter->sampleRate / 1000);
+
+ /* attackConst = pow(0.1, 1.0 / (attack + 1)) */
+ exponent = invFixp(attack+1);
+ attackConst = fPow(FL2FXCONST_DBL(0.1f), 0, exponent, 0, &e_ans);
+ attackConst = scaleValue(attackConst, e_ans);
+
+ limiter->attack = attack;
+ limiter->attackConst = attackConst;
+ limiter->attackMs = attackMs;
+
+ return TDLIMIT_OK;
+}
+
+/* set release time */
+TDLIMITER_ERROR setLimiterRelease(TDLimiterPtr limiter, unsigned int releaseMs)
+{
+ unsigned int release;
+ FIXP_DBL releaseConst, exponent;
+ INT e_ans;
+
+ if ( limiter == NULL ) return TDLIMIT_INVALID_HANDLE;
+
+ /* calculate release time in samples */
+ release = (unsigned int)(releaseMs * limiter->sampleRate / 1000);
+
+ /* releaseConst = (float)pow(0.1, 1.0 / (release + 1)) */
+ exponent = invFixp(release + 1);
+ releaseConst = fPow(FL2FXCONST_DBL(0.1f), 0, exponent, 0, &e_ans);
+ releaseConst = scaleValue(releaseConst, e_ans);
+
+ limiter->releaseConst = releaseConst;
+ limiter->releaseMs = releaseMs;
+
+ return TDLIMIT_OK;
+}
+
+/* set limiter threshold */
+TDLIMITER_ERROR setLimiterThreshold(TDLimiterPtr limiter, INT_PCM threshold)
+{
+ if ( limiter == NULL ) return TDLIMIT_INVALID_HANDLE;
+
+ limiter->threshold = (FIXP_PCM)threshold;
+
+ return TDLIMIT_OK;
+}
diff --git a/libPCMutils/src/pcmutils_lib.cpp b/libPCMutils/src/pcmutils_lib.cpp
index a84a050..32d8437 100644
--- a/libPCMutils/src/pcmutils_lib.cpp
+++ b/libPCMutils/src/pcmutils_lib.cpp
@@ -84,8 +84,8 @@ amm-info@iis.fraunhofer.de
/**************************** FDK PCM utils module **************************
Author(s): Christian Griebel
- Description: Defines functions to interface with the PCM post processing
- module.
+ Description: Defines functions that perform downmixing or a simple channel
+ expansion in the PCM time domain.
*******************************************************************************/
@@ -93,21 +93,66 @@ amm-info@iis.fraunhofer.de
#include "genericStds.h"
#include "fixpoint_math.h"
+#include "FDK_core.h"
+
+
+/* ------------------------ *
+ * GLOBAL SETTINGS (GFR): *
+ * ------------------------ */
+#define DSE_METADATA_ENABLE /*!< Enable this to support MPEG/ETSI DVB ancillary data for
+ encoder assisted downmixing of MPEG-4 AAC and
+ MPEG-1/2 layer 2 streams. */
+#define PCE_METADATA_ENABLE /*!< Enable this to support MPEG matrix mixdown with a
+ coefficient carried in the PCE. */
+
+#define PCM_DMX_MAX_IN_CHANNELS ( 8 ) /* Neither the maximum number of input nor the maximum number of output channels ... */
+#define PCM_DMX_MAX_OUT_CHANNELS ( 8 ) /* ... must exceed the maximum number of channels that the framework can handle. */
+
+/* ------------------------ *
+ * SPECIFIC SETTINGS: *
+ * ------------------------ */
+#define PCM_CHANNEL_EXTENSION_ENABLE /*!< Allow module to duplicate mono signals or add zero channels to achieve the
+ desired number of output channels. */
+
+#define PCM_DMX_DFLT_MAX_OUT_CHANNELS ( 6 ) /*!< The maximum number of output channels. If the value is greater than 0 the module
+ will automatically create a mixdown for all input signals with more channels
+ than specified. */
+#define PCM_DMX_DFLT_MIN_OUT_CHANNELS ( 0 ) /*!< The minimum number of output channels. If the value is greater than 0 the module
+ will do channel extension automatically for all input signals with less channels
+ than specified. */
+#define PCM_DMX_MAX_DELAY_FRAMES ( 1 ) /*!< The maximum delay frames to align the bitstreams payload with the PCM output. */
+#define PCM_DMX_DFLT_EXPIRY_FRAME ( 50 ) /*!< If value is greater than 0 the mixdown coefficients will expire by default after the
+ given number of frames. The value 50 corresponds to at least 500ms (FL 960 @ 96kHz) */
+/* #define PCMDMX_DEBUG */
+
+/* Derived setting:
+ * No need to edit beyond this line. */
+#if defined(DSE_METADATA_ENABLE) || defined(PCE_METADATA_ENABLE) || defined(ARIB_MIXDOWN_ENABLE)
+ #define PCM_DOWNMIX_ENABLE /*!< Generally enable down mixing. */
+#endif
+#if (PCM_DMX_MAX_IN_CHANNELS > 2) || (PCM_DMX_MAX_OUT_CHANNELS > 2)
+ #define PCM_DMX_MAX_CHANNELS ( 8 )
+ #define PCM_DMX_MAX_CHANNEL_GROUPS ( 4 )
+ #define PCM_DMX_MAX_CHANNELS_PER_GROUP PCM_DMX_MAX_CHANNELS /* All channels can be in one group */
+#else
+ #define PCM_DMX_MAX_CHANNELS ( 3 ) /* Need to add 1 because there are three channel positions in first channel group. */
+ #define PCM_DMX_MAX_CHANNEL_GROUPS ( 1 ) /* Only front channels supported. */
+ #define PCM_DMX_MAX_CHANNELS_PER_GROUP ( 2 ) /* The maximum over all channel groups */
+#endif
+#if (PCM_DMX_MAX_IN_CHANNELS > PCM_DMX_MAX_OUT_CHANNELS)
+ #define PCM_DMX_MAX_IO_CHANNELS PCM_DMX_MAX_IN_CHANNELS
+#else
+ #define PCM_DMX_MAX_IO_CHANNELS PCM_DMX_MAX_OUT_CHANNELS
+#endif
/* Decoder library info */
#define PCMDMX_LIB_VL0 2
#define PCMDMX_LIB_VL1 4
-#define PCMDMX_LIB_VL2 0
+#define PCMDMX_LIB_VL2 2
#define PCMDMX_LIB_TITLE "PCM Downmix Lib"
#define PCMDMX_LIB_BUILD_DATE __DATE__
#define PCMDMX_LIB_BUILD_TIME __TIME__
-/* Library settings */
-#define PCM_DMX_MAX_DELAY_FRAMES ( 1 )
-#define PCM_DMX_MAX_CHANNELS ( 8 )
-#define PCM_DMX_MAX_CHANNEL_GROUPS ( 4 )
-#define PCM_DMX_MAX_CHANNELS_PER_GROUP ( 3 ) /* The maximum over all groups */
-#define PCMDMX_DFLT_EXPIRY_FRAME ( 50 ) /* At least 500ms (FL 960 @ 96kHz) */
/* Fixed and unique channel group indices.
* The last group index has to be smaller than PCM_DMX_MAX_CHANNEL_GROUPS. */
@@ -122,22 +167,64 @@ amm-info@iis.fraunhofer.de
#define CENTER_FRONT_CHANNEL ( 0 ) /* C */
#define LEFT_FRONT_CHANNEL ( 1 ) /* L */
#define RIGHT_FRONT_CHANNEL ( 2 ) /* R */
-#define LEFT_OUTSIDE_CHANNEL ( 3 ) /* Lo */
-#define RIGHT_OUTSIDE_CHANNEL ( 4 ) /* Ro */
-#define LEFT_REAR_CHANNEL ( 5 ) /* Lr aka left back channel */
-#define RIGHT_REAR_CHANNEL ( 6 ) /* Rr aka right back channel */
-#define LOW_FREQUENCY_CHANNEL ( 7 ) /* Lf */
+#define LEFT_REAR_CHANNEL ( 3 ) /* Lr (aka left back channel) or center back channel */
+#define RIGHT_REAR_CHANNEL ( 4 ) /* Rr (aka right back channel) */
+#define LOW_FREQUENCY_CHANNEL ( 5 ) /* Lf */
+#define LEFT_MULTIPRPS_CHANNEL ( 6 ) /* Left multipurpose channel */
+#define RIGHT_MULTIPRPS_CHANNEL ( 7 ) /* Right multipurpose channel */
/* More constants */
-#define ANC_DATA_SYNC_BYTE ( 0xBC ) /* ancillary data sync byte. */
-#define ATTENUATION_FACTOR_1 ( FL2FXCONST_SGL(0.70710678f) )
+#define ONE_CHANNEL ( 1 )
#define TWO_CHANNEL ( 2 )
+#define SIX_CHANNEL ( 6 )
+#define EIGHT_CHANNEL ( 8 )
+
+#define PCMDMX_A_IDX_DEFAULT ( 2 )
+#define PCMDMX_B_IDX_DEFAULT ( 2 )
+#define PCMDMX_LFE_IDX_DEFAULT ( 15 )
+#define PCMDMX_GAIN_5_DEFAULT ( 0 )
+#define PCMDMX_GAIN_2_DEFAULT ( 0 )
+
+#define PCMDMX_MAX_HEADROOM ( 3 ) /* Defines the maximum PCM scaling headroom that can be done by a
+ postprocessing step. This value must be greater or equal to 0. */
+
+#define FALSE 0
+#define TRUE 1
+#define IN 0
+#define OUT 1
+
+/* Type definitions: */
+#ifndef DMX_HIGH_PRECISION_ENABLE
+ #define FIXP_DMX FIXP_SGL
+ #define FX_DMX2FX_DBL(x) FX_SGL2FX_DBL((FIXP_SGL)(x))
+ #define FX_DBL2FX_DMX(x) FX_DBL2FX_SGL(x)
+ #define FL2FXCONST_DMX(x) FL2FXCONST_SGL(x)
+ #define MAXVAL_DMX MAXVAL_SGL
+ #define FX_DMX2SHRT(x) ((SHORT)(x))
+ #define FX_DMX2FL(x) FX_DBL2FL(FX_DMX2FX_DBL(x))
+#else
+ #define FIXP_DMX FIXP_DBL
+ #define FX_DMX2FX_DBL(x) ((FIXP_DBL)(x))
+ #define FX_DBL2FX_DMX(x) ((FIXP_DBL)(x)
+ #define FL2FXCONST_DMX(x) FL2FXCONST_DBL(x)
+ #define MAXVAL_DMX MAXVAL_DBL
+ #define FX_DMX2SHRT(x) ((SHORT)((x)>>FRACT_BITS))
+ #define FX_DMX2FL(x) FX_DBL2FL(x)
+#endif
-/* Sanity checks on library setting: */
+/* The number of channels positions for each group in the internal representation.
+ * See the channel labels above. */
+static const UCHAR maxChInGrp[PCM_DMX_MAX_CHANNEL_GROUPS] = {
+#if (PCM_DMX_MAX_CHANNELS > 3)
+ 3, 0, 2, 1
+#else
+ PCM_DMX_MAX_CHANNELS_PER_GROUP
+#endif
+};
/* List of packed channel modes */
typedef enum
-{ /* CH_MODE_<numFrontCh>_<numOutsideCh>_<numRearCh>_<numLfCh> */
+{ /* CH_MODE_<numFrontCh>_<numSideCh>_<numBackCh>_<numLfCh> */
CH_MODE_UNDEFINED = 0x0000,
/* 1 channel */
CH_MODE_1_0_0_0 = 0x0001, /* chCfg 1 */
@@ -151,53 +238,93 @@ typedef enum
CH_MODE_3_0_1_0 = 0x0103, /* chCfg 4 */
CH_MODE_2_0_2_0 = 0x0202,
CH_MODE_2_0_1_1 = 0x1102,
+ CH_MODE_4_0_0_0 = 0x0004,
/* 5 channels */
CH_MODE_3_0_2_0 = 0x0203, /* chCfg 5 */
CH_MODE_2_0_2_1 = 0x1202,
CH_MODE_3_0_1_1 = 0x1103,
CH_MODE_3_2_0_0 = 0x0023,
+ CH_MODE_5_0_0_0 = 0x0005,
/* 6 channels */
CH_MODE_3_0_2_1 = 0x1203, /* chCfg 6 */
+ CH_MODE_3_2_0_1 = 0x1023,
CH_MODE_3_2_1_0 = 0x0123,
+ CH_MODE_5_0_1_0 = 0x0105,
+ CH_MODE_6_0_0_0 = 0x0006,
/* 7 channels */
CH_MODE_2_2_2_1 = 0x1222,
+ CH_MODE_3_0_3_1 = 0x1303, /* chCfg 11 */
CH_MODE_3_2_1_1 = 0x1123,
CH_MODE_3_2_2_0 = 0x0223,
+ CH_MODE_3_0_2_2 = 0x2203,
+ CH_MODE_5_0_2_0 = 0x0205,
+ CH_MODE_5_0_1_1 = 0x1105,
+ CH_MODE_7_0_0_0 = 0x0007,
/* 8 channels */
- CH_MODE_3_2_2_1 = 0x1222, /* chCfg 7 */
+ CH_MODE_3_2_2_1 = 0x1223,
+ CH_MODE_3_0_4_1 = 0x1403, /* chCfg 12 */
+ CH_MODE_5_0_2_1 = 0x1205, /* chCfg 7 + 14 */
+ CH_MODE_5_2_1_0 = 0x0125,
CH_MODE_3_2_1_2 = 0x2123,
- CH_MODE_2_2_2_2 = 0x2222
+ CH_MODE_2_2_2_2 = 0x2222,
+ CH_MODE_3_0_3_2 = 0x2303,
+ CH_MODE_8_0_0_0 = 0x0008
} PCM_DMX_CHANNEL_MODE;
/* These are the channel configurations linked to
the number of output channels give by the user: */
-static const PCM_DMX_CHANNEL_MODE outChModeTable[PCM_DMX_MAX_CHANNELS] =
+static const PCM_DMX_CHANNEL_MODE outChModeTable[PCM_DMX_MAX_CHANNELS+1] =
{
+ CH_MODE_UNDEFINED,
CH_MODE_1_0_0_0, /* 1 channel */
CH_MODE_2_0_0_0, /* 2 channels */
- CH_MODE_3_0_0_0, /* 3 channels */
- CH_MODE_3_0_1_0, /* 4 channels */
+ CH_MODE_3_0_0_0 /* 3 channels */
+#if (PCM_DMX_MAX_CHANNELS > 3)
+ ,CH_MODE_3_0_1_0, /* 4 channels */
CH_MODE_3_0_2_0, /* 5 channels */
CH_MODE_3_0_2_1, /* 6 channels */
- CH_MODE_3_2_2_0, /* 7 channels */
- CH_MODE_3_2_2_1 /* 8 channels */
+ CH_MODE_3_0_3_1, /* 7 channels */
+ CH_MODE_3_0_4_1 /* 8 channels */
+#endif
};
-static const FIXP_SGL dvbDownmixFactors[8] =
+static const FIXP_DMX abMixLvlValueTab[8] =
{
- FL2FXCONST_SGL(1.0f),
- FL2FXCONST_SGL(0.841f),
- FL2FXCONST_SGL(0.707f),
- FL2FXCONST_SGL(0.596f),
- FL2FXCONST_SGL(0.500f),
- FL2FXCONST_SGL(0.422f),
- FL2FXCONST_SGL(0.355f),
- FL2FXCONST_SGL(0.0f)
+ FL2FXCONST_DMX(0.500f), /* scaled by 1 */
+ FL2FXCONST_DMX(0.841f),
+ FL2FXCONST_DMX(0.707f),
+ FL2FXCONST_DMX(0.596f),
+ FL2FXCONST_DMX(0.500f),
+ FL2FXCONST_DMX(0.422f),
+ FL2FXCONST_DMX(0.355f),
+ FL2FXCONST_DMX(0.0f)
+};
+
+static const FIXP_DMX lfeMixLvlValueTab[16] =
+{ /* value, scale */
+ FL2FXCONST_DMX(0.7905f), /* 2 */
+ FL2FXCONST_DMX(0.5000f), /* 2 */
+ FL2FXCONST_DMX(0.8395f), /* 1 */
+ FL2FXCONST_DMX(0.7065f), /* 1 */
+ FL2FXCONST_DMX(0.5945f), /* 1 */
+ FL2FXCONST_DMX(0.500f), /* 1 */
+ FL2FXCONST_DMX(0.841f), /* 0 */
+ FL2FXCONST_DMX(0.707f), /* 0 */
+ FL2FXCONST_DMX(0.596f), /* 0 */
+ FL2FXCONST_DMX(0.500f), /* 0 */
+ FL2FXCONST_DMX(0.316f), /* 0 */
+ FL2FXCONST_DMX(0.178f), /* 0 */
+ FL2FXCONST_DMX(0.100f), /* 0 */
+ FL2FXCONST_DMX(0.032f), /* 0 */
+ FL2FXCONST_DMX(0.010f), /* 0 */
+ FL2FXCONST_DMX(0.000f) /* 0 */
};
+
+#ifdef PCE_METADATA_ENABLE
/* MPEG matrix mixdown:
Set 1: L' = (1 + 2^-0.5 + A )^-1 * [L + C * 2^-0.5 + A * Ls];
R' = (1 + 2^-0.5 + A )^-1 * [R + C * 2^-0.5 + A * Rs];
@@ -207,111 +334,176 @@ static const FIXP_SGL dvbDownmixFactors[8] =
M = (3 + 2A)^-1 * [L + C + R + A*(Ls + Rs)];
*/
- static const FIXP_SGL mpegMixDownIdx2Coef[4] =
+ static const FIXP_DMX mpegMixDownIdx2Coef[4] =
{
- FL2FXCONST_SGL(0.70710678f),
- FL2FXCONST_SGL(0.5f),
- FL2FXCONST_SGL(0.35355339f),
- FL2FXCONST_SGL(0.0f)
+ FL2FXCONST_DMX(0.70710678f),
+ FL2FXCONST_DMX(0.5f),
+ FL2FXCONST_DMX(0.35355339f),
+ FL2FXCONST_DMX(0.0f)
};
- static const FIXP_SGL mpegMixDownIdx2PreFact[4] =
- {
- FL2FXCONST_SGL(0.4142135623730950f),
- FL2FXCONST_SGL(0.4530818393219728f),
- FL2FXCONST_SGL(0.4852813742385703f),
- FL2FXCONST_SGL(0.5857864376269050f)
+ static const FIXP_SGL mpegMixDownIdx2PreFact[3][4] =
+ { { /* Set 1: */
+ FL2FXCONST_DMX(0.4142135623730950f),
+ FL2FXCONST_DMX(0.4530818393219728f),
+ FL2FXCONST_DMX(0.4852813742385703f),
+ FL2FXCONST_DMX(0.5857864376269050f)
+ },{ /* Set 2: */
+ FL2FXCONST_DMX(0.3203772410170407f),
+ FL2FXCONST_DMX(0.3693980625181293f),
+ FL2FXCONST_DMX(0.4142135623730950f),
+ FL2FXCONST_DMX(0.5857864376269050f)
+ },{ /* Mono DMX set: */
+ FL2FXCONST_DMX(0.2265409196609864f),
+ FL2FXCONST_DMX(0.25f),
+ FL2FXCONST_DMX(0.2697521433898179f),
+ FL2FXCONST_DMX(0.3333333333333333f) }
};
+#endif /* PCE_METADATA_ENABLE */
- typedef struct
- {
- USHORT matrixMixdownIdx; /*!< MPEG mixdown index extracted from PCE. */
- USHORT pseudoSurroundEnable; /*!< Pseudo surround enable flag extracted from PCE. */
- USHORT mixdownAvailable; /*!< Will be set to 1 if we found a valid coefficient. */
-
- } MPEG_MIXDOWN_INFO;
+#define TYPE_NONE ( 0x0 )
+#define TYPE_DSE_DATA ( 0x1 )
+#define TYPE_PCE_DATA ( 0x2 )
typedef struct
{
- FIXP_SGL centerMixLevelValue; /*!< DVB mixdown level for the center channel extracted from anc data. */
- FIXP_SGL surroundMixLevelValue; /*!< DVB mixdown level for back channels extracted from anc data. */
-
- UCHAR mixLevelsAvail; /*!< Will be set to 1 if we found a valid coefficient. */
+ UINT typeFlags;
+ /* From DSE */
+ UCHAR cLevIdx;
+ UCHAR sLevIdx;
+ UCHAR dmixIdxA;
+ UCHAR dmixIdxB;
+ UCHAR dmixIdxLfe;
+ UCHAR dmxGainIdx2;
+ UCHAR dmxGainIdx5;
+#ifdef PCE_METADATA_ENABLE
+ /* From PCE */
+ UCHAR matrixMixdownIdx;
+#endif
+ /* Attributes: */
+ SCHAR pseudoSurround; /*!< If set to 1 the signal is pseudo surround compatible. The value 0 tells
+ that it is not. If the value is -1 the information is not available. */
+ UINT expiryCount; /*!< Counter to monitor the life time of a meta data set. */
+
+} DMX_BS_META_DATA;
+
+/* Default metadata */
+static const DMX_BS_META_DATA dfltMetaData = {
+ 0, 2, 2, 2, 2, 15, 0, 0,
+#ifdef PCE_METADATA_ENABLE
+ 0,
+#endif
+ -1, 0
+};
-} DVB_MIXDOWN_LEVELS;
+/* Dynamic (user) params:
+ See the definition of PCMDMX_PARAM for details on the specific fields. */
+typedef struct
+{
+ UINT expiryFrame; /*!< Linked to DMX_BS_DATA_EXPIRY_FRAME */
+ DUAL_CHANNEL_MODE dualChannelMode; /*!< Linked to DMX_DUAL_CHANNEL_MODE */
+ PSEUDO_SURROUND_MODE pseudoSurrMode; /*!< Linked to DMX_PSEUDO_SURROUND_MODE */
+ SHORT numOutChannelsMin; /*!< Linked to MIN_NUMBER_OF_OUTPUT_CHANNELS */
+ SHORT numOutChannelsMax; /*!< Linked to MAX_NUMBER_OF_OUTPUT_CHANNELS */
+ UCHAR frameDelay; /*!< Linked to DMX_BS_DATA_DELAY */
+} PCM_DMX_USER_PARAMS;
/* Modules main data structure: */
struct PCM_DMX_INSTANCE
{
- DVB_MIXDOWN_LEVELS dvbMixDownLevels[PCM_DMX_MAX_DELAY_FRAMES+1];
- MPEG_MIXDOWN_INFO mpegMixDownInfo[PCM_DMX_MAX_DELAY_FRAMES+1];
- DUAL_CHANNEL_MODE dualChannelMode;
- UINT expiryFrame;
- UINT expiryCount;
- SHORT numOutputChannels;
- UCHAR applyProcessing;
- UCHAR frameDelay;
+ /* Metadata */
+ DMX_BS_META_DATA bsMetaData[PCM_DMX_MAX_DELAY_FRAMES+1];
+ PCM_DMX_USER_PARAMS userParams;
+
+ UCHAR applyProcessing; /*!< Flag to en-/disable modules processing.
+ The max channel limiting is done independently. */
};
/* Memory allocation macro */
C_ALLOC_MEM_STATIC(PcmDmxInstance, struct PCM_DMX_INSTANCE, 1)
-/** Evaluate a given channel configuration and extract a packed channel mode and generate a channel offset table
+/** Evaluate a given channel configuration and extract a packed channel mode. In addition the
+ * function generates a channel offset table for the mapping to the internal representation.
* This function is the inverse to the getChannelDescription() routine.
* @param [in] The total number of channels of the given configuration.
* @param [in] Array holding the corresponding channel types for each channel.
* @param [in] Array holding the corresponding channel type indices for each channel.
* @param [out] Array where the buffer offsets for each channel are stored into.
- * @returns Returns the packed channel mode.
+ * @param [out] The generated packed channel mode that represents the given input configuration.
+ * @returns Returns an error code.
**/
static
-PCM_DMX_CHANNEL_MODE getChannelMode (
+PCMDMX_ERROR getChannelMode (
const INT numChannels, /* in */
const AUDIO_CHANNEL_TYPE channelType[], /* in */
const UCHAR channelIndices[], /* in */
- UCHAR offsetTable[PCM_DMX_MAX_CHANNELS] /* out */
+ UCHAR offsetTable[PCM_DMX_MAX_CHANNELS], /* out */
+ PCM_DMX_CHANNEL_MODE *chMode /* out */
)
{
- UINT chMode = CH_MODE_UNDEFINED;
UCHAR chIdx[PCM_DMX_MAX_CHANNEL_GROUPS][PCM_DMX_MAX_CHANNELS_PER_GROUP];
- UCHAR numChInGrp[PCM_DMX_MAX_CHANNEL_GROUPS];
- int ch, grpIdx, err = 0;
+ UCHAR numChInGrp[PCM_DMX_MAX_CHANNEL_GROUPS]; /* Total num of channels per group of the input config */
+ UCHAR numChFree[PCM_DMX_MAX_CHANNEL_GROUPS]; /* Number of free slots per group in the internal repr. */
+ UCHAR hardToPlace[PCM_DMX_MAX_CHANNELS]; /* List of channels not matching the internal repr. */
+ UCHAR h2pSortIdx[PCM_DMX_MAX_CHANNELS];
+ PCMDMX_ERROR err = PCMDMX_OK;
+ int ch, grpIdx;
+ int numChToPlace = 0;
FDK_ASSERT(channelType != NULL);
FDK_ASSERT(channelIndices != NULL);
FDK_ASSERT(offsetTable != NULL);
+ FDK_ASSERT(chMode != NULL);
/* For details see ISO/IEC 13818-7:2005(E), 8.5.3 Channel configuration */
FDKmemclear(numChInGrp, PCM_DMX_MAX_CHANNEL_GROUPS*sizeof(UCHAR));
FDKmemset(offsetTable, 255, PCM_DMX_MAX_CHANNELS*sizeof(UCHAR));
FDKmemset(chIdx, 255, PCM_DMX_MAX_CHANNEL_GROUPS*PCM_DMX_MAX_CHANNELS_PER_GROUP*sizeof(UCHAR));
+ FDKmemset(hardToPlace, 255, PCM_DMX_MAX_CHANNELS*sizeof(UCHAR));
+ FDKmemset(h2pSortIdx, 255, PCM_DMX_MAX_CHANNELS*sizeof(UCHAR));
+ /* Get the restrictions of the internal representation */
+ FDKmemcpy(numChFree, maxChInGrp, PCM_DMX_MAX_CHANNEL_GROUPS*sizeof(UCHAR));
+
+ *chMode = CH_MODE_UNDEFINED;
/* Categorize channels */
for (ch = 0; ch < numChannels; ch += 1) {
- int i = 0, j, chGrpIdx = channelIndices[ch];
+ UCHAR chGrpIdx = channelIndices[ch];
+ int i = 0, j;
switch (channelType[ch]) {
- case ACT_FRONT:
case ACT_FRONT_TOP:
+ chGrpIdx += numChInGrp[CH_GROUP_FRONT]; /* Append after normal plain */
+ case ACT_FRONT:
grpIdx = CH_GROUP_FRONT;
break;
- case ACT_SIDE:
+#if (PCM_DMX_MAX_CHANNEL_GROUPS > 1)
case ACT_SIDE_TOP:
+ chGrpIdx += numChInGrp[CH_GROUP_SIDE]; /* Append after normal plain */
+ case ACT_SIDE:
grpIdx = CH_GROUP_SIDE;
break;
- case ACT_BACK:
case ACT_BACK_TOP:
+ chGrpIdx += numChInGrp[CH_GROUP_REAR]; /* Append after normal plain */
+ case ACT_BACK:
grpIdx = CH_GROUP_REAR;
break;
case ACT_LFE:
grpIdx = CH_GROUP_LFE;
break;
+#endif
default:
- err = -1;
- continue;
+ /* Found a channel that can not be categorized! Most likely due to corrupt input signalling.
+ The rescue strategy is to append it to the front channels (=> ignore index).
+ This could cause strange behaviour so return an error to signal it. */
+ err = PCMDMX_INVALID_MODE;
+ grpIdx = CH_GROUP_FRONT;
+ chGrpIdx = numChannels + numChToPlace;
+ numChToPlace += 1;
+ break;
}
if (numChInGrp[grpIdx] < PCM_DMX_MAX_CHANNELS_PER_GROUP) {
@@ -327,76 +519,152 @@ PCM_DMX_CHANNEL_MODE getChannelMode (
}
}
- /* Compose channel offset table */
+#if (PCM_DMX_MAX_CHANNEL_GROUPS > 1)
+ FDK_ASSERT( (numChInGrp[CH_GROUP_FRONT]+numChInGrp[CH_GROUP_SIDE]
+ +numChInGrp[CH_GROUP_REAR]+numChInGrp[CH_GROUP_LFE]) == numChannels);
+#else
+ FDK_ASSERT( numChInGrp[CH_GROUP_FRONT] == numChannels );
+#endif
+
+ /* Compose channel offset table:
+ * Map all channels to the internal representation. */
+ numChToPlace = 0;
/* Non-symmetric channels */
if (numChInGrp[CH_GROUP_FRONT] & 0x1) {
/* Odd number of front channels -> we have a center channel.
In MPEG-4 the center has the index 0. */
offsetTable[CENTER_FRONT_CHANNEL] = chIdx[CH_GROUP_FRONT][0];
+ numChFree[CH_GROUP_FRONT] -= 1;
}
for (grpIdx = 0; grpIdx < PCM_DMX_MAX_CHANNEL_GROUPS; grpIdx += 1) {
- int chMapPos, maxChannels = 0;
- ch = 0;
+ int chMapPos = 0;
+ ch = 0; /* Index of channel within the specific group */
switch (grpIdx) {
case CH_GROUP_FRONT:
chMapPos = LEFT_FRONT_CHANNEL;
- maxChannels = 3;
ch = numChInGrp[grpIdx] & 0x1;
break;
+#if (PCM_DMX_MAX_CHANNEL_GROUPS > 1)
case CH_GROUP_SIDE:
- chMapPos = LEFT_OUTSIDE_CHANNEL;
- maxChannels = 2;
break;
case CH_GROUP_REAR:
chMapPos = LEFT_REAR_CHANNEL;
- maxChannels = 2;
break;
case CH_GROUP_LFE:
chMapPos = LOW_FREQUENCY_CHANNEL;
- maxChannels = 1;
break;
+#endif
default:
- err = -1;
+ FDK_ASSERT(0);
continue;
}
+ /* Map all channels of the group */
for ( ; ch < numChInGrp[grpIdx]; ch += 1) {
- if (ch < maxChannels) {
+ if (numChFree[grpIdx] > 0) {
offsetTable[chMapPos] = chIdx[grpIdx][ch];
chMapPos += 1;
+ numChFree[grpIdx] -= 1;
} else {
- err = -1;
+ /* Add to the list of hardship cases considering a MPEG-like sorting order: */
+ int pos, sortIdx = grpIdx*PCM_DMX_MAX_CHANNELS_PER_GROUP + channelIndices[chIdx[grpIdx][ch]];
+ for (pos = numChToPlace; pos > 0; pos -= 1) {
+ if (h2pSortIdx[pos-1] > sortIdx) {
+ hardToPlace[pos] = hardToPlace[pos-1];
+ h2pSortIdx[pos] = h2pSortIdx[pos-1];
+ } else {
+ /* Insert channel at the current index/position */
+ break;
+ }
+ }
+ hardToPlace[pos] = chIdx[grpIdx][ch];
+ h2pSortIdx[pos] = sortIdx;
+ numChToPlace += 1;
}
}
}
- if (err == 0) {
- /* Compose the channel mode */
- chMode = (numChInGrp[CH_GROUP_LFE] & 0xF) << 12
- | (numChInGrp[CH_GROUP_REAR] & 0xF) << 8
- | (numChInGrp[CH_GROUP_SIDE] & 0xF) << 4
- | (numChInGrp[CH_GROUP_FRONT] & 0xF);
+ { /* Assign the hardship cases */
+ int chMapPos = 0;
+ int mappingHeat = 0;
+ for (ch = 0; ch < numChToPlace; ch+=1) {
+ int chAssigned = 0;
+
+ /* Just assigning the channels to the next best slot can lead to undesired results (especially for x/x/1.x
+ configurations). Thus use the MPEG-like sorting index to find the best fitting slot for each channel.
+ If this is not possible the sorting index will be ignored (mappingHeat >= 2). */
+ for ( ; chMapPos < PCM_DMX_MAX_CHANNELS; chMapPos+=1) {
+ if (offsetTable[chMapPos] == 255) {
+ int prvSortIdx = 0;
+ int nxtSortIdx = (CH_GROUP_LFE+1)*PCM_DMX_MAX_CHANNELS_PER_GROUP;
+
+ if (mappingHeat < 2) {
+ if (chMapPos < LEFT_REAR_CHANNEL) {
+ /* Got front channel slot */
+ prvSortIdx = CH_GROUP_FRONT*PCM_DMX_MAX_CHANNELS_PER_GROUP + chMapPos - CENTER_FRONT_CHANNEL;
+ nxtSortIdx = CH_GROUP_SIDE *PCM_DMX_MAX_CHANNELS_PER_GROUP;
+ }
+ else if (chMapPos < LOW_FREQUENCY_CHANNEL) {
+ /* Got back channel slot */
+ prvSortIdx = CH_GROUP_REAR*PCM_DMX_MAX_CHANNELS_PER_GROUP + chMapPos - LEFT_REAR_CHANNEL;
+ nxtSortIdx = CH_GROUP_LFE *PCM_DMX_MAX_CHANNELS_PER_GROUP;
+ }
+ else if (chMapPos < LEFT_MULTIPRPS_CHANNEL) {
+ /* Got lfe channel slot */
+ prvSortIdx = CH_GROUP_LFE *PCM_DMX_MAX_CHANNELS_PER_GROUP + chMapPos - LOW_FREQUENCY_CHANNEL;
+ nxtSortIdx = (CH_GROUP_LFE+1)*PCM_DMX_MAX_CHANNELS_PER_GROUP;
+ }
+ }
+
+ /* Assign the channel only if its sort index is within the range */
+ if ( (h2pSortIdx[ch] >= prvSortIdx)
+ && (h2pSortIdx[ch] < nxtSortIdx) ) {
+ offsetTable[chMapPos++] = hardToPlace[ch];
+ chAssigned = 1;
+ break;
+ }
+ }
+ }
+ if (chAssigned == 0) {
+ chMapPos = 0;
+ ch -= 1;
+ mappingHeat += 1;
+ continue;
+ }
+ }
}
- return (PCM_DMX_CHANNEL_MODE)chMode;
+ /* Compose the channel mode */
+ *chMode = (PCM_DMX_CHANNEL_MODE)( (numChInGrp[CH_GROUP_FRONT] & 0xF)
+#if (PCM_DMX_MAX_CHANNEL_GROUPS > 1)
+ | (numChInGrp[CH_GROUP_SIDE] & 0xF) << 4
+ | (numChInGrp[CH_GROUP_REAR] & 0xF) << 8
+ | (numChInGrp[CH_GROUP_LFE] & 0xF) << 12
+#endif
+ );
+
+ return err;
}
/** Generate a channel offset table and complete channel description for a given (packed) channel mode.
- * This function is the inverse to the getChannelMode() routine.
- * @param [in] The total number of channels of the given configuration.
+ * This function is the inverse to the getChannelMode() routine but does not support weird channel
+ * configurations. All channels have to be in the normal height layer and there must not be more
+ * channels in each group than given by maxChInGrp.
+ * @param [in] The packed channel mode of the configuration to be processed.
* @param [in] Array containing the channel mapping to be used (From MPEG PCE ordering to whatever is required).
* @param [out] Array where corresponding channel types for each channels are stored into.
* @param [out] Array where corresponding channel type indices for each output channel are stored into.
* @param [out] Array where the buffer offsets for each channel are stored into.
* @returns None.
**/
+static
void getChannelDescription (
const PCM_DMX_CHANNEL_MODE chMode, /* in */
- const UCHAR channelMapping[][PCM_DMX_MAX_CHANNELS], /* in */
+ const UCHAR channelMapping[][8], /* in */
AUDIO_CHANNEL_TYPE channelType[], /* out */
UCHAR channelIndices[], /* out */
UCHAR offsetTable[PCM_DMX_MAX_CHANNELS] /* out */
@@ -412,15 +680,17 @@ void getChannelDescription (
FDK_ASSERT(offsetTable != NULL);
/* Init output arrays */
- FDKmemclear(channelType, PCM_DMX_MAX_CHANNELS*sizeof(AUDIO_CHANNEL_TYPE));
- FDKmemclear(channelIndices, PCM_DMX_MAX_CHANNELS*sizeof(UCHAR));
+ FDKmemclear(channelType, PCM_DMX_MAX_IO_CHANNELS*sizeof(AUDIO_CHANNEL_TYPE));
+ FDKmemclear(channelIndices, PCM_DMX_MAX_IO_CHANNELS*sizeof(UCHAR));
FDKmemset(offsetTable, 255, PCM_DMX_MAX_CHANNELS*sizeof(UCHAR));
/* Extract the number of channels per group */
numChInGrp[CH_GROUP_FRONT] = chMode & 0xF;
+#if (PCM_DMX_MAX_CHANNEL_GROUPS > 1)
numChInGrp[CH_GROUP_SIDE] = (chMode >> 4) & 0xF;
numChInGrp[CH_GROUP_REAR] = (chMode >> 8) & 0xF;
numChInGrp[CH_GROUP_LFE] = (chMode >> 12) & 0xF;
+#endif
/* Summerize to get the total number of channels */
for (grpIdx = 0; grpIdx < PCM_DMX_MAX_CHANNEL_GROUPS; grpIdx += 1) {
@@ -428,7 +698,29 @@ void getChannelDescription (
}
/* Get the appropriate channel map */
- pChannelMap = channelMapping[numChannels-1];
+ switch (chMode) {
+ case CH_MODE_1_0_0_0:
+ case CH_MODE_2_0_0_0:
+ case CH_MODE_3_0_0_0:
+ case CH_MODE_3_0_1_0:
+ case CH_MODE_3_0_2_0:
+ case CH_MODE_3_0_2_1:
+ pChannelMap = channelMapping[numChannels];
+ break;
+ case CH_MODE_3_0_3_1:
+ pChannelMap = channelMapping[11];
+ break;
+ case CH_MODE_3_0_4_1:
+ pChannelMap = channelMapping[12];
+ break;
+ case CH_MODE_5_0_2_1:
+ pChannelMap = channelMapping[7];
+ break;
+ default:
+ /* fallback */
+ pChannelMap = channelMapping[0];
+ break;
+ }
/* Compose channel offset table */
@@ -436,15 +728,17 @@ void getChannelDescription (
if (numChInGrp[CH_GROUP_FRONT] & 0x1) {
/* Odd number of front channels -> we have a center channel.
In MPEG-4 the center has the index 0. */
- offsetTable[CENTER_FRONT_CHANNEL] = pChannelMap[0];
- channelType[0] = ACT_FRONT;
+ int mappedIdx = pChannelMap[ch];
+ offsetTable[CENTER_FRONT_CHANNEL] = mappedIdx;
+ channelType[mappedIdx] = ACT_FRONT;
+ channelIndices[mappedIdx] = 0;
ch += 1;
}
for (grpIdx = 0; grpIdx < PCM_DMX_MAX_CHANNEL_GROUPS; grpIdx += 1) {
- AUDIO_CHANNEL_TYPE type;
- int chMapPos, maxChannels = 0;
- int chIdx = 0;
+ AUDIO_CHANNEL_TYPE type = ACT_NONE;
+ int chMapPos = 0, maxChannels = 0;
+ int chIdx = 0; /* Index of channel within the specific group */
switch (grpIdx) {
case CH_GROUP_FRONT:
@@ -453,10 +747,11 @@ void getChannelDescription (
maxChannels = 3;
chIdx = numChInGrp[grpIdx] & 0x1;
break;
+#if (PCM_DMX_MAX_CHANNEL_GROUPS > 1)
case CH_GROUP_SIDE:
+ /* Always map side channels to the multipurpose group. */
type = ACT_SIDE;
- chMapPos = LEFT_OUTSIDE_CHANNEL;
- maxChannels = 2;
+ chMapPos = LEFT_MULTIPRPS_CHANNEL;
break;
case CH_GROUP_REAR:
type = ACT_BACK;
@@ -468,20 +763,646 @@ void getChannelDescription (
chMapPos = LOW_FREQUENCY_CHANNEL;
maxChannels = 1;
break;
+#endif
default:
break;
}
- for ( ; (chIdx < numChInGrp[grpIdx]) && (chIdx < maxChannels); chIdx += 1) {
- offsetTable[chMapPos] = pChannelMap[ch];
- channelType[ch] = type;
- channelIndices[ch] = chIdx;
+ /* Map all channels in this group */
+ for ( ; chIdx < numChInGrp[grpIdx]; chIdx += 1) {
+ int mappedIdx = pChannelMap[ch];
+ if (chIdx == maxChannels) {
+ /* No space left in this channel group!
+ Use the multipurpose group instead: */
+ chMapPos = LEFT_MULTIPRPS_CHANNEL;
+ }
+ offsetTable[chMapPos] = mappedIdx;
+ channelType[mappedIdx] = type;
+ channelIndices[mappedIdx] = chIdx;
chMapPos += 1;
ch += 1;
}
}
}
+/** Private helper function for downmix matrix manipulation that initializes
+ * one row in a given downmix matrix (corresponding to one output channel).
+ * @param [inout] Pointer to fixed-point parts of the downmix matrix.
+ * @param [inout] Pointer to scale factor matrix associated to the downmix factors.
+ * @param [in] Index of channel (row) to be initialized.
+ * @returns Nothing to return.
+ **/
+static
+void dmxInitChannel(
+ FIXP_DMX mixFactors[PCM_DMX_MAX_CHANNELS][PCM_DMX_MAX_CHANNELS],
+ INT mixScales[PCM_DMX_MAX_CHANNELS][PCM_DMX_MAX_CHANNELS],
+ const unsigned int outCh
+ )
+{
+ unsigned int inCh;
+ for (inCh=0; inCh < PCM_DMX_MAX_CHANNELS; inCh+=1) {
+ if (inCh == outCh) {
+ mixFactors[outCh][inCh] = FL2FXCONST_DMX(0.5f);
+ mixScales[outCh][inCh] = 1;
+ } else {
+ mixFactors[outCh][inCh] = FL2FXCONST_DMX(0.0f);
+ mixScales[outCh][inCh] = 0;
+ }
+ }
+}
+
+/** Private helper function for downmix matrix manipulation that does a reset
+ * of one row in a given downmix matrix (corresponding to one output channel).
+ * @param [inout] Pointer to fixed-point parts of the downmix matrix.
+ * @param [inout] Pointer to scale factor matrix associated to the downmix factors.
+ * @param [in] Index of channel (row) to be cleared/reset.
+ * @returns Nothing to return.
+ **/
+static
+void dmxClearChannel(
+ FIXP_DMX mixFactors[PCM_DMX_MAX_CHANNELS][PCM_DMX_MAX_CHANNELS],
+ INT mixScales[PCM_DMX_MAX_CHANNELS][PCM_DMX_MAX_CHANNELS],
+ const unsigned int outCh
+ )
+{
+ FDKmemclear(&mixFactors[outCh], PCM_DMX_MAX_CHANNELS*sizeof(FIXP_DMX));
+ FDKmemclear(&mixScales[outCh], PCM_DMX_MAX_CHANNELS*sizeof(INT));
+}
+
+/** Private helper function for downmix matrix manipulation that applies a source channel (row)
+ * scaled by a given mix factor to a destination channel (row) in a given downmix matrix.
+ * Existing mix factors of the destination channel (row) will get overwritten.
+ * @param [inout] Pointer to fixed-point parts of the downmix matrix.
+ * @param [inout] Pointer to scale factor matrix associated to the downmix factors.
+ * @param [in] Index of source channel (row).
+ * @param [in] Index of destination channel (row).
+ * @param [in] Fixed-point part of mix factor to be applied.
+ * @param [in] Scale factor of mix factor to be applied.
+ * @returns Nothing to return.
+ **/
+static
+void dmxSetChannel(
+ FIXP_DMX mixFactors[PCM_DMX_MAX_CHANNELS][PCM_DMX_MAX_CHANNELS],
+ INT mixScales[PCM_DMX_MAX_CHANNELS][PCM_DMX_MAX_CHANNELS],
+ const unsigned int dstCh,
+ const unsigned int srcCh,
+ const FIXP_DMX factor,
+ const INT scale
+ )
+{
+ int ch;
+ for (ch=0; ch < PCM_DMX_MAX_CHANNELS; ch+=1) {
+ if (mixFactors[srcCh][ch] != (FIXP_DMX)0) {
+ mixFactors[dstCh][ch] = FX_DBL2FX_DMX(fMult(mixFactors[srcCh][ch], factor));
+ mixScales[dstCh][ch] = mixScales[srcCh][ch] + scale;
+ }
+ }
+}
+
+/** Private helper function for downmix matrix manipulation that adds a source channel (row)
+ * scaled by a given mix factor to a destination channel (row) in a given downmix matrix.
+ * @param [inout] Pointer to fixed-point parts of the downmix matrix.
+ * @param [inout] Pointer to scale factor matrix associated to the downmix factors.
+ * @param [in] Index of source channel (row).
+ * @param [in] Index of destination channel (row).
+ * @param [in] Fixed-point part of mix factor to be applied.
+ * @param [in] Scale factor of mix factor to be applied.
+ * @returns Nothing to return.
+ **/
+static
+void dmxAddChannel(
+ FIXP_DMX mixFactors[PCM_DMX_MAX_CHANNELS][PCM_DMX_MAX_CHANNELS],
+ INT mixScales[PCM_DMX_MAX_CHANNELS][PCM_DMX_MAX_CHANNELS],
+ const unsigned int dstCh,
+ const unsigned int srcCh,
+ const FIXP_DMX factor,
+ const INT scale
+ )
+{
+ int ch;
+ for (ch=0; ch < PCM_DMX_MAX_CHANNELS; ch+=1) {
+ FIXP_DBL addFact = fMult(mixFactors[srcCh][ch], factor);
+ if (addFact != (FIXP_DMX)0) {
+ INT newScale = mixScales[srcCh][ch] + scale;
+ if (mixFactors[dstCh][ch] != (FIXP_DMX)0) {
+ if (newScale > mixScales[dstCh][ch]) {
+ mixFactors[dstCh][ch] >>= newScale - mixScales[dstCh][ch];
+ } else {
+ addFact >>= mixScales[dstCh][ch] - newScale;
+ newScale = mixScales[dstCh][ch];
+ }
+ }
+ mixFactors[dstCh][ch] += FX_DBL2FX_DMX(addFact);
+ mixScales[dstCh][ch] = newScale;
+ }
+ }
+}
+
+
+/** Private function that creates a downmix factor matrix depending on the input and output
+ * configuration, the user parameters as well as the given metadata. This function is the modules
+ * brain and hold all downmix algorithms.
+ * @param [in] Flag that indicates if inChMode holds a real (packed) channel mode or has been
+ converted to a MPEG-4 channel configuration index.
+ * @param [in] Dependent on the inModeIsCfg flag this field hands in a (packed) channel mode or
+ the corresponding MPEG-4 channel configuration index.of the input configuration.
+ * @param [in] The (packed) channel mode of the output configuration.
+ * @param [in] Pointer to structure holding all current user parameter.
+ * @param [in] Pointer to field holding all current meta data.
+ * @param [out] Pointer to fixed-point parts of the downmix matrix. Normalized to one scale factor.
+ * @param [out] The common scale factor of the downmix matrix.
+ * @returns An error code.
+ **/
+static
+PCMDMX_ERROR getMixFactors (
+ const UCHAR inModeIsCfg,
+ PCM_DMX_CHANNEL_MODE inChMode,
+ const PCM_DMX_CHANNEL_MODE outChMode,
+ const PCM_DMX_USER_PARAMS *pParams,
+ const DMX_BS_META_DATA *pMetaData,
+ FIXP_DMX mixFactors[PCM_DMX_MAX_CHANNELS][PCM_DMX_MAX_CHANNELS],
+ INT *pOutScale
+ )
+{
+ PCMDMX_ERROR err = PCMDMX_OK;
+ INT mixScales[PCM_DMX_MAX_CHANNELS][PCM_DMX_MAX_CHANNELS];
+ INT maxScale = 0;
+ int numInChannel, numOutChannel;
+ unsigned int outCh, inCh, inChCfg = 0;
+ unsigned int valid[PCM_DMX_MAX_CHANNELS] = { 0 };
+
+ FDK_ASSERT(pMetaData != NULL);
+ FDK_ASSERT(mixFactors != NULL);
+ /* Check on a supported output configuration */
+ FDK_ASSERT( (outChMode == CH_MODE_1_0_0_0)
+ || (outChMode == CH_MODE_2_0_0_0)
+ || (outChMode == CH_MODE_3_0_2_1) );
+
+ if (inModeIsCfg) {
+ /* Workaround for the ambiguity of the internal channel modes.
+ Convert channel config to channel mode: */
+ inChCfg = (unsigned int)inChMode;
+ switch (inChCfg) {
+ case 1: case 2: case 3:
+#if (PCM_DMX_MAX_CHANNELS > 3)
+ case 4: case 5: case 6:
+#endif
+ inChMode = outChModeTable[inChCfg];
+ break;
+ case 11:
+ inChMode = CH_MODE_3_0_3_1;
+ break;
+ case 12:
+ inChMode = CH_MODE_3_0_4_1;
+ break;
+ case 7: case 14:
+ inChMode = CH_MODE_5_0_2_1;
+ break;
+ default:
+ FDK_ASSERT(0);
+ }
+ }
+
+ /* Extract the total number of input channels */
+ numInChannel = (inChMode&0xF)
+ + ((inChMode>> 4)&0xF)
+ + ((inChMode>> 8)&0xF)
+ + ((inChMode>>12)&0xF);
+ /* Extract the total number of output channels */
+ numOutChannel = (outChMode&0xF)
+ + ((outChMode>> 4)&0xF)
+ + ((outChMode>> 8)&0xF)
+ + ((outChMode>>12)&0xF);
+
+ /* MPEG ammendment 4 aka ETSI metadata and fallback mode: */
+
+
+ /* Create identity DMX matrix: */
+ for (outCh=0; outCh < PCM_DMX_MAX_CHANNELS; outCh+=1) {
+ dmxInitChannel( mixFactors, mixScales, outCh );
+ }
+ if (((inChMode>>12)&0xF) == 0) {
+ /* Clear empty or wrongly mapped input channel */
+ dmxClearChannel( mixFactors, mixScales, LOW_FREQUENCY_CHANNEL );
+ }
+
+ /* FIRST STAGE: */
+ if (numInChannel > SIX_CHANNEL)
+ { /* Always use MPEG equations either with meta data or with default values. */
+ FIXP_DMX dMixFactA, dMixFactB;
+ INT dMixScaleA, dMixScaleB;
+ int isValidCfg = TRUE;
+
+ /* Get factors from meta data */
+ dMixFactA = abMixLvlValueTab[pMetaData->dmixIdxA];
+ dMixScaleA = (pMetaData->dmixIdxA==0) ? 1 : 0;
+ dMixFactB = abMixLvlValueTab[pMetaData->dmixIdxB];
+ dMixScaleB = (pMetaData->dmixIdxB==0) ? 1 : 0;
+
+ /* Check if input is in the list of supported configurations */
+ switch (inChMode) {
+ case CH_MODE_3_0_3_1: /* chCfg 11 */
+ /* 6.1ch: C' = C; L' = L; R' = R; LFE' = LFE;
+ Ls' = Ls*dmix_a_idx + Cs*dmix_b_idx;
+ Rs' = Rs*dmix_a_idx + Cs*dmix_b_idx; */
+ dmxClearChannel( mixFactors, mixScales, RIGHT_MULTIPRPS_CHANNEL ); /* clear empty input channel */
+ dmxSetChannel( mixFactors, mixScales, LEFT_REAR_CHANNEL, LEFT_REAR_CHANNEL, dMixFactA, dMixScaleA );
+ dmxSetChannel( mixFactors, mixScales, LEFT_REAR_CHANNEL, LEFT_MULTIPRPS_CHANNEL, dMixFactB, dMixScaleB );
+ dmxSetChannel( mixFactors, mixScales, RIGHT_REAR_CHANNEL, RIGHT_REAR_CHANNEL, dMixFactA, dMixScaleA );
+ dmxSetChannel( mixFactors, mixScales, RIGHT_REAR_CHANNEL, LEFT_MULTIPRPS_CHANNEL, dMixFactB, dMixScaleB );
+ break;
+ case CH_MODE_3_2_1_0:
+ case CH_MODE_3_2_1_1: /* chCfg 11 but with side channels */
+ /* 6.1ch: C' = C; L' = L; R' = R; LFE' = LFE;
+ Ls' = Ls*dmix_a_idx + Cs*dmix_b_idx;
+ Rs' = Rs*dmix_a_idx + Cs*dmix_b_idx; */
+ dmxClearChannel( mixFactors, mixScales, RIGHT_REAR_CHANNEL ); /* clear empty input channel */
+ dmxSetChannel( mixFactors, mixScales, RIGHT_REAR_CHANNEL, LEFT_REAR_CHANNEL, dMixFactB, dMixScaleB );
+ dmxSetChannel( mixFactors, mixScales, RIGHT_REAR_CHANNEL, RIGHT_MULTIPRPS_CHANNEL, dMixFactA, dMixScaleA );
+ dmxSetChannel( mixFactors, mixScales, LEFT_REAR_CHANNEL, LEFT_REAR_CHANNEL, dMixFactB, dMixScaleB );
+ dmxSetChannel( mixFactors, mixScales, LEFT_REAR_CHANNEL, LEFT_MULTIPRPS_CHANNEL, dMixFactA, dMixScaleA );
+ isValidCfg = FALSE;
+ err = PCMDMX_INVALID_MODE;
+ break;
+ case CH_MODE_5_2_1_0:
+ case CH_MODE_5_0_1_0:
+ case CH_MODE_5_0_1_1:
+ /* Ls' = Cs*dmix_a_idx;
+ Rs' = Cs*dmix_a_idx; */
+ dmxClearChannel( mixFactors, mixScales, RIGHT_REAR_CHANNEL ); /* clear empty input channel */
+ dmxSetChannel( mixFactors, mixScales, RIGHT_REAR_CHANNEL, LEFT_REAR_CHANNEL, dMixFactA, dMixScaleA );
+ dmxSetChannel( mixFactors, mixScales, LEFT_REAR_CHANNEL, LEFT_REAR_CHANNEL, dMixFactA, dMixScaleA );
+ isValidCfg = FALSE;
+ err = PCMDMX_INVALID_MODE;
+ break;
+ case CH_MODE_3_0_4_1: /* chCfg 12 */
+ /* 7.1ch Surround Back: C' = C; L' = L; R' = R; LFE' = LFE;
+ Ls' = Ls*dmix_a_idx + Lsr*dmix_b_idx;
+ Rs' = Rs*dmix_a_idx + Rsr*dmix_b_idx; */
+ dmxSetChannel( mixFactors, mixScales, LEFT_REAR_CHANNEL, LEFT_REAR_CHANNEL, dMixFactA, dMixScaleA );
+ dmxSetChannel( mixFactors, mixScales, LEFT_REAR_CHANNEL, LEFT_MULTIPRPS_CHANNEL, dMixFactB, dMixScaleB );
+ dmxSetChannel( mixFactors, mixScales, RIGHT_REAR_CHANNEL, RIGHT_REAR_CHANNEL, dMixFactA, dMixScaleA );
+ dmxSetChannel( mixFactors, mixScales, RIGHT_REAR_CHANNEL, RIGHT_MULTIPRPS_CHANNEL, dMixFactB, dMixScaleB );
+ break;
+ case CH_MODE_5_0_2_1: /* chCfg 7 || 14 */
+ if (inChCfg == 14) {
+ /* 7.1ch Front Height: C' = C; Ls' = Ls; Rs' = Rs; LFE' = LFE;
+ L' = L*dmix_a_idx + Lv*dmix_b_idx;
+ R' = R*dmix_a_idx + Rv*dmix_b_idx; */
+ dmxSetChannel( mixFactors, mixScales, LEFT_FRONT_CHANNEL, LEFT_FRONT_CHANNEL, dMixFactA, dMixScaleA );
+ dmxSetChannel( mixFactors, mixScales, LEFT_FRONT_CHANNEL, LEFT_MULTIPRPS_CHANNEL, dMixFactB, dMixScaleB );
+ dmxSetChannel( mixFactors, mixScales, RIGHT_FRONT_CHANNEL, RIGHT_FRONT_CHANNEL, dMixFactA, dMixScaleA );
+ dmxSetChannel( mixFactors, mixScales, RIGHT_FRONT_CHANNEL, RIGHT_MULTIPRPS_CHANNEL, dMixFactB, dMixScaleB );
+ } else {
+ /* 7.1ch Front: Ls' = Ls; Rs' = Rs; LFE' = LFE;
+ C' = C + (Lc+Rc)*dmix_a_idx;
+ L' = L + Lc*dmix_b_idx;
+ R' = R + Rc*dmix_b_idx;
+ CAUTION: L+R are not at (MPEG) index 1+2. */
+ dmxSetChannel( mixFactors, mixScales, CENTER_FRONT_CHANNEL, LEFT_FRONT_CHANNEL, dMixFactA, dMixScaleA );
+ dmxSetChannel( mixFactors, mixScales, CENTER_FRONT_CHANNEL, RIGHT_FRONT_CHANNEL, dMixFactA, dMixScaleA );
+ dmxSetChannel( mixFactors, mixScales, LEFT_FRONT_CHANNEL, LEFT_FRONT_CHANNEL, dMixFactB, dMixScaleB );
+ dmxSetChannel( mixFactors, mixScales, LEFT_FRONT_CHANNEL, LEFT_MULTIPRPS_CHANNEL, FL2FXCONST_DMX(0.5f), 1 );
+ dmxSetChannel( mixFactors, mixScales, RIGHT_FRONT_CHANNEL, RIGHT_FRONT_CHANNEL, dMixFactB, dMixScaleB );
+ dmxSetChannel( mixFactors, mixScales, RIGHT_FRONT_CHANNEL, RIGHT_MULTIPRPS_CHANNEL, FL2FXCONST_DMX(0.5f), 1 );
+ }
+ break;
+ default:
+ /* Nothing to do. Just use the identity matrix. */
+ isValidCfg = FALSE;
+ err = PCMDMX_INVALID_MODE;
+ break;
+ }
+
+ /* Add additional DMX gain */
+ if ( (isValidCfg == TRUE)
+ && (pMetaData->dmxGainIdx5 != 0))
+ { /* Apply DMX gain 5 */
+ FIXP_DMX dmxGain;
+ INT dmxScale;
+ INT sign = (pMetaData->dmxGainIdx5 & 0x40) ? -1 : 1;
+ INT val = pMetaData->dmxGainIdx5 & 0x3F;
+
+ /* 10^(dmx_gain_5/80) */
+ dmxGain = FX_DBL2FX_DMX( fLdPow(
+ FL2FXCONST_DBL(0.830482023721841f), 2, /* log2(10) */
+ (FIXP_DBL)(sign*val*(LONG)FL2FXCONST_DBL(0.0125f)), 0,
+ &dmxScale )
+ );
+ /* Currently only positive scale factors supported! */
+ if (dmxScale < 0) {
+ dmxGain >>= -dmxScale;
+ dmxScale = 0;
+ }
+
+ dmxSetChannel( mixFactors, mixScales, CENTER_FRONT_CHANNEL, CENTER_FRONT_CHANNEL, dmxGain, dmxScale );
+ dmxSetChannel( mixFactors, mixScales, LEFT_FRONT_CHANNEL, LEFT_FRONT_CHANNEL, dmxGain, dmxScale );
+ dmxSetChannel( mixFactors, mixScales, RIGHT_FRONT_CHANNEL, RIGHT_FRONT_CHANNEL, dmxGain, dmxScale );
+ dmxSetChannel( mixFactors, mixScales, LEFT_REAR_CHANNEL, LEFT_REAR_CHANNEL, dmxGain, dmxScale );
+ dmxSetChannel( mixFactors, mixScales, RIGHT_REAR_CHANNEL, RIGHT_REAR_CHANNEL, dmxGain, dmxScale );
+ dmxSetChannel( mixFactors, mixScales, LOW_FREQUENCY_CHANNEL, LOW_FREQUENCY_CHANNEL, dmxGain, dmxScale );
+ }
+
+ /* Mark the output channels */
+ valid[CENTER_FRONT_CHANNEL] = 1;
+ valid[LEFT_FRONT_CHANNEL] = 1;
+ valid[RIGHT_FRONT_CHANNEL] = 1;
+ valid[LEFT_REAR_CHANNEL] = 1;
+ valid[RIGHT_REAR_CHANNEL] = 1;
+ valid[LOW_FREQUENCY_CHANNEL] = 1;
+
+ /* Update channel mode for the next stage */
+ inChMode = CH_MODE_3_0_2_1;
+ }
+
+ /* SECOND STAGE: */
+ if (numOutChannel <= TWO_CHANNEL) {
+ /* Create DMX matrix according to input configuration */
+ switch (inChMode) {
+ case CH_MODE_2_0_0_0: /* chCfg 2 */
+ /* Apply the dual channel mode. */
+ switch (pParams->dualChannelMode) {
+ case CH1_MODE: /* L' = 0.707 * Ch1;
+ R' = 0.707 * Ch1; */
+ dmxSetChannel( mixFactors, mixScales, LEFT_FRONT_CHANNEL, LEFT_FRONT_CHANNEL, FL2FXCONST_DMX(0.707f), 0 );
+ dmxSetChannel( mixFactors, mixScales, RIGHT_FRONT_CHANNEL, LEFT_FRONT_CHANNEL, FL2FXCONST_DMX(0.707f), 0 );
+ break;
+ case CH2_MODE: /* L' = 0.707 * Ch2;
+ R' = 0.707 * Ch2; */
+ dmxSetChannel( mixFactors, mixScales, LEFT_FRONT_CHANNEL, RIGHT_FRONT_CHANNEL, FL2FXCONST_DMX(0.707f), 0 );
+ dmxSetChannel( mixFactors, mixScales, RIGHT_FRONT_CHANNEL, RIGHT_FRONT_CHANNEL, FL2FXCONST_DMX(0.707f), 0 );
+ break;
+ case MIXED_MODE: /* L' = 0.5*Ch1 + 0.5*Ch2;
+ R' = 0.5*Ch1 + 0.5*Ch2; */
+ dmxSetChannel( mixFactors, mixScales, LEFT_FRONT_CHANNEL, LEFT_FRONT_CHANNEL, FL2FXCONST_DMX(0.5f), 0 );
+ dmxAddChannel( mixFactors, mixScales, LEFT_FRONT_CHANNEL, RIGHT_FRONT_CHANNEL, FL2FXCONST_DMX(0.5f), 0 );
+ dmxSetChannel( mixFactors, mixScales, RIGHT_FRONT_CHANNEL, LEFT_FRONT_CHANNEL, FL2FXCONST_DMX(0.5f), 0 );
+ dmxAddChannel( mixFactors, mixScales, RIGHT_FRONT_CHANNEL, RIGHT_FRONT_CHANNEL, FL2FXCONST_DMX(0.5f), 0 );
+ break;
+ default:
+ case STEREO_MODE:
+ /* Nothing to do */
+ break;
+ }
+ break;
+ case CH_MODE_2_0_1_0:
+ /* L' = L + 0.707*S;
+ R' = R + 0.707*S; */
+ dmxAddChannel( mixFactors, mixScales, LEFT_FRONT_CHANNEL, LEFT_REAR_CHANNEL, FL2FXCONST_DMX(0.707f), 0 );
+ dmxAddChannel( mixFactors, mixScales, RIGHT_FRONT_CHANNEL, LEFT_REAR_CHANNEL, FL2FXCONST_DMX(0.707f), 0 );
+ break;
+ case CH_MODE_3_0_0_0: /* chCfg 3 */
+ /* L' = L + 0.707*C;
+ R' = R + 0.707*C; */
+ dmxAddChannel( mixFactors, mixScales, LEFT_FRONT_CHANNEL, CENTER_FRONT_CHANNEL, FL2FXCONST_DMX(0.707f), 0 );
+ dmxAddChannel( mixFactors, mixScales, RIGHT_FRONT_CHANNEL, CENTER_FRONT_CHANNEL, FL2FXCONST_DMX(0.707f), 0 );
+ break;
+ case CH_MODE_3_0_1_0: /* chCfg 4 */
+ /* L' = L + 0.707*C + 0.707*S;
+ R' = R + 0.707*C + 0.707*S; */
+ dmxAddChannel( mixFactors, mixScales, LEFT_FRONT_CHANNEL, CENTER_FRONT_CHANNEL, FL2FXCONST_DMX(0.707f), 0 );
+ dmxAddChannel( mixFactors, mixScales, LEFT_FRONT_CHANNEL, LEFT_REAR_CHANNEL, FL2FXCONST_DMX(0.707f), 0 );
+ dmxAddChannel( mixFactors, mixScales, RIGHT_FRONT_CHANNEL, CENTER_FRONT_CHANNEL, FL2FXCONST_DMX(0.707f), 0 );
+ dmxAddChannel( mixFactors, mixScales, RIGHT_FRONT_CHANNEL, LEFT_REAR_CHANNEL, FL2FXCONST_DMX(0.707f), 0 );
+ break;
+ case CH_MODE_3_0_2_0: /* chCfg 5 */
+ case CH_MODE_3_0_2_1: /* chCfg 6 */
+ /* MPEG + ITU + DLB
+ But because the default downmix equations and coefficients are equal we stick to MPEG. */
+ if ( (pMetaData->typeFlags & TYPE_DSE_DATA)
+ || !(pMetaData->typeFlags & TYPE_PCE_DATA) )
+ {
+ FIXP_DMX cMixLvl, sMixLvl, lMixLvl;
+ INT cMixScale, sMixScale, lMixScale;
+
+ /* Get factors from meta data */
+ cMixLvl = abMixLvlValueTab[pMetaData->cLevIdx];
+ cMixScale = (pMetaData->cLevIdx==0) ? 1 : 0;
+ sMixLvl = abMixLvlValueTab[pMetaData->sLevIdx];
+ sMixScale = (pMetaData->sLevIdx==0) ? 1 : 0;
+ lMixLvl = lfeMixLvlValueTab[pMetaData->dmixIdxLfe];
+ if (pMetaData->dmixIdxLfe <= 1) {
+ lMixScale = 2;
+ } else if (pMetaData->dmixIdxLfe <= 5) {
+ lMixScale = 1;
+ } else {
+ lMixScale = 0;
+ }
+ /* Setup the DMX matrix */
+ if ( (pParams->pseudoSurrMode == FORCE_PS_DMX)
+ || ((pParams->pseudoSurrMode == AUTO_PS_DMX) && (pMetaData->pseudoSurround==1)))
+ { /* L' = L + C*clev - (Ls+Rs)*slev + LFE*lflev;
+ R' = R + C*clev + (Ls+Rs)*slev + LFE*lflev; */
+ dmxAddChannel( mixFactors, mixScales, LEFT_FRONT_CHANNEL, CENTER_FRONT_CHANNEL, cMixLvl, cMixScale );
+ dmxAddChannel( mixFactors, mixScales, LEFT_FRONT_CHANNEL, LEFT_REAR_CHANNEL, -sMixLvl, sMixScale );
+ dmxAddChannel( mixFactors, mixScales, LEFT_FRONT_CHANNEL, RIGHT_REAR_CHANNEL, -sMixLvl, sMixScale );
+ dmxAddChannel( mixFactors, mixScales, LEFT_FRONT_CHANNEL, LOW_FREQUENCY_CHANNEL, lMixLvl, lMixScale );
+ dmxAddChannel( mixFactors, mixScales, RIGHT_FRONT_CHANNEL, CENTER_FRONT_CHANNEL, cMixLvl, cMixScale );
+ dmxAddChannel( mixFactors, mixScales, RIGHT_FRONT_CHANNEL, LEFT_REAR_CHANNEL, sMixLvl, sMixScale );
+ dmxAddChannel( mixFactors, mixScales, RIGHT_FRONT_CHANNEL, RIGHT_REAR_CHANNEL, sMixLvl, sMixScale );
+ dmxAddChannel( mixFactors, mixScales, RIGHT_FRONT_CHANNEL, LOW_FREQUENCY_CHANNEL, lMixLvl, lMixScale );
+ }
+ else
+ { /* L' = L + C*clev + Ls*slev + LFE*llev;
+ R' = R + C*clev + Rs*slev + LFE*llev; */
+ dmxAddChannel( mixFactors, mixScales, LEFT_FRONT_CHANNEL, CENTER_FRONT_CHANNEL, cMixLvl, cMixScale );
+ dmxAddChannel( mixFactors, mixScales, LEFT_FRONT_CHANNEL, LEFT_REAR_CHANNEL, sMixLvl, sMixScale );
+ dmxAddChannel( mixFactors, mixScales, LEFT_FRONT_CHANNEL, LOW_FREQUENCY_CHANNEL, lMixLvl, lMixScale );
+ dmxAddChannel( mixFactors, mixScales, RIGHT_FRONT_CHANNEL, CENTER_FRONT_CHANNEL, cMixLvl, cMixScale );
+ dmxAddChannel( mixFactors, mixScales, RIGHT_FRONT_CHANNEL, RIGHT_REAR_CHANNEL, sMixLvl, sMixScale );
+ dmxAddChannel( mixFactors, mixScales, RIGHT_FRONT_CHANNEL, LOW_FREQUENCY_CHANNEL, lMixLvl, lMixScale );
+ }
+
+ /* Add additional DMX gain */
+ if ( pMetaData->dmxGainIdx2 != 0 )
+ { /* Apply DMX gain 2 */
+ FIXP_DMX dmxGain;
+ INT dmxScale;
+ INT sign = (pMetaData->dmxGainIdx2 & 0x40) ? -1 : 1;
+ INT val = pMetaData->dmxGainIdx2 & 0x3F;
+
+ /* 10^(dmx_gain_2/80) */
+ dmxGain = FX_DBL2FX_DMX( fLdPow(
+ FL2FXCONST_DBL(0.830482023721841f), 2, /* log2(10) */
+ (FIXP_DBL)(sign*val*(LONG)FL2FXCONST_DBL(0.0125f)), 0,
+ &dmxScale )
+ );
+ /* Currently only positive scale factors supported! */
+ if (dmxScale < 0) {
+ dmxGain >>= -dmxScale;
+ dmxScale = 0;
+ }
+
+ dmxSetChannel( mixFactors, mixScales, LEFT_FRONT_CHANNEL, LEFT_FRONT_CHANNEL, dmxGain, dmxScale );
+ dmxSetChannel( mixFactors, mixScales, RIGHT_FRONT_CHANNEL, RIGHT_FRONT_CHANNEL, dmxGain, dmxScale );
+ }
+ }
+#ifdef PCE_METADATA_ENABLE
+ else {
+ FIXP_DMX flev, clev, slevLL, slevLR, slevRL, slevRR;
+ FIXP_DMX mtrxMixDwnCoef = mpegMixDownIdx2Coef[pMetaData->matrixMixdownIdx];
+
+ if ( (pParams->pseudoSurrMode == FORCE_PS_DMX)
+ || ((pParams->pseudoSurrMode == AUTO_PS_DMX) && (pMetaData->pseudoSurround==1)))
+ { /* 3/2 input: L' = (1.707+2*A)^-1 * [L+0.707*C-A*Ls-A*Rs];
+ R' = (1.707+2*A)^-1 * [R+0.707*C+A*Ls+A*Rs]; */
+ flev = mpegMixDownIdx2PreFact[1][pMetaData->matrixMixdownIdx];
+ slevRR = slevRL = FX_DBL2FX_DMX(fMult(flev, mtrxMixDwnCoef));
+ slevLL = slevLR = -slevRL;
+ }
+ else {
+ /* 3/2 input: L' = (1.707+A)^-1 * [L+0.707*C+A*Ls];
+ R' = (1.707+A)^-1 * [R+0.707*C+A*Rs]; */
+ flev = mpegMixDownIdx2PreFact[0][pMetaData->matrixMixdownIdx];
+ slevRR = slevLL = FX_DBL2FX_DMX(fMult(flev, mtrxMixDwnCoef));
+ slevLR = slevRL = (FIXP_SGL)0;
+ }
+ /* common factor */
+ clev = FX_DBL2FX_DMX(fMult(flev, mpegMixDownIdx2Coef[0] /* 0.707 */));
+
+ dmxSetChannel( mixFactors, mixScales, LEFT_FRONT_CHANNEL, LEFT_FRONT_CHANNEL, flev, 0 );
+ dmxSetChannel( mixFactors, mixScales, LEFT_FRONT_CHANNEL, CENTER_FRONT_CHANNEL, clev, 0 );
+ dmxSetChannel( mixFactors, mixScales, LEFT_FRONT_CHANNEL, LEFT_REAR_CHANNEL, slevLL, 0 );
+ dmxSetChannel( mixFactors, mixScales, LEFT_FRONT_CHANNEL, RIGHT_REAR_CHANNEL, slevLR, 0 );
+
+ dmxSetChannel( mixFactors, mixScales, RIGHT_FRONT_CHANNEL, RIGHT_FRONT_CHANNEL, flev, 0 );
+ dmxSetChannel( mixFactors, mixScales, RIGHT_FRONT_CHANNEL, CENTER_FRONT_CHANNEL, clev, 0 );
+ dmxSetChannel( mixFactors, mixScales, RIGHT_FRONT_CHANNEL, LEFT_REAR_CHANNEL, slevRL, 0 );
+ dmxSetChannel( mixFactors, mixScales, RIGHT_FRONT_CHANNEL, RIGHT_REAR_CHANNEL, slevRR, 0 );
+ }
+#endif /* PCE_METADATA_ENABLE */
+ break;
+ default:
+ /* This configuration does not fit to any known downmix equation! */
+ err = PCMDMX_INVALID_MODE;
+ break;
+ }
+ /* Mark the output channels */
+ FDKmemclear(valid, PCM_DMX_MAX_CHANNELS*sizeof(unsigned int));
+ valid[LEFT_FRONT_CHANNEL] = 1;
+ valid[RIGHT_FRONT_CHANNEL] = 1;
+ /* Update channel mode for the next stage */
+ inChMode = CH_MODE_2_0_0_0;
+ }
+
+ if (numOutChannel == ONE_CHANNEL) {
+ FIXP_DMX monoMixLevel;
+ INT monoMixScale;
+
+#ifdef PCE_METADATA_ENABLE
+ if ( (pMetaData->typeFlags & TYPE_PCE_DATA)
+ && !(pMetaData->typeFlags & TYPE_DSE_DATA) )
+ { /* C' = (3+2*A)^-1 * [C+L+R+A*Ls+A+Rs]; */
+ monoMixLevel = mpegMixDownIdx2PreFact[2][pMetaData->matrixMixdownIdx];
+ monoMixScale = 0;
+
+ dmxClearChannel( mixFactors, mixScales, CENTER_FRONT_CHANNEL );
+ mixFactors[CENTER_FRONT_CHANNEL][CENTER_FRONT_CHANNEL] = monoMixLevel;
+ mixFactors[CENTER_FRONT_CHANNEL][LEFT_FRONT_CHANNEL] = monoMixLevel;
+ mixFactors[CENTER_FRONT_CHANNEL][RIGHT_FRONT_CHANNEL] = monoMixLevel;
+ monoMixLevel = FX_DBL2FX_DMX(fMult(monoMixLevel, mpegMixDownIdx2Coef[pMetaData->matrixMixdownIdx]));
+ mixFactors[CENTER_FRONT_CHANNEL][LEFT_REAR_CHANNEL] = monoMixLevel;
+ mixFactors[CENTER_FRONT_CHANNEL][RIGHT_REAR_CHANNEL] = monoMixLevel;
+ }
+ else
+#endif
+ { /* C' = L + R; [default] */
+ monoMixLevel = FL2FXCONST_DMX(0.5f);
+ monoMixScale = 1;
+ dmxClearChannel( mixFactors, mixScales, CENTER_FRONT_CHANNEL ); /* C is not in the mix */
+ dmxSetChannel( mixFactors, mixScales, CENTER_FRONT_CHANNEL, LEFT_FRONT_CHANNEL, monoMixLevel, monoMixScale );
+ dmxAddChannel( mixFactors, mixScales, CENTER_FRONT_CHANNEL, RIGHT_FRONT_CHANNEL, monoMixLevel, monoMixScale );
+ }
+
+ /* Mark the output channel */
+ FDKmemclear(valid, PCM_DMX_MAX_CHANNELS*sizeof(unsigned int));
+ valid[CENTER_FRONT_CHANNEL] = 1;
+ }
+
+#define MAX_SEARCH_START_VAL ( -7 )
+
+ {
+ LONG chSum[PCM_DMX_MAX_CHANNELS];
+ INT chSumMax = MAX_SEARCH_START_VAL;
+
+ /* Determine the current maximum scale factor */
+ for (outCh=0; outCh < PCM_DMX_MAX_CHANNELS; outCh+=1) {
+ if (valid[outCh]!=0) {
+ for (inCh=0; inCh < PCM_DMX_MAX_CHANNELS; inCh+=1) {
+ if (mixScales[outCh][inCh] > maxScale)
+ { /* Store the new maximum */
+ maxScale = mixScales[outCh][inCh];
+ }
+ }
+ }
+ }
+
+ /* Individualy analyse output chanal levels */
+ for (outCh=0; outCh < PCM_DMX_MAX_CHANNELS; outCh+=1) {
+ chSum[outCh] = MAX_SEARCH_START_VAL;
+ if (valid[outCh]!=0) {
+ int ovrflwProtScale = 0;
+
+ /* Accumulate all factors for each output channel */
+ chSum[outCh] = 0;
+ for (inCh=0; inCh < PCM_DMX_MAX_CHANNELS; inCh+=1) {
+ SHORT addFact = FX_DMX2SHRT(mixFactors[outCh][inCh]);
+ if ( mixScales[outCh][inCh] <= maxScale ) {
+ addFact >>= maxScale - mixScales[outCh][inCh];
+ } else {
+ addFact <<= mixScales[outCh][inCh] - maxScale;
+ }
+ chSum[outCh] += addFact;
+ }
+ if (chSum[outCh] > (LONG)MAXVAL_SGL) {
+ while (chSum[outCh] > (LONG)MAXVAL_SGL) {
+ ovrflwProtScale += 1;
+ chSum[outCh] >>= 1;
+ }
+ } else if (chSum[outCh] > 0) {
+ while ((chSum[outCh]<<1) <= (LONG)MAXVAL_SGL) {
+ ovrflwProtScale -= 1;
+ chSum[outCh] <<= 1;
+ }
+ }
+ /* Store the differential scaling in the same array */
+ chSum[outCh] = ovrflwProtScale;
+ }
+ }
+
+ for (outCh=0; outCh < PCM_DMX_MAX_CHANNELS; outCh+=1) {
+ if ( (valid[outCh] != 0)
+ && (chSum[outCh] > chSumMax) )
+ { /* Store the new maximum */
+ chSumMax = chSum[outCh];
+ }
+ }
+ maxScale = FDKmax(maxScale+chSumMax, 0);
+
+ /* Normalize all factors */
+ for (outCh=0; outCh < PCM_DMX_MAX_CHANNELS; outCh+=1) {
+ if (valid[outCh]!=0) {
+ for (inCh=0; inCh < PCM_DMX_MAX_CHANNELS; inCh+=1) {
+ if (mixFactors[outCh][inCh] != (FIXP_DMX)0) {
+ if ( mixScales[outCh][inCh] <= maxScale ) {
+ mixFactors[outCh][inCh] >>= maxScale - mixScales[outCh][inCh];
+ } else {
+ mixFactors[outCh][inCh] <<= mixScales[outCh][inCh] - maxScale;
+ }
+ mixScales[outCh][inCh] = maxScale;
+ }
+ }
+ }
+ }
+ }
+
+
+ /* return the scale factor */
+ *pOutScale = maxScale;
+
+ return (err);
+}
+
/** Open and initialize an instance of the PCM downmix module
* @param [out] Pointer to a buffer receiving the handle of the new instance.
@@ -526,24 +1447,24 @@ PCMDMX_ERROR pcmDmx_Reset (
if (self == NULL) { return (PCMDMX_INVALID_HANDLE); }
if (flags & PCMDMX_RESET_PARAMS) {
- self->dualChannelMode = STEREO_MODE;
- self->numOutputChannels = 0;
- self->applyProcessing = 0;
- self->frameDelay = 0;
- self->expiryFrame = PCMDMX_DFLT_EXPIRY_FRAME;
+ PCM_DMX_USER_PARAMS *pParams = &self->userParams;
+
+ pParams->dualChannelMode = STEREO_MODE;
+ pParams->pseudoSurrMode = NEVER_DO_PS_DMX;
+ pParams->numOutChannelsMax = PCM_DMX_DFLT_MAX_OUT_CHANNELS;
+ pParams->numOutChannelsMin = PCM_DMX_DFLT_MIN_OUT_CHANNELS;
+ pParams->frameDelay = 0;
+ pParams->expiryFrame = PCM_DMX_DFLT_EXPIRY_FRAME;
+
+ self->applyProcessing = 0;
}
if (flags & PCMDMX_RESET_BS_DATA) {
int slot;
+ /* Init all slots with a default set */
for (slot = 0; slot <= PCM_DMX_MAX_DELAY_FRAMES; slot += 1) {
- self->dvbMixDownLevels[slot].centerMixLevelValue = dvbDownmixFactors[2]; /* 0.707 */
- self->dvbMixDownLevels[slot].surroundMixLevelValue = dvbDownmixFactors[0]; /* 1.000 */
- self->dvbMixDownLevels[slot].mixLevelsAvail = 0;
-
- self->mpegMixDownInfo[slot].mixdownAvailable = 0;
+ FDKmemcpy(&self->bsMetaData[slot], &dfltMetaData, sizeof(DMX_BS_META_DATA));
}
- /* Reset expiry counter */
- self->expiryCount = 0;
}
return (PCMDMX_OK);
@@ -558,8 +1479,8 @@ PCMDMX_ERROR pcmDmx_Reset (
**/
PCMDMX_ERROR pcmDmx_SetParam (
HANDLE_PCM_DOWNMIX self,
- PCMDMX_PARAM param,
- UINT value
+ const PCMDMX_PARAM param,
+ const INT value
)
{
switch (param)
@@ -567,39 +1488,70 @@ PCMDMX_ERROR pcmDmx_SetParam (
case DMX_BS_DATA_EXPIRY_FRAME:
if (self == NULL)
return (PCMDMX_INVALID_HANDLE);
- self->expiryFrame = value;
+ self->userParams.expiryFrame = (value > 0) ? (UINT)value : 0;
break;
case DMX_BS_DATA_DELAY:
- if (value > PCM_DMX_MAX_DELAY_FRAMES) {
+ if ( (value > PCM_DMX_MAX_DELAY_FRAMES)
+ || (value < 0) ) {
return (PCMDMX_UNABLE_TO_SET_PARAM);
}
if (self == NULL) {
return (PCMDMX_INVALID_HANDLE);
}
- self->frameDelay = value;
+ self->userParams.frameDelay = (UCHAR)value;
break;
- case NUMBER_OF_OUTPUT_CHANNELS:
- switch ((int)value) { /* supported output channels */
- case -1: case 0: case 1: case 2:
- case 6: case 8:
+ case MIN_NUMBER_OF_OUTPUT_CHANNELS:
+ switch (value) { /* supported output channels */
+ case -1: case 0: case ONE_CHANNEL: case TWO_CHANNEL:
+#if (PCM_DMX_MAX_OUT_CHANNELS >= 6)
+ case SIX_CHANNEL:
+#endif
+#if (PCM_DMX_MAX_OUT_CHANNELS >= 8)
+ case EIGHT_CHANNEL:
+#endif
break;
default:
return (PCMDMX_UNABLE_TO_SET_PARAM);
}
if (self == NULL)
return (PCMDMX_INVALID_HANDLE);
- if ((int)value > 0) {
- self->numOutputChannels = (int)value;
- self->applyProcessing = 1;
- } else {
- self->numOutputChannels = 0;
- self->applyProcessing = 0;
+ /* Store the new value */
+ self->userParams.numOutChannelsMin = (value > 0) ? value : -1;
+ if ( (value > 0)
+ && (self->userParams.numOutChannelsMax > 0)
+ && (value > self->userParams.numOutChannelsMax) )
+ { /* MIN > MAX would be an invalid state. Thus set MAX = MIN in this case. */
+ self->userParams.numOutChannelsMax = self->userParams.numOutChannelsMin;
}
break;
- case DUAL_CHANNEL_DOWNMIX_MODE:
+ case MAX_NUMBER_OF_OUTPUT_CHANNELS:
+ switch (value) { /* supported output channels */
+ case -1: case 0: case ONE_CHANNEL: case TWO_CHANNEL:
+#if (PCM_DMX_MAX_OUT_CHANNELS >= 6)
+ case SIX_CHANNEL:
+#endif
+#if (PCM_DMX_MAX_OUT_CHANNELS >= 8)
+ case EIGHT_CHANNEL:
+#endif
+ break;
+ default:
+ return (PCMDMX_UNABLE_TO_SET_PARAM);
+ }
+ if (self == NULL)
+ return (PCMDMX_INVALID_HANDLE);
+ /* Store the new value */
+ self->userParams.numOutChannelsMax = (value > 0) ? value : -1;
+ if ( (value > 0)
+ && (value < self->userParams.numOutChannelsMin) )
+ { /* MAX < MIN would be an invalid state. Thus set MIN = MAX in this case. */
+ self->userParams.numOutChannelsMin = self->userParams.numOutChannelsMax;
+ }
+ break;
+
+ case DMX_DUAL_CHANNEL_MODE:
switch ((DUAL_CHANNEL_MODE)value) {
case STEREO_MODE:
case CH1_MODE:
@@ -611,8 +1563,22 @@ PCMDMX_ERROR pcmDmx_SetParam (
}
if (self == NULL)
return (PCMDMX_INVALID_HANDLE);
- self->dualChannelMode = (DUAL_CHANNEL_MODE)value;
- self->applyProcessing = 1;
+ self->userParams.dualChannelMode = (DUAL_CHANNEL_MODE)value;
+ self->applyProcessing = 1; /* Force processing */
+ break;
+
+ case DMX_PSEUDO_SURROUND_MODE:
+ switch ((PSEUDO_SURROUND_MODE)value) {
+ case NEVER_DO_PS_DMX:
+ case AUTO_PS_DMX:
+ case FORCE_PS_DMX:
+ break;
+ default:
+ return (PCMDMX_UNABLE_TO_SET_PARAM);
+ }
+ if (self == NULL)
+ return (PCMDMX_INVALID_HANDLE);
+ self->userParams.pseudoSurrMode = (PSEUDO_SURROUND_MODE)value;
break;
default:
@@ -622,87 +1588,239 @@ PCMDMX_ERROR pcmDmx_SetParam (
return (PCMDMX_OK);
}
-
-/** Read the ancillary data transported in DSEs of DVB streams with MPEG-4 content
+/** Get one parameter value of one PCM downmix module instance.
* @param [in] Handle of PCM downmix module instance.
- * @param [in] Pointer to ancillary data buffer.
- * @param [in] Size of ancillary data.
- * @param [in] Flag indicating wheter the DVB ancillary data is from an MPEG-1/2 or an MPEG-4 stream.
+ * @param [in] Parameter to be set.
+ * @param [out] Pointer to buffer receiving the parameter value.
* @returns Returns an error code.
**/
-PCMDMX_ERROR pcmDmx_ReadDvbAncData (
+PCMDMX_ERROR pcmDmx_GetParam (
HANDLE_PCM_DOWNMIX self,
- UCHAR *pAncDataBuf,
- UINT ancDataBytes,
+ const PCMDMX_PARAM param,
+ INT * const pValue
+ )
+{
+ PCM_DMX_USER_PARAMS *pUsrParams;
+
+ if ( (self == NULL)
+ || (pValue == NULL) ) {
+ return (PCMDMX_INVALID_HANDLE);
+ }
+ pUsrParams = &self->userParams;
+
+ switch (param)
+ {
+ case DMX_BS_DATA_EXPIRY_FRAME:
+ *pValue = (INT)pUsrParams->expiryFrame;
+ break;
+ case DMX_BS_DATA_DELAY:
+ *pValue = (INT)pUsrParams->frameDelay;
+ break;
+ case MIN_NUMBER_OF_OUTPUT_CHANNELS:
+ *pValue = (INT)pUsrParams->numOutChannelsMin;
+ break;
+ case MAX_NUMBER_OF_OUTPUT_CHANNELS:
+ *pValue = (INT)pUsrParams->numOutChannelsMax;
+ break;
+ case DMX_DUAL_CHANNEL_MODE:
+ *pValue = (INT)pUsrParams->dualChannelMode;
+ break;
+ case DMX_PSEUDO_SURROUND_MODE:
+ *pValue = (INT)pUsrParams->pseudoSurrMode;
+ break;
+ default:
+ return (PCMDMX_UNKNOWN_PARAM);
+ }
+
+ return (PCMDMX_OK);
+}
+
+
+#ifdef DSE_METADATA_ENABLE
+
+#define MAX_DSE_ANC_BYTES ( 16 ) /* 15 bytes */
+#define ANC_DATA_SYNC_BYTE ( 0xBC ) /* ancillary data sync byte. */
+
+/*
+ * Read DMX meta-data from a data stream element.
+ */
+PCMDMX_ERROR pcmDmx_Parse (
+ HANDLE_PCM_DOWNMIX self,
+ HANDLE_FDK_BITSTREAM hBs,
+ UINT ancDataBits,
int isMpeg2
)
{
- DVB_MIXDOWN_LEVELS *pDownmixLevels = &self->dvbMixDownLevels[0];
+ PCMDMX_ERROR errorStatus = PCMDMX_OK;
+ DMX_BS_META_DATA *pBsMetaData = &self->bsMetaData[0];
- int offset = (isMpeg2) ? 2 : 0;
- UCHAR ancDataStatus;
+ int skip4Dmx = 0, skip4Ext = 0;
+ int dmxLvlAvail = 0, extDataAvail = 0;
+ int foundNewData = 0;
+ UINT minAncBits = ((isMpeg2) ? 5 : 3)*8;
- if (self == NULL) { return (PCMDMX_INVALID_HANDLE); }
+ if ( (self == NULL)
+ || (hBs == NULL) ) { return (PCMDMX_INVALID_HANDLE); }
+
+ ancDataBits = FDKgetValidBits(hBs);
/* sanity checks */
- if (pAncDataBuf == NULL || ancDataBytes < (UCHAR)(3+offset)) {
+ if ( (ancDataBits < minAncBits)
+ || (ancDataBits > FDKgetValidBits(hBs)) ) {
return (PCMDMX_CORRUPT_ANC_DATA);
}
+ pBsMetaData = &self->bsMetaData[0];
+
+ if (isMpeg2) {
+ /* skip DVD ancillary data */
+ FDKpushFor(hBs, 16);
+ }
+
/* check sync word */
- if (pAncDataBuf[offset] != ANC_DATA_SYNC_BYTE) {
+ if (FDKreadBits(hBs,8) != ANC_DATA_SYNC_BYTE) {
return (PCMDMX_CORRUPT_ANC_DATA);
}
- offset += 2;
- ancDataStatus = pAncDataBuf[offset++];
+ /* skip MPEG audio type and Dolby surround mode */
+ FDKpushFor(hBs, 4);
if (isMpeg2) {
- /* skip advanced_dynamic_range_control */
- if (ancDataStatus & 0x80) offset += 3;
- /* skip dialog_normalization */
- if (ancDataStatus & 0x40) offset += 1;
- /* skip reproduction_level */
- if (ancDataStatus & 0x20) offset += 1;
+ /* int numAncBytes = */ FDKreadBits(hBs, 4);
+ /* advanced dynamic range control */
+ if (FDKreadBit(hBs)) skip4Dmx += 24;
+ /* dialog normalization */
+ if (FDKreadBit(hBs)) skip4Dmx += 8;
+ /* reproduction_level */
+ if (FDKreadBit(hBs)) skip4Dmx += 8;
+ } else {
+ FDKpushFor(hBs, 2); /* drc presentation mode */
+ pBsMetaData->pseudoSurround = FDKreadBit(hBs);
+ FDKpushFor(hBs, 4); /* reserved bits */
}
- else {
- /* check reserved bits */
- if (ancDataStatus & 0xE8) { return (PCMDMX_CORRUPT_ANC_DATA); }
+
+ /* downmixing levels MPEGx status */
+ dmxLvlAvail = FDKreadBit(hBs);
+
+ if (isMpeg2) {
+ /* scale factor CRC status */
+ if (FDKreadBit(hBs)) skip4Ext += 16;
+ } else {
+ /* ancillary data extension status */
+ extDataAvail = FDKreadBit(hBs);
}
+ /* audio coding and compression status */
+ if (FDKreadBit(hBs)) skip4Ext += 16;
+ /* coarse grain timecode status */
+ if (FDKreadBit(hBs)) skip4Ext += 16;
+ /* fine grain timecode status */
+ if (FDKreadBit(hBs)) skip4Ext += 16;
+
+ /* skip the useless data to get to the DMX levels */
+ FDKpushFor(hBs, skip4Dmx);
+
/* downmix_levels_MPEGX */
- if (ancDataStatus & 0x10)
+ if (dmxLvlAvail)
{
- int foundNewData = 0;
- UCHAR downmixData = pAncDataBuf[offset++];
-
- if (downmixData & 0x80) { /* center_mix_level_on */
- pDownmixLevels->centerMixLevelValue =
- dvbDownmixFactors[(downmixData >> 4) & 0x07];
+ if (FDKreadBit(hBs)) { /* center_mix_level_on */
+ pBsMetaData->cLevIdx = FDKreadBits(hBs, 3);
foundNewData = 1;
} else {
- pDownmixLevels->centerMixLevelValue = dvbDownmixFactors[0];
- if (downmixData & 0x70) { return (PCMDMX_CORRUPT_ANC_DATA); }
+ FDKreadBits(hBs, 3);
}
-
- if (downmixData & 0x08) { /* surround_mix_level_on */
- pDownmixLevels->surroundMixLevelValue =
- dvbDownmixFactors[downmixData & 0x07];
+ if (FDKreadBit(hBs)) { /* surround_mix_level_on */
+ pBsMetaData->sLevIdx = FDKreadBits(hBs, 3);
foundNewData = 1;
} else {
- pDownmixLevels->surroundMixLevelValue = dvbDownmixFactors[0];
- if (downmixData & 0x07) { return (PCMDMX_CORRUPT_ANC_DATA); }
+ FDKreadBits(hBs, 3);
+ }
+ }
+
+ /* skip the useless data to get to the ancillary data extension */
+ FDKpushFor(hBs, skip4Ext);
+
+ /* anc data extension (MPEG-4 only) */
+ if (extDataAvail) {
+ int extDmxLvlSt, extDmxGainSt, extDmxLfeSt;
+
+ FDKreadBit(hBs); /* reserved bit */
+ extDmxLvlSt = FDKreadBit(hBs);
+ extDmxGainSt = FDKreadBit(hBs);
+ extDmxLfeSt = FDKreadBit(hBs);
+ FDKreadBits(hBs, 4); /* reserved bits */
+
+ if (extDmxLvlSt) {
+ pBsMetaData->dmixIdxA = FDKreadBits(hBs, 3);
+ pBsMetaData->dmixIdxB = FDKreadBits(hBs, 3);
+ FDKreadBits(hBs, 2); /* reserved bits */
+ foundNewData = 1;
+ }
+ if (extDmxGainSt) {
+ pBsMetaData->dmxGainIdx5 = FDKreadBits(hBs, 7);
+ FDKreadBit(hBs); /* reserved bit */
+ pBsMetaData->dmxGainIdx2 = FDKreadBits(hBs, 7);
+ FDKreadBit(hBs); /* reserved bit */
+ foundNewData = 1;
+ }
+ if (extDmxLfeSt) {
+ pBsMetaData->dmixIdxLfe = FDKreadBits(hBs, 4);
+ FDKreadBits(hBs, 4); /* reserved bits */
+ foundNewData = 1;
}
+ }
- pDownmixLevels->mixLevelsAvail = foundNewData;
+ /* final sanity check on the amount of read data */
+ if ((INT)FDKgetValidBits(hBs) < 0) {
+ errorStatus = PCMDMX_CORRUPT_ANC_DATA;
}
- /* Reset expiry counter */
- self->expiryCount = 0;
+ if ( (errorStatus == PCMDMX_OK)
+ && (foundNewData == 1) ) {
+ /* announce new data */
+ pBsMetaData->typeFlags |= TYPE_DSE_DATA;
+ /* reset expiry counter */
+ pBsMetaData->expiryCount = 0;
+ }
- return (PCMDMX_OK);
+ return (errorStatus);
+}
+
+/*
+ * Read DMX meta-data from a data stream element.
+ */
+PCMDMX_ERROR pcmDmx_ReadDvbAncData (
+ HANDLE_PCM_DOWNMIX self,
+ UCHAR *pAncDataBuf,
+ UINT ancDataBytes,
+ int isMpeg2
+ )
+{
+ FDK_BITSTREAM bs;
+ HANDLE_FDK_BITSTREAM hBs = &bs;
+ PCMDMX_ERROR errorStatus = PCMDMX_OK;
+
+ if (self == NULL) { return (PCMDMX_INVALID_HANDLE); }
+
+ /* sanity checks */
+ if ( (pAncDataBuf == NULL)
+ || (ancDataBytes == 0) ) {
+ return (PCMDMX_CORRUPT_ANC_DATA);
+ }
+
+ FDKinitBitStream (hBs, pAncDataBuf, MAX_DSE_ANC_BYTES, ancDataBytes*8, BS_READER);
+
+ errorStatus = pcmDmx_Parse (
+ self,
+ hBs,
+ ancDataBytes*8,
+ isMpeg2 );
+
+ return (errorStatus);
}
+#endif /* DSE_METADATA_ENABLE */
+#ifdef PCE_METADATA_ENABLE
/** Set the matrix mixdown information extracted from the PCE of an AAC bitstream.
* Note: Call only if matrix_mixdown_idx_present is true.
* @param [in] Handle of PCM downmix module instance.
@@ -717,38 +1835,36 @@ PCMDMX_ERROR pcmDmx_SetMatrixMixdownFromPce (
int pseudoSurroundEnable
)
{
- MPEG_MIXDOWN_INFO *pMpegMixDownInfo;
+ DMX_BS_META_DATA *pBsMetaData = &self->bsMetaData[0];
if (self == NULL) {
return (PCMDMX_INVALID_HANDLE);
}
- pMpegMixDownInfo = &self->mpegMixDownInfo[0];
-
if (matrixMixdownPresent) {
- pMpegMixDownInfo->matrixMixdownIdx = matrixMixdownIdx & 0x03;
- pMpegMixDownInfo->pseudoSurroundEnable = pseudoSurroundEnable;
+ pBsMetaData->pseudoSurround = pseudoSurroundEnable;
+ pBsMetaData->matrixMixdownIdx = matrixMixdownIdx & 0x03;
+ pBsMetaData->typeFlags |= TYPE_PCE_DATA;
+ /* Reset expiry counter */
+ pBsMetaData->expiryCount = 0;
}
- pMpegMixDownInfo->mixdownAvailable = matrixMixdownPresent;
- /* Reset expiry counter */
- self->expiryCount = 0;
-
return (PCMDMX_OK);
}
+#endif /* PCE_METADATA_ENABLE */
/** Apply down or up mixing.
* @param [in] Handle of PCM downmix module instance.
- * @param [inout] Pointer to time buffer. Depending on interface configuration, the content of pTimeData is ignored,
- * and the internal QMF buffer will be used as input data source. Otherwise, the MPEG Surround processing is
- * applied to the timesignal pTimeData. For both variants, the resulting MPEG Surround signal is written into pTimeData.
+ * @param [inout] Pointer to buffer that hold the time domain signal.
* @param [in] Pointer where the amount of output samples is returned into.
* @param [inout] Pointer where the amount of output channels is returned into.
* @param [in] Flag which indicates if output time data are writtern interleaved or as subsequent blocks.
* @param [inout] Array where the corresponding channel type for each output audio channel is stored into.
* @param [inout] Array where the corresponding channel type index for each output audio channel is stored into.
- * @param [in] Array containing the output channel mapping to be used (From MPEG PCE ordering to whatever is required).
+ * @param [in] Array containing the out channel mapping to be used (From MPEG PCE ordering to whatever is required).
+ * @param [out] Pointer on a field receiving the scale factor that has to be applied on all samples afterwards.
+ * If the handed pointer is NULL scaling is done internally.
* @returns Returns an error code.
**/
PCMDMX_ERROR pcmDmx_ApplyFrame (
@@ -756,97 +1872,173 @@ PCMDMX_ERROR pcmDmx_ApplyFrame (
INT_PCM *pPcmBuf,
UINT frameSize,
INT *nChannels,
-
int fInterleaved,
AUDIO_CHANNEL_TYPE channelType[],
UCHAR channelIndices[],
- const UCHAR channelMapping[][8]
+ const UCHAR channelMapping[][8],
+ INT *pDmxOutScale
)
{
+ PCM_DMX_USER_PARAMS *pParam = NULL;
PCMDMX_ERROR errorStatus = PCMDMX_OK;
DUAL_CHANNEL_MODE dualChannelMode;
PCM_DMX_CHANNEL_MODE inChMode;
- int numOutChannels;
- int numInChannels = *nChannels;
- int slot;
+ PCM_DMX_CHANNEL_MODE outChMode;
+ INT devNull; /* Just a dummy to avoid a lot of branches in the code */
+ int numOutChannels, numInChannels;
+ int inStride, outStride, offset;
+ int dmxMaxScale, dmxScale;
+ int ch, slot;
UCHAR inOffsetTable[PCM_DMX_MAX_CHANNELS];
- MPEG_MIXDOWN_INFO mpegMixDownInfo;
- DVB_MIXDOWN_LEVELS dvbMixDownLevels;
+ DMX_BS_META_DATA bsMetaData;
- if (self == NULL) { return (PCMDMX_INVALID_HANDLE); }
-
- if ( (self->expiryFrame > 0)
- && (++self->expiryCount > self->expiryFrame) )
- { /* The metadata read from bitstream is too old. */
- errorStatus = pcmDmx_Reset(self, PCMDMX_RESET_BS_DATA);
+ if ( (self == NULL)
+ || (nChannels == NULL)
+ || (channelType == NULL)
+ || (channelIndices == NULL)
+ || (channelMapping == NULL) ) {
+ return (PCMDMX_INVALID_HANDLE);
}
- FDKmemcpy(&mpegMixDownInfo, &self->mpegMixDownInfo[self->frameDelay], sizeof(MPEG_MIXDOWN_INFO));
- /* Maintain delay line */
- for (slot = self->frameDelay; slot > 0; slot -= 1) {
- FDKmemcpy(&self->mpegMixDownInfo[slot], &self->mpegMixDownInfo[slot-1], sizeof(MPEG_MIXDOWN_INFO));
- }
- FDKmemcpy(&dvbMixDownLevels, &self->dvbMixDownLevels[self->frameDelay], sizeof(DVB_MIXDOWN_LEVELS));
- /* Maintain delay line */
- for (slot = self->frameDelay; slot > 0; slot -= 1) {
- FDKmemcpy(&self->dvbMixDownLevels[slot], &self->dvbMixDownLevels[slot-1], sizeof(DVB_MIXDOWN_LEVELS));
+ /* Init the output scaling */
+ dmxScale = 0;
+ if (pDmxOutScale != NULL) {
+ /* Avoid final scaling internally and hand it to the outside world. */
+ *pDmxOutScale = 0;
+ dmxMaxScale = PCMDMX_MAX_HEADROOM;
+ } else {
+ /* Apply the scaling internally. */
+ pDmxOutScale = &devNull; /* redirect to temporal stack memory */
+ dmxMaxScale = 0;
}
- if (self->applyProcessing == 0) { return (errorStatus); }
+ pParam = &self->userParams;
+ numInChannels = *nChannels;
+ /* Perform some input sanity checks */
if (pPcmBuf == NULL) { return (PCMDMX_INVALID_ARGUMENT); }
if (frameSize == 0) { return (PCMDMX_INVALID_ARGUMENT); }
- if (numInChannels == 0) { return (PCMDMX_INVALID_ARGUMENT); }
+ if ( (numInChannels == 0)
+ || (numInChannels > PCM_DMX_MAX_IN_CHANNELS) )
+ { return (PCMDMX_INVALID_ARGUMENT); }
+
+ /* Check on misconfiguration */
+ FDK_ASSERT( (pParam->numOutChannelsMax <= 0) \
+ || (pParam->numOutChannelsMax >= pParam->numOutChannelsMin));
+
+ /* Determine if the module has to do processing */
+ if ( (self->applyProcessing == 0)
+ && ((pParam->numOutChannelsMax <= 0)
+ || (pParam->numOutChannelsMax >= numInChannels))
+ && (pParam->numOutChannelsMin <= numInChannels) ) {
+ /* Nothing to do */
+ return (errorStatus);
+ }
- if (self->numOutputChannels <= 0) {
+ /* Determine the number of output channels */
+ if ( (pParam->numOutChannelsMax > 0)
+ && (numInChannels > pParam->numOutChannelsMax) ) {
+ numOutChannels = pParam->numOutChannelsMax;
+ }
+ else if (numInChannels < pParam->numOutChannelsMin) {
+ numOutChannels = pParam->numOutChannelsMin;
+ }
+ else {
numOutChannels = numInChannels;
- } else {
- numOutChannels = self->numOutputChannels;
}
- dualChannelMode = self->dualChannelMode;
+
+ dualChannelMode = pParam->dualChannelMode;
/* Analyse input channel configuration and get channel offset
* table that can be accessed with the fixed channel labels. */
- inChMode = getChannelMode(
+ errorStatus = getChannelMode(
numInChannels,
channelType,
channelIndices,
- inOffsetTable
+ inOffsetTable,
+ &inChMode
);
- if (inChMode == CH_MODE_UNDEFINED) {
+ if ( PCMDMX_IS_FATAL_ERROR(errorStatus)
+ || (inChMode == CH_MODE_UNDEFINED) ) {
/* We don't need to restore because the channel
configuration has not been changed. Just exit. */
return (PCMDMX_INVALID_CH_CONFIG);
}
+ /* Set input stride and offset */
+ if (fInterleaved) {
+ inStride = numInChannels;
+ offset = 1; /* Channel specific offset factor */
+ } else {
+ inStride = 1;
+ offset = frameSize; /* Channel specific offset factor */
+ }
+
+ /* Reset downmix meta data if necessary */
+ if ( (pParam->expiryFrame > 0)
+ && (++self->bsMetaData[0].expiryCount > pParam->expiryFrame) )
+ { /* The metadata read from bitstream is too old. */
+ PCMDMX_ERROR err = pcmDmx_Reset(self, PCMDMX_RESET_BS_DATA);
+ FDK_ASSERT(err == PCMDMX_OK);
+ }
+ FDKmemcpy(&bsMetaData, &self->bsMetaData[pParam->frameDelay], sizeof(DMX_BS_META_DATA));
+ /* Maintain delay line */
+ for (slot = pParam->frameDelay; slot > 0; slot -= 1) {
+ FDKmemcpy(&self->bsMetaData[slot], &self->bsMetaData[slot-1], sizeof(DMX_BS_META_DATA));
+ }
+
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+#ifdef PCM_DOWNMIX_ENABLE
if ( numInChannels > numOutChannels )
{ /* Apply downmix */
- INT_PCM *pInCF, *pInLF, *pInRF, *pInLO, *pInRO, *pInLR, *pInRR, *pOutL, *pOutR;
- FIXP_SGL flev, clev, slev;
-
- UINT sample;
- int inStride, outStride, offset;
- int useGuidedDownMix = 0;
- UCHAR outOffsetTable[PCM_DMX_MAX_CHANNELS];
-
- /* Set I/O strides and offsets */
- if (fInterleaved) {
- inStride = numInChannels;
- outStride = TWO_CHANNEL; /* The output of STAGE ONE is always STEREO !!!
- STAGE TWO creates a downmix to mono if required. */
- offset = 1; /* Channel specific offset factor */
- } else {
- inStride = 1;
- outStride = 1;
- offset = frameSize; /* Channel specific offset factor */
+ INT_PCM *pInPcm[PCM_DMX_MAX_IN_CHANNELS] = { NULL };
+ INT_PCM *pOutPcm[PCM_DMX_MAX_OUT_CHANNELS] = { NULL };
+ FIXP_DMX mixFactors[PCM_DMX_MAX_CHANNELS][PCM_DMX_MAX_CHANNELS];
+ UCHAR outOffsetTable[PCM_DMX_MAX_CHANNELS];
+ UINT sample;
+ int chCfg = 0;
+ int bypScale = 0;
+
+#if (PCM_DMX_MAX_IN_CHANNELS >= 7)
+ if (numInChannels > SIX_CHANNEL) {
+ AUDIO_CHANNEL_TYPE multiPurposeChType[2];
+
+ /* Get the type of the multipurpose channels */
+ multiPurposeChType[0] = channelType[inOffsetTable[LEFT_MULTIPRPS_CHANNEL]];
+ multiPurposeChType[1] = channelType[inOffsetTable[RIGHT_MULTIPRPS_CHANNEL]];
+
+ /* Check if the input configuration is one defined in the standard. */
+ switch (inChMode) {
+ case CH_MODE_5_0_2_1: /* chCfg 7 || 14 */
+ /* Further analyse the input config to distinguish the two CH_MODE_5_0_2_1 configs. */
+ if ( (multiPurposeChType[0] == ACT_FRONT_TOP)
+ && (multiPurposeChType[1] == ACT_FRONT_TOP) ) {
+ chCfg = 14;
+ } else {
+ chCfg = 7;
+ }
+ break;
+ case CH_MODE_3_0_3_1: /* chCfg 11 */
+ chCfg = 11;
+ break;
+ case CH_MODE_3_0_4_1: /* chCfg 12 */
+ chCfg = 12;
+ break;
+ default:
+ chCfg = 0; /* Not a known config */
+ break;
+ }
}
+#endif
- /* Get channel description and channel mapping for this
- * stages number of output channels (always STEREO). */
+ /* Set this stages output stride and channel mode: */
+ outStride = (fInterleaved) ? numOutChannels : 1;
+ outChMode = outChModeTable[numOutChannels];
+
+ /* Get channel description and channel mapping for the desired output configuration. */
getChannelDescription(
- CH_MODE_2_0_0_0,
+ outChMode,
channelMapping,
channelType,
channelIndices,
@@ -854,287 +2046,300 @@ PCMDMX_ERROR pcmDmx_ApplyFrame (
);
/* Now there is no way back because we modified the channel configuration! */
- /* Set channel pointer for input */
- pInCF = &pPcmBuf[inOffsetTable[CENTER_FRONT_CHANNEL]*offset];
- pInLF = &pPcmBuf[inOffsetTable[LEFT_FRONT_CHANNEL]*offset];
- pInRF = &pPcmBuf[inOffsetTable[RIGHT_FRONT_CHANNEL]*offset];
- pInLO = &pPcmBuf[inOffsetTable[LEFT_OUTSIDE_CHANNEL]*offset];
- pInRO = &pPcmBuf[inOffsetTable[RIGHT_OUTSIDE_CHANNEL]*offset];
- pInLR = &pPcmBuf[inOffsetTable[LEFT_REAR_CHANNEL]*offset];
- pInRR = &pPcmBuf[inOffsetTable[RIGHT_REAR_CHANNEL]*offset];
-
- /* Set channel pointer for output
- Caution: Different channel mapping compared to input */
- pOutL = &pPcmBuf[outOffsetTable[LEFT_FRONT_CHANNEL]*offset]; /* LEFT_FRONT_CHANNEL */
- pOutR = &pPcmBuf[outOffsetTable[RIGHT_FRONT_CHANNEL]*offset]; /* RIGHT_FRONT_CHANNEL */
-
- /* Set downmix levels: */
- flev = ATTENUATION_FACTOR_1; /* 0.707 */
- clev = ATTENUATION_FACTOR_1; /* 0.707 */
- slev = ATTENUATION_FACTOR_1; /* 0.707 */
-
- if ( dvbMixDownLevels.mixLevelsAvail ) {
- clev = dvbMixDownLevels.centerMixLevelValue;
- slev = dvbMixDownLevels.surroundMixLevelValue;
- useGuidedDownMix = 1;
- }
-
- /* FIRST STAGE:
- Always downmix to 2 channel output: */
- switch ( inChMode )
- {
- case CH_MODE_2_0_0_0:
- case CH_MODE_2_0_0_1:
- /* 2/0 input: */
- switch (dualChannelMode)
- {
- case CH1_MODE: /* L' = 0.707 * Ch1; R' = 0.707 * Ch1 */
- for (sample = 0; sample < frameSize; sample++) {
- *pOutL = *pOutR =
- (INT_PCM)SATURATE_RIGHT_SHIFT(fMult((FIXP_PCM)*pInLF, flev), DFRACT_BITS-SAMPLE_BITS, SAMPLE_BITS);
-
- pInLF += inStride;
- pOutL += outStride; pOutR += outStride;
- }
- break;
-
- case CH2_MODE: /* L' = 0.707 * Ch2; R' = 0.707 * Ch2 */
- for (sample = 0; sample < frameSize; sample++) {
- *pOutL = *pOutR =
- (INT_PCM)SATURATE_RIGHT_SHIFT(fMult((FIXP_PCM)*pInRF, flev), DFRACT_BITS-SAMPLE_BITS, SAMPLE_BITS);
-
- pInRF += inStride;
- pOutL += outStride; pOutR += outStride;
+ /* Create the DMX matrix */
+ errorStatus = getMixFactors (
+ (chCfg>0) ? 1 : 0,
+ (chCfg>0) ? (PCM_DMX_CHANNEL_MODE)chCfg : inChMode,
+ outChMode,
+ pParam,
+ &bsMetaData,
+ mixFactors,
+ &dmxScale
+ );
+ /* No fatal errors can occur here. The function is designed to always return a valid matrix.
+ The error code is used to signal configurations and matrices that are not conform to any standard. */
+
+ /* Determine the final scaling */
+ bypScale = FDKmin(dmxMaxScale, dmxScale);
+ *pDmxOutScale += bypScale;
+ dmxScale -= bypScale;
+
+ { /* Set channel pointer for input. Remove empty cols. */
+ int inCh, outCh, map[PCM_DMX_MAX_CHANNELS];
+ ch = 0;
+ for (inCh=0; inCh < PCM_DMX_MAX_CHANNELS; inCh+=1) {
+ if (inOffsetTable[inCh] != 255) {
+ pInPcm[ch] = &pPcmBuf[inOffsetTable[inCh]*offset];
+ map[ch++] = inCh;
}
- break;
- case MIXED_MODE: /* L' = 0.5*Ch1 + 0.5*Ch2; R' = 0.5*Ch1 + 0.5*Ch2 */
- for (sample = 0; sample < frameSize; sample++) {
- *pOutL = *pOutR = (*pInLF >> 1) + (*pInRF >> 1);
-
- pInLF += inStride; pInRF += inStride;
- pOutL += outStride; pOutR += outStride;
- }
- break;
- default:
- case STEREO_MODE:
- /* nothing to do */
- break;
}
- break;
-
- case CH_MODE_3_0_0_0:
- /* 3/0 input: L' = L + 0.707*C; R' = R + 0.707*C; */
- for (sample = 0; sample < frameSize; sample++)
- {
- FIXP_DBL tCF = fMultDiv2((FIXP_PCM)*pInCF, clev);
-#if (SAMPLE_BITS == 32)
- /* left channel */
- *pOutL = (INT_PCM)SATURATE_LEFT_SHIFT((FX_PCM2FX_DBL((FIXP_PCM)*pInLF)>>1)+tCF, 1, SAMPLE_BITS);
- /* right channel */
- *pOutR = (INT_PCM)SATURATE_LEFT_SHIFT((FX_PCM2FX_DBL((FIXP_PCM)*pInRF)>>1)+tCF, 1, SAMPLE_BITS);
-#else
- /* left channel */
- *pOutL = (INT_PCM)SATURATE_RIGHT_SHIFT((FX_PCM2FX_DBL((FIXP_PCM)*pInLF)>>1)+tCF, DFRACT_BITS-SAMPLE_BITS-1, SAMPLE_BITS);
- /* right channel */
- *pOutR = (INT_PCM)SATURATE_RIGHT_SHIFT((FX_PCM2FX_DBL((FIXP_PCM)*pInRF)>>1)+tCF, DFRACT_BITS-SAMPLE_BITS-1, SAMPLE_BITS);
-#endif
- pInLF += inStride; pInRF += inStride; pInCF += inStride;
- pOutL += outStride; pOutR += outStride;
+ FDK_ASSERT(ch == numInChannels);
+
+ /* Remove unused cols from factor matrix */
+ for (inCh=0; inCh < numInChannels; inCh+=1) {
+ if (inCh != map[inCh]) {
+ int outCh;
+ for (outCh=0; outCh < PCM_DMX_MAX_CHANNELS; outCh+=1) {
+ mixFactors[outCh][inCh] = mixFactors[outCh][map[inCh]];
+ }
+ }
}
- break;
- /* 2/1 input: not supported!
- case CH_MODE_2_0_1_0: */
-
- case CH_MODE_3_0_1_0:
- if (useGuidedDownMix) {
- /* 3/1 input: L' = L + clev*C + 0.707*slev*S; R' = R + clev*C + 0.707*slev*S; */
- slev = FX_DBL2FX_SGL(fMult(flev, slev)); /* 0.707*slef */
-
- for (sample = 0; sample < frameSize; sample++)
- {
- FIXP_DBL tCF = fMultDiv2((FIXP_PCM)*pInCF, clev) >> 1;
- FIXP_DBL tLR = fMultDiv2((FIXP_PCM)*pInLR, slev) >> 1;
-#if (SAMPLE_BITS == 32)
- /* left channel */
- *pOutL = (INT_PCM)SATURATE_LEFT_SHIFT((FX_PCM2FX_DBL((FIXP_PCM)*pInLF)>>2)+tCF+tLR, 2, SAMPLE_BITS);
- /* right channel */
- *pOutR = (INT_PCM)SATURATE_LEFT_SHIFT((FX_PCM2FX_DBL((FIXP_PCM)*pInRF)>>2)+tCF+tLR, 2, SAMPLE_BITS);
-#else
- /* left channel */
- *pOutL = (INT_PCM)SATURATE_RIGHT_SHIFT((FX_PCM2FX_DBL((FIXP_PCM)*pInLF)>>2)+tCF-tLR, DFRACT_BITS-SAMPLE_BITS-2, SAMPLE_BITS);
- /* right channel */
- *pOutR = (INT_PCM)SATURATE_RIGHT_SHIFT((FX_PCM2FX_DBL((FIXP_PCM)*pInRF)>>2)+tCF+tLR, DFRACT_BITS-SAMPLE_BITS-2, SAMPLE_BITS);
-#endif
- pInLF += inStride; pInRF += inStride; pInCF += inStride; pInLR += inStride;
- pOutL += outStride; pOutR += outStride;
- }
- } else {
- /* 3/1 input: L' = L + 0.707*C - 0.707*S; R' = R + 0.707*C + 0.707*S */
- for (sample = 0; sample < frameSize; sample++)
- {
- FIXP_DBL tCF = fMultDiv2((FIXP_PCM)*pInCF, clev) >> 1;
- FIXP_DBL tLR = fMultDiv2((FIXP_PCM)*pInLR, slev) >> 1;
-#if (SAMPLE_BITS == 32)
- /* left channel */
- *pOutL = (INT_PCM)SATURATE_LEFT_SHIFT((FX_PCM2FX_DBL((FIXP_PCM)*pInLF)>>2)+tCF-tLR, 2, SAMPLE_BITS);
- /* right channel */
- *pOutR = (INT_PCM)SATURATE_LEFT_SHIFT((FX_PCM2FX_DBL((FIXP_PCM)*pInRF)>>2)+tCF+tLR, 2, SAMPLE_BITS);
-#else
- /* left channel */
- *pOutL = (INT_PCM)SATURATE_RIGHT_SHIFT((FX_PCM2FX_DBL((FIXP_PCM)*pInLF)>>2)+tCF-tLR, DFRACT_BITS-SAMPLE_BITS-2, SAMPLE_BITS);
- /* right channel */
- *pOutR = (INT_PCM)SATURATE_RIGHT_SHIFT((FX_PCM2FX_DBL((FIXP_PCM)*pInRF)>>2)+tCF+tLR, DFRACT_BITS-SAMPLE_BITS-2, SAMPLE_BITS);
-#endif
- pInLF += inStride; pInRF += inStride; pInCF += inStride; pInLR += inStride;
- pOutL += outStride; pOutR += outStride;
+ /* Set channel pointer for output. Remove empty cols. */
+ ch = 0;
+ for (outCh=0; outCh < PCM_DMX_MAX_CHANNELS; outCh+=1) {
+ if (outOffsetTable[outCh] != 255) {
+ pOutPcm[ch] = &pPcmBuf[outOffsetTable[outCh]*offset];
+ map[ch++] = outCh;
}
}
- break;
-
- /* 2/2 input: not supported!
- case CH_MODE_2_0_2_0: */
+ FDK_ASSERT(ch == numOutChannels);
- case CH_MODE_3_0_2_0: /* 5.0ch input */
- case CH_MODE_3_0_2_1: /* 5.1ch input */
- if (useGuidedDownMix) {
- /* 3/2 input: L' = L + clev*C + slev*Ls; R' = R + clev*C + slev*Rs; */
- for (sample = 0; sample < frameSize; sample++)
- {
- FIXP_DBL tCF = fMultDiv2((FIXP_PCM)*pInCF, clev) >> 1;
- FIXP_DBL tLR = fMultDiv2((FIXP_PCM)*pInLR, slev) >> 1;
- FIXP_DBL tRR = fMultDiv2((FIXP_PCM)*pInRR, slev) >> 1;
-#if (SAMPLE_BITS == 32)
- /* left channel */
- *pOutL = (INT_PCM)SATURATE_LEFT_SHIFT((FX_PCM2FX_DBL((FIXP_PCM)*pInLF)>>2)+tCF+tLR, 2, SAMPLE_BITS);
- /* right channel */
- *pOutR = (INT_PCM)SATURATE_LEFT_SHIFT((FX_PCM2FX_DBL((FIXP_PCM)*pInRF)>>2)+tCF+tRR, 2, SAMPLE_BITS);
-#else
- /* left channel */
- *pOutL = (INT_PCM)SATURATE_RIGHT_SHIFT((FX_PCM2FX_DBL((FIXP_PCM)*pInLF)>>2)+tCF+tLR, DFRACT_BITS-SAMPLE_BITS-2, SAMPLE_BITS);
- /* right channel */
- *pOutR = (INT_PCM)SATURATE_RIGHT_SHIFT((FX_PCM2FX_DBL((FIXP_PCM)*pInRF)>>2)+tCF+tRR, DFRACT_BITS-SAMPLE_BITS-2, SAMPLE_BITS);
-#endif
- pInLF += inStride; pInRF += inStride; pInCF += inStride; pInLR += inStride; pInRR += inStride;
- pOutL += outStride; pOutR += outStride;
+ /* Remove unused rows from factor matrix */
+ for (outCh=0; outCh < numOutChannels; outCh+=1) {
+ if (outCh != map[outCh]) {
+ FDKmemcpy(&mixFactors[outCh], &mixFactors[map[outCh]], PCM_DMX_MAX_CHANNELS*sizeof(FIXP_DMX));
}
}
- else if (mpegMixDownInfo.mixdownAvailable) {
- /* 3/2 input: L' = (1.707+A)^-1 * [L+0.707*C+A*Ls]; R'= (1.707+A)^-1 * [R+0.707*C+A*Rs]; */
- FIXP_SGL mtrxMixDwnCoef = mpegMixDownIdx2Coef[mpegMixDownInfo.matrixMixdownIdx];
- FIXP_SGL mtrxMixDwnPreFact = mpegMixDownIdx2PreFact[mpegMixDownInfo.matrixMixdownIdx];
- clev = FX_DBL2FX_SGL(fMult(mtrxMixDwnPreFact, flev /* 0.707 */));
- flev = mtrxMixDwnPreFact;
- slev = FX_DBL2FX_SGL(fMult(mtrxMixDwnPreFact, mtrxMixDwnCoef));
-
- for (sample = 0; sample < frameSize; sample++)
- {
- FIXP_DBL tCF = fMultDiv2((FIXP_PCM)*pInCF, clev);
- FIXP_DBL tLF = fMultDiv2((FIXP_PCM)*pInLF, flev);
- FIXP_DBL tRF = fMultDiv2((FIXP_PCM)*pInRF, flev);
- FIXP_DBL tLR = fMultDiv2((FIXP_PCM)*pInLR, slev);
- FIXP_DBL tRR = fMultDiv2((FIXP_PCM)*pInRR, slev);
-
-#if (SAMPLE_BITS == 32)
- /* left channel */
- *pOutL = (INT_PCM)SATURATE_LEFT_SHIFT(tLF+tCF+tLR, 1, SAMPLE_BITS);
- /* right channel */
- *pOutR = (INT_PCM)SATURATE_LEFT_SHIFT(tRF+tCF+tRR, 1, SAMPLE_BITS);
-#else
- /* left channel */
- *pOutL = (INT_PCM)SATURATE_RIGHT_SHIFT(tLF+tCF+tLR, DFRACT_BITS-SAMPLE_BITS-1, SAMPLE_BITS);
- /* right channel */
- *pOutR = (INT_PCM)SATURATE_RIGHT_SHIFT(tRF+tCF+tRR, DFRACT_BITS-SAMPLE_BITS-1, SAMPLE_BITS);
-#endif
+ }
- pInLF += inStride; pInRF += inStride; pInCF += inStride; pInLR += inStride; pInRR += inStride;
- pOutL += outStride; pOutR += outStride;
- }
+ /* Sample processing loop */
+ for (sample = 0; sample < frameSize; sample++)
+ {
+ FIXP_PCM tIn[PCM_DMX_MAX_IN_CHANNELS];
+ FIXP_DBL tOut[PCM_DMX_MAX_OUT_CHANNELS] = { (FIXP_DBL)0 };
+ int inCh, outCh;
+
+ /* Preload all input samples */
+ for (inCh=0; inCh < numInChannels; inCh+=1) {
+ tIn[inCh] = (FIXP_PCM)*pInPcm[inCh];
+ pInPcm[inCh] += inStride;
}
- else {
- /* 3/2 input: L' = L + 0.707*C - 0.707*Ls - 0.707*Rs; R' = R + 0.707*C + 0.707*Ls + 0.707*Rs */
- for (sample = 0; sample < frameSize; sample++)
- {
- FIXP_DBL tCF = fMultDiv2((FIXP_PCM)*pInCF, clev) >> 2;
- FIXP_DBL tLR = fMultDiv2((FIXP_PCM)*pInLR, slev) >> 2;
- FIXP_DBL tRR = fMultDiv2((FIXP_PCM)*pInRR, slev) >> 2;
-#if (SAMPLE_BITS == 32)
- /* left channel */
- *pOutL = (INT_PCM)SATURATE_LEFT_SHIFT((FX_PCM2FX_DBL((FIXP_PCM)*pInLF)>>3)+tCF-tLR-tRR, 3, SAMPLE_BITS);
- /* right channel */
- *pOutR = (INT_PCM)SATURATE_LEFT_SHIFT((FX_PCM2FX_DBL((FIXP_PCM)*pInRF)>>3)+tCF+tLR+tRR, 3, SAMPLE_BITS);
+ /* Apply downmix coefficients to input samples and accumulate for output */
+ for (outCh=0; outCh < numOutChannels; outCh+=1) {
+ for (inCh=0; inCh < numInChannels; inCh+=1) {
+ tOut[outCh] += fMult(tIn[inCh], mixFactors[outCh][inCh]);
+ }
+ /* Write sample */
+#if (SAMPLE_BITS == DFRACT_BITS)
+ *pOutPcm[outCh] = (INT_PCM)SATURATE_LEFT_SHIFT(tOut[outCh], dmxScale, SAMPLE_BITS);
#else
- /* left channel */
- *pOutL = (INT_PCM)SATURATE_RIGHT_SHIFT((FX_PCM2FX_DBL((FIXP_PCM)*pInLF)>>3)+tCF-tLR-tRR, DFRACT_BITS-SAMPLE_BITS-3, SAMPLE_BITS);
- /* right channel */
- *pOutR = (INT_PCM)SATURATE_RIGHT_SHIFT((FX_PCM2FX_DBL((FIXP_PCM)*pInRF)>>3)+tCF+tLR+tRR, DFRACT_BITS-SAMPLE_BITS-3, SAMPLE_BITS);
+ *pOutPcm[outCh] = (INT_PCM)SATURATE_RIGHT_SHIFT(tOut[outCh], DFRACT_BITS-SAMPLE_BITS-dmxScale, SAMPLE_BITS);
#endif
- pInLF += inStride; pInRF += inStride; pInCF += inStride; pInLR += inStride; pInRR += inStride;
- pOutL += outStride; pOutR += outStride;
- }
+ pOutPcm[outCh] += outStride;
}
- break;
-
- default:
- errorStatus = PCMDMX_INVALID_MODE;
- break;
}
- /* SECOND STAGE:
- If desired create a mono donwmix:
- Note: Input are always two channels! */
- if (numOutChannels == 1)
- {
- INT_PCM *pOutC;
- FIXP_SGL mlev;
-
- if (useGuidedDownMix) mlev = FL2FXCONST_SGL(1.0f); else mlev = flev;
+ /* Update the number of output channels */
+ *nChannels = numOutChannels;
- /* Output of STAGE ONE = Input of STAGE TWO */
- FDKmemcpy(inOffsetTable, outOffsetTable, PCM_DMX_MAX_CHANNELS*sizeof(UCHAR));
+ } /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+ else
+#endif /* PCM_DOWNMIX_ENABLE */
+#ifdef PCM_CHANNEL_EXTENSION_ENABLE
+ if ( numInChannels < numOutChannels )
+ { /* Apply rudimentary upmix */
+ /* Set up channel pointer */
+ UINT sample;
+ UCHAR outOffsetTable[PCM_DMX_MAX_CHANNELS];
+
+ /* FIRST STAGE
+ Create a stereo/dual channel signal */
+ if (numInChannels == ONE_CHANNEL)
+ {
+ INT_PCM *pInPcm[PCM_DMX_MAX_CHANNELS];
+ INT_PCM *pOutLF, *pOutRF;
- /* Set I/O strides and offsets */
- inStride = outStride; /* output from STAGE ONE */
- outStride = numOutChannels; /* final output */
+ /* Set this stages output stride and channel mode: */
+ outStride = (fInterleaved) ? TWO_CHANNEL : 1;
+ outChMode = outChModeTable[TWO_CHANNEL];
/* Get channel description and channel mapping for this
- * stages number of output channels (always MONO). */
+ * stages number of output channels (always STEREO). */
getChannelDescription(
- CH_MODE_1_0_0_0,
+ outChMode,
channelMapping,
channelType,
channelIndices,
outOffsetTable
);
+ /* Now there is no way back because we modified the channel configuration! */
- /* Set input channel pointer. */
- pInLF = &pPcmBuf[inOffsetTable[LEFT_FRONT_CHANNEL]*offset];
- pInRF = &pPcmBuf[inOffsetTable[RIGHT_FRONT_CHANNEL]*offset];
+ /* Set input channel pointer. The first channel is always at index 0. */
+ pInPcm[CENTER_FRONT_CHANNEL] = &pPcmBuf[(frameSize-1)*inStride]; /* Considering input mapping could lead to a invalid pointer
+ here if the channel is not declared to be a front channel. */
- /* Set output channel pointer */
- pOutC = &pPcmBuf[outOffsetTable[CENTER_FRONT_CHANNEL]*offset];
+ /* Set output channel pointer (for this stage). */
+ pOutLF = &pPcmBuf[outOffsetTable[LEFT_FRONT_CHANNEL]*offset+(frameSize-1)*outStride];
+ pOutRF = &pPcmBuf[outOffsetTable[RIGHT_FRONT_CHANNEL]*offset+(frameSize-1)*outStride];
- /* C' = 0.707*L + 0.707*R */
+ /* 1/0 input: */
for (sample = 0; sample < frameSize; sample++) {
-#if (SAMPLE_BITS == 32)
- *pOutC =
- (INT_PCM)SATURATE_LEFT_SHIFT(fMultDiv2((FIXP_PCM)*pInLF,mlev)+fMultDiv2((FIXP_PCM)*pInRF,mlev), 1, SAMPLE_BITS);
-#else
- *pOutC =
- (INT_PCM)SATURATE_RIGHT_SHIFT(fMultDiv2((FIXP_PCM)*pInLF,mlev)+fMultDiv2((FIXP_PCM)*pInRF,mlev), DFRACT_BITS-SAMPLE_BITS-1, SAMPLE_BITS);
-#endif
+ /* L' = C; R' = C; */
+ *pOutLF = *pOutRF = *pInPcm[CENTER_FRONT_CHANNEL];
- pInLF += inStride; pInRF += inStride;
- pOutC += 1;
+ pInPcm[CENTER_FRONT_CHANNEL] -= inStride;
+ pOutLF -= outStride; pOutRF -= outStride;
}
- /* Finished STAGE TWO */
+
+ /* Prepare for next stage: */
+ inStride = outStride;
+ inChMode = outChMode;
+ FDKmemcpy(inOffsetTable, outOffsetTable, PCM_DMX_MAX_CHANNELS*sizeof(UCHAR));
}
- /* Update the number of output channels */
- *nChannels = self->numOutputChannels;
+#if (PCM_DMX_MAX_OUT_CHANNELS > 2)
+ /* SECOND STAGE
+ Extend with zero channels to achieved the desired number of output channels. */
+ if (numOutChannels > TWO_CHANNEL)
+ {
+ INT_PCM *pIn[PCM_DMX_MAX_CHANNELS] = { NULL };
+ INT_PCM *pOut[PCM_DMX_MAX_CHANNELS] = { NULL };
+ AUDIO_CHANNEL_TYPE inChTypes[PCM_DMX_MAX_CHANNELS];
+ UCHAR inChIndices[PCM_DMX_MAX_CHANNELS];
+ UCHAR numChPerGrp[2][PCM_DMX_MAX_CHANNEL_GROUPS];
+ int nContentCh = 0; /* Number of channels with content */
+ int nEmptyCh = 0; /* Number of channels with content */
+ int ch, chGrp, isCompatible = 1;
+
+ /* Do not change the signalling which is the channel types and indices.
+ Just reorder and add channels. So first save the input signalling. */
+ FDKmemcpy(inChTypes, channelType, PCM_DMX_MAX_CHANNELS*sizeof(AUDIO_CHANNEL_TYPE));
+ FDKmemcpy(inChIndices, channelIndices, PCM_DMX_MAX_CHANNELS*sizeof(UCHAR));
+
+ /* Set this stages output stride and channel mode: */
+ outStride = (fInterleaved) ? numOutChannels : 1;
+ outChMode = outChModeTable[numOutChannels];
+
+ /* Check if input channel config can be easily mapped to the desired output config. */
+ for (chGrp = 0; chGrp < PCM_DMX_MAX_CHANNEL_GROUPS; chGrp += 1) {
+ numChPerGrp[IN][chGrp] = (inChMode >> (chGrp*4)) & 0xF;
+ numChPerGrp[OUT][chGrp] = (outChMode >> (chGrp*4)) & 0xF;
+
+ if (numChPerGrp[IN][chGrp] > numChPerGrp[OUT][chGrp]) {
+ isCompatible = 0;
+ break;
+ }
+ }
+ if ( isCompatible ) {
+ /* Get new channel description and channel
+ * mapping for the desired output channel mode. */
+ getChannelDescription(
+ outChMode,
+ channelMapping,
+ channelType,
+ channelIndices,
+ outOffsetTable
+ );
+ /* If the input config has a back center channel but the output
+ config has not, copy it to left and right (if available). */
+ if ( (numChPerGrp[IN][CH_GROUP_REAR]%2)
+ && !(numChPerGrp[OUT][CH_GROUP_REAR]%2) ) {
+ if (numChPerGrp[IN][CH_GROUP_REAR] == 1) {
+ inOffsetTable[RIGHT_REAR_CHANNEL] = inOffsetTable[LEFT_REAR_CHANNEL];
+ } else if (numChPerGrp[IN][CH_GROUP_REAR] == 3) {
+ inOffsetTable[RIGHT_MULTIPRPS_CHANNEL] = inOffsetTable[LEFT_MULTIPRPS_CHANNEL];
+ }
+ }
+ }
+ else {
+ /* Just copy and extend the original config */
+ FDKmemcpy(outOffsetTable, inOffsetTable, PCM_DMX_MAX_CHANNELS*sizeof(UCHAR));
+ }
+
+ /* Set I/O channel pointer.
+ Note: The following assignment algorithm clears the channel offset tables.
+ Thus they can not be used afterwards. */
+ for (ch = 0; ch < PCM_DMX_MAX_CHANNELS; ch+=1) {
+ if ( (outOffsetTable[ch] < 255)
+ && (inOffsetTable[ch] < 255) )
+ { /* Set I/O pointer: */
+ pIn[nContentCh] = &pPcmBuf[inOffsetTable[ch]*offset+(frameSize-1)*inStride];
+ pOut[nContentCh] = &pPcmBuf[outOffsetTable[ch]*offset+(frameSize-1)*outStride];
+ /* Update signalling */
+ channelType[outOffsetTable[ch]] = inChTypes[inOffsetTable[ch]];
+ channelIndices[outOffsetTable[ch]] = inChIndices[inOffsetTable[ch]];
+ inOffsetTable[ch] = 255;
+ outOffsetTable[ch] = 255;
+ nContentCh += 1;
+ }
+ }
+ if ( isCompatible ) {
+ /* Assign the remaining input channels.
+ This is just a safety appliance. We should never need it. */
+ for (ch = 0; ch < PCM_DMX_MAX_CHANNELS; ch+=1) {
+ if (inOffsetTable[ch] < 255) {
+ int outCh;
+ for (outCh = 0 ; outCh < PCM_DMX_MAX_CHANNELS; outCh += 1) {
+ if (outOffsetTable[outCh] < 255) {
+ break;
+ }
+ }
+ /* Set I/O pointer: */
+ pIn[nContentCh] = &pPcmBuf[inOffsetTable[ch]*offset+(frameSize-1)*inStride];
+ pOut[nContentCh] = &pPcmBuf[outOffsetTable[outCh]*offset+(frameSize-1)*outStride];
+ /* Update signalling */
+ channelType[outOffsetTable[outCh]] = inChTypes[inOffsetTable[ch]];
+ channelIndices[outOffsetTable[outCh]] = inChIndices[inOffsetTable[ch]];
+ inOffsetTable[ch] = 255;
+ outOffsetTable[outCh] = 255;
+ nContentCh += 1;
+ }
+ }
+ /* Set the remaining output channel pointer */
+ for (ch = 0; ch < PCM_DMX_MAX_CHANNELS; ch+=1) {
+ if (outOffsetTable[ch] < 255) {
+ pOut[nContentCh+nEmptyCh] = &pPcmBuf[outOffsetTable[ch]*offset+(frameSize-1)*outStride];
+ /* Expand output signalling */
+ channelType[outOffsetTable[ch]] = ACT_NONE;
+ channelIndices[outOffsetTable[ch]] = nEmptyCh;
+ outOffsetTable[ch] = 255;
+ nEmptyCh += 1;
+ }
+ }
+ }
+ else {
+ /* Set the remaining output channel pointer */
+ for (ch = nContentCh; ch < numOutChannels; ch+=1) {
+ pOut[ch] = &pPcmBuf[ch*offset+(frameSize-1)*outStride];
+ /* Expand output signalling */
+ channelType[ch] = ACT_NONE;
+ channelIndices[ch] = nEmptyCh;
+ nEmptyCh += 1;
+ }
+ }
+
+ /* First copy the channels that have signal */
+ for (sample = 0; sample < frameSize; sample+=1) {
+ INT_PCM tIn[PCM_DMX_MAX_CHANNELS];
+ /* Read all channel samples */
+ for (ch = 0; ch < nContentCh; ch+=1) {
+ tIn[ch] = *pIn[ch];
+ pIn[ch] -= inStride;
+ }
+ /* Write all channel samples */
+ for (ch = 0; ch < nContentCh; ch+=1) {
+ *pOut[ch] = tIn[ch];
+ pOut[ch] -= outStride;
+ }
+ }
+
+ /* Clear all the other channels */
+ for (sample = 0; sample < frameSize; sample++) {
+ for (ch = nContentCh; ch < numOutChannels; ch+=1) {
+ *pOut[ch] = (INT_PCM)0;
+ pOut[ch] -= outStride;
+ }
+ }
+ }
+#endif /* if (PCM_DMX_MAX_OUT_CHANNELS > 2) */
+
+ /* update the number of output channels */
+ *nChannels = numOutChannels;
} /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
else
+#endif /* PCM_CHANNEL_EXTENSION_ENABLE */
if ( numInChannels == numOutChannels )
{
/* Don't need to change the channel description here */
@@ -1143,8 +2348,9 @@ PCMDMX_ERROR pcmDmx_ApplyFrame (
{
case 2:
{ /* Set up channel pointer */
- INT_PCM *pInLF, *pInRF, *pOutL, *pOutR;
- FIXP_SGL flev;
+ INT_PCM *pInPcm[PCM_DMX_MAX_CHANNELS];
+ INT_PCM *pOutL, *pOutR;
+ FIXP_DMX flev;
UINT sample;
int inStride, outStride, offset;
@@ -1160,41 +2366,41 @@ PCMDMX_ERROR pcmDmx_ApplyFrame (
}
/* Set input channel pointer */
- pInLF = &pPcmBuf[inOffsetTable[LEFT_FRONT_CHANNEL]*offset];
- pInRF = &pPcmBuf[inOffsetTable[RIGHT_FRONT_CHANNEL]*offset];
+ pInPcm[LEFT_FRONT_CHANNEL] = &pPcmBuf[inOffsetTable[LEFT_FRONT_CHANNEL]*offset];
+ pInPcm[RIGHT_FRONT_CHANNEL] = &pPcmBuf[inOffsetTable[RIGHT_FRONT_CHANNEL]*offset];
/* Set output channel pointer (same as input) */
- pOutL = pInLF;
- pOutR = pInRF;
+ pOutL = pInPcm[LEFT_FRONT_CHANNEL];
+ pOutR = pInPcm[RIGHT_FRONT_CHANNEL];
/* Set downmix levels: */
- flev = ATTENUATION_FACTOR_1; /* 0.707 */
+ flev = FL2FXCONST_DMX(0.70710678f);
/* 2/0 input: */
switch (dualChannelMode)
{
case CH1_MODE: /* L' = 0.707 * Ch1; R' = 0.707 * Ch1 */
for (sample = 0; sample < frameSize; sample++) {
*pOutL = *pOutR =
- (INT_PCM)SATURATE_RIGHT_SHIFT(fMult((FIXP_PCM)*pInLF, flev), DFRACT_BITS-SAMPLE_BITS, SAMPLE_BITS);
+ (INT_PCM)SATURATE_RIGHT_SHIFT(fMult((FIXP_PCM)*pInPcm[LEFT_FRONT_CHANNEL], flev), DFRACT_BITS-SAMPLE_BITS, SAMPLE_BITS);
- pInLF += inStride;
+ pInPcm[LEFT_FRONT_CHANNEL] += inStride;
pOutL += outStride; pOutR += outStride;
}
break;
case CH2_MODE: /* L' = 0.707 * Ch2; R' = 0.707 * Ch2 */
for (sample = 0; sample < frameSize; sample++) {
*pOutL = *pOutR =
- (INT_PCM)SATURATE_RIGHT_SHIFT(fMult((FIXP_PCM)*pInRF, flev), DFRACT_BITS-SAMPLE_BITS, SAMPLE_BITS);
+ (INT_PCM)SATURATE_RIGHT_SHIFT(fMult((FIXP_PCM)*pInPcm[RIGHT_FRONT_CHANNEL], flev), DFRACT_BITS-SAMPLE_BITS, SAMPLE_BITS);
- pInRF += inStride;
+ pInPcm[RIGHT_FRONT_CHANNEL] += inStride;
pOutL += outStride; pOutR += outStride;
}
break;
case MIXED_MODE: /* L' = 0.5*Ch1 + 0.5*Ch2; R' = 0.5*Ch1 + 0.5*Ch2 */
for (sample = 0; sample < frameSize; sample++) {
- *pOutL = *pOutR = (*pInLF >> 1) + (*pInRF >> 1);
+ *pOutL = *pOutR = (*pInPcm[LEFT_FRONT_CHANNEL] >> 1) + (*pInPcm[RIGHT_FRONT_CHANNEL] >> 1);
- pInLF += inStride; pInRF += inStride;
+ pInPcm[LEFT_FRONT_CHANNEL] += inStride; pInPcm[RIGHT_FRONT_CHANNEL] += inStride;
pOutL += outStride; pOutR += outStride;
}
break;
@@ -1254,23 +2460,37 @@ PCMDMX_ERROR pcmDmx_GetLibInfo( LIB_INFO *info )
if (i == FDK_MODULE_LAST) {
return PCMDMX_UNKNOWN;
}
- info += i;
/* Add the library info */
- info->module_id = FDK_PCMDMX;
- info->version = LIB_VERSION(PCMDMX_LIB_VL0, PCMDMX_LIB_VL1, PCMDMX_LIB_VL2);
- LIB_VERSION_STRING(info);
- info->build_date = PCMDMX_LIB_BUILD_DATE;
- info->build_time = PCMDMX_LIB_BUILD_TIME;
- info->title = PCMDMX_LIB_TITLE;
+ info[i].module_id = FDK_PCMDMX;
+ info[i].version = LIB_VERSION(PCMDMX_LIB_VL0, PCMDMX_LIB_VL1, PCMDMX_LIB_VL2);
+ LIB_VERSION_STRING(info+i);
+ info[i].build_date = PCMDMX_LIB_BUILD_DATE;
+ info[i].build_time = PCMDMX_LIB_BUILD_TIME;
+ info[i].title = PCMDMX_LIB_TITLE;
/* Set flags */
- info->flags = 0
+ info[i].flags = 0
+#ifdef PCM_DOWNMIX_ENABLE
| CAPF_DMX_BLIND /* At least blind downmixing is possible */
+ #ifdef PCE_METADATA_ENABLE
| CAPF_DMX_PCE /* Guided downmix with data from MPEG-2/4 Program Config Elements (PCE). */
+ #ifdef ARIB_MIXDOWN_ENABLE
+ | CAPF_DMX_ARIB /* PCE guided downmix with slightly different equations and levels. */
+ #endif
+ #endif /* PCE_METADATA_ENABLE */
+ #ifdef DSE_METADATA_ENABLE
| CAPF_DMX_DVB /* Guided downmix with data from DVB ancillary data fields. */
+ #endif
+#endif /* PCM_DOWNMIX_ENABLE */
+#ifdef PCM_CHANNEL_EXTENSION_ENABLE
+ | CAPF_DMX_CH_EXP /* Simple upmixing by dublicating channels or adding zero channels. */
+#endif
;
+ /* Add lib info for FDK tools (if not yet done). */
+ FDK_toolsGetLibInfo(info);
+
return PCMDMX_OK;
}
diff --git a/libSBRdec/include/sbrdecoder.h b/libSBRdec/include/sbrdecoder.h
index 13707e0..174fb5c 100644
--- a/libSBRdec/include/sbrdecoder.h
+++ b/libSBRdec/include/sbrdecoder.h
@@ -145,6 +145,8 @@ typedef enum
SBR_SYSTEM_BITSTREAM_DELAY, /*!< System: Switch to enable an additional SBR bitstream delay of one frame. */
SBR_QMF_MODE, /*!< Set QMF mode, either complex or low power. */
SBR_LD_QMF_TIME_ALIGN, /*!< Set QMF type, either LD-MPS or CLDFB. Relevant for ELD streams only. */
+ SBR_FLUSH_DATA, /*!< Set internal state to flush the decoder with the next process call. */
+ SBR_CLEAR_HISTORY, /*!< Clear all internal states (delay lines, QMF states, ...). */
SBR_BS_INTERRUPTION /*!< Signal bit stream interruption. Value is ignored. */
} SBRDEC_PARAM;
@@ -308,7 +310,7 @@ SBR_ERROR sbrDecoder_Apply ( HANDLE_SBRDECODER self,
INT_PCM *timeData,
int *numChannels,
int *sampleRate,
- const UCHAR channelMapping[(6)],
+ const UCHAR channelMapping[(8)],
const int interleaved,
const int coreDecodedOk,
UCHAR *psDecoded );
@@ -329,6 +331,13 @@ SBR_ERROR sbrDecoder_Close ( HANDLE_SBRDECODER *self );
*/
INT sbrDecoder_GetLibInfo( LIB_INFO *info );
+/**
+ * \brief Determine the modules output signal delay in samples.
+ * \param self SBR decoder handle.
+ * \return The number of samples signal delay added by the module.
+ */
+UINT sbrDecoder_GetDelay( const HANDLE_SBRDECODER self );
+
#ifdef __cplusplus
}
diff --git a/libSBRdec/src/env_extr.h b/libSBRdec/src/env_extr.h
index 5db6d3d..ab6b704 100644
--- a/libSBRdec/src/env_extr.h
+++ b/libSBRdec/src/env_extr.h
@@ -179,6 +179,9 @@ typedef FREQ_BAND_DATA *HANDLE_FREQ_BAND_DATA;
#define SBRDEC_LOW_POWER 16 /* Flag indicating that Low Power QMF mode shall be used. */
#define SBRDEC_PS_DECODED 32 /* Flag indicating that PS was decoded and rendered. */
#define SBRDEC_LD_MPS_QMF 512 /* Flag indicating that the LD-MPS QMF shall be used. */
+#define SBRDEC_DOWNSAMPLE 8192 /* Flag indicating that the downsampling mode is used. */
+#define SBRDEC_FLUSH 16384 /* Flag is used to flush all elements in use. */
+#define SBRDEC_FORCE_RESET 32768 /* Flag is used to force a reset of all elements in use. */
#define SBRDEC_HDR_STAT_RESET 1
#define SBRDEC_HDR_STAT_UPDATE 2
diff --git a/libSBRdec/src/sbr_ram.cpp b/libSBRdec/src/sbr_ram.cpp
index 6ae941f..c1c2499 100644
--- a/libSBRdec/src/sbr_ram.cpp
+++ b/libSBRdec/src/sbr_ram.cpp
@@ -107,19 +107,19 @@ amm-info@iis.fraunhofer.de
/*! SBR Decoder main structure */
C_ALLOC_MEM(Ram_SbrDecoder, struct SBR_DECODER_INSTANCE, 1)
/*! SBR Decoder element data <br>
- Dimension: (4) */
-C_ALLOC_MEM2(Ram_SbrDecElement, SBR_DECODER_ELEMENT, 1, (4))
+ Dimension: (8) */
+C_ALLOC_MEM2(Ram_SbrDecElement, SBR_DECODER_ELEMENT, 1, (8))
/*! SBR Decoder individual channel data <br>
- Dimension: (6) */
-C_ALLOC_MEM2(Ram_SbrDecChannel, SBR_CHANNEL, 1, (6)+1)
+ Dimension: (8) */
+C_ALLOC_MEM2(Ram_SbrDecChannel, SBR_CHANNEL, 1, (8)+1)
/*! Filter states for QMF-synthesis. <br>
- Dimension: #(6) * (#QMF_FILTER_STATE_SYN_SIZE-#(64)) */
-C_AALLOC_MEM2_L(Ram_sbr_QmfStatesSynthesis, FIXP_QSS, (640)-(64), (6)+1, SECT_DATA_L1)
+ Dimension: #(8) * (#QMF_FILTER_STATE_SYN_SIZE-#(64)) */
+C_AALLOC_MEM2_L(Ram_sbr_QmfStatesSynthesis, FIXP_QSS, (640)-(64), (8)+1, SECT_DATA_L1)
/*! Delayed spectral data needed for the dynamic framing of SBR.
For mp3PRO, 1/3 of a frame is buffered (#(6) 6) */
-C_AALLOC_MEM2(Ram_sbr_OverlapBuffer, FIXP_DBL, 2 * (6) * (64), (6)+1)
+C_AALLOC_MEM2(Ram_sbr_OverlapBuffer, FIXP_DBL, 2 * (6) * (64), (8)+1)
/*! Static Data of PS */
diff --git a/libSBRdec/src/sbr_ram.h b/libSBRdec/src/sbr_ram.h
index 8fc2dae..f12631d 100644
--- a/libSBRdec/src/sbr_ram.h
+++ b/libSBRdec/src/sbr_ram.h
@@ -118,8 +118,8 @@ typedef struct
struct SBR_DECODER_INSTANCE
{
- SBR_DECODER_ELEMENT *pSbrElement[(4)];
- SBR_HEADER_DATA sbrHeader[(4)][(1)+1]; /* Sbr header for each individual channel of an element */
+ SBR_DECODER_ELEMENT *pSbrElement[(8)];
+ SBR_HEADER_DATA sbrHeader[(8)][(1)+1]; /* Sbr header for each individual channel of an element */
FIXP_DBL *workBuffer1;
FIXP_DBL *workBuffer2;
diff --git a/libSBRdec/src/sbrdec_drc.h b/libSBRdec/src/sbrdec_drc.h
index 872c6a0..7eed53a 100644
--- a/libSBRdec/src/sbrdec_drc.h
+++ b/libSBRdec/src/sbrdec_drc.h
@@ -95,7 +95,7 @@ amm-info@iis.fraunhofer.de
-#define SBRDEC_MAX_DRC_CHANNELS (6)
+#define SBRDEC_MAX_DRC_CHANNELS (8)
#define SBRDEC_MAX_DRC_BANDS ( 16 )
typedef struct
diff --git a/libSBRdec/src/sbrdecoder.cpp b/libSBRdec/src/sbrdecoder.cpp
index 26b2ea2..16b0bbc 100644
--- a/libSBRdec/src/sbrdecoder.cpp
+++ b/libSBRdec/src/sbrdecoder.cpp
@@ -137,7 +137,7 @@ amm-info@iis.fraunhofer.de
/* Decoder library info */
#define SBRDECODER_LIB_VL0 2
#define SBRDECODER_LIB_VL1 2
-#define SBRDECODER_LIB_VL2 3
+#define SBRDECODER_LIB_VL2 6
#define SBRDECODER_LIB_TITLE "SBR Decoder"
#define SBRDECODER_LIB_BUILD_DATE __DATE__
#define SBRDECODER_LIB_BUILD_TIME __TIME__
@@ -251,8 +251,10 @@ SBR_ERROR sbrDecoder_ResetElement (
if ( sampleRateIn == sampleRateOut ) {
synDownsampleFac = 2;
+ self->flags |= SBRDEC_DOWNSAMPLE;
} else {
synDownsampleFac = 1;
+ self->flags &= ~SBRDEC_DOWNSAMPLE;
}
self->synDownsampleFac = synDownsampleFac;
@@ -428,7 +430,7 @@ SBR_ERROR sbrDecoder_InitElement (
int nSbrElementsStart = self->numSbrElements;
/* Check core codec AOT */
- if (! sbrDecoder_isCoreCodecValid(coreCodec) || elementIndex >= (4)) {
+ if (! sbrDecoder_isCoreCodecValid(coreCodec) || elementIndex >= (8)) {
sbrError = SBRDEC_UNSUPPORTED_CONFIG;
goto bail;
}
@@ -444,6 +446,7 @@ SBR_ERROR sbrDecoder_InitElement (
&& self->coreCodec == coreCodec
&& self->pSbrElement[elementIndex] != NULL
&& self->pSbrElement[elementIndex]->elementID == elementID
+ && !(self->flags & SBRDEC_FORCE_RESET)
)
{
/* Nothing to do */
@@ -550,8 +553,9 @@ bail:
if (nSbrElementsStart < self->numSbrElements) {
/* Free the memory allocated for this element */
sbrDecoder_DestroyElement( self, elementIndex );
- } else if (self->pSbrElement[elementIndex] != NULL) {
- /* Set error flag to trigger concealment */
+ } else if ( (self->pSbrElement[elementIndex] != NULL)
+ && (elementIndex < (8)))
+ { /* Set error flag to trigger concealment */
self->pSbrElement[elementIndex]->frameErrorFlag[self->pSbrElement[elementIndex]->useFrameSlot] = 1;
}
}
@@ -615,7 +619,7 @@ INT sbrDecoder_Header (
SBR_ERROR sbrError = SBRDEC_OK;
int headerIndex;
- if ( self == NULL || elementIndex > (4) )
+ if ( self == NULL || elementIndex > (8) )
{
return SBRDEC_UNSUPPORTED_CONFIG;
}
@@ -728,6 +732,24 @@ SBR_ERROR sbrDecoder_SetParam (HANDLE_SBRDECODER self,
}
}
break;
+ case SBR_FLUSH_DATA:
+ if (value != 0) {
+ if (self == NULL) {
+ errorStatus = SBRDEC_NOT_INITIALIZED;
+ } else {
+ self->flags |= SBRDEC_FLUSH;
+ }
+ }
+ break;
+ case SBR_CLEAR_HISTORY:
+ if (value != 0) {
+ if (self == NULL) {
+ errorStatus = SBRDEC_NOT_INITIALIZED;
+ } else {
+ self->flags |= SBRDEC_FORCE_RESET;
+ }
+ }
+ break;
case SBR_BS_INTERRUPTION:
{
int elementIndex;
@@ -738,7 +760,8 @@ SBR_ERROR sbrDecoder_SetParam (HANDLE_SBRDECODER self,
}
/* Loop over SBR elements */
- for (elementIndex = 0; elementIndex < self->numSbrElements; elementIndex++)
+ for (elementIndex = 0; elementIndex < self->numSbrElements; elementIndex++) {
+ if (self->pSbrElement[elementIndex] != NULL)
{
HANDLE_SBR_HEADER_DATA hSbrHeader;
int headerIndex = getHeaderSlot(self->pSbrElement[elementIndex]->useFrameSlot,
@@ -750,7 +773,7 @@ SBR_ERROR sbrDecoder_SetParam (HANDLE_SBRDECODER self,
This switches off bitstream parsing until a new header arrives. */
hSbrHeader->syncState = UPSAMPLING;
hSbrHeader->status |= SBRDEC_HDR_STAT_UPDATE;
- }
+ } }
}
break;
default:
@@ -767,7 +790,7 @@ SBRDEC_DRC_CHANNEL * sbrDecoder_drcGetChannel( const HANDLE_SBRDECODER self, con
SBRDEC_DRC_CHANNEL *pSbrDrcChannelData = NULL;
int elementIndex, elChanIdx=0, numCh=0;
- for (elementIndex = 0; (elementIndex < (4)) && (numCh <= channel); elementIndex++)
+ for (elementIndex = 0; (elementIndex < (8)) && (numCh <= channel); elementIndex++)
{
SBR_DECODER_ELEMENT *pSbrElement = self->pSbrElement[elementIndex];
int c, elChannels;
@@ -829,7 +852,7 @@ SBR_ERROR sbrDecoder_drcFeedChannel ( HANDLE_SBRDECODER self,
if (self == NULL) {
return SBRDEC_NOT_INITIALIZED;
}
- if (ch > (6) || pNextFact_mag == NULL) {
+ if (ch > (8) || pNextFact_mag == NULL) {
return SBRDEC_SET_PARAM_FAIL;
}
@@ -874,7 +897,7 @@ void sbrDecoder_drcDisable ( HANDLE_SBRDECODER self,
SBRDEC_DRC_CHANNEL *pSbrDrcChannelData = NULL;
if ( (self == NULL)
- || (ch > (6))
+ || (ch > (8))
|| (self->numSbrElements == 0)
|| (self->numSbrChannels == 0) ) {
return;
@@ -1119,6 +1142,10 @@ SBR_ERROR sbrDecoder_Parse(
}
}
}
+ } else {
+ /* The returned bit count will not be the actual payload size since we did not
+ parse the frame data. Return an error so that the caller can react respectively. */
+ errorStatus = SBRDEC_PARSE_ERROR;
}
if (!fDoDecodeSbrData) {
@@ -1198,6 +1225,15 @@ sbrDecoder_DecodeElement (
int stereo = (hSbrElement->elementID == ID_CPE) ? 1 : 0;
int numElementChannels = hSbrElement->nChannels; /* Number of channels of the current SBR element */
+ if (self->flags & SBRDEC_FLUSH) {
+ /* Move frame pointer to the next slot which is up to be decoded/applied next */
+ hSbrElement->useFrameSlot = (hSbrElement->useFrameSlot+1) % (self->numDelayFrames+1);
+ /* Update header and frame data pointer because they have already been set */
+ hSbrHeader = &self->sbrHeader[elementIndex][hSbrElement->useHeaderSlot[hSbrElement->useFrameSlot]];
+ hFrameDataLeft = &hSbrElement->pSbrChannel[0]->frameData[hSbrElement->useFrameSlot];
+ hFrameDataRight = &hSbrElement->pSbrChannel[1]->frameData[hSbrElement->useFrameSlot];
+ }
+
/* Update the header error flag */
hSbrHeader->frameErrorFlag = hSbrElement->frameErrorFlag[hSbrElement->useFrameSlot];
@@ -1375,7 +1411,7 @@ SBR_ERROR sbrDecoder_Apply ( HANDLE_SBRDECODER self,
INT_PCM *timeData,
int *numChannels,
int *sampleRate,
- const UCHAR channelMapping[(6)],
+ const UCHAR channelMapping[(8)],
const int interleaved,
const int coreDecodedOk,
UCHAR *psDecoded )
@@ -1472,6 +1508,10 @@ SBR_ERROR sbrDecoder_Apply ( HANDLE_SBRDECODER self,
+ /* Clear reset and flush flag because everything seems to be done successfully. */
+ self->flags &= ~SBRDEC_FORCE_RESET;
+ self->flags &= ~SBRDEC_FLUSH;
+
bail:
return errorStatus;
@@ -1496,7 +1536,7 @@ SBR_ERROR sbrDecoder_Close ( HANDLE_SBRDECODER *pSelf )
FreeRam_SbrDecWorkBuffer2(&self->workBuffer2);
}
- for (i = 0; i < (4); i++) {
+ for (i = 0; i < (8); i++) {
sbrDecoder_DestroyElement( self, i );
}
@@ -1544,3 +1584,34 @@ INT sbrDecoder_GetLibInfo( LIB_INFO *info )
return 0;
}
+
+UINT sbrDecoder_GetDelay( const HANDLE_SBRDECODER self )
+{
+ UINT outputDelay = 0;
+
+ if ( self != NULL) {
+ UINT flags = self->flags;
+
+ /* See chapter 1.6.7.2 of ISO/IEC 14496-3 for the GA-SBR figures below. */
+
+ /* Are we initialized? */
+ if ( (self->numSbrChannels > 0)
+ && (self->numSbrElements > 0) )
+ {
+ /* Add QMF synthesis delay */
+ if ( (flags & SBRDEC_ELD_GRID)
+ && IS_LOWDELAY(self->coreCodec) ) {
+ /* Low delay SBR: */
+ {
+ outputDelay += (flags & SBRDEC_DOWNSAMPLE) ? 32 : 64; /* QMF synthesis */
+ }
+ }
+ else if (!IS_USAC(self->coreCodec)) {
+ /* By the method of elimination this is the GA (AAC-LC, HE-AAC, ...) branch: */
+ outputDelay += (flags & SBRDEC_DOWNSAMPLE) ? 481 : 962;
+ }
+ }
+ }
+
+ return (outputDelay);
+}
diff --git a/libSYS/include/FDK_audio.h b/libSYS/include/FDK_audio.h
index c8d9c19..0660f4c 100644
--- a/libSYS/include/FDK_audio.h
+++ b/libSYS/include/FDK_audio.h
@@ -232,6 +232,14 @@ typedef enum
} AUDIO_OBJECT_TYPE;
+#define IS_USAC(aot) \
+ ((aot) == AOT_USAC \
+|| (aot) == AOT_RSVD50)
+
+#define IS_LOWDELAY(aot) \
+ ((aot) == AOT_ER_AAC_LD \
+|| (aot) == AOT_ER_AAC_ELD)
+
/** Channel Mode ( 1-7 equals MPEG channel configurations, others are arbitrary). */
typedef enum {
MODE_INVALID = -1,
@@ -263,17 +271,29 @@ typedef enum {
} CHANNEL_MODE;
-/** Speaker description tags */
+/**
+ * Speaker description tags.
+ * Do not change the enumeration values unless it keeps the following segmentation:
+ * - Bit 0-3: Horizontal postion (0: none, 1: front, 2: side, 3: back, 4: lfe)
+ * - Bit 4-7: Vertical position (0: normal, 1: top, 2: bottom)
+ */
typedef enum {
- ACT_NONE,
- ACT_FRONT,
- ACT_SIDE,
- ACT_BACK,
- ACT_LFE,
- ACT_FRONT_TOP,
- ACT_SIDE_TOP,
- ACT_BACK_TOP,
- ACT_TOP /* Ts */
+ ACT_NONE = 0x00,
+ ACT_FRONT = 0x01, /*!< Front speaker position (at normal height) */
+ ACT_SIDE = 0x02, /*!< Side speaker position (at normal height) */
+ ACT_BACK = 0x03, /*!< Back speaker position (at normal height) */
+ ACT_LFE = 0x04, /*!< Low frequency effect speaker postion (front) */
+
+ ACT_TOP = 0x10, /*!< Top speaker area (for combination with speaker positions) */
+ ACT_FRONT_TOP = 0x11, /*!< Top front speaker = (ACT_FRONT|ACT_TOP) */
+ ACT_SIDE_TOP = 0x12, /*!< Top side speaker = (ACT_SIDE |ACT_TOP) */
+ ACT_BACK_TOP = 0x13, /*!< Top back speaker = (ACT_BACK |ACT_TOP) */
+
+ ACT_BOTTOM = 0x20, /*!< Bottom speaker area (for combination with speaker positions) */
+ ACT_FRONT_BOTTOM = 0x21, /*!< Bottom front speaker = (ACT_FRONT|ACT_BOTTOM) */
+ ACT_SIDE_BOTTOM = 0x22, /*!< Bottom side speaker = (ACT_SIDE |ACT_BOTTOM) */
+ ACT_BACK_BOTTOM = 0x23 /*!< Bottom back speaker = (ACT_BACK |ACT_BOTTOM) */
+
} AUDIO_CHANNEL_TYPE;
typedef enum
diff --git a/libSYS/src/genericStds.cpp b/libSYS/src/genericStds.cpp
index ef1d4c2..d0b4a90 100644
--- a/libSYS/src/genericStds.cpp
+++ b/libSYS/src/genericStds.cpp
@@ -99,7 +99,7 @@ amm-info@iis.fraunhofer.de
/* library info */
#define SYS_LIB_VL0 1
#define SYS_LIB_VL1 3
-#define SYS_LIB_VL2 4
+#define SYS_LIB_VL2 6
#define SYS_LIB_TITLE "System Integration Library"
#define SYS_LIB_BUILD_DATE __DATE__
#define SYS_LIB_BUILD_TIME __TIME__